Bladeren bron

分包。

chenshilong 7 jaren geleden
bovenliggende
commit
8dd55fa2f9

+ 2 - 1
modules/main/models/ration.js

@@ -46,7 +46,8 @@ let rationSchema = new Schema({
     deleteInfo: deleteSchema,
     type: Number,                               // 1 定额、2 量价、3 工料机定额
     subType: Number,                            // 子类型:1人工、201材料、301机械、4主材、5设备
-    from:{type: String,default:'std'},//std, cpt  来自标准、补充
+    from:{type: String,default:'std'},          //std, cpt  来自标准、补充
+    isSubcontract: Boolean,                     // 是否分包
 
     // 定额特有属性:
     libID: Number,

+ 52 - 28
web/building_saas/main/js/models/calc_program.js

@@ -247,6 +247,45 @@ let nodeTools = {
     },
     getNodeByID: function (ID){
         return cbTools.getNodeByID(ID);
+    },
+    cutNodeForSave(treeNode){
+        /*  subType、quantity、calcBase、programID、marketUnitFee等等字段较为特殊,它们的改变一定会触发计算并导致计算
+            结果的变化,从而引发保存动作。将这些字段放在该位置跟计算结果一起保存,可减少前端跟后端的通讯频率。              */
+        let data = {
+            projectID: projectObj.project.ID(),
+            ID: treeNode.data.ID,
+            unit: treeNode.data.unit,   //对清单来说,改变单位,工程量精度会跟着改变从而影响计算。
+            subType: treeNode.data.subType,
+            quantity: treeNode.data.quantity,
+            calcBase: treeNode.data.calcBase,
+            calcBaseValue: treeNode.data.calcBaseValue,
+            programID: treeNode.data.programID,
+            marketUnitFee: treeNode.data.marketUnitFee,
+            marketTotalFee: treeNode.data.marketTotalFee,
+            fees: treeNode.data.fees,
+            isFromDetail:treeNode.data.isFromDetail,
+            feeRate: treeNode.data.feeRate,
+            feeRateID: treeNode.data.feeRateID,
+            contain: treeNode.data.contain,
+            quantityEXP: treeNode.data.quantityEXP
+        };
+
+        // 定额大类
+        if (nodeTools.isRationCategory(treeNode)) {
+            data.isSubcontract = treeNode.data.isSubcontract;
+        };
+
+        //定额类型的工料机做特殊处理
+        if(nodeTools.isGljRation(treeNode)){
+            data.code = treeNode.data.code;
+            data.projectGLJID = treeNode.data.projectGLJID;
+            delete data.marketUnitFee;
+        };
+
+        if (treeNode.data.summaryFees)
+            data.summaryFees = treeNode.data.summaryFees;
+
+        return data;
     }
 };
 
@@ -494,16 +533,28 @@ const rationCalcBaser = {
         return assistCalcer.estimateFee(node, true);
     },
     '分包定额基价人工费': function (node) {
+        if (node.data.isSubcontract) return this.定额基价人工费(node)
+        else return 0;
     },
     '分包定额基价材料费': function (node) {
+        if (node.data.isSubcontract) return this.定额基价材料费(node)
+        else return 0;
     },
     '分包定额基价机械费': function (node) {
+        if (node.data.isSubcontract) return this.定额基价机械费(node)
+        else return 0;
     },
     '分包主材费': function (node) {
+        if (node.data.isSubcontract) return this.主材费(node)
+        else return 0;
     },
     '分包设备费': function (node) {
+        if (node.data.isSubcontract) return this.设备费(node)
+        else return 0;
     },
     '分包人工工日': function (node) {
+        if (node.data.isSubcontract) return this.人工工日(node)
+        else return 0;
     }
 };
 
@@ -889,37 +940,10 @@ class CalcProgram {
         }
 
         let me = this;
-
         me.project.beginUpdate('');
         for (let node of treeNodes){
             if (node.changed){
-                let data = {
-                    ID: node.data.ID,
-                    projectID: me.project.ID(),
-                    unit:node.data.unit,//对清单来说,改变单位,工程量精度会跟着改变从而影响计算。
-                    /*  subType、quantity、calcBase、programID、marketUnitFee等等字段较为特殊,它们的改变一定会触发计算并导致计算
-                    结果的变化,从而引发保存动作。将这些字段放在该位置跟计算结果一起保存,可减少前端跟后端的通讯频率。              */
-                    subType: node.data.subType,
-                    quantity: node.data.quantity,
-                    calcBase: node.data.calcBase,
-                    calcBaseValue: node.data.calcBaseValue,
-                    programID: node.data.programID,
-                    marketUnitFee: node.data.marketUnitFee,
-                    marketTotalFee: node.data.marketTotalFee,
-                    fees: node.data.fees,
-                    isFromDetail:node.data.isFromDetail,
-                    feeRate: node.data.feeRate,
-                    feeRateID: node.data.feeRateID,
-                    contain:node.data.contain,
-                    quantityEXP:node.data.quantityEXP
-                };
-                if (node.data.summaryFees) data.summaryFees = node.data.summaryFees;
-                if(node.sourceType==ModuleNames.ration && node.data.type==rationType.gljRation){//定额类型的工料机做特殊处理
-                    data.code=node.data.code;
-                    data.projectGLJID = node.data.projectGLJID;
-                    delete data.marketUnitFee;
-                }
-
+                let data = nodeTools.cutNodeForSave(node);
                 let newData = {'updateType': 'ut_update', 'updateData': data};
                 me.project.push(node.sourceType, [newData]);
             }

+ 8 - 0
web/building_saas/main/js/views/main_tree_col.js

@@ -113,6 +113,9 @@ let MainTreeCol = {
         ration: function (node) {
             return nodeTools.isRation(node);
         },
+        isSubcontract: function (node) {
+            return !nodeTools.isRationCategory(node);
+        },
         glj: function (node) {
             return node.sourceType == projectObj.project.ration_glj.getSourceType();
         },
@@ -235,6 +238,11 @@ let MainTreeCol = {
                 }
             }
         },
+
+        isSubcontract: function (node){
+            if (nodeTools.isRationCategory(node))
+                return new GC.Spread.Sheets.CellTypes.CheckBox();
+        }
     },
     getEvent: function (eventName) {
         let names = eventName.split('.');

+ 16 - 20
web/building_saas/main/js/views/project_view.js

@@ -34,7 +34,8 @@ var projectObj = {
 
         // for test interface.  CSLAAAAA
 /*        node.data.gljList = project.ration_glj.getGljArrByRation(node.data.ID);
-        let bname = '暂估材料费';
+        node.data.isSubcontract = true;
+        let bname = '分包人工工日';
         alert(bname + ': ' + rationCalcBaser[bname](node));*/
     },
     refreshBaseActn: function (tree) {
@@ -287,7 +288,7 @@ var projectObj = {
                 project.Ration.updateContain(value,node);
             }
             else if (fieldName === 'quantity' || fieldName === 'marketUnitFee' || fieldName === 'programID' ||
-                fieldName === 'subType' || fieldName === 'calcBase'){
+                fieldName === 'subType' || fieldName === 'calcBase' || fieldName === 'isSubcontract'){
                 if (fieldName === 'quantity') {
                     project.quantity_detail.editMainTreeNodeQuantity(value,node,fieldName,editingText);
                     return;
@@ -488,6 +489,7 @@ var projectObj = {
                 that.mainSpread.bind(GC.Spread.Sheets.Events.EditEnded, that.mainSpreadEditEnded);
                 that.mainSpread.bind(GC.Spread.Sheets.Events.RangeChanged, that.mainSpreadRangeChanged);
                 that.mainSpread.bind(GC.Spread.Sheets.Events.SelectionChanged, that.amountAreaNumber);
+                that.mainSpread.bind(GC.Spread.Sheets.Events.ButtonClicked, that.onButtonClick);
                 that.loadMainSpreadContextMenu();
                 that.loadFocusLocation();
                 let endTime = +new Date();
@@ -836,6 +838,15 @@ var projectObj = {
         };
  },
 
+    onButtonClick: function (e, info) {
+        let node = projectObj.project.mainTree.items[info.row];
+        if (node.data.isSubcontract) node.data.isSubcontract = false
+        else node.data.isSubcontract = true;
+
+        node.changed = true;
+        projectObj.project.calcProgram.calcAndSave(node);
+    },
+
     //根据节点获取行style(颜色、字体加粗)
     getNodeColorStyle: function (node, colSetting) {
         let colorSetting = optionsOprObj.getOption(optionsOprObj.optionsTypes.COLOROPTS);
@@ -1143,24 +1154,9 @@ $('#property_ok').click(function () {
         changedNodes = project.calcProgram.calcAllNodes(calcAllType.catBills);
     if (changedNodes.length > 0) {
         for (let node of changedNodes){
-            let data = {
-                // projectID: projectID,
-                ID: node.data.ID,
-                quantity: node.data.quantity,
-                calcBase: node.data.calcBase,
-                calcBaseValue: node.data.calcBaseValue,
-                marketUnitFee: node.data.marketUnitFee,
-                marketTotalFee: node.data.marketTotalFee,
-                fees: node.data.fees,
-                feeRate: node.data.feeRate,
-                feeRateID: node.data.feeRateID
-            };
-            if (node.sourceType == 'ration'){
-                rations.push(data);
-            }
-            else if (node.sourceType == 'bills'){
-                bills.push(data);
-            };
+            let data = nodeTools.cutNodeForSave(node);
+            if (node.sourceType == 'ration') rations.push(data)
+            else if (node.sourceType == 'bills') bills.push(data);
         };
     };