|
@@ -641,7 +641,8 @@ let calcTools = {
|
|
|
contain: treeNode.data.contain,
|
|
|
quantityEXP: treeNode.data.quantityEXP,
|
|
|
summaryFees: treeNode.data.summaryFees,
|
|
|
- name:treeNode.data.name
|
|
|
+ name:treeNode.data.name,
|
|
|
+ rationQuantityCoe: treeNode.data.rationQuantityCoe
|
|
|
};
|
|
|
|
|
|
// 定额大类
|
|
@@ -1079,11 +1080,11 @@ let analyzer = {
|
|
|
});
|
|
|
for (var i = 0; i < atIDArr.length; i++) {
|
|
|
let patt = new RegExp(atIDArr[i]);
|
|
|
- let val = `$CE.at(${IDArr[i]}, false)`;
|
|
|
+ let val = `$CE.at(${IDArr[i]},false)`;
|
|
|
rst = rst.replace(patt, val);
|
|
|
};
|
|
|
rst = rst.replace(/\[/g, "$CE.base('");
|
|
|
- rst = rst.replace(/\]/g, "', false)");
|
|
|
+ rst = rst.replace(/\]/g, "',false)");
|
|
|
rst = rst.replace(/L/g, labourCoe);
|
|
|
return rst;
|
|
|
},
|
|
@@ -1470,7 +1471,7 @@ class CalcProgram {
|
|
|
};
|
|
|
|
|
|
// 只计算treeNode自身。changedArr: 外部传来的一个数组,专门存储发生变动的节点。
|
|
|
- innerCalc(treeNode, changedArr, isTender = false){
|
|
|
+ innerCalc(treeNode, changedArr, tender){
|
|
|
let me = this;
|
|
|
// 仅用作树节点显示的工料机不能参与计算。
|
|
|
if (treeNode.sourceType === ModuleNames.ration_glj) return;
|
|
@@ -1685,6 +1686,7 @@ class CalcProgram {
|
|
|
|
|
|
calcTools.initFees(treeNode);
|
|
|
|
|
|
+ if (tender == tenderTypes.ttCalc) calcTools.calcNodeTenderQty(treeNode);
|
|
|
for (let idx of template.compiledSeq) {
|
|
|
let calcItem = template.calcItems[idx];
|
|
|
$CE.tempCalcItem = calcItem;
|
|
@@ -1696,8 +1698,7 @@ class CalcProgram {
|
|
|
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));
|
|
|
|
|
|
- if (isTender) {
|
|
|
- calcTools.calcNodeTenderQty(treeNode);
|
|
|
+ if (tender == tenderTypes.ttCalc) {
|
|
|
let tExpr = analyzer.getCompiledTenderExpr(calcItem.compiledExpr);
|
|
|
calcItem.tenderUnitFee = (eval(tExpr) * feeRate * 0.01).toDecimal(decimalObj.decimal('unitPrice', treeNode));
|
|
|
calcItem.tenderTotalFee = (calcItem.tenderUnitFee * treeNode.data.tenderQuantity).toDecimal(decimalObj.decimal('totalPrice', treeNode));
|
|
@@ -1708,6 +1709,10 @@ class CalcProgram {
|
|
|
calcTools.checkFeeField(treeNode, calcItem);
|
|
|
};
|
|
|
};
|
|
|
+
|
|
|
+ if (tender == tenderTypes.ttReverseRation)
|
|
|
+ this.calcTenderReverse(treeNode);
|
|
|
+
|
|
|
deleteUselessFees(treeNode, fnArr);
|
|
|
};
|
|
|
};
|
|
@@ -1719,22 +1724,22 @@ class CalcProgram {
|
|
|
};
|
|
|
|
|
|
// 计算本节点、所有父节点(默认,可选)、公式引用节点(默认,可选)。
|
|
|
- calculate(treeNode, calcParents = true, calcFormulas = true, isTender = false){
|
|
|
+ calculate(treeNode, calcParents = true, calcFormulas = true, tender){
|
|
|
let me = this;
|
|
|
let changedNodes = [];
|
|
|
- me.innerCalc(treeNode, changedNodes, isTender);
|
|
|
+ me.innerCalc(treeNode, changedNodes, tender);
|
|
|
if (treeNode.changed) {
|
|
|
// 计算父结点
|
|
|
if (calcParents){
|
|
|
let curNode = treeNode.parent;
|
|
|
while (curNode){
|
|
|
- me.innerCalc(curNode, changedNodes, isTender);
|
|
|
+ me.innerCalc(curNode, changedNodes, tender);
|
|
|
curNode = curNode.parent;
|
|
|
};
|
|
|
};
|
|
|
// 父结点算完,再计算所有的公式结点(必须先算完父结点,再算公式结点)
|
|
|
if (calcFormulas) {
|
|
|
- me.calcFormulaNodes(changedNodes, isTender);
|
|
|
+ me.calcFormulaNodes(changedNodes, tender);
|
|
|
};
|
|
|
};
|
|
|
|
|
@@ -1747,7 +1752,7 @@ class CalcProgram {
|
|
|
calcAllType.catRations 计算所有定额、工料机形式的定额、量价,因为它们都走自己的计算程序 (改变人工系数、费率值、工料机单价时会用到) 不要用
|
|
|
缺陷:calcAllType.catRations 参数情况不会计算父结点。(calcAllType.catBills 可以,因为清单的父结点也是清单会计算)
|
|
|
*/
|
|
|
- calcAllNodes(calcType = calcAllType.catAll, isTender){
|
|
|
+ calcAllNodes(calcType = calcAllType.catAll, tender){
|
|
|
let me = this;
|
|
|
let changedNodes = [];
|
|
|
function calcNodes(nodes) {
|
|
@@ -1759,17 +1764,17 @@ class CalcProgram {
|
|
|
if (calcType == calcAllType.catAll || calcType == node.sourceType) {
|
|
|
node.calcType = calcTools.getCalcType(node);
|
|
|
if (node.calcType != treeNodeCalcType.ctCalcBaseValue)
|
|
|
- me.innerCalc(node, changedNodes, isTender);
|
|
|
+ me.innerCalc(node, changedNodes, tender);
|
|
|
};
|
|
|
}
|
|
|
};
|
|
|
calcNodes(me.project.mainTree.roots);
|
|
|
- me.calcFormulaNodes(changedNodes, isTender);
|
|
|
+ me.calcFormulaNodes(changedNodes, tender);
|
|
|
return changedNodes;
|
|
|
};
|
|
|
|
|
|
// 计算全部公式项。 (参数意义:将通过本方法后发生改变的节点存入changedArr中)
|
|
|
- calcFormulaNodes(changedArr, isTender){
|
|
|
+ calcFormulaNodes(changedArr, tender){
|
|
|
let me = this;
|
|
|
let formulaNodes = cbTools.getFormulaNodes(true);
|
|
|
if (formulaNodes.length == 0) return;
|
|
@@ -1778,13 +1783,13 @@ class CalcProgram {
|
|
|
projectObj.project.calcBase.calculate(formulaNode, true);
|
|
|
if (projectObj.project.calcBase.success){
|
|
|
// 计算公式结点
|
|
|
- me.innerCalc(formulaNode, changedArr, isTender);
|
|
|
+ me.innerCalc(formulaNode, changedArr, tender);
|
|
|
|
|
|
// 计算父结点
|
|
|
if (formulaNode.changed){
|
|
|
let curNode = formulaNode.parent;
|
|
|
while (curNode){
|
|
|
- me.innerCalc(curNode, changedArr, isTender);
|
|
|
+ me.innerCalc(curNode, changedArr, tender);
|
|
|
curNode = curNode.parent;
|
|
|
};
|
|
|
};
|
|
@@ -1875,8 +1880,9 @@ class CalcProgram {
|
|
|
this.calcNodesAndSave(billNodes, callback);
|
|
|
};
|
|
|
|
|
|
- calcAllNodesAndSave(calcType = calcAllType.catAll, callback, isTender){
|
|
|
- let changedNodes = this.calcAllNodes(calcType, isTender);
|
|
|
+ // tender: null:不调价(普通计算)。 1: 正向调价 2:反向调价-调子目 3: 反向调价-调工料机
|
|
|
+ calcAllNodesAndSave(calcType = calcAllType.catAll, callback, tender){
|
|
|
+ let changedNodes = this.calcAllNodes(calcType, tender);
|
|
|
this.saveNodes(changedNodes, callback);
|
|
|
};
|
|
|
|
|
@@ -1925,6 +1931,29 @@ class CalcProgram {
|
|
|
};
|
|
|
projectObj.project.property.tenderSetting.gljPriceTenderCoe = 1;
|
|
|
};
|
|
|
+
|
|
|
+ // 反向调价
|
|
|
+ calcTenderReverse(treeNode){
|
|
|
+ treeNode.data.feesIndex.common.tenderUnitFee = treeNode.data.feesIndex.common.unitFee;
|
|
|
+
|
|
|
+ if (treeNode.data.targetTotalFee){
|
|
|
+
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ if (treeNode.data.targetUnitFee){
|
|
|
+ treeNode.data.targetTotalFee = treeNode.data.targetUnitFee * treeNode.data.quantity;
|
|
|
+ }
|
|
|
+ else{
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
+ treeNode.data.rationQuantityCoe = treeNode.data.targetTotalFee / treeNode.data.feesIndex.common.totalFee;
|
|
|
+ treeNode.data.tenderQuantity = treeNode.data.quantity * treeNode.data.rationQuantityCoe;
|
|
|
+ treeNode.data.feesIndex.common.tenderTotalFee = treeNode.data.tenderQuantity * treeNode.data.feesIndex.common.tenderUnitFee;
|
|
|
+
|
|
|
+ treeNode.changed = true;
|
|
|
+ };
|
|
|
};
|
|
|
|
|
|
// export default analyzer;
|