Browse Source

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

MaiXinRong 11 months ago
parent
commit
c32c90fd33

+ 2 - 0
app/const/page_show.js

@@ -27,6 +27,7 @@ const pageStatus = {
 const defaultSetting = {
     bwtz: 0,
     xxjd: 0,
+    openMaterial: 1,
     stageExtra: 1,
     closeExportPdf: 0,
     closeExportExcel: 0,
@@ -58,6 +59,7 @@ const defaultSetting = {
     openBudget: 1,
     openPayment: 1,
     openConstruction: 1,
+    openMaterialStageRepeat: 0,
 };
 
 

+ 3 - 3
app/controller/dashboard_controller.js

@@ -29,7 +29,7 @@ module.exports = app => {
             const auditStages = await ctx.service.stageAudit.getAuditStage(ctx.session.sessionUser.accountId);
             const auditChanges = await ctx.service.changeAudit.getAuditChange(ctx.session.sessionUser.accountId);
             const auditRevise = await ctx.service.reviseAudit.getAuditRevise(ctx.session.sessionUser.accountId);
-            const auditMaterial = await ctx.service.materialAudit.getAuditMaterial(ctx.session.sessionUser.accountId);
+            const auditMaterial = ctx.session.sessionProject.page_show.openMaterial ? await ctx.service.materialAudit.getAuditMaterial(ctx.session.sessionUser.accountId) : [];
             const auditAdvance = await ctx.service.advanceAudit.getAuditAdvance(ctx.session.sessionUser.accountId);
             const auditChangeProject = ctx.session.sessionProject.page_show.openChangeProject ? await ctx.service.changeProjectAudit.getAuditChangeProject(ctx.session.sessionUser.accountId) : [];
             const auditChangeApply = ctx.session.sessionProject.page_show.openChangeApply ? await ctx.service.changeApplyAudit.getAuditChangeApply(ctx.session.sessionUser.accountId) : [];
@@ -62,7 +62,7 @@ module.exports = app => {
             if (ctx.session.sessionProject.page_show.openChangeProject) shenpi_count.push({ count: await ctx.service.changeProjectAudit.getCountByChecked(ctx.session.sessionUser.accountId), name: '变更立项' });
             if (ctx.session.sessionProject.page_show.openChangeApply) shenpi_count.push({ count: await ctx.service.changeApplyAudit.getCountByChecked(ctx.session.sessionUser.accountId), name: '变更申请' });
             if (ctx.session.sessionProject.page_show.openChangePlan) shenpi_count.push({ count: await ctx.service.changePlanAudit.getCountByChecked(ctx.session.sessionUser.accountId), name: '变更方案' });
-            shenpi_count.push({ count: await ctx.service.materialAudit.getCountByChecked(ctx.session.sessionUser.accountId), name: '材料调差' });
+            if (ctx.session.sessionProject.page_show.openMaterial) shenpi_count.push({ count: await ctx.service.materialAudit.getCountByChecked(ctx.session.sessionUser.accountId), name: '材料调差' });
             // shenpi_count.push({ count: await ctx.service.advanceAudit.getCountByChecked(ctx.session.sessionUser.accountId), name: '预付款' });
             const total_count = ctx.app._.sumBy(shenpi_count, 'count');
             const shenpi_lastime = [
@@ -74,7 +74,7 @@ module.exports = app => {
                 ctx.session.sessionProject.page_show.openChangeProject ? await ctx.service.changeProjectAudit.getLastEndTimeByChecked(ctx.session.sessionUser.accountId) : null,
                 ctx.session.sessionProject.page_show.openChangeApply ? await ctx.service.changeApplyAudit.getLastEndTimeByChecked(ctx.session.sessionUser.accountId) : null,
                 ctx.session.sessionProject.page_show.openChangePlan ? await ctx.service.changePlanAudit.getLastEndTimeByChecked(ctx.session.sessionUser.accountId) : null,
-                await ctx.service.materialAudit.getLastEndTimeByChecked(ctx.session.sessionUser.accountId),
+                ctx.session.sessionProject.page_show.openMaterial ? await ctx.service.materialAudit.getLastEndTimeByChecked(ctx.session.sessionUser.accountId) : null,
             ];
             const last_time = ctx.app._.max(shenpi_lastime);
             // console.log(ctx.app._.max(shenpi_lastime), ctx.helper.calcDayNum(last_time));

+ 27 - 6
app/controller/material_controller.js

@@ -45,6 +45,9 @@ module.exports = app => {
          */
         async index(ctx) {
             try {
+                if (!ctx.session.sessionProject.page_show.openMaterial) {
+                    throw '该功能已关闭';
+                }
                 // 列展示
                 const tenderMsg = await ctx.service.tender.getTender(ctx.tender.id, ['material_col_show']);
                 const material_col_show = tenderMsg.material_col_show ? JSON.parse(tenderMsg.material_col_show) : ctx.helper._.cloneDeep(tenderConst.materialColShow);
@@ -79,12 +82,14 @@ module.exports = app => {
                     // s.curAuditor = null;
                     // 根据期状态返回展示用户
                     s.curAuditor = await ctx.service.materialAudit.getAuditorByStatus(s.id, s.status, s.times);
-                    const materialStageList = s.stage_id.split(',');
-                    for (const ms of materialStageList) {
-                        const index = stages.findIndex(function(item) {
-                            return item.id === parseInt(ms);
-                        });
-                        stages.splice(index, 1);
+                    if (!ctx.session.sessionProject.page_show.openMaterialStageRepeat) {
+                        const materialStageList = s.stage_id.split(',');
+                        for (const ms of materialStageList) {
+                            const index = stages.findIndex(function(item) {
+                                return item.id === parseInt(ms);
+                            });
+                            stages.splice(index, 1);
+                        }
                     }
                     if (allMaterialTax && s.material_tax === 0) {
                         allMaterialTax = false;
@@ -113,6 +118,7 @@ module.exports = app => {
                 await this.layout('material/index.ejs', renderData, 'material/modal.ejs');
             } catch (err) {
                 this.log(err);
+                ctx.session.postError = err.toString();
                 ctx.redirect(this.menu.menu.dashboard.url);
             }
         }
@@ -124,6 +130,9 @@ module.exports = app => {
          */
         async materialAuditors(ctx) {
             try {
+                if (!ctx.session.sessionProject.page_show.openMaterial) {
+                    throw '该功能已关闭';
+                }
                 const responseData = {
                     err: 0, msg: '', data: {},
                 };
@@ -160,6 +169,9 @@ module.exports = app => {
          */
         async save(ctx) {
             try {
+                if (!ctx.session.sessionProject.page_show.openMaterial) {
+                    throw '该功能已关闭';
+                }
                 const data = {
                     mid: ctx.request.body.mid,
                     period: ctx.request.body.period,
@@ -189,6 +201,9 @@ module.exports = app => {
          */
         async saveData(ctx) {
             try {
+                if (!ctx.session.sessionProject.page_show.openMaterial) {
+                    throw '该功能已关闭';
+                }
                 const data = JSON.parse(ctx.request.body.data);
                 const responseData = {
                     err: 0,
@@ -215,6 +230,9 @@ module.exports = app => {
          */
         async add(ctx) {
             try {
+                if (!ctx.session.sessionProject.page_show.openMaterial) {
+                    throw '该功能已关闭';
+                }
                 if (ctx.session.sessionUser.accountId !== ctx.tender.data.user_id) {
                     throw '您无权创建材料调差期';
                 }
@@ -247,6 +265,9 @@ module.exports = app => {
          */
         async delete(ctx) {
             try {
+                if (!ctx.session.sessionProject.page_show.openMaterial) {
+                    throw '该功能已关闭';
+                }
                 const material_id = ctx.request.body.material_id;
                 const materialInfo = await ctx.service.material.getDataById(material_id);
                 // 获取最新的期数

+ 3 - 0
app/middleware/material_check.js

@@ -33,6 +33,9 @@ module.exports = options => {
      */
     return function* materialCheck(next) {
         try {
+            if (!this.session.sessionProject.page_show.openMaterial) {
+                throw '该功能已关闭';
+            }
             // 读取标段数据
             const materialOrder = parseInt(this.params.order);
             if (materialOrder <= 0) {

+ 17 - 13
app/public/js/material.js

@@ -127,31 +127,35 @@ DatePickerCellType.prototype.updateEditor = function (editorContext, cellStyle,
 function resetTpTable() {
     $('#tp_set').find('td').eq(1).text(ZhCalc.round(m_tp, materialDecimal.tp));
     $('#tp_set').find('td').eq(2).text(ZhCalc.add(pre_tp, ZhCalc.round(m_tp, materialDecimal.tp)));
-    if (materialTax) {
-        $('#tax_rate_set').find('td').eq(1).text(ZhCalc.round(m_tax_tp, materialDecimal.tp));
-        $('#tax_rate_set').find('td').eq(2).text(ZhCalc.add(m_tax_pre_tp, ZhCalc.round(m_tax_tp, materialDecimal.tp)));
-    } else {
-        const rate = $('#rateInput').val();
-        const bqhs = ZhCalc.round(ZhCalc.mul(m_tp, 1+rate/100), materialDecimal.tp);
-        const jzbqhs = ZhCalc.add(pre_tp_hs, bqhs);
-        $('#rate_set').find('td').eq(1).text(bqhs !== 0 ? bqhs : '');
-        $('#rate_set').find('td').eq(2).text(jzbqhs !== 0 ? jzbqhs : '');
-    }
-
+    let sum = 0;
     if (isStageSelf) {
         let html = '';
+        const rate = $('#rateInput').val();
         for (const ms of materialStageData) {
-            const taxHtml = materialTax ? '                                        <td class="text-center">' + (ms.m_tax_tp !== null ? ms.m_tax_tp : '') + '</td>\n' : '';
+            if (!materialTax) {
+                sum = ZhCalc.add(sum, ZhCalc.round(ZhCalc.mul(ms.m_tp, 1+rate/100), materialDecimal.tp));
+            }
+            const taxHtml = '                                        <td class="text-center">' + (materialTax ? (ms.m_tax_tp !== null ? ms.m_tax_tp : '') : ZhCalc.round(ZhCalc.mul(ms.m_tp, 1+rate/100), materialDecimal.tp) ) + '</td>\n';
             html += '<tr><td>第' + ms.order + '期</td><td class="text-center">' + (ms.m_tp !== null ? ms.m_tp : '') + '</td>\n' +
                 taxHtml +
                 '                                </tr>';
         }
-        const allTaxHtml = materialTax ? '                                        <td class="text-center">' + m_tax_tp + '</td>\n' : '';
+        const allTaxHtml = '                                        <td class="text-center">' + (materialTax ? m_tax_tp : sum) + '</td>\n';
         html += '<tr><td>合计</td><td class="text-center">' + m_tp + '</td>\n' +
             allTaxHtml +
             '                                </tr>';
         $('#materialStageTable').html(html);
     }
+    if (materialTax) {
+        $('#tax_rate_set').find('td').eq(1).text(ZhCalc.round(m_tax_tp, materialDecimal.tp));
+        $('#tax_rate_set').find('td').eq(2).text(ZhCalc.add(m_tax_pre_tp, ZhCalc.round(m_tax_tp, materialDecimal.tp)));
+    } else {
+        const rate = $('#rateInput').val();
+        const bqhs = isStageSelf ? sum : ZhCalc.round(ZhCalc.mul(m_tp, 1+rate/100), materialDecimal.tp);
+        const jzbqhs = ZhCalc.add(pre_tp_hs, bqhs);
+        $('#rate_set').find('td').eq(1).text(bqhs !== 0 ? bqhs : '');
+        $('#rate_set').find('td').eq(2).text(jzbqhs !== 0 ? jzbqhs : '');
+    }
 }
 function getPasteHint (str, row = '') {
     let returnObj = str;

+ 1 - 1
app/service/material.js

@@ -399,7 +399,7 @@ module.exports = app => {
          * @return {Promise<*>}
          */
         async getPreTpHs(tid, order, tp) {
-            const sql = 'SELECT SUM(ROUND(`m_tp`*(1+ `rate`/100),' + tp + ')) AS `pre_tp_hs` FROM ?? WHERE `tid` = ? AND `material_tax` = ? AND `order` < ?';
+            const sql = 'SELECT SUM(`rate_tp`) AS `pre_tp_hs` FROM ?? WHERE `tid` = ? AND `material_tax` = ? AND `order` < ?';
             const sqlParam = [this.tableName, tid, 0, order];
             const result = await this.db.queryOne(sql, sqlParam);
             return result.pre_tp_hs;

+ 12 - 0
app/service/material_bills.js

@@ -767,6 +767,18 @@ module.exports = app => {
                 m_tp: tp.total_price,
                 m_tax_tp: tp.tax_total_price,
             };
+            // 计算建筑税价
+            if (this.ctx.material.is_stage_self) {
+                const materialStages = await transaction.select(this.ctx.service.materialStage.tableName, { where: { mid: this.ctx.material.id } });
+                let rate_tp = 0;
+                for (const ms of materialStages) {
+                    const ms_rate_tp = this.ctx.helper.round(this.ctx.helper.mul(ms.m_tp, 1 + this.ctx.material.rate / 100), this.ctx.material.decimal.tp);
+                    rate_tp = this.ctx.helper.add(rate_tp, ms_rate_tp);
+                }
+                updateData2.rate_tp = rate_tp;
+            } else {
+                updateData2.rate_tp = this.ctx.helper.round(this.ctx.helper.mul(tp.total_price, 1 + this.ctx.material.rate / 100), this.ctx.material.decimal.tp);
+            }
             console.log(tp);
             // if (this.ctx.material.material_tax) {
             //     updateData2.m_tax_tp = tp.tax_total_price;

+ 16 - 10
app/service/rpt_archive.js

@@ -125,17 +125,23 @@ module.exports = app => {
             let rst = null;
             this.transaction = await this.db.beginTransaction();
             try {
-                const data = {
-                    id,
-                    prj_id,
-                    stage_id,
-                    business_id,
-                    tender_id,
-                    business_type: rptArchiveConst.getBusinessType(stage_id),
-                    content: JSON.stringify(archiveArr),
-                };
                 // console.log(data);
-                rst = await this.transaction.update(this.tableName, data);
+                // rst = await this.transaction.update(this.tableName, data);
+                if (archiveArr.length === 0) {
+                    await this.transaction.delete(this.tableName, { id });
+                    await this.transaction.update(this.ctx.service.stage.tableName, { id: stage_id, rpt_filed: 0 });
+                } else {
+                    const data = {
+                        id,
+                        prj_id,
+                        stage_id,
+                        business_id,
+                        tender_id,
+                        business_type: rptArchiveConst.getBusinessType(stage_id),
+                        content: JSON.stringify(archiveArr),
+                    };
+                    rst = await this.transaction.update(this.tableName, data);
+                }
                 await this.transaction.commit();
             } catch (ex) {
                 console.log(ex);

+ 6 - 2
app/view/dashboard/index.ejs

@@ -63,7 +63,7 @@
                                     <% if (ctx.session.sessionProject.page_show.openChangePlan && auditChangePlan.length !== 0) { %>
                                         <option value="9">变更方案(<%- auditChangePlan.length %>)</option>
                                     <% } %>
-                                    <% if (auditMaterial.length !== 0) { %>
+                                    <% if (ctx.session.sessionProject.page_show.openMaterial && auditMaterial.length !== 0) { %>
                                     <option value="1">材料调差(<%- auditMaterial.length %>)</option>
                                     <% } %>
                                     <% if (ctx.session.sessionProject.page_show.openPayment && auditPayments.length !== 0) { %>
@@ -358,7 +358,9 @@
                                     <% if (ctx.session.sessionProject.page_show.openChangePlan) { %>
                                         <option value="9">变更方案</option>
                                     <% } %>
+                                    <% if (ctx.session.sessionProject.page_show.openMaterial) { %>
                                     <option value="1">材料调差</option>
+                                    <% } %>
                                 </select>
                             </div>
                         </div>
@@ -395,7 +397,7 @@
                                                     <td class="<%- acStage.statusClass[notice.status]%>"><%- acStage.statusString[notice.status]%></td>
                                                     <td><%- notice.opinion ? notice.opinion : '' %></td>
                                                 </tr>
-                                            <% } else if(notice.type === pushType.material) { %>
+                                            <% } else if(notice.type === pushType.material && ctx.session.sessionProject.page_show.openMaterial) { %>
                                                 <tr data-type="1">
                                                     <td><span class="bg-new-material text-new-material badge text-width">材料调差</span></td>
                                                     <td><a href="/tender/<%- notice.tid %>"><%- notice.name %></a> <a href="/tender/<%- notice.tid %>/measure/material/<%- notice.order %>">第<%- notice.order %>期</a></td>
@@ -606,7 +608,9 @@
             <% if (ctx.session.sessionProject.page_show.openChangePlan) { %>
             'rgba(114, 46, 209,'+ transparentCount +')',
             <% } %>
+            <% if (ctx.session.sessionProject.page_show.openMaterial) { %>
             'rgba(187, 41, 210,'+ transparentCount +')',
+            <% } %>
         ],
         tooltip: {
             trigger: 'item'

+ 2 - 2
app/view/material/index.ejs

@@ -81,7 +81,7 @@
                             <% if (materialColShow[0].checked) { %>
                             <td class="text-right"><%= m.m_tp !== null ? ctx.helper.round(m.m_tp, m.decimal.tp) : null %></td>
                             <% if (openMaterialTax) { %><td class="text-right"><% if (m.material_tax) { %><% if (m.m_tax_tp) { %><%- m.m_tax_tp %><% } else { %><%- m.m_tp %><% } %><% } %></td><% } %>
-                            <% if ((openMaterialTax && !allMaterialTax) || !openMaterialTax) { %><td class="text-right"><% if (!m.material_tax) { %><%= m.m_tp !== null ? ctx.helper.round(ctx.helper.mul(m.m_tp, 1+m.rate/100), m.decimal.tp) : null %><% } %></td><% } %>
+                            <% if ((openMaterialTax && !allMaterialTax) || !openMaterialTax) { %><td class="text-right"><% if (!m.material_tax) { %><%- m.rate_tp %><% } %></td><% } %>
                             <% } %>
                             <% if (materialColShow[1].checked) { %>
                             <td class="text-right"><%= m.ex_tp !== null ? ctx.helper.round(m.ex_tp, m.decimal.tp) : null %></td>
@@ -90,7 +90,7 @@
                             <% if (materialColShow[2].checked) { %>
                             <td class="text-right"><%= ctx.helper.add(ctx.helper.round(m.ex_tp, m.decimal.tp), ctx.helper.round(m.m_tp, m.decimal.tp)) %></td>
                             <% if (openMaterialTax) { %><td class="text-right"><% if (m.material_tax) { %><% if (m.m_tax_tp) { %><%- m.m_tax_tp %><% } else { %><%- m.m_tp %><% } %><% } %></td><% } %>
-                            <td class="text-right"><% if (m.material_tax) { %><%= m.ex_tp !== null ? ctx.helper.round(ctx.helper.mul(m.ex_tp, 1+m.exponent_rate/100), m.decimal.tp) : null %><% } else { %><%= ctx.helper.add(ctx.helper.round(ctx.helper.mul(m.ex_tp, 1+m.exponent_rate/100), m.decimal.tp), ctx.helper.round(ctx.helper.mul(m.m_tp, 1+m.rate/100), m.decimal.tp)) %><% } %></td>
+                            <td class="text-right"><% if (m.material_tax) { %><%= m.ex_tp !== null ? ctx.helper.round(ctx.helper.mul(m.ex_tp, 1+m.exponent_rate/100), m.decimal.tp) : null %><% } else { %><%= ctx.helper.add(ctx.helper.round(ctx.helper.mul(m.ex_tp, 1+m.exponent_rate/100), m.decimal.tp), m.rate_tp) %><% } %></td>
                             <% } %>
                             <td class="<%- auditConst.auditProgressClass[m.status] %>">
                                 <% if (m.curAuditor) { %>

+ 11 - 5
app/view/material/info.ejs

@@ -191,8 +191,8 @@
                                                     <td class="text-center"><%= material.ex_tp !== null || material.ex_pre_tp !== null ? ctx.helper.add(material.ex_pre_tp, ctx.helper.round(material.ex_tp, material.decimal.tp)) : null %></td>
                                                 </tr>
                                                 <tr id="rate_set"><td>材料价差费用(含建筑税)</td>
-                                                    <td class="text-center"><%= material.m_tp !== null ? ctx.helper.round(ctx.helper.mul(material.m_tp, 1+material.rate/100), material.decimal.tp) : null %></td>
-                                                    <td class="text-center"><%= material.m_tp !== null || pre_tp_hs !== null ? ctx.helper.add(pre_tp_hs, ctx.helper.round(ctx.helper.mul(material.m_tp, 1+material.rate/100), material.decimal.tp)) : null %></td>
+                                                    <td class="text-center"><%= material.m_tp !== null ? material.rate_tp : null %></td>
+                                                    <td class="text-center"><%= material.m_tp !== null || pre_tp_hs !== null ? ctx.helper.add(pre_tp_hs, material.rate_tp) : null %></td>
                                                     <td class="text-center"><%= material.ex_tp !== null ? ctx.helper.round(ctx.helper.mul(material.ex_tp, 1+material.exponent_rate/100), material.decimal.tp) : null %></td>
                                                     <td class="text-center"><%= material.ex_tp !== null || ex_pre_tp_hs !== null ? ctx.helper.add(ex_pre_tp_hs, ctx.helper.round(ctx.helper.mul(material.ex_tp, 1+material.exponent_rate/100), material.decimal.tp)) : null %></td>
                                                 </tr>
@@ -217,8 +217,8 @@
                                                     <td class="text-center">-</td>
                                                 </tr>
                                                 <tr id="rate_set"><td>材料价差费用(含建筑税)</td>
-                                                    <td class="text-center"><%= !material.material_tax ? (material.m_tp !== null ? ctx.helper.round(ctx.helper.mul(material.m_tp, 1+material.rate/100), material.decimal.tp) : null) : '-' %></td>
-                                                    <td class="text-center"><%= !material.material_tax ? (material.m_tp !== null || pre_tp_hs !== null ? ctx.helper.add(pre_tp_hs, ctx.helper.round(ctx.helper.mul(material.m_tp, 1+material.rate/100), material.decimal.tp)) : null) : pre_tp_hs !== null ? pre_tp_hs : '-' %></td>
+                                                    <td class="text-center"><%= !material.material_tax ? material.rate_tp : '-' %></td>
+                                                    <td class="text-center"><%= !material.material_tax ? (material.m_tp !== null || pre_tp_hs !== null ? ctx.helper.add(pre_tp_hs, material.rate_tp) : null) : pre_tp_hs !== null ? pre_tp_hs : '-' %></td>
                                                     <td class="text-center"><%= material.ex_tp !== null ? ctx.helper.round(ctx.helper.mul(material.ex_tp, 1+material.exponent_rate/100), material.decimal.tp) : null %></td>
                                                     <td class="text-center"><%= material.ex_tp !== null || ex_pre_tp_hs !== null ? ctx.helper.add(ex_pre_tp_hs, ctx.helper.round(ctx.helper.mul(material.ex_tp, 1+material.exponent_rate/100), material.decimal.tp)) : null %></td>
                                                 </tr>
@@ -231,11 +231,13 @@
                                         <div class="sp-wrap" style="overflow: auto;">
                                             <table class="table table-bordered">
                                                 <thead>
-                                                <tr class="text-center"><th colspan="<% if (material.material_tax) { %>3<% } else { %>2<% } %>">期明细</th></tr>
+                                                <tr class="text-center"><th colspan="3">期明细</th></tr>
                                                 <tr><th class="text-center">期数</th>
                                                     <th class="text-center">本期调差金额</th>
                                                     <% if (material.material_tax) { %>
                                                         <th class="text-center">本期调差金额(材料税)</th>
+                                                    <% } else { %>
+                                                    <th class="text-center">本期调差金额(建筑税)</th>
                                                     <% } %>
                                                 </tr>
                                                 </thead>
@@ -244,12 +246,16 @@
                                                     <tr><td>第<%- ms.order %>期</td><td class="text-center"><%- ms.m_tp !== null ? ms.m_tp : null %></td>
                                                         <% if (material.material_tax) { %>
                                                             <td class="text-center"><%- ms.m_tax_tp !== null ? ms.m_tax_tp : null %></td>
+                                                        <% } else { %>
+                                                        <td class="text-center"><%= ms.m_tp !== null ? ctx.helper.round(ctx.helper.mul(ms.m_tp, 1+material.rate/100), material.decimal.tp) : null %></td>
                                                         <% } %>
                                                     </tr>
                                                 <% } %>
                                                 <tr><td>合计</td><td class="text-center"><%- material.m_tp %></td>
                                                     <% if (material.material_tax) { %>
                                                         <td class="text-center"><%- material.m_tax_tp %></td>
+                                                    <% } else { %>
+                                                    <td class="text-center"><%- material.rate_tp %></td>
                                                     <% } %>
                                                 </tr>
                                                 </tbody>

+ 1 - 2
app/view/material/modal.ejs

@@ -23,7 +23,7 @@
                         <div class="col-4">
                             <div class="custom-control custom-checkbox">
                                 <input type="checkbox" class="custom-control-input select-stage-order" id="stage_<%= stage.id %>" name="stage_id[]" value="<%= stage.id %>" data-order="<%= stage.order %>">
-                                <label class="custom-control-label" for="stage_<%= stage.id %>">第<%= stage.order %>期</label>
+                                <label class="custom-control-label" for="stage_<%= stage.id %>">第<%= stage.order %>期(<%- stage.s_time  %>)</label>
                             </div>
                         </div>
                         <% } %>
@@ -47,7 +47,6 @@
                     <div>
                         <% for (const qs of qtySourceConst) { %>
                         <div class="form-check form-check-inline">
-                            <% console.log(materials.length) %>
                             <input type="radio" name="qty_source" id="<%- qs.key %>_source" class="form-check-input" value="<%- qs.value %>" <% if (materials && materials.length === 0 && qs.value === 1) { %>checked<% } else if (materials && materials.length > 0 && materials[0].qty_source === qtySourceValueConst[qs.key]) { %>checked<% } %>>
                             <label class="form-check-label" for="<%- qs.key %>_source"><%- qs.name %></label>
                         </div>

+ 1 - 1
app/view/setting/fun.ejs

@@ -188,7 +188,7 @@
                                     </div>
                                 </div>
                             </div>
-                            <div class="col-6">
+                            <div class="col-6" <% if (!ctx.session.sessionProject.page_show.openMaterial) { %>style="display: none;"<% } %>>
                                 <div class="card mb-3">
                                     <div class="card-body">
                                         <h5 class="card-title">材料调差</h5>

+ 2 - 0
app/view/tender/tender_sub_menu.ejs

@@ -47,11 +47,13 @@
             </ul>
             <% } %>
         </div>
+        <% if (ctx.session.sessionProject.page_show.openMaterial) { %>
         <div class="nav-box">
             <ul class="nav-list list-unstyled">
                 <li <% if (ctx.url === '/tender/' + ctx.tender.id + '/measure/material') { %>class="active"<% } %>><a href="/tender/<%- ctx.tender.id %>/measure/material" class="h3"><i class="fa fa-line-chart fa-fw"></i> <span>材料调差</span></a></li>
             </ul>
         </div>
+        <% } %>
         <% if (ctx.session.sessionProject.page_show.xxjd && (ctx.tender.schedule_permission !== 0 || ctx.tender.isTourist)) { %>
         <div class="nav-box">
             <h3><i class="fa fa-bar-chart fa-fw"></i> 投资进度</h3>

+ 2 - 0
app/view/tender/tender_sub_mini_menu.ejs

@@ -48,11 +48,13 @@
                 </ul>
             <% } %>
         </div>
+        <% if (ctx.session.sessionProject.page_show.openMaterial) { %>
         <div class="nav-box">
             <ul class="nav-list list-unstyled">
                 <li <% if (ctx.url === '/tender/' + ctx.tender.id + '/measure/material') { %>class="active"<% } %>><a href="/tender/<%- ctx.tender.id %>/measure/material" class="h3"><i class="fa fa-line-chart fa-fw"></i> <span>材料调差</span></a></li>
             </ul>
         </div>
+        <% } %>
         <% if (ctx.session.sessionProject.page_show.xxjd && (ctx.tender.schedule_permission !== 0 || ctx.tender.isTourist)) { %>
             <div class="nav-box">
                 <h3><i class="fa fa-bar-chart fa-fw"></i> 投资进度</h3>

+ 61 - 0
db_script/material_rate_tp.js

@@ -0,0 +1,61 @@
+// 计算调差建筑税金额
+
+const materialConst = require('../app/const/material');
+const BaseUtil = require('./baseUtils');
+const querySql = BaseUtil.querySql;
+const ZhCalc = BaseUtil.ZhCalc;
+
+const checkMaterial = async function(material) {
+    let rate_tp = 0;
+    material.decimal = material.decimal ? JSON.parse(material.decimal) : materialConst.decimal;
+    if (material.is_stage_self) {
+        const materialStages = await querySql('Select * From zh_material_stage Where mid = ?', [material.id]);
+        for (const ms of materialStages) {
+            const ms_rate_tp = ZhCalc.round(ZhCalc.mul(ms.m_tp, 1 + material.rate / 100), material.decimal.tp);
+            rate_tp = ZhCalc.add(rate_tp, ms_rate_tp);
+        }
+    } else {
+        rate_tp = ZhCalc.round(ZhCalc.mul(material.m_tp, 1 + material.rate / 100), material.decimal.tp);
+    }
+    await querySql('Update zh_material Set rate_tp = ? Where id = ?', [rate_tp, material.id]);
+    console.log(`Update Material ${material.id}`);
+};
+
+const doComplete = async function() {
+    try {
+        const tender = await querySql('Select * From zh_tender');
+        for (const t of tender) {
+            console.log(`Update Tender ${t.id}:`);
+
+            const materials = await querySql('Select * From zh_material where tid = ?', [t.id]);
+            for (const m of materials) {
+                await checkMaterial(m);
+            }
+        }
+    } catch (err) {
+        console.log(err);
+    }
+    BaseUtil.closePool();
+};
+const doCompleteTest = async function(tid) {
+    try {
+        const tender = await querySql('Select * From zh_tender where id = ?', [tid]);
+        for (const t of tender) {
+            console.log(`Update Tender ${t.id}:`);
+            const materials = await querySql('Select * From zh_material where tid = ?', [t.id]);
+            for (const m of materials) {
+                await checkMaterial(m);
+            }
+        }
+    } catch (err) {
+        console.log(err);
+    }
+    BaseUtil.closePool();
+};
+
+const tenderId = process.argv[3];
+if (tenderId) {
+    doCompleteTest(tenderId);
+} else {
+    doComplete();
+}

+ 2 - 54
sql/update.sql

@@ -1,54 +1,2 @@
-ALTER TABLE `zh_project`
-ADD COLUMN `common_json` json NULL COMMENT '通用json,没有sql查询值必要的可放这' AFTER `notice_setting`;
-ALTER TABLE `zh_ledger_tag`
-ADD COLUMN `pos_id` varchar(36) NOT NULL DEFAULT '' COMMENT '关联计量单元id(zh_pos表中的id)' AFTER `id`;
-
-ALTER TABLE `zh_change`
-ADD COLUMN `valuation_tp` decimal(30, 8) NULL DEFAULT 0 COMMENT '计价金额(审批完成后统计)' AFTER `negative_tp`,
-ADD COLUMN `unvaluation_tp` decimal(30, 8) NULL DEFAULT 0 COMMENT '不计价金额(审批完成后统计)' AFTER `valuation_tp`;
-
-ALTER TABLE `zh_change`
-MODIFY COLUMN `positive_tp` decimal(30, 8) NOT NULL DEFAULT 0.00000000 COMMENT '正变更金额' AFTER `order_by`,
-MODIFY COLUMN `negative_tp` decimal(30, 8) NOT NULL DEFAULT 0.00000000 COMMENT '负变更金额' AFTER `positive_tp`;
-
-ALTER TABLE `zh_change_audit_list`
-ADD COLUMN `oamount2` decimal(30, 8) NULL DEFAULT NULL COMMENT '原数量(可编辑)' AFTER `oamount`;
-
-ALTER TABLE `zh_ledger_attachment`
-MODIFY COLUMN `tid` int(11) UNSIGNED NOT NULL COMMENT '标段id' AFTER `id`,
-ADD COLUMN `revise_id` varchar(36) NOT NULL COMMENT '修订id' AFTER `tid`,
-ADD COLUMN `revising` tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '修订中' AFTER `revise_id`,
-MODIFY COLUMN `uid` int(11) UNSIGNED NOT NULL COMMENT '上传者id' AFTER `lid`,
-ADD COLUMN `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间' AFTER `in_time`;
-
-ALTER TABLE `zh_ledger_attachment`
-ADD INDEX `idx_tid`(`tid`),
-ADD INDEX `idx_tid_sid`(`tid`, `settle_id`),
-ADD INDEX `idx_tid_rid`(`tid`, `revise_id`),
-ADD INDEX `idx_tid_revising`(`tid`, `revising`);
-
-CREATE TABLE `zh_ancillary_gcl`  (
-  `id` varchar(36) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT 'uuid',
-  `tid` int(11) UNSIGNED NOT NULL COMMENT '标段id',
-  `lid` varchar(36) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '台账id(zh_ledger.id)',
-  `g_order` int(11) UNSIGNED NOT NULL DEFAULT 1 COMMENT '排序',
-  `is_aux` tinyint(4) UNSIGNED NOT NULL DEFAULT 0 COMMENT '辅材',
-  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '名称',
-  `unit` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '单位',
-  `quantity` decimal(24, 8) NOT NULL DEFAULT 0.00000000 COMMENT '设计量',
-  `expr` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '设计量公式',
-  `drawing_code` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '图册号',
-  `memo` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '备注',
-  `add_user_id` int(11) UNSIGNED NOT NULL COMMENT '创建人',
-  `add_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
-  `update_user_id` int(11) UNSIGNED NOT NULL COMMENT '最后修改人',
-  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
-  PRIMARY KEY (`id`) USING BTREE,
-  INDEX `idx_tid`(`tid`) USING BTREE,
-  INDEX `idex_tid_lid`(`tid`, `lid`) USING BTREE
-) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_unicode_ci COMMENT = '台账-附属工程量' ROW_FORMAT = Dynamic;
-
---修复转换值问题,并且需要再运行一次db_script/check_bills更新checked_price方法
-UPDATE `zh_change_audit_list` SET `checked_amount` = CONVERT(`samount`, DECIMAL(30, 8)) WHERE `samount` != '';
-
-UPDATE `zh_change_audit_list` SET `oamount2` = `oamount`;
+ALTER TABLE `zh_material`
+ADD COLUMN `rate_tp` decimal(30, 8) NULL DEFAULT NULL COMMENT '建筑含税总金额' AFTER `rate`;

+ 54 - 0
sql/update20240624.sql

@@ -0,0 +1,54 @@
+ALTER TABLE `zh_project`
+ADD COLUMN `common_json` json NULL COMMENT '通用json,没有sql查询值必要的可放这' AFTER `notice_setting`;
+ALTER TABLE `zh_ledger_tag`
+ADD COLUMN `pos_id` varchar(36) NOT NULL DEFAULT '' COMMENT '关联计量单元id(zh_pos表中的id)' AFTER `id`;
+
+ALTER TABLE `zh_change`
+ADD COLUMN `valuation_tp` decimal(30, 8) NULL DEFAULT 0 COMMENT '计价金额(审批完成后统计)' AFTER `negative_tp`,
+ADD COLUMN `unvaluation_tp` decimal(30, 8) NULL DEFAULT 0 COMMENT '不计价金额(审批完成后统计)' AFTER `valuation_tp`;
+
+ALTER TABLE `zh_change`
+MODIFY COLUMN `positive_tp` decimal(30, 8) NOT NULL DEFAULT 0.00000000 COMMENT '正变更金额' AFTER `order_by`,
+MODIFY COLUMN `negative_tp` decimal(30, 8) NOT NULL DEFAULT 0.00000000 COMMENT '负变更金额' AFTER `positive_tp`;
+
+ALTER TABLE `zh_change_audit_list`
+ADD COLUMN `oamount2` decimal(30, 8) NULL DEFAULT NULL COMMENT '原数量(可编辑)' AFTER `oamount`;
+
+ALTER TABLE `zh_ledger_attachment`
+MODIFY COLUMN `tid` int(11) UNSIGNED NOT NULL COMMENT '标段id' AFTER `id`,
+ADD COLUMN `revise_id` varchar(36) NOT NULL COMMENT '修订id' AFTER `tid`,
+ADD COLUMN `revising` tinyint(1) UNSIGNED NOT NULL DEFAULT 0 COMMENT '修订中' AFTER `revise_id`,
+MODIFY COLUMN `uid` int(11) UNSIGNED NOT NULL COMMENT '上传者id' AFTER `lid`,
+ADD COLUMN `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后修改时间' AFTER `in_time`;
+
+ALTER TABLE `zh_ledger_attachment`
+ADD INDEX `idx_tid`(`tid`),
+ADD INDEX `idx_tid_sid`(`tid`, `settle_id`),
+ADD INDEX `idx_tid_rid`(`tid`, `revise_id`),
+ADD INDEX `idx_tid_revising`(`tid`, `revising`);
+
+CREATE TABLE `zh_ancillary_gcl`  (
+  `id` varchar(36) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT 'uuid',
+  `tid` int(11) UNSIGNED NOT NULL COMMENT '标段id',
+  `lid` varchar(36) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '台账id(zh_ledger.id)',
+  `g_order` int(11) UNSIGNED NOT NULL DEFAULT 1 COMMENT '排序',
+  `is_aux` tinyint(4) UNSIGNED NOT NULL DEFAULT 0 COMMENT '辅材',
+  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '名称',
+  `unit` varchar(20) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '单位',
+  `quantity` decimal(24, 8) NOT NULL DEFAULT 0.00000000 COMMENT '设计量',
+  `expr` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '设计量公式',
+  `drawing_code` varchar(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '图册号',
+  `memo` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT '' COMMENT '备注',
+  `add_user_id` int(11) UNSIGNED NOT NULL COMMENT '创建人',
+  `add_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  `update_user_id` int(11) UNSIGNED NOT NULL COMMENT '最后修改人',
+  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
+  PRIMARY KEY (`id`) USING BTREE,
+  INDEX `idx_tid`(`tid`) USING BTREE,
+  INDEX `idex_tid_lid`(`tid`, `lid`) USING BTREE
+) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_unicode_ci COMMENT = '台账-附属工程量' ROW_FORMAT = Dynamic;
+
+--修复转换值问题,并且需要再运行一次db_script/check_bills更新checked_price方法
+UPDATE `zh_change_audit_list` SET `checked_amount` = CONVERT(`samount`, DECIMAL(30, 8)) WHERE `samount` != '';
+
+UPDATE `zh_change_audit_list` SET `oamount2` = `oamount`;