Browse Source

工程变更,A调用后,又被B取消调用的变更令,属于实际未调用,应允许重新审批

MaiXinRong 4 years ago
parent
commit
364b85737d
3 changed files with 32 additions and 9 deletions
  1. 2 3
      app/controller/change_controller.js
  2. 10 5
      app/service/change.js
  3. 20 1
      app/service/stage_change.js

+ 2 - 3
app/controller/change_controller.js

@@ -500,9 +500,8 @@ module.exports = app => {
                 renderData.auditList = auditList;
 
                 // 获取是否已存在调用变更令
-                const stageChangeNum = await ctx.service.stageChange.count({ cid: change.cid });
-                const stageChangeNum2 = await ctx.service.stageChange.count({ cid: change.cid, qty: null });
-                renderData.stageChangeNum = stageChangeNum - stageChangeNum2;
+                const changeUsedData = await ctx.service.stageChange.getFinalUsedData(ctx.tender.id, change.cid);
+                renderData.stageChangeNum = this.ctx.helper.sum(changeUsedData.map(x => {return Math.abs(x.used_qty)}));
                 await this.layout('change/info.ejs', renderData, 'change/info_modal.ejs');
             } catch (err) {
                 this.log(err);

+ 10 - 5
app/service/change.js

@@ -956,13 +956,18 @@ module.exports = app => {
          * @return {Promise<*>} - 可用的变更令列表
          */
         async getValidChanges(tid, bills, pos) {
+            const self = this;
+            const getFilterPart = function (field, value) {
+                return value
+                    ? field + ' = ' + self.db.escape(value)
+                    : self.db.format("(?? = null or ?? = '')", [field, field]);
+            };
             const timesLen = 100;
-            const filter =
-                'cb.`code` = ' + this.db.escape(bills.b_code) +
-                ' And cb.`name` = ' + this.db.escape(bills.name) +
-                ' And cb.`unit` = ' + this.db.escape(bills.unit) +
+            const filter = getFilterPart('cb.code', bills.b_code) +
+                ' And ' + getFilterPart('cb.name', bills.name) +
+                ' And ' + getFilterPart('cb.unit', bills.unit) +
                 ' And cb.`unit_price` = ' + this.db.escape(bills.unit_price) +
-                (pos ? ' And cb.`bwmx` = ' + this.db.escape(pos.name) : '');
+                (pos ? getFilterPart('cb.bwmx', pos.name) : '');
             const sql =
                 'SELECT c.cid, c.code, c.name, c.w_code, c.p_code, c.peg, c.org_name, c.org_code, c.new_name, c.new_code,' +
                 '    c.content, c.basis, c.memo, c.type, c.class, c.quality, c.company, c.charge, ' +

+ 20 - 1
app/service/stage_change.js

@@ -276,7 +276,7 @@ module.exports = app => {
         async getUsedData(tid, cid) {
             const lastStage = await this.ctx.service.stage.getLastestStage(tid, true);
             let filter;
-            if (lastStage.id === this.ctx.stage.id) {
+            if (this.ctx.stage && lastStage.id === this.ctx.stage.id) {
                 filter = this.db.format(' And (s.`order` < ? || (s.`order` = ? And sChange.`stimes` <= ? And sChange.`sorder` <= ?))',
                     [lastStage.order, lastStage.order, this.ctx.stage.curTimes, this.ctx.stage.curOrder]);
             } else {
@@ -312,6 +312,25 @@ module.exports = app => {
             return await this.db.query(sql, sqlParam);
         }
 
+        async getFinalUsedData(tid, cid) {
+            const sql = 'SELECT c.lid, c.pid, SUM(c.qty) as used_qty,' +
+                '    cb.tid, cb.cid, cb.id, cb.code, cb.name, cb.unit, cb.unit_price, cb.detail, cb.samount' +
+                '  FROM ' + this.ctx.service.changeAuditList.tableName + ' As cb' +
+                '  LEFT JOIN ' + this.tableName + ' As c ON cb.id = c.cbid ' +
+                '  INNER JOIN (' +
+                '    SELECT MAX(`stimes` * ' + timesLen + ' + `sorder`) As `flow`, `lid`, `pid`, `cbid`, sChange.`sid`, `cid` ' +
+                '      FROM ' + this.tableName + ' As sChange' +
+                '      LEFT JOIN ' + this.ctx.service.stage.tableName + ' As s ON sChange.sid = s.id' +
+                '      WHERE sChange.tid = ? AND cid = ?' +
+                '      GROUP By `lid`, `pid`, `cbid`, sChange.`sid`' +
+                '  ) As m' +
+                '  ON (c.stimes * ' + timesLen + ' + c.sorder) = m.flow And c.`cbid` = m.`cbid` AND c.`sid` = m.`sid` And c.`cid` = m.`cid` And c.`lid` = m.`lid` And c.`pid` = m.`pid`' +
+                '  WHERE cb.cid = ?' +
+                '  GROUP By c.`cbid`';
+            const sqlParam = [tid, cid, cid];
+            return await this.db.query(sql, sqlParam);
+        }
+
         /**
          * 获取 变更令 - 变更清单 当期使用情况
          * @param {Number} sid - 查询期id