Browse Source

调差清单一键功能修改

laiguoran 4 years atrás
parent
commit
042fcf2c6b
3 changed files with 64 additions and 49 deletions
  1. 12 30
      app/public/js/material_list.js
  2. 49 19
      app/service/material_list.js
  3. 3 0
      sql/update.sql

+ 12 - 30
app/public/js/material_list.js

@@ -406,8 +406,9 @@ $(document).ready(() => {
                     visible: function (key, opt) {
                         const sheet = leafXmjSpread.getActiveSheet();
                         const select = SpreadJsObj.getSelectObject(sheet);
+                        const sel = sheet.getSelections()[0];
                         const notx = findNotJoinLeafXmj(select);
-                        if (!select) {
+                        if (!select || sel.rowCount !== 1) {
                             return false;
                         }
                         if (!readOnly && select && notx === undefined) {
@@ -426,8 +427,9 @@ $(document).ready(() => {
                     visible: function (key, opt) {
                         const sheet = leafXmjSpread.getActiveSheet();
                         const select = SpreadJsObj.getSelectObject(sheet);
+                        const sel = sheet.getSelections()[0];
                         const notx = findNotJoinLeafXmj(select);
-                        if (!select) {
+                        if (!select || sel.rowCount !== 1) {
                             return false;
                         }
                         if (!readOnly && select && notx === undefined) {
@@ -593,40 +595,20 @@ $(document).ready(() => {
         SpreadJsObj.addDeleteBind(materialSpread, materialSpreadObj.deletePress);
         // 应用调差工料至其他清单明细
         $('#user_all_material').click(function () {
-            const sheet = materialSpread.getActiveSheet();
-            const select = SpreadJsObj.getSelectObject(sheet);
-            if (select === undefined) {
-                toastr.warning('请选中需要应用到其他清单明细的调差工料');
-                return false;
-            }
-            const leafXmjSheet = leafXmjSpread.getActiveSheet();
-            const leafXmjSelect = SpreadJsObj.getSelectObject(leafXmjSheet);
-            const notl = findNotJoinLeafXmj(leafXmjSelect);
-            if (notl !== undefined) {
-                toastr.error('该清单不参与调差,调差工料无法应用到其它清单中');
-                return false;
-            }
             const ledgerSheet = ledgerSpread.getActiveSheet();
             const ledgerSelect = SpreadJsObj.getSelectObject(ledgerSheet);
             if (ledgerSelect.leafXmjs.length < 2) {
                 toastr.warning('没有需要应用调差工料的其它清单明细');
                 return false;
             }
+            const xmjSheet = leafXmjSpread.getActiveSheet();
+            const xmjSelect = SpreadJsObj.getSelectObject(xmjSheet);
             // 判断需要应用调差工料的清单明细
             const needAddList = [];
-            // const gather_qty = [];
             for (const xmj of ledgerSelect.leafXmjs) {
-                if (xmj.mx_id !== undefined) {
-                    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);
-                            // gather_qty.push(xmj.gather_qty);
-                        }
-                    }
+                const notx = findNotJoinLeafXmj(xmj);
+                if (notx === undefined && xmjSelect !== xmj) {
+                    needAddList.push(xmj);
                 }
             }
             if (needAddList.length === 0) {
@@ -634,10 +616,10 @@ $(document).ready(() => {
                 return false;
             }
             // 更新至服务器
-            postData(window.location.pathname + '/save', { type:'useOther', postData: { addXmj: needAddList, select: select } }, function (result) {
+            postData(window.location.pathname + '/save', { type:'useOther', postData: { addXmj: needAddList, materialBills: materialList } }, function (result) {
                 materialListData = result;
-                toastr.success('成功添加了' + needAddList.length + '条调差工料到其他清单明细中');
-                calculateJiaCha(gclGatherData)
+                toastr.success('已成功应用');
+                calculateJiaCha(gclGatherData);
                 const index = gclGatherData.indexOf(ledgerSelect);
                 loadLeafXmjData(index);
                 const xmjSheet = leafXmjSpread.getActiveSheet();

+ 49 - 19
app/service/material_list.js

@@ -139,29 +139,59 @@ module.exports = app => {
             }
             const transaction = await this.db.beginTransaction();
             try {
+                // 先删除addxmj里所有的清单工料再添加新工料,并重新计算每个工料的单价数量
+                // 还要找出删除的工料,更新单价数量
                 const list = [];
-                const select = data.select;
+                const delList = [];
+                const materialBills = data.materialBills;
+                const mb_idList = [];
                 for (const xmj of data.addXmj) {
-                    const newLists = {
-                        tid: this.ctx.tender.id,
-                        order: this.ctx.material.order,
-                        mid: this.ctx.material.id,
-                        mb_id: select.mb_id,
-                        gcl_id: xmj.gcl_id,
-                        xmj_id: xmj.id,
-                        mx_id: xmj.mx_id,
-                        gather_qty: xmj.gather_qty,
-                        quantity: select.quantity,
-                        in_time: new Date(),
-                    };
-                    list.push(newLists);
+                    const mlList = await this.getAllDataByCondition({
+                        where: {
+                            mid: this.ctx.material.id,
+                            gcl_id: xmj.gcl_id,
+                            xmj_id: xmj.id,
+                            mx_id: xmj.mx_id ? xmj.mx_id : [null, ''],
+                        },
+                    });
+                    const mbIdList = this._.map(mlList, 'mb_id');
+                    mb_idList.push(...mbIdList);
+                    delList.push(...this._.map(mlList, 'id'));
+                    for (const mb of materialBills) {
+                        const newLists = {
+                            tid: this.ctx.tender.id,
+                            order: this.ctx.material.order,
+                            mid: this.ctx.material.id,
+                            mb_id: mb.mb_id,
+                            gcl_id: xmj.gcl_id,
+                            xmj_id: xmj.id,
+                            mx_id: xmj.mx_id ? xmj.mx_id : '',
+                            gather_qty: xmj.gather_qty ? xmj.gather_qty : null,
+                            quantity: mb.quantity,
+                            in_time: new Date(),
+                        };
+                        list.push(newLists);
+                        mb_idList.push(mb.mb_id);
+                    }
                 }
-                // 新增工料
-                const result = await transaction.insert(this.tableName, list);
-                if (result.affectedRows === 0) {
-                    throw '新增工料数据失败';
+                // 删除工料清单关联
+                if (delList.length > 0) await transaction.delete(this.tableName, { id: delList });
+                // 新增工料清单关联
+                if (list.length > 0) {
+                    const result = await transaction.insert(this.tableName, list);
+                    if (result.affectedRows === 0) {
+                        throw '新增工料数据失败';
+                    }
                 }
-                await this.calcQuantityByML(transaction, select.mb_id);
+                // 重算工料和总金额
+                const calcMBIdList = this._.uniq(mb_idList);
+                if (calcMBIdList.length > 0) {
+                    for (const select of calcMBIdList) {
+                        await this.calcQuantityByML(transaction, select);
+                    }
+                }
+                // throw 'fail';
+                // await this.calcQuantityByML(transaction, select.mb_id);
                 await transaction.commit();
                 return await this.getMaterialData(this.ctx.tender.id, this.ctx.material.id);
             } catch (err) {

+ 3 - 0
sql/update.sql

@@ -0,0 +1,3 @@
+ALTER TABLE `zh_project` CHANGE `page_show` `page_show` VARCHAR(5000) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT '{\"bwtz\":\"1\"}' COMMENT '前台页面或功能展示与隐藏';
+
+ALTER TABLE `zh_change_audit_list` ADD `xmj_code` VARCHAR(500) NULL DEFAULT NULL COMMENT '项目节编号' AFTER `detail`, ADD `xmj_jldy` VARCHAR(500) NULL DEFAULT NULL COMMENT '细目' AFTER `xmj_code`;