瀏覽代碼

报表,提供材料调差数据

MaiXinRong 5 年之前
父節點
當前提交
f27e28e3ba
共有 3 個文件被更改,包括 66 次插入1 次删除
  1. 1 1
      app/public/report/js/rpt_main.js
  2. 14 0
      app/service/report.js
  3. 51 0
      app/service/rpt_gather_memory.js

+ 1 - 1
app/public/report/js/rpt_main.js

@@ -486,7 +486,7 @@ let rptControlObj = {
         rst.stage_status = getStageStatus();
         rst.stage_order = getStageOrder();
         rst.stage_times = getStageTimes();
-        params.material_order = getMaterialOrder();
+        rst.material_order = getMaterialOrder();
         rst.custCfg = CUST_CFG;
 
         return rst;

+ 14 - 0
app/service/report.js

@@ -140,6 +140,14 @@ module.exports = app => {
                                 customDefine.gather_select, customSelect ? customSelect.gather_select : null));
                             runnableKey.push(filter);
                             break;
+                        case 'mem_material':
+                            runnableRst.push(service.rptGatherMemory.getMaterial(params.tender_id, params.material_order, memFieldKeys[filter]));
+                            runnableKey.push(filter);
+                            break;
+                        case 'mem_material_gl':
+                            runnableRst.push(service.rptGatherMemory.getMaterialGl(params.tender_id, params.material_order, memFieldKeys[filter]));
+                            runnableKey.push(filter);
+                            break;
                         default:
                             break;
                     }
@@ -166,6 +174,12 @@ module.exports = app => {
                     case 'mem_change_bills':
                         rst[filter] = await service.reportMemory.getChangeBillsData(params.tender_id, params.stage_id, memFieldKeys[filter]);
                         break;
+                    case 'mem_material_bills':
+                        rst[filter] = await service.rptGatherMemory.getMaterialBills(params.tender_id, params.material_order, memFieldKeys[filter]);
+                        break;
+                    case 'mem_material_bills_gl':
+                        rst[filter] = await service.rptGatherMemory.getMaterialBillsGl(params.tender_id, params.material_order, memFieldKeys[filter]);
+                        break;
                     default:
                         break;
                 }

+ 51 - 0
app/service/rpt_gather_memory.js

@@ -13,6 +13,7 @@ const PayCalculator = require('../lib/pay_calc');
 
 const auditConst = require('../const/audit');
 const payConst = require('../const/deal_pay');
+const materialConst = require('../const/material');
 
 const moment = require('moment');
 
@@ -766,6 +767,56 @@ module.exports = app => {
             }
             return this.resultDealBills;
         }
+
+        async getMaterial(tender_id, material_order, memFieldKeys) {
+            return await this.ctx.service.material.getValidMaterials(tender_id);
+        }
+
+        _completeMaterialGl(materialGl) {
+            const tTypeStr = [], mTypeStr = [];
+            for (const t of materialConst.t_type) {
+                tTypeStr[t.value] = t.text;
+            }
+            for (const m of materialConst.m_type) {
+                mTypeStr[m.value] = m.text;
+            }
+            for (const gl of materialGl) {
+                gl.tp = this.ctx.helper.mul(gl.quantity, gl.m_spread);
+                gl.t_type_str = tTypeStr[gl.t_type];
+                gl.m_type_str = tTypeStr[gl.m_type];
+            }
+        }
+
+        async getMaterialGl(tender_id, material_order, memFieldKeys) {
+            const materials = await this.ctx.service.material.getAllDataByCondition({
+                where: {tid: tender_id},
+                orders: [['order', 'desc']],
+            });
+            if (materials.length > 0) {
+                let result;
+                if (materials[0].order === material_order) {
+                    result = await this.ctx.service.materialBills.getAllDataByCondition({
+                        where: {tid: tender_id}
+                    });
+                } else {
+                    const material = this.ctx.helper.find(materials, {order: material_order});
+                    if (!material) return [];
+                    const sql = 'SELECT m.id, m.tid, m.mid, m.t_type, m.code, m.name, m.unit, m.spec, m.m_type,' +
+                        '    m.base_price, m.base_times, m.remark, m.in_time,' +
+                        '    mh.quantity, mh.expr, mh.msg_tp, mh.msg_times, mh.msg_spread, mh.m_up_risk, mh.m_down_risk, mh.m_spread' +
+                        '  FROM ' + this.ctx.service.materialBills.tableName + ' m' +
+                        '  LEFT JOIN ' + this.ctx.service.materialBillsHistory.tableName + ' mh' +
+                        '  ON m.id = mh.mb_id' +
+                        '  WHERE mh.mid = ?';
+                    const sqlParam = [material.id];
+                    result = this.ctx.app.mysql.query(sql, sqlParam);
+                }
+                this._completeMaterialGl(result);
+                return result;
+            } else {
+                return [];
+            }
+        }
     }
 
     return RptGatherMemory;