Browse Source

Merge branch 'dev' of http://192.168.1.41:3000/maixinrong/Calculation into dev

Tony Kang 10 months atrás
parent
commit
5c0c849411

+ 4 - 0
app/controller/change_controller.js

@@ -667,6 +667,10 @@ module.exports = app => {
                         await ctx.service.changeAuditList.dels(data);
                         responseData.data = { changeList: await ctx.service.changeAuditList.getList(ctx.change.cid) };
                         break;
+                    case 'get-revise-list':
+                        responseData.data.changeLedgerList = await ctx.service.changeLedger.getAllDataByCondition({ where: { tender_id: ctx.tender.id } });
+                        responseData.data.changePosList = await ctx.service.changePos.getAllDataByCondition({ where: { tid: ctx.tender.id } });
+                        break;
                     default: throw '参数有误';
                 }
 

+ 8 - 1
app/extend/helper.js

@@ -839,7 +839,7 @@ module.exports = {
      * @param {Array} main - 主数据
      * @param {Array[]}rela - 相关数据 {data, fields, prefix, relaId}
      */
-    assignRelaData(main, rela, mainKey = 'id') {
+    assignRelaData(main, rela, mainKey = 'id', clear = false) {
         const index = {},
             indexPre = 'id_';
         const loadFields = function(datas, fields, prefix, relaId) {
@@ -860,6 +860,13 @@ module.exports = {
             for (const r of rela) {
                 if (r.defaultData) _.assignIn(m, r.defaultData);
             }
+            if (clear) {
+                rela.forEach(r => {
+                    r.fields.forEach(f => {
+                        delete m[r.prefix + f];
+                    });
+                })
+            }
         }
         for (const r of rela) {
             loadFields(r.data, r.fields, r.prefix, r.relaId);

+ 2 - 2
app/lib/revise_price.js

@@ -336,7 +336,7 @@ class revisePriceCalc {
         this.ctx.helper.assignRelaData(bills, [
             { data: curBillsData, fields: ['id', 'contract_qty', 'qc_qty', 'positive_qc_qty', 'negative_qc_qty', 'times', 'order', 'postil'], prefix: 'cur_', relaId: 'lid' },
             { data: preBillsData, fields: ['id', 'contract_qty', 'contract_tp', 'qc_qty', 'qc_tp', 'unit_price', 'positive_qc_qty', 'negative_qc_qty', 'positive_qc_tp', 'negative_qc_tp'], prefix: 'pre_', relaId: 'lid' },
-        ]);
+        ], 'id', true);
         const billsTree = new Ledger.billsTree(this.ctx, { id: 'ledger_id', pid: 'ledger_pid', order: 'order', level: 'level', rootId: -1, calcFields: [] });
         billsTree.loadDatas(bills);
         const stageChange = await this.ctx.service.stageChange.getFinalStageData(stage.tid, stage.id);
@@ -418,7 +418,7 @@ class revisePriceCalc {
         // 加载树结构
         this.ctx.helper.assignRelaData(bills, [
             { data: curBillsData, fields: ['id', 'contract_qty', 'qc_qty', 'positive_qc_qty', 'negative_qc_qty', 'times', 'order', 'postil'], prefix: 'cur_', relaId: 'lid' },
-        ]);
+        ], 'id', true);
         const billsTree = new Ledger.billsTree(this.ctx, { id: 'ledger_id', pid: 'ledger_pid', order: 'order', level: 'level', rootId: -1, calcFields: [] });
         billsTree.loadDatas(bills);
         const stageChange = await this.ctx.service.stageChange.getFinalStageData(stage.tid, stage.id);

+ 54 - 4
app/public/js/change_information_add_list.js

@@ -278,7 +278,16 @@ $(document).ready(() => {
                             changeList = result.changeList;
                             select.is_change = 1;
                             changeListData[gclIndex].is_change = 1;
-                            SpreadJsObj.reLoadRowData(gclSpreadSheet, gclIndex);
+                            // 如果是已勾选清单,需要另外找值勾选
+                            if ($('#show-select-btn').is(':checked')) {
+                                const newGclIndex = gclSpreadSheet.zh_data.indexOf(gclInfo);
+                                if (newGclIndex !== -1) {
+                                    gclSpreadSheet.zh_data[newGclIndex].is_change = 1;
+                                    SpreadJsObj.reLoadRowData(gclSpreadSheet, newGclIndex);
+                                }
+                            } else {
+                                SpreadJsObj.reLoadRowData(gclSpreadSheet, gclIndex);
+                            }
                             checkSelectAll(gclInfo);
                         }, function () {
                             info.sheet.setValue(info.row, info.col, 0);
@@ -308,17 +317,36 @@ $(document).ready(() => {
                                 checkSelectAll(gclInfo);
                                 if (select.deal_id) {
                                     changeListData[gclIndex].is_change = 0;
-                                    SpreadJsObj.reLoadRowData(gclSpreadSheet, gclIndex);
+                                    if ($('#show-select-btn').is(':checked')) {
+                                        const newGclIndex = gclSpreadSheet.zh_data.indexOf(gclInfo);
+                                        if (newGclIndex !== -1) {
+                                            gclSpreadSheet.zh_data[newGclIndex].is_change = 0;
+                                            SpreadJsObj.reLoadRowData(gclSpreadSheet, newGclIndex);
+                                        }
+                                    } else {
+                                        SpreadJsObj.reLoadRowData(gclSpreadSheet, gclIndex);
+                                    }
                                 } else {
                                     let isChange = false;
                                     gclInfo.leafXmjs.forEach(function (item) {
-                                        if (item.gcl_id === select.gcl_id && (item.mx_id === undefined || item.mx_id === select.mx_id) && item.is_change) {
+                                        if (_.findIndex(changeList, { gcl_id: item.gcl_id, mx_id: item.mx_id || '' }) !== -1) {
                                             isChange = true;
+                                            return;
                                         }
                                     });
                                     if (!isChange) {
                                         changeListData[gclIndex].is_change = 0;
-                                        SpreadJsObj.reLoadRowData(gclSpreadSheet, gclIndex);
+                                        // 如果是已勾选清单,需要另外找值勾选
+                                        if ($('#show-select-btn').is(':checked')) {
+                                            const newGclIndex = gclSpreadSheet.zh_data.indexOf(gclInfo);
+                                            if (newGclIndex !== -1) {
+                                                gclSpreadSheet.zh_data[newGclIndex].is_change = 0;
+                                                SpreadJsObj.reLoadRowData(gclSpreadSheet, newGclIndex);
+                                            }
+                                        } else {
+                                            SpreadJsObj.reLoadRowData(gclSpreadSheet, gclIndex);
+                                        }
+
                                     }
                                 }
                             }, function () {
@@ -410,6 +438,16 @@ $(document).ready(() => {
     });
 
     $.divResizer({
+        select: '#revise-resize',
+        callback: function () {
+            gclSpread.refresh();
+            let bcontent = $(".bcontent-wrap") ? $(".bcontent-wrap").height() : 0;
+            $(".sp-wrap").height(bcontent-30);
+            xmjSpread.refresh();
+        }
+    });
+
+    $.divResizer({
         select: '#revise-right-spr',
         callback: function () {
             gclSpread.refresh();
@@ -674,6 +712,18 @@ $(document).ready(() => {
             toastr.warning('未存在当前变更令新增的部位/清单');
         }
     });
+
+    $('#show-select-btn').click(function() {
+        if ($(this).is(':checked')) {
+            const selectList = changeListData.filter(function (item) {
+                return item.is_change === 1;
+            });
+            SpreadJsObj.loadSheetData(gclSpreadSheet, SpreadJsObj.DataType.Data, selectList);
+        } else {
+            SpreadJsObj.loadSheetData(gclSpreadSheet, SpreadJsObj.DataType.Data, changeListData);
+        }
+        gclSpreadObj.resetXmjSpread(SpreadJsObj.getSelectObject(gclSpreadSheet));
+    });
 });
 function checkSelectAll(data) {
     let check = false;

+ 117 - 6
app/public/js/change_revise.js

@@ -16,13 +16,13 @@ const invalidFields = {
     posCalc: ['sgfh_qty', 'sgfh_tp', 'sjcl_qty', 'sjcl_tp', 'qtcl_qty', 'qtcl_tp'],
     posXmj: ['code'],
 };
-function getExprInfo (field) {
+function getExprInfo (field, converse = false) {
     const exprField = [
         {qty: 'sgfh_qty', expr: 'sgfh_expr'},
         {qty: 'sjcl_qty', expr: 'sjcl_expr'},
         {qty: 'qtcl_qty', expr: 'qtcl_expr'},
     ];
-    return _.find(exprField, {qty: field});
+    return converse ?  _.find(exprField, {expr: field}) : _.find(exprField, {qty: field});
 }
 function transExpr(expr) {
     return $.trim(expr).replace('\t', '').replace('=', '').replace('%', '/100');
@@ -615,7 +615,6 @@ $(document).ready(() => {
                         info.sheet.endEdit(true);
                     }
                     const is_change = info.sheet.getValue(info.row, info.col) ? 1 : 0;
-                    console.log(select, is_change);
                     if (is_change) {
                         makeGclGatherData();
                         const gclInfo = _.find(gclGatherData, function (item) {
@@ -1939,6 +1938,23 @@ $(document).ready(() => {
                             return;
                         }
                     }
+                } else if (col.field.indexOf('_expr') > 0) {
+                    const exprInfo = getExprInfo(col.field, true);
+                    if (!exprInfo) return;
+
+                    if (newText) {
+                        try {
+                            data.postData[exprInfo.qty] = math.evaluate(transExpr(newText));
+                            data.postData[exprInfo.expr] = newText;
+                        } catch(err) {
+                            toastr.error('输入的表达式非法');
+                            SpreadJsObj.reLoadRowData(info.sheet, info.row);
+                            return;
+                        }
+                    } else {
+                        data.postData[exprInfo.qty] = 0;
+                        data.postData[exprInfo.expr] = '';
+                    }
                 } else {
                     data.postData[col.field] = newText;
                 }
@@ -1982,10 +1998,15 @@ $(document).ready(() => {
                         const style = sheet.getStyle(iRow, iCol);
                         if (!style.locked) {
                             const colSetting = sheet.zh_setting.cols[iCol];
-                            data[colSetting.field] = null;
-                            const exprInfo = getExprInfo(colSetting.field);
-                            if (exprInfo) {
+                            if (colSetting.field.indexOf('_expr') > 0) {
+                                const exprInfo = getExprInfo(colSetting.field, true);
+                                if (!exprInfo) continue;
                                 data[exprInfo.expr] = '';
+                                data[exprInfo.qty] = 0;
+                            } else {
+                                data[colSetting.field] = null;
+                                const exprInfo = getExprInfo(colSetting.field);
+                                if (exprInfo) data[exprInfo.expr] = '';
                             }
                             bDel = true;
                         }
@@ -2125,6 +2146,19 @@ $(document).ready(() => {
                                 bPaste = false;
                             }
                         }
+                    } else if (colSetting.field.indexOf('_expr') > 0) {
+                        try {
+                            const exprInfo = getExprInfo(colSetting.field, true);
+                            posData[exprInfo.expr] = trimInvalidChar(info.sheet.getText(curRow, curCol));
+                            if (posData[exprInfo.expr] || !posData[exprInfo.qty]) {
+                                posData[exprInfo.qty] = math.evaluate(transExpr(posData[exprInfo.expr]));
+                            }
+                            bPaste = true;
+                        } catch (err) {
+                            toastMessageUniq(hint.expr);
+                        }
+                    } else {
+                        bPaste = true;
                     }
                 }
                 if (bPaste) {
@@ -3950,6 +3984,83 @@ if (openRevise) {
             }
             $('#change-dsk-project').html(html);
         }
+
+        // 选中所有新增部位/清单
+        $('#add-all-revise').click(function() {
+            const this_cid = window.location.pathname.split('/')[4];
+            makeGclGatherData();
+            postData('/tender/' + window.location.pathname.split('/')[2] + '/change/' + window.location.pathname.split('/')[4] + '/information/save', {
+                type: 'get-revise-list',
+            }, function (result) {
+                const addDatas = [];
+                for (const ggd in gclGatherData) {
+                    gclGatherData[ggd].code = gclGatherData[ggd].b_code;
+                    let hadcid = 0;
+                    for (const xmj of gclGatherData[ggd].leafXmjs) {
+                        const changeLedger = _.find(result.changeLedgerList, {id: xmj.gcl_id});
+                        const changePos = _.find(result.changePosList, {id: xmj.mx_id, lid: xmj.gcl_id});
+                        if (changeLedger || changePos) {
+                            xmj.cid = 1;
+                            xmj.ccid = changePos ? changePos.ccid : changeLedger ? changeLedger.ccid : 0;
+                            hadcid = 1;
+                        }
+                    }
+                    if (hadcid !== 0) gclGatherData[ggd].cid = 1;
+                }
+                for (const gclInfo of _.filter(gclGatherData, {cid: 1})) {
+                    const leafXmjs = _.filter(gclInfo.leafXmjs, {ccid: this_cid});
+                    if (leafXmjs.length > 0) {
+                        gclInfo.is_change = 1;
+                        for (const xmj of leafXmjs) {
+                            if (_.findIndex(changeList, function (item) {
+                                return item.gcl_id === xmj.gcl_id && item.mx_id === (xmj.mx_id || '');
+                            }) === -1) {
+                                addDatas.push({
+                                    lid: xmj.gcl_id,
+                                    code: gclInfo.code,
+                                    name: gclInfo.name || '',
+                                    unit: gclInfo.unit || '',
+                                    unit_price: gclInfo.unit_price,
+                                    oamount: xmj.quantity,
+                                    oamount2: xmj.quantity,
+                                    bwmx: xmj.bwmx || xmj.jldy || '',
+                                    xmj_code: xmj.code || '',
+                                    xmj_jldy: xmj.jldy || '',
+                                    xmj_dwgc: xmj.dwgc || '',
+                                    xmj_fbgc: xmj.fbgc || '',
+                                    xmj_fxgc: xmj.fxgc || '',
+                                    gcl_id: xmj.gcl_id,
+                                    mx_id: xmj.mx_id || '',
+                                });
+                            }
+                        }
+                    }
+                }
+                console.log(addDatas);
+                if (addDatas.length > 0) {
+                    // 更新至服务器
+                    postData('/tender/' + window.location.pathname.split('/')[2] + '/change/' + window.location.pathname.split('/')[4] + '/information/save', {
+                        type: 'add-change-list',
+                        postData: addDatas,
+                    }, function (result) {
+                        toastr.success('已新增当前变更令新增的所有部位/清单');
+                        changeList = result.changeList;
+                        const sortData = SpreadJsObj.getSortData(billsSheet);
+                        const billsNodes = _.filter(sortData, function (item) {
+                            return _.findIndex(addDatas, {gcl_id: item.id}) !== -1;
+                        });
+                        for (const billsNode of billsNodes) {
+                            billsNode.is_change = 1;
+                        }
+                        const loadResult = { update: billsNodes };
+                        billsTreeSpreadObj.refreshTree(billsSheet, loadResult);
+                        posSpreadObj.loadCurPosData();
+                    });
+                } else {
+                    toastr.warning('未存在当前变更令新增的部位/清单');
+                }
+            });
+        });
     }
 }
 });

+ 6 - 0
app/view/change/addlist.ejs

@@ -9,6 +9,12 @@
                         插入到:变更清单<%- change.order_site_msg.code %> 之后
                     </div>
                 <% } %>
+                <div class="d-inline-block">
+                    <div class="custom-control custom-checkbox">
+                        <input type="checkbox" class="custom-control-input" id="show-select-btn">
+                        <label class="custom-control-label" for="show-select-btn">已勾选清单</label>
+                    </div>
+                </div>
             </div>
             <% if (ctx.session.sessionProject.page_show.openChangeRevise) { %>
             <div class="ml-auto">

+ 1 - 0
app/view/change/revise.ejs

@@ -50,6 +50,7 @@
             </div>
             <% if (ctx.session.sessionProject.page_show.openChangeRevise) { %>
             <div class="ml-auto">
+                <a class="btn btn-sm btn-primary mr-1" id="add-all-revise" href="javascript: void(0);">添加当前新增部位/清单</a>
                 <a class="btn btn-sm btn-primary mr-1" id="ledger-check2" href="javascript: void(0);">数据检查</a>
             </div>
             <% } %>

+ 1 - 1
app/view/settle/settle_menu_list.ejs

@@ -3,4 +3,4 @@
 <nav-menu title="结算部位" url="/tender/<%= ctx.tender.id %>/settle/<%= ctx.settle.settle_order%>/select" ml="3" active="<%= (ctx.url.indexOf('select') > 0 ? 1 : -1) %>"></nav-menu>
 <% } %>
 <nav-menu title="结算台账" url="/tender/<%= ctx.tender.id %>/settle/<%= ctx.settle.settle_order%>/ledger" ml="3" active="<%= (ctx.url.indexOf('ledger') > 0 ? 1 : -1) %>"></nav-menu>
-<nav-menu title="结算报表" url="/tender/<%= ctx.tender.id %>/settle/<%= ctx.settle.settle_order%>/report" ml="3" active="<%= (ctx.url.indexOf('report') > 0 ? 1 : -1) %>"></nav-menu>
+<!--<nav-menu title="结算报表" url="/tender/<%= ctx.tender.id %>/settle/<%= ctx.settle.settle_order%>/report" ml="3" active="<%= (ctx.url.indexOf('report') > 0 ? 1 : -1) %>"></nav-menu>-->