|
@@ -99,6 +99,8 @@ let defaultBillTemplate = {
|
|
|
]
|
|
|
};
|
|
|
|
|
|
+
|
|
|
+
|
|
|
class CalcProgram {
|
|
|
constructor(project){
|
|
|
this.project = project;
|
|
@@ -144,83 +146,80 @@ class CalcProgram {
|
|
|
};
|
|
|
};
|
|
|
|
|
|
- calculate(treeNode){
|
|
|
+ // 计算本节点(默认同时递归计算所有父节点,可选)
|
|
|
+ calculate(treeNode, calcParents = true){
|
|
|
let me = this;
|
|
|
|
|
|
- me.calc.calculate(treeNode);
|
|
|
-
|
|
|
- // 还原,防止出现混乱影响下次计算
|
|
|
- delete treeNode.data.baseTotalPrice;
|
|
|
- delete treeNode.data.gatherType;
|
|
|
-
|
|
|
- // 存储、刷新本结点、所有父结点
|
|
|
- if (treeNode.changed) {
|
|
|
- me.saveAndCalcParents(treeNode);
|
|
|
- delete treeNode.changed;
|
|
|
- };
|
|
|
- };
|
|
|
-
|
|
|
- saveAndCalcParents(treeNode) {
|
|
|
- if (treeNode.parent) {
|
|
|
- projectObj.converseCalculateBills(treeNode.parent);
|
|
|
- };
|
|
|
-
|
|
|
- let data = {ID: treeNode.data.ID, projectID: projectObj.project.ID(), fees: treeNode.data.fees};
|
|
|
- let newDta = {'updateType': 'ut_update', 'updateData': data};
|
|
|
- let newDataArr = [];
|
|
|
- newDataArr.push(newDta);
|
|
|
- projectObj.project.pushNow('', treeNode.sourceType, newDataArr);
|
|
|
- projectObj.mainController.refreshTreeNode([treeNode]);
|
|
|
- };
|
|
|
-
|
|
|
- getCalcDatas(treeNode){
|
|
|
- let me = this;
|
|
|
- let rst = [];
|
|
|
let isRation = treeNode.sourceType === me.project.Ration.getSourceType();
|
|
|
let isBill = treeNode.sourceType === me.project.Bills.getSourceType();
|
|
|
let isLeafBill = isBill && treeNode.source.children && treeNode.source.children.length === 0;
|
|
|
let isBillPriceCalc = me.project.projSetting.billsCalcMode === billsPrice;
|
|
|
|
|
|
- if (isRation) {
|
|
|
- //
|
|
|
- }
|
|
|
+ if (isRation)
|
|
|
+ treeNode.calcType = treeNodeCalcType.ctRationCalcProgram
|
|
|
else if (isLeafBill) {
|
|
|
- let ct = '';
|
|
|
if (treeNode.children && treeNode.children.length > 0){
|
|
|
if (treeNode.children[0].sourceType == me.project.Ration.getSourceType()){
|
|
|
- ct = childrenType.ration;
|
|
|
+ if (isBillPriceCalc) // 清单单价计算模式下的叶子清单:取自己的计算程序ID,找到自己的计算程序计算
|
|
|
+ treeNode.calcType = treeNodeCalcType.ctBillCalcProgram;
|
|
|
+ else // 前三种计算模式下的叶子清单:汇总定额的计算程序的费用类别
|
|
|
+ treeNode.calcType = treeNodeCalcType.ctGatherRations;
|
|
|
}
|
|
|
else if (treeNode.children[0].sourceType == me.project.VolumePrice.getSourceType()){
|
|
|
- ct = childrenType.volumePrice;
|
|
|
+ let value = 20000;
|
|
|
+ // if (treeNode.data.feesIndex && treeNode.data.feesIndex.common && treeNode.data.feesIndex.common.unitFee != 0)
|
|
|
+ // value = treeNode.data.feesIndex.common.unitFee;
|
|
|
+ treeNode.calcType = treeNodeCalcType.ctCalcBaseValue;
|
|
|
+ treeNode.calcBaseValue = value;
|
|
|
};
|
|
|
}
|
|
|
- else{
|
|
|
- ct = childrenType.formula;
|
|
|
+ else{ // 公式计算
|
|
|
+ let value = 20000;
|
|
|
+ // if (treeNode.data.feesIndex && treeNode.data.feesIndex.common && treeNode.data.feesIndex.common.unitFee != 0)
|
|
|
+ // value = treeNode.data.feesIndex.common.unitFee;
|
|
|
+ treeNode.calcType = treeNodeCalcType.ctCalcBaseValue;
|
|
|
+ treeNode.calcBaseValue = value;
|
|
|
};
|
|
|
+ }
|
|
|
+ else if (isBill) // 父清单:汇总子清单的费用类别
|
|
|
+ treeNode.calcType = treeNodeCalcType.ctGatherBills;
|
|
|
|
|
|
- if (ct == childrenType.ration){
|
|
|
- if (isBillPriceCalc){ // 清单单价计算模式下的叶子清单:取自己的计算程序ID,找到自己的计算程序计算
|
|
|
+ me.calc.calculate(treeNode);
|
|
|
|
|
|
- }
|
|
|
- else{ // 前三种计算模式下的叶子清单:汇总定额的计算程序的费用类别
|
|
|
- treeNode.data.gatherType = CP_GatherType.rations;
|
|
|
+ // 计算所有父结点
|
|
|
+ if (treeNode.changed && calcParents && treeNode.parent) {
|
|
|
+ me.calculate(treeNode.parent);
|
|
|
+ };
|
|
|
+ };
|
|
|
+
|
|
|
+ // 存储、刷新本节点(默认存储刷新所有父节点,可选)
|
|
|
+ saveNode(treeNode, saveParent = true) {
|
|
|
+ if (!treeNode.changed) return;
|
|
|
+
|
|
|
+ let newDataArr = [], nodesArr = [];
|
|
|
+ let project = projectObj.project;
|
|
|
+
|
|
|
+ project.beginUpdate('');
|
|
|
+ let curNode = treeNode;
|
|
|
+ while (curNode) {
|
|
|
+ if (curNode.changed){
|
|
|
+ let data = {
|
|
|
+ ID: curNode.data.ID,
|
|
|
+ projectID: projectObj.project.ID(),
|
|
|
+ quantity: curNode.data.quantity,
|
|
|
+ fees: curNode.data.fees
|
|
|
};
|
|
|
- }
|
|
|
- else if (ct == childrenType.volumePrice){
|
|
|
- let totalPrice = 10000;
|
|
|
- treeNode.data.baseTotalPrice = totalPrice;
|
|
|
- }
|
|
|
- else if (ct == childrenType.formula){
|
|
|
- let totalPrice = 20000;
|
|
|
- treeNode.data.baseTotalPrice = totalPrice;
|
|
|
+ let newDta = {'updateType': 'ut_update', 'updateData': data};
|
|
|
+ newDataArr.push(newDta);
|
|
|
+ nodesArr.push(curNode);
|
|
|
+ project.push(curNode.sourceType, newDataArr);
|
|
|
};
|
|
|
- }
|
|
|
- else if (isBill){ // 父清单:汇总子清单的费用类别
|
|
|
- treeNode.data.gatherType = CP_GatherType.bills;
|
|
|
+ if (saveParent) curNode = curNode.parent
|
|
|
+ else break;
|
|
|
};
|
|
|
+ project.endUpdate();
|
|
|
|
|
|
- me.calculate(treeNode);
|
|
|
- rst = treeNode.data.calcTemplate.calcItems;
|
|
|
- return rst;
|
|
|
- }
|
|
|
+ for (let node of nodesArr){delete node.changed;};
|
|
|
+ projectObj.mainController.refreshTreeNode(nodesArr);
|
|
|
+ };
|
|
|
}
|