From f791d4e37a69633127c5e77e48ffa8227a5ea7b0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Maximilian=20Schr=C3=B6ger?= <m.schroeger@adito.de>
Date: Tue, 13 Nov 2018 12:35:12 +0100
Subject: [PATCH] Validierung: Methode zur Verwendung von "$local.value" in
 onValidation-Prozesse

---
 .../entityfields/addr/onValidation.js         |  3 ++-
 .../entityfields/contractcode/onValidation.js |  3 ++-
 .../entityfields/contractdue/onValidation.js  |  3 ++-
 .../entityfields/contractend/onValidation.js  |  3 ++-
 .../entityfields/contractend/onValueChange.js |  3 ++-
 .../contractstart/onValidation.js             |  3 ++-
 .../contractstart/onValueChange.js            |  3 ++-
 .../entityfields/offercode/onValidation.js    |  3 ++-
 .../entityfields/relation_id/onValueChange.js |  3 ++-
 .../entityfields/product_id/onValueChange.js  |  3 ++-
 .../entityfields/quantity/onValueChange.js    |  3 ++-
 .../entityfields/productcode/onValidation.js  |  3 ++-
 .../entityfields/pricelist/onValidation.js    |  3 ++-
 .../entityfields/valid_from/onValidation.js   |  3 ++-
 .../entityfields/valid_to/onValidation.js     |  3 ++-
 .../entityfields/projectcode/onValidation.js  |  3 ++-
 .../entityfields/projectcode/onValueChange.js |  3 ++-
 process/Util_lib/process.js                   | 23 +++++++++++++++++++
 18 files changed, 57 insertions(+), 17 deletions(-)

diff --git a/entity/Comm_entity/entityfields/addr/onValidation.js b/entity/Comm_entity/entityfields/addr/onValidation.js
index b99bc842254..97fccc1a01a 100644
--- a/entity/Comm_entity/entityfields/addr/onValidation.js
+++ b/entity/Comm_entity/entityfields/addr/onValidation.js
@@ -6,6 +6,7 @@ import("system.result");
 import("system.mail");
 import("Keyword_lib");
 import("Comm_lib");
+import("Util_lib");
 
 var kwdUtil = new KeywordUtils();
 var kwd = kwdUtil.createKeyword("COMM.MEDIUM");
@@ -14,7 +15,7 @@ var commCategory = kwd.getPropForKey(commMedium, "contentType", true);//TODO: ma
 
 var fn = CommValidationUtil.makeValidationFn(commCategory);
 if (fn != null){
-    var commAddr = vars.get("$local.value");//contains the entered value - the field contains the value only after successfull validation
+    var commAddr = ProcessHandlingUtil.getOnValidationValue(vars.get("$field.ADDR"));
     var additional = CommValidationUtil.getExtensionsBlueprint();
     additional.countryCode = vars.get("$param.RelationsMainCountry_param");//TODO: try to use users language first and then the companies
     var res = fn.call(null, commAddr, additional);
diff --git a/entity/Contract_entity/entityfields/contractcode/onValidation.js b/entity/Contract_entity/entityfields/contractcode/onValidation.js
index 5b26ae2f6e7..e357339a3f7 100644
--- a/entity/Contract_entity/entityfields/contractcode/onValidation.js
+++ b/entity/Contract_entity/entityfields/contractcode/onValidation.js
@@ -2,8 +2,9 @@ import("system.translate");
 import("system.result");
 import("system.vars");
 import("system.db");
+import("Util_lib");
 
-var codeCount = db.cell("select count(CONTRACTCODE) from CONTRACT where CONTRACTCODE = '" + vars.get("$local.value") + "'"
+var codeCount = db.cell("select count(CONTRACTCODE) from CONTRACT where CONTRACTCODE = '" + ProcessHandlingUtil.getOnValidationValue(vars.get("$field.CONTRACTCODE")) + "'"
                        + " and CONTRACTID <> '" + vars.get("$field.CONTRACTID") + "'");
 if(codeCount > 0)
 {
diff --git a/entity/Contract_entity/entityfields/contractdue/onValidation.js b/entity/Contract_entity/entityfields/contractdue/onValidation.js
index 6e86ad155d5..d269674beab 100644
--- a/entity/Contract_entity/entityfields/contractdue/onValidation.js
+++ b/entity/Contract_entity/entityfields/contractdue/onValidation.js
@@ -2,9 +2,10 @@ import("system.result");
 import("system.translate");
 import("system.vars");
 import("Date_lib");
+import("Util_lib");
 
 var dateUtils = new DateUtils();
-var cDue = vars.get("$local.value");
+var cDue = ProcessHandlingUtil.getOnValidationValue(vars.get("$field.CONTRACTDUE"));
 
 if (dateUtils.validateBeginnBeforeEnd(vars.get("$field.CONTRACTSTART"), cDue) === false || dateUtils.validateBeginnBeforeEnd(cDue, vars.get("$field.CONTRACTEND")) === false) {
     result.string(translate.text("The next due date must be after the start of the contract and before the expiry of the contract!"));
diff --git a/entity/Contract_entity/entityfields/contractend/onValidation.js b/entity/Contract_entity/entityfields/contractend/onValidation.js
index fdd3b12c574..8bb7dc15d6b 100644
--- a/entity/Contract_entity/entityfields/contractend/onValidation.js
+++ b/entity/Contract_entity/entityfields/contractend/onValidation.js
@@ -1,9 +1,10 @@
 import("system.result");
 import("system.vars");
 import("Date_lib");
+import("Util_lib");
 
 var dateUtils = new DateUtils();
-var cEnd = vars.get("$local.value");
+var cEnd = ProcessHandlingUtil.getOnValidationValue(vars.get("$field.CONTRACTEND"));
 var cDue = vars.get("$field.CONTRACTDUE");
 
 if (dateUtils.validateBeginnBeforeEnd(vars.get("$field.CONTRACTSTART"), cEnd) === false)
diff --git a/entity/Contract_entity/entityfields/contractend/onValueChange.js b/entity/Contract_entity/entityfields/contractend/onValueChange.js
index 5a41f5caef6..ae1ba0c5ca7 100644
--- a/entity/Contract_entity/entityfields/contractend/onValueChange.js
+++ b/entity/Contract_entity/entityfields/contractend/onValueChange.js
@@ -1,6 +1,7 @@
 import("system.vars");
+import("Util_lib");
 
-var cEnd = vars.get("$local.value");
+var cEnd = ProcessHandlingUtil.getOnValidationValue(vars.get("$field.CONTRACTEND"));
 var cDue = vars.get("$field.CONTRACTDUE");
 
 if (cDue > cEnd && cDue != "")
diff --git a/entity/Contract_entity/entityfields/contractstart/onValidation.js b/entity/Contract_entity/entityfields/contractstart/onValidation.js
index f09d0ff9ed4..4ebb606ecee 100644
--- a/entity/Contract_entity/entityfields/contractstart/onValidation.js
+++ b/entity/Contract_entity/entityfields/contractstart/onValidation.js
@@ -2,9 +2,10 @@ import("system.neon");
 import("system.result");
 import("system.vars");
 import("Date_lib");
+import("Util_lib");
 
 var dateUtils = new DateUtils();
-var cStart = vars.get("$local.value");
+var cStart = ProcessHandlingUtil.getOnValidationValue(vars.get("$field.CONTRACTSTART"));
 var cDue = vars.get("$field.CONTRACTDUE");
 
 if (dateUtils.validateBeginnBeforeEnd(cStart, vars.get("$field.CONTRACTEND")) === false)
diff --git a/entity/Contract_entity/entityfields/contractstart/onValueChange.js b/entity/Contract_entity/entityfields/contractstart/onValueChange.js
index c8715e611c2..2e58cfbebf5 100644
--- a/entity/Contract_entity/entityfields/contractstart/onValueChange.js
+++ b/entity/Contract_entity/entityfields/contractstart/onValueChange.js
@@ -1,6 +1,7 @@
 import("system.vars");
+import("Util_lib");
 
-var cStart = vars.get("$local.value");
+var cStart = ProcessHandlingUtil.getOnValidationValue(vars.get("$field.CONTRACTSTART"));
 var cDue = vars.get("$field.CONTRACTDUE");
 
 if (cDue < cStart && cDue != "")
diff --git a/entity/Offer_entity/entityfields/offercode/onValidation.js b/entity/Offer_entity/entityfields/offercode/onValidation.js
index 7dc708a6c7f..d74d0c362ec 100644
--- a/entity/Offer_entity/entityfields/offercode/onValidation.js
+++ b/entity/Offer_entity/entityfields/offercode/onValidation.js
@@ -2,10 +2,11 @@ import("system.vars");
 import("system.result");
 import("system.neon");
 import("Offer_lib");
+import("Util_lib");
 
 var OfferUtils = new OfferUtils();
 
-if( !OfferUtils.validateOfferNumber(vars.get("$local.value")) )
+if( !OfferUtils.validateOfferNumber(ProcessHandlingUtil.getOnValidationValue(vars.get("$field.OFFERCODE"))) )
 {
     result.string(OfferUtils.getOfferNumberValidationFailString());
 }
\ No newline at end of file
diff --git a/entity/Offer_entity/entityfields/relation_id/onValueChange.js b/entity/Offer_entity/entityfields/relation_id/onValueChange.js
index 5aa3b55ed58..b5114f0629a 100644
--- a/entity/Offer_entity/entityfields/relation_id/onValueChange.js
+++ b/entity/Offer_entity/entityfields/relation_id/onValueChange.js
@@ -1,7 +1,8 @@
 import("system.vars");
 import("system.db");
+import("Util_lib");
 
-var relid = vars.get("$local.value");
+var relid = ProcessHandlingUtil.getOnValidationValue(vars.get("$field.RELATION_ID"));
 if(relid != "")
 {
     var relData = db.array(db.ROW, "select LANGUAGE from RELATION where RELATIONID = '" + relid + "'");
diff --git a/entity/Offeritem_entity/entityfields/product_id/onValueChange.js b/entity/Offeritem_entity/entityfields/product_id/onValueChange.js
index f55f272b2f2..0c8a79b2abb 100644
--- a/entity/Offeritem_entity/entityfields/product_id/onValueChange.js
+++ b/entity/Offeritem_entity/entityfields/product_id/onValueChange.js
@@ -2,8 +2,9 @@ import("system.logging");
 import("system.vars");
 import("system.neon");
 import("Product_lib");
+import("Util_lib");
 
-var pid = vars.get("$local.value");
+var pid = ProcessHandlingUtil.getOnValidationValue(vars.get("$field.PRODUCT_ID"));
 if(pid != "")
 {
     var curr = vars.exists("$param.Currency_param") ? vars.get("$param.Currency_param") : "";
diff --git a/entity/Offeritem_entity/entityfields/quantity/onValueChange.js b/entity/Offeritem_entity/entityfields/quantity/onValueChange.js
index 5acf7788daa..ac528c67dd2 100644
--- a/entity/Offeritem_entity/entityfields/quantity/onValueChange.js
+++ b/entity/Offeritem_entity/entityfields/quantity/onValueChange.js
@@ -2,9 +2,10 @@ import("system.logging");
 import("system.vars");
 import("system.neon");
 import("Product_lib");
+import("Util_lib");
 
 var pid = vars.get("$field.PRODUCT_ID");
-var newQuantity = vars.get("$local.value");
+var newQuantity = ProcessHandlingUtil.getOnValidationValue(vars.get("$field.QUANTITY"));
 if(pid != "" && newQuantity != "")
 {
     var curr = vars.exists("$param.Currency_param") ? vars.get("$param.Currency_param") : "";
diff --git a/entity/Product_entity/entityfields/productcode/onValidation.js b/entity/Product_entity/entityfields/productcode/onValidation.js
index 5de6f5400bb..b72108499db 100644
--- a/entity/Product_entity/entityfields/productcode/onValidation.js
+++ b/entity/Product_entity/entityfields/productcode/onValidation.js
@@ -2,8 +2,9 @@ import("system.translate");
 import("system.result");
 import("system.vars");
 import("system.db");
+import("Util_lib");
 
-var codeCount = db.cell("select count(PRODUCTCODE) from PRODUCT where PRODUCTCODE = '" + vars.get("$local.value") + "'"
+var codeCount = db.cell("select count(PRODUCTCODE) from PRODUCT where PRODUCTCODE = '" + ProcessHandlingUtil.getOnValidationValue(vars.get("$field.PRODUCTCODE")) + "'"
                        + " and PRODUCTID <> '" + vars.get("$field.PRODUCTID") + "'");
 if(codeCount > 0)
 {
diff --git a/entity/Productprice_entity/entityfields/pricelist/onValidation.js b/entity/Productprice_entity/entityfields/pricelist/onValidation.js
index c2e17e931c1..4927c81bd89 100644
--- a/entity/Productprice_entity/entityfields/pricelist/onValidation.js
+++ b/entity/Productprice_entity/entityfields/pricelist/onValidation.js
@@ -2,10 +2,11 @@ import("system.translate");
 import("system.result");
 import("system.vars");
 import("Product_lib");
+import("Util_lib");
 
 var pUtils = new ProductUtils();
 var priceList = {
-                priceList: vars.get("$local.value")
+                priceList: ProcessHandlingUtil.getOnValidationValue(vars.get("$field.PRICELIST"))
                 , fromQuantity: vars.get("$field.FROMQUANTITY")
                 , buySell: vars.get("$field.BUYSELL")
                 , currency: vars.get("$field.CURRENCY")
diff --git a/entity/Productprice_entity/entityfields/valid_from/onValidation.js b/entity/Productprice_entity/entityfields/valid_from/onValidation.js
index f5e5361b6b6..74fa861f9bb 100644
--- a/entity/Productprice_entity/entityfields/valid_from/onValidation.js
+++ b/entity/Productprice_entity/entityfields/valid_from/onValidation.js
@@ -1,9 +1,10 @@
 import("system.result");
 import("system.vars");
 import("Date_lib");
+import("Util_lib");
 
 var dateUtils = new DateUtils();
-var cStart = vars.get("$local.value");
+var cStart = ProcessHandlingUtil.getOnValidationValue(vars.get("$field.VALID_FROM"));
 
 if (dateUtils.validateBeginnBeforeEnd(cStart, vars.get("$field.VALID_TO")) === false)
     result.string(dateUtils.getValidationFailString());
\ No newline at end of file
diff --git a/entity/Productprice_entity/entityfields/valid_to/onValidation.js b/entity/Productprice_entity/entityfields/valid_to/onValidation.js
index 5558b9a4ab1..de9f15393fc 100644
--- a/entity/Productprice_entity/entityfields/valid_to/onValidation.js
+++ b/entity/Productprice_entity/entityfields/valid_to/onValidation.js
@@ -1,9 +1,10 @@
 import("system.result");
 import("system.vars");
 import("Date_lib");
+import("Util_lib");
 
 var dateUtils = new DateUtils();
-var cEnd = vars.get("$local.value");
+var cEnd = ProcessHandlingUtil.getOnValidationValue(vars.get("$field.VALID_TO"));
 
 if (dateUtils.validateBeginnBeforeEnd(vars.get("$field.VALID_FROM"), cEnd) === false)
     result.string(dateUtils.getValidationFailString());
\ No newline at end of file
diff --git a/entity/Salesproject_entity/entityfields/projectcode/onValidation.js b/entity/Salesproject_entity/entityfields/projectcode/onValidation.js
index 75b9fcc84cc..1df10f89516 100644
--- a/entity/Salesproject_entity/entityfields/projectcode/onValidation.js
+++ b/entity/Salesproject_entity/entityfields/projectcode/onValidation.js
@@ -2,10 +2,11 @@ import("system.vars");
 import("system.result");
 import("system.neon");
 import("Salesproject_lib");
+import("Util_lib");
 
 var SalesprojectUtils = new SalesprojectUtils();
 
-if( !SalesprojectUtils.validateProjectNumber(vars.get("$local.value")) )
+if( !SalesprojectUtils.validateProjectNumber(ProcessHandlingUtil.getOnValidationValue(vars.get("$field.PROJECTCODE"))) )
 {
     result.string(SalesprojectUtils.getProjectNumberValidationFailString());
 }
\ No newline at end of file
diff --git a/entity/Salesproject_entity/entityfields/projectcode/onValueChange.js b/entity/Salesproject_entity/entityfields/projectcode/onValueChange.js
index 937237a494b..289a0b56e8f 100644
--- a/entity/Salesproject_entity/entityfields/projectcode/onValueChange.js
+++ b/entity/Salesproject_entity/entityfields/projectcode/onValueChange.js
@@ -1,9 +1,10 @@
 import("system.vars");
 import("system.result");
 import("Salesproject_lib");
+import("Util_lib");
 
 var SalesprojectUtils = new SalesprojectUtils();
-if( !SalesprojectUtils.validateProjectNumber(vars.get("$local.value")) )
+if( !SalesprojectUtils.validateProjectNumber(ProcessHandlingUtil.getOnValidationValue(vars.get("$field.PROJECTCODE"))) )
 {
     vars.set("$field.PROJECTCODE", SalesprojectUtils.getNextProjectNumber());
 }
diff --git a/process/Util_lib/process.js b/process/Util_lib/process.js
index 71cd86700d0..9a02ca2d3e8 100644
--- a/process/Util_lib/process.js
+++ b/process/Util_lib/process.js
@@ -1448,4 +1448,27 @@ function CopyModuleUtils()
             }
         }
     }
+}
+
+/**
+ * provides somehow static methods for special handling in JDito-Processes
+ * do not create an instance of this
+ */
+function ProcessHandlingUtil()
+{
+}
+
+/**
+ * In onValidation-Process a local variable called "$local.value" is made available from kernel. 
+ * It contains the entered value - the field contains the value only after successfull validation (vars.get("$field.Fieldname")).
+ * The onValidation-Process is running again before saving the entity, at this point there's "$local.value" varialbe no longer available,
+ * but the entered value now is the present one because the field has already been validated before.
+ * Otherwise a "variable not found" error would occur.
+ * 
+ * @param {String} pFieldValue req value of the field onValidation-Process is executed ( e.g. vars.get("$field.Fieldname") )
+ * @return {String} Field value for onValidation-Process
+ */
+ProcessHandlingUtil.getOnValidationValue = function(pFieldValue)
+{
+    return vars.exists("$local.value") ? vars.get("$local.value") : pFieldValue;
 }
\ No newline at end of file
-- 
GitLab