Browse Source

调差工料是否汇总功能

laiguoran 4 years ago
parent
commit
6e1a8fe0ba

+ 30 - 0
app/public/js/material.js

@@ -118,6 +118,7 @@ $(document).ready(() => {
             {title: '|调差金额', colSpan: '|1', rowSpan: '|1', field: 'm_tp', hAlign: 2, width: 80, type: 'Number', readOnly: true, getValue: 'getValue.m_tp'},
             {title: '截止上期调差金额', colSpan: '1', rowSpan: '2', field: 'pre_tp', hAlign: 2, width: 120, type: 'Number', readOnly: true},
             {title: '备注', colSpan: '1', rowSpan: '2', field: 'remark', hAlign: 0, width: 60, formatter: '@', readOnly: 'readOnly.remark'},
+            {title: '是否汇总', colSpan: '1', rowSpan: '2', field: 'is_summary', hAlign: 1, width: 60, cellType: 'checkbox', readOnly: 'readOnly.isEdit'},
         ],
         emptyRows: 0,
         headRows: 2,
@@ -280,6 +281,9 @@ $(document).ready(() => {
             if (info.sheet.zh_setting) {
                 const select = SpreadJsObj.getSelectObject(info.sheet);
                 const col = info.sheet.zh_setting.cols[info.col];
+                if (col.field === 'is_summary') {
+                    return;
+                }
                 // 未改变值则不提交
                 const validText = is_numeric(info.editingText) ? parseFloat(info.editingText) : (info.editingText ? trimInvalidChar(info.editingText) : null);
                 const orgValue = select[col.field];
@@ -372,6 +376,30 @@ $(document).ready(() => {
                 });
             }
         },
+        buttonClicked: function (e, info) {
+            if (info.sheet.zh_setting) {
+                const select = SpreadJsObj.getSelectObject(info.sheet);
+                const col = info.sheet.zh_setting.cols[info.col];
+                if (materialCol.readOnly.isEdit(select)) {
+                    return;
+                }
+                if (col.field === 'is_summary') {
+                    if (info.sheet.isEditing()) {
+                        info.sheet.endEdit(true);
+                    }
+                    select.is_summary = info.sheet.getValue(info.row, info.col) ? 1 : 0;
+                    // 更新至服务器
+                    postData(window.location.pathname + '/save', { type:'update', updateData: select }, function (result) {
+                        m_tp = result.m_tp;
+                        resetTpTable();
+                        SpreadJsObj.reLoadRowData(info.sheet, info.row);
+                    }, function () {
+                        select.is_summary = info.sheet.getValue(info.row, info.col) ? 0 : 1;
+                        SpreadJsObj.reLoadRowData(info.sheet, info.row);
+                    });
+                }
+            }
+        },
         deletePress: function (sheet) {
             return;
         },
@@ -771,7 +799,9 @@ $(document).ready(() => {
         $('#add').click(materialSpreadObj.add);
         $('#del').click(materialSpreadObj.del);
         materialSpread.bind(spreadNS.Events.EditEnded, materialSpreadObj.editEnded);
+        materialSpread.bind(spreadNS.Events.ButtonClicked, materialSpreadObj.buttonClicked);
         materialMonthSpread.bind(spreadNS.Events.EditEnded, materialMonthSpreadObj.editEnded);
+
         // 右键菜单
         $.contextMenu({
             selector: '#material-spread',

+ 2 - 2
app/service/material.js

@@ -182,12 +182,12 @@ module.exports = app => {
                 await transaction.delete(this.ctx.service.materialListNotjoin.tableName, { mid: id });
                 await transaction.delete(this.ctx.service.materialBillsHistory.tableName, { mid: id });
                 await transaction.delete(this.ctx.service.materialFile.tableName, { mid: id });
-                // 如果存在上一期,把上一期的quantity,pre_tp添加到bill中
+                // 如果存在上一期,把上一期的quantity,pre_tp,is_summary添加到bill中
                 const materialInfo = await this.getDataById(id);
                 if (materialInfo.order > 1) {
                     const sql = 'UPDATE ' + this.ctx.service.materialBills.tableName + ' as mb, ' +
                         this.ctx.service.materialBillsHistory.tableName + ' as mbh ' +
-                        'SET mb.`quantity` = mbh.`quantity`, mb.`pre_tp` = mbh.`pre_tp` ' +
+                        'SET mb.`quantity` = mbh.`quantity`, mb.`pre_tp` = mbh.`pre_tp`, mb.`is_summary` = mbh.`is_summary` ' +
                         'WHERE mbh.`tid` = ? AND mbh.`order` = ? AND mbh.`mb_id` = mb.`id`';
                     const sqlParam = [this.ctx.tender.id, materialInfo.order - 1];
                     await transaction.query(sql, sqlParam);

+ 1 - 0
app/service/material_audit.js

@@ -219,6 +219,7 @@ module.exports = app => {
                         m_spread: mb.m_spread,
                         m_tp: mb.m_tp,
                         pre_tp: mb.pre_tp,
+                        is_summary: mb.is_summary,
                     };
                     mbhList.push(newMbh);
                 }

+ 3 - 3
app/service/material_bills.js

@@ -196,7 +196,7 @@ module.exports = app => {
                     pre_tp: mb.m_tp !== null ? this.ctx.helper.round(this.ctx.helper.add(mb.pre_tp, mb.m_tp), 2) : mb.pre_tp,
                 };
                 await transaction.update(this.tableName, updateData);
-                return await this.ctx.helper.round(this.ctx.helper.mul(mb_quantity.quantity, newm_spread), 2);
+                return mb.is_summary === 1 ? await this.ctx.helper.round(this.ctx.helper.mul(mb_quantity.quantity, newm_spread), 2) : 0;
             } else if (mb.t_type === materialConst.t_type[1].value) {
                 const quantity = await materialCalculator.calculateExpr(mb.expr);
                 const updateData = {
@@ -209,7 +209,7 @@ module.exports = app => {
                     pre_tp: mb.m_tp !== null ? this.ctx.helper.round(this.ctx.helper.add(mb.pre_tp, mb.m_tp), 2) : mb.pre_tp,
                 };
                 await transaction.update(this.tableName, updateData);
-                return await this.ctx.helper.round(this.ctx.helper.mul(quantity, newm_spread), 2);
+                return mb.is_summary === 1 ? await this.ctx.helper.round(this.ctx.helper.mul(quantity, newm_spread), 2) : 0;
             }
         }
 
@@ -259,7 +259,7 @@ module.exports = app => {
         // 更改计算总金额并返回值
         async calcMaterialMTp(transaction) {
             // 金额发生变化,则重新计算本期金额
-            const sql = 'SELECT SUM(`m_tp`) as total_price FROM ' + this.tableName + ' WHERE `tid` = ?';
+            const sql = 'SELECT SUM(`m_tp`) as total_price FROM ' + this.tableName + ' WHERE `tid` = ? AND `is_summary` = 1';
             const sqlParam = [this.ctx.tender.id];
             const tp = await transaction.queryOne(sql, sqlParam);
             console.log(tp);

+ 1 - 1
app/service/material_list.js

@@ -223,7 +223,7 @@ module.exports = app => {
             };
             await transaction.update(this.ctx.service.materialBills.tableName, updateData);
             // 计算本期总金额
-            const sql2 = 'SELECT SUM(`m_tp`) as total_price FROM ' + this.ctx.service.materialBills.tableName + ' WHERE `tid` = ?';
+            const sql2 = 'SELECT SUM(`m_tp`) as total_price FROM ' + this.ctx.service.materialBills.tableName + ' WHERE `tid` = ? AND `is_summary` = 1';
             const sqlParam2 = [this.ctx.tender.id];
             const tp = await transaction.queryOne(sql2, sqlParam2);
             console.log(tp);

+ 4 - 0
sql/update.sql

@@ -5,3 +5,7 @@ ALTER TABLE `zh_change_audit_list` ADD `xmj_code` VARCHAR(500) NULL DEFAULT NULL
 ALTER TABLE `zh_login_logging`
 ADD COLUMN `type` INT(1) NOT NULL COMMENT '登录类型 1(sso登录) | 2(正常或副密码登录) | 3(接口登录或微信登录)' AFTER `pid`, ADD `show` INT(1) NOT NULL COMMENT '是否显示: 0-显示,1-不显示' AFTER `TYPE`;
 
+ALTER TABLE `zh_material_bills` ADD `is_summary` TINYINT(1) NOT NULL DEFAULT '1' COMMENT '是否汇总' AFTER `remark`;
+
+ALTER TABLE `zh_material_bills_history` ADD `is_summary` TINYINT(1) NOT NULL DEFAULT '1' COMMENT '是否汇总' AFTER `pre_tp`;
+