Browse Source

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

Tony Kang 1 year ago
parent
commit
649973bc30

+ 1 - 1
app/controller/stage_controller.js

@@ -1351,7 +1351,7 @@ module.exports = app => {
                 if (ctx.stage.revising) {
                     throw '台账修订中,请勿修改提交期数据';
                 }
-                if (ctx.stage.readySettle.final_sorder >= ctx.stage.order) {
+                if (ctx.stage.readySettle && ctx.stage.readySettle.final_sorder >= ctx.stage.order) {
                     throw '已结算,不可重审';
                 }
 

+ 0 - 25
app/lib/ledger.js

@@ -1119,31 +1119,6 @@ class checkData {
                     }
                 }
             }
-            const checkData = {},
-                calcData = {};
-            for (const field of fields) {
-                checkData[field] = b[field] ? b[field] : 0;
-            }
-            for (const p of pr) {
-                for (const field of fields) {
-                    calcData[field] = this.ctx.helper.add(calcData[field], p[field]);
-                }
-            }
-            if (!this.ctx.helper._.isMatch(checkData, calcData)) {
-                this.checkResult.error.push({
-                    ledger_id: b.ledger_id,
-                    b_code: b.b_code,
-                    name: b.name,
-                    errorType: 'qty',
-                    error: { checkData, calcData },
-                });
-                if (!this.checkResult.source.bills.find(x => {return x.ledger_id === b.ledger_id})) {
-                    this.checkResult.source.bills.push(b);
-                    for (const p of pr) {
-                        this.checkResult.source.pos.push(p);
-                    }
-                }
-            }
         }
     }
 }

+ 4 - 4
app/lib/revise_price.js

@@ -211,8 +211,8 @@ class revisePriceCalc {
         let total_price = 0, positive_tp = 0, negative_tp = 0;
         for (const b of changeBills) {
             const p = this.findChangeBillsPrice(b.code, b.name, b.unit, b.unit_price, change.cid);
-            const settleGcl = p.gcl_id ? this.settleBills.find(x => { return x.lid === p.gcl_id; }) : null;
-            const settlePos = p.mx_id ? this.settlePos.find(x => { return x.pid === p.mx_id; }): null;
+            const settleGcl = b.gcl_id ? this.settleBills.find(x => { return x.lid === b.gcl_id; }) : null;
+            const settlePos = b.mx_id ? this.settlePos.find(x => { return x.pid === b.mx_id; }): null;
             let bills_tp;
             if (p && !settleGcl && !settlePos) {
                 bills_tp = this.ctx.helper.mul(p.new_price, b.spamount, change.tp_decimal || decimal.tp);
@@ -379,8 +379,8 @@ class revisePriceCalc {
 
         this.price = await this.ctx.service.revisePrice.getAllDataByCondition({ where: { rid: revise.id } });
         this.settleStatus = this.ctx.service.settle.settleStatus;
-        this.settleBills = await this.ctx.service.settleBills.getAllDataByCondition({ where: { settle_id: revise.readySettle.id, settle_status: settleStatus.finish } });
-        this.settlePos = await this.ctx.service.settlePos.getAllDataByCondition({ where: { settle_id: revise.readySettle.id }});
+        this.settleBills = revise.readySettle ? await this.ctx.service.settleBills.getAllDataByCondition({ where: { settle_id: revise.readySettle.id, settle_status: settleStatus.finish } }) : [];
+        this.settlePos = revise.readySettle ? await this.ctx.service.settlePos.getAllDataByCondition({ where: { settle_id: revise.readySettle.id }}) : [];
         const pcTp = await this.calcReviseLedger(revise, transaction);
         // 引用到所有工程变更
         await this.calcAllChanges(revise.tid, transaction);

File diff suppressed because it is too large
+ 1 - 0
app/public/css/bootstrap/draw.css


+ 10 - 0
app/public/css/main.css

@@ -2159,3 +2159,13 @@ animation:shake 1s .2s ease both;}
 .list-waring{
     background-color: #ffeeba!important;
 }
+.permission-div {
+    border: 1px solid rgba(0,0,0,.1);
+    margin: .5rem 0;
+    padding: .5rem;
+}
+.permission-title {
+    padding-bottom: .5rem;
+    margin-bottom: .5rem;
+    border-bottom: 1px solid rgba(0,0,0,.1);
+}

+ 83 - 0
app/public/js/bootstrap/drawer.js

@@ -0,0 +1,83 @@
+var drawer = function() {
+    if (!Element.prototype.closest) {
+        if (!Element.prototype.matches) {
+            Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;
+        }
+        Element.prototype.closest = function(s) {
+            var el = this;
+            var ancestor = this;
+            if (!document.documentElement.contains(el))
+                return null;
+            do {
+                if (ancestor.matches(s))
+                    return ancestor;
+                ancestor = ancestor.parentElement;
+            } while (ancestor !== null);
+            return null;
+        }
+        ;
+    }
+
+    var settings = {
+        speedOpen: 50,
+        speedClose: 350,
+        activeClass: 'is-active',
+        visibleClass: 'is-visible',
+        selectorTarget: '[data-drawer-target]',
+        selectorTrigger: '[data-drawer-trigger]',
+        selectorClose: '[data-drawer-close]',
+    };
+    var toggleccessibility = function(event) {
+        if (event.getAttribute('aria-expanded') === 'true') {
+            event.setAttribute('aria-expanded', false);
+        } else {
+            event.setAttribute('aria-expanded', true);
+        }
+    };
+    var openDrawer = function(trigger) {
+        var target = document.getElementById(trigger.getAttribute('aria-controls'));
+        target.classList.add(settings.activeClass);
+        document.documentElement.style.overflow = 'hidden';
+        toggleccessibility(trigger);
+        setTimeout(function() {
+            target.classList.add(settings.visibleClass);
+        }, settings.speedOpen);
+    };
+    var closeDrawer = function(event) {
+        var closestParent = event.closest(settings.selectorTarget)
+            , childrenTrigger = document.querySelector('[aria-controls="' + closestParent.id + '"');
+        closestParent.classList.remove(settings.visibleClass);
+        document.documentElement.style.overflow = '';
+        toggleccessibility(childrenTrigger);
+        setTimeout(function() {
+            closestParent.classList.remove(settings.activeClass);
+        }, settings.speedClose);
+    };
+    var clickHandler = function(event) {
+        var toggle = event.target
+            , open = toggle.closest(settings.selectorTrigger)
+            , close = toggle.closest(settings.selectorClose);
+        if (open) {
+            openDrawer(open);
+        }
+        if (close) {
+            closeDrawer(close);
+        }
+        if (open || close) {
+            event.preventDefault();
+        }
+    };
+    // var keydownHandler = function(event) {
+    //     if (event.key === 'Escape' || event.keyCode === 27) {
+    //         var drawers = document.querySelectorAll(settings.selectorTarget), i;
+    //         for (i = 0; i < drawers.length; ++i) {
+    //             if (drawers[i].classList.contains(settings.activeClass)) {
+    //                 closeDrawer(drawers[i]);
+    //             }
+    //         }
+    //     }
+    // };
+    document.addEventListener('click', clickHandler, false);
+    // document.addEventListener('keydown', keydownHandler, false);
+};
+drawer();

+ 1 - 1
app/public/js/setting.js

@@ -135,7 +135,7 @@ $(document).ready(() => {
     });
 
     // 选中创建标段才可以选择协作办公
-    $('a[data-target="#edit-user2"]').on('click', function () {
+    $('a[aria-controls="edit-user2"]').on('click', function () {
         $('#edit-user2 input:radio').prop('checked', false);
         $('#edit-user2 input:checkbox').prop('checked', false);
         const account = $(this).data('account');

+ 28 - 0
app/service/role_rpt_rel.js

@@ -187,6 +187,34 @@ module.exports = app => {
             }
             return true;
         }
+
+        async checkSignDate(transaction, stage, curAudit, time) {
+            const rptRole = await this.getAllDataByCondition({ where: { sid: stage.id }});
+            const period = stage.period.split(' ~ ');
+
+            const updateData = [];
+            for (const rc of rptRole) {
+                if (!rc.rel_content) continue;
+                let bChange = false;
+                const roleContent = JSON.parse(rc.rel_content);
+                for (const role of roleContent) {
+                    if (!role.sign_date || role.sign_flow) {
+                        if (role.acc_id === curAudit.aid) {
+                            role.sign_date = time;
+                        } else if (role.acc_id === stage.userId) {
+                            role.sign_date = stage.auditors[0].begin_time || time;
+                        } else {
+                            const audit = this.ctx.helper._.findLast(stage.auditors, x => { return x.aid === role.acc_id; });
+                            role.sign_date = audit ? audit.end_time || time : new Date(period[period.length - 1]);
+                        }
+                        role.sign_flow = 1;
+                        bChange = true;
+                    }
+                }
+                if (bChange) updateData.push({ id: rc.id, rel_content: JSON.stringify(roleContent)});
+            }
+            if (updateData.length > 0) await transaction.updateRows(this.tableName, updateData);
+        }
     }
     return RoleRptRel;
 };

+ 2 - 0
app/service/stage_audit.js

@@ -554,6 +554,8 @@ module.exports = app => {
                             code: this.ctx.session.sessionProject.code,
                         };
                         await this.ctx.helper.sendWechat(users, smsTypeConst.const.JL, smsTypeConst.judge.result.toString(), wxConst.template.stage, wechatData);
+                        // 期审批完成,检查角色签名数据
+                        await this.ctx.service.roleRptRel.checkSignDate(transaction, this.ctx.stage, selfAudit, time);
                         // 审批通过 - 检查三方特殊推送
                         await this.ctx.service.specMsg.addStageMsg(transaction, pid, this.ctx.stage, pushOperate.stage.checked);
                     }

+ 3 - 1
app/view/setting/user_permission.ejs

@@ -1,3 +1,4 @@
+<link rel="stylesheet" href="/public/css/bootstrap/draw.css">
 <% include ./sub_menu.ejs %>
 <div class="panel-content">
     <div class="panel-title">
@@ -75,7 +76,7 @@
                                                         <% } %>
                                                     <% } %>
                                                 <% } %>
-                                                <a href="#edit-user2" data-account="<%= JSON.stringify(account) %>" data-toggle="modal" data-target="#edit-user2" class="btn btn-sm btn-outline-primary pull-right">编辑</a></td>
+                                                <a href="javascript:void(0);" data-drawer-trigger="" aria-controls="edit-user2" data-account="<%= JSON.stringify(account) %>" class="btn btn-sm btn-outline-primary pull-right">编辑</a></td>
                                         </tr>
                                     <% } %>
                                     </tbody>
@@ -93,5 +94,6 @@
     const allPermission = JSON.parse('<%- permissionStr %>');
     const unitList = JSON.parse(unescape('<%- escape(JSON.stringify(unitList)) %>'));
 </script>
+<script src="/public/js/bootstrap/drawer.js"></script>
 <script src="/public/js/setting.js"></script>
 <script>autoFlashHeight();</script>

+ 45 - 48
app/view/setting/user_permission_modal.ejs

@@ -68,54 +68,6 @@
         </div>
     </div>
 </div>
-<!--弹出编辑权限-->
-<div class="modal fade" id="edit-user2" data-backdrop="static">
-    <div class="modal-dialog" role="document">
-        <div class="modal-content">
-            <div class="modal-header">
-                <h5 class="modal-title">编辑权限</h5>
-            </div>
-            <form method="post" action="/setting/user/permission?_csrf_j=<%= ctx.csrf %>">
-            <div class="modal-body">
-                <% let index = 0; %>
-                <% for (const pm in permission) { %>
-                <% index ++ %>
-                <div class="form-group">
-                    <label><i <% if (permission[pm].class !== '') { %>class="<%= permission[pm].class %>"<% } %>></i> <%= permission[pm].title %> <sup><%= index %></sup></label>
-                    <div>
-                        <% for (const ip of permission[pm].children) { %>
-                        <% if (ip.show === undefined && ip.show !== false) { %>
-                        <div class="form-check form-check-inline">
-                            <input class="form-check-input" type="<%= permission[pm].type %>" id="<%= pm %>_<%= ip.value %>" name="<%= pm %><% if (permission[pm].type === 'checkbox') { %>[]<% } %>" value="<%= ip.value %>">
-                            <label class="form-check-label" for="<%= pm %>_<%= ip.value %>"><%= ip.title %></label>
-                            <% if (ip.hint && ip.hintIcon) { %>
-                            <a href="" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="<%- ip.hint%>"><i class="fa <%- ip.hintIcon%>"></i></a>
-                            <% } %>
-                        </div>
-                        <% } %>
-                        <% } %>
-                    </div>
-                    <% if (permission[pm].tips) { %>
-                    <!--需要勾选  创建标段 ,协作办公才能勾选-->
-                    <div class="alert alert-secondary">
-                        <p class="mb-0"><%- permission[pm].tips %></p>
-                    </div>
-                    <% } %>
-                </div>
-                <% if (ctx.helper._.size(permission) !== index) { %>
-                <hr>
-                <% } %>
-                <% } %>
-            </div>
-            <div class="modal-footer">
-                <input type="hidden" name="id" value="">
-                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
-                <button type="submit" class="btn btn-primary btn-sm">提交修改</button>
-            </div>
-            </form>
-        </div>
-    </div>
-</div>
 <!--弹出账号受限-->
 <div class="modal" tabindex="-1" role="dialog" id="add-unpass">
     <div class="modal-dialog" role="document">
@@ -136,3 +88,48 @@
         </div>
     </div>
 </div>
+<section class="drawer" id="edit-user2" data-drawer-target="">
+    <div class="drawer__overlay" tabindex="-1"></div>
+    <form class="drawer__wrapper" method="post" action="/setting/user/permission?_csrf_j=<%= ctx.csrf %>">
+        <div class="modal-header">
+            <h5 class="modal-title">
+                编辑权限
+            </h5>
+            <!--            <button type="button" class="close" data-drawer-close="" aria-label="Close Drawer">-->
+            <!--                <span aria-hidden="true">&times;</span>-->
+            <!--            </button>-->
+            <!--            <button class="drawer__close" data-drawer-close="" aria-label="Close Drawer"></button>-->
+        </div>
+        <div class="drawer__content">
+            <% for (const pm in permission) { %>
+                <div class="form-group permission-div">
+                    <h6 class="modal-title permission-title"><%= permission[pm].title %></h6>
+                    <div>
+                        <% for (const ip of permission[pm].children) { %>
+                            <% if (ip.show === undefined && ip.show !== false) { %>
+                                <div class="form-check form-check-inline">
+                                    <input class="form-check-input" type="<%= permission[pm].type %>" id="<%= pm %>_<%= ip.value %>" name="<%= pm %><% if (permission[pm].type === 'checkbox') { %>[]<% } %>" value="<%= ip.value %>">
+                                    <label class="form-check-label" for="<%= pm %>_<%= ip.value %>"><%= ip.title %></label>
+                                    <% if (ip.hint && ip.hintIcon) { %>
+                                        <a href="" data-toggle="tooltip" data-placement="bottom" title="" data-original-title="<%- ip.hint%>"><i class="fa <%- ip.hintIcon%>"></i></a>
+                                    <% } %>
+                                </div>
+                            <% } %>
+                        <% } %>
+                    </div>
+                    <% if (permission[pm].tips) { %>
+                        <!--需要勾选  创建标段 ,协作办公才能勾选-->
+                        <div class="alert alert-secondary" style="margin: .5rem 0 0 0;">
+                            <p class="mb-0"><%- permission[pm].tips %></p>
+                        </div>
+                    <% } %>
+                </div>
+            <% } %>
+        </div>
+        <div class="modal-footer">
+            <input type="hidden" name="id" value="">
+            <button type="button" class="btn btn-secondary btn-sm" data-drawer-close="">关闭</button>
+            <button type="submit" class="btn btn-primary btn-sm">提交修改</button>
+        </div>
+    </form>
+</section>

+ 18 - 11
db_script/test_query.js

@@ -12,7 +12,8 @@ const saveJSON = async function(obj, file) {
 
 const loadReportArchiveData = async function() {
     //const tid = 4417, sOrder = 2;
-    const tid = 3698, sOrder = 7;
+    // const tid = 3698, sOrder = 7;
+    const tid = 5161, sOrder = 11;
     const stage = await querySql('SELECT * FROM zh_stage where tid = ? and `order` = ?', [tid, sOrder]);
     const rptArchive = await querySql('SELECT * FROM zh_rpt_archive where stage_id = ?', [stage[0].id]);
     for (const ra of rptArchive) {
@@ -20,16 +21,22 @@ const loadReportArchiveData = async function() {
         console.log(BaseUtil.getFileName('rptArchive.json'));
         await saveJSON(ra, BaseUtil.getFileName('rptArchive.json'));
 
-        const roleContent = [];
-        for (const c of ra.content) {
-            console.log(c.rpt_id, stage[0].id);
-            const rptRole = await querySql('SELECT * FROM zh_role_rpt_rel WHERE sid = ? and rpt_id = ?', [stage[0].id, c.rpt_id]);
-            if (rptRole.length > 0) {
-                if (rptRole[0].rel_content) roleContent.push(JSON.stringify(rptRole[0].rel_content));
-            }
-        }
-        await saveJSON(roleContent, BaseUtil.getFileName('roleContent.json'));
+        // for (const c of ra.content) {
+        //     console.log(c.rpt_id, stage[0].id);
+        //     const rptRole = await querySql('SELECT * FROM zh_role_rpt_rel WHERE sid = ? and rpt_id = ?', [stage[0].id, c.rpt_id]);
+        //     if (rptRole.length > 0) {
+        //         if (rptRole[0].rel_content) roleContent.push(JSON.parse(rptRole[0].rel_content));
+        //     }
+        // }
+        // await saveJSON(roleContent, BaseUtil.getFileName('roleContent.json'));
+    }
+    const roleContent = [];
+    const rptRole = await querySql('SELECT * FROM zh_role_rpt_rel WHERE sid = ?', [stage[0].id]);
+    for (const rp of rptRole) {
+        if (rp.rel_content) roleContent.push(JSON.parse(rp.rel_content));
     }
+    await saveJSON(roleContent, BaseUtil.getFileName('roleContent.json'));
+
     const rptSign = await querySql('SELECT * FROM zh_rpt_archive_encryption where stage_id = ?', [stage[0].id]);
     for (const rs of rptSign) {
         rs.content = rs.content ? JSON.parse(rs.content) : [];
@@ -50,7 +57,7 @@ const findRole = async function() {
 
 const doCompleteTest = async function() {
     try {
-        // await loadReportArchiveData();
+        await loadReportArchiveData();
         // await findRole();
     } catch (err) {
         console.log(err);