浏览代码

清单,输入清单编号

MaiXinRong 7 年之前
父节点
当前提交
c8a7f1d5f4

+ 6 - 0
modules/bills_lib/controllers/bills_lib_controllers.js

@@ -239,6 +239,12 @@ module.exports = {
         billsLibDao.edUpdateItem(data, function(err, message, id){
             callback(req, res, err, message, id);
         })
+    },
+    getStdBillsByCode: function (req, res) {
+        let data = JSON.parse(req.body.data);
+        billsLibDao.getStdBillsByCode(data, function (err, message, data) {
+            callback(req, res, err, message, data)
+        });
     }
 }
 

+ 3 - 0
modules/bills_lib/controllers/bills_permissionController.js

@@ -53,6 +53,9 @@ class billsPermContr extends baseController{
     deleteBills(req, res){
         billsController.deleteBills(req, res);
     }
+    getStdBillsByCode(req, res) {
+        billsController.getStdBillsByCode(req, res);
+    }
 
 }
 

+ 88 - 0
modules/bills_lib/models/bills_lib_interfaces.js

@@ -3031,5 +3031,93 @@ billsLibDao.prototype.edUpdateItem = function(data, callback){
 };
 //
 
+billsLibDao.prototype.getStdBillsByCode = function (data, callback) {
+    let findData = function (value, field, Array) {
+        let i = 0;
+        for (i = 0; i < Array.length; i++) {
+            if (value[field] === Array[i][field]) {
+                return Array[i];
+            }
+        }
+        return null;
+    };
+    let MergeData = function (arr) {
+        let result = "", count = 0;
+        for(let i = 0; i < arr.length; i++){
+            if(arr[i].isChecked === true){
+                count += 1;
+                if (count === 1) {
+                    result += count + ". " + arr[i].content;
+                } else {
+                    result += "\n" + count + ". " + arr[i].content;
+                }
+            }
+        }
+        return result;
+    }
+    async.waterfall([
+        function (callback) {
+            Bills.findOne({'billsLibId': data.billsLibId, 'code': data.code, 'deleted': false}, "-_id", function (err, result) {
+                callback(err, JSON.parse(JSON.stringify(result)));
+            });
+        },
+        function (bills, callback) {
+            if (bills) {
+                ItemCharacter.find({'billsLibId': data.billsLibId, 'deleted': false}, '-_id', function (err, result) {
+                    if (err) {
+                        callback(err, bills);
+                    } else {
+                        bills.itemCharacter = [];
+                        if (result && bills && bills.items) {
+                            for (let item of bills.items) {
+                                let itemData = findData(item, 'id', result);
+                                if (itemData) {
+                                    bills.itemCharacter.push(JSON.parse(JSON.stringify(itemData)));
+                                }
+                            }
+                        }
+                        bills.itemCharacterText = MergeData(bills.itemCharacter);
+                        callback(err, bills);
+                    }
+                });
+            } else {
+                callback(null, bills);
+            }
+            
+        },
+        function (bills, callback) {
+            if (bills) {
+                JobContent.find({'billsLibId': data.billsLibId, 'deleted': false}, '-_id', function (err, result) {
+                    if (err) {
+                        callback(err, bills);
+                    } else {
+                        bills.jobContent = [];
+                        if (result && bills && bills.jobs) {
+                            for (let job of bills.jobs) {
+                                let jobData = findData(job, 'id', result);;
+                                if (jobData) {
+                                    jobData = JSON.parse(JSON.stringify(jobData));
+                                    jobData.isChecked = true;
+                                    bills.jobContent.push(jobData);
+                                }
+                            }
+                        }
+                        bills.jobContentText = MergeData(bills.jobContent);
+                        callback(err, bills);
+                    }
+                });
+            } else {
+                callback(null, bills);
+            }
+        }
+    ], function (err, result) {
+        if (err) {
+            callback(1, err, null);
+        } else {
+            callback(0, err, result);
+        }
+    });
+};
+
 
 module.exports = new billsLibDao();

+ 2 - 0
modules/bills_lib/routes/bills_lib_routes.js

@@ -65,6 +65,8 @@ module.exports =function (app) {
     billsRouter.post("/edCreateItem", itemsContr.init, itemsContr.edCreateItem);
     billsRouter.post("/edUpdateItem", itemsContr.init, itemsContr.edUpdateItem);
 
+    billsRouter.post('/getStdBillsByCode', billsContr.init, billsContr.getStdBillsByCode);
+
     app.use("/stdBillsEditor", billsRouter);
 
 }

+ 56 - 0
web/building_saas/main/js/models/bills.js

@@ -285,6 +285,62 @@ var Bills = {
             }
         };
 
+        bills.prototype.formatCode = function (stdCode, formatCode) {
+            let reg = /^stdCode/, matchs= [];
+            let format = function (Number) {
+                let s = Number + '';
+                while (s.length < 3) {
+                    s = '0' + s;
+                }
+                return s;
+            }
+            let getNewFormatCode = function () {
+                for (i = 1; i <= matchs.length + 1; i++) {
+                    let formatCode = stdCode + format(i);
+                    if (matchs.indexOf(formatCode) === -1) {
+                        return formatCode
+                    }
+                }
+            }
+            for (let data of this.datas) {
+                if (data.code && data.code.length === 12 && reg.test(data.code)) {
+                    matchs.push(data.code);
+                }
+            }
+            if (formatCode) {
+                if (matchs.indexOf(formatCode) >= 0) {
+                    return getNewFormatCode();
+                } else {
+                    return formatCode;
+                }
+            } else {
+                return getNewFormatCode();
+            }
+        };
+
+        bills.prototype.replaceBills = function (node, stdBillsData, code) {
+            let updateData = [];
+            node.data.code = code;
+            if (stdBillsData) {
+                node.data.name = stdBillsData.name;
+                node.data.unit = stdBillsData.unit;
+                // 工程量计算规则
+                node.data.ruleText = stdBillsData.ruleText;
+                // 说明(补注)
+                node.data.comments = stdBillsData.recharge;
+                // 工作内容
+                node.data.jobContent = stdBillsData.jobContent;
+                node.data.jobContentText = stdBillsData.jobContentText;
+                // 特征
+                node.data.itemCharacter = stdBillsData.itemCharacter;
+                node.data.itemCharacterText = stdBillsData.itemCharacterText;
+            }
+            updateData.push({'updateType': 'ut_update', 'updateData': tools.formatBillsUpdateData(node.data)});
+
+            this.project.pushNow('replaceBills', this.getSourceType(), updateData);
+            return node;            
+        }
+
         return new bills(project);
     }
 };

+ 3 - 2
web/building_saas/main/js/views/character_content_view.js

@@ -661,8 +661,9 @@ let pageCCOprObj = {
         node.data.itemCharacter = itemCharacter;
         node.data.jobContentText = contentTxt ? contentTxt : '';
         node.data.itemCharacterText = characterTxt ? characterTxt : '';
-
-
+    },
+    safeItemCharater: function (itemCharater) {
+        return characterOprObj.buildItemCharactet(itemCharater);
     },
     //设置特征及内容currentCache
     setCacheAndShow: function (node) {

+ 48 - 1
web/building_saas/main/js/views/project_view.js

@@ -163,6 +163,50 @@ var projectObj = {
         this.mainController.refreshTreeNode(nodes, false);
         calc = null;
     },
+    updateBillsCode: function (node, value) {
+        let project = projectObj.project;
+        let stdMatchCode, formatCode;
+        let searchStdBillsAndUpdate = function (stdCode, formatCode) {
+            if (projectInfoObj.projectInfo.engineeringInfo.bill_lib.length > 0) {
+                let libId = projectInfoObj.projectInfo.engineeringInfo.bill_lib[0].id;
+                CommonAjax.post('/stdBillsEditor/getStdBillsByCode', {userId: userID, billsLibId: libId, code: stdCode}, function (data) {
+                    if (data) {
+                        data.itemCharacter = pageCCOprObj.safeItemCharater(data.itemCharacter);
+                        project.Bills.replaceBills(node.source, data, formatCode);
+                    } else {
+                        project.Bills.updateField(node.source, 'code', formatCode, true);
+                    }
+                    projectObj.mainController.refreshTreeNode([node], false);
+                });
+            } else {
+                project.Bills.updateField(node.source, 'code', value, true);
+                projectObj.mainController.refreshTreeNode([node], false);
+            }
+        }
+        if (value.length === 9 && /^[\d]+$/.test(value)) {
+            stdMatchCode = value;
+            formatCode = project.Bills.formatCode(stdMatchCode);
+            searchStdBillsAndUpdate(stdMatchCode, formatCode);
+        } else if (value.length === 12 && /^[\d]+$/.test(value)) {
+            stdMatchCode = value.substr(0, 9);
+            formatCode = project.Bills.formatCode(stdMatchCode, value);
+            searchStdBillsAndUpdate(stdMatchCode, formatCode);
+        } else {
+            project.Bills.updateField(node.source, 'code', value, true);
+            this.mainController.refreshTreeNode([node], false);
+        } 
+    },
+    updateRationCode: function (node, value) {
+
+    },
+    updateCode: function (node, value) {
+        let project = projectObj.project;
+        if (node.sourceType === project.Bills.getSourceType()) {
+            this.updateBillsCode(node, value);
+        } else if (node.sourceType === project.Ration.getSourceType()) {
+            this.updateRationCode(node, value);
+        }
+    },
     mainSpreadEditEnded: function (sender, info) {
         let project = projectObj.project;
         let node = project.mainTree.items[info.row];
@@ -173,7 +217,7 @@ var projectObj = {
 
         if (value && value !== calcFees.getFee(node.data, fieldName)) {
             if (fieldName === 'code') {
-
+                projectObj.updateCode(node, value);
             } else if (fieldName === 'quantity' && project.quantity_detail.quantityEditChecking(value,node,fieldName)) {
                 projectObj.updateAndReCalculate(node, fieldName, value);
             } else if (fieldName === 'feesIndex.common.unitFee') {
@@ -232,6 +276,9 @@ var projectObj = {
                         col.data.decimal = that.project.getDecimal(col.data.digit);
                         col.data.formatter = MainTreeCol.getNumberFormatter(col.data.decimal);
                     }
+                    if (col.data.field === 'code') {
+                        col.data.formatter = '@';
+                    }
                 });
 
                 that.project.calcProgram = new CalcProgram(that.project);

+ 1 - 1
web/building_saas/main/js/views/std_bills_lib.js

@@ -66,7 +66,7 @@ var billsLibObj = {
         var stdBillsTreeController = TREE_SHEET_CONTROLLER.createNew(stdBillsTree, billsLibObj.stdBillsSpread.getActiveSheet(), billsLibObj.stdBillsTreeSetting);
         var findData = function (value, field, Array) {
             var i = 0;
-            for (i = 0; i < Array.length - 1; i++) {
+            for (i = 0; i < Array.length; i++) {
                 if (value[field] === Array[i][field]) {
                     return Array[i];
                 }