浏览代码

修订展示审批流程

laiguoran 5 年之前
父节点
当前提交
93d02afdc1
共有 6 个文件被更改,包括 311 次插入17 次删除
  1. 13 1
      app/const/audit.js
  2. 48 9
      app/controller/revise_controller.js
  3. 1 0
      app/router.js
  4. 75 1
      app/service/revise_audit.js
  5. 10 4
      app/view/revise/index.ejs
  6. 164 2
      app/view/revise/modal.ejs

+ 13 - 1
app/const/audit.js

@@ -77,7 +77,19 @@ const revise = (function () {
     auditStringClass[status.checking] = 'text-warning';
     auditStringClass[status.checked] = 'text-success';
     auditStringClass[status.checkNo] = 'text-warning';
-    return { status, statusString, statusClass, auditString, auditStringClass }
+    // 描述文本
+    const auditProgress = [];
+    auditProgress[status.uncheck] = '草稿';
+    auditProgress[status.checking] = '审批中';
+    auditProgress[status.checked] = '审批通过';
+    auditProgress[status.checkNo] = '审批退回';
+    // 样式
+    const auditProgressClass = [];
+    auditProgressClass[status.uncheck] = '';
+    auditProgressClass[status.checking] = 'text-warning';
+    auditProgressClass[status.checked] = 'text-success';
+    auditProgressClass[status.checkNo] = 'text-warning';
+    return { status, statusString, statusClass, auditString, auditStringClass, auditProgress, auditProgressClass };
 })();
 
 // 期审批流程

+ 48 - 9
app/controller/revise_controller.js

@@ -66,9 +66,14 @@ module.exports = app => {
                         revise.lastest = true;
                     } else {
                         if (ledgerRevise.length > 1) ledgerRevise[1].lastest = true;
-                        if (revise.status === audit.revise.status.checking) {
-                            revise.curAuditor = await ctx.service.reviseAudit.getCurAuditor(revise.id, revise.times);
-                        }
+                        // if (revise.status === audit.revise.status.checking) {
+                        //     revise.curAuditor = await ctx.service.reviseAudit.getCurAuditor(revise.id, revise.times);
+                        // }
+                    }
+                }
+                for (const lr of ledgerRevise) {
+                    if (lr.valid) {
+                        lr.curAuditor = await ctx.service.reviseAudit.getAuditorByStatus(lr.id, lr.status, lr.times);
                     }
                 }
                 const addValid = await this._getAddReviseValid(ctx);
@@ -86,6 +91,7 @@ module.exports = app => {
                     ledgerRevise,
                     addValid,
                     auditConst: audit.revise,
+                    auditConst2: JSON.stringify(audit.revise),
                     stdBills,
                     stdChapters,
                 };
@@ -97,6 +103,39 @@ module.exports = app => {
         }
 
         /**
+         * 修订审批流程(Get)
+         * @param ctx
+         * @returns {Promise<void>}
+         */
+        async reviseAuditors(ctx) {
+            try {
+                const responseData = {
+                    err: 0, msg: '', data: {},
+                };
+                const rid = JSON.parse(ctx.request.body.data).id;
+                const reviseInfo = await ctx.service.ledgerRevise.getDataById(rid);
+                // 获取审批流程中右边列表
+                const auditHistory = [];
+                const times = reviseInfo.status === audit.revise.status.checkNo ? reviseInfo.times - 1 : reviseInfo.times;
+                if (times >= 1) {
+                    for (let i = 1; i <= times; i++) {
+                        auditHistory.push(await ctx.service.reviseAudit.getAuditors2ReviseList(reviseInfo.id, i));
+                    }
+                }
+                responseData.data.auditHistory = auditHistory;
+                // 获取审批流程中左边列表
+                responseData.data.auditors = await ctx.service.reviseAudit.getAuditGroupByList(reviseInfo.id, times);
+                // 获取原报信息
+                const reviseAuditor = await ctx.service.projectAccount.getAccountInfoById(reviseInfo.uid);
+                responseData.data.reviseAuditor = reviseAuditor;
+                ctx.body = responseData;
+            } catch (error) {
+                this.log(error);
+                ctx.body = { err: 1, msg: error.toString(), data: null };
+            }
+        }
+
+        /**
          * 新增 修订 (Post)
          * @param ctx
          * @returns {Promise<void>}
@@ -230,7 +269,7 @@ module.exports = app => {
             }
             return {
                 revise: revise, tender: ctx.tender.data,
-                //reviseBills, revisePos, 
+                //reviseBills, revisePos,
                 ledgerSpread, posSpread, tenderMenu, measureType,
                 preUrl: '/tender/' + ctx.tender.id,
                 audit: audit.revise,
@@ -361,7 +400,7 @@ module.exports = app => {
                     : await ctx.service.revisePos.getData(ctx.tender.id);
 
                 if (revise.uid === ctx.session.sessionUser.accountId &&
-                    (revise.status === audit.revise.status.uncheck || revise.status === audit.revise.status.checkNo)) {                    
+                    (revise.status === audit.revise.status.uncheck || revise.status === audit.revise.status.checkNo)) {
                     const lastStage = await ctx.service.stage.getLastestStage(ctx.tender.id, true);
                     if (lastStage) {
                         if (lastStage.status === audit.stage.status.checked) {
@@ -385,7 +424,7 @@ module.exports = app => {
                                 p.used = usedPrePos.indexOf(p.id) >= 0 || usedCurPos.indexOf(p.id) >= 0;
                             }
                         }
-                    }  
+                    }
                 }
                 ctx.body = {err: 0, msg: '', data: {bills: reviseBills, pos: revisePos}};
             } catch(err) {
@@ -435,13 +474,13 @@ module.exports = app => {
 
         /**
          * 加载 数据
-         * @param {} ctx 
+         * @param {} ctx
          */
         async loadHistoryData(ctx) {
             try {
                 const revise = await ctx.service.ledgerRevise.getLastestRevise(ctx.tender.id, false);
                 if (!revise) throw '台账修订数据有误';
-    
+
                 const reviseBills = await ctx.service.ledger.getData(ctx.tender.id);
                 const revisePos = await ctx.service.pos.getPosData({tid: ctx.tender.id});
                 ctx.body = {err: 0, msg: '', data: {bills: reviseBills, pos: revisePos}};
@@ -791,4 +830,4 @@ module.exports = app => {
     }
 
     return ReviseController;
-};
+};

+ 1 - 0
app/router.js

@@ -119,6 +119,7 @@ module.exports = app => {
     //app.post('/tender/:id/revise/deal2sgfh', sessionAuth, tenderCheck, 'reviseController.deal2sgfh');
     // 台账修订页面
     app.get('/tender/:id/revise/info', sessionAuth, tenderCheck, 'reviseController.info');
+    app.post('/tender/:id/revise/auditors', sessionAuth, tenderCheck, 'reviseController.reviseAuditors');
     app.post('/tender/:id/revise/info/load', sessionAuth, tenderCheck, 'reviseController.loadInfoData');
     app.post('/tender/:id/revise/info/update', sessionAuth, tenderCheck, 'reviseController.update');
     app.post('/tender/:id/revise/info/upload-excel/:ueType', sessionAuth, tenderCheck, 'reviseController.uploadExcel');

+ 75 - 1
app/service/revise_audit.js

@@ -59,6 +59,28 @@ module.exports = app => {
         }
 
         /**
+         * 获取 审核列表信息(修订列表页审批流程用)
+         *
+         * @param {Number} rid - 修订id
+         * @param {Number} times - 第几次审批
+         * @returns {Promise<*>}
+         */
+        async getAuditors2ReviseList(rid, times = 1) {
+            const sql = 'SELECT la.`audit_id`, pa.`name`, pa.`company`, pa.`role`, pa.`mobile`, pa.`telephone`, la.`times`, la.`audit_order`, la.`status`, la.`opinion`, la.`begin_time`, la.`end_time`, g.`sort` ' +
+                'FROM ?? AS la, ?? AS pa, (SELECT `audit_id`,(@i:=@i+1) as `sort` FROM ??, (select @i:=0) as it WHERE `rid` = ? AND `times` = ? GROUP BY `audit_id`) as g ' +
+                'WHERE la.`rid` = ? and la.`times` = ? and la.`audit_id` = pa.`id` and g.`audit_id` = la.`audit_id` order by la.`audit_order`';
+            const sqlParam = [this.tableName, this.ctx.service.projectAccount.tableName, this.tableName, rid, times, rid, times];
+            const result = await this.db.query(sql, sqlParam);
+            const sql2 = 'SELECT COUNT(a.`audit_id`) as num FROM (SELECT `audit_id` FROM ?? WHERE `rid` = ? AND `times` = ? GROUP BY `audit_id`) as a';
+            const sqlParam2 = [this.tableName, rid, times];
+            const count = await this.db.queryOne(sql2, sqlParam2);
+            for (const i in result) {
+                result[i].max_sort = count.num;
+            }
+            return result;
+        }
+
+        /**
          * 获取标段当前审核人
          *
          * @param {Number} reviseId - 修订id
@@ -381,7 +403,59 @@ module.exports = app => {
             const sqlParam = [auditorId, noticeTime, projectId];
             return await this.db.query(sql, sqlParam);
         }
+
+        /**
+         * 获取最新的审批人状态
+         *
+         * @param {Number} rid - 修订id
+         * @param {Number} status - 修订状态
+         * @param {Number} times - 修订次数
+         * @return {Promise<boolean>}
+         */
+        async getAuditorByStatus(rid, status, times = 1) {
+            let auditor = null;
+            let sql = '';
+            let sqlParam = '';
+            switch (status) {
+                case auditConst.status.checking :
+                case auditConst.status.checked :
+                case auditConst.status.checkNoPre :
+                    sql = 'SELECT la.`audit_id`, pa.`name`, pa.`company`, pa.`role`, la.`times`, la.`rid`, la.`audit_order` ' +
+                        'FROM ?? AS la, ?? AS pa ' +
+                        'WHERE la.`rid` = ? and la.`status` = ? and la.`audit_id` = pa.`id` order by la.`times` desc, la.`id` desc';
+                    sqlParam = [this.tableName, this.ctx.service.projectAccount.tableName, rid, status];
+                    auditor = await this.db.queryOne(sql, sqlParam);
+                    break;
+                case auditConst.status.checkNo :
+                    sql = 'SELECT la.`audit_id`, pa.`name`, pa.`company`, pa.`role`, la.`times`, la.`rid`, la.`audit_order` ' +
+                        'FROM ?? AS la, ?? AS pa ' +
+                        'WHERE la.`rid` = ? and la.`status` = ? and la.`times` = ? and la.`audit_id` = pa.`id` order by la.`times` desc, la.`id` desc';
+                    sqlParam = [this.tableName, this.ctx.service.projectAccount.tableName, rid, auditConst.status.checkNo, parseInt(times) - 1];
+                    auditor = await this.db.queryOne(sql, sqlParam);
+                    break;
+                case auditConst.status.uncheck :
+                default:break;
+            }
+            return auditor;
+        }
+
+        /**
+         * 获取审核人流程列表
+         *
+         * @param auditorId
+         * @returns {Promise<*>}
+         */
+        async getAuditGroupByList(rid, times) {
+            const sql = 'SELECT la.`audit_id`, pa.`name`, pa.`company`, pa.`role`, la.`times`, la.`rid`, la.`audit_order` ' +
+                'FROM ?? AS la, ?? AS pa ' +
+                'WHERE la.`rid` = ? and la.`times` = ? and la.`audit_id` = pa.`id` GROUP BY la.`audit_id` ORDER BY la.`audit_order`';
+            const sqlParam = [this.tableName, this.ctx.service.projectAccount.tableName, rid, times];
+            return await this.db.query(sql, sqlParam);
+            // const sql = 'SELECT `tid`, `sid`, `aid`, `order` FROM ?? WHERE `sid` = ? and `times` = ? GROUP BY `aid`';
+            // const sqlParam = [this.tableName, stageId, times];
+            // return await this.db.query(sql, sqlParam);
+        }
     }
 
     return ReviseAudit;
-};
+};

+ 10 - 4
app/view/revise/index.ejs

@@ -42,13 +42,18 @@
                         <td><%- lr.corder %></td>
                         <td><%- lr.in_time ? lr.in_time.toLocaleDateString() : '' %></td>
                         <td><%- lr.user_name %></td>
-                        <td <% if (!lr.valid) {%>class="text-danger"<% } %>>
-                            <% if (lr.valid) { %>
-                            <%- auditConst.statusString[lr.status] %>
-                            <% } else { %>
+                        <% if (!lr.valid) {%>
+                        <td class="text-danger">
                             作废
+                        </td>
+                        <% } else { %>
+                        <td class="<%- auditConst.auditProgressClass[lr.status] %>">
+                            <% if (lr.curAuditor) { %>
+                                <a href="#sp-list" data-toggle="modal" data-target="#sp-list" lr-id="<%- lr.id %>"><%- lr.curAuditor.name %><%if (lr.curAuditor.role !== '' && lr.curAuditor.role !== null) { %>-<%- lr.curAuditor.role %><% } %></a>
                             <% } %>
+                            <%- auditConst.auditProgress[lr.status] %>
                         </td>
+                        <% } %>
                         <td><%- lr.end_time ? lr.end_time.toLocaleDateString() : '' %></td>
                         <td>
                             <% if (lr.valid) { %>
@@ -76,6 +81,7 @@
     </div>
 </div>
 <script src="/public/js/sub_menu.js"></script>
+<script src="/public/js/moment/moment.min.js"></script>
 <script>
     $.subMenu({
         menu: '#sub-menu', miniMenu: '#sub-mini-menu', miniMenuList: '#mini-menu-list',

+ 164 - 2
app/view/revise/modal.ejs

@@ -16,7 +16,88 @@
         </div>
     </form>
 </div>
-
+<!--审批流程/结果-->
+<div class="modal fade" id="sp-list" data-backdrop="static">
+    <div class="modal-dialog modal-lg" role="document">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title">审批流程</h5>
+            </div>
+            <div class="modal-body">
+                <div class="row">
+                    <div class="col-4">
+                        <div class="card mt-3">
+                            <ul class="list-group list-group-flush" id="auditor-list">
+                                <li class="list-group-item"><i class="fa fa fa-play-circle fa-rotate-90"></i> 布尔  <small class="text-muted">施工</small></li>
+                                <li class="list-group-item"><i class="fa fa-chevron-circle-down"></i> 张三  <small class="text-muted">监理</small></li>
+                                <li class="list-group-item"><i class="fa fa-chevron-circle-down"></i> 王五 <small class="text-muted">监理</small></li>
+                                <li class="list-group-item"><i class="fa fa fa-stop-circle"></i> 李四 <small class="text-muted">监理</small></li>
+                            </ul>
+                        </div>
+                    </div>
+                    <div class="col-8 modal-height-500" style="overflow: auto" id="auditor-list2">
+                        <div class="card mt-3">
+                            <ul class="list-group list-group-flush">
+                                <li class="list-group-item">
+                                    <span class="text-success pull-right">上报</span>
+                                    <h5 class="card-title"><i class="fa fa-play-circle fa-rotate-90 text-success"></i> 布尔 <small class="text-muted">施工</small></h5>
+                                    <p class="card-text">2017-11-25</p>
+                                </li>
+                                <li class="list-group-item">
+                                    <span class="text-success pull-right">审批通过</span>
+                                    <h5 class="card-title"><i class="fa fa-chevron-circle-down text-success"></i> 张三 <small class="text-muted">监理</small></h5>
+                                    <p class="card-text">审批意见。2017-11-25</p>
+                                </li>
+                                <li class="list-group-item">
+                                    <span class="text-success pull-right">审批通过</span>
+                                    <h5 class="card-title"><i class="fa fa-chevron-circle-down text-success"></i> 王五 <small class="text-muted">监理</small></h5>
+                                    <p class="card-text">审批通过。2017-11-26</p>
+                                </li>
+                                <li class="list-group-item">
+                                    <span class="text-warning pull-right">审批退回 布尔</span>
+                                    <h5 class="card-title"><i class="fa fa-stop-circle text-warning"></i> 李四 <small class="text-muted">监理</small></h5>
+                                    <p class="card-text">审批退回,审批意见文本。2017-11-27</p>
+                                </li>
+                            </ul>
+                        </div>
+                        <!--退回原报重新上报-->
+                        <div class="card mt-3">
+                            <ul class="list-group list-group-flush">
+                                <li class="list-group-item">
+                                    <span class="text-success pull-right">重新上报</span>
+                                    <h5 class="card-title"><i class="fa fa-play-circle fa-rotate-90 text-success"></i> 布尔 <small class="text-muted">施工</small></h5>
+                                    <p class="card-text">2017-12-01</p>
+                                </li>
+                                <li class="list-group-item">
+                                    <span class="text-success pull-right">审批通过</span>
+                                    <h5 class="card-title"><i class="fa fa-chevron-circle-down text-success"></i> 张三 <small class="text-muted">监理</small></h5>
+                                    <p class="card-text">审批通过 2017-12-02</p>
+                                </li>
+                                <li class="list-group-item">
+                                    <span class="text-warning pull-right">审批退回 张三</span>
+                                    <h5 class="card-title"><i class="fa fa-chevron-circle-down text-warning"></i> 王五 <small class="text-muted">监理</small></h5>
+                                    <p class="card-text">审批退回 2017-12-02</p>
+                                </li>
+                                <!--王五退回上一审批人 张三,张三重新审批-->
+                                <li class="list-group-item">
+                                    <span class="pull-right">审批中</span>
+                                    <h5 class="card-title"><i class="fa fa-chevron-circle-down"></i> 张三 <small class="text-muted">监理</small></h5>
+                                    <p class="card-text"></p>
+                                </li>
+                                <li class="list-group-item">
+                                    <h5 class="card-title"><i class="fa fa-stop-circle"></i> 李四 <small class="text-muted">监理</small></h5>
+                                </li>
+                            </ul>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-secondary btn-sm" data-dismiss="modal">关闭</button>
+            </div>
+        </div>
+    </div>
+</div>
 <% if (ledgerRevise.length > 0 && (ledgerRevise[0].status === auditConst.status.uncheck || ledgerRevise[0].status === auditConst.status.checkNo) && ctx.session.sessionUser.accountId === ledgerRevise[0].uid) { %>
 <!--弹出作废-->
 <div class="modal fade" id="remove" data-backdrop="static">
@@ -54,4 +135,85 @@
         }
         return dbClickFlag;
     }
-</script>
+    const auditConst = JSON.parse('<%- auditConst2 %>');
+
+    $(function () {
+        // 获取审批流程
+        $('a[data-target="#sp-list" ]').on('click', function () {
+            const data = {
+                id: $(this).attr('lr-id'),
+            };
+            postData('<%- preUrl + "/revise/auditors" %>', data, function (result) {
+                const reviseAuditor = result.reviseAuditor;
+                const auditors = result.auditors;
+                const auditHistory = result.auditHistory;
+                // 生成左边列表流程
+                const lefthtml = [];
+                lefthtml.push('<li class="list-group-item"><i class="fa fa fa-play-circle fa-rotate-90"></i> '+ reviseAuditor.name +'  <small class="text-muted">'+ reviseAuditor.role +'</small><span class="pull-right">原报</span></li>');
+                for (const [index,a] of auditors.entries()) {
+                    if (index+1 === auditors.length) {
+                        lefthtml.push('<li class="list-group-item"><i class="fa fa-stop-circle"></i> '+ a.name +'  <small class="text-muted">'+ a.role +'</small><span class="pull-right">终审</span></li>');
+                    } else {
+                        lefthtml.push('<li class="list-group-item"><i class="fa fa-chevron-circle-down"></i> '+ a.name +'  <small class="text-muted">'+ a.role +'</small><span class="pull-right">' + transFormToChinese(index+1) + '审</span></li>');
+                    }
+                }
+                $('#auditor-list').html(lefthtml.join(''));
+
+                // 生成右边列表流程
+                const righthtml = [];
+                for(const ah of auditHistory) {
+                    righthtml.push('<div class="card mt-3"><ul class="list-group list-group-flush">');
+                    for (let iA = 0; iA < ah.length; iA++) {
+                        if (iA === 0) {
+                            righthtml.push('<li class="list-group-item">');
+                            righthtml.push('<h5 class="card-title">');
+                            righthtml.push('<i class="fa fa-play-circle fa-rotate-90 text-success"></i> '+ reviseAuditor.name +' <small class="text-muted">'+ reviseAuditor.role +'</small><span class="pull-right">原报</span></h5>');
+                            righthtml.push('<div class="ml-3">');
+                            righthtml.push('<span class="text-success"><small>' + (ah[iA].begin_time ? moment(ah[iA].begin_time).format('YYYY-MM-DD') : '') + '</small> '+ (auditHistory.indexOf(ah) > 0 ? '重新' : '') + '上报</span></div></li>');
+                            righthtml.push('<li class="list-group-item">');
+                            righthtml.push('<h5 class="card-title"><i class="fa '+ (iA === ah.length - 1 ? 'fa-stop-circle ' : 'fa-chevron-circle-down ') + auditConst.statusClass[ah[iA].status] +'"></i> '+ ah[iA].name +' <small class="text-muted">'+ ah[iA].role +'</small><span class="pull-right">' + (ah[iA].sort === ah[iA].max_sort ? '终' : transFormToChinese(ah[iA].sort)) + '审</span></h5>');
+                            righthtml.push('<div class="ml-3">');
+                            if (ah[iA].status !== auditConst.status.uncheck) {
+                                let timeHtml = '';
+                                if (ah[iA].status === auditConst.status.checked || ah[iA].status === auditConst.status.checkNo) {
+                                    timeHtml = '<small>'+ (ah[iA].end_time ? moment(ah[iA].end_time).format('YYYY-MM-DD') : '') +'</small> ';
+                                }
+                                righthtml.push('<span class="' + auditConst.statusClass[ah[iA].status] +'">'+ timeHtml + auditConst.statusString[ah[iA].status] + (ah[iA].status === auditConst.status.checkNo ? ' ' + reviseAuditor.name : '') + '</span>');
+                            }
+                            righthtml.push('<p class="card-text">'+ (ah[iA].opinion !== null ? ah[iA].opinion : '') +'</p></div>');
+                            righthtml.push('</li>');
+                        } else if (iA === ah.length - 1) {
+                            righthtml.push('<li class="list-group-item">');
+                            righthtml.push('<h5 class="card-title"><i class="fa fa-stop-circle '+ auditConst.statusClass[ah[iA].status] +'"></i> '+ ah[iA].name +' <small class="text-muted">'+ ah[iA].role +'</small><span class="pull-right">终审</span></h5>');
+                            righthtml.push('<div class="ml-3">');
+                            if (ah[iA].status !== auditConst.status.uncheck) {
+                                let timeHtml = '';
+                                if (ah[iA].status === auditConst.status.checked || ah[iA].status === auditConst.status.checkNo) {
+                                    timeHtml = '<small>'+ (ah[iA].end_time ? moment(ah[iA].end_time).format('YYYY-MM-DD') : '') +'</small> ';
+                                }
+                                righthtml.push('<span class="' + auditConst.statusClass[ah[iA].status] +'">' + timeHtml + auditConst.statusString[ah[iA].status] + (ah[iA].status === auditConst.status.checkNo ? ' ' + reviseAuditor.name : '') + '</span>');
+                            }
+                            righthtml.push('<p class="card-text">'+ (ah[iA].opinion !== null ? ah[iA].opinion : '') +'</p></div>');
+                            righthtml.push('</li>');
+                        } else {
+                            righthtml.push('<li class="list-group-item">');
+                            righthtml.push('<h5 class="card-title"><i class="fa '+ (iA === ah.length - 1 ? 'fa-stop-circle ' : 'fa-chevron-circle-down ') + auditConst.statusClass[ah[iA].status] +'"></i> '+ ah[iA].name +' <small class="text-muted">'+ ah[iA].role +'</small><span class="pull-right">' + (ah[iA].sort === ah[iA].max_sort ? '终' : transFormToChinese(ah[iA].sort)) + '审</span></h5>');
+                            righthtml.push('<div class="ml-3">');
+                            if (ah[iA].status !== auditConst.status.uncheck) {
+                                let timeHtml = '';
+                                if (ah[iA].status === auditConst.status.checked || ah[iA].status === auditConst.status.checkNo) {
+                                    timeHtml = '<small>'+ (ah[iA].end_time ? moment(ah[iA].end_time).format('YYYY-MM-DD') : '') +'</small> ';
+                                }
+                                righthtml.push('<span class="' + auditConst.statusClass[ah[iA].status] +'">'+ timeHtml + auditConst.statusString[ah[iA].status] + (ah[iA].status === auditConst.status.checkNo ? ' ' + reviseAuditor.name : '') + '</span>');
+                            }
+                            righthtml.push('<p class="card-text">'+ (ah[iA].opinion !== null ? ah[iA].opinion : '') +'</p></div>');
+                            righthtml.push('</li>');
+                        }
+                    }
+                    righthtml.push('</ul></div>');
+                }
+                $('#auditor-list2').html(righthtml.join(''));
+            })
+        });
+    })
+</script>