Quellcode durchsuchen

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

Tony Kang vor 1 Tag
Ursprung
Commit
a2b9046d91

+ 2 - 0
app/controller/change_controller.js

@@ -482,6 +482,7 @@ module.exports = app => {
                     // throw '台账修订中,无法操作台账数据';
                     revising = true;
                 }
+                const isNewPriceLedgerData = await ctx.service.ledger.getAllDataByCondition({ where: { tender_id: ctx.tender.id, is_new_price: 1 } });
                 const renderData = {
                     tender,
                     change,
@@ -512,6 +513,7 @@ module.exports = app => {
                     deleteFilePermission,
                     changeMode: tenderData.c_mode,
                     revising,
+                    isNewPriceLedgerData,
                 };
                 // 获取是否已存在调用变更令
                 let changeUsedData = await ctx.service.stageChange.getAllFinalUsedData(ctx.tender.id, change.cid);

+ 9 - 4
app/public/js/change_information.js

@@ -905,10 +905,15 @@ $(document).ready(() => {
             let i = 0;
             // 重算金额和数量汇总
             for (const node of newChangeList) {
-                if (node.gcl_id && _.findIndex(changeLedgerList, { id: node.gcl_id }) !== -1) {
-                    node.is_add_list = 1;
-                    const ledger = _.find(changeLedgerList, { id: node.gcl_id });
-                    node.is_new_price = ledger ? ledger.is_new_price : 0;
+                if (node.gcl_id) {
+                    const changeLedgerInfo = _.find(changeLedgerList, { id: node.gcl_id });
+                    if (changeLedgerInfo) {
+                        node.is_add_list = 1;
+                        node.is_new_price = changeLedgerInfo ? changeLedgerInfo.is_new_price : 0;
+                    } else {
+                        const ledgerInfo = _.find(isNewPriceLedgerData, { id: node.gcl_id });
+                        node.is_new_price = ledgerInfo ? ledgerInfo.is_new_price : 0;
+                    }
                 }
                 if (node.children && node.children.length > 0) {
                     changeSpreadObj.calcOneSum(node);

+ 126 - 119
app/public/js/ledger.js

@@ -145,6 +145,7 @@ $(document).ready(function() {
             headerFont: '12px 微软雅黑',
             font: '12px 微软雅黑',
             frozenLineColor: '#93b5e4',
+            readOnly: readOnly,
         };
         const refresh = function() {
             if (spread) spread.refresh();
@@ -167,6 +168,7 @@ $(document).ready(function() {
                     specCol.maxDrop = 10;
                 }
                 template.spread_cache.forceLoadEmpty = true;
+                template.spread_cache.readOnly = readOnly;
                 SpreadJsObj.initSheet(sheet, template.spread_cache);
             } else {
                 SpreadJsObj.initSheet(sheet, emptySetting);
@@ -392,69 +394,71 @@ $(document).ready(function() {
                 });
             },
         };
-        SpreadJsObj.addDeleteBind(spread, ctrlObj.deletePress);
-        spread.bind(spreadNS.Events.EditStarting, ctrlObj.editStarting);
-        spread.bind(spreadNS.Events.EditEnded, ctrlObj.editEnded);
-        spread.bind(spreadNS.Events.ClipboardPasting, ctrlObj.clipboardPasting);
-        $.contextMenu({
-            selector: '#pos-detail-spread',
-            build: function ($trigger, e) {
-                const target = SpreadJsObj.safeRightClickSelection($trigger, e, spread);
-                return target.hitTestType === GC.Spread.Sheets.SheetArea.viewport || target.hitTestType === GC.Spread.Sheets.SheetArea.rowHeader;
-            },
-            items: {
-                'insert': {
-                    name: '插入',
-                    icon: 'fa-plus',
-                    disabled: function (key, opt) {
-                        const pos = SpreadJsObj.getSelectObject(posSheet);
-                        return !pos;
-                    },
-                    callback: function (key, opt) {
-                        ctrlObj.baseOpr('insert');
-                    }
+        if (!readOnly) {
+            SpreadJsObj.addDeleteBind(spread, ctrlObj.deletePress);
+            spread.bind(spreadNS.Events.EditStarting, ctrlObj.editStarting);
+            spread.bind(spreadNS.Events.EditEnded, ctrlObj.editEnded);
+            spread.bind(spreadNS.Events.ClipboardPasting, ctrlObj.clipboardPasting);
+            $.contextMenu({
+                selector: '#pos-detail-spread',
+                build: function ($trigger, e) {
+                    const target = SpreadJsObj.safeRightClickSelection($trigger, e, spread);
+                    return target.hitTestType === GC.Spread.Sheets.SheetArea.viewport || target.hitTestType === GC.Spread.Sheets.SheetArea.rowHeader;
                 },
-                'delete': {
-                    name: '删除',
-                    icon: 'fa-remove',
-                    disabled: function (key, opt) {
-                        const detailData = SpreadJsObj.getSelectObject(sheet);
-                        return !detailData;
+                items: {
+                    'insert': {
+                        name: '插入',
+                        icon: 'fa-plus',
+                        disabled: function (key, opt) {
+                            const pos = SpreadJsObj.getSelectObject(posSheet);
+                            return !pos;
+                        },
+                        callback: function (key, opt) {
+                            ctrlObj.baseOpr('insert');
+                        }
                     },
-                    callback: function (key, opt) {
-                        ctrlObj.baseOpr('delete');
-                    }
-                },
-                'down-move': {
-                    name: '下移',
-                    icon: 'fa-arrow-down',
-                    disabled: function(key, opt) {
-                        const sel = sheet.getSelections()[0];
-                        const row = sel ? sel.row : -1;
-                        const first = sheet.zh_data[row];
-                        const next = sheet.zh_data[sel.row + sel.rowCount];
-                        return !first || !next;
+                    'delete': {
+                        name: '删除',
+                        icon: 'fa-remove',
+                        disabled: function (key, opt) {
+                            const detailData = SpreadJsObj.getSelectObject(sheet);
+                            return !detailData;
+                        },
+                        callback: function (key, opt) {
+                            ctrlObj.baseOpr('delete');
+                        }
                     },
-                    callback: function(key, opt) {
-                        ctrlObj.baseOpr('down-move');
-                    }
-                },
-                'up-move': {
-                    name: '上移',
-                    icon: 'fa-arrow-up',
-                    disabled: function(key, opt) {
-                        const sel = sheet.getSelections()[0];
-                        const row = sel ? sel.row : -1;
-                        const first = sheet.zh_data[row];
-                        const preNode = sheet.zh_data[row - 1];
-                        return !first || !preNode;
+                    'down-move': {
+                        name: '下移',
+                        icon: 'fa-arrow-down',
+                        disabled: function(key, opt) {
+                            const sel = sheet.getSelections()[0];
+                            const row = sel ? sel.row : -1;
+                            const first = sheet.zh_data[row];
+                            const next = sheet.zh_data[sel.row + sel.rowCount];
+                            return !first || !next;
+                        },
+                        callback: function(key, opt) {
+                            ctrlObj.baseOpr('down-move');
+                        }
                     },
-                    callback: function(key, opt) {
-                        ctrlObj.baseOpr('up-move');
-                    }
-                },
-            }
-        });
+                    'up-move': {
+                        name: '上移',
+                        icon: 'fa-arrow-up',
+                        disabled: function(key, opt) {
+                            const sel = sheet.getSelections()[0];
+                            const row = sel ? sel.row : -1;
+                            const first = sheet.zh_data[row];
+                            const preNode = sheet.zh_data[row - 1];
+                            return !first || !preNode;
+                        },
+                        callback: function(key, opt) {
+                            ctrlObj.baseOpr('up-move');
+                        }
+                    },
+                }
+            });
+        }
 
         return { detail, spread, sheet, refresh, loadCurDetailData, reloadCurDetailData }
     })();
@@ -3012,6 +3016,7 @@ $(document).ready(function() {
         defaultRowHeight: 21,
         headerFont: '12px 微软雅黑',
         font: '12px 微软雅黑',
+        readOnly: readOnly,
     };
     SpreadJsObj.initSheet(ancGclSheet, ancGclSpreadSetting);
     const ancGclObj = {
@@ -3308,70 +3313,72 @@ $(document).ready(function() {
             });
         },
     };
-    SpreadJsObj.addDeleteBind(ancGclSpread, ancGclObj.deletePress);
-    ancGclSpread.bind(spreadNS.Events.EditStarting, ancGclObj.editStarting);
-    ancGclSpread.bind(spreadNS.Events.EditEnded, ancGclObj.editEnded);
-    ancGclSpread.bind(spreadNS.Events.ClipboardPasting, ancGclObj.clipboardPasting);
-    ancGclSpread.bind(spreadNS.Events.ButtonClicked, ancGclObj.buttonClicked);
-    $.contextMenu({
-        selector: '#anc-gcl-spread',
-        build: function ($trigger, e) {
-            const target = SpreadJsObj.safeRightClickSelection($trigger, e, ancGclSpread);
-            return target.hitTestType === GC.Spread.Sheets.SheetArea.viewport || target.hitTestType === GC.Spread.Sheets.SheetArea.rowHeader;
-        },
-        items: {
-            'insert': {
-                name: '插入',
-                icon: 'fa-plus',
-                disabled: function (key, opt) {
-                    const node = SpreadJsObj.getSelectObject(ledgerSheet);
-                    return !node || !node.b_code || (node.children && node.children.length > 0);
-                },
-                callback: function (key, opt) {
-                    ancGclObj.baseOpr('insert');
-                }
+    if (!readOnly) {
+        SpreadJsObj.addDeleteBind(ancGclSpread, ancGclObj.deletePress);
+        ancGclSpread.bind(spreadNS.Events.EditStarting, ancGclObj.editStarting);
+        ancGclSpread.bind(spreadNS.Events.EditEnded, ancGclObj.editEnded);
+        ancGclSpread.bind(spreadNS.Events.ClipboardPasting, ancGclObj.clipboardPasting);
+        ancGclSpread.bind(spreadNS.Events.ButtonClicked, ancGclObj.buttonClicked);
+        $.contextMenu({
+            selector: '#anc-gcl-spread',
+            build: function ($trigger, e) {
+                const target = SpreadJsObj.safeRightClickSelection($trigger, e, ancGclSpread);
+                return target.hitTestType === GC.Spread.Sheets.SheetArea.viewport || target.hitTestType === GC.Spread.Sheets.SheetArea.rowHeader;
             },
-            'delete': {
-                name: '删除',
-                icon: 'fa-remove',
-                disabled: function (key, opt) {
-                    const gclData = SpreadJsObj.getSelectObject(ancGclSheet);
-                    return !gclData;
+            items: {
+                'insert': {
+                    name: '插入',
+                    icon: 'fa-plus',
+                    disabled: function (key, opt) {
+                        const node = SpreadJsObj.getSelectObject(ledgerSheet);
+                        return !node || !node.b_code || (node.children && node.children.length > 0);
+                    },
+                    callback: function (key, opt) {
+                        ancGclObj.baseOpr('insert');
+                    }
                 },
-                callback: function (key, opt) {
-                    ancGclObj.baseOpr('delete');
-                }
-            },
-            'down-move': {
-                name: '下移',
-                icon: 'fa-arrow-down',
-                disabled: function(key, opt) {
-                    const sel = ancGclSheet.getSelections()[0];
-                    const row = sel ? sel.row : -1;
-                    const first = ancGclSheet.zh_data[row];
-                    const next = ancGclSheet.zh_data[sel.row + sel.rowCount];
-                    return !first || !next;
+                'delete': {
+                    name: '删除',
+                    icon: 'fa-remove',
+                    disabled: function (key, opt) {
+                        const gclData = SpreadJsObj.getSelectObject(ancGclSheet);
+                        return !gclData;
+                    },
+                    callback: function (key, opt) {
+                        ancGclObj.baseOpr('delete');
+                    }
                 },
-                callback: function(key, opt) {
-                    ancGclObj.baseOpr('down-move');
-                }
-            },
-            'up-move': {
-                name: '上移',
-                icon: 'fa-arrow-up',
-                disabled: function(key, opt) {
-                    const sel = ancGclSheet.getSelections()[0];
-                    const row = sel ? sel.row : -1;
-                    const first = ancGclSheet.zh_data[row];
-                    const preNode = ancGclSheet.zh_data[row - 1];
-                    return !first || !preNode;
+                'down-move': {
+                    name: '下移',
+                    icon: 'fa-arrow-down',
+                    disabled: function(key, opt) {
+                        const sel = ancGclSheet.getSelections()[0];
+                        const row = sel ? sel.row : -1;
+                        const first = ancGclSheet.zh_data[row];
+                        const next = ancGclSheet.zh_data[sel.row + sel.rowCount];
+                        return !first || !next;
+                    },
+                    callback: function(key, opt) {
+                        ancGclObj.baseOpr('down-move');
+                    }
                 },
-                callback: function(key, opt) {
-                    ancGclObj.baseOpr('up-move');
-                }
-            },
-        }
-    });
+                'up-move': {
+                    name: '上移',
+                    icon: 'fa-arrow-up',
+                    disabled: function(key, opt) {
+                        const sel = ancGclSheet.getSelections()[0];
+                        const row = sel ? sel.row : -1;
+                        const first = ancGclSheet.zh_data[row];
+                        const preNode = ancGclSheet.zh_data[row - 1];
+                        return !first || !preNode;
+                    },
+                    callback: function(key, opt) {
+                        ancGclObj.baseOpr('up-move');
+                    }
+                },
+            }
+        });
+    }
     $('#filter-anc-gcl').change(function() {
         if (this.checked) {
             const condition = {};

+ 2 - 2
app/service/change_audit_list.js

@@ -1105,7 +1105,7 @@ module.exports = app => {
                         l.sgfh_qty, l.sgfh_tp, l.sjcl_qty, l.sjcl_tp, l.qtcl_qty, l.qtcl_tp, l.node_type, l.crid, l.ccid,
                         l.tender_id, l.sgfh_expr, l.sjcl_expr, l.qtcl_expr, l.check_calc,
                         l.ex_memo1, l.ex_memo2, l.ex_memo3,
-                        l.ex_qty1, l.ex_tp1,
+                        l.ex_qty1, l.ex_tp1, l.is_new_price,
                     ];
                     insertLedgerArr.push('(' + this.ctx.helper.getInArrStrSqlFilter(insertL) + ')');
                     await transaction.delete(this.ctx.service.changeLedger.tableName, { id: l.id });
@@ -1118,7 +1118,7 @@ module.exports = app => {
                     '     quantity, total_price, unit_price, drawing_code, memo, features, dgn_qty1, dgn_qty2, deal_qty, deal_tp,' +
                     '     sgfh_qty, sgfh_tp, sjcl_qty, sjcl_tp, qtcl_qty, qtcl_tp, node_type, crid, ccid, tender_id,' +
                     '     sgfh_expr, sjcl_expr, qtcl_expr, check_calc,' +
-                    '     ex_memo1, ex_memo2, ex_memo3, ex_qty1, ex_tp1) VALUES ' + insertLedgerArr.join(',') + ';';
+                    '     ex_memo1, ex_memo2, ex_memo3, ex_qty1, ex_tp1, is_new_price) VALUES ' + insertLedgerArr.join(',') + ';';
                 await transaction.query(bSql, []);
             }
             if (posList.length > 0) {

+ 17 - 1
app/service/material_audit.js

@@ -292,7 +292,23 @@ module.exports = app => {
                 // 本期一些必要数据(如应耗数量和上期调差金额)插入到material_bills_history表里
                 const materialBillsData = await this.ctx.service.materialBills.getAllDataByCondition({ where: { tid: this.ctx.tender.id } });
                 if (materialBillsData.length === 0 && this.ctx.material.ex_expr === null) {
-                    throw '请至少使用一种调差方式';
+                    if (!this.ctx.material.exponent_node && this.ctx.material.is_stage_self === 0) {
+                        throw '请至少使用一种调差方式';
+                    } else if (this.ctx.material.exponent_node) {
+                        const nodes = await this.ctx.service.materialExponentNode.getAllDataByCondition({ where: { mid: materialId } });
+                        const ex_exprs = this._.map(nodes, 'ex_expr');
+                        // 如果都为空或者null,则抛出错误
+                        if (ex_exprs.every(expr => expr === null || expr === '')) {
+                            throw '请至少使用一种调差方式';
+                        }
+                    } else if (!this.ctx.material.exponent_node && this.ctx.material.is_stage_self === 1) {
+                        const stages = await this.ctx.service.materialStage.getAllDataByCondition({where: {mid: materialId}});
+                        const stage_exprs = this._.map(stages, 'ex_expr');
+                        // 如果都为空或者null,则抛出错误
+                        if (stage_exprs.every(expr => expr === null || expr === '')) {
+                            throw '请至少使用一种调差方式';
+                        }
+                    }
                 }
 
                 // 微信模板通知

+ 1 - 1
app/service/material_list.js

@@ -1012,7 +1012,7 @@ module.exports = app => {
                         };
                         updateBillsData.push(oneBillsData);
                     }
-                    await transaction.updateRows(this.ctx.service.materialBills.tableName, updateBillsData);
+                    if (updateBillsData.length > 0) await transaction.updateRows(this.ctx.service.materialBills.tableName, updateBillsData);
                     // 计算得出本期总金额
                     let m_tp = 0;
                     let m_tax_tp = 0;

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

@@ -629,6 +629,7 @@
     changeUnits.push('');
     let changeUsedData = JSON.parse(unescape('<%- escape(JSON.stringify(changeUsedData)) %>'));
     const change = JSON.parse(unescape('<%- escape(JSON.stringify(change)) %>'));
+    const isNewPriceLedgerData = JSON.parse(unescape('<%- escape(JSON.stringify(isNewPriceLedgerData)) %>'));
 </script>
 <% if (!change.readOnly || change.shenpiPower) { %>
 <script>