|
|
@@ -273,82 +273,33 @@ let calcTools = {
|
|
|
else
|
|
|
return 0;
|
|
|
},
|
|
|
+
|
|
|
+ // 该方法已精简,不支持价差基数的计算。
|
|
|
rationBaseFee: function (treeNode, gljTypes, priceType, isTender){
|
|
|
if (!treeNode.data.gljList) return 0;
|
|
|
let me = this, result = 0;
|
|
|
let price = 0, temp = 0, temp2 = 0;
|
|
|
-
|
|
|
- // 机械组成物价差: 机上人工、动力燃料
|
|
|
- if ((priceType == priceTypes.ptDiffPrice) && (gljTypes.includes(gljType.MACHINE_LABOUR) || gljTypes.includes(gljType.FUEL_POWER_FEE))){
|
|
|
- for (let glj of treeNode.data.gljList) {
|
|
|
- if ([gljType.GENERAL_MACHINE, gljType.INSTRUMENT].includes(glj.type)){
|
|
|
- if (isTender){
|
|
|
- calcTools.calcGLJTenderPrice(glj);
|
|
|
- calcTools.calcGLJTenderQty(treeNode, glj);
|
|
|
- };
|
|
|
- let mds = projectObj.project.composition.getCompositionByGLJ(glj);
|
|
|
- if (!mds) mds = [];
|
|
|
- for (let md of mds){
|
|
|
- if (gljTypes.includes(md.type)){
|
|
|
- let gljQ = isTender ? me.uiGLJQty(glj["tenderQuantity"]) : me.uiGLJQty(glj["quantity"]);
|
|
|
- let mdQ = me.uiGLJQty(md.consumption);
|
|
|
- let mdMP = isTender ? md["tenderPrice"] : md["marketPrice"];
|
|
|
- let mdAP = calcTools.hasAdjustPrice() ? md["adjustPrice"] : md["basePrice"];
|
|
|
- // if (aprice != mprice){
|
|
|
- temp = (temp + (gljQ * mdQ * mdMP).toDecimal(decimalObj.process)).toDecimal(decimalObj.process);
|
|
|
- temp2 = (temp2 + (gljQ * mdQ * mdAP).toDecimal(decimalObj.process)).toDecimal(decimalObj.process);
|
|
|
- // }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- // 普通基数计算(包括普通价差)
|
|
|
- else{
|
|
|
- for (let glj of treeNode.data.gljList) {
|
|
|
- if (gljTypes.indexOf(glj.type) >= 0) {
|
|
|
- if (isTender){
|
|
|
- calcTools.calcGLJTenderPrice(glj);
|
|
|
- calcTools.calcGLJTenderQty(treeNode, glj);
|
|
|
- };
|
|
|
- let qty = isTender ? me.uiGLJQty(glj["tenderQuantity"]) : me.uiGLJQty(glj["quantity"]);
|
|
|
- let mprice = isTender ? me.uiGLJPrice(glj["tenderPrice"], glj) : me.uiGLJPrice(glj["marketPrice"], glj);
|
|
|
- let aprice = calcTools.hasAdjustPrice() ? me.uiGLJPrice(glj["adjustPrice"], glj) : me.uiGLJPrice(glj["basePrice"], glj);
|
|
|
-
|
|
|
- if (priceType == priceTypes.ptDiffPrice){
|
|
|
- // if (aprice != mprice){
|
|
|
- temp = (temp + (qty * mprice).toDecimal(decimalObj.process)).toDecimal(decimalObj.process);
|
|
|
- temp2 = (temp2 + (qty * aprice).toDecimal(decimalObj.process)).toDecimal(decimalObj.process);
|
|
|
- // }
|
|
|
- }
|
|
|
- else {
|
|
|
- if (priceType == priceTypes.ptBasePrice){ price = me.uiGLJPrice(glj["basePrice"], glj);}
|
|
|
- else if (priceType == priceTypes.ptAdjustPrice){price = aprice;}
|
|
|
- else if (priceType == priceTypes.ptMarketPrice){price = mprice;}
|
|
|
- temp = (qty * price).toDecimal(decimalObj.process);
|
|
|
- result = (result + temp).toDecimal(decimalObj.process);
|
|
|
- };
|
|
|
+ for (let glj of treeNode.data.gljList) {
|
|
|
+ if (gljTypes.indexOf(glj.type) >= 0) {
|
|
|
+ if (isTender){
|
|
|
+ calcTools.calcGLJTenderPrice(glj);
|
|
|
+ calcTools.calcGLJTenderQty(treeNode, glj);
|
|
|
};
|
|
|
- };
|
|
|
- };
|
|
|
|
|
|
- if (priceType == priceTypes.ptDiffPrice){
|
|
|
- if (typeof isCQ2018 != 'undefined'){
|
|
|
- // 如下这一句十分重要!JS计算误差导致379.08-331.695=47.38499999999999。如果直接取2位会变成47.38。所以先取6位47.385,再取2位47.39。
|
|
|
- result = (temp - temp2).toDecimal(decimalObj.process);
|
|
|
- result = result.toDecimal(decimalObj.ration.unitPrice) // 重庆2018所有都是先汇总相减后再取舍
|
|
|
- }
|
|
|
- else{
|
|
|
- if (gljTypes == baseMaterialTypes)
|
|
|
- result = (temp - temp2).toDecimal(decimalObj.ration.unitPrice)
|
|
|
- else
|
|
|
- result = (temp.toDecimal(decimalObj.ration.unitPrice) - temp2.toDecimal(decimalObj.ration.unitPrice)).toDecimal(decimalObj.ration.unitPrice);
|
|
|
+ let gljQ = isTender ? me.uiGLJQty(glj["tenderQuantity"]) : me.uiGLJQty(glj["quantity"]);
|
|
|
+ let mprice = isTender ? me.uiGLJPrice(glj["tenderPrice"], glj) : me.uiGLJPrice(glj["marketPrice"], glj);
|
|
|
+ let aprice = calcTools.hasAdjustPrice() ? me.uiGLJPrice(glj["adjustPrice"], glj) : me.uiGLJPrice(glj["basePrice"], glj);
|
|
|
+
|
|
|
+ if (priceType == priceTypes.ptBasePrice){ price = me.uiGLJPrice(glj["basePrice"], glj);}
|
|
|
+ else if (priceType == priceTypes.ptAdjustPrice){price = aprice;}
|
|
|
+ else if (priceType == priceTypes.ptMarketPrice){price = mprice;}
|
|
|
+
|
|
|
+ let nodeQ = calcTools.uiNodeQty(treeNode);
|
|
|
+ temp = (price * gljQ * nodeQ).toDecimal(decimalObj.process);
|
|
|
+ result = (result + temp).toDecimal(decimalObj.process);
|
|
|
};
|
|
|
- }
|
|
|
- else{
|
|
|
- result = result.toDecimal(decimalObj.ration.unitPrice);
|
|
|
};
|
|
|
-
|
|
|
+ result = result.toDecimal(decimalObj.ration.totalPrice);
|
|
|
return result;
|
|
|
},
|
|
|
// masterTypeFilter 过滤机械机型:[]全部, [1,2]特大机械 [3,4]中小机械。 detailType 如机上人工费、机械折旧费等
|
|
|
@@ -379,13 +330,10 @@ let calcTools = {
|
|
|
mdSum = (mdSum).toDecimal(decimalObj.glj.unitPriceHasMix);
|
|
|
}
|
|
|
}
|
|
|
- if (typeof isCQ2018 != 'undefined')
|
|
|
- result = (result + (gljQ * mdSum).toDecimal(decimalObj.process)).toDecimal(decimalObj.process)
|
|
|
- else
|
|
|
- result = (result + (gljQ * mdSum).toDecimal(decimalObj.ration.unitPrice)).toDecimal(decimalObj.ration.unitPrice);
|
|
|
+ result = (result + (gljQ * mdSum).toDecimal(decimalObj.process)).toDecimal(decimalObj.process)
|
|
|
}
|
|
|
}
|
|
|
- result = (result).toDecimal(decimalObj.ration.unitPrice);
|
|
|
+ result = (result).toDecimal(decimalObj.ration.totalPrice);
|
|
|
return result;
|
|
|
},
|
|
|
// 总造价清单、叶子清单、定额的暂估费。父清单是汇总子清单的暂估费,走计算程序逻辑,不在这里。
|
|
|
@@ -1387,7 +1335,7 @@ let executeObj = {
|
|
|
|
|
|
at: function(ID, isTender) {
|
|
|
let item = executeObj.template.compiledCalcItems[ID];
|
|
|
- let rst = isTender ? item.tenderUnitFee : item.unitFee;
|
|
|
+ let rst = isTender ? item.tenderTotalFee : item.totalFee;
|
|
|
rst = parseFloat(rst);
|
|
|
return rst;
|
|
|
},
|
|
|
@@ -1850,9 +1798,10 @@ class CalcProgram {
|
|
|
if (calcItem.feeRate != undefined)
|
|
|
feeRate = parseFloat(calcItem.feeRate).toDecimal(decimalObj.feeRate);
|
|
|
// console.log(`[${calcItem.ID}]: ${calcItem.compiledExpr}`); // for test.
|
|
|
-
|
|
|
- calcItem.unitFee = (eval(calcItem.compiledExpr) * feeRate * 0.01).toDecimal(decimalObj.decimal('unitPrice', treeNode));
|
|
|
- calcItem.totalFee = (calcItem.unitFee * calcTools.uiNodeQty(treeNode)).toDecimal(decimalObj.decimal('totalPrice', treeNode));
|
|
|
+ let tf = (eval(calcItem.compiledExpr) * feeRate * 0.01).toDecimal(decimalObj.process);
|
|
|
+ calcItem.totalFee = tf.toDecimal(decimalObj.decimal('totalPrice', treeNode));
|
|
|
+ let nodeQ = calcTools.uiNodeQty(treeNode) ? calcTools.uiNodeQty(treeNode) : 1;
|
|
|
+ calcItem.unitFee = (tf / nodeQ).toDecimal(decimalObj.decimal('unitPrice', treeNode));
|
|
|
|
|
|
if (tender == tenderTypes.ttCalc) {
|
|
|
let tExpr = analyzer.getCompiledTenderExpr(calcItem.compiledExpr);
|