Explorar o código

人材机跨对象引用

TonyKang %!s(int64=7) %!d(string=hai) anos
pai
achega
94e18c4235

+ 37 - 4
modules/reports/util/rpt_construct_data_util.js

@@ -457,6 +457,28 @@ function filterData(sourceData, handleCfg, prjData) {
         let compRst = true;
         let curComparePrjData = null;
         let startIdx = 0;
+        let private_ref_join = function(refKey, targetDataKey, targetPropertyKey) {
+            let rst = null, objDataArr = null;
+            curComparePrjData = getModuleDataByKey(prjData, targetDataKey);
+            try {
+                if (curComparePrjData !== null) {
+                    if (targetDataKey === "projectGLJ") {
+                        objDataArr = curComparePrjData.data.gljList;
+                    } else {
+                        objDataArr = curComparePrjData.data;
+                    }
+                    for (let dtl of objDataArr) {
+                        if (item[refKey] === dtl[targetPropertyKey]) {
+                            rst = dtl;
+                            break;
+                        }
+                    }
+                }
+            } finally {
+                curComparePrjData = null;
+            }
+            return rst;
+        };
         for (let cfg of filterCfg[JV.PROP_FILTER_KEYS]) {
             if (cfg[JV.PROP_FILTER_COMPARE_VAL]) {
                 //比较key值
@@ -464,10 +486,21 @@ function filterData(sourceData, handleCfg, prjData) {
                 if (keys.length > 1) {
                     let lastObj = item;
                     for (let i = 0; i < keys.length - 1; i++) {
-                        lastObj = item[keys[i]];
-                        if (!(lastObj)) {
-                            compRst = false;
-                            break;
+                        if (keys[i].indexOf("ref_join(") === 0) {
+                            let params = keys[i].slice(9, keys[i].length - 1).split(",");
+                            if (params.length === 3) {
+                                lastObj = private_ref_join(params[0], params[1], params[2]);
+                            }
+                            if (!(lastObj)) {
+                                compRst = false;
+                                break;
+                            }
+                        } else {
+                            lastObj = item[keys[i]];
+                            if (!(lastObj)) {
+                                compRst = false;
+                                break;
+                            }
                         }
                     }
                     if (lastObj) {

+ 1 - 1
public/web/rpt_value_define.js

@@ -189,7 +189,7 @@ const JV = {
     PROP_SEG_GRP_IDX: "segGrpRecStartIdx",
     PROP_PRE_ADD_GRP_REC_INFO: "preAddPageGrpInfo",
     PROP_INSERTED_GRP_REC: "insertedGrpRecAmt",
-    PROP_GRP_LINES: "me.group_lines_amt",
+    PROP_GRP_LINES: "group_lines_amt",
 
     RUN_TYPE_BEFORE_PAGING: "before_paging",
     RUN_TYPE_BEFORE_OUTPUT: "before_output",

+ 134 - 18
web/maintain/report/js/rpt_tpl_data_map.js

@@ -128,6 +128,7 @@ let dataInfoMapTreeOprObj = {
         me.private_build_column_data(rootColumnNode, rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_COLUMN]);
         me.private_build_sum_data(rootChapterSumNode, rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_SEG_SUM], rptTpl);
         me.private_build_sum_data(rootPageSumNode, rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_PAGE_SUM], rptTpl);
+        me.private_build_grp_data(rootGroupSumNode, rptTpl[JV.NODE_FLOW_INFO][JV.NODE_FLOW_GROUP], rptTpl);
         return rst;
     },
     buildBillData: function(rptTpl) {
@@ -141,6 +142,56 @@ let dataInfoMapTreeOprObj = {
 
         return rst;
     },
+    private_build_grp_data: function (grpNode, grpData, rptTpl) {
+        let me = this;
+        grpNode.items = [];
+        grpNode.sum_field_s = [];
+        if (grpData.sum_field_s && grpData.sum_field_s.length > 0) {
+            for (let sumF of grpData.sum_field_s) {
+                let sf = {};
+                sf[JV.PROP_FIELD_ID] = sumF[JV.PROP_FIELD_ID];
+                sf[JV.PROP_SUM_KEY] = sumF[JV.PROP_SUM_KEY];
+                grpNode.sum_field_s.push(sf);
+            }
+        }
+        let grp_fields = {Name: "分组判断指标集", items: [], Title: "", isParent: true};
+        let grp_lines = {Name: "分组行", items: [], Title: "", isParent: true};
+        grpNode.items.push(grp_fields);
+        grpNode.items.push(grp_lines);
+        if (grpData[JV.PROP_GROUP_FIELDS]) {
+            for (let grpItem of grpData[JV.PROP_GROUP_FIELDS]) {
+                grp_fields.items.push(me.private_build_field_node(grpItem, rptTpl));
+            }
+        }
+        if (grpData[JV.PROP_GROUP_LINES] && grpData[JV.PROP_GROUP_LINES].length > 0) {
+            for (let grpline of grpData[JV.PROP_GROUP_LINES]) {
+                let gl = {Name: "行", items:[], isParent: true}, sumKeys = {Name:"分组字段集", items:[], Title: "", isParent: true}, texts = {Name:"文本集", items:[], Title: "", isParent: true};
+                gl.items.push(sumKeys);
+                gl.items.push(texts);
+                grp_lines.items.push(gl);
+                if (grpline[JV.PROP_GROUP_SUM_KEYS]) {
+                    for (let fieldItem of grpline[JV.PROP_GROUP_SUM_KEYS]) {
+                        let item = me.private_build_field_node(fieldItem, rptTpl);
+                        item[JV.PROP_SUM_KEY] = fieldItem[JV.PROP_SUM_KEY];
+                        item[JV.PROP_NAME] = fieldItem[JV.PROP_SUM_KEY];
+                        for (let gsi of grpNode.sum_field_s) {
+                            if (gsi[JV.PROP_SUM_KEY] === item[JV.PROP_SUM_KEY]) {
+                                item[JV.PROP_FIELD_ID] = gsi[JV.PROP_FIELD_ID];
+                                break;
+                            }
+                        }
+                        sumKeys.items.push(item);
+                    }
+                }
+                if (grpline[JV.PROP_TEXTS]) {
+                    for (let txt of grpline[JV.PROP_TEXTS]) {
+                        texts.items.push(me.private_build_text_node(txt));
+                    }
+                }
+            }
+        }
+        //then group lines
+    },
     private_build_sum_data: function(sumNode, sumData, rptTpl) {
         let me = this;
         sumNode.items = [];
@@ -277,16 +328,20 @@ let dataInfoMapTreeOprObj = {
         if (source[JV.PROP_FORMAT]) destination[JV.PROP_FORMAT] = source[JV.PROP_FORMAT];
         if (source[JV.PROP_IS_AUTO_HEIGHT]) destination[JV.PROP_IS_AUTO_HEIGHT] = true
         else destination[JV.PROP_IS_AUTO_HEIGHT] = false;
-        destination[JV.PROP_AREA] = {};
-        me.private_copy_area(source[JV.PROP_AREA], destination[JV.PROP_AREA]);
+        if (source[JV.PROP_AREA]) {
+            destination[JV.PROP_AREA] = {};
+            me.private_copy_area(source[JV.PROP_AREA], destination[JV.PROP_AREA]);
+        }
     },
     private_copy_area: function (orgArea, destArea) {
-        destArea[JV.PROP_LEFT] = orgArea[[JV.PROP_LEFT]];
-        destArea[JV.PROP_RIGHT] = orgArea[[JV.PROP_RIGHT]];
-        destArea[JV.PROP_TOP] = orgArea[[JV.PROP_TOP]];
-        destArea[JV.PROP_BOTTOM] = orgArea[[JV.PROP_BOTTOM]];
-        destArea[JV.PROP_H_CALCULATION] = orgArea[[JV.PROP_H_CALCULATION]];
-        destArea[JV.PROP_V_CALCULATION] = orgArea[[JV.PROP_V_CALCULATION]];
+        if (orgArea) {
+            destArea[JV.PROP_LEFT] = orgArea[[JV.PROP_LEFT]];
+            destArea[JV.PROP_RIGHT] = orgArea[[JV.PROP_RIGHT]];
+            destArea[JV.PROP_TOP] = orgArea[[JV.PROP_TOP]];
+            destArea[JV.PROP_BOTTOM] = orgArea[[JV.PROP_BOTTOM]];
+            destArea[JV.PROP_H_CALCULATION] = orgArea[[JV.PROP_H_CALCULATION]];
+            destArea[JV.PROP_V_CALCULATION] = orgArea[[JV.PROP_V_CALCULATION]];
+        }
     },
     private_build_param_node: function (param, rptTpl) {
         let me = this, rst = null;
@@ -451,7 +506,8 @@ let dataInfoMapTreeOprObj = {
         let rst = false;
         if (targetNode.Name === JV.NODE_FLOW_CONTENT || targetNode.Name === JV.NODE_BILL_CONTENT || targetNode.Name === JV.NODE_CROSS_CONTENT
             || targetNode.Name === JV.NODE_CROSS_ROW || targetNode.Name === JV.NODE_CROSS_COL
-            || targetNode.Name === "离散字段集" || targetNode.Name === "统计指标集") {
+            || targetNode.Name === "离散字段集" || targetNode.Name === "统计指标集" || targetNode.Name === "分组判断指标集"
+            || targetNode.Name === "分组字段集") {
             rst = true;
         }
         return rst;
@@ -460,6 +516,9 @@ let dataInfoMapTreeOprObj = {
         let me = dataInfoMapTreeOprObj;
         for (let node of treeNodes) {
             me.private_setup_dummy_field_node(node, targetNode);
+            if (targetNode[JV.PROP_NAME] === "分组判断指标集") {
+                delete node[JV.PROP_AREA];
+            }
         }
     },
     onRemove: function (e, treeId, treeNode) {
@@ -479,13 +538,15 @@ let dataInfoMapTreeOprObj = {
     },
     checkIfCanAddBand: function (treeNode) {
         let rst = false;
-        if (treeNode[JV.PROP_NAME].indexOf(JV.NODE_FLOW_CONTENT) === 0 ||
-            treeNode[JV.PROP_NAME].indexOf(JV.NODE_FLOW_COLUMN) === 0 ||
-            treeNode[JV.PROP_NAME].indexOf(JV.NODE_FLOW_PAGE_SUM) === 0 ||
-            treeNode[JV.PROP_NAME].indexOf(JV.NODE_FLOW_SEG_SUM) === 0 ||
-            treeNode[JV.PROP_NAME].indexOf(JV.NODE_BILL_CONTENT) === 0 ||
-            treeNode[JV.PROP_NAME].indexOf("子项") === 0) {
-            rst = true;
+        if (typeof(treeNode[JV.PROP_NAME]) === "string") {
+            if (treeNode[JV.PROP_NAME].indexOf(JV.NODE_FLOW_CONTENT) === 0 ||
+                treeNode[JV.PROP_NAME].indexOf(JV.NODE_FLOW_COLUMN) === 0 ||
+                treeNode[JV.PROP_NAME].indexOf(JV.NODE_FLOW_PAGE_SUM) === 0 ||
+                treeNode[JV.PROP_NAME].indexOf(JV.NODE_FLOW_SEG_SUM) === 0 ||
+                treeNode[JV.PROP_NAME].indexOf(JV.NODE_BILL_CONTENT) === 0 ||
+                treeNode[JV.PROP_NAME].indexOf("子项") === 0) {
+                rst = true;
+            }
         }
         return rst;
     },
@@ -510,7 +571,7 @@ let dataInfoMapTreeOprObj = {
         let me = dataInfoMapTreeOprObj, sObj = $("#" + treeNode.tId + IDMark_Span);
         if (treeNode.editNameFlag || $("#addBtn_"+treeNode.tId).length > 0 || $("#selInput_"+treeNode.tId).length > 0) {
             return;
-        } else if (treeNode[JV.PROP_NAME] === JV.NODE_DISCRETE_INFO || me.checkIfCanAddTxt(treeNode)) {
+        } else if (treeNode[JV.PROP_NAME] === JV.NODE_DISCRETE_INFO || treeNode[JV.PROP_NAME] === "分组行" || me.checkIfCanAddTxt(treeNode)) {
             let addStr = "<span class='button add' id='addBtn_" + treeNode.tId + "' title='新增' onfocus='this.blur();'></span>";
             sObj.after(addStr);
             let btn = $("#addBtn_"+treeNode.tId);
@@ -518,7 +579,6 @@ let dataInfoMapTreeOprObj = {
                 btn.bind("click", function(){
                     let node = {};
                     node[JV.PROP_NAME] = "子项";
-                    // node[JV.PROP_BAND_NAME] = me.bandTreeObj.getNodes()[0][JV.PROP_NAME];
                     node[JV.PROP_BAND_NAME] = "";
                         node.items = [];
                     let fields = {"Name": "离散字段集", "items": [], "isParent": true};
@@ -530,6 +590,20 @@ let dataInfoMapTreeOprObj = {
                     me.treeObj.addNodes(treeNode, -1, newNodes, true);
                     me.refreshBandSelection();
                 });
+            } else if (treeNode[JV.PROP_NAME] === "分组行") {
+                btn.bind("click", function(){
+                    let node = {};
+                    node[JV.PROP_NAME] = "行";
+                    node.items = [];
+                    let fields = {"Name": "分组字段集", "items": [], "isParent": true};
+                    let texts = {"Name": "文本集", "items": [], "isParent": true};
+                    node.items.push(fields);
+                    node.items.push(texts);
+                    let newNodes = [];
+                    newNodes.push(node);
+                    me.treeObj.addNodes(treeNode, -1, newNodes, true);
+                    me.refreshBandSelection();
+                });
             } else {
                 //text
                 btn.bind("click", function(){
@@ -609,6 +683,48 @@ let dataInfoMapTreeOprObj = {
             }
         }
     },
+    private_extract_grp_info: function(grpNode) {
+        let me = dataInfoMapTreeOprObj, rst = {};
+        rst[JV.PROP_GROUP_FIELDS] = [];
+        rst[JV.PROP_SUM_FIELDS] = [];
+        rst[JV.PROP_GROUP_LINES] = [];
+        let sumFieldObj = {};
+        for (let subNode of grpNode.items) {
+            if (subNode[JV.PROP_NAME] === "分组判断指标集") {
+                for (let sumField of subNode.items) {
+                    let item = {FieldID: sumField[JV.PROP_FIELD_ID]};
+                    rst[JV.PROP_GROUP_FIELDS].push(item);
+                }
+            } else if (subNode[JV.PROP_NAME] === "分组行") {
+                for (let line of subNode.items) {
+                    let grpLine = {"SumKey_S": [], "text_s":[]};
+                    rst[JV.PROP_GROUP_LINES].push(grpLine);
+                    for (let dtl of line.items) {
+                        if (dtl[JV.PROP_NAME] === "分组字段集") {
+                            for (let gf of dtl.items) {
+                                if (!sumFieldObj[gf[JV.PROP_NAME]]) {
+                                    sumFieldObj[gf[JV.PROP_NAME]] = "Y";
+                                    rst[JV.PROP_SUM_FIELDS].push({"FieldID": gf[JV.PROP_FIELD_ID], "SumKey": gf[JV.PROP_NAME]});
+                                }
+                                let item = {};
+                                rst[JV.PROP_SUM_FIELDS].push(item);
+                                me.private_copy_field_properties(gf, item);
+                                item[JV.PROP_SUM_KEY] = gf[JV.PROP_NAME];
+                                grpLine[JV.PROP_GROUP_SUM_KEYS].push(item);
+                            }
+                        } else if (dtl[JV.PROP_NAME] === "文本集") {
+                            for (let txt of dtl.items) {
+                                let item = {};
+                                grpLine[JV.PROP_TEXTS].push(item);
+                                me.private_copy_text_properties(txt, item);
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        return rst;
+    },
     private_extract_sum_info: function(sumNode) {
         let me = dataInfoMapTreeOprObj, rst = {};
         rst[JV.PROP_BAND_NAME] = sumNode[JV.PROP_BAND_NAME];

+ 20 - 20
web/maintain/report/js/rpt_tpl_field_map.js

@@ -68,26 +68,26 @@ let fieldMapTreeOprObj = {
         me.currentNode = treeNode;
         //then refresh the field map tab properties
         //数据类型
-        switch (me.dataTypeDef.indexOf(treeNode[JV.PROP_DATA_TYPE])) {
-            case 0:
-                $("#fieldDataTypeSelection").get(0).selectedIndex = 0;
-                break;
-            case 1:
-            case 2:
-            case 3:
-            case 4:
-                $("#fieldDataTypeSelection").get(0).selectedIndex = 1;
-                break;
-            case 5:
-                $("#fieldDataTypeSelection").get(0).selectedIndex = 2;
-                break;
-            case 6:
-                $("#fieldDataTypeSelection").get(0).selectedIndex = 3;
-                break;
-            default:
-                $("#fieldDataTypeSelection").get(0).selectedIndex = 0;
-                break;
-        }
+        // switch (me.dataTypeDef.indexOf(treeNode[JV.PROP_DATA_TYPE])) {
+        //     case 0:
+        //         $("#fieldDataTypeSelection").get(0).selectedIndex = 0;
+        //         break;
+        //     case 1:
+        //     case 2:
+        //     case 3:
+        //     case 4:
+        //         $("#fieldDataTypeSelection").get(0).selectedIndex = 1;
+        //         break;
+        //     case 5:
+        //         $("#fieldDataTypeSelection").get(0).selectedIndex = 2;
+        //         break;
+        //     case 6:
+        //         $("#fieldDataTypeSelection").get(0).selectedIndex = 3;
+        //         break;
+        //     default:
+        //         $("#fieldDataTypeSelection").get(0).selectedIndex = 0;
+        //         break;
+        // }
         //映射指标
     },
     onBeforeRemove: function(treeId, treeNode){

+ 36 - 31
web/maintain/report/js/rpt_tpl_pre_handle.js

@@ -79,42 +79,47 @@ const exposed_ration_properties = [
     // ,{Name: "定额_风险费用", Title: "", Key: "risk", Order: "ascend"}
     // ,{Name: "定额_管理费率", Title: "", Key: ""}
 ];
+const exposed_ration_glj_properties = [
+    {Name: "定额人材机_ID", Title: "", Key: "ID"}
+    ,{Name: "定额人材机_所属定额ID", Title: "", Key: "rationID", Order: "ascend"}
+    ,{Name: "定额人材机_所属清单ID", Title: "", Key: "billsItemID", Order: "ascend"}
+    ,{Name: "定额人材机_所属工程ID", Title: "", Key: "projectID", Order: "ascend"}
+    ,{Name: "定额人材机_代码", Title: "", Key: "code", Order: "ascend"}
+    ,{Name: "定额人材机_是否暂估", Title: "", Key: "ref_join(projectGLJID,projectGLJ,id).is_evaluate", Order: "ascend", isBoolean: true, booleanOptions: [1,0]}
+    ,{Name: "定额人材机_供货方式", Title: "", Key: "ref_join(projectGLJID,projectGLJ,id).supply", Order: "ascend", individualType: fixed_supply_types}
+    ,{Name: "定额人材机_三材类别", Title: "", Key: "ref_join(projectGLJID,projectGLJ,id).materialType", Order: "ascend", individualType: fixed_material_types}
+];
 const exposed_prj_glj_properties = [
-    {Name: "人材机_ID", Title: "", Key: "ID"},
-    {Name: "人材机_所属定额ID", Title: "", Key: "rationID", Order: "ascend"},
-    {Name: "人材机_所属清单ID", Title: "", Key: "billsItemID", Order: "ascend"},
-    {Name: "人材机_所属工程ID", Title: "", Key: "projectID", Order: "ascend"},
-    {Name: "人材机_代码", Title: "", Key: "code", Order: "ascend"},
-    {Name: "人材机_是否暂估", Title: "", Key: "is_evaluate", Order: "ascend", isBoolean: true, booleanOptions: [1,0]},
-    {Name: "人材机_供货方式", Title: "", Key: "supply", Order: "ascend", individualType: fixed_supply_types},
-    {Name: "人材机_三材类别", Title: "", Key: "materialType", Order: "ascend", individualType: fixed_material_types},
-    // {Name: "人材机_名称", Title: "", Key: "name", Order: "ascend"},
-    // {Name: "人材机_单位", Title: "", Key: "unit", Order: "ascend"},
-    // {Name: "人材机_数量", Title: "", Key: "quantity", Order: "ascend"}
+    {Name: "项目人材机_ID", Title: "", Key: "ID"}
+    ,{Name: "项目人材机_所属工程ID", Title: "", Key: "projectID", Order: "ascend"}
+    ,{Name: "项目人材机_代码", Title: "", Key: "code", Order: "ascend"}
+    ,{Name: "项目人材机_是否暂估", Title: "", Key: "is_evaluate", Order: "ascend", isBoolean: true, booleanOptions: [1,0]}
+    ,{Name: "项目人材机_供货方式", Title: "", Key: "supply", Order: "ascend", individualType: fixed_supply_types}
+    ,{Name: "项目人材机_三材类别", Title: "", Key: "materialType", Order: "ascend", individualType: fixed_material_types}
 ];
-const exposed_properties_arr = [exposed_bills_properties, exposed_ration_properties, exposed_prj_glj_properties];
+const exposed_properties_arr = [exposed_bills_properties, exposed_ration_properties, exposed_ration_glj_properties];
 const fixed_top_bills_nodes = [
-    {Name: "分部分项工程(1)", Title: "", Value: 1},
-    {Name: "措施项目(2)", Title: "", Value: 2},
-    {Name: "其他项目(7)", Title: "", Value: 7},
-    {Name: "规费(15)", Title: "", Value: 15},
-    {Name: "税金(18)", Title: "", Value: 18},
-    {Name: "工程造价(19)", Title: "", Value: 19}
+    {Name: "分部分项工程(1)", Title: "", Value: 1}
+    ,{Name: "措施项目(2)", Title: "", Value: 2}
+    ,{Name: "其他项目(7)", Title: "", Value: 7}
+    ,{Name: "规费(15)", Title: "", Value: 15}
+    ,{Name: "税金(18)", Title: "", Value: 18}
+    ,{Name: "工程造价(19)", Title: "", Value: 19}
 ];
 const fixed_other_bills_types = [
-    {Name: "施工技术措施项目(3)", Title: "", Value: 3},
-    {Name: "安全文明施工按实计算费用(4)", Title: "", Value: 4},
-    {Name: "施工组织措施专项费用(5)", Title: "", Value: 5},
-    {Name: "安全文明施工专项费用(6)", Title: "", Value: 6},
-    {Name: "暂列金额(8)", Title: "", Value: 8},
-    {Name: "暂估价(9)", Title: "", Value: 9},
-    {Name: "材料(工程设备)暂估价(10)", Title: "", Value: 10},
-    {Name: "专业工程暂估价(11)", Title: "", Value: 11},
-    {Name: "计日工(12)", Title: "", Value: 12},
-    {Name: "总承包服务费(13)", Title: "", Value: 13},
-    {Name: "索赔与现场签证(14)", Title: "", Value: 14},
-    {Name: "社会保险费及住房公积金(16)", Title: "", Value: 16},
-    {Name: "工程排污费(17)", Title: "", Value: 17}
+    {Name: "施工技术措施项目(3)", Title: "", Value: 3}
+    ,{Name: "安全文明施工按实计算费用(4)", Title: "", Value: 4}
+    ,{Name: "施工组织措施专项费用(5)", Title: "", Value: 5}
+    ,{Name: "安全文明施工专项费用(6)", Title: "", Value: 6}
+    ,{Name: "暂列金额(8)", Title: "", Value: 8}
+    ,{Name: "暂估价(9)", Title: "", Value: 9}
+    ,{Name: "材料(工程设备)暂估价(10)", Title: "", Value: 10}
+    ,{Name: "专业工程暂估价(11)", Title: "", Value: 11}
+    ,{Name: "计日工(12)", Title: "", Value: 12}
+    ,{Name: "总承包服务费(13)", Title: "", Value: 13}
+    ,{Name: "索赔与现场签证(14)", Title: "", Value: 14}
+    ,{Name: "社会保险费及住房公积金(16)", Title: "", Value: 16}
+    ,{Name: "工程排污费(17)", Title: "", Value: 17}
 ];
 
 let preHandleObj = {