Browse Source

调差增加来源地

laiguoran 3 years ago
parent
commit
c6989ea34d

+ 7 - 0
app/controller/material_controller.js

@@ -259,6 +259,7 @@ module.exports = app => {
                         code: mbd.code,
                         code: mbd.code,
                         name: mbd.name,
                         name: mbd.name,
                         unit: mbd.unit,
                         unit: mbd.unit,
+                        origin: mbd.origin,
                         mb_id: mbd.id,
                         mb_id: mbd.id,
                     };
                     };
                     for (const m of material_month) {
                     for (const m of material_month) {
@@ -671,12 +672,18 @@ module.exports = app => {
                             m_tp: tp3,
                             m_tp: tp3,
                         };
                         };
                         break;
                         break;
+                    case 'updateOrigin':
+                        await ctx.service.materialBills.saveOrigin(data.updateData);
+                        break;
                     case 'paste':
                     case 'paste':
                         const tp4 = await ctx.service.materialMonth.saveDatas(data.updateData, mbList);
                         const tp4 = await ctx.service.materialMonth.saveDatas(data.updateData, mbList);
                         responseData.data = {
                         responseData.data = {
                             m_tp: tp4,
                             m_tp: tp4,
                         };
                         };
                         break;
                         break;
+                    case 'pasteOrigin':
+                        await ctx.service.materialBills.saveOrigins(data.updateData);
+                        break;
                     default: throw '参数有误';
                     default: throw '参数有误';
                 }
                 }
                 responseData.data.materialBillsData = await this._getMaterialBillsData(ctx);
                 responseData.data.materialBillsData = await this._getMaterialBillsData(ctx);

+ 76 - 48
app/public/js/material.js

@@ -560,8 +560,9 @@ $(document).ready(() => {
     sheet.resumePaint();
     sheet.resumePaint();
     const static_cols = [
     const static_cols = [
         {title: '编号', colSpan: '1', rowSpan: '2', field: 'code', hAlign: 0, width: 60, formatter: '@', readOnly: true},
         {title: '编号', colSpan: '1', rowSpan: '2', field: 'code', hAlign: 0, width: 60, formatter: '@', readOnly: true},
-        {title: '名称', colSpan: '1', rowSpan: '2', field: 'name', hAlign: 0, width: 180, formatter: '@', readOnly: true},
+        {title: '名称', colSpan: '1', rowSpan: '2', field: 'name', hAlign: 0, width: 140, formatter: '@', readOnly: true},
         {title: '单位', colSpan: '1', rowSpan: '2', field: 'unit', hAlign: 1, width: 60, formatter: '@', readOnly: true},
         {title: '单位', colSpan: '1', rowSpan: '2', field: 'unit', hAlign: 1, width: 60, formatter: '@', readOnly: true},
+        {title: '来源地', colSpan: '1', rowSpan: '2', field: 'origin', hAlign: 0, width: 80, formatter: '@', readOnly: 'readOnly.isEdit'},
         {title: '平均单价', colSpan: '1', rowSpan: '2', field: 'average_msg_tp', hAlign: 2, width: 60, type: 'Number', readOnly: true, getValue:'getValue.average_msg_tp'},
         {title: '平均单价', colSpan: '1', rowSpan: '2', field: 'average_msg_tp', hAlign: 2, width: 60, type: 'Number', readOnly: true, getValue:'getValue.average_msg_tp'},
     ];
     ];
     // 月信息价方法集合
     // 月信息价方法集合
@@ -667,7 +668,7 @@ $(document).ready(() => {
             },
             },
         },
         },
     };
     };
-    materialMonthSpread.getActiveSheet().frozenColumnCount(4);
+    materialMonthSpread.getActiveSheet().frozenColumnCount(5);
     materialMonthSpread.getActiveSheet().options.frozenlineColor = '#f1f1f1';
     materialMonthSpread.getActiveSheet().options.frozenlineColor = '#f1f1f1';
     SpreadJsObj.initSpreadSettingEvents(materialMonthSpreadSetting, materialMonthCol);
     SpreadJsObj.initSpreadSettingEvents(materialMonthSpreadSetting, materialMonthCol);
     SpreadJsObj.initSheet(materialMonthSpread.getActiveSheet(), materialMonthSpreadSetting);
     SpreadJsObj.initSheet(materialMonthSpread.getActiveSheet(), materialMonthSpreadSetting);
@@ -685,31 +686,42 @@ $(document).ready(() => {
                     SpreadJsObj.reLoadRowData(info.sheet, info.row);
                     SpreadJsObj.reLoadRowData(info.sheet, info.row);
                     return;
                     return;
                 }
                 }
-                // 判断部分值是否输入的是数字判断和数据计算
-                if (isNaN(validText)) {
-                    toastr.error('不能输入其它非数字类型字符');
-                    SpreadJsObj.reLoadRowData(info.sheet, info.row);
-                    return;
-                }
-                const num = parseFloat(validText);
-                if (validText !== null && (num < 0 || !/^\d+(\.\d{1,3})?$/.test(num))) {
-                    toastr.error('请输入大于0并且小于3位小数的浮点数');
-                    SpreadJsObj.reLoadRowData(info.sheet, info.row);
-                    return;
-                }
-                select[col.field] = validText;
+                if (col.field === 'origin') {
+                    select[col.field] = validText;
+                    postData(window.location.pathname + '/month/save', { type:'updateOrigin', updateData: { mb_id: select.mb_id, value: validText } }, function (result) {
+                        SpreadJsObj.reLoadRowData(info.sheet, info.row);
+                        materialBillsData = result.materialBillsData;
+                    }, function () {
+                        select[col.field] = orgValue;
+                        SpreadJsObj.reLoadRowData(info.sheet, info.row);
+                    });
+                } else {
+                    // 判断部分值是否输入的是数字判断和数据计算
+                    if (isNaN(validText)) {
+                        toastr.error('不能输入其它非数字类型字符');
+                        SpreadJsObj.reLoadRowData(info.sheet, info.row);
+                        return;
+                    }
+                    const num = parseFloat(validText);
+                    if (validText !== null && (num < 0 || !/^\d+(\.\d{1,3})?$/.test(num))) {
+                        toastr.error('请输入大于0并且小于3位小数的浮点数');
+                        SpreadJsObj.reLoadRowData(info.sheet, info.row);
+                        return;
+                    }
+                    select[col.field] = validText;
 
 
-                // 更新至服务器
-                postData(window.location.pathname + '/month/save', { type:'update', updateData: { mb_id: select.mb_id, yearmonth: col.field, value: validText } }, function (result) {
-                    SpreadJsObj.reLoadRowData(info.sheet, info.row);
-                    materialBillsData = result.materialBillsData;
-                    SpreadJsObj.loadSheetData(materialSpread.getActiveSheet(), SpreadJsObj.DataType.Data, materialBillsData);
-                    m_tp = result.m_tp;
-                    resetTpTable();
-                }, function () {
-                    select[col.field] = orgValue;
-                    SpreadJsObj.reLoadRowData(info.sheet, info.row);
-                });
+                    // 更新至服务器
+                    postData(window.location.pathname + '/month/save', { type:'update', updateData: { mb_id: select.mb_id, yearmonth: col.field, value: validText } }, function (result) {
+                        SpreadJsObj.reLoadRowData(info.sheet, info.row);
+                        materialBillsData = result.materialBillsData;
+                        SpreadJsObj.loadSheetData(materialSpread.getActiveSheet(), SpreadJsObj.DataType.Data, materialBillsData);
+                        m_tp = result.m_tp;
+                        resetTpTable();
+                    }, function () {
+                        select[col.field] = orgValue;
+                        SpreadJsObj.reLoadRowData(info.sheet, info.row);
+                    });
+                }
             }
             }
         },
         },
         deletePress: function (sheet) {
         deletePress: function (sheet) {
@@ -758,13 +770,14 @@ $(document).ready(() => {
                 SpreadJsObj.reLoadSheetData(materialMonthSpread.getActiveSheet());
                 SpreadJsObj.reLoadSheetData(materialMonthSpread.getActiveSheet());
                 return;
                 return;
             }
             }
-            if (sortData.length > 0 && range.col + range.colCount > 4 + months.length) {
+            if (sortData.length > 0 && range.col + range.colCount > 5 + months.length) {
                 toastMessageUniq(hint.cellError);
                 toastMessageUniq(hint.cellError);
                 SpreadJsObj.reLoadSheetHeader(materialMonthSpread.getActiveSheet());
                 SpreadJsObj.reLoadSheetHeader(materialMonthSpread.getActiveSheet());
                 SpreadJsObj.reLoadSheetData(materialMonthSpread.getActiveSheet());
                 SpreadJsObj.reLoadSheetData(materialMonthSpread.getActiveSheet());
                 return;
                 return;
             }
             }
             const data = [];
             const data = [];
+            let pasteOrigin = false;
             for (let iRow = 0; iRow < range.rowCount; iRow++) {
             for (let iRow = 0; iRow < range.rowCount; iRow++) {
                 let bPaste = true;
                 let bPaste = true;
                 const curRow = range.row + iRow;
                 const curRow = range.row + iRow;
@@ -786,16 +799,20 @@ $(document).ready(() => {
                         }
                         }
                         continue;
                         continue;
                     }
                     }
-                    const num = parseFloat(validText);
-                    if (isNaN(validText)) {
-                        toastMessageUniq(getPasteHint(hint.numberExpr, hintRow));
-                        bPaste = false;
-                        continue;
-                    }
-                    if (validText !== null && (num < 0 || !/^\d+(\.\d{1,3})?$/.test(num))) {
-                        toastMessageUniq(getPasteHint(hint.numberCan, hintRow));
-                        bPaste = false;
-                        continue;
+                    if (colSetting.field === 'origin') {
+                        pasteOrigin = true;
+                    } else {
+                        const num = parseFloat(validText);
+                        if (isNaN(validText)) {
+                            toastMessageUniq(getPasteHint(hint.numberExpr, hintRow));
+                            bPaste = false;
+                            continue;
+                        }
+                        if (validText !== null && (num < 0 || !/^\d+(\.\d{1,3})?$/.test(num))) {
+                            toastMessageUniq(getPasteHint(hint.numberCan, hintRow));
+                            bPaste = false;
+                            continue;
+                        }
                     }
                     }
                     materialMonthData[colSetting.field] = validText;
                     materialMonthData[colSetting.field] = validText;
                     sortData[curRow][colSetting.field] = validText;
                     sortData[curRow][colSetting.field] = validText;
@@ -810,17 +827,28 @@ $(document).ready(() => {
                 SpreadJsObj.reLoadRowData(info.sheet, info.cellRange.row, info.cellRange.rowCount);
                 SpreadJsObj.reLoadRowData(info.sheet, info.cellRange.row, info.cellRange.rowCount);
                 return;
                 return;
             }
             }
-            // 更新至服务器
-            postData(window.location.pathname + '/month/save', { type:'paste', updateData: data }, function (result) {
-                SpreadJsObj.reLoadSheetData(materialMonthSpread.getActiveSheet());
-                materialBillsData = result.materialBillsData;
-                SpreadJsObj.loadSheetData(materialSpread.getActiveSheet(), SpreadJsObj.DataType.Data, materialBillsData);
-                m_tp = result.m_tp;
-                resetTpTable();
-            }, function () {
-                SpreadJsObj.reLoadRowData(info.sheet, info.cellRange.row, info.cellRange.rowCount);
-                return;
-            });
+            if (pasteOrigin) {
+                // 更新至服务器
+                postData(window.location.pathname + '/month/save', { type:'pasteOrigin', updateData: data }, function (result) {
+                    SpreadJsObj.reLoadSheetData(materialMonthSpread.getActiveSheet());
+                    materialBillsData = result.materialBillsData;
+                }, function () {
+                    SpreadJsObj.reLoadRowData(info.sheet, info.cellRange.row, info.cellRange.rowCount);
+                    return;
+                });
+            } else {
+                // 更新至服务器
+                postData(window.location.pathname + '/month/save', { type:'paste', updateData: data }, function (result) {
+                    SpreadJsObj.reLoadSheetData(materialMonthSpread.getActiveSheet());
+                    materialBillsData = result.materialBillsData;
+                    SpreadJsObj.loadSheetData(materialSpread.getActiveSheet(), SpreadJsObj.DataType.Data, materialBillsData);
+                    m_tp = result.m_tp;
+                    resetTpTable();
+                }, function () {
+                    SpreadJsObj.reLoadRowData(info.sheet, info.cellRange.row, info.cellRange.rowCount);
+                    return;
+                });
+            }
         },
         },
     };
     };
 
 

+ 2 - 2
app/service/material.js

@@ -189,7 +189,7 @@ module.exports = app => {
                 await transaction.delete(this.ctx.service.materialFile.tableName, { mid: id });
                 await transaction.delete(this.ctx.service.materialFile.tableName, { mid: id });
                 await transaction.delete(this.ctx.service.materialExponent.tableName, { mid: id });
                 await transaction.delete(this.ctx.service.materialExponent.tableName, { mid: id });
                 await transaction.delete(this.ctx.service.materialExponentHistory.tableName, { mid: id });
                 await transaction.delete(this.ctx.service.materialExponentHistory.tableName, { mid: id });
-                // 如果存在上一期,把上一期的quantity,expr,msg_tp,msg_times,msg_spread,m_up_risk,m_down_risk,m_spread,m_tp,pre_tp,is_summary添加到bill中
+                // 如果存在上一期,把上一期的quantity,expr,msg_tp,msg_times,msg_spread,m_up_risk,m_down_risk,m_spread,m_tp,pre_tp,orgin,is_summary添加到bill中
                 const materialInfo = await this.getDataById(id);
                 const materialInfo = await this.getDataById(id);
                 if (materialInfo.order > 1) {
                 if (materialInfo.order > 1) {
                     const sql = 'UPDATE ' + this.ctx.service.materialBills.tableName + ' as mb, ' +
                     const sql = 'UPDATE ' + this.ctx.service.materialBills.tableName + ' as mb, ' +
@@ -199,7 +199,7 @@ module.exports = app => {
                         'mb.`msg_spread` = mbh.`msg_spread`, mb.`m_up_risk` = mbh.`m_up_risk`, ' +
                         'mb.`msg_spread` = mbh.`msg_spread`, mb.`m_up_risk` = mbh.`m_up_risk`, ' +
                         'mb.`m_down_risk` = mbh.`m_down_risk`, mb.`m_spread` = mbh.`m_spread`, ' +
                         'mb.`m_down_risk` = mbh.`m_down_risk`, mb.`m_spread` = mbh.`m_spread`, ' +
                         'mb.`m_tp` = mbh.`m_tp`, mb.`pre_tp` = mbh.`pre_tp`, ' +
                         'mb.`m_tp` = mbh.`m_tp`, mb.`pre_tp` = mbh.`pre_tp`, ' +
-                        'mb.`is_summary` = mbh.`is_summary` ' +
+                        'mb.`origin` = mbh.`origin`, mb.`is_summary` = mbh.`is_summary` ' +
                         'WHERE mbh.`tid` = ? AND mbh.`order` = ? AND mbh.`mb_id` = mb.`id`';
                         'WHERE mbh.`tid` = ? AND mbh.`order` = ? AND mbh.`mb_id` = mb.`id`';
                     const sqlParam = [this.ctx.tender.id, materialInfo.order - 1];
                     const sqlParam = [this.ctx.tender.id, materialInfo.order - 1];
                     await transaction.query(sql, sqlParam);
                     await transaction.query(sql, sqlParam);

+ 1 - 0
app/service/material_audit.js

@@ -253,6 +253,7 @@ module.exports = app => {
                         m_spread: mb.m_spread,
                         m_spread: mb.m_spread,
                         m_tp: mb.m_tp,
                         m_tp: mb.m_tp,
                         pre_tp: mb.pre_tp,
                         pre_tp: mb.pre_tp,
+                        origin: mb.origin,
                         is_summary: mb.is_summary,
                         is_summary: mb.is_summary,
                     };
                     };
                     mbhList.push(newMbh);
                     mbhList.push(newMbh);

+ 25 - 1
app/service/material_bills.js

@@ -123,6 +123,28 @@ module.exports = app => {
             }
             }
         }
         }
 
 
+        async saveOrigin(data) {
+            if (!this.ctx.tender || !this.ctx.material) {
+                throw '数据错误';
+            }
+            return await this.db.update(this.tableName, { id: data.mb_id, origin: data.value });
+        }
+
+        async saveOrigins(datas) {
+            if (!this.ctx.tender || !this.ctx.material) {
+                throw '数据错误';
+            }
+            const updateData = [];
+            for (const data of datas) {
+                updateData.push({
+                    id: data.mb_id,
+                    origin: data.origin,
+                });
+            }
+            if (updateData.length > 0) await this.db.updateRows(this.tableName, updateData);
+            return true;
+        }
+
         /**
         /**
          * 修改工料信息
          * 修改工料信息
          * @param {Object} data 工料内容
          * @param {Object} data 工料内容
@@ -185,7 +207,7 @@ module.exports = app => {
                 const sqlParam = [mid, mb.id];
                 const sqlParam = [mid, mb.id];
                 const mb_quantity = await transaction.queryOne(sql, sqlParam);
                 const mb_quantity = await transaction.queryOne(sql, sqlParam);
                 console.log(mb_quantity);
                 console.log(mb_quantity);
-                // 取历史期记录获取截止上期调差金额,并清空本期单价和时间,重新计算价差和有效价差
+                // 取历史期记录获取截止上期调差金额,并清空本期单价和时间,来源地,重新计算价差和有效价差
                 const updateData = {
                 const updateData = {
                     id: mb.id,
                     id: mb.id,
                     quantity: this.ctx.helper.round(mb_quantity.quantity, 3),
                     quantity: this.ctx.helper.round(mb_quantity.quantity, 3),
@@ -193,6 +215,7 @@ module.exports = app => {
                     msg_times: null,
                     msg_times: null,
                     msg_spread: newmsg_spread,
                     msg_spread: newmsg_spread,
                     m_spread: newm_spread,
                     m_spread: newm_spread,
+                    origin: null,
                     m_tp: this.ctx.helper.round(this.ctx.helper.mul(this.ctx.helper.round(mb_quantity.quantity, 3), newm_spread), 2),
                     m_tp: this.ctx.helper.round(this.ctx.helper.mul(this.ctx.helper.round(mb_quantity.quantity, 3), newm_spread), 2),
                     pre_tp: mb.m_tp !== null ? this.ctx.helper.round(this.ctx.helper.add(mb.pre_tp, mb.m_tp), 2) : mb.pre_tp,
                     pre_tp: mb.m_tp !== null ? this.ctx.helper.round(this.ctx.helper.add(mb.pre_tp, mb.m_tp), 2) : mb.pre_tp,
                 };
                 };
@@ -207,6 +230,7 @@ module.exports = app => {
                     msg_times: null,
                     msg_times: null,
                     msg_spread: newmsg_spread,
                     msg_spread: newmsg_spread,
                     m_spread: newm_spread,
                     m_spread: newm_spread,
+                    origin: null,
                     m_tp: quantity !== 0 && quantity !== null ? this.ctx.helper.round(this.ctx.helper.mul(this.ctx.helper.round(quantity, 3), newm_spread), 2) : null,
                     m_tp: quantity !== 0 && quantity !== null ? this.ctx.helper.round(this.ctx.helper.mul(this.ctx.helper.round(quantity, 3), newm_spread), 2) : null,
                     pre_tp: mb.m_tp !== null ? this.ctx.helper.round(this.ctx.helper.add(mb.pre_tp, mb.m_tp), 2) : mb.pre_tp,
                     pre_tp: mb.m_tp !== null ? this.ctx.helper.round(this.ctx.helper.add(mb.pre_tp, mb.m_tp), 2) : mb.pre_tp,
                 };
                 };