|
@@ -92,97 +92,11 @@ let JpcData = {
|
|
|
}
|
|
|
};
|
|
|
if ((rptTpl) && (dataObj)) {
|
|
|
- //*
|
|
|
private_analyse(JV.NODE_MASTER_FIELDS, JV.NODE_DETAIL_FIELDS, JV.DATA_MASTER_DATA, JV.DATA_DETAIL_DATA, me.dataSeq);
|
|
|
if (rptTpl[JV.NODE_FLOW_INFO_EX]) {
|
|
|
private_analyse(JV.NODE_MASTER_FIELDS_EX, JV.NODE_DETAIL_FIELDS_EX, JV.DATA_MASTER_DATA_EX, JV.DATA_DETAIL_DATA_EX, me.exDataSeq);
|
|
|
}
|
|
|
- /*/
|
|
|
- //1. get ID fields
|
|
|
- let masterIDs = [];
|
|
|
- for (let i = 0; i < rptTpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS].length; i++) {
|
|
|
- let mstFieldObj = rptTpl[JV.NODE_FIELD_MAP][JV.NODE_MASTER_FIELDS][i];
|
|
|
- if ((mstFieldObj[JV.PROP_IS_ID]) && (mstFieldObj[JV.PROP_IS_ID] === 'T')) {
|
|
|
- masterIDs.push({"idx": i, "seq": mstFieldObj[JV.PROP_ID_SEQ]});
|
|
|
- }
|
|
|
- }
|
|
|
- let detailIDs = [];
|
|
|
- for (let i = 0; i < rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS].length; i++) {
|
|
|
- let dtlFieldObj = rptTpl[JV.NODE_FIELD_MAP][JV.NODE_DETAIL_FIELDS][i];
|
|
|
- if ((dtlFieldObj[JV.PROP_IS_ID]) && (dtlFieldObj[JV.PROP_IS_ID] === 'T')) {
|
|
|
- detailIDs.push({"idx": i, "seq": dtlFieldObj[JV.PROP_ID_SEQ]});
|
|
|
- }
|
|
|
- }
|
|
|
- //2. sort the ID fields
|
|
|
- if (masterIDs.length > 1) {
|
|
|
- masterIDs.sort(function(a, b) {
|
|
|
- return 1*a["seq"] - 1*b["seq"];
|
|
|
- })
|
|
|
- }
|
|
|
- if (detailIDs.length > 1) {
|
|
|
- detailIDs.sort(function(a, b) {
|
|
|
- return 1*a["seq"] - 1*b["seq"];
|
|
|
- })
|
|
|
- }
|
|
|
- //3. prepare data sequence
|
|
|
- if (masterIDs.length > 0) {
|
|
|
- let mst_dt_len = 0, dtl_dt_len = 0, mst_fields = [];
|
|
|
- for (let i = 0; i < masterIDs.length; i++) {
|
|
|
- mst_fields.push(dataObj[JV.DATA_MASTER_DATA][masterIDs[i]["idx"]]);
|
|
|
- mst_dt_len = dataObj[JV.DATA_MASTER_DATA][masterIDs[i]["idx"]].length;
|
|
|
- }
|
|
|
- let dtl_fields = [];
|
|
|
- for (let i = 0; i < detailIDs.length; i++) {
|
|
|
- dtl_fields.push(dataObj[JV.DATA_DETAIL_DATA][detailIDs[i]["idx"]]);
|
|
|
- dtl_dt_len = dataObj[JV.DATA_DETAIL_DATA][detailIDs[i]["idx"]].length;
|
|
|
- }
|
|
|
- let sIdx = 0;
|
|
|
- let isEqual = true;
|
|
|
- for (let i = 0; i < mst_dt_len; i++) {
|
|
|
- me.dataSeq.push([]);
|
|
|
- //then compare the master/detail ID-field value
|
|
|
- for (let j = sIdx; j < dtl_dt_len; j++) {
|
|
|
- isEqual = true;
|
|
|
- for (let k = 0; k < mst_fields.length; k++) {
|
|
|
- if (!(mst_fields[k][i] === dtl_fields[k][j])) {
|
|
|
- isEqual = false;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- if (isEqual) {
|
|
|
- me.dataSeq[i].push(j);
|
|
|
- } else {
|
|
|
- sIdx = j;
|
|
|
- //below logic is for the data robustness purpose, to avoid those strange record(detail level) which could not match even one of the master record!
|
|
|
- if (i < mst_dt_len - 1 && j < dtl_dt_len - 1) {
|
|
|
- for (let j1 = j; j1 < dtl_dt_len; j1++) {
|
|
|
- isEqual = true;
|
|
|
- for (let k = 0; k < mst_fields.length; k++) {
|
|
|
- if (!(mst_fields[k][i + 1] === dtl_fields[k][j1])) {
|
|
|
- isEqual = false;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- if (isEqual) {
|
|
|
- sIdx = j1;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- } else { //if no master data
|
|
|
- let field = dataObj[JV.DATA_DETAIL_DATA][0];
|
|
|
- me.dataSeq = [[]];
|
|
|
- for (let i = 0; i < field.length; i++) {
|
|
|
- me.dataSeq[0].push(i);
|
|
|
- }
|
|
|
- }
|
|
|
- //*/
|
|
|
}
|
|
|
- //alert(3);
|
|
|
};
|
|
|
return JpcDataRst;
|
|
|
}
|