Parcourir la source

调差bug修复

laiguoran il y a 3 ans
Parent
commit
63862d1145

+ 6 - 6
app/controller/material_controller.js

@@ -504,10 +504,10 @@ module.exports = app => {
                     }
                     // 批量插入并修改is_new值
                     await ctx.service.materialListGcl.setData(lastMaterial.id, hadBillsList);
-                    // responseData.data.gclList = hadBillsList;
-                // } else {
-                    // const hadBillsList = await ctx.service.materialListGcl.getAllDataByCondition({ where: { tid: ctx.tender.id } });
-                    // responseData.data.gclList = hadBillsList;
+                    responseData.data.gclList = hadBillsList;
+                } else {
+                    const hadBillsList = await ctx.service.materialListGcl.getAllDataByCondition({ where: { tid: ctx.tender.id } });
+                    responseData.data.gclList = hadBillsList;
                 }
                 ctx.body = responseData;
             } catch (err) {
@@ -1456,10 +1456,10 @@ module.exports = app => {
                         if (isNaN(data.updateData.quantity)) {
                             throw '不能输入其它非数字类型字符';
                         }
-                        responseData.data = await ctx.service.materialList.saves(data.updateData);
+                        responseData.data = await ctx.service.materialList.saves(data.updateData, true);
                         break;
                     case 'pastes':
-                        responseData.data = await ctx.service.materialList.savePastes(data.updateData);
+                        responseData.data = await ctx.service.materialList.savePastes(data.updateData, true);
                         // 取所有工料表
                         break;
                     case 'resetChecklist':

+ 50 - 26
app/public/js/material_checklist.js

@@ -130,15 +130,16 @@ $(document).ready(() => {
         curLedgerData = result.curLedgerData;
         pos = result.pos;
         curPosData = result.curPosData;
-        materialListData = result.materialListData;
+        // materialListData = result.materialListData;
         notJoinList = result.materialNotJoinListData;
         materialChecklistData = result.materialChecklistData;
+        gclList = result.gclList;
         // 解析清单汇总数据
         gclGatherModel.loadLedgerData(ledger, curLedgerData);
         gclGatherModel.loadPosData(pos, curPosData);
         gclGatherData = gclGatherModel.gatherGclData();
         console.log(gclGatherData);
-        const hadBillsidList = _.uniq(_.map(materialListData, 'gcl_id'));
+        const hadBillsidList = _.uniq(_.map(gclList, 'gcl_id'));
         console.log(hadBillsidList);
         // 对比清单设置和调差清单,还要和台账对比,显示已选清单列表 不同则更新到清单设置页中
         const pushData = [];
@@ -171,6 +172,10 @@ $(document).ready(() => {
                         updateObj.had_bills = 0;
                         // updateData.push({ id: mc.id, mid: materialID, had_bills: 0 });
                     }
+                } else if (mc.had_bills === 0) {
+                    if (_.indexOf(hadBillsidList, gcl.leafXmjs ? gcl.leafXmjs[0].gcl_id: null) !== -1) {
+                        updateObj.had_bills = 1;
+                    }
                 }
                 // 更新工程量及台账金额
                 if (mc.quantity !== (gcl.quantity ? gcl.quantity : null)) {
@@ -250,20 +255,32 @@ $(document).ready(() => {
     let materialList = [];
     function loadMaterialData(iGclRow, iLXmjRow) {
         const gcl = gclGatherData[iGclRow];
-        const leafXmjs = gcl && gcl.leafXmjs ? gcl.leafXmjs.filter(item => {
-            return item.qc_qty || item.contract_qty
-        }) : null;
-        if (leafXmjs) {
-            const xmj = leafXmjs[iLXmjRow];
+        // const leafXmjs = gcl && gcl.leafXmjs ? gcl.leafXmjs.filter(item => {
+        //     return item.qc_qty || item.contract_qty
+        // }) : null;
+        if (gcl && gcl.leafXmjs) {
+            const xmj2 = gcl.leafXmjs[iLXmjRow];
             materialList = [];
-            materialList = _.filter(materialListData, function (m) {
-                return m.gcl_id === xmj.gcl_id && m.xmj_id === xmj.id && ((xmj.mx_id !==undefined && m.mx_id === xmj.mx_id) || xmj.mx_id === undefined);
-            });
-            // for (const m of materialListData) {
-            //     if (m.gcl_id === xmj.gcl_id && m.xmj_id === xmj.id && ((xmj.mx_id !==undefined && m.mx_id === xmj.mx_id) || xmj.mx_id === undefined)) {
-            //         materialList.push(m);
-            //     }
-            // }
+            const newMaterialList = _.uniqBy(_.filter(gclList, function (m) {
+                return xmj2 && m.gcl_id === xmj2.gcl_id;
+            }), 'mb_id');
+            for(const m of newMaterialList) {
+                const bills = _.find(materialBillsData, { id: m.mb_id });
+                if(bills) {
+                    m.code = bills.code;
+                    m.name = bills.name;
+                    m.unit = bills.unit;
+                }
+            }
+            console.log(newMaterialList);
+            materialList = newMaterialList;
+            // const leafXmjs = gcl.leafXmjs.filter(item => {
+            //     return item.qc_qty || item.contract_qty
+            // });
+            // const xmj = leafXmjs[iLXmjRow];
+            // materialList = _.filter(materialListData, function (m) {
+            //     return xmj && m.gcl_id === xmj.gcl_id && m.xmj_id === xmj.id && ((xmj.mx_id !==undefined && m.mx_id === xmj.mx_id) || xmj.mx_id === undefined);
+            // });
             // 对清单调差工料table的单位数量进行改变
             materialSpreadSetting.cols[materialSpreadSetting.cols.length - 2].title = '|' + gcl.unit + '数量 �';
             SpreadJsObj.initSheet(materialSpread.getActiveSheet(), materialSpreadSetting);
@@ -346,7 +363,7 @@ $(document).ready(() => {
         if (isCheck) {
             newMaterialChecklistData = [];
             $('#notBills_checkList').prop('checked', false);
-            const materialList0 = _.uniq(_.map(_.filter(materialListData, { quantity: 0 }), 'gcl_id'));
+            const materialList0 = _.uniq(_.map(_.filter(gclList, { quantity: 0 }), 'gcl_id'));
             if (materialList0.length > 0) {
                 const hadMaterialChecklistData = _.filter(materialChecklistData, { had_bills: 1 });
                 for (const h of hadMaterialChecklistData) {
@@ -384,7 +401,7 @@ $(document).ready(() => {
         const sheet = ledgerSpread.getActiveSheet();
         const select = SpreadJsObj.getSelectObject(sheet);
         const gclIndex = _.findIndex(gclGatherData, { b_code: select.b_code, name: select.name, unit: select.unit, unit_price: select.unit_price });
-        const gcl = gclGatherData[gclIndex].leafXmjs.filter(item => item.gather_qty !== null && item.gather_qty !== undefined);
+        const gcl = gclGatherData[gclIndex].leafXmjs;
         const index = materialChecklistData.indexOf(select);
         const datas = [];
         for (const xmj of gcl) {
@@ -401,7 +418,8 @@ $(document).ready(() => {
         // 上传到数据库
         console.log(datas, gcl);
         postData(window.location.pathname + '/save', {type: 'adds', checklist: { id: select.id, had_bills: 1 }, postData: {xmjs: datas, mbIds: mb_id}}, function (result) {
-            materialListData = result;
+            // materialListData = result;
+            gclList = result;
             materialChecklistData[index].had_bills = 1;
             loadMaterialData(gclIndex, 0);
             // SpreadJsObj.reLoadRowData(ledgerSpread.getActiveSheet(), index);
@@ -419,7 +437,7 @@ $(document).ready(() => {
                 const select = SpreadJsObj.getSelectObject(sheet);
                 const index = materialChecklistData.indexOf(select);
                 const gclIndex = _.findIndex(gclGatherData, { b_code: select.b_code, name: select.name, unit: select.unit, unit_price: select.unit_price });
-                const gcl = gclGatherData[gclIndex].leafXmjs.filter(item => item.gather_qty !== null && item.gather_qty !== undefined);
+                const gcl = gclGatherData[gclIndex].leafXmjs;
                 const datas = [];
                 for (const xmj of gcl) {
                     const data = {
@@ -430,9 +448,12 @@ $(document).ready(() => {
                     datas.push(data);
                 }
                 const xmj = gcl[0];
-                const materialCount = _.size(_.filter(materialListData, function (m) {
-                    return m.gcl_id === xmj.gcl_id && m.xmj_id === xmj.id && ((xmj.mx_id !==undefined && m.mx_id === xmj.mx_id) || xmj.mx_id === undefined);
+                const materialCount = _.size(_.filter(gclList, function (m) {
+                    return m.gcl_id === xmj.gcl_id;
                 }));
+                // const materialCount = _.size(_.filter(materialListData, function (m) {
+                //     return m.gcl_id === xmj.gcl_id && m.xmj_id === xmj.id && ((xmj.mx_id !==undefined && m.mx_id === xmj.mx_id) || xmj.mx_id === undefined);
+                // }));
                 let checklist = false;
                 if (materialCount === 1) {
                     checklist = {
@@ -442,7 +463,8 @@ $(document).ready(() => {
                 }
                 console.log(datas, materialSelect.mb_id, checklist);
                 postData(window.location.pathname + '/save', {type: 'dels', checklist, postData: { xmjs: datas, mb_id: materialSelect.mb_id }}, function (result) {
-                    materialListData = result;
+                    // materialListData = result;
+                    gclList = result;
                     if (checklist) materialChecklistData[index].had_bills = checklist.had_bills;
                     loadMaterialData(gclIndex, 0);
                     // SpreadJsObj.reLoadRowData(ledgerSpread.getActiveSheet(), index);
@@ -501,7 +523,7 @@ $(document).ready(() => {
                     const ledgerSheet = ledgerSpread.getActiveSheet();
                     const ledgerSelect = SpreadJsObj.getSelectObject(ledgerSheet);
                     const gclIndex = _.findIndex(gclGatherData, { b_code: ledgerSelect.b_code, name: ledgerSelect.name, unit: ledgerSelect.unit, unit_price: ledgerSelect.unit_price });
-                    const gcl = gclGatherData[gclIndex].leafXmjs.filter(item => item.gather_qty !== null && item.gather_qty !== undefined);
+                    const gcl = gclGatherData[gclIndex].leafXmjs;
                     const datas = [];
                     for (const xmj of gcl) {
                         const data = {
@@ -513,7 +535,8 @@ $(document).ready(() => {
                     }
                     console.log(exprQuantity, datas, select.mb_id);
                     postData(window.location.pathname + '/save', { type:'updates', updateData: { xmjs: datas, expr: exprQuantity.expr, quantity: exprQuantity.quantity, mb_id: select.mb_id } }, function (result) {
-                        materialListData = result;
+                        // materialListData = result;
+                        gclList = result;
                         loadMaterialData(gclIndex, 0);
                         materialSpread.getActiveSheet().setSelection(info.row + 1, info.col, 1, 1);
                     }, function () {
@@ -598,7 +621,7 @@ $(document).ready(() => {
                 const ledgerSheet = ledgerSpread.getActiveSheet();
                 const ledgerSelect = SpreadJsObj.getSelectObject(ledgerSheet);
                 const gclIndex = _.findIndex(gclGatherData, { b_code: ledgerSelect.b_code, name: ledgerSelect.name, unit: ledgerSelect.unit, unit_price: ledgerSelect.unit_price });
-                const gcl = gclGatherData[gclIndex].leafXmjs.filter(item => item.gather_qty !== null && item.gather_qty !== undefined);
+                const gcl = gclGatherData[gclIndex].leafXmjs;
                 const datas = [];
                 for (const xmj of gcl) {
                     const data2 = {
@@ -611,7 +634,8 @@ $(document).ready(() => {
                 console.log(data, datas);
                 // 更新至服务器
                 postData(window.location.pathname + '/save', { type:'pastes', updateData: { xmjs: datas, pasteData: data } }, function (result) {
-                    materialListData = result;
+                    // materialListData = result;
+                    gclList = result;
                     loadMaterialData(gclIndex, 0);
                     materialSpread.getActiveSheet().setSelection(info.cellRange.row, info.cellRange.col, info.cellRange.rowCount, info.cellRange.colCount);
                 }, function () {

+ 2 - 1
app/public/js/material_list.js

@@ -209,6 +209,7 @@ $(document).ready(() => {
         pos = result.pos;
         curPosData = result.curPosData;
         materialListData = result.materialListData;
+        const gclList = result.gclList;
         notJoinList = result.materialNotJoinListData;
         materialChecklistData = result.materialChecklistData;
         // 解析清单汇总数据
@@ -217,7 +218,7 @@ $(document).ready(() => {
         gclGatherData = gclGatherModel.gatherGclData();
         console.log(gclGatherData);
         if (openMaterialChecklist) {
-            const hadBillsidList = _.uniq(_.map(materialListData, 'gcl_id'));
+            const hadBillsidList = _.uniq(_.map(gclList, 'gcl_id'));
             console.log(hadBillsidList);
             // 判断是否有修订影响到本次数据,并有几率修改清单设置页的值
             const pushData = [];

+ 47 - 22
app/service/material_list.js

@@ -351,20 +351,22 @@ module.exports = app => {
                         //     delList.push(mlInfo.id);
                         //     mb_idList.push(mb);
                         // }
-                        const newLists = {
-                            tid: this.ctx.tender.id,
-                            order: this.ctx.material.order,
-                            mid: this.ctx.material.id,
-                            mb_id: mb,
-                            gcl_id: xmj.gcl_id,
-                            xmj_id: xmj.xmj_id,
-                            mx_id: xmj.mx_id,
-                            gather_qty: xmj.gather_qty,
-                            in_time: new Date(),
-                            is_join: xmj.is_join,
-                        };
-                        list.push(newLists);
-                        if (this._.findIndex(listGcl, { gcl_id: xmj.gcl_id }) === -1) {
+                        if (xmj.gather_qty) {
+                            const newLists = {
+                                tid: this.ctx.tender.id,
+                                order: this.ctx.material.order,
+                                mid: this.ctx.material.id,
+                                mb_id: mb,
+                                gcl_id: xmj.gcl_id,
+                                xmj_id: xmj.xmj_id,
+                                mx_id: xmj.mx_id,
+                                gather_qty: xmj.gather_qty,
+                                in_time: new Date(),
+                                is_join: xmj.is_join,
+                            };
+                            list.push(newLists);
+                        }
+                        if (this._.findIndex(listGcl, {gcl_id: xmj.gcl_id}) === -1) {
                             const newListGcl = {
                                 tid: this.ctx.tender.id,
                                 order: this.ctx.material.order,
@@ -386,11 +388,16 @@ module.exports = app => {
                 // 新增工料清单关联
                 if (list.length > 0) {
                     const result = await transaction.insert(this.tableName, list);
-                    const result2 = await transaction.insert(this.ctx.service.materialListGcl.tableName, listGcl);
-                    if (result.affectedRows === 0 || result2.affectedRows === 0) {
+                    if (result.affectedRows === 0 ) {
                         throw '新增工料数据失败';
                     }
                 }
+                if (listGcl.length > 0) {
+                    const result2 = await transaction.insert(this.ctx.service.materialListGcl.tableName, listGcl);
+                    if (result2.affectedRows === 0) {
+                        throw '新增工料关联数据失败';
+                    }
+                }
                 if (checklist) {
                     await this.ctx.service.materialChecklist.updateHadBills(transaction, checklist.id, checklist.had_bills);
                 }
@@ -402,7 +409,7 @@ module.exports = app => {
                 //     }
                 // }
                 await transaction.commit();
-                return await this.getMaterialData(this.ctx.tender.id, this.ctx.material.id);
+                return checklist ? await this.ctx.service.materialListGcl.getAllDataByCondition({ where: { tid: this.ctx.tender.id } }) : await this.getMaterialData(this.ctx.tender.id, this.ctx.material.id);
             } catch (err) {
                 await transaction.rollback();
                 throw err;
@@ -436,7 +443,7 @@ module.exports = app => {
                 }
                 await transaction.commit();
                 // console.log(datas);
-                return await this.getMaterialData(this.ctx.tender.id, this.ctx.material.id);
+                return checklist ? await this.ctx.service.materialListGcl.getAllDataByCondition({ where: { tid: this.ctx.tender.id } }) : await this.getMaterialData(this.ctx.tender.id, this.ctx.material.id);
             } catch (err) {
                 await transaction.rollback();
                 throw err;
@@ -449,7 +456,7 @@ module.exports = app => {
          * @param {int} order 期数
          * @return {void}
          */
-        async saves(datas) {
+        async saves(datas, checklist = false) {
             if (!this.ctx.tender || !this.ctx.material) {
                 throw '数据错误';
             }
@@ -496,7 +503,7 @@ module.exports = app => {
                 if (updateListGcl.length > 0) await transaction.updateRows(this.service.materialListGcl.tableName, updateListGcl);
                 await this.calcQuantityByML(transaction, mb_id);
                 await transaction.commit();
-                return await this.getMaterialData(this.ctx.tender.id, this.ctx.material.id);
+                return checklist ? await this.ctx.service.materialListGcl.getAllDataByCondition({ where: { tid: this.ctx.tender.id } }) : await this.getMaterialData(this.ctx.tender.id, this.ctx.material.id);
             } catch (err) {
                 await transaction.rollback();
                 throw err;
@@ -508,7 +515,7 @@ module.exports = app => {
          * @param {Object} data 工料内容
          * @return {void}
          */
-        async savePastes(datas) {
+        async savePastes(datas, checklist = false) {
             if (!this.ctx.tender || !this.ctx.material) {
                 throw '数据错误';
             }
@@ -519,6 +526,8 @@ module.exports = app => {
 
                 for (const data of datas.pasteData) {
                     const updateDatas = [];
+                    const updateListGcl = [];
+                    const listGcl = [];
                     for (const xmj of datas.xmjs) {
                         const udata = {
                             row: {
@@ -535,12 +544,28 @@ module.exports = app => {
                             },
                         };
                         updateDatas.push(udata);
+                        if (this._.indexOf(listGcl, xmj.gcl_id) === -1) {
+                            listGcl.push(xmj.gcl_id);
+                            updateListGcl.push({
+                                row: {
+                                    expr: datas.expr,
+                                    quantity: datas.quantity,
+                                },
+                                where: {
+                                    tid: this.ctx.tender.id,
+                                    mid: this.ctx.material.id,
+                                    mb_id: data.mb_id,
+                                    gcl_id: xmj.gcl_id,
+                                },
+                            });
+                        }
                     }
                     if (updateDatas.length > 0) await transaction.updateRows(this.tableName, updateDatas);
+                    if (updateListGcl.length > 0) await transaction.updateRows(this.service.materialListGcl.tableName, updateListGcl);
                     await this.calcQuantityByML(transaction, data.mb_id);
                 }
                 await transaction.commit();
-                return await this.getMaterialData(this.ctx.tender.id, this.ctx.material.id);
+                return checklist ? await this.ctx.service.materialListGcl.getAllDataByCondition({ where: { tid: this.ctx.tender.id } }) : await this.getMaterialData(this.ctx.tender.id, this.ctx.material.id);
             } catch (err) {
                 await transaction.rollback();
                 throw err;

+ 1 - 1
app/view/material/checklist.ejs

@@ -68,5 +68,5 @@
     const stage_order = <%- material.order %>;
     const materialID = <%- material.id %>;
     const materialDecimal = JSON.parse(unescape('<%- escape(JSON.stringify(material.decimal)) %>'));
-    let materialChecklistData, materialListData, notJoinList, ledger, curLedgerData, pos, curPosData, gclGatherData;
+    let materialChecklistData, notJoinList, ledger, curLedgerData, pos, curPosData, gclGatherData, gclList;
 </script>