diff --git a/.liquibase/Data_alias/basic/2020.2.0/Districts/alter_districtResponsibleDatatypes.xml b/.liquibase/Data_alias/basic/2020.2.0/Districts/alter_districtResponsibleDatatypes.xml index 0f1ffdd8ebb4c2ef6431a1cfba700363f236e25c..7865093566d927f59c40e287bb707ec886a9458d 100644 --- a/.liquibase/Data_alias/basic/2020.2.0/Districts/alter_districtResponsibleDatatypes.xml +++ b/.liquibase/Data_alias/basic/2020.2.0/Districts/alter_districtResponsibleDatatypes.xml @@ -10,4 +10,4 @@ <column name="VALIDTO" type="DATETIME" /> </addColumn> </changeSet> -</databaseChangeLog> \ No newline at end of file +</databaseChangeLog> \ No newline at end of file diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod index aa6f6d7503e128af347e2a003aacb8bbf9f1a904..854be4d73cc57097e0c0d5334b6fec4c3e4494a8 100644 --- a/aliasDefinition/Data_alias/Data_alias.aod +++ b/aliasDefinition/Data_alias/Data_alias.aod @@ -15891,8 +15891,20 @@ <isUnique v="false" /> <index v="false" /> <documentation></documentation> - <title></title> + <title>District</title> <description></description> + <customProperties> + <customBooleanProperty> + <name>log</name> + <global v="false" /> + <property v="true" /> + </customBooleanProperty> + <customJDitoProperty> + <name>translate4Log</name> + <global v="false" /> + <property>%aditoprj%/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/districtcontact/entityfields/district_id/customproperties/translate4log/property.js</property> + </customJDitoProperty> + </customProperties> </entityFieldDb> <entityFieldDb> <name>CONTACT_ID</name> diff --git a/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/districtcontact/entityfields/district_id/customproperties/translate4log/property.js b/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/districtcontact/entityfields/district_id/customproperties/translate4log/property.js new file mode 100644 index 0000000000000000000000000000000000000000..1107fb8c489e4ff36f2cfe85ee1607b6e5ec5098 --- /dev/null +++ b/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/districtcontact/entityfields/district_id/customproperties/translate4log/property.js @@ -0,0 +1,22 @@ +import("system.translate"); +import("Keyword_lib"); +import("KeywordRegistry_basic"); +import("District_lib"); +import("system.result"); +import("Loghistory_lib"); +import("Contact_lib"); + +var params = Translate4LogParams.load(); + +if (params.action == 'I') +{ + //Gebiet und Betreur umschlüsseln + var arrDistrictContact = DistrictUtils.getDataFromDistrictContact(params.rowId); + var districtName = DistrictUtils.getDistrictName(arrDistrictContact[0]); + var adviserName = ContactUtils.getTitleByContactId(arrDistrictContact[1]); + result.string(districtName + " (" + params.value + "); " + translate.text("Adviser") + ": " + adviserName); +} +else if (params.action == 'D') +{ + result.string(params.value); +} \ No newline at end of file diff --git a/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/districtcontact/entityfields/status/customproperties/translate4log/property.js b/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/districtcontact/entityfields/status/customproperties/translate4log/property.js index c079c7fd8009ca6915d731ed02160ad0e9d8ecfa..2c298584241dbb8701c02a1b7f5974471326113d 100644 --- a/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/districtcontact/entityfields/status/customproperties/translate4log/property.js +++ b/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/districtcontact/entityfields/status/customproperties/translate4log/property.js @@ -8,12 +8,17 @@ import("Contact_lib"); var params = Translate4LogParams.load(); -//Keyword umschlüsseln -var keyname = KeywordUtils.getViewValue($KeywordRegistry.contactStatus(), params.value); +//Statusänderung protokollieren +if (params.action == 'U') +{ + //Keyword umschlüsseln + var keyname = KeywordUtils.getViewValue($KeywordRegistry.contactStatus(), params.value); -//Gebiet und Betreur umschlüsseln -var arrDistrictContact = DistrictUtils.getDataFromDistrictContact(params.rowId); -var districtName = DistrictUtils.getDistrictName(arrDistrictContact[0]); -var adviserName = ContactUtils.getFullTitleByContactId(arrDistrictContact[1]) - -result.string(keyname + " (" + translate.text("District") + ": " + districtName + "; " + translate.text("Adviser") + ": " + adviserName + ")"); \ No newline at end of file + //Gebiet und Betreur umschlüsseln + var arrDistrictContact = DistrictUtils.getDataFromDistrictContact(params.rowId); + var districtName = DistrictUtils.getDistrictName(arrDistrictContact[0]); + //var adviserName = ContactUtils.getFullTitleByContactId(arrDistrictContact[1]); + var adviserName = ContactUtils.getTitleByContactId(arrDistrictContact[1]); + + result.string(keyname + " (" + translate.text("District") + ": " + districtName + "; " + translate.text("Adviser") + ": " + adviserName + ")"); +} \ No newline at end of file diff --git a/entity/DistrictContact_entity/DistrictContact_entity.aod b/entity/DistrictContact_entity/DistrictContact_entity.aod index 8286a522c2d89748e9ecf2d3b62a6af4abf37a10..56cffc5739509bcd270b3ad7ca418f1a1a730827 100644 --- a/entity/DistrictContact_entity/DistrictContact_entity.aod +++ b/entity/DistrictContact_entity/DistrictContact_entity.aod @@ -22,6 +22,8 @@ <consumer>Organisations</consumer> <groupable v="true" /> <linkedContext>Person</linkedContext> + <state>READONLY</state> + <valueProcess>%aditoprj%/entity/DistrictContact_entity/entityfields/contact_id/valueProcess.js</valueProcess> <displayValueProcess>%aditoprj%/entity/DistrictContact_entity/entityfields/contact_id/displayValueProcess.js</displayValueProcess> </entityField> <entityField> @@ -141,6 +143,12 @@ <entityName>DistrictResponsible_entity</entityName> <fieldName>DistrictResponsibleAdvisers</fieldName> </dependency> + <children> + <entityParameter> + <name>DistrictId_param</name> + <valueProcess>%aditoprj%/entity/DistrictContact_entity/entityfields/advisers/children/districtid_param/valueProcess.js</valueProcess> + </entityParameter> + </children> </entityConsumer> <entityConsumer> <name>Districts</name> @@ -175,6 +183,14 @@ <name>currentOrganisationId_param</name> <expose v="true" /> </entityParameter> + <entityParameter> + <name>ObjectId_param</name> + <expose v="true" /> + </entityParameter> + <entityParameter> + <name>RowId_param</name> + <expose v="true" /> + </entityParameter> </entityFields> <recordContainers> <dbRecordContainer> diff --git a/entity/DistrictContact_entity/entityfields/advisers/children/districtid_param/valueProcess.js b/entity/DistrictContact_entity/entityfields/advisers/children/districtid_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..a13a013fadcab4a35ad6a795015276b1fd16be0e --- /dev/null +++ b/entity/DistrictContact_entity/entityfields/advisers/children/districtid_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("system.result"); + +result.string(vars.get("$field.DISTRICT_ID")); \ No newline at end of file diff --git a/entity/DistrictContact_entity/entityfields/contact_id/valueProcess.js b/entity/DistrictContact_entity/entityfields/contact_id/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..bd8d4f8447e67f798cc0b1429919e71dec4401ad --- /dev/null +++ b/entity/DistrictContact_entity/entityfields/contact_id/valueProcess.js @@ -0,0 +1,4 @@ +import("system.result"); +import("system.vars"); + +result.string(vars.get("$param.currentOrganisationId_param")); \ No newline at end of file diff --git a/entity/DistrictContact_entity/recordcontainers/db/conditionProcess.js b/entity/DistrictContact_entity/recordcontainers/db/conditionProcess.js index f9e0b80adf18420f7f8acf47539c268adeccda6b..2847b1e2b17599d13ff5d26a5602608adfc20fbe 100644 --- a/entity/DistrictContact_entity/recordcontainers/db/conditionProcess.js +++ b/entity/DistrictContact_entity/recordcontainers/db/conditionProcess.js @@ -6,6 +6,13 @@ import("Sql_lib"); var organisationID = vars.get("$param.currentOrganisationId_param"); var cond = newWhere(); +if (vars.exists("$param.RowId_param") && vars.get("$param.RowId_param") && vars.exists("$param.ObjectId_param") && vars.get("$param.ObjectId_param")) +{ + cond.and("DISTRICTCONTACT.ADVISER_CONTACT_ID", newSelect("DISTRICTRESPONSIBLE.EMPLOYEE_CONTACT_ID") + .from("DISTRICTRESPONSIBLE") + .where("DISTRICTRESPONSIBLE.DISTRICTRESPONSIBLEID", "$param.RowId_param") + , SqlBuilder.IN()); +} if (organisationID) { cond.and("DISTRICTCONTACT.CONTACT_ID", organisationID); diff --git a/entity/DistrictResponsible_entity/DistrictResponsible_entity.aod b/entity/DistrictResponsible_entity/DistrictResponsible_entity.aod index ad1bbffb6bf0fe57bf17b54b8776ce01a0828c88..245c9ebe4dd7b0cba759977f90ee40f454697f03 100644 --- a/entity/DistrictResponsible_entity/DistrictResponsible_entity.aod +++ b/entity/DistrictResponsible_entity/DistrictResponsible_entity.aod @@ -5,6 +5,7 @@ <documentation>%aditoprj%/entity/DistrictResponsible_entity/documentation.adoc</documentation> <icon>VAADIN:GLOBE</icon> <title>District Responsible</title> + <grantDeleteProcess>%aditoprj%/entity/DistrictResponsible_entity/grantDeleteProcess.js</grantDeleteProcess> <contentTitleProcess>%aditoprj%/entity/DistrictResponsible_entity/contentTitleProcess.js</contentTitleProcess> <iconIdProcess>%aditoprj%/entity/DistrictResponsible_entity/iconIdProcess.js</iconIdProcess> <image>VAADIN:GLOBE</image> @@ -21,6 +22,7 @@ <linkedContext>Person</linkedContext> <mandatory v="true" /> <selectionMode>SINGLE</selectionMode> + <stateProcess>%aditoprj%/entity/DistrictResponsible_entity/entityfields/employee_contact_id/stateProcess.js</stateProcess> <displayValueProcess>%aditoprj%/entity/DistrictResponsible_entity/entityfields/employee_contact_id/displayValueProcess.js</displayValueProcess> </entityField> <entityField> @@ -209,6 +211,10 @@ <valueProcess>%aditoprj%/entity/DistrictResponsible_entity/entityfields/adviserstates/children/containername_param/valueProcess.js</valueProcess> <expose v="true" /> </entityParameter> + <entityParameter> + <name>ExcludedKeyIdsSubquery_param</name> + <valueProcess>%aditoprj%/entity/DistrictResponsible_entity/entityfields/adviserstates/children/excludedkeyidssubquery_param/valueProcess.js</valueProcess> + </entityParameter> </children> </entityConsumer> <entityField> diff --git a/entity/DistrictResponsible_entity/entityfields/adviserstates/children/excludedkeyidssubquery_param/valueProcess.js b/entity/DistrictResponsible_entity/entityfields/adviserstates/children/excludedkeyidssubquery_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..15b73f9705dc456af35c5d5e144cf88c436a79eb --- /dev/null +++ b/entity/DistrictResponsible_entity/entityfields/adviserstates/children/excludedkeyidssubquery_param/valueProcess.js @@ -0,0 +1,10 @@ +import("system.result"); +import("KeywordRegistry_basic"); +import("Sql_lib"); + +var cond = newSelect("AB_KEYWORD_ENTRY.KEYID") +.from("AB_KEYWORD_ENTRY") +.where("AB_KEYWORD_ENTRY.CONTAINER", $KeywordRegistry.contactStatus()) +.and("AB_KEYWORD_ENTRY.KEYID", $KeywordRegistry.contactStatus$inReview(), SqlBuilder.LIKE()); + +result.string(cond.toString()); \ No newline at end of file diff --git a/entity/DistrictResponsible_entity/entityfields/employee_contact_id/stateProcess.js b/entity/DistrictResponsible_entity/entityfields/employee_contact_id/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..b3376f73e33c298d8cefd14c9098bd6a64f62b38 --- /dev/null +++ b/entity/DistrictResponsible_entity/entityfields/employee_contact_id/stateProcess.js @@ -0,0 +1,20 @@ +import("system.neon"); +import("system.vars"); +import("system.result"); +import("Sql_lib"); +import("system.db"); + +var cond = newWhere(); + +var test = newSelect("COUNT(*)") +.from("DISTRICTCONTACT") +.join("DISTRICTRESPONSIBLE", "DISTRICTCONTACT.ADVISER_CONTACT_ID = DISTRICTRESPONSIBLE.EMPLOYEE_CONTACT_ID") +.where("DISTRICTRESPONSIBLE.EMPLOYEE_CONTACT_ID", vars.get("$field.EMPLOYEE_CONTACT_ID")) +.arrayColumn()[0]; + +if(test.toString() == 0){ + result.string(neon.COMPONENTSTATE_EDITABLE); +} +else{ + result.string(neon.COMPONENTSTATE_READONLY); +} \ No newline at end of file diff --git a/entity/DistrictResponsible_entity/grantDeleteProcess.js b/entity/DistrictResponsible_entity/grantDeleteProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..7039de6df63613d5985e26ef10ab10e90161e5c9 --- /dev/null +++ b/entity/DistrictResponsible_entity/grantDeleteProcess.js @@ -0,0 +1,13 @@ +import("Context_lib"); +import("system.vars"); +import("system.result"); +import("Entity_lib"); + +var rowId = vars.get("$field.DISTRICTRESPONSIBLEID"); +var currentContext = ContextUtils.getCurrentContextId(); + +var canDelete = new HasLinkedObjectTester() + .andNoEntityRows("DistrictContact_entity", "DistrictContacts", {ObjectId_param : currentContext, RowId_param : rowId}) //District Contact + .validate(); + +result.string(canDelete); \ No newline at end of file diff --git a/entity/District_entity/District_entity.aod b/entity/District_entity/District_entity.aod index 9b8b64b8204918ea1fbb962c46e5c9d3efc92f8c..c15588d76c0f7f0f5d1b05917ba42e7540a43a98 100644 --- a/entity/District_entity/District_entity.aod +++ b/entity/District_entity/District_entity.aod @@ -5,6 +5,8 @@ <documentation>%aditoprj%/entity/District_entity/documentation.adoc</documentation> <icon>VAADIN:GLOBE</icon> <title>District definition</title> + <grantDelete v="false" /> + <grantDeleteProcess>%aditoprj%/entity/District_entity/grantDeleteProcess.js</grantDeleteProcess> <contentTitleProcess>%aditoprj%/entity/District_entity/contentTitleProcess.js</contentTitleProcess> <iconIdProcess>%aditoprj%/entity/District_entity/iconIdProcess.js</iconIdProcess> <titlePlural></titlePlural> @@ -316,6 +318,7 @@ <isPageable v="false" /> <conditionProcess>%aditoprj%/entity/District_entity/recordcontainers/db/conditionProcess.js</conditionProcess> <orderClauseProcess>%aditoprj%/entity/District_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess> + <onDBDelete>%aditoprj%/entity/District_entity/recordcontainers/db/onDBDelete.js</onDBDelete> <cacheType>GLOBAL</cacheType> <cacheKeyProcess>%aditoprj%/entity/District_entity/recordcontainers/db/cacheKeyProcess.js</cacheKeyProcess> <linkInformation> diff --git a/entity/District_entity/grantDeleteProcess.js b/entity/District_entity/grantDeleteProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..7522748ad5fbe8f919791ccf756baa186da5b08a --- /dev/null +++ b/entity/District_entity/grantDeleteProcess.js @@ -0,0 +1,16 @@ +import("system.result"); +import("Sql_lib"); +import("system.vars"); + +//Ist das zu löschende Gebiet ein übergeordnetes Gebiet, dann ist das Löschen nicht erlaubt. +var districtId = vars.get("$field.DISTRICTID"); +var anzahl = newSelect("COUNT(*)") + .from("DISTRICT") + .where("DISTRICT.PARENTDISTRICT_DISTRICTID", districtId) + .cell(true); + +if (anzahl > 0) + result.string(false); +else + result.string(true); + diff --git a/entity/District_entity/recordcontainers/db/onDBDelete.js b/entity/District_entity/recordcontainers/db/onDBDelete.js new file mode 100644 index 0000000000000000000000000000000000000000..20387d3b81fded387ccec7197be53354a75fa1b6 --- /dev/null +++ b/entity/District_entity/recordcontainers/db/onDBDelete.js @@ -0,0 +1,16 @@ +import("Sql_lib"); +import("system.vars"); +import("system.db"); + +var condition; +var deleteArray = []; +var districtId = vars.get("$field.DISTRICTID"); + +//Gebiet wird gelöscht -> auch die Referenzen in den folgenden Tabellen löschen +condition = newWhere("DISTRICTCONTACT.DISTRICT_ID", districtId); +deleteArray.push(["DISTRICTCONTACT", condition.build()]); + +condition = newWhere("DISTRICTRESPONSIBLE.DISTRICT_ID", districtId); +deleteArray.push(["DISTRICTRESPONSIBLE", condition.build()]); + +db.deletes(deleteArray); \ No newline at end of file diff --git a/process/District_lib/process.js b/process/District_lib/process.js index a4160e6c1d08be4f6ef1f8f3157cebc177376f2c..8cf6f65ce504275cfa7114c4859e27888a92db8a 100644 --- a/process/District_lib/process.js +++ b/process/District_lib/process.js @@ -169,15 +169,15 @@ DistrictUtils.assignDistrict = function (pDistrictId, pAppliedFilter, pContactId "STATUS", "VALID_FROM", "VALID_UNTIL", - "ORIGIN"/*, + "ORIGIN", "USER_NEW", - "DATE_NEW"*/ + "DATE_NEW" ]; var updateArray = []; var colsUpdate = [ - "STATUS"/*, + "STATUS", "USER_EDIT", - "DATE_EDIT"*/ + "DATE_EDIT" ]; //Anlegen der Firmen-Betreuer-Datensätze in der Tabelle DISTRICTCONTACT @@ -215,9 +215,9 @@ DistrictUtils.assignDistrict = function (pDistrictId, pAppliedFilter, pContactId arrResponsibleIds[j][2], arrResponsibleIds[j][3], arrResponsibleIds[j][4], - $KeywordRegistry.districtOrigin$auto()/*, + $KeywordRegistry.districtOrigin$auto(), vars.get("$sys.user"), - vars.get("$sys.date")*/ + vars.get("$sys.date") ]; insertArray.push(["DISTRICTCONTACT", colsInsert, null, valsInsert]); } @@ -233,9 +233,9 @@ DistrictUtils.assignDistrict = function (pDistrictId, pAppliedFilter, pContactId for (var l=0; l<arrExistingIds.length; l++) { var valsUpdate = [ - $KeywordRegistry.contactStatus$inReview()/*, + $KeywordRegistry.contactStatus$inReview(), vars.get("$sys.user"), - vars.get("$sys.date")*/ + vars.get("$sys.date") ]; var condition = newWhere("DISTRICTCONTACT.DISTRICTCONTACTID", arrExistingIds[l][0]); updateArray.push(["DISTRICTCONTACT", colsUpdate, null, valsUpdate, condition.build()]);