فهرست منبع

feat: 重庆18导出接口,处理其他项目相关空行问题

vian 4 سال پیش
والد
کامیت
a3ec87f9c8
1فایلهای تغییر یافته به همراه29 افزوده شده و 14 حذف شده
  1. 29 14
      web/over_write/js/chongqing_2018_export.js

+ 29 - 14
web/over_write/js/chongqing_2018_export.js

@@ -1174,7 +1174,7 @@ const XMLStandard = (function () {
             tender.children.push(loadCSXM(tenderDetail));
             //其他项目清单
             let other = loadOtherBills(tenderDetail);
-            if (other) {
+            if (other && other.children.length) {
                 tender.children.push(other);
             }
             //规费和税金清单
@@ -1630,6 +1630,15 @@ const XMLStandard = (function () {
                 }
             }
         }
+
+        // 过滤其他项目子清单空行
+        // 空行判断条件:编码、名称、单位都是空,综合合价=0或空,则判断为空行。
+        function filterEmptyNodes(nodes) {
+            return nodes.filter(c => {
+                return c.data.code || c.data.name || c.data.unit || _util.getFee(c.data.fees, 'common.totalFee');
+            });
+        }
+
         /*
          * 加载其他项目清单,要出现此节点,需要遵循标准条件(至少含有一条相关明细)
          * @param {Object}detail
@@ -1644,18 +1653,18 @@ const XMLStandard = (function () {
             }
             //添加暂列金额元素
             let provisionalNode = detail.Bills.tree.items.find(node => node.getFlag() === fixedFlag.PROVISIONAL);
-            if (provisionalNode && provisionalNode.children.length > 0) {
+            if (provisionalNode && _util.getFee(provisionalNode.data.fees, 'common.totalFee') && filterEmptyNodes(provisionalNode.children).length > 0) {
                 otherEle.children.push(loadProvisional(provisionalNode));
             }
             //添加专业工程暂估价元素
             let engEstimateNode = detail.Bills.tree.items.find(node => node.getFlag() === fixedFlag.ENGINEERING_ESITIMATE);
-            if (engEstimateNode && engEstimateNode.children.length > 0) {
+            if (engEstimateNode && _util.getFee(engEstimateNode.data.fees, 'common.totalFee') && filterEmptyNodes(engEstimateNode.children).length > 0) {
                 otherEle.children.push(loadEngEstimate(engEstimateNode));
             }
             //添加计日工元素
             let dayWorkNode = detail.Bills.tree.items.find(node => node.getFlag() === fixedFlag.DAYWORK);
             let dayWorkEle = new DayWork({fees: dayWorkNode.data.fees});
-            if (dayWorkNode && dayWorkNode.children.length > 0) {
+            if (dayWorkNode && _util.getFee(dayWorkNode.data.fees, 'common.totalFee') && dayWorkNode.children.length > 0) {
                 //要显示计日工元素,人工、材料、施工机械,最少有一条含有子项(计日工项目)
                 let filterNodes = dayWorkNode.children.filter(node => [fixedFlag.LABOUR, fixedFlag.MATERIAL, fixedFlag.MACHINE].includes(node.getFlag()));
                 for (let fNode of filterNodes) {
@@ -1672,12 +1681,13 @@ const XMLStandard = (function () {
                         ele = new Machine();
                         constraints = curTenderEle.constraints.machineDayWorkCode;
                     }
-                    if (fNode.children.length > 0) {
+                    const fNodeChildren = filterEmptyNodes(fNode.children);
+                    if (_util.getFee(fNode.data.fees, 'common.totalFee') && fNodeChildren.length > 0) {
                         let isValidDepth = _util.validDepth(1, fNode);
                         if (!isValidDepth) {
                             _failList.push(`计日工${ele.name}子项超过一层`);
                         } else {
-                            for (let itemNode of fNode.children) {
+                            for (let itemNode of fNodeChildren) {
                                 ele.children.push(loadDayWorkItem(itemNode, constraints, `${ele.name}计日工项目编号`));
                             }
                             dayWorkEle.children.push(ele);
@@ -1691,33 +1701,36 @@ const XMLStandard = (function () {
             }
             //添加总承包服务费元素
             let tkcNode = detail.Bills.tree.items.find(node => node.getFlag() === fixedFlag.TURN_KEY_CONTRACT);
-            if (tkcNode && tkcNode.children.length > 0) {  //必须要有子项才显示总承包服务费元素
+            const tkcChildren = filterEmptyNodes(tkcNode.children);
+            if (tkcNode && _util.getFee(tkcNode.data.fees, 'common.totalFee') && tkcChildren.length > 0) {  //必须要有子项才显示总承包服务费元素
                 let isValidDepth = _util.validDepth(2, tkcNode);  //最多2层子项:总承包服务费分类-总承包服务费费用项
                 if (!isValidDepth) {
                     _failList.push('总承包服务费子项超过两层');
                 } else {
                     let tkcEle = new TurnKeyContract({fees: tkcNode.data.fees});
                     otherEle.children.push(tkcEle);
-                    loadService(tkcEle, tkcNode.children);
+                    loadService(tkcEle, tkcChildren);
                 }
             }
             //添加索赔计价汇总元素
             let claimNode = detail.Bills.tree.items.find(node => node.getFlag() === fixedFlag.CLAIM);
-            if (claimNode && claimNode.children.length > 0) {   //必须要有子项才能显示索赔计价汇总元素
+            const claimChildren = filterEmptyNodes(claimNode.children);
+            if (claimNode && _util.getFee(claimNode.data.fees, 'common.totalFee') && claimChildren.length > 0) {   //必须要有子项才能显示索赔计价汇总元素
                 let claimEle = new XML_EXPORT_BASE.Element('索赔计价汇总', [
                     {name: '金额', value: _util.getFee(claimNode.data.fees, 'common.totalFee')}]);
-                for (let n of claimNode.children) {
+                for (let n of claimChildren) {
                     claimEle.children.push(new ClaimVisaFeeItem(n.data));
                 }
                 otherEle.children.push(claimEle);
             }
             //添加现场签证计价汇总元素
             let visaNode = detail.Bills.tree.items.find(node => node.getFlag() === fixedFlag.VISA);
-            if (visaNode && visaNode.children.length > 0) {     //必须要有子项才能显示现场签证计价汇总元素
+            const visaChildren = filterEmptyNodes(visaNode.children);
+            if (visaNode && _util.getFee(visaNode.data.fees, 'common.totalFee') && visaChildren.length > 0) {     //必须要有子项才能显示现场签证计价汇总元素
                 let visaEle = new XML_EXPORT_BASE.Element('现场签证计价汇总', [
                     {name: '金额', value: _util.getFee(visaNode.data.fees, 'common.totalFee')}
                 ]);
-                for (let n of visaNode.children) {
+                for (let n of visaChildren) {
                     visaEle.children.push(new ClaimVisaFeeItem(n.data));
                 }
                 otherEle.children.push(visaEle);
@@ -1739,7 +1752,8 @@ const XMLStandard = (function () {
                 if (!isValidDepth) {
                     _failList.push('暂列金额子项超过一层');
                 } else {    //加载暂列金额明细
-                    for (let n of node.children) {
+                    const children = filterEmptyNodes(node.children);
+                    for (let n of children) {
                         let pDetailSource = {
                                 row: detail.mainTree.nodes[detail.mainTree.prefix + n.data.ID].serialNo() + 1,
                                 code: n.data.code,
@@ -1765,7 +1779,8 @@ const XMLStandard = (function () {
                 if (!isValidDepth) {
                     _failList.push('专业工程暂估价子项超过一层');
                 } else {    //加载专业工程暂估明细
-                    for (let n of node.children) {
+                    const children = filterEmptyNodes(node.children);
+                    for (let n of children) {
                         let eDetailSource = {
                                 row: detail.mainTree.nodes[detail.mainTree.prefix + n.data.ID].serialNo() + 1,
                                 code: n.data.code,