Skip to content
Snippets Groups Projects
Commit 0daf078b authored by Andre Loreth's avatar Andre Loreth
Browse files

#1035774: Prod2Prod tree

parent d095efeb
No related branches found
No related tags found
No related merge requests found
......@@ -139,13 +139,9 @@
<onDelete>%aditoprj%/entity/Prod2prod_entity/recordcontainers/jdito/onDelete.js</onDelete>
<recordFields>
<element>UID.value</element>
<element>PARENTID.value</element>
<element>PROD2PRODID.value</element>
<element>SOURCE_ID.value</element>
<element>DEST_ID.value</element>
<element>SOURCE_ID.displayValue</element>
<element>QUANTITY.value</element>
<element>OPTIONAL.value</element>
<element>TAKEPRICE.value</element>
<element>PRODUCTCODE.value</element>
<element>PRODUCTID.value</element>
</recordFields>
......
......@@ -6,17 +6,138 @@ import("system.db");
import("system.util");
import("Product_lib");
/**
* Calculate the root elements for this tree.
*
* @param productRootID string
* @param rows TreeData[]
* @return string[]
*/
function calculateRootElements (productRootID, rows) {
return rows.filter(function (row) {
// Filter predicate if the DIST_ID matches.
return row[2] === productRootID;
}).map(function (row) {
// Map to PROD2PROD_ID.
return row[0];
});
}
/**
* Calculates a mapping object which has the PROD2PROD_ID as
* key and the full TreeData array as value.
*
* @param rows TreeData[]
* @return {[key: TreeData]}
*/
function buildProd2ProdIDMapping (rows) {
var mapping = {}
rows.forEach(function(row) {
// Create new property which PROD2PROD_ID as key and data
// as value.
mapping[row[0]] = row;
});
return mapping;
}
/**
* Calcualtes the children mapping structure which has the DIST_ID
* as key and an array of PROD2PROD_IDs as value.
*
* @param rows TreeData[]
* @return {[key: string[]]}
*/
function buildChildrenMapping(rows) {
var parrentMapping = {}
rows.forEach(function (row) {
// Create empty array if not created previously.
if (parrentMapping[row[2]] === undefined)
parrentMapping[row[2]] = []
// Push with DIST_ID as key and PROD2PROD_ID as value.
parrentMapping[row[2]].push(row[0]);
})
return parrentMapping
}
/**
* Calculates the graph starting from the given elementID.
*/
function buildGraph (elementID, parentElementID, mappingStructure, prod2prodIdMapping) {
var elements = []
// Get the PROD2PROD data array and copy it.
// Copying is requried due to mutability of arrays.
var elementData = prod2prodIdMapping[elementID].slice(0);
// Just as an error prevention.
if (elementData === undefined)
return elements;
// Generate new PROD2PROD_ID to create a uniqueness between the PROD2PROD objects.
var virtualProd2ProdId = util.getNewUUID();
// Override actual PROD2PROD_ID with new ID.
elementData[0] = virtualProd2ProdId;
// Override parent id to match overriden prod2prodId of parent
if (parentElementID === null || parentElementID === undefined)
// Describes an root element
elementData[2] = null;
else
elementData[2] = parentElementID;
// Push element data to elements array of this graph.
elements.push(elementData);
// Search for children
var childrens = mappingStructure[elementData[1]];
if (childrens !== undefined && childrens.length > 0) {
// Build graph for each children
childrens.forEach(function(children) {
// Recursive function call (!)
var graphResult = buildGraph(children, elementData[0], mappingStructure, prod2prodIdMapping);
graphResult.forEach(function(res) {elements.push(res)})
});
}
return elements;
}
if (vars.get("$sys.recordstate") != neon.OPERATINGSTATE_NEW)
{
var prodid = vars.exists("$param.ProductId_param")
&& vars.get("$param.ProductId_param") != null ? vars.get("$param.ProductId_param") : "";
if(prodid != "")
{
var p2pUtils = new Prod2ProdUtils(prodid);
result.object(p2pUtils.getPartsListForRecordContainer());
// First 3 columns are crucial, the rest is optional.
var data = db.table("select PROD2PRODID, SOURCE_ID, DEST_ID, QUANTITY, PRODUCTCODE, PRODUCTID "
+ "from PROD2PROD join PRODUCT on PROD2PROD.SOURCE_ID = PRODUCTID "
+ "order by PRODUCTCODE");
var prod2prodIdMapping = buildProd2ProdIDMapping(data);
var childrenMapping = buildChildrenMapping(data);
var rootElements = calculateRootElements(prodid, data);
var allData = []
rootElements.forEach(function(rg) {
var graphData = buildGraph(rg, null, childrenMapping, prod2prodIdMapping)
graphData.forEach(function (gd) { allData.push(gd); })
})
result.object(allData);
}
}
else
{
result.object([]);
}
\ No newline at end of file
}
......@@ -11,7 +11,7 @@
<children>
<treetableViewTemplate>
<name>Partlist</name>
<parentField>PARENTID</parentField>
<parentField>DEST_ID</parentField>
<favoriteActionGroup1>alter</favoriteActionGroup1>
<titleField>PRODUCTCODE</titleField>
<descriptionField>QUANTITY</descriptionField>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment