Skip to content
Snippets Groups Projects
Commit f2dbac68 authored by Johannes Hörmann's avatar Johannes Hörmann
Browse files

Partlist: editable tree table

parent c38a1f33
No related branches found
No related tags found
No related merge requests found
Showing
with 236 additions and 95 deletions
......@@ -160,7 +160,7 @@
<children>
<entityParameter>
<name>ContactType_param</name>
<code>%aditoprj%/entity/Address_entity/entityfields/organisationaddressesbycontact/children/contacttype_param/code.js</code>
<valueProcess>%aditoprj%/entity/Address_entity/entityfields/organisationaddressesbycontact/children/contacttype_param/valueProcess.js</valueProcess>
<expose v="true" />
<description>TODO: expose auf false. aktuell wird der Code nicht ausgeführt, wenn Expose false ist.</description>
</entityParameter>
......
import("system.vars");
import("system.result");
result.string(vars.getString("$field.AB_ATTRIBUTEID"));
\ No newline at end of file
result.string(vars.getString("$field.AB_ATTRIBUTEID"));
import("system.result");
import("Keyword_lib");
import("KeywordRegistry_basic");
result.string($KeywordRegistry.communicationMedium());
\ No newline at end of file
import("system.vars");
import("system.db");
import("system.result");
import("Sql_lib");
......
......@@ -33,7 +33,7 @@
<name>SOURCE_ID</name>
<documentation>%aditoprj%/entity/Prod2prod_entity/entityfields/source_id/documentation.adoc</documentation>
<title>Product</title>
<possibleItemsProcess>%aditoprj%/entity/Prod2prod_entity/entityfields/source_id/possibleItemsProcess.js</possibleItemsProcess>
<consumer>Products</consumer>
</entityField>
<entityField>
<name>TAKEPRICE</name>
......@@ -41,6 +41,7 @@
<title>Take price</title>
<contentType>BOOLEAN</contentType>
<possibleItemsProcess>%aditoprj%/entity/Prod2prod_entity/entityfields/takeprice/possibleItemsProcess.js</possibleItemsProcess>
<valueProcess>%aditoprj%/entity/Prod2prod_entity/entityfields/takeprice/valueProcess.js</valueProcess>
</entityField>
<entityParameter>
<name>ProductId_param</name>
......@@ -60,7 +61,8 @@
<entityProvider>
<name>ProductLinks</name>
<fieldType>DEPENDENCY_IN</fieldType>
<recordContainer>jdito</recordContainer>
<targetContextField>targetContext</targetContextField>
<targetIdField>SOURCE_ID</targetIdField>
<dependencies>
<entityDependency>
<name>4bd06e3b-17a0-483e-a61c-818ff7e86be3</name>
......@@ -69,20 +71,69 @@
<isConsumer v="false" />
</entityDependency>
</dependencies>
<children>
<entityParameter>
<name>ProductId_param</name>
<expose v="true" />
</entityParameter>
<entityParameter>
<name>CurrentProductId_param</name>
<expose v="false" />
</entityParameter>
</children>
</entityProvider>
<entityField>
<name>PRODUCTCODE</name>
<title>Product number</title>
</entityField>
<entityField>
<name>targetContext</name>
<valueProcess>%aditoprj%/entity/Prod2prod_entity/entityfields/targetcontext/valueProcess.js</valueProcess>
</entityField>
<entityActionGroup>
<name>alter</name>
<children>
<entityActionField>
<name>insert</name>
<fieldType>ACTION</fieldType>
<onActionProcess>%aditoprj%/entity/Prod2prod_entity/entityfields/alter/children/insert/onActionProcess.js</onActionProcess>
<isSelectionAction v="true" />
<iconId>VAADIN:FILE_TREE_SMALL</iconId>
</entityActionField>
</children>
</entityActionGroup>
<entityConsumer>
<name>Products</name>
<fieldType>DEPENDENCY_OUT</fieldType>
<dependency>
<name>dependency</name>
<entityName>Product_entity</entityName>
<fieldName>Products</fieldName>
</dependency>
<children>
<entityParameter>
<name>ExcludedProducts_param</name>
<valueProcess>%aditoprj%/entity/Prod2prod_entity/entityfields/products/children/excludedproducts_param/valueProcess.js</valueProcess>
<expose v="true" />
</entityParameter>
</children>
</entityConsumer>
<entityField>
<name>PRODUCTID</name>
</entityField>
<entityParameter>
<name>CurrentProductId_param</name>
<valueProcess>%aditoprj%/entity/Prod2prod_entity/entityfields/currentproductid_param/valueProcess.js</valueProcess>
<expose v="true" />
<description>PARAMETER</description>
</entityParameter>
</entityFields>
<recordContainers>
<jDitoRecordContainer>
<name>jdito</name>
<jDitoRecordAlias>Data_alias</jDitoRecordAlias>
<contentProcess>%aditoprj%/entity/Prod2prod_entity/recordcontainers/jdito/contentProcess.js</contentProcess>
<isSortable v="false" />
<onInsert>%aditoprj%/entity/Prod2prod_entity/recordcontainers/jdito/onInsert.js</onInsert>
<onUpdate>%aditoprj%/entity/Prod2prod_entity/recordcontainers/jdito/onUpdate.js</onUpdate>
<onDelete>%aditoprj%/entity/Prod2prod_entity/recordcontainers/jdito/onDelete.js</onDelete>
<recordFields>
<element>UID.value</element>
......@@ -92,6 +143,7 @@
<element>OPTIONAL.value</element>
<element>TAKEPRICE.value</element>
<element>PRODUCTCODE.value</element>
<element>PRODUCTID.value</element>
<element>SOURCE_ID.value</element>
<element>DEST_ID.displayValue</element>
</recordFields>
......
import("system.neon");
import("system.vars");
if (vars.exists("$local.rows") && vars.get("$local.rows"))
{
var selectedRows = JSON.parse(vars.get("$local.rows"));
if (selectedRows.length > 0 && vars.exists("$param.ProductId_param") && vars.getString("$param.ProductId_param"))
{
var productId = selectedRows[0].PRODUCTID;
var params = {
"ProductId_param" : vars.getString("$param.ProductId_param"),
"CurrentProductId_param" : productId
};
neon.openContext("Prod2prod", "Prod2ProdEdit_view", null, neon.OPERATINGSTATE_NEW, params);
}
}
\ No newline at end of file
import("system.result");
import("system.vars");
// default is the ProductId_param
if (vars.exists("$param.ProductId_param") && vars.get("$param.ProductId_param"))
{
result.string(vars.get("$param.ProductId_param"));
}
\ No newline at end of file
......@@ -2,9 +2,9 @@ import("system.result");
import("system.neon");
import("system.vars");
if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)
{
if(vars.exists("$param.ProductId_param") && vars.get("$param.ProductId_param") != null && vars.get("$param.ProductId_param") != "")
result.string(vars.getString("$param.ProductId_param"));
if(vars.exists("$param.CurrentProductId_param") && vars.get("$param.CurrentProductId_param"))
result.string(vars.getString("$param.CurrentProductId_param"));
}
//import("system.vars");
//import("system.result");
//import("system.neon");
//
//if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
// result.string("0");
\ No newline at end of file
import("system.vars");
import("system.result");
import("system.neon");
if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
result.string("0");
\ No newline at end of file
import("system.neon");
import("system.db");
import("system.vars");
import("system.result");
var recordstate = vars.get("$sys.recordstate");
var currentPartID = (vars.exists("$param.CurrentProductId_param") && vars.getString("$param.CurrentProductId_param")) ? vars.getString("$param.CurrentProductId_param") : "";
var productid = vars.getString("$param.ProductId_param");
var destid = productid; //für Insert ermitteln
var excludeIDs;
if (recordstate == neon.OPERATINGSTATE_EDIT)
{
//Ausschließen des geöffneten Datensatzes
excludeIDs = [productid]
_getParentID([productid, currentPartID], excludeIDs);
_getChildrenID([productid, currentPartID], excludeIDs);
}
else
{
//Ausschließen des geöffneten Datensatzes und des Produkts auf dem wir "stehen"
excludeIDs = [productid, currentPartID];
//beide Seiten prüfen ob Über- oder Untergeordnetes Produkt
_getParentID([excludeIDs[0], excludeIDs[1]], excludeIDs);
_getChildrenID([excludeIDs[0], excludeIDs[1]], excludeIDs);
}
result.object(excludeIDs);
// TODO: remove code duplication, better param naming and using SqlCondition
function _getParentID(pID, pIDs)
{
//Ermitteln welche Produkte ausgeschlossen werden müssen.
cond = typeof(pID) == "object" ? "in ('" + pID.join("', '") +"')" : " = '" + pID + "' "
var parents = db.array(db.COLUMN, "select DEST_ID from PROD2PROD where SOURCE_ID " + cond);
for ( var i = 0; i < parents.length; i++)
{
pIDs.push(parents[i]);
_getParentID(parents[i], pIDs)
}
}
function _getChildrenID(pID, pIDs)
{
//Ermitteln welche Produkte ausgeschlossen werden müssen.
cond = typeof(pID) == "object" ? "in ('" + pID.join("', '") +"')" : " = '" + pID + "' "
var children = db.array(db.COLUMN, "select SOURCE_ID from PROD2PROD where DEST_ID " + cond);
for ( var i = 0; i < children.length; i++)
{
pIDs.push(children[i]);
_getChildrenID(children[i], pIDs)
}
}
\ No newline at end of file
import("system.vars");
import("system.result");
import("system.db");
import("system.neon");
import("Keyword_lib");
import("Product_lib");
import("KeywordRegistry_basic");
var condition = "";
if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
{
var prodid = vars.get("$field.DEST_ID");
var excludeableProds = [prodid];
var p2pUtils = new Prod2ProdUtils(prodid);
excludeableProds = excludeableProds.concat(p2pUtils.getPartsListProdIds());
excludeableProds = excludeableProds.concat(p2pUtils.getParentProdIds());
condition += " where PRODUCTID not in ('" + excludeableProds.join("','") + "')";
}
var prods = db.table("select PRODUCTID, GROUPCODEID, PRODUCTNAME, PRODUCTCODE from PRODUCT " + condition);
var res = [];
for(var i = 0; i < prods.length; i++)
{
res.push([prods[i][0], KeywordUtils.getViewValue($KeywordRegistry.productGroupcode(), prods[i][1]) + " / " + prods[i][2] + " / " + prods[i][3]]);
}
result.object(res);
\ No newline at end of file
import("system.vars");
import("system.result");
import("system.neon");
if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
result.string("0");
\ No newline at end of file
import("system.result");
result.string("Product")
\ No newline at end of file
import("system.logging");
import("system.result");
import("system.vars");
import("system.db");
import("system.util");
import("Product_lib");
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());
import("system.neon");
import("system.result");
import("system.vars");
import("system.db");
import("system.util");
import("Product_lib");
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());
}
}
else
{
result.object([]);
}
\ No newline at end of file
import("system.neon");
import("system.db");
import("Sql_lib");
db.deleteData("PROD2PROD", SqlCondition.begin()
.andPrepareVars("PROD2PROD.PROD2PRODID", "$field.UID", "# = ?")
.build("1 = 0"));
\ No newline at end of file
.andPrepareVars("PROD2PROD.PROD2PRODID", "$field.PROD2PRODID")
.build("1=2"));
// Refresh otherwise the children of the deleted node would be moved to the root.
neon.refresh()
\ No newline at end of file
import("system.logging");
import("system.datetime");
import("system.vars");
import("system.db");
......@@ -9,11 +10,12 @@ var cols = [ "PROD2PRODID"
, "OPTIONAL"
, "TAKEPRICE" ];
var vals = [ vars.get("$field.UID")
var vals = [ vars.get("$field.PROD2PRODID")
, vars.get("$field.DEST_ID")
, vars.get("$field.SOURCE_ID")
, vars.get("$field.QUANTITY")
, vars.get("$field.OPTIONAL")
, vars.get("$field.TAKEPRICE") ];
logging.log("INSERT!!!!")
db.insertData("PROD2PROD", cols, null, vals);
\ No newline at end of file
import("system.datetime");
import("system.vars");
import("system.db");
imp
var cols = [ "DEST_ID"
, "SOURCE_ID"
, "QUANTITY"
, "OPTIONAL"
, "TAKEPRICE" ];
var vals = [ vars.get("$field.DEST_ID")
, vars.get("$field.SOURCE_ID")
, vars.get("$field.QUANTITY")
, vars.get("$field.OPTIONAL")
, vars.get("$field.TAKEPRICE") ];
db.updateData("PROD2PROD",
cols,
null,
vals,
SqlCondition.begin()
.andPrepareVars("PROD2PROD.PROD2PRODID", "$field.UID", "# = ?")
.build("1 = 0"));
\ No newline at end of file
......@@ -334,6 +334,29 @@
</entityParameter>
</children>
</entityConsumer>
<entityParameter>
<name>ExcludedProducts_param</name>
<expose v="true" />
<description>PARAMETER</description>
</entityParameter>
<entityProvider>
<name>Products</name>
<fieldType>DEPENDENCY_IN</fieldType>
<dependencies>
<entityDependency>
<name>1b12e8ef-74ba-4294-bd2b-9d4afa80798c</name>
<entityName>Prod2prod_entity</entityName>
<fieldName>Products</fieldName>
<isConsumer v="false" />
</entityDependency>
</dependencies>
<children>
<entityParameter>
<name>ExcludedProducts_param</name>
<expose v="true" />
</entityParameter>
</children>
</entityProvider>
<entityActionField>
<name>newTask</name>
<fieldType>ACTION</fieldType>
......@@ -348,6 +371,7 @@
<alias>Data_alias</alias>
<maximumDbRows v="0" />
<fromClauseProcess>%aditoprj%/entity/Product_entity/recordcontainers/db/fromClauseProcess.js</fromClauseProcess>
<conditionProcess>%aditoprj%/entity/Product_entity/recordcontainers/db/conditionProcess.js</conditionProcess>
<onDBUpdate>%aditoprj%/entity/Product_entity/recordcontainers/db/onDBUpdate.js</onDBUpdate>
<onDBDelete>%aditoprj%/entity/Product_entity/recordcontainers/db/onDBDelete.js</onDBDelete>
<linkInformation>
......
import("system.logging");
import("system.result");
import("system.vars");
import("system.db");
import("Sql_lib");
var productCond = SqlCondition.begin()
if (vars.exists("$param.ExcludedProducts_param") && vars.get("$param.ExcludedProducts_param"))
{
var excludedIds = JSON.parse(vars.get("$param.ExcludedProducts_param"));
excludedIds.forEach(function(pId)
{
this.andPrepare("PRODUCT.PRODUCTID", pId, "# <> ?");
}, productCond);
}
//TODO: use a preparedCondition when available #1030812 #1034026
result.string(db.translateCondition(productCond.build("1 = 1")));
\ No newline at end of file
......@@ -5,7 +5,7 @@
<comment>Prod2Prod is mainly used for the parts list of products</comment>
<majorModelMode>DISTRIBUTED</majorModelMode>
<filterview>Prod2prodFilter_view</filterview>
<preview>Prod2prodPreview_view</preview>
<editview>Prod2ProdEdit_view</editview>
<entity>Prod2prod_entity</entity>
<references>
<neonViewReference>
......@@ -13,8 +13,8 @@
<view>Prod2prodFilter_view</view>
</neonViewReference>
<neonViewReference>
<name>2a037997-7a55-4005-956e-fccf12ccc9d2</name>
<view>Prod2prodPreview_view</view>
<name>428b22a1-427f-4547-a478-964442078bc1</name>
<view>Prod2ProdEdit_view</view>
</neonViewReference>
</references>
</neonContext>
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