|
@@ -393,7 +393,7 @@ let calcTools = {
|
|
|
result = (result + temp).toDecimal(decimalObj.process);
|
|
result = (result + temp).toDecimal(decimalObj.process);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- result = result.toDecimal(decimalObj.ration.totalPrice);
|
|
|
|
|
|
|
+ result = calcTools.digitNum(result, "RT");
|
|
|
return result;
|
|
return result;
|
|
|
},
|
|
},
|
|
|
// masterTypeFilter 过滤机械机型:[]全部, [1,2]特大机械 [3,4]中小机械。 detailType 如机上人工费、机械折旧费等
|
|
// masterTypeFilter 过滤机械机型:[]全部, [1,2]特大机械 [3,4]中小机械。 detailType 如机上人工费、机械折旧费等
|
|
@@ -422,7 +422,7 @@ let calcTools = {
|
|
|
result = (result + (nodeQ * gljQ * mdSum).toDecimal(decimalObj.process)).toDecimal(decimalObj.process);
|
|
result = (result + (nodeQ * gljQ * mdSum).toDecimal(decimalObj.process)).toDecimal(decimalObj.process);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- result = result.toDecimal(decimalObj.ration.totalPrice);
|
|
|
|
|
|
|
+ result = calcTools.digitNum(result, "RT");
|
|
|
return result;
|
|
return result;
|
|
|
},
|
|
},
|
|
|
// 叶子清单、定额、总造价清单的暂估费。(父级清单是汇总子清单的暂估费,走计算程序逻辑,不在这里)
|
|
// 叶子清单、定额、总造价清单的暂估费。(父级清单是汇总子清单的暂估费,走计算程序逻辑,不在这里)
|
|
@@ -502,11 +502,11 @@ let calcTools = {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
for (let obj of GLJObjs) {
|
|
for (let obj of GLJObjs) {
|
|
|
- let t = (me.uiGLJQty(obj.quantity) * me.uiGLJPrice(obj.marketPrice, obj)).toDecimal(decimalObj.bills.totalPrice);
|
|
|
|
|
- rst.eT = (rst.eT + t).toDecimal(decimalObj.bills.totalPrice);
|
|
|
|
|
|
|
+ let t = calcTools.digitNum(me.uiGLJQty(obj.quantity) * me.uiGLJPrice(obj.marketPrice, obj));
|
|
|
|
|
+ rst.eT = calcTools.digitNum(rst.eT + t);
|
|
|
|
|
|
|
|
- let tt = (me.uiGLJQty(obj.tenderQuantity) * me.uiGLJPrice(obj.tenderPrice, obj)).toDecimal(decimalObj.bills.totalPrice);
|
|
|
|
|
- rst.eTT = (rst.eTT + tt).toDecimal(decimalObj.bills.totalPrice);
|
|
|
|
|
|
|
+ let tt = calcTools.digitNum(me.uiGLJQty(obj.tenderQuantity) * me.uiGLJPrice(obj.tenderPrice, obj));
|
|
|
|
|
+ rst.eTT = calcTools.digitNum(rst.eTT + tt);
|
|
|
}
|
|
}
|
|
|
return rst;
|
|
return rst;
|
|
|
}
|
|
}
|
|
@@ -522,8 +522,8 @@ let calcTools = {
|
|
|
rst.eTT = (rst.eTT + parseFloatPlus(node.data.feesIndex["estimate"].tenderTotalFee)).toDecimal(decimalObj.process);
|
|
rst.eTT = (rst.eTT + parseFloatPlus(node.data.feesIndex["estimate"].tenderTotalFee)).toDecimal(decimalObj.process);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- rst.eT = rst.eT.toDecimal(decimalObj.bills.totalPrice);
|
|
|
|
|
- rst.eTT = rst.eTT.toDecimal(decimalObj.bills.totalPrice);
|
|
|
|
|
|
|
+ rst.eT = calcTools.digitNum(rst.eT);
|
|
|
|
|
+ rst.eTT = calcTools.digitNum(rst.eTT);
|
|
|
return rst;
|
|
return rst;
|
|
|
}
|
|
}
|
|
|
// 先数量乘市场价,再汇总
|
|
// 先数量乘市场价,再汇总
|
|
@@ -589,9 +589,9 @@ let calcTools = {
|
|
|
sumTT = (sumTT + parseFloatPlus(eTT)).toDecimal(decimalObj.process);
|
|
sumTT = (sumTT + parseFloatPlus(eTT)).toDecimal(decimalObj.process);
|
|
|
}
|
|
}
|
|
|
sumU = sumU.toDecimal(decimalObj.bills.unitPrice);
|
|
sumU = sumU.toDecimal(decimalObj.bills.unitPrice);
|
|
|
- sumT = sumT.toDecimal(decimalObj.bills.totalPrice);
|
|
|
|
|
|
|
+ sumT = calcTools.digitNum(sumT);
|
|
|
sumTU = sumTU.toDecimal(decimalObj.bills.unitPrice);
|
|
sumTU = sumTU.toDecimal(decimalObj.bills.unitPrice);
|
|
|
- sumTT = sumTT.toDecimal(decimalObj.bills.totalPrice);
|
|
|
|
|
|
|
+ sumTT = calcTools.digitNum(sumTT);
|
|
|
} else if (me.isParentBill(treeNode)) {
|
|
} else if (me.isParentBill(treeNode)) {
|
|
|
// 父清单不要汇总单价。
|
|
// 父清单不要汇总单价。
|
|
|
let eTFBC = eTFeeByChildren();
|
|
let eTFBC = eTFeeByChildren();
|
|
@@ -620,9 +620,9 @@ let calcTools = {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
let q = nodeQ ? nodeQ : 1;
|
|
let q = nodeQ ? nodeQ : 1;
|
|
|
- sumU = (sumT / q).toDecimal(decimalObj.bills.totalPrice);
|
|
|
|
|
|
|
+ sumU = calcTools.digitNum(sumT / q);
|
|
|
let tq = nodeTQ ? nodeTQ : 1;
|
|
let tq = nodeTQ ? nodeTQ : 1;
|
|
|
- sumTU = (sumTT / tq).toDecimal(decimalObj.bills.totalPrice);
|
|
|
|
|
|
|
+ sumTU = calcTools.digitNum(sumTT / tq);
|
|
|
}
|
|
}
|
|
|
} else if (me.isRationCategory(treeNode)) {
|
|
} else if (me.isRationCategory(treeNode)) {
|
|
|
me.getGLJList(treeNode, false);
|
|
me.getGLJList(treeNode, false);
|
|
@@ -640,8 +640,8 @@ let calcTools = {
|
|
|
sumT = eTF.eT;
|
|
sumT = eTF.eT;
|
|
|
sumTT = eTF.eTT;
|
|
sumTT = eTF.eTT;
|
|
|
} else {
|
|
} else {
|
|
|
- sumT = (nodeQ * sumU).toDecimal(decimalObj.ration.totalPrice);
|
|
|
|
|
- sumTT = (nodeTQ * sumTU).toDecimal(decimalObj.ration.totalPrice);
|
|
|
|
|
|
|
+ sumT = calcTools.digitNum(nodeQ * sumU, "RT");
|
|
|
|
|
+ sumTT = calcTools.digitNum(nodeTQ * sumTU, "RT");
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -720,7 +720,7 @@ let calcTools = {
|
|
|
// 造价书→右键→插入机械:计算程序→机上人工费,多乘了机械的数量。所以这里要加个限制条件。为啥?没搞明白。
|
|
// 造价书→右键→插入机械:计算程序→机上人工费,多乘了机械的数量。所以这里要加个限制条件。为啥?没搞明白。
|
|
|
if (!isMachineLabour()) {
|
|
if (!isMachineLabour()) {
|
|
|
let nodeQ = isTender ? calcTools.uiNodeTenderQty(treeNode) : calcTools.uiNodeQty(treeNode);
|
|
let nodeQ = isTender ? calcTools.uiNodeTenderQty(treeNode) : calcTools.uiNodeQty(treeNode);
|
|
|
- result = (result * nodeQ).toDecimal(decimalObj.ration.totalPrice);
|
|
|
|
|
|
|
+ result = calcTools.digitNum(result * nodeQ, "RT");
|
|
|
}
|
|
}
|
|
|
return result;
|
|
return result;
|
|
|
},
|
|
},
|
|
@@ -1163,6 +1163,23 @@ let calcTools = {
|
|
|
return calcTools.isVP_or_GLJR(node) ? node.data.rationQuantityCoe : node.data.quantityCoe ? node.data.quantityCoe.labour : 0;
|
|
return calcTools.isVP_or_GLJR(node) ? node.data.rationQuantityCoe : node.data.quantityCoe ? node.data.quantityCoe.labour : 0;
|
|
|
else if (tender == tenderTypes.ttReverseRation) return node.data.rationQuantityCoe;
|
|
else if (tender == tenderTypes.ttReverseRation) return node.data.rationQuantityCoe;
|
|
|
},
|
|
},
|
|
|
|
|
+ // 先取6位,再取指定精度。解决如下精度问题:
|
|
|
|
|
+ // 2022182.5*2.05=4145474.1249999995,结果取2位为 4145474.12。实际期望:
|
|
|
|
|
+ // 2022182.5*2.05=4145474.125,结果取2位为 4145474.13。
|
|
|
|
|
+ digitNum: function (num, flag) {
|
|
|
|
|
+ let digit;
|
|
|
|
|
+ if (flag === "RT") digit = decimalObj.ration.totalPrice;
|
|
|
|
|
+ else digit = decimalObj.bills.totalPrice;
|
|
|
|
|
+
|
|
|
|
|
+ let v;
|
|
|
|
|
+ if (isLowVer(historyVer2)) {
|
|
|
|
|
+ v = scMathUtil.roundForObj(num, digit);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ v = scMathUtil.roundForObj(num, 6);
|
|
|
|
|
+ v = scMathUtil.roundForObj(v, digit);
|
|
|
|
|
+ }
|
|
|
|
|
+ return v;
|
|
|
|
|
+ },
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
let rationCalcBases = {
|
|
let rationCalcBases = {
|
|
@@ -1964,8 +1981,8 @@ class CalcProgram {
|
|
|
if (treeNode.data.feesIndex && treeNode.data.feesIndex[ft.type]) {
|
|
if (treeNode.data.feesIndex && treeNode.data.feesIndex[ft.type]) {
|
|
|
buf = parseFloatPlus(treeNode.data.feesIndex[ft.type].unitFee).toDecimal(decimalObj.bills.unitPrice);
|
|
buf = parseFloatPlus(treeNode.data.feesIndex[ft.type].unitFee).toDecimal(decimalObj.bills.unitPrice);
|
|
|
btuf = parseFloatPlus(treeNode.data.feesIndex[ft.type].tenderUnitFee).toDecimal(decimalObj.bills.unitPrice);
|
|
btuf = parseFloatPlus(treeNode.data.feesIndex[ft.type].tenderUnitFee).toDecimal(decimalObj.bills.unitPrice);
|
|
|
- btf = (bq * buf).toDecimal(decimalObj.bills.totalPrice);
|
|
|
|
|
- bttf = (btq * btuf).toDecimal(decimalObj.bills.totalPrice);
|
|
|
|
|
|
|
+ btf = calcTools.digitNum(bq * buf);
|
|
|
|
|
+ bttf = calcTools.digitNum(btq * btuf);
|
|
|
}
|
|
}
|
|
|
} else {
|
|
} else {
|
|
|
let sum_rtf = 0,
|
|
let sum_rtf = 0,
|
|
@@ -1978,15 +1995,15 @@ class CalcProgram {
|
|
|
if (node.data.feesIndex && node.data.feesIndex[ft.type]) {
|
|
if (node.data.feesIndex && node.data.feesIndex[ft.type]) {
|
|
|
ruf = parseFloatPlus(node.data.feesIndex[ft.type].unitFee).toDecimal(decimalObj.bills.unitPrice);
|
|
ruf = parseFloatPlus(node.data.feesIndex[ft.type].unitFee).toDecimal(decimalObj.bills.unitPrice);
|
|
|
rtuf = parseFloatPlus(node.data.feesIndex[ft.type].tenderUnitFee).toDecimal(decimalObj.bills.unitPrice);
|
|
rtuf = parseFloatPlus(node.data.feesIndex[ft.type].tenderUnitFee).toDecimal(decimalObj.bills.unitPrice);
|
|
|
- rtf = parseFloatPlus(node.data.feesIndex[ft.type].totalFee).toDecimal(decimalObj.bills.totalPrice);
|
|
|
|
|
- rttf = parseFloatPlus(node.data.feesIndex[ft.type].tenderTotalFee).toDecimal(decimalObj.bills.totalPrice);
|
|
|
|
|
|
|
+ rtf = calcTools.digitNum(parseFloatPlus(node.data.feesIndex[ft.type].totalFee));
|
|
|
|
|
+ rttf = calcTools.digitNum(parseFloatPlus(node.data.feesIndex[ft.type].tenderTotalFee));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
sum_rtf = (sum_rtf + rtf).toDecimal(decimalObj.process);
|
|
sum_rtf = (sum_rtf + rtf).toDecimal(decimalObj.process);
|
|
|
sum_rttf = (sum_rttf + rttf).toDecimal(decimalObj.process);
|
|
sum_rttf = (sum_rttf + rttf).toDecimal(decimalObj.process);
|
|
|
}
|
|
}
|
|
|
- btf = sum_rtf.toDecimal(decimalObj.bills.totalPrice);
|
|
|
|
|
- bttf = sum_rttf.toDecimal(decimalObj.bills.totalPrice);
|
|
|
|
|
|
|
+ btf = calcTools.digitNum(sum_rtf);
|
|
|
|
|
+ bttf = calcTools.digitNum(sum_rttf);
|
|
|
buf = (btf / bq).toDecimal(decimalObj.bills.unitPrice);
|
|
buf = (btf / bq).toDecimal(decimalObj.bills.unitPrice);
|
|
|
buf = me.billFloatUnitPrice(buf, treeNode);
|
|
buf = me.billFloatUnitPrice(buf, treeNode);
|
|
|
btuf = (bttf / btq).toDecimal(decimalObj.bills.unitPrice);
|
|
btuf = (bttf / btq).toDecimal(decimalObj.bills.unitPrice);
|
|
@@ -1996,8 +2013,8 @@ class CalcProgram {
|
|
|
if (me.project.property.billsCalcMode == leafBillGetFeeType.rationPriceConverse && ["common", "rationCommon", "indexCommon"].includes(ft.type)) {
|
|
if (me.project.property.billsCalcMode == leafBillGetFeeType.rationPriceConverse && ["common", "rationCommon", "indexCommon"].includes(ft.type)) {
|
|
|
// 招投标项目, 还要反算
|
|
// 招投标项目, 还要反算
|
|
|
// 9-24 新需求 开放正算反算选项,按选项判断
|
|
// 9-24 新需求 开放正算反算选项,按选项判断
|
|
|
- btf = (buf * nQ).toDecimal(decimalObj.bills.totalPrice);
|
|
|
|
|
- bttf = (btuf * nQ).toDecimal(decimalObj.bills.totalPrice);
|
|
|
|
|
|
|
+ btf = calcTools.digitNum(buf * nQ);
|
|
|
|
|
+ bttf = calcTools.digitNum(btuf * nQ);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -2043,8 +2060,8 @@ class CalcProgram {
|
|
|
let tuf = (ttf / tq).toDecimal(decimalObj.bills.unitPrice);
|
|
let tuf = (ttf / tq).toDecimal(decimalObj.bills.unitPrice);
|
|
|
tuf = me.billFloatUnitPrice(tuf, treeNode);
|
|
tuf = me.billFloatUnitPrice(tuf, treeNode);
|
|
|
if (calcTools.isBillProject()) {
|
|
if (calcTools.isBillProject()) {
|
|
|
- tf = (uf * q).toDecimal(decimalObj.bills.totalPrice);
|
|
|
|
|
- ttf = (tuf * q).toDecimal(decimalObj.bills.totalPrice);
|
|
|
|
|
|
|
+ tf = calcTools.digitNum(uf * q);
|
|
|
|
|
+ ttf = calcTools.digitNum(tuf * q);
|
|
|
}
|
|
}
|
|
|
let feeItem = {
|
|
let feeItem = {
|
|
|
fieldName: "common",
|
|
fieldName: "common",
|
|
@@ -2093,9 +2110,9 @@ class CalcProgram {
|
|
|
// 修改了清单单价:以单价为准,算金额
|
|
// 修改了清单单价:以单价为准,算金额
|
|
|
ftObj.unitFee = parseFloatPlus(treeNode.data.feesIndex.common.unitFee);
|
|
ftObj.unitFee = parseFloatPlus(treeNode.data.feesIndex.common.unitFee);
|
|
|
// uf = me.billFloatUnitPrice(uf, treeNode); 浮动单价要覆盖原单价。其它类型覆盖了没事,有基础在,还可以算回来。手工输入的不行,一覆盖就从地球上消失了。
|
|
// uf = me.billFloatUnitPrice(uf, treeNode); 浮动单价要覆盖原单价。其它类型覆盖了没事,有基础在,还可以算回来。手工输入的不行,一覆盖就从地球上消失了。
|
|
|
- ftObj.totalFee = (ftObj.unitFee * nQ).toDecimal(decimalObj.bills.totalPrice);
|
|
|
|
|
|
|
+ ftObj.totalFee = calcTools.digitNum(ftObj.unitFee * nQ);
|
|
|
ftObj.tenderUnitFee = ftObj.unitFee;
|
|
ftObj.tenderUnitFee = ftObj.unitFee;
|
|
|
- ftObj.tenderTotalFee = (ftObj.tenderUnitFee * nTQ).toDecimal(decimalObj.bills.totalPrice);
|
|
|
|
|
|
|
+ ftObj.tenderTotalFee = calcTools.digitNum(ftObj.tenderUnitFee * nTQ);
|
|
|
} else if (treeNode.data.calcFlag == treeNodeCalcFlag.customTotalPrice) {
|
|
} else if (treeNode.data.calcFlag == treeNodeCalcFlag.customTotalPrice) {
|
|
|
// 修改了清单金额:以金额为准,算单价。修改了清单数量也一样
|
|
// 修改了清单金额:以金额为准,算单价。修改了清单数量也一样
|
|
|
ftObj.totalFee = parseFloatPlus(treeNode.data.feesIndex.common.totalFee);
|
|
ftObj.totalFee = parseFloatPlus(treeNode.data.feesIndex.common.totalFee);
|
|
@@ -2106,8 +2123,8 @@ class CalcProgram {
|
|
|
ftObj.tenderUnitFee = ftObj.tenderUnitFee.toDecimal(decimalObj.bills.unitPrice);
|
|
ftObj.tenderUnitFee = ftObj.tenderUnitFee.toDecimal(decimalObj.bills.unitPrice);
|
|
|
if (calcTools.isBillProject()) {
|
|
if (calcTools.isBillProject()) {
|
|
|
// 招投标项目, 还要反算
|
|
// 招投标项目, 还要反算
|
|
|
- ftObj.totalFee = (ftObj.unitFee * nQ).toDecimal(decimalObj.bills.totalPrice);
|
|
|
|
|
- ftObj.tenderTotalFee = (ftObj.tenderUnitFee * nTQ).toDecimal(decimalObj.bills.totalPrice);
|
|
|
|
|
|
|
+ ftObj.totalFee = calcTools.digitNum(ftObj.unitFee * nQ);
|
|
|
|
|
+ ftObj.tenderTotalFee = calcTools.digitNum(ftObj.tenderUnitFee * nTQ);
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
calcTools.checkFeeField(treeNode, ftObj);
|
|
calcTools.checkFeeField(treeNode, ftObj);
|
|
@@ -2145,13 +2162,10 @@ class CalcProgram {
|
|
|
let nTQ = calcTools.uiNodeTenderQty(treeNode) ? calcTools.uiNodeTenderQty(treeNode) : 1;
|
|
let nTQ = calcTools.uiNodeTenderQty(treeNode) ? calcTools.uiNodeTenderQty(treeNode) : 1;
|
|
|
|
|
|
|
|
if (treeNode.calcType == treeNodeCalcType.ctRationCalcProgram) {
|
|
if (treeNode.calcType == treeNodeCalcType.ctRationCalcProgram) {
|
|
|
- debugger;
|
|
|
|
|
// 量价、工料机类型的定额要求"市场合价"
|
|
// 量价、工料机类型的定额要求"市场合价"
|
|
|
if (calcTools.isVP_or_GLJR(treeNode)) {
|
|
if (calcTools.isVP_or_GLJR(treeNode)) {
|
|
|
let u = treeNode.data.marketUnitFee ? treeNode.data.marketUnitFee : 0;
|
|
let u = treeNode.data.marketUnitFee ? treeNode.data.marketUnitFee : 0;
|
|
|
- // 先取6位,再取2位。解决 4145474.1249999995 四舍五入问题。
|
|
|
|
|
- let t = scMathUtil.roundForObj(u * nQ, 6);
|
|
|
|
|
- t = scMathUtil.roundForObj(t, decimalObj.ration.totalPrice);
|
|
|
|
|
|
|
+ let t = calcTools.digitNum(u * nQ, "RT");
|
|
|
if (treeNode.data.marketTotalFee != t) {
|
|
if (treeNode.data.marketTotalFee != t) {
|
|
|
treeNode.data.marketTotalFee = t;
|
|
treeNode.data.marketTotalFee = t;
|
|
|
treeNode.changed = true;
|
|
treeNode.changed = true;
|