|
@@ -6,7 +6,7 @@
|
|
|
* 用到费率的规则必须有feeRateID属性,当有该属性时,会自动显示费率值。
|
|
|
*/
|
|
|
|
|
|
-let defaultBillTemplate = {
|
|
|
+/*let defaultBillTemplate = {
|
|
|
ID: 15,
|
|
|
name: "清单公式",
|
|
|
calcItems: [
|
|
@@ -98,7 +98,7 @@ let defaultBillTemplate = {
|
|
|
memo: ''
|
|
|
}
|
|
|
]
|
|
|
-};
|
|
|
+};*/
|
|
|
|
|
|
const baseCalcType = {baseCalc: 0, adjustCalc: 1, budgetCalc: 2, diffCalc: 3, offerCalc: 4};
|
|
|
|
|
@@ -434,7 +434,7 @@ class CalcProgram {
|
|
|
me.calcBases = rationCalcBase;
|
|
|
me.templates = this.project.calcProgram.datas.templates;
|
|
|
|
|
|
- me.templates.push(defaultBillTemplate);
|
|
|
+ // me.templates.push(defaultBillTemplate);
|
|
|
// 先编译公用的基础数据
|
|
|
me.compilePublics();
|
|
|
for (let t of me.templates){
|
|
@@ -595,7 +595,30 @@ class CalcProgram {
|
|
|
treeNode.source.children.length === 0;
|
|
|
};
|
|
|
|
|
|
- // 仅内部调用。注意:外部不能直接使用,因为这里传入的树节点必须有一定的初始化。
|
|
|
+ isNullBill(treeNode){
|
|
|
+ let me = this;
|
|
|
+ return me.isLeafBill(treeNode) && (treeNode.children.length ===0) && (!treeNode.data.calcBase);
|
|
|
+ };
|
|
|
+
|
|
|
+ initFeeField(treeNode, fieldName){
|
|
|
+ if (!treeNode.data.fees) {
|
|
|
+ treeNode.data.fees = [];
|
|
|
+ treeNode.data.feesIndex = {};
|
|
|
+ };
|
|
|
+ if (!treeNode.data.feesIndex[fieldName]) {
|
|
|
+ let fee = {
|
|
|
+ 'fieldName': fieldName,
|
|
|
+ 'unitFee': 0,
|
|
|
+ 'totalFee': 0,
|
|
|
+ 'tenderUnitFee': 0,
|
|
|
+ 'tenderTotalFee': 0
|
|
|
+ };
|
|
|
+ treeNode.data.fees.push(fee);
|
|
|
+ treeNode.data.feesIndex[fieldName] = fee;
|
|
|
+ };
|
|
|
+ };
|
|
|
+
|
|
|
+ // 仅内部调用。注意:外部不能直接使用,因为这里传入的树节点必须有一定的初始化。
|
|
|
InnerCalc(treeNode){
|
|
|
let me = this;
|
|
|
let project = me.project;
|
|
@@ -657,10 +680,10 @@ class CalcProgram {
|
|
|
for (let item of objsArr) {
|
|
|
let data = item.data;
|
|
|
if (data.feesIndex && data.feesIndex[ft.type]) {
|
|
|
- buf = (buf + parseFloat(data.feesIndex[ft.type].unitFee)).toDecimal(decimalObj.process);
|
|
|
- btf = (btf + parseFloat(data.feesIndex[ft.type].totalFee)).toDecimal(decimalObj.process);
|
|
|
- btuf = (btuf + parseFloat(data.feesIndex[ft.type].tenderUnitFee)).toDecimal(decimalObj.process);
|
|
|
- bttf = (bttf + parseFloat(data.feesIndex[ft.type].tenderTotalFee)).toDecimal(decimalObj.process);
|
|
|
+ buf = (buf + parseFloatPlus(data.feesIndex[ft.type].unitFee)).toDecimal(decimalObj.process);
|
|
|
+ btf = (btf + parseFloatPlus(data.feesIndex[ft.type].totalFee)).toDecimal(decimalObj.process);
|
|
|
+ btuf = (btuf + parseFloatPlus(data.feesIndex[ft.type].tenderUnitFee)).toDecimal(decimalObj.process);
|
|
|
+ bttf = (bttf + parseFloatPlus(data.feesIndex[ft.type].tenderTotalFee)).toDecimal(decimalObj.process);
|
|
|
};
|
|
|
};
|
|
|
}
|
|
@@ -712,14 +735,35 @@ class CalcProgram {
|
|
|
};
|
|
|
treeNode.data.calcTemplate = {"calcItems": rst};
|
|
|
}
|
|
|
+ else if (treeNode.calcType == treeNodeCalcType.ctCommonUnitFee){
|
|
|
+ delete treeNode.data.gljList;
|
|
|
+ if (treeNode.data.calcBase) treeNode.data.calcBase = null; // 不能直接删除该属性,否则无法冲掉库中已存储的值
|
|
|
+ if (treeNode.data.programID) treeNode.data.programID = null;
|
|
|
+
|
|
|
+ let uf = (treeNode.data.feesIndex && treeNode.data.feesIndex.common && treeNode.data.feesIndex.common.unitFee) ? treeNode.data.feesIndex.common.unitFee : 0;
|
|
|
+ let tuf = (treeNode.data.feesIndex && treeNode.data.feesIndex.common && treeNode.data.feesIndex.common.tenderUnitFee) ? treeNode.data.feesIndex.common.tenderUnitFee : 0;
|
|
|
+ let q = treeNode.data.quantity ? treeNode.data.quantity : 0;
|
|
|
+ let tf = (uf * q).toDecimal(decimalObj.decimal('totalPrice', treeNode));
|
|
|
+ let ttf = (tuf * q).toDecimal(decimalObj.decimal('totalPrice', treeNode));
|
|
|
+
|
|
|
+ delete treeNode.data.fees; // 直接删掉再新增,不用一个个费判断更新,效率更高。
|
|
|
+ delete treeNode.data.feesIndex;
|
|
|
+ me.initFeeField(treeNode, 'common');
|
|
|
+ treeNode.data.feesIndex.common.unitFee = uf;
|
|
|
+ treeNode.data.feesIndex.common.totalFee = tf;
|
|
|
+ treeNode.data.feesIndex.common.tenderUnitFee = tuf;
|
|
|
+ treeNode.data.feesIndex.common.tenderTotalFee = ttf;
|
|
|
+
|
|
|
+ treeNode.data.calcTemplate = {"calcItems": []};
|
|
|
+ }
|
|
|
else{
|
|
|
// 叶子清单的公式计算:使用缺省清单计算程序。需要提供总金额作为计算基数(不需要工料机),然后每条按比例(费率)计算,不需要工料机明细。
|
|
|
if (treeNode.calcType == treeNodeCalcType.ctCalcBaseValue){
|
|
|
delete treeNode.data.gljList;
|
|
|
|
|
|
- if (treeNode.data.programID == undefined){
|
|
|
+/* if (treeNode.data.programID == undefined){
|
|
|
treeNode.data.programID = defaultBillTemplate.ID;
|
|
|
- };
|
|
|
+ };*/
|
|
|
}
|
|
|
else if (treeNode.calcType == treeNodeCalcType.ctRationCalcProgram) {
|
|
|
if (treeNode.data.type == rationType.volumePrice){
|
|
@@ -743,7 +787,8 @@ class CalcProgram {
|
|
|
let rations = project.Ration.getBillsSortRation(treeNode.source.getID());
|
|
|
treeNode.data.gljList = project.ration_glj.getGatherGljArrByRations(rations);
|
|
|
|
|
|
- if (treeNode.data.programID == undefined || treeNode.data.programID == defaultBillTemplate.ID){
|
|
|
+ // if (treeNode.data.programID == undefined || treeNode.data.programID == defaultBillTemplate.ID){
|
|
|
+ if (treeNode.data.programID == undefined){
|
|
|
treeNode.data.programID = projectInfoObj.projectInfo.property.engineering;
|
|
|
}
|
|
|
};
|
|
@@ -781,17 +826,19 @@ class CalcProgram {
|
|
|
let me = this;
|
|
|
let isRation = treeNode.sourceType === me.project.Ration.getSourceType();
|
|
|
let isBill = treeNode.sourceType === me.project.Bills.getSourceType();
|
|
|
- let isBillPriceCalc = me.project.projSetting.billsCalcMode === leafBillGetFeeType.billsPrice;
|
|
|
- let isLeafBill = me.isLeafBill(treeNode);
|
|
|
|
|
|
if (isRation){
|
|
|
treeNode.calcType = treeNodeCalcType.ctRationCalcProgram;
|
|
|
}
|
|
|
- else if (isLeafBill) {
|
|
|
+ else if (me.isNullBill(treeNode)){
|
|
|
+ treeNode.calcType = treeNodeCalcType.ctCommonUnitFee;
|
|
|
+ }
|
|
|
+ else if (me.isLeafBill(treeNode)) {
|
|
|
if (treeNode.children && treeNode.children.length > 0){
|
|
|
// me.calcLeafBillChildren(treeNode);
|
|
|
|
|
|
- if (isBillPriceCalc) // 清单单价计算模式下的叶子清单:取自己的计算程序ID,找到自己的计算程序计算。(汇总清单所有定额的工料机)
|
|
|
+ // 清单单价计算模式下的叶子清单:取自己的计算程序ID,找到自己的计算程序计算。(汇总清单所有定额的工料机)
|
|
|
+ if (me.project.projSetting.billsCalcMode === leafBillGetFeeType.billsPrice)
|
|
|
treeNode.calcType = treeNodeCalcType.ctBillCalcProgram;
|
|
|
else // 前三种计算模式下的叶子清单:汇总定额的计算程序的费用类别
|
|
|
treeNode.calcType = treeNodeCalcType.ctGatherRationsFees;
|