瀏覽代碼

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

Conflicts:
	app/controller/report_controller.js
TonyKang 5 年之前
父節點
當前提交
caaa683c38

+ 8 - 8
app/controller/ledger_controller.js

@@ -626,14 +626,14 @@ module.exports = app => {
                     ? await ctx.service.pos.getPosData({ tid: ctx.tender.id }) : [];
                 const convert = new billsPosConvert(ctx);
                 convert.loadData(ledgerData, posData, []);
-                //const result = await convert.convert();
-                const wbsCodeHis = await ctx.service.externalData.getExValue(ctx.tender.id, -1,
-                    externalDataConst.FuLong.exType, externalDataConst.FuLong.exFields.wbsCode) || [];
-                const [result, needUpdate] = convert.convertByWbsCode(wbsCodeHis);
-                if (needUpdate) {
-                    await ctx.service.externalData.saveExValue(ctx.tender.id, -1,
-                        externalDataConst.FuLong.exType, externalDataConst.FuLong.exFields.wbsCode, wbsCodeHis);
-                }
+                const result = await convert.convert();
+                // const wbsCodeHis = await ctx.service.externalData.getExValue(ctx.tender.id, -1,
+                //     externalDataConst.FuLong.exType, externalDataConst.FuLong.exFields.wbsCode) || [];
+                // const [result, needUpdate] = convert.convertByWbsCode(wbsCodeHis);
+                // if (needUpdate) {
+                //     await ctx.service.externalData.saveExValue(ctx.tender.id, -1,
+                //         externalDataConst.FuLong.exType, externalDataConst.FuLong.exFields.wbsCode, wbsCodeHis);
+                // }
                 ctx.body = {err: 0, msg: '', data: result};
             } catch(err) {
                 this.log(err);

+ 4 - 0
app/controller/report_controller.js

@@ -178,7 +178,11 @@ module.exports = app => {
             // console.log(roleRel);
             await encodeSignatureDataUri(roleRel, this.app.baseDir);
             await encodeDummySignatureDataUri(pageRst, this.app.baseDir);
+<<<<<<< HEAD
             const stageFlow = await ctx.service.stageAudit.getAuditGroupByListWithOwner(params.stage_id, params.stage_times);
+=======
+            const stageFlow = await ctx.service.stageAudit.getAuditors(params.stage_id, params.stage_times);
+>>>>>>> 81e966af55f438d2b76c474023d1ef90bc25874d
 
             // console.log('encodeSignatureDataUri!');
             return {

+ 8 - 8
app/controller/stage_controller.js

@@ -1161,14 +1161,14 @@ module.exports = app => {
                 const changeData = await this._getStageChangeData(ctx);
                 const convert = new billsPosConvert(ctx);
                 convert.loadData(ledgerData, posData, changeData);
-                // const result = convert.convert();
-                const wbsCodeHis = await ctx.service.externalData.getExValue(ctx.tender.id, -1,
-                    externalDataConst.FuLong.exType, externalDataConst.FuLong.exFields.wbsCode) || [];
-                const [result, needUpdate] = convert.convertByWbsCode(wbsCodeHis);
-                if (needUpdate) {
-                    await ctx.service.externalData.saveExValue(ctx.tender.id, -1,
-                        externalDataConst.FuLong.exType, externalDataConst.FuLong.exFields.wbsCode, wbsCodeHis);
-                }
+                const result = convert.convert();
+                // const wbsCodeHis = await ctx.service.externalData.getExValue(ctx.tender.id, -1,
+                //     externalDataConst.FuLong.exType, externalDataConst.FuLong.exFields.wbsCode) || [];
+                // const [result, needUpdate] = convert.convertByWbsCode(wbsCodeHis);
+                // if (needUpdate) {
+                //     await ctx.service.externalData.saveExValue(ctx.tender.id, -1,
+                //         externalDataConst.FuLong.exType, externalDataConst.FuLong.exFields.wbsCode, wbsCodeHis);
+                // }
                 ctx.body = {err: 0, msg: '', data: result};
             } catch(err) {
                 this.log(err);

+ 28 - 3
app/lib/bills_pos_convert.js

@@ -10,6 +10,7 @@
 
 const Ledger = require('./ledger');
 const splitChar = '-';
+const mergeChar = ';';
 
 class BillsPosConvert {
 
@@ -122,9 +123,19 @@ class BillsPosConvert {
             for (const p of pos) {
                 const posUnit = xmj.unitTree.addNode({pos_name: p.name,
                     b_code: null, name: '', unit: null, unit_price: null});
+                if (p.drawing_code && posUnit.drawing_code.indexOf(p.drawing_code) < 0)
+                    posUnit.drawing_code.push(p.drawing_code);
+                if (p.memo) posUnit.memo.push(p.memo);
+                if (node.postil) posUnit.postil.push(node.postil);
+
                 const gclUnit = xmj.unitTree.addNode({pos_name: '',
                     b_code: node.b_code, name: node.name, unit: node.unit, unit_price: node.unit_price
                 }, posUnit);
+                if (node.drawing_code && gclUnit.drawing_code.indexOf(node.drawing_code) < 0)
+                    gclUnit.drawing_code.push(node.drawing_code);
+                if (node.memo) gclUnit.memo.push(node.memo);
+                if (node.postil) gclUnit.postil.push(node.postil);
+
                 //loadField(gclUnit, p, baseCalcFields);
                 this._loadPosCalcFields(gclUnit, p);
                 if (!gclUnit.changes) gclUnit.changes = [];
@@ -135,9 +146,15 @@ class BillsPosConvert {
                 }
             }
         } else {
-            const unit = xmj.unitTree.addNode({pos_name: '',
-                b_code: node.b_code, name: node.name, unit: node.unit, unit_price: node.unit_price});
-            //loadField(unit, node, baseCalcFields);
+            const unit = xmj.unitTree.addNode({
+                pos_name: '',
+                b_code: node.b_code, name: node.name, unit: node.unit, unit_price: node.unit_price,
+            });
+            if (node.drawing_code && unit.drawing_code.indexOf(node.drawing_code) < 0)
+                unit.drawing_code.push(node.drawing_code);
+            if (node.memo) unit.memo.push(node.memo);
+            if (node.postil) unit.postil.push(node.postil);
+
             this._loadBillsCalcFields(unit, node);
             if (!unit.changes) unit.changes = [];
             for (const c of this.bpcChange) {
@@ -226,6 +243,13 @@ class BillsPosConvert {
             } else {
                 this._calculateChild(node);
             }
+
+            if (node.drawing_code && node.drawing_code.length > 0)
+                node.drawing_code_merge = node.drawing_code.join(mergeChar);
+            if (node.memo && node.memo.length > 0)
+                node.memo_merge = node.memo.join(mergeChar);
+            if (node.postil && node.postil.length > 0)
+                node.postil_merge = node.postil.join(mergeChar);
         }
     }
     _recursiveCalculateAndSort(nodes) {
@@ -302,6 +326,7 @@ class BillsPosConvert {
     convert() {
         this._recursiveConvertNode(this.bpcTree.children);
         this._calculateAndSortResult();
+        this._generateCodeByWbsCode([]);
         return this._getResultData();
     }
 

+ 3 - 0
app/lib/ledger.js

@@ -355,6 +355,9 @@ class filterGatherTree extends baseTree {
         if (item) return item;
 
         item = data;
+        item.drawing_code = [];
+        item.memo = [];
+        item.postil = [];
         item[this.setting.id] = this.newId;
         const keyName = itemsPre + item[this.setting.id];
         item.children = [];

+ 1 - 0
app/lib/rpt_data_analysis.js

@@ -11,6 +11,7 @@
 const math = require('mathjs');
 const standard = require('../const/standard');
 const moment = require('moment');
+moment.locale('zh-cn');
 
 // 通用方法
 const rdaUtils = {

+ 5 - 0
app/public/js/global.js

@@ -223,6 +223,11 @@ const postDataCompress = function (url, data, successCallback, errorCallBack, ht
  */
 const postDataWithFile = function (url, formData, successCallback, errorCallBack, showWaiting = true) {
     if (showWaiting) showWaitingView();
+    if (formData.getAll('file[]').length > 10) {
+        toastr.error('文件数量不能多于10个');
+        if (showWaiting) closeWaitingView();
+        return
+    }
     $.ajax({
         type:"POST",
         url: url,

+ 12 - 11
app/public/js/se_bonus.js

@@ -52,17 +52,18 @@ $(document).ready(() => {
                 },
             },
             {title: '编号', colSpan: '1', rowSpan: '1', field: 'code', hAlign: 0, width: 150, formatter: '@', readOnly: isPre, },
-            {title: '发文单位', colSpan: '1', rowSpan: '1', field: 'code', hAlign: 0, width: 150, formatter: '@', readOnly: isPre},
-            {
-                title: '依据材料证明', colSpan: '1', rowSpan: '1', field: 'proof_file', hAlign: 1, width: 80, formatter: '@',
-                readOnly: true, cellType: 'imageBtn', normalImg: '#rela-file-icon', hoverImg: '#rela-file-hover',
-                getValue: function (data) {
-                    return data.proof_file ? data.proof_file.length : 0;
-                },
-                showImage: function (data) {
-                    return data !== undefined && data !== null;
-                },
-            },
+            {title: '发文单位', colSpan: '1', rowSpan: '1', field: 'doc_co', hAlign: 0, width: 150, formatter: '@', readOnly: isPre},
+            // {
+            //     title: '依据材料证明', colSpan: '1', rowSpan: '1', field: 'proof_file', hAlign: 1, width: 80, formatter: '@',
+            //     readOnly: true, cellType: 'imageBtn', normalImg: '#rela-file-icon', hoverImg: '#rela-file-hover',
+            //     getValue: function (data) {
+            //         return data.proof_file ? data.proof_file.length : 0;
+            //     },
+            //     showImage: function (data) {
+            //         return data !== undefined && data !== null;
+            //     },
+            // },
+            {title: '依据材料证明', colSpan: '1', rowSpan: '1', field: 'proof', hAlign: 0, width: 150, formatter: '@', readOnly: isPre},
             {
                 title: '计量期', colSpan: '1', rowSpan: '1', field: 'sorder', hAlign: 1, width: 100, formatter: '@',
                 getValue: function (data) {

+ 1 - 1
app/service/external_data.js

@@ -35,7 +35,7 @@ module.exports = app => {
             };
             const count = await this.count(filter);
             if (count >= 0) {
-                await this.db.update(this.tableName, { ex_value: JSON.stringify(ex_value) }, filter);
+                await this.db.update(this.tableName, { ex_value: JSON.stringify(ex_value) }, {where: filter});
             } else {
                 filter.ex_value = JSON.stringify(ex_value);
                 await this.db.insert(this.tableName, filter);

+ 0 - 1
app/service/report_memory.js

@@ -782,7 +782,6 @@ module.exports = app => {
             await this.ctx.service.tender.checkTender(tid);
             await this.ctx.service.stage.checkStage(sid);
 
-
             const data = await this.ctx.service.stageOther.getStageData(this.ctx.stage.id);
             const preData = await this.ctx.service.stageOther.getPreStageData(this.ctx.stage.order);
             for (const d of data) {

+ 1 - 1
app/service/stage_bonus.js

@@ -67,7 +67,7 @@ module.exports = app => {
                 };
                 nd.tp = d.tp ? this.ctx.helper.round(d.to, this.ctx.tender.info.decimal.tp) : 0;
                 nd.code = d.code ? d.code: null;
-                //nd.proof = d.proof ? d.proof : null;
+                nd.proof = d.proof ? d.proof : null;
                 nd.real_time = d.real_time ? d.real_time : null;
                 nd.memo = d.memo ? d.memo : null;
                 nd.doc_co = d.doc_co ? d.doc_co : null;

+ 2 - 2
app/view/ledger/bwtz.ejs

@@ -69,8 +69,8 @@
             {title: '单价', colSpan: '1', rowSpan: '2', field: 'unit_price', hAlign: 2, width: 60, type: 'Number'},
             {title: '台账|数量', colSpan: '2|1', rowSpan: '1|1', field: 'quantity', hAlign: 2, width: 80, type: 'Number'},
             {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'total_price', hAlign: 2, width: 80, type: 'Number'},
-            {title: '图(册)号', colSpan: '1', rowSpan: '2', field: 'drawing_code', hAlign: 0, width: 100, formatter: '@'},
-            {title: '备注', colSpan: '1', rowSpan: '2', field: 'memo', hAlign: 0, width: 120, formatter: '@', cellType: 'ellipsisAutoTip'},
+            {title: '图(册)号', colSpan: '1', rowSpan: '2', field: 'drawing_code_merge', hAlign: 0, width: 100, formatter: '@'},
+            {title: '备注', colSpan: '1', rowSpan: '2', field: 'memo_merge', hAlign: 0, width: 120, formatter: '@', cellType: 'ellipsisAutoTip'},
         ],
         emptyRows: 0,
         headRows: 2,

+ 3 - 3
app/view/stage/bwtz.ejs

@@ -91,9 +91,9 @@
             {title: '截止本期完成计量|数量', colSpan: '3|1', rowSpan: '1|1', field: 'end_gather_qty', hAlign: 2, width: 60, type: 'Number'},
             {title: '|金额', colSpan: '|1', rowSpan: '|1', field: 'end_gather_tp', hAlign: 2, width: 60, type: 'Number'},
             {title: '|完成率(%)', colSpan: '1', rowSpan: '|1', field: 'end_gather_percent', hAlign: 2, width: 60, readOnly: true, type: 'Number'},
-            {title: '图(册)号', colSpan: '1', rowSpan: '2', field: 'drawing_code', hAlign: 0, width: 80, formatter: '@'},
-            {title: '本期批注', colSpan: '1', rowSpan: '2', field: 'postil', hAlign: 0, width: 100, formatter: '@', cellType: 'ellipsisAutoTip'},
-            {title: '备注', colSpan: '1', rowSpan: '2', field: 'memo', hAlign: 0, width: 100, formatter: '@', cellType: 'ellipsisAutoTip'},
+            {title: '图(册)号', colSpan: '1', rowSpan: '2', field: 'drawing_code_merge', hAlign: 0, width: 80, formatter: '@'},
+            {title: '本期批注', colSpan: '1', rowSpan: '2', field: 'postil_merge', hAlign: 0, width: 100, formatter: '@', cellType: 'ellipsisAutoTip'},
+            {title: '备注', colSpan: '1', rowSpan: '2', field: 'memo_merge', hAlign: 0, width: 100, formatter: '@', cellType: 'ellipsisAutoTip'},
         ],
         emptyRows: 0,
         headRows: 2,

+ 0 - 2
app/view/stage_extra/bonus_modal.ejs

@@ -6,12 +6,10 @@
                 <h5 class="modal-title">附件</h5>
             </div>
             <div class="modal-body">
-                <% if (uploadPermission) { %>
                 <div class="form-group">
                     <label for="formGroupExampleInput">大小限制:30MB,支持<span data-toggle="tooltip" data-placement="bottom" title="doc,docx,xls,xlsx,ppt,pptx,pdf">office等文档格式</span>、<span data-toggle="tooltip" data-placement="bottom" title="jpg,png,bmp">图片格式</span>、<span data-toggle="tooltip" data-placement="bottom" title="rar,zip">压缩包格式</span></label>
                     <input type="file" class="" id="upload-file" multiple>
                 </div>
-                <% } %>
                 <div class="modal-height-500" style="overflow:auto;">
                     <table class="table table-sm table-bordered" style="word-break:break-all; table-layout: fixed">
                         <thead>

+ 1 - 0
builder_report_index_define.js

@@ -75,6 +75,7 @@ const stage_bonus = {
         { name: '期历史记录', field: 'shistory', type: dataType.str },
         { name: '排序', field: 'order', type: dataType.int },
         { name: '编号', field: 'code', type: dataType.str},
+        { name: '发文单位', field: 'doc_co', type: dataType.str},
     ],
 };
 const stage_other = {

+ 1 - 1
config/config.default.js

@@ -117,7 +117,7 @@ module.exports = appInfo => {
             '.doc', '.docx',
             '.pdf',
             '.ppt', '.pptx',
-            '.png', '.jpg', '.jpeg', '.gif', '.bmp',
+            '.png', '.jpg', '.jpeg', '.gif', '.bmp', '.cad', '.dwg',
             '.zip', '.rar', '.7z', ''],
         fileSize: '30mb',
     };