Преглед изворни кода

材料调差和附件上传bug

laiguoran пре 5 година
родитељ
комит
033c6807d8

+ 18 - 6
app/controller/material_controller.js

@@ -229,12 +229,14 @@ module.exports = app => {
                 // 取对应期的截取上期的调差金额和应耗数量
                 for (const mindex in renderData.materialBillsData) {
                     const pre_tp = renderData.materialBillsData[mindex].pre_tp !== null ? renderData.materialBillsData[mindex].pre_tp.split(',')[ctx.material.order - 1] : null;
-                    const quantity = renderData.materialBillsData[mindex].quantity !== null ? renderData.materialBillsData[mindex].quantity.split(',')[ctx.material.order - 1] : null;
                     renderData.materialBillsData[mindex].pre_tp = pre_tp;
-                    renderData.materialBillsData[mindex].quantity = quantity;
+                    if (ctx.material.readOnly) {
+                        const quantity = renderData.materialBillsData[mindex].s_quantity.split(',')[ctx.material.order - 1];
+                        renderData.materialBillsData[mindex].quantity = quantity;
+                    }
                 }
                 // 取所有已被调用的工料清单表
-                renderData.materialListData = await ctx.service.materialList.getAllDataByCondition({ where: searchsql });
+                renderData.materialListData = await ctx.service.materialList.getAllDataByCondition({ tid: ctx.tender.id, mid: ctx.material.id });
                 renderData.materialType = JSON.stringify(materialConst);
                 renderData.jsFiles = this.app.jsFiles.common.concat(this.app.jsFiles.material.info);
                 await this.layout('material/info.ejs', renderData, 'material/info_modal.ejs');
@@ -262,7 +264,7 @@ module.exports = app => {
                 }
                 renderData.materialBillsData = await ctx.service.materialBills.getAllDataByCondition({ where: searchsql });
                 // 取所有已被调用的工料清单表
-                renderData.materialListData = await ctx.service.materialList.getMaterialData(ctx.tender.id, midList);
+                renderData.materialListData = await ctx.service.materialList.getMaterialData(ctx.tender.id, ctx.material.id);
                 renderData.materialNotJoinListData = await ctx.service.materialListNotjoin.getAllDataByCondition({ where: { tid: ctx.tender.id, mid: ctx.material.id } });
                 renderData.materialType = JSON.stringify(materialConst);
                 renderData.jsFiles = this.app.jsFiles.common.concat(this.app.jsFiles.material.list);
@@ -297,7 +299,7 @@ module.exports = app => {
                         responseData.data = await ctx.service.materialList.add(data.postData);
                         break;
                     case 'del':
-                        await ctx.service.materialList.del(data.id);
+                        await ctx.service.materialList.del(data.id, data.mb_id);
                         break;
                     case 'update':
                         if (data.updateData.quantity === '' || data.updateData.quantity === null) {
@@ -366,6 +368,16 @@ module.exports = app => {
                         }
                         await ctx.service.materialBills.save(data.updateData);
                         break;
+                    case 'rate':
+                        // 判断数量是否为数字
+                        if (isNaN(data.rate)) {
+                            throw '不能输入其它非数字类型字符';
+                        }
+                        if (ctx.material.readOnly) {
+                            throw '无权操作';
+                        }
+                        await ctx.service.material.changeRate(data.rate);
+                        break;
                     default: throw '参数有误';
                 }
 
@@ -441,7 +453,7 @@ module.exports = app => {
             }
         }
         /**
-         * 上报
+         * 上报和重新上报
          * @param ctx
          * @returns {Promise<void>}
          */

+ 13 - 6
app/public/js/material.js

@@ -58,9 +58,9 @@ $(document).ready(() => {
                 return item.mb_id === data.id;
             });
         },
-        isStage: function (data) {
-            return data.mid === materialID;
-        }
+        // isStage: function (data) {
+        //     return data.mid === materialID;
+        // }
     }
 
     const materialCol = {
@@ -79,7 +79,7 @@ $(document).ready(() => {
         },
         readOnly: {
             isEdit: function (data) {
-                return !(!readOnly && materialBase.isEdit(data) === undefined && materialBase.isStage(data));
+                return !(!readOnly && materialBase.isEdit(data) === undefined);
             },
             remark: function () {
                 return readOnly;
@@ -119,7 +119,6 @@ $(document).ready(() => {
         del: function () {
             const sheet = materialSpread.getActiveSheet();
             const select = SpreadJsObj.getSelectObject(sheet);
-            console.log(select);
             postData(window.location.pathname + '/save', {type: 'del', id: select.id}, function (result) {
                 const index = materialBillsData.indexOf(select);
                 materialBillsData.splice(index, 1);
@@ -207,7 +206,6 @@ $(document).ready(() => {
                 select.msg_spread = materialCol.getValue.msg_spread(select);
                 select.m_spread = materialCol.getValue.m_spread(select);
                 select.m_tp = materialCol.getValue.m_tp(select);
-                console.log(select);
                 // 更新至服务器
                 postData(window.location.pathname + '/save', { type:'update', updateData: select }, function (result) {
                     SpreadJsObj.reLoadRowData(info.sheet, info.row);
@@ -261,6 +259,15 @@ $(document).ready(() => {
                 },
             }
         });
+        $('#changeRate').change(function () {
+            const rate = parseInt($(this).val());
+            postData(window.location.pathname + '/save', { type:'rate', rate: rate }, function (result) {
+                const bqhs = ZhCalc.round(ZhCalc.mul(m_tp, 1+rate/100), 2);
+                const jzbqhs = ZhCalc.round(ZhCalc.mul(ZhCalc.add(pre_tp, m_tp), 1+rate/100), 2);
+                $('#rate_set').find('td').eq(1).text(bqhs !== 0 ? bqhs : '');
+                $('#rate_set').find('td').eq(2).text(jzbqhs !== 0 ? jzbqhs : '');
+            });
+        })
     } else {
         // SpreadJsObj.forbiddenSpreadContextMenu('#material-spread', materialSpread);
     }

+ 79 - 29
app/public/js/material_list.js

@@ -23,10 +23,31 @@ function getMpSpreadByMBData(id) {
     const info = materialBillsData.find(function (item) {
         return item.id === parseInt(id);
     });
-    console.log(info);
     return info.m_spread;
 }
 
+function getMaterialListByLeafXmj(gcl_id, xmj_id, mx_id = null) {
+    const list = [];
+    for (const ml of materialListData) {
+        if (gcl_id === ml.gcl_id && xmj_id === ml.xmj_id && (mx_id === null || mx_id === ml.mx_id)) {
+            list.push(ml);
+        }
+    }
+    return list;
+}
+
+function calcOneBQJC(xmj) {
+    let jiacha = 0;
+    const notx = findNotJoinLeafXmj(xmj);
+    if (notx === undefined) {
+        const list = xmj.mx_id !== undefined ? getMaterialListByLeafXmj(xmj.gcl_id, xmj.id, xmj.mx_id) : getMaterialListByLeafXmj(xmj.gcl_id, xmj.id);
+        for (const l of list) {
+            jiacha = ZhCalc.add(jiacha, ZhCalc.mul(ZhCalc.mul(xmj.gather_qty, l.quantity), getMpSpreadByMBData(l.mb_id)));
+        }
+    }
+    return jiacha;
+}
+
 $(document).ready(() => {
     autoFlashHeight();
     // 清单table
@@ -58,6 +79,11 @@ $(document).ready(() => {
     function loadLeafXmjData(iGclRow) {
         const gcl = gclGatherData[iGclRow];
         if (gcl) {
+            for (const [index, xmj] of gcl.leafXmjs.entries()) {
+                const jiacha = calcOneBQJC(xmj);
+                gcl.leafXmjs[index].jiacha = jiacha !== 0 ? ZhCalc.round(jiacha, 2) : null;
+            }
+            // console.log(gcl.leafXmjs);
             SpreadJsObj.loadSheetData(leafXmjSpread.getActiveSheet(), SpreadJsObj.DataType.Data, gcl.leafXmjs);
             // 对清单调差工料table的单位数量进行改变
             materialSpreadSetting.cols[materialSpreadSetting.cols.length - 1].title = '|' + gcl.unit + '数量';
@@ -82,7 +108,7 @@ $(document).ready(() => {
             {title: '本期计量数量|合同', colSpan: '3|1', rowSpan: '1|1', field: 'contract_qty', hAlign: 2, width: 60, type: 'Number'},
             {title: '|数量变更', colSpan: '|1', rowSpan: '|1', field: 'qc_qty', hAlign: 2, width: 80, type: 'Number'},
             {title: '|小计', colSpan: '|1', rowSpan: '|1', field: 'gather_qty', hAlign: 2, width: 60, type: 'Number'},
-            {title: '本期价差', colSpan: '1', rowSpan: '2', field: 'jiacha', hAlign: 2, width: 80, type: 'Number', getValue: 'getValue.jiacha'},
+            {title: '本期价差', colSpan: '1', rowSpan: '2', field: 'jiacha', hAlign: 2, width: 80, type: 'Number'},
         ],
         emptyRows: 0,
         headRows: 2,
@@ -92,23 +118,23 @@ $(document).ready(() => {
         readOnly: true,
         font: '10pt 微软雅黑',
     };
-    const leafXmjCol = {
-        getValue: {
-            jiacha: function (data) {
-                let sum = 0;
-                const sheet = leafXmjSpread.getActiveSheet();
-                const select = SpreadJsObj.getSelectObject(sheet);
-                const notx = findNotJoinLeafXmj(select);
-                if (notx === undefined) {
-                    for(const ml of materialList) {
-                        sum = ZhCalc.add(sum, ZhCalc.mul(ZhCalc.mul(data.gather_qty, ml.quantity), getMpSpreadByMBData(ml.mb_id)));
-                    }
-                }
-                return sum;
-            }
-        }
-    };
-    SpreadJsObj.initSpreadSettingEvents(leafXmjSpreadSetting, leafXmjCol);
+    // const leafXmjCol = {
+    //     getValue: {
+    //         jiacha: function (data) {
+    //             let sum = 0;
+    //             const sheet = leafXmjSpread.getActiveSheet();
+    //             const select = SpreadJsObj.getSelectObject(sheet);
+    //             const notx = findNotJoinLeafXmj(select);
+    //             if (notx === undefined) {
+    //                 for(const ml of materialList) {
+    //                     sum = ZhCalc.round(ZhCalc.add(sum, ZhCalc.mul(ZhCalc.mul(data.gather_qty, ml.quantity), getMpSpreadByMBData(ml.mb_id))), 2);
+    //                 }
+    //             }
+    //             return sum !== 0 ? sum : null;
+    //         }
+    //     }
+    // };
+    // SpreadJsObj.initSpreadSettingEvents(leafXmjSpreadSetting, leafXmjCol);
     SpreadJsObj.initSheet(leafXmjSpread.getActiveSheet(), leafXmjSpreadSetting);
     // 加载清单数据
     SpreadJsObj.loadSheetData(ledgerSpread.getActiveSheet(), SpreadJsObj.DataType.Data, gclGatherData);
@@ -133,7 +159,8 @@ $(document).ready(() => {
     const materialBase = {
         isEdit: function (data) {
             // 是否本期添加的工料
-            return data.mid === materialID;
+            console.log(data);
+            return data.order === stage_order;
         }
     };
 
@@ -230,6 +257,7 @@ $(document).ready(() => {
             gcl_id: xmj.gcl_id,
             mx_id: xmj.mx_id !== undefined ? xmj.mx_id : '',
             mb_id: mb_id,
+            gather_qty: xmj.gather_qty,
         };
         // 上传到数据库
         postData(window.location.pathname + '/save', {type: 'add', postData: data}, function (result) {
@@ -321,7 +349,7 @@ $(document).ready(() => {
             del: function () {
                 const sheet = materialSpread.getActiveSheet();
                 const select = SpreadJsObj.getSelectObject(sheet);
-                postData(window.location.pathname + '/save', {type: 'del', id: select.id}, function (result) {
+                postData(window.location.pathname + '/save', {type: 'del', id: select.id, mb_id: select.mb_id}, function (result) {
                     const index = materialList.indexOf(select);
                     materialList.splice(index, 1);
                     sheet.deleteRows(index, 1);
@@ -330,6 +358,9 @@ $(document).ready(() => {
                     sheet.setSelection(index > 0 ? index - 1 : 0, sel.length > 0 ? sel[0].col : 0, 1, 1);
                     const materialListIndex = materialListData.indexOf(select);
                     materialListData.splice(materialListIndex, 1);
+                    const [iGclRow, iRow, lsheet, lselect] = leafXmjSpreadObj.getSelect();
+                    gclGatherData[iGclRow].leafXmjs[iRow].jiacha = calcOneBQJC(lselect);
+                    SpreadJsObj.reLoadRowData(lsheet, iRow);
                 });
             },
             editEnded: function (e, info) {
@@ -343,8 +374,21 @@ $(document).ready(() => {
                         SpreadJsObj.reLoadRowData(info.sheet, info.row);
                         return;
                     }
+                    if (col.field === 'quantity') {
+                        if (isNaN(validText)) {
+                            toastr.error('不能输入其它非数字类型字符');
+                            SpreadJsObj.reLoadRowData(info.sheet, info.row);
+                            return;
+                        }
+                        const num = parseFloat(validText);
+                        if (num < 0 || !/^\d+(\.\d{1,6})?$/.test(num)) {
+                            toastr.error('请输入大于0并且小于6位小数的浮点数');
+                            SpreadJsObj.reLoadRowData(info.sheet, info.row);
+                            return;
+                        }
+                    }
                     // 更新至服务器
-                    postData(window.location.pathname + '/save', { type:'update', updateData: { id:select.id, quantity: validText } }, function (result) {
+                    postData(window.location.pathname + '/save', { type:'update', updateData: { id:select.id, quantity: validText, mb_id: select.mb_id } }, function (result) {
                         const materialListIndex = materialListData.indexOf(select);
                         const index = materialList.indexOf(select);
                         select[col.field] = validText;
@@ -352,6 +396,7 @@ $(document).ready(() => {
                         materialList.indexOf(index, 1, select);
                         SpreadJsObj.reLoadRowData(info.sheet, info.row);
                         const [iGclRow, iRow, sheet, lselect] = leafXmjSpreadObj.getSelect();
+                        gclGatherData[iGclRow].leafXmjs[iRow].jiacha = calcOneBQJC(lselect);
                         SpreadJsObj.reLoadRowData(sheet, iRow);
                     }, function () {
                         SpreadJsObj.reLoadRowData(info.sheet, info.row);
@@ -383,17 +428,17 @@ $(document).ready(() => {
             }
             // 判断需要应用调差工料的清单明细
             const needAddList = [];
+            const gather_qty = [];
             for (const xmj of ledgerSelect.leafXmjs) {
                 if (xmj.mx_id !== undefined) {
-                    const notx = notJoinList.find(function (item) {
-                        return item.gcl_id === xmj.gcl_id && item.xmj_id === xmj.id && (xmj.mx_id === undefined || (xmj.mx_id !== undefined && xmj.mx_id === item.mx_id));
-                    });
+                    const notx = findNotJoinLeafXmj(xmj);
                     if (notx === undefined) {
                         const ml = materialListData.find(function (item) {
                             return xmj.mx_id === item.mx_id && select.mb_id === item.mb_id;
                         });
                         if (ml === undefined) {
                             needAddList.push(xmj.mx_id);
+                            gather_qty.push(xmj.gather_qty);
                         }
                     }
                 }
@@ -403,9 +448,15 @@ $(document).ready(() => {
                 return false;
             }
             // 更新至服务器
-            postData(window.location.pathname + '/save', { type:'useOther', postData: { mx_id: needAddList, select: select  } }, function (result) {
+            postData(window.location.pathname + '/save', { type:'useOther', postData: { mx_id: needAddList, select: select, gather_qty: gather_qty } }, function (result) {
                 materialListData = result;
                 toastr.success('成功添加了' + needAddList.length + '条调差工料到其他清单明细中');
+                const index = gclGatherData.indexOf(ledgerSelect);
+                loadLeafXmjData(index);
+                const xmjSheet = leafXmjSpread.getActiveSheet();
+                const xmjSelect = SpreadJsObj.getSelectObject(xmjSheet);
+                const xmjIndex = gclGatherData[index].leafXmjs.indexOf(xmjSelect);
+                loadMaterialData(index, xmjIndex);
             });
         });
         $.contextMenu({
@@ -426,9 +477,7 @@ $(document).ready(() => {
                     disabled: function (key, opt) {
                         const sheet = leafXmjSpread.getActiveSheet();
                         const select = SpreadJsObj.getSelectObject(sheet);
-                        const notx = notJoinList.find(function (item) {
-                            return item.gcl_id === select.gcl_id && item.xmj_id === select.id && (select.mx_id === undefined || (select.mx_id !== undefined && select.mx_id === item.mx_id));
-                        });
+                        const notx = findNotJoinLeafXmj(select);
                         if (!readOnly && notx === undefined) {
                             return false;
                         } else {
@@ -511,6 +560,7 @@ $(document).ready(() => {
         SpreadJsObj.resetTopAndSelect(ledgerSpread.getActiveSheet());
         SpreadJsObj.resetTopAndSelect(leafXmjSpread.getActiveSheet());
         SpreadJsObj.resetTopAndSelect(materialSpread.getActiveSheet());
+        checkNotJoinMaterialData();
 
     });
 

+ 1 - 0
app/router.js

@@ -215,6 +215,7 @@ module.exports = app => {
     app.get('/tender/:id/measure/material', sessionAuth, tenderCheck, 'materialController.index');
     app.post('/tender/:id/measure/material/add', sessionAuth, tenderCheck, 'materialController.add');
     app.post('/tender/:id/measure/material/delete', sessionAuth, tenderCheck, 'materialController.delete');
+    app.post('/tender/:id/measure/material/auditors', sessionAuth, tenderCheck, 'materialController.materialAuditors');
     // 审批
     app.post('/tender/:id/measure/material/:order/audit/add', sessionAuth, tenderCheck, materialCheck, 'materialController.addAudit');
     app.post('/tender/:id/measure/material/:order/audit/delete', sessionAuth, tenderCheck, materialCheck, 'materialController.deleteAudit');

+ 13 - 0
app/service/material.js

@@ -199,6 +199,19 @@ module.exports = app => {
             }
             return list;
         }
+
+        /**
+         * 修改增税税率
+         * @param {int} rate 税率
+         * @returns {Promise<*>}
+         */
+        async changeRate(rate) {
+            const updateData = {
+                id: this.ctx.material.id,
+                rate,
+            };
+            return await this.db.update(this.tableName, updateData);
+        }
     }
 
     return Material;

+ 14 - 6
app/service/material_audit.js

@@ -184,16 +184,24 @@ module.exports = app => {
             const transaction = await this.db.beginTransaction();
             try {
                 await transaction.update(this.tableName, { id: audit.id, status: auditConst.status.checking, begin_time: new Date() });
-                // 计算原报最终数据
-                // await this.ctx.service.stagePay.calcAllStagePays(this.ctx.stage, transaction);
-                // 复制一份下一审核人数据
-                // await this.ctx.service.stagePay.copyAuditStagePays(this.ctx.stage, this.ctx.stage.times, 1, transaction);
-                // 更新期数据
-                // const tpData = await this.ctx.service.stageBills.getSumTotalPrice(this.ctx.stage);
                 await transaction.update(this.ctx.service.material.tableName, {
                     id: materialId, status: auditConst.status.checking,
                 });
 
+                // 把material_bills本期应耗数量设置成s_quantity里的历史本期应耗数量
+                const materialBillsData = await this.ctx.service.materialBills.getAllDataByCondition({ tid: this.ctx.tender.id });
+                for (const mb of materialBillsData) {
+                    const order = this.ctx.material.order;
+                    const s_quantity = mb.s_quantity !== null ? mb.s_quantity.split(',') : [];
+                    const quantity = mb.quantity !== null ? mb.quantity : '';
+                    if (s_quantity.length === order) {
+                        s_quantity[order - 1] = quantity;
+                    } else {
+                        s_quantity.push(quantity);
+                    }
+                    await transaction.update(this.ctx.service.materialBills.tableName, { id: mb.id, s_quantity: s_quantity.join(',') });
+                }
+
                 // 添加短信通知-需要审批提醒功能
                 // const smsUser = await this.ctx.service.projectAccount.getDataById(audit.aid);
                 // if (smsUser.auth_mobile !== '' && smsUser.auth_mobile !== undefined && smsUser.sms_type !== '') {

+ 97 - 32
app/service/material_list.js

@@ -35,11 +35,13 @@ module.exports = app => {
             for (const mb of data.mb_id) {
                 const newLists = {
                     tid: this.ctx.tender.id,
+                    order: this.ctx.material.order,
                     mid: this.ctx.material.id,
                     mb_id: mb,
                     gcl_id: data.gcl_id,
                     xmj_id: data.xmj_id,
                     mx_id: data.mx_id,
+                    gather_qty: data.gather_qty,
                     in_time: new Date(),
                 };
                 list.push(newLists);
@@ -50,7 +52,7 @@ module.exports = app => {
             if (result.affectedRows === 0) {
                 throw '新增工料数据失败';
             }
-            return await this.getMaterialData(this.ctx.tender.id);
+            return await this.getMaterialData(this.ctx.tender.id, this.ctx.material.id);
         }
 
         /**
@@ -58,25 +60,46 @@ module.exports = app => {
          * @param {int} id 工料id
          * @return {void}
          */
-        async del(id) {
+        async del(id, mb_id) {
             if (!this.ctx.tender || !this.ctx.material) {
                 throw '数据错误';
             }
-            // 判断是否可删
-            return await this.deleteById(id);
+            const transaction = await this.db.beginTransaction();
+            try {
+                // 判断是否可删
+                await transaction.delete(this.tableName, { id });
+                await this.calcQuantityByML(transaction, mb_id);
+                await transaction.commit();
+                return true;
+            } catch (err) {
+                await transaction.rollback();
+                throw err;
+            }
         }
 
         /**
          * 修改工料清单关联信息
          * @param {Object} data 工料内容
+         * @param {int} order 期数
          * @return {void}
          */
-        async save(data) {
+        async save(data, order) {
             if (!this.ctx.tender || !this.ctx.material) {
                 throw '数据错误';
             }
-            // 判断是否可修改
-            return await this.db.update(this.tableName, data);
+
+            const transaction = await this.db.beginTransaction();
+            try {
+                const mb_id = data.mb_id;
+                delete data.mb_id;
+                await transaction.update(this.tableName, data);
+                await this.calcQuantityByML(transaction, mb_id);
+                await transaction.commit();
+                return true;
+            } catch (err) {
+                await transaction.rollback();
+                throw err;
+            }
         }
 
         /**
@@ -87,44 +110,86 @@ module.exports = app => {
             if (!this.ctx.tender || !this.ctx.material) {
                 throw '数据错误';
             }
-            const list = [];
-            const select = data.select;
-            for (const mb of data.mx_id) {
-                const newLists = {
-                    tid: this.ctx.tender.id,
-                    mid: this.ctx.material.id,
-                    mb_id: select.mb_id,
-                    gcl_id: select.gcl_id,
-                    xmj_id: select.xmj_id,
-                    mx_id: mb,
-                    quantity: select.quantity,
-                    in_time: new Date(),
-                };
-                list.push(newLists);
+            const transaction = await this.db.beginTransaction();
+            try {
+                const list = [];
+                const select = data.select;
+                for (const index in data.mx_id) {
+                    const newLists = {
+                        tid: this.ctx.tender.id,
+                        order: this.ctx.material.order,
+                        mid: this.ctx.material.id,
+                        mb_id: select.mb_id,
+                        gcl_id: select.gcl_id,
+                        xmj_id: select.xmj_id,
+                        mx_id: data.mx_id[index],
+                        gather_qty: data.gather_qty[index],
+                        quantity: select.quantity,
+                        in_time: new Date(),
+                    };
+                    list.push(newLists);
+                }
+                // 新增工料
+                const result = await transaction.insert(this.tableName, list);
+                if (result.affectedRows === 0) {
+                    throw '新增工料数据失败';
+                }
+                await this.calcQuantityByML(transaction, select.mb_id);
+                await transaction.commit();
+                return await this.getMaterialData(this.ctx.tender.id, this.ctx.material.id);
+            } catch (err) {
+                await transaction.rollback();
+                throw err;
             }
+        }
 
-            // 新增工料
-            const result = await this.db.insert(this.tableName, list);
-            if (result.affectedRows === 0) {
-                throw '新增工料数据失败';
+        /**
+         * 修改material_bills的quantity值和计算本期金额
+         * @param transaction
+         * @param mb_id
+         * @returns {Promise<*>}
+         */
+        async calcQuantityByML(transaction, mb_id) {
+            // 修改material_bills值
+            const mbInfo = await this.ctx.service.materialBills.getDataById(mb_id);
+            if (!mbInfo) {
+                throw '不存在该工料';
             }
-            return await this.getMaterialData(this.ctx.tender.id);
+            const sql = 'SELECT SUM(`gather_qty`*`quantity`) as quantity FROM ' + this.tableName + ' WHERE `mid`=? AND `mb_id`=?';
+            const sqlParam = [this.ctx.material.id, mb_id];
+            const mb_quantity = await transaction.queryOne(sql, sqlParam);
+            console.log(mb_quantity);
+            mbInfo.quantity = this.ctx.helper.round(mb_quantity.quantity, 3);
+            const updateData = {
+                id: mb_id,
+                quantity: mbInfo.quantity,
+            };
+            await transaction.update(this.ctx.service.materialBills.tableName, updateData);
+            // 计算本期总金额
+            const sql2 = 'SELECT SUM(`m_spread`*`quantity`) as total_price FROM ' + this.ctx.service.materialBills.tableName + ' WHERE `tid` = ?';
+            const sqlParam2 = [this.ctx.tender.id];
+            const tp = await transaction.queryOne(sql2, sqlParam2);
+            console.log(tp);
+            const updateData2 = {
+                id: this.ctx.material.id,
+                m_tp: tp.total_price,
+            };
+            return await transaction.update(this.ctx.service.material.tableName, updateData2);
         }
 
         /**
          * 获取工料清单关联表
          * @param {int} tid 标段id
-         * @param {Object} midList 期id列表
+         * @param {Object} mid 期id
          * @return {void}
          */
-        async getMaterialData(tid, midList = []) {
-            const midsql = midList.length !== 0 ? ' AND ml.mid in (' + this.ctx.helper.getInArrStrSqlFilter(midList) + ')' : '';
-            const sql = 'SELECT ml.`id`, mb.`code`, mb.`name`, mb.`unit`, ml.`quantity`, ml.`mb_id`, ml.`gcl_id`, ml.`xmj_id`, ml.`mx_id`, ml.`tid`, ml.`mid`' +
+        async getMaterialData(tid, mid) {
+            const sql = 'SELECT ml.`id`, mb.`code`, mb.`name`, mb.`unit`, ml.`order`, ml.`quantity`, ml.`mb_id`, ml.`gcl_id`, ml.`xmj_id`, ml.`mx_id`, ml.`tid`, ml.`mid`' +
                 ' FROM ' + this.tableName + ' as ml' +
                 ' LEFT JOIN ' + this.ctx.service.materialBills.tableName + ' as mb' +
                 ' ON ml.`mb_id` = mb.`id`' +
-                ' WHERE ml.`tid` = ?' + midsql;
-            const sqlParam = [tid];
+                ' WHERE ml.`tid` = ? AND ml.`mid` = ?';
+            const sqlParam = [tid, mid];
             return await this.db.query(sql, sqlParam);
         }
     }

+ 3 - 1
app/view/change/info.ejs

@@ -725,9 +725,11 @@
 <script src="/public/js/datatable/dataTables.fixedColumns.min.js"></script>
 <script src="/public/js/datatable/jlzf-change-table.js"></script>
 <script src="/public/js/change_calculation.js"></script>
-<% if (auditStatus === 1 || auditStatus === 2) { %>
 <script>
     const whiteList = JSON.parse('<%- JSON.stringify(whiteList) %>');
+</script>
+<% if (auditStatus === 1 || auditStatus === 2) { %>
+<script>
     const changeUnits = JSON.parse('<%- JSON.stringify(changeUnits) %>');
     const precision = JSON.parse('<%- JSON.stringify(precision) %>');
     const accountList = JSON.parse('<%- JSON.stringify(accountList) %>');

+ 2 - 2
app/view/material/index.ejs

@@ -36,8 +36,8 @@
                     </td>
                     <td class="text-center"><%= moment(m.in_time).format('YYYY-MM-DD') %></td>
                     <td class="text-center">第 <%= m.s_order %> 期</td>
-                    <td class="text-right"></td>
-                    <td class="text-right"></td>
+                    <td class="text-right"><%= m.m_tp !== null ? ctx.helper.round(ctx.helper.mul(m.m_tp, 1+m.rate/100), 2) : null %></td>
+                    <td class="text-right"><%= m.m_tp %></td>
                     <td class="<%- auditConst.auditProgressClass[m.status] %>">
                         <% if (m.curAuditor) { %>
                             <a href="#sp-list" data-toggle="modal" data-target="#sp-list" m-order="<%- m.order %>"><%- m.curAuditor.name %><%if (m.curAuditor.role !== '' && m.curAuditor.role !== null) { %>-<%- m.curAuditor.role %><% } %></a>

+ 12 - 10
app/view/material/info.ejs

@@ -4,14 +4,14 @@
         <div class="title-main d-flex justify-content-between">
             <% include ./material_sub_mini_menu.ejs %>
             <div>
-                <% if ((ctx.material.status === auditConst.status.uncheck || ctx.material.status === auditConst.status.checkNo) && ctx.session.sessionUser.accountId === ctx.material.user_id) { %>
+                <% if ((material.status === auditConst.status.uncheck || material.status === auditConst.status.checkNo) && ctx.session.sessionUser.accountId === material.user_id) { %>
                 <div class="d-inline-block">
                     <a href="javascript: void(0);" id="add" class="btn btn-sm btn-light text-primary" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="新增材料"><i class="fa fa-plus" aria-hidden="true"></i></a>
                     <a href="javascript: void(0);" id="del" class="btn btn-sm btn-light text-primary" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="删除材料"><i class="fa fa-remove" aria-hidden="true"></i></a>
                 </div>
                 <% } %>
                 <div class="d-inline-block">
-                    本期调差计量期:第<span class="mx-2"><%= ctx.material.s_order.split(',').join(',') %></span>期
+                    本期调差计量期:第<span class="mx-2"><%= material.s_order.split(',').join(',') %></span>期
                 </div>
             </div>
             <div class="ml-auto">
@@ -34,12 +34,12 @@
                                 <span class="input-group-text" id="basic-addon1">增税税率</span>
                             </div>
                             <select class="form-control col-1" id="changeRate">
-                                <% if (ctx.material.readOnly) { %>
-                                <option value="9" <% if(ctx.material.rate === 9) { %>selected<% } %>>9%</option>
-                                <option value="10" <% if(ctx.material.rate === 10) { %>selected<% } %>>10%</option>
-                                <option value="11" <% if(ctx.material.rate === 11) { %>selected<% } %>>11%</option>
+                                <% if (!material.readOnly) { %>
+                                <option value="9" <% if(material.rate === 9) { %>selected<% } %>>9%</option>
+                                <option value="10" <% if(material.rate === 10) { %>selected<% } %>>10%</option>
+                                <option value="11" <% if(material.rate === 11) { %>selected<% } %>>11%</option>
                                 <% } else { %>
-                                <option value="<%= ctx.material.rate %>" selected><%= ctx.material.rate %>%</option>
+                                <option value="<%= material.rate %>" selected><%= material.rate %>%</option>
                                 <% } %>
                             </select>
                         </div>
@@ -48,8 +48,8 @@
                         <div class="col-4 p-0">
                             <table class="table table-sm table-bordered">
                                 <tr><th></th><th>本期金额</th><th>截止本期金额</th></tr>
-                                <tr><td>材料价差费用</td><td><%= ctx.material.m_tp %></td><td><%= ctx.material.pre_tp %></td></tr>
-                                <tr><td>材料价差费用(含税)</td><td></td><td></td></tr>
+                                <tr><td>材料价差费用</td><td><%= material.m_tp %></td><td><%= material.m_tp !== null ? ctx.helper.round(ctx.helper.add(material.pre_tp, material.m_tp), 2) : null %></td></tr>
+                                <tr id="rate_set"><td>材料价差费用(含税)</td><td><%= material.m_tp !== null ? ctx.helper.mul(material.m_tp, 1+material.rate/100) : null %></td><td><%= material.m_tp !== null ? ctx.helper.round(ctx.helper.mul(ctx.helper.add(material.pre_tp, material.m_tp), 1+material.rate/100), 2) : null %></td></tr>
                             </table>
                         </div>
                     </div>
@@ -58,7 +58,7 @@
         </div>
     </div>
 </div>
-<% if ((ctx.material.status === auditConst.status.uncheck || ctx.material.status === auditConst.status.checkNo) && ctx.session.sessionUser.accountId === ctx.material.user_id) {%>
+<% if ((material.status === auditConst.status.uncheck || material.status === auditConst.status.checkNo) && ctx.session.sessionUser.accountId === material.user_id) {%>
 <script>
     const accountList = JSON.parse('<%- JSON.stringify(accountList) %>');
 </script>
@@ -69,4 +69,6 @@
     const materialListData = JSON.parse('<%- JSON.stringify(materialListData) %>');
     const readOnly = <%- material.readOnly %>;
     const materialID = <%- material.id %>;
+    const m_tp = <%= material.m_tp !== null ? material.m_tp : 0 %>;
+    const pre_tp = <%= material.pre_tp !== null ? material.pre_tp : 0 %>;
 </script>

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

@@ -76,5 +76,5 @@
     const pos = JSON.parse('<%- JSON.stringify(pos) %>');
     const curPosData = JSON.parse('<%- JSON.stringify(curPosData) %>');
     const readOnly = <%- material.readOnly %>;
-    const materialID = <%- material.id %>;
+    const stage_order = <%- material.order %>;
 </script>

Разлика између датотеке није приказан због своје велике величине
+ 2886 - 2831
package-lock.json