Browse Source

定额消耗的自动计算等

zhongzewei 8 years ago
parent
commit
542be1d4a6

+ 11 - 0
modules/ration_repository/controllers/ration_controller.js

@@ -43,5 +43,16 @@ module.exports = {
                 }
             });
         }
+    },
+    updateRationBasePrc: function (req, res) {
+        let data = JSON.parse(req.body.data);
+        rationItem.updateRationBasePrc(data, function (err, message, rst) {
+            if(err){
+                callback(req, res, err, message, null);
+            }
+            else{
+                callback(req, res, err, message, rst);
+            }
+        })
     }
 }

+ 25 - 0
modules/ration_repository/models/ration_item.js

@@ -30,6 +30,9 @@ var rationItemSchema = mongoose.Schema({
     code: String,
     name: String,
     unit: String,
+    labourPrice: Number,
+    materialPrice: Number,
+    machinePrice: Number,
     basePrice: Number,
     sectionId: Number,
     rationRepId: Number,
@@ -177,5 +180,27 @@ rationItemDAO.prototype.updateRationItems = function(rationLibId, sectionId, ite
     });
 };
 
+rationItemDAO.prototype.updateRationBasePrc = function (data, callback) {
+    let gljId = data.gljId, basePrice = data.basePrice;
+    rationItemModel.find({'rationGljList.gljId': gljId}, function (err, reslut) {
+        if(err){
+
+        }
+        else{
+            async.each(reslut, function (rationItem, cb) {
+                let rationBasePrc = rationItem.basePrice,
+                    gljList = rationItem.gljList, gljPrcObj;
+                for(let i=0; i< gljList.length; i++){
+                    if(gljList[i].gljId === gljId){
+                        gljPrcObj = gljList[i];
+                        break;
+                    }
+                }
+
+            });
+        }
+    });
+};
+
 module.exports = new rationItemDAO()
 

+ 1 - 0
modules/ration_repository/routes/ration_rep_routes.js

@@ -59,6 +59,7 @@ module.exports =  function (app) {
 
     apiRouter.post("/getRationItems",rationController.getRationItemsBySection);
     apiRouter.post("/mixUpdateRationItems",rationController.mixUpdateRationItems);
+    apiRouter.post("/updateRationBasePrc",rationController.updateRationBasePrc);
 
     apiRouter.post("/createNewGljTypeNode",repositoryGljController.createNewGljTypeNode);
     apiRouter.post("/updateGljNodes",repositoryGljController.updateGljNodes);

+ 31 - 18
public/web/sheet/sheet_common.js

@@ -165,25 +165,25 @@ var sheetCommonObj = {
                     let gljList = repositoryGljObj.gljList,
                         orgCode = repositoryGljObj.orgCode,
                         isExist = false;
-                    for(let i=0; i< gljList.length; i++){
-                        if(gljList[i].code === sheet.getValue(row, col) && sheet.getValue(row, col)!== orgCode){
-                            $('#codeAlertBtn').click();
-                            sheet.getSheet(0).options.isProtected = true;
-                            $('#codAleConfBtn').click(function () {
-                                sheet.options.isProtected = false;
-                                sheet.setValue(row, 0, orgCode);
-                                sheet.setActiveCell(row, 0);
-                            });
-                            $('#codAleClose').click(function () {
-                                sheet.options.isProtected = false;
-                                sheet.setValue(row, 0, orgCode);
-                                sheet.setActiveCell(row, 0);
-                            });
-                            // sheet.setValue(row, col, orgCode);
-                            isExist = true
+                        for(let i=0; i< gljList.length; i++){
+                            if(gljList[i].code === sheet.getValue(row, col) && sheet.getValue(row, col)!== orgCode){
+                                $('#alertText').text("输入的编号已存在,请重新输入!");
+                                $('#codeAlertBtn').click();
+                                sheet.options.isProtected = true;
+                                $('#codAleConfBtn').click(function () {
+                                    sheet.options.isProtected = false;
+                                    sheet.setValue(row, 0, orgCode);
+                                    sheet.setActiveCell(row, 0);
+                                });
+                                $('#codAleClose').click(function () {
+                                    sheet.options.isProtected = false;
+                                    sheet.setValue(row, 0, orgCode);
+                                    sheet.setActiveCell(row, 0);
+                                });
+                                // sheet.setValue(row, col, orgCode);
+                                isExist = true
+                            }
                         }
-
-                    }
                     if(!isExist){
                         rst[setting.header[col].dataCode] = sheet.getValue(row, col);
                     }
@@ -211,6 +211,19 @@ var sheetCommonObj = {
     unShieldAllCells: function(sheet) {
         sheet.options.isProtected = false;
     },
+    lockCodeCells: function (sheet, rowCount) {
+        let sheetRowCount = sheet.getRowCount();
+        let defaultStyle = new GC.Spread.Sheets.Style();
+        defaultStyle.locked = false;
+        sheet.setDefaultStyle(defaultStyle, GC.Spread.Sheets.SheetArea.viewport);
+        let style = new GC.Spread.Sheets.Style();
+        style.locked = true;
+        sheet.setStyle(-1, 0, style);
+        for(let i =rowCount -1; i<sheetRowCount; i++){
+            sheet.setStyle(i, -1, style);
+        }
+        sheet.options.isProtected = true;
+    },
     lockCells: function(sheet, setting){
         if (setting && setting.view.lockColumns && setting.view.lockColumns.length > 0) {
             sheet.options.isProtected = true;

+ 8 - 0
web/maintain/ration_repository/dinge.html

@@ -501,6 +501,14 @@
                 }
             };
             $(document).ready(function(){
+                /*function round(v,e){
+                    var t=1;
+                    for(;e>0;t*=10,e--);
+                    for(;e<0;t/=10,e++);
+                    return Math.round(v*t)/t;
+                }
+                let a = 10.003, b = 20;
+                console.log(a+b);*/
                 pageOprObj.initPage();
                 rationOprObj.buildSheet($("#rationItemsSheet")[0]);
                 sheetCommonObj.shieldAllCells(rationOprObj.workBook.getSheet(0), rationOprObj.setting);

+ 2 - 2
web/maintain/ration_repository/gongliao.html

@@ -200,7 +200,7 @@
                     </button>
                 </div>
                 <div class="modal-body">
-                    <h5 class="text-danger">输入的编号已存在,请重新输入!</h5>
+                    <h5 class="text-danger" id="alertText">输入的编号已存在,请重新输入!</h5>
                 </div>
                 <div class="modal-footer">
                     <button type="button" class="btn btn-danger" id="codAleConfBtn" data-dismiss="modal">确认</button>
@@ -216,7 +216,7 @@
     <!-- zTree -->
     <script src = "/lib/spreadjs/sheets/gc.spread.sheets.all.10.0.1.min.js"></script>
     <script>GC.Spread.Sheets.LicenseKey = "559432293813965#A0y3iTOzEDOzkjMyMDN9UTNiojIklkI1pjIEJCLi4TPB9mM5AFNTd4cvZ7SaJUVy3CWKtWYXx4VVhjMpp7dYNGdx2ia9sEVlZGOTh7NRlTUwkWR9wEV4gmbjBDZ4ElR8N7cGdHVvEWVBtCOwIGW0ZmeYVWVr3mI0IyUiwCMzETN8kzNzYTM0IicfJye&Qf35VfiEzRwEkI0IyQiwiIwEjL6ByUKBCZhVmcwNlI0IiTis7W0ICZyBlIsIyNyMzM5ADI5ADNwcTMwIjI0ICdyNkIsIibj9SbvNmL4N7bjRnch56ciojIz5GRiwiI8+Y9sWY9QmZ0Jyp96uL9v6L0wap9biY9qiq95q197Wr9g+89iojIh94Wiqi";</script>
-  	<script type="text/javascript" src="/lib/ztree/jquery.ztree.core.js"></script>
+    <script type="text/javascript" src="/lib/ztree/jquery.ztree.core.js"></script>
   	<script type="text/javascript" src="/lib/ztree/jquery.ztree.excheck.js"></script>
     <script type="text/javascript" src="/lib/ztree/jquery.ztree.exedit.js"></script>
     <script type="text/javascript" src="/public/web/treeDataHelper.js"></script>

+ 9 - 0
web/maintain/ration_repository/js/ration.js

@@ -20,6 +20,9 @@ var rationOprObj = {
             {headerName:"编码",headerWidth:120,dataCode:"code", dataType: "String", formatter: "@"},
             {headerName:"名称",headerWidth:300,dataCode:"name", dataType: "String"},
             {headerName:"单位",headerWidth:120,dataCode:"unit", dataType: "String", hAlign: "center"},
+            {headerName:"人工费",headerWidth:120,dataCode:"labourPrice", dataType: "Number", formatter: "0.00", hAlign: "right"},
+            {headerName:"材料费",headerWidth:120,dataCode:"materialPrice", dataType: "Number", formatter: "0.00",  hAlign: "right"},
+            {headerName:"机械费",headerWidth:120,dataCode:"machinePrice", dataType: "Number", formatter: "0.00", hAlign: "right"},
             {headerName:"基价",headerWidth:120,dataCode:"basePrice", dataType: "Number", formatter: "0.00", hAlign: "right"},
             {headerName:"显示名称(以%s表示参数)",headerWidth:350,dataCode:"caption", dataType: "String"},
             {headerName:"取费专业",headerWidth:120,dataCode:"feeType", dataType: "Number", hAlign: "center"}
@@ -58,6 +61,8 @@ var rationOprObj = {
 
         if(!(args.sheetArea === GC.Spread.Sheets.SheetArea.colHeader || args.sheetArea === GC.Spread.Sheets.SheetArea.corner)){
             var cacheSection = me.getCache();
+            console.log(`cache`);
+            console.log(cacheSection);
             if (cacheSection && args.row < cacheSection.length) {
                 rationGLJOprObj.getGljItems(cacheSection[args.row]);
                 rationCoeOprObj.getCoeItems(cacheSection[args.row]);
@@ -150,6 +155,8 @@ var rationOprObj = {
         //var rObj = sheetCommonObj.combineRowData(me.workBook.getSheet(0), me.setting, args.row);
         var rObj = sheetCommonObj.combineRationRowData(me.workBook.getSheet(0), me.setting, args.row);
         me.currentEditingRation = rObj;
+        console.log(`currentEditingRation`);
+        console.log(me.currentEditingRation);
         var cacheSection = me.getCache();
         if (cacheSection) {
             for (var j = 0; j < cacheSection.length; j++) {
@@ -164,6 +171,8 @@ var rationOprObj = {
         //var me = rationOprObj, rObj = sheetCommonObj.combineRowData(me.workBook.getSheet(0), me.setting, args.row),
         var me = rationOprObj, rObj = sheetCommonObj.combineRationRowData(me.workBook.getSheet(0), me.setting, args.row),
             updateArr = [], addArr = [];
+        console.log(`editEnd`);
+        console.log(rObj);
         if (me.currentEditingRation["ID"]) {
             rObj["ID"] = me.currentEditingRation["ID"];
             updateArr.push(rObj);

+ 70 - 1
web/maintain/ration_repository/js/ration_glj.js

@@ -12,7 +12,7 @@ var rationGLJOprObj = {
             {headerName:"名称",headerWidth:400,dataCode:"name", dataType: "String"},
             {headerName:"单位",headerWidth:160,dataCode:"unit", dataType: "String"},
             {headerName:"基价单位",headerWidth:160, dataCode:"basePrice", dataType: "Number", formatter:"0.00",  precision: 2},
-            {headerName:"定额消耗",headerWidth:160, dataCode:"consumeAmt", dataType: "Number", precision: 3},
+            {headerName:"定额消耗",headerWidth:160, dataCode:"consumeAmt", dataType: "Number", formatter: "0.000", precision: 3},
             {headerName:"类型",headerWidth:160,dataCode:"gljType", dataType: "String"}
         ],
         view:{
@@ -68,6 +68,8 @@ var rationGLJOprObj = {
             success: function (result) {
                 if(!result.error && callback){
                     me.distTypeTree = me.getDistTypeTree(result.data);
+                    console.log(`me.distTypeTree`);
+                    console.log(me.distTypeTree);
                     callback();
                 }
             }
@@ -211,11 +213,78 @@ var rationGLJOprObj = {
         })
     },
 
+    rationCal: function () {
+        let me = this;
+        let price = {gljType1: [], gljType2: [], gljType3: []}, rst = {labourPrice: 0, materialPrice: 0, machinePrice: 0}, rationBasePrc = 0;
+        function round(v,e){
+            var t=1;
+            for(;e>0;t*=10,e--);
+            for(;e<0;t/=10,e++);
+            return Math.round(v*t)/t;
+        }
+        if(me.currentRationItem && me.cache['_GLJ_' + me.currentRationItem.ID]){
+            let cacheArr = me.cache['_GLJ_' + me.currentRationItem.ID];
+            cacheArr.forEach(function (gljData) {
+                if(gljData.gljType && gljData.basePrice && gljData.consumeAmt){
+                    let parent = me.distTypeTree.distTypes[me.distTypeTree.prefix + gljData.gljType].parent;
+                    if(parent && parent.data.ID <= 3){
+                        price['gljType' + parent.data.ID].push(round( gljData.basePrice * gljData.consumeAmt, 3));//取三位
+                    }
+                    if(!parent && gljData.gljType <= 3){
+                        price['gljType' + gljData.gljType].push(round( gljData.basePrice * gljData.consumeAmt, 3));//取三位
+                    }
+                }
+            });
+            if(price.gljType1.length > 0){
+                let labourPrice = 0;
+                price.gljType1.forEach(function (singlePrc) {
+                    labourPrice += singlePrc;
+                });
+                let roundPrice = round(labourPrice, 2);
+                rst.labourPrice = roundPrice;
+                rationBasePrc += roundPrice;
+            }
+            if(price.gljType2.length > 0){
+                let materialPrice = 0;
+                price.gljType2.forEach(function (singlePrc) {
+                    materialPrice += singlePrc;
+                });
+                let roundPrice = round(materialPrice, 2);
+                rst.materialPrice = roundPrice;
+                rationBasePrc += roundPrice;
+            }
+            if(price.gljType3.length > 0){
+                let machinePrice = 0;
+                price.gljType3.forEach(function (singlePrc) {
+                    machinePrice += singlePrc;
+                });
+                let roundPrice = round(machinePrice, 2);
+                rst.machinePrice = roundPrice;
+                rationBasePrc += roundPrice;
+            }
+            rst.rationBasePrc = rationBasePrc;
+        }
+        return rst;
+    },
+    getRationUpPrice: function () {
+
+    },
+
     updateRationItem: function() {
         var me = this, updateArr = [];
         if (me.currentRationItem) {
             me.currentRationItem.rationGljList = me.buildRationItemGlj();
+            //recalculate ration basePrice
+            let price = me.rationCal();
+            me.currentRationItem.labourPrice = price.labourPrice;
+            me.currentRationItem.materialPrice = price.materialPrice;
+            me.currentRationItem.machinePrice = price.machinePrice;
+            me.currentRationItem.basePrice = price.rationBasePrc;
             updateArr.push(me.currentRationItem);
+            console.log(`me.cache`);
+            console.log(me.cache['_GLJ_' + me.currentRationItem.ID]);
+            console.log(`updateArr`);
+            console.log(updateArr);
             rationOprObj.mixUpdateRequest(updateArr, [], []);
         }
     },

+ 49 - 33
web/maintain/ration_repository/js/repository_glj.js

@@ -160,10 +160,6 @@ var pageOprObj = {
     },
     showGljItems: function(data, type) {
         var me = repositoryGljObj;
-        console.log(`data`)
-        console.log(data);
-        console.log(`distype`);
-        console.log(me.distTypeTree);
         if (me.workBook) {
             var cacheSection = [];
             var pArr = me.parentNodeIds["_pNodeId_" + type];
@@ -203,25 +199,22 @@ var pageOprObj = {
              }
          }
          if(isHasData){
-             console.log(`enterHasData`);
              if(me.editingRowIdx !== me.cellRowIdx) {
                  let isComple = true;
                  let focusToCol;
                  function getFocusToCol (me){
-                     for(let i=0; i< me.setting.header.length; i++){
-                         if(!me.addGljObj[me.setting.header[i].dataCode]){
-                             return i;
-                         }
+                     if(!me.addGljObj[me.setting.header[0].dataCode]){
+                         return 0;
                      }
-                 }
-                 focusToCol = getFocusToCol(me);
-                 console.log(`focusTocol: ${focusToCol}`);
-                 for(let i=0; i< me.setting.header.length; i++){
-                     if(!me.addGljObj[me.setting.header[i].dataCode]){
-                         isComple = false
+                    else if(!me.addGljObj[me.setting.header[5].dataCode]){
+                         return 5;
+                     }
+                     else {
+                         return -1;
                      }
                  }
-                 if(isComple){
+                 focusToCol = getFocusToCol(me);
+                 if(focusToCol === -1){
 
                  }
                  else {
@@ -251,14 +244,13 @@ var pageOprObj = {
         var me = repositoryGljObj;
         var rObj = sheetCommonObj.combineRowData(me.workBook.getSheet(0), me.setting, args.row);
         me.currentEditingGlj = rObj;
-        console.log(`currentEditingGlj`);
-        console.log(me.currentEditingGlj);
         me.orgCode = me.workBook.getSheet(0).getValue(args.row, 0);
         var cacheSection = me.gljList;
         if (cacheSection) {
             for (var j = 0; j < cacheSection.length; j++) {
                 if (cacheSection[j][me.setting.header[0].dataCode] && cacheSection[j][me.setting.header[0].dataCode] == rObj[me.setting.header[0].dataCode]) {
                     rObj["ID"] = cacheSection[j]["ID"];
+                    rObj.gljClass = cacheSection[j].gljClass;
                     break;
                 }
             }
@@ -270,23 +262,42 @@ var pageOprObj = {
         me.editingRowIdx = args.row;
         if (me.currentEditingGlj["ID"]) {
             rObj["ID"] = me.currentEditingGlj["ID"];
-            updateArr.push(rObj);
+            rObj.gljClass = me.currentEditingGlj.gljClass;
+            for(let col =0; col< me.setting.header.length; col++){
+                if(me.currentEditingGlj[me.setting.header[col].dataCode] !== rObj[me.setting.header[col].dataCode]){
+                    updateArr.push(rObj);
+                    break;
+                }
+            }
+            //update basePrice of ration when editting basePrice of glj
+            if(me.currentEditingGlj.basePrice !== rObj.basePrice){
+                let gljTypeParent = me.distTypeTree.distTypes[me.distTypeTree.prefix + me.currentEditingGlj.gljType],
+                    gljType = -1;
+                if(gljTypeParent && gljTypeParent.data.ID <=3){
+                    gljType = gljTypeParent.data.ID;
+                }
+                if(!gljTypeParent && me.currentEditingGlj.gljType <= 3){
+                    gljType = me.currentEditingGlj.gljType;
+                }
+                let gljBasePrcObj = {gljId: me.currentEditingGlj.ID, gljType: gljType, basePrice: rObj.basePrice};
+                if(gljBasePrcObj.gljType !== -1){
+                    //me.updateRationBasePrcRq(gljBasePrcObj);
+                }
+            }
         } else {
-            //add
             me.addGljObj = rObj;
             let isCanSav = true;
-            for(let i=0; i<me.setting.header.length; i++){
-                if(!rObj[me.setting.header[i].dataCode]){
+                if(!rObj[me.setting.header[0].dataCode] || !rObj[me.setting.header[5].dataCode]){
                     isCanSav = false;
-                    break;
                 }
-            }
             if(isCanSav){
                 me.addGljObj = null;
                 addArr.push(rObj);
             }
         }
-        rObj.gljClass = me.gljCurTypeId;
+        if(me.gljCurTypeId !== 1){
+            rObj.gljClass = me.gljCurTypeId;
+        }
         me.currentEditingGlj = null;
         if(updateArr.length >0 || addArr.length >0){
            me.mixUpdateRequest(updateArr, addArr, []);
@@ -324,8 +335,6 @@ var pageOprObj = {
     },
     onClipboardPasting: function(sender, args) {
         var me = repositoryGljObj;
-        console.log(`me.parentNodeIds`);
-        console.log(me.parentNodeIds);
         if (args.cellRange.colCount != me.setting.header.length || me.gljCurTypeId < 0 || me.parentNodeIds["_pNodeId_" + me.gljCurTypeId]) {
             args.cancel = true;
         }
@@ -354,6 +363,17 @@ var pageOprObj = {
             me.mixUpdateRequest(updateArr, addArr, []);
         }
     },
+    updateRationBasePrcRq: function (gljBasePrcObj) {
+        $.ajax({
+            type: 'post',
+            url: 'api/updateRationBasePrc',
+            data:{data: JSON.stringify({gljId: gljBasePrcObj.gljId, basePrice: gljBasePrcObj.basePrice})},
+            dataType: 'json',
+            success: function (result) {
+
+            }
+        });
+    },
     mixUpdateRequest: function(updateArr, addArr, removeIds) {
         var me = repositoryGljObj;
         $.ajax({
@@ -442,15 +462,11 @@ var gljTypeTreeOprObj = {
         var me = repositoryGljObj,
             gljTypeId = treeNode.ID;
         me.gljCurTypeId = treeNode.ID;
-        console.log(`gljcurtypeId: ${me.gljCurTypeId}`);
         me.currentCache = me.getCache();
-        console.log(`gljList`);
-        console.log(me.gljList);
-        console.log(`nowCache`);
-        console.log(me.currentCache);
         me.showGljItems(me.gljList, gljTypeId);
         if (me.parentNodeIds["_pNodeId_" + treeNode.ID]) {
-            sheetCommonObj.shieldAllCells(me.workBook.getSheet(0), me.setting);
+            sheetCommonObj.lockCodeCells(me.workBook.getSheet(0), me.gljList.length);
+            //sheetCommonObj.shieldAllCells(me.workBook.getSheet(0), me.setting);
         } else {
             sheetCommonObj.unShieldAllCells(me.workBook.getSheet(0));
         }