Преглед на файлове

Merge branch 'master' of http://192.168.1.41:3000/maixinrong/Calculation

MaiXinRong преди 5 години
родител
ревизия
00a60b247b
променени са 3 файла, в които са добавени 17 реда и са изтрити 13 реда
  1. 7 0
      app/public/js/material.js
  2. 1 1
      app/service/material.js
  3. 9 12
      app/service/material_bills.js

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

@@ -245,6 +245,13 @@ $(document).ready(() => {
                         return;
                     }
                 }
+                if (col.field === 't_type') {
+                    if (validText === 1) {
+                        select.quantity = null;
+                        select.expr = null;
+                        select.m_tp = null;
+                    }
+                }
                 select[col.field] = validText;
                 select.msg_spread = materialCol.getValue.msg_spread(select);
                 select.m_spread = materialCol.getValue.m_spread(select);

+ 1 - 1
app/service/material.js

@@ -148,7 +148,7 @@ module.exports = app => {
                     // 复制调差清单工料关联表
                     await this.ctx.service.materialList.copyPreMaterialList(transaction, preMaterial, newMaterial);
                     // 修改本期应耗数量值和有效价差,需要剔除不参与调差的清单数据,并返回总金额
-                    const m_tp = await this.ctx.service.materialBills.updateNewMaterial(transaction, this.ctx.tender.id, newMaterial.id);
+                    const m_tp = await this.ctx.service.materialBills.updateNewMaterial(transaction, this.ctx.tender.id, newMaterial.id, this.ctx, newMaterial.stage_id);
                     // 计算得出本期总金额
                     const updateMaterialData = {
                         id: newMaterial.id,

+ 9 - 12
app/service/material_bills.js

@@ -10,6 +10,7 @@
 
 const auditConst = require('../const/audit').material;
 const materialConst = require('../const/material');
+const MaterialCalculator = require('../lib/material_calc');
 
 module.exports = app => {
     class MaterialBills extends app.BaseService {
@@ -88,15 +89,8 @@ module.exports = app => {
             // 判断t_type是否为费用
             const transaction = await this.db.beginTransaction();
             try {
-                if (data.t_type === materialConst.t_type[0].value) {
-                    data.quantity = null;
-                    data.expr = null;
-                }
                 await transaction.update(this.tableName, data);
-                let m_tp = this.ctx.material.m_tp;
-                if (data.t_type === materialConst.t_type[1].value) {
-                    m_tp = await this.calcMaterialMTp(transaction);
-                }
+                const m_tp = await this.calcMaterialMTp(transaction);
                 await transaction.commit();
                 return m_tp;
             } catch (err) {
@@ -112,11 +106,12 @@ module.exports = app => {
          * @param mid
          * @returns {Promise<number>}
          */
-        async updateNewMaterial(transaction, tid, mid) {
+        async updateNewMaterial(transaction, tid, mid, ctx, stage_id) {
             const materialBillsData = await this.getAllDataByCondition({ where: { tid } });
             let m_tp = 0;
+            const materialCalculator = new MaterialCalculator(ctx, stage_id, ctx.tender.info);
             for (const mb of materialBillsData) {
-                const one_tp = await this.calcQuantityByMB(transaction, mid, mb);
+                const one_tp = await this.calcQuantityByMB(transaction, mid, mb, materialCalculator);
                 m_tp = this.ctx.helper.add(m_tp, one_tp);
             }
             return m_tp;
@@ -129,7 +124,7 @@ module.exports = app => {
          * @param mb
          * @returns {Promise<*>}
          */
-        async calcQuantityByMB(transaction, mid, mb) {
+        async calcQuantityByMB(transaction, mid, mb, materialCalculator) {
             if (mb.t_type === materialConst.t_type[0].value) {
                 const sql = 'SELECT SUM(`gather_qty`*`quantity`) as quantity FROM ' + this.ctx.service.materialList.tableName + ' WHERE `mid`=? AND `mb_id`=? AND `is_join`=1';
                 const sqlParam = [mid, mb.id];
@@ -144,12 +139,14 @@ module.exports = app => {
                 await transaction.update(this.tableName, updateData);
                 return await this.ctx.helper.round(this.ctx.helper.mul(mb_quantity.quantity, mb.m_spread), 2);
             } else if (mb.t_type === materialConst.t_type[1].value) {
+                const quantity = await materialCalculator.calculateExpr(mb.expr);
                 const updateData = {
                     id: mb.id,
+                    quantity: quantity !== 0 && quantity !== null ? this.ctx.helper.round(quantity, 3) : null,
                     pre_tp: mb.quantity && mb.m_spread !== null ? this.ctx.helper.round(this.ctx.helper.add(mb.pre_tp, this.ctx.helper.mul(mb.quantity, mb.m_spread)), 2) : mb.pre_tp,
                 };
                 await transaction.update(this.tableName, updateData);
-                return await this.ctx.helper.round(this.ctx.helper.mul(mb.quantity, mb.m_spread), 2);
+                return await this.ctx.helper.round(this.ctx.helper.mul(quantity, mb.m_spread), 2);
             }
         }