From 68d9e1ebcad189b082e5cb96b36ff5f8811c85fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maximilian=20Schr=C3=B6ger?= <m.schroeger@adito.de> Date: Fri, 5 Oct 2018 10:17:14 +0200 Subject: [PATCH] validierungen, liquibase example --- .../_____SYSTEM_APPLICATION_NEON.aod | 1 + entity/Contract_entity/Contract_entity.aod | 28 +++++++++++++++++-- .../entityfields/contractdue/onValidation.js | 11 ++++++++ .../entityfields/contractend/onValidation.js | 18 ++++++++++++ .../onValueChange.js} | 0 .../contractstart/onValidation.js | 18 ++++++++++++ .../relation_id/fieldIdProcess.js | 6 ++++ .../relation_id/linkedContextProcess.js | 14 ++++++++++ .../relation_id/valueMappingProcess.js | 0 .../entityfields/relation_id/valueProcess.js | 2 +- entity/Org_entity/Org_entity.aod | 12 ++++++++ .../ContractPreview_view.aod | 5 +--- .../example_contract/CONTRACT_42154311.xml | 27 ++++++++++++++++++ others/db_changes/masterChangelog.xml | 1 + process/Date_lib/Date_lib.aod | 6 ++++ process/Date_lib/process.js | 19 +++++++++++++ 16 files changed, 161 insertions(+), 7 deletions(-) create mode 100644 entity/Contract_entity/entityfields/contractdue/onValidation.js create mode 100644 entity/Contract_entity/entityfields/contractend/onValidation.js rename entity/Contract_entity/entityfields/{relation_id/possibleItemsProcess.js => contractend/onValueChange.js} (100%) create mode 100644 entity/Contract_entity/entityfields/contractstart/onValidation.js create mode 100644 entity/Contract_entity/entityfields/relation_id/fieldIdProcess.js create mode 100644 entity/Contract_entity/entityfields/relation_id/linkedContextProcess.js create mode 100644 entity/Contract_entity/entityfields/relation_id/valueMappingProcess.js create mode 100644 others/db_changes/data/example_contract/CONTRACT_42154311.xml create mode 100644 process/Date_lib/Date_lib.aod create mode 100644 process/Date_lib/process.js diff --git a/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod b/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod index 5dde13f0008..fb6f1364f76 100644 --- a/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod +++ b/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod @@ -12,6 +12,7 @@ <node name="Org_context" kind="10077" /> <node name="Pers_context" kind="10077" /> <node name="History_context" kind="10077" /> + <node name="Contract_context" kind="10077" /> <node name="INTERNAL_ADMINISTRATOR" kind="159" /> </node> </node> diff --git a/entity/Contract_entity/Contract_entity.aod b/entity/Contract_entity/Contract_entity.aod index c06d034aaef..c62fc0e1d31 100644 --- a/entity/Contract_entity/Contract_entity.aod +++ b/entity/Contract_entity/Contract_entity.aod @@ -12,20 +12,26 @@ <name>CONTRACTCODE</name> <tableName>CONTRACT</tableName> <columnName>CONTRACTCODE</columnName> + <caption>Vertragsnummer</caption> </entityField> <entityField> <name>CONTRACTDUE</name> <tableName>CONTRACT</tableName> <columnName>CONTRACTDUE</columnName> + <caption>nächste Fälligkeit</caption> <contentType>DATE</contentType> <resolution>DAY</resolution> + <onValidation>%aditoprj%/entity/Contract_entity/entityfields/contractdue/onValidation.js</onValidation> </entityField> <entityField> <name>CONTRACTEND</name> <tableName>CONTRACT</tableName> <columnName>CONTRACTEND</columnName> + <caption>Vertragsende</caption> <contentType>DATE</contentType> <resolution>DAY</resolution> + <onValidation>%aditoprj%/entity/Contract_entity/entityfields/contractend/onValidation.js</onValidation> + <onValueChange>%aditoprj%/entity/Contract_entity/entityfields/contractend/onValueChange.js</onValueChange> </entityField> <entityField> <name>CONTRACTID</name> @@ -36,19 +42,23 @@ <name>CONTRACTSTART</name> <tableName>CONTRACT</tableName> <columnName>CONTRACTSTART</columnName> + <caption>Vertragsbeginn</caption> <contentType>DATE</contentType> <resolution>DAY</resolution> + <onValidation>%aditoprj%/entity/Contract_entity/entityfields/contractstart/onValidation.js</onValidation> </entityField> <entityField> <name>CONTRACTSTATUS</name> <tableName>CONTRACT</tableName> <columnName>CONTRACTSTATUS</columnName> + <caption>Status</caption> <possibleItemsProcess>%aditoprj%/entity/Contract_entity/entityfields/contractstatus/possibleItemsProcess.js</possibleItemsProcess> </entityField> <entityField> <name>CONTRACTTYPE</name> <tableName>CONTRACT</tableName> <columnName>CONTRACTTYPE</columnName> + <caption>Vertragsart</caption> <possibleItemsProcess>%aditoprj%/entity/Contract_entity/entityfields/contracttype/possibleItemsProcess.js</possibleItemsProcess> </entityField> <entityField> @@ -71,6 +81,7 @@ <name>PAYMENT</name> <tableName>CONTRACT</tableName> <columnName>PAYMENT</columnName> + <caption>Zahlweise</caption> <mandatory v="true" /> <possibleItemsProcess>%aditoprj%/entity/Contract_entity/entityfields/payment/possibleItemsProcess.js</possibleItemsProcess> </entityField> @@ -78,15 +89,19 @@ <name>RELATION_ID</name> <tableName>CONTRACT</tableName> <columnName>RELATION_ID</columnName> + <caption>Person / Firma</caption> + <linkedContextProcess>%aditoprj%/entity/Contract_entity/entityfields/relation_id/linkedContextProcess.js</linkedContextProcess> <mandatory v="true" /> - <outgoingField></outgoingField> - <possibleItemsProcess>%aditoprj%/entity/Contract_entity/entityfields/relation_id/possibleItemsProcess.js</possibleItemsProcess> + <outgoingField>ContractOrg_dfo</outgoingField> <valueProcess>%aditoprj%/entity/Contract_entity/entityfields/relation_id/valueProcess.js</valueProcess> + <valueMappingProcess>%aditoprj%/entity/Contract_entity/entityfields/relation_id/valueMappingProcess.js</valueMappingProcess> + <fieldIdProcess>%aditoprj%/entity/Contract_entity/entityfields/relation_id/fieldIdProcess.js</fieldIdProcess> </entityField> <entityField> <name>REMARK</name> <tableName>CONTRACT</tableName> <columnName>REMARK</columnName> + <caption>Beschreibung</caption> <contentType>LONG_TEXT</contentType> </entityField> <entityField> @@ -159,6 +174,15 @@ </entityParameter> </children> </entityOutgoingField> + <entityOutgoingField> + <name>ContractOrg_dfo</name> + <fieldType>DEPENDENCY_OUT</fieldType> + <dependency> + <name>dependency</name> + <entityName>Org_entity</entityName> + <fieldName>ContractOrg_dfi</fieldName> + </dependency> + </entityOutgoingField> </entityFields> <linkInformation> <linkInformation> diff --git a/entity/Contract_entity/entityfields/contractdue/onValidation.js b/entity/Contract_entity/entityfields/contractdue/onValidation.js new file mode 100644 index 00000000000..eda236fcfd7 --- /dev/null +++ b/entity/Contract_entity/entityfields/contractdue/onValidation.js @@ -0,0 +1,11 @@ +import("system.result"); +import("system.translate"); +import("system.vars"); +import("Date_lib"); + +var dateUtils = new DateUtils(); +var cDue = vars.get("$local.value"); + +if (dateUtils.validateBeginnBeforeEnd(vars.get("$field.CONTRACTSTART"), cDue) === false || dateUtils.validateBeginnBeforeEnd(cDue, vars.get("$field.CONTRACTEND")) === false) { + result.string(translate.text("Nächste Fälligkeit muss nach Vertragsbeginn und vor Vertragsende liegen!")); +} diff --git a/entity/Contract_entity/entityfields/contractend/onValidation.js b/entity/Contract_entity/entityfields/contractend/onValidation.js new file mode 100644 index 00000000000..ab2e63d3e9b --- /dev/null +++ b/entity/Contract_entity/entityfields/contractend/onValidation.js @@ -0,0 +1,18 @@ +import("system.logging"); +import("system.neon"); +import("system.result"); +import("system.translate"); +import("system.vars"); +import("Date_lib"); + +logging.log("###END_onValidation"); + +var dateUtils = new DateUtils(); +var cEnd = vars.get("$local.value"); +var cDue = vars.get("$field.CONTRACTDUE"); + +if (cDue > cEnd && cDue != "") + neon.setFieldValue("$field.CONTRACTDUE", cEnd); + +if (dateUtils.validateBeginnBeforeEnd(vars.get("$field.CONTRACTSTART"), cEnd) === false) + result.string(translate.text("Das Ende-Datum muss nach dem Beginn-Datum liegen")); \ No newline at end of file diff --git a/entity/Contract_entity/entityfields/relation_id/possibleItemsProcess.js b/entity/Contract_entity/entityfields/contractend/onValueChange.js similarity index 100% rename from entity/Contract_entity/entityfields/relation_id/possibleItemsProcess.js rename to entity/Contract_entity/entityfields/contractend/onValueChange.js diff --git a/entity/Contract_entity/entityfields/contractstart/onValidation.js b/entity/Contract_entity/entityfields/contractstart/onValidation.js new file mode 100644 index 00000000000..d48c866c04d --- /dev/null +++ b/entity/Contract_entity/entityfields/contractstart/onValidation.js @@ -0,0 +1,18 @@ +import("system.logging"); +import("system.neon"); +import("system.result"); +import("system.translate"); +import("system.vars"); +import("Date_lib"); + +logging.log("###START_validation"); + +var dateUtils = new DateUtils(); +var cStart = vars.get("$local.value"); +var cDue = vars.get("$field.CONTRACTDUE"); + +if (cDue < cStart && cDue != "") + neon.setFieldValue("$field.CONTRACTDUE", cStart); + +if (dateUtils.validateBeginnBeforeEnd(cStart, vars.get("$field.CONTRACTEND")) === false) + result.string(translate.text("Das Ende-Datum muss nach dem Beginn-Datum liegen")); \ No newline at end of file diff --git a/entity/Contract_entity/entityfields/relation_id/fieldIdProcess.js b/entity/Contract_entity/entityfields/relation_id/fieldIdProcess.js new file mode 100644 index 00000000000..70e9184ae25 --- /dev/null +++ b/entity/Contract_entity/entityfields/relation_id/fieldIdProcess.js @@ -0,0 +1,6 @@ +import("system.vars"); +import("system.db"); +import("system.result"); +import("system.neon"); + +result.string (vars.get("$this.value")); \ No newline at end of file diff --git a/entity/Contract_entity/entityfields/relation_id/linkedContextProcess.js b/entity/Contract_entity/entityfields/relation_id/linkedContextProcess.js new file mode 100644 index 00000000000..2b4986de616 --- /dev/null +++ b/entity/Contract_entity/entityfields/relation_id/linkedContextProcess.js @@ -0,0 +1,14 @@ +import("system.logging"); +import("system.vars"); +import("system.result"); +import("system.neon"); + +var relid = vars.getString("$this.value"); + +if(vars.exists("$image.lookup_orgname") && vars.get("$image.lookup_orgname") != '') + result.string("Org_context"); +else if((relid == null || relid.trim() == "0") + && (vars.get("$sys.operatingstate") != neon.OPERATINGSTATE_NEW)) + result.string(null); +else + result.string("Org_context"); diff --git a/entity/Contract_entity/entityfields/relation_id/valueMappingProcess.js b/entity/Contract_entity/entityfields/relation_id/valueMappingProcess.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/entity/Contract_entity/entityfields/relation_id/valueProcess.js b/entity/Contract_entity/entityfields/relation_id/valueProcess.js index 2d085e3aff5..5d0a3cefc2f 100644 --- a/entity/Contract_entity/entityfields/relation_id/valueProcess.js +++ b/entity/Contract_entity/entityfields/relation_id/valueProcess.js @@ -6,4 +6,4 @@ if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW) { if(vars.exists("$param.RelId_param") && vars.get("$param.RelId_param") != null) result.string(vars.getString("$param.RelId_param")); -} \ No newline at end of file +} diff --git a/entity/Org_entity/Org_entity.aod b/entity/Org_entity/Org_entity.aod index a9befeedbf3..a62f9fe8253 100644 --- a/entity/Org_entity/Org_entity.aod +++ b/entity/Org_entity/Org_entity.aod @@ -254,6 +254,18 @@ </entityParameter> </children> </entityOutgoingField> + <entityIncomingField> + <name>ContractOrg_dfi</name> + <fieldType>DEPENDENCY_IN</fieldType> + <dependencies> + <entityDependency> + <name>0bcad8ff-3b4e-439f-ac30-464c052c9525</name> + <entityName>Contract_entity</entityName> + <fieldName>ContractOrg_dfo</fieldName> + <isOutgoing v="false" /> + </entityDependency> + </dependencies> + </entityIncomingField> </entityFields> <linkInformation> <linkInformation> diff --git a/neonView/ContractPreview_view/ContractPreview_view.aod b/neonView/ContractPreview_view/ContractPreview_view.aod index 302a4134d69..7ac9e76980d 100644 --- a/neonView/ContractPreview_view/ContractPreview_view.aod +++ b/neonView/ContractPreview_view/ContractPreview_view.aod @@ -11,6 +11,7 @@ <cardViewTemplate> <name>ContractHeader_template</name> <iconField>IMAGE</iconField> + <titleField>CONTRACTCODE_DISPLAY_fieldGroup</titleField> <descriptionField>RELATION_ID</descriptionField> <entityField>#ENTITY</entityField> </cardViewTemplate> @@ -19,10 +20,6 @@ <showDrawer v="true" /> <entityField>#ENTITY</entityField> <fields> - <entityFieldLink> - <name>6afd1b0d-4d73-47a0-a0a6-58dac448c783</name> - <entityField>CONTRACTTYPE</entityField> - </entityFieldLink> <entityFieldLink> <name>9101eee8-57b1-4bcf-a271-2501b7a3b842</name> <entityField>CONTRACTSTART</entityField> diff --git a/others/db_changes/data/example_contract/CONTRACT_42154311.xml b/others/db_changes/data/example_contract/CONTRACT_42154311.xml new file mode 100644 index 00000000000..c014dc405cd --- /dev/null +++ b/others/db_changes/data/example_contract/CONTRACT_42154311.xml @@ -0,0 +1,27 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="m.schroeger" id="c7ea5e6e-aff2-4cf5-95f1-f5ca1b350dd0"> + <insert tableName="CONTRACT"> + <column name="CONTRACTID" value="384c9d31-9923-4e6a-8a7f-2d2890470b70"/> + <column name="USER_NEW" value="Martin"/> + <column name="DATE_NEW" valueDate="2018-10-05T03:34:29"/> + <column name="RELATION_ID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/> + <column name="CONTRACTCODE" value="42154311"/> + <column name="PAYMENT" valueNumeric="2"/> + <column name="CONTRACTTYPE" valueNumeric="0"/> + <column name="CONTRACTSTATUS" valueNumeric="1"/> + <column name="CONTRACTEND" valueDate="2019-09-30T00:00:00"/> + <column name="CONTRACTSTART" valueDate="2018-10-01T00:00:00"/> + <column name="CONTRACTDUE" valueDate="2019-01-01T00:00:00"/> + </insert> + + <rollback> + <delete tableName="CONTRACT"> + <where>CONTRACTID = ?</where> + <whereParams> + <param value="384c9d31-9923-4e6a-8a7f-2d2890470b70"/> + </whereParams> + </delete> + </rollback> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/others/db_changes/masterChangelog.xml b/others/db_changes/masterChangelog.xml index 5541636da7e..433ed43984c 100644 --- a/others/db_changes/masterChangelog.xml +++ b/others/db_changes/masterChangelog.xml @@ -15,4 +15,5 @@ <include file="data/example_org/ORG_gfk.xml"/> <include file="data/example_pers/PERS_pfiffig.xml"/> <include file="data/example_pers/PERS_sommer.xml"/> + <include file="data/example_contract/CONTRACT_42154311.xml"/> </databaseChangeLog> diff --git a/process/Date_lib/Date_lib.aod b/process/Date_lib/Date_lib.aod new file mode 100644 index 00000000000..690eacb21d3 --- /dev/null +++ b/process/Date_lib/Date_lib.aod @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.7" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.1.7"> + <name>Date_lib</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <process>%aditoprj%/process/Date_lib/process.js</process> +</process> diff --git a/process/Date_lib/process.js b/process/Date_lib/process.js new file mode 100644 index 00000000000..116db949910 --- /dev/null +++ b/process/Date_lib/process.js @@ -0,0 +1,19 @@ +/** + * provides methods for interactions with dates + */ +function DateUtils(){ + + /** + * Validates two date inputs (beginning should always be before the end!) + * + * @param pStart {Number} + * @param pEnd {Number} + * + * @result {Boolean|null} Boolean if it was able to check smth or null if the input values were not valid + */ + this.validateBeginnBeforeEnd = function(pStart, pEnd) { + if (pStart == "" || pStart == null || pEnd == "" || pEnd == null) return null + return pStart <= pEnd; + } + +} \ No newline at end of file -- GitLab