Browse Source

上报数据检查调整

MaiXinRong 4 years ago
parent
commit
a933f712f8

+ 14 - 2
app/controller/ledger_controller.js

@@ -449,9 +449,21 @@ module.exports = app => {
                 const ledgerData = await ctx.service.ledger.getData(ctx.tender.id);
                 const posData = this.ctx.tender.data.measure_type === measureType.tz.value
                     ? await ctx.service.pos.getPosData({ tid: ctx.tender.id }) : [];
-                const data = ctx.helper.checkBillsWithPos(ledgerData, posData,
+                const qtyData = ctx.helper.checkBillsWithPos(ledgerData, posData,
                     ['sgfh_qty', 'qtcl_qty', 'sjcl_qty', 'quantity']);
-                ctx.body = { err: 0, msg: '', data };
+                qtyData.error.forEach(x => { x.errorType = 'qty'; });
+                const tpData = ctx.helper.checkBillsTp(ledgerData, [
+                    {qty: 'sgfh_qty', tp: 'sgfh_tp'}, {qty: 'qtcl_qty', tp: 'qtcl_tp'},
+                    {qty: 'sjcl_qty', tp: 'sjcl_tp'}, {qty: 'quantity', tp: 'total_price'}
+                ], this.ctx.tender.info.decimal);
+                tpData.error.forEach(x => { x.errorType = 'tp'; });
+                ctx.body = { err: 0, msg: '', data: {
+                    error: [...qtyData.error, ...tpData.error],
+                    source: {
+                        bills: [...qtyData.source.bills, ...tpData.source.bills],
+                        pos: [...qtyData.source.pos, ...tpData.source.pos],
+                    },
+                }};
             } catch (err) {
                 this.log(err);
                 ctx.body = this.ajaxErrorBody(err, '检查数据错误');

+ 14 - 2
app/controller/revise_controller.js

@@ -459,9 +459,21 @@ module.exports = app => {
                     ? JSON.parse(await fs.readFileSync(posFile, 'utf8'))
                     : await ctx.service.revisePos.getData(ctx.tender.id);
 
-                const data = ctx.helper.checkBillsWithPos(reviseBills, revisePos,
+                const qtyData = ctx.helper.checkBillsWithPos(reviseBills, revisePos,
                     ['sgfh_qty', 'qtcl_qty', 'sjcl_qty', 'quantity']);
-                ctx.body = { err: 0, msg: '', data };
+                qtyData.error.forEach(x => { x.errorType = 'qty'; });
+                const tpData = ctx.helper.checkBillsTp(reviseBills, [
+                    {qty: 'sgfh_qty', tp: 'sgfh_tp'}, {qty: 'qtcl_qty', tp: 'qtcl_tp'},
+                    {qty: 'sjcl_qty', tp: 'sjcl_tp'}, {qty: 'quantity', tp: 'total_price'}
+                ], this.ctx.tender.info.decimal);
+                tpData.error.forEach(x => { x.errorType = 'tp'; });
+                ctx.body = { err: 0, msg: '', data: {
+                        error: [...qtyData.error, ...tpData.error],
+                        source: {
+                            bills: [...qtyData.source.bills, ...tpData.source.bills],
+                            pos: [...qtyData.source.pos, ...tpData.source.pos],
+                        },
+                    }};
             } catch (err) {
                 this.log(err);
                 ctx.body = this.ajaxErrorBody(err, '检查数据错误');

+ 14 - 2
app/controller/stage_controller.js

@@ -334,8 +334,20 @@ module.exports = app => {
             try {
                 const ledgerData = await this._getStageLedgerData(ctx);
                 const posData = await this._getStagePosData(ctx);
-                const data = ctx.helper.checkBillsWithPos(ledgerData, posData, ['contract_qty', 'qc_qty']);
-                ctx.body = { err: 0, msg: '', data };
+
+                const qtyData = ctx.helper.checkBillsWithPos(ledgerData, posData, ['contract_qty', 'qc_qty']);
+                qtyData.error.forEach(x => { x.errorType = 'qty'; });
+                const tpData = ctx.helper.checkBillsTp(ledgerData, [
+                    {qty: 'contract_qty', tp: 'contract_tp'}, {qty: 'qc_qty', tp: 'qc_tp'}
+                ], this.ctx.tender.info.decimal);
+                tpData.error.forEach(x => { x.errorType = 'tp'; });
+                ctx.body = { err: 0, msg: '', data: {
+                        error: [...qtyData.error, ...tpData.error],
+                        source: {
+                            bills: [...qtyData.source.bills, ...tpData.source.bills],
+                            pos: [...qtyData.source.pos, ...tpData.source.pos],
+                        },
+                    }};
             } catch (err) {
                 this.log(err);
                 ctx.body = this.ajaxErrorBody(err, '检查数据错误');

+ 27 - 0
app/extend/helper.js

@@ -1176,6 +1176,33 @@ module.exports = {
         return result;
     },
 
+    checkBillsTp(bills, field, decimal) {
+        const result = {
+            error: [],
+            source: {
+                bills: [],
+                pos: [],
+            },
+        };
+        for (const b of bills) {
+            const checkData = {}, calcData = {};
+            for (const f of field) {
+                checkData[f.tp] = b[f.tp] || 0;
+                calcData[f.tp] = this.mul(b.unit_price, b[f.qty], decimal.tp) || 0;
+            }
+            if (!_.isMatch(checkData, calcData)) {
+                result.error.push({
+                    ledger_id: b.ledger_id,
+                    b_code: b.b_code,
+                    name: b.name,
+                    error: { checkData, calcData },
+                });
+                result.source.bills.push(b);
+            }
+        }
+        return result;
+    },
+
     check18MainCode(code) {
         return /^([0-9]([0-9][0-9])*)?(GD[0-9]{3}([0-9][0-9])*)?$/.test(code);
     },

+ 13 - 3
app/public/js/shares/cs_tools.js

@@ -57,9 +57,19 @@ const showSideTools = function (show) {
         if (!setting.spreadSetting) {
             setting.spreadSetting = {
                 cols: [
-                    {title: '行号', field: 'serialNo', width: 80, formatter: '@'},
-                    {title: '清单编号', field: 'b_code', width: 150, formatter: '@'},
-                    {title: '清单名称', field: 'name', width: 230, formatter: '@'},
+                    {title: '行号', field: 'serialNo', width: 50, formatter: '@'},
+                    {
+                        title: '错误类型', field: 'errorType', width: 60, formatter: '@',
+                        getValue: function (x) {
+                            switch (x.errorType) {
+                                case 'qty': return '数量';
+                                case 'tp': return '金额';
+                                default: return '';
+                            }
+                        }
+                    },
+                    {title: '清单编号', field: 'b_code', width: 135, formatter: '@'},
+                    {title: '清单名称', field: 'name', width: 215, formatter: '@'},
                 ],
                 emptyRows: 0,
                 headRows: 1,

+ 3 - 1
app/view/ledger/explode.ejs

@@ -41,10 +41,12 @@
                 </div>
                 <div class="d-inline-block ml-3">
                     <a id="exportLedger" class="btn btn-primary btn-sm" href="javascript: void(0)">导出台账Excel</a>
-                    <a class="btn btn-sm btn-primary" href="#ledger-check-modal" data-toggle="modal" data-target="#ledger-check-modal">数据检查</a>
                 </div>
             </div>
             <div class="ml-auto">
+                <% if (tender.ledger_status !== auditConst.status.checked) { %>
+                    <a class="btn btn-sm btn-primary mr-1" href="#ledger-check-modal" data-toggle="modal" data-target="#ledger-check-modal">数据检查</a>
+                <% } %>
                 <% if (tender.ledger_status === auditConst.status.checkNo) { %>
                     <a href="#sp-list" data-type="hide" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-warning btn-sm pull-right text-dark sp-list-btn">审批退回</a>
                 <% } else if (tender.ledger_status === auditConst.status.checking) { %>

+ 10 - 10
app/view/revise/info.ejs

@@ -41,30 +41,30 @@
                         <input type="text" class="form-control form-control-sm m-0" id="bills-expr" readonly="">
                     </div>
                 </div>
-                <div class="d-inline-block ml-3">
-                    <a class="btn btn-sm btn-primary" href="#ledger-check-modal" data-toggle="modal" data-target="#ledger-check-modal">数据检查</a>
-                </div>
             </div>
             <% } %>
             <div class="ml-auto">
+                <% if (revise.status !== audit.status.checked) { %>
+                    <a class="btn btn-sm btn-primary mr-1" href="#ledger-check-modal" data-toggle="modal" data-target="#ledger-check-modal">数据检查</a>
+                <% } %>
                 <% if (revise.status === audit.status.uncheck && revise.uid === ctx.session.sessionUser.accountId) { %>
-                <a href="#sub-sp" data-toggle="modal" data-target="#sub-sp" class="btn btn-primary btn-sm pull-right mr-1">上报审批</a>
+                <a href="#sub-sp" data-toggle="modal" data-target="#sub-sp" class="btn btn-primary btn-sm mr-1">上报审批</a>
                 <% } %>
                 <% if (revise.status === audit.status.checkNo) { %>
-                <a href="#sp-list" data-type="hide" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-secondary btn-sm pull-right mr-1 sp-list-btn">审批退回</a>
+                <a href="#sp-list" data-type="hide" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-secondary btn-sm mr-1 sp-list-btn">审批退回</a>
                     <% if (revise.uid === ctx.session.sessionUser.accountId) { %>
-                    <a href="#sp-list" data-type="show" data-toggle="modal" data-target="#sp-list" class="btn btn-primary btn-sm pull-right mr-1 sp-list-btn">重新上报</a>
+                    <a href="#sp-list" data-type="show" data-toggle="modal" data-target="#sp-list" class="btn btn-primary btn-sm mr-1 sp-list-btn">重新上报</a>
                     <% } %>
                 <% } %>
                 <% if (revise.status === audit.status.checking) { %>
-                <a href="#sp-list" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-warning btn-sm pull-right text-dark mr-1">审批中</a>
+                <a href="#sp-list" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-warning btn-sm text-dark mr-1">审批中</a>
                     <% if (curAuditor.audit_id === ctx.session.sessionUser.accountId) { %>
-                    <a href="#sp-done" data-toggle="modal" data-target="#sp-done" class="btn btn-success btn-sm pull-right mr-1">审批通过</a>
-                    <a href="#sp-back" data-toggle="modal" data-target="#sp-back" class="btn btn-warning btn-sm pull-right mr-1">审批退回</a>
+                    <a href="#sp-done" data-toggle="modal" data-target="#sp-done" class="btn btn-success btn-sm mr-1">审批通过</a>
+                    <a href="#sp-back" data-toggle="modal" data-target="#sp-back" class="btn btn-warning btn-sm mr-1">审批退回</a>
                     <% } %>
                 <% } %>
                 <% if (revise.status === audit.status.checked) { %>
-                <a href="#sp-list" data-type="hide" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-secondary btn-sm pull-right mr-1 sp-list-btn">审批完成</a>
+                <a href="#sp-list" data-type="hide" data-toggle="modal" data-target="#sp-list" class="btn btn-outline-secondary btn-sm mr-1 sp-list-btn">审批完成</a>
                 <% } %>
             </div>
         </div>