diff --git a/.aditoprj/ignoredScanServiceTasks.json b/.aditoprj/ignoredScanServiceTasks.json index 1ba3e77ba9398cb9b521fa6b87cd1427243e295f..55389c3975437d54ff7ea48078b39cda2f338d4b 100644 --- a/.aditoprj/ignoredScanServiceTasks.json +++ b/.aditoprj/ignoredScanServiceTasks.json @@ -24,6 +24,12 @@ "description": "There is no index for the column \"TESTING_CONTACT_ID\" in the table \"BULKMAIL\" [59]", "groupName": "nb-tasklist-warning" }, + { + "target": "aliasDefinition/Data_alias_noAudit/Data_alias_noAudit.aod", + "line": -1, + "description": "The table \"DATABASECHANGELOG\" has no primary key [65]", + "groupName": "nb-tasklist-warning" + }, { "target": "aliasDefinition/_____SYSTEMALIAS/_____SYSTEMALIAS.aod", "line": -1, diff --git a/.aditoprj/project.version b/.aditoprj/project.version index 94b3c6aab89bbcc9e3c5433f62e4fa30fa7bee5b..c476bb59ef66310a37a8475cfb85144ac7b3bc58 100644 --- a/.aditoprj/project.version +++ b/.aditoprj/project.version @@ -1,3 +1,3 @@ #This file is generated by ADITO designer. Do NOT delete or modify! -#Thu Dec 17 10:59:19 CET 2020 -version=6.2.1 +#Mon May 17 10:12:06 CEST 2021 +version=6.2.3 diff --git a/.liquibase/Data_alias/basic/2021.0.2/Checklists/alter_ChecklistEntry.xml b/.liquibase/Data_alias/basic/2021.0.2/Checklists/alter_ChecklistEntry.xml index 924c2b6c716d96449847bc94fe8df2f991ba1749..440e5ab493cf19b4a250828eb4a71d3f73cd2dab 100644 --- a/.liquibase/Data_alias/basic/2021.0.2/Checklists/alter_ChecklistEntry.xml +++ b/.liquibase/Data_alias/basic/2021.0.2/Checklists/alter_ChecklistEntry.xml @@ -22,6 +22,13 @@ <param value="AUTO"/> </whereParams> </update> + <update tableName="CHECKLISTENTRY"> + <column name="AUTO" valueNumeric="0"/> + <where>TYPE = ?</where> + <whereParams> + <param value="MANUAL"/> + </whereParams> + </update> <!--and add not Null constraint--> <addNotNullConstraint columnDataType="TINYINT" diff --git a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/AddBulkmailStatus.xml b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/AddBulkmailStatus.xml new file mode 100644 index 0000000000000000000000000000000000000000..b16135cdcef372bc1000c1806faffaa8a665e329 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/AddBulkmailStatus.xml @@ -0,0 +1,39 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="m.groppe" id="3a4158da-b715-49c7-9f53-850990382b2c"> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="a7d5d212-f99f-4200-8872-b24e7de2cc37"/> + <column name="KEYID" value="BULKMAILPLANNED"/> + <column name="TITLE" value="Planned"/> + <column name="CONTAINER" value="BulkMailStatus"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="76fc02b9-a1b6-4c76-bdd5-a52d0e1ef286"/> + <column name="SORTING" valueNumeric="4"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="1"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="1f257472-bf37-4c66-972d-8bbb5ffcd883"/> + <column name="KEYID" value="BULKMAILMISSED"/> + <column name="TITLE" value="Missed"/> + <column name="CONTAINER" value="BulkMailStatus"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="76fc02b9-a1b6-4c76-bdd5-a52d0e1ef286"/> + <column name="SORTING" valueNumeric="5"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="1"/> + </insert> + <insert tableName="AB_KEYWORD_ATTRIBUTERELATION"> + <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="89a525b1-c479-4b54-82dc-6e2a8283f25e"/> + <column name="AB_KEYWORD_ATTRIBUTE_ID" value="ec51253e-9b45-468d-aafa-42331e54f32b"/> + <column name="AB_KEYWORD_ENTRY_ID" value="a7d5d212-f99f-4200-8872-b24e7de2cc37"/> + <column name="CHAR_VALUE" value="VAADIN:ENVELOPE_OPEN"/> + </insert> + <insert tableName="AB_KEYWORD_ATTRIBUTERELATION"> + <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="1f257472-bf37-4c66-972d-8bbb5ffcd883"/> + <column name="AB_KEYWORD_ATTRIBUTE_ID" value="ec51253e-9b45-468d-aafa-42331e54f32b"/> + <column name="AB_KEYWORD_ENTRY_ID" value="1f257472-bf37-4c66-972d-8bbb5ffcd883"/> + <column name="CHAR_VALUE" value="VAADIN:ENVELOPE_OPEN"/> + </insert> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_workflows/ACT_RE_DEPLOYMENT.xml b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/AlterBulkmail.xml similarity index 56% rename from .liquibase/_____SYSTEMALIAS/basic/_demoData/example_workflows/ACT_RE_DEPLOYMENT.xml rename to .liquibase/Data_alias/basic/2021.0.3/Bulkmail/AlterBulkmail.xml index 9852f8a5418497e88cfc45820677fdd73369c37e..ebacbeeb5e5d87e136ee320d79dbba2b3d10d184 100644 --- a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_workflows/ACT_RE_DEPLOYMENT.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/AlterBulkmail.xml @@ -1,13 +1,10 @@ <?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="s.listl" id="bf2a6db428204cf4a5edde8a312339e2"> - <preConditions onFail="CONTINUE"> - <tableExists tableName="ACT_RE_DEPLOYMENT"/> - </preConditions> - <insert tableName="ACT_RE_DEPLOYMENT"> - <column name="KEY_" value="offerVerification_neu"/> - <column name="ID_" value="1"/> - <column name="DEPLOY_TIME_" valueDate="2020-02-05T12:15:07"/> - </insert> + <changeSet author="m.groppe" id="96816f54-3067-470d-b698-dc7ad7685d84"> + <addColumn tableName="BULKMAIL"> + <column name="DATE_TO_SEND" type="DATETIME"/> + <column name="INTEREST_ID" type="char(36)"/> + </addColumn> + <renameColumn tableName="BULKMAIL" oldColumnName="SENDER" newColumnName="SENDER_EMAIL_ADDRESS" columnDataType ="varchar(50)"/> </changeSet> </databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_workflows/OfferCheck.xml b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/AlterBulkmailRecipient.xml similarity index 66% rename from .liquibase/_____SYSTEMALIAS/basic/_demoData/example_workflows/OfferCheck.xml rename to .liquibase/Data_alias/basic/2021.0.3/Bulkmail/AlterBulkmailRecipient.xml index cedeeb547f504e4d997bca0f162fdcc233a3467b..ba4cce665048da9703c2ede240607bf0f5bc52d7 100644 --- a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_workflows/OfferCheck.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/AlterBulkmailRecipient.xml @@ -1,6 +1,8 @@ <?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"> - <include relativeToChangelogFile="true" file="ACT_RE_DEPLOYMENT.xml"/> - <include relativeToChangelogFile="true" file="ACT_GE_BYTEARRAY.xml"/> - <include relativeToChangelogFile="true" file="ACT_RE_PROCDEF.xml"/> -</databaseChangeLog> + <changeSet author="m.groppe" id="5d43aca9-3344-4b54-981d-73306123e18f"> + <addColumn tableName="BULKMAILRECIPIENT"> + <column name="IS_TEST_RECIPIENT" type="TINYINT"/> + </addColumn> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/addDeviceTypeKeyword.xml b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/addDeviceTypeKeyword.xml new file mode 100644 index 0000000000000000000000000000000000000000..2e5fef20dcf00f187275ba5a7d3ccc3b5bc4cc3c --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/addDeviceTypeKeyword.xml @@ -0,0 +1,65 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="m.groppe" id="15e13453-42c1-413e-bc0d-611a23486890"> + + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="d37c3935-c029-44d5-b19d-af7c3a2a21dd"/> + <column name="NAME" value="DeviceType"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="54b767c8-5347-4e1d-95db-96f6d40f9fb7"/> + <column name="KEYID" value="console"/> + <column name="TITLE" value="Console"/> + <column name="CONTAINER" value="DeviceType"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="d37c3935-c029-44d5-b19d-af7c3a2a21dd"/> + <column name="SORTING" valueNumeric="0"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="1"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="de0f5a77-bbb4-4109-bf93-3c0807239980"/> + <column name="KEYID" value="mobile"/> + <column name="TITLE" value="Mobile"/> + <column name="CONTAINER" value="DeviceType"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="d37c3935-c029-44d5-b19d-af7c3a2a21dd"/> + <column name="SORTING" valueNumeric="1"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="1"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="806143e9-be70-47ff-ba37-5bc64fa88f3b"/> + <column name="KEYID" value="tablet"/> + <column name="TITLE" value="Tablet"/> + <column name="CONTAINER" value="DeviceType"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="d37c3935-c029-44d5-b19d-af7c3a2a21dd"/> + <column name="SORTING" valueNumeric="2"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="1"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="689e5978-ddb2-46f8-98a0-97ec0a95ee6f"/> + <column name="KEYID" value="smarttv"/> + <column name="TITLE" value="Smart TV"/> + <column name="CONTAINER" value="DeviceType"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="d37c3935-c029-44d5-b19d-af7c3a2a21dd"/> + <column name="SORTING" valueNumeric="3"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="1"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="fba7888e-a1a6-45f4-8389-e5c4b98ca13b"/> + <column name="KEYID" value="desktop"/> + <column name="TITLE" value="Desktop"/> + <column name="CONTAINER" value="DeviceType"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="d37c3935-c029-44d5-b19d-af7c3a2a21dd"/> + <column name="SORTING" valueNumeric="4"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="1"/> + </insert> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/changelog.xml new file mode 100644 index 0000000000000000000000000000000000000000..60465db554d1dc4f1fc0805902154a683bd0a206 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/changelog.xml @@ -0,0 +1,13 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <include relativeToChangelogFile="true" file="createLinkClicks.xml"/> + <include relativeToChangelogFile="true" file="AlterBulkmail.xml"/> + <include relativeToChangelogFile="true" file="AddBulkmailStatus.xml"/> + <include relativeToChangelogFile="true" file="createMailLog.xml"/> + <include relativeToChangelogFile="true" file="createMailRun.xml"/> + <include relativeToChangelogFile="true" file="createBulkMailTestRecipient.xml"/> + <include relativeToChangelogFile="true" file="AlterBulkmailRecipient.xml"/> + <include relativeToChangelogFile="true" file="addDeviceTypeKeyword.xml"/> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createBulkMailTestRecipient.xml b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createBulkMailTestRecipient.xml new file mode 100644 index 0000000000000000000000000000000000000000..da84568e13322b6868c6374d3af60b59942210f1 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createBulkMailTestRecipient.xml @@ -0,0 +1,13 @@ +<?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-4.1.xsd"> + <changeSet author="m.groppe" id="6e4507c7-32fe-4f6b-a7c2-80d379ef364b"> + <createTable tableName="BULKMAILTESTRECIPIENT"> + <column name="BULKMAILTESTRECIPIENTID" type="CHAR(36)"> + <constraints nullable="false" primaryKey="true"/> + </column> + <column name="BULKMAIL_ID" type="CHAR(36)"/> + <column name="CONTACT_ID" type="CHAR(36)"/> + <column name="EMAIL_ADDRESS" type="VARCHAR(255)"/> + </createTable> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createLinkClicks.xml b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createLinkClicks.xml new file mode 100644 index 0000000000000000000000000000000000000000..be5283ebc30f1f5ca9c58d5bfb451b6186d8c2f1 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createLinkClicks.xml @@ -0,0 +1,20 @@ +<?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-4.1.xsd"> + <changeSet author="m.groppe" id="e60dc52b-87dc-4f73-80e7-adc5b46d6935"> + <createTable tableName="WEBLINK_CLICK"> + <column name="WEBLINK_CLICKID" type="CHAR(36)"> + <constraints nullable="false" primaryKey="true" primaryKeyName="PK_WEBLINK_CLICKID"/> + </column> + <column name="IP_ADDRESS" type="VARCHAR(50)"/> + <column name="WEBLINK_ID" type="CHAR(36)"/> + <column name="MAIL_LOG_ID" type="CHAR(36)"/> + <column name="DEVICE_TYPE" type="VARCHAR(255)"/> + <column name="OPERATING_SYSTEM" type="VARCHAR(255)"/> + <column name="BROWSER" type="VARCHAR(255)"/> + <column name="DATE_OPENED" type="datetime"/> + </createTable> + <createIndex tableName="WEBLINK_CLICK" indexName="IDX_WEBLINK_CLICK_MAIL_LOG_ID"> + <column name="MAIL_LOG_ID"/> + </createIndex> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createMailLog.xml b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createMailLog.xml new file mode 100644 index 0000000000000000000000000000000000000000..3e7a43a293c8cff35cd5e05932adec880938aa7f --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createMailLog.xml @@ -0,0 +1,25 @@ +<?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-4.1.xsd"> + <changeSet author="m.groppe" id="9d8f3580-92c5-423e-b709-09383969ccf0"> + <createTable tableName="MAIL_LOG"> + <column name="MAIL_LOGID" type="CHAR(36)"> + <constraints nullable="false" primaryKey="true"/> + </column> + <column name="MAIL_RUN_ID" type="CHAR(36)"/> + <column name="CONTACT_ID" type="CHAR(36)"/> + <column name="STATUS" type="VARCHAR(36)"/> + <column name="ERRORMESSAGE" type="NCLOB"/> + <column name="SENDER_EMAIL" type="VARCHAR(255)"/> + <column name="RECIPIENT_EMAIL" type="VARCHAR(255)"/> + <column name="MAILING_SUBJECT" type="VARCHAR(100)"/> + <column name="DATE_SEND" type ="DATETIME"/> + <column name="OPENER_LINK_CLICK_ID" type="char(36)"/> + </createTable> + <createIndex tableName="MAIL_LOG" indexName="IDX_MAIL_LOG_MAIL_RUN_ID"> + <column name="MAIL_RUN_ID"/> + </createIndex> + <createIndex tableName="MAIL_LOG" indexName="IDX_OPENER_LINK_CLICK_ID"> + <column name="OPENER_LINK_CLICK_ID"/> + </createIndex> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createMailRun.xml b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createMailRun.xml new file mode 100644 index 0000000000000000000000000000000000000000..7ac6729001459d9f30a229b65219231d5f025333 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createMailRun.xml @@ -0,0 +1,20 @@ +<?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-4.1.xsd"> + <changeSet author="m.groppe" id="6c910d60-43b1-400b-8e31-e3a1a93155e6"> + <createTable tableName="MAIL_RUN"> + <column name="MAIL_RUNID" type="CHAR(36)"> + <constraints nullable="false" primaryKey="true"/> + </column> + <column name="OBJECT_ROWID" type="CHAR(36)"/> + <column name="OBJECT_TYPE" type="VARCHAR(63)"/> + <column name="STATUS" type="VARCHAR(100)"/> + <column name="TESTRUN" type= "smallint"/> + <column name="INTEREST_ID" type="CHAR(36)"/> + <column name="DATE_RUN_START" type="datetime"/> + <column name="DATE_RUN_FINISHED" type="datetime"/> + </createTable> + <createIndex tableName="MAIL_RUN" indexName="IDX_MAIL_RUN_INTEREST_ID"> + <column name="INTEREST_ID"/> + </createIndex> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/Checklists/alter_checklistentryvalue.xml b/.liquibase/Data_alias/basic/2021.0.3/Checklists/alter_checklistentryvalue.xml new file mode 100644 index 0000000000000000000000000000000000000000..f62b23a4c538ec2657020161d42c683aa39b2c75 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/Checklists/alter_checklistentryvalue.xml @@ -0,0 +1,13 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="p.neub" id="4aa51e9d-499d-42e8-9cfe-dda36abaa5d0"> + <addColumn tableName="CHECKLISTENTRYVALUE"> + <column name="DONEUSER" type="VARCHAR(63)"/> + </addColumn> + <addColumn tableName="CHECKLISTENTRYVALUE"> + <column name="DONEDATE" type="TIMESTAMP"/> + </addColumn> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/Checklists/alter_salesproject_phase.xml b/.liquibase/Data_alias/basic/2021.0.3/Checklists/alter_salesproject_phase.xml new file mode 100644 index 0000000000000000000000000000000000000000..7f258a8afe937102296271003abab10fb3df85fc --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/Checklists/alter_salesproject_phase.xml @@ -0,0 +1,10 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="p.neub" id="eba94911-c6d4-4b26-8466-1a811d380908"> + <addColumn tableName="SALESPROJECTPHASEDEFINITION"> + <column name="AUTOPROBABILITY" type="DECIMAL(6, 2)"/> + </addColumn> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/Checklists/change_phase_translation.xml b/.liquibase/Data_alias/basic/2021.0.3/Checklists/change_phase_translation.xml new file mode 100644 index 0000000000000000000000000000000000000000..a9c905e3140bee13d7a4972bd71e74c8b51f0796 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/Checklists/change_phase_translation.xml @@ -0,0 +1,28 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="p.neub" id="79f72a80-0830-4185-a9cd-bb51b3d0c432"> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="TITLE" value="${SALESPROJECT_PROSPECT}"/> + <where>AB_KEYWORD_ENTRYID = ?</where> + <whereParams> + <param value="5729d9c0-3884-4cd4-b6e0-009718913914"/> + </whereParams> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="TITLE" value="${SALESPROJECT_LEAD}"/> + <where>AB_KEYWORD_ENTRYID = ?</where> + <whereParams> + <param value="98f46a57-a27d-4394-990a-c13513bbea3b"/> + </whereParams> + </update> + <update tableName="AB_KEYWORD_ENTRY"> + <column name="TITLE" value="${SALESPROJECT_CONTACT}"/> + <where>AB_KEYWORD_ENTRYID = ?</where> + <whereParams> + <param value="bc24b535-a226-47a3-b43d-bd739f8c9237"/> + </whereParams> + </update> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/Checklists/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/Checklists/changelog.xml new file mode 100644 index 0000000000000000000000000000000000000000..b4a899dadbbb5ed2b7523648bb367755a61ac04c --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/Checklists/changelog.xml @@ -0,0 +1,13 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <include relativeToChangelogFile="true" file="update_phase.xml"/> + <include relativeToChangelogFile="true" file="update_checklistentry.xml"/> + <include relativeToChangelogFile="true" file="update_salesproject.xml"/> + <include relativeToChangelogFile="true" file="update_keyword.xml"/> + <include relativeToChangelogFile="true" file="update_ab_attributeusage_salesprojectorigin.xml"/> + <include relativeToChangelogFile="true" file="change_phase_translation.xml"/> + <include relativeToChangelogFile="true" file="alter_salesproject_phase.xml"/> + <include relativeToChangelogFile="true" file="alter_checklistentryvalue.xml"/> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/Checklists/update_ab_attributeusage_salesprojectorigin.xml b/.liquibase/Data_alias/basic/2021.0.3/Checklists/update_ab_attributeusage_salesprojectorigin.xml new file mode 100644 index 0000000000000000000000000000000000000000..e862924805fe7983d1720ca09354d22cb29e5850 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/Checklists/update_ab_attributeusage_salesprojectorigin.xml @@ -0,0 +1,56 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="p.neub" id="cdd3790e-0f62-4169-9e74-c096dc56ede3"> + <insert tableName="AB_ATTRIBUTEUSAGE"> + <column name="MAX_COUNT" valueNumeric="1"/> + <column name="AB_ATTRIBUTEUSAGEID" value="47cffdf2-75b0-4395-8d3f-f8b4e1ecb3e6"/> + <column name="OBJECT_TYPE" value="Salesproject"/> + <column name="MIN_COUNT"/> + <column name="AB_ATTRIBUTE_ID" value="a6eee141-5ed6-4b87-986f-29e3fdccaf13"/> + </insert> + <insert tableName="AB_ATTRIBUTEUSAGE"> + <column name="MAX_COUNT" valueNumeric="1"/> + <column name="AB_ATTRIBUTEUSAGEID" value="dc9d8f2c-8381-4299-9b2a-d884852139c3"/> + <column name="OBJECT_TYPE" value="Salesproject"/> + <column name="MIN_COUNT"/> + <column name="AB_ATTRIBUTE_ID" value="d0ae40d2-1a7f-45f6-bb0c-20ce6ae7efe2"/> + </insert> + <insert tableName="AB_ATTRIBUTEUSAGE"> + <column name="MAX_COUNT" valueNumeric="1"/> + <column name="AB_ATTRIBUTEUSAGEID" value="16a1a657-f7d5-413c-9ec4-fb640c12d2b6"/> + <column name="OBJECT_TYPE" value="Salesproject"/> + <column name="MIN_COUNT"/> + <column name="AB_ATTRIBUTE_ID" value="956622a7-03b3-42a4-a7ef-f8936d92cff9"/> + </insert> + <insert tableName="AB_ATTRIBUTEUSAGE"> + <column name="MAX_COUNT" valueNumeric="1"/> + <column name="AB_ATTRIBUTEUSAGEID" value="d1c2cfac-f222-4022-9757-cea993c52bac"/> + <column name="OBJECT_TYPE" value="Salesproject"/> + <column name="MIN_COUNT"/> + <column name="AB_ATTRIBUTE_ID" value="f0f0b150-ea60-46e5-ba4f-727c78c993d0"/> + </insert> + <insert tableName="AB_ATTRIBUTEUSAGE"> + <column name="MAX_COUNT" valueNumeric="1"/> + <column name="AB_ATTRIBUTEUSAGEID" value="6f7972fb-8d04-4a81-a989-76a0cfb25d4f"/> + <column name="OBJECT_TYPE" value="Salesproject"/> + <column name="MIN_COUNT"/> + <column name="AB_ATTRIBUTE_ID" value="c5f8b5f7-ddc0-4c88-bebd-be96fd37bb9c"/> + </insert> + <insert tableName="AB_ATTRIBUTEUSAGE"> + <column name="MAX_COUNT" valueNumeric="1"/> + <column name="AB_ATTRIBUTEUSAGEID" value="789507e9-b665-46db-9c6d-0efee34a3f38"/> + <column name="OBJECT_TYPE" value="Salesproject"/> + <column name="MIN_COUNT"/> + <column name="AB_ATTRIBUTE_ID" value="262a8fbe-d6ef-4949-87ce-6202967136d7"/> + </insert> + <insert tableName="AB_ATTRIBUTEUSAGE"> + <column name="MAX_COUNT" valueNumeric="1"/> + <column name="AB_ATTRIBUTEUSAGEID" value="a940b942-f5b8-4108-b986-9803e282ca3c"/> + <column name="OBJECT_TYPE" value="Salesproject"/> + <column name="MIN_COUNT"/> + <column name="AB_ATTRIBUTE_ID" value="67edd12f-93cc-45d4-b86a-b59d19936442"/> + </insert> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/Checklists/update_checklistentry.xml b/.liquibase/Data_alias/basic/2021.0.3/Checklists/update_checklistentry.xml new file mode 100644 index 0000000000000000000000000000000000000000..384be08ae0fb2cad74820bf26b5536809a3af1b7 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/Checklists/update_checklistentry.xml @@ -0,0 +1,53 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="p.neub" id="eb84935b-98d4-45a5-8e67-7188bdd76135"> + <delete tableName="CHECKLISTENTRYVALUE"> + <where>CHECKLISTENTRYVALUEID = ?</where> + <whereParams> + <param value="c4dc8c1e-e291-4d3f-8b36-cd8a0960abbf"/> + </whereParams> + </delete> + <delete tableName="CHECKLISTENTRYVALUE"> + <where>CHECKLISTENTRYVALUEID = ?</where> + <whereParams> + <param value="e12dbddc-301f-4da5-b48d-3fabad4c8634"/> + </whereParams> + </delete> + + <!--Contact--> + <update tableName="CHECKLISTENTRY"> + <column name="CHECKLIST_ID" value="179dcc0d-e6fa-411d-b5ee-cb25b9735dbe"></column> + <where>CHECKLIST_ID = ?</where> + <whereParams> + <param value="179dcc0d-e6fa-411d-b5ee-cb25b9735dbe"/> + </whereParams> + </update> + + <!--Lead--> + <update tableName="CHECKLISTENTRY"> + <column name="CHECKLIST_ID" value="3d0f1d25-cee8-4b83-a0de-3fded83ff9c4"></column> + <where>CHECKLIST_ID = ?</where> + <whereParams> + <param value="cb340ed2-ea49-45bb-a7a0-1a4f88d6e138"/> + </whereParams> + </update> + <update tableName="CHECKLISTENTRY"> + <column name="CHECKLIST_ID" value="3d0f1d25-cee8-4b83-a0de-3fded83ff9c4"></column> + <where>CHECKLIST_ID = ?</where> + <whereParams> + <param value="c2bb548c-2f0c-45be-9e49-2ebf86bd6ab8"/> + </whereParams> + </update> + + <!--Offer--> + <update tableName="CHECKLISTENTRY"> + <column name="CHECKLIST_ID" value="0f95ce44-3b0d-417b-969f-f84897868558"></column> + <where>CHECKLIST_ID = ?</where> + <whereParams> + <param value="c7b847b1-934a-4592-8c10-53da1d43dc4c"/> + </whereParams> + </update> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/Checklists/update_keyword.xml b/.liquibase/Data_alias/basic/2021.0.3/Checklists/update_keyword.xml new file mode 100644 index 0000000000000000000000000000000000000000..db309c871c68e5f9c9b02f6904d23cc363da15ec --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/Checklists/update_keyword.xml @@ -0,0 +1,190 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="p.neub" id="79f72a80-0830-4185-a9cd-bb51b3d0c432"> + <!--long names--> + <delete tableName="AB_KEYWORD_ATTRIBUTE"> + <where>AB_KEYWORD_ATTRIBUTEID = ?</where> + <whereParams> + <param value="f1413a2f-6631-4255-9dc9-a28e6eb30497"/> + </whereParams> + </delete> + <delete tableName="AB_KEYWORD_ATTRIBUTERELATION"> + <where>AB_KEYWORD_ATTRIBUTERELATIONID = ?</where> + <whereParams> + <param value="4b4045ac-913c-4618-b6be-9458c2094d21"/> + </whereParams> + </delete> + <delete tableName="AB_KEYWORD_ATTRIBUTERELATION"> + <where>AB_KEYWORD_ATTRIBUTERELATIONID = ?</where> + <whereParams> + <param value="b6a9f74b-bfc0-41b5-ac97-48f059cd1051"/> + </whereParams> + </delete> + <delete tableName="AB_KEYWORD_ATTRIBUTERELATION"> + <where>AB_KEYWORD_ATTRIBUTERELATIONID = ?</where> + <whereParams> + <param value="77370a25-7b08-4a75-b09b-ff806c184a12"/> + </whereParams> + </delete> + <delete tableName="AB_KEYWORD_ATTRIBUTERELATION"> + <where>AB_KEYWORD_ATTRIBUTERELATIONID = ?</where> + <whereParams> + <param value="16fd4267-46d0-4d66-8241-ad620ba359e0"/> + </whereParams> + </delete> + <delete tableName="AB_KEYWORD_ATTRIBUTERELATION"> + <where>AB_KEYWORD_ATTRIBUTERELATIONID = ?</where> + <whereParams> + <param value="846c6387-56b0-45b5-8f4b-71f1177d7c25"/> + </whereParams> + </delete> + <delete tableName="AB_KEYWORD_ATTRIBUTERELATION"> + <where>AB_KEYWORD_ATTRIBUTERELATIONID = ?</where> + <whereParams> + <param value="4284c1b3-c217-43b5-a06f-462626aadfdc"/> + </whereParams> + </delete> + <delete tableName="AB_KEYWORD_ATTRIBUTERELATION"> + <where>AB_KEYWORD_ATTRIBUTERELATIONID = ?</where> + <whereParams> + <param value="945097dd-590f-4c53-bb33-5d425516495e"/> + </whereParams> + </delete> + <delete tableName="AB_KEYWORD_ATTRIBUTERELATION"> + <where>AB_KEYWORD_ATTRIBUTERELATIONID = ?</where> + <whereParams> + <param value="440bd4c0-9d2a-4adc-a4ee-15aa8109a265"/> + </whereParams> + </delete> + + <!--icons--> + <delete tableName="AB_KEYWORD_ATTRIBUTERELATION"> + <where>AB_KEYWORD_ATTRIBUTERELATIONID = ?</where> + <whereParams> + <param value="10974128-6961-43eb-9605-e747c1b795cd"/> + </whereParams> + </delete> + <delete tableName="AB_KEYWORD_ATTRIBUTERELATION"> + <where>AB_KEYWORD_ATTRIBUTERELATIONID = ?</where> + <whereParams> + <param value="d487ac11-b85b-4489-89e1-1e93353ad9e9"/> + </whereParams> + </delete> + <delete tableName="AB_KEYWORD_ATTRIBUTERELATION"> + <where>AB_KEYWORD_ATTRIBUTERELATIONID = ?</where> + <whereParams> + <param value="d109b169-f14a-4383-af43-f30c6d357971"/> + </whereParams> + </delete> + <delete tableName="AB_KEYWORD_ATTRIBUTERELATION"> + <where>AB_KEYWORD_ATTRIBUTERELATIONID = ?</where> + <whereParams> + <param value="dbe97653-4b14-4f53-8bd8-ea36714d20e7"/> + </whereParams> + </delete> + <delete tableName="AB_KEYWORD_ATTRIBUTERELATION"> + <where>AB_KEYWORD_ATTRIBUTERELATIONID = ?</where> + <whereParams> + <param value="f800d56a-f1e7-443b-849f-e041ff99f70a"/> + </whereParams> + </delete> + <delete tableName="AB_KEYWORD_ATTRIBUTERELATION"> + <where>AB_KEYWORD_ATTRIBUTERELATIONID = ?</where> + <whereParams> + <param value="47b06455-e68b-4c1f-a174-6f5c108b0369"/> + </whereParams> + </delete> + <insert tableName="AB_KEYWORD_ATTRIBUTERELATION"> + <column name="AB_KEYWORD_ENTRY_ID" value="bc24b535-a226-47a3-b43d-bd739f8c9237"/> + <column name="AB_KEYWORD_ATTRIBUTE_ID" value="93d60e4b-e984-423e-b97f-d2abf61de41d"/> + <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="b5c5534f-c3de-4c20-ace6-6edfebad60d7"/> + <column name="CHAR_VALUE" value="NEON:NQC"/> + </insert> + <insert tableName="AB_KEYWORD_ATTRIBUTERELATION"> + <column name="AB_KEYWORD_ENTRY_ID" value="98f46a57-a27d-4394-990a-c13513bbea3b"/> + <column name="AB_KEYWORD_ATTRIBUTE_ID" value="93d60e4b-e984-423e-b97f-d2abf61de41d"/> + <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="3fb1d15f-be69-429c-9ca5-a48cdb7156ee"/> + <column name="CHAR_VALUE" value="NEON:MAL"/> + </insert> + <insert tableName="AB_KEYWORD_ATTRIBUTERELATION"> + <column name="AB_KEYWORD_ENTRY_ID" value="5729d9c0-3884-4cd4-b6e0-009718913914"/> + <column name="AB_KEYWORD_ATTRIBUTE_ID" value="93d60e4b-e984-423e-b97f-d2abf61de41d"/> + <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="d8d7f9e9-4b1b-43fb-9224-f72b2ee1bcbb"/> + <column name="CHAR_VALUE" value="NEON:MQL"/> + </insert> + + <!--keywords--> + <!--keywords.contact--> + <delete tableName="AB_KEYWORD_ENTRY"> + <where>AB_KEYWORD_ENTRYID = ?</where> + <whereParams> + <param value="b42caac9-8f8f-46e5-9f1c-d121cdf3ad8f"/> + </whereParams> + </delete> + <delete tableName="AB_KEYWORD_ENTRY"> + <where>AB_KEYWORD_ENTRYID = ?</where> + <whereParams> + <param value="028af5dd-1071-4108-8685-ed7124376706"/> + </whereParams> + </delete> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="CONTAINER" value="SalesprojectPhase"/> + <column name="SORTING" valueNumeric="0"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="923217a2-991e-444a-9a86-c3f56ba90f93"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + <column name="KEYID" value="SALPROJPHASECONTACT"/> + <column name="AB_KEYWORD_ENTRYID" value="bc24b535-a226-47a3-b43d-bd739f8c9237"/> + <column name="TITLE" value="Contact"/> + </insert> + <!--keywords.lead--> + <delete tableName="AB_KEYWORD_ENTRY"> + <where>AB_KEYWORD_ENTRYID = ?</where> + <whereParams> + <param value="8a2d19c9-bc32-437e-9261-78ed30110e92"/> + </whereParams> + </delete> + <delete tableName="AB_KEYWORD_ENTRY"> + <where>AB_KEYWORD_ENTRYID = ?</where> + <whereParams> + <param value="46f55a58-dbe4-40ae-9306-481df9095088"/> + </whereParams> + </delete> + <delete tableName="AB_KEYWORD_ENTRY"> + <where>AB_KEYWORD_ENTRYID = ?</where> + <whereParams> + <param value="afa8cf58-07e8-4ee9-b24e-96cb6fa76aec"/> + </whereParams> + </delete> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="CONTAINER" value="SalesprojectPhase"/> + <column name="SORTING" valueNumeric="1"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="923217a2-991e-444a-9a86-c3f56ba90f93"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + <column name="KEYID" value="SALPROJPHASELEAD"/> + <column name="AB_KEYWORD_ENTRYID" value="98f46a57-a27d-4394-990a-c13513bbea3b"/> + <column name="TITLE" value="Lead"/> + </insert> + <!--keywords.offer--> + <delete tableName="AB_KEYWORD_ENTRY"> + <where>AB_KEYWORD_ENTRYID = ?</where> + <whereParams> + <param value="c9483fb9-c295-43d2-94e0-8c949cf6dc47"/> + </whereParams> + </delete> + <!--keywords.prospect--> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="CONTAINER" value="SalesprojectPhase"/> + <column name="SORTING" valueNumeric="2"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="923217a2-991e-444a-9a86-c3f56ba90f93"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + <column name="KEYID" value="SALPROJPHASEPROS"/> + <column name="AB_KEYWORD_ENTRYID" value="5729d9c0-3884-4cd4-b6e0-009718913914"/> + <column name="TITLE" value="Prospect"/> + </insert> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/Checklists/update_phase.xml b/.liquibase/Data_alias/basic/2021.0.3/Checklists/update_phase.xml new file mode 100644 index 0000000000000000000000000000000000000000..b5d99df603e2ed8f62d9d704d123e51c5a2a97e6 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/Checklists/update_phase.xml @@ -0,0 +1,99 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="p.neub" id="b7fced70-0fae-4589-8bbf-c7139ebeb783"> + <delete tableName="SALESPROJECTPHASEDEFINITION"/> + <delete tableName="CHECKLIST"/> + + <insert tableName="SALESPROJECTPHASEDEFINITION"> + <column name="PHASE" value="SALPROJPHASECONTACT"/> + <column name="CHECKLIST_ID" value="179dcc0d-e6fa-411d-b5ee-cb25b9735dbe"/> + <column name="DATE_EDIT"/> + <column name="DESCRIPTION" value="Aufgaben für die Phase: 'Contact'."/> + <column name="USER_EDIT"/> + <column name="USER_NEW" value="Admin"/> + <column name="SALESPROJECTPHASEDEFINITIONID" value="176e43db-1665-49b9-9c35-5c5c0aa135f3"/> + <column name="DATE_NEW"/> + </insert> + <insert tableName="CHECKLIST"> + <column name="DATE_EDIT"/> + <column name="USER_EDIT"/> + <column name="CHECKLISTID" value="179dcc0d-e6fa-411d-b5ee-cb25b9735dbe"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW"/> + </insert> + + <insert tableName="SALESPROJECTPHASEDEFINITION"> + <column name="PHASE" value="SALPROJPHASELEAD"/> + <column name="CHECKLIST_ID" value="3d0f1d25-cee8-4b83-a0de-3fded83ff9c4"/> + <column name="DATE_EDIT"/> + <column name="DESCRIPTION" value="Aufgaben für die Phase: 'Lead'."/> + <column name="USER_EDIT"/> + <column name="USER_NEW" value="Admin"/> + <column name="SALESPROJECTPHASEDEFINITIONID" value="d29dcde8-24b4-470a-8189-1e2b0d812daa"/> + <column name="DATE_NEW"/> + </insert> + <insert tableName="CHECKLIST"> + <column name="DATE_EDIT"/> + <column name="USER_EDIT"/> + <column name="CHECKLISTID" value="3d0f1d25-cee8-4b83-a0de-3fded83ff9c4"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW"/> + </insert> + + <insert tableName="SALESPROJECTPHASEDEFINITION"> + <column name="PHASE" value="SALPROJPHASEPROS"/> + <column name="CHECKLIST_ID" value="ecf50252-e0c2-4e7a-8cc6-078b5978d2c5"/> + <column name="DATE_EDIT"/> + <column name="DESCRIPTION" value="Aufgaben für die Phase: 'Prospect'."/> + <column name="USER_EDIT"/> + <column name="USER_NEW" value="Admin"/> + <column name="SALESPROJECTPHASEDEFINITIONID" value="d9605427-ba6b-42b2-8376-51e4ef654814"/> + <column name="DATE_NEW"/> + </insert> + <insert tableName="CHECKLIST"> + <column name="DATE_EDIT"/> + <column name="USER_EDIT"/> + <column name="CHECKLISTID" value="ecf50252-e0c2-4e7a-8cc6-078b5978d2c5"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW"/> + </insert> + + <insert tableName="SALESPROJECTPHASEDEFINITION"> + <column name="PHASE" value="SALPROJPHASEOFFER"/> + <column name="CHECKLIST_ID" value="0f95ce44-3b0d-417b-969f-f84897868558"/> + <column name="DATE_EDIT"/> + <column name="DESCRIPTION" value="Aufgaben für die Phase: 'Offer'."/> + <column name="USER_EDIT"/> + <column name="USER_NEW" value="Admin"/> + <column name="SALESPROJECTPHASEDEFINITIONID" value="e8ff463f-692c-40a7-bafa-d168886700fd"/> + <column name="DATE_NEW"/> + </insert> + <insert tableName="CHECKLIST"> + <column name="DATE_EDIT"/> + <column name="USER_EDIT"/> + <column name="CHECKLISTID" value="0f95ce44-3b0d-417b-969f-f84897868558"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW"/> + </insert> + + <insert tableName="SALESPROJECTPHASEDEFINITION"> + <column name="PHASE" value="SALPROJPHASENEGO"/> + <column name="CHECKLIST_ID" value="cb0357c9-a222-4d78-b2c5-035fffe3bb51"/> + <column name="DATE_EDIT"/> + <column name="DESCRIPTION" value="Aufgaben für die Phase: 'Negotiation'."/> + <column name="USER_EDIT"/> + <column name="USER_NEW" value="Admin"/> + <column name="SALESPROJECTPHASEDEFINITIONID" value="21011181-fe9f-4c6c-910e-344ce10e3fc1"/> + <column name="DATE_NEW"/> + </insert> + <insert tableName="CHECKLIST"> + <column name="DATE_EDIT"/> + <column name="USER_EDIT"/> + <column name="CHECKLISTID" value="cb0357c9-a222-4d78-b2c5-035fffe3bb51"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW"/> + </insert> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/Checklists/update_salesproject.xml b/.liquibase/Data_alias/basic/2021.0.3/Checklists/update_salesproject.xml new file mode 100644 index 0000000000000000000000000000000000000000..8e16c2d4664e4ec52c3804b79e3ac17a3c36b2f7 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/Checklists/update_salesproject.xml @@ -0,0 +1,54 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="p.neub" id="a627624f-e0a8-47d7-bce1-7e4bea790bb6"> + <!--Contact--> + <update tableName="SALESPROJECT"> + <column name="PHASE" value="SALPROJPHASECONTACT"></column> + <where>PHASE = ?</where> + <whereParams> + <param value="SALPROJPHASENQC"/> + </whereParams> + </update> + <update tableName="SALESPROJECT"> + <column name="PHASE" value="SALPROJPHASECONTACT"></column> + <where>PHASE = ?</where> + <whereParams> + <param value="SALPROJPHASEMQC"/> + </whereParams> + </update> + + <!--Lead--> + <update tableName="SALESPROJECT"> + <column name="PHASE" value="SALPROJPHASELEAD"></column> + <where>PHASE = ?</where> + <whereParams> + <param value="SALPROJPHASEMAL"/> + </whereParams> + </update> + <update tableName="SALESPROJECT"> + <column name="PHASE" value="SALPROJPHASELEAD"></column> + <where>PHASE = ?</where> + <whereParams> + <param value="SALPROJPHASEMQL"/> + </whereParams> + </update> + <update tableName="SALESPROJECT"> + <column name="PHASE" value="SALPROJPHASELEAD"></column> + <where>PHASE = ?</where> + <whereParams> + <param value="SALPROJPHASESAL"/> + </whereParams> + </update> + + <!--Offer--> + <update tableName="SALESPROJECT"> + <column name="PHASE" value="SALPROJPHASEOFFER"></column> + <where>PHASE = ?</where> + <whereParams> + <param value="SALPROJPHASESQO"/> + </whereParams> + </update> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/changelog.xml new file mode 100644 index 0000000000000000000000000000000000000000..7f9a276d0e9d6022eea4337cd99919ed07dfdffb --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/changelog.xml @@ -0,0 +1,11 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <include relativeToChangelogFile="true" file="create_communicationSettings.xml"/> + <include relativeToChangelogFile="true" file="insert_communicationChannel.xml"/> + <include relativeToChangelogFile="true" file="insert_communicationSettingsStatus.xml"/> + <include relativeToChangelogFile="true" file="insert_commMediumCampaignCategory.xml"/> + <include relativeToChangelogFile="true" file="create_communicationLegalBase.xml"/> + <include relativeToChangelogFile="true" file="insert_commRestrictions.xml"/> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/create_communicationLegalBase.xml b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/create_communicationLegalBase.xml new file mode 100644 index 0000000000000000000000000000000000000000..2b488709ebc598b84da09daa27ee50aa3ae2f0a1 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/create_communicationLegalBase.xml @@ -0,0 +1,33 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="s.listl" id="b63d334e-6d3b-428f-b394-797e52e48313"> + <createTable tableName="COMMUNICATIONLEGALBASE"> + <column name="COMMUNICATIONLEGALBASEID" type="CHAR(36)"> + <constraints nullable="false" primaryKey="true" primaryKeyName="PK_COMMUNICATIONLEGALBASEID"/> + </column> + <column name="COMMUNICATIONSETTINGS_ID" type="CHAR(36)"> + <constraints nullable="false"/> + </column> + <column name="INFO" type="NVARCHAR(250)"/> + <column name="VERSION" type="INTEGER"> + <constraints nullable="false"/> + </column> + <column name="DATE_NEW" type="DATETIME"> + <constraints nullable="false"/> + </column> + <column name="USER_NEW" type="NVARCHAR(50)"> + <constraints nullable="false"/> + </column> + <column name="DATE_EDIT" type="DATETIME"/> + <column name="USER_EDIT" type="NVARCHAR(50)"/> + </createTable> + <createIndex tableName="COMMUNICATIONLEGALBASE" indexName="IDX_COMMLEGALBASE_SETTINGS_ID"> + <column name="COMMUNICATIONSETTINGS_ID"/> + </createIndex> + <createIndex tableName="COMMUNICATIONLEGALBASE" indexName="IDX_COMMLEGALBASE_DATE_NEW"> + <column name="DATE_NEW"/> + </createIndex> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/create_communicationSettings.xml b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/create_communicationSettings.xml new file mode 100644 index 0000000000000000000000000000000000000000..aefe001ae7e2899bd2ef4f06de7e8a030d1025eb --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/create_communicationSettings.xml @@ -0,0 +1,40 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="s.listl" id="7a78532b-83d4-484e-a07d-23ae78ba364d"> + <createTable tableName="COMMUNICATIONSETTINGS"> + <column name="COMMUNICATIONSETTINGSID" type="CHAR(36)"> + <constraints nullable="false" primaryKey="true" primaryKeyName="PK_COMMUNICATIONSETTINGSID"/> + </column> + <column name="CONTACT_ID" type="CHAR(36)"> + <constraints nullable="false"/> + </column> + <column name="MEDIUM" type="VARCHAR(36)"/> + <column name="CHANNEL_TYPE" type="VARCHAR(36)"> + <constraints nullable="false"/> + </column> + <column name="CHANNEL_ID" type="VARCHAR(36)"/> + <column name="STATUS" type="VARCHAR(36)"> + <constraints nullable="false"/> + </column> + <column name="DATE_NEW" type="DATETIME"> + <constraints nullable="false"/> + </column> + <column name="USER_NEW" type="VARCHAR(50)"> + <constraints nullable="false"/> + </column> + <column name="DATE_EDIT" type="DATETIME"/> + <column name="USER_EDIT" type="VARCHAR(50)"/> + </createTable> + <createIndex tableName="COMMUNICATIONSETTINGS" indexName="IDX_COMMSETTINGS_CONTACT_ID"> + <column name="CONTACT_ID"/> + </createIndex> + <createIndex tableName="COMMUNICATIONSETTINGS" indexName="IDX_COMMSETTINGS_MEDIUM"> + <column name="MEDIUM"/> + </createIndex> + <createIndex tableName="COMMUNICATIONSETTINGS" indexName="IDX_COMMSETTINGS_CHANNEL_ID"> + <column name="CHANNEL_ID"/> + </createIndex> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_commMediumCampaignCategory.xml b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_commMediumCampaignCategory.xml new file mode 100644 index 0000000000000000000000000000000000000000..c938477cbe2fa539555aaeeceaebd874537437d7 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_commMediumCampaignCategory.xml @@ -0,0 +1,44 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="s.listl" id="fa4ac9a6-3194-4a1a-8a51-7ed46ef11ef7"> + <insert tableName="AB_KEYWORD_ATTRIBUTE"> + <column name="AB_KEYWORD_ATTRIBUTEID" value="14d30a19-cdeb-4042-8f20-06224a6f8180"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="cda60290-b041-450c-8397-6e462c45835f"/> + <column name="CONTAINER" value=""/> + <column name="KIND" value="CHAR_VALUE"/> + <column name="NAME" value="category"/> + </insert> + <insert tableName="AB_KEYWORD_ATTRIBUTERELATION"> + <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="2ad2a9ac-7e26-471e-b1d8-2c5594fed717"/> + <column name="AB_KEYWORD_ATTRIBUTE_ID" value="14d30a19-cdeb-4042-8f20-06224a6f8180"/> + <column name="AB_KEYWORD_ENTRY_ID" value="2acd3694-ccef-4d0b-ae7a-b3d31f8d9cc0"/> + <column name="CHAR_VALUE" value="PHONE"/> + </insert> + <insert tableName="AB_KEYWORD_ATTRIBUTERELATION"> + <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="76b7befa-d89b-41df-915a-4ac28e010f28"/> + <column name="AB_KEYWORD_ATTRIBUTE_ID" value="14d30a19-cdeb-4042-8f20-06224a6f8180"/> + <column name="AB_KEYWORD_ENTRY_ID" value="cb07397b-a976-4960-b8e5-9edf189c5caf"/> + <column name="CHAR_VALUE" value="EMAIL"/> + </insert> + <insert tableName="AB_KEYWORD_ATTRIBUTERELATION"> + <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="b0d6fc6b-3e97-44fe-a717-be12af65c081"/> + <column name="AB_KEYWORD_ATTRIBUTE_ID" value="14d30a19-cdeb-4042-8f20-06224a6f8180"/> + <column name="AB_KEYWORD_ENTRY_ID" value="990a03e0-aeb4-4bdb-9d22-09b66eee6b85"/> + <column name="CHAR_VALUE" value="OTHER"/> + </insert> + <insert tableName="AB_KEYWORD_ATTRIBUTERELATION"> + <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="2a86f19c-45d4-46a9-aa9a-1dee1dfd567d"/> + <column name="AB_KEYWORD_ATTRIBUTE_ID" value="14d30a19-cdeb-4042-8f20-06224a6f8180"/> + <column name="AB_KEYWORD_ENTRY_ID" value="51085b8b-ded0-4d1d-9e85-ae89bd1480fe"/> + <column name="CHAR_VALUE" value="PHONE"/> + </insert> + <insert tableName="AB_KEYWORD_ATTRIBUTERELATION"> + <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="88e944af-4951-4e5e-904a-aa26da278c78"/> + <column name="AB_KEYWORD_ATTRIBUTE_ID" value="14d30a19-cdeb-4042-8f20-06224a6f8180"/> + <column name="AB_KEYWORD_ENTRY_ID" value="b72ba2f5-612b-4ef6-832e-62089892b8d7"/> + <column name="CHAR_VALUE" value="PHONE"/> + </insert> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_commRestrictions.xml b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_commRestrictions.xml new file mode 100644 index 0000000000000000000000000000000000000000..60be8d3018fc6f55008dbb070839a61414fd8f0f --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_commRestrictions.xml @@ -0,0 +1,36 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="s.listl" id="67710143-ad12-4537-9995-e7c2beb3c4e7"> + <sql dbms="mysql,mariadb,mssql,postgresql,oracle"> + insert into COMMUNICATIONSETTINGS (COMMUNICATIONSETTINGSID, CONTACT_ID, CHANNEL_TYPE, MEDIUM, STATUS, DATE_NEW, USER_NEW) + select COMMRESTRICTIONID, CONTACT_ID, 'COMMUNICATIONCHANNEL_COMMUNICATION', MEDIUM, 'COMMUNICATION_REJECTED', CURRENT_TIMESTAMP, 'Admin' + from COMMRESTRICTION; + </sql> + <sql dbms="mysql,mariadb"> + insert into COMMUNICATIONLEGALBASE (COMMUNICATIONLEGALBASEID, COMMUNICATIONSETTINGS_ID, DATE_NEW, USER_NEW, VERSION, INFO) + select UUID(), COMMUNICATIONSETTINGSID, CURRENT_TIMESTAMP, 'Admin', 1, REASON + from COMMUNICATIONSETTINGS + join COMMRESTRICTION on COMMUNICATIONSETTINGS.COMMUNICATIONSETTINGSID = COMMRESTRICTION.COMMRESTRICTIONID; + </sql> + <sql dbms="mssql"> + insert into COMMUNICATIONLEGALBASE (COMMUNICATIONLEGALBASEID, COMMUNICATIONSETTINGS_ID, DATE_NEW, USER_NEW, VERSION, INFO) + select NEWID(), COMMUNICATIONSETTINGSID, CURRENT_TIMESTAMP, 'Admin', 1, REASON + from COMMUNICATIONSETTINGS + join COMMRESTRICTION on COMMUNICATIONSETTINGS.COMMUNICATIONSETTINGSID = COMMRESTRICTION.COMMRESTRICTIONID; + </sql> + <sql dbms="postgresql"> + insert into COMMUNICATIONLEGALBASE (COMMUNICATIONLEGALBASEID, COMMUNICATIONSETTINGS_ID, DATE_NEW, USER_NEW, VERSION, INFO) + select uuid_in(md5(random()::text || clock_timestamp()::text)::cstring), COMMUNICATIONSETTINGSID, CURRENT_TIMESTAMP, 'Admin', 1, REASON + from COMMUNICATIONSETTINGS + join COMMRESTRICTION on COMMUNICATIONSETTINGS.COMMUNICATIONSETTINGSID = COMMRESTRICTION.COMMRESTRICTIONID; + </sql> + <sql dbms="oracle"> + insert into COMMUNICATIONLEGALBASE (COMMUNICATIONLEGALBASEID, COMMUNICATIONSETTINGS_ID, DATE_NEW, USER_NEW, VERSION, INFO) + select SYS_GUID(), COMMUNICATIONSETTINGSID, CURRENT_TIMESTAMP, 'Admin', 1, REASON + from COMMUNICATIONSETTINGS + join COMMRESTRICTION on COMMUNICATIONSETTINGS.COMMUNICATIONSETTINGSID = COMMRESTRICTION.COMMRESTRICTIONID; + </sql> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_communicationChannel.xml b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_communicationChannel.xml new file mode 100644 index 0000000000000000000000000000000000000000..1d9a93f985b68e18a0332ced9d1877a4af8c1cf3 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_communicationChannel.xml @@ -0,0 +1,53 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="s.listl" id="29ca783c-89ab-4955-8720-ee15ca963237"> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="40390bad-8079-49de-89e5-cf030b2f191c"/> + <column name="NAME" value="CommunicationChannelType"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="a395d73b-6780-41d2-9934-70d4f4a021ff"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="40390bad-8079-49de-89e5-cf030b2f191c"/> + <column name="KEYID" value="COMMUNICATIONCHANNEL_PROFILING"/> + <column name="TITLE" value="Profiling"/> + <column name="CONTAINER" value="CommunicationChannelType"/> + <column name="SORTING" valueNumeric="1"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="10451ef3-9fee-41f9-88f2-8e3c0b326dab"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="40390bad-8079-49de-89e5-cf030b2f191c"/> + <column name="KEYID" value="COMMUNICATIONCHANNEL_GLOBAL"/> + <column name="TITLE" value="Global"/> + <column name="CONTAINER" value="CommunicationChannelType"/> + <column name="SORTING" valueNumeric="2"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="49786329-801b-4adf-b5f9-34234d65111b"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="40390bad-8079-49de-89e5-cf030b2f191c"/> + <column name="KEYID" value="COMMUNICATIONCHANNEL_ADDRESS"/> + <column name="TITLE" value="Address"/> + <column name="CONTAINER" value="CommunicationChannelType"/> + <column name="SORTING" valueNumeric="3"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="b1234ea8-f560-401d-b63a-06497c873fec"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="40390bad-8079-49de-89e5-cf030b2f191c"/> + <column name="KEYID" value="COMMUNICATIONCHANNEL_COMMUNICATION"/> + <column name="TITLE" value="Communication"/> + <column name="CONTAINER" value="CommunicationChannelType"/> + <column name="SORTING" valueNumeric="4"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + </insert> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_communicationSettingsStatus.xml b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_communicationSettingsStatus.xml new file mode 100644 index 0000000000000000000000000000000000000000..b56f70514256c91a7e1344ca2b10e155e48465f5 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_communicationSettingsStatus.xml @@ -0,0 +1,43 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="s.listl" id="67049212-747b-45c9-a556-219c8180db5f"> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="4a7065d8-3ccc-49c5-bd50-1a7546e8a84d"/> + <column name="NAME" value="CommunicationSettingStatus"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="6afeb45a-c64b-4c6c-93bb-7378b0551729"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="4a7065d8-3ccc-49c5-bd50-1a7546e8a84d"/> + <column name="KEYID" value="COMMUNICATION_PENDING"/> + <column name="TITLE" value="Pending"/> + <column name="CONTAINER" value="CommunicationSettingStatus"/> + <column name="SORTING" valueNumeric="1"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="77aa26ef-7938-4c0d-9ff2-5eadc0aa282d"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="4a7065d8-3ccc-49c5-bd50-1a7546e8a84d"/> + <column name="KEYID" value="COMMUNICATION_ALLOWED"/> + <column name="TITLE" value="Allowed"/> + <column name="CONTAINER" value="CommunicationSettingStatus"/> + <column name="SORTING" valueNumeric="2"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="c2c117ac-d94f-4da2-a7a4-2e36e537a8b8"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="4a7065d8-3ccc-49c5-bd50-1a7546e8a84d"/> + <column name="KEYID" value="COMMUNICATION_REJECTED"/> + <column name="TITLE" value="Rejected"/> + <column name="CONTAINER" value="CommunicationSettingStatus"/> + <column name="SORTING" valueNumeric="3"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + </insert> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/DSGVO/add_DSGVOType.xml b/.liquibase/Data_alias/basic/2021.0.3/DSGVO/add_DSGVOType.xml new file mode 100644 index 0000000000000000000000000000000000000000..615a86a2a82e703ef7e7184df4863451f693c1ae --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/DSGVO/add_DSGVOType.xml @@ -0,0 +1,17 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="s.pongratz" id="e96a018a-66ea-4659-a8eb-3d987dd28e14"> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="5b6b36b8-b77b-4dcf-92a8-65cf9cacf20b"/> + <column name="KEYID" value="TYPE_PRIVACY_NOTICE"/> + <column name="TITLE" value="Privacy Notice"/> + <column name="CONTAINER" value="DSGVOType"/> + <column name="SORTING" valueNumeric="5"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="1"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="18e6262a-80a0-4f71-baeb-36a6937e356a"/> + </insert> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/DSGVO/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/DSGVO/changelog.xml new file mode 100644 index 0000000000000000000000000000000000000000..b2007f77236c81d8bee0aa1e251b0d1756d9e4ea --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/DSGVO/changelog.xml @@ -0,0 +1,12 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <include relativeToChangelogFile="true" file="create_DSGVOConfiguration.xml"/> + <include relativeToChangelogFile="true" file="create_DSGVODeleteFlag.xml"/> + <include relativeToChangelogFile="true" file="insert_DSGVOReasonKeywords.xml"/> + <include relativeToChangelogFile="true" file="insert_DSGVOReasonKeywordCategory.xml"/> + <include relativeToChangelogFile="true" file="insert_ContactStatusDelete.xml"/> + <include relativeToChangelogFile="true" file="insert_DSGVOConfigKeyword.xml"/> + <include relativeToChangelogFile="true" file="add_DSGVOType.xml"/> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/DSGVO/create_DSGVOConfiguration.xml b/.liquibase/Data_alias/basic/2021.0.3/DSGVO/create_DSGVOConfiguration.xml new file mode 100644 index 0000000000000000000000000000000000000000..97170f5219f052726a2100e78b3531fb23138b4d --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/DSGVO/create_DSGVOConfiguration.xml @@ -0,0 +1,17 @@ +<?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="s.pongratz" id="f0cb3cff-5f03-4c59-a67e-082147cb2242"> + <createTable tableName="DSGVOCONFIGURATION"> + <column name="DSGVOCONFIGURATIONID" type="CHAR(36)"> + <constraints primaryKey="true" primaryKeyName="PK_DSGVOCONFIGURATION_DSGVOCONFIGURATIONID"/> + </column> + <column name="FILTER" type="NCLOB"/> + <column name="REASON" type="CHAR(36)"/> + + <column name="USER_NEW" type="NVARCHAR(50)" /> + <column name="DATE_NEW" type="DATETIME" /> + <column name="USER_EDIT" type="NVARCHAR(50)" /> + <column name="DATE_EDIT" type="DATETIME" /> + </createTable> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/DSGVO/create_DSGVODeleteFlag.xml b/.liquibase/Data_alias/basic/2021.0.3/DSGVO/create_DSGVODeleteFlag.xml new file mode 100644 index 0000000000000000000000000000000000000000..b633ff087812d6595c9bfb1336ff6e34c4dee6a0 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/DSGVO/create_DSGVODeleteFlag.xml @@ -0,0 +1,17 @@ +<?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="s.pongratz" id="24712f1e-f3f2-48c7-956b-3bf8a708a7d6"> + <createTable tableName="DSGVODELETEFLAG"> + <column name="DSGVODELETEFLAGID" type="CHAR(36)"> + <constraints primaryKey="true" primaryKeyName="PK_DSGVODELETEFLAG_DSGVODELETEFLAGID"/> + </column> + <column name="REASON" type="CHAR(36)"/> + <column name="CONTACT_ID" type="CHAR(36)"/> + <column name="USER_NEW" type="NVARCHAR(50)" /> + <column name="DATE_NEW" type="DATETIME" /> + </createTable> + <createIndex tableName="DSGVODELETEFLAG" indexName="IDX_DSGVODELETEFLAG_CONTACT_ID"> + <column name="CONTACT_ID"/> + </createIndex> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/DSGVO/insert_ContactStatusDelete.xml b/.liquibase/Data_alias/basic/2021.0.3/DSGVO/insert_ContactStatusDelete.xml new file mode 100644 index 0000000000000000000000000000000000000000..29de89e9eb037bce2201473c5b4d08c54278e8dd --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/DSGVO/insert_ContactStatusDelete.xml @@ -0,0 +1,17 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="s.pongratz" id="047ccccc-da80-42d4-8d6f-e664785fc9cb"> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="43e2ec97-43ae-4c32-bf86-19e171cbe597"/> + <column name="KEYID" value="CONTACTSTATDELETE"/> + <column name="TITLE" value="To Delete"/> + <column name="CONTAINER" value="ContactStatus"/> + <column name="SORTING" valueNumeric="3"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="1f3bde3a-7d74-4335-abd3-561028a1e0c3"/> + </insert> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/DSGVO/insert_DSGVOConfigKeyword.xml b/.liquibase/Data_alias/basic/2021.0.3/DSGVO/insert_DSGVOConfigKeyword.xml new file mode 100644 index 0000000000000000000000000000000000000000..d565392a6e7976e9ea334a7a9e3aa5a2c3b13467 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/DSGVO/insert_DSGVOConfigKeyword.xml @@ -0,0 +1,36 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="s.pongratz" id="71f9e4c9-7950-4276-9f4c-2e42256a5e32"> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="248a5fc3-7949-4d24-b5d2-6d9a1b2e54a7"/> + <column name="NAME" value="DSGVOConfiguration"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="51f106b6-b593-4279-bf39-c8d226ebc607"/> + <column name="KEYID" value="DSGVO_CONFIGURATION"/> + <column name="TITLE" value="DSGVO Configuration"/> + <column name="CONTAINER" value="DSGVOConfiguration"/> + <column name="SORTING" valueNumeric="0"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="248a5fc3-7949-4d24-b5d2-6d9a1b2e54a7"/> + </insert> + <insert tableName="AB_KEYWORD_ATTRIBUTE"> + <column name="AB_KEYWORD_ATTRIBUTEID" value="da1227b0-7bda-4aad-a2d5-ba438cac355a"/> + <column name="NAME" value="Delete Delay in Days"/> + <column name="CONTAINER" value="DSGVOConfiguration"/> + <column name="KIND" value="NUMBER_VALUE"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="248a5fc3-7949-4d24-b5d2-6d9a1b2e54a7"/> + </insert> + <insert tableName="AB_KEYWORD_ATTRIBUTERELATION"> + <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="ddf253e2-e6e1-477e-89e3-1d5d34a47540"/> + <column name="AB_KEYWORD_ENTRY_ID" value="51f106b6-b593-4279-bf39-c8d226ebc607"/> + <column name="AB_KEYWORD_ATTRIBUTE_ID" value="da1227b0-7bda-4aad-a2d5-ba438cac355a"/> + <column name="NUMBER_VALUE" valueNumeric="7"/> + </insert> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/DSGVO/insert_DSGVOReasonKeywordCategory.xml b/.liquibase/Data_alias/basic/2021.0.3/DSGVO/insert_DSGVOReasonKeywordCategory.xml new file mode 100644 index 0000000000000000000000000000000000000000..5c7ecb0382e8bc0b5bb2bbb4afdc687c681c918b --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/DSGVO/insert_DSGVOReasonKeywordCategory.xml @@ -0,0 +1,13 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="s.pongratz" id="b3407931-7898-4e61-872c-89516c7878c0"> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="6443344e-8f0b-4699-8d38-5e26dff06b23"/> + <column name="NAME" value="DSGVOReason"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/DSGVO/insert_DSGVOReasonKeywords.xml b/.liquibase/Data_alias/basic/2021.0.3/DSGVO/insert_DSGVOReasonKeywords.xml new file mode 100644 index 0000000000000000000000000000000000000000..b3fce728b5a9a540985f50c4d78f4adc5a77da5d --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/DSGVO/insert_DSGVOReasonKeywords.xml @@ -0,0 +1,37 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="s.pongratz" id="7141cd6c-61bc-4fbc-bba5-220d860b982c"> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="607cfce8-1cc3-466e-9a69-4f0c9cf7e391"/> + <column name="KEYID" value="607cfce8-1cc3-466e-9a69-4f0c9cf7e391"/> + <column name="TITLE" value="Manually set"/> + <column name="CONTAINER" value="DSGVOReason"/> + <column name="SORTING" valueNumeric="0"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="6443344e-8f0b-4699-8d38-5e26dff06b23"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="e9928b0b-3a31-4dfc-9f9a-782ad78db290"/> + <column name="KEYID" value="e9928b0b-3a31-4dfc-9f9a-782ad78db290"/> + <column name="TITLE" value="No valid sales contract"/> + <column name="CONTAINER" value="DSGVOReason"/> + <column name="SORTING" valueNumeric="1"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="6443344e-8f0b-4699-8d38-5e26dff06b23"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="980bf3ad-715d-4e2c-9f3b-ada996ced361"/> + <column name="KEYID" value="980bf3ad-715d-4e2c-9f3b-ada996ced361"/> + <column name="TITLE" value="No customer since creation > 3 years"/> + <column name="CONTAINER" value="DSGVOReason"/> + <column name="SORTING" valueNumeric="2"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="6443344e-8f0b-4699-8d38-5e26dff06b23"/> + </insert> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/Duplicate/alter_unrelatedduplicates.xml b/.liquibase/Data_alias/basic/2021.0.3/Duplicate/alter_unrelatedduplicates.xml new file mode 100644 index 0000000000000000000000000000000000000000..b6e59bdbd9153071bac10d9f15d87c48b7c2b300 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/Duplicate/alter_unrelatedduplicates.xml @@ -0,0 +1,24 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="p.neub" id="082919b2-ebfd-4864-9839-89e593fb6f2d"> + <dropColumn tableName="UNRELATEDDUPLICATES"> + <column name="CLUSTERID"/> + </dropColumn> + <addColumn tableName="UNRELATEDDUPLICATES"> + <column name="DUPLICATETYPE" type="NVARCHAR(63)"/> + </addColumn> + <createIndex indexName="IDX_UNRELATEDDUPLICATES_DUPLICATETYPE" tableName="UNRELATEDDUPLICATES"> + <column name="DUPLICATETYPE"/> + </createIndex> + <createIndex indexName="IDX_UNRELATEDDUPLICATES_SOURCEDUPLICATEID" tableName="UNRELATEDDUPLICATES"> + <column name="SOURCEDUPLICATEID"/> + </createIndex> + <createIndex indexName="IDX_UNRELATEDDUPLICATES" tableName="UNRELATEDDUPLICATES"> + <column name="DUPLICATETYPE"/> + <column name="SOURCEDUPLICATEID"/> + <column name="UNRELATEDDUPLICATEID"/> + </createIndex> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/Duplicate/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/Duplicate/changelog.xml new file mode 100644 index 0000000000000000000000000000000000000000..15d32034eeb6946e544f20d58b7dc3777a56c525 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/Duplicate/changelog.xml @@ -0,0 +1,11 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <include relativeToChangelogFile="true" file="create_hasduplicate.xml"/> + <include relativeToChangelogFile="true" file="drop_duplicateclusters.xml"/> + <include relativeToChangelogFile="true" file="drop_duplicatescannerresultfieldconfig.xml"/> + <include relativeToChangelogFile="true" file="alter_unrelatedduplicates.xml"/> + <include relativeToChangelogFile="true" file="migrate_unrelatedduplicates.xml"/> + <include relativeToChangelogFile="true" file="insert_duplicatescanner.xml" /> +</databaseChangeLog> diff --git a/.liquibase/Data_alias/basic/2021.0.3/Duplicate/create_hasduplicate.xml b/.liquibase/Data_alias/basic/2021.0.3/Duplicate/create_hasduplicate.xml new file mode 100644 index 0000000000000000000000000000000000000000..f61d512d35ce13c2928fc3e6922ac8f25058542d --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/Duplicate/create_hasduplicate.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="p.neub" id="db282e4c-01c2-4b55-aa85-01306f4b1f7a"> + <createTable tableName="HASDUPLICATE"> + <column name="HASDUPLICATEID" type="CHAR(36)"> + <constraints primaryKey="true" primaryKeyName="PK_HASDUPLICATE_HASDUPLICATEID"></constraints> + </column> + + <column name="OBJECT_TYPE" type="NVARCHAR(63)"/> + <column name="OBJECT_ROWID" type="CHAR(36)"/> + <column name="DUPLICATECOUNT" type="INTEGER"/> + </createTable> + <createIndex indexName="IDX_HASDUPLICATE" tableName="HASDUPLICATE"> + <column name="OBJECT_TYPE"/> + <column name="OBJECT_ROWID"/> + </createIndex> + <createIndex indexName="IDX_HASDUPLICATE_OBJECT_ROWID" tableName="HASDUPLICATE"> + <column name="OBJECT_ROWID"/> + </createIndex> + </changeSet> +</databaseChangeLog> diff --git a/.liquibase/Data_alias/basic/2021.0.3/Duplicate/drop_duplicateclusters.xml b/.liquibase/Data_alias/basic/2021.0.3/Duplicate/drop_duplicateclusters.xml new file mode 100644 index 0000000000000000000000000000000000000000..b61e7cb651dec4c502d4956f3caf44b7640bbb1c --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/Duplicate/drop_duplicateclusters.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="p.neub" id="45db014f-922d-4619-b69f-9bf3a36285f4"> + <dropTable tableName="DUPLICATECLUSTERS"/> + </changeSet> +</databaseChangeLog> diff --git a/.liquibase/Data_alias/basic/2021.0.3/Duplicate/drop_duplicatescannerresultfieldconfig.xml b/.liquibase/Data_alias/basic/2021.0.3/Duplicate/drop_duplicatescannerresultfieldconfig.xml new file mode 100644 index 0000000000000000000000000000000000000000..6804c4345d4c745de74f6850985649c4329e11bb --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/Duplicate/drop_duplicatescannerresultfieldconfig.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="p.neub" id="fcf592c4-e07c-4919-bfba-0bf99db161ec"> + <dropTable tableName="DUPLICATESCANNERRESULTFIELDCONFIG"/> + </changeSet> +</databaseChangeLog> diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/duplicatescanner.xml b/.liquibase/Data_alias/basic/2021.0.3/Duplicate/insert_duplicatescanner.xml similarity index 100% rename from .liquibase/Data_alias/basic/_demoData/generatedData/duplicatescanner.xml rename to .liquibase/Data_alias/basic/2021.0.3/Duplicate/insert_duplicatescanner.xml diff --git a/.liquibase/Data_alias/basic/2021.0.3/Duplicate/migrate_unrelatedduplicates.xml b/.liquibase/Data_alias/basic/2021.0.3/Duplicate/migrate_unrelatedduplicates.xml new file mode 100644 index 0000000000000000000000000000000000000000..ac72a09e145674f5a0774b07bd80a1d1b7db5d50 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/Duplicate/migrate_unrelatedduplicates.xml @@ -0,0 +1,23 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="p.neub" id="587e1ed7-b7c8-46f0-9058-01521ed97fd5"> + <update tableName="UNRELATEDDUPLICATES"> + <column name="DUPLICATETYPE" value="Person_entity"/> + <where> + DUPLICATETYPE is null and + (select PERSON_ID from CONTACT where CONTACTID = SOURCEDUPLICATEID) + is not null + </where> + </update> + <update tableName="UNRELATEDDUPLICATES"> + <column name="DUPLICATETYPE" value="Organisation_entity"/> + <where> + DUPLICATETYPE is null and + (select PERSON_ID from CONTACT where CONTACTID = SOURCEDUPLICATEID) + is null + </where> + </update> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/Interest/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/Interest/changelog.xml new file mode 100644 index 0000000000000000000000000000000000000000..5d964ae108c243c9bca975b36ac913476b0d17da --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/Interest/changelog.xml @@ -0,0 +1,9 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <include relativeToChangelogFile="true" file="create_interest.xml"/> + <include relativeToChangelogFile="true" file="create_interestLink.xml"/> + <include relativeToChangelogFile="true" file="insert_interestStatusKeyword.xml"/> + <include relativeToChangelogFile="true" file="insert_interestLinkStatusKeyword.xml"/> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/Interest/create_interest.xml b/.liquibase/Data_alias/basic/2021.0.3/Interest/create_interest.xml new file mode 100644 index 0000000000000000000000000000000000000000..811ce863daab8ffe20c807af1127f7aeca2fbeda --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/Interest/create_interest.xml @@ -0,0 +1,16 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="s.listl" id="7ec72a70-aa7c-41a5-b7ed-1e28ee2fb506"> + <createTable tableName="INTEREST"> + <column name="INTERESTID" type="CHAR(36)"> + <constraints nullable="false" primaryKey="true" primaryKeyName="PK_INTERESTID"/> + </column> + <column name="TITLE" type="NVARCHAR(50)"/> + <column name="DESCRIPTION" type="NVARCHAR(500)"/> + <column name="STATUS" type="VARCHAR(36)"/> + <column name="IS_DEFAULT" type="TINYINT"/> + </createTable> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/Interest/create_interestLink.xml b/.liquibase/Data_alias/basic/2021.0.3/Interest/create_interestLink.xml new file mode 100644 index 0000000000000000000000000000000000000000..38e31408a97efc914eed735b5ea03d7d4c6a0b43 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/Interest/create_interestLink.xml @@ -0,0 +1,21 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="s.listl" id="9e7aab7e-fbe5-4c62-9229-c7d0cf57605f"> + <createTable tableName="INTERESTLINK"> + <column name="INTERESTLINKID" type="CHAR(36)"> + <constraints nullable="false" primaryKey="true" primaryKeyName="PK_INTERESTLINKID"/> + </column> + <column name="INTEREST_ID" type="CHAR(36)"/> + <column name="CONTACT_ID" type="CHAR(36)"/> + <column name="STATUS" type="VARCHAR(36)"/> + </createTable> + <createIndex tableName="INTERESTLINK" indexName="IDX_INTERESTLINK_INTEREST_ID"> + <column name="INTEREST_ID"/> + </createIndex> + <createIndex tableName="INTERESTLINK" indexName="IDX_INTERESTLINK_CONTACT_ID"> + <column name="CONTACT_ID"/> + </createIndex> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/Interest/create_interestUnsubscribe.xml b/.liquibase/Data_alias/basic/2021.0.3/Interest/create_interestUnsubscribe.xml new file mode 100644 index 0000000000000000000000000000000000000000..63c2dcad95a2416e41986e82150394a722997456 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/Interest/create_interestUnsubscribe.xml @@ -0,0 +1,13 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="s.listl" id="c7223a3d-5951-4632-8e39-805fe660c90f"> + <createTable tableName="INTERESTUNSUBSCRIBE"> + <column name="INTERESTUNSUBSCRIBEID" type="CHAR(36)"> + <constraints nullable="false" primaryKey="true" primaryKeyName="PK_INTERESTUNSUBSCRIBEID"/> + </column> + <column name="INTERESTLINK_ID" type="CHAR(36)"/> + </createTable> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/Interest/insert_interestLinkStatusKeyword.xml b/.liquibase/Data_alias/basic/2021.0.3/Interest/insert_interestLinkStatusKeyword.xml new file mode 100644 index 0000000000000000000000000000000000000000..8de05d4b7521be8a9235d6337b090bd709c336fb --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/Interest/insert_interestLinkStatusKeyword.xml @@ -0,0 +1,34 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="s.listl" id="bea56786-cd38-4926-bad7-7f2bd37a17ef"> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="9eba38ce-72ba-485a-9a81-f800f8ce6575"/> + <column name="NAME" value="InterestLinkStatus"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="5c723271-ee7f-4daa-9bb3-ca1f81174168"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="9eba38ce-72ba-485a-9a81-f800f8ce6575"/> + <column name="KEYID" value="INTERESTLINK_SUBSCRIBED"/> + <column name="TITLE" value="Subscribed"/> + <column name="CONTAINER" value="InterestLinkStatus"/> + <column name="SORTING" valueNumeric="1"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="5f0e6420-14b9-43e4-bbe3-c156d6519c02"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="9eba38ce-72ba-485a-9a81-f800f8ce6575"/> + <column name="KEYID" value="INTERESTLINK_NOTSUBSCRIBED"/> + <column name="TITLE" value="Not subscribed"/> + <column name="CONTAINER" value="InterestLinkStatus"/> + <column name="SORTING" valueNumeric="2"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + </insert> + + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/Interest/insert_interestStatusKeyword.xml b/.liquibase/Data_alias/basic/2021.0.3/Interest/insert_interestStatusKeyword.xml new file mode 100644 index 0000000000000000000000000000000000000000..28f0b1fb5fde8b66916d6041d43352f2348713c7 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/Interest/insert_interestStatusKeyword.xml @@ -0,0 +1,33 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="s.listl" id="0281fbff-e05e-4091-8c66-e8b12022057b"> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="442c93e4-5df2-444e-a946-2d8cb07bc43a"/> + <column name="NAME" value="InterestStatus"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="7f2b0d66-6051-441b-b975-9369a6a96e24"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="442c93e4-5df2-444e-a946-2d8cb07bc43a"/> + <column name="KEYID" value="INTEREST_ACTIVE"/> + <column name="TITLE" value="Active"/> + <column name="CONTAINER" value="InterestStatus"/> + <column name="SORTING" valueNumeric="1"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="37412d1c-1ccb-41c3-a1b9-5c0276d8d5b6"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="442c93e4-5df2-444e-a946-2d8cb07bc43a"/> + <column name="KEYID" value="INTEREST_INACTIVE"/> + <column name="TITLE" value="Inactive"/> + <column name="CONTAINER" value="InterestStatus"/> + <column name="SORTING" valueNumeric="2"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + </insert> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/CreateWeblink.xml b/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/CreateWeblink.xml new file mode 100644 index 0000000000000000000000000000000000000000..7561299704af4a8cd9e17a78f82ee22b304efd1e --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/CreateWeblink.xml @@ -0,0 +1,22 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="m.groppe" id="1e4d2e89-646c-479b-97a9-d105878de4ae"> + <createTable tableName="WEBLINK"> + <column name="WEBLINKID" type="CHAR(36)"> + <constraints primaryKey="true" primaryKeyName="PK_WEBLINK_WEBLINKID"/> + </column> + <column name="URL" type="VARCHAR(512)"/> + <column name="LINKTYPE" type="VARCHAR(50)"/> + <column name="PLACEHOLDER" type = "VARCHAR(50)"/> + <column name="SCORE" type = "INTEGER"/> + <column name="USER_NEW" type="NVARCHAR(50)"/> + <column name="DATE_NEW" type="DATETIME"/> + <column name="USER_EDIT" type="NVARCHAR(50)"/> + <column name="DATE_EDIT" type="DATETIME"/> + <column name="ISREDIRECT" type="TINYINT"/> + <column name="WORKFLOWPROCESSDEFINITION_KEY" type="VARCHAR(255)"/> + </createTable> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/CreateWeblinktags.xml b/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/CreateWeblinktags.xml new file mode 100644 index 0000000000000000000000000000000000000000..69df405c0435083c50d55207c2afe35217b31e98 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/CreateWeblinktags.xml @@ -0,0 +1,18 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="m.groppe" id="80490c55-8708-4bf0-a9e7-077ffb0501ef"> + <createTable tableName="WEBLINKTAG"> + <column name="WEBLINKTAGID" type="CHAR(36)"> + <constraints primaryKey="true" primaryKeyName="PK_WEBLINKTAG_WEBLINKTAGID"/> + </column> + <column name="WEBLINK_ID" type="char(36)"/> + <column name="TAG" type="VARCHAR(100)" /> + <column name="USER_NEW" type="NVARCHAR(50)" /> + <column name="DATE_NEW" type="DATETIME" /> + <column name="USER_EDIT" type="NVARCHAR(50)" /> + <column name="DATE_EDIT" type="DATETIME" /> + </createTable> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/addLinkManagementKeywords.xml b/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/addLinkManagementKeywords.xml new file mode 100644 index 0000000000000000000000000000000000000000..4bf9b7e01884701fe98930cd8e51d521501e8568 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/addLinkManagementKeywords.xml @@ -0,0 +1,76 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="m.groppe" id="04500816-ee95-4a7c-acbb-0b97e2cfcb0d"> + + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="6511a68f-f776-4995-816b-1db011e9e6af"/> + <column name="NAME" value="WeblinkTags"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="398d472c-fb36-4ba6-9c66-44119a32c598"/> + <column name="KEYID" value="SALES"/> + <column name="TITLE" value="Sales"/> + <column name="CONTAINER" value="WeblinkTags"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="6511a68f-f776-4995-816b-1db011e9e6af"/> + <column name="SORTING" valueNumeric="0"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="1"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="b04ffc41-457b-42ca-a2a9-04386f0e586f"/> + <column name="KEYID" value="MARKETING"/> + <column name="TITLE" value="Marketing"/> + <column name="CONTAINER" value="WeblinkTags"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="6511a68f-f776-4995-816b-1db011e9e6af"/> + <column name="SORTING" valueNumeric="1"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="1"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="76970f2c-7ca4-4723-832b-c06e92217174"/> + <column name="KEYID" value="SERVICE"/> + <column name="TITLE" value="Service"/> + <column name="CONTAINER" value="WeblinkTags"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="6511a68f-f776-4995-816b-1db011e9e6af"/> + <column name="SORTING" valueNumeric="2"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="1"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="33003876-9c63-4fa6-927c-1e71b4aaa077"/> + <column name="KEYID" value="TRADE"/> + <column name="TITLE" value="Trade"/> + <column name="CONTAINER" value="WeblinkTags"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="6511a68f-f776-4995-816b-1db011e9e6af"/> + <column name="SORTING" valueNumeric="3"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="1"/> + </insert> + </changeSet> + + <changeSet id="83cea193-681f-4dde-9bb6-c0d8ed7b0d72" author="m.groppe"> + + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="c2034fe5-6157-4fb2-b774-4aaeda302b15"/> + <column name="NAME" value="WeblinkType"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="126953bc-1219-43d7-a0a0-f2e0631e062f"/> + <column name="KEYID" value="WEBLINK_EMAIL"/> + <column name="TITLE" value="E-Mail"/> + <column name="CONTAINER" value="WeblinkType"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="c2034fe5-6157-4fb2-b774-4aaeda302b15"/> + <column name="SORTING" valueNumeric="0"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="1"/> + </insert> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/changelog.xml new file mode 100644 index 0000000000000000000000000000000000000000..4c8697f98d68ce33dceb605ef75ffa81eccb7a72 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/changelog.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <include file="addLinkManagementKeywords.xml" relativeToChangelogFile="true"/> + <include file="CreateWeblink.xml" relativeToChangelogFile="true"/> + <include file="CreateWeblinktags.xml" relativeToChangelogFile="true"/> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/LinkWorkflows/add_weblinkWorkflowColumns.xml b/.liquibase/Data_alias/basic/2021.0.3/LinkWorkflows/add_weblinkWorkflowColumns.xml new file mode 100644 index 0000000000000000000000000000000000000000..f88670c4f4db6c4a554345103a1f682c9adfb61c --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/LinkWorkflows/add_weblinkWorkflowColumns.xml @@ -0,0 +1,11 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="s.listl" id="90e1ef8c-62ac-4c98-839b-429b8ae83251"> + <addColumn tableName="WEBLINK"> + <column name="ACTION_TYPE" type="VARCHAR(36)"/> + <column name="WORKFLOWSIGNAL_NAME" type="VARCHAR(255)"/> + </addColumn> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/LinkWorkflows/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/LinkWorkflows/changelog.xml new file mode 100644 index 0000000000000000000000000000000000000000..447f29d8a252c402b3fb06633e5171de1ef42e8a --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/LinkWorkflows/changelog.xml @@ -0,0 +1,7 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <include relativeToChangelogFile="true" file="add_weblinkWorkflowColumns.xml"/> + <include relativeToChangelogFile="true" file="insert_linkActionTypeKeyword.xml"/> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/LinkWorkflows/insert_linkActionTypeKeyword.xml b/.liquibase/Data_alias/basic/2021.0.3/LinkWorkflows/insert_linkActionTypeKeyword.xml new file mode 100644 index 0000000000000000000000000000000000000000..59172ddb4582214f902f3a8450614df26147cf06 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/LinkWorkflows/insert_linkActionTypeKeyword.xml @@ -0,0 +1,33 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="s.listl" id="3b41b283-4e04-451f-96c9-ab829b2ab06c"> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="90afa287-20b7-4d52-9227-63950f2c96be"/> + <column name="NAME" value="WeblinkActionType"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="afd1b624-c7c3-47c9-9ec3-c4638652ca1f"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="90afa287-20b7-4d52-9227-63950f2c96be"/> + <column name="KEYID" value="LINKACTION_STARTWORKFLOW"/> + <column name="TITLE" value="Start workflow"/> + <column name="CONTAINER" value="WeblinkActionType"/> + <column name="SORTING" valueNumeric="1"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="2cd0b9e4-7a37-4d44-96e8-13d77e08213c"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="90afa287-20b7-4d52-9227-63950f2c96be"/> + <column name="KEYID" value="LINKACTION_SENDSIGNAL"/> + <column name="TITLE" value="Send workflow signal"/> + <column name="CONTAINER" value="WeblinkActionType"/> + <column name="SORTING" valueNumeric="2"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + </insert> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/Planning/addKeywordForecastKind.xml b/.liquibase/Data_alias/basic/2021.0.3/Planning/addKeywordForecastKind.xml new file mode 100644 index 0000000000000000000000000000000000000000..c33bd4d89b784ce195f84eb29a02225120ec177e --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/Planning/addKeywordForecastKind.xml @@ -0,0 +1,32 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="j.luginger" id="26f06b1d-c550-4a6c-81a5-c9f061c7f50f"> + + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="9c26220e-0bdc-4f3a-bbf6-058198b0f038"/> + <column name="NAME" value="ForecastKind"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="092318cc-fe67-4f9a-a18d-1e59d894fd58"/> + <column name="KEYID" value="FORECAST"/> + <column name="TITLE" value="Forecast"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="9c26220e-0bdc-4f3a-bbf6-058198b0f038"/> + <column name="SORTING" valueNumeric="0"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="3b6cbb84-c05c-49fe-a46b-7c0295d41e6d"/> + <column name="KEYID" value="PLANNING"/> + <column name="TITLE" value="Planning"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="9c26220e-0bdc-4f3a-bbf6-058198b0f038"/> + <column name="SORTING" valueNumeric="1"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + </insert> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/Planning/addKeywordForecastStatus.xml b/.liquibase/Data_alias/basic/2021.0.3/Planning/addKeywordForecastStatus.xml new file mode 100644 index 0000000000000000000000000000000000000000..a5b05589beb6f9533ca93aa8b8eb4431048caee3 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/Planning/addKeywordForecastStatus.xml @@ -0,0 +1,41 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="j.luginger" id="d25d18dd-c39c-49ed-9c58-4806f7426ef7"> + + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="ec675c54-405d-4564-879d-d537c220661a"/> + <column name="NAME" value="ForecastStatus"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="37f8088f-ee2c-47ea-85ec-a43f96ee922a"/> + <column name="KEYID" value="IN_PLANNING"/> + <column name="TITLE" value="In planning"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="ec675c54-405d-4564-879d-d537c220661a"/> + <column name="SORTING" valueNumeric="0"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="c6efd407-726c-40a1-a494-b6343ea412ce"/> + <column name="KEYID" value="PLANNED"/> + <column name="TITLE" value="Planned"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="ec675c54-405d-4564-879d-d537c220661a"/> + <column name="SORTING" valueNumeric="1"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="0ef63392-f99d-4059-986c-7b027a183347"/> + <column name="KEYID" value="LOCKED"/> + <column name="TITLE" value="Fixed"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="ec675c54-405d-4564-879d-d537c220661a"/> + <column name="SORTING" valueNumeric="2"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + </insert> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/Planning/alterForecast.xml b/.liquibase/Data_alias/basic/2021.0.3/Planning/alterForecast.xml new file mode 100644 index 0000000000000000000000000000000000000000..e2b1b78b7513fb55ca12044fcde49a59e42efc5a --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/Planning/alterForecast.xml @@ -0,0 +1,15 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="j.luginger" id="2da921a6-a680-4662-8496-59f4eb22c6a5"> + <addColumn tableName="FORECAST"> + <column name="FORECAST_YEAR" type="INT"/> + <column name="CONTACT_ID" type="CHAR(36)"/> + <column name="KIND" type="VARCHAR(36)"/> + <column name="STATUS" type="VARCHAR(36)"/> + <column name="RESPONSIBLE_CONTACT_ID" type="CHAR(36)"/> + </addColumn> + + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/Planning/alterForecastAddIndizes.xml b/.liquibase/Data_alias/basic/2021.0.3/Planning/alterForecastAddIndizes.xml new file mode 100644 index 0000000000000000000000000000000000000000..9917700bca56b7d20fe8f9ff3abb194c132338c7 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/Planning/alterForecastAddIndizes.xml @@ -0,0 +1,13 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="j.luginger" id="2da921a6-a680-4662-8496-59f4eb22c6a5"> + <createIndex indexName="IDX_FORECAST_CONTACT_ID" tableName="FORECAST"> + <column name="CONTACT_ID"/> + </createIndex> + <createIndex indexName="IDX_FORECAST_RESPONSIBLE_CONTACT_ID" tableName="FORECAST"> + <column name="RESPONSIBLE_CONTACT_ID"/> + </createIndex> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/Planning/alterForecastDataKind.xml b/.liquibase/Data_alias/basic/2021.0.3/Planning/alterForecastDataKind.xml new file mode 100644 index 0000000000000000000000000000000000000000..fb39cdcdd08bb888840b8272923ce3fabfdcb9f9 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/Planning/alterForecastDataKind.xml @@ -0,0 +1,12 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="j.luginger" id="26f06b1d-c550-4a6c-81a5-c9f061c7f50f"> + + <update tableName="FORECAST"> + <column name="KIND" value="FORECAST"/> + <where>KIND is null</where> + </update> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/Planning/alterForecastDropObjectRowIdNullable.xml b/.liquibase/Data_alias/basic/2021.0.3/Planning/alterForecastDropObjectRowIdNullable.xml new file mode 100644 index 0000000000000000000000000000000000000000..ad7b65d54b56aa039dc808d57c006291544ec00e --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/Planning/alterForecastDropObjectRowIdNullable.xml @@ -0,0 +1,16 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="j.luginger" id="fb33969b-17e5-45c4-9fe4-c19cb65320f6"> + <dropNotNullConstraint + columnDataType="char(36)" + columnName="OBJECT_ROWID" + tableName="FORECAST"/> + + <dropNotNullConstraint + columnDataType="varchar(63)" + columnName="OBJECT_TYPE" + tableName="FORECAST"/> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/Planning/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/Planning/changelog.xml new file mode 100644 index 0000000000000000000000000000000000000000..b6afce8a8cf1bbcbcc7d76a69d9ba687f857de94 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/Planning/changelog.xml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <include file="alterForecast.xml" relativeToChangelogFile="true"/> + <include file="addKeywordForecastKind.xml" relativeToChangelogFile="true"/> + <include file="alterForecastDropObjectRowIdNullable.xml" relativeToChangelogFile="true"/> + <include file="addKeywordForecastStatus.xml" relativeToChangelogFile="true"/> + <include file="alterForecastDataKind.xml" relativeToChangelogFile="true"/> + <include file="createPlanningMonth.xml" relativeToChangelogFile="true"/> + <include file="insertPlanningMonthData.xml" relativeToChangelogFile="true"/> + <include file="alterForecastAddIndizes.xml" relativeToChangelogFile="true"/> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/Planning/createPlanningMonth.xml b/.liquibase/Data_alias/basic/2021.0.3/Planning/createPlanningMonth.xml new file mode 100644 index 0000000000000000000000000000000000000000..6a785b68196bc068fa12c17a6fc17ce6a97d1ea3 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/Planning/createPlanningMonth.xml @@ -0,0 +1,14 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="j.luginger" id="88a921a6-a680-4662-8496-59f4eb22c6a5"> + <createTable tableName="PLANNING_MONTH"> + <column name="PLANNING_MONTHID" type="CHAR(36)"> + <constraints primaryKey="true" primaryKeyName="PK_PLANNING_MONTH_PLANNING_MONTHID"/> + </column> + <column name="MONTH_NUMBER" type="INTEGER"/> + <column name="MONTH_FACTOR" type="NUMERIC(5,2)"/> + </createTable> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/Planning/insertPlanningMonthData.xml b/.liquibase/Data_alias/basic/2021.0.3/Planning/insertPlanningMonthData.xml new file mode 100644 index 0000000000000000000000000000000000000000..cdfc57c433334fef75a8c207d8a1456bf65156dc --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/Planning/insertPlanningMonthData.xml @@ -0,0 +1,65 @@ +<?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="j.luginger" id="24f68f1a-6103-4051-9f22-6b64428f6c38"> + <insert tableName="PLANNING_MONTH"> + <column name="PLANNING_MONTHID" value="80dc07b0-1ba7-42fb-b708-86488452c158"/> + <column name="MONTH_NUMBER" valueNumeric="1"/> + <column name="MONTH_FACTOR" valueNumeric="8.33"/> + </insert> + <insert tableName="PLANNING_MONTH"> + <column name="PLANNING_MONTHID" value="dbd384d4-fe89-4522-8c3e-67c2dc8068d9"/> + <column name="MONTH_NUMBER" valueNumeric="2"/> + <column name="MONTH_FACTOR" valueNumeric="8.33"/> + </insert> + <insert tableName="PLANNING_MONTH"> + <column name="PLANNING_MONTHID" value="3f16cc60-b166-42c8-bd78-6b5f6aa4d7b0"/> + <column name="MONTH_NUMBER" valueNumeric="3"/> + <column name="MONTH_FACTOR" valueNumeric="8.33"/> + </insert> + <insert tableName="PLANNING_MONTH"> + <column name="PLANNING_MONTHID" value="3bdb09ed-17f3-4eff-aa71-3e31bff9cbb6"/> + <column name="MONTH_NUMBER" valueNumeric="4"/> + <column name="MONTH_FACTOR" valueNumeric="8.33"/> + </insert> + <insert tableName="PLANNING_MONTH"> + <column name="PLANNING_MONTHID" value="9add0690-e967-40e4-8d6b-255e4d32a75e"/> + <column name="MONTH_NUMBER" valueNumeric="5"/> + <column name="MONTH_FACTOR" valueNumeric="8.33"/> + </insert> + <insert tableName="PLANNING_MONTH"> + <column name="PLANNING_MONTHID" value="5d00016a-2302-4011-9f98-db6ccc371f32"/> + <column name="MONTH_NUMBER" valueNumeric="6"/> + <column name="MONTH_FACTOR" valueNumeric="8.33"/> + </insert> + <insert tableName="PLANNING_MONTH"> + <column name="PLANNING_MONTHID" value="68f67a69-a62a-4925-83f8-c4c06f587f6d"/> + <column name="MONTH_NUMBER" valueNumeric="7"/> + <column name="MONTH_FACTOR" valueNumeric="8.33"/> + </insert> + <insert tableName="PLANNING_MONTH"> + <column name="PLANNING_MONTHID" value="e44f4275-7aa2-4218-9a28-c7da41083881"/> + <column name="MONTH_NUMBER" valueNumeric="8"/> + <column name="MONTH_FACTOR" valueNumeric="8.33"/> + </insert> + <insert tableName="PLANNING_MONTH"> + <column name="PLANNING_MONTHID" value="38547f0a-0752-4a8f-b6ce-280f09db6108"/> + <column name="MONTH_NUMBER" valueNumeric="9"/> + <column name="MONTH_FACTOR" valueNumeric="8.33"/> + </insert> + <insert tableName="PLANNING_MONTH"> + <column name="PLANNING_MONTHID" value="a821c1ef-3805-450a-83fd-ef3e1bb96ff6"/> + <column name="MONTH_NUMBER" valueNumeric="10"/> + <column name="MONTH_FACTOR" valueNumeric="8.33"/> + </insert> + <insert tableName="PLANNING_MONTH"> + <column name="PLANNING_MONTHID" value="c824e7c2-112c-483b-a116-e0bd9f4bc9bc"/> + <column name="MONTH_NUMBER" valueNumeric="11"/> + <column name="MONTH_FACTOR" valueNumeric="8.33"/> + </insert> + <insert tableName="PLANNING_MONTH"> + <column name="PLANNING_MONTHID" value="6f7428c5-473d-4622-826e-5225658cf5f6"/> + <column name="MONTH_NUMBER" valueNumeric="12"/> + <column name="MONTH_FACTOR" valueNumeric="8.33"/> + </insert> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/alter_origin_attribute.xml b/.liquibase/Data_alias/basic/2021.0.3/alter_origin_attribute.xml new file mode 100644 index 0000000000000000000000000000000000000000..dc6eb66e9654e7231e0550f30c99cf524d10da84 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/alter_origin_attribute.xml @@ -0,0 +1,21 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="p.neub" id="7af7aa80-0830-4185-a9cd-bb51b3d0c432"> + <update tableName="AB_ATTRIBUTE"> + <column name="ATTRIBUTE_TYPE" value="COMBO"/> + <where>AB_ATTRIBUTEID = ?</where> + <whereParams> + <param value="d0ae40d2-1a7f-45f6-bb0c-20ce6ae7efe2"/> + </whereParams> + </update> + <update tableName="AB_ATTRIBUTE"> + <column name="ATTRIBUTE_TYPE" value="COMBOVALUE"/> + <where>ATTRIBUTE_PARENT_ID = ?</where> + <whereParams> + <param value="d0ae40d2-1a7f-45f6-bb0c-20ce6ae7efe2"/> + </whereParams> + </update> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/changelog.xml new file mode 100644 index 0000000000000000000000000000000000000000..7e9eb94a5eec04fb81f2f709021792e98414108e --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/changelog.xml @@ -0,0 +1,18 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <include relativeToChangelogFile="true" file="Bulkmail/changelog.xml"/> + <include relativeToChangelogFile="true" file="LinkManagement/changelog.xml"/> + <include relativeToChangelogFile="true" file="CommunicationSettings/changelog.xml"/> + <include relativeToChangelogFile="true" file="Interest/changelog.xml"/> + <include relativeToChangelogFile="true" file="Checklists/changelog.xml"/> + <include relativeToChangelogFile="true" file="Planning/changelog.xml"/> + <include relativeToChangelogFile="true" file="alter_origin_attribute.xml"/> + <include relativeToChangelogFile="true" file="Duplicate/changelog.xml"/> + <include relativeToChangelogFile="true" file="DSGVO/changelog.xml"/> + <include relativeToChangelogFile="true" file="update_ab_countryinfo_name_native.xml"/> + <include relativeToChangelogFile="true" file="create_probability_keywords.xml"/> + <include relativeToChangelogFile="true" file="LinkManagement/changelog.xml"/> + <include relativeToChangelogFile="true" file="LinkWorkflows/changelog.xml"/> + <include relativeToChangelogFile="true" file="renameLeadTable.xml"/> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/create_probability_keywords.xml b/.liquibase/Data_alias/basic/2021.0.3/create_probability_keywords.xml new file mode 100644 index 0000000000000000000000000000000000000000..8243d75edb38dace41edae1b72cd3620ceec5b91 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/create_probability_keywords.xml @@ -0,0 +1,120 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="p.neub" id="d9d6e2dd-5d9f-4c92-bd78-f33e6320b273"> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="2d4a7918-6105-4746-b196-504ebe352250"/> + <column name="NAME" value="ProbabilitySalesproject"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="d8c35e5a-6935-4262-b919-84196bce8e6d"/> + <column name="CONTAINER" value="ProbabilitySalesproject"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="2d4a7918-6105-4746-b196-504ebe352250"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="KEYID" value="0"/> + <column name="TITLE" value="0%"/> + <column name="SORTING" valueNumeric="0"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="59fbb811-d183-4746-9b88-ed3c275f6f82"/> + <column name="CONTAINER" value="ProbabilitySalesproject"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="2d4a7918-6105-4746-b196-504ebe352250"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="KEYID" value="25"/> + <column name="TITLE" value="25%"/> + <column name="SORTING" valueNumeric="1"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="9fcc2591-9e96-466e-8fd0-223337a50a8f"/> + <column name="CONTAINER" value="ProbabilitySalesproject"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="2d4a7918-6105-4746-b196-504ebe352250"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="KEYID" value="50"/> + <column name="TITLE" value="50%"/> + <column name="SORTING" valueNumeric="2"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="70cef9ee-b221-4097-be5e-08a8f3e5a8b4"/> + <column name="CONTAINER" value="ProbabilitySalesproject"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="2d4a7918-6105-4746-b196-504ebe352250"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="KEYID" value="75"/> + <column name="TITLE" value="75%"/> + <column name="SORTING" valueNumeric="3"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="5de50a13-7871-4cee-9fab-9c419b2ce620"/> + <column name="CONTAINER" value="ProbabilitySalesproject"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="2d4a7918-6105-4746-b196-504ebe352250"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="KEYID" value="100"/> + <column name="TITLE" value="100%"/> + <column name="SORTING" valueNumeric="4"/> + </insert> + + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="aba6b313-7e35-4eeb-95e2-0e262c66fa9c"/> + <column name="NAME" value="ProbabilityOffer"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="38f30441-2d94-4558-9c53-a29d066731b9"/> + <column name="CONTAINER" value="ProbabilityOffer"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="aba6b313-7e35-4eeb-95e2-0e262c66fa9c"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="KEYID" value="0"/> + <column name="TITLE" value="0%"/> + <column name="SORTING" valueNumeric="0"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="1f411441-7677-4c64-88c0-d0f5b24f8a4c"/> + <column name="CONTAINER" value="ProbabilityOffer"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="aba6b313-7e35-4eeb-95e2-0e262c66fa9c"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="KEYID" value="25"/> + <column name="TITLE" value="25%"/> + <column name="SORTING" valueNumeric="1"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="26225ece-fdf9-4e72-a2b3-8ea295429157"/> + <column name="CONTAINER" value="ProbabilityOffer"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="aba6b313-7e35-4eeb-95e2-0e262c66fa9c"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="KEYID" value="50"/> + <column name="TITLE" value="50%"/> + <column name="SORTING" valueNumeric="2"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="01865353-6137-44fe-8817-6d67e33f895e"/> + <column name="CONTAINER" value="ProbabilityOffer"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="aba6b313-7e35-4eeb-95e2-0e262c66fa9c"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="KEYID" value="75"/> + <column name="TITLE" value="75%"/> + <column name="SORTING" valueNumeric="3"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="755eefec-ecb6-485d-91c9-8763b2a24ebf"/> + <column name="CONTAINER" value="ProbabilityOffer"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="aba6b313-7e35-4eeb-95e2-0e262c66fa9c"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="KEYID" value="100"/> + <column name="TITLE" value="100%"/> + <column name="SORTING" valueNumeric="4"/> + </insert> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/renameLeadTable.xml b/.liquibase/Data_alias/basic/2021.0.3/renameLeadTable.xml new file mode 100644 index 0000000000000000000000000000000000000000..3ff67e81e9cb86060978f085eee96d9d5f3fc8f2 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/renameLeadTable.xml @@ -0,0 +1,9 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="d.tran" id="22056191-8d5a-4690-8872-d0aa6cca43b4"> + <renameTable oldTableName="LEAD" newTableName="LEADS"/> + <renameColumn tableName="LEADS" columnDataType="CHAR(36)" oldColumnName="LEADID" newColumnName="LEADSID"/> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/update_ab_countryinfo_name_native.xml b/.liquibase/Data_alias/basic/2021.0.3/update_ab_countryinfo_name_native.xml new file mode 100644 index 0000000000000000000000000000000000000000..1b1d4071a37e1a78db8ca1ff340e0cfb950c2b6f --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/update_ab_countryinfo_name_native.xml @@ -0,0 +1,527 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="p.dietl" id="6788dcc4-2d9a-4863-9660-5069a69e1932"> + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="دولة الإمارات العربية المتØدة"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="AE"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="اÙغانستان"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="AF"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="Õ€Õ¡ÕµÕ¡Õ½Õ¿Õ¡Õ¶"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="AM"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="AzÉ™rbaycan"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="AZ"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="БългариÑ"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="BG"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="â€Ø§Ù„بØرين"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="BH"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="ʼbrug-yul"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="BT"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="БеларуÌÑÑŒ"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="BY"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="ä¸å›½"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="CN"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="ΚÏÏ€Ïος"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="CY"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="ÄŒeská republika"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="CZ"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="الجزائر"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="DZ"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="مصر‎"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="EG"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="الصØراء الغربية"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="EH"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="ኤáˆá‰µáˆ«"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="ER"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="ኢትዮጵያ"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="ET"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="სáƒáƒ¥áƒáƒ თველáƒ"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="GE"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="Ελλάδα"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="GR"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="香港"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="HK"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="יִשְׂרָ×ֵל"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="IL"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="à¤à¤¾à¤°à¤¤"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="IN"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="العراق"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="IQ"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="ایران"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="IR"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="الأردن"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="JO"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="日本"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="JP"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="КыргызÑтан"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="KG"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="KâmpÅchéa"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="KH"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="ë¶í•œ"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="KP"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="대한민êµ"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="KR"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="الكويت"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="KW"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="ҚазақÑтан"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="KZ"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="ສປປລາວ"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="LA"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="لبنان"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="LB"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="Å›rÄ« laṃkÄva"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="LK"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="â€Ù„يبيا"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="LY"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="المغرب"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="MA"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="Црна Гора"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="ME"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="M̧ajeļ"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="MH"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="Македонија"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="MK"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="Монгол улÑ"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="MN"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="澳門"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="MO"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="موريتانيا"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="MR"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="नेपाल"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="NP"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="NiuÄ“"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="NU"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="عمان"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="OM"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="Ùلسطين"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="PS"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="قطر"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="QA"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="Србија"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="RS"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="РоÑÑиÑ"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="RU"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="العربية السعودية"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="SA"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="السودان"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="SD"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="سوريا"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="SY"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="ประเทศไทย"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="TH"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="ТоҷикиÑтон"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="TJ"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="تونس"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="TN"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="臺ç£"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="TW"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="Україна"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="UA"/> + </whereParams> + </update> + + + <update tableName="AB_COUNTRYINFO"> + <column name="NAME_NATIVE" value="Việt Nam"/> + <where>ISO2 = ?</where> + <whereParams> + <param value="VN"/> + </whereParams> + </update> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.1.0/Addressvalidation/addValidationResultColumn.xml b/.liquibase/Data_alias/basic/2021.1.0/Addressvalidation/addValidationResultColumn.xml new file mode 100644 index 0000000000000000000000000000000000000000..1674db376b287096f1283a1b6a7c36a45264f1eb --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.1.0/Addressvalidation/addValidationResultColumn.xml @@ -0,0 +1,10 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="s.pongratz" id="5974608c-488a-4be9-b404-c58dc7240f7d"> + <addColumn tableName="ADDRESS"> + <column name="VALIDATION_RESULT" type="NCLOB"/> + </addColumn> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.1.0/Addressvalidation/changelog.xml b/.liquibase/Data_alias/basic/2021.1.0/Addressvalidation/changelog.xml new file mode 100644 index 0000000000000000000000000000000000000000..44bba8b77f2c963cf4b0c74bc8b2d975e2ddd80b --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.1.0/Addressvalidation/changelog.xml @@ -0,0 +1,6 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <include relativeToChangelogFile="true" file="addValidationResultColumn.xml"/> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.1.0/Advertising/AdvertisingKeywords.xml b/.liquibase/Data_alias/basic/2021.1.0/Advertising/AdvertisingKeywords.xml new file mode 100644 index 0000000000000000000000000000000000000000..a5246cf99eb5634139dc78d5b4820be3d084d479 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.1.0/Advertising/AdvertisingKeywords.xml @@ -0,0 +1,80 @@ +<?xml version="1.0" encoding="UTF-8"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + + <changeSet author="A.Riedl" id="e361ec95-f6cc-43ea-afe9-98d7600acc8a"> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="cf3cd723-687d-42ac-9ce2-aa3cd59aba7a"/> + <column name="NAME" value="AdvertisingStatus"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="6257dcf2-636c-4de8-be36-11d703af00a4"/> + <column name="KEYID" value="ADVERTISINGSTATOPEN"/> + <column name="TITLE" value="Open"/> + <column name="CONTAINER"/> + <column name="SORTING" valueNumeric="1"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="cf3cd723-687d-42ac-9ce2-aa3cd59aba7a"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="7b95821d-1992-43b0-9384-e07460308019"/> + <column name="KEYID" value="ADVERTISINGFOLLOWEDUP"/> + <column name="TITLE" value="Followed up"/> + <column name="CONTAINER"/> + <column name="SORTING" valueNumeric="3"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="cf3cd723-687d-42ac-9ce2-aa3cd59aba7a"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="fe53d26a-9fe2-4bb3-9afe-61f980fa1d17"/> + <column name="KEYID" value="ADVERTISINGSTATSENT"/> + <column name="TITLE" value="Sent"/> + <column name="CONTAINER"/> + <column name="SORTING" valueNumeric="2"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="cf3cd723-687d-42ac-9ce2-aa3cd59aba7a"/> + </insert> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="60b31bd8-2c5e-461c-b4a1-6c4e31d505e8"/> + <column name="NAME" value="AdvertisingDelivery"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="36c9729f-168b-4801-9b17-1bc3630ea114"/> + <column name="KEYID" value="ADVERTDELIVERYPERSONAL"/> + <column name="TITLE" value="personal"/> + <column name="CONTAINER"/> + <column name="SORTING" valueNumeric="1"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="60b31bd8-2c5e-461c-b4a1-6c4e31d505e8"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="87f6b1b5-43ce-492e-9baa-d1ad95a06dc0"/> + <column name="KEYID" value="ADVERTDELIVERYMAIL"/> + <column name="TITLE" value="via mail"/> + <column name="CONTAINER"/> + <column name="SORTING" valueNumeric="3"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="60b31bd8-2c5e-461c-b4a1-6c4e31d505e8"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="092dcb14-b207-4c20-b5c7-5aeaf07ca081"/> + <column name="KEYID" value="ADVERTDELIVERYPOST"/> + <column name="TITLE" value="via post"/> + <column name="CONTAINER"/> + <column name="SORTING" valueNumeric="2"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="60b31bd8-2c5e-461c-b4a1-6c4e31d505e8"/> + </insert> + </changeSet> +</databaseChangeLog> diff --git a/.liquibase/Data_alias/basic/2021.1.0/Advertising/AlterProduct.xml b/.liquibase/Data_alias/basic/2021.1.0/Advertising/AlterProduct.xml new file mode 100644 index 0000000000000000000000000000000000000000..8a5c306cf13f144832938b812dd955dd9d4a1207 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.1.0/Advertising/AlterProduct.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="a.riedl" id="e03b89e1-f7d1-43a8-9e60-e043d6eae241" > + <addColumn tableName="PRODUCT"> + <column name="DIGITAL" type="CHAR(1)"/> + </addColumn> + </changeSet> +</databaseChangeLog> diff --git a/.liquibase/Data_alias/basic/2021.1.0/Advertising/changelog.xml b/.liquibase/Data_alias/basic/2021.1.0/Advertising/changelog.xml new file mode 100644 index 0000000000000000000000000000000000000000..b1dad5036700f341690660ff2bad304372c27d4d --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.1.0/Advertising/changelog.xml @@ -0,0 +1,10 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + + <include relativeToChangelogFile="true" file="AlterProduct.xml"/> + <include relativeToChangelogFile="true" file="create_Advertising.xml"/> + <include relativeToChangelogFile="true" file="create_AdvertisingItem.xml"/> + <include relativeToChangelogFile="true" file="AdvertisingKeywords.xml"/> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.1.0/Advertising/create_Advertising.xml b/.liquibase/Data_alias/basic/2021.1.0/Advertising/create_Advertising.xml new file mode 100644 index 0000000000000000000000000000000000000000..b7fad824763b87c0388b18b22e871c41742bb6c3 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.1.0/Advertising/create_Advertising.xml @@ -0,0 +1,33 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="a.riedl" id="c0bd77e0-6ddc-49fe-a981-edd359965d26"> + <createTable tableName="ADVERTISING"> + <column name="ADVERTISINGID" type="CHAR(36)"> + <constraints primaryKey="true" primaryKeyName="PK_ADVERTISING_ADVERTISINGID"/> + </column> + <column name="CONTACT_ID" type="CHAR(36)"/> + <column name="RESPONSIBLE_ID" type="CHAR(36)"/> + <column name="ROW_ID" type="CHAR(36)"> + <constraints nullable="false"/> + </column> + <column name="OBJECT_TYPE" type="NVARCHAR(63)"> + <constraints nullable="false"/> + </column> + <column name="STATUS" type="VARCHAR(36)"/> + <column name="CURRENCY" type="VARCHAR(36)"/> + <column name="DATE_NEW" type="DATETIME"/> + <column name="DATE_EDIT" type="DATETIME"/> + </createTable> + <createIndex tableName="ADVERTISING" indexName="IDX_ADVERTISING_RESPONSIBLE_ID"> + <column name="RESPONSIBLE_ID"/> + </createIndex> + <createIndex tableName="ADVERTISING" indexName="IDX_ADVERTISING_CONTACT_ID"> + <column name="CONTACT_ID"/> + </createIndex> + <createIndex tableName="ADVERTISING" indexName="IDX_ADVERTISING_ROW_ID"> + <column name="ROW_ID"/> + </createIndex> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.1.0/Advertising/create_AdvertisingItem.xml b/.liquibase/Data_alias/basic/2021.1.0/Advertising/create_AdvertisingItem.xml new file mode 100644 index 0000000000000000000000000000000000000000..1731aa081abc6aa2f8ac85a6b0b063581560ab96 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.1.0/Advertising/create_AdvertisingItem.xml @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="A.Riedl" id="21cfcb52-9597-403b-9fa4-49edbe699545"> + <createTable tableName="ADVERTISINGITEM"> + <column name="ADVERTISINGITEMID" type="CHAR(36)"> + <constraints primaryKey="true" primaryKeyName="PK_ADVERTISINGITEM_ADVERTISINGITEMID"></constraints> + </column> + <column name="ADVERTISING_ID" type="CHAR(36)"> + <constraints nullable="false"/> + </column> + <column name="PRODUCT_ID" type="CHAR(36)"> + <constraints nullable="false" foreignKeyName="FK_OFFERITEM_PRODUCT_ID" references="PRODUCT(PRODUCTID)"/> + </column> + <column name="ITEMPOSITION" type="VARCHAR(30)"/> + <column name="QUANTITY" type="NUMERIC(14,2)"/> + <column name="UNIT" type="VARCHAR(36)"/> + <column name="FREE" type="TINYINT"> + <constraints nullable="false"/> + </column> + <column name="PRICE" type="NUMERIC(14,2)"/> + <column name="TARGETAMOUNT" type="NUMERIC(14,2)"/> + <column name="ACTUALAMOUNT" type="NUMERIC(14,2)"/> + <column name="DELIVERY" type="VARCHAR(36)"/> + <column name="SENT" type="TINYINT"> + <constraints nullable="false"/> + </column> + <column name="STATUS" type="VARCHAR(36)"/> + <column name="INFO" type="NCLOB"/> + <column name="USER_NEW" type="NVARCHAR(50)"></column> + <column name="USER_EDIT" type="NVARCHAR(50)"></column> + <column name="DATE_NEW" type="DATETIME"></column> + <column name="DATE_EDIT" type="DATETIME"></column> + </createTable> + <createIndex tableName="ADVERTISINGITEM" indexName="IDX_ADVERTISINGITEM_ADVERTISING_ID"> + <column name="ADVERTISING_ID"/> + </createIndex> + </changeSet> +</databaseChangeLog> diff --git a/.liquibase/Data_alias/basic/2021.1.0/Bulkmail/AlterBulkmail.xml b/.liquibase/Data_alias/basic/2021.1.0/Bulkmail/AlterBulkmail.xml new file mode 100644 index 0000000000000000000000000000000000000000..0954f7085c2e345bd834d6a3c2c1e01b24fc2eba --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.1.0/Bulkmail/AlterBulkmail.xml @@ -0,0 +1,8 @@ +<?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.groppe" id="09913f5d-9fe9-4cf9-b356-d329b8b0d277"> + <addColumn tableName="BULKMAIL"> + <column name="EMPLOYEE_CONTACT_ID" type="char(36)"/> + </addColumn> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.1.0/Bulkmail/changelog.xml b/.liquibase/Data_alias/basic/2021.1.0/Bulkmail/changelog.xml new file mode 100644 index 0000000000000000000000000000000000000000..633ec59ea62cdf072d82fa13111606b5975d063a --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.1.0/Bulkmail/changelog.xml @@ -0,0 +1,4 @@ +<?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"> + <include relativeToChangelogFile="true" file="AlterBulkmail.xml"/> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.1.0/Classification/alter_ClassificationScore.xml b/.liquibase/Data_alias/basic/2021.1.0/Classification/alter_ClassificationScore.xml new file mode 100644 index 0000000000000000000000000000000000000000..8e611914be01cf361fcb194fed32926e2712b812 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.1.0/Classification/alter_ClassificationScore.xml @@ -0,0 +1,19 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="b.ulrich" id="a2cee514-2b0a-4ac4-815a-9b40abfea920"> + <addColumn tableName="CLASSIFICATIONSCORE"> + <column name="FIELDVALUE" type="VARCHAR(1000)"/> + </addColumn> + <addColumn tableName="CLASSIFICATIONSCORE"> + <column name="INDICATORTEXT" type="VARCHAR(100)"/> + </addColumn> + <addColumn tableName="CLASSIFICATIONSCORE"> + <column name="INDICATORNUMBER" type="VARCHAR(100)"/> + </addColumn> + <addColumn tableName="CLASSIFICATIONSCORE"> + <column name="INDICATORINTEGER" type="VARCHAR(100)"/> + </addColumn> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.1.0/Classification/alter_ClassificationType.xml b/.liquibase/Data_alias/basic/2021.1.0/Classification/alter_ClassificationType.xml new file mode 100644 index 0000000000000000000000000000000000000000..f605a6d0e9bd9015fca3e238ed71cb01d84883da --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.1.0/Classification/alter_ClassificationType.xml @@ -0,0 +1,16 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="b.ulrich" id="3e2b99e1-594c-4a75-8474-33608819135a"> + <addColumn tableName="CLASSIFICATIONTYPE"> + <column name="FIELD" type="NVARCHAR(100)"/> + </addColumn> + <addColumn tableName="CLASSIFICATIONTYPE"> + <column name="FIELDTYPE" type="VARCHAR(64)"/> + </addColumn> + <addColumn tableName="CLASSIFICATIONTYPE"> + <column name="INDICATORTYPE" type="VARCHAR(64)"/> + </addColumn> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.1.0/Classification/changelog.xml b/.liquibase/Data_alias/basic/2021.1.0/Classification/changelog.xml new file mode 100644 index 0000000000000000000000000000000000000000..ea5caaa5d16964b5f7f56d18c8d210f1f58173da --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.1.0/Classification/changelog.xml @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <include file="alter_ClassificationType.xml" relativeToChangelogFile="true"/> + <include file="alter_ClassificationScore.xml" relativeToChangelogFile="true"/> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.1.0/EmailFilterHandling/changelog.xml b/.liquibase/Data_alias/basic/2021.1.0/EmailFilterHandling/changelog.xml new file mode 100644 index 0000000000000000000000000000000000000000..1db8a9eb2e4a6d3bd40a7c764826a1b07cb5accf --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.1.0/EmailFilterHandling/changelog.xml @@ -0,0 +1,7 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <include relativeToChangelogFile="true" file="create_emailFilterHandling.xml"/> + <include relativeToChangelogFile="true" file="insert_emailFilterTypeKeyword.xml"/> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.1.0/EmailFilterHandling/create_emailFilterHandling.xml b/.liquibase/Data_alias/basic/2021.1.0/EmailFilterHandling/create_emailFilterHandling.xml new file mode 100644 index 0000000000000000000000000000000000000000..a6255d5b0b58e564e60aa3e278d1e67947f796ad --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.1.0/EmailFilterHandling/create_emailFilterHandling.xml @@ -0,0 +1,30 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="s.listl" id="ee5b4770-5ecc-4fc1-a7aa-69bdb3cc730d"> + <createTable tableName="EMAIL_FILTER_HANDLING"> + <column name="EMAIL_FILTER_HANDLINGID" type="CHAR(36)"> + <constraints nullable="false" primaryKey="true" primaryKeyName="PK_EMAIL_FILTER_HANDLINGID"/> + </column> + <column name="TITLE" type="NVARCHAR(250)"> + <constraints nullable="false"/> + </column> + <column name="FILTER_TYPE" type="VARCHAR(36)"> + <constraints nullable="false"/> + </column> + <column name="FILTER" type="NCLOB"/> + <column name="WORKFLOWDEFINITION_KEY" type="NVARCHAR(255)"/> + <column name="PRIORITY" type="INTEGER"> + <constraints nullable="false"/> + </column> + <column name="ISACTIVE" type="TINYINT"> + <constraints nullable="false"/> + </column> + <column name="DESCRIPTION" type="NVARCHAR(500)"/> + <column name="ISFALLTHROUGH" type="TINYINT"> + <constraints nullable="false"/> + </column> + </createTable> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.1.0/EmailFilterHandling/insert_emailFilterTypeKeyword.xml b/.liquibase/Data_alias/basic/2021.1.0/EmailFilterHandling/insert_emailFilterTypeKeyword.xml new file mode 100644 index 0000000000000000000000000000000000000000..68c7ffac5b34cd787f87b033dad2307431e517bd --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.1.0/EmailFilterHandling/insert_emailFilterTypeKeyword.xml @@ -0,0 +1,43 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="s.listl" id="0c080e23-2090-4079-8d89-5e045af52ca2"> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="893a5e99-1592-4e58-b5a3-4b04820b7a16"/> + <column name="NAME" value="EmailFilterType"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="ce18fcea-f5c1-4d72-ad52-2546eb74fff1"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="893a5e99-1592-4e58-b5a3-4b04820b7a16"/> + <column name="KEYID" value="EMAIL_FILTER_BLACKLIST"/> + <column name="TITLE" value="Blacklist"/> + <column name="CONTAINER" value="EmailFilterType"/> + <column name="SORTING" valueNumeric="1"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="1"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="5536e9b6-9f7a-4b74-a0eb-f3c2f49d94fc"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="893a5e99-1592-4e58-b5a3-4b04820b7a16"/> + <column name="KEYID" value="EMAIL_FILTER_BOUNCESOFT"/> + <column name="TITLE" value="Soft Bounce"/> + <column name="CONTAINER" value="EmailFilterType"/> + <column name="SORTING" valueNumeric="2"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="1"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="96a83778-8988-4d28-b2aa-43262305fdea"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="893a5e99-1592-4e58-b5a3-4b04820b7a16"/> + <column name="KEYID" value="EMAIL_FILTER_BOUNCEHARD"/> + <column name="TITLE" value="Hard Bounce"/> + <column name="CONTAINER" value="EmailFilterType"/> + <column name="SORTING" valueNumeric="3"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="1"/> + </insert> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.1.0/alterPlanningMonthData.xml b/.liquibase/Data_alias/basic/2021.1.0/alterPlanningMonthData.xml new file mode 100644 index 0000000000000000000000000000000000000000..3bc2dd381f540a8756e64995fdc6380d5b308e8d --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.1.0/alterPlanningMonthData.xml @@ -0,0 +1,12 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="j.luginger" id="070e05ce-5afe-4738-8448-7c08b9961d78"> + + <update tableName="PLANNING_MONTH"> + <column name="MONTH_FACTOR" valueNumeric="8.34"/> + <where>MONTH_NUMBER in (1, 2, 3, 4)</where> + </update> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.1.0/changelog.xml b/.liquibase/Data_alias/basic/2021.1.0/changelog.xml new file mode 100644 index 0000000000000000000000000000000000000000..0a7259a9b95118cb6870f11cf94d6f032d21cfbb --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.1.0/changelog.xml @@ -0,0 +1,14 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <include relativeToChangelogFile="true" file="alterPlanningMonthData.xml"/> + <include relativeToChangelogFile="true" file="offerWorkflow/alter_offer_approval.xml"/> + <include relativeToChangelogFile="true" file="Classification/changelog.xml"/> + <include relativeToChangelogFile="true" file="offerWorkflow/add_ab_keyword_entry_offerstatus.xml"/> + <include relativeToChangelogFile="true" file="offerWorkflow/add_ab_keyword_entry_activityCategory.xml"/> + <include relativeToChangelogFile="true" file="create_standardWorkflow.xml"/> + <include relativeToChangelogFile="true" file="Advertising/changelog.xml"/> + <include relativeToChangelogFile="true" file="Bulkmail/changelog.xml"/> + <include relativeToChangelogFile="true" file="Addressvalidation/changelog.xml"/> + <include relativeToChangelogFile="true" file="EmailFilterHandling/changelog.xml"/> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.1.0/create_standardWorkflow.xml b/.liquibase/Data_alias/basic/2021.1.0/create_standardWorkflow.xml new file mode 100644 index 0000000000000000000000000000000000000000..52c2aaf4f075bbe74b075f45789949a4cf0ea1b2 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.1.0/create_standardWorkflow.xml @@ -0,0 +1,25 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="s.listl" id="f732bc4a-3fc1-46e5-b2c5-ff3b7041b13a"> + <createTable tableName="STANDARD_WORKFLOW"> + <column name="STANDARD_WORKFLOWID" type="CHAR(36)"> + <constraints nullable="false" primaryKey="true" primaryKeyName="PK_STANDARD_WORKFLOWID"/> + </column> + <column name="PROCESSKEY" type="NVARCHAR(255)"> + <constraints nullable="false"/> + </column> + <column name="NAME" type="NVARCHAR(255)"> + <constraints nullable="false"/> + </column> + <column name="DESCRIPTION" type="NVARCHAR(4000)"/> + <column name="PROCESSXML" type="BLOB"> + <constraints nullable="false"/> + </column> + <column name="DIAGRAM" type="BLOB"> + <constraints nullable="false"/> + </column> + </createTable> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.1.0/offerWorkflow/add_ab_keyword_entry_activityCategory.xml b/.liquibase/Data_alias/basic/2021.1.0/offerWorkflow/add_ab_keyword_entry_activityCategory.xml new file mode 100644 index 0000000000000000000000000000000000000000..4d3f86db7dd68b8ba38023454bac97b1680ce656 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.1.0/offerWorkflow/add_ab_keyword_entry_activityCategory.xml @@ -0,0 +1,17 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet id="b8d9e809-b65e-1997-bd7b-183727ehabba" author="e.rohrmeyer"> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="2e278ebd-5efe-40db-9ca0-2e8b08510003"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="a5206aff-79f8-413e-a76d-4cb9d39694d3"/> + <column name="KEYID" value="APPROVAL"/> + <column name="TITLE" value="Approval"/> + <column name="CONTAINER" value="ActivityCategory"/> + <column name="SORTING" valueNumeric="7"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + </insert> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.1.0/offerWorkflow/add_ab_keyword_entry_offerstatus.xml b/.liquibase/Data_alias/basic/2021.1.0/offerWorkflow/add_ab_keyword_entry_offerstatus.xml new file mode 100644 index 0000000000000000000000000000000000000000..3d368b7a31beddde39295318f77d1049da8ed8dd --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.1.0/offerWorkflow/add_ab_keyword_entry_offerstatus.xml @@ -0,0 +1,27 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet id="b8d9e809-b65e-1997-bd7b-183727ehabba" author="e.rohrmeyer"> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="2e7852c6-a957-45ca-b971-0a7841e2460b"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="3b0a4044-9cfd-4466-9edd-50876a926e76"/> + <column name="KEYID" value="OFFERSTATAPPROVED"/> + <column name="TITLE" value="Approved"/> + <column name="CONTAINER" value="OfferStatus"/> + <column name="SORTING" valueNumeric="5"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="347cad21-4a72-4df5-a8b1-3ed5005eb8e2"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="3b0a4044-9cfd-4466-9edd-50876a926e76"/> + <column name="KEYID" value="OFFERSTATDENIED"/> + <column name="TITLE" value="Approval denied"/> + <column name="CONTAINER" value="OfferStatus"/> + <column name="SORTING" valueNumeric="6"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="0"/> + </insert> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.1.0/offerWorkflow/alter_offer_approval.xml b/.liquibase/Data_alias/basic/2021.1.0/offerWorkflow/alter_offer_approval.xml new file mode 100644 index 0000000000000000000000000000000000000000..562c4ac797072f286610a8a8801e59ff5311b9c1 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.1.0/offerWorkflow/alter_offer_approval.xml @@ -0,0 +1,11 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="e.rohrmeyer" id="b8d9e809-b65e-1997-bd7b-183727eeabba"> + <addColumn tableName="OFFER"> + <column name="ACTIONUSER" type="CHAR(36)"/> + <column name="APPROVAL" type="CHAR(1)"/> + </addColumn> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/_demoData/changelog.xml b/.liquibase/Data_alias/basic/_demoData/changelog.xml index f6d11f67aca68ced3d37b0ba75215a15d7a8d4d9..391f71514bee84efda661cb28b149d35c5829813 100644 --- a/.liquibase/Data_alias/basic/_demoData/changelog.xml +++ b/.liquibase/Data_alias/basic/_demoData/changelog.xml @@ -14,13 +14,13 @@ <include file="generatedData/campaignparticipant.xml" relativeToChangelogFile="true"/> <include file="generatedData/campaignparticipantlog.xml" relativeToChangelogFile="true"/> <include file="generatedData/campaignstep.xml" relativeToChangelogFile="true"/> + <include file="generatedData/checklistentry.xml" relativeToChangelogFile="true"/> <include file="generatedData/classification.xml" relativeToChangelogFile="true"/> <include file="generatedData/classificationgrading.xml" relativeToChangelogFile="true"/> <include file="generatedData/classificationgroup.xml" relativeToChangelogFile="true"/> <include file="generatedData/classificationscore.xml" relativeToChangelogFile="true"/> <include file="generatedData/classificationstorage.xml" relativeToChangelogFile="true"/> <include file="generatedData/classificationtype.xml" relativeToChangelogFile="true"/> - <include file="generatedData/commrestriction.xml" relativeToChangelogFile="true"/> <include file="generatedData/communication.xml" relativeToChangelogFile="true"/> <include file="generatedData/contact.xml" relativeToChangelogFile="true"/> <include file="generatedData/contract.xml" relativeToChangelogFile="true"/> @@ -32,17 +32,18 @@ <include file="generatedData/documenttemplateplaceofuse.xml" relativeToChangelogFile="true"/> <include file="generatedData/dsgvo.xml" relativeToChangelogFile="true"/> <include file="generatedData/dsgvoinfo.xml" relativeToChangelogFile="true"/> - <include file="generatedData/duplicatescanner.xml" relativeToChangelogFile="true"/> <include file="generatedData/exporttemplate.xml" relativeToChangelogFile="true"/> <include file="generatedData/exporttemplatefield.xml" relativeToChangelogFile="true"/> <include file="generatedData/exporttemplateplaceofuse.xml" relativeToChangelogFile="true"/> <include file="generatedData/forecast.xml" relativeToChangelogFile="true"/> + <include file="generatedData/interest.xml" relativeToChangelogFile="true"/> <include file="generatedData/letterrecipient.xml" relativeToChangelogFile="true"/> <include file="generatedData/objectmember.xml" relativeToChangelogFile="true"/> <include file="generatedData/offer.xml" relativeToChangelogFile="true"/> <include file="generatedData/offeritem.xml" relativeToChangelogFile="true"/> <include file="generatedData/organisation.xml" relativeToChangelogFile="true"/> <include file="generatedData/person.xml" relativeToChangelogFile="true"/> + <include file="generatedData/prod2prod.xml" relativeToChangelogFile="true"/> <include file="generatedData/product.xml" relativeToChangelogFile="true"/> <include file="generatedData/productprice.xml" relativeToChangelogFile="true"/> <include file="generatedData/salesorder.xml" relativeToChangelogFile="true"/> @@ -56,4 +57,5 @@ <include file="generatedData/tasklink.xml" relativeToChangelogFile="true"/> <include file="generatedData/ticket.xml" relativeToChangelogFile="true"/> <include file="generatedData/visitrecommendation.xml" relativeToChangelogFile="true"/> + <include file="generatedData/weblink.xml" relativeToChangelogFile="true"/> </databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/ab_objectrelationtype.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/ab_objectrelationtype.xml index 2231334c01502ed21cf8303321b6825dc57b0af3..54c82b6ecbb371bfbfc8b24503aee7a122869330 100644 --- a/.liquibase/Data_alias/basic/_demoData/generatedData/ab_objectrelationtype.xml +++ b/.liquibase/Data_alias/basic/_demoData/generatedData/ab_objectrelationtype.xml @@ -41,7 +41,7 @@ <insert tableName="ab_objectrelationtype"> <column name="SIDE" valueNumeric="1"/> <column name="AB_OBJECTRELATIONTYPEID" value="39e73949-c8d9-46a2-a0b5-18be95e7ba11"/> - <column name="OBJECT_TYPE" value="PrivatePerson"/> + <column name="OBJECT_TYPE" value="Person"/> <column name="HIERARCHY" valueNumeric="0"/> <column name="ICON" value="VAADIN:FAMILY"/> <column name="RELATION_TYPE" value="f36c69c2-6d03-45ef-81a0-f9118ce3f4c6"/> @@ -86,7 +86,7 @@ <insert tableName="ab_objectrelationtype"> <column name="SIDE" valueNumeric="2"/> <column name="AB_OBJECTRELATIONTYPEID" value="a2296f93-2371-4ab8-9f29-ef0795d1e9b2"/> - <column name="OBJECT_TYPE" value="PrivatePerson"/> + <column name="OBJECT_TYPE" value="Person"/> <column name="HIERARCHY" valueNumeric="0"/> <column name="ICON" value="VAADIN:FAMILY"/> <column name="RELATION_TYPE" value="f36c69c2-6d03-45ef-81a0-f9118ce3f4c6"/> @@ -104,7 +104,7 @@ <insert tableName="ab_objectrelationtype"> <column name="SIDE" valueNumeric="2"/> <column name="AB_OBJECTRELATIONTYPEID" value="b3b85332-1c86-4cd8-a3b9-34c49c51f01a"/> - <column name="OBJECT_TYPE" value="PrivatePerson"/> + <column name="OBJECT_TYPE" value="Person"/> <column name="HIERARCHY" valueNumeric="0"/> <column name="ICON" value="VAADIN:FAMILY"/> <column name="RELATION_TYPE" value="52f3ec58-71d5-469f-85e4-37ef2eeeb3e0"/> @@ -122,7 +122,7 @@ <insert tableName="ab_objectrelationtype"> <column name="SIDE" valueNumeric="1"/> <column name="AB_OBJECTRELATIONTYPEID" value="c74ad02c-1db9-4f47-8691-aba349dbe316"/> - <column name="OBJECT_TYPE" value="PrivatePerson"/> + <column name="OBJECT_TYPE" value="Person"/> <column name="HIERARCHY" valueNumeric="0"/> <column name="ICON" value="VAADIN:FAMILY"/> <column name="RELATION_TYPE" value="52f3ec58-71d5-469f-85e4-37ef2eeeb3e0"/> diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/bulkmail.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/bulkmail.xml index b3142a2cae6c09150008a62cdf5495ed7369e04f..d124f793b431215d0fb76156fe55123cc7cd09ff 100644 --- a/.liquibase/Data_alias/basic/_demoData/generatedData/bulkmail.xml +++ b/.liquibase/Data_alias/basic/_demoData/generatedData/bulkmail.xml @@ -5,7 +5,7 @@ <insert tableName="bulkmail"> <column name="CREATEACTIVITIES" valueNumeric="1"/> <column name="BULKMAILID" value="2acfd3da-e986-414f-87cf-7ad2b46e5c59"/> - <column name="SENDER" value="tadmin@meine-firma.de"/> + <column name="SENDER_EMAIL_ADDRESS" value="tadmin@meine-firma.de"/> <column name="SUBJECT" value="Erstkontakt meineFirma"/> <column name="DOCUMENTTEMPLATE_ID" value="1cabdde7-870e-4094-a0f7-a335ded3536a"/> <column name="NAME" value="Serienmail - Newsletter"/> @@ -14,7 +14,7 @@ <insert tableName="bulkmail"> <column name="CREATEACTIVITIES" valueNumeric="1"/> <column name="BULKMAILID" value="bbb832fe-8ae4-403a-816a-b24d496933f2"/> - <column name="SENDER" value="tadmin@meine-firma.de"/> + <column name="SENDER_EMAIL_ADDRESS" value="tadmin@meine-firma.de"/> <column name="SUBJECT" value="Email Vorlage Erstkontakt"/> <column name="DOCUMENTTEMPLATE_ID" value="12da39a8-6fc9-4220-b09d-179cd611a814"/> <column name="NAME" value="Produktinformationen"/> @@ -23,7 +23,7 @@ <insert tableName="bulkmail"> <column name="CREATEACTIVITIES" valueNumeric="1"/> <column name="BULKMAILID" value="c4bd88c3-6205-4b91-8ba6-fd44fda2f19d"/> - <column name="SENDER" value="tadmin@meine-firma.de"/> + <column name="SENDER_EMAIL_ADDRESS" value="tadmin@meine-firma.de"/> <column name="SUBJECT" value="Email Vorlage Erstkontakt"/> <column name="DOCUMENTTEMPLATE_ID" value="12da39a8-6fc9-4220-b09d-179cd611a814"/> <column name="NAME" value="Erstkontakt ADITO"/> diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/checklistentry.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/checklistentry.xml new file mode 100644 index 0000000000000000000000000000000000000000..2920277bd600a23d2ceb42d170a3a64e388ba0f2 --- /dev/null +++ b/.liquibase/Data_alias/basic/_demoData/generatedData/checklistentry.xml @@ -0,0 +1,253 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="p.neub" id="ae84062f-4fe4-40e6-b8d3-d90a0ee0c45d"> + <delete tableName="CHECKLISTENTRY"/> + + <insert tableName="CHECKLISTENTRY"> + <column name="AUTO" valueNumeric="1"/> + <column name="CHECKLIST_ID" value="179dcc0d-e6fa-411d-b5ee-cb25b9735dbe"/> + <column name="DATE_EDIT"/> + <column name="USER_EDIT"/> + <column name="CHECKLISTENTRYID" value="75e715fb-55fb-455b-8a68-a72bb800d856"/> + <column name="TITLE" value="salesprojectContactsGenerationSource"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW"/> + </insert> + <insert tableName="CHECKLISTENTRY"> + <column name="AUTO" valueNumeric="1"/> + <column name="CHECKLIST_ID" value="179dcc0d-e6fa-411d-b5ee-cb25b9735dbe"/> + <column name="DATE_EDIT"/> + <column name="USER_EDIT"/> + <column name="CHECKLISTENTRYID" value="aed8a754-b328-4fe0-89ef-b04b74d80ca2"/> + <column name="TITLE" value="salesprojectClassificationFields"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW"/> + </insert> + + <insert tableName="CHECKLISTENTRY"> + <column name="AUTO" valueNumeric="0"/> + <column name="CHECKLIST_ID" value="3d0f1d25-cee8-4b83-a0de-3fded83ff9c4"/> + <column name="DATE_EDIT"/> + <column name="USER_EDIT"/> + <column name="CHECKLISTENTRYID" value="3fa544d6-25a4-4597-a501-e36d8bfbc0ec"/> + <column name="TITLE" value="Ermittlung des Kundenbedarfs (Anforderungen abgefragt)"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW"/> + </insert> + <insert tableName="CHECKLISTENTRY"> + <column name="AUTO" valueNumeric="1"/> + <column name="CHECKLIST_ID" value="3d0f1d25-cee8-4b83-a0de-3fded83ff9c4"/> + <column name="DATE_EDIT"/> + <column name="USER_EDIT"/> + <column name="CHECKLISTENTRYID" value="01f3515c-4b35-43f5-9943-d8ad8f42b804"/> + <column name="TITLE" value="salesprojectSegmentPrio"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW"/> + </insert> + <insert tableName="CHECKLISTENTRY"> + <column name="AUTO" valueNumeric="1"/> + <column name="CHECKLIST_ID" value="3d0f1d25-cee8-4b83-a0de-3fded83ff9c4"/> + <column name="DATE_EDIT"/> + <column name="USER_EDIT"/> + <column name="CHECKLISTENTRYID" value="7a52650a-5e06-4ffe-9fb0-c0abdae67efa"/> + <column name="TITLE" value="salesprojectVolume"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW"/> + </insert> + <insert tableName="CHECKLISTENTRY"> + <column name="AUTO" valueNumeric="1"/> + <column name="CHECKLIST_ID" value="3d0f1d25-cee8-4b83-a0de-3fded83ff9c4"/> + <column name="DATE_EDIT"/> + <column name="USER_EDIT"/> + <column name="CHECKLISTENTRYID" value="2dc42fbb-4e0b-498f-8032-0c5451bea157"/> + <column name="TITLE" value="salesprojectRoleProjectteam"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW"/> + </insert> + <insert tableName="CHECKLISTENTRY"> + <column name="AUTO" valueNumeric="1"/> + <column name="CHECKLIST_ID" value="3d0f1d25-cee8-4b83-a0de-3fded83ff9c4"/> + <column name="DATE_EDIT"/> + <column name="USER_EDIT"/> + <column name="CHECKLISTENTRYID" value="7bd69f26-0dd6-453e-977d-108f0f2c7c64"/> + <column name="TITLE" value="salesprojectFirstCustConv"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW"/> + </insert> + + <insert tableName="CHECKLISTENTRY"> + <column name="AUTO" valueNumeric="0"/> + <column name="CHECKLIST_ID" value="ecf50252-e0c2-4e7a-8cc6-078b5978d2c5"/> + <column name="DATE_EDIT"/> + <column name="USER_EDIT"/> + <column name="CHECKLISTENTRYID" value="667d09bd-3c7f-4a6e-a71d-fff48fbd7c54"/> + <column name="TITLE" value="Spezifizierung der Anforderungen"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW"/> + </insert> + <insert tableName="CHECKLISTENTRY"> + <column name="AUTO" valueNumeric="0"/> + <column name="CHECKLIST_ID" value="ecf50252-e0c2-4e7a-8cc6-078b5978d2c5"/> + <column name="DATE_EDIT"/> + <column name="USER_EDIT"/> + <column name="CHECKLISTENTRYID" value="083daafd-f349-42a6-94e2-9425f9b8afe6"/> + <column name="TITLE" value="Entwicklung der Lösungsstrategie"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW"/> + </insert> + <insert tableName="CHECKLISTENTRY"> + <column name="AUTO" valueNumeric="1"/> + <column name="CHECKLIST_ID" value="ecf50252-e0c2-4e7a-8cc6-078b5978d2c5"/> + <column name="DATE_EDIT"/> + <column name="USER_EDIT"/> + <column name="CHECKLISTENTRYID" value="28705e11-8d57-4ff7-afa9-9d7c3b981009"/> + <column name="TITLE" value="salesprojectFurtherCustomerMeetings"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW"/> + </insert> + <insert tableName="CHECKLISTENTRY"> + <column name="AUTO" valueNumeric="1"/> + <column name="CHECKLIST_ID" value="ecf50252-e0c2-4e7a-8cc6-078b5978d2c5"/> + <column name="DATE_EDIT"/> + <column name="USER_EDIT"/> + <column name="CHECKLISTENTRYID" value="1d3adc61-d1a0-41b7-972c-52e2b5f89551"/> + <column name="TITLE" value="salesprojectRoleProjectteam"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW"/> + </insert> + <insert tableName="CHECKLISTENTRY"> + <column name="AUTO" valueNumeric="1"/> + <column name="CHECKLIST_ID" value="ecf50252-e0c2-4e7a-8cc6-078b5978d2c5"/> + <column name="DATE_EDIT"/> + <column name="USER_EDIT"/> + <column name="CHECKLISTENTRYID" value="361fd57d-9a7d-4a18-8e59-47d4b403efac"/> + <column name="TITLE" value="salesprojectRoleIntDist"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW"/> + </insert> + <insert tableName="CHECKLISTENTRY"> + <column name="AUTO" valueNumeric="0"/> + <column name="CHECKLIST_ID" value="ecf50252-e0c2-4e7a-8cc6-078b5978d2c5"/> + <column name="DATE_EDIT"/> + <column name="USER_EDIT"/> + <column name="CHECKLISTENTRYID" value="3bba05b7-3d28-4a7a-8063-33d048e75a35"/> + <column name="TITLE" value="Analyse des Wettbewerbs​"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW"/> + </insert> + <insert tableName="CHECKLISTENTRY"> + <column name="AUTO" valueNumeric="1"/> + <column name="CHECKLIST_ID" value="ecf50252-e0c2-4e7a-8cc6-078b5978d2c5"/> + <column name="DATE_EDIT"/> + <column name="USER_EDIT"/> + <column name="CHECKLISTENTRYID" value="17eb036c-44d9-45f3-8cfc-9ac37e4e0331"/> + <column name="TITLE" value="salesprojectProjStart"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW"/> + </insert> + + <insert tableName="CHECKLISTENTRY"> + <column name="AUTO" valueNumeric="0"/> + <column name="CHECKLIST_ID" value="0f95ce44-3b0d-417b-969f-f84897868558"/> + <column name="DATE_EDIT"/> + <column name="USER_EDIT"/> + <column name="CHECKLISTENTRYID" value="3004d2ea-037c-4639-863e-7f3eb1571392"/> + <column name="TITLE" value="Wahrscheinlichkeit überprüfen und ggf. nachjustieren"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW"/> + </insert> + <insert tableName="CHECKLISTENTRY"> + <column name="AUTO" valueNumeric="0"/> + <column name="CHECKLIST_ID" value="0f95ce44-3b0d-417b-969f-f84897868558"/> + <column name="DATE_EDIT"/> + <column name="USER_EDIT"/> + <column name="CHECKLISTENTRYID" value="e3689c38-1c65-44e7-867d-5894a88715ac"/> + <column name="TITLE" value="Risikoaudit durchgeführt"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW"/> + </insert> + <insert tableName="CHECKLISTENTRY"> + <column name="AUTO" valueNumeric="1"/> + <column name="CHECKLIST_ID" value="0f95ce44-3b0d-417b-969f-f84897868558"/> + <column name="DATE_EDIT"/> + <column name="USER_EDIT"/> + <column name="CHECKLISTENTRYID" value="81b44133-4ea7-4cc9-ba35-9d46ef9cd4c5"/> + <column name="TITLE" value="salesprojectOfferSent"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW"/> + </insert> + <insert tableName="CHECKLISTENTRY"> + <column name="AUTO" valueNumeric="0"/> + <column name="CHECKLIST_ID" value="0f95ce44-3b0d-417b-969f-f84897868558"/> + <column name="DATE_EDIT"/> + <column name="USER_EDIT"/> + <column name="CHECKLISTENTRYID" value="011db14a-2ef0-43fa-a481-888aa4421118"/> + <column name="TITLE" value="Es ist ein Workshop zur Projektumsetzung geplant"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW"/> + </insert> + <insert tableName="CHECKLISTENTRY"> + <column name="AUTO" valueNumeric="0"/> + <column name="CHECKLIST_ID" value="0f95ce44-3b0d-417b-969f-f84897868558"/> + <column name="DATE_EDIT"/> + <column name="USER_EDIT"/> + <column name="CHECKLISTENTRYID" value="b15ccc0d-f312-4cba-9ba8-c7f8c7d086f7"/> + <column name="TITLE" value="Ein Termin zur Abstimmung des Angebots hat stattgefunden"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW"/> + </insert> + + <insert tableName="CHECKLISTENTRY"> + <column name="AUTO" valueNumeric="0"/> + <column name="CHECKLIST_ID" value="cb0357c9-a222-4d78-b2c5-035fffe3bb51"/> + <column name="DATE_EDIT"/> + <column name="USER_EDIT"/> + <column name="CHECKLISTENTRYID" value="8cf4d84e-3fd6-409b-9107-2607d256576a"/> + <column name="TITLE" value="Analyse des Wettbewerbs"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW"/> + </insert> + <insert tableName="CHECKLISTENTRY"> + <column name="AUTO" valueNumeric="0"/> + <column name="CHECKLIST_ID" value="cb0357c9-a222-4d78-b2c5-035fffe3bb51"/> + <column name="DATE_EDIT"/> + <column name="USER_EDIT"/> + <column name="CHECKLISTENTRYID" value="1933b7df-5eb9-4b7b-b2f2-ad5052457472"/> + <column name="TITLE" value="Finale Verhandlung​"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW"/> + </insert> + <insert tableName="CHECKLISTENTRY"> + <column name="AUTO" valueNumeric="1"/> + <column name="CHECKLIST_ID" value="cb0357c9-a222-4d78-b2c5-035fffe3bb51"/> + <column name="DATE_EDIT"/> + <column name="USER_EDIT"/> + <column name="CHECKLISTENTRYID" value="8c042c85-1f3e-4e57-b25e-20fc323f56c3"/> + <column name="TITLE" value="salesprojectStatusWon"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW"/> + </insert> + <insert tableName="CHECKLISTENTRY"> + <column name="AUTO" valueNumeric="0"/> + <column name="CHECKLIST_ID" value="cb0357c9-a222-4d78-b2c5-035fffe3bb51"/> + <column name="DATE_EDIT"/> + <column name="USER_EDIT"/> + <column name="CHECKLISTENTRYID" value="edb57304-3871-41af-9f00-1b4699038e6d"/> + <column name="TITLE" value="Zukünftige Projekte des Kunden abgefragt​"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW"/> + </insert> + <insert tableName="CHECKLISTENTRY"> + <column name="AUTO" valueNumeric="0"/> + <column name="CHECKLIST_ID" value="cb0357c9-a222-4d78-b2c5-035fffe3bb51"/> + <column name="DATE_EDIT"/> + <column name="USER_EDIT"/> + <column name="CHECKLISTENTRYID" value="6755935e-aa0c-4d73-a710-dc6ae1849f39"/> + <column name="TITLE" value="Erarbeitung der Verhandlungsstrategie"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW"/> + </insert> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/classificationgrading.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/classificationgrading.xml index 2e68fcc50aed2ce81e7f85561d2038d543ade168..291fb3795a0be056b7c1ca5b1bfbbaec5dd2bb78 100644 --- a/.liquibase/Data_alias/basic/_demoData/generatedData/classificationgrading.xml +++ b/.liquibase/Data_alias/basic/_demoData/generatedData/classificationgrading.xml @@ -1,126 +1,198 @@ <?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="autogenerated" id="93e9cf02-abc4-4e98-9717-c63f1785124c"> - <delete tableName="classificationgrading"/> - <insert tableName="classificationgrading"> - <column name="CLASSIFICATIONGROUP_ID" value="fb1349b6-6dc1-44b7-b7ea-03d5483e7fac"/> + <delete tableName="CLASSIFICATIONGRADING"/> + <insert tableName="CLASSIFICATIONGRADING"> + <column name="CLASSIFICATIONGRADINGID" value="03aa277d-873b-4913-9051-d44aa4f77627"/> <column name="GRADING" value="C"/> <column name="MINPERCENT" valueNumeric="26"/> - <column name="CLASSIFICATIONGRADINGID" value="03aa277d-873b-4913-9051-d44aa4f77627"/> + <column name="CLASSIFICATIONGROUP_ID" value="fb1349b6-6dc1-44b7-b7ea-03d5483e7fac"/> </insert> - <insert tableName="classificationgrading"> - <column name="CLASSIFICATIONGROUP_ID" value="c1305d16-320e-44f8-95f9-e4cff05d3cfb"/> + <insert tableName="CLASSIFICATIONGRADING"> + <column name="CLASSIFICATIONGRADINGID" value="14da2618-88be-424c-92c3-68d8584aa0bf"/> <column name="GRADING" value="C"/> <column name="MINPERCENT" valueNumeric="26"/> - <column name="CLASSIFICATIONGRADINGID" value="14da2618-88be-424c-92c3-68d8584aa0bf"/> + <column name="CLASSIFICATIONGROUP_ID" value="c1305d16-320e-44f8-95f9-e4cff05d3cfb"/> </insert> - <insert tableName="classificationgrading"> - <column name="CLASSIFICATIONGROUP_ID" value="fb1349b6-6dc1-44b7-b7ea-03d5483e7fac"/> + <insert tableName="CLASSIFICATIONGRADING"> + <column name="CLASSIFICATIONGRADINGID" value="29226adf-eb79-4696-a4b8-7be73c9488e6"/> <column name="GRADING" value="B"/> <column name="MINPERCENT" valueNumeric="51"/> - <column name="CLASSIFICATIONGRADINGID" value="29226adf-eb79-4696-a4b8-7be73c9488e6"/> + <column name="CLASSIFICATIONGROUP_ID" value="fb1349b6-6dc1-44b7-b7ea-03d5483e7fac"/> </insert> - <insert tableName="classificationgrading"> - <column name="CLASSIFICATIONGROUP_ID" value="00cc7b8f-d99e-46bf-90c3-74e05b5af685"/> + <insert tableName="CLASSIFICATIONGRADING"> + <column name="CLASSIFICATIONGRADINGID" value="348a2af8-ec01-4a58-8ff6-5e3a837852a4"/> <column name="GRADING" value="C"/> <column name="MINPERCENT" valueNumeric="26"/> - <column name="CLASSIFICATIONGRADINGID" value="348a2af8-ec01-4a58-8ff6-5e3a837852a4"/> + <column name="CLASSIFICATIONGROUP_ID" value="00cc7b8f-d99e-46bf-90c3-74e05b5af685"/> </insert> - <insert tableName="classificationgrading"> - <column name="CLASSIFICATIONGROUP_ID" value="b2126d9d-8d18-46d4-a48f-1a03fc456ddd"/> + <insert tableName="CLASSIFICATIONGRADING"> + <column name="CLASSIFICATIONGRADINGID" value="4ef54a02-ddf8-4238-b9fd-f5a043032b7d"/> <column name="GRADING" value="A"/> <column name="MINPERCENT" valueNumeric="76"/> - <column name="CLASSIFICATIONGRADINGID" value="4ef54a02-ddf8-4238-b9fd-f5a043032b7d"/> + <column name="CLASSIFICATIONGROUP_ID" value="b2126d9d-8d18-46d4-a48f-1a03fc456ddd"/> </insert> - <insert tableName="classificationgrading"> - <column name="CLASSIFICATIONGROUP_ID" value="e3b0a84f-d2a7-4d7c-b734-82ab4b262e84"/> + <insert tableName="CLASSIFICATIONGRADING"> + <column name="CLASSIFICATIONGRADINGID" value="5e5c3ffe-3fa6-41e3-8659-1b03e7e1a1cd"/> <column name="GRADING" value="D"/> <column name="MINPERCENT" valueNumeric="0"/> - <column name="CLASSIFICATIONGRADINGID" value="5e46e499-00c2-4cc2-9f4c-952290484623"/> - </insert> - <insert tableName="classificationgrading"> <column name="CLASSIFICATIONGROUP_ID" value="c1305d16-320e-44f8-95f9-e4cff05d3cfb"/> - <column name="GRADING" value="D"/> - <column name="MINPERCENT" valueNumeric="0"/> - <column name="CLASSIFICATIONGRADINGID" value="5e5c3ffe-3fa6-41e3-8659-1b03e7e1a1cd"/> </insert> - <insert tableName="classificationgrading"> - <column name="CLASSIFICATIONGROUP_ID" value="00cc7b8f-d99e-46bf-90c3-74e05b5af685"/> + <insert tableName="CLASSIFICATIONGRADING"> + <column name="CLASSIFICATIONGRADINGID" value="68dd4d91-d472-477d-935c-70cbe5606c51"/> <column name="GRADING" value="A"/> <column name="MINPERCENT" valueNumeric="76"/> - <column name="CLASSIFICATIONGRADINGID" value="68dd4d91-d472-477d-935c-70cbe5606c51"/> + <column name="CLASSIFICATIONGROUP_ID" value="00cc7b8f-d99e-46bf-90c3-74e05b5af685"/> </insert> - <insert tableName="classificationgrading"> - <column name="CLASSIFICATIONGROUP_ID" value="b2126d9d-8d18-46d4-a48f-1a03fc456ddd"/> + <insert tableName="CLASSIFICATIONGRADING"> + <column name="CLASSIFICATIONGRADINGID" value="748ef65c-af41-42d8-8ac4-480bc9390591"/> <column name="GRADING" value="B"/> <column name="MINPERCENT" valueNumeric="51"/> - <column name="CLASSIFICATIONGRADINGID" value="748ef65c-af41-42d8-8ac4-480bc9390591"/> - </insert> - <insert tableName="classificationgrading"> <column name="CLASSIFICATIONGROUP_ID" value="b2126d9d-8d18-46d4-a48f-1a03fc456ddd"/> + </insert> + <insert tableName="CLASSIFICATIONGRADING"> + <column name="CLASSIFICATIONGRADINGID" value="76af9740-a714-4a35-bfd2-6eab3c316e5b"/> <column name="GRADING" value="D"/> <column name="MINPERCENT" valueNumeric="0"/> - <column name="CLASSIFICATIONGRADINGID" value="76af9740-a714-4a35-bfd2-6eab3c316e5b"/> - </insert> - <insert tableName="classificationgrading"> - <column name="CLASSIFICATIONGROUP_ID" value="e3b0a84f-d2a7-4d7c-b734-82ab4b262e84"/> - <column name="GRADING" value="A"/> - <column name="MINPERCENT" valueNumeric="76"/> - <column name="CLASSIFICATIONGRADINGID" value="7afd58ad-6eae-4d6b-8d4b-2ca4bdd177e6"/> + <column name="CLASSIFICATIONGROUP_ID" value="b2126d9d-8d18-46d4-a48f-1a03fc456ddd"/> </insert> - <insert tableName="classificationgrading"> - <column name="CLASSIFICATIONGROUP_ID" value="fb1349b6-6dc1-44b7-b7ea-03d5483e7fac"/> + <insert tableName="CLASSIFICATIONGRADING"> + <column name="CLASSIFICATIONGRADINGID" value="8408ca43-a4dc-4767-8127-e52c08276815"/> <column name="GRADING" value="D"/> <column name="MINPERCENT" valueNumeric="0"/> - <column name="CLASSIFICATIONGRADINGID" value="8408ca43-a4dc-4767-8127-e52c08276815"/> + <column name="CLASSIFICATIONGROUP_ID" value="fb1349b6-6dc1-44b7-b7ea-03d5483e7fac"/> </insert> - <insert tableName="classificationgrading"> - <column name="CLASSIFICATIONGROUP_ID" value="e3b0a84f-d2a7-4d7c-b734-82ab4b262e84"/> + <insert tableName="CLASSIFICATIONGRADING"> + <column name="CLASSIFICATIONGRADINGID" value="8e73dd97-4428-4316-882d-7b2af56330ef"/> <column name="GRADING" value="C"/> <column name="MINPERCENT" valueNumeric="26"/> - <column name="CLASSIFICATIONGRADINGID" value="8c982beb-bc53-4bcf-8b76-7ee919bbf653"/> - </insert> - <insert tableName="classificationgrading"> <column name="CLASSIFICATIONGROUP_ID" value="b2126d9d-8d18-46d4-a48f-1a03fc456ddd"/> - <column name="GRADING" value="C"/> - <column name="MINPERCENT" valueNumeric="26"/> - <column name="CLASSIFICATIONGRADINGID" value="8e73dd97-4428-4316-882d-7b2af56330ef"/> </insert> - <insert tableName="classificationgrading"> - <column name="CLASSIFICATIONGROUP_ID" value="c1305d16-320e-44f8-95f9-e4cff05d3cfb"/> + <insert tableName="CLASSIFICATIONGRADING"> + <column name="CLASSIFICATIONGRADINGID" value="8f702449-83fc-4085-92c2-ac09f96dcd6b"/> <column name="GRADING" value="B"/> <column name="MINPERCENT" valueNumeric="51"/> - <column name="CLASSIFICATIONGRADINGID" value="8f702449-83fc-4085-92c2-ac09f96dcd6b"/> + <column name="CLASSIFICATIONGROUP_ID" value="c1305d16-320e-44f8-95f9-e4cff05d3cfb"/> </insert> - <insert tableName="classificationgrading"> - <column name="CLASSIFICATIONGROUP_ID" value="00cc7b8f-d99e-46bf-90c3-74e05b5af685"/> + <insert tableName="CLASSIFICATIONGRADING"> + <column name="CLASSIFICATIONGRADINGID" value="9437f368-bea1-47f4-b76e-d6a391af438d"/> <column name="GRADING" value="B"/> <column name="MINPERCENT" valueNumeric="51"/> - <column name="CLASSIFICATIONGRADINGID" value="9437f368-bea1-47f4-b76e-d6a391af438d"/> + <column name="CLASSIFICATIONGROUP_ID" value="00cc7b8f-d99e-46bf-90c3-74e05b5af685"/> </insert> - <insert tableName="classificationgrading"> + <insert tableName="CLASSIFICATIONGRADING"> + <column name="CLASSIFICATIONGRADINGID" value="9a823957-0ca9-4972-95df-d894d4e4fc24"/> + <column name="GRADING" value="D"/> + <column name="MINPERCENT" valueNumeric="0"/> <column name="CLASSIFICATIONGROUP_ID" value="00cc7b8f-d99e-46bf-90c3-74e05b5af685"/> + </insert> + <insert tableName="CLASSIFICATIONGRADING"> + <column name="CLASSIFICATIONGRADINGID" value="c021718f-b6ca-4d4d-87f7-e4449d103fe2"/> + <column name="GRADING" value="A"/> + <column name="MINPERCENT" valueNumeric="76"/> + <column name="CLASSIFICATIONGROUP_ID" value="c1305d16-320e-44f8-95f9-e4cff05d3cfb"/> + </insert> + <insert tableName="CLASSIFICATIONGRADING"> + <column name="CLASSIFICATIONGRADINGID" value="f8e1c5a4-b0d0-4b73-9700-11ff916adfdd"/> + <column name="GRADING" value="A"/> + <column name="MINPERCENT" valueNumeric="76"/> + <column name="CLASSIFICATIONGROUP_ID" value="fb1349b6-6dc1-44b7-b7ea-03d5483e7fac"/> + </insert> + <insert tableName="CLASSIFICATIONGRADING"> + <column name="CLASSIFICATIONGRADINGID" value="8766b78a-6a34-463e-81b9-d65a155b7585"/> + <column name="GRADING" value="B"/> + <column name="MINPERCENT" valueNumeric="50"/> + <column name="CLASSIFICATIONGROUP_ID" value="82be3659-917b-4a7e-bf31-33258af00a16"/> + </insert> + <insert tableName="CLASSIFICATIONGRADING"> + <column name="CLASSIFICATIONGRADINGID" value="a1ab44bd-6b2f-44cc-b580-1b8e7fc3b848"/> + <column name="GRADING" value="C"/> + <column name="MINPERCENT" valueNumeric="25"/> + <column name="CLASSIFICATIONGROUP_ID" value="82be3659-917b-4a7e-bf31-33258af00a16"/> + </insert> + <insert tableName="CLASSIFICATIONGRADING"> + <column name="CLASSIFICATIONGRADINGID" value="de9b8d9d-35d4-495c-b08f-0fea52136825"/> + <column name="GRADING" value="A"/> + <column name="MINPERCENT" valueNumeric="75"/> + <column name="CLASSIFICATIONGROUP_ID" value="82be3659-917b-4a7e-bf31-33258af00a16"/> + </insert> + <insert tableName="CLASSIFICATIONGRADING"> + <column name="CLASSIFICATIONGRADINGID" value="fdbd2912-7b71-4c5b-be35-800982faf677"/> <column name="GRADING" value="D"/> <column name="MINPERCENT" valueNumeric="0"/> - <column name="CLASSIFICATIONGRADINGID" value="9a823957-0ca9-4972-95df-d894d4e4fc24"/> + <column name="CLASSIFICATIONGROUP_ID" value="82be3659-917b-4a7e-bf31-33258af00a16"/> + </insert> + <insert tableName="CLASSIFICATIONGRADING"> + <column name="CLASSIFICATIONGRADINGID" value="90850ec1-28d7-4bb4-bcdf-c28f56f4c46a"/> + <column name="GRADING" value="A"/> + <column name="MINPERCENT" valueNumeric="75"/> + <column name="CLASSIFICATIONGROUP_ID" value="4af7742e-e0dd-484b-a309-942fba546833"/> </insert> - <insert tableName="classificationgrading"> - <column name="CLASSIFICATIONGROUP_ID" value="e3b0a84f-d2a7-4d7c-b734-82ab4b262e84"/> + <insert tableName="CLASSIFICATIONGRADING"> + <column name="CLASSIFICATIONGRADINGID" value="c477412e-5ebe-4de4-b0ec-5b7cc50c029e"/> <column name="GRADING" value="B"/> - <column name="MINPERCENT" valueNumeric="51"/> - <column name="CLASSIFICATIONGRADINGID" value="a89c81df-9380-41b1-9c7c-52d3a1862ac7"/> + <column name="MINPERCENT" valueNumeric="50"/> + <column name="CLASSIFICATIONGROUP_ID" value="4af7742e-e0dd-484b-a309-942fba546833"/> </insert> - <insert tableName="classificationgrading"> - <column name="CLASSIFICATIONGROUP_ID" value="c1305d16-320e-44f8-95f9-e4cff05d3cfb"/> + <insert tableName="CLASSIFICATIONGRADING"> + <column name="CLASSIFICATIONGRADINGID" value="79637d40-0296-4dae-b7e6-cdc21c9ab15b"/> + <column name="GRADING" value="C"/> + <column name="MINPERCENT" valueNumeric="25"/> + <column name="CLASSIFICATIONGROUP_ID" value="4af7742e-e0dd-484b-a309-942fba546833"/> + </insert> + <insert tableName="CLASSIFICATIONGRADING"> + <column name="CLASSIFICATIONGRADINGID" value="ad4ee82d-87de-4fe8-a695-894d05b4e0c6"/> + <column name="GRADING" value="D"/> + <column name="MINPERCENT" valueNumeric="0"/> + <column name="CLASSIFICATIONGROUP_ID" value="4af7742e-e0dd-484b-a309-942fba546833"/> + </insert> + <insert tableName="CLASSIFICATIONGRADING"> + <column name="CLASSIFICATIONGRADINGID" value="ffd0d8a3-dc7e-445b-ac5c-d7decf04a663"/> + <column name="GRADING" value="B"/> + <column name="MINPERCENT" valueNumeric="50"/> + <column name="CLASSIFICATIONGROUP_ID" value="21af2b4d-34f7-4c03-8d4e-0a40bb17faf2"/> + </insert> + <insert tableName="CLASSIFICATIONGRADING"> + <column name="CLASSIFICATIONGRADINGID" value="2fc0b52c-ec51-4bf9-a9ea-70d6834d4c59"/> + <column name="GRADING" value="D"/> + <column name="MINPERCENT" valueNumeric="0"/> + <column name="CLASSIFICATIONGROUP_ID" value="21af2b4d-34f7-4c03-8d4e-0a40bb17faf2"/> + </insert> + <insert tableName="CLASSIFICATIONGRADING"> + <column name="CLASSIFICATIONGRADINGID" value="b962cd34-681b-4870-bbf9-0dd6054e3bab"/> + <column name="GRADING" value="C"/> + <column name="MINPERCENT" valueNumeric="25"/> + <column name="CLASSIFICATIONGROUP_ID" value="21af2b4d-34f7-4c03-8d4e-0a40bb17faf2"/> + </insert> + <insert tableName="CLASSIFICATIONGRADING"> + <column name="CLASSIFICATIONGRADINGID" value="1d6891f5-3595-4c79-a5d9-578c57fe0325"/> <column name="GRADING" value="A"/> - <column name="MINPERCENT" valueNumeric="76"/> - <column name="CLASSIFICATIONGRADINGID" value="c021718f-b6ca-4d4d-87f7-e4449d103fe2"/> + <column name="MINPERCENT" valueNumeric="75"/> + <column name="CLASSIFICATIONGROUP_ID" value="21af2b4d-34f7-4c03-8d4e-0a40bb17faf2"/> </insert> - <insert tableName="classificationgrading"> - <column name="CLASSIFICATIONGROUP_ID" value="fb1349b6-6dc1-44b7-b7ea-03d5483e7fac"/> + <insert tableName="CLASSIFICATIONGRADING"> + <column name="CLASSIFICATIONGRADINGID" value="7eaa8e94-bab0-42d5-b206-e6506253a172"/> <column name="GRADING" value="A"/> - <column name="MINPERCENT" valueNumeric="76"/> - <column name="CLASSIFICATIONGRADINGID" value="f8e1c5a4-b0d0-4b73-9700-11ff916adfdd"/> + <column name="MINPERCENT" valueNumeric="75"/> + <column name="CLASSIFICATIONGROUP_ID" value="ab733ab7-f9b3-4b8f-9674-19e4340cc31a"/> + </insert> + <insert tableName="CLASSIFICATIONGRADING"> + <column name="CLASSIFICATIONGRADINGID" value="46bbbfed-3d63-4b41-ada2-5cb56b3393f0"/> + <column name="GRADING" value="B"/> + <column name="MINPERCENT" valueNumeric="50"/> + <column name="CLASSIFICATIONGROUP_ID" value="ab733ab7-f9b3-4b8f-9674-19e4340cc31a"/> + </insert> + <insert tableName="CLASSIFICATIONGRADING"> + <column name="CLASSIFICATIONGRADINGID" value="ebb9ed14-7522-457e-af42-c483716094b2"/> + <column name="GRADING" value="D"/> + <column name="MINPERCENT" valueNumeric="0"/> + <column name="CLASSIFICATIONGROUP_ID" value="ab733ab7-f9b3-4b8f-9674-19e4340cc31a"/> + </insert> + <insert tableName="CLASSIFICATIONGRADING"> + <column name="CLASSIFICATIONGRADINGID" value="42f13fc5-bbca-47fe-84ef-3089aae0ed18"/> + <column name="GRADING" value="C"/> + <column name="MINPERCENT" valueNumeric="25"/> + <column name="CLASSIFICATIONGROUP_ID" value="ab733ab7-f9b3-4b8f-9674-19e4340cc31a"/> </insert> </changeSet> </databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/classificationgroup.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/classificationgroup.xml index 61598f100b31dec6e1458b4eac98496e5e050524..127844a6034bc7646df371d825c3d2dfe168e1d4 100644 --- a/.liquibase/Data_alias/basic/_demoData/generatedData/classificationgroup.xml +++ b/.liquibase/Data_alias/basic/_demoData/generatedData/classificationgroup.xml @@ -1,31 +1,26 @@ <?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="autogenerated" id="284cc44f-516c-4f51-af74-66aa3b82e011"> - <delete tableName="classificationgroup"/> - <insert tableName="classificationgroup"> - <column name="CLASSIFICATIONGROUPID" value="00cc7b8f-d99e-46bf-90c3-74e05b5af685"/> + <delete tableName="CLASSIFICATIONGROUP"/> + <insert tableName="CLASSIFICATIONGROUP"> + <column name="CLASSIFICATIONGROUPID" value="82be3659-917b-4a7e-bf31-33258af00a16"/> + <column name="TITLE" value="1. Target group"/> <column name="SORTING" valueNumeric="1"/> - <column name="TITLE" value="1. Classification"/> </insert> - <insert tableName="classificationgroup"> - <column name="CLASSIFICATIONGROUPID" value="b2126d9d-8d18-46d4-a48f-1a03fc456ddd"/> + <insert tableName="CLASSIFICATIONGROUP"> + <column name="CLASSIFICATIONGROUPID" value="4af7742e-e0dd-484b-a309-942fba546833"/> + <column name="TITLE" value="2. Customer value"/> <column name="SORTING" valueNumeric="2"/> - <column name="TITLE" value="2. Classification"/> - </insert> - <insert tableName="classificationgroup"> - <column name="CLASSIFICATIONGROUPID" value="c1305d16-320e-44f8-95f9-e4cff05d3cfb"/> - <column name="SORTING" valueNumeric="3"/> - <column name="TITLE" value="3. Classification"/> </insert> - <insert tableName="classificationgroup"> - <column name="CLASSIFICATIONGROUPID" value="e3b0a84f-d2a7-4d7c-b734-82ab4b262e84"/> + <insert tableName="CLASSIFICATIONGROUP"> + <column name="CLASSIFICATIONGROUPID" value="21af2b4d-34f7-4c03-8d4e-0a40bb17faf2"/> + <column name="TITLE" value="1. Classification"/> <column name="SORTING" valueNumeric="1"/> - <column name="TITLE" value="1. Target group"/> </insert> - <insert tableName="classificationgroup"> - <column name="CLASSIFICATIONGROUPID" value="fb1349b6-6dc1-44b7-b7ea-03d5483e7fac"/> + <insert tableName="CLASSIFICATIONGROUP"> + <column name="CLASSIFICATIONGROUPID" value="ab733ab7-f9b3-4b8f-9674-19e4340cc31a"/> + <column name="TITLE" value="2. Classification"/> <column name="SORTING" valueNumeric="2"/> - <column name="TITLE" value="2. Customer value"/> </insert> </changeSet> </databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/classificationscore.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/classificationscore.xml index c4e7fabc5d69fe601b3e678925f03643858c6137..27cee38103765c6acc071fe0e2498faabb88e58e 100644 --- a/.liquibase/Data_alias/basic/_demoData/generatedData/classificationscore.xml +++ b/.liquibase/Data_alias/basic/_demoData/generatedData/classificationscore.xml @@ -1,755 +1,699 @@ <?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="autogenerated" id="f340e2da-d636-426a-8662-fa08a3b5f82c"> - <delete tableName="classificationscore"/> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="31c169aa-ba5b-4f9d-9dd3-b0d0e8d1b632"/> - <column name="SCOREPERCENT" valueNumeric="50"/> - <column name="CLASSIFICATIONSCOREID" value="01840c9d-2856-4882-a12a-303e58fd9d30"/> - <column name="SORT" valueNumeric="50"/> - <column name="TITLE" value="Purchasing"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/> - <column name="SCOREPERCENT" valueNumeric="50"/> - <column name="CLASSIFICATIONSCOREID" value="07f21cf8-c369-45f3-88fe-40ca586ed11b"/> - <column name="SORT" valueNumeric="30"/> - <column name="TITLE" value="100-199 D€"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/> - <column name="SCOREPERCENT" valueNumeric="66"/> - <column name="CLASSIFICATIONSCOREID" value="0803779b-73d8-47b3-9705-f5771c01e6a3"/> - <column name="SORT" valueNumeric="140"/> - <column name="TITLE" value="Automotive"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="be76dab1-c6ab-4b1e-8322-8b052ccda4d9"/> - <column name="SCOREPERCENT" valueNumeric="100"/> - <column name="CLASSIFICATIONSCOREID" value="08764209-9b5e-4893-96d0-e2a347bccf60"/> - <column name="SORT" valueNumeric="30"/> - <column name="TITLE" value="low"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/> - <column name="SCOREPERCENT" valueNumeric="75"/> - <column name="CLASSIFICATIONSCOREID" value="09559e61-09ed-4f85-b0cb-fa7b0c66e488"/> - <column name="SORT" valueNumeric="150"/> - <column name="TITLE" value="Publishing house"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="4d878689-15c0-46cc-acc8-3c524463db5c"/> - <column name="SCOREPERCENT" valueNumeric="50"/> - <column name="CLASSIFICATIONSCOREID" value="0b671383-ecc3-440c-aff4-ff485da2755d"/> - <column name="SORT" valueNumeric="20"/> - <column name="TITLE" value="medium"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="31c169aa-ba5b-4f9d-9dd3-b0d0e8d1b632"/> - <column name="SCOREPERCENT" valueNumeric="50"/> - <column name="CLASSIFICATIONSCOREID" value="10419ecc-335b-43c3-a1e3-8ecfbeda6f2b"/> - <column name="SORT" valueNumeric="60"/> - <column name="TITLE" value="Project management"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/> - <column name="SCOREPERCENT" valueNumeric="25"/> - <column name="CLASSIFICATIONSCOREID" value="107c199b-b315-4093-add5-48c496794bc9"/> - <column name="SORT" valueNumeric="110"/> - <column name="TITLE" value="Lottery"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="f4d3791e-1717-4473-987b-0cd751805387"/> - <column name="SCOREPERCENT" valueNumeric="0"/> - <column name="CLASSIFICATIONSCOREID" value="11418754-1667-437b-816b-adec4b9291f3"/> - <column name="SORT" valueNumeric="40"/> - <column name="TITLE" value="No project planned"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="31c169aa-ba5b-4f9d-9dd3-b0d0e8d1b632"/> - <column name="SCOREPERCENT" valueNumeric="50"/> - <column name="CLASSIFICATIONSCOREID" value="1bc2b2aa-2582-4b0c-a2f8-04125b82ba33"/> - <column name="SORT" valueNumeric="40"/> - <column name="TITLE" value="Service"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/> - <column name="SCOREPERCENT" valueNumeric="0"/> - <column name="CLASSIFICATIONSCOREID" value="1f924d71-c500-4cdd-bc52-4718a6b88e45"/> - <column name="SORT" valueNumeric="70"/> - <column name="TITLE" value="Consultation"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/> - <column name="SCOREPERCENT" valueNumeric="70"/> - <column name="CLASSIFICATIONSCOREID" value="206fd02f-68ec-42f2-83d1-92848f51dc1a"/> - <column name="SORT" valueNumeric="30"/> - <column name="TITLE" value="Switzerland"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/> - <column name="SCOREPERCENT" valueNumeric="100"/> - <column name="CLASSIFICATIONSCOREID" value="2119cb62-b57c-40be-aff8-ace8e40378d4"/> - <column name="SORT" valueNumeric="120"/> - <column name="TITLE" value="Education"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/> - <column name="SCOREPERCENT" valueNumeric="0"/> - <column name="CLASSIFICATIONSCOREID" value="22581c2e-bb4d-43cb-b6b3-80244425e209"/> - <column name="SORT" valueNumeric="180"/> - <column name="TITLE" value="Service"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/> - <column name="SCOREPERCENT" valueNumeric="0"/> - <column name="CLASSIFICATIONSCOREID" value="2745d6c3-fffb-4f72-8bc2-92439a14e919"/> - <column name="SORT" valueNumeric="40"/> - <column name="TITLE" value="Other"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/> - <column name="SCOREPERCENT" valueNumeric="0"/> - <column name="CLASSIFICATIONSCOREID" value="29134094-66f2-4331-9f14-fc6a27ab111e"/> + <delete tableName="CLASSIFICATIONSCORE"/> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="792b98f9-96fc-44c2-81f7-cb64a1acfb5f"/> + <column name="CLASSIFICATIONTYPE_ID" value="faab5c4e-6ef7-4cc2-9925-780263b03fa8"/> + <column name="SCOREPERCENT" valueNumeric="60.00"/> + <column name="SORT" valueNumeric="2"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"TYPE","operator":"EQUAL","value":"Hersteller","key":"ORGMANUF","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="5aede29e-f419-4cf3-be46-0d1fc66f5790"/> + <column name="CLASSIFICATIONTYPE_ID" value="faab5c4e-6ef7-4cc2-9925-780263b03fa8"/> + <column name="SCOREPERCENT" valueNumeric="50.00"/> + <column name="SORT" valueNumeric="0"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"TYPE","operator":"EQUAL","value":"Partner","key":"ORGPARTNER","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="a8ea1409-f502-4e08-b298-b20740e4c1f1"/> + <column name="CLASSIFICATIONTYPE_ID" value="faab5c4e-6ef7-4cc2-9925-780263b03fa8"/> + <column name="SCOREPERCENT" valueNumeric="60.00"/> + <column name="SORT" valueNumeric="3"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"TYPE","operator":"EQUAL","value":"Lieferant","key":"ORGSUP","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="67402953-d5ac-4648-bfb3-d5e863d6f47b"/> + <column name="CLASSIFICATIONTYPE_ID" value="faab5c4e-6ef7-4cc2-9925-780263b03fa8"/> + <column name="SCOREPERCENT" valueNumeric="100.00"/> + <column name="SORT" valueNumeric="5"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"TYPE","operator":"EQUAL","value":"Kunde","key":"ORGCUTOMER","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="5e5de184-d355-45b8-8850-1651c550cb5b"/> + <column name="CLASSIFICATIONTYPE_ID" value="faab5c4e-6ef7-4cc2-9925-780263b03fa8"/> + <column name="SCOREPERCENT" valueNumeric="80.00"/> + <column name="SORT" valueNumeric="4"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"TYPE","operator":"EQUAL","value":"Interessent","key":"ORGPROSPECT","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="6406b82c-8318-4af5-9d3b-aa0144c63fb0"/> + <column name="CLASSIFICATIONTYPE_ID" value="faab5c4e-6ef7-4cc2-9925-780263b03fa8"/> + <column name="SCOREPERCENT" valueNumeric="80.00"/> + <column name="SORT" valueNumeric="1"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"TYPE","operator":"EQUAL","value":"Wettbewerber","key":"ORGCOMP","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="c7156bb3-65e4-4681-b825-cf73b25e9e5b"/> + <column name="CLASSIFICATIONTYPE_ID" value="9b9e51d8-c649-41f3-a1fb-660d768c8b5a"/> + <column name="SCOREPERCENT" valueNumeric="35.00"/> + <column name="SORT" valueNumeric="3"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORNUMBER" value="2500"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="df7854c7-626d-4992-bf29-d5700ca97382"/> + <column name="CLASSIFICATIONTYPE_ID" value="9b9e51d8-c649-41f3-a1fb-660d768c8b5a"/> + <column name="SCOREPERCENT" valueNumeric="40.00"/> + <column name="SORT" valueNumeric="2"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORNUMBER" value="3000"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="14bf184c-10fa-49c2-b4e7-c4d55d0f7376"/> + <column name="CLASSIFICATIONTYPE_ID" value="9b9e51d8-c649-41f3-a1fb-660d768c8b5a"/> + <column name="SCOREPERCENT" valueNumeric="10.00"/> + <column name="SORT" valueNumeric="6"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORNUMBER" value="100"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="96c5c764-8aa8-40d1-a1ab-9f5dee7e2431"/> + <column name="CLASSIFICATIONTYPE_ID" value="9b9e51d8-c649-41f3-a1fb-660d768c8b5a"/> + <column name="SCOREPERCENT" valueNumeric="75.00"/> + <column name="SORT" valueNumeric="0"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORNUMBER" value="7500"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="3fc94231-af75-462c-8b54-9c4bc724d7e1"/> + <column name="CLASSIFICATIONTYPE_ID" value="9b9e51d8-c649-41f3-a1fb-660d768c8b5a"/> + <column name="SCOREPERCENT" valueNumeric="25.00"/> + <column name="SORT" valueNumeric="4"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORNUMBER" value="1000"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="65d3fec9-54e1-4925-8368-b81ab7d98e68"/> + <column name="CLASSIFICATIONTYPE_ID" value="9b9e51d8-c649-41f3-a1fb-660d768c8b5a"/> + <column name="SCOREPERCENT" valueNumeric="5.00"/> + <column name="SORT" valueNumeric="7"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORNUMBER" value="0"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="619ba460-e446-48bf-90c2-2d4bb40394c2"/> + <column name="CLASSIFICATIONTYPE_ID" value="9b9e51d8-c649-41f3-a1fb-660d768c8b5a"/> + <column name="SCOREPERCENT" valueNumeric="15.00"/> + <column name="SORT" valueNumeric="5"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORNUMBER" value="500"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="dd9e7f83-2feb-4847-b17c-f5a4f52034da"/> + <column name="CLASSIFICATIONTYPE_ID" value="9b9e51d8-c649-41f3-a1fb-660d768c8b5a"/> + <column name="SCOREPERCENT" valueNumeric="50.00"/> + <column name="SORT" valueNumeric="1"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORNUMBER" value="5000"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="b5fe2ee7-4638-4bed-9093-a66fd68fc69a"/> + <column name="CLASSIFICATIONTYPE_ID" value="23c41492-5a65-4a7f-9283-457769f822c1"/> + <column name="SCOREPERCENT" valueNumeric="30.00"/> + <column name="SORT" valueNumeric="6"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"#EXTENSION.Attribute_filter.eyJpZCI6IjdlOTkyN2E0LTQxZTQtNDI2Zi1iZGRkLWMzZTllZTNiMDkzZSIsInR5cGUiOiJDT01CTyJ9#TEXT","operator":"EQUAL","value":"Service","key":"bb0c6356-33be-4e7c-a409-9ef5145f7aae","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="b5c901fb-1899-4715-b0eb-fa0164eaa89e"/> + <column name="CLASSIFICATIONTYPE_ID" value="23c41492-5a65-4a7f-9283-457769f822c1"/> + <column name="SCOREPERCENT" valueNumeric="40.00"/> + <column name="SORT" valueNumeric="4"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"#EXTENSION.Attribute_filter.eyJpZCI6IjdlOTkyN2E0LTQxZTQtNDI2Zi1iZGRkLWMzZTllZTNiMDkzZSIsInR5cGUiOiJDT01CTyJ9#TEXT","operator":"EQUAL","value":"NPO","key":"4fcd8bb8-72fd-48d0-9e64-4c80e5177c36","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="202d8cd4-524e-4921-8261-803b4f7205b9"/> + <column name="CLASSIFICATIONTYPE_ID" value="23c41492-5a65-4a7f-9283-457769f822c1"/> + <column name="SCOREPERCENT" valueNumeric="80.00"/> + <column name="SORT" valueNumeric="1"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"#EXTENSION.Attribute_filter.eyJpZCI6IjdlOTkyN2E0LTQxZTQtNDI2Zi1iZGRkLWMzZTllZTNiMDkzZSIsInR5cGUiOiJDT01CTyJ9#TEXT","operator":"EQUAL","value":"Behörde","key":"2bdb04cb-4cd3-4454-802c-8e2b4a5e2e36","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="76ee8f19-4c25-4910-b7bc-efb8baba3850"/> + <column name="CLASSIFICATIONTYPE_ID" value="23c41492-5a65-4a7f-9283-457769f822c1"/> + <column name="SCOREPERCENT" valueNumeric="80.00"/> + <column name="SORT" valueNumeric="5"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"#EXTENSION.Attribute_filter.eyJpZCI6IjdlOTkyN2E0LTQxZTQtNDI2Zi1iZGRkLWMzZTllZTNiMDkzZSIsInR5cGUiOiJDT01CTyJ9#TEXT","operator":"EQUAL","value":"Finanzdienstleistung","key":"26385e16-6b2f-428c-9c28-1bfa9c2ccf6f","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="035fb82f-0b35-4386-a068-8af8cace3982"/> + <column name="CLASSIFICATIONTYPE_ID" value="23c41492-5a65-4a7f-9283-457769f822c1"/> + <column name="SCOREPERCENT" valueNumeric="60.00"/> + <column name="SORT" valueNumeric="0"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"#EXTENSION.Attribute_filter.eyJpZCI6IjdlOTkyN2E0LTQxZTQtNDI2Zi1iZGRkLWMzZTllZTNiMDkzZSIsInR5cGUiOiJDT01CTyJ9#TEXT","operator":"EQUAL","value":"Logistik","key":"617da3f5-d8bc-45ff-85a1-258621ea2a0b","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="4cfce46c-25c6-4937-92da-511341c8ee93"/> + <column name="CLASSIFICATIONTYPE_ID" value="23c41492-5a65-4a7f-9283-457769f822c1"/> + <column name="SCOREPERCENT" valueNumeric="50.00"/> + <column name="SORT" valueNumeric="2"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"#EXTENSION.Attribute_filter.eyJpZCI6IjdlOTkyN2E0LTQxZTQtNDI2Zi1iZGRkLWMzZTllZTNiMDkzZSIsInR5cGUiOiJDT01CTyJ9#TEXT","operator":"EQUAL","value":"Bauwesen","key":"79378933-9f74-4391-b876-4528b582661f","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="7d5e5df9-f285-4fee-9ed5-b5da273f5ce0"/> + <column name="CLASSIFICATIONTYPE_ID" value="23c41492-5a65-4a7f-9283-457769f822c1"/> + <column name="SCOREPERCENT" valueNumeric="50.00"/> + <column name="SORT" valueNumeric="7"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"#EXTENSION.Attribute_filter.eyJpZCI6IjdlOTkyN2E0LTQxZTQtNDI2Zi1iZGRkLWMzZTllZTNiMDkzZSIsInR5cGUiOiJDT01CTyJ9#TEXT","operator":"EQUAL","value":"Maschinenbau","key":"9882c4bc-a3d9-43a9-8238-81ef39387869","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="52dc6603-517e-4381-bb5e-a0aa5929c09c"/> + <column name="CLASSIFICATIONTYPE_ID" value="23c41492-5a65-4a7f-9283-457769f822c1"/> + <column name="SCOREPERCENT" valueNumeric="60.00"/> + <column name="SORT" valueNumeric="3"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"#EXTENSION.Attribute_filter.eyJpZCI6IjdlOTkyN2E0LTQxZTQtNDI2Zi1iZGRkLWMzZTllZTNiMDkzZSIsInR5cGUiOiJDT01CTyJ9#TEXT","operator":"EQUAL","value":"Handel","key":"acafca42-8ef4-4c21-abe8-1c2ca358a5aa","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="0bbd5007-85dc-47d1-8bd3-c465bf3a640f"/> + <column name="CLASSIFICATIONTYPE_ID" value="6f179460-4b93-4bd4-b85d-5771dbad7289"/> + <column name="SCOREPERCENT" valueNumeric="60.00"/> + <column name="SORT" valueNumeric="2"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"#EXTENSION.Attribute_filter.eyJpZCI6ImU3M2VkOTI5LTg2MzEtNDZkZS1iMjhmLWViMTQyM2FiYjgwOCIsInR5cGUiOiJDT01CTyJ9#TEXT","operator":"EQUAL","value":"mittel","key":"0a6cbbc0-bd0e-4794-96ef-3d458d5fdb70","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="e63a23b4-555d-4b96-a7fe-025cc3ed3b03"/> + <column name="CLASSIFICATIONTYPE_ID" value="6f179460-4b93-4bd4-b85d-5771dbad7289"/> + <column name="SCOREPERCENT" valueNumeric="30.00"/> + <column name="SORT" valueNumeric="1"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"#EXTENSION.Attribute_filter.eyJpZCI6ImU3M2VkOTI5LTg2MzEtNDZkZS1iMjhmLWViMTQyM2FiYjgwOCIsInR5cGUiOiJDT01CTyJ9#TEXT","operator":"EQUAL","value":"gering","key":"ed4c3079-51b0-4bb5-b228-55de4309d5ab","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="e7c4b6d3-2414-4a37-8ffe-ca0b2a9710ba"/> + <column name="CLASSIFICATIONTYPE_ID" value="6f179460-4b93-4bd4-b85d-5771dbad7289"/> + <column name="SCOREPERCENT" valueNumeric="50.00"/> + <column name="SORT" valueNumeric="0"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"#EXTENSION.Attribute_filter.eyJpZCI6ImU3M2VkOTI5LTg2MzEtNDZkZS1iMjhmLWViMTQyM2FiYjgwOCIsInR5cGUiOiJDT01CTyJ9#TEXT","operator":"EQUAL","value":"unbekannt","key":"fdcb07f0-a815-44f3-be47-00eaebfffe0d","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="9e83f2ce-36f7-4a7e-af74-bfc6cbdc6bc8"/> + <column name="CLASSIFICATIONTYPE_ID" value="6f179460-4b93-4bd4-b85d-5771dbad7289"/> + <column name="SCOREPERCENT" valueNumeric="100.00"/> + <column name="SORT" valueNumeric="3"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"#EXTENSION.Attribute_filter.eyJpZCI6ImU3M2VkOTI5LTg2MzEtNDZkZS1iMjhmLWViMTQyM2FiYjgwOCIsInR5cGUiOiJDT01CTyJ9#TEXT","operator":"EQUAL","value":"gross","key":"c85a5ebe-80fe-4176-a92a-35d2200baa07","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="a6096a3f-91e8-4fef-bc9e-1c9dfeef44a8"/> + <column name="CLASSIFICATIONTYPE_ID" value="8a2c4cf5-c2b7-4588-9a33-3387d784a90b"/> + <column name="SCOREPERCENT" valueNumeric="100.00"/> + <column name="SORT" valueNumeric="3"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"#EXTENSION.Attribute_filter.eyJpZCI6ImYxMWY2NWQwLTQzNTItNGY4MS04NWQwLWJmZDAzNDI3NWUzNCIsInR5cGUiOiJDT01CTyJ9#TEXT","operator":"EQUAL","value":"A","key":"292825e8-fa96-4b7b-8dab-71955ae14571","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="0a7cbbd4-57fa-45ea-9608-4fbacda2e25a"/> + <column name="CLASSIFICATIONTYPE_ID" value="8a2c4cf5-c2b7-4588-9a33-3387d784a90b"/> + <column name="SCOREPERCENT" valueNumeric="25.00"/> + <column name="SORT" valueNumeric="0"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"#EXTENSION.Attribute_filter.eyJpZCI6ImYxMWY2NWQwLTQzNTItNGY4MS04NWQwLWJmZDAzNDI3NWUzNCIsInR5cGUiOiJDT01CTyJ9#TEXT","operator":"EQUAL","value":"D","key":"9e20d257-e2a7-4ef7-9253-1d8ed971b7b9","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="497f09cb-0a88-4da4-be16-6339792abb9a"/> + <column name="CLASSIFICATIONTYPE_ID" value="8a2c4cf5-c2b7-4588-9a33-3387d784a90b"/> + <column name="SCOREPERCENT" valueNumeric="75.00"/> + <column name="SORT" valueNumeric="2"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"#EXTENSION.Attribute_filter.eyJpZCI6ImYxMWY2NWQwLTQzNTItNGY4MS04NWQwLWJmZDAzNDI3NWUzNCIsInR5cGUiOiJDT01CTyJ9#TEXT","operator":"EQUAL","value":"B","key":"e7e05c6e-6108-44bd-824a-c076dfa5ae93","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="16248e32-8a66-4563-aa15-c76b44c97217"/> + <column name="CLASSIFICATIONTYPE_ID" value="8a2c4cf5-c2b7-4588-9a33-3387d784a90b"/> + <column name="SCOREPERCENT" valueNumeric="50.00"/> + <column name="SORT" valueNumeric="1"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"#EXTENSION.Attribute_filter.eyJpZCI6ImYxMWY2NWQwLTQzNTItNGY4MS04NWQwLWJmZDAzNDI3NWUzNCIsInR5cGUiOiJDT01CTyJ9#TEXT","operator":"EQUAL","value":"C","key":"957d61a4-0038-46e0-b5a3-fc2a5d413004","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="76f40d95-612a-4182-98d2-7de97569fde9"/> + <column name="CLASSIFICATIONTYPE_ID" value="2743f5cd-8510-487f-933c-4cdbebc5e449"/> + <column name="SCOREPERCENT" valueNumeric="80.00"/> + <column name="SORT" valueNumeric="1"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"#EXTENSION.Attribute_filter.eyJpZCI6ImM3ZDI4Mzc3LThjYjEtNGY5Mi1hOWFjLWVkMDgwNDFhNzgyYiIsInR5cGUiOiJDT01CTyJ9#TEXT","operator":"EQUAL","value":"Wettbewerber","key":"1d30d0ab-6103-4972-84c0-fd23eef15ca1","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="ef34ba24-6df6-4642-91ad-5187532ec652"/> + <column name="CLASSIFICATIONTYPE_ID" value="2743f5cd-8510-487f-933c-4cdbebc5e449"/> + <column name="SCOREPERCENT" valueNumeric="100.00"/> + <column name="SORT" valueNumeric="4"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"#EXTENSION.Attribute_filter.eyJpZCI6ImM3ZDI4Mzc3LThjYjEtNGY5Mi1hOWFjLWVkMDgwNDFhNzgyYiIsInR5cGUiOiJDT01CTyJ9#TEXT","operator":"EQUAL","value":"Kunde","key":"17746b46-2702-447a-b749-a92bfdf4bb38","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="10d82a29-f89b-4d2e-a3a2-0b06a3b1ea5e"/> + <column name="CLASSIFICATIONTYPE_ID" value="2743f5cd-8510-487f-933c-4cdbebc5e449"/> + <column name="SCOREPERCENT" valueNumeric="80.00"/> + <column name="SORT" valueNumeric="3"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"#EXTENSION.Attribute_filter.eyJpZCI6ImM3ZDI4Mzc3LThjYjEtNGY5Mi1hOWFjLWVkMDgwNDFhNzgyYiIsInR5cGUiOiJDT01CTyJ9#TEXT","operator":"EQUAL","value":"Interessent","key":"d0a9eb78-6dcf-48e0-ba91-04a3ba104d26","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="0e5a99a0-2caa-491e-9630-01dbf6f15d10"/> + <column name="CLASSIFICATIONTYPE_ID" value="2743f5cd-8510-487f-933c-4cdbebc5e449"/> + <column name="SCOREPERCENT" valueNumeric="50.00"/> + <column name="SORT" valueNumeric="2"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"#EXTENSION.Attribute_filter.eyJpZCI6ImM3ZDI4Mzc3LThjYjEtNGY5Mi1hOWFjLWVkMDgwNDFhNzgyYiIsInR5cGUiOiJDT01CTyJ9#TEXT","operator":"EQUAL","value":"Hersteller","key":"e4a60941-513f-4e75-a787-f00070ecb00a","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="94f2a7f9-a808-4e20-b12a-690075ce5ea2"/> + <column name="CLASSIFICATIONTYPE_ID" value="2743f5cd-8510-487f-933c-4cdbebc5e449"/> + <column name="SCOREPERCENT" valueNumeric="70.00"/> + <column name="SORT" valueNumeric="0"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"#EXTENSION.Attribute_filter.eyJpZCI6ImM3ZDI4Mzc3LThjYjEtNGY5Mi1hOWFjLWVkMDgwNDFhNzgyYiIsInR5cGUiOiJDT01CTyJ9#TEXT","operator":"EQUAL","value":"Partner","key":"d14f6eea-8760-43bf-ad3a-e7c3e4416392","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="4e2312e5-2477-4a6d-907c-2c0e3fbe94b5"/> + <column name="CLASSIFICATIONTYPE_ID" value="72f8e3d4-b8ce-41c3-a3ea-d5ebca62a7e0"/> + <column name="SCOREPERCENT" valueNumeric="50.00"/> + <column name="SORT" valueNumeric="3"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"#EXTENSION.Attribute_filter.eyJpZCI6IjY5MTQ1MmVjLTNiOWYtNDNkYy05MWEyLTY0NWE5N2I3NzViMiIsInR5cGUiOiJDT01CTyJ9#TEXT","operator":"EQUAL","value":"Dumpingpreis Wettbewerb","key":"be60e4b3-19b1-48a9-ad5c-c7d38698b4a1","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="925f92f3-e081-49fb-bd7a-1ffb949522b2"/> + <column name="CLASSIFICATIONTYPE_ID" value="72f8e3d4-b8ce-41c3-a3ea-d5ebca62a7e0"/> + <column name="SCOREPERCENT" valueNumeric="80.00"/> + <column name="SORT" valueNumeric="1"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"#EXTENSION.Attribute_filter.eyJpZCI6IjY5MTQ1MmVjLTNiOWYtNDNkYy05MWEyLTY0NWE5N2I3NzViMiIsInR5cGUiOiJDT01CTyJ9#TEXT","operator":"EQUAL","value":"Entscheidungsträger hat sich geändert","key":"07fc6730-6c83-4996-bfd9-41c18765a10a","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="76ad6bf7-5e9a-4fac-896c-9fa8d9237be0"/> + <column name="CLASSIFICATIONTYPE_ID" value="72f8e3d4-b8ce-41c3-a3ea-d5ebca62a7e0"/> + <column name="SCOREPERCENT" valueNumeric="40.00"/> + <column name="SORT" valueNumeric="2"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"#EXTENSION.Attribute_filter.eyJpZCI6IjY5MTQ1MmVjLTNiOWYtNDNkYy05MWEyLTY0NWE5N2I3NzViMiIsInR5cGUiOiJDT01CTyJ9#TEXT","operator":"EQUAL","value":"Qualitätsproblem Kunde","key":"85c9cdd8-f7a6-4210-840e-fab8628f4dbe","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="75bd476e-a314-49c4-a0c2-c5974b0b810b"/> + <column name="CLASSIFICATIONTYPE_ID" value="72f8e3d4-b8ce-41c3-a3ea-d5ebca62a7e0"/> + <column name="SCOREPERCENT" valueNumeric="0.00"/> + <column name="SORT" valueNumeric="0"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"#EXTENSION.Attribute_filter.eyJpZCI6IjY5MTQ1MmVjLTNiOWYtNDNkYy05MWEyLTY0NWE5N2I3NzViMiIsInR5cGUiOiJDT01CTyJ9#TEXT","operator":"EQUAL","value":"kein Risiko","key":"974bbd28-08b3-41a4-bd74-7d9c3c778249","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="d1640ee2-e6e0-410d-9f35-6e9fe29b638e"/> + <column name="CLASSIFICATIONTYPE_ID" value="72f8e3d4-b8ce-41c3-a3ea-d5ebca62a7e0"/> + <column name="SCOREPERCENT" valueNumeric="5.00"/> + <column name="SORT" valueNumeric="5"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"#EXTENSION.Attribute_filter.eyJpZCI6IjY5MTQ1MmVjLTNiOWYtNDNkYy05MWEyLTY0NWE5N2I3NzViMiIsInR5cGUiOiJDT01CTyJ9#TEXT","operator":"EQUAL","value":"Zahlungsproblem Kunde","key":"953e3b5e-0ca7-4215-8dee-b0ba28ef1bf9","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="104055a9-f43e-4071-8b8e-58e7db75cce9"/> + <column name="CLASSIFICATIONTYPE_ID" value="72f8e3d4-b8ce-41c3-a3ea-d5ebca62a7e0"/> + <column name="SCOREPERCENT" valueNumeric="70.00"/> + <column name="SORT" valueNumeric="4"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"#EXTENSION.Attribute_filter.eyJpZCI6IjY5MTQ1MmVjLTNiOWYtNDNkYy05MWEyLTY0NWE5N2I3NzViMiIsInR5cGUiOiJDT01CTyJ9#TEXT","operator":"EQUAL","value":"Projektverschiebung Kunde","key":"6db07a20-86bc-48da-8b27-b39bdd73b86b","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="cdbe6c86-0a1e-423f-8883-9a22a572e53b"/> + <column name="CLASSIFICATIONTYPE_ID" value="2e2ff9bc-6acf-4870-925b-be8f13571ddb"/> + <column name="SCOREPERCENT" valueNumeric="100.00"/> + <column name="SORT" valueNumeric="2"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"STATUS","operator":"EQUAL","value":"Aktiv","key":"CONTACTSTATACTIVE","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="bd3afc9b-d1c2-420d-ad64-72c106a5f890"/> + <column name="CLASSIFICATIONTYPE_ID" value="2e2ff9bc-6acf-4870-925b-be8f13571ddb"/> + <column name="SCOREPERCENT" valueNumeric="40.00"/> + <column name="SORT" valueNumeric="0"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"STATUS","operator":"EQUAL","value":"zur Prüfung","key":"CONTACTSTATREVIEW","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="e73be9de-27de-4b30-9677-3df4cbfff3fd"/> + <column name="CLASSIFICATIONTYPE_ID" value="2e2ff9bc-6acf-4870-925b-be8f13571ddb"/> + <column name="SCOREPERCENT" valueNumeric="20.00"/> + <column name="SORT" valueNumeric="1"/> + <column name="FIELDVALUE" value="{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"STATUS","operator":"EQUAL","value":"Inaktiv","key":"CONTACTSTATINACTIVE","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="dfb76c1f-92e8-4677-b85c-c739fd028d38"/> + <column name="CLASSIFICATIONTYPE_ID" value="9936a248-4eba-481c-9f1f-8607f89493bb"/> + <column name="SCOREPERCENT" valueNumeric="80.00"/> + <column name="SORT" valueNumeric="1"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORNUMBER" value="40000"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="a57799f6-51da-4057-9cb9-fde257f42248"/> + <column name="CLASSIFICATIONTYPE_ID" value="9936a248-4eba-481c-9f1f-8607f89493bb"/> + <column name="SCOREPERCENT" valueNumeric="0.00"/> + <column name="SORT" valueNumeric="7"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORNUMBER" value="0"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="68a483c5-85ab-46eb-9a95-02910256edac"/> + <column name="CLASSIFICATIONTYPE_ID" value="9936a248-4eba-481c-9f1f-8607f89493bb"/> + <column name="SCOREPERCENT" valueNumeric="60.00"/> + <column name="SORT" valueNumeric="2"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORNUMBER" value="25000"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="8d82b200-41d5-49c6-b4e8-999719922936"/> + <column name="CLASSIFICATIONTYPE_ID" value="9936a248-4eba-481c-9f1f-8607f89493bb"/> + <column name="SCOREPERCENT" valueNumeric="10.00"/> + <column name="SORT" valueNumeric="5"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORNUMBER" value="1000"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="7b25f6f1-f6bb-4624-a5d8-76f2db32d956"/> + <column name="CLASSIFICATIONTYPE_ID" value="9936a248-4eba-481c-9f1f-8607f89493bb"/> + <column name="SCOREPERCENT" valueNumeric="40.00"/> + <column name="SORT" valueNumeric="3"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORNUMBER" value="10000"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="2e009253-1b38-4949-8421-04074fb2aa9f"/> + <column name="CLASSIFICATIONTYPE_ID" value="9936a248-4eba-481c-9f1f-8607f89493bb"/> + <column name="SCOREPERCENT" valueNumeric="100.00"/> + <column name="SORT" valueNumeric="0"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORNUMBER" value="50000"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="5d1a5d2c-6019-4486-811f-4fa20ad27f0b"/> + <column name="CLASSIFICATIONTYPE_ID" value="9936a248-4eba-481c-9f1f-8607f89493bb"/> + <column name="SCOREPERCENT" valueNumeric="5.00"/> + <column name="SORT" valueNumeric="6"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORNUMBER" value="100"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="59bfc822-823e-4059-bac6-f6ad7a747c29"/> + <column name="CLASSIFICATIONTYPE_ID" value="9936a248-4eba-481c-9f1f-8607f89493bb"/> + <column name="SCOREPERCENT" valueNumeric="20.00"/> + <column name="SORT" valueNumeric="4"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORNUMBER" value="5000"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="fe74f937-b53a-4386-b290-ffd86376f86a"/> + <column name="CLASSIFICATIONTYPE_ID" value="15aa2654-330a-4b4d-9cfb-aa0c49f8df67"/> + <column name="SCOREPERCENT" valueNumeric="60.00"/> + <column name="SORT" valueNumeric="4"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"STATUS","operator":"EQUAL","value":"Vertagt","key":"SALPROJSTATPOSTPONED","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="5de5ac3f-58c0-4d41-9428-570e0c03e921"/> + <column name="CLASSIFICATIONTYPE_ID" value="15aa2654-330a-4b4d-9cfb-aa0c49f8df67"/> + <column name="SCOREPERCENT" valueNumeric="40.00"/> + <column name="SORT" valueNumeric="2"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"STATUS","operator":"EQUAL","value":"Teilauftrag","key":"SALPROJSTATPARTIAL","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="cc985c15-e282-4548-b63e-c0a3645301e0"/> + <column name="CLASSIFICATIONTYPE_ID" value="15aa2654-330a-4b4d-9cfb-aa0c49f8df67"/> + <column name="SCOREPERCENT" valueNumeric="70.00"/> + <column name="SORT" valueNumeric="5"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"STATUS","operator":"EQUAL","value":"Offen","key":"SALPROJSTATOPEN","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="2da43bc4-759b-49ac-a4eb-b1129bce02a8"/> + <column name="CLASSIFICATIONTYPE_ID" value="15aa2654-330a-4b4d-9cfb-aa0c49f8df67"/> + <column name="SCOREPERCENT" valueNumeric="60.00"/> + <column name="SORT" valueNumeric="3"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"STATUS","operator":"EQUAL","value":"Abgebrochen","key":"SALPROJSTATABORT","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="07788bdd-5918-4f76-8c25-0fbe45bf2b89"/> + <column name="CLASSIFICATIONTYPE_ID" value="15aa2654-330a-4b4d-9cfb-aa0c49f8df67"/> + <column name="SCOREPERCENT" valueNumeric="100.00"/> + <column name="SORT" valueNumeric="1"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"STATUS","operator":"EQUAL","value":"Bestellung","key":"SALPROJSTATORDER","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="6f85b6e5-5d4d-41ad-8dab-8c4b0e5f8760"/> + <column name="CLASSIFICATIONTYPE_ID" value="15aa2654-330a-4b4d-9cfb-aa0c49f8df67"/> + <column name="SCOREPERCENT" valueNumeric="0.00"/> + <column name="SORT" valueNumeric="0"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"STATUS","operator":"EQUAL","value":"Verloren","key":"SALPROJSTATLOST","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="f1756e15-ad79-4141-8281-2b2c6fdc5271"/> + <column name="CLASSIFICATIONTYPE_ID" value="3402e131-581e-4165-aa2a-a7dba56a4164"/> + <column name="SCOREPERCENT" valueNumeric="30.00"/> + <column name="SORT" valueNumeric="7"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORNUMBER" value="20"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="9197c144-bfdb-477d-bd33-18ee5c492bef"/> + <column name="CLASSIFICATIONTYPE_ID" value="3402e131-581e-4165-aa2a-a7dba56a4164"/> + <column name="SCOREPERCENT" valueNumeric="80.00"/> + <column name="SORT" valueNumeric="2"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORNUMBER" value="70"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="3771d32a-5eaf-43fa-98b8-0870848eb137"/> + <column name="CLASSIFICATIONTYPE_ID" value="3402e131-581e-4165-aa2a-a7dba56a4164"/> + <column name="SCOREPERCENT" valueNumeric="100.00"/> + <column name="SORT" valueNumeric="0"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORNUMBER" value="90"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="3e684949-1b47-43e7-b5a4-bfb0a0eda149"/> + <column name="CLASSIFICATIONTYPE_ID" value="3402e131-581e-4165-aa2a-a7dba56a4164"/> + <column name="SCOREPERCENT" valueNumeric="60.00"/> + <column name="SORT" valueNumeric="4"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORNUMBER" value="50"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="9ed7ac97-2098-4eda-bd16-adee75a12b33"/> + <column name="CLASSIFICATIONTYPE_ID" value="3402e131-581e-4165-aa2a-a7dba56a4164"/> + <column name="SCOREPERCENT" valueNumeric="10.00"/> + <column name="SORT" valueNumeric="9"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORNUMBER" value="1"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="83f6b3c1-eb66-4bbf-8225-c6237607a96f"/> + <column name="CLASSIFICATIONTYPE_ID" value="3402e131-581e-4165-aa2a-a7dba56a4164"/> + <column name="SCOREPERCENT" valueNumeric="90.00"/> + <column name="SORT" valueNumeric="1"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORNUMBER" value="80"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="4c96a7b4-fcf2-4fc4-ad77-ffbcc9102793"/> + <column name="CLASSIFICATIONTYPE_ID" value="3402e131-581e-4165-aa2a-a7dba56a4164"/> + <column name="SCOREPERCENT" valueNumeric="40.00"/> + <column name="SORT" valueNumeric="6"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORNUMBER" value="30"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="db28aea5-bdce-4adb-952b-d61252f8f18b"/> + <column name="CLASSIFICATIONTYPE_ID" value="3402e131-581e-4165-aa2a-a7dba56a4164"/> + <column name="SCOREPERCENT" valueNumeric="0.00"/> <column name="SORT" valueNumeric="10"/> - <column name="TITLE" value="0-49 D€"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/> - <column name="SCOREPERCENT" valueNumeric="66"/> - <column name="CLASSIFICATIONSCOREID" value="2a516661-537d-473e-864a-c2f721b96a42"/> - <column name="SORT" valueNumeric="180"/> - <column name="TITLE" value="Service"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="4b72857e-863d-4254-accf-25281bb7bb64"/> - <column name="SCOREPERCENT" valueNumeric="80"/> - <column name="CLASSIFICATIONSCOREID" value="2cd8d11f-ee3f-429b-a16a-7839cf30b62d"/> - <column name="SORT" valueNumeric="20"/> - <column name="TITLE" value="51-100"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/> - <column name="SCOREPERCENT" valueNumeric="0"/> - <column name="CLASSIFICATIONSCOREID" value="2f3b6088-d78f-4fba-998d-b18a6b981485"/> - <column name="SORT" valueNumeric="170"/> - <column name="TITLE" value="Environment"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="d8091374-f3fd-41dc-8468-91469618c6fc"/> - <column name="SCOREPERCENT" valueNumeric="0"/> - <column name="CLASSIFICATIONSCOREID" value="2f4fddd2-be83-4190-99c3-6de8a7e328c5"/> - <column name="SORT" valueNumeric="50"/> - <column name="TITLE" value="0 to 49T"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="54128957-c80b-4b5a-ad1b-cfce665dfb10"/> - <column name="SCOREPERCENT" valueNumeric="100"/> - <column name="CLASSIFICATIONSCOREID" value="2fdb4d7e-24d5-4eb1-a130-3a0aaeebd8db"/> - <column name="SORT" valueNumeric="10"/> - <column name="TITLE" value="Germany"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="a43189fc-b712-45ed-9398-58d6e15760ca"/> - <column name="SCOREPERCENT" valueNumeric="25"/> - <column name="CLASSIFICATIONSCOREID" value="3035e36e-ee6a-45d1-9d68-920cd3666362"/> - <column name="SORT" valueNumeric="70"/> - <column name="TITLE" value="Student/Internship"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/> - <column name="SCOREPERCENT" valueNumeric="66"/> - <column name="CLASSIFICATIONSCOREID" value="35d8ae15-8993-4ab2-99f6-e57c2ebf0bb3"/> - <column name="SORT" valueNumeric="80"/> - <column name="TITLE" value="Food"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="382b311e-b2b2-49da-b6e1-339afae92657"/> - <column name="SCOREPERCENT" valueNumeric="16"/> - <column name="CLASSIFICATIONSCOREID" value="39547328-ccc6-47ad-b31a-d6a149081c44"/> - <column name="SORT" valueNumeric="50"/> - <column name="TITLE" value="0 to 49"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="382b311e-b2b2-49da-b6e1-339afae92657"/> - <column name="SCOREPERCENT" valueNumeric="100"/> - <column name="CLASSIFICATIONSCOREID" value="3c9ceefa-5c98-4629-9c6d-d46b6cad8b78"/> - <column name="SORT" valueNumeric="20"/> - <column name="TITLE" value="251 to 1,000"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="2031525e-6ca3-46b4-91d4-7f90cd31a630"/> - <column name="SCOREPERCENT" valueNumeric="100"/> - <column name="CLASSIFICATIONSCOREID" value="3dc5fc76-d2d5-4911-891a-3aacc5a9c925"/> - <column name="SORT" valueNumeric="10"/> - <column name="TITLE" value="Yes"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="2a702a31-9907-4f1b-abfd-3342640f1c9e"/> - <column name="SCOREPERCENT" valueNumeric="50"/> - <column name="CLASSIFICATIONSCOREID" value="3e1e21b0-c10d-4bcb-882c-ac1b239b9cb2"/> - <column name="SORT" valueNumeric="20"/> - <column name="TITLE" value="Standard"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/> - <column name="SCOREPERCENT" valueNumeric="25"/> - <column name="CLASSIFICATIONSCOREID" value="3eb18b76-f51e-4ad2-9080-74b4a603667b"/> - <column name="SORT" valueNumeric="20"/> - <column name="TITLE" value="Machinery and equipment"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/> - <column name="SCOREPERCENT" valueNumeric="100"/> - <column name="CLASSIFICATIONSCOREID" value="3fe9f04b-6a85-4a73-a138-ca90b6d8e61c"/> - <column name="SORT" valueNumeric="190"/> - <column name="TITLE" value="Public"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/> - <column name="SCOREPERCENT" valueNumeric="0"/> - <column name="CLASSIFICATIONSCOREID" value="41300a6c-8dc7-4b5a-9fb1-cecd3d5cbb8c"/> - <column name="SORT" valueNumeric="160"/> - <column name="TITLE" value="Electric"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/> - <column name="SCOREPERCENT" valueNumeric="100"/> - <column name="CLASSIFICATIONSCOREID" value="41d43723-7d19-4a7e-936a-df9013db7dfb"/> - <column name="SORT" valueNumeric="30"/> - <column name="TITLE" value="Logistics"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="80c6ec8b-eb54-4d25-a4f5-0adaf4cdc84e"/> - <column name="SCOREPERCENT" valueNumeric="100"/> - <column name="CLASSIFICATIONSCOREID" value="4285d598-06c0-435d-bb5e-28dec5f31521"/> - <column name="SORT" valueNumeric="10"/> - <column name="TITLE" value="high"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/> - <column name="SCOREPERCENT" valueNumeric="100"/> - <column name="CLASSIFICATIONSCOREID" value="47ca5b54-423f-4bf1-a4d6-a0c55a2488e6"/> - <column name="SORT" valueNumeric="10"/> - <column name="TITLE" value="Commodity group 1"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="31c169aa-ba5b-4f9d-9dd3-b0d0e8d1b632"/> - <column name="SCOREPERCENT" valueNumeric="75"/> - <column name="CLASSIFICATIONSCOREID" value="47ec3dbf-f8f6-4418-8dc2-0062510c1a28"/> - <column name="SORT" valueNumeric="20"/> - <column name="TITLE" value="Sales"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="be76dab1-c6ab-4b1e-8322-8b052ccda4d9"/> - <column name="SCOREPERCENT" valueNumeric="25"/> - <column name="CLASSIFICATIONSCOREID" value="4982ab85-0961-4d85-8fee-2b55887add96"/> - <column name="SORT" valueNumeric="10"/> - <column name="TITLE" value="high"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/> - <column name="SCOREPERCENT" valueNumeric="50"/> - <column name="CLASSIFICATIONSCOREID" value="4c8cfcec-f183-4d82-8a59-ae743ec772b4"/> - <column name="SORT" valueNumeric="130"/> - <column name="TITLE" value="Trade"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="4b72857e-863d-4254-accf-25281bb7bb64"/> - <column name="SCOREPERCENT" valueNumeric="20"/> - <column name="CLASSIFICATIONSCOREID" value="4d868dc5-747a-4f22-9134-638198d3084a"/> - <column name="SORT" valueNumeric="10"/> - <column name="TITLE" value="0-50"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="95396ee7-f0e2-41b4-995e-bac5749709ec"/> - <column name="SCOREPERCENT" valueNumeric="0"/> - <column name="CLASSIFICATIONSCOREID" value="4ed5e22f-222a-4a51-83d3-597fa035d2df"/> - <column name="SORT" valueNumeric="30"/> - <column name="TITLE" value="Negative"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="4b72857e-863d-4254-accf-25281bb7bb64"/> - <column name="SCOREPERCENT" valueNumeric="100"/> - <column name="CLASSIFICATIONSCOREID" value="51575eb6-4005-42d2-96f3-b35dfd06a86b"/> - <column name="SORT" valueNumeric="30"/> - <column name="TITLE" value="101-250"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="80c6ec8b-eb54-4d25-a4f5-0adaf4cdc84e"/> - <column name="SCOREPERCENT" valueNumeric="0"/> - <column name="CLASSIFICATIONSCOREID" value="5564a330-8c13-424f-a24b-5f97185a9036"/> - <column name="SORT" valueNumeric="30"/> - <column name="TITLE" value="low"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/> - <column name="SCOREPERCENT" valueNumeric="0"/> - <column name="CLASSIFICATIONSCOREID" value="56a56ec0-34c1-419f-81c2-1c1310d685d2"/> - <column name="SORT" valueNumeric="120"/> - <column name="TITLE" value="Education"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="4d878689-15c0-46cc-acc8-3c524463db5c"/> - <column name="SCOREPERCENT" valueNumeric="100"/> - <column name="CLASSIFICATIONSCOREID" value="5be4d454-1f3e-4a3d-b8a4-3eb49ce1bc35"/> - <column name="SORT" valueNumeric="10"/> - <column name="TITLE" value="high"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/> - <column name="SCOREPERCENT" valueNumeric="0"/> - <column name="CLASSIFICATIONSCOREID" value="5ca391a5-9de8-41e6-9792-17cf8deaa7e7"/> - <column name="SORT" valueNumeric="90"/> - <column name="TITLE" value="Energy"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/> - <column name="SCOREPERCENT" valueNumeric="50"/> - <column name="CLASSIFICATIONSCOREID" value="618bf0d1-18d4-4a96-900c-80a5a616da9b"/> - <column name="SORT" valueNumeric="30"/> - <column name="TITLE" value="Logistics"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="2a702a31-9907-4f1b-abfd-3342640f1c9e"/> - <column name="SCOREPERCENT" valueNumeric="100"/> - <column name="CLASSIFICATIONSCOREID" value="61fe4e4f-e64d-4195-87b5-658f36ce1736"/> - <column name="SORT" valueNumeric="10"/> - <column name="TITLE" value="Individual"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="57604bc1-d99f-4d61-b28d-55218a72045b"/> - <column name="SCOREPERCENT" valueNumeric="100"/> - <column name="CLASSIFICATIONSCOREID" value="636af750-fcd3-4480-bfe7-ead42bf85280"/> - <column name="SORT" valueNumeric="10"/> - <column name="TITLE" value="Choice"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/> - <column name="SCOREPERCENT" valueNumeric="50"/> - <column name="CLASSIFICATIONSCOREID" value="6632b510-7094-45d6-b7ef-946e759429a3"/> - <column name="SORT" valueNumeric="140"/> - <column name="TITLE" value="Automotive"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="a43189fc-b712-45ed-9398-58d6e15760ca"/> - <column name="SCOREPERCENT" valueNumeric="100"/> - <column name="CLASSIFICATIONSCOREID" value="6bd19de4-691b-4e78-84dc-cf6f41231978"/> - <column name="SORT" valueNumeric="10"/> - <column name="TITLE" value="Management/Sales Manager"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="d8091374-f3fd-41dc-8468-91469618c6fc"/> - <column name="SCOREPERCENT" valueNumeric="20"/> - <column name="CLASSIFICATIONSCOREID" value="6d6653ae-024e-444c-aeae-561874d55569"/> - <column name="SORT" valueNumeric="40"/> - <column name="TITLE" value="50 to 99T"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="be76dab1-c6ab-4b1e-8322-8b052ccda4d9"/> - <column name="SCOREPERCENT" valueNumeric="50"/> - <column name="CLASSIFICATIONSCOREID" value="6fe28489-2383-412b-9bbd-4f01a9421775"/> - <column name="SORT" valueNumeric="20"/> - <column name="TITLE" value="medium"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/> - <column name="SCOREPERCENT" valueNumeric="75"/> - <column name="CLASSIFICATIONSCOREID" value="733323d6-ff3d-4ccb-b179-ad1fea05dfe8"/> - <column name="SORT" valueNumeric="40"/> - <column name="TITLE" value="200-349 D€"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="54128957-c80b-4b5a-ad1b-cfce665dfb10"/> - <column name="SCOREPERCENT" valueNumeric="0"/> - <column name="CLASSIFICATIONSCOREID" value="7d6f716a-97c7-417b-a8c0-3cb71e403dde"/> - <column name="SORT" valueNumeric="30"/> - <column name="TITLE" value="Other"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="31c169aa-ba5b-4f9d-9dd3-b0d0e8d1b632"/> - <column name="SCOREPERCENT" valueNumeric="100"/> - <column name="CLASSIFICATIONSCOREID" value="7e569319-5885-452e-9331-a507f3365236"/> - <column name="SORT" valueNumeric="10"/> - <column name="TITLE" value="Overarching"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/> - <column name="SCOREPERCENT" valueNumeric="25"/> - <column name="CLASSIFICATIONSCOREID" value="839cd672-5981-4207-8a82-caddd00107e4"/> - <column name="SORT" valueNumeric="20"/> - <column name="TITLE" value="50-99 D€"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="4d878689-15c0-46cc-acc8-3c524463db5c"/> - <column name="SCOREPERCENT" valueNumeric="0"/> - <column name="CLASSIFICATIONSCOREID" value="893720f9-3780-4868-af0c-cbef5a564024"/> - <column name="SORT" valueNumeric="30"/> - <column name="TITLE" value="low"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/> - <column name="SCOREPERCENT" valueNumeric="100"/> - <column name="CLASSIFICATIONSCOREID" value="8d7bc557-e020-42c9-83d9-ff84fcbd12b7"/> - <column name="SORT" valueNumeric="20"/> - <column name="TITLE" value="Austria"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="382b311e-b2b2-49da-b6e1-339afae92657"/> - <column name="SCOREPERCENT" valueNumeric="66"/> - <column name="CLASSIFICATIONSCOREID" value="90361317-d80e-4466-a45b-3021bf02e2f9"/> - <column name="SORT" valueNumeric="30"/> - <column name="TITLE" value="101 to 250"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/> - <column name="SCOREPERCENT" valueNumeric="50"/> - <column name="CLASSIFICATIONSCOREID" value="904e2dbe-49a1-42a0-a5db-0f274334dd7f"/> - <column name="SORT" valueNumeric="160"/> - <column name="TITLE" value="Electric"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/> - <column name="SCOREPERCENT" valueNumeric="25"/> - <column name="CLASSIFICATIONSCOREID" value="9181a683-dcab-47fc-af7b-e282505348d6"/> - <column name="SORT" valueNumeric="90"/> - <column name="TITLE" value="Energy"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="4b72857e-863d-4254-accf-25281bb7bb64"/> - <column name="SCOREPERCENT" valueNumeric="60"/> - <column name="CLASSIFICATIONSCOREID" value="92708239-fd7f-4699-8aaa-b6290fedaac0"/> - <column name="SORT" valueNumeric="40"/> - <column name="TITLE" value="251-1000"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/> - <column name="SCOREPERCENT" valueNumeric="50"/> - <column name="CLASSIFICATIONSCOREID" value="92c8f126-b31e-4011-bbf0-cb5e57bfc3e5"/> - <column name="SORT" valueNumeric="60"/> - <column name="TITLE" value="Finance"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/> - <column name="SCOREPERCENT" valueNumeric="66"/> - <column name="CLASSIFICATIONSCOREID" value="9a3183db-8a38-4cf1-a234-3e2cf20a4f77"/> - <column name="SORT" valueNumeric="40"/> - <column name="TITLE" value="IT"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/> - <column name="SCOREPERCENT" valueNumeric="100"/> - <column name="CLASSIFICATIONSCOREID" value="9ac96400-9c47-4d4f-be5b-e053f92a54ce"/> - <column name="SORT" valueNumeric="40"/> - <column name="TITLE" value="IT"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="8c1e8f81-145f-4efe-936f-3f4147f4d59a"/> - <column name="SCOREPERCENT" valueNumeric="100"/> - <column name="CLASSIFICATIONSCOREID" value="a0c55ee2-0d15-4779-a5a6-93774d5bc393"/> - <column name="SORT" valueNumeric="10"/> - <column name="TITLE" value="OnPremise"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/> - <column name="SCOREPERCENT" valueNumeric="66"/> - <column name="CLASSIFICATIONSCOREID" value="a0fcd2e2-40c8-40b8-8a5b-e591154c248a"/> - <column name="SORT" valueNumeric="110"/> - <column name="TITLE" value="Lottery"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="54128957-c80b-4b5a-ad1b-cfce665dfb10"/> - <column name="SCOREPERCENT" valueNumeric="37"/> - <column name="CLASSIFICATIONSCOREID" value="a177b155-4665-4af1-b50e-0b59e8ac2752"/> - <column name="SORT" valueNumeric="40"/> - <column name="TITLE" value="Switzerland"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="95396ee7-f0e2-41b4-995e-bac5749709ec"/> - <column name="SCOREPERCENT" valueNumeric="100"/> - <column name="CLASSIFICATIONSCOREID" value="a60aaf2d-88aa-4c72-9606-0eb3ac9493cf"/> - <column name="SORT" valueNumeric="10"/> - <column name="TITLE" value="Positive"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="8c1e8f81-145f-4efe-936f-3f4147f4d59a"/> - <column name="SCOREPERCENT" valueNumeric="50"/> - <column name="CLASSIFICATIONSCOREID" value="a61e3451-296b-4812-a7b2-425963176f80"/> - <column name="SORT" valueNumeric="20"/> - <column name="TITLE" value="Cloud"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="a43189fc-b712-45ed-9398-58d6e15760ca"/> - <column name="SCOREPERCENT" valueNumeric="100"/> - <column name="CLASSIFICATIONSCOREID" value="a7e70abc-4d98-467d-a475-66bbd101de1d"/> - <column name="SORT" valueNumeric="20"/> - <column name="TITLE" value="Head of IT"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="382b311e-b2b2-49da-b6e1-339afae92657"/> - <column name="SCOREPERCENT" valueNumeric="100"/> - <column name="CLASSIFICATIONSCOREID" value="b1c55bcd-16c6-4b2f-8f73-e16397b40e93"/> - <column name="SORT" valueNumeric="10"/> - <column name="TITLE" value="from 1,000"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="f4d3791e-1717-4473-987b-0cd751805387"/> - <column name="SCOREPERCENT" valueNumeric="100"/> - <column name="CLASSIFICATIONSCOREID" value="b3792b08-4b07-4ed2-9bee-4673182b7349"/> - <column name="SORT" valueNumeric="10"/> - <column name="TITLE" value="Within 6 months"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/> - <column name="SCOREPERCENT" valueNumeric="25"/> - <column name="CLASSIFICATIONSCOREID" value="b41e180f-db8c-44c3-9fbb-179ab58d5852"/> - <column name="SORT" valueNumeric="30"/> - <column name="TITLE" value="Commodity group 3"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/> - <column name="SCOREPERCENT" valueNumeric="100"/> - <column name="CLASSIFICATIONSCOREID" value="b7b763d4-994d-483d-9a1c-6eb85786d61a"/> - <column name="SORT" valueNumeric="10"/> - <column name="TITLE" value="Germany"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="d8091374-f3fd-41dc-8468-91469618c6fc"/> - <column name="SCOREPERCENT" valueNumeric="60"/> - <column name="CLASSIFICATIONSCOREID" value="ba5d70c3-e77a-45ff-828b-7b3e0a61eec2"/> - <column name="SORT" valueNumeric="20"/> - <column name="TITLE" value="200 to 349T"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/> - <column name="SCOREPERCENT" valueNumeric="33"/> - <column name="CLASSIFICATIONSCOREID" value="bf44ae05-a4c4-4ee9-ad6e-7d64474afeff"/> - <column name="SORT" valueNumeric="60"/> - <column name="TITLE" value="Finance"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="a43189fc-b712-45ed-9398-58d6e15760ca"/> - <column name="SCOREPERCENT" valueNumeric="75"/> - <column name="CLASSIFICATIONSCOREID" value="bf6b1757-11da-49a9-a02c-8340139968ee"/> - <column name="SORT" valueNumeric="40"/> - <column name="TITLE" value="Service Manager"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="f4d3791e-1717-4473-987b-0cd751805387"/> - <column name="SCOREPERCENT" valueNumeric="33"/> - <column name="CLASSIFICATIONSCOREID" value="c328cb9e-5cef-4052-a3c1-98e1898eeb63"/> - <column name="SORT" valueNumeric="30"/> - <column name="TITLE" value="No date yet"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/> - <column name="SCOREPERCENT" valueNumeric="66"/> - <column name="CLASSIFICATIONSCOREID" value="c6300eeb-0494-4eba-89b1-23afdbb397e9"/> - <column name="SORT" valueNumeric="150"/> - <column name="TITLE" value="Publishing house"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="a43189fc-b712-45ed-9398-58d6e15760ca"/> - <column name="SCOREPERCENT" valueNumeric="100"/> - <column name="CLASSIFICATIONSCOREID" value="c9d4e28d-7935-42c5-9da5-5ce0b51b425a"/> - <column name="SORT" valueNumeric="30"/> - <column name="TITLE" value="CRM Manager"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="95396ee7-f0e2-41b4-995e-bac5749709ec"/> - <column name="SCOREPERCENT" valueNumeric="40"/> - <column name="CLASSIFICATIONSCOREID" value="cddaf52d-37b7-426c-b858-c986e58544e6"/> - <column name="SORT" valueNumeric="20"/> - <column name="TITLE" value="Stagnated"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="a43189fc-b712-45ed-9398-58d6e15760ca"/> - <column name="SCOREPERCENT" valueNumeric="75"/> - <column name="CLASSIFICATIONSCOREID" value="d032f425-5739-4f0c-8103-e102fe0d3ccf"/> - <column name="SORT" valueNumeric="50"/> - <column name="TITLE" value="Skilled workers"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="80c6ec8b-eb54-4d25-a4f5-0adaf4cdc84e"/> - <column name="SCOREPERCENT" valueNumeric="33"/> - <column name="CLASSIFICATIONSCOREID" value="d0f5c576-e1cd-463e-82d2-e09c46ccb2a0"/> - <column name="SORT" valueNumeric="20"/> - <column name="TITLE" value="medium"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/> - <column name="SCOREPERCENT" valueNumeric="75"/> - <column name="CLASSIFICATIONSCOREID" value="d2a75f81-d0b3-48ce-be97-5e6add962cbb"/> - <column name="SORT" valueNumeric="70"/> - <column name="TITLE" value="Consultation"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="4b72857e-863d-4254-accf-25281bb7bb64"/> - <column name="SCOREPERCENT" valueNumeric="60"/> - <column name="CLASSIFICATIONSCOREID" value="d578aa09-5d14-4ace-8cd0-572c5efcd82e"/> - <column name="SORT" valueNumeric="50"/> - <column name="TITLE" value="ab 1000"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="57604bc1-d99f-4d61-b28d-55218a72045b"/> - <column name="SCOREPERCENT" valueNumeric="50"/> - <column name="CLASSIFICATIONSCOREID" value="d5beb18f-c53e-438d-8b0b-7699aa20fba7"/> - <column name="SORT" valueNumeric="20"/> - <column name="TITLE" value="Rate"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="382b311e-b2b2-49da-b6e1-339afae92657"/> - <column name="SCOREPERCENT" valueNumeric="33"/> - <column name="CLASSIFICATIONSCOREID" value="d7d807a2-8a97-4a0e-9d1c-fb8c7a703599"/> - <column name="SORT" valueNumeric="40"/> - <column name="TITLE" value="50 to 100"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/> - <column name="SCOREPERCENT" valueNumeric="25"/> - <column name="CLASSIFICATIONSCOREID" value="df7ea293-1fd6-4e98-ba3f-7d975fa8eaeb"/> - <column name="SORT" valueNumeric="170"/> - <column name="TITLE" value="Environment"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="57604bc1-d99f-4d61-b28d-55218a72045b"/> - <column name="SCOREPERCENT" valueNumeric="16"/> - <column name="CLASSIFICATIONSCOREID" value="e6ab210e-6a26-4a12-9d50-ff8bd392c590"/> - <column name="SORT" valueNumeric="30"/> - <column name="TITLE" value="Search"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="2031525e-6ca3-46b4-91d4-7f90cd31a630"/> - <column name="SCOREPERCENT" valueNumeric="50"/> - <column name="CLASSIFICATIONSCOREID" value="e70a23b4-f2a9-4438-8ba6-742c6c17e5cc"/> - <column name="SORT" valueNumeric="20"/> - <column name="TITLE" value="No"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="d8091374-f3fd-41dc-8468-91469618c6fc"/> - <column name="SCOREPERCENT" valueNumeric="40"/> - <column name="CLASSIFICATIONSCOREID" value="e824d7e3-dfbe-4f34-a5c7-8f2226aade7e"/> - <column name="SORT" valueNumeric="30"/> - <column name="TITLE" value="100 to 199T"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="a43189fc-b712-45ed-9398-58d6e15760ca"/> - <column name="SCOREPERCENT" valueNumeric="100"/> - <column name="CLASSIFICATIONSCOREID" value="e8741cb0-9ada-48dd-89d1-f00a1a755c38"/> - <column name="SORT" valueNumeric="60"/> - <column name="TITLE" value="Counsellor"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/> - <column name="SCOREPERCENT" valueNumeric="100"/> - <column name="CLASSIFICATIONSCOREID" value="ec51d975-bda6-415e-9b91-32f0e981ecd8"/> - <column name="SORT" valueNumeric="10"/> - <column name="TITLE" value="Building and construction suppliers"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="54128957-c80b-4b5a-ad1b-cfce665dfb10"/> - <column name="SCOREPERCENT" valueNumeric="100"/> - <column name="CLASSIFICATIONSCOREID" value="ecf421ef-66b2-4f9f-98c6-ee8a73e753da"/> - <column name="SORT" valueNumeric="20"/> - <column name="TITLE" value="Austria"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="d8091374-f3fd-41dc-8468-91469618c6fc"/> - <column name="SCOREPERCENT" valueNumeric="100"/> - <column name="CLASSIFICATIONSCOREID" value="ed6a38f7-97bf-4e3d-a34c-4a1e636fa6a7"/> - <column name="SORT" valueNumeric="10"/> - <column name="TITLE" value="from 350T"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/> - <column name="SCOREPERCENT" valueNumeric="100"/> - <column name="CLASSIFICATIONSCOREID" value="efec90bd-c99f-49d9-bd52-df0ae6f938a3"/> - <column name="SORT" valueNumeric="20"/> - <column name="TITLE" value="Machinery and equipment"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/> - <column name="SCOREPERCENT" valueNumeric="100"/> - <column name="CLASSIFICATIONSCOREID" value="f02cfd28-5a09-42ca-b805-07b7b38e3363"/> - <column name="SORT" valueNumeric="50"/> - <column name="TITLE" value="ab 350 D€"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="31c169aa-ba5b-4f9d-9dd3-b0d0e8d1b632"/> - <column name="SCOREPERCENT" valueNumeric="50"/> - <column name="CLASSIFICATIONSCOREID" value="f1534026-34cc-4898-8711-41cbe4accb60"/> - <column name="SORT" valueNumeric="30"/> - <column name="TITLE" value="Marketing"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/> - <column name="SCOREPERCENT" valueNumeric="66"/> - <column name="CLASSIFICATIONSCOREID" value="f678b3e0-72c4-4b48-90c0-054bf3612dc2"/> - <column name="SORT" valueNumeric="130"/> - <column name="TITLE" value="Trade"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/> - <column name="SCOREPERCENT" valueNumeric="66"/> - <column name="CLASSIFICATIONSCOREID" value="fae1ef0a-5d07-4725-907f-4b2ac5814328"/> - <column name="SORT" valueNumeric="100"/> - <column name="TITLE" value="Industry"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="f4d3791e-1717-4473-987b-0cd751805387"/> - <column name="SCOREPERCENT" valueNumeric="66"/> - <column name="CLASSIFICATIONSCOREID" value="fb8cb769-d95b-468a-ac64-7ee0cefd46a7"/> - <column name="SORT" valueNumeric="20"/> - <column name="TITLE" value="unknown"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/> - <column name="SCOREPERCENT" valueNumeric="25"/> - <column name="CLASSIFICATIONSCOREID" value="fd022500-4cbc-461f-abb9-b0ec3d8e1dd1"/> - <column name="SORT" valueNumeric="80"/> - <column name="TITLE" value="Food"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/> - <column name="SCOREPERCENT" valueNumeric="50"/> - <column name="CLASSIFICATIONSCOREID" value="fd8a348a-dc1f-414b-b95e-b1a6aeb9a8d4"/> - <column name="SORT" valueNumeric="20"/> - <column name="TITLE" value="Commodity group 2"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="df4aacdc-7e17-484c-a96e-a07550a7220e"/> - <column name="SCOREPERCENT" valueNumeric="100"/> - <column name="CLASSIFICATIONSCOREID" value="4c769195-7bce-45e7-9176-782ff98de8d4"/> - <column name="SORT" valueNumeric="10"/> - <column name="TITLE" value="Commodity group 1"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="df4aacdc-7e17-484c-a96e-a07550a7220e"/> - <column name="SCOREPERCENT" valueNumeric="50"/> - <column name="CLASSIFICATIONSCOREID" value="21697201-96ae-4c52-848e-e3d228e003b8"/> - <column name="SORT" valueNumeric="20"/> - <column name="TITLE" value="Commodity group 2"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="b28846e6-befe-4318-93d8-de54fcae369c"/> - <column name="SCOREPERCENT" valueNumeric="10"/> - <column name="CLASSIFICATIONSCOREID" value="aa5f6e3a-3e0f-42bb-ba12-fc7483410f1e"/> - <column name="SORT" valueNumeric="10"/> - <column name="TITLE" value="Low"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="b28846e6-befe-4318-93d8-de54fcae369c"/> - <column name="SCOREPERCENT" valueNumeric="30"/> - <column name="CLASSIFICATIONSCOREID" value="cb8bee7a-5a18-421c-8c5d-6650d29e480e"/> - <column name="SORT" valueNumeric="20"/> - <column name="TITLE" value="Medium"/> - </insert> - <insert tableName="classificationscore"> - <column name="CLASSIFICATIONTYPE_ID" value="b28846e6-befe-4318-93d8-de54fcae369c"/> - <column name="SCOREPERCENT" valueNumeric="60"/> - <column name="CLASSIFICATIONSCOREID" value="124fd303-acb0-4e0b-a411-0473577a0da9"/> - <column name="SORT" valueNumeric="30"/> - <column name="TITLE" value="High"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORNUMBER" value="0"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="a2184688-5ace-428c-a0f9-d5103b8819bf"/> + <column name="CLASSIFICATIONTYPE_ID" value="3402e131-581e-4165-aa2a-a7dba56a4164"/> + <column name="SCOREPERCENT" valueNumeric="20.00"/> + <column name="SORT" valueNumeric="8"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORNUMBER" value="10"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="42f1303e-106a-4497-8021-3c3b892d9b45"/> + <column name="CLASSIFICATIONTYPE_ID" value="3402e131-581e-4165-aa2a-a7dba56a4164"/> + <column name="SCOREPERCENT" valueNumeric="70.00"/> + <column name="SORT" valueNumeric="3"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORNUMBER" value="60"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="fca4c9b7-3c93-4af9-8ccc-e39b072dcd09"/> + <column name="CLASSIFICATIONTYPE_ID" value="3402e131-581e-4165-aa2a-a7dba56a4164"/> + <column name="SCOREPERCENT" valueNumeric="50.00"/> + <column name="SORT" valueNumeric="5"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORNUMBER" value="40"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="e55496bf-3cdf-4413-8afd-4797f84536e0"/> + <column name="CLASSIFICATIONTYPE_ID" value="2cc9700e-7a51-4a49-a42b-73e9289363b6"/> + <column name="SCOREPERCENT" valueNumeric="10.00"/> + <column name="SORT" valueNumeric="6"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORNUMBER" value="2500"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="6d5ac2b0-5786-41a0-8a18-13802eb9733d"/> + <column name="CLASSIFICATIONTYPE_ID" value="2cc9700e-7a51-4a49-a42b-73e9289363b6"/> + <column name="SCOREPERCENT" valueNumeric="50.00"/> + <column name="SORT" valueNumeric="2"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORNUMBER" value="500000"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="5b70d13a-2a74-4d92-8892-217d292be436"/> + <column name="CLASSIFICATIONTYPE_ID" value="2cc9700e-7a51-4a49-a42b-73e9289363b6"/> + <column name="SCOREPERCENT" valueNumeric="30.00"/> + <column name="SORT" valueNumeric="3"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORNUMBER" value="25000"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="7701aa46-d3c9-4416-b355-54bb924d9746"/> + <column name="CLASSIFICATIONTYPE_ID" value="2cc9700e-7a51-4a49-a42b-73e9289363b6"/> + <column name="SCOREPERCENT" valueNumeric="75.00"/> + <column name="SORT" valueNumeric="1"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORNUMBER" value="750000"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="e75a49ad-7f2b-47e6-b395-8a04e74c55d1"/> + <column name="CLASSIFICATIONTYPE_ID" value="2cc9700e-7a51-4a49-a42b-73e9289363b6"/> + <column name="SCOREPERCENT" valueNumeric="5.00"/> + <column name="SORT" valueNumeric="7"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORNUMBER" value="1000"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="4832fd88-ecbc-424a-8821-53f600f22a9a"/> + <column name="CLASSIFICATIONTYPE_ID" value="2cc9700e-7a51-4a49-a42b-73e9289363b6"/> + <column name="SCOREPERCENT" valueNumeric="20.00"/> + <column name="SORT" valueNumeric="4"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORNUMBER" value="10000"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="6b403a34-c926-4114-9d0d-d16ce253473c"/> + <column name="CLASSIFICATIONTYPE_ID" value="2cc9700e-7a51-4a49-a42b-73e9289363b6"/> + <column name="SCOREPERCENT" valueNumeric="15.00"/> + <column name="SORT" valueNumeric="5"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORNUMBER" value="5000"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="63ca5f2c-38d0-42ad-96ae-bb2cd8cef80e"/> + <column name="CLASSIFICATIONTYPE_ID" value="2cc9700e-7a51-4a49-a42b-73e9289363b6"/> + <column name="SCOREPERCENT" valueNumeric="1.00"/> + <column name="SORT" valueNumeric="8"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORNUMBER" value="0"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="276841d7-eefb-48ce-8be6-dc3478633734"/> + <column name="CLASSIFICATIONTYPE_ID" value="2cc9700e-7a51-4a49-a42b-73e9289363b6"/> + <column name="SCOREPERCENT" valueNumeric="100.00"/> + <column name="SORT" valueNumeric="0"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORNUMBER" value="1000000"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="46682106-7b88-4f96-a1a5-2034106c570d"/> + <column name="CLASSIFICATIONTYPE_ID" value="fe91e86e-a0ec-4475-b006-f2b2fef8aabb"/> + <column name="SCOREPERCENT" valueNumeric="80.00"/> + <column name="SORT" valueNumeric="2"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"#EXTENSION.Attribute_filter.eyJpZCI6ImZkMzk2M2JjLThlNjAtNDExYS05OTExLWI5N2ViNzNlNWNmNyIsInR5cGUiOiJDT01CTyJ9#TEXT","operator":"EQUAL","value":"Bestandskunde","key":"be3b5fe2-2146-4eab-80a4-3c1cf4d6156a","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="c68596b1-7689-4d08-9954-862517ae2996"/> + <column name="CLASSIFICATIONTYPE_ID" value="fe91e86e-a0ec-4475-b006-f2b2fef8aabb"/> + <column name="SCOREPERCENT" valueNumeric="20.00"/> + <column name="SORT" valueNumeric="0"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"#EXTENSION.Attribute_filter.eyJpZCI6ImZkMzk2M2JjLThlNjAtNDExYS05OTExLWI5N2ViNzNlNWNmNyIsInR5cGUiOiJDT01CTyJ9#TEXT","operator":"EQUAL","value":"Intern","key":"3265f271-2e85-42b2-84af-c9e23e8a1e8c","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="3f76bf89-56e0-4ed0-9a76-73b46561d6d8"/> + <column name="CLASSIFICATIONTYPE_ID" value="fe91e86e-a0ec-4475-b006-f2b2fef8aabb"/> + <column name="SCOREPERCENT" valueNumeric="40.00"/> + <column name="SORT" valueNumeric="3"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"#EXTENSION.Attribute_filter.eyJpZCI6ImZkMzk2M2JjLThlNjAtNDExYS05OTExLWI5N2ViNzNlNWNmNyIsInR5cGUiOiJDT01CTyJ9#TEXT","operator":"EQUAL","value":"Interessent","key":"87204e4b-2db2-4eb4-b216-5e16b227561e","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="012e9028-cd1f-4d31-8858-4898a3ac97e7"/> + <column name="CLASSIFICATIONTYPE_ID" value="fe91e86e-a0ec-4475-b006-f2b2fef8aabb"/> + <column name="SCOREPERCENT" valueNumeric="50.00"/> + <column name="SORT" valueNumeric="1"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"#EXTENSION.Attribute_filter.eyJpZCI6ImZkMzk2M2JjLThlNjAtNDExYS05OTExLWI5N2ViNzNlNWNmNyIsInR5cGUiOiJDT01CTyJ9#TEXT","operator":"EQUAL","value":"Partner","key":"615d3850-ef32-4988-9a8d-7b702b489194","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="2276760a-43ca-4b0f-bbd8-f90769323e7f"/> + <column name="CLASSIFICATIONTYPE_ID" value="38326d5f-ecab-4d96-919c-dbf2d3a15d9f"/> + <column name="SCOREPERCENT" valueNumeric="60.00"/> + <column name="SORT" valueNumeric="4"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORTEXT" value="sixMonthsAgo"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="2b71050c-c29f-4ff2-9388-2bcbf48e2acf"/> + <column name="CLASSIFICATIONTYPE_ID" value="38326d5f-ecab-4d96-919c-dbf2d3a15d9f"/> + <column name="SCOREPERCENT" valueNumeric="20.00"/> + <column name="SORT" valueNumeric="5"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORTEXT" value="oneYearAgo"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="2519e132-e571-46be-8032-7496d7e091c8"/> + <column name="CLASSIFICATIONTYPE_ID" value="38326d5f-ecab-4d96-919c-dbf2d3a15d9f"/> + <column name="SCOREPERCENT" valueNumeric="100.00"/> + <column name="SORT" valueNumeric="2"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORTEXT" value="nextMonth"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="f737993f-0e3a-4e5d-a331-c78181e1d09b"/> + <column name="CLASSIFICATIONTYPE_ID" value="38326d5f-ecab-4d96-919c-dbf2d3a15d9f"/> + <column name="SCOREPERCENT" valueNumeric="80.00"/> + <column name="SORT" valueNumeric="3"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORTEXT" value="lastMonth"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="bda9a62d-53e2-4120-a8dc-b0190a9b64f0"/> + <column name="CLASSIFICATIONTYPE_ID" value="38326d5f-ecab-4d96-919c-dbf2d3a15d9f"/> + <column name="SCOREPERCENT" valueNumeric="60.00"/> + <column name="SORT" valueNumeric="1"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORTEXT" value="inSixMonths"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="8f5976fe-0770-4e20-b29c-28f1a888aa06"/> + <column name="CLASSIFICATIONTYPE_ID" value="38326d5f-ecab-4d96-919c-dbf2d3a15d9f"/> + <column name="SCOREPERCENT" valueNumeric="40.00"/> + <column name="SORT" valueNumeric="0"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[]}}"/> + <column name="INDICATORTEXT" value="inOneYear"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="83b0f813-e475-4f6b-b322-6b21bc38fab9"/> + <column name="CLASSIFICATIONTYPE_ID" value="3fd84231-20cb-4a85-8fe6-404f3015a134"/> + <column name="SCOREPERCENT" valueNumeric="80.00"/> + <column name="SORT" valueNumeric="1"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"PHASE","operator":"EQUAL","value":"Offer","key":"SALPROJPHASEOFFER","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="86a9fe82-c139-4b9c-b458-be2d8fb99fbf"/> + <column name="CLASSIFICATIONTYPE_ID" value="3fd84231-20cb-4a85-8fe6-404f3015a134"/> + <column name="SCOREPERCENT" valueNumeric="40.00"/> + <column name="SORT" valueNumeric="3"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"PHASE","operator":"EQUAL","value":"Lead","key":"SALPROJPHASELEAD","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="827e0865-456a-4af9-8f04-bb2e720e41ec"/> + <column name="CLASSIFICATIONTYPE_ID" value="3fd84231-20cb-4a85-8fe6-404f3015a134"/> + <column name="SCOREPERCENT" valueNumeric="60.00"/> + <column name="SORT" valueNumeric="2"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"PHASE","operator":"EQUAL","value":"Prospect","key":"SALPROJPHASEPROS","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="779119a0-2b43-42b6-8045-c8326652c39c"/> + <column name="CLASSIFICATIONTYPE_ID" value="3fd84231-20cb-4a85-8fe6-404f3015a134"/> + <column name="SCOREPERCENT" valueNumeric="100.00"/> + <column name="SORT" valueNumeric="0"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"PHASE","operator":"EQUAL","value":"Negotiation","key":"SALPROJPHASENEGO","contenttype":"TEXT"}]}}"/> + </insert> + <insert tableName="CLASSIFICATIONSCORE"> + <column name="CLASSIFICATIONSCOREID" value="827dc207-acc9-4fcf-93c6-ad94a2d3ae5f"/> + <column name="CLASSIFICATIONTYPE_ID" value="3fd84231-20cb-4a85-8fe6-404f3015a134"/> + <column name="SCOREPERCENT" valueNumeric="20.00"/> + <column name="SORT" valueNumeric="4"/> + <column name="FIELDVALUE" value="{"entity":"Salesproject_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"PHASE","operator":"EQUAL","value":"Contact","key":"SALPROJPHASECONTACT","contenttype":"TEXT"}]}}"/> </insert> </changeSet> </databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/classificationstorage.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/classificationstorage.xml index e212d1053b859475ea540c8c5759f3cefffd8670..32b733dd138909693a1274ce8e6cb324cd1740cc 100644 --- a/.liquibase/Data_alias/basic/_demoData/generatedData/classificationstorage.xml +++ b/.liquibase/Data_alias/basic/_demoData/generatedData/classificationstorage.xml @@ -2,186 +2,186 @@ <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="autogenerated" id="489ad8c4-660a-4043-b5ea-09969fee2252"> <delete tableName="classificationstorage"/> - <insert tableName="classificationstorage"> + <insert tableName="CLASSIFICATIONSTORAGE"> <column name="CLASSIFICATIONSTORAGEID" value="04b4ac80-a316-437a-b113-e7de14e181a8"/> - <column name="OBJECT_TYPE" value="Salesproject"/> - <column name="CLASSIFICATIONVALUE" value="ABB"/> + <column name="CLASSIFICATIONVALUE" value="AC"/> <column name="OBJECT_ROWID" value="7e2680f6-a438-45aa-956a-787363f85923"/> + <column name="OBJECT_TYPE" value="Salesproject"/> <column name="OUTDATED" valueNumeric="0"/> </insert> - <insert tableName="classificationstorage"> + <insert tableName="CLASSIFICATIONSTORAGE"> <column name="CLASSIFICATIONSTORAGEID" value="0adb8953-1685-45cf-bcf7-c2c2098aa215"/> - <column name="OBJECT_TYPE" value="Organisation"/> - <column name="CLASSIFICATIONVALUE" value="AB"/> + <column name="CLASSIFICATIONVALUE" value="AC"/> <column name="OBJECT_ROWID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/> + <column name="OBJECT_TYPE" value="Organisation"/> <column name="OUTDATED" valueNumeric="0"/> </insert> - <insert tableName="classificationstorage"> + <insert tableName="CLASSIFICATIONSTORAGE"> <column name="CLASSIFICATIONSTORAGEID" value="1251e4b0-195d-4556-a10e-7942f1b0e337"/> - <column name="OBJECT_TYPE" value="Organisation"/> - <column name="CLASSIFICATIONVALUE" value="AB"/> + <column name="CLASSIFICATIONVALUE" value="BC"/> <column name="OBJECT_ROWID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/> + <column name="OBJECT_TYPE" value="Organisation"/> <column name="OUTDATED" valueNumeric="0"/> </insert> - <insert tableName="classificationstorage"> + <insert tableName="CLASSIFICATIONSTORAGE"> <column name="CLASSIFICATIONSTORAGEID" value="166e729d-45c6-4dab-bff2-940d2b618f6b"/> - <column name="OBJECT_TYPE" value="Salesproject"/> - <column name="CLASSIFICATIONVALUE" value="ADB"/> + <column name="CLASSIFICATIONVALUE" value="BB"/> <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/> + <column name="OBJECT_TYPE" value="Salesproject"/> <column name="OUTDATED" valueNumeric="0"/> </insert> - <insert tableName="classificationstorage"> + <insert tableName="CLASSIFICATIONSTORAGE"> <column name="CLASSIFICATIONSTORAGEID" value="1aafcbf6-6feb-4916-a4fd-58c138eb8f8f"/> - <column name="OBJECT_TYPE" value="Salesproject"/> - <column name="CLASSIFICATIONVALUE" value="DBA"/> + <column name="CLASSIFICATIONVALUE" value="BC"/> <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/> + <column name="OBJECT_TYPE" value="Salesproject"/> <column name="OUTDATED" valueNumeric="0"/> </insert> - <insert tableName="classificationstorage"> + <insert tableName="CLASSIFICATIONSTORAGE"> <column name="CLASSIFICATIONSTORAGEID" value="25a1b340-538d-4c4f-8b1e-25126286cd53"/> - <column name="OBJECT_TYPE" value="Organisation"/> <column name="CLASSIFICATIONVALUE" value="BB"/> <column name="OBJECT_ROWID" value="b219b58a-f120-42d8-9a64-0b176501eac7"/> + <column name="OBJECT_TYPE" value="Organisation"/> <column name="OUTDATED" valueNumeric="0"/> </insert> - <insert tableName="classificationstorage"> + <insert tableName="CLASSIFICATIONSTORAGE"> <column name="CLASSIFICATIONSTORAGEID" value="2ab913d3-e1a8-4fe2-904b-77b02f6be689"/> - <column name="OBJECT_TYPE" value="Organisation"/> - <column name="CLASSIFICATIONVALUE" value="BA"/> + <column name="CLASSIFICATIONVALUE" value="BC"/> <column name="OBJECT_ROWID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/> + <column name="OBJECT_TYPE" value="Organisation"/> <column name="OUTDATED" valueNumeric="0"/> </insert> - <insert tableName="classificationstorage"> + <insert tableName="CLASSIFICATIONSTORAGE"> <column name="CLASSIFICATIONSTORAGEID" value="3893da8a-f357-46e0-a0b9-65aa58b0dfa6"/> - <column name="OBJECT_TYPE" value="Organisation"/> <column name="CLASSIFICATIONVALUE" value="BC"/> <column name="OBJECT_ROWID" value="777246d5-7a73-4c52-af14-84df66128e5d"/> + <column name="OBJECT_TYPE" value="Organisation"/> <column name="OUTDATED" valueNumeric="0"/> </insert> - <insert tableName="classificationstorage"> + <insert tableName="CLASSIFICATIONSTORAGE"> <column name="CLASSIFICATIONSTORAGEID" value="42cc772e-53c6-4849-be29-ebb4e18ab860"/> - <column name="OBJECT_TYPE" value="Salesproject"/> - <column name="CLASSIFICATIONVALUE" value="ACB"/> + <column name="CLASSIFICATIONVALUE" value="BC"/> <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/> + <column name="OBJECT_TYPE" value="Salesproject"/> <column name="OUTDATED" valueNumeric="0"/> </insert> - <insert tableName="classificationstorage"> + <insert tableName="CLASSIFICATIONSTORAGE"> <column name="CLASSIFICATIONSTORAGEID" value="471aafd5-a348-453f-8b2a-64bb365fd0ee"/> - <column name="OBJECT_TYPE" value="Salesproject"/> - <column name="CLASSIFICATIONVALUE" value="ACB"/> + <column name="CLASSIFICATIONVALUE" value="BC"/> <column name="OBJECT_ROWID" value="ef7f4726-4476-4f59-97c2-706dc1e0046f"/> + <column name="OBJECT_TYPE" value="Salesproject"/> <column name="OUTDATED" valueNumeric="0"/> </insert> - <insert tableName="classificationstorage"> + <insert tableName="CLASSIFICATIONSTORAGE"> <column name="CLASSIFICATIONSTORAGEID" value="4ce62df5-f0ea-4593-a152-6704c61d7cef"/> - <column name="OBJECT_TYPE" value="Organisation"/> - <column name="CLASSIFICATIONVALUE" value="BD"/> + <column name="CLASSIFICATIONVALUE" value="BC"/> <column name="OBJECT_ROWID" value="2c14fb05-d48e-4eeb-8a7f-85d423746848"/> + <column name="OBJECT_TYPE" value="Organisation"/> <column name="OUTDATED" valueNumeric="0"/> </insert> - <insert tableName="classificationstorage"> + <insert tableName="CLASSIFICATIONSTORAGE"> <column name="CLASSIFICATIONSTORAGEID" value="63dd36bb-74b8-487b-811f-521438ef9491"/> - <column name="OBJECT_TYPE" value="Organisation"/> - <column name="CLASSIFICATIONVALUE" value="AC"/> + <column name="CLASSIFICATIONVALUE" value="BC"/> <column name="OBJECT_ROWID" value="019651a4-503e-4e06-aefd-e7e631bf3144"/> + <column name="OBJECT_TYPE" value="Organisation"/> <column name="OUTDATED" valueNumeric="0"/> </insert> - <insert tableName="classificationstorage"> + <insert tableName="CLASSIFICATIONSTORAGE"> <column name="CLASSIFICATIONSTORAGEID" value="7a4762f5-90a3-4b6c-8a5d-93125381c18a"/> - <column name="OBJECT_TYPE" value="Organisation"/> <column name="CLASSIFICATIONVALUE" value="BC"/> <column name="OBJECT_ROWID" value="e83c45e0-c30b-436e-b445-00a8b58383b0"/> + <column name="OBJECT_TYPE" value="Organisation"/> <column name="OUTDATED" valueNumeric="0"/> </insert> - <insert tableName="classificationstorage"> + <insert tableName="CLASSIFICATIONSTORAGE"> <column name="CLASSIFICATIONSTORAGEID" value="7b2eb62a-b686-4eaf-bde1-2e1dd1028f65"/> - <column name="OBJECT_TYPE" value="Organisation"/> <column name="CLASSIFICATIONVALUE" value="BC"/> <column name="OBJECT_ROWID" value="fb07cb0e-c391-4503-9c47-a39ec7388f4f"/> + <column name="OBJECT_TYPE" value="Organisation"/> <column name="OUTDATED" valueNumeric="0"/> </insert> - <insert tableName="classificationstorage"> + <insert tableName="CLASSIFICATIONSTORAGE"> <column name="CLASSIFICATIONSTORAGEID" value="7e59d485-01a8-4e43-9655-ba751d5983a4"/> - <column name="OBJECT_TYPE" value="Organisation"/> <column name="CLASSIFICATIONVALUE" value="BC"/> <column name="OBJECT_ROWID" value="449080f6-b714-4189-a261-37439d0d4010"/> + <column name="OBJECT_TYPE" value="Organisation"/> <column name="OUTDATED" valueNumeric="0"/> </insert> - <insert tableName="classificationstorage"> + <insert tableName="CLASSIFICATIONSTORAGE"> <column name="CLASSIFICATIONSTORAGEID" value="7f7dfe1d-cb98-44c8-8106-858d991d2b06"/> - <column name="OBJECT_TYPE" value="Salesproject"/> - <column name="CLASSIFICATIONVALUE" value="ACA"/> + <column name="CLASSIFICATIONVALUE" value="CC"/> <column name="OBJECT_ROWID" value="ebb04ae2-d1f9-4ef3-bdfa-e9f562d215ba"/> + <column name="OBJECT_TYPE" value="Salesproject"/> <column name="OUTDATED" valueNumeric="0"/> </insert> - <insert tableName="classificationstorage"> + <insert tableName="CLASSIFICATIONSTORAGE"> <column name="CLASSIFICATIONSTORAGEID" value="80eac6e6-f237-455e-96fd-8484722a79d4"/> - <column name="OBJECT_TYPE" value="Organisation"/> - <column name="CLASSIFICATIONVALUE" value="BD"/> + <column name="CLASSIFICATIONVALUE" value="BC"/> <column name="OBJECT_ROWID" value="a3fd3c23-12e1-4820-b76e-2cd70103d94d"/> + <column name="OBJECT_TYPE" value="Organisation"/> <column name="OUTDATED" valueNumeric="0"/> </insert> - <insert tableName="classificationstorage"> + <insert tableName="CLASSIFICATIONSTORAGE"> <column name="CLASSIFICATIONSTORAGEID" value="821c7eed-7bee-4879-97ec-44d2014a192b"/> - <column name="OBJECT_TYPE" value="Organisation"/> - <column name="CLASSIFICATIONVALUE" value="BD"/> + <column name="CLASSIFICATIONVALUE" value="BC"/> <column name="OBJECT_ROWID" value="33ae2997-7bff-4c3c-8038-2fa6781dbe9d"/> + <column name="OBJECT_TYPE" value="Organisation"/> <column name="OUTDATED" valueNumeric="0"/> </insert> - <insert tableName="classificationstorage"> + <insert tableName="CLASSIFICATIONSTORAGE"> <column name="CLASSIFICATIONSTORAGEID" value="84a92c36-88df-4c06-a36a-650ed92d4d0a"/> - <column name="OBJECT_TYPE" value="Organisation"/> - <column name="CLASSIFICATIONVALUE" value="BD"/> + <column name="CLASSIFICATIONVALUE" value="BC"/> <column name="OBJECT_ROWID" value="8707accf-b1fd-4bde-97b1-ab44b75f66f9"/> + <column name="OBJECT_TYPE" value="Organisation"/> <column name="OUTDATED" valueNumeric="0"/> </insert> - <insert tableName="classificationstorage"> + <insert tableName="CLASSIFICATIONSTORAGE"> <column name="CLASSIFICATIONSTORAGEID" value="8db70618-5840-4d4b-90e2-66e1919fc6c1"/> - <column name="OBJECT_TYPE" value="Organisation"/> <column name="CLASSIFICATIONVALUE" value="BC"/> <column name="OBJECT_ROWID" value="fd082db5-be43-4219-a705-588f9c06e59b"/> + <column name="OBJECT_TYPE" value="Organisation"/> <column name="OUTDATED" valueNumeric="0"/> </insert> - <insert tableName="classificationstorage"> + <insert tableName="CLASSIFICATIONSTORAGE"> <column name="CLASSIFICATIONSTORAGEID" value="b4d2847f-0548-4cc8-b002-7723b5fc9184"/> - <column name="OBJECT_TYPE" value="Organisation"/> - <column name="CLASSIFICATIONVALUE" value="BD"/> + <column name="CLASSIFICATIONVALUE" value="BC"/> <column name="OBJECT_ROWID" value="e450d126-eab8-4517-ba7c-8b6804f8c859"/> + <column name="OBJECT_TYPE" value="Organisation"/> <column name="OUTDATED" valueNumeric="0"/> </insert> - <insert tableName="classificationstorage"> + <insert tableName="CLASSIFICATIONSTORAGE"> <column name="CLASSIFICATIONSTORAGEID" value="bbc19466-8d76-4f35-be56-8458f677d4a9"/> - <column name="OBJECT_TYPE" value="Organisation"/> - <column name="CLASSIFICATIONVALUE" value="BC"/> + <column name="CLASSIFICATIONVALUE" value="BB"/> <column name="OBJECT_ROWID" value="cabf6192-f9c3-4bd4-9366-ad2b073bdfa3"/> + <column name="OBJECT_TYPE" value="Organisation"/> <column name="OUTDATED" valueNumeric="0"/> </insert> - <insert tableName="classificationstorage"> + <insert tableName="CLASSIFICATIONSTORAGE"> <column name="CLASSIFICATIONSTORAGEID" value="c64c9f31-a108-4df9-b515-6e523b1341c1"/> - <column name="OBJECT_TYPE" value="Organisation"/> <column name="CLASSIFICATIONVALUE" value="BC"/> <column name="OBJECT_ROWID" value="5a52304e-65e8-40ed-9aca-a76af6c8c3a0"/> + <column name="OBJECT_TYPE" value="Organisation"/> <column name="OUTDATED" valueNumeric="0"/> </insert> - <insert tableName="classificationstorage"> + <insert tableName="CLASSIFICATIONSTORAGE"> <column name="CLASSIFICATIONSTORAGEID" value="e2142492-eeab-482d-a37e-b1c8fe7b2545"/> - <column name="OBJECT_TYPE" value="Organisation"/> <column name="CLASSIFICATIONVALUE" value="BC"/> <column name="OBJECT_ROWID" value="e6da1393-f46b-41a4-826b-2c7d22de2246"/> + <column name="OBJECT_TYPE" value="Organisation"/> <column name="OUTDATED" valueNumeric="0"/> </insert> - <insert tableName="classificationstorage"> + <insert tableName="CLASSIFICATIONSTORAGE"> <column name="CLASSIFICATIONSTORAGEID" value="f451479f-97dc-4570-b342-c8d53f04b493"/> - <column name="OBJECT_TYPE" value="Organisation"/> - <column name="CLASSIFICATIONVALUE" value="AC"/> + <column name="CLASSIFICATIONVALUE" value="BC"/> <column name="OBJECT_ROWID" value="8eecb5e5-40d9-4bf0-a152-1ca456795563"/> + <column name="OBJECT_TYPE" value="Organisation"/> <column name="OUTDATED" valueNumeric="0"/> </insert> - <insert tableName="classificationstorage"> + <insert tableName="CLASSIFICATIONSTORAGE"> <column name="CLASSIFICATIONSTORAGEID" value="fc665249-9efc-4d90-839d-cdffb4c3f407"/> - <column name="OBJECT_TYPE" value="Organisation"/> - <column name="CLASSIFICATIONVALUE" value="AC"/> + <column name="CLASSIFICATIONVALUE" value="BC"/> <column name="OBJECT_ROWID" value="eda61ea6-35ed-4a92-a93c-6118fc67d533"/> + <column name="OBJECT_TYPE" value="Organisation"/> <column name="OUTDATED" valueNumeric="0"/> </insert> </changeSet> diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/classificationtype.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/classificationtype.xml index 979cafb44d5208bf64d951980d4ac11bce05b602..4463565946a22aec814fa3e63de2e8e5c8208f10 100644 --- a/.liquibase/Data_alias/basic/_demoData/generatedData/classificationtype.xml +++ b/.liquibase/Data_alias/basic/_demoData/generatedData/classificationtype.xml @@ -1,183 +1,156 @@ <?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="autogenerated" id="78633039-6630-4bd9-8498-98950ad97aa3"> - <delete tableName="classificationtype"/> - <insert tableName="classificationtype"> - <column name="CLASSIFICATIONGROUP_ID" value="e3b0a84f-d2a7-4d7c-b734-82ab4b262e84"/> + <delete tableName="CLASSIFICATIONTYPE"/> + <insert tableName="CLASSIFICATIONTYPE"> + <column name="CLASSIFICATIONTYPEID" value="faab5c4e-6ef7-4cc2-9925-780263b03fa8"/> <column name="OBJECT_TYPE" value="Organisation"/> - <column name="SCORETYPE" value="Headquarters"/> - <column name="CLASSIFICATIONTYPEID" value="037a9de1-fa6d-4895-9db3-82f7769682ae"/> - <column name="SCOREPOINTS" valueNumeric="35"/> - <column name="OUTDATED" valueNumeric="0"/> - </insert> - <insert tableName="classificationtype"> - <column name="CLASSIFICATIONGROUP_ID" value="b2126d9d-8d18-46d4-a48f-1a03fc456ddd"/> - <column name="OBJECT_TYPE" value="Salesproject"/> - <column name="SCORETYPE" value="ScoreCustomizing"/> - <column name="CLASSIFICATIONTYPEID" value="2031525e-6ca3-46b4-91d4-7f90cd31a630"/> - <column name="SCOREPOINTS" valueNumeric="25"/> - <column name="OUTDATED" valueNumeric="0"/> - </insert> - <insert tableName="classificationtype"> - <column name="CLASSIFICATIONGROUP_ID" value="b2126d9d-8d18-46d4-a48f-1a03fc456ddd"/> - <column name="OBJECT_TYPE" value="Salesproject"/> - <column name="SCORETYPE" value="ScoreStandard"/> - <column name="CLASSIFICATIONTYPEID" value="2a702a31-9907-4f1b-abfd-3342640f1c9e"/> + <column name="CLASSIFICATIONGROUP_ID" value="82be3659-917b-4a7e-bf31-33258af00a16"/> + <column name="OUTDATED" valueNumeric="1"/> <column name="SCOREPOINTS" valueNumeric="25"/> - <column name="OUTDATED" valueNumeric="0"/> + <column name="FIELD" value="TYPE"/> + <column name="FIELDTYPE" value="dropDown"/> + <column name="INDICATORTYPE" value="entityField"/> </insert> - <insert tableName="classificationtype"> - <column name="CLASSIFICATIONGROUP_ID" value="c1305d16-320e-44f8-95f9-e4cff05d3cfb"/> - <column name="OBJECT_TYPE" value="Salesproject"/> - <column name="SCORETYPE" value="ScoreDepartment"/> - <column name="CLASSIFICATIONTYPEID" value="31c169aa-ba5b-4f9d-9dd3-b0d0e8d1b632"/> - <column name="SCOREPOINTS" valueNumeric="10"/> - <column name="OUTDATED" valueNumeric="0"/> + <insert tableName="CLASSIFICATIONTYPE"> + <column name="CLASSIFICATIONTYPEID" value="9b9e51d8-c649-41f3-a1fb-660d768c8b5a"/> + <column name="OBJECT_TYPE" value="Organisation"/> + <column name="CLASSIFICATIONGROUP_ID" value="82be3659-917b-4a7e-bf31-33258af00a16"/> + <column name="OUTDATED" valueNumeric="1"/> + <column name="SCOREPOINTS" valueNumeric="30"/> + <column name="FIELD" value="eyJpZCI6ImRkMDI0ODgzLWM0OWUtNGQwOS04NWM4LTgyOWNmOWM5YzVlOSIsInR5cGUiOiJOVU1CRVIifQ=="/> + <column name="FIELDTYPE" value="number"/> + <column name="INDICATORTYPE" value="attribute"/> </insert> - <insert tableName="classificationtype"> - <column name="CLASSIFICATIONGROUP_ID" value="00cc7b8f-d99e-46bf-90c3-74e05b5af685"/> - <column name="OBJECT_TYPE" value="Salesproject"/> - <column name="SCORETYPE" value="ScoreUsers"/> - <column name="CLASSIFICATIONTYPEID" value="382b311e-b2b2-49da-b6e1-339afae92657"/> - <column name="SCOREPOINTS" valueNumeric="25"/> - <column name="OUTDATED" valueNumeric="0"/> + <insert tableName="CLASSIFICATIONTYPE"> + <column name="CLASSIFICATIONTYPEID" value="23c41492-5a65-4a7f-9283-457769f822c1"/> + <column name="OBJECT_TYPE" value="Organisation"/> + <column name="CLASSIFICATIONGROUP_ID" value="82be3659-917b-4a7e-bf31-33258af00a16"/> + <column name="OUTDATED" valueNumeric="1"/> + <column name="SCOREPOINTS" valueNumeric="40"/> + <column name="FIELD" value="eyJpZCI6IjdlOTkyN2E0LTQxZTQtNDI2Zi1iZGRkLWMzZTllZTNiMDkzZSIsInR5cGUiOiJDT01CTyJ9"/> + <column name="FIELDTYPE" value="dropDown"/> + <column name="INDICATORTYPE" value="attribute"/> + </insert> + <insert tableName="CLASSIFICATIONTYPE"> + <column name="CLASSIFICATIONTYPEID" value="6f179460-4b93-4bd4-b85d-5771dbad7289"/> + <column name="OBJECT_TYPE" value="Organisation"/> + <column name="CLASSIFICATIONGROUP_ID" value="4af7742e-e0dd-484b-a309-942fba546833"/> + <column name="OUTDATED" valueNumeric="1"/> + <column name="SCOREPOINTS" valueNumeric="40"/> + <column name="FIELD" value="eyJpZCI6ImU3M2VkOTI5LTg2MzEtNDZkZS1iMjhmLWViMTQyM2FiYjgwOCIsInR5cGUiOiJDT01CTyJ9"/> + <column name="FIELDTYPE" value="dropDown"/> + <column name="INDICATORTYPE" value="attribute"/> + </insert> + <insert tableName="CLASSIFICATIONTYPE"> + <column name="CLASSIFICATIONTYPEID" value="8a2c4cf5-c2b7-4588-9a33-3387d784a90b"/> + <column name="OBJECT_TYPE" value="Organisation"/> + <column name="CLASSIFICATIONGROUP_ID" value="4af7742e-e0dd-484b-a309-942fba546833"/> + <column name="OUTDATED" valueNumeric="1"/> + <column name="SCOREPOINTS" valueNumeric="30"/> + <column name="FIELD" value="eyJpZCI6ImYxMWY2NWQwLTQzNTItNGY4MS04NWQwLWJmZDAzNDI3NWUzNCIsInR5cGUiOiJDT01CTyJ9"/> + <column name="FIELDTYPE" value="dropDown"/> + <column name="INDICATORTYPE" value="attribute"/> </insert> - <insert tableName="classificationtype"> - <column name="CLASSIFICATIONGROUP_ID" value="00cc7b8f-d99e-46bf-90c3-74e05b5af685"/> - <column name="OBJECT_TYPE" value="Salesproject"/> - <column name="SCORETYPE" value="ScoreBranch"/> - <column name="CLASSIFICATIONTYPEID" value="4977ba88-074c-4fe5-b04a-97c9a5eae982"/> - <column name="SCOREPOINTS" valueNumeric="45"/> - <column name="OUTDATED" valueNumeric="0"/> + <insert tableName="CLASSIFICATIONTYPE"> + <column name="CLASSIFICATIONTYPEID" value="2743f5cd-8510-487f-933c-4cdbebc5e449"/> + <column name="OBJECT_TYPE" value="Organisation"/> + <column name="CLASSIFICATIONGROUP_ID" value="82be3659-917b-4a7e-bf31-33258af00a16"/> + <column name="OUTDATED" valueNumeric="1"/> + <column name="SCOREPOINTS" valueNumeric="30"/> + <column name="FIELD" value="eyJpZCI6ImM3ZDI4Mzc3LThjYjEtNGY5Mi1hOWFjLWVkMDgwNDFhNzgyYiIsInR5cGUiOiJDT01CTyJ9"/> + <column name="FIELDTYPE" value="dropDown"/> + <column name="INDICATORTYPE" value="attribute"/> </insert> - <insert tableName="classificationtype"> - <column name="CLASSIFICATIONGROUP_ID" value="e3b0a84f-d2a7-4d7c-b734-82ab4b262e84"/> + <insert tableName="CLASSIFICATIONTYPE"> + <column name="CLASSIFICATIONTYPEID" value="72f8e3d4-b8ce-41c3-a3ea-d5ebca62a7e0"/> <column name="OBJECT_TYPE" value="Organisation"/> - <column name="SCORETYPE" value="Number of employees"/> - <column name="CLASSIFICATIONTYPEID" value="4b72857e-863d-4254-accf-25281bb7bb64"/> - <column name="SCOREPOINTS" valueNumeric="25"/> - <column name="OUTDATED" valueNumeric="0"/> + <column name="CLASSIFICATIONGROUP_ID" value="4af7742e-e0dd-484b-a309-942fba546833"/> + <column name="OUTDATED" valueNumeric="1"/> + <column name="SCOREPOINTS" valueNumeric="30"/> + <column name="FIELD" value="eyJpZCI6IjY5MTQ1MmVjLTNiOWYtNDNkYy05MWEyLTY0NWE5N2I3NzViMiIsInR5cGUiOiJDT01CTyJ9"/> + <column name="FIELDTYPE" value="dropDown"/> + <column name="INDICATORTYPE" value="attribute"/> </insert> - <insert tableName="classificationtype"> - <column name="CLASSIFICATIONGROUP_ID" value="fb1349b6-6dc1-44b7-b7ea-03d5483e7fac"/> + <insert tableName="CLASSIFICATIONTYPE"> + <column name="CLASSIFICATIONTYPEID" value="2e2ff9bc-6acf-4870-925b-be8f13571ddb"/> <column name="OBJECT_TYPE" value="Organisation"/> - <column name="SCORETYPE" value="Loyalty"/> - <column name="CLASSIFICATIONTYPEID" value="4d878689-15c0-46cc-acc8-3c524463db5c"/> - <column name="SCOREPOINTS" valueNumeric="20"/> - <column name="OUTDATED" valueNumeric="0"/> + <column name="CLASSIFICATIONGROUP_ID" value="82be3659-917b-4a7e-bf31-33258af00a16"/> + <column name="OUTDATED" valueNumeric="1"/> + <column name="SCOREPOINTS" valueNumeric="50"/> + <column name="FIELD" value="STATUS"/> + <column name="FIELDTYPE" value="dropDown"/> + <column name="INDICATORTYPE" value="entityField"/> </insert> - <insert tableName="classificationtype"> - <column name="CLASSIFICATIONGROUP_ID" value="00cc7b8f-d99e-46bf-90c3-74e05b5af685"/> + <insert tableName="CLASSIFICATIONTYPE"> + <column name="CLASSIFICATIONTYPEID" value="9936a248-4eba-481c-9f1f-8607f89493bb"/> <column name="OBJECT_TYPE" value="Salesproject"/> - <column name="SCORETYPE" value="ScoreBased"/> - <column name="CLASSIFICATIONTYPEID" value="54128957-c80b-4b5a-ad1b-cfce665dfb10"/> - <column name="SCOREPOINTS" valueNumeric="15"/> - <column name="OUTDATED" valueNumeric="0"/> - </insert> - <insert tableName="classificationtype"> - <column name="CLASSIFICATIONGROUP_ID" value="c1305d16-320e-44f8-95f9-e4cff05d3cfb"/> + <column name="CLASSIFICATIONGROUP_ID" value="21af2b4d-34f7-4c03-8d4e-0a40bb17faf2"/> + <column name="OUTDATED" valueNumeric="1"/> + <column name="SCOREPOINTS" valueNumeric="40"/> + <column name="FIELD" value="VOLUME"/> + <column name="FIELDTYPE" value="number"/> + <column name="INDICATORTYPE" value="entityField"/> + </insert> + <insert tableName="CLASSIFICATIONTYPE"> + <column name="CLASSIFICATIONTYPEID" value="15aa2654-330a-4b4d-9cfb-aa0c49f8df67"/> <column name="OBJECT_TYPE" value="Salesproject"/> - <column name="SCORETYPE" value="ScoreDecisionPhase"/> - <column name="CLASSIFICATIONTYPEID" value="57604bc1-d99f-4d61-b28d-55218a72045b"/> + <column name="CLASSIFICATIONGROUP_ID" value="21af2b4d-34f7-4c03-8d4e-0a40bb17faf2"/> + <column name="OUTDATED" valueNumeric="1"/> <column name="SCOREPOINTS" valueNumeric="30"/> - <column name="OUTDATED" valueNumeric="0"/> - </insert> - <insert tableName="classificationtype"> - <column name="CLASSIFICATIONGROUP_ID" value="fb1349b6-6dc1-44b7-b7ea-03d5483e7fac"/> - <column name="OBJECT_TYPE" value="Organisation"/> - <column name="SCORETYPE" value="Creditworthiness"/> - <column name="CLASSIFICATIONTYPEID" value="80c6ec8b-eb54-4d25-a4f5-0adaf4cdc84e"/> - <column name="SCOREPOINTS" valueNumeric="15"/> - <column name="OUTDATED" valueNumeric="0"/> + <column name="FIELD" value="STATUS"/> + <column name="FIELDTYPE" value="dropDown"/> + <column name="INDICATORTYPE" value="entityField"/> </insert> - <insert tableName="classificationtype"> - <column name="CLASSIFICATIONGROUP_ID" value="c1305d16-320e-44f8-95f9-e4cff05d3cfb"/> + <insert tableName="CLASSIFICATIONTYPE"> + <column name="CLASSIFICATIONTYPEID" value="3402e131-581e-4165-aa2a-a7dba56a4164"/> <column name="OBJECT_TYPE" value="Salesproject"/> - <column name="SCORETYPE" value="ScoreCloud"/> - <column name="CLASSIFICATIONTYPEID" value="8c1e8f81-145f-4efe-936f-3f4147f4d59a"/> - <column name="SCOREPOINTS" valueNumeric="10"/> - <column name="OUTDATED" valueNumeric="0"/> - </insert> - <insert tableName="classificationtype"> - <column name="CLASSIFICATIONGROUP_ID" value="fb1349b6-6dc1-44b7-b7ea-03d5483e7fac"/> - <column name="OBJECT_TYPE" value="Organisation"/> - <column name="SCORETYPE" value="Business development"/> - <column name="CLASSIFICATIONTYPEID" value="95396ee7-f0e2-41b4-995e-bac5749709ec"/> + <column name="CLASSIFICATIONGROUP_ID" value="21af2b4d-34f7-4c03-8d4e-0a40bb17faf2"/> + <column name="OUTDATED" valueNumeric="1"/> <column name="SCOREPOINTS" valueNumeric="25"/> - <column name="OUTDATED" valueNumeric="0"/> + <column name="FIELD" value="PROBABILITY"/> + <column name="FIELDTYPE" value="number"/> + <column name="INDICATORTYPE" value="entityField"/> </insert> - <insert tableName="classificationtype"> - <column name="CLASSIFICATIONGROUP_ID" value="e3b0a84f-d2a7-4d7c-b734-82ab4b262e84"/> - <column name="OBJECT_TYPE" value="Organisation"/> - <column name="SCORETYPE" value="Product preference"/> - <column name="CLASSIFICATIONTYPEID" value="970b251c-ca6e-43f4-9162-ebc5d1142a8b"/> - <column name="SCOREPOINTS" valueNumeric="20"/> - <column name="OUTDATED" valueNumeric="0"/> - </insert> - <insert tableName="classificationtype"> - <column name="CLASSIFICATIONGROUP_ID" value="c1305d16-320e-44f8-95f9-e4cff05d3cfb"/> + <insert tableName="CLASSIFICATIONTYPE"> + <column name="CLASSIFICATIONTYPEID" value="2cc9700e-7a51-4a49-a42b-73e9289363b6"/> <column name="OBJECT_TYPE" value="Salesproject"/> - <column name="SCORETYPE" value="ScorePosition"/> - <column name="CLASSIFICATIONTYPEID" value="a43189fc-b712-45ed-9398-58d6e15760ca"/> - <column name="SCOREPOINTS" valueNumeric="20"/> - <column name="OUTDATED" valueNumeric="0"/> - </insert> - <insert tableName="classificationtype"> - <column name="CLASSIFICATIONGROUP_ID" value="fb1349b6-6dc1-44b7-b7ea-03d5483e7fac"/> - <column name="OBJECT_TYPE" value="Organisation"/> - <column name="SCORETYPE" value="Current supply share"/> - <column name="CLASSIFICATIONTYPEID" value="be76dab1-c6ab-4b1e-8322-8b052ccda4d9"/> - <column name="SCOREPOINTS" valueNumeric="20"/> - <column name="OUTDATED" valueNumeric="0"/> - </insert> - <insert tableName="classificationtype"> - <column name="CLASSIFICATIONGROUP_ID" value="e3b0a84f-d2a7-4d7c-b734-82ab4b262e84"/> - <column name="OBJECT_TYPE" value="Organisation"/> - <column name="SCORETYPE" value="Industry"/> - <column name="CLASSIFICATIONTYPEID" value="d67397c5-5e05-433b-b61d-12807906aa5a"/> - <column name="SCOREPOINTS" valueNumeric="20"/> - <column name="OUTDATED" valueNumeric="0"/> + <column name="CLASSIFICATIONGROUP_ID" value="ab733ab7-f9b3-4b8f-9674-19e4340cc31a"/> + <column name="OUTDATED" valueNumeric="1"/> + <column name="SCOREPOINTS" valueNumeric="30"/> + <column name="FIELD" value="forecastSum"/> + <column name="FIELDTYPE" value="number"/> + <column name="INDICATORTYPE" value="complex"/> </insert> - <insert tableName="classificationtype"> - <column name="CLASSIFICATIONGROUP_ID" value="b2126d9d-8d18-46d4-a48f-1a03fc456ddd"/> + <insert tableName="CLASSIFICATIONTYPE"> + <column name="CLASSIFICATIONTYPEID" value="fe91e86e-a0ec-4475-b006-f2b2fef8aabb"/> <column name="OBJECT_TYPE" value="Salesproject"/> - <column name="SCORETYPE" value="ScoreBudget"/> - <column name="CLASSIFICATIONTYPEID" value="d8091374-f3fd-41dc-8468-91469618c6fc"/> - <column name="SCOREPOINTS" valueNumeric="50"/> - <column name="OUTDATED" valueNumeric="0"/> - </insert> - <insert tableName="classificationtype"> - <column name="CLASSIFICATIONGROUP_ID" value="c1305d16-320e-44f8-95f9-e4cff05d3cfb"/> + <column name="CLASSIFICATIONGROUP_ID" value="ab733ab7-f9b3-4b8f-9674-19e4340cc31a"/> + <column name="OUTDATED" valueNumeric="1"/> + <column name="SCOREPOINTS" valueNumeric="40"/> + <column name="FIELD" value="eyJpZCI6ImZkMzk2M2JjLThlNjAtNDExYS05OTExLWI5N2ViNzNlNWNmNyIsInR5cGUiOiJDT01CTyJ9"/> + <column name="FIELDTYPE" value="dropDown"/> + <column name="INDICATORTYPE" value="attribute"/> + </insert> + <insert tableName="CLASSIFICATIONTYPE"> + <column name="CLASSIFICATIONTYPEID" value="38326d5f-ecab-4d96-919c-dbf2d3a15d9f"/> <column name="OBJECT_TYPE" value="Salesproject"/> - <column name="SCORETYPE" value="ScoreProjectStart"/> - <column name="CLASSIFICATIONTYPEID" value="f4d3791e-1717-4473-987b-0cd751805387"/> + <column name="CLASSIFICATIONGROUP_ID" value="ab733ab7-f9b3-4b8f-9674-19e4340cc31a"/> + <column name="OUTDATED" valueNumeric="1"/> <column name="SCOREPOINTS" valueNumeric="30"/> - <column name="OUTDATED" valueNumeric="0"/> + <column name="FIELD" value="salesprojectStart"/> + <column name="FIELDTYPE" value="date"/> + <column name="INDICATORTYPE" value="complex"/> </insert> - <insert tableName="classificationtype"> - <column name="CLASSIFICATIONGROUP_ID" value="fb1349b6-6dc1-44b7-b7ea-03d5483e7fac"/> - <column name="OBJECT_TYPE" value="Organisation"/> - <column name="SCORETYPE" value="Purchasing potential p. a."/> - <column name="CLASSIFICATIONTYPEID" value="f581dcb9-db6f-4a82-995c-695d0a7393d3"/> - <column name="SCOREPOINTS" valueNumeric="20"/> - <column name="OUTDATED" valueNumeric="0"/> - </insert> - <insert tableName="classificationtype"> - <column name="CLASSIFICATIONGROUP_ID" value="e3b0a84f-d2a7-4d7c-b734-82ab4b262e84"/> - <column name="OBJECT_TYPE" value="Organisation"/> - <column name="SCORETYPE" value="Focus"/> - <column name="CLASSIFICATIONTYPEID" value="df4aacdc-7e17-484c-a96e-a07550a7220e"/> - <column name="SCOREPOINTS" valueNumeric="20"/> - <column name="OUTDATED" valueNumeric="0"/> - <column name="FILTER" value='{"entity":"Organisation_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"TYPE","operator":"EQUAL","value":"Interessent","key":"ORGPROSPECT","contenttype":"TEXT"}]}}'/> - </insert> - <insert tableName="classificationtype"> - <column name="CLASSIFICATIONGROUP_ID" value="00cc7b8f-d99e-46bf-90c3-74e05b5af685"/> + <insert tableName="CLASSIFICATIONTYPE"> + <column name="CLASSIFICATIONTYPEID" value="3fd84231-20cb-4a85-8fe6-404f3015a134"/> <column name="OBJECT_TYPE" value="Salesproject"/> - <column name="SCORETYPE" value="Feasibility"/> - <column name="CLASSIFICATIONTYPEID" value="b28846e6-befe-4318-93d8-de54fcae369c"/> - <column name="SCOREPOINTS" valueNumeric="15"/> - <column name="OUTDATED" valueNumeric="0"/> + <column name="CLASSIFICATIONGROUP_ID" value="ab733ab7-f9b3-4b8f-9674-19e4340cc31a"/> + <column name="OUTDATED" valueNumeric="1"/> + <column name="SCOREPOINTS" valueNumeric="30"/> + <column name="FIELD" value="PHASE"/> + <column name="FIELDTYPE" value="dropDown"/> + <column name="INDICATORTYPE" value="entityField"/> </insert> </changeSet> </databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/commrestriction.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/commrestriction.xml deleted file mode 100644 index 4bfd0d305d99ad749ed5dd75d8295144480a580e..0000000000000000000000000000000000000000 --- a/.liquibase/Data_alias/basic/_demoData/generatedData/commrestriction.xml +++ /dev/null @@ -1,13 +0,0 @@ -<?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="autogenerated" id="c663330c-e55f-4804-a18b-64c6693e5e12"> - <delete tableName="commrestriction"/> - <insert tableName="commrestriction"> - <column name="COMMRESTRICTIONID" value="a07a7061-245f-4674-8482-282f5e5d2a5b"/> - <column name="MEDIUM" value="CAMPAIGNPHONE"/> - <column name="EMPLOYEE_INVOLVED" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/> - <column name="CONTACT_ID" value="c7ddf982-0e58-4152-b82b-8f5673b0b729"/> - <column name="STARTDATE" valueDate="2019-11-25T02:47:33"/> - </insert> - </changeSet> -</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/forecast.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/forecast.xml index a47c729277f37e18dbd1ec1201c8872fea52d279..15d1278c9e33f6d4e52ebaa94565be0cbc7ebe75 100644 --- a/.liquibase/Data_alias/basic/_demoData/generatedData/forecast.xml +++ b/.liquibase/Data_alias/basic/_demoData/generatedData/forecast.xml @@ -5,83 +5,92 @@ <insert tableName="forecast"> <column name="VOLUME" valueNumeric="25000"/> <column name="FORECASTID" value="2d5c65fe-708b-4e54-96cf-d2fcdc98001f"/> - <column name="DATE_START" valueDate="2020-10-29T12:00:00"/> + <column name="DATE_START" valueDate="2020-10-29T00:00:00"/> <column name="OBJECT_TYPE" value="Salesproject"/> <column name="GROUPCODE" value="PRODUCTGROUP3"/> <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/> <column name="INFO" value="fc"/> + <column name="KIND" value="FORECAST"/> </insert> <insert tableName="forecast"> <column name="VOLUME" valueNumeric="80000"/> <column name="FORECASTID" value="37016eaa-ce14-45cd-8977-930cf6a20bb1"/> - <column name="DATE_START" valueDate="2020-12-30T12:00:00"/> + <column name="DATE_START" valueDate="2020-12-30T00:00:00"/> <column name="OBJECT_TYPE" value="Salesproject"/> <column name="GROUPCODE" value="PRODUCTGROUP3"/> <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/> <column name="INFO" value="fc"/> + <column name="KIND" value="FORECAST"/> </insert> <insert tableName="forecast"> <column name="VOLUME" valueNumeric="100000"/> <column name="FORECASTID" value="44bc5ce9-2456-4e04-8ff1-f35f2a71798f"/> - <column name="DATE_START" valueDate="2020-05-23T12:00:00"/> + <column name="DATE_START" valueDate="2020-05-23T00:00:00"/> <column name="OBJECT_TYPE" value="Salesproject"/> <column name="GROUPCODE" value="PRODUCTSERVICE"/> <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/> <column name="INFO" value="fc"/> + <column name="KIND" value="FORECAST"/> </insert> <insert tableName="forecast"> <column name="VOLUME" valueNumeric="25000"/> <column name="FORECASTID" value="4cc2db79-5263-4ee7-a651-00e7ecb6cc33"/> - <column name="DATE_START" valueDate="2020-10-22T12:00:00"/> + <column name="DATE_START" valueDate="2020-10-22T00:00:00"/> <column name="OBJECT_TYPE" value="Salesproject"/> <column name="GROUPCODE" value="PRODUCTGROUP3"/> <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/> <column name="INFO" value="fc"/> + <column name="KIND" value="FORECAST"/> </insert> <insert tableName="forecast"> <column name="VOLUME" valueNumeric="150000"/> <column name="FORECASTID" value="655bf6c0-713a-4738-a649-b1f6e212bd92"/> - <column name="DATE_START" valueDate="2021-01-28T12:00:00"/> + <column name="DATE_START" valueDate="2021-01-28T00:00:00"/> <column name="OBJECT_TYPE" value="Salesproject"/> <column name="GROUPCODE" value="PRODUCTGROUP3"/> <column name="OBJECT_ROWID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/> <column name="INFO" value="fc"/> + <column name="KIND" value="FORECAST"/> </insert> <insert tableName="forecast"> <column name="VOLUME" valueNumeric="100000"/> <column name="FORECASTID" value="74d72ac5-11ba-414f-a8b4-d31481e90e7f"/> - <column name="DATE_START" valueDate="2020-10-29T12:00:00"/> + <column name="DATE_START" valueDate="2020-10-29T00:00:00"/> <column name="OBJECT_TYPE" value="Salesproject"/> <column name="GROUPCODE" value="PRODUCTGROUP3"/> <column name="OBJECT_ROWID" value="ef7f4726-4476-4f59-97c2-706dc1e0046f"/> <column name="INFO" value="W3 "/> + <column name="KIND" value="FORECAST"/> </insert> <insert tableName="forecast"> <column name="VOLUME" valueNumeric="100000"/> <column name="FORECASTID" value="82dccf63-165f-4345-87a6-e3535ae58349"/> - <column name="DATE_START" valueDate="2020-05-22T12:00:00"/> + <column name="DATE_START" valueDate="2020-05-22T00:00:00"/> <column name="OBJECT_TYPE" value="Salesproject"/> <column name="GROUPCODE" value="PRODUCTGROUP1"/> <column name="OBJECT_ROWID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/> <column name="INFO" value="FC"/> + <column name="KIND" value="FORECAST"/> </insert> <insert tableName="forecast"> <column name="VOLUME" valueNumeric="75000"/> <column name="FORECASTID" value="9b3c76ad-5fac-4c26-af9b-3b05f097763f"/> - <column name="DATE_START" valueDate="2020-11-18T12:00:00"/> + <column name="DATE_START" valueDate="2020-11-18T00:00:00"/> <column name="OBJECT_TYPE" value="Salesproject"/> <column name="GROUPCODE" value="PRODUCTGROUP3"/> <column name="OBJECT_ROWID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/> <column name="INFO" value="fc"/> + <column name="KIND" value="FORECAST"/> </insert> <insert tableName="forecast"> <column name="VOLUME" valueNumeric="25000"/> <column name="FORECASTID" value="f87ad5ed-943e-4008-a3fa-291699e3df28"/> - <column name="DATE_START" valueDate="2020-11-19T12:00:00"/> + <column name="DATE_START" valueDate="2020-11-19T00:00:00"/> <column name="OBJECT_TYPE" value="Salesproject"/> <column name="GROUPCODE" value="PRODUCTGROUP3"/> <column name="OBJECT_ROWID" value="7e2680f6-a438-45aa-956a-787363f85923"/> <column name="INFO" value="fc"/> + <column name="KIND" value="FORECAST"/> </insert> </changeSet> </databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/interest.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/interest.xml new file mode 100644 index 0000000000000000000000000000000000000000..3294e38ae5f1858f19284780b55ee8046d6f5d98 --- /dev/null +++ b/.liquibase/Data_alias/basic/_demoData/generatedData/interest.xml @@ -0,0 +1,26 @@ +<?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-4.1.xsd"> + <changeSet author="m.groppe" id="0764fb10-a239-4698-9aeb-6cf82cf2c4cc"> + <insert tableName="interest"> + <column name="INTERESTID" value="2ad0e569-b9eb-4261-9cc7-4ed59e43a7ac"/> + <column name="TITLE" value="Events & Webinare"/> + <column name="DESCRIPTION"/> + <column name="STATUS" value="INTEREST_ACTIVE"/> + <column name="IS_DEFAULT" valueNumeric="0"/> + </insert> + <insert tableName="interest"> + <column name="INTERESTID" value="38c97136-9ea0-48f2-99e5-2bff9c2473c3"/> + <column name="TITLE" value="Produktinformationen"/> + <column name="DESCRIPTION"/> + <column name="STATUS" value="INTEREST_ACTIVE"/> + <column name="IS_DEFAULT" valueNumeric="0"/> + </insert> + <insert tableName="interest"> + <column name="INTERESTID" value="6dd7cee1-5103-4086-8291-c29176c7b082"/> + <column name="TITLE" value="Newsletter"/> + <column name="DESCRIPTION"/> + <column name="STATUS" value="INTEREST_ACTIVE"/> + <column name="IS_DEFAULT" valueNumeric="1"/> + </insert> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/offeritem.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/offeritem.xml index 06d2014637a63a334113a341736f58795fda6614..f6cf3772de686a30a4a1667aaaeb158fc5b7a761 100644 --- a/.liquibase/Data_alias/basic/_demoData/generatedData/offeritem.xml +++ b/.liquibase/Data_alias/basic/_demoData/generatedData/offeritem.xml @@ -189,19 +189,6 @@ <column name="UNIT" value="QUANTITYPIECES"/> <column name="PRODUCT_ID" value="f52b1d6e-bf08-4fe1-8d83-ac0728c4b1c4"/> </insert> - <insert tableName="offeritem"> - <column name="QUANTITY" valueNumeric="3.00"/> - <column name="GROUPCODEID" value="PRODUCTDISCOUNT "/> - <column name="ITEMNAME" value="Sonderrabatt"/> - <column name="OFFERITEMID" value="564b5ba4-05ef-4702-b6d8-35417b94abae"/> - <column name="OPTIONAL" valueNumeric="0"/> - <column name="ITEMSORT" valueNumeric="4"/> - <column name="OFFER_ID" value="0461959c-88c5-4d79-9ac2-f41f26254dbe"/> - <column name="ASSIGNEDTO" value="44b75a12-ae8b-4003-9347-9952843425a9"/> - <column name="ITEMPOSITION" value="1.1.1.1"/> - <column name="UNIT" value="QUANTITYPIECES"/> - <column name="PRODUCT_ID" value="368aa1c0-b802-4dea-844e-e61bf85a03c9"/> - </insert> <insert tableName="offeritem"> <column name="QUANTITY" valueNumeric="1000.00"/> <column name="GROUPCODEID" value="PRODUCTGROUP3 "/> @@ -275,6 +262,7 @@ <column name="ITEMSORT" valueNumeric="1"/> <column name="OFFER_ID" value="2948a9b8-5e81-491f-b741-9b35622f09da"/> <column name="ITEMPOSITION" value="1"/> + <column name="UNIT" value="QUANTITYPIECES"/> <column name="PRICE" valueNumeric="145000.00"/> <column name="PRODUCT_ID" value="993f6294-f1fc-42d2-8786-1c13274fd133"/> </insert> @@ -403,19 +391,6 @@ <column name="PRICE" valueNumeric="210.00"/> <column name="PRODUCT_ID" value="a2e76fe1-e49b-4f2b-8da5-12660738043d"/> </insert> - <insert tableName="offeritem"> - <column name="QUANTITY" valueNumeric="3.00"/> - <column name="GROUPCODEID" value="PRODUCTDISCOUNT "/> - <column name="ITEMNAME" value="Sonderrabatt"/> - <column name="OFFERITEMID" value="bd35c94b-5ad8-43eb-a131-501e3577d9c9"/> - <column name="OPTIONAL" valueNumeric="1"/> - <column name="ITEMSORT" valueNumeric="4"/> - <column name="OFFER_ID" value="a9b597f0-a353-48f3-b5eb-f47d2968ebaa"/> - <column name="ASSIGNEDTO" value="6c60f55e-27d3-44a5-a324-d184a067237a"/> - <column name="ITEMPOSITION" value="1.1.1.1"/> - <column name="UNIT" value="QUANTITYPIECES"/> - <column name="PRODUCT_ID" value="368aa1c0-b802-4dea-844e-e61bf85a03c9"/> - </insert> <insert tableName="offeritem"> <column name="QUANTITY" valueNumeric="1.00"/> <column name="GROUPCODEID" value="PRODUCTGROUP1 "/> diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/prod2prod.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/prod2prod.xml new file mode 100644 index 0000000000000000000000000000000000000000..f8374b87cfa024260e81b37c5cedd1a2b0df4f74 --- /dev/null +++ b/.liquibase/Data_alias/basic/_demoData/generatedData/prod2prod.xml @@ -0,0 +1,70 @@ +<?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="autogenerated" id="ef18ec60-88c1-4ff5-9553-2e17da33b6aa"> + <delete tableName="PROD2PROD"/> + <insert tableName="PROD2PROD"> + <column name="PROD2PRODID" value="1fb7dfed-a491-467c-bc1e-2a78fb4902e6"/> + <column name="OPTIONAL" valueNumeric="0"/> + <column name="TAKEPRICE" valueNumeric="1"/> + <column name="QUANTITY" valueNumeric="2.00"/> + <column name="SOURCE_ID" value="4775aed7-e165-495b-a147-7e3312b27d0b"/> + <column name="DEST_ID" value="acd4cbde-f55d-444b-b294-1c6fe8588000"/> + </insert> + <insert tableName="PROD2PROD"> + <column name="PROD2PRODID" value="2132635f-a409-489d-a805-348f4f350de2"/> + <column name="OPTIONAL" valueNumeric="0"/> + <column name="TAKEPRICE" valueNumeric="1"/> + <column name="QUANTITY" valueNumeric="1.00"/> + <column name="SOURCE_ID" value="c9f744bc-7903-4ec0-96f9-1df010ce1f37"/> + <column name="DEST_ID" value="59851fb8-e743-46bb-8df9-bc2789fd5b37"/> + </insert> + <insert tableName="PROD2PROD"> + <column name="PROD2PRODID" value="72b5cc22-7e17-44bc-aabd-0db73f6f4056"/> + <column name="OPTIONAL" valueNumeric="0"/> + <column name="TAKEPRICE" valueNumeric="1"/> + <column name="QUANTITY" valueNumeric="2.00"/> + <column name="SOURCE_ID" value="e073ddc7-e3b8-4430-9e4f-12065106a624"/> + <column name="DEST_ID" value="4203b3f3-e8d9-483e-a9f8-274a40f92074"/> + </insert> + <insert tableName="PROD2PROD"> + <column name="PROD2PRODID" value="732577f8-8119-40a3-8b1e-77290dc9d8f7"/> + <column name="OPTIONAL" valueNumeric="0"/> + <column name="TAKEPRICE" valueNumeric="1"/> + <column name="QUANTITY" valueNumeric="2.00"/> + <column name="SOURCE_ID" value="993f6294-f1fc-42d2-8786-1c13274fd133"/> + <column name="DEST_ID" value="59851fb8-e743-46bb-8df9-bc2789fd5b37"/> + </insert> + <insert tableName="PROD2PROD"> + <column name="PROD2PRODID" value="a2c66ce9-526d-4352-869b-2e72549961f3"/> + <column name="OPTIONAL" valueNumeric="0"/> + <column name="TAKEPRICE" valueNumeric="1"/> + <column name="QUANTITY" valueNumeric="1.00"/> + <column name="SOURCE_ID" value="c9f744bc-7903-4ec0-96f9-1df010ce1f37"/> + <column name="DEST_ID" value="4203b3f3-e8d9-483e-a9f8-274a40f92074"/> + </insert> + <insert tableName="PROD2PROD"> + <column name="PROD2PRODID" value="ad73422c-9948-40af-9e2b-fd1d94d0abc1"/> + <column name="OPTIONAL" valueNumeric="0"/> + <column name="TAKEPRICE" valueNumeric="1"/> + <column name="QUANTITY" valueNumeric="1.00"/> + <column name="SOURCE_ID" value="4004db3e-a63e-4b32-b7da-8c899996ddcd"/> + <column name="DEST_ID" value="acd4cbde-f55d-444b-b294-1c6fe8588000"/> + </insert> + <insert tableName="PROD2PROD"> + <column name="PROD2PRODID" value="c5ee9f21-d780-4207-8417-0b0ba944c795"/> + <column name="OPTIONAL" valueNumeric="1"/> + <column name="TAKEPRICE" valueNumeric="0"/> + <column name="QUANTITY" valueNumeric="2.00"/> + <column name="SOURCE_ID" value="e073ddc7-e3b8-4430-9e4f-12065106a624"/> + <column name="DEST_ID" value="59851fb8-e743-46bb-8df9-bc2789fd5b37"/> + </insert> + <insert tableName="PROD2PROD"> + <column name="PROD2PRODID" value="e230bac0-ecb4-4664-978e-97d50a44edc5"/> + <column name="OPTIONAL" valueNumeric="0"/> + <column name="TAKEPRICE" valueNumeric="1"/> + <column name="QUANTITY" valueNumeric="1.00"/> + <column name="SOURCE_ID" value="4a234269-faab-474e-82e8-662e7600e1ea"/> + <column name="DEST_ID" value="4203b3f3-e8d9-483e-a9f8-274a40f92074"/> + </insert> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/product.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/product.xml index 2de3cd44d1b4f7b35a6543f1f4dfc7c4667019d0..787353e873378dd852c62302b3437237c1755fa7 100644 --- a/.liquibase/Data_alias/basic/_demoData/generatedData/product.xml +++ b/.liquibase/Data_alias/basic/_demoData/generatedData/product.xml @@ -1,230 +1,373 @@ <?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="autogenerated" id="ecc3f53c-f7a8-464e-a85a-327745dd8ec4"> - <delete tableName="product"/> - <insert tableName="product"> - <column name="PRODUCTCODE" value="ET1009"/> - <column name="PRODUCTID" value="072680e3-9e5d-4228-b5a8-f4acef8f2452"/> - <column name="GROUPCODEID" value="PRODUCTSPARE"/> - <column name="MINSTOCK" valueNumeric="50"/> - <column name="ADVERTISING" value="N"/> - <column name="USER_EDIT" value="Admin"/> - <column name="USER_NEW" value="Admin"/> - <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/> - <column name="UNIT" value="QUANTITYPIECES"/> - <column name="DATE_EDIT" valueDate="2019-05-22T11:14:32"/> - <column name="PRODUCTNAME" value="Ersatzteil 4"/> - <column name="STATUS" valueNumeric="1"/> - </insert> - <insert tableName="product"> - <column name="PRODUCTCODE" value="WG1005"/> + <changeSet author="autogenerated" id="7e92d0d8-0259-4709-936c-ce49e68b154a"> + <delete tableName="PRODUCT"/> + <insert tableName="PRODUCT"> <column name="PRODUCTID" value="155ac430-ccfc-4814-95fc-189631779064"/> - <column name="GROUPCODEID" value="PRODUCTGROUP1"/> <column name="ADVERTISING" value="N"/> - <column name="USER_EDIT" value="Admin"/> - <column name="USER_NEW" value="Admin"/> - <column name="DATE_NEW" valueDate="2019-05-17T07:32:19"/> - <column name="UNIT" value="QUANTITYPIECES"/> - <column name="DATE_EDIT" valueDate="2019-05-21T09:00:55"/> + <column name="PRODUCTCODE" value="WG1005"/> <column name="PRODUCTNAME" value="WG1 Standardprodukt 3"/> <column name="STATUS" valueNumeric="1"/> + <column name="UNIT" value="QUANTITYPIECES"/> + <column name="USER_NEW" value="Admin"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_NEW" valueDate="2019-05-17T09:32:19"/> + <column name="DATE_EDIT" valueDate="2019-05-21T11:00:55"/> + <column name="GROUPCODEID" value="PRODUCTGROUP1"/> </insert> - <insert tableName="product"> - <column name="PRODUCTCODE" value="DL1001"/> + <insert tableName="PRODUCT"> <column name="PRODUCTID" value="239a4c58-5ae6-4aaa-aba3-7e40bf348ce2"/> - <column name="GROUPCODEID" value="PRODUCTSERVICE"/> <column name="ADVERTISING" value="N"/> - <column name="USER_NEW" value="Admin"/> - <column name="DATE_NEW" valueDate="2019-05-17T07:30:01"/> - <column name="UNIT" value="QUANTITYHOUR"/> + <column name="PRODUCTCODE" value="DL1001"/> <column name="PRODUCTNAME" value="Service Einsatz"/> <column name="STATUS" valueNumeric="1"/> + <column name="UNIT" value="QUANTITYHOUR"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2019-05-17T09:30:01"/> + <column name="GROUPCODEID" value="PRODUCTSERVICE"/> </insert> - <insert tableName="product"> - <column name="PRODUCTCODE" value="WG2004"/> + <insert tableName="PRODUCT"> <column name="PRODUCTID" value="3d0086d3-f7fa-4328-bfc9-75cf37eb422c"/> - <column name="GROUPCODEID" value="PRODUCTGROUP2"/> <column name="ADVERTISING" value="N"/> + <column name="PRODUCTCODE" value="WG2004"/> + <column name="PRODUCTNAME" value="WG2 Produkt 3"/> + <column name="STATUS" valueNumeric="1"/> + <column name="UNIT" value="QUANTITYPIECES"/> + <column name="USER_NEW" value="Admin"/> <column name="USER_EDIT" value="Admin"/> + <column name="DATE_NEW" valueDate="2019-05-16T03:53:18"/> + <column name="DATE_EDIT" valueDate="2021-04-09T11:20:03"/> + <column name="GROUPCODEID" value="PRODUCTGROUP2"/> + </insert> + <insert tableName="PRODUCT"> + <column name="PRODUCTID" value="4004db3e-a63e-4b32-b7da-8c899996ddcd"/> + <column name="ADVERTISING" value="N"/> + <column name="PRODUCTCODE" value="WG3001-C"/> + <column name="PRODUCTNAME" value="WG3 Produkt A - Comfort"/> + <column name="STATUS" valueNumeric="1"/> + <column name="UNIT" value="QUANTITYPIECES"/> <column name="USER_NEW" value="Admin"/> - <column name="DATE_NEW" valueDate="2019-05-16T01:53:18"/> + <column name="DATE_NEW" valueDate="2021-04-09T11:41:02"/> + <column name="GROUPCODEID" value="PRODUCTGROUP3"/> + </insert> + <insert tableName="PRODUCT"> + <column name="PRODUCTID" value="4203b3f3-e8d9-483e-a9f8-274a40f92074"/> + <column name="ADVERTISING" value="N"/> + <column name="PRODUCTCODE" value="WG3006-SL"/> + <column name="PRODUCTNAME" value="WG3 Produkt SL3"/> + <column name="STATUS" valueNumeric="1"/> <column name="UNIT" value="QUANTITYPIECES"/> - <column name="DATE_EDIT" valueDate="2019-05-21T09:00:55"/> - <column name="PRODUCTNAME" value="WG2 Proudkt 3"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2021-04-09T11:50:34"/> + <column name="GROUPCODEID" value="PRODUCTGROUP3"/> + </insert> + <insert tableName="PRODUCT"> + <column name="PRODUCTID" value="4775aed7-e165-495b-a147-7e3312b27d0b"/> + <column name="ADVERTISING" value="N"/> + <column name="PRODUCTCODE" value="WG3002-C"/> + <column name="PRODUCTNAME" value="WG3 Produkt B - Comfort"/> <column name="STATUS" valueNumeric="1"/> + <column name="UNIT" value="QUANTITYPIECES"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2021-04-09T11:43:06"/> + <column name="GROUPCODEID" value="PRODUCTGROUP3"/> </insert> - <insert tableName="product"> - <column name="PRODUCTCODE" value="WG2002"/> - <column name="PRODUCTID" value="535cec1a-e81c-4833-aad6-1d2348dbc0fb"/> - <column name="GROUPCODEID" value="PRODUCTGROUP2"/> + <insert tableName="PRODUCT"> + <column name="PRODUCTID" value="488e25b2-0210-41bd-bfe6-4312a9e68a20"/> <column name="ADVERTISING" value="N"/> - <column name="USER_EDIT" value="Admin"/> + <column name="PRODUCTCODE" value="WG1007"/> + <column name="PRODUCTNAME" value="WG1 Standardprodukt 4"/> + <column name="STATUS" valueNumeric="1"/> + <column name="UNIT" value="QUANTITYPIECES"/> <column name="USER_NEW" value="Admin"/> - <column name="DATE_NEW" valueDate="2019-05-16T01:48:31"/> + <column name="DATE_NEW" valueDate="2021-04-09T11:11:18"/> + <column name="GROUPCODEID" value="PRODUCTGROUP1"/> + </insert> + <insert tableName="PRODUCT"> + <column name="PRODUCTID" value="4a234269-faab-474e-82e8-662e7600e1ea"/> + <column name="ADVERTISING" value="N"/> + <column name="PRODUCTCODE" value="WG3003-C"/> + <column name="PRODUCTNAME" value="WG3 Produkt C - Comfort"/> + <column name="STATUS" valueNumeric="1"/> <column name="UNIT" value="QUANTITYPIECES"/> - <column name="DATE_EDIT" valueDate="2019-05-21T09:00:55"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2021-04-09T11:44:15"/> + <column name="GROUPCODEID" value="PRODUCTGROUP3"/> + </insert> + <insert tableName="PRODUCT"> + <column name="PRODUCTID" value="535cec1a-e81c-4833-aad6-1d2348dbc0fb"/> + <column name="ADVERTISING" value="N"/> + <column name="PRODUCTCODE" value="WG2002"/> <column name="PRODUCTNAME" value="WG2 Produkt 1"/> <column name="STATUS" valueNumeric="1"/> + <column name="UNIT" value="QUANTITYPIECES"/> + <column name="USER_NEW" value="Admin"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_NEW" valueDate="2019-05-16T03:48:31"/> + <column name="DATE_EDIT" valueDate="2019-05-21T11:00:55"/> + <column name="GROUPCODEID" value="PRODUCTGROUP2"/> </insert> - <insert tableName="product"> - <column name="PRODUCTCODE" value="ET1004"/> - <column name="PRODUCTID" value="6e52e636-284d-454b-978c-8f58844c5c5b"/> - <column name="GROUPCODEID" value="PRODUCTSPARE"/> - <column name="MINSTOCK" valueNumeric="15"/> + <insert tableName="PRODUCT"> + <column name="PRODUCTID" value="59851fb8-e743-46bb-8df9-bc2789fd5b37"/> <column name="ADVERTISING" value="N"/> - <column name="USER_EDIT" value="Admin"/> + <column name="PRODUCTCODE" value="WG3004-SL"/> + <column name="PRODUCTNAME" value="WG3 Produkt SL1"/> + <column name="STATUS" valueNumeric="1"/> + <column name="UNIT" value="QUANTITYPIECES"/> <column name="USER_NEW" value="Admin"/> - <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/> + <column name="DATE_NEW" valueDate="2021-04-09T11:44:53"/> + <column name="GROUPCODEID" value="PRODUCTGROUP3"/> + </insert> + <insert tableName="PRODUCT"> + <column name="PRODUCTID" value="6d1321d0-7777-4b6e-8a01-08b77ea3c5bf"/> + <column name="ADVERTISING" value="N"/> + <column name="PRODUCTCODE" value="WG2009"/> + <column name="PRODUCTNAME" value="WG2 Produkt 8"/> + <column name="STATUS" valueNumeric="1"/> <column name="UNIT" value="QUANTITYPIECES"/> - <column name="DATE_EDIT" valueDate="2019-05-22T11:14:05"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2021-04-09T11:37:43"/> + <column name="GROUPCODEID" value="PRODUCTGROUP2"/> + </insert> + <insert tableName="PRODUCT"> + <column name="PRODUCTID" value="6e52e636-284d-454b-978c-8f58844c5c5b"/> + <column name="ADVERTISING" value="N"/> + <column name="MINSTOCK" valueNumeric="15"/> + <column name="MINSTOCK" valueNumeric="15"/> + <column name="PRODUCTCODE" value="ET1004"/> <column name="PRODUCTNAME" value="Ersatzteil 3"/> <column name="STATUS" valueNumeric="1"/> + <column name="UNIT" value="QUANTITYPIECES"/> + <column name="USER_NEW" value="Admin"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_NEW" valueDate="2019-05-13T03:16:36"/> + <column name="DATE_EDIT" valueDate="2019-05-22T01:14:05"/> + <column name="GROUPCODEID" value="PRODUCTSPARE"/> </insert> - <insert tableName="product"> - <column name="PRODUCTCODE" value="WG2005"/> + <insert tableName="PRODUCT"> <column name="PRODUCTID" value="805cd37f-d6c7-424b-99b0-b3de9ec89f7b"/> - <column name="GROUPCODEID" value="PRODUCTGROUP2"/> <column name="ADVERTISING" value="N"/> - <column name="USER_EDIT" value="Admin"/> - <column name="USER_NEW" value="Admin"/> - <column name="DATE_NEW" valueDate="2019-05-17T07:23:33"/> - <column name="UNIT" value="QUANTITYPIECES"/> - <column name="DATE_EDIT" valueDate="2019-05-21T09:00:55"/> + <column name="PRODUCTCODE" value="WG2005"/> <column name="PRODUCTNAME" value="WG2 Produkt 4"/> <column name="STATUS" valueNumeric="1"/> + <column name="UNIT" value="QUANTITYPIECES"/> + <column name="USER_NEW" value="Admin"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_NEW" valueDate="2019-05-17T09:23:33"/> + <column name="DATE_EDIT" valueDate="2019-05-21T11:00:55"/> + <column name="GROUPCODEID" value="PRODUCTGROUP2"/> </insert> - <insert tableName="product"> - <column name="PRODUCTCODE" value="WG2003"/> + <insert tableName="PRODUCT"> <column name="PRODUCTID" value="80b77bce-5299-4c1d-bf41-5eca0add2f50"/> - <column name="GROUPCODEID" value="PRODUCTGROUP2"/> <column name="ADVERTISING" value="N"/> - <column name="USER_EDIT" value="Admin"/> - <column name="USER_NEW" value="Admin"/> - <column name="DATE_NEW" valueDate="2019-05-16T01:49:51"/> - <column name="UNIT" value="QUANTITYPIECES"/> - <column name="DATE_EDIT" valueDate="2019-05-21T09:00:55"/> + <column name="PRODUCTCODE" value="WG2003"/> <column name="PRODUCTNAME" value="WG2 Produkt 2"/> <column name="STATUS" valueNumeric="1"/> + <column name="UNIT" value="QUANTITYPIECES"/> + <column name="USER_NEW" value="Admin"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_NEW" valueDate="2019-05-16T03:49:51"/> + <column name="DATE_EDIT" valueDate="2019-05-21T11:00:55"/> + <column name="GROUPCODEID" value="PRODUCTGROUP2"/> </insert> - <insert tableName="product"> - <column name="PRODUCTCODE" value="WG2006"/> + <insert tableName="PRODUCT"> <column name="PRODUCTID" value="895f8caf-8c91-4ba8-9619-44ea6366cbbb"/> - <column name="GROUPCODEID" value="PRODUCTGROUP2"/> <column name="ADVERTISING" value="N"/> - <column name="USER_EDIT" value="Admin"/> - <column name="USER_NEW" value="Admin"/> - <column name="DATE_NEW" valueDate="2019-05-17T07:25:18"/> - <column name="UNIT" value="QUANTITYPIECES"/> - <column name="DATE_EDIT" valueDate="2019-05-21T09:00:55"/> + <column name="PRODUCTCODE" value="WG2006"/> <column name="PRODUCTNAME" value="WG2 Produkt 5"/> <column name="STATUS" valueNumeric="1"/> + <column name="UNIT" value="QUANTITYPIECES"/> + <column name="USER_NEW" value="Admin"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_NEW" valueDate="2019-05-17T09:25:18"/> + <column name="DATE_EDIT" valueDate="2019-05-21T11:00:55"/> + <column name="GROUPCODEID" value="PRODUCTGROUP2"/> </insert> - <insert tableName="product"> - <column name="PRODUCTCODE" value="WG0001"/> + <insert tableName="PRODUCT"> <column name="PRODUCTID" value="8cdbd2d8-70e2-4899-9ac6-3f0c3e28cab1"/> - <column name="GROUPCODEID" value="PRODUCTGROUP1"/> - <column name="MINSTOCK" valueNumeric="10"/> <column name="ADVERTISING" value="N"/> - <column name="USER_EDIT" value="Admin"/> - <column name="USER_NEW" value="Admin"/> - <column name="DATE_NEW" valueDate="2019-05-16T01:43:25"/> - <column name="UNIT" value="QUANTITYKGS"/> - <column name="DATE_EDIT" valueDate="2019-05-21T09:00:55"/> + <column name="MINSTOCK" valueNumeric="10"/> + <column name="MINSTOCK" valueNumeric="10"/> + <column name="PRODUCTCODE" value="WG0001"/> <column name="PRODUCTNAME" value="WG1 Standardprodukt 1"/> <column name="STATUS" valueNumeric="1"/> + <column name="UNIT" value="QUANTITYKGS"/> + <column name="USER_NEW" value="Admin"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_NEW" valueDate="2019-05-16T03:43:25"/> + <column name="DATE_EDIT" valueDate="2019-05-21T11:00:55"/> + <column name="GROUPCODEID" value="PRODUCTGROUP1"/> </insert> - <insert tableName="product"> - <column name="PRODUCTCODE" value="WG3003"/> + <insert tableName="PRODUCT"> <column name="PRODUCTID" value="993f6294-f1fc-42d2-8786-1c13274fd133"/> - <column name="GROUPCODEID" value="PRODUCTGROUP3"/> <column name="ADVERTISING" value="N"/> - <column name="USER_EDIT" value="Admin"/> + <column name="PRODUCTCODE" value="WG3003-S"/> + <column name="PRODUCTNAME" value="WG3 Produkt C - Standard"/> + <column name="STATUS" valueNumeric="1"/> + <column name="UNIT" value="QUANTITYPIECES"/> <column name="USER_NEW" value="Admin"/> - <column name="DATE_NEW" valueDate="2019-05-17T07:45:10"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_NEW" valueDate="2019-05-17T09:45:10"/> + <column name="DATE_EDIT" valueDate="2021-04-09T11:40:48"/> + <column name="GROUPCODEID" value="PRODUCTGROUP3"/> + </insert> + <insert tableName="PRODUCT"> + <column name="PRODUCTID" value="9eb8b4de-5eda-4b5c-a934-acd30a840cba"/> + <column name="ADVERTISING" value="N"/> + <column name="PRODUCTCODE" value="WG2007"/> + <column name="PRODUCTNAME" value="WG2 Produkt 6"/> + <column name="STATUS" valueNumeric="1"/> <column name="UNIT" value="QUANTITYPIECES"/> - <column name="DATE_EDIT" valueDate="2019-06-11T11:14:35"/> - <column name="PRODUCTNAME" value="WG3 Produkt C"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2021-04-09T11:28:11"/> + <column name="GROUPCODEID" value="PRODUCTGROUP2"/> + </insert> + <insert tableName="PRODUCT"> + <column name="PRODUCTID" value="acd4cbde-f55d-444b-b294-1c6fe8588000"/> + <column name="ADVERTISING" value="N"/> + <column name="PRODUCTCODE" value="WG3005-SL"/> + <column name="PRODUCTNAME" value="WG3 Produkt SL2"/> <column name="STATUS" valueNumeric="1"/> + <column name="UNIT" value="QUANTITYPIECES"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2021-04-09T11:48:09"/> + <column name="GROUPCODEID" value="PRODUCTGROUP3"/> </insert> - <insert tableName="product"> - <column name="PRODUCTCODE" value="ET1005"/> + <insert tableName="PRODUCT"> <column name="PRODUCTID" value="b973e3f9-277c-4787-96a0-7cac54472420"/> - <column name="GROUPCODEID" value="PRODUCTSPARE"/> - <column name="MINSTOCK" valueNumeric="10"/> <column name="ADVERTISING" value="N"/> - <column name="USER_EDIT" value="Admin"/> - <column name="USER_NEW" value="Admin"/> - <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/> - <column name="UNIT" value="QUANTITYPIECES"/> - <column name="DATE_EDIT" valueDate="2019-05-22T11:13:42"/> + <column name="MINSTOCK" valueNumeric="10"/> + <column name="MINSTOCK" valueNumeric="10"/> + <column name="PRODUCTCODE" value="ET1005"/> <column name="PRODUCTNAME" value="Ersatzteil 2"/> <column name="STATUS" valueNumeric="1"/> + <column name="UNIT" value="QUANTITYPIECES"/> + <column name="USER_NEW" value="Admin"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_NEW" valueDate="2019-05-13T03:16:36"/> + <column name="DATE_EDIT" valueDate="2019-05-22T01:13:42"/> + <column name="GROUPCODEID" value="PRODUCTSPARE"/> </insert> - <insert tableName="product"> - <column name="PRODUCTCODE" value="DL1005"/> + <insert tableName="PRODUCT"> <column name="PRODUCTID" value="bb897bd1-244b-45cd-8a2f-f5a783cbbbff"/> - <column name="GROUPCODEID" value="PRODUCTSERVICE"/> <column name="ADVERTISING" value="N"/> - <column name="USER_EDIT" value="Admin"/> - <column name="USER_NEW" value="Admin"/> - <column name="DATE_NEW" valueDate="2019-05-22T11:20:28"/> - <column name="UNIT" value="QUANTITYHOUR"/> - <column name="DATE_EDIT" valueDate="2019-05-22T11:22:20"/> + <column name="PRODUCTCODE" value="DL1005"/> <column name="PRODUCTNAME" value="Beratungsdienstleistung"/> <column name="STATUS" valueNumeric="1"/> + <column name="UNIT" value="QUANTITYHOUR"/> + <column name="USER_NEW" value="Admin"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_NEW" valueDate="2019-05-22T01:20:28"/> + <column name="DATE_EDIT" valueDate="2019-05-22T01:22:20"/> + <column name="GROUPCODEID" value="PRODUCTSERVICE"/> </insert> - <insert tableName="product"> - <column name="PRODUCTCODE" value="WG1003"/> - <column name="PRODUCTID" value="c8244502-73be-4ef7-9ef7-2b5ae95d3718"/> - <column name="GROUPCODEID" value="PRODUCTGROUP1"/> + <insert tableName="PRODUCT"> + <column name="PRODUCTID" value="c08e32db-73ce-49a2-8306-860ac7081e77"/> <column name="ADVERTISING" value="N"/> - <column name="USER_EDIT" value="Admin"/> - <column name="USER_NEW" value="Admin"/> - <column name="DATE_NEW" valueDate="2019-05-17T07:34:44"/> + <column name="PRODUCTCODE" value="WG2008"/> + <column name="PRODUCTNAME" value="WG2 Produkt 7"/> + <column name="STATUS" valueNumeric="1"/> <column name="UNIT" value="QUANTITYPIECES"/> - <column name="DATE_EDIT" valueDate="2019-05-21T09:00:55"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2021-04-09T11:34:21"/> + <column name="GROUPCODEID" value="PRODUCTGROUP2"/> + </insert> + <insert tableName="PRODUCT"> + <column name="PRODUCTID" value="c8244502-73be-4ef7-9ef7-2b5ae95d3718"/> + <column name="ADVERTISING" value="N"/> + <column name="PRODUCTCODE" value="WG1003"/> <column name="PRODUCTNAME" value="WG1 Standardprodukt 2"/> <column name="STATUS" valueNumeric="1"/> + <column name="UNIT" value="QUANTITYPIECES"/> + <column name="USER_NEW" value="Admin"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_NEW" valueDate="2019-05-17T09:34:44"/> + <column name="DATE_EDIT" valueDate="2019-05-21T11:00:55"/> + <column name="GROUPCODEID" value="PRODUCTGROUP1"/> </insert> - <insert tableName="product"> - <column name="PRODUCTCODE" value="WG3001"/> + <insert tableName="PRODUCT"> <column name="PRODUCTID" value="c9f744bc-7903-4ec0-96f9-1df010ce1f37"/> - <column name="GROUPCODEID" value="PRODUCTGROUP3"/> <column name="ADVERTISING" value="N"/> - <column name="USER_EDIT" value="Admin"/> - <column name="USER_NEW" value="Admin"/> - <column name="DATE_NEW" valueDate="2019-05-17T07:37:31"/> - <column name="UNIT" value="QUANTITYPIECES"/> - <column name="DATE_EDIT" valueDate="2019-06-11T11:14:18"/> - <column name="PRODUCTNAME" value="WG3 Produkt A"/> + <column name="PRODUCTCODE" value="WG3001-S"/> + <column name="PRODUCTNAME" value="WG3 Produkt A - Standard"/> <column name="STATUS" valueNumeric="1"/> + <column name="UNIT" value="QUANTITYPIECES"/> + <column name="USER_NEW" value="Admin"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_NEW" valueDate="2019-05-17T09:37:31"/> + <column name="DATE_EDIT" valueDate="2021-04-09T11:40:04"/> + <column name="GROUPCODEID" value="PRODUCTGROUP3"/> </insert> - <insert tableName="product"> - <column name="PRODUCTCODE" value="WG3002"/> + <insert tableName="PRODUCT"> <column name="PRODUCTID" value="e073ddc7-e3b8-4430-9e4f-12065106a624"/> - <column name="GROUPCODEID" value="PRODUCTGROUP3"/> <column name="ADVERTISING" value="N"/> - <column name="USER_EDIT" value="Admin"/> - <column name="USER_NEW" value="Admin"/> - <column name="DATE_NEW" valueDate="2019-05-17T07:39:37"/> - <column name="UNIT" value="QUANTITYPIECES"/> - <column name="DATE_EDIT" valueDate="2019-06-11T11:14:27"/> - <column name="PRODUCTNAME" value="WG3 Produkt B"/> + <column name="PRODUCTCODE" value="WG3002-S"/> + <column name="PRODUCTNAME" value="WG3 Produkt B - Standard"/> <column name="STATUS" valueNumeric="1"/> + <column name="UNIT" value="QUANTITYPIECES"/> + <column name="USER_NEW" value="Admin"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_NEW" valueDate="2019-05-17T09:39:37"/> + <column name="DATE_EDIT" valueDate="2021-04-09T11:40:25"/> + <column name="GROUPCODEID" value="PRODUCTGROUP3"/> </insert> - <insert tableName="product"> - <column name="PRODUCTCODE" value="ET1006"/> + <insert tableName="PRODUCT"> <column name="PRODUCTID" value="f52b1d6e-bf08-4fe1-8d83-ac0728c4b1c4"/> - <column name="GROUPCODEID" value="PRODUCTSPARE"/> - <column name="MINSTOCK" valueNumeric="12"/> <column name="ADVERTISING" value="N"/> + <column name="MINSTOCK" valueNumeric="12"/> + <column name="MINSTOCK" valueNumeric="12"/> + <column name="PRODUCTCODE" value="ET1006"/> + <column name="PRODUCTNAME" value="Ersatzteil 1"/> + <column name="STATUS" valueNumeric="1"/> + <column name="UNIT" value="QUANTITYPIECES"/> + <column name="USER_NEW" value="Admin"/> <column name="USER_EDIT" value="Admin"/> + <column name="DATE_NEW" valueDate="2019-05-13T03:16:36"/> + <column name="DATE_EDIT" valueDate="2019-05-22T01:13:33"/> + <column name="GROUPCODEID" value="PRODUCTSPARE"/> + </insert> + <insert tableName="PRODUCT"> + <column name="PRODUCTID" value="a2e76fe1-e49b-4f2b-8da5-12660738043d"/> + <column name="ADVERTISING" value="N"/> + <column name="MINSTOCK" valueNumeric="6"/> + <column name="MINSTOCK" valueNumeric="6"/> + <column name="PRODUCTCODE" value="ET1007"/> + <column name="PRODUCTNAME" value="Ersatzteil 4"/> + <column name="STATUS" valueNumeric="1"/> + <column name="UNIT" value="QUANTITYPIECES"/> <column name="USER_NEW" value="Admin"/> - <column name="DATE_NEW" valueDate="2019-05-13T01:16:36"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_NEW" valueDate="2019-05-13T03:16:36"/> + <column name="DATE_EDIT" valueDate="2019-05-22T01:13:33"/> + <column name="GROUPCODEID" value="PRODUCTSPARE"/> + </insert> + <insert tableName="PRODUCT"> + <column name="PRODUCTID" value="feefb3a9-f02a-4536-9ebb-ab7070cc71ba"/> + <column name="ADVERTISING" value="N"/> + <column name="MINSTOCK" valueNumeric="8"/> + <column name="MINSTOCK" valueNumeric="8"/> + <column name="PRODUCTCODE" value="ET1008"/> + <column name="PRODUCTNAME" value="Ersatzteil 5"/> + <column name="STATUS" valueNumeric="1"/> <column name="UNIT" value="QUANTITYPIECES"/> - <column name="DATE_EDIT" valueDate="2019-05-22T11:13:33"/> - <column name="PRODUCTNAME" value="Ersatzteil 1"/> + <column name="USER_NEW" value="Admin"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_NEW" valueDate="2017-05-13T03:16:36"/> + <column name="DATE_EDIT" valueDate="2021-05-22T01:13:33"/> + <column name="GROUPCODEID" value="PRODUCTSPARE"/> + </insert> + <insert tableName="PRODUCT"> + <column name="PRODUCTID" value="072680e3-9e5d-4228-b5a8-f4acef8f2452"/> + <column name="ADVERTISING" value="N"/> + <column name="PRODUCTCODE" value="WG3004-S"/> + <column name="PRODUCTNAME" value="WG3 Produkt D - Standard"/> <column name="STATUS" valueNumeric="1"/> + <column name="UNIT" value="QUANTITYPIECES"/> + <column name="USER_NEW" value="Admin"/> + <column name="USER_EDIT" value="Admin"/> + <column name="DATE_NEW" valueDate="2019-05-17T09:39:37"/> + <column name="DATE_EDIT" valueDate="2021-04-09T11:40:25"/> + <column name="GROUPCODEID" value="PRODUCTGROUP3"/> </insert> </changeSet> </databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/productprice.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/productprice.xml index 2bf76a4ff9984e6ba625e20e18ea7c8f66850a53..e85dd3e1aa7be57e9ff2ac25d0f8c47fbf5df685 100644 --- a/.liquibase/Data_alias/basic/_demoData/generatedData/productprice.xml +++ b/.liquibase/Data_alias/basic/_demoData/generatedData/productprice.xml @@ -1,240 +1,433 @@ <?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="autogenerated" id="8eb1ec28-0236-45c7-af4c-8125a3aa855e"> - <delete tableName="productprice"/> - <insert tableName="productprice"> + <changeSet author="autogenerated" id="00b2ef8d-0469-4c5b-a0a8-e4b22a30993b"> + <delete tableName="PRODUCTPRICE"/> + <insert tableName="PRODUCTPRICE"> + <column name="PRODUCTPRICEID" value="174b4614-93ae-47d0-aded-171f502da885"/> + <column name="VALID_FROM" valueDate="2021-04-09T02:00:00"/> + <column name="CONTACT_ID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/> + <column name="PRICE" valueNumeric="7300.00"/> + <column name="VAT" valueNumeric="19.00"/> + <column name="PRODUCT_ID" value="c08e32db-73ce-49a2-8306-860ac7081e77"/> + <column name="FROMQUANTITY" valueNumeric="1.00"/> + <column name="CURRENCY" value="EUR"/> <column name="BUYSELL" value="SP"/> - <column name="PRICELIST" value="PRICELISTDEFAULT"/> + </insert> + <insert tableName="PRODUCTPRICE"> + <column name="PRODUCTPRICEID" value="18df2550-d1f3-4908-af4d-cbbb6f75fe62"/> + <column name="VALID_FROM" valueDate="2021-04-09T02:00:00"/> + <column name="PRICE" valueNumeric="11000.00"/> + <column name="VAT" valueNumeric="19.00"/> + <column name="PRODUCT_ID" value="6d1321d0-7777-4b6e-8a01-08b77ea3c5bf"/> + <column name="FROMQUANTITY" valueNumeric="1.00"/> + <column name="CURRENCY" value="EUR"/> + <column name="PRICELIST" value="PRICELISTKEY"/> + <column name="BUYSELL" value="SP"/> + </insert> + <insert tableName="PRODUCTPRICE"> <column name="PRODUCTPRICEID" value="1c5b6a5a-4aa0-499e-994f-278c7bdf87bf"/> + <column name="VALID_TO" valueDate="2020-07-15T02:00:00"/> + <column name="VALID_FROM" valueDate="2019-05-17T02:00:00"/> <column name="PRICE" valueNumeric="25000.00"/> - <column name="FROMQUANTITY" valueNumeric="1.00"/> - <column name="VALID_TO" valueDate="2020-07-15T00:00:00"/> - <column name="PRODUCT_ID" value="c9f744bc-7903-4ec0-96f9-1df010ce1f37"/> <column name="VAT" valueNumeric="19.00"/> - <column name="VALID_FROM" valueDate="2019-05-17T00:00:00"/> + <column name="PRODUCT_ID" value="c9f744bc-7903-4ec0-96f9-1df010ce1f37"/> + <column name="FROMQUANTITY" valueNumeric="1.00"/> <column name="CURRENCY" value="EUR"/> - <column name="CONTACT_ID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/> - </insert> - <insert tableName="productprice"> - <column name="BUYSELL" value="SP"/> <column name="PRICELIST" value="PRICELISTDEFAULT"/> + <column name="BUYSELL" value="SP"/> + </insert> + <insert tableName="PRODUCTPRICE"> <column name="PRODUCTPRICEID" value="24d65d20-bf5c-474d-8351-2788431e0e1a"/> + <column name="VALID_FROM" valueDate="2019-05-22T02:00:00"/> <column name="PRICE" valueNumeric="35000.00"/> - <column name="FROMQUANTITY" valueNumeric="1.00"/> - <column name="PRODUCT_ID" value="80b77bce-5299-4c1d-bf41-5eca0add2f50"/> <column name="VAT" valueNumeric="19.00"/> - <column name="VALID_FROM" valueDate="2019-05-22T00:00:00"/> + <column name="PRODUCT_ID" value="80b77bce-5299-4c1d-bf41-5eca0add2f50"/> + <column name="FROMQUANTITY" valueNumeric="1.00"/> <column name="CURRENCY" value="EUR"/> - </insert> - <insert tableName="productprice"> - <column name="BUYSELL" value="SP"/> <column name="PRICELIST" value="PRICELISTDEFAULT"/> + <column name="BUYSELL" value="SP"/> + </insert> + <insert tableName="PRODUCTPRICE"> <column name="PRODUCTPRICEID" value="2749f80a-f09b-4153-97dd-2284253e8228"/> + <column name="VALID_TO" valueDate="2021-04-11T02:00:00"/> + <column name="VALID_FROM" valueDate="2019-05-23T02:00:00"/> <column name="PRICE" valueNumeric="150000.00"/> - <column name="FROMQUANTITY" valueNumeric="1.00"/> - <column name="VALID_TO" valueDate="2021-06-17T00:00:00"/> - <column name="PRODUCT_ID" value="8cdbd2d8-70e2-4899-9ac6-3f0c3e28cab1"/> <column name="VAT" valueNumeric="19.00"/> - <column name="VALID_FROM" valueDate="2019-05-23T00:00:00"/> + <column name="PRODUCT_ID" value="8cdbd2d8-70e2-4899-9ac6-3f0c3e28cab1"/> + <column name="FROMQUANTITY" valueNumeric="1.00"/> <column name="CURRENCY" value="EUR"/> + <column name="PRICELIST" value="PRICELISTDEFAULT"/> + <column name="BUYSELL" value="SP"/> + </insert> + <insert tableName="PRODUCTPRICE"> + <column name="PRODUCTPRICEID" value="2873323a-1e31-4758-b58d-84ee7326b2da"/> + <column name="VALID_FROM" valueDate="2021-04-09T02:00:00"/> <column name="CONTACT_ID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/> + <column name="PRICE" valueNumeric="10000.00"/> + <column name="VAT" valueNumeric="19.00"/> + <column name="PRODUCT_ID" value="6d1321d0-7777-4b6e-8a01-08b77ea3c5bf"/> + <column name="FROMQUANTITY" valueNumeric="1.00"/> + <column name="CURRENCY" value="EUR"/> + <column name="BUYSELL" value="SP"/> </insert> - <insert tableName="productprice"> + <insert tableName="PRODUCTPRICE"> + <column name="PRODUCTPRICEID" value="29c161e2-4d4d-4c84-86ae-99a778beb78c"/> + <column name="VALID_FROM" valueDate="2021-04-09T02:00:00"/> + <column name="CONTACT_ID" value="8eecb5e5-40d9-4bf0-a152-1ca456795563"/> + <column name="PRICE" valueNumeric="9800.00"/> + <column name="VAT" valueNumeric="19.00"/> + <column name="PRODUCT_ID" value="6d1321d0-7777-4b6e-8a01-08b77ea3c5bf"/> + <column name="FROMQUANTITY" valueNumeric="1.00"/> + <column name="CURRENCY" value="EUR"/> <column name="BUYSELL" value="SP"/> - <column name="PRICELIST" value="PRICELISTDEFAULT"/> + </insert> + <insert tableName="PRODUCTPRICE"> + <column name="PRODUCTPRICEID" value="30fed437-ce2d-4326-8c21-20017a7bd24d"/> + <column name="VALID_FROM" valueDate="2021-04-09T02:00:00"/> + <column name="PRICE" valueNumeric="5000.00"/> + <column name="VAT" valueNumeric="19.00"/> + <column name="PRODUCT_ID" value="895f8caf-8c91-4ba8-9619-44ea6366cbbb"/> + <column name="FROMQUANTITY" valueNumeric="1.00"/> + <column name="CURRENCY" value="EUR"/> + <column name="PRICELIST" value="PRICELISTKEY"/> + <column name="BUYSELL" value="SP"/> + </insert> + <insert tableName="PRODUCTPRICE"> <column name="PRODUCTPRICEID" value="4028dfb7-d0e4-493e-9676-6f14a24a9507"/> + <column name="VALID_FROM" valueDate="2020-07-15T02:00:00"/> <column name="PRICE" valueNumeric="10000.00"/> - <column name="FROMQUANTITY" valueNumeric="1.00"/> - <column name="PRODUCT_ID" value="c9f744bc-7903-4ec0-96f9-1df010ce1f37"/> <column name="VAT" valueNumeric="0.00"/> - <column name="VALID_FROM" valueDate="2020-07-15T00:00:00"/> + <column name="PRODUCT_ID" value="c9f744bc-7903-4ec0-96f9-1df010ce1f37"/> + <column name="FROMQUANTITY" valueNumeric="1.00"/> <column name="CURRENCY" value="EUR"/> - <column name="CONTACT_ID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/> + <column name="PRICELIST" value="PRICELISTDEFAULT"/> + <column name="BUYSELL" value="SP"/> </insert> - <insert tableName="productprice"> + <insert tableName="PRODUCTPRICE"> + <column name="PRODUCTPRICEID" value="42c3919f-cd77-43ef-9075-acfd627bfc5b"/> + <column name="VALID_FROM" valueDate="2021-04-09T02:00:00"/> + <column name="PRICE" valueNumeric="40000.00"/> + <column name="VAT" valueNumeric="19.00"/> + <column name="PRODUCT_ID" value="3d0086d3-f7fa-4328-bfc9-75cf37eb422c"/> + <column name="FROMQUANTITY" valueNumeric="1.00"/> + <column name="CURRENCY" value="EUR"/> + <column name="PRICELIST" value="PRICELISTKEY"/> <column name="BUYSELL" value="SP"/> + </insert> + <insert tableName="PRODUCTPRICE"> + <column name="PRODUCTPRICEID" value="43467798-a1a7-4118-8719-a86a9b34a637"/> + <column name="VALID_FROM" valueDate="2021-04-09T02:00:00"/> + <column name="PRICE" valueNumeric="13000.00"/> + <column name="VAT" valueNumeric="19.00"/> + <column name="PRODUCT_ID" value="4004db3e-a63e-4b32-b7da-8c899996ddcd"/> + <column name="FROMQUANTITY" valueNumeric="1.00"/> + <column name="CURRENCY" value="EUR"/> <column name="PRICELIST" value="PRICELISTDEFAULT"/> + <column name="BUYSELL" value="SP"/> + </insert> + <insert tableName="PRODUCTPRICE"> <column name="PRODUCTPRICEID" value="43fa161c-0f85-4915-89be-6bb442143506"/> + <column name="VALID_TO" valueDate="2021-04-08T02:00:00"/> + <column name="VALID_FROM" valueDate="2019-05-22T02:00:00"/> <column name="PRICE" valueNumeric="30000.00"/> - <column name="FROMQUANTITY" valueNumeric="1.00"/> - <column name="PRODUCT_ID" value="155ac430-ccfc-4814-95fc-189631779064"/> <column name="VAT" valueNumeric="19.00"/> - <column name="VALID_FROM" valueDate="2019-05-22T00:00:00"/> + <column name="PRODUCT_ID" value="155ac430-ccfc-4814-95fc-189631779064"/> + <column name="FROMQUANTITY" valueNumeric="1.00"/> <column name="CURRENCY" value="EUR"/> - </insert> - <insert tableName="productprice"> - <column name="BUYSELL" value="SP"/> <column name="PRICELIST" value="PRICELISTDEFAULT"/> + <column name="BUYSELL" value="SP"/> + </insert> + <insert tableName="PRODUCTPRICE"> <column name="PRODUCTPRICEID" value="443b9532-7a41-481a-8f95-ffaf5e7949af"/> + <column name="VALID_FROM" valueDate="2019-05-22T02:00:00"/> <column name="PRICE" valueNumeric="1000.00"/> - <column name="FROMQUANTITY" valueNumeric="1.00"/> - <column name="PRODUCT_ID" value="239a4c58-5ae6-4aaa-aba3-7e40bf348ce2"/> <column name="VAT" valueNumeric="19.00"/> - <column name="VALID_FROM" valueDate="2019-05-22T00:00:00"/> + <column name="PRODUCT_ID" value="239a4c58-5ae6-4aaa-aba3-7e40bf348ce2"/> + <column name="FROMQUANTITY" valueNumeric="1.00"/> <column name="CURRENCY" value="EUR"/> - </insert> - <insert tableName="productprice"> - <column name="BUYSELL" value="SP"/> <column name="PRICELIST" value="PRICELISTDEFAULT"/> - <column name="PRODUCTPRICEID" value="71d5a323-12d8-4d1b-8de6-6a7bf81d0b61"/> - <column name="PRICE" valueNumeric="25000.00"/> - <column name="FROMQUANTITY" valueNumeric="1.00"/> - <column name="PRODUCT_ID" value="895f8caf-8c91-4ba8-9619-44ea6366cbbb"/> + <column name="BUYSELL" value="SP"/> + </insert> + <insert tableName="PRODUCTPRICE"> + <column name="PRODUCTPRICEID" value="6ddbbcac-00fd-4ba5-ad92-dc27cc365c9a"/> + <column name="VALID_FROM" valueDate="2021-04-09T02:00:00"/> + <column name="CONTACT_ID" value="8eecb5e5-40d9-4bf0-a152-1ca456795563"/> + <column name="PRICE" valueNumeric="7000.00"/> <column name="VAT" valueNumeric="19.00"/> - <column name="VALID_FROM" valueDate="2019-05-22T00:00:00"/> + <column name="PRODUCT_ID" value="c08e32db-73ce-49a2-8306-860ac7081e77"/> + <column name="FROMQUANTITY" valueNumeric="1.00"/> <column name="CURRENCY" value="EUR"/> - </insert> - <insert tableName="productprice"> <column name="BUYSELL" value="SP"/> - <column name="PRICELIST" value="PRICELISTDEFAULT"/> + </insert> + <insert tableName="PRODUCTPRICE"> <column name="PRODUCTPRICEID" value="75365b30-fd09-4255-b1d7-f4c91e9d255e"/> + <column name="VALID_TO" valueDate="2022-05-17T02:00:00"/> + <column name="VALID_FROM" valueDate="2019-05-17T02:00:00"/> <column name="PRICE" valueNumeric="2500.00"/> - <column name="FROMQUANTITY" valueNumeric="1.00"/> - <column name="VALID_TO" valueDate="2022-05-17T00:00:00"/> - <column name="PRODUCT_ID" value="805cd37f-d6c7-424b-99b0-b3de9ec89f7b"/> <column name="VAT" valueNumeric="19.00"/> - <column name="VALID_FROM" valueDate="2019-05-17T00:00:00"/> + <column name="PRODUCT_ID" value="805cd37f-d6c7-424b-99b0-b3de9ec89f7b"/> + <column name="FROMQUANTITY" valueNumeric="1.00"/> <column name="CURRENCY" value="EUR"/> - <column name="CONTACT_ID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/> + <column name="PRICELIST" value="PRICELISTDEFAULT"/> + <column name="BUYSELL" value="SP"/> </insert> - <insert tableName="productprice"> + <insert tableName="PRODUCTPRICE"> + <column name="PRODUCTPRICEID" value="762691fd-62d1-417b-866e-fc2ddd4f751b"/> + <column name="VALID_FROM" valueDate="2021-04-09T02:00:00"/> + <column name="CONTACT_ID" value="8eecb5e5-40d9-4bf0-a152-1ca456795563"/> + <column name="PRICE" valueNumeric="4000.00"/> + <column name="VAT" valueNumeric="19.00"/> + <column name="PRODUCT_ID" value="3d0086d3-f7fa-4328-bfc9-75cf37eb422c"/> + <column name="FROMQUANTITY" valueNumeric="1.00"/> + <column name="CURRENCY" value="EUR"/> <column name="BUYSELL" value="SP"/> - <column name="PRICELIST" value="PRICELISTDEFAULT"/> - <column name="PRODUCTPRICEID" value="a2c9954b-bda0-4f02-8269-96cb86cb2516"/> + </insert> + <insert tableName="PRODUCTPRICE"> + <column name="PRODUCTPRICEID" value="7d66db96-9ece-4e41-acd3-6305035dc795"/> + <column name="VALID_FROM" valueDate="2021-04-09T02:00:00"/> <column name="PRICE" valueNumeric="20000.00"/> + <column name="VAT" valueNumeric="19.00"/> + <column name="PRODUCT_ID" value="155ac430-ccfc-4814-95fc-189631779064"/> <column name="FROMQUANTITY" valueNumeric="1.00"/> - <column name="PRODUCT_ID" value="c8244502-73be-4ef7-9ef7-2b5ae95d3718"/> + <column name="CURRENCY" value="USD"/> + <column name="PRICELIST" value="PRICELISTDEFAULT"/> + <column name="BUYSELL" value="SP"/> + </insert> + <insert tableName="PRODUCTPRICE"> + <column name="PRODUCTPRICEID" value="84a7e7d0-4b18-44aa-8dbb-507674d97df3"/> + <column name="VALID_FROM" valueDate="2021-04-09T02:00:00"/> + <column name="PRICE" valueNumeric="4500.00"/> <column name="VAT" valueNumeric="19.00"/> - <column name="VALID_FROM" valueDate="2019-05-22T00:00:00"/> + <column name="PRODUCT_ID" value="535cec1a-e81c-4833-aad6-1d2348dbc0fb"/> + <column name="FROMQUANTITY" valueNumeric="1.00"/> <column name="CURRENCY" value="EUR"/> + <column name="PRICELIST" value="PRICELISTKEY"/> + <column name="BUYSELL" value="SP"/> </insert> - <insert tableName="productprice"> + <insert tableName="PRODUCTPRICE"> + <column name="PRODUCTPRICEID" value="8ec3f7bf-97ec-49fc-a0fd-af6211d9ed19"/> + <column name="VALID_FROM" valueDate="2021-04-09T02:00:00"/> + <column name="CONTACT_ID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/> + <column name="PRICE" valueNumeric="10000.00"/> + <column name="VAT" valueNumeric="19.00"/> + <column name="PRODUCT_ID" value="80b77bce-5299-4c1d-bf41-5eca0add2f50"/> + <column name="FROMQUANTITY" valueNumeric="1.00"/> + <column name="CURRENCY" value="EUR"/> <column name="BUYSELL" value="SP"/> + </insert> + <insert tableName="PRODUCTPRICE"> + <column name="PRODUCTPRICEID" value="a2c9954b-bda0-4f02-8269-96cb86cb2516"/> + <column name="VALID_FROM" valueDate="2019-05-22T02:00:00"/> + <column name="PRICE" valueNumeric="20000.00"/> + <column name="VAT" valueNumeric="19.00"/> + <column name="PRODUCT_ID" value="c8244502-73be-4ef7-9ef7-2b5ae95d3718"/> + <column name="FROMQUANTITY" valueNumeric="1.00"/> + <column name="CURRENCY" value="EUR"/> <column name="PRICELIST" value="PRICELISTDEFAULT"/> + <column name="BUYSELL" value="SP"/> + </insert> + <insert tableName="PRODUCTPRICE"> <column name="PRODUCTPRICEID" value="a75cc2e2-bb81-4e9f-9fa4-95c8531e966d"/> + <column name="VALID_FROM" valueDate="2019-05-22T02:00:00"/> <column name="PRICE" valueNumeric="2500.00"/> - <column name="FROMQUANTITY" valueNumeric="1.00"/> - <column name="PRODUCT_ID" value="b973e3f9-277c-4787-96a0-7cac54472420"/> <column name="VAT" valueNumeric="19.00"/> - <column name="VALID_FROM" valueDate="2019-05-22T00:00:00"/> + <column name="PRODUCT_ID" value="b973e3f9-277c-4787-96a0-7cac54472420"/> + <column name="FROMQUANTITY" valueNumeric="1.00"/> <column name="CURRENCY" value="EUR"/> - </insert> - <insert tableName="productprice"> - <column name="BUYSELL" value="SP"/> <column name="PRICELIST" value="PRICELISTDEFAULT"/> + <column name="BUYSELL" value="SP"/> + </insert> + <insert tableName="PRODUCTPRICE"> <column name="PRODUCTPRICEID" value="a9b9097a-f664-4114-aa0a-ff2a01dddd04"/> + <column name="VALID_FROM" valueDate="2021-06-17T02:00:00"/> <column name="PRICE" valueNumeric="10000.00"/> - <column name="FROMQUANTITY" valueNumeric="1.00"/> - <column name="PRODUCT_ID" value="8cdbd2d8-70e2-4899-9ac6-3f0c3e28cab1"/> <column name="VAT" valueNumeric="19.00"/> - <column name="VALID_FROM" valueDate="2021-06-17T00:00:00"/> + <column name="PRODUCT_ID" value="8cdbd2d8-70e2-4899-9ac6-3f0c3e28cab1"/> + <column name="FROMQUANTITY" valueNumeric="1.00"/> <column name="CURRENCY" value="EUR"/> - </insert> - <insert tableName="productprice"> - <column name="BUYSELL" value="SP"/> <column name="PRICELIST" value="PRICELISTDEFAULT"/> + <column name="BUYSELL" value="SP"/> + </insert> + <insert tableName="PRODUCTPRICE"> <column name="PRODUCTPRICEID" value="abfa7e4d-bd88-4186-a7ae-26385ea1d91c"/> + <column name="VALID_FROM" valueDate="2019-05-22T02:00:00"/> <column name="PRICE" valueNumeric="30000.00"/> - <column name="FROMQUANTITY" valueNumeric="1.00"/> - <column name="PRODUCT_ID" value="993f6294-f1fc-42d2-8786-1c13274fd133"/> <column name="VAT" valueNumeric="19.00"/> - <column name="VALID_FROM" valueDate="2019-05-22T00:00:00"/> + <column name="PRODUCT_ID" value="993f6294-f1fc-42d2-8786-1c13274fd133"/> + <column name="FROMQUANTITY" valueNumeric="1.00"/> <column name="CURRENCY" value="EUR"/> - </insert> - <insert tableName="productprice"> - <column name="BUYSELL" value="SP"/> <column name="PRICELIST" value="PRICELISTDEFAULT"/> + <column name="BUYSELL" value="SP"/> + </insert> + <insert tableName="PRODUCTPRICE"> <column name="PRODUCTPRICEID" value="ad57ee30-4afe-4426-912b-c0b9d03107f7"/> + <column name="VALID_FROM" valueDate="2019-05-22T02:00:00"/> <column name="PRICE" valueNumeric="7500.00"/> - <column name="FROMQUANTITY" valueNumeric="1.00"/> - <column name="PRODUCT_ID" value="072680e3-9e5d-4228-b5a8-f4acef8f2452"/> <column name="VAT" valueNumeric="19.00"/> - <column name="VALID_FROM" valueDate="2019-05-22T00:00:00"/> + <column name="PRODUCT_ID" value="072680e3-9e5d-4228-b5a8-f4acef8f2452"/> + <column name="FROMQUANTITY" valueNumeric="1.00"/> <column name="CURRENCY" value="EUR"/> - </insert> - <insert tableName="productprice"> - <column name="BUYSELL" value="SP"/> <column name="PRICELIST" value="PRICELISTDEFAULT"/> + <column name="BUYSELL" value="SP"/> + </insert> + <insert tableName="PRODUCTPRICE"> <column name="PRODUCTPRICEID" value="bb425e07-4238-4cb7-b20b-a0ba4ed8b1ae"/> + <column name="VALID_FROM" valueDate="2019-05-22T02:00:00"/> <column name="PRICE" valueNumeric="5000.00"/> - <column name="FROMQUANTITY" valueNumeric="1.00"/> - <column name="PRODUCT_ID" value="f52b1d6e-bf08-4fe1-8d83-ac0728c4b1c4"/> <column name="VAT" valueNumeric="19.00"/> - <column name="VALID_FROM" valueDate="2019-05-22T00:00:00"/> + <column name="PRODUCT_ID" value="f52b1d6e-bf08-4fe1-8d83-ac0728c4b1c4"/> + <column name="FROMQUANTITY" valueNumeric="1.00"/> <column name="CURRENCY" value="EUR"/> - </insert> - <insert tableName="productprice"> + <column name="PRICELIST" value="PRICELISTDEFAULT"/> <column name="BUYSELL" value="SP"/> + </insert> + <insert tableName="PRODUCTPRICE"> + <column name="PRODUCTPRICEID" value="bd5e1561-9193-44c0-a40f-ca3ae81b6acd"/> + <column name="VALID_FROM" valueDate="2021-04-09T02:00:00"/> + <column name="PRICE" valueNumeric="18000.00"/> + <column name="VAT" valueNumeric="19.00"/> + <column name="PRODUCT_ID" value="4775aed7-e165-495b-a147-7e3312b27d0b"/> + <column name="FROMQUANTITY" valueNumeric="1.00"/> + <column name="CURRENCY" value="EUR"/> <column name="PRICELIST" value="PRICELISTDEFAULT"/> + <column name="BUYSELL" value="SP"/> + </insert> + <insert tableName="PRODUCTPRICE"> <column name="PRODUCTPRICEID" value="bf8ef6ac-9f34-40fd-aa2e-9792fee9a970"/> + <column name="VALID_TO" valueDate="2022-05-21T02:00:00"/> + <column name="VALID_FROM" valueDate="2019-05-17T02:00:00"/> <column name="PRICE" valueNumeric="15000.00"/> - <column name="FROMQUANTITY" valueNumeric="1.00"/> - <column name="VALID_TO" valueDate="2022-05-21T00:00:00"/> - <column name="PRODUCT_ID" value="e073ddc7-e3b8-4430-9e4f-12065106a624"/> <column name="VAT" valueNumeric="19.00"/> - <column name="VALID_FROM" valueDate="2019-05-17T00:00:00"/> + <column name="PRODUCT_ID" value="e073ddc7-e3b8-4430-9e4f-12065106a624"/> + <column name="FROMQUANTITY" valueNumeric="1.00"/> <column name="CURRENCY" value="EUR"/> - <column name="CONTACT_ID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/> - </insert> - <insert tableName="productprice"> - <column name="BUYSELL" value="SP"/> <column name="PRICELIST" value="PRICELISTDEFAULT"/> + <column name="BUYSELL" value="SP"/> + </insert> + <insert tableName="PRODUCTPRICE"> <column name="PRODUCTPRICEID" value="c0769e98-bf18-444c-92b0-fc5d17613ea8"/> + <column name="VALID_FROM" valueDate="2019-05-22T02:00:00"/> <column name="PRICE" valueNumeric="1500.00"/> - <column name="FROMQUANTITY" valueNumeric="1.00"/> - <column name="PRODUCT_ID" value="bb897bd1-244b-45cd-8a2f-f5a783cbbbff"/> <column name="VAT" valueNumeric="19.00"/> - <column name="VALID_FROM" valueDate="2019-05-22T00:00:00"/> + <column name="PRODUCT_ID" value="bb897bd1-244b-45cd-8a2f-f5a783cbbbff"/> + <column name="FROMQUANTITY" valueNumeric="1.00"/> <column name="CURRENCY" value="EUR"/> - </insert> - <insert tableName="productprice"> + <column name="PRICELIST" value="PRICELISTDEFAULT"/> <column name="BUYSELL" value="SP"/> + </insert> + <insert tableName="PRODUCTPRICE"> + <column name="PRODUCTPRICEID" value="c483e254-3ccb-4394-af3b-6cfbb60f498d"/> + <column name="VALID_FROM" valueDate="2021-04-09T02:00:00"/> + <column name="PRICE" valueNumeric="1000.00"/> + <column name="VAT" valueNumeric="19.00"/> + <column name="PRODUCT_ID" value="488e25b2-0210-41bd-bfe6-4312a9e68a20"/> + <column name="FROMQUANTITY" valueNumeric="1.00"/> + <column name="CURRENCY" value="CHF"/> <column name="PRICELIST" value="PRICELISTDEFAULT"/> + <column name="BUYSELL" value="SP"/> + </insert> + <insert tableName="PRODUCTPRICE"> <column name="PRODUCTPRICEID" value="c5b5bfce-2bec-4601-ba43-2567209bea04"/> + <column name="VALID_TO" valueDate="2058-10-31T01:00:00"/> + <column name="VALID_FROM" valueDate="2018-11-01T01:00:00"/> <column name="PRICE" valueNumeric="1060.00"/> - <column name="FROMQUANTITY" valueNumeric="1.00"/> - <column name="VALID_TO" valueDate="2058-10-31T00:00:00"/> - <column name="PRODUCT_ID" value="6e52e636-284d-454b-978c-8f58844c5c5b"/> <column name="VAT" valueNumeric="19.00"/> - <column name="VALID_FROM" valueDate="2018-11-01T00:00:00"/> + <column name="PRODUCT_ID" value="6e52e636-284d-454b-978c-8f58844c5c5b"/> + <column name="FROMQUANTITY" valueNumeric="1.00"/> <column name="CURRENCY" value="EUR"/> + <column name="PRICELIST" value="PRICELISTDEFAULT"/> + <column name="BUYSELL" value="SP"/> </insert> - <insert tableName="productprice"> + <insert tableName="PRODUCTPRICE"> + <column name="PRODUCTPRICEID" value="cfba9086-9e38-4fb7-b3eb-6dfe30216149"/> + <column name="VALID_FROM" valueDate="2021-04-09T02:00:00"/> + <column name="CONTACT_ID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/> + <column name="PRICE" valueNumeric="10000.00"/> + <column name="VAT" valueNumeric="19.00"/> + <column name="PRODUCT_ID" value="80b77bce-5299-4c1d-bf41-5eca0add2f50"/> + <column name="FROMQUANTITY" valueNumeric="1.00"/> + <column name="CURRENCY" value="EUR"/> <column name="BUYSELL" value="SP"/> + </insert> + <insert tableName="PRODUCTPRICE"> + <column name="PRODUCTPRICEID" value="d1d86ca7-2408-4c71-b10a-1d13c889e038"/> + <column name="VALID_FROM" valueDate="2021-04-09T02:00:00"/> + <column name="PRICE" valueNumeric="33000.00"/> + <column name="VAT" valueNumeric="19.00"/> + <column name="PRODUCT_ID" value="4a234269-faab-474e-82e8-662e7600e1ea"/> + <column name="FROMQUANTITY" valueNumeric="1.00"/> + <column name="CURRENCY" value="EUR"/> <column name="PRICELIST" value="PRICELISTDEFAULT"/> + <column name="BUYSELL" value="SP"/> + </insert> + <insert tableName="PRODUCTPRICE"> + <column name="PRODUCTPRICEID" value="da24d30e-c2d7-428f-84a4-060d2533ea51"/> + <column name="VALID_FROM" valueDate="2021-04-09T02:00:00"/> + <column name="CONTACT_ID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/> + <column name="PRICE" valueNumeric="7500.00"/> + <column name="VAT" valueNumeric="19.00"/> + <column name="PRODUCT_ID" value="c08e32db-73ce-49a2-8306-860ac7081e77"/> + <column name="FROMQUANTITY" valueNumeric="1.00"/> + <column name="CURRENCY" value="EUR"/> + <column name="BUYSELL" value="SP"/> + </insert> + <insert tableName="PRODUCTPRICE"> <column name="PRODUCTPRICEID" value="df9fe0b0-4f16-4592-8066-fe9b3f41fdc1"/> + <column name="VALID_FROM" valueDate="2019-05-22T02:00:00"/> <column name="PRICE" valueNumeric="50000.00"/> - <column name="FROMQUANTITY" valueNumeric="1.00"/> - <column name="PRODUCT_ID" value="3d0086d3-f7fa-4328-bfc9-75cf37eb422c"/> <column name="VAT" valueNumeric="19.00"/> - <column name="VALID_FROM" valueDate="2019-05-22T00:00:00"/> + <column name="PRODUCT_ID" value="3d0086d3-f7fa-4328-bfc9-75cf37eb422c"/> + <column name="FROMQUANTITY" valueNumeric="1.00"/> <column name="CURRENCY" value="EUR"/> - </insert> - <insert tableName="productprice"> - <column name="BUYSELL" value="SP"/> <column name="PRICELIST" value="PRICELISTDEFAULT"/> + <column name="BUYSELL" value="SP"/> + </insert> + <insert tableName="PRODUCTPRICE"> <column name="PRODUCTPRICEID" value="ead04c9b-955e-4595-bb31-31685b3ceaec"/> + <column name="VALID_TO" valueDate="2022-05-20T02:00:00"/> + <column name="VALID_FROM" valueDate="2019-05-23T02:00:00"/> <column name="PRICE" valueNumeric="10000.00"/> - <column name="FROMQUANTITY" valueNumeric="1.00"/> - <column name="VALID_TO" valueDate="2022-05-20T00:00:00"/> + <column name="VAT" valueNumeric="19.00"/> <column name="PRODUCT_ID" value="535cec1a-e81c-4833-aad6-1d2348dbc0fb"/> + <column name="FROMQUANTITY" valueNumeric="1.00"/> + <column name="CURRENCY" value="EUR"/> + <column name="PRICELIST" value="PRICELISTDEFAULT"/> + <column name="BUYSELL" value="SP"/> + </insert> + <insert tableName="PRODUCTPRICE"> + <column name="PRODUCTPRICEID" value="ec8bf01a-9796-4bc6-803a-11822bd6dac8"/> + <column name="VALID_FROM" valueDate="2021-04-12T02:00:00"/> + <column name="CONTACT_ID" value="449080f6-b714-4189-a261-37439d0d4010"/> + <column name="PRICE" valueNumeric="0.00"/> <column name="VAT" valueNumeric="19.00"/> - <column name="VALID_FROM" valueDate="2019-05-23T00:00:00"/> + <column name="PRODUCT_ID" value="8cdbd2d8-70e2-4899-9ac6-3f0c3e28cab1"/> + <column name="FROMQUANTITY" valueNumeric="1.00"/> <column name="CURRENCY" value="EUR"/> - <column name="CONTACT_ID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/> + <column name="BUYSELL" value="SP"/> </insert> - <insert tableName="productprice"> + <insert tableName="PRODUCTPRICE"> + <column name="PRODUCTPRICEID" value="f6cef764-d08d-42dd-a681-70fbb6aeb7ff"/> + <column name="VALID_TO" valueDate="2021-06-25T02:00:00"/> + <column name="VALID_FROM" valueDate="2021-04-09T02:00:00"/> + <column name="CONTACT_ID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/> + <column name="PRICE" valueNumeric="2000.00"/> + <column name="VAT" valueNumeric="19.00"/> + <column name="PRODUCT_ID" value="805cd37f-d6c7-424b-99b0-b3de9ec89f7b"/> + <column name="FROMQUANTITY" valueNumeric="1.00"/> + <column name="CURRENCY" value="EUR"/> <column name="BUYSELL" value="SP"/> - <column name="PRICELIST" value="PRICELISTDEFAULT"/> + </insert> + <insert tableName="PRODUCTPRICE"> <column name="PRODUCTPRICEID" value="f90ff3d2-3e62-4b6f-bcfb-db4d4ecd8de8"/> + <column name="VALID_TO" valueDate="2019-05-22T02:00:00"/> + <column name="VALID_FROM" valueDate="2019-05-17T02:00:00"/> <column name="PRICE" valueNumeric="5000.00"/> - <column name="FROMQUANTITY" valueNumeric="1.00"/> - <column name="VALID_TO" valueDate="2019-05-22T00:00:00"/> - <column name="PRODUCT_ID" value="535cec1a-e81c-4833-aad6-1d2348dbc0fb"/> <column name="VAT" valueNumeric="19.00"/> - <column name="VALID_FROM" valueDate="2019-05-17T00:00:00"/> + <column name="PRODUCT_ID" value="535cec1a-e81c-4833-aad6-1d2348dbc0fb"/> + <column name="FROMQUANTITY" valueNumeric="1.00"/> <column name="CURRENCY" value="EUR"/> - <column name="CONTACT_ID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/> + <column name="PRICELIST" value="PRICELISTDEFAULT"/> + <column name="BUYSELL" value="SP"/> </insert> </changeSet> </databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/salesorder.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/salesorder.xml index f74cacd3fa0f307524f140fd2b8c8e8f4ed10d6f..a830e9f19404202095d34be02a42f0a7c25badbb 100644 --- a/.liquibase/Data_alias/basic/_demoData/generatedData/salesorder.xml +++ b/.liquibase/Data_alias/basic/_demoData/generatedData/salesorder.xml @@ -55,11 +55,11 @@ <column name="DUNNINGDATE" valueDate="2019-09-01T02:00:00"/> <column name="ISOLANGUAGE" value="deu"/> <column name="CURRENCY" value="EUR"/> - <column name="NET" valueNumeric="420.00"/> + <column name="NET" valueNumeric="0.00"/> <column name="OBJECT_TYPE" value="Salesproject"/> - <column name="VAT" valueNumeric="79.80"/> + <column name="VAT" valueNumeric="0.00"/> <column name="CANCELLATION" valueNumeric="0"/> - <column name="PAID" valueNumeric="300.00"/> + <column name="PAID" valueNumeric="0.00"/> <column name="SALESORDERID" value="41197800-027b-47f5-923a-f1004d09a969"/> <column name="DUNNINGLEVEL" value="1"/> <column name="ORDERTYPE" value="ORDTYPEINVO"/> diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/salesproject.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/salesproject.xml index e974404a483fca6b30869ed902b060c218cfa29b..2f7aec85052da42bdfe0ccac94629992f9b27eee 100644 --- a/.liquibase/Data_alias/basic/_demoData/generatedData/salesproject.xml +++ b/.liquibase/Data_alias/basic/_demoData/generatedData/salesproject.xml @@ -4,7 +4,7 @@ <delete tableName="salesproject"/> <insert tableName="salesproject"> <column name="VOLUME" valueNumeric="200000.00"/> - <column name="PHASE" value="SALPROJPHASESQO"/> + <column name="PHASE" value="SALPROJPHASEOFFER"/> <column name="ENDDATE" valueDate="2021-05-20T12:00:00"/> <column name="SALESPROJECTID" value="438537db-0dc6-4aed-b1d1-813011baf88c"/> <column name="PROBABILITY" valueNumeric="25"/> @@ -17,7 +17,7 @@ </insert> <insert tableName="salesproject"> <column name="VOLUME" valueNumeric="120000.00"/> - <column name="PHASE" value="SALPROJPHASESAL"/> + <column name="PHASE" value="SALPROJPHASELEAD"/> <column name="ENDDATE" valueDate="2021-05-17T12:00:00"/> <column name="SALESPROJECTID" value="6d3d16cd-733e-41d1-ab6c-8a6cba63ba4a"/> <column name="PROBABILITY" valueNumeric="25"/> @@ -43,7 +43,7 @@ </insert> <insert tableName="salesproject"> <column name="VOLUME" valueNumeric="250000.00"/> - <column name="PHASE" value="SALPROJPHASESAL"/> + <column name="PHASE" value="SALPROJPHASELEAD"/> <column name="ENDDATE" valueDate="2022-05-18T12:00:00"/> <column name="SALESPROJECTID" value="d422ad81-717f-42b0-bd64-fc892744aac7"/> <column name="PROBABILITY" valueNumeric="25"/> @@ -55,7 +55,7 @@ <column name="STATUS" value="SALPROJSTATOPEN"/> </insert> <insert tableName="salesproject"> - <column name="PHASE" value="SALPROJPHASENQC"/> + <column name="PHASE" value="SALPROJPHASECONTACT"/> <column name="ENDDATE" valueDate="2021-11-26T12:00:00"/> <column name="SALESPROJECTID" value="ebb04ae2-d1f9-4ef3-bdfa-e9f562d215ba"/> <column name="PROBABILITY" valueNumeric="50"/> @@ -68,7 +68,7 @@ </insert> <insert tableName="salesproject"> <column name="VOLUME" valueNumeric="450000.00"/> - <column name="PHASE" value="SALPROJPHASEMQC"/> + <column name="PHASE" value="SALPROJPHASECONTACT"/> <column name="ENDDATE" valueDate="2022-05-22T12:00:00"/> <column name="SALESPROJECTID" value="ef7f4726-4476-4f59-97c2-706dc1e0046f"/> <column name="PROBABILITY" valueNumeric="25"/> diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/weblink.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/weblink.xml new file mode 100644 index 0000000000000000000000000000000000000000..a5f7556599f15b7058a3848a168f7445ccda97d0 --- /dev/null +++ b/.liquibase/Data_alias/basic/_demoData/generatedData/weblink.xml @@ -0,0 +1,70 @@ +<?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-4.1.xsd"> + <changeSet author="m.groppe" id="6b010229-fa19-469c-b58d-2dcb6fea318e"> + <insert tableName="weblink"> + <column name="WEBLINKID" value="1b192d03-a489-4b7d-ae5d-8e2e7a28d08e"/> + <column name="URL" value="https://www.adito.de/software/xrm.html"/> + <column name="LINKTYPE" value="WEBLINK_EMAIL"/> + <column name="PLACEHOLDER" value="adito_xrm"/> + <column name="SCORE" valueNumeric="0"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2021-04-28T11:17:34"/> + <column name="USER_EDIT"/> + <column name="DATE_EDIT"/> + <column name="ISREDIRECT" valueNumeric="1"/> + <column name="WORKFLOWPROCESSDEFINITION_KEY"/> + </insert> + <insert tableName="weblink"> + <column name="WEBLINKID" value="2f6f05ed-9e6a-4877-a47a-f69def7b5a70"/> + <column name="URL" value="https://www.adito.de/fileadmin/user_upload/pixel.png"/> + <column name="LINKTYPE" value="WEBLINK_EMAIL"/> + <column name="PLACEHOLDER" value="pixel"/> + <column name="SCORE" valueNumeric="0"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2021-04-27T10:40:46"/> + <column name="USER_EDIT"/> + <column name="DATE_EDIT"/> + <column name="ISREDIRECT" valueNumeric="1"/> + <column name="WORKFLOWPROCESSDEFINITION_KEY"/> + </insert> + <insert tableName="weblink"> + <column name="WEBLINKID" value="9517e509-0a2c-4afc-981a-0252b9e0d8db"/> + <column name="URL" value="https://www.adito.de/knowhow/blog/"/> + <column name="LINKTYPE" value="WEBLINK_EMAIL"/> + <column name="PLACEHOLDER" value="adito_blog"/> + <column name="SCORE" valueNumeric="0"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2021-04-27T07:47:07"/> + <column name="USER_EDIT"/> + <column name="DATE_EDIT"/> + <column name="ISREDIRECT" valueNumeric="1"/> + <column name="WORKFLOWPROCESSDEFINITION_KEY"/> + </insert> + <insert tableName="weblink"> + <column name="WEBLINKID" value="c2c971b9-9836-44a9-8d9f-bf83366399c4"/> + <column name="URL" value="https://www.adito.de/knowhow/webinare.html"/> + <column name="LINKTYPE" value="WEBLINK_EMAIL"/> + <column name="PLACEHOLDER" value="adito_webinare"/> + <column name="SCORE" valueNumeric="0"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2021-04-27T07:55:57"/> + <column name="USER_EDIT"/> + <column name="DATE_EDIT"/> + <column name="ISREDIRECT" valueNumeric="1"/> + <column name="WORKFLOWPROCESSDEFINITION_KEY"/> + </insert> + <insert tableName="weblink"> + <column name="WEBLINKID" value="f3997238-50f8-446e-acb3-2a58a5fb5002"/> + <column name="URL" value="http://www.adito.de"/> + <column name="LINKTYPE" value="WEBLINK_EMAIL"/> + <column name="PLACEHOLDER" value="adito_homepage"/> + <column name="SCORE" valueNumeric="0"/> + <column name="USER_NEW" value="Admin"/> + <column name="DATE_NEW" valueDate="2021-04-27T07:32:15"/> + <column name="USER_EDIT"/> + <column name="DATE_EDIT"/> + <column name="ISREDIRECT" valueNumeric="1"/> + <column name="WORKFLOWPROCESSDEFINITION_KEY"/> + </insert> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/workflows/blob/rejectEmailCommunication.png b/.liquibase/Data_alias/basic/workflows/blob/rejectEmailCommunication.png new file mode 100644 index 0000000000000000000000000000000000000000..1a57cd6ad72356a822ba9c1f4240ba38a474d12d Binary files /dev/null and b/.liquibase/Data_alias/basic/workflows/blob/rejectEmailCommunication.png differ diff --git a/.liquibase/Data_alias/basic/workflows/blob/rejectEmailCommunication.xml b/.liquibase/Data_alias/basic/workflows/blob/rejectEmailCommunication.xml new file mode 100644 index 0000000000000000000000000000000000000000..047d8bf45f2e5b7dc736e6d6c43e2eb913d6b092 --- /dev/null +++ b/.liquibase/Data_alias/basic/workflows/blob/rejectEmailCommunication.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.flowable.org/processdef"> + <process id="rejectEmailCommunication" name="Reject email communication" isExecutable="true"> + <startEvent id="startEvent1" flowable:formFieldValidation="true"></startEvent> + <serviceTask id="sid-267CEC4E-48FD-4844-B14C-F1B01D5BD16E" name="Set communication setting" flowable:class="de.adito.aditoweb.server.neon.workflow.WorkflowServiceTask"> + <extensionElements> + <flowable:field name="jditoProcess"> + <flowable:string><![CDATA[SetCommunicationSetting_workflowService]]></flowable:string> + </flowable:field> + <flowable:field name="taskVariables"> + <flowable:string><![CDATA[{"channelType":{"value":"COMMUNICATIONCHANNEL_COMMUNICATION"},"medium":{"value":"CAMPAIGNEMAIL"},"status":{"value":"COMMUNICATION_REJECTED"}}]]></flowable:string> + </flowable:field> + </extensionElements> + </serviceTask> + <sequenceFlow id="sid-649F5C57-5FAB-43A7-9019-944DC4D56FDD" sourceRef="startEvent1" targetRef="sid-267CEC4E-48FD-4844-B14C-F1B01D5BD16E"></sequenceFlow> + <endEvent id="sid-E6C948F0-8E59-400F-A308-22C66076A405"></endEvent> + <sequenceFlow id="sid-1F8F23D4-9CDB-49A6-A04B-980EC0A51233" sourceRef="sid-267CEC4E-48FD-4844-B14C-F1B01D5BD16E" targetRef="sid-E6C948F0-8E59-400F-A308-22C66076A405"></sequenceFlow> + </process> + <bpmndi:BPMNDiagram id="BPMNDiagram_rejectEmailCommunication"> + <bpmndi:BPMNPlane bpmnElement="rejectEmailCommunication" id="BPMNPlane_rejectEmailCommunication"> + <bpmndi:BPMNShape bpmnElement="startEvent1" id="BPMNShape_startEvent1"> + <omgdc:Bounds height="30.0" width="30.0" x="100.0" y="163.0"></omgdc:Bounds> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape bpmnElement="sid-267CEC4E-48FD-4844-B14C-F1B01D5BD16E" id="BPMNShape_sid-267CEC4E-48FD-4844-B14C-F1B01D5BD16E"> + <omgdc:Bounds height="80.0" width="100.0" x="175.0" y="138.0"></omgdc:Bounds> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape bpmnElement="sid-E6C948F0-8E59-400F-A308-22C66076A405" id="BPMNShape_sid-E6C948F0-8E59-400F-A308-22C66076A405"> + <omgdc:Bounds height="28.0" width="28.0" x="320.0" y="164.0"></omgdc:Bounds> + </bpmndi:BPMNShape> + <bpmndi:BPMNEdge bpmnElement="sid-1F8F23D4-9CDB-49A6-A04B-980EC0A51233" id="BPMNEdge_sid-1F8F23D4-9CDB-49A6-A04B-980EC0A51233"> + <omgdi:waypoint x="274.95000000000005" y="178.0"></omgdi:waypoint> + <omgdi:waypoint x="320.0" y="178.0"></omgdi:waypoint> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge bpmnElement="sid-649F5C57-5FAB-43A7-9019-944DC4D56FDD" id="BPMNEdge_sid-649F5C57-5FAB-43A7-9019-944DC4D56FDD"> + <omgdi:waypoint x="129.9499984899576" y="178.0"></omgdi:waypoint> + <omgdi:waypoint x="174.9999999999917" y="178.0"></omgdi:waypoint> + </bpmndi:BPMNEdge> + </bpmndi:BPMNPlane> + </bpmndi:BPMNDiagram> +</definitions> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/workflows/blob/unsubscribeInterest.png b/.liquibase/Data_alias/basic/workflows/blob/unsubscribeInterest.png new file mode 100644 index 0000000000000000000000000000000000000000..98a5d517c16d44b15fd89c9ab29cc85954e47264 Binary files /dev/null and b/.liquibase/Data_alias/basic/workflows/blob/unsubscribeInterest.png differ diff --git a/.liquibase/Data_alias/basic/workflows/blob/unsubscribeInterest.xml b/.liquibase/Data_alias/basic/workflows/blob/unsubscribeInterest.xml new file mode 100644 index 0000000000000000000000000000000000000000..8dc3661838293bf6a3dcbd7c56762896bc6da182 --- /dev/null +++ b/.liquibase/Data_alias/basic/workflows/blob/unsubscribeInterest.xml @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?> +<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.flowable.org/processdef"> + <process id="unsubscribeInterest" name="Unsubscribe Interest" isExecutable="true"> + <startEvent id="startEvent1" flowable:formFieldValidation="true"></startEvent> + <serviceTask id="sid-82168C15-ACC8-4369-A92F-A4F8A82EDDD7" name="Change interest link" flowable:class="de.adito.aditoweb.server.neon.workflow.WorkflowServiceTask"> + <extensionElements> + <flowable:field name="jditoProcess"> + <flowable:string><![CDATA[SetInterestLink_workflowService]]></flowable:string> + </flowable:field> + </extensionElements> + </serviceTask> + <sequenceFlow id="sid-7C8AD2EA-BD4C-4251-B369-DC80DA765953" sourceRef="startEvent1" targetRef="sid-82168C15-ACC8-4369-A92F-A4F8A82EDDD7"></sequenceFlow> + <endEvent id="sid-7C072C86-5A44-4054-833B-F7B39838C118"></endEvent> + <sequenceFlow id="sid-692F5534-B5CD-45AA-84DE-4BD5B0AC18BD" sourceRef="sid-82168C15-ACC8-4369-A92F-A4F8A82EDDD7" targetRef="sid-7C072C86-5A44-4054-833B-F7B39838C118"></sequenceFlow> + </process> + <bpmndi:BPMNDiagram id="BPMNDiagram_unsubscribeInterest"> + <bpmndi:BPMNPlane bpmnElement="unsubscribeInterest" id="BPMNPlane_unsubscribeInterest"> + <bpmndi:BPMNShape bpmnElement="startEvent1" id="BPMNShape_startEvent1"> + <omgdc:Bounds height="30.0" width="30.0" x="100.0" y="163.0"></omgdc:Bounds> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape bpmnElement="sid-82168C15-ACC8-4369-A92F-A4F8A82EDDD7" id="BPMNShape_sid-82168C15-ACC8-4369-A92F-A4F8A82EDDD7"> + <omgdc:Bounds height="80.0" width="100.0" x="175.0" y="138.0"></omgdc:Bounds> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape bpmnElement="sid-7C072C86-5A44-4054-833B-F7B39838C118" id="BPMNShape_sid-7C072C86-5A44-4054-833B-F7B39838C118"> + <omgdc:Bounds height="28.0" width="28.0" x="332.5" y="164.0"></omgdc:Bounds> + </bpmndi:BPMNShape> + <bpmndi:BPMNEdge bpmnElement="sid-7C8AD2EA-BD4C-4251-B369-DC80DA765953" id="BPMNEdge_sid-7C8AD2EA-BD4C-4251-B369-DC80DA765953"> + <omgdi:waypoint x="129.9499984899576" y="178.0"></omgdi:waypoint> + <omgdi:waypoint x="174.9999999999917" y="178.0"></omgdi:waypoint> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge bpmnElement="sid-692F5534-B5CD-45AA-84DE-4BD5B0AC18BD" id="BPMNEdge_sid-692F5534-B5CD-45AA-84DE-4BD5B0AC18BD"> + <omgdi:waypoint x="274.94999999998043" y="178.0"></omgdi:waypoint> + <omgdi:waypoint x="332.5" y="178.0"></omgdi:waypoint> + </bpmndi:BPMNEdge> + </bpmndi:BPMNPlane> + </bpmndi:BPMNDiagram> +</definitions> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/workflows/changelog.xml b/.liquibase/Data_alias/basic/workflows/changelog.xml new file mode 100644 index 0000000000000000000000000000000000000000..e1aef03f97be040168ce8e1bc271239e4843b494 --- /dev/null +++ b/.liquibase/Data_alias/basic/workflows/changelog.xml @@ -0,0 +1,7 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <include relativeToChangelogFile="true" file="insert_rejectEmailCommunication.xml"/> + <include relativeToChangelogFile="true" file="insert_unsubscribeInterest.xml"/> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/workflows/insert_rejectEmailCommunication.xml b/.liquibase/Data_alias/basic/workflows/insert_rejectEmailCommunication.xml new file mode 100644 index 0000000000000000000000000000000000000000..792553fc3d08ec14befc3f38dae31671fd0825d2 --- /dev/null +++ b/.liquibase/Data_alias/basic/workflows/insert_rejectEmailCommunication.xml @@ -0,0 +1,15 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="s.listl" id="e9e5f42b-5df9-430b-aaad-52ded69db85d"> + <insert tableName="STANDARD_WORKFLOW"> + <column name="STANDARD_WORKFLOWID" value="59d620ab-6dfc-4da7-b0ad-226fa78949e4"/> + <column name="PROCESSKEY" value="rejectEmailCommunication"/> + <column name="NAME" value="Reject email communication"/> + <column name="DESCRIPTION" value="Sets a communication setting to reject emails"/> + <column name="PROCESSXML" valueBlobFile="blob/rejectEmailCommunication.xml"/> + <column name="DIAGRAM" valueBlobFile="blob/rejectEmailCommunication.png"/> + </insert> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/workflows/insert_unsubscribeInterest.xml b/.liquibase/Data_alias/basic/workflows/insert_unsubscribeInterest.xml new file mode 100644 index 0000000000000000000000000000000000000000..4d90b4695239d75cb26cdc9792aae20dd43a13ee --- /dev/null +++ b/.liquibase/Data_alias/basic/workflows/insert_unsubscribeInterest.xml @@ -0,0 +1,15 @@ +<?xml version="1.1" encoding="UTF-8" standalone="no"?> +<databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> + <changeSet author="s.listl" id="608978ed-2471-4c46-85cf-eeab044025b1"> + <insert tableName="STANDARD_WORKFLOW"> + <column name="STANDARD_WORKFLOWID" value="b14f9d59-b896-433c-a515-c6f209924efd"/> + <column name="PROCESSKEY" value="unsubscribeInterest"/> + <column name="NAME" value="Unsubscribe Interest"/> + <column name="DESCRIPTION" value="Sets an interest link with the status 'unsubscribed'"/> + <column name="PROCESSXML" valueBlobFile="blob/unsubscribeInterest.xml"/> + <column name="DIAGRAM" valueBlobFile="blob/unsubscribeInterest.png"/> + </insert> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/changelog.xml b/.liquibase/Data_alias/changelog.xml index c46a164da2f3cc26f2336d2aba78a1d54067672e..5266ede8f1709637ccf87f5edfeb27bf5b838afe 100644 --- a/.liquibase/Data_alias/changelog.xml +++ b/.liquibase/Data_alias/changelog.xml @@ -22,7 +22,10 @@ <include relativeToChangelogFile="true" file="basic/2021.0.0/changelog.xml"/> <include relativeToChangelogFile="true" file="basic/2021.0.1/changelog.xml"/> <include relativeToChangelogFile="true" file="basic/2021.0.2/changelog.xml"/> + <include relativeToChangelogFile="true" file="basic/2021.0.3/changelog.xml"/> + <include relativeToChangelogFile="true" file="basic/2021.1.0/changelog.xml"/> + <include relativeToChangelogFile="true" file="basic/workflows/changelog.xml" context="workflow"/> <!--enable this only when you definetly want to overwrite the existing data with demo records:--> - <!--<include relativeToChangelogFile="true" file="basic/_demoData/changelog.xml" context="example"/>--> + <include relativeToChangelogFile="true" file="basic/_demoData/changelog.xml" context="example"/> </databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/changelog.xml b/.liquibase/_____SYSTEMALIAS/basic/_demoData/changelog.xml index 96ebb69f9517fc57a458bd60374c93c74c4a8a41..35007bbefdfd5e208633877d3bf80d59544410be 100644 --- a/.liquibase/_____SYSTEMALIAS/basic/_demoData/changelog.xml +++ b/.liquibase/_____SYSTEMALIAS/basic/_demoData/changelog.xml @@ -9,6 +9,4 @@ <include relativeToChangelogFile="true" file="example_asys_users/Herbert_Obermeier.xml"/> <include relativeToChangelogFile="true" file="example_asys_users/Lisa_Sommer.xml"/> <include relativeToChangelogFile="true" file="example_asys_users/Susanne_Lustig.xml"/> - - <include relativeToChangelogFile="true" file="example_workflows/OfferCheck.xml"/> </databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/insert_asys_users-admin.xml b/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/insert_asys_users-admin.xml index 78c7b235bd72a71679d121cac1e8dc31a59256a6..a05e5910ca511396ca56c60f745143bd0b3876ce 100644 --- a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/insert_asys_users-admin.xml +++ b/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_asys_users/insert_asys_users-admin.xml @@ -145,6 +145,15 @@ <column name="PROPKEY" value="roleNames"/> <column name="DATE_NEW" valueDate="2019-07-12T02:00:00"/> </insert> + <insert tableName="ASYS_USERS"> + <column name="GROUPID" value="ROLE"/> + <column name="NAME" value="_____USER_bcdfb521-c7d0-4ef1-8916-78e7d3232046"/> + <column name="DATE_EDIT" valueDate="2021-03-23T16:09:00"/> + <column name="ID" value="1ac7f51f-4e3d-4af3-857a-add69502aaaa"/> + <column name="PROPVAL" value="PROJECT_DSGVO"/> + <column name="PROPKEY" value="roleNames"/> + <column name="DATE_NEW" valueDate="2021-03-23T16:09:00"/> + </insert> <insert tableName="ASYS_USERS"> <column name="GROUPID" value="PASSWORD"/> <column name="NAME" value="_____USER_bcdfb521-c7d0-4ef1-8916-78e7d3232046"/> diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_workflows/ACT_GE_BYTEARRAY.xml b/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_workflows/ACT_GE_BYTEARRAY.xml deleted file mode 100644 index 8c57c1502c1fe15b33856c742dd297ded402f722..0000000000000000000000000000000000000000 --- a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_workflows/ACT_GE_BYTEARRAY.xml +++ /dev/null @@ -1,24 +0,0 @@ -<?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="s.listl" id="3c10fdd02a8ab6b4e351080ca76bf710"> - <preConditions onFail="CONTINUE"> - <tableExists tableName="ACT_GE_BYTEARRAY"/> - </preConditions> - <insert tableName="ACT_GE_BYTEARRAY"> - <column name="ID_" value="2"/> - <column name="DEPLOYMENT_ID_" value="1"/> - <column name="GENERATED_" valueNumeric="0"/> - <column name="REV_" valueNumeric="1"/> - <column name="BYTES_" valueBlobFile="ACT_GE_BYTEARRAY/BYTES_/blobFiles/a01ad77d7c18c3d6ea3b6142c270fa83"/> - <column name="NAME_" value="offerVerification_neubpmn20.xml"/> - </insert> - <insert tableName="ACT_GE_BYTEARRAY"> - <column name="ID_" value="3"/> - <column name="DEPLOYMENT_ID_" value="1"/> - <column name="GENERATED_" valueNumeric="1"/> - <column name="REV_" valueNumeric="1"/> - <column name="BYTES_" valueBlobFile="ACT_GE_BYTEARRAY/BYTES_/blobFiles/cd7557c02d22c531ca4fffb99e7d7609"/> - <column name="NAME_" value="offerVerification_neuofferVerification_neu.png"/> - </insert> - </changeSet> -</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_workflows/ACT_GE_BYTEARRAY/BYTES_/blobFiles/a01ad77d7c18c3d6ea3b6142c270fa83 b/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_workflows/ACT_GE_BYTEARRAY/BYTES_/blobFiles/a01ad77d7c18c3d6ea3b6142c270fa83 deleted file mode 100644 index 2656dbe0f41979ef8354ae36c718965faa34fc77..0000000000000000000000000000000000000000 --- a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_workflows/ACT_GE_BYTEARRAY/BYTES_/blobFiles/a01ad77d7c18c3d6ea3b6142c270fa83 +++ /dev/null @@ -1,70 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.flowable.org/processdef"> - <process id="offerVerification_neu" name="Angebotsprüfung_neu" isExecutable="true"> - <dataObject id="sum" name="sum" itemSubjectRef="xsd:int"></dataObject> - <startEvent id="startEvent1" flowable:formFieldValidation="true"></startEvent> - <userTask id="verification" name="Angebot freigeben" flowable:formFieldValidation="true"> - <extensionElements> - <flowable:formProperty id="approved" name="Freigabe" type="boolean" required="true"></flowable:formProperty> - </extensionElements> - </userTask> - <serviceTask id="sid-CC87EC6A-DEAC-4037-8C9E-DF9D4578227E" name="Angebot aktualisieren" flowable:class="de.adito.aditoweb.server.neon.workflow.WorkflowServiceTask"> - <extensionElements> - <flowable:field name="jditoProcess"> - <flowable:string><![CDATA[UpdateOffer_workflowService]]></flowable:string> - </flowable:field> - </extensionElements> - </serviceTask> - <endEvent id="sid-C0495BDF-7F36-4270-AD93-A1F4877DED25"></endEvent> - <sequenceFlow id="sid-E2FF58FD-02C1-42DE-ADD8-FC211E5C0A00" sourceRef="sid-CC87EC6A-DEAC-4037-8C9E-DF9D4578227E" targetRef="sid-C0495BDF-7F36-4270-AD93-A1F4877DED25"></sequenceFlow> - <exclusiveGateway id="sid-C15C35AB-CFCD-4D69-9CCF-98ED4F8C8155"></exclusiveGateway> - <sequenceFlow id="sid-78F2A2E7-D8F9-47B9-8B27-ECAE653D9A4F" sourceRef="verification" targetRef="sid-CC87EC6A-DEAC-4037-8C9E-DF9D4578227E"></sequenceFlow> - <sequenceFlow id="sid-BE050925-7B3F-4895-B1DE-3CD54543D021" sourceRef="sid-C15C35AB-CFCD-4D69-9CCF-98ED4F8C8155" targetRef="verification"> - <conditionExpression xsi:type="tFormalExpression"><![CDATA[${sum > 1000}]]></conditionExpression> - </sequenceFlow> - <sequenceFlow id="sid-C5DDB6C6-6497-40EB-899A-9413ADFEC75B" sourceRef="sid-C15C35AB-CFCD-4D69-9CCF-98ED4F8C8155" targetRef="sid-CC87EC6A-DEAC-4037-8C9E-DF9D4578227E"> - <conditionExpression xsi:type="tFormalExpression"><![CDATA[${sum < 1001}]]></conditionExpression> - </sequenceFlow> - <sequenceFlow id="sid-168B4904-364F-420F-9DAF-39EA1C0F879F" sourceRef="startEvent1" targetRef="sid-C15C35AB-CFCD-4D69-9CCF-98ED4F8C8155"></sequenceFlow> - </process> - <bpmndi:BPMNDiagram id="BPMNDiagram_offerVerification_neu"> - <bpmndi:BPMNPlane bpmnElement="offerVerification_neu" id="BPMNPlane_offerVerification_neu"> - <bpmndi:BPMNShape bpmnElement="startEvent1" id="BPMNShape_startEvent1"> - <omgdc:Bounds height="30.0" width="30.0" x="725.0000000000003" y="450.00000000000006"></omgdc:Bounds> - </bpmndi:BPMNShape> - <bpmndi:BPMNShape bpmnElement="verification" id="BPMNShape_verification"> - <omgdc:Bounds height="80.0" width="99.99999999999994" x="450.00000000000006" y="138.00000000000014"></omgdc:Bounds> - </bpmndi:BPMNShape> - <bpmndi:BPMNShape bpmnElement="sid-CC87EC6A-DEAC-4037-8C9E-DF9D4578227E" id="BPMNShape_sid-CC87EC6A-DEAC-4037-8C9E-DF9D4578227E"> - <omgdc:Bounds height="80.0" width="100.0" x="690.0000000000001" y="138.00000000000003"></omgdc:Bounds> - </bpmndi:BPMNShape> - <bpmndi:BPMNShape bpmnElement="sid-C0495BDF-7F36-4270-AD93-A1F4877DED25" id="BPMNShape_sid-C0495BDF-7F36-4270-AD93-A1F4877DED25"> - <omgdc:Bounds height="28.0" width="28.0" x="915.0000000000001" y="164.0000000000001"></omgdc:Bounds> - </bpmndi:BPMNShape> - <bpmndi:BPMNShape bpmnElement="sid-C15C35AB-CFCD-4D69-9CCF-98ED4F8C8155" id="BPMNShape_sid-C15C35AB-CFCD-4D69-9CCF-98ED4F8C8155"> - <omgdc:Bounds height="40.0" width="40.0" x="720.0000000000002" y="330.0000000000001"></omgdc:Bounds> - </bpmndi:BPMNShape> - <bpmndi:BPMNEdge bpmnElement="sid-C5DDB6C6-6497-40EB-899A-9413ADFEC75B" id="BPMNEdge_sid-C5DDB6C6-6497-40EB-899A-9413ADFEC75B"> - <omgdi:waypoint x="740.0000000000002" y="330.0000000000001"></omgdi:waypoint> - <omgdi:waypoint x="740.0000000000001" y="217.95000000000005"></omgdi:waypoint> - </bpmndi:BPMNEdge> - <bpmndi:BPMNEdge bpmnElement="sid-168B4904-364F-420F-9DAF-39EA1C0F879F" id="BPMNEdge_sid-168B4904-364F-420F-9DAF-39EA1C0F879F"> - <omgdi:waypoint x="740.0000000000003" y="450.00000000000006"></omgdi:waypoint> - <omgdi:waypoint x="740.0000000000002" y="369.90863794604013"></omgdi:waypoint> - </bpmndi:BPMNEdge> - <bpmndi:BPMNEdge bpmnElement="sid-BE050925-7B3F-4895-B1DE-3CD54543D021" id="BPMNEdge_sid-BE050925-7B3F-4895-B1DE-3CD54543D021"> - <omgdi:waypoint x="500.0" y="350.0"></omgdi:waypoint> - <omgdi:waypoint x="500.0" y="350.0"></omgdi:waypoint> - <omgdi:waypoint x="500.0" y="217.95000000000016"></omgdi:waypoint> - </bpmndi:BPMNEdge> - <bpmndi:BPMNEdge bpmnElement="sid-E2FF58FD-02C1-42DE-ADD8-FC211E5C0A00" id="BPMNEdge_sid-E2FF58FD-02C1-42DE-ADD8-FC211E5C0A00"> - <omgdi:waypoint x="789.9499999998825" y="178.00000000000009"></omgdi:waypoint> - <omgdi:waypoint x="915.0000000000001" y="178.0000000000001"></omgdi:waypoint> - </bpmndi:BPMNEdge> - <bpmndi:BPMNEdge bpmnElement="sid-78F2A2E7-D8F9-47B9-8B27-ECAE653D9A4F" id="BPMNEdge_sid-78F2A2E7-D8F9-47B9-8B27-ECAE653D9A4F"> - <omgdi:waypoint x="549.95" y="178.00000000000014"></omgdi:waypoint> - <omgdi:waypoint x="620.0" y="178.00000000000006"></omgdi:waypoint> - </bpmndi:BPMNEdge> - </bpmndi:BPMNPlane> - </bpmndi:BPMNDiagram> -</definitions> \ No newline at end of file diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_workflows/ACT_GE_BYTEARRAY/BYTES_/blobFiles/cd7557c02d22c531ca4fffb99e7d7609 b/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_workflows/ACT_GE_BYTEARRAY/BYTES_/blobFiles/cd7557c02d22c531ca4fffb99e7d7609 deleted file mode 100644 index fcb85e43d38c5e2773c08844bacdc28be2f56f11..0000000000000000000000000000000000000000 Binary files a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_workflows/ACT_GE_BYTEARRAY/BYTES_/blobFiles/cd7557c02d22c531ca4fffb99e7d7609 and /dev/null differ diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_workflows/ACT_RE_PROCDEF.xml b/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_workflows/ACT_RE_PROCDEF.xml deleted file mode 100644 index 96cfbe09146d3d354f46f773abcb7ef68293c0c3..0000000000000000000000000000000000000000 --- a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_workflows/ACT_RE_PROCDEF.xml +++ /dev/null @@ -1,23 +0,0 @@ -<?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="s.listl" id="a5747f71a32ac577810d7f077e05adb1"> - <preConditions onFail="CONTINUE"> - <tableExists tableName="ACT_RE_PROCDEF"/> - </preConditions> - <insert tableName="ACT_RE_PROCDEF"> - <column name="DGRM_RESOURCE_NAME_" value="offerVerification_neuofferVerification_neu.png"/> - <column name="HAS_START_FORM_KEY_" valueNumeric="0"/> - <column name="DERIVED_VERSION_" valueNumeric="0"/> - <column name="ID_" value="offerVerification_neu:1:4"/> - <column name="REV_" valueNumeric="1"/> - <column name="VERSION_" valueNumeric="1"/> - <column name="NAME_" value="Angebotsprüfung_neu"/> - <column name="SUSPENSION_STATE_" valueNumeric="1"/> - <column name="KEY_" value="offerVerification_neu"/> - <column name="CATEGORY_" value="http://www.flowable.org/processdef"/> - <column name="DEPLOYMENT_ID_" value="1"/> - <column name="RESOURCE_NAME_" value="offerVerification_neubpmn20.xml"/> - <column name="HAS_GRAPHICAL_NOTATION_" valueNumeric="1"/> - </insert> - </changeSet> -</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/IndexSearch.xml b/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/IndexSearch.xml new file mode 100644 index 0000000000000000000000000000000000000000..a623df3e3c988cbba953eaafb7167c734354e740 --- /dev/null +++ b/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/IndexSearch.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> +<aliasConfig xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/aliasConfig/1.1.8"> + <name>IndexSearch_default</name> + <title>Local Solr Index</title> + <serverId>default</serverId> + <definitionName>IndexSearch</definitionName> + <aliasConfigSub> + <aliasSubIndexSearch> + <remoteSolrUrl>http://localhost:8983/solr</remoteSolrUrl> + <remoteZooKeeperHost>localhost:9983</remoteZooKeeperHost> + </aliasSubIndexSearch> + </aliasConfigSub> +</aliasConfig> diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/RecordContainerCache.xml b/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/RecordContainerCache.xml index 7d6b9e32c03a9ca576ca148e425dbdab920121ad..3ad81ecaa01334128b5376d841b931eb420ceaf3 100644 --- a/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/RecordContainerCache.xml +++ b/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/RecordContainerCache.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<aliasConfig 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/aliasConfig/1.1.7"> +<aliasConfig xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/aliasConfig/1.1.8"> <name>RecordContainerCache_default</name> <serverId>default</serverId> <definitionName>RecordContainerCache</definitionName> diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/_____configuration.xml b/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/_____configuration.xml index 491f54d1482a594ba176e5794d8ddb7c9d0984cd..c1a70a1b00f9e3071b7024e2a24331f2b4039782 100644 --- a/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/_____configuration.xml +++ b/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/_____configuration.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> -<aliasConfig 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/aliasConfig/1.1.7"> - <name>_____CONFIGURATION</name> +<aliasConfig xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/aliasConfig/1.1.8"> + <name>_____CONFIGURATION_default</name> <serverId>default</serverId> <definitionName>_____CONFIGURATION</definitionName> <aliasConfigSub> @@ -8,6 +8,7 @@ <databaseAuditEnabled v="true" /> <databaseAuditProcessUser v="Admin" /> <indexsearchEnabled v="true" /> + <indexsearchAlias>IndexSearch</indexsearchAlias> <loggingConsoleEnabled v="true" /> <loggingFileEnabled v="true" /> <loggingRemoteEnabled v="false" /> diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/data_alias.xml b/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/data_alias.xml index 12db6be6309eca767726c7e7daf5c010bca432f4..9b2f7c7e5c448d31771629363856b04542fca8b2 100644 --- a/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/data_alias.xml +++ b/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/data_alias.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> -<aliasConfig 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/aliasConfig/1.1.7"> - <name>f50ee138-12d9-420d-a4f9-9b8257e207e4</name> +<aliasConfig xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/aliasConfig/1.1.8"> + <name>Data_alias_default</name> <description>jdbc:derby://localhost:1527/basic_data</description> <serverId>default</serverId> <definitionName>Data_alias</definitionName> diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/data_alias_noAudit.xml b/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/data_alias_noAudit.xml new file mode 100644 index 0000000000000000000000000000000000000000..f9c31af1d8eb2f99f6ac92a846286459a826c9cd --- /dev/null +++ b/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/data_alias_noAudit.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8"?> +<aliasConfig xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/aliasConfig/1.1.8"> + <name>Data_alias_noAudit_default</name> + <description>jdbc:derby://localhost:1527/basic_data</description> + <serverId>default</serverId> + <definitionName>Data_alias_noAudit</definitionName> + <aliasConfigSub> + <aliasSubDbDerby> + <user>ADITO</user> + <password>adito</password> + <host>localhost</host> + <database>basic_data</database> + <schema>ADITO</schema> + </aliasSubDbDerby> + </aliasConfigSub> +</aliasConfig> diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/defaultDbRepository.xml b/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/defaultDbRepository.xml index ef5ab4cdee352c825851b1e6f63300f5629f5628..08bcb8b133ac21d6af750c2aff48df601c0ddc0e 100644 --- a/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/defaultDbRepository.xml +++ b/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/defaultDbRepository.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<aliasConfig 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/aliasConfig/1.1.7"> +<aliasConfig xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/aliasConfig/1.1.8"> <name>defaultDbRepository_default</name> <serverId>default</serverId> <definitionName>defaultDbRepository</definitionName> diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/mailServerIMAP.xml b/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/mailServerIMAP.xml index 9c090e2837f813c87a6555875d33e46b56b194f5..dbcd5af49d1c652384c1cdb418ddf2c93189e46f 100644 --- a/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/mailServerIMAP.xml +++ b/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/mailServerIMAP.xml @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<aliasConfig 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/aliasConfig/1.1.7"> +<aliasConfig xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/aliasConfig/1.1.8"> <name>mailServerIMAP_default</name> <serverId>default</serverId> <definitionName>mailServerIMAP</definitionName> diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/data/insert_asys_aliasconfig.xml b/.liquibase/_____SYSTEMALIAS/basic/init/data/insert_asys_aliasconfig.xml index 017cb8a587875706dcd111a717478dd086ab69b2..61a2119e84984227c5ce41e80ccb6e607023ab4a 100644 --- a/.liquibase/_____SYSTEMALIAS/basic/init/data/insert_asys_aliasconfig.xml +++ b/.liquibase/_____SYSTEMALIAS/basic/init/data/insert_asys_aliasconfig.xml @@ -10,7 +10,7 @@ <column name="USER_NEW" value="_____DESIGNERANONYM"/> <column name="DATE_NEW" valueDate="2020-09-28T04:50:35"/> <column name="ALIASID" value="Data_alias"/> - <column name="NAME" value="f50ee138-12d9-420d-a4f9-9b8257e207e4"/> + <column name="NAME" value="Data_alias_default"/> <column name="DATE_EDIT" valueDate="2020-09-28T04:50:36"/> <column name="ID" value="0d4296d2-8685-4558-b1f2-0b627ae64fcc"/> </insert> @@ -58,9 +58,35 @@ <column name="USER_NEW" value="_____DESIGNERANONYM"/> <column name="DATE_NEW" valueDate="2020-09-28T04:50:36"/> <column name="ALIASID" value="_____CONFIGURATION"/> - <column name="NAME" value="_____CONFIGURATION"/> + <column name="NAME" value="_____CONFIGURATION_default"/> <column name="DATE_EDIT" valueDate="2020-09-28T04:50:36"/> <column name="ID" value="c1664cb5-c128-4b93-b3e4-274b97d305e6"/> </insert> + <insert tableName="ASYS_ALIASCONFIG"> + <column name="KIND" valueNumeric="105"/> + <column name="DESCRIPTION" value="jdbc:derby://localhost:1527/basic_data"/> + <column name="USER_EDIT" value="_____DESIGNERANONYM"/> + <column name="SERVERID" value="default"/> + <column name="XMLDATA" valueBlobFile="defaultBlob/data_alias_noAudit.xml"/> + <column name="USER_NEW" value="_____DESIGNERANONYM"/> + <column name="DATE_NEW" valueDate="2020-09-28T04:50:35"/> + <column name="ALIASID" value="Data_alias_noAudit"/> + <column name="NAME" value="Data_alias_noAudit_default"/> + <column name="DATE_EDIT" valueDate="2020-09-28T04:50:36"/> + <column name="ID" value="52b8cce2-d023-4925-beaf-95503ae93a2f"/> + </insert> + <insert tableName="ASYS_ALIASCONFIG"> + <column name="KIND" valueNumeric="105"/> + <column name="USER_EDIT" value="_____DESIGNERANONYM"/> + <column name="SERVERID" value="default"/> + <column name="XMLDATA" valueBlobFile="defaultBlob/IndexSearch.xml"/> + <column name="USER_NEW" value="_____DESIGNERANONYM"/> + <column name="DATE_NEW" valueDate="2021-05-27T12:00:00"/> + <column name="ALIASID" value="IndexSearch"/> + <column name="NAME" value="IndexSearch_default"/> + <column name="DATE_EDIT" valueDate="2021-05-27T12:00:00"/> + <column name="ID" value="eeaec12c-7c9e-44df-96c4-344a9b63c3b1"/> + <column name="TITLE" value="Local Solr Index"/> + </insert> </changeSet> </databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/init.xml b/.liquibase/_____SYSTEMALIAS/basic/init/init.xml index 540e5ac07739f0524bb0296de3a9505762c3ee0e..a3ef4613451926ada644d4490e2b18bb421235b2 100644 --- a/.liquibase/_____SYSTEMALIAS/basic/init/init.xml +++ b/.liquibase/_____SYSTEMALIAS/basic/init/init.xml @@ -1,5 +1,7 @@ <?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"> + + <include relativeToChangelogFile="true" file="struct/create_asys_audit.xml"/> <include relativeToChangelogFile="true" file="struct/create_asys_aliasconfig.xml"/> <include relativeToChangelogFile="true" file="struct/create_asys_binaries.xml"/> <include relativeToChangelogFile="true" file="struct/create_asys_dashletconfigurations.xml"/> @@ -29,5 +31,6 @@ <include relativeToChangelogFile="true" file="data/insert_asys_system.xml"/> <include relativeToChangelogFile="true" file="data/insert_asys_permissionset.xml"/> <include relativeToChangelogFile="true" file="data/insert_asys_permission.xml"/> - <include relativeToChangelogFile="true" file="data/insert_asys_permissionaction.xml"/> + <include relativeToChangelogFile="true" file="data/insert_asys_permissionaction.xml"/> + </databaseChangeLog> diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_audit.xml b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_audit.xml new file mode 100644 index 0000000000000000000000000000000000000000..925f1cc139a3ab4128915d07d41d925f05aca4cd --- /dev/null +++ b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_audit.xml @@ -0,0 +1,21 @@ +<?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.schloder" id="Xcb1ff99-55bd-4ebc-8137-ec05b4cacbd7"> + <createTable tableName="ASYS_AUDIT"> + <column name="ACOLUMNNAME" type="VARCHAR(217)"/> + <column name="ALIAS" type="VARCHAR(255)"/> + <column name="ATABLENAME" type="VARCHAR(127)"/> + <column name="ATIMESTAMP" type="DATETIME"/> + <column name="AUSER" type="VARCHAR(255)"/> + <column name="DATASETID" type="VARCHAR(1023)"/> + <column name="DATASETNEWVALUE_BLOB" type="LONGBLOB"/> + <column name="DATASETNEWVALUE_CLOB" type="TEXT"/> + <column name="DATASETNEWVALUE_STRING" type="VARCHAR(1023)"/> + <column defaultValueComputed="CURRENT_TIMESTAMP" name="LOGTIME" type="TIMESTAMP" /> + <column name="LOGTYPE" type="INT"/> + <column name="LOGWRITERUID" type="VARCHAR(127)"/> + <column name="SQLACTION" type="CHAR(1)"/> + </createTable> + + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_binaries.xml b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_binaries.xml index d700aacd49d12879155c7d8f10b08f3d619b7345..7f3a311100cc02768ba1001b28890bd9aacbdaf6 100644 --- a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_binaries.xml +++ b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_binaries.xml @@ -15,7 +15,7 @@ <column name="TABLENAME" type="NVARCHAR(127)"/> <column name="FILENAME" type="NVARCHAR(127)"/> <column name="ROW_ID" type="CHAR(36)"/> - <column name="DESCRIPTION" type="NVARCHAR(127)"/> + <column name="DESCRIPTION" type="NVARCHAR(2048)"/> <column name="KEYWORD" type="VARCHAR(255)"/> <column name="MIMETYPE" type="VARCHAR(127)"/> <column name="PREVIEW" type="LONGBLOB"/> diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_system.xml b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_system.xml index 43355067f98d91449730305ba8c02412ea76eea9..20b554ab742669d8d788aff38789b51cc625cae5 100644 --- a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_system.xml +++ b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_system.xml @@ -5,7 +5,7 @@ <column name="ID" type="CHAR(63)"> <constraints primaryKey="true" primaryKeyName="PK_ASYS_SYSTEM_ID"/> </column> - <column name="DATE_EDIT" type="DATETIME"/> + <column name="DATE_EDIT" type="DATETIME(6)"/> <column name="DATE_NEW" type="DATETIME"/> <column name="USER_EDIT" type="VARCHAR(63)"/> <column name="USER_NEW" type="VARCHAR(63)"/> diff --git a/.liquibase/_____SYSTEMALIAS/basic/mailbridge/mailbridgeUser.xml b/.liquibase/_____SYSTEMALIAS/basic/mailbridge/mailbridgeUser.xml new file mode 100644 index 0000000000000000000000000000000000000000..a247f5de21821f3b34fdec902d5784cde5cdee48 --- /dev/null +++ b/.liquibase/_____SYSTEMALIAS/basic/mailbridge/mailbridgeUser.xml @@ -0,0 +1,75 @@ +<?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-4.1.xsd"> + <changeSet author="s.pongratz" id="b8ccd980-c120-4938-99bc-deb728c6b6c3"> + <insert tableName="ASYS_USERS"> + <column name="ID" value="1e1771ef-4435-4b02-9e58-026d07eb3dcd"/> + <column name="DATE_NEW" valueDate="2021-04-30T13:03:38.877"/> + <column name="DATE_EDIT" valueDate="2021-04-30T13:09:41.313"/> + <column name="NAME" value="_____USER_b9baa774-7239-4844-88f4-cddb2cdb3257"/> + <column name="GROUPID" value="BASIC"/> + <column name="PROPKEY" value="lastModified"/> + <column name="PROPVAL" value="1619780981313"/> + <column name="PROPVAL_CLOB"/> + </insert> + <insert tableName="ASYS_USERS"> + <column name="ID" value="25c3d371-8c2e-4f13-b315-9be499ca3e65"/> + <column name="DATE_NEW" valueDate="2021-04-30T13:03:38.877"/> + <column name="DATE_EDIT" valueDate="2021-04-30T13:03:38.877"/> + <column name="NAME" value="_____USER_b9baa774-7239-4844-88f4-cddb2cdb3257"/> + <column name="GROUPID" value="BASIC"/> + <column name="PROPKEY" value="name"/> + <column name="PROPVAL" value="_____USER_b9baa774-7239-4844-88f4-cddb2cdb3257"/> + <column name="PROPVAL_CLOB"/> + </insert> + <insert tableName="ASYS_USERS"> + <column name="ID" value="b8d4548a-9528-4db9-a122-429b1df4968e"/> + <column name="DATE_NEW" valueDate="2021-04-30T13:03:38.877"/> + <column name="DATE_EDIT" valueDate="2021-04-30T13:09:34.112"/> + <column name="NAME" value="_____USER_b9baa774-7239-4844-88f4-cddb2cdb3257"/> + <column name="GROUPID" value="BASIC"/> + <column name="PROPKEY" value="title"/> + <column name="PROPVAL" value="mailbridge"/> + <column name="PROPVAL_CLOB"/> + </insert> + <insert tableName="ASYS_USERS"> + <column name="ID" value="f634e205-4130-4e9e-8736-28fe41959de6"/> + <column name="DATE_NEW" valueDate="2021-04-30T13:09:21.362"/> + <column name="DATE_EDIT" valueDate="2021-04-30T13:09:21.362"/> + <column name="NAME" value="_____USER_b9baa774-7239-4844-88f4-cddb2cdb3257"/> + <column name="GROUPID" value="BASIC"/> + <column name="PROPKEY" value="email"/> + <column name="PROPVAL" value="mailbridge@domain.local"/> + <column name="PROPVAL_CLOB"/> + </insert> + <insert tableName="ASYS_USERS"> + <column name="ID" value="33cc359d-6d02-454b-8fe3-15ef692a37a1"/> + <column name="DATE_NEW" valueDate="2021-04-30T13:09:21.369"/> + <column name="DATE_EDIT" valueDate="2021-04-30T13:09:21.369"/> + <column name="NAME" value="_____USER_b9baa774-7239-4844-88f4-cddb2cdb3257"/> + <column name="GROUPID" value="BASIC"/> + <column name="PROPKEY" value="isActive"/> + <column name="PROPVAL" value="true"/> + <column name="PROPVAL_CLOB"/> + </insert> + <insert tableName="ASYS_USERS"> + <column name="ID" value="0a9f5363-2d0e-4591-95bd-62beeb952925"/> + <column name="DATE_NEW" valueDate="2021-04-30T13:09:41.315"/> + <column name="DATE_EDIT" valueDate="2021-04-30T13:09:41.315"/> + <column name="NAME" value="_____USER_b9baa774-7239-4844-88f4-cddb2cdb3257"/> + <column name="GROUPID" value="ROLE"/> + <column name="PROPKEY" value="roleNames"/> + <column name="PROPVAL" value="INTERNAL_TECHNICAL"/> + <column name="PROPVAL_CLOB"/> + </insert> + <insert tableName="ASYS_USERS"> + <column name="ID" value="e65c5d62-bfb7-4b67-b7cc-65fe06fb7c81"/> + <column name="DATE_NEW" valueDate="2021-04-30T13:09:11.757"/> + <column name="DATE_EDIT" valueDate="2021-04-30T13:09:11.757"/> + <column name="NAME" value="_____USER_b9baa774-7239-4844-88f4-cddb2cdb3257"/> + <column name="GROUPID" value="BASIC"/> + <column name="PROPKEY" value="calendarID"/> + <column name="PROPVAL" value="mailbridge@domain.local"/> + <column name="PROPVAL_CLOB"/> + </insert> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/_____SYSTEMALIAS/changelog.xml b/.liquibase/_____SYSTEMALIAS/changelog.xml index 0cff9f38ee81bb25310dd733eb038dc903af637e..b7d047b86d8cec85021361dcfe28cd2cc0796350 100644 --- a/.liquibase/_____SYSTEMALIAS/changelog.xml +++ b/.liquibase/_____SYSTEMALIAS/changelog.xml @@ -1,6 +1,7 @@ <?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"> <include relativeToChangelogFile="true" file="basic/init/init.xml"/> + <include relativeToChangelogFile="true" file="basic/mailbridge/mailbridgeUser.xml"/> <include relativeToChangelogFile="true" file="basic/_demoData/changelog.xml" context="example"/> diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod index bf89272bc756faa360048b55075e1fde91cf8d9e..82b7e21c4c0cf5e469cbe1be5a17e61a759d9265 100644 --- a/aliasDefinition/Data_alias/Data_alias.aod +++ b/aliasDefinition/Data_alias/Data_alias.aod @@ -50,7 +50,7 @@ <name>INFO</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -150,8 +150,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -164,8 +164,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="true" /> <isUnique v="false" /> <index v="false" /> @@ -205,7 +205,7 @@ <name>PICTURE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2004" /> + <columnType v="-4" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -445,8 +445,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -473,8 +473,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="true" /> <isUnique v="false" /> <index v="false" /> @@ -720,8 +720,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -748,8 +748,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="true" /> <isUnique v="false" /> <index v="false" /> @@ -775,7 +775,7 @@ <name>PICTURE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2004" /> + <columnType v="-4" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -1171,6 +1171,20 @@ <title></title> <description></description> </entityFieldDb> + <entityFieldDb> + <name>VALIDATION_RESULT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> </entityFields> </entityDb> <entityDb> @@ -1260,8 +1274,8 @@ <name>ISSTANDARD</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="5" /> - <size v="5" /> + <columnType v="-6" /> + <size v="3" /> <scale v="0" /> <notNull v="true" /> <isUnique v="false" /> @@ -1301,8 +1315,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -1315,8 +1329,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="true" /> <isUnique v="false" /> <index v="false" /> @@ -1377,8 +1391,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -1437,8 +1451,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -1537,8 +1551,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -1556,7 +1570,7 @@ <name>REMARK</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -1677,7 +1691,7 @@ <columnType v="12" /> <size v="100" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="true" /> <index v="true" /> <title>Product number</title> @@ -1793,8 +1807,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -1821,8 +1835,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="true" /> <isUnique v="false" /> <index v="false" /> @@ -1848,7 +1862,7 @@ <name>PICTURE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2004" /> + <columnType v="-4" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -1858,6 +1872,20 @@ <title></title> <description></description> </entityFieldDb> + <entityFieldDb> + <name>DIGITAL</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="1" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> </entityFields> </entityDb> <entityDb> @@ -1882,8 +1910,8 @@ <name>OPTIONAL</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="5" /> - <size v="5" /> + <columnType v="-6" /> + <size v="3" /> <scale v="0" /> <notNull v="true" /> <isUnique v="false" /> @@ -1902,8 +1930,8 @@ <name>TAKEPRICE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="5" /> - <size v="5" /> + <columnType v="-6" /> + <size v="3" /> <scale v="0" /> <notNull v="true" /> <isUnique v="false" /> @@ -1949,7 +1977,7 @@ <name>QUANTITY</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> + <columnType v="3" /> <size v="14" /> <scale v="2" /> <notNull v="false" /> @@ -2049,7 +2077,7 @@ <name>PRICE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> + <columnType v="3" /> <size v="14" /> <scale v="2" /> <notNull v="false" /> @@ -2069,7 +2097,7 @@ <name>VAT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> + <columnType v="3" /> <size v="14" /> <scale v="2" /> <notNull v="false" /> @@ -2162,8 +2190,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -2181,7 +2209,7 @@ <name>FROMQUANTITY</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> + <columnType v="3" /> <size v="14" /> <scale v="2" /> <notNull v="false" /> @@ -2234,8 +2262,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -2339,7 +2367,7 @@ <name>QUANTITY</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> + <columnType v="3" /> <size v="14" /> <scale v="2" /> <notNull v="false" /> @@ -2360,8 +2388,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -2406,8 +2434,8 @@ <name>IN_OUT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="5" /> - <size v="5" /> + <columnType v="-6" /> + <size v="3" /> <scale v="0" /> <notNull v="true" /> <isUnique v="false" /> @@ -2584,7 +2612,7 @@ <name>FLAG</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2004" /> + <columnType v="-4" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -2645,7 +2673,7 @@ <name>VAT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> + <columnType v="3" /> <size v="14" /> <scale v="2" /> <notNull v="false" /> @@ -2671,8 +2699,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -2805,7 +2833,7 @@ <name>NET</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> + <columnType v="3" /> <size v="14" /> <scale v="2" /> <notNull v="false" /> @@ -2830,7 +2858,7 @@ <name>HEADER</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -2892,7 +2920,7 @@ <name>ADDRESS</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -2965,7 +2993,7 @@ <name>INFO</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -2987,8 +3015,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -3015,8 +3043,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="true" /> <isUnique v="false" /> <index v="false" /> @@ -3070,7 +3098,7 @@ <name>FOOTER</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -3112,7 +3140,7 @@ <name>DISCOUNT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> + <columnType v="3" /> <size v="14" /> <scale v="2" /> <notNull v="false" /> @@ -3126,7 +3154,7 @@ <name>DISCOUNTED_NET</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> + <columnType v="3" /> <size v="14" /> <scale v="2" /> <notNull v="false" /> @@ -3140,7 +3168,7 @@ <name>DISCOUNTED_VAT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> + <columnType v="3" /> <size v="14" /> <scale v="2" /> <notNull v="false" /> @@ -3150,6 +3178,34 @@ <title></title> <description></description> </entityFieldDb> + <entityFieldDb> + <name>APPROVAL</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="1" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ACTIONUSER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> </entityFields> </entityDb> <entityDb> @@ -3199,7 +3255,7 @@ <name>PRICE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> + <columnType v="3" /> <size v="14" /> <scale v="2" /> <notNull v="false" /> @@ -3219,7 +3275,7 @@ <name>QUANTITY</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> + <columnType v="3" /> <size v="14" /> <scale v="2" /> <notNull v="false" /> @@ -3239,7 +3295,7 @@ <name>VAT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> + <columnType v="3" /> <size v="14" /> <scale v="2" /> <notNull v="false" /> @@ -3331,7 +3387,7 @@ <name>DISCOUNT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> + <columnType v="3" /> <size v="14" /> <scale v="2" /> <notNull v="false" /> @@ -3371,8 +3427,8 @@ <name>OPTIONAL</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="5" /> - <size v="5" /> + <columnType v="-6" /> + <size v="3" /> <scale v="0" /> <notNull v="true" /> <isUnique v="false" /> @@ -3446,7 +3502,7 @@ <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <title>Assigned to</title> <description></description> <customProperties> @@ -3481,7 +3537,7 @@ <name>INFO</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -3523,8 +3579,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -3542,7 +3598,7 @@ <name>VOLUME</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> + <columnType v="3" /> <size v="14" /> <scale v="2" /> <notNull v="false" /> @@ -3562,7 +3618,7 @@ <name>INFO</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -3583,8 +3639,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -3791,8 +3847,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -3887,7 +3943,7 @@ <name>INFO</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -3944,8 +4000,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="true" /> <isUnique v="false" /> <index v="false" /> @@ -4025,8 +4081,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="true" /> @@ -4045,7 +4101,7 @@ <name>INFO</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -4154,8 +4210,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -4182,8 +4238,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="true" /> <isUnique v="false" /> <index v="false" /> @@ -4209,8 +4265,8 @@ <name>RESPONSIBLE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -4280,7 +4336,7 @@ <name>VAT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> + <columnType v="3" /> <size v="14" /> <scale v="2" /> <notNull v="false" /> @@ -4301,7 +4357,7 @@ <name>FOOTER</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -4322,7 +4378,7 @@ <name>HEADER</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -4365,8 +4421,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -4439,7 +4495,7 @@ <name>NET</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> + <columnType v="3" /> <size v="14" /> <scale v="2" /> <notNull v="false" /> @@ -4554,7 +4610,7 @@ <name>NOTICE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -4576,8 +4632,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -4596,8 +4652,8 @@ <name>CANCELLATION</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="5" /> - <size v="5" /> + <columnType v="-6" /> + <size v="3" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -4623,8 +4679,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -4643,7 +4699,7 @@ <name>DUNNINGTEXT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -4691,8 +4747,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -4789,7 +4845,7 @@ <name>PAYMENTADDRESS</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -4857,7 +4913,7 @@ <name>DELIVERYADDRESS</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -4878,8 +4934,8 @@ <name>ORDERSTATUS</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="5" /> - <size v="5" /> + <columnType v="-6" /> + <size v="3" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -4918,7 +4974,7 @@ <name>DISCOUNTED_VAT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> + <columnType v="3" /> <size v="14" /> <scale v="2" /> <notNull v="false" /> @@ -4932,7 +4988,7 @@ <name>DISCOUNT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> + <columnType v="3" /> <size v="14" /> <scale v="2" /> <notNull v="false" /> @@ -4946,7 +5002,7 @@ <name>DISCOUNTED_NET</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> + <columnType v="3" /> <size v="14" /> <scale v="2" /> <notNull v="false" /> @@ -5005,7 +5061,7 @@ <name>PRICE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> + <columnType v="3" /> <size v="14" /> <scale v="2" /> <notNull v="false" /> @@ -5026,7 +5082,7 @@ <name>QUANTITY</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> + <columnType v="3" /> <size v="14" /> <scale v="2" /> <notNull v="false" /> @@ -5047,7 +5103,7 @@ <name>VAT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> + <columnType v="3" /> <size v="14" /> <scale v="2" /> <notNull v="false" /> @@ -5100,7 +5156,7 @@ <name>DISCOUNT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> + <columnType v="3" /> <size v="14" /> <scale v="2" /> <notNull v="false" /> @@ -5227,7 +5283,7 @@ <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title>Assigned to</title> <description></description> @@ -5278,7 +5334,7 @@ <name>INFO</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -5346,8 +5402,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -5439,7 +5495,7 @@ <name>DESCRIPTION</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -5541,8 +5597,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -5772,7 +5828,7 @@ <name>INFO</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -5987,8 +6043,8 @@ <name>ATTRIBUTE_ACTIVE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="5" /> - <size v="5" /> + <columnType v="-6" /> + <size v="3" /> <scale v="0" /> <notNull v="true" /> <isUnique v="false" /> @@ -6071,7 +6127,7 @@ <name>ATTRIBUTE_INFO</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -6162,8 +6218,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="true" /> @@ -6182,7 +6238,7 @@ <name>NUMBER_VALUE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> + <columnType v="3" /> <size v="14" /> <scale v="2" /> <notNull v="false" /> @@ -6302,8 +6358,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -6330,8 +6386,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="true" /> <isUnique v="false" /> <index v="false" /> @@ -6482,8 +6538,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -6496,8 +6552,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="true" /> <isUnique v="false" /> <index v="false" /> @@ -6556,8 +6612,8 @@ <name>ISESSENTIAL</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="5" /> - <size v="5" /> + <columnType v="-6" /> + <size v="3" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -6661,8 +6717,8 @@ <name>ISACTIVE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="5" /> - <size v="5" /> + <columnType v="-6" /> + <size v="3" /> <scale v="0" /> <notNull v="true" /> <isUnique v="false" /> @@ -6786,8 +6842,8 @@ <name>ISACTIVE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="5" /> - <size v="5" /> + <columnType v="-6" /> + <size v="3" /> <scale v="0" /> <notNull v="true" /> <isUnique v="false" /> @@ -6977,8 +7033,8 @@ <name>BOOL_VALUE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="5" /> - <size v="5" /> + <columnType v="-6" /> + <size v="3" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -7012,7 +7068,7 @@ <name>NUMBER_VALUE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> + <columnType v="3" /> <size v="14" /> <scale v="2" /> <notNull v="false" /> @@ -7075,7 +7131,7 @@ <name>LONG_CHAR_VALUE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -7657,8 +7713,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="true" /> <isUnique v="false" /> <index v="false" /> @@ -7949,8 +8005,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -7969,7 +8025,7 @@ <name>LOCKED</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="16" /> + <columnType v="-7" /> <size v="1" /> <scale v="0" /> <notNull v="true" /> @@ -8058,7 +8114,7 @@ <name>DESCRIPTION</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -8143,8 +8199,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="true" /> <isUnique v="false" /> <index v="true" /> @@ -8191,8 +8247,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -8240,8 +8296,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -8372,8 +8428,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -8407,8 +8463,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="true" /> <isUnique v="false" /> <index v="false" /> @@ -8504,8 +8560,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -8560,8 +8616,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="true" /> <isUnique v="false" /> <index v="false" /> @@ -8677,8 +8733,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -8705,8 +8761,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="true" /> <isUnique v="false" /> <index v="false" /> @@ -8795,8 +8851,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -8844,8 +8900,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="true" /> <isUnique v="false" /> <index v="false" /> @@ -8956,8 +9012,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -8998,8 +9054,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -9067,8 +9123,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -9186,8 +9242,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="true" /> <isUnique v="false" /> <index v="false" /> @@ -9325,8 +9381,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -9360,8 +9416,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="true" /> <isUnique v="false" /> <index v="false" /> @@ -9499,8 +9555,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -9541,8 +9597,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="true" /> <isUnique v="false" /> <index v="false" /> @@ -9568,7 +9624,7 @@ <name>NET</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> + <columnType v="3" /> <size v="14" /> <scale v="2" /> <notNull v="false" /> @@ -9680,7 +9736,7 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <size v="63" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -9693,7 +9749,7 @@ <name>FILTER</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -9721,8 +9777,8 @@ <name>OUTDATED</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="5" /> - <size v="5" /> + <columnType v="-6" /> + <size v="3" /> <scale v="0" /> <notNull v="true" /> <isUnique v="false" /> @@ -9731,6 +9787,48 @@ <title></title> <description></description> </entityFieldDb> + <entityFieldDb> + <name>INDICATORTYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="64" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>FIELDTYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="64" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>FIELD</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="100" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> </entityFields> </entityDb> <entityDb> @@ -9828,7 +9926,7 @@ <columnType v="1" /> <size v="36" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="true" /> <documentation></documentation> @@ -9839,7 +9937,7 @@ <name>SCOREPOINTS</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> + <columnType v="3" /> <size v="14" /> <scale v="2" /> <notNull v="false" /> @@ -9929,9 +10027,65 @@ <name>SCOREPERCENT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> + <columnType v="4" /> <size v="10" /> - <scale v="2" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>FIELDVALUE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>INDICATORTEXT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>INDICATORINTEGER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>INDICATORNUMBER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -9952,7 +10106,7 @@ <description></description> <auditSyncConfig> <name>auditSyncConfig</name> - <auditMode v="0" /> + <auditMode v="2" /> <syncActive v="false" /> <syncComplete v="true" /> <syncDirection v="1" /> @@ -9966,12 +10120,19 @@ <columnType v="1" /> <size v="36" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="true" /> <documentation></documentation> <title></title> <description></description> + <customProperties> + <customStringProperty> + <name>tableRef</name> + <global v="false" /> + <property>SALESPROJECT</property> + </customStringProperty> + </customProperties> <dependencies> <entityDependency> <name>a1759554-192b-49fa-b6a8-b982115f71ab</name> @@ -9993,6 +10154,18 @@ <documentation></documentation> <title></title> <description></description> + <customProperties> + <customBooleanProperty> + <name>log</name> + <global v="false" /> + <property v="true" /> + </customBooleanProperty> + <customStringProperty> + <name>keyword</name> + <global v="false" /> + <property>ProductGroupcode</property> + </customStringProperty> + </customProperties> </entityFieldDb> <entityFieldDb> <name>FORECASTID</name> @@ -10021,14 +10194,21 @@ <documentation></documentation> <title></title> <description></description> + <customProperties> + <customBooleanProperty> + <name>log</name> + <global v="false" /> + <property v="true" /> + </customBooleanProperty> + </customProperties> </entityFieldDb> <entityFieldDb> <name>DATE_START</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -10040,7 +10220,7 @@ <name>INFO</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -10049,6 +10229,13 @@ <documentation></documentation> <title></title> <description></description> + <customProperties> + <customBooleanProperty> + <name>log</name> + <global v="false" /> + <property v="true" /> + </customBooleanProperty> + </customProperties> </entityFieldDb> <entityFieldDb> <name>OBJECT_TYPE</name> @@ -10057,57 +10244,154 @@ <columnType v="12" /> <size v="63" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> - </entityFields> - </entityDb> - <entityDb> - <name>COMPETITION</name> - <dbName></dbName> - <idColumn>COMPETITIONID</idColumn> - <idGeneratorType v="0" /> - <idGeneratorInterval v="1" /> - <documentation>%aditoprj%/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/competition/documentation.adoc</documentation> - <title></title> - <description></description> - <auditSyncConfig> - <name>auditSyncConfig</name> - <auditMode v="0" /> - <syncActive v="false" /> - <syncComplete v="true" /> - <syncDirection v="1" /> - <syncIds></syncIds> - </auditSyncConfig> - <entityFields> <entityFieldDb> - <name>OBJECT_ROWID</name> + <name>KIND</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> + <columnType v="12" /> <size v="36" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>PHASE</name> + <name>CONTACT_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> + <columnType v="1" /> <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + <customProperties> + <customBooleanProperty> + <name>log</name> + <global v="false" /> + <property v="true" /> + </customBooleanProperty> + </customProperties> + </entityFieldDb> + <entityFieldDb> + <name>FORECAST_YEAR</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + <customProperties> + <customBooleanProperty> + <name>log</name> + <global v="false" /> + <property v="true" /> + </customBooleanProperty> + </customProperties> + </entityFieldDb> + <entityFieldDb> + <name>STATUS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + <customProperties> + <customBooleanProperty> + <name>log</name> + <global v="false" /> + <property v="true" /> + </customBooleanProperty> + </customProperties> + </entityFieldDb> + <entityFieldDb> + <name>RESPONSIBLE_CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + <customProperties> + <customBooleanProperty> + <name>log</name> + <global v="false" /> + </customBooleanProperty> + </customProperties> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>COMPETITION</name> + <dbName></dbName> + <idColumn>COMPETITIONID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation>%aditoprj%/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/competition/documentation.adoc</documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>OBJECT_ROWID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PHASE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> @@ -10165,7 +10449,7 @@ <name>INFO</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -10193,8 +10477,8 @@ <name>REASON</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="36" /> + <columnType v="-1" /> + <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -10208,8 +10492,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -10270,8 +10554,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -10459,31 +10743,38 @@ </customProperties> </entityFieldDb> <entityFieldDb> - <name>SENDER</name> + <name>STATUS</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> - <title>Sender</title> + <title></title> <description></description> - <customProperties> - <customBooleanProperty> - <name>log</name> - <global v="false" /> - <property v="true" /> - </customBooleanProperty> - </customProperties> </entityFieldDb> <entityFieldDb> - <name>STATUS</name> + <name>CREATEACTIVITIES</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> + <columnType v="-6" /> + <size v="3" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TESTING_CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> <size v="36" /> <scale v="0" /> <notNull v="false" /> @@ -10494,11 +10785,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CREATEACTIVITIES</name> + <name>TESTING_EMAIL_ADDRESS</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="5" /> - <size v="5" /> + <columnType v="12" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -10508,11 +10799,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>TESTING_CONTACT_ID</name> + <name>USE_TEMPLATE_ATTACHMENTS</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="-6" /> + <size v="3" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -10522,7 +10813,21 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>TESTING_EMAIL_ADDRESS</name> + <name>DATE_TO_SEND</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="19" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SENDER_EMAIL_ADDRESS</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -10536,11 +10841,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USE_TEMPLATE_ATTACHMENTS</name> + <name>INTEREST_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="5" /> - <size v="5" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -10549,6 +10854,18 @@ <title></title> <description></description> </entityFieldDb> + <entityFieldDb> + <name>EMPLOYEE_CONTACT_ID</name> + <columnType v="1" /> + <size v="36" /> + <dependencies> + <entityDependency> + <name>6a1da471-b60b-40ae-a099-89f8835abd61</name> + <entityName>CONTACT</entityName> + <fieldName>CONTACTID</fieldName> + </entityDependency> + </dependencies> + </entityFieldDb> </entityFields> </entityDb> <entityDb> @@ -10644,8 +10961,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -10681,6 +10998,20 @@ <title></title> <description></description> </entityFieldDb> + <entityFieldDb> + <name>IS_TEST_RECIPIENT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="-6" /> + <size v="3" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> </entityFields> </entityDb> <entityDb> @@ -10789,8 +11120,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -10803,8 +11134,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -10852,8 +11183,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="true" /> <isUnique v="false" /> <index v="false" /> @@ -11003,7 +11334,7 @@ <name>DESCRIPTION</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -11065,7 +11396,7 @@ <name>MAIL</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -11080,8 +11411,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -11122,8 +11453,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="true" /> <isUnique v="false" /> <index v="false" /> @@ -11163,7 +11494,7 @@ <name>RECIPIENTS</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -11192,8 +11523,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="true" /> @@ -11267,8 +11598,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -11309,8 +11640,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="true" /> <isUnique v="false" /> <index v="false" /> @@ -11689,7 +12020,7 @@ <columnType v="1" /> <size v="36" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="true" /> <documentation></documentation> @@ -11742,8 +12073,8 @@ <name>ONSITE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="5" /> - <size v="5" /> + <columnType v="-6" /> + <size v="3" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -11805,8 +12136,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -11818,7 +12149,7 @@ <name>INFO</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -11874,8 +12205,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -11902,8 +12233,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="true" /> <isUnique v="false" /> <index v="false" /> @@ -11999,7 +12330,7 @@ <name>SCAN_PATTERN</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -12012,7 +12343,7 @@ </entityFields> </entityDb> <entityDb> - <name>DUPLICATECLUSTERS</name> + <name>UNRELATEDDUPLICATES</name> <dbName></dbName> <idColumn>ID</idColumn> <idGeneratorType v="0" /> @@ -12030,7 +12361,7 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>DUPLICATEID</name> + <name>SOURCEDUPLICATEID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> @@ -12038,91 +12369,15 @@ <scale v="0" /> <notNull v="true" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>CLUSTERID</name> + <name>ID</name> <dbName></dbName> - <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> - <scale v="0" /> - <notNull v="true" /> - <isUnique v="false" /> - <index v="false" /> - <documentation></documentation> - <title></title> - <description></description> - </entityFieldDb> - <entityFieldDb> - <name>ID</name> - <dbName></dbName> - <primaryKey v="true" /> - <columnType v="1" /> - <size v="36" /> - <scale v="0" /> - <notNull v="true" /> - <isUnique v="true" /> - <index v="true" /> - <documentation></documentation> - <title></title> - <description></description> - </entityFieldDb> - <entityFieldDb> - <name>TARGET_ENTITY</name> - <dbName></dbName> - <primaryKey v="false" /> - <columnType v="12" /> - <size v="200" /> - <scale v="0" /> - <notNull v="false" /> - <isUnique v="false" /> - <index v="false" /> - <documentation></documentation> - <title></title> - <description></description> - </entityFieldDb> - </entityFields> - </entityDb> - <entityDb> - <name>UNRELATEDDUPLICATES</name> - <dbName></dbName> - <idColumn>ID</idColumn> - <idGeneratorType v="0" /> - <idGeneratorInterval v="1" /> - <documentation></documentation> - <title></title> - <description></description> - <auditSyncConfig> - <name>auditSyncConfig</name> - <auditMode v="0" /> - <syncActive v="false" /> - <syncComplete v="true" /> - <syncDirection v="1" /> - <syncIds></syncIds> - </auditSyncConfig> - <entityFields> - <entityFieldDb> - <name>SOURCEDUPLICATEID</name> - <dbName></dbName> - <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> - <scale v="0" /> - <notNull v="true" /> - <isUnique v="false" /> - <index v="false" /> - <documentation></documentation> - <title></title> - <description></description> - </entityFieldDb> - <entityFieldDb> - <name>ID</name> - <dbName></dbName> - <primaryKey v="true" /> + <primaryKey v="true" /> <columnType v="1" /> <size v="36" /> <scale v="0" /> @@ -12148,140 +12403,15 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CLUSTERID</name> - <dbName></dbName> - <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> - <scale v="0" /> - <notNull v="false" /> - <isUnique v="false" /> - <index v="false" /> - <documentation></documentation> - <title></title> - <description></description> - </entityFieldDb> - </entityFields> - </entityDb> - <entityDb> - <name>DUPLICATESCANNERRESULTFIELDCONFIG</name> - <dbName></dbName> - <idColumn>ID</idColumn> - <idGeneratorType v="0" /> - <idGeneratorInterval v="1" /> - <documentation></documentation> - <title></title> - <description></description> - <auditSyncConfig> - <name>auditSyncConfig</name> - <auditMode v="0" /> - <syncActive v="false" /> - <syncComplete v="true" /> - <syncDirection v="1" /> - <syncIds></syncIds> - </auditSyncConfig> - <entityFields> - <entityFieldDb> - <name>DATE_EDIT</name> - <dbName></dbName> - <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> - <notNull v="false" /> - <isUnique v="false" /> - <index v="false" /> - <documentation></documentation> - <title></title> - <description></description> - </entityFieldDb> - <entityFieldDb> - <name>DUPLICATESCANNER_ID</name> - <dbName></dbName> - <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> - <scale v="0" /> - <notNull v="true" /> - <isUnique v="false" /> - <index v="true" /> - <documentation></documentation> - <title></title> - <description></description> - <dependencies> - <entityDependency> - <name>9b123a17-2f41-49f8-9492-f386ece46f7c</name> - <entityName>DUPLICATESCANNER</entityName> - <fieldName>ID</fieldName> - </entityDependency> - </dependencies> - </entityFieldDb> - <entityFieldDb> - <name>DATE_NEW</name> - <dbName></dbName> - <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> - <notNull v="true" /> - <isUnique v="false" /> - <index v="false" /> - <documentation></documentation> - <title></title> - <description></description> - </entityFieldDb> - <entityFieldDb> - <name>ID</name> - <dbName></dbName> - <primaryKey v="true" /> - <columnType v="1" /> - <size v="36" /> - <scale v="0" /> - <notNull v="true" /> - <isUnique v="true" /> - <index v="true" /> - <documentation></documentation> - <title></title> - <description></description> - </entityFieldDb> - <entityFieldDb> - <name>USER_NEW</name> - <dbName></dbName> - <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> - <scale v="0" /> - <notNull v="true" /> - <isUnique v="false" /> - <index v="false" /> - <documentation></documentation> - <title></title> - <description></description> - </entityFieldDb> - <entityFieldDb> - <name>ENTITY_FIELD_NAME</name> - <dbName></dbName> - <primaryKey v="false" /> - <columnType v="12" /> - <size v="100" /> - <scale v="0" /> - <notNull v="false" /> - <isUnique v="false" /> - <index v="false" /> - <documentation></documentation> - <title></title> - <description></description> - </entityFieldDb> - <entityFieldDb> - <name>USER_EDIT</name> + <name>DUPLICATETYPE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="63" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> @@ -12339,8 +12469,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -12395,8 +12525,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -12660,8 +12790,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -12988,8 +13118,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -13114,8 +13244,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -13142,8 +13272,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -13218,8 +13348,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -13260,8 +13390,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -13335,12 +13465,12 @@ </entityFields> </entityDb> <entityDb> - <name>LEAD</name> + <name>WORKFLOWSTARTCONFIG</name> <dbName></dbName> - <idColumn>LEADID</idColumn> + <idColumn>WORKFLOWSTARTCONFIGID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> - <documentation>%aditoprj%/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/lead/documentation.adoc</documentation> + <documentation></documentation> <title></title> <description></description> <auditSyncConfig> @@ -13353,11 +13483,11 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>ZIP</name> + <name>TRIGGER_EVENT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13367,26 +13497,26 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CUSTOMERCODE</name> + <name>WORKFLOWSTARTCONFIGID</name> <dbName></dbName> - <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> - <notNull v="false" /> - <isUnique v="false" /> - <index v="false" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_EDIT</name> + <name>PROCESSDEFINITION_KEY</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -13395,11 +13525,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>FIRSTNAME</name> + <name>OBJECT_TYPE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="63" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13408,12 +13538,32 @@ <title></title> <description></description> </entityFieldDb> - <entityFieldDb> - <name>ATTRIBUTE_LOYALTY</name> + </entityFields> + </entityDb> + <entityDb> + <name>WORKFLOWSIGNAL</name> + <dbName></dbName> + <idColumn>WORKFLOWSIGNALID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>SIGNAL_NAME</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="100" /> + <size v="255" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13423,24 +13573,24 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DUPLICAT</name> + <name>WORKFLOWSIGNALID</name> <dbName></dbName> - <primaryKey v="false" /> - <columnType v="4" /> - <size v="10" /> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> - <notNull v="false" /> - <isUnique v="false" /> - <index v="false" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>STATUS</name> + <name>TRIGGER_EVENT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> + <columnType v="1" /> <size v="36" /> <scale v="0" /> <notNull v="false" /> @@ -13451,11 +13601,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>MIDDLENAME</name> + <name>OBJECT_CONDITION</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="512" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13465,11 +13615,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>COUNTRY</name> + <name>OBJECT_TYPE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="2" /> + <columnType v="12" /> + <size v="63" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13479,11 +13629,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>LASTNAME</name> + <name>PROCESSDEFINITION_KEY</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="255" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13493,11 +13643,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>SALUTATION</name> + <name>VARIABLES</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="30" /> + <size v="512" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13506,26 +13656,46 @@ <title></title> <description></description> </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>EXPORTTEMPLATEPLACEOFUSE</name> + <dbName></dbName> + <idColumn>EXPORTTEMPLATEPLACEOFUSEID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation>%aditoprj%/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/exporttemplateplaceofuse/documentation.adoc</documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> <entityFieldDb> - <name>TAXCODE</name> + <name>EXPORTTEMPLATEPLACEOFUSEID</name> <dbName></dbName> - <primaryKey v="false" /> - <columnType v="12" /> - <size v="30" /> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> - <notNull v="false" /> - <isUnique v="false" /> - <index v="false" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>ORGCOUNTRYCODE</name> + <name>PLACEOFUSE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="10" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13535,7 +13705,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>LEADIMPORT_ID</name> + <name>EXPORTTEMPLATE_ID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> @@ -13549,46 +13719,59 @@ <description></description> <dependencies> <entityDependency> - <name>14ab15d3-99fc-4c58-9c4a-c2ec404e5c67</name> - <entityName>LEADIMPORT</entityName> - <fieldName>LEADIMPORTID</fieldName> + <name>a9054d80-d866-4312-9a53-03c7fbb06165</name> + <entityName>EXPORTTEMPLATE</entityName> + <fieldName>EXPORTTEMPLATEID</fieldName> </entityDependency> </dependencies> </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>DOCUMENTTEMPLATEPLACEOFUSE</name> + <dbName></dbName> + <idColumn>DOCUMENTTEMPLATEPLACEOFUSEID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation>%aditoprj%/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/documenttemplateplaceofuse/documentation.adoc</documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> <entityFieldDb> - <name>BUILDINGNO</name> - <dbName></dbName> - <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> - <scale v="0" /> - <notNull v="false" /> - <isUnique v="false" /> - <index v="false" /> - <documentation></documentation> - <title></title> - <description></description> - </entityFieldDb> - <entityFieldDb> - <name>CONTACTPOSITION</name> + <name>DOCUMENTTEMPLATE_ID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> + <dependencies> + <entityDependency> + <name>14bbdba4-88c2-4cf3-aaa6-71328e590968</name> + <entityName>DOCUMENTTEMPLATE</entityName> + <fieldName>DOCUMENTTEMPLATEID</fieldName> + </entityDependency> + </dependencies> </entityFieldDb> <entityFieldDb> - <name>ATTRIBUTE03</name> + <name>PLACEOFUSE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="100" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13598,25 +13781,45 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ATTRIBUTE02</name> + <name>DOCUMENTTEMPLATEPLACEOFUSEID</name> <dbName></dbName> - <primaryKey v="false" /> - <columnType v="12" /> - <size v="100" /> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> - <notNull v="false" /> - <isUnique v="false" /> - <index v="false" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>EXPORTTEMPLATE</name> + <dbName></dbName> + <idColumn>EXPORTTEMPLATEID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation>%aditoprj%/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/exporttemplate/documentation.adoc</documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> <entityFieldDb> - <name>CONTACTROLE</name> + <name>ISOLANGUAGE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="60" /> + <columnType v="1" /> + <size v="3" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13626,11 +13829,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>PERSINFO</name> + <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> - <size v="2147483647" /> + <columnType v="93" /> + <size v="19" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13640,11 +13843,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DEPARTMENT</name> + <name>DESCRIPTION</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="1337" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13654,25 +13857,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>NAME</name> + <name>EXPORTTEMPLATEID</name> <dbName></dbName> - <primaryKey v="false" /> - <columnType v="12" /> - <size v="250" /> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> - <notNull v="false" /> - <isUnique v="false" /> - <index v="false" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>REGION</name> + <name>TITLE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="100" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13682,28 +13885,21 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>PERSON_ID</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="93" /> + <size v="19" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> - <dependencies> - <entityDependency> - <name>b3823998-cf9c-4fa1-914c-6158945e9863</name> - <entityName>PERSON</entityName> - <fieldName>PERSONID</fieldName> - </entityDependency> - </dependencies> </entityFieldDb> <entityFieldDb> - <name>ADDRESS</name> + <name>USER_NEW</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -13717,7 +13913,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>SOURCE</name> + <name>USER_EDIT</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -13731,11 +13927,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>LEGALFORM</name> + <name>FIELDSEPARATOR</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="4" /> - <size v="10" /> + <columnType v="12" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13745,11 +13941,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DISTRICT</name> + <name>SENTENCESEPARATOR</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13759,25 +13955,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DUPSTATUS</name> + <name>FIELDDELIMITER</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="20" /> - <scale v="0" /> - <notNull v="false" /> - <isUnique v="false" /> - <index v="false" /> - <documentation></documentation> - <title></title> - <description></description> - </entityFieldDb> - <entityFieldDb> - <name>GENDER</name> - <dbName></dbName> - <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13786,12 +13968,32 @@ <title></title> <description></description> </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>EXPORTTEMPLATEFIELD</name> + <dbName></dbName> + <idColumn>EXPORTTEMPLATEFIELDID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation>%aditoprj%/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/exporttemplatefield/documentation.adoc</documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> <entityFieldDb> - <name>ATTRIBUTE04</name> + <name>FIELD</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="100" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13801,25 +14003,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>LETTERSALUTATION</name> + <name>EXPORTTEMPLATEFIELDID</name> <dbName></dbName> - <primaryKey v="false" /> - <columnType v="12" /> - <size v="100" /> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> - <notNull v="false" /> - <isUnique v="false" /> - <index v="false" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</name> + <name>SORTING</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> + <columnType v="5" /> + <size v="5" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13829,7 +14031,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ORGANISATION_ID</name> + <name>EXPORTTEMPLATE_ID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> @@ -13843,14 +14045,34 @@ <description></description> <dependencies> <entityDependency> - <name>abfbfb1e-678a-409b-a5cb-a87c8332478f</name> - <entityName>ORGANISATION</entityName> - <fieldName>ORGANISATIONID</fieldName> + <name>b5bdf0af-cfed-4718-bcb6-9f8ff24842dd</name> + <entityName>EXPORTTEMPLATE</entityName> + <fieldName>EXPORTTEMPLATEID</fieldName> </entityDependency> </dependencies> </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>EXPORTTEMPLATESELECTION</name> + <dbName></dbName> + <idColumn>EXPORTTEMPLATESELECTIONID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation>%aditoprj%/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/exporttemplateselection/documentation.adoc</documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> <entityFieldDb> - <name>LEADID</name> + <name>EXPORTTEMPLATESELECTIONID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -13864,25 +14086,32 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_EDIT</name> + <name>EXPORTTEMPLATE_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> + <dependencies> + <entityDependency> + <name>e391399b-0f92-436d-96fa-1aaed5f712a8</name> + <entityName>EXPORTTEMPLATE</entityName> + <fieldName>EXPORTTEMPLATEID</fieldName> + </entityDependency> + </dependencies> </entityFieldDb> <entityFieldDb> - <name>CITY</name> + <name>FILENAME</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="33" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13891,13 +14120,33 @@ <title></title> <description></description> </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>AB_PERMISSIONCALENDAR</name> + <dbName></dbName> + <idColumn>AB_PERMISSIONCALENDARID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> <entityFieldDb> - <name>DATEOFBIRTH</name> + <name>PERMISSION</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -13906,11 +14155,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>VATCODE</name> + <name>PERMISSIONPROCURER_TYPE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="30" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13920,11 +14169,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ORGINFO</name> + <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> - <size v="2147483647" /> + <columnType v="93" /> + <size v="19" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13934,13 +14183,27 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>PROVINCE</name> + <name>AB_PERMISSIONCALENDARID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> + <columnType v="93" /> + <size v="19" /> <scale v="0" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -13948,13 +14211,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>TITLE</name> + <name>USER_NEW</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> <size v="50" /> <scale v="0" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -13962,39 +14225,39 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_NEW</name> + <name>PERMISSIONPROCURER_ROWID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>ATTRIBUTE_INDUSTRY</name> + <name>PERMISSIONDEALER_ROWID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="100" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>O_COMMXING</name> + <name>USER_EDIT</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="254" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14004,11 +14267,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>O_COMMPHONE</name> + <name>PERMISSIONDEALER_TYPE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="254" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14017,12 +14280,32 @@ <title></title> <description></description> </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>VISITRECOMMENDATION</name> + <dbName></dbName> + <idColumn>VISITRECOMMENDATIONID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> <entityFieldDb> - <name>O_COMMMOBIL</name> + <name>DUE_DATE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="254" /> + <columnType v="93" /> + <size v="19" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14032,11 +14315,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>O_COMMEMAIL</name> + <name>SOURCE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="254" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14046,39 +14329,39 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>O_COMMLINKEDIN</name> + <name>VISITRECOMMENDATIONID</name> <dbName></dbName> - <primaryKey v="false" /> - <columnType v="12" /> - <size v="254" /> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> - <notNull v="false" /> - <isUnique v="false" /> - <index v="false" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>O_COMMBLOG</name> + <name>CONTACT_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="254" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>P_COMMXING</name> + <name>PRIORITY</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="254" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14088,11 +14371,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>P_COMMLINKEDIN</name> + <name>INFO</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="254" /> + <columnType v="-1" /> + <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14102,7 +14385,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ISOLANGUAGE</name> + <name>USER_NEW</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -14116,25 +14399,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>P_COMMBLOG</name> + <name>CONTACT_PERSON_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="254" /> - <scale v="0" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>P_COMMPHONE</name> + <name>RESPONSIBLE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="254" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14144,11 +14427,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>P_COMMMOBIL</name> + <name>STATUS</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="254" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14157,12 +14440,60 @@ <title></title> <description></description> </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>VISITPLANEMPLOYEEWEEK</name> + <dbName></dbName> + <idColumn>VISITPLANEMPLOYEEWEEKID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>VISITPLANEMPLOYEEWEEKID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> <entityFieldDb> - <name>P_COMMEMAIL</name> + <name>CONTACT_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="254" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>VISITPLAN_WEEK</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14172,11 +14503,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>P_COMMINTERNET</name> + <name>INFO</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="254" /> + <columnType v="-1" /> + <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14186,11 +14517,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>O_COMMINTERNET</name> + <name>VISITPLAN_YEAR</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="254" /> + <columnType v="4" /> + <size v="10" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14202,9 +14533,9 @@ </entityFields> </entityDb> <entityDb> - <name>WORKFLOWSTARTCONFIG</name> + <name>VISITPLANENTRY</name> <dbName></dbName> - <idColumn>WORKFLOWSTARTCONFIGID</idColumn> + <idColumn>VISITPLANENTRYID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -14220,10 +14551,10 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>TRIGGER_EVENT</name> + <name>STATUS</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> + <columnType v="12" /> <size v="36" /> <scale v="0" /> <notNull v="false" /> @@ -14234,25 +14565,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>WORKFLOWSTARTCONFIGID</name> + <name>END_TIME</name> <dbName></dbName> - <primaryKey v="true" /> - <columnType v="1" /> - <size v="36" /> + <primaryKey v="false" /> + <columnType v="92" /> + <size v="10" /> <scale v="0" /> - <notNull v="true" /> - <isUnique v="true" /> - <index v="true" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>PROCESSDEFINITION_KEY</name> + <name>BEGIN_TIME</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="255" /> + <columnType v="92" /> + <size v="10" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14262,55 +14593,35 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>OBJECT_TYPE</name> + <name>VISITPLANEMPLOYEEWEEK_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="63" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> - </entityFields> - </entityDb> - <entityDb> - <name>WORKFLOWSIGNAL</name> - <dbName></dbName> - <idColumn>WORKFLOWSIGNALID</idColumn> - <idGeneratorType v="0" /> - <idGeneratorInterval v="1" /> - <documentation></documentation> - <title></title> - <description></description> - <auditSyncConfig> - <name>auditSyncConfig</name> - <auditMode v="0" /> - <syncActive v="false" /> - <syncComplete v="true" /> - <syncDirection v="1" /> - <syncIds></syncIds> - </auditSyncConfig> - <entityFields> <entityFieldDb> - <name>SIGNAL_NAME</name> + <name>VISITRECOMMENDATION_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="255" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>WORKFLOWSIGNALID</name> + <name>VISITPLANENTRYID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -14324,7 +14635,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>TRIGGER_EVENT</name> + <name>APPOINTMENT_ID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> @@ -14338,11 +14649,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>OBJECT_CONDITION</name> + <name>ENTRYDATE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="512" /> + <columnType v="91" /> + <size v="10" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14352,39 +14663,39 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>OBJECT_TYPE</name> + <name>CONTACT_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="63" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>PROCESSDEFINITION_KEY</name> + <name>ORGANISATION_CONTACT_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="255" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>VARIABLES</name> + <name>STATUS_APPOINTMENT</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="512" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14396,12 +14707,12 @@ </entityFields> </entityDb> <entityDb> - <name>EXPORTTEMPLATEPLACEOFUSE</name> + <name>CLASSIFICATIONGRADING</name> <dbName></dbName> - <idColumn>EXPORTTEMPLATEPLACEOFUSEID</idColumn> + <idColumn>CLASSIFICATIONGRADINGID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> - <documentation>%aditoprj%/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/exporttemplateplaceofuse/documentation.adoc</documentation> + <documentation></documentation> <title></title> <description></description> <auditSyncConfig> @@ -14414,7 +14725,7 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>EXPORTTEMPLATEPLACEOFUSEID</name> + <name>CLASSIFICATIONGRADINGID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -14428,11 +14739,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>PLACEOFUSE</name> + <name>GRADING</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <size v="1" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14442,7 +14753,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>EXPORTTEMPLATE_ID</name> + <name>CLASSIFICATIONGROUP_ID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> @@ -14454,23 +14765,30 @@ <documentation></documentation> <title></title> <description></description> - <dependencies> - <entityDependency> - <name>a9054d80-d866-4312-9a53-03c7fbb06165</name> - <entityName>EXPORTTEMPLATE</entityName> - <fieldName>EXPORTTEMPLATEID</fieldName> - </entityDependency> - </dependencies> + </entityFieldDb> + <entityFieldDb> + <name>MINPERCENT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> </entityFieldDb> </entityFields> </entityDb> <entityDb> - <name>DOCUMENTTEMPLATEPLACEOFUSE</name> + <name>CLASSIFICATIONSTORAGE</name> <dbName></dbName> - <idColumn>DOCUMENTTEMPLATEPLACEOFUSEID</idColumn> + <idColumn>CLASSIFICATIONSTORAGEID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> - <documentation>%aditoprj%/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/documenttemplateplaceofuse/documentation.adoc</documentation> + <documentation></documentation> <title></title> <description></description> <auditSyncConfig> @@ -14483,10 +14801,10 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>DOCUMENTTEMPLATE_ID</name> + <name>OBJECT_ROWID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> + <columnType v="1" /> <size v="36" /> <scale v="0" /> <notNull v="false" /> @@ -14495,20 +14813,13 @@ <documentation></documentation> <title></title> <description></description> - <dependencies> - <entityDependency> - <name>14bbdba4-88c2-4cf3-aaa6-71328e590968</name> - <entityName>DOCUMENTTEMPLATE</entityName> - <fieldName>DOCUMENTTEMPLATEID</fieldName> - </entityDependency> - </dependencies> </entityFieldDb> <entityFieldDb> - <name>PLACEOFUSE</name> + <name>CLASSIFICATIONVALUE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <size v="20" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14518,7 +14829,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DOCUMENTTEMPLATEPLACEOFUSEID</name> + <name>CLASSIFICATIONSTORAGEID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -14531,31 +14842,25 @@ <title></title> <description></description> </entityFieldDb> - </entityFields> - </entityDb> - <entityDb> - <name>EXPORTTEMPLATE</name> - <dbName></dbName> - <idColumn>EXPORTTEMPLATEID</idColumn> - <idGeneratorType v="0" /> - <idGeneratorInterval v="1" /> - <documentation>%aditoprj%/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/exporttemplate/documentation.adoc</documentation> - <title></title> - <description></description> - <auditSyncConfig> - <name>auditSyncConfig</name> - <auditMode v="0" /> - <syncActive v="false" /> - <syncComplete v="true" /> - <syncDirection v="1" /> - <syncIds></syncIds> - </auditSyncConfig> - <entityFields> <entityFieldDb> - <name>ISOLANGUAGE</name> + <name>OBJECT_TYPE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> + <columnType v="12" /> + <size v="63" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OUTDATED</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="-6" /> <size v="3" /> <scale v="0" /> <notNull v="false" /> @@ -14565,13 +14870,47 @@ <title></title> <description></description> </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>CLASSIFICATIONGROUP</name> + <dbName></dbName> + <idColumn>CLASSIFICATIONGROUPID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>CLASSIFICATIONGROUPID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> <entityFieldDb> - <name>DATE_EDIT</name> + <name>SORTING</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <columnType v="5" /> + <size v="5" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -14580,11 +14919,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DESCRIPTION</name> + <name>TITLE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="1337" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14593,8 +14932,28 @@ <title></title> <description></description> </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>LEADIMPORTMAPPINGASSISTANT</name> + <dbName></dbName> + <idColumn>LEADIMPORTMAPPINGASSISTANTID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> <entityFieldDb> - <name>EXPORTTEMPLATEID</name> + <name>LEADIMPORTMAPPINGASSISTANTID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -14608,7 +14967,21 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>TITLE</name> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="19" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>FIELDNAME</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -14626,9 +14999,9 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> - <notNull v="false" /> + <size v="19" /> + <scale v="0" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -14636,11 +15009,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</name> + <name>INPUTVALUE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="300" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14650,11 +15023,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_EDIT</name> + <name>OUTPUTVALUE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="300" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14664,13 +15037,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>FIELDSEPARATOR</name> + <name>USER_NEW</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <size v="50" /> <scale v="0" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -14678,25 +15051,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>SENTENCESEPARATOR</name> + <name>LEADIMPORT_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> + <columnType v="1" /> <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>FIELDDELIMITER</name> + <name>USER_EDIT</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14708,12 +15081,12 @@ </entityFields> </entityDb> <entityDb> - <name>EXPORTTEMPLATEFIELD</name> + <name>DISTRICT</name> <dbName></dbName> - <idColumn>EXPORTTEMPLATEFIELDID</idColumn> + <idColumn>DISTRICTID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> - <documentation>%aditoprj%/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/exporttemplatefield/documentation.adoc</documentation> + <documentation></documentation> <title></title> <description></description> <auditSyncConfig> @@ -14726,11 +15099,11 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>FIELD</name> + <name>DISTRICT_NAME</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14740,25 +15113,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>EXPORTTEMPLATEFIELDID</name> + <name>DISTRICT_INFO</name> <dbName></dbName> - <primaryKey v="true" /> - <columnType v="1" /> - <size v="36" /> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> <scale v="0" /> - <notNull v="true" /> - <isUnique v="true" /> - <index v="true" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>SORTING</name> + <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="5" /> - <size v="5" /> + <columnType v="93" /> + <size v="19" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14768,87 +15141,53 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>EXPORTTEMPLATE_ID</name> + <name>DISTRICT_STATUS</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="4" /> + <size v="10" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> - <dependencies> - <entityDependency> - <name>b5bdf0af-cfed-4718-bcb6-9f8ff24842dd</name> - <entityName>EXPORTTEMPLATE</entityName> - <fieldName>EXPORTTEMPLATEID</fieldName> - </entityDependency> - </dependencies> </entityFieldDb> - </entityFields> - </entityDb> - <entityDb> - <name>EXPORTTEMPLATESELECTION</name> - <dbName></dbName> - <idColumn>EXPORTTEMPLATESELECTIONID</idColumn> - <idGeneratorType v="0" /> - <idGeneratorInterval v="1" /> - <documentation>%aditoprj%/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/exporttemplateselection/documentation.adoc</documentation> - <title></title> - <description></description> - <auditSyncConfig> - <name>auditSyncConfig</name> - <auditMode v="0" /> - <syncActive v="false" /> - <syncComplete v="true" /> - <syncDirection v="1" /> - <syncIds></syncIds> - </auditSyncConfig> - <entityFields> <entityFieldDb> - <name>EXPORTTEMPLATESELECTIONID</name> + <name>PARENTDISTRICT_DISTRICTID</name> <dbName></dbName> - <primaryKey v="true" /> + <primaryKey v="false" /> <columnType v="1" /> <size v="36" /> <scale v="0" /> - <notNull v="true" /> - <isUnique v="true" /> - <index v="true" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>EXPORTTEMPLATE_ID</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="93" /> + <size v="19" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> - <dependencies> - <entityDependency> - <name>e391399b-0f92-436d-96fa-1aaed5f712a8</name> - <entityName>EXPORTTEMPLATE</entityName> - <fieldName>EXPORTTEMPLATEID</fieldName> - </entityDependency> - </dependencies> </entityFieldDb> <entityFieldDb> - <name>FILENAME</name> + <name>USER_NEW</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="33" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14857,32 +15196,12 @@ <title></title> <description></description> </entityFieldDb> - </entityFields> - </entityDb> - <entityDb> - <name>AB_PERMISSIONCALENDAR</name> - <dbName></dbName> - <idColumn>AB_PERMISSIONCALENDARID</idColumn> - <idGeneratorType v="0" /> - <idGeneratorInterval v="1" /> - <documentation></documentation> - <title></title> - <description></description> - <auditSyncConfig> - <name>auditSyncConfig</name> - <auditMode v="0" /> - <syncActive v="false" /> - <syncComplete v="true" /> - <syncDirection v="1" /> - <syncIds></syncIds> - </auditSyncConfig> - <entityFields> <entityFieldDb> - <name>PERMISSION</name> + <name>DISTRICT_NUMBER</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="36" /> + <columnType v="4" /> + <size v="10" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14892,11 +15211,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>PERMISSIONPROCURER_TYPE</name> + <name>ISO3</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <size v="5" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14906,21 +15225,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_EDIT</name> - <dbName></dbName> - <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> - <notNull v="false" /> - <isUnique v="false" /> - <index v="false" /> - <documentation></documentation> - <title></title> - <description></description> - </entityFieldDb> - <entityFieldDb> - <name>AB_PERMISSIONCALENDARID</name> + <name>DISTRICTID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -14934,67 +15239,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_NEW</name> - <dbName></dbName> - <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> - <notNull v="true" /> - <isUnique v="false" /> - <index v="false" /> - <documentation></documentation> - <title></title> - <description></description> - </entityFieldDb> - <entityFieldDb> - <name>USER_NEW</name> + <name>USER_EDIT</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> <size v="50" /> <scale v="0" /> - <notNull v="true" /> - <isUnique v="false" /> - <index v="false" /> - <documentation></documentation> - <title></title> - <description></description> - </entityFieldDb> - <entityFieldDb> - <name>PERMISSIONPROCURER_ROWID</name> - <dbName></dbName> - <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> - <scale v="0" /> - <notNull v="false" /> - <isUnique v="false" /> - <index v="true" /> - <documentation></documentation> - <title></title> - <description></description> - </entityFieldDb> - <entityFieldDb> - <name>PERMISSIONDEALER_ROWID</name> - <dbName></dbName> - <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> - <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_EDIT</name> + <name>DISTRICT_FILTER</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> + <columnType v="-1" /> + <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -15004,11 +15267,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>PERMISSIONDEALER_TYPE</name> + <name>DISTRICT_AUTOADD</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="36" /> + <columnType v="5" /> + <size v="5" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -15020,9 +15283,9 @@ </entityFields> </entityDb> <entityDb> - <name>VISITRECOMMENDATION</name> + <name>DISTRICTRESPONSIBLE</name> <dbName></dbName> - <idColumn>VISITRECOMMENDATIONID</idColumn> + <idColumn>DISTRICTRESPONSIBLEID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -15038,25 +15301,25 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>DUE_DATE</name> + <name>DISTRICTRESPONSIBLEID</name> <dbName></dbName> - <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> - <notNull v="false" /> - <isUnique v="false" /> - <index v="false" /> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>SOURCE</name> + <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="36" /> + <columnType v="93" /> + <size v="19" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -15066,21 +15329,21 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>VISITRECOMMENDATIONID</name> + <name>DEPARTMENT_ATTRIBUTE_ID</name> <dbName></dbName> - <primaryKey v="true" /> + <primaryKey v="false" /> <columnType v="1" /> <size v="36" /> <scale v="0" /> - <notNull v="true" /> - <isUnique v="true" /> + <notNull v="false" /> + <isUnique v="false" /> <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>CONTACT_ID</name> + <name>DISTRICT_ID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> @@ -15094,25 +15357,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>PRIORITY</name> + <name>EMPLOYEE_CONTACT_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> + <columnType v="1" /> <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>INFO</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> - <size v="2147483647" /> + <columnType v="93" /> + <size v="19" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -15136,25 +15399,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CONTACT_PERSON_ID</name> - <dbName></dbName> - <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> - <scale v="0" /> - <notNull v="false" /> - <isUnique v="false" /> - <index v="true" /> - <documentation></documentation> - <title></title> - <description></description> - </entityFieldDb> - <entityFieldDb> - <name>RESPONSIBLE</name> + <name>USER_EDIT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="12" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -15164,10 +15413,10 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>STATUS</name> + <name>ADVISER_STATUS</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> + <columnType v="12" /> <size v="36" /> <scale v="0" /> <notNull v="false" /> @@ -15177,74 +15426,26 @@ <title></title> <description></description> </entityFieldDb> - </entityFields> - </entityDb> - <entityDb> - <name>VISITPLANEMPLOYEEWEEK</name> - <dbName></dbName> - <idColumn>VISITPLANEMPLOYEEWEEKID</idColumn> - <idGeneratorType v="0" /> - <idGeneratorInterval v="1" /> - <documentation></documentation> - <title></title> - <description></description> - <auditSyncConfig> - <name>auditSyncConfig</name> - <auditMode v="0" /> - <syncActive v="false" /> - <syncComplete v="true" /> - <syncDirection v="1" /> - <syncIds></syncIds> - </auditSyncConfig> - <entityFields> - <entityFieldDb> - <name>VISITPLANEMPLOYEEWEEKID</name> - <dbName></dbName> - <primaryKey v="true" /> - <columnType v="1" /> - <size v="36" /> - <scale v="0" /> - <notNull v="true" /> - <isUnique v="true" /> - <index v="true" /> - <documentation></documentation> - <title></title> - <description></description> - </entityFieldDb> <entityFieldDb> - <name>CONTACT_ID</name> + <name>ADVISER_ROLE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> + <columnType v="12" /> <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> - <documentation></documentation> - <title></title> - <description></description> - </entityFieldDb> - <entityFieldDb> - <name>VISITPLAN_WEEK</name> - <dbName></dbName> - <primaryKey v="false" /> - <columnType v="4" /> - <size v="10" /> - <scale v="0" /> - <notNull v="false" /> - <isUnique v="false" /> <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>INFO</name> + <name>VALID_FROM</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> - <size v="2147483647" /> + <columnType v="12" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -15254,11 +15455,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>VISITPLAN_YEAR</name> + <name>VALID_UNTIL</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="4" /> - <size v="10" /> + <columnType v="12" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -15270,9 +15471,9 @@ </entityFields> </entityDb> <entityDb> - <name>VISITPLANENTRY</name> + <name>DISTRICTCONTACT</name> <dbName></dbName> - <idColumn>VISITPLANENTRYID</idColumn> + <idColumn>DISTRICTCONTACTID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -15280,7 +15481,7 @@ <description></description> <auditSyncConfig> <name>auditSyncConfig</name> - <auditMode v="0" /> + <auditMode v="1" /> <syncActive v="false" /> <syncComplete v="true" /> <syncDirection v="1" /> @@ -15288,7 +15489,7 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>STATUS</name> + <name>ORIGIN</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -15302,52 +15503,50 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>END_TIME</name> - <dbName></dbName> - <primaryKey v="false" /> - <columnType v="92" /> - <size v="8" /> - <scale v="0" /> - <notNull v="false" /> - <isUnique v="false" /> - <index v="false" /> - <documentation></documentation> - <title></title> - <description></description> - </entityFieldDb> - <entityFieldDb> - <name>BEGIN_TIME</name> + <name>STATUS</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="92" /> - <size v="8" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> - <title></title> + <title>District assignment status</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/status/customproperties/translate4log/property.js</property> + </customJDitoProperty> + </customProperties> </entityFieldDb> <entityFieldDb> - <name>VISITPLANEMPLOYEEWEEK_ID</name> + <name>ADVISER_ROLE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> + <columnType v="12" /> <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>VISITRECOMMENDATION_ID</name> + <name>ADVISER_CONTACT_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> + <columnType v="12" /> <size v="36" /> <scale v="0" /> <notNull v="false" /> @@ -15358,7 +15557,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>VISITPLANENTRYID</name> + <name>DISTRICTCONTACTID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -15372,38 +15571,36 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>APPOINTMENT_ID</name> + <name>DISTRICT_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> + <columnType v="12" /> <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> - <documentation></documentation> - <title></title> - <description></description> - </entityFieldDb> - <entityFieldDb> - <name>ENTRYDATE</name> - <dbName></dbName> - <primaryKey v="false" /> - <columnType v="91" /> - <size v="10" /> - <scale v="0" /> - <notNull v="false" /> - <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <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> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> + <columnType v="12" /> <size v="36" /> <scale v="0" /> <notNull v="false" /> @@ -15412,27 +15609,39 @@ <documentation></documentation> <title></title> <description></description> + <customProperties> + <customBooleanProperty> + <name>log</name> + <global v="false" /> + <property v="false" /> + </customBooleanProperty> + <customStringProperty> + <name>tableRef</name> + <global v="false" /> + <property>CONTACT</property> + </customStringProperty> + </customProperties> </entityFieldDb> <entityFieldDb> - <name>ORGANISATION_CONTACT_ID</name> + <name>VALID_FROM</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="93" /> + <size v="19" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>STATUS_APPOINTMENT</name> + <name>VALID_UNTIL</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="36" /> + <columnType v="93" /> + <size v="19" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -15441,46 +15650,26 @@ <title></title> <description></description> </entityFieldDb> - </entityFields> - </entityDb> - <entityDb> - <name>CLASSIFICATIONGRADING</name> - <dbName></dbName> - <idColumn>CLASSIFICATIONGRADINGID</idColumn> - <idGeneratorType v="0" /> - <idGeneratorInterval v="1" /> - <documentation></documentation> - <title></title> - <description></description> - <auditSyncConfig> - <name>auditSyncConfig</name> - <auditMode v="0" /> - <syncActive v="false" /> - <syncComplete v="true" /> - <syncDirection v="1" /> - <syncIds></syncIds> - </auditSyncConfig> - <entityFields> <entityFieldDb> - <name>CLASSIFICATIONGRADINGID</name> + <name>DATE_EDIT</name> <dbName></dbName> - <primaryKey v="true" /> - <columnType v="1" /> - <size v="36" /> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="19" /> <scale v="0" /> - <notNull v="true" /> - <isUnique v="true" /> - <index v="true" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>GRADING</name> + <name>USER_EDIT</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="1" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -15490,25 +15679,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CLASSIFICATIONGROUP_ID</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="93" /> + <size v="19" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>MINPERCENT</name> + <name>USER_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="4" /> - <size v="10" /> + <columnType v="12" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -15520,9 +15709,9 @@ </entityFields> </entityDb> <entityDb> - <name>CLASSIFICATIONSTORAGE</name> + <name>KNOWLEDGEDISCUSSION</name> <dbName></dbName> - <idColumn>CLASSIFICATIONSTORAGEID</idColumn> + <idColumn>KNOWLEDGEDISCUSSIONID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -15538,7 +15727,7 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>OBJECT_ROWID</name> + <name>PARENTENTRY</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> @@ -15546,17 +15735,17 @@ <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>CLASSIFICATIONVALUE</name> + <name>STATUS</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="20" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -15566,7 +15755,35 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CLASSIFICATIONSTORAGEID</name> + <name>DISCUSSIONTEXT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="-1" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="19" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>KNOWLEDGEDISCUSSIONID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -15580,25 +15797,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>OBJECT_TYPE</name> + <name>KNOWLEDGEMANAGEMENT_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="63" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>OUTDATED</name> + <name>AUTHOR</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="5" /> - <size v="5" /> + <columnType v="12" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -15607,46 +15824,26 @@ <title></title> <description></description> </entityFieldDb> - </entityFields> - </entityDb> - <entityDb> - <name>CLASSIFICATIONGROUP</name> - <dbName></dbName> - <idColumn>CLASSIFICATIONGROUPID</idColumn> - <idGeneratorType v="0" /> - <idGeneratorInterval v="1" /> - <documentation></documentation> - <title></title> - <description></description> - <auditSyncConfig> - <name>auditSyncConfig</name> - <auditMode v="0" /> - <syncActive v="false" /> - <syncComplete v="true" /> - <syncDirection v="1" /> - <syncIds></syncIds> - </auditSyncConfig> - <entityFields> <entityFieldDb> - <name>CLASSIFICATIONGROUPID</name> + <name>DATE_NEW</name> <dbName></dbName> - <primaryKey v="true" /> - <columnType v="1" /> - <size v="36" /> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="19" /> <scale v="0" /> - <notNull v="true" /> - <isUnique v="true" /> - <index v="true" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>SORTING</name> + <name>USER_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="5" /> - <size v="5" /> + <columnType v="12" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -15656,11 +15853,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>TITLE</name> + <name>USER_EDIT</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -15672,9 +15869,9 @@ </entityFields> </entityDb> <entityDb> - <name>LEADIMPORTMAPPINGASSISTANT</name> + <name>KNOWLEDGELINK</name> <dbName></dbName> - <idColumn>LEADIMPORTMAPPINGASSISTANTID</idColumn> + <idColumn>KNOWLEDGELINKID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -15690,7 +15887,7 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>LEADIMPORTMAPPINGASSISTANTID</name> + <name>KNOWLEDGELINKID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -15708,8 +15905,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -15718,15 +15915,15 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>FIELDNAME</name> + <name>KNOWLEDGEMANAGEMENT_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="100" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> @@ -15736,9 +15933,9 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> - <notNull v="true" /> + <size v="19" /> + <scale v="0" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -15746,11 +15943,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>INPUTVALUE</name> + <name>USER_NEW</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="300" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -15760,11 +15957,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>OUTPUTVALUE</name> + <name>OBJECT_TYPE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="300" /> + <size v="100" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -15774,13 +15971,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</name> + <name>USER_EDIT</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> <size v="50" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -15788,7 +15985,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>LEADIMPORT_ID</name> + <name>ROW_ID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> @@ -15801,26 +15998,12 @@ <title></title> <description></description> </entityFieldDb> - <entityFieldDb> - <name>USER_EDIT</name> - <dbName></dbName> - <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> - <scale v="0" /> - <notNull v="false" /> - <isUnique v="false" /> - <index v="false" /> - <documentation></documentation> - <title></title> - <description></description> - </entityFieldDb> </entityFields> </entityDb> <entityDb> - <name>DISTRICT</name> + <name>KNOWLEDGEMANAGEMENT</name> <dbName></dbName> - <idColumn>DISTRICTID</idColumn> + <idColumn>KNOWLEDGEMANAGEMENTID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -15836,11 +16019,11 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>DISTRICT_NAME</name> + <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> + <columnType v="93" /> + <size v="19" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -15850,39 +16033,46 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DISTRICT_INFO</name> + <name>KNOWLEDGEMANAGEMENTID</name> <dbName></dbName> - <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> - <notNull v="false" /> - <isUnique v="false" /> - <index v="false" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_EDIT</name> + <name>AUTHOR_CONTACT_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> + <customProperties> + <customBooleanProperty> + <name>log</name> + <global v="false" /> + <property v="true" /> + </customBooleanProperty> + </customProperties> </entityFieldDb> <entityFieldDb> - <name>DISTRICT_STATUS</name> + <name>PUBLISH</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="4" /> - <size v="10" /> + <columnType v="12" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -15892,11 +16082,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>PARENTDISTRICT_DISTRICTID</name> + <name>USER_EDIT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="12" /> + <size v="63" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -15906,12 +16096,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_NEW</name> + <name>CONTENTDECODED</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <columnType v="-1" /> + <size v="2147483647" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -15920,25 +16110,32 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</name> + <name>TITLE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="255" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> + <customProperties> + <customBooleanProperty> + <name>log</name> + <global v="false" /> + <property v="true" /> + </customBooleanProperty> + </customProperties> </entityFieldDb> <entityFieldDb> - <name>DISTRICT_NUMBER</name> + <name>CONTENT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="4" /> - <size v="10" /> + <columnType v="-1" /> + <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -15946,13 +16143,20 @@ <documentation></documentation> <title></title> <description></description> + <customProperties> + <customBooleanProperty> + <name>log</name> + <global v="false" /> + <property v="true" /> + </customBooleanProperty> + </customProperties> </entityFieldDb> <entityFieldDb> - <name>ISO3</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="5" /> + <columnType v="93" /> + <size v="19" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -15962,25 +16166,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DISTRICTID</name> - <dbName></dbName> - <primaryKey v="true" /> - <columnType v="1" /> - <size v="36" /> - <scale v="0" /> - <notNull v="true" /> - <isUnique v="true" /> - <index v="true" /> - <documentation></documentation> - <title></title> - <description></description> - </entityFieldDb> - <entityFieldDb> - <name>USER_EDIT</name> + <name>USER_NEW</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="63" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -15990,29 +16180,36 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DISTRICT_FILTER</name> + <name>RESPONSIBLE_CONTACT_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> - <size v="2147483647" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> + <customProperties> + <customBooleanProperty> + <name>log</name> + <global v="false" /> + <property v="true" /> + </customBooleanProperty> + </customProperties> </entityFieldDb> <entityFieldDb> - <name>DISTRICT_AUTOADD</name> + <name>TYPE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="5" /> - <size v="5" /> + <columnType v="12" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> @@ -16020,9 +16217,9 @@ </entityFields> </entityDb> <entityDb> - <name>DISTRICTRESPONSIBLE</name> + <name>KNOWLEDGEROLES</name> <dbName></dbName> - <idColumn>DISTRICTRESPONSIBLEID</idColumn> + <idColumn>KNOWLEDGEROLESID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -16038,7 +16235,7 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>DISTRICTRESPONSIBLEID</name> + <name>KNOWLEDGEROLESID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -16052,68 +16249,88 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_EDIT</name> + <name>KNOWLEDGEMANAGEMENT_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>DEPARTMENT_ATTRIBUTE_ID</name> + <name>ROLENAME</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="12" /> + <size v="100" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>KNOWLEDGEGITINTERFACE</name> + <dbName></dbName> + <idColumn>KNOWLEDGEGITINTERFACEID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> <entityFieldDb> - <name>DISTRICT_ID</name> + <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="93" /> + <size v="19" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>EMPLOYEE_CONTACT_ID</name> + <name>KNOWLEDGEGITINTERFACEID</name> <dbName></dbName> - <primaryKey v="false" /> + <primaryKey v="true" /> <columnType v="1" /> <size v="36" /> <scale v="0" /> - <notNull v="false" /> - <isUnique v="false" /> + <notNull v="true" /> + <isUnique v="true" /> <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_NEW</name> + <name>GITCOMMIT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <columnType v="12" /> + <size v="200" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -16122,11 +16339,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> + <columnType v="93" /> + <size v="19" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -16136,7 +16353,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_EDIT</name> + <name>USER_NEW</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -16150,11 +16367,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ADVISER_STATUS</name> + <name>SYSTEMNAME</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -16164,11 +16381,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ADVISER_ROLE</name> + <name>USER_EDIT</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -16177,40 +16394,12 @@ <title></title> <description></description> </entityFieldDb> - <entityFieldDb> - <name>VALID_FROM</name> - <dbName></dbName> - <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> - <notNull v="false" /> - <isUnique v="false" /> - <index v="false" /> - <documentation></documentation> - <title></title> - <description></description> - </entityFieldDb> - <entityFieldDb> - <name>VALID_UNTIL</name> - <dbName></dbName> - <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> - <notNull v="false" /> - <isUnique v="false" /> - <index v="false" /> - <documentation></documentation> - <title></title> - <description></description> - </entityFieldDb> </entityFields> </entityDb> <entityDb> - <name>DISTRICTCONTACT</name> + <name>KNOWLEDGEMANAGEMENTTAGMODERATION</name> <dbName></dbName> - <idColumn>DISTRICTCONTACTID</idColumn> + <idColumn>KNOWLEDGEMANAGEMENTTAGMODERATIONID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -16218,7 +16407,7 @@ <description></description> <auditSyncConfig> <name>auditSyncConfig</name> - <auditMode v="1" /> + <auditMode v="0" /> <syncActive v="false" /> <syncComplete v="true" /> <syncDirection v="1" /> @@ -16226,10 +16415,10 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>ORIGIN</name> + <name>STATUS</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> + <columnType v="1" /> <size v="36" /> <scale v="0" /> <notNull v="false" /> @@ -16240,7 +16429,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>STATUS</name> + <name>AB_ATTRIBUTE_ID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> @@ -16248,53 +16437,47 @@ <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> - <title>District assignment status</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/status/customproperties/translate4log/property.js</property> - </customJDitoProperty> - </customProperties> - </entityFieldDb> - <entityFieldDb> - <name>ADVISER_ROLE</name> - <dbName></dbName> - <primaryKey v="false" /> - <columnType v="12" /> - <size v="36" /> - <scale v="0" /> - <notNull v="false" /> - <isUnique v="false" /> - <index v="false" /> - <documentation></documentation> - <title></title> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>ADVISER_CONTACT_ID</name> + <name>KNOWLEDGEMANAGEMENTTAGMODERATIONID</name> <dbName></dbName> - <primaryKey v="false" /> - <columnType v="12" /> + <primaryKey v="true" /> + <columnType v="1" /> <size v="36" /> <scale v="0" /> - <notNull v="false" /> - <isUnique v="false" /> + <notNull v="true" /> + <isUnique v="true" /> <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>KNOWLEDGETAG</name> + <dbName></dbName> + <idColumn>KNOWLEDGETAGID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> <entityFieldDb> - <name>DISTRICTCONTACTID</name> + <name>KNOWLEDGETAGID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -16308,78 +16491,26 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DISTRICT_ID</name> - <dbName></dbName> - <primaryKey v="false" /> - <columnType v="12" /> - <size v="36" /> - <scale v="0" /> - <notNull v="false" /> - <isUnique v="false" /> - <index v="true" /> - <documentation></documentation> - <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> + <name>STATUS</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> + <columnType v="1" /> <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> - <documentation></documentation> - <title></title> - <description></description> - <customProperties> - <customBooleanProperty> - <name>log</name> - <global v="false" /> - <property v="false" /> - </customBooleanProperty> - <customStringProperty> - <name>tableRef</name> - <global v="false" /> - <property>CONTACT</property> - </customStringProperty> - </customProperties> - </entityFieldDb> - <entityFieldDb> - <name>VALID_FROM</name> - <dbName></dbName> - <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> - <notNull v="false" /> - <isUnique v="false" /> <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>VALID_UNTIL</name> + <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -16388,12 +16519,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_EDIT</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -16402,7 +16533,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_EDIT</name> + <name>TAG</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -16416,12 +16547,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_NEW</name> + <name>USER_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -16430,7 +16561,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</name> + <name>USER_EDIT</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -16446,9 +16577,9 @@ </entityFields> </entityDb> <entityDb> - <name>KNOWLEDGEDISCUSSION</name> + <name>KNOWLEDGETAGLINK</name> <dbName></dbName> - <idColumn>KNOWLEDGEDISCUSSIONID</idColumn> + <idColumn>KNOWLEDGETAGLINKID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -16464,11 +16595,11 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>PARENTENTRY</name> + <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="93" /> + <size v="19" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -16478,40 +16609,40 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>STATUS</name> + <name>KNOWLEDGEMANAGEMENT_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> + <columnType v="1" /> <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>DISCUSSIONTEXT</name> + <name>KNOWLEDGETAGLINKID</name> <dbName></dbName> - <primaryKey v="false" /> - <columnType v="2005" /> - <size v="2147483647" /> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> - <notNull v="false" /> - <isUnique v="false" /> - <index v="false" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_EDIT</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -16520,35 +16651,35 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>KNOWLEDGEDISCUSSIONID</name> + <name>KNOWLEDGETAG_ID</name> <dbName></dbName> - <primaryKey v="true" /> + <primaryKey v="false" /> <columnType v="1" /> <size v="36" /> <scale v="0" /> - <notNull v="true" /> - <isUnique v="true" /> + <notNull v="false" /> + <isUnique v="false" /> <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>KNOWLEDGEMANAGEMENT_ID</name> + <name>USER_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="12" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>AUTHOR</name> + <name>USER_EDIT</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -16561,14 +16692,34 @@ <title></title> <description></description> </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>AB_KEYWORD_CATEGORY</name> + <dbName></dbName> + <idColumn>AB_KEYWORD_CATEGORYID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> <entityFieldDb> - <name>DATE_NEW</name> + <name>SORTINGBY</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> - <notNull v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -16576,13 +16727,27 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</name> + <name>AB_KEYWORD_CATEGORYID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SORTINGDIRECTION</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="4" /> <scale v="0" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -16590,13 +16755,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_EDIT</name> + <name>NAME</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="80" /> <scale v="0" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -16606,9 +16771,9 @@ </entityFields> </entityDb> <entityDb> - <name>KNOWLEDGELINK</name> + <name>MST_TEAMLINK</name> <dbName></dbName> - <idColumn>KNOWLEDGELINKID</idColumn> + <idColumn>MST_TEAMLINKID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -16624,54 +16789,102 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>KNOWLEDGELINKID</name> + <name>OBJECT_ROWID</name> <dbName></dbName> - <primaryKey v="true" /> + <primaryKey v="false" /> <columnType v="1" /> <size v="36" /> <scale v="0" /> <notNull v="true" /> - <isUnique v="true" /> + <isUnique v="false" /> <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_EDIT</name> + <name>MST_TEAM_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> - <notNull v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>KNOWLEDGEMANAGEMENT_ID</name> + <name>MST_TEAMLINKID</name> <dbName></dbName> - <primaryKey v="false" /> + <primaryKey v="true" /> <columnType v="1" /> <size v="36" /> <scale v="0" /> - <notNull v="false" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="63" /> + <scale v="0" /> + <notNull v="true" /> <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>MST_TEAM</name> + <dbName></dbName> + <idColumn>MST_TEAMID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>MST_TEAMID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_NEW</name> + <name>IS_ARCHIVED</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <columnType v="-6" /> + <size v="3" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -16680,11 +16893,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</name> + <name>SERVICE_URL</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="255" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -16694,11 +16907,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>OBJECT_TYPE</name> + <name>TEAMNAME</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="100" /> + <size v="255" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -16708,11 +16921,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_EDIT</name> + <name>GENERAL_CHANNELID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> + <columnType v="1" /> + <size v="48" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -16722,15 +16935,15 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ROW_ID</name> + <name>WEB_URL</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="12" /> + <size v="500" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> @@ -16738,13 +16951,12 @@ </entityFields> </entityDb> <entityDb> - <name>KNOWLEDGEMANAGEMENT</name> + <name>OBSERVATION</name> <dbName></dbName> - <idColumn>KNOWLEDGEMANAGEMENTID</idColumn> + <idColumn>OBSERVATIONID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> - <title></title> <description></description> <auditSyncConfig> <name>auditSyncConfig</name> @@ -16755,36 +16967,47 @@ <syncIds></syncIds> </auditSyncConfig> <entityFields> + <entityFieldDb> + <name>OBJECT_FILTER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="-1" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <description></description> + </entityFieldDb> <entityFieldDb> <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> - <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>KNOWLEDGEMANAGEMENTID</name> + <name>OBJECT_TYPE</name> <dbName></dbName> - <primaryKey v="true" /> - <columnType v="1" /> - <size v="36" /> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="80" /> <scale v="0" /> <notNull v="true" /> - <isUnique v="true" /> - <index v="true" /> + <isUnique v="false" /> + <index v="false" /> <documentation></documentation> - <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>AUTHOR_CONTACT_ID</name> + <name>OBSERVATION_ID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> @@ -16794,18 +17017,23 @@ <isUnique v="false" /> <index v="true" /> <documentation></documentation> - <title></title> <description></description> - <customProperties> - <customBooleanProperty> - <name>log</name> - <global v="false" /> - <property v="true" /> - </customBooleanProperty> - </customProperties> </entityFieldDb> <entityFieldDb> - <name>PUBLISH</name> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>NOTIFICATION_PRIO</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -16815,11 +17043,10 @@ <isUnique v="false" /> <index v="false" /> <documentation></documentation> - <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_EDIT</name> + <name>OBJECT_ID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -16827,140 +17054,123 @@ <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> - <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>CONTENTDECODED</name> + <name>OBSERVATIONID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TRIGGEREVENTDELETE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> - <size v="2147483647" /> + <columnType v="-6" /> + <size v="3" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> - <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>TITLE</name> + <name>TRIGGEREVENTINSERT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="255" /> + <columnType v="-6" /> + <size v="3" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> - <title></title> <description></description> - <customProperties> - <customBooleanProperty> - <name>log</name> - <global v="false" /> - <property v="true" /> - </customBooleanProperty> - </customProperties> </entityFieldDb> <entityFieldDb> - <name>CONTENT</name> + <name>TRIGGEREVENTUPDATE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> - <size v="2147483647" /> + <columnType v="-6" /> + <size v="3" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> - <title></title> <description></description> - <customProperties> - <customBooleanProperty> - <name>log</name> - <global v="false" /> - <property v="true" /> - </customBooleanProperty> - </customProperties> </entityFieldDb> <entityFieldDb> <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> - <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</name> + <name>OBSERVER</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> <size v="63" /> <scale v="0" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> - <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>RESPONSIBLE_CONTACT_ID</name> + <name>USER_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="12" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> - <title></title> <description></description> - <customProperties> - <customBooleanProperty> - <name>log</name> - <global v="false" /> - <property v="true" /> - </customBooleanProperty> - </customProperties> </entityFieldDb> <entityFieldDb> - <name>TYPE</name> + <name>OBJECT_FIELD</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="36" /> + <columnType v="-1" /> + <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> - <title></title> <description></description> </entityFieldDb> </entityFields> </entityDb> <entityDb> - <name>KNOWLEDGEROLES</name> + <name>SALESPROJECTPHASEDEFINITION</name> <dbName></dbName> - <idColumn>KNOWLEDGEROLESID</idColumn> + <idColumn>SALESPROJECTPHASEDEFINITIONID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> - <title></title> <description></description> <auditSyncConfig> <name>auditSyncConfig</name> @@ -16972,21 +17182,20 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>KNOWLEDGEROLESID</name> + <name>PHASE</name> <dbName></dbName> - <primaryKey v="true" /> - <columnType v="1" /> + <primaryKey v="false" /> + <columnType v="12" /> <size v="36" /> <scale v="0" /> - <notNull v="true" /> - <isUnique v="true" /> - <index v="true" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> <documentation></documentation> - <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>KNOWLEDGEMANAGEMENT_ID</name> + <name>CHECKLIST_ID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> @@ -16996,83 +17205,32 @@ <isUnique v="false" /> <index v="true" /> <documentation></documentation> - <title></title> <description></description> </entityFieldDb> - <entityFieldDb> - <name>ROLENAME</name> - <dbName></dbName> - <primaryKey v="false" /> - <columnType v="12" /> - <size v="100" /> - <scale v="0" /> - <notNull v="false" /> - <isUnique v="false" /> - <index v="false" /> - <documentation></documentation> - <title></title> - <description></description> - </entityFieldDb> - </entityFields> - </entityDb> - <entityDb> - <name>KNOWLEDGEGITINTERFACE</name> - <dbName></dbName> - <idColumn>KNOWLEDGEGITINTERFACEID</idColumn> - <idGeneratorType v="0" /> - <idGeneratorInterval v="1" /> - <documentation></documentation> - <title></title> - <description></description> - <auditSyncConfig> - <name>auditSyncConfig</name> - <auditMode v="0" /> - <syncActive v="false" /> - <syncComplete v="true" /> - <syncDirection v="1" /> - <syncIds></syncIds> - </auditSyncConfig> - <entityFields> <entityFieldDb> <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> - <title></title> - <description></description> - </entityFieldDb> - <entityFieldDb> - <name>KNOWLEDGEGITINTERFACEID</name> - <dbName></dbName> - <primaryKey v="true" /> - <columnType v="1" /> - <size v="36" /> - <scale v="0" /> - <notNull v="true" /> - <isUnique v="true" /> - <index v="true" /> - <documentation></documentation> - <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>GITCOMMIT</name> + <name>DESCRIPTION</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="200" /> + <size v="500" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> - <title></title> <description></description> </entityFieldDb> <entityFieldDb> @@ -17080,13 +17238,12 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> - <title></title> <description></description> </entityFieldDb> <entityFieldDb> @@ -17100,21 +17257,19 @@ <isUnique v="false" /> <index v="false" /> <documentation></documentation> - <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>SYSTEMNAME</name> + <name>SALESPROJECTPHASEDEFINITIONID</name> <dbName></dbName> - <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> - <notNull v="false" /> - <isUnique v="false" /> - <index v="false" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> <documentation></documentation> - <title></title> <description></description> </entityFieldDb> <entityFieldDb> @@ -17128,36 +17283,15 @@ <isUnique v="false" /> <index v="false" /> <documentation></documentation> - <title></title> <description></description> </entityFieldDb> - </entityFields> - </entityDb> - <entityDb> - <name>KNOWLEDGEMANAGEMENTTAGMODERATION</name> - <dbName></dbName> - <idColumn>KNOWLEDGEMANAGEMENTTAGMODERATIONID</idColumn> - <idGeneratorType v="0" /> - <idGeneratorInterval v="1" /> - <documentation></documentation> - <title></title> - <description></description> - <auditSyncConfig> - <name>auditSyncConfig</name> - <auditMode v="0" /> - <syncActive v="false" /> - <syncComplete v="true" /> - <syncDirection v="1" /> - <syncIds></syncIds> - </auditSyncConfig> - <entityFields> <entityFieldDb> - <name>STATUS</name> + <name>AUTOPROBABILITY</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> - <scale v="0" /> + <columnType v="3" /> + <size v="6" /> + <scale v="2" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -17165,44 +17299,15 @@ <title></title> <description></description> </entityFieldDb> - <entityFieldDb> - <name>AB_ATTRIBUTE_ID</name> - <dbName></dbName> - <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> - <scale v="0" /> - <notNull v="false" /> - <isUnique v="false" /> - <index v="true" /> - <documentation></documentation> - <title></title> - <description></description> - </entityFieldDb> - <entityFieldDb> - <name>KNOWLEDGEMANAGEMENTTAGMODERATIONID</name> - <dbName></dbName> - <primaryKey v="true" /> - <columnType v="1" /> - <size v="36" /> - <scale v="0" /> - <notNull v="true" /> - <isUnique v="true" /> - <index v="true" /> - <documentation></documentation> - <title></title> - <description></description> - </entityFieldDb> </entityFields> </entityDb> <entityDb> - <name>KNOWLEDGETAG</name> + <name>CHECKLISTENTRY</name> <dbName></dbName> - <idColumn>KNOWLEDGETAGID</idColumn> + <idColumn>CHECKLISTENTRYID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> - <title></title> <description></description> <auditSyncConfig> <name>auditSyncConfig</name> @@ -17214,7 +17319,7 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>KNOWLEDGETAGID</name> + <name>CHECKLISTENTRYID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -17224,21 +17329,19 @@ <isUnique v="true" /> <index v="true" /> <documentation></documentation> - <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>STATUS</name> + <name>CHECKLIST_ID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> <size v="36" /> <scale v="0" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> - <title></title> <description></description> </entityFieldDb> <entityFieldDb> @@ -17246,41 +17349,38 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> - <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_NEW</name> + <name>TITLE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <columnType v="12" /> + <size v="100" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> - <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>TAG</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> + <columnType v="93" /> + <size v="19" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> - <title></title> <description></description> </entityFieldDb> <entityFieldDb> @@ -17294,7 +17394,6 @@ <isUnique v="false" /> <index v="false" /> <documentation></documentation> - <title></title> <description></description> </entityFieldDb> <entityFieldDb> @@ -17308,19 +17407,31 @@ <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>AUTO</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="-6" /> + <size v="3" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> <title></title> <description></description> </entityFieldDb> </entityFields> </entityDb> <entityDb> - <name>KNOWLEDGETAGLINK</name> + <name>CHECKLIST</name> <dbName></dbName> - <idColumn>KNOWLEDGETAGLINKID</idColumn> + <idColumn>CHECKLISTID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> - <title></title> <description></description> <auditSyncConfig> <name>auditSyncConfig</name> @@ -17332,35 +17443,7 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>DATE_EDIT</name> - <dbName></dbName> - <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> - <notNull v="false" /> - <isUnique v="false" /> - <index v="false" /> - <documentation></documentation> - <title></title> - <description></description> - </entityFieldDb> - <entityFieldDb> - <name>KNOWLEDGEMANAGEMENT_ID</name> - <dbName></dbName> - <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> - <scale v="0" /> - <notNull v="false" /> - <isUnique v="false" /> - <index v="true" /> - <documentation></documentation> - <title></title> - <description></description> - </entityFieldDb> - <entityFieldDb> - <name>KNOWLEDGETAGLINKID</name> + <name>CHECKLISTID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -17370,35 +17453,32 @@ <isUnique v="true" /> <index v="true" /> <documentation></documentation> - <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_NEW</name> + <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> - <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>KNOWLEDGETAG_ID</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="93" /> + <size v="19" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> - <title></title> <description></description> </entityFieldDb> <entityFieldDb> @@ -17412,7 +17492,6 @@ <isUnique v="false" /> <index v="false" /> <documentation></documentation> - <title></title> <description></description> </entityFieldDb> <entityFieldDb> @@ -17426,19 +17505,17 @@ <isUnique v="false" /> <index v="false" /> <documentation></documentation> - <title></title> <description></description> </entityFieldDb> </entityFields> </entityDb> <entityDb> - <name>AB_KEYWORD_CATEGORY</name> + <name>CHECKLISTENTRYVALUE</name> <dbName></dbName> - <idColumn>AB_KEYWORD_CATEGORYID</idColumn> + <idColumn>CHECKLISTENTRYVALUEID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> - <title></title> <description></description> <auditSyncConfig> <name>auditSyncConfig</name> @@ -17450,41 +17527,130 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>SORTINGBY</name> + <name>OBJECT_ROWID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="4" /> - <size v="10" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> - <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>AB_KEYWORD_CATEGORYID</name> + <name>IS_FULFILLED</name> <dbName></dbName> - <primaryKey v="true" /> - <columnType v="1" /> - <size v="36" /> + <primaryKey v="false" /> + <columnType v="5" /> + <size v="5" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="19" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CHECKLISTENTRYVALUEID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> <notNull v="true" /> <isUnique v="true" /> <index v="true" /> <documentation></documentation> - <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>SORTINGDIRECTION</name> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="19" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="4" /> + <size v="50" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CHECKLISTENTRY_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DONEDATE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="19" /> + <scale v="0" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -17492,13 +17658,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>NAME</name> + <name>DONEUSER</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="80" /> + <size v="63" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -17508,9 +17674,9 @@ </entityFields> </entityDb> <entityDb> - <name>MST_TEAMLINK</name> + <name>HASDUPLICATE</name> <dbName></dbName> - <idColumn>MST_TEAMLINKID</idColumn> + <idColumn>HASDUPLICATEID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -17532,7 +17698,7 @@ <columnType v="1" /> <size v="36" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="true" /> <documentation></documentation> @@ -17540,43 +17706,43 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>MST_TEAM_ID</name> + <name>OBJECT_TYPE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="12" /> + <size v="63" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>MST_TEAMLINKID</name> + <name>DUPLICATECOUNT</name> <dbName></dbName> - <primaryKey v="true" /> - <columnType v="1" /> - <size v="36" /> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> <scale v="0" /> - <notNull v="true" /> - <isUnique v="true" /> - <index v="true" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>OBJECT_TYPE</name> + <name>HASDUPLICATEID</name> <dbName></dbName> - <primaryKey v="false" /> - <columnType v="12" /> - <size v="63" /> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> <notNull v="true" /> - <isUnique v="false" /> - <index v="false" /> + <isUnique v="true" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> @@ -17584,9 +17750,9 @@ </entityFields> </entityDb> <entityDb> - <name>MST_TEAM</name> + <name>AB_SYNCCONTACT</name> <dbName></dbName> - <idColumn>MST_TEAMID</idColumn> + <idColumn>SYNCCONTACTID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -17602,13 +17768,41 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>MST_TEAMID</name> + <name>DATE_EDIT</name> <dbName></dbName> - <primaryKey v="true" /> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="19" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>EXCHANGEID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="254" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ASYS_FAVORITEID</name> + <dbName></dbName> + <primaryKey v="false" /> <columnType v="1" /> <size v="36" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="true" /> <index v="true" /> <documentation></documentation> @@ -17616,39 +17810,39 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>IS_ARCHIVED</name> + <name>USER_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="5" /> - <size v="5" /> + <columnType v="1" /> + <size v="46" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>SERVICE_URL</name> + <name>CONTACT_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="255" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>TEAMNAME</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="255" /> + <columnType v="93" /> + <size v="19" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -17658,25 +17852,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>GENERAL_CHANNELID</name> + <name>SYNCCONTACTID</name> <dbName></dbName> - <primaryKey v="false" /> + <primaryKey v="true" /> <columnType v="1" /> - <size v="48" /> + <size v="36" /> <scale v="0" /> - <notNull v="false" /> - <isUnique v="false" /> - <index v="false" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>WEB_URL</name> + <name>DATE_DEL</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="500" /> + <columnType v="93" /> + <size v="19" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -17688,12 +17882,13 @@ </entityFields> </entityDb> <entityDb> - <name>OBSERVATION</name> + <name>WEBLINK</name> <dbName></dbName> - <idColumn>OBSERVATIONID</idColumn> + <idColumn>WEBLINKID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> + <title></title> <description></description> <auditSyncConfig> <name>auditSyncConfig</name> @@ -17705,176 +17900,2438 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>OBJECT_FILTER</name> + <name>SCORE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="19" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>LINKTYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="19" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>WEBLINKID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>URL</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="512" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PLACEHOLDER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>WORKFLOWPROCESSDEFINITION_KEY</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ISREDIRECT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="-6" /> + <size v="3" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>WORKFLOWSIGNAL_NAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ACTION_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>WEBLINKTAG</name> + <dbName></dbName> + <idColumn>WEBLINKTAGID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="19" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>WEBLINK_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="19" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TAG</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="100" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>WEBLINKTAGID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>MAIL_LOG</name> + <dbName></dbName> + <idColumn>MAIL_LOGID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>ERRORMESSAGE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="-1" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>MAIL_LOGID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>STATUS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SENDER_EMAIL</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>RECIPIENT_EMAIL</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>MAILING_SUBJECT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="100" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>MAIL_RUN_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_SEND</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="19" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OPENER_LINK_CLICK_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>MAIL_RUN</name> + <dbName></dbName> + <idColumn>MAIL_RUNID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>MAIL_RUNID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT_ROWID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>STATUS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="100" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>INTEREST_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_RUN_START</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="19" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="63" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_RUN_FINISHED</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="19" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TESTRUN</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="5" /> + <size v="5" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>COMMUNICATIONSETTINGS</name> + <dbName></dbName> + <idColumn>COMMUNICATIONSETTINGSID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="1" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>STATUS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title>Status</title> + <description></description> + <customProperties> + <customBooleanProperty> + <name>log</name> + <global v="false" /> + <property v="true" /> + </customBooleanProperty> + <customStringProperty> + <name>keyword</name> + <global v="false" /> + <property>CommunicationSettingStatus</property> + </customStringProperty> + </customProperties> + </entityFieldDb> + <entityFieldDb> + <name>CHANNEL_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title>Channel</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/communicationsettings/entityfields/channel_id/customproperties/translate4log/property.js</property> + </customJDitoProperty> + </customProperties> + </entityFieldDb> + <entityFieldDb> + <name>CHANNEL_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title>Channel type</title> + <description></description> + <customProperties> + <customBooleanProperty> + <name>log</name> + <global v="false" /> + <description></description> + <property v="true" /> + </customBooleanProperty> + <customStringProperty> + <name>keyword</name> + <global v="false" /> + <property>CommunicationChannelType</property> + </customStringProperty> + </customProperties> + </entityFieldDb> + <entityFieldDb> + <name>CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title>Contact</title> + <description></description> + <customProperties> + <customBooleanProperty> + <name>log</name> + <global v="false" /> + <property v="false" /> + </customBooleanProperty> + <customStringProperty> + <name>tableRef</name> + <global v="false" /> + <property>CONTACT</property> + </customStringProperty> + </customProperties> + <dependencies> + <entityDependency> + <name>776b88c0-8606-4445-b5f0-c7a258cd5b00</name> + <entityName>CONTACT</entityName> + <fieldName>CONTACTID</fieldName> + </entityDependency> + </dependencies> + </entityFieldDb> + <entityFieldDb> + <name>COMMUNICATIONSETTINGSID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>MEDIUM</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title>Medium</title> + <description></description> + <customProperties> + <customBooleanProperty> + <name>log</name> + <global v="false" /> + <property v="true" /> + </customBooleanProperty> + <customStringProperty> + <name>keyword</name> + <global v="false" /> + <property>CommunicationMediumCampaign</property> + </customStringProperty> + </customProperties> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="19" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="19" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>COMMUNICATIONLEGALBASE</name> + <dbName></dbName> + <idColumn>COMMUNICATIONLEGALBASEID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>COMMUNICATIONSETTINGS_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="19" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>COMMUNICATIONLEGALBASEID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>VERSION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="19" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>INFO</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="250" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>BULKMAILTESTRECIPIENT</name> + <dbName></dbName> + <idColumn>BULKMAILTESTRECIPIENTID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>BULKMAIL_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>EMAIL_ADDRESS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>BULKMAILTESTRECIPIENTID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>INTERESTLINK</name> + <dbName></dbName> + <idColumn>INTERESTLINKID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>STATUS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>INTEREST_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>INTERESTLINKID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>INTEREST</name> + <dbName></dbName> + <idColumn>INTERESTID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>STATUS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DESCRIPTION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="500" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>INTERESTID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TITLE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>IS_DEFAULT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="-6" /> + <size v="3" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>WEBLINK_CLICK</name> + <dbName></dbName> + <idColumn>WEBLINK_CLICKID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>BROWSER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DEVICE_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>WEBLINK_CLICKID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>MAIL_LOG_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>IP_ADDRESS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>WEBLINK_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OPERATING_SYSTEM</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_OPENED</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="19" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>PLANNING_MONTH</name> + <dbName></dbName> + <idColumn>PLANNING_MONTHID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>PLANNING_MONTHID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>MONTH_FACTOR</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="3" /> + <size v="5" /> + <scale v="2" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>MONTH_NUMBER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>DSGVOCONFIGURATION</name> + <dbName></dbName> + <idColumn>DSGVOCONFIGURATIONID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>FILTER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="-1" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="19" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DSGVOCONFIGURATIONID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="19" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>REASON</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>DSGVODELETEFLAG</name> + <dbName></dbName> + <idColumn>DSGVODELETEFLAGID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="1" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>DSGVODELETEFLAGID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title>Contact Id</title> + <description></description> + <customProperties> + <customBooleanProperty> + <name>log</name> + <global v="false" /> + <property v="false" /> + </customBooleanProperty> + <customStringProperty> + <name>tableRef</name> + <global v="false" /> + <property>CONTACT</property> + </customStringProperty> + </customProperties> + <dependencies> + <entityDependency> + <name>2278befb-de66-4f45-98c2-619eb686d999</name> + <entityName>CONTACT</entityName> + <fieldName>CONTACTID</fieldName> + </entityDependency> + </dependencies> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="19" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>REASON</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title>Reason</title> + <description></description> + <customProperties> + <customBooleanProperty> + <name>log</name> + <global v="false" /> + <property v="true" /> + </customBooleanProperty> + <customStringProperty> + <name>keyword</name> + <global v="false" /> + <property>DSGVOReason</property> + </customStringProperty> + </customProperties> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>LEADS</name> + <dbName></dbName> + <idColumn>LEADSID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>ZIP</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CUSTOMERCODE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="19" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>FIRSTNAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ATTRIBUTE_LOYALTY</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="100" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DUPLICAT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>P_COMMINTERNET</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="254" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>STATUS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>MIDDLENAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>COUNTRY</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="2" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>LASTNAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SALUTATION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="30" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TAXCODE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="30" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ORGCOUNTRYCODE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>P_COMMXING</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="254" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>LEADIMPORT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>P_COMMLINKEDIN</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="254" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>BUILDINGNO</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ISOLANGUAGE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ATTRIBUTE_INDUSTRY</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="100" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACTPOSITION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ATTRIBUTE03</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="100" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ATTRIBUTE02</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="100" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACTROLE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="60" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>P_COMMBLOG</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="254" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PERSINFO</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="-1" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DEPARTMENT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>NAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="250" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>REGION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>O_COMMXING</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="254" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PERSON_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ADDRESS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SOURCE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>O_COMMPHONE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="254" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>O_COMMMOBIL</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="254" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>O_COMMINTERNET</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="254" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>LEGALFORM</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>O_COMMEMAIL</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="254" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DISTRICT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>O_COMMLINKEDIN</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="254" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DUPSTATUS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="20" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>O_COMMBLOG</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="254" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>GENDER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ATTRIBUTE04</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> - <size v="2147483647" /> + <columnType v="12" /> + <size v="100" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_EDIT</name> + <name>LETTERSALUTATION</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <columnType v="12" /> + <size v="100" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>OBJECT_TYPE</name> + <name>USER_NEW</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="80" /> + <size v="50" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>OBSERVATION_ID</name> + <name>P_COMMPHONE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="12" /> + <size v="254" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_EDIT</name> + <name>ORGANISATION_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>NOTIFICATION_PRIO</name> + <name>P_COMMMOBIL</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <size v="254" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>OBJECT_ID</name> + <name>USER_EDIT</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="63" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>OBSERVATIONID</name> + <name>CITY</name> <dbName></dbName> - <primaryKey v="true" /> - <columnType v="1" /> - <size v="36" /> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> <scale v="0" /> - <notNull v="true" /> - <isUnique v="true" /> - <index v="true" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>TRIGGEREVENTDELETE</name> + <name>DATEOFBIRTH</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="5" /> - <size v="5" /> + <columnType v="93" /> + <size v="19" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>TRIGGEREVENTINSERT</name> + <name>VATCODE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="5" /> - <size v="5" /> + <columnType v="12" /> + <size v="30" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>TRIGGEREVENTUPDATE</name> + <name>P_COMMEMAIL</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="5" /> - <size v="5" /> + <columnType v="12" /> + <size v="254" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_NEW</name> + <name>ORGINFO</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <columnType v="-1" /> + <size v="2147483647" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>OBSERVER</name> + <name>PROVINCE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="63" /> + <size v="50" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</name> + <name>TITLE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -17884,30 +20341,47 @@ <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>OBJECT_FIELD</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> - <size v="2147483647" /> + <columnType v="93" /> + <size v="19" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>LEADSID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> <description></description> </entityFieldDb> </entityFields> </entityDb> <entityDb> - <name>SALESPROJECTPHASEDEFINITION</name> + <name>STANDARD_WORKFLOW</name> <dbName></dbName> - <idColumn>SALESPROJECTPHASEDEFINITIONID</idColumn> + <idColumn>STANDARD_WORKFLOWID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> + <title></title> <description></description> <auditSyncConfig> <name>auditSyncConfig</name> @@ -17919,42 +20393,17 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>PHASE</name> - <dbName></dbName> - <primaryKey v="false" /> - <columnType v="12" /> - <size v="36" /> - <scale v="0" /> - <notNull v="false" /> - <isUnique v="false" /> - <index v="false" /> - <documentation></documentation> - <description></description> - </entityFieldDb> - <entityFieldDb> - <name>CHECKLIST_ID</name> + <name>STANDARD_WORKFLOWID</name> <dbName></dbName> - <primaryKey v="false" /> + <primaryKey v="true" /> <columnType v="1" /> <size v="36" /> <scale v="0" /> - <notNull v="false" /> - <isUnique v="false" /> + <notNull v="true" /> + <isUnique v="true" /> <index v="true" /> <documentation></documentation> - <description></description> - </entityFieldDb> - <entityFieldDb> - <name>DATE_EDIT</name> - <dbName></dbName> - <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> - <notNull v="false" /> - <isUnique v="false" /> - <index v="false" /> - <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> @@ -17962,75 +20411,81 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="500" /> + <size v="4000" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_NEW</name> + <name>PROCESSXML</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> - <notNull v="false" /> + <columnType v="2004" /> + <size v="65535" /> + <scale v="0" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</name> + <name>DIAGRAM</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> + <columnType v="2004" /> + <size v="65535" /> <scale v="0" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>SALESPROJECTPHASEDEFINITIONID</name> + <name>PROCESSKEY</name> <dbName></dbName> - <primaryKey v="true" /> - <columnType v="1" /> - <size v="36" /> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> <scale v="0" /> <notNull v="true" /> - <isUnique v="true" /> - <index v="true" /> + <isUnique v="false" /> + <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_EDIT</name> + <name>NAME</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="255" /> <scale v="0" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> </entityFields> </entityDb> <entityDb> - <name>CHECKLISTENTRY</name> + <name>ADVERTISING</name> <dbName></dbName> - <idColumn>CHECKLISTENTRYID</idColumn> + <idColumn>ADVERTISINGID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> + <title></title> <description></description> <auditSyncConfig> <name>auditSyncConfig</name> @@ -18042,7 +20497,7 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>CHECKLISTENTRYID</name> + <name>ADVERTISINGID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -18052,94 +20507,115 @@ <isUnique v="true" /> <index v="true" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>CHECKLIST_ID</name> + <name>RESPONSIBLE_ID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> <size v="36" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_EDIT</name> + <name>CONTACT_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>TITLE</name> + <name>OBJECT_TYPE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="100" /> + <size v="63" /> <scale v="0" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_NEW</name> + <name>ROW_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CURRENCY</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</name> + <name>STATUS</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_EDIT</name> + <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> + <columnType v="93" /> + <size v="19" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>AUTO</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="5" /> - <size v="5" /> + <columnType v="93" /> + <size v="19" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -18149,12 +20625,13 @@ </entityFields> </entityDb> <entityDb> - <name>CHECKLIST</name> + <name>ADVERTISINGITEM</name> <dbName></dbName> - <idColumn>CHECKLISTID</idColumn> + <idColumn>ADVERTISINGITEMID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> + <title></title> <description></description> <auditSyncConfig> <name>auditSyncConfig</name> @@ -18166,7 +20643,7 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>CHECKLISTID</name> + <name>ADVERTISINGITEMID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -18176,6 +20653,35 @@ <isUnique v="true" /> <index v="true" /> <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>UNIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PRICE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="3" /> + <size v="14" /> + <scale v="2" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> @@ -18183,38 +20689,69 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_NEW</name> + <name>QUANTITY</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <columnType v="3" /> + <size v="14" /> + <scale v="2" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</name> + <name>INFO</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> + <columnType v="-1" /> + <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PRODUCT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>FREE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="-6" /> + <size v="3" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> @@ -18228,77 +20765,63 @@ <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> - </entityFields> - </entityDb> - <entityDb> - <name>CHECKLISTENTRYVALUE</name> - <dbName></dbName> - <idColumn>CHECKLISTENTRYVALUEID</idColumn> - <idGeneratorType v="0" /> - <idGeneratorInterval v="1" /> - <documentation></documentation> - <description></description> - <auditSyncConfig> - <name>auditSyncConfig</name> - <auditMode v="0" /> - <syncActive v="false" /> - <syncComplete v="true" /> - <syncDirection v="1" /> - <syncIds></syncIds> - </auditSyncConfig> - <entityFields> <entityFieldDb> - <name>OBJECT_ROWID</name> + <name>DELIVERY</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> + <columnType v="12" /> <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>IS_FULFILLED</name> + <name>TARGETAMOUNT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="5" /> - <size v="5" /> - <scale v="0" /> + <columnType v="3" /> + <size v="14" /> + <scale v="2" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_EDIT</name> + <name>ITEMPOSITION</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <columnType v="12" /> + <size v="30" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>CHECKLISTENTRYVALUEID</name> + <name>STATUS</name> <dbName></dbName> - <primaryKey v="true" /> - <columnType v="1" /> + <primaryKey v="false" /> + <columnType v="12" /> <size v="36" /> <scale v="0" /> - <notNull v="true" /> - <isUnique v="true" /> - <index v="true" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> @@ -18306,12 +20829,13 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <size v="19" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> @@ -18325,53 +20849,57 @@ <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>OBJECT_TYPE</name> + <name>ACTUALAMOUNT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> - <scale v="0" /> + <columnType v="3" /> + <size v="14" /> + <scale v="2" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_EDIT</name> + <name>SENT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> + <columnType v="-6" /> + <size v="3" /> <scale v="0" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>CHECKLISTENTRY_ID</name> + <name>ADVERTISING_ID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> <size v="36" /> <scale v="0" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> </entityFields> </entityDb> <entityDb> - <name>AB_SYNCCONTACT</name> + <name>EMAIL_FILTER_HANDLING</name> <dbName></dbName> - <idColumn>SYNCCONTACTID</idColumn> + <idColumn>EMAIL_FILTER_HANDLINGID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -18387,12 +20915,12 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>DATE_EDIT</name> + <name>FILTER</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <columnType v="-1" /> + <size v="2147483647" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -18401,69 +20929,69 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>EXCHANGEID</name> + <name>WORKFLOWDEFINITION_KEY</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="254" /> + <size v="255" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>ASYS_FAVORITEID</name> + <name>FILTER_TYPE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> + <columnType v="12" /> <size v="36" /> <scale v="0" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_ID</name> + <name>TITLE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="46" /> + <columnType v="12" /> + <size v="250" /> <scale v="0" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>CONTACT_ID</name> + <name>EMAIL_FILTER_HANDLINGID</name> <dbName></dbName> - <primaryKey v="false" /> + <primaryKey v="true" /> <columnType v="1" /> <size v="36" /> <scale v="0" /> - <notNull v="false" /> - <isUnique v="false" /> + <notNull v="true" /> + <isUnique v="true" /> <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_NEW</name> + <name>PRIORITY</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> - <notNull v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -18471,26 +20999,26 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>SYNCCONTACTID</name> + <name>ISACTIVE</name> <dbName></dbName> - <primaryKey v="true" /> - <columnType v="1" /> - <size v="36" /> + <primaryKey v="false" /> + <columnType v="-6" /> + <size v="3" /> <scale v="0" /> <notNull v="true" /> - <isUnique v="true" /> - <index v="true" /> + <isUnique v="false" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_DEL</name> + <name>DESCRIPTION</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <columnType v="12" /> + <size v="500" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -18498,6 +21026,20 @@ <title></title> <description></description> </entityFieldDb> + <entityFieldDb> + <name>ISFALLTHROUGH</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="-6" /> + <size v="3" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> </entityFields> </entityDb> </entities> diff --git a/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/communicationsettings/entityfields/channel_id/customproperties/translate4log/property.js b/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/communicationsettings/entityfields/channel_id/customproperties/translate4log/property.js new file mode 100644 index 0000000000000000000000000000000000000000..c3396d4867a8a4c54cc90cb104d521c703254da3 --- /dev/null +++ b/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/communicationsettings/entityfields/channel_id/customproperties/translate4log/property.js @@ -0,0 +1,23 @@ +import("Sql_lib"); +import("Contact_lib"); +import("system.result"); +import("Loghistory_lib"); +import("PostalAddress_lib"); + +var params = Translate4LogParams.load(); + +var displayValue = ""; +if (params.value) +{ + displayValue = newSelect("ADDR") + .from("COMMUNICATION") + .where("COMMUNICATION.COMMUNICATIONID", params.value) + .cell(); + + if (!displayValue) + { + displayValue = AddressUtils.getFormattedOnlineAddressById(params.value); + } +} + +result.string(displayValue); \ No newline at end of file diff --git a/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/lead/documentation.adoc b/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/lead/documentation.adoc deleted file mode 100644 index e8620e87403b2200fd7d970063f1412faa7980dc..0000000000000000000000000000000000000000 --- a/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/lead/documentation.adoc +++ /dev/null @@ -1,3 +0,0 @@ -== LEAD - -Used to store leads (potential interested contacts) \ No newline at end of file diff --git a/aliasDefinition/Data_alias_noAudit/Data_alias_noAudit.aod b/aliasDefinition/Data_alias_noAudit/Data_alias_noAudit.aod new file mode 100644 index 0000000000000000000000000000000000000000..5b08bfa758bd3d89880949aedb36d889fdd00d1b --- /dev/null +++ b/aliasDefinition/Data_alias_noAudit/Data_alias_noAudit.aod @@ -0,0 +1,17608 @@ +<?xml version="1.0" encoding="UTF-8"?> +<aliasDefinition xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/aliasDefinition/1.2.0"> + <name>Data_alias_noAudit</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <datasourceType v="0" /> + <aliasDefinitionSub> + <aliasDefDb> + <auditActive v="false" /> + <entityGroup> + <name>entityGroup</name> + <entities> + <entityDb> + <name>KNOWLEDGEDISCUSSION</name> + <dbName></dbName> + <idColumn>KNOWLEDGEDISCUSSIONID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>PARENTENTRY</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>STATUS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DISCUSSIONTEXT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>KNOWLEDGEDISCUSSIONID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>KNOWLEDGEMANAGEMENT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>AUTHOR</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>SALESPROJECTPHASEDEFINITION</name> + <dbName></dbName> + <idColumn>SALESPROJECTPHASEDEFINITIONID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>PHASE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CHECKLIST_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DESCRIPTION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="500" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SALESPROJECTPHASEDEFINITIONID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>EXPORTTEMPLATEPLACEOFUSE</name> + <dbName></dbName> + <idColumn>EXPORTTEMPLATEPLACEOFUSEID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>EXPORTTEMPLATEPLACEOFUSEID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PLACEOFUSE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>EXPORTTEMPLATE_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>IMPORTFIELD</name> + <dbName></dbName> + <idColumn>IMPORTFIELDID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>IMPORTFIELDID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>FIELDNAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="100" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>MAPPINGFIELD</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="100" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>FIELDNUMBER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>LEADIMPORT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>KNOWLEDGELINK</name> + <dbName></dbName> + <idColumn>KNOWLEDGELINKID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>KNOWLEDGELINKID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>KNOWLEDGEMANAGEMENT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="100" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ROW_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>CHECKLISTENTRY</name> + <dbName></dbName> + <idColumn>CHECKLISTENTRYID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>CHECKLISTENTRYID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>AUTO</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="5" /> + <size v="5" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CHECKLIST_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TITLE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="100" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>AB_PERMISSIONCALENDAR</name> + <dbName></dbName> + <idColumn>AB_PERMISSIONCALENDARID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>PERMISSION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PERMISSIONPROCURER_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>AB_PERMISSIONCALENDARID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PERMISSIONPROCURER_ROWID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PERMISSIONDEALER_ROWID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PERMISSIONDEALER_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>AB_ATTRIBUTEUSAGE</name> + <dbName></dbName> + <idColumn>AB_ATTRIBUTEUSAGEID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>AB_ATTRIBUTEUSAGEID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>MIN_COUNT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>MAX_COUNT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>AB_ATTRIBUTE_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="63" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>AB_SYNCCONTACT</name> + <dbName></dbName> + <idColumn>SYNCCONTACTID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>EXCHANGEID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="254" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ASYS_FAVORITEID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="46" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SYNCCONTACTID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_DEL</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>CLASSIFICATIONTYPE</name> + <dbName></dbName> + <idColumn>CLASSIFICATIONTYPEID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>SCORETYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="80" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>FILTER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CLASSIFICATIONTYPEID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CLASSIFICATIONGROUP_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OUTDATED</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="5" /> + <size v="5" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SCOREPOINTS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>AB_KEYWORD_CATEGORY</name> + <dbName></dbName> + <idColumn>AB_KEYWORD_CATEGORYID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>SORTINGBY</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>AB_KEYWORD_CATEGORYID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SORTINGDIRECTION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="4" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>NAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="80" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>PERSON</name> + <dbName></dbName> + <idColumn>PERSONID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>PERSONID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TITLESUFFIX</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PICTURE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2004" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>FIRSTNAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>MIDDLENAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATEOFBIRTH</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="91" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>LASTNAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SALUTATION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="16" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>GENDER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TITLE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>AB_UNLINKEDMAIL</name> + <dbName></dbName> + <idColumn>AB_UNLINKEDMAILID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>MAIL</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SENDER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="1000" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SUBJECT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="200" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>AB_UNLINKEDMAILID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>RECIPIENTS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SENTDATE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>CLASSIFICATION</name> + <dbName></dbName> + <idColumn>CLASSIFICATIONID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>CLASSIFICATIONTYPE_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT_ROWID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CLASSIFICATIONID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>VALUE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SCOREPOINTS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2" /> + <size v="14" /> + <scale v="2" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>CLASSIFICATIONGRADING</name> + <dbName></dbName> + <idColumn>CLASSIFICATIONGRADINGID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>CLASSIFICATIONGRADINGID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CLASSIFICATIONGROUP_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>MINPERCENT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>GRADING</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="1" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>CAMPAIGNPARTICIPANTLOG</name> + <dbName></dbName> + <idColumn>CAMPAIGNPARTICIPANTLOGID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>CAMPAIGN_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CAMPAIGNPARTICIPANT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PREVIOUS_CAMPAIGNSTEP_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CAMPAIGNPARTICIPANTLOGID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CAMPAIGNSTEP_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>WORKFLOWSTARTCONFIG</name> + <dbName></dbName> + <idColumn>WORKFLOWSTARTCONFIGID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>TRIGGER_EVENT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>WORKFLOWSTARTCONFIGID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PROCESSDEFINITION_KEY</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="63" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>DSGVOINFO</name> + <dbName></dbName> + <idColumn>DSGVOINFOID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>RECIPIENT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>GUARANTEE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TRANSMISSION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DSGVOINFOID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATASOURCE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>PRODUCTPRICE</name> + <dbName></dbName> + <idColumn>PRODUCTPRICEID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>CURRENCY</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>VALID_TO</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PRICE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2" /> + <size v="14" /> + <scale v="2" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>FROMQUANTITY</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2" /> + <size v="14" /> + <scale v="2" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>VAT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2" /> + <size v="14" /> + <scale v="2" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PRICELIST</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>BUYSELL</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="5" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PRODUCT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>VALID_FROM</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PRODUCTPRICEID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>SALESPROJECT_TOUCHPOINT</name> + <dbName></dbName> + <idColumn>SALESPROJECT_TOUCHPOINTID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>SALESPROJECT_TOUCHPOINTID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TOUCHPOINT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ENTRYDATE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>INFO</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SALESPROJECT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>KNOWLEDGEROLES</name> + <dbName></dbName> + <idColumn>KNOWLEDGEROLESID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>KNOWLEDGEROLESID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>KNOWLEDGEMANAGEMENT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ROLENAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="100" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>DSGVOCONFIGURATION</name> + <dbName></dbName> + <idColumn>DSGVOCONFIGURATIONID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>FILTER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DSGVOCONFIGURATIONID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>REASON</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>OFFER</name> + <dbName></dbName> + <idColumn>OFFERID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DISCOUNTED_VAT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2" /> + <size v="14" /> + <scale v="2" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>VERSNR</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>VAT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2" /> + <size v="14" /> + <scale v="2" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>HEADER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>INFO</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="63" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>STATUS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>LETTERSALUTATION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="200" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CURRENCY</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ISOLANGUAGE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="3" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PAYMENTTERMS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DELIVERYTERMS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT_ROWID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OFFER_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>FOOTER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OFFERDATE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OFFERID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DISCOUNT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2" /> + <size v="14" /> + <scale v="2" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OFFERCODE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DISCOUNTED_NET</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2" /> + <size v="14" /> + <scale v="2" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PROBABILITY</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="3" /> + <size v="6" /> + <scale v="2" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ADDRESS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>NET</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2" /> + <size v="14" /> + <scale v="2" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>OFFERITEM</name> + <dbName></dbName> + <idColumn>OFFERITEMID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>UNIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PRICE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2" /> + <size v="14" /> + <scale v="2" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>QUANTITY</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2" /> + <size v="14" /> + <scale v="2" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>VAT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2" /> + <size v="14" /> + <scale v="2" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OFFER_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OFFERITEMID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>INFO</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PRODUCT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DISCOUNT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2" /> + <size v="14" /> + <scale v="2" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ITEMPOSITION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="30" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OPTIONAL</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="5" /> + <size v="5" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>GROUPCODEID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ITEMSORT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ASSIGNEDTO</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ITEMNAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="250" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>VISITPLANEMPLOYEEWEEK</name> + <dbName></dbName> + <idColumn>VISITPLANEMPLOYEEWEEKID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>VISITPLANEMPLOYEEWEEKID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>VISITPLAN_WEEK</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>INFO</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>VISITPLAN_YEAR</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>STOCK</name> + <dbName></dbName> + <idColumn>STOCKID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>REFNUMBER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>STOCKID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>WAREHOUSE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>QUANTITY</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2" /> + <size v="14" /> + <scale v="2" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ENTRYDATE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PRODUCT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>IN_OUT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="5" /> + <size v="5" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>DSGVODELETEFLAG</name> + <dbName></dbName> + <idColumn>DSGVODELETEFLAGID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>DSGVODELETEFLAGID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>REASON</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>DISTRICT</name> + <dbName></dbName> + <idColumn>DISTRICTID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ISO3</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="5" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DISTRICTID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DISTRICT_NAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DISTRICT_INFO</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DISTRICT_AUTOADD</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="5" /> + <size v="5" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DISTRICT_STATUS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PARENTDISTRICT_DISTRICTID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DISTRICT_NUMBER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DISTRICT_FILTER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>AB_COUNTRYINFO</name> + <dbName></dbName> + <idColumn>ISO2</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>ADDR_FORMAT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>NAME_LATIN</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="100" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>NAME_NATIVE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="100" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>FLAG</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2004" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ISO3</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="3" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>REQUIRED_FIELDS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ZIP_REGEX</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="1000" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ISO2</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="2" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>DUPLICATESCANNER</name> + <dbName></dbName> + <idColumn>ID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>ID_FIELD_NAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="100" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SCAN_PATTERN</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>FILTER_NAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="200" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ENTITY_TO_SCAN_NAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="200" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>EXTERNAL_SERVICE_USAGE_ALLOWED</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>CAMPAIGN</name> + <dbName></dbName> + <idColumn>CAMPAIGNID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>CURRENCY</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>LOCATION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="250" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>EVENT_BEGIN</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>NAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CAMPAIGNCODE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>EVENTTYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>STATUS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DESCRIPTION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="500" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>EMPLOYEE_CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>EVENT_END</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CAMPAIGNID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>DOCUMENTTEMPLATE</name> + <dbName></dbName> + <idColumn>DOCUMENTTEMPLATEID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>ISOLANGUAGE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="3" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DESCRIPTION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="500" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DOCUMENTTEMPLATEID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>KIND</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CLASSIFICATION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>REPLACEMENTNAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>NAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>CHECKLIST</name> + <dbName></dbName> + <idColumn>CHECKLISTID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>CHECKLISTID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>AB_LANGUAGE</name> + <dbName></dbName> + <idColumn>ISO3</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>NAME_LATIN</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="100" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>NAME_NATIVE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="100" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ISO3</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="3" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ISACTIVE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="5" /> + <size v="5" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ISO2</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="2" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>LEADIMPORTMAPPINGASSISTANT</name> + <dbName></dbName> + <idColumn>LEADIMPORTMAPPINGASSISTANTID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>LEADIMPORTMAPPINGASSISTANTID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>FIELDNAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="100" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>INPUTVALUE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="300" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OUTPUTVALUE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="300" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>LEADIMPORT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>SERIALLETTER</name> + <dbName></dbName> + <idColumn>SERIALLETTERID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>DOCUMENTTEMPLATE_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>STATUS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DESCRIPTION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="500" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SERIALLETTERID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TITLE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>AB_KEYWORD_ATTRIBUTERELATION</name> + <dbName></dbName> + <idColumn>AB_KEYWORD_ATTRIBUTERELATIONID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>CHAR_VALUE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="63" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>LONG_CHAR_VALUE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>BOOL_VALUE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="5" /> + <size v="5" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>AB_KEYWORD_ATTRIBUTERELATIONID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>NUMBER_VALUE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2" /> + <size v="14" /> + <scale v="2" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>AB_KEYWORD_ATTRIBUTE_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>AB_KEYWORD_ENTRY_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>EXPORTTEMPLATESELECTION</name> + <dbName></dbName> + <idColumn>EXPORTTEMPLATESELECTIONID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>EXPORTTEMPLATESELECTIONID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>EXPORTTEMPLATE_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>FILENAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="33" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>TICKET</name> + <dbName></dbName> + <idColumn>TICKETID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>CODE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TICKETTYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TICKETID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TASK_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>DATABASECHANGELOG</name> + <dbName></dbName> + <idColumn></idColumn> + <idGeneratorType v="1" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>EXECTYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="10" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATEEXECUTED</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ORDEREXECUTED</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>COMMENTS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>AUTHOR</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTEXTS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>MD5SUM</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="35" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DESCRIPTION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>LIQUIBASE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="20" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DEPLOYMENT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TAG</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>LABELS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>FILENAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>VISITPLANENTRY</name> + <dbName></dbName> + <idColumn>VISITPLANENTRYID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>STATUS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>END_TIME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="92" /> + <size v="8" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>BEGIN_TIME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="92" /> + <size v="8" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>VISITPLANEMPLOYEEWEEK_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>VISITRECOMMENDATION_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>STATUS_APPOINTMENT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>VISITPLANENTRYID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>APPOINTMENT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ENTRYDATE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="91" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ORGANISATION_CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>CLASSIFICATIONSCORE</name> + <dbName></dbName> + <idColumn>CLASSIFICATIONSCOREID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>CLASSIFICATIONTYPE_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CLASSIFICATIONSCOREID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SORT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TITLE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SCOREPERCENT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2" /> + <size v="10" /> + <scale v="2" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>DISTRICTCONTACT</name> + <dbName></dbName> + <idColumn>DISTRICTCONTACTID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>ADVISER_ROLE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DISTRICTCONTACTID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DISTRICT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>VALID_UNTIL</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ORIGIN</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>STATUS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ADVISER_CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>VALID_FROM</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>CONTACT</name> + <dbName></dbName> + <idColumn>CONTACTID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>ISOLANGUAGE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="3" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACTPOSITION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACTROLE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ORGANISATION_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DEPARTMENT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACTID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>STATUS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PERSON_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>LETTERSALUTATION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="200" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ADDRESS_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>LEADLOG</name> + <dbName></dbName> + <idColumn>LEADLOGID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>ROWSINSERTED</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>IMPORTSOURCE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="500" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>IMPORTERRORS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>LEADLOGID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>IMPORTCANCELED</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="1" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>LEADIMPORT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>LEADTEMP</name> + <dbName></dbName> + <idColumn>LEADTEMPID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>COLUMN18</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="300" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>COLUMN17</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="300" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>COLUMN19</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="300" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>COLUMN14</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="300" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>COLUMN13</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="300" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>COLUMN16</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="300" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>COLUMN15</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="300" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>COLUMN10</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="300" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>COLUMN12</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="300" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>COLUMN11</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="300" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>COLUMN30</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="300" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>LEADTEMPID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>POSITION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>IMPORT_DATE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>COLUMN07</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="300" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>COLUMN29</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="300" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>COLUMN06</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="300" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>COLUMN28</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="300" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>COLUMN09</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="300" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>COLUMN08</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="300" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>COLUMN03</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="300" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>COLUMN25</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="300" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>COLUMN02</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="300" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>COLUMN24</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="300" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>COLUMN05</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="300" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>COLUMN27</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="300" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>COLUMN04</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="300" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>COLUMN26</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="300" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>COLUMN21</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="300" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>COLUMN20</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="300" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>COLUMN01</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="300" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>COLUMN23</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="300" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>COLUMN22</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="300" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>NAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ROW_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>BULKMAILRECIPIENT</name> + <dbName></dbName> + <idColumn>BULKMAILRECIPIENTID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>STATUS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>BULKMAIL_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>EMAIL_ADDRESS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PROBLEM</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>BULKMAILRECIPIENTID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SENTDATE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>IS_TEST_RECIPIENT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="5" /> + <size v="5" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>LEADIMPORT</name> + <dbName></dbName> + <idColumn>LEADIMPORTID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>RECORD_SEPARATOR</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>FIELD_SEPARATOR</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>NAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>LEADIMPORTID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>IMPORTEMPLOYEE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>IMPORTSOURCE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="500" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>STATUS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>IMPORT_DATE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>FIELD_DELIMITER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>HEADLINE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="1" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>FORECAST</name> + <dbName></dbName> + <idColumn>FORECASTID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>OBJECT_ROWID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>GROUPCODE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>FORECASTID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>VOLUME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_START</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>INFO</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="63" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>STATUS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>KIND</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>FORECAST_YEAR</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>RESPONSIBLE_CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>VISITRECOMMENDATION</name> + <dbName></dbName> + <idColumn>VISITRECOMMENDATIONID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>RESPONSIBLE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>STATUS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DUE_DATE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SOURCE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>VISITRECOMMENDATIONID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PRIORITY</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACT_PERSON_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>INFO</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>OBSERVATION</name> + <dbName></dbName> + <idColumn>OBSERVATIONID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>OBJECT_FILTER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="80" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBSERVATION_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>NOTIFICATION_PRIO</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="63" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBSERVATIONID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TRIGGEREVENTDELETE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="5" /> + <size v="5" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TRIGGEREVENTINSERT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="5" /> + <size v="5" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TRIGGEREVENTUPDATE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="5" /> + <size v="5" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBSERVER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="63" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT_FIELD</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>SALUTATION</name> + <dbName></dbName> + <idColumn>SALUTATIONID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>ISOLANGUAGE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="3" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SALUTATION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="200" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SEX</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SORT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SALUTATIONID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TITLE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="30" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>HEADLINE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>LETTERSALUTATION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="200" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>CLASSIFICATIONSTORAGE</name> + <dbName></dbName> + <idColumn>CLASSIFICATIONSTORAGEID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>OBJECT_ROWID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CLASSIFICATIONVALUE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="20" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CLASSIFICATIONSTORAGEID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OUTDATED</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="5" /> + <size v="5" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="63" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>COMPETITION</name> + <dbName></dbName> + <idColumn>COMPETITIONID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>OBJECT_ROWID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PHASE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>STATUS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>COMPETITIONID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>INFO</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="63" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>REASON</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_CANCELLED</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>MST_TEAM</name> + <dbName></dbName> + <idColumn>MST_TEAMID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>MST_TEAMID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>IS_ARCHIVED</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="5" /> + <size v="5" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SERVICE_URL</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TEAMNAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>GENERAL_CHANNELID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="48" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>WEB_URL</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="500" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>PRODUCT</name> + <dbName></dbName> + <idColumn>PRODUCTID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>UNIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PICTURE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2004" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ADVERTISING</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="1" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PRODUCTID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PRODUCTNAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="100" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PRODUCTCODE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="100" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>MINSTOCK</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>GROUPCODEID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>STATUS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>TASK</name> + <dbName></dbName> + <idColumn>TASKID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>REQUESTOR_CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PRIORITY</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>START_DATE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>MATURITY_DATE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PARENT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TASKID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>STATUS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DESCRIPTION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>KIND</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PROGRESS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>EDITOR_CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SUBJECT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="254" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PROTECTIONLEVEL</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="5" /> + <size v="5" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PARENT_CONTEXT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="64" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>AB_KEYWORD_ENTRY</name> + <dbName></dbName> + <idColumn>AB_KEYWORD_ENTRYID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>ISESSENTIAL</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="5" /> + <size v="5" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTAINER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="80" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SORTING</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TITLE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="100" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>KEYID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ISACTIVE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="5" /> + <size v="5" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>AB_KEYWORD_CATEGORY_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>AB_KEYWORD_ENTRYID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>AB_OBJECTRELATIONTYPE</name> + <dbName></dbName> + <idColumn>AB_OBJECTRELATIONTYPEID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>AB_OBJECTRELATIONTYPEID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SIDE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>RELATION_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ICON</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>RELATION_TITLE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="80" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>HIERARCHY</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>CLASSIFICATIONGROUP</name> + <dbName></dbName> + <idColumn>CLASSIFICATIONGROUPID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>CLASSIFICATIONGROUPID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SORTING</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="5" /> + <size v="5" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TITLE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>AB_APPOINTMENTLINK</name> + <dbName></dbName> + <idColumn>AB_APPOINTMENTLINK_ID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>OBJECT_ROWID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="512" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>AB_APPOINTMENTLINK_ID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>APPOINTMENT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="512" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="63" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>CAMPAIGNSTEP</name> + <dbName></dbName> + <idColumn>CAMPAIGNSTEPID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>CAMPAIGN_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PREDECESSORSTEP_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CAMPAIGNSTEPID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>NAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>STATUS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DESCRIPTION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="500" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>STEPMEDIUM</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_START</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="91" /> + <size v="10" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>EMPLOYEE_CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SORTING</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>MAXPARTICIPANTS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_END</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="91" /> + <size v="10" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>ORGANISATION</name> + <dbName></dbName> + <idColumn>ORGANISATIONID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>CUSTOMERCODE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="30" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PICTURE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2004" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>KIND</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>INFO</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SALESAREA</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="5" /> + <size v="5" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ORGANISATIONID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>NAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>CAMPAIGNCOST</name> + <dbName></dbName> + <idColumn>CAMPAIGNCOSTID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>CAMPAIGN_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CAMPAIGNCOSTID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CATEGORY</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>NET</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2" /> + <size v="14" /> + <scale v="2" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CAMPAIGNSTEP_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>DSGVO</name> + <dbName></dbName> + <idColumn>DSGVOID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>DSGVOTYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>VALID_TO</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>STATUORITYSOURCE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DSGVOID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PURPOSE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ROW_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>AB_ATTRIBUTERELATION</name> + <dbName></dbName> + <idColumn>AB_ATTRIBUTERELATIONID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>INT_VALUE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT_ROWID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_VALUE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>NUMBER_VALUE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2" /> + <size v="14" /> + <scale v="2" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>AB_ATTRIBUTERELATIONID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="63" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CHAR_VALUE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="512" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>AB_ATTRIBUTE_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ID_VALUE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>ACTIVITYLINK</name> + <dbName></dbName> + <idColumn>ACTIVITYLINKID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>OBJECT_ROWID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ACTIVITYLINKID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ACTIVITY_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="63" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>ADDRESS</name> + <dbName></dbName> + <idColumn>ADDRESSID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>ZIP</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>LON</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="3" /> + <size v="11" /> + <scale v="8" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ADDR_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>REGION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ADDRESSADDITION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="60" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DISTRICT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CITY</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>COUNTRY</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="2" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ADDRESS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ADDRESSID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PROVINCE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ADDRIDENTIFIER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="60" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>LAT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="3" /> + <size v="10" /> + <scale v="8" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>BUILDINGNO</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>DOCUMENTTEMPLATELINK</name> + <dbName></dbName> + <idColumn>DOCUMENTTEMPLATELINKID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DOCUMENTTEMPLATE_ID_PARENT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DOCUMENTTEMPLATELINKID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DOCUMENTTEMPLATE_ID_CHILD</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>WORKFLOWSIGNAL</name> + <dbName></dbName> + <idColumn>WORKFLOWSIGNALID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>SIGNAL_NAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>WORKFLOWSIGNALID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TRIGGER_EVENT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT_CONDITION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="512" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PROCESSDEFINITION_KEY</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>VARIABLES</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="512" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="63" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>KNOWLEDGEMANAGEMENT</name> + <dbName></dbName> + <idColumn>KNOWLEDGEMANAGEMENTID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>CONTENTDECODED</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>KNOWLEDGEMANAGEMENTID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>AUTHOR_CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TITLE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTENT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PUBLISH</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="63" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>RESPONSIBLE_CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="63" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>BULKMAIL</name> + <dbName></dbName> + <idColumn>BULKMAILID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>DOCUMENTTEMPLATE_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USE_TEMPLATE_ATTACHMENTS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="5" /> + <size v="5" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>STATUS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>BULKMAILID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DESCRIPTION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="500" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TESTING_CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SUBJECT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="100" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TESTING_EMAIL_ADDRESS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CREATEACTIVITIES</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="5" /> + <size v="5" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>NAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>INTEREST_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SENDER_EMAIL_ADDRESS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_TO_SEND</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>COMMUNICATION</name> + <dbName></dbName> + <idColumn>COMMUNICATIONID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>ISSTANDARD</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="5" /> + <size v="5" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>MEDIUM_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>COMMUNICATIONID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ADDR</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>AB_OBJECTRELATION</name> + <dbName></dbName> + <idColumn>AB_OBJECTRELATIONID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>AB_OBJECTRELATIONTYPE1</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>AB_OBJECTRELATIONTYPE2</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT2_ROWID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>INFO</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT1_ROWID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>AB_OBJECTRELATIONID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>UNRELATEDDUPLICATES</name> + <dbName></dbName> + <idColumn>ID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>SOURCEDUPLICATEID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>UNRELATEDDUPLICATEID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DUPLICATETYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="63" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>KNOWLEDGEGITINTERFACE</name> + <dbName></dbName> + <idColumn>KNOWLEDGEGITINTERFACEID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>KNOWLEDGEGITINTERFACEID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>GITCOMMIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="200" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SYSTEMNAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>TASKLINK</name> + <dbName></dbName> + <idColumn>TASKLINKID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>OBJECT_ROWID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="63" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TASKLINKID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TASK_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>KNOWLEDGETAG</name> + <dbName></dbName> + <idColumn>KNOWLEDGETAGID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>KNOWLEDGETAGID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>STATUS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TAG</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>DOCUMENTTEMPLATEPLACEOFUSE</name> + <dbName></dbName> + <idColumn>DOCUMENTTEMPLATEPLACEOFUSEID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>DOCUMENTTEMPLATE_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PLACEOFUSE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DOCUMENTTEMPLATEPLACEOFUSEID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>LETTERRECIPIENT</name> + <dbName></dbName> + <idColumn>LETTERRECIPIENTID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>SERIALLETTER_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>LETTERRECIPIENTID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>MST_TEAMLINK</name> + <dbName></dbName> + <idColumn>MST_TEAMLINKID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>OBJECT_ROWID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>MST_TEAM_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>MST_TEAMLINKID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="63" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>CONTRACT</name> + <dbName></dbName> + <idColumn>CONTRACTID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>CONTRACTCODE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="30" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTRACTDUE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PAYMENT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTRACTID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTRACTSTATUS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTRACTEND</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTRACTTYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTRACTSTART</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>REMARK</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>SALESPROJECT</name> + <dbName></dbName> + <idColumn>SALESPROJECTID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>STARTDATE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>VOLUME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2" /> + <size v="14" /> + <scale v="2" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>INFO</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ENDDATE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PHASE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PROBABILITY</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="3" /> + <size v="6" /> + <scale v="2" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>STATUS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PROJECTCODE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>REASONS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="498" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SALESPROJECTID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PROJECTTITLE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="150" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>CAMPAIGNPARTICIPANT</name> + <dbName></dbName> + <idColumn>CAMPAIGNPARTICIPANTID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>CAMPAIGN_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CAMPAIGNPARTICIPANTID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>RESPONSIBLE_CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CAMPAIGNSTEP_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>DESCRIPTIONTRANSLATION</name> + <dbName></dbName> + <idColumn>DESCRIPTIONTRANSLATIONID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>OBJECT_ROWID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DESCRIPTIONTRANSLATIONID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DESCRIPTION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>LANG</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>DISTRICTRESPONSIBLE</name> + <dbName></dbName> + <idColumn>DISTRICTRESPONSIBLEID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>ADVISER_STATUS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DISTRICTRESPONSIBLEID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ADVISER_ROLE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DEPARTMENT_ATTRIBUTE_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DISTRICT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>EMPLOYEE_CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>VALID_FROM</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>VALID_UNTIL</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>SALESPROJECT_MILESTONE</name> + <dbName></dbName> + <idColumn>SALESPROJECT_MILESTONEID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>MILESTONEVALUE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>KIND</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="80" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SALESPROJECT_MILESTONEID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_START</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SALESPROJECT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_END</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PARENT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>COMMRESTRICTION</name> + <dbName></dbName> + <idColumn>COMMRESTRICTIONID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>COMMRESTRICTIONID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>MEDIUM</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>STARTDATE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>EMPLOYEE_INVOLVED</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>REASON</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="250" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>OBJECTMEMBER</name> + <dbName></dbName> + <idColumn>OBJECTMEMBERID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>OBJECTMEMBERID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT_ROWID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ONSITE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="5" /> + <size v="5" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>MEMBERROLE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="63" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>EXPORTTEMPLATE</name> + <dbName></dbName> + <idColumn>EXPORTTEMPLATEID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>FIELDSEPARATOR</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ISOLANGUAGE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="3" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DESCRIPTION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="1337" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>EXPORTTEMPLATEID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>FIELDDELIMITER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TITLE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="100" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SENTENCESEPARATOR</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>PROD2PROD</name> + <dbName></dbName> + <idColumn>PROD2PRODID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>OPTIONAL</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="5" /> + <size v="5" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TAKEPRICE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="5" /> + <size v="5" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SOURCE_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>QUANTITY</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2" /> + <size v="14" /> + <scale v="2" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DEST_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PROD2PRODID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>TIMETRACKING</name> + <dbName></dbName> + <idColumn>TIMETRACKINGID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>TIMETRACKINGID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TRACKINGMINUTES</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>INFO</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TRACKINGDATE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ROW_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>AB_ATTRIBUTE</name> + <dbName></dbName> + <idColumn>AB_ATTRIBUTEID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>ATTRIBUTE_NAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="63" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ATTRIBUTE_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DROPDOWNDEFINITION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="80" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>AB_ATTRIBUTEID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ATTRIBUTE_ACTIVE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="5" /> + <size v="5" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>VALIDATIONPARAMETERS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="512" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DROPDOWNFILTER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="512" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SORTING</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ATTRIBUTE_INFO</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ATTRIBUTE_PARENT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>AB_KEYWORD_ATTRIBUTE</name> + <dbName></dbName> + <idColumn>AB_KEYWORD_ATTRIBUTEID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>AB_KEYWORD_ATTRIBUTEID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>KIND</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTAINER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="80" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>AB_KEYWORD_CATEGORY_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>NAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="100" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>CHECKLISTENTRYVALUE</name> + <dbName></dbName> + <idColumn>CHECKLISTENTRYVALUEID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>OBJECT_ROWID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>IS_FULFILLED</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="5" /> + <size v="5" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CHECKLISTENTRYVALUEID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CHECKLISTENTRY_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>AB_LOGHISTORY</name> + <dbName></dbName> + <idColumn>AB_LOGHISTORYID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>TABLENAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="30" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DESCRIPTION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SOURCE_TABLENAMEID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>LOGTYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="1" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SOURCE_TABLENAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="30" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>AB_LOGHISTORYID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TABLENAMEID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>EXPORTTEMPLATEFIELD</name> + <dbName></dbName> + <idColumn>EXPORTTEMPLATEFIELDID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>FIELD</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>EXPORTTEMPLATEFIELDID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SORTING</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="5" /> + <size v="5" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>EXPORTTEMPLATE_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>KNOWLEDGETAGLINK</name> + <dbName></dbName> + <idColumn>KNOWLEDGETAGLINKID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>KNOWLEDGEMANAGEMENT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>KNOWLEDGETAGLINKID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>KNOWLEDGETAG_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>DATABASECHANGELOGLOCK</name> + <dbName></dbName> + <idColumn>ID</idColumn> + <idGeneratorType v="1" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>LOCKGRANTED</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>LOCKED</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="16" /> + <size v="1" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>LOCKEDBY</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>SALESORDER</name> + <dbName></dbName> + <idColumn>SALESORDERID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>NOTICE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DISCOUNTED_VAT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2" /> + <size v="14" /> + <scale v="2" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PAYDUEDATE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>VAT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2" /> + <size v="14" /> + <scale v="2" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>HEADER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SALESORDERCODE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CANCELLATION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="5" /> + <size v="5" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>INFO</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="63" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PAYDATE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DUNNINGTEXT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SALESORDERDATE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SALESORDER_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DUNNINGLEVEL</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SALESORDERID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DUNNINGDATE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CURRENCY</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ISOLANGUAGE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="3" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PAYMENTTERMS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DELIVERYTERMS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT_ROWID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PAYMENTADDRESS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ORDERTYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OFFER_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PAID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="3" /> + <size v="14" /> + <scale v="2" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>FOOTER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DISCOUNT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2" /> + <size v="14" /> + <scale v="2" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DISCOUNTED_NET</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2" /> + <size v="14" /> + <scale v="2" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DELIVERYADDRESS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ORDERSTATUS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="5" /> + <size v="5" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>NET</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2" /> + <size v="14" /> + <scale v="2" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>KNOWLEDGEMANAGEMENTTAGMODERATION</name> + <dbName></dbName> + <idColumn>KNOWLEDGEMANAGEMENTTAGMODERATIONID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>STATUS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>AB_ATTRIBUTE_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>KNOWLEDGEMANAGEMENTTAGMODERATIONID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>SALESORDERITEM</name> + <dbName></dbName> + <idColumn>SALESORDERITEMID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>UNIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PRICE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2" /> + <size v="14" /> + <scale v="2" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>QUANTITY</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2" /> + <size v="14" /> + <scale v="2" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>VAT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2" /> + <size v="14" /> + <scale v="2" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>INFO</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PRODUCT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DISCOUNT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2" /> + <size v="14" /> + <scale v="2" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ITEMPOSITION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="30" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>GROUPCODEID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ITEMSORT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SALESORDER_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ASSIGNEDTO</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SALESORDERITEMID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ITEMNAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="250" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>AB_CTILOG</name> + <dbName></dbName> + <idColumn>AB_CTILOGID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>AB_CTILOGID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ANSWERMODE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CALLID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="64" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ADDRESS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="30" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DIRECTION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>ACTIVITY</name> + <dbName></dbName> + <idColumn>ACTIVITYID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>RESPONSIBLE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DIRECTION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ENTRYDATE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>INFO</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ACTIVITYID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PARENT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CATEGORY</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SUBJECT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="254" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PARENT_CONTEXT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="64" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>PLANNING_MONTH</name> + <dbName></dbName> + <idColumn>PLANNING_MONTHID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>PLANNING_MONTHID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>MONTH_FACTOR</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2" /> + <size v="5" /> + <scale v="2" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>MONTH_NUMBER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>LEADS</name> + <dbName></dbName> + <idColumn>LEADSID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>ZIP</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CUSTOMERCODE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>FIRSTNAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ATTRIBUTE_LOYALTY</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="100" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DUPLICAT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>P_COMMINTERNET</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="254" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>STATUS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>MIDDLENAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>COUNTRY</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="2" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>LASTNAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SALUTATION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="30" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TAXCODE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="30" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ORGCOUNTRYCODE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>P_COMMXING</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="254" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>LEADIMPORT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>LEADSID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>P_COMMLINKEDIN</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="254" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>BUILDINGNO</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ISOLANGUAGE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ATTRIBUTE_INDUSTRY</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="100" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACTPOSITION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ATTRIBUTE03</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="100" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ATTRIBUTE02</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="100" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACTROLE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="60" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>P_COMMBLOG</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="254" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PERSINFO</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DEPARTMENT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>NAME</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="250" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>REGION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>O_COMMXING</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="254" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PERSON_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ADDRESS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SOURCE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>O_COMMPHONE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="254" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>O_COMMMOBIL</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="254" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>O_COMMINTERNET</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="254" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>LEGALFORM</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>O_COMMEMAIL</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="254" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DISTRICT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>O_COMMLINKEDIN</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="254" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DUPSTATUS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="20" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>O_COMMBLOG</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="254" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>GENDER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ATTRIBUTE04</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="100" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>LETTERSALUTATION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="100" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>P_COMMPHONE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="254" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ORGANISATION_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>P_COMMMOBIL</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="254" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CITY</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATEOFBIRTH</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>VATCODE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="30" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>P_COMMEMAIL</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="254" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>ORGINFO</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PROVINCE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TITLE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>HASDUPLICATE</name> + <dbName></dbName> + <idColumn>HASDUPLICATEID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>OBJECT_ROWID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="63" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DUPLICATECOUNT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>HASDUPLICATEID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>WEBLINKTAG</name> + <dbName></dbName> + <idColumn>WEBLINKTAGID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>WEBLINK_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TAG</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="100" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>WEBLINKTAGID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>INTERESTLINK</name> + <dbName></dbName> + <idColumn>INTERESTLINKID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>STATUS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>INTEREST_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>INTERESTLINKID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>BULKMAILTESTRECIPIENT</name> + <dbName></dbName> + <idColumn>BULKMAILTESTRECIPIENTID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>BULKMAIL_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>EMAIL_ADDRESS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>BULKMAILTESTRECIPIENTID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>MAIL_LOG</name> + <dbName></dbName> + <idColumn>MAIL_LOGID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>ERRORMESSAGE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>MAIL_LOGID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OPENER_LINK_CLICK_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>STATUS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SENDER_EMAIL</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>RECIPIENT_EMAIL</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>MAILING_SUBJECT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="100" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>MAIL_RUN_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_SEND</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>INTEREST</name> + <dbName></dbName> + <idColumn>INTERESTID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>STATUS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DESCRIPTION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="500" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>INTERESTID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TITLE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>IS_DEFAULT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="5" /> + <size v="5" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>COMMUNICATIONLEGALBASE</name> + <dbName></dbName> + <idColumn>COMMUNICATIONLEGALBASEID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>COMMUNICATIONSETTINGS_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>COMMUNICATIONLEGALBASEID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>VERSION</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>INFO</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="250" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>WEBLINK_CLICK</name> + <dbName></dbName> + <idColumn>WEBLINK_CLICKID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>BROWSER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>WEBLINK_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DEVICE_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>WEBLINK_CLICKID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>MAIL_LOG_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>IP_ADDRESS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OPERATING_SYSTEM</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_OPENED</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>COMMUNICATIONBLACKLIST</name> + <dbName></dbName> + <idColumn>COMMUNICATIONBLACKLISTID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>BLACKLIST_FILTER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>END_DATE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>START_DATE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>COMMUNICATIONBLACKLISTID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>REASON</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="500" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>BLACKLIST_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>COMMUNICATIONSETTINGS</name> + <dbName></dbName> + <idColumn>COMMUNICATIONSETTINGSID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>STATUS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CHANNEL_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>MEDIUM</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CHANNEL_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTACT_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>COMMUNICATIONSETTINGSID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>WEBLINK</name> + <dbName></dbName> + <idColumn>WEBLINKID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>ISREDIRECT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="5" /> + <size v="5" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>SCORE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="4" /> + <size v="10" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>LINKTYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_NEW</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>URL</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="512" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>USER_EDIT</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>WEBLINKID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PLACEHOLDER</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>WORKFLOWPROCESSDEFINITION_KEY</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>MAIL_RUN</name> + <dbName></dbName> + <idColumn>MAIL_RUNID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <description></description> + <auditSyncConfig> + <name>auditSyncConfig</name> + <auditMode v="0" /> + <syncActive v="false" /> + <syncComplete v="true" /> + <syncDirection v="1" /> + <syncIds></syncIds> + </auditSyncConfig> + <entityFields> + <entityFieldDb> + <name>MAIL_RUNID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT_ROWID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>STATUS</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="100" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>INTEREST_ID</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_RUN_START</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TESTRUN</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="5" /> + <size v="5" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>OBJECT_TYPE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="63" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_RUN_FINISHED</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + </entities> + </entityGroup> + </aliasDefDb> + </aliasDefinitionSub> +</aliasDefinition> diff --git a/aliasDefinition/WorkflowModeler/WorkflowModeler.aod b/aliasDefinition/WorkflowModeler/WorkflowModeler.aod new file mode 100644 index 0000000000000000000000000000000000000000..6f342ac951c9c34ed241236486bae07ca34cf783 --- /dev/null +++ b/aliasDefinition/WorkflowModeler/WorkflowModeler.aod @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<aliasDefinition xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/aliasDefinition/1.2.0"> + <name>WorkflowModeler</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <datasourceType v="21" /> +</aliasDefinition> diff --git a/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod b/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod index 56f31da9f97db53dd72583e0cb8631a0a3527050..2f1a06e4716ada4abac58d06429cb80228e835ad 100644 --- a/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod +++ b/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod @@ -57,6 +57,10 @@ <name>Vertriebsdashboard</name> <kind v="10090" /> </entityNode> + <entityNode> + <name>Planning</name> + <kind v="10077" /> + </entityNode> <entityNode> <name>Salesproject</name> <kind v="10077" /> @@ -96,6 +100,10 @@ <name>SalesprojectConversionRate</name> <kind v="10077" /> </entityNode> + <entityNode> + <name>Advertising</name> + <kind v="10077" /> + </entityNode> </childNodes> </entityNode> <entityNode> @@ -148,6 +156,20 @@ <title>Marketing</title> <icon>VAADIN:GROUP</icon> <childNodes> + <entityNode> + <name>Group16</name> + <kind v="123" /> + <childNodes> + <entityNode> + <name>Marketingdashboard</name> + <kind v="10090" /> + </entityNode> + <entityNode> + <name>PROJECT_Marketing</name> + <kind v="159" /> + </entityNode> + </childNodes> + </entityNode> <entityNode> <name>Group10</name> <kind v="123" /> @@ -164,6 +186,10 @@ </entityNode> </childNodes> </entityNode> + <entityNode> + <name>Group14</name> + <kind v="123" /> + </entityNode> <entityNode> <name>Group4</name> <kind v="123" /> @@ -192,6 +218,14 @@ <name>DocumentTemplate</name> <kind v="10077" /> </entityNode> + <entityNode> + <name>Weblink</name> + <kind v="10077" /> + </entityNode> + <entityNode> + <name>Interest</name> + <kind v="10077" /> + </entityNode> </childNodes> </entityNode> <entityNode> @@ -314,11 +348,6 @@ <kind v="10077" /> <title></title> </entityNode> - <entityNode> - <name>Duplicates</name> - <kind v="10077" /> - <title></title> - </entityNode> <entityNode> <name>AuditLogHistory</name> <kind v="10077" /> @@ -346,6 +375,24 @@ </entityNode> </childNodes> </entityNode> + <entityNode> + <name>Group13</name> + <kind v="123" /> + <childNodes> + <entityNode> + <name>INTERNAL_ADMINISTRATOR</name> + <kind v="159" /> + </entityNode> + <entityNode> + <name>DSGVOConfiguration</name> + <kind v="10077" /> + </entityNode> + <entityNode> + <name>PROJECT_DSGVO</name> + <kind v="159" /> + </entityNode> + </childNodes> + </entityNode> </childNodes> </entityNode> <entityNode> diff --git a/entity/360Degree_entity/360Degree_entity.aod b/entity/360Degree_entity/360Degree_entity.aod index cf7b453f0372f7c208eeff54b74d378215ab1cc8..3fee3be4df29a7e6f69bc3436b283fd321d6a173 100644 --- a/entity/360Degree_entity/360Degree_entity.aod +++ b/entity/360Degree_entity/360Degree_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>360Degree_entity</name> <title>360 Degree</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -43,14 +43,6 @@ <targetContextField>TARGET_CONTEXT</targetContextField> <targetIdField>TARGET_ID</targetIdField> <documentation>%aditoprj%/entity/360Degree_entity/entityfields/organisationobjects/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>15488007-165c-4630-828a-447cf2c27899</name> - <entityName>Organisation_entity</entityName> - <fieldName>360DegreeObjects</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ObjectType_param</name> @@ -85,14 +77,6 @@ <targetContextField>TARGET_CONTEXT</targetContextField> <targetIdField>TARGET_ID</targetIdField> <documentation>%aditoprj%/entity/360Degree_entity/entityfields/personobjects/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>1d931ae6-137a-4db3-b02c-eb8872d349c6</name> - <entityName>Person_entity</entityName> - <fieldName>360DegreeObjects</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ObjectType_param</name> diff --git a/entity/360Degree_entity/entityfields/newmodule/children/neworder/onActionProcess.js b/entity/360Degree_entity/entityfields/newmodule/children/neworder/onActionProcess.js index 5c2ee2f884482cf501dfb07b15cc008fc139bea3..eb125f5f59798144ae3b54ebca0d0a56939e4904 100644 --- a/entity/360Degree_entity/entityfields/newmodule/children/neworder/onActionProcess.js +++ b/entity/360Degree_entity/entityfields/newmodule/children/neworder/onActionProcess.js @@ -1,4 +1,4 @@ import("system.vars"); import("Order_lib"); -OrderUtils.createNewOrder(null, null, JSON.parse(vars.get("$param.ObjectRowId_param"))[0]); +OrderUtils.createNewOrder(null, null, JSON.parse(vars.get("$param.ObjectRowId_param"))[0]); \ No newline at end of file diff --git a/entity/360Degree_entity/entityfields/newmodule/stateProcess.js b/entity/360Degree_entity/entityfields/newmodule/stateProcess.js index 0b02ed053a7ba32d8f740031e0c5ceb72f1c3716..bb33b08a687ae6dc0ba285fbef672ba7f8f701e8 100644 --- a/entity/360Degree_entity/entityfields/newmodule/stateProcess.js +++ b/entity/360Degree_entity/entityfields/newmodule/stateProcess.js @@ -5,5 +5,7 @@ import("KeywordRegistry_basic"); var objectStatusParam = vars.get("$param.ObjectStatus_param"); -if (objectStatusParam == $KeywordRegistry.contactStatus$inactive()) - result.string(neon.COMPONENTSTATE_DISABLED); \ No newline at end of file +if (objectStatusParam == $KeywordRegistry.contactStatus$inactive() || objectStatusParam == $KeywordRegistry.contactStatus$markToDelete()) +{ + result.string(neon.COMPONENTSTATE_DISABLED); +} \ No newline at end of file diff --git a/entity/360Degree_entity/entityfields/organisationobjects/children/objecttype_param/valueProcess.js b/entity/360Degree_entity/entityfields/organisationobjects/children/objecttype_param/valueProcess.js index 9b0fe874baa54a8604d5955087be959dfb644563..af517cc087c53afa61ed3a3fe5d96a74036fd395 100644 --- a/entity/360Degree_entity/entityfields/organisationobjects/children/objecttype_param/valueProcess.js +++ b/entity/360Degree_entity/entityfields/organisationobjects/children/objecttype_param/valueProcess.js @@ -17,7 +17,8 @@ var res = { "childField":"TASK_ID", "parentField":"TASK_TASKID", "contactIdField":"OBJECT_ROWID" - } + }, + "Advertising": {} } result.string(JSON.stringify(res)) \ No newline at end of file diff --git a/entity/360Degree_entity/entityfields/personobjects/children/objecttype_param/valueProcess.js b/entity/360Degree_entity/entityfields/personobjects/children/objecttype_param/valueProcess.js index f5ae6a13a10caa37773ea80dd65a7cb188a6523b..0a08d4ff5678b28b58f9ba89416ca49207ccb812 100644 --- a/entity/360Degree_entity/entityfields/personobjects/children/objecttype_param/valueProcess.js +++ b/entity/360Degree_entity/entityfields/personobjects/children/objecttype_param/valueProcess.js @@ -25,6 +25,9 @@ var res = { "childField":"CAMPAIGN_ID", "parentField":"CAMPAIGNID", "contactIdField":"CONTACT_ID" + }, + "Advertising": { + "contactIdField":"CONTACT_ID" } }; diff --git a/entity/ActivityLink_entity/ActivityLink_entity.aod b/entity/ActivityLink_entity/ActivityLink_entity.aod index d9d7007ec9227ddae16877a203d93ce5281bb21f..44ea0b63d5f5e157d0d3868aff38d1fcde1c7170 100644 --- a/entity/ActivityLink_entity/ActivityLink_entity.aod +++ b/entity/ActivityLink_entity/ActivityLink_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>ActivityLink_entity</name> <title>Connection</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -40,14 +40,6 @@ <targetIdField>OBJECT_ROWID</targetIdField> <documentation>%aditoprj%/entity/ActivityLink_entity/entityfields/links/documentation.adoc</documentation> <recordContainer>db</recordContainer> - <dependencies> - <entityDependency> - <name>148c98ea-a24b-453a-afe9-975555486b2c</name> - <entityName>Activity_entity</entityName> - <fieldName>Links</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ActivityId_param</name> diff --git a/entity/ActivityLink_entity/entityfields/activitylinkid/valueProcess.js b/entity/ActivityLink_entity/entityfields/activitylinkid/valueProcess.js index 86ef789e064a4016f2d12c432498dc23474807aa..823247cf893e603a8e2b8d5725d6b94ecd975695 100644 --- a/entity/ActivityLink_entity/entityfields/activitylinkid/valueProcess.js +++ b/entity/ActivityLink_entity/entityfields/activitylinkid/valueProcess.js @@ -3,5 +3,7 @@ import("system.vars"); import("system.result"); import("system.neon"); -if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) - result.string(util.getNewUUID()); \ No newline at end of file +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) +{ + result.string(util.getNewUUID()); +} \ No newline at end of file diff --git a/entity/Activity_entity/Activity_entity.aod b/entity/Activity_entity/Activity_entity.aod index 968e15b45cc01648663f42fda0d233b1dddad81d..d36eaed13bcc242571e4dc90f7ee9f9cf93d7921 100644 --- a/entity/Activity_entity/Activity_entity.aod +++ b/entity/Activity_entity/Activity_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Activity_entity</name> <title>Activity</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -80,20 +80,6 @@ <entityProvider> <name>#PROVIDER</name> <recordContainer>db</recordContainer> - <dependencies> - <entityDependency> - <name>3ea70130-21b0-42ec-88e2-1a898059dcff</name> - <entityName>ObjectProxy_entity</entityName> - <fieldName>Activities</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>262fe53d-7358-40ff-8641-e08add14528a</name> - <entityName>Object_entity</entityName> - <fieldName>Activities</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>ICON</name> @@ -197,86 +183,6 @@ <name>LinkedObjects</name> <documentation>%aditoprj%/entity/Activity_entity/entityfields/linkedobjects/documentation.adoc</documentation> <recordContainer>db</recordContainer> - <dependencies> - <entityDependency> - <name>8ececf30-a3bc-4cd2-ad04-fb9f3cb9332d</name> - <entityName>Salesproject_entity</entityName> - <fieldName>Activities</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>549af7f6-3828-4c15-8357-72f0c6fc4f0c</name> - <entityName>Contract_entity</entityName> - <fieldName>Activities</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>49a91b21-f24e-45c6-9b2c-5bb15d808d43</name> - <entityName>Organisation_entity</entityName> - <fieldName>Activities</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>6461d7f4-182f-4e5c-9453-49c145e15476</name> - <entityName>Person_entity</entityName> - <fieldName>Activities</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>207920cd-b4b8-4f40-b6c4-6e25d4df9947</name> - <entityName>Offer_entity</entityName> - <fieldName>Activities</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>b086fbf7-aa94-441f-a33c-e2ca8eda5dcd</name> - <entityName>Order_entity</entityName> - <fieldName>Activities</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>00b4f354-5b82-4071-b70c-acab4780a2de</name> - <entityName>Product_entity</entityName> - <fieldName>Activities</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>9b416661-628d-4f8d-b8dc-9543cf5bbb1c</name> - <entityName>Campaign_entity</entityName> - <fieldName>Activities</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>4869a849-8717-48ec-9dbd-73df96992042</name> - <entityName>CampaignStep_entity</entityName> - <fieldName>Activities</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>709bafbd-d258-4f1c-85e8-b7062ee0e42b</name> - <entityName>BulkMail_entity</entityName> - <fieldName>Activities</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>4f51e380-7d34-4d6f-a10f-a9044ff671bb</name> - <entityName>SerialLetter_entity</entityName> - <fieldName>Activities</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>bfef6edf-e9c9-485b-afbe-8e175f6eda74</name> - <entityName>QuickEntry_entity</entityName> - <fieldName>Activities</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>943c36a2-d378-44a1-b214-25e92244c8cb</name> - <entityName>UniversalFileProcessor_entity</entityName> - <fieldName>Activities</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>OnlyInnate_param</name> @@ -730,6 +636,59 @@ <iconId>VAADIN:CURLY_BRACKETS</iconId> <stateProcess>%aditoprj%/entity/Activity_entity/entityfields/openadminview/stateProcess.js</stateProcess> </entityActionField> + <entityConsumer> + <name>AdvertisingItems</name> + <state>EDITABLE</state> + <stateProcess>%aditoprj%/entity/Activity_entity/entityfields/advertisingitems/stateProcess.js</stateProcess> + <dependency> + <name>dependency</name> + <entityName>AdvertisingItem_entity</entityName> + <fieldName>AdvertisingItemsForContext</fieldName> + </dependency> + <children> + <entityParameter> + <name>RowId_param</name> + <valueProcess>%aditoprj%/entity/Activity_entity/entityfields/advertisingitems/children/rowid_param/valueProcess.js</valueProcess> + </entityParameter> + <entityParameter> + <name>AdvertisingId_param</name> + <valueProcess>%aditoprj%/entity/Activity_entity/entityfields/advertisingitems/children/advertisingid_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityField> + <name>hasAdvertising</name> + <title>Advertising shipment</title> + <description>controlls wether Advertisings Items can be added or not </description> + <contentType>BOOLEAN</contentType> + <stateProcess>%aditoprj%/entity/Activity_entity/entityfields/hasadvertising/stateProcess.js</stateProcess> + <valueProcess>%aditoprj%/entity/Activity_entity/entityfields/hasadvertising/valueProcess.js</valueProcess> + </entityField> + <entityConsumer> + <name>AdvertisingInformationConsumer</name> + <isOneToOneRelationship v="true" /> + <state>EDITABLE</state> + <stateProcess>%aditoprj%/entity/Activity_entity/entityfields/advertisinginformationconsumer/stateProcess.js</stateProcess> + <dependency> + <name>dependency</name> + <entityName>Advertising_entity</entityName> + <fieldName>BasicInfoAdvertising</fieldName> + </dependency> + <children> + <entityParameter> + <name>RowId_param</name> + <valueProcess>%aditoprj%/entity/Activity_entity/entityfields/advertisinginformationconsumer/children/rowid_param/valueProcess.js</valueProcess> + </entityParameter> + <entityParameter> + <name>ContactIds_param</name> + <valueProcess>%aditoprj%/entity/Activity_entity/entityfields/advertisinginformationconsumer/children/contactids_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityParameter> + <name>AdvActivityId_param</name> + <expose v="true" /> + </entityParameter> </entityFields> <recordContainers> <dbRecordContainer> diff --git a/entity/Activity_entity/entityfields/advertisinginformationconsumer/children/contactids_param/valueProcess.js b/entity/Activity_entity/entityfields/advertisinginformationconsumer/children/contactids_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..6d562126365ff942aed70df52f2bc277e7a8799c --- /dev/null +++ b/entity/Activity_entity/entityfields/advertisinginformationconsumer/children/contactids_param/valueProcess.js @@ -0,0 +1,22 @@ +import("system.entities"); +import("system.result"); +import("system.neon"); +import("system.vars"); + +var contactIds = []; +var conf = entities.createConfigForLoadingConsumerRows(); +conf.consumer("Links"); +conf.fields(["OBJECT_TYPE", "OBJECT_ROWID"]); + +var links = entities.getRows(conf); + +links.forEach(function(link) +{ + if(link["OBJECT_TYPE"] == "Person") + { + contactIds.push( link["OBJECT_ROWID"]); + } +}); + +result.string(JSON.stringify(contactIds)); + diff --git a/entity/Activity_entity/entityfields/advertisinginformationconsumer/children/rowid_param/valueProcess.js b/entity/Activity_entity/entityfields/advertisinginformationconsumer/children/rowid_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..a8267b62060b4bd30cedaba4713f4421a6e6f9ff --- /dev/null +++ b/entity/Activity_entity/entityfields/advertisinginformationconsumer/children/rowid_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("system.result"); + +result.string(vars.get("$field.ACTIVITYID")); \ No newline at end of file diff --git a/entity/Activity_entity/entityfields/advertisinginformationconsumer/stateProcess.js b/entity/Activity_entity/entityfields/advertisinginformationconsumer/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..b7978b1081b1e41c17ca452ab567efb4af99763b --- /dev/null +++ b/entity/Activity_entity/entityfields/advertisinginformationconsumer/stateProcess.js @@ -0,0 +1,6 @@ +import("Util_lib"); +import("system.neon"); +import("system.vars"); +import("system.result"); + +result.string(Utils.toBoolean(vars.get("$field.hasAdvertising")) ? neon.COMPONENTSTATE_EDITABLE : neon.COMPONENTSTATE_INVISIBLE); \ No newline at end of file diff --git a/entity/Activity_entity/entityfields/advertisingitems/children/advertisingid_param/valueProcess.js b/entity/Activity_entity/entityfields/advertisingitems/children/advertisingid_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..32c458221b64a30643c8ed2f5d6b974ddc1a2bd5 --- /dev/null +++ b/entity/Activity_entity/entityfields/advertisingitems/children/advertisingid_param/valueProcess.js @@ -0,0 +1,12 @@ +import("Util_lib"); +import("system.result"); +import("system.logging"); +import("system.entities"); + +var conf = entities.createConfigForLoadingConsumerRows(); +conf.consumer("AdvertisingInformationConsumer"); +conf.fields(["ADVERTISINGID"]); + +var adv = entities.getRows(conf); + +result.string((Utils.toBoolean(adv[0])) ? adv[0]["ADVERTISINGID"] : ""); \ No newline at end of file diff --git a/entity/Activity_entity/entityfields/advertisingitems/children/rowid_param/valueProcess.js b/entity/Activity_entity/entityfields/advertisingitems/children/rowid_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..b5ea578ca505f77ba9b74efd6abceb65d5ca4004 --- /dev/null +++ b/entity/Activity_entity/entityfields/advertisingitems/children/rowid_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("system.result"); + +result.string(vars.getString("$field.ACTIVITYID")); \ No newline at end of file diff --git a/entity/Activity_entity/entityfields/advertisingitems/stateProcess.js b/entity/Activity_entity/entityfields/advertisingitems/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..bf20bd9d449cda0018605c006d5faf53e8ae1fab --- /dev/null +++ b/entity/Activity_entity/entityfields/advertisingitems/stateProcess.js @@ -0,0 +1,28 @@ +import("Util_lib"); +import("system.entities"); +import("system.vars"); +import("system.result"); +import("KeywordRegistry_basic"); +import("system.neon"); + +var state = neon.COMPONENTSTATE_INVISIBLE; +if(Utils.toBoolean(vars.get("$field.hasAdvertising"))) +{ + //only when there is a advertising we can load it + var conf = entities.createConfigForLoadingConsumerRows(); + conf.consumer("AdvertisingInformationConsumer"); + conf.fields(["STATUS"]); + + var adv = entities.getRows(conf); + + if(adv[0]["STATUS"] == $KeywordRegistry.advertisingStatus$Open()) + { + state = neon.COMPONENTSTATE_EDITABLE; + } + else + { + state = neon.COMPONENTSTATE_READONLY; + } +} + +result.string(state); \ No newline at end of file diff --git a/entity/Activity_entity/entityfields/hasadvertising/stateProcess.js b/entity/Activity_entity/entityfields/hasadvertising/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..833c6571b241e79b6d92e1ba55daf8b222ec22e6 --- /dev/null +++ b/entity/Activity_entity/entityfields/hasadvertising/stateProcess.js @@ -0,0 +1,16 @@ +import("system.result"); +import("system.neon"); +import("system.vars"); + +var ret = neon.COMPONENTSTATE_INVISIBLE; + +if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW ) +{ + ret = neon.COMPONENTSTATE_EDITABLE; +} +else if(vars.get("$this.value") > 0) +{ + ret = neon.COMPONENTSTATE_READONLY; +} + +result.string(ret); \ No newline at end of file diff --git a/entity/Activity_entity/entityfields/hasadvertising/valueProcess.js b/entity/Activity_entity/entityfields/hasadvertising/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..da81698953407451e218b925b56b031ba3b2a4c1 --- /dev/null +++ b/entity/Activity_entity/entityfields/hasadvertising/valueProcess.js @@ -0,0 +1,22 @@ +import("system.vars"); +import("system.neon"); +import("system.result"); +import("system.entities"); + + +if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW) +{ + if(vars.get("$this.value") == null) + { + result.string("0"); + } +} +else if(vars.get("$field.ACTIVITYID")) +{ + var conf = entities.createConfigForLoadingRows(); + conf.entity("Advertising_entity"); + conf.addParameter("RowId_param", vars.get("$field.ACTIVITYID")); + conf.fields(["ADVERTISINGID"]); + + result.string( entities.getRowCount(conf)); +} diff --git a/entity/Activity_entity/grantDeleteProcess.js b/entity/Activity_entity/grantDeleteProcess.js index a704528bc95a243ff330ad1ccef6deeb9eaa67ba..929d3d48e9ec2ad7ed7cea376db08f09322c87db 100644 --- a/entity/Activity_entity/grantDeleteProcess.js +++ b/entity/Activity_entity/grantDeleteProcess.js @@ -6,5 +6,7 @@ import("Entity_lib"); var canDelete = new HasLinkedObjectTester() .andNoEntityRows("Document_entity", "Documents", {AssignmentTable_param : "ACTIVITY", AssignmentRowId_param : vars.get("$field.ACTIVITYID")}) //Documents .validate(); + + result.string(canDelete); \ No newline at end of file diff --git a/entity/Activity_entity/recordcontainers/db/conditionProcess.js b/entity/Activity_entity/recordcontainers/db/conditionProcess.js index 950fcd1f1dc1877ea33c1de0d3c20e92fd9e654a..2bc6039536acc27a2fb908a61a9740783f274098 100644 --- a/entity/Activity_entity/recordcontainers/db/conditionProcess.js +++ b/entity/Activity_entity/recordcontainers/db/conditionProcess.js @@ -9,33 +9,14 @@ var condition = newWhere(); if (vars.exists("$param.RowId_param") && vars.get("$param.RowId_param") && vars.exists("$param.ObjectId_param") && vars.get("$param.ObjectId_param")) { var activityLinkSubselect = newSelect("ACTIVITYLINK.ACTIVITYLINKID") - .from("ACTIVITYLINK") - .where("ACTIVITYLINK.ACTIVITY_ID = ACTIVITY.ACTIVITYID") - .and("ACTIVITYLINK.OBJECT_TYPE", "$param.ObjectId_param"); + .from("ACTIVITYLINK") + .where("ACTIVITYLINK.ACTIVITY_ID = ACTIVITY.ACTIVITYID") + .and("ACTIVITYLINK.OBJECT_TYPE", "$param.ObjectId_param"); var rowId = vars.get("$param.RowId_param"); - if (vars.get("$param.ObjectId_param") == "Person") - { - //in the Person context, all activities linked to the person should be shown, so it is necessary to get all contactIds of that person - var allPersonRelatedContactIds = newSelect("personContacts.CONTACTID") - .from("CONTACT") - .join("CONTACT", "CONTACT.PERSON_ID = personContacts.PERSON_ID", "personContacts") - .where("CONTACT.CONTACTID", "$param.RowId_param") - .arrayColumn(); - - if (allPersonRelatedContactIds.length === 0) - condition.noResult(); - else - { - activityLinkSubselect.and("ACTIVITYLINK.OBJECT_ROWID", allPersonRelatedContactIds, SqlBuilder.IN()); - condition.and(null, activityLinkSubselect, SqlBuilder.EXISTS()); - } - } - else - { - activityLinkSubselect.and("ACTIVITYLINK.OBJECT_ROWID", "$param.RowId_param"); - condition.and(null, activityLinkSubselect, SqlBuilder.EXISTS()); - } + + activityLinkSubselect.and("ACTIVITYLINK.OBJECT_ROWID", "$param.RowId_param"); + condition.and(null, activityLinkSubselect, SqlBuilder.EXISTS()); } if (vars.exists("$param.ActivityIDs_param") && vars.get("$param.ActivityIDs_param")) diff --git a/entity/Activity_entity/recordcontainers/db/onDBDelete.js b/entity/Activity_entity/recordcontainers/db/onDBDelete.js index 92347de26dd3d24f423e5b004237fdae89332c54..0ca888563415519b6b2287c7de07896d25d709f8 100644 --- a/entity/Activity_entity/recordcontainers/db/onDBDelete.js +++ b/entity/Activity_entity/recordcontainers/db/onDBDelete.js @@ -1,9 +1,12 @@ +import("Document_lib"); import("Workflow_lib"); import("Context_lib"); import("system.vars"); import("Sql_lib"); import("Attribute_lib"); +DocumentUtil.deleteAllUploadedImages("INFO_IMAGE_UPLOAD"); + newWhere("ACTIVITYLINK.ACTIVITY_ID", "$field.ACTIVITYID").deleteData(); new AttributeRelationQuery(vars.get("$field.ACTIVITYID"), null, ContextUtils.getCurrentContextId()) diff --git a/entity/Activity_entity/recordcontainers/db/onDBInsert.js b/entity/Activity_entity/recordcontainers/db/onDBInsert.js index 03ba2693c5c83c04813081360c6380aa0d248181..fa37b0c09bebcacd5b94911db49a133deb7ed46a 100644 --- a/entity/Activity_entity/recordcontainers/db/onDBInsert.js +++ b/entity/Activity_entity/recordcontainers/db/onDBInsert.js @@ -1,3 +1,6 @@ +import("Util_lib"); +import("Advertising_lib"); +import("system.entities"); import("Workflow_lib"); import("Sql_lib"); import("KeywordRegistry_basic"); @@ -13,7 +16,7 @@ if (upload.isFilled()) upload.filename, upload.bindata, false - ]]; + ]]; } else { @@ -29,13 +32,31 @@ if(vars.exists("$param.VisitPlanEntryId_param") && vars.get("$param.VisitPlanEnt var values = [$KeywordRegistry.visitPlanEntryStatus$Visitreportcreated()]; var columns = ["STATUS"]; var updateEntry = newWhere("VISITPLANENTRY.VISITPLANENTRYID", vars.get("$param.VisitPlanEntryId_param")) - .updateData(true, "VISITPLANENTRY", columns, null, values); + .updateData(true, "VISITPLANENTRY", columns, null, values); var recommendationId = newSelect("VISITPLANENTRY.VISITRECOMMENDATION_ID").from("VISITPLANENTRY").where("VISITPLANENTRY.VISITPLANENTRYID", vars.get("$param.VisitPlanEntryId_param")) newWhere("VISITRECOMMENDATION.VISITRECOMMENDATIONID", recommendationId).deleteData(true, "VISITRECOMMENDATION"); } +//when Advertisings should be linked, the structure should be prepared in the background +if(Utils.toBoolean(vars.get("$field.hasAdvertising")) && !AdvertisingUtils.hasAdvertising(vars.get("$local.uid"))) +{ + //If it should be possible to add advertising material after creation, then the readentity for consumer should be used here. + var links = vars.get("$field.Links.insertedRows"); + var contactIds = []; + + links.forEach(function(link) + { + if(link["OBJECT_TYPE"] == "Person") + { + contactIds.push( link["OBJECT_ROWID"]); + } + }); + + AdvertisingUtils.insertAdvertising(vars.get("$local.uid"), vars.get("$sys.currentcontextname"), contactIds); +} + if (vars.exists("$param.InsertLinks_param") && vars.get("$param.InsertLinks_param")) { var activityId = vars.get("$local.uid"); diff --git a/entity/AddressType_entity/AddressType_entity.aod b/entity/AddressType_entity/AddressType_entity.aod index ed17a9345db928ee2a78d54a2ff245c449469b09..8c570720e66aa6925c4e3a0793fa763067eaf1a8 100644 --- a/entity/AddressType_entity/AddressType_entity.aod +++ b/entity/AddressType_entity/AddressType_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>AddressType_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/AddressType_entity/documentation.adoc</documentation> @@ -22,14 +22,6 @@ <name>ByCategory</name> <lookupIdfield>KEYID</lookupIdfield> <documentation>%aditoprj%/entity/AddressType_entity/entityfields/bycategory/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>0956b1f3-8b67-4f82-b04a-70be88aff19f</name> - <entityName>Address_entity</entityName> - <fieldName>KeywordAddressTypes</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>UsageFilter_param</name> diff --git a/entity/AddressValidation_entity/AddressValidation_entity.aod b/entity/AddressValidation_entity/AddressValidation_entity.aod index 8ae67be0937986e7c38ee54a2ac132b7b80d1d26..050da6433c36c11bdc24f97eaf55464cc2db3518 100644 --- a/entity/AddressValidation_entity/AddressValidation_entity.aod +++ b/entity/AddressValidation_entity/AddressValidation_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>AddressValidation_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/AddressValidation_entity/documentation.adoc</documentation> @@ -14,25 +14,6 @@ <title>Address</title> <description>UID consists of all fields as JSON. </description> </entityField> - <entityProvider> - <name>ZipValidaton</name> - <documentation>%aditoprj%/entity/AddressValidation_entity/entityfields/zipvalidaton/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>fcfcbebe-260a-4773-a874-9791b4887ae2</name> - <entityName>Address_entity</entityName> - <fieldName>ZipValidation</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> - <children> - <entityParameter> - <name>Type_param</name> - <valueProcess>%aditoprj%/entity/AddressValidation_entity/entityfields/zipvalidaton/children/type_param/valueProcess.js</valueProcess> - <expose v="false" /> - </entityParameter> - </children> - </entityProvider> <entityParameter> <name>Type_param</name> <expose v="true" /> @@ -73,25 +54,6 @@ <name>VALUE</name> <description>Final value returned</description> </entityField> - <entityProvider> - <name>CityValidation</name> - <documentation>%aditoprj%/entity/AddressValidation_entity/entityfields/cityvalidation/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>27114db7-8562-43b2-87d8-fa605bbf2319</name> - <entityName>Address_entity</entityName> - <fieldName>CityValidation</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> - <children> - <entityParameter> - <name>Type_param</name> - <valueProcess>%aditoprj%/entity/AddressValidation_entity/entityfields/cityvalidation/children/type_param/valueProcess.js</valueProcess> - <expose v="false" /> - </entityParameter> - </children> - </entityProvider> <entityParameter> <name>CurrentValue_param</name> <expose v="true" /> @@ -100,14 +62,6 @@ <entityProvider> <name>FullAddressValidation</name> <documentation>%aditoprj%/entity/AddressValidation_entity/entityfields/fulladdressvalidation/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>10f700b5-1ac6-4d50-bcb8-aae55714fb43</name> - <entityName>Address_entity</entityName> - <fieldName>FullAddressValidation</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>Type_param</name> @@ -133,25 +87,6 @@ <name>BUILDINGNO</name> <title>House number</title> </entityField> - <entityProvider> - <name>StreetValidation</name> - <documentation>%aditoprj%/entity/AddressValidation_entity/entityfields/streetvalidation/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>3211d147-0867-4fc1-8640-34a1b8fdcf18</name> - <entityName>Address_entity</entityName> - <fieldName>StreetValidation</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> - <children> - <entityParameter> - <name>Type_param</name> - <valueProcess>%aditoprj%/entity/AddressValidation_entity/entityfields/streetvalidation/children/type_param/valueProcess.js</valueProcess> - <expose v="false" /> - </entityParameter> - </children> - </entityProvider> <entityParameter> <name>City_param</name> <expose v="true" /> diff --git a/entity/AddressValidation_entity/entityfields/cityvalidation/children/type_param/valueProcess.js b/entity/AddressValidation_entity/entityfields/cityvalidation/children/type_param/valueProcess.js deleted file mode 100644 index e8560045975cb9faf78db1adaa945d7db5a940fe..0000000000000000000000000000000000000000 --- a/entity/AddressValidation_entity/entityfields/cityvalidation/children/type_param/valueProcess.js +++ /dev/null @@ -1,4 +0,0 @@ -import("WsValidation_lib"); -import("system.result"); - -result.string(WsValidationType.get().TYPE_CITY_NOMINATIM.key); \ No newline at end of file diff --git a/entity/AddressValidation_entity/entityfields/cityvalidation/documentation.adoc b/entity/AddressValidation_entity/entityfields/cityvalidation/documentation.adoc deleted file mode 100644 index 737201e4059dea4f860ff33c9b2dc983a7dec9a5..0000000000000000000000000000000000000000 --- a/entity/AddressValidation_entity/entityfields/cityvalidation/documentation.adoc +++ /dev/null @@ -1,3 +0,0 @@ -= AddressValidation_entity - CityValidation - -Provider for validating city only \ No newline at end of file diff --git a/entity/AddressValidation_entity/entityfields/streetvalidation/children/type_param/valueProcess.js b/entity/AddressValidation_entity/entityfields/streetvalidation/children/type_param/valueProcess.js deleted file mode 100644 index 84ce4d3552f2a616ba448406736d64b2b560825a..0000000000000000000000000000000000000000 --- a/entity/AddressValidation_entity/entityfields/streetvalidation/children/type_param/valueProcess.js +++ /dev/null @@ -1,4 +0,0 @@ -import("WsValidation_lib"); -import("system.result"); - -result.string(WsValidationType.get().TYPE_STREET_NOMINATIM.key); \ No newline at end of file diff --git a/entity/AddressValidation_entity/entityfields/streetvalidation/documentation.adoc b/entity/AddressValidation_entity/entityfields/streetvalidation/documentation.adoc deleted file mode 100644 index 60a4b5ed2ae64bb767ba4de28fc83961c5faf82c..0000000000000000000000000000000000000000 --- a/entity/AddressValidation_entity/entityfields/streetvalidation/documentation.adoc +++ /dev/null @@ -1,3 +0,0 @@ -= AddressValidation_entity - StreetValidation - -Provider for validating street only \ No newline at end of file diff --git a/entity/AddressValidation_entity/entityfields/zipvalidaton/children/type_param/valueProcess.js b/entity/AddressValidation_entity/entityfields/zipvalidaton/children/type_param/valueProcess.js deleted file mode 100644 index 6ab3539198339ca785870777ce0642f0c4e6ba9f..0000000000000000000000000000000000000000 --- a/entity/AddressValidation_entity/entityfields/zipvalidaton/children/type_param/valueProcess.js +++ /dev/null @@ -1,4 +0,0 @@ -import("WsValidation_lib"); -import("system.result"); - -result.string(WsValidationType.get().TYPE_ZIP_NOMINATIM.key); \ No newline at end of file diff --git a/entity/AddressValidation_entity/entityfields/zipvalidaton/documentation.adoc b/entity/AddressValidation_entity/entityfields/zipvalidaton/documentation.adoc deleted file mode 100644 index 9da7e51bd414bf8a92dee65a1e05211df58bb4da..0000000000000000000000000000000000000000 --- a/entity/AddressValidation_entity/entityfields/zipvalidaton/documentation.adoc +++ /dev/null @@ -1,3 +0,0 @@ -= AddressValidation_entity - ZipValidation - -Provider for validating zip only \ No newline at end of file diff --git a/entity/Address_entity/Address_entity.aod b/entity/Address_entity/Address_entity.aod index 6a673e9aac4d858ba63d07b76b4105d4cb90a7e6..284f3c0e9d79a06d6160ceab76d4e48ad367e9c2 100644 --- a/entity/Address_entity/Address_entity.aod +++ b/entity/Address_entity/Address_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Address_entity</name> <title>Address</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -12,9 +12,10 @@ <entityField> <name>ADDRESS</name> <title>Street</title> - <mandatoryProcess>%aditoprj%/entity/Address_entity/entityfields/address/mandatoryProcess.js</mandatoryProcess> - <textInputAllowed v="true" /> + <mandatory v="true" /> + <textInputAllowed v="false" /> <stateProcess>%aditoprj%/entity/Address_entity/entityfields/address/stateProcess.js</stateProcess> + <tooltip></tooltip> <onValueChange>%aditoprj%/entity/Address_entity/entityfields/address/onValueChange.js</onValueChange> <onValueChangeTypes> <element>MASK</element> @@ -46,14 +47,21 @@ <name>BUILDINGNO</name> <title>House number</title> <stateProcess>%aditoprj%/entity/Address_entity/entityfields/buildingno/stateProcess.js</stateProcess> + <onValueChange>%aditoprj%/entity/Address_entity/entityfields/buildingno/onValueChange.js</onValueChange> + <onValueChangeTypes> + <element>MASK</element> + </onValueChangeTypes> </entityField> <entityField> <name>CITY</name> <documentation>%aditoprj%/entity/Address_entity/entityfields/city/documentation.adoc</documentation> <title>City</title> - <mandatoryProcess>%aditoprj%/entity/Address_entity/entityfields/city/mandatoryProcess.js</mandatoryProcess> - <textInputAllowed v="true" /> + <mandatory v="true" /> <stateProcess>%aditoprj%/entity/Address_entity/entityfields/city/stateProcess.js</stateProcess> + <onValueChange>%aditoprj%/entity/Address_entity/entityfields/city/onValueChange.js</onValueChange> + <onValueChangeTypes> + <element>MASK</element> + </onValueChangeTypes> </entityField> <entityField> <name>COUNTRY</name> @@ -63,14 +71,22 @@ <stateProcess>%aditoprj%/entity/Address_entity/entityfields/country/stateProcess.js</stateProcess> <valueProcess>%aditoprj%/entity/Address_entity/entityfields/country/valueProcess.js</valueProcess> <displayValueProcess>%aditoprj%/entity/Address_entity/entityfields/country/displayValueProcess.js</displayValueProcess> + <onValueChange>%aditoprj%/entity/Address_entity/entityfields/country/onValueChange.js</onValueChange> + <onValueChangeTypes> + <element>MASK</element> + </onValueChangeTypes> </entityField> <entityField> <name>DISTRICT</name> <title>District</title> + <dropDownProcess>%aditoprj%/entity/Address_entity/entityfields/district/dropDownProcess.js</dropDownProcess> + <textInputAllowed v="true" /> </entityField> <entityField> <name>REGION</name> <title>Region</title> + <dropDownProcess>%aditoprj%/entity/Address_entity/entityfields/region/dropDownProcess.js</dropDownProcess> + <textInputAllowed v="true" /> <state>INVISIBLE</state> <stateProcess>%aditoprj%/entity/Address_entity/entityfields/region/stateProcess.js</stateProcess> </entityField> @@ -84,25 +100,25 @@ <title>${ADDRESS_STATE}</title> <mandatoryProcess>%aditoprj%/entity/Address_entity/entityfields/state/mandatoryProcess.js</mandatoryProcess> <stateProcess>%aditoprj%/entity/Address_entity/entityfields/state/stateProcess.js</stateProcess> + <onValueChange>%aditoprj%/entity/Address_entity/entityfields/state/onValueChange.js</onValueChange> + <onValueChangeTypes> + <element>MASK</element> + </onValueChangeTypes> </entityField> <entityField> <name>ZIP</name> <title>Postcode</title> - <mandatoryProcess>%aditoprj%/entity/Address_entity/entityfields/zip/mandatoryProcess.js</mandatoryProcess> + <mandatory v="true" /> <stateProcess>%aditoprj%/entity/Address_entity/entityfields/zip/stateProcess.js</stateProcess> + <onValueChange>%aditoprj%/entity/Address_entity/entityfields/zip/onValueChange.js</onValueChange> + <onValueChangeTypes> + <element>MASK</element> + </onValueChangeTypes> <onValidation>%aditoprj%/entity/Address_entity/entityfields/zip/onValidation.js</onValidation> </entityField> <entityProvider> <name>OrganisationAddresses</name> <documentation>%aditoprj%/entity/Address_entity/entityfields/organisationaddresses/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>b484b43c-16f6-4875-9787-f0813dd200cb</name> - <entityName>Organisation_entity</entityName> - <fieldName>Addresses</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ContactType_param</name> @@ -133,20 +149,6 @@ <entityProvider> <name>ContactAddresses</name> <documentation>%aditoprj%/entity/Address_entity/entityfields/contactaddresses/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>efdb2f19-ab41-4f49-941a-843610e2b31b</name> - <entityName>Person_entity</entityName> - <fieldName>PersAddresses</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>aecd30a8-b80e-42c5-be09-3042b75a3fa2</name> - <entityName>Contact_entity</entityName> - <fieldName>ContactAddresses</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ContactType_param</name> @@ -183,14 +185,6 @@ <name>OrganisationAddressesByContact</name> <documentation>%aditoprj%/entity/Address_entity/entityfields/organisationaddressesbycontact/documentation.adoc</documentation> <titlePlural>Company Addresses</titlePlural> - <dependencies> - <entityDependency> - <name>388f6ad3-b817-4dc0-a5d5-a41eec485357</name> - <entityName>Person_entity</entityName> - <fieldName>OrgAddresses</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ContactType_param</name> @@ -228,26 +222,6 @@ <entityProvider> <name>OrganisationAndContactAddresses</name> <documentation>%aditoprj%/entity/Address_entity/entityfields/organisationandcontactaddresses/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>4d7e3b3a-abba-4429-9f1e-18e11788c0f2</name> - <entityName>Person_entity</entityName> - <fieldName>ContactAndOrganisationAddresses</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>daa41953-8e95-46f2-b08a-6c843ab87985</name> - <entityName>Offer_entity</entityName> - <fieldName>PossibleAddresses</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>2f162626-bd99-4e2a-b9cf-e95864d9ed0e</name> - <entityName>Order_entity</entityName> - <fieldName>PossibleAddresses</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>DefaultAddressId_param</name> @@ -312,42 +286,6 @@ <contentTypeProcess>%aditoprj%/entity/Address_entity/entityfields/is_standard_icon/contentTypeProcess.js</contentTypeProcess> <valueProcess>%aditoprj%/entity/Address_entity/entityfields/is_standard_icon/valueProcess.js</valueProcess> </entityField> - <entityConsumer> - <name>ZipValidation</name> - <dependency> - <name>dependency</name> - <entityName>AddressValidation_entity</entityName> - <fieldName>ZipValidaton</fieldName> - </dependency> - <children> - <entityParameter> - <name>Country_param</name> - <valueProcess>%aditoprj%/entity/Address_entity/entityfields/zipvalidation/children/country_param/valueProcess.js</valueProcess> - </entityParameter> - <entityParameter> - <name>CurrentValue_param</name> - <valueProcess>%aditoprj%/entity/Address_entity/entityfields/zipvalidation/children/currentvalue_param/valueProcess.js</valueProcess> - </entityParameter> - </children> - </entityConsumer> - <entityConsumer> - <name>CityValidation</name> - <dependency> - <name>dependency</name> - <entityName>AddressValidation_entity</entityName> - <fieldName>CityValidation</fieldName> - </dependency> - <children> - <entityParameter> - <name>CurrentValue_param</name> - <valueProcess>%aditoprj%/entity/Address_entity/entityfields/cityvalidation/children/currentvalue_param/valueProcess.js</valueProcess> - </entityParameter> - <entityParameter> - <name>Country_param</name> - <valueProcess>%aditoprj%/entity/Address_entity/entityfields/cityvalidation/children/country_param/valueProcess.js</valueProcess> - </entityParameter> - </children> - </entityConsumer> <entityField> <name>AddressSearch</name> <documentation>%aditoprj%/entity/Address_entity/entityfields/addresssearch/documentation.adoc</documentation> @@ -378,98 +316,14 @@ </entityParameter> </children> </entityConsumer> - <entityConsumer> - <name>StreetValidation</name> - <dependency> - <name>dependency</name> - <entityName>AddressValidation_entity</entityName> - <fieldName>StreetValidation</fieldName> - </dependency> - <children> - <entityParameter> - <name>City_param</name> - <valueProcess>%aditoprj%/entity/Address_entity/entityfields/streetvalidation/children/city_param/valueProcess.js</valueProcess> - </entityParameter> - <entityParameter> - <name>Country_param</name> - <valueProcess>%aditoprj%/entity/Address_entity/entityfields/streetvalidation/children/country_param/valueProcess.js</valueProcess> - </entityParameter> - <entityParameter> - <name>CurrentValue_param</name> - <valueProcess>%aditoprj%/entity/Address_entity/entityfields/streetvalidation/children/currentvalue_param/valueProcess.js</valueProcess> - </entityParameter> - </children> - </entityConsumer> <entityParameter> <name>ShowDsgvoMessage_param</name> <valueProcess>%aditoprj%/entity/Address_entity/entityfields/showdsgvomessage_param/valueProcess.js</valueProcess> <expose v="true" /> </entityParameter> - <entityField> - <name>Zip_ws</name> - <documentation>%aditoprj%/entity/Address_entity/entityfields/zip_ws/documentation.adoc</documentation> - <title>Postcode</title> - <consumer>ZipValidation</consumer> - <mandatoryProcess>%aditoprj%/entity/Address_entity/entityfields/zip_ws/mandatoryProcess.js</mandatoryProcess> - <textInputAllowed v="true" /> - <stateProcess>%aditoprj%/entity/Address_entity/entityfields/zip_ws/stateProcess.js</stateProcess> - <valueProcess>%aditoprj%/entity/Address_entity/entityfields/zip_ws/valueProcess.js</valueProcess> - <displayValueProcess>%aditoprj%/entity/Address_entity/entityfields/zip_ws/displayValueProcess.js</displayValueProcess> - <onValueChange>%aditoprj%/entity/Address_entity/entityfields/zip_ws/onValueChange.js</onValueChange> - <onValueChangeTypes> - <element>MASK</element> - </onValueChangeTypes> - <onValidation>%aditoprj%/entity/Address_entity/entityfields/zip_ws/onValidation.js</onValidation> - </entityField> - <entityField> - <name>City_ws</name> - <documentation>%aditoprj%/entity/Address_entity/entityfields/city_ws/documentation.adoc</documentation> - <title>City</title> - <consumer>CityValidation</consumer> - <mandatoryProcess>%aditoprj%/entity/Address_entity/entityfields/city_ws/mandatoryProcess.js</mandatoryProcess> - <textInputAllowed v="true" /> - <stateProcess>%aditoprj%/entity/Address_entity/entityfields/city_ws/stateProcess.js</stateProcess> - <valueProcess>%aditoprj%/entity/Address_entity/entityfields/city_ws/valueProcess.js</valueProcess> - <displayValueProcess>%aditoprj%/entity/Address_entity/entityfields/city_ws/displayValueProcess.js</displayValueProcess> - <onValueChange>%aditoprj%/entity/Address_entity/entityfields/city_ws/onValueChange.js</onValueChange> - <onValueChangeTypes> - <element>MASK</element> - </onValueChangeTypes> - </entityField> - <entityField> - <name>Address_ws</name> - <documentation>%aditoprj%/entity/Address_entity/entityfields/address_ws/documentation.adoc</documentation> - <title>Street</title> - <description></description> - <consumer>StreetValidation</consumer> - <mandatoryProcess>%aditoprj%/entity/Address_entity/entityfields/address_ws/mandatoryProcess.js</mandatoryProcess> - <textInputAllowed v="true" /> - <stateProcess>%aditoprj%/entity/Address_entity/entityfields/address_ws/stateProcess.js</stateProcess> - <titleProcess>%aditoprj%/entity/Address_entity/entityfields/address_ws/titleProcess.js</titleProcess> - <valueProcess>%aditoprj%/entity/Address_entity/entityfields/address_ws/valueProcess.js</valueProcess> - <displayValueProcess>%aditoprj%/entity/Address_entity/entityfields/address_ws/displayValueProcess.js</displayValueProcess> - <onValueChange>%aditoprj%/entity/Address_entity/entityfields/address_ws/onValueChange.js</onValueChange> - <onValueChangeTypes> - <element>MASK</element> - </onValueChangeTypes> - </entityField> <entityProvider> <name>QuickEntryAdresses</name> <documentation>%aditoprj%/entity/Address_entity/entityfields/quickentryadresses/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>d677a301-2038-4ccd-baa1-5f986e290564</name> - <entityName>QuickEntry_entity</entityName> - <fieldName>Adresses</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>aa315b76-7573-4627-ae15-2e7414b8b34d</name> - <entityName>QuickEntry_entity</entityName> - <fieldName>OrgAddresses</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityParameter> <name>ReplaceStandardAddress_param</name> @@ -498,6 +352,9 @@ <stateProcess>%aditoprj%/entity/Address_entity/entityfields/formattedaddress/stateProcess.js</stateProcess> <valueProcess>%aditoprj%/entity/Address_entity/entityfields/formattedaddress/valueProcess.js</valueProcess> </entityField> + <entityField> + <name>VALIDATION_RESULT</name> + </entityField> </entityFields> <recordContainers> <dbRecordContainer> @@ -607,6 +464,10 @@ <name>LON.value</name> <recordfield>ADDRESS.LON</recordfield> </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>VALIDATION_RESULT.value</name> + <recordfield>ADDRESS.VALIDATION_RESULT</recordfield> + </dbRecordFieldMapping> </recordFieldMappings> <linkInformation> <linkInformation> diff --git a/entity/Address_entity/afterOperatingState.js b/entity/Address_entity/afterOperatingState.js index 23f607ff7d13f5153ef6e252d1f8e6b185218040..83cbe277d0eae36e6744186d6d70f35fb00f42f8 100644 --- a/entity/Address_entity/afterOperatingState.js +++ b/entity/Address_entity/afterOperatingState.js @@ -3,4 +3,12 @@ import("system.neon"); //in some cases, the field does not exist yet/not anymore when the afterOperatingState process is called if (vars.exists("$field.AddressSearch")) - neon.setFieldValue("$field.AddressSearch", "");//why is this needed? \ No newline at end of file +{ + neon.setFieldValue("$field.AddressSearch", "");//why is this needed? +} + +if(vars.exists("$sys.operatingstate") && vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_VIEW) +{ + vars.set("$context.PushDataPrivacyNotification", "false"); +} + diff --git a/entity/Address_entity/entityfields/address/mandatoryProcess.js b/entity/Address_entity/entityfields/address/mandatoryProcess.js deleted file mode 100644 index c92fea5dd7288af13944c5a3486d3f25f3fb72fc..0000000000000000000000000000000000000000 --- a/entity/Address_entity/entityfields/address/mandatoryProcess.js +++ /dev/null @@ -1,6 +0,0 @@ -import("system.vars"); -import("AddressEntity_lib"); -import("system.result"); -import("WsValidation_lib"); - -result.string(WsValidationFieldUtils.mainFieldMandatoryProcess(WsValidationType.get().TYPE_STREET_NOMINATIM, AddressEntityValidation.isMandatoryField(vars.get("$field.COUNTRY")))); \ No newline at end of file diff --git a/entity/Address_entity/entityfields/address/onValueChange.js b/entity/Address_entity/entityfields/address/onValueChange.js index 9ec7eecebe1fdaed8182662d6d480784a96afcd0..c21d3544775f95da6a611b15800fdb4e8c377190 100644 --- a/entity/Address_entity/entityfields/address/onValueChange.js +++ b/entity/Address_entity/entityfields/address/onValueChange.js @@ -1,5 +1,3 @@ -import("system.vars"); -import("WsValidation_lib"); +import("system.neon"); -if (WsValidationUtils.isWsEnabled(WsValidationType.get().TYPE_STREET_NOMINATIM)) - WsValidationUtils.setAddressFields(vars.get("$local.value")); \ No newline at end of file +neon.setFieldValue("$field.VALIDATION_RESULT", null); \ No newline at end of file diff --git a/entity/Address_entity/entityfields/address/stateProcess.js b/entity/Address_entity/entityfields/address/stateProcess.js index 005ea314f1ddba67091c33e6f8c8ed259e6c6440..ed5e161dcc793ca6dc3a379eea6d6b3445eb3b3c 100644 --- a/entity/Address_entity/entityfields/address/stateProcess.js +++ b/entity/Address_entity/entityfields/address/stateProcess.js @@ -1,11 +1,10 @@ import("system.neon"); -import("system.vars"); import("system.result"); -import("WsValidation_lib"); +import("system.vars"); // The field is only displayed in edit mode because there is the "formattedAddress" field which one shows the fromated address. // If the field has a Value it would be displayed next to the formattedAddress field in view mode, so in this case the state is set to invisible. -if (vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_VIEW) +if (vars.get("$sys.recordstate") == "" || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_VIEW) +{ result.string(neon.COMPONENTSTATE_INVISIBLE); -else - result.string(WsValidationFieldUtils.mainFieldStateProcess(WsValidationType.get().TYPE_STREET_NOMINATIM)); \ No newline at end of file +} \ No newline at end of file diff --git a/entity/Address_entity/entityfields/address_ws/displayValueProcess.js b/entity/Address_entity/entityfields/address_ws/displayValueProcess.js deleted file mode 100644 index 8b35f1422608f57b4dff8373df64951f85c1844c..0000000000000000000000000000000000000000 --- a/entity/Address_entity/entityfields/address_ws/displayValueProcess.js +++ /dev/null @@ -1,3 +0,0 @@ -import("WsValidation_lib"); - -WsValidationFieldUtils.wsDisplayValueProcess(WsValidationType.get().TYPE_STREET_NOMINATIM, "$field.ADDRESS"); \ No newline at end of file diff --git a/entity/Address_entity/entityfields/address_ws/documentation.adoc b/entity/Address_entity/entityfields/address_ws/documentation.adoc deleted file mode 100644 index f15b5e5649759538397e58f3fb934c7a60008ad3..0000000000000000000000000000000000000000 --- a/entity/Address_entity/entityfields/address_ws/documentation.adoc +++ /dev/null @@ -1,3 +0,0 @@ -This is a field used for the address-webservice. It is only displayed if the webservice is enabled. - -See WsValidation_lib for technical implementation information. \ No newline at end of file diff --git a/entity/Address_entity/entityfields/address_ws/mandatoryProcess.js b/entity/Address_entity/entityfields/address_ws/mandatoryProcess.js deleted file mode 100644 index 305a67d36c0ece587ff4b7f57a46bd2f567d9621..0000000000000000000000000000000000000000 --- a/entity/Address_entity/entityfields/address_ws/mandatoryProcess.js +++ /dev/null @@ -1,6 +0,0 @@ -import("system.vars"); -import("AddressEntity_lib"); -import("WsValidation_lib"); -import("system.result"); - -result.object(WsValidationFieldUtils.wsFieldMandatoryProcess(WsValidationType.get().TYPE_STREET_NOMINATIM, AddressEntityValidation.isMandatoryField(vars.get("$field.COUNTRY"), "ADDRESS"))); \ No newline at end of file diff --git a/entity/Address_entity/entityfields/address_ws/onValueChange.js b/entity/Address_entity/entityfields/address_ws/onValueChange.js deleted file mode 100644 index 02aee850189287dedc43fbfed13f53cfd5f26a84..0000000000000000000000000000000000000000 --- a/entity/Address_entity/entityfields/address_ws/onValueChange.js +++ /dev/null @@ -1,3 +0,0 @@ -import("WsValidation_lib"); - -WsValidationFieldUtils.wsOnValueChangeProcess(WsValidationType.get().TYPE_STREET_NOMINATIM, "$field.ADDRESS"); \ No newline at end of file diff --git a/entity/Address_entity/entityfields/address_ws/stateProcess.js b/entity/Address_entity/entityfields/address_ws/stateProcess.js deleted file mode 100644 index 1e05ad82e9970e26accfdad7cf94cbb65f7e15ff..0000000000000000000000000000000000000000 --- a/entity/Address_entity/entityfields/address_ws/stateProcess.js +++ /dev/null @@ -1,11 +0,0 @@ -import("system.neon"); -import("system.vars"); -import("system.result"); -import("WsValidation_lib"); - -// The field is only displayed in edit mode because there is the "formattedAddress" field which one shows the fromated address. -// If the field has a Value it would be displayed next to the formattedAddress field in view mode, so in this case the state is set to invisible. -if (vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_VIEW) - result.string(neon.COMPONENTSTATE_INVISIBLE); -else - result.string(WsValidationFieldUtils.wsFieldStateProcess(WsValidationType.get().TYPE_STREET_NOMINATIM)); \ No newline at end of file diff --git a/entity/Address_entity/entityfields/address_ws/titleProcess.js b/entity/Address_entity/entityfields/address_ws/titleProcess.js deleted file mode 100644 index a4923c9cd04d58e2b46635653ad058c779ac8dac..0000000000000000000000000000000000000000 --- a/entity/Address_entity/entityfields/address_ws/titleProcess.js +++ /dev/null @@ -1,10 +0,0 @@ -import("system.result"); -import("system.vars"); -import("KeywordRegistry_basic"); -import("Keyword_lib"); - -var key = vars.get("$field.ADDR_TYPE"); -if (key == $KeywordRegistry.addressType$post()) -{ - result.string("Post office box number"); -} \ No newline at end of file diff --git a/entity/Address_entity/entityfields/address_ws/valueProcess.js b/entity/Address_entity/entityfields/address_ws/valueProcess.js deleted file mode 100644 index ef17405a27a609b387beeebfc31499535e5d7b3f..0000000000000000000000000000000000000000 --- a/entity/Address_entity/entityfields/address_ws/valueProcess.js +++ /dev/null @@ -1,4 +0,0 @@ -import("system.vars"); -import("WsValidation_lib"); - -WsValidationFieldUtils.wsValueProcess(WsValidationType.get().TYPE_STREET_NOMINATIM, "$field.ADDRESS"); \ No newline at end of file diff --git a/entity/Address_entity/entityfields/addressid/valueProcess.js b/entity/Address_entity/entityfields/addressid/valueProcess.js index 6cca32f779e9805f1a780ca58e4147e51ddc5ae8..ddcf55571cd189d2bf5b0da9714f00b3d19da192 100644 --- a/entity/Address_entity/entityfields/addressid/valueProcess.js +++ b/entity/Address_entity/entityfields/addressid/valueProcess.js @@ -3,6 +3,7 @@ import("system.result"); import("system.neon"); import("system.vars"); - -if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) - result.string(util.getNewUUID()); \ No newline at end of file +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) +{ + result.string(util.getNewUUID()); +} \ No newline at end of file diff --git a/entity/Address_entity/entityfields/addresssearch/stateProcess.js b/entity/Address_entity/entityfields/addresssearch/stateProcess.js index 6b661824b34c0f509494ed9f3ce8cd83e933cd16..441e172606fba52d5c246c13bbee2cecf7f62a36 100644 --- a/entity/Address_entity/entityfields/addresssearch/stateProcess.js +++ b/entity/Address_entity/entityfields/addresssearch/stateProcess.js @@ -3,11 +3,7 @@ import("system.neon"); import("system.result"); import("system.vars"); -if (WsValidationUtils.isWsEnabled(WsValidationType.get().TYPE_ADDRESS_NOMINATIM)) -{ - result.string(neon.COMPONENTSTATE_AUTO); -} -else +if (!WsValidationUtils.isWsEnabled(WsValidationType.get().TYPE_ADDRESS_NOMINATIM) || vars.get("$sys.recordstate") == "" || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_VIEW) { result.string(neon.COMPONENTSTATE_INVISIBLE); } \ No newline at end of file diff --git a/entity/Address_entity/entityfields/addresssearch/valueProcess.js b/entity/Address_entity/entityfields/addresssearch/valueProcess.js index e5e514c90862ca236702c6dabc10e44ddaa4d1e5..094a9ae8b2a2d5c5f2a5e68c905b3545ffbfa167 100644 --- a/entity/Address_entity/entityfields/addresssearch/valueProcess.js +++ b/entity/Address_entity/entityfields/addresssearch/valueProcess.js @@ -1,5 +1,8 @@ +import("system.logging"); import("system.result"); import("WsValidation_lib"); import("system.vars"); -result.string(WsValidationUtils.valueFromJSON(vars.get("$this.value"))); \ No newline at end of file +let json = vars.get("$this.value") == null ? vars.get("$field.VALIDATION_RESULT") : vars.get("$this.value"); + +result.string(WsValidationUtils.valueFromJSON(json)); \ No newline at end of file diff --git a/entity/Address_entity/entityfields/buildingno/onValueChange.js b/entity/Address_entity/entityfields/buildingno/onValueChange.js new file mode 100644 index 0000000000000000000000000000000000000000..c21d3544775f95da6a611b15800fdb4e8c377190 --- /dev/null +++ b/entity/Address_entity/entityfields/buildingno/onValueChange.js @@ -0,0 +1,3 @@ +import("system.neon"); + +neon.setFieldValue("$field.VALIDATION_RESULT", null); \ No newline at end of file diff --git a/entity/Address_entity/entityfields/city/mandatoryProcess.js b/entity/Address_entity/entityfields/city/mandatoryProcess.js deleted file mode 100644 index 255d63dfb4bded4c3ac581fb4d22902c6aa91172..0000000000000000000000000000000000000000 --- a/entity/Address_entity/entityfields/city/mandatoryProcess.js +++ /dev/null @@ -1,6 +0,0 @@ -import("system.vars"); -import("AddressEntity_lib"); -import("system.result"); -import("WsValidation_lib"); - -result.string(WsValidationFieldUtils.mainFieldMandatoryProcess(WsValidationType.get().TYPE_CITY_NOMINATIM, AddressEntityValidation.isMandatoryField(vars.get("$field.COUNTRY")))); \ No newline at end of file diff --git a/entity/Address_entity/entityfields/city/onValueChange.js b/entity/Address_entity/entityfields/city/onValueChange.js new file mode 100644 index 0000000000000000000000000000000000000000..c21d3544775f95da6a611b15800fdb4e8c377190 --- /dev/null +++ b/entity/Address_entity/entityfields/city/onValueChange.js @@ -0,0 +1,3 @@ +import("system.neon"); + +neon.setFieldValue("$field.VALIDATION_RESULT", null); \ No newline at end of file diff --git a/entity/Address_entity/entityfields/city/stateProcess.js b/entity/Address_entity/entityfields/city/stateProcess.js index fe5eecb4a34b7031f7a69192eed73d6d4c5ec4d4..ed5e161dcc793ca6dc3a379eea6d6b3445eb3b3c 100644 --- a/entity/Address_entity/entityfields/city/stateProcess.js +++ b/entity/Address_entity/entityfields/city/stateProcess.js @@ -1,11 +1,10 @@ import("system.neon"); -import("system.vars"); import("system.result"); -import("WsValidation_lib"); +import("system.vars"); // The field is only displayed in edit mode because there is the "formattedAddress" field which one shows the fromated address. // If the field has a Value it would be displayed next to the formattedAddress field in view mode, so in this case the state is set to invisible. -if (vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_VIEW) +if (vars.get("$sys.recordstate") == "" || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_VIEW) +{ result.string(neon.COMPONENTSTATE_INVISIBLE); -else - result.string(WsValidationFieldUtils.mainFieldStateProcess(WsValidationType.get().TYPE_CITY_NOMINATIM)); \ No newline at end of file +} \ No newline at end of file diff --git a/entity/Address_entity/entityfields/city_ws/displayValueProcess.js b/entity/Address_entity/entityfields/city_ws/displayValueProcess.js deleted file mode 100644 index 7cbee1a42ec8b179023281837013cc7b0efe4609..0000000000000000000000000000000000000000 --- a/entity/Address_entity/entityfields/city_ws/displayValueProcess.js +++ /dev/null @@ -1,3 +0,0 @@ -import("WsValidation_lib"); - -WsValidationFieldUtils.wsDisplayValueProcess(WsValidationType.get().TYPE_CITY_NOMINATIM, "$field.CITY"); \ No newline at end of file diff --git a/entity/Address_entity/entityfields/city_ws/documentation.adoc b/entity/Address_entity/entityfields/city_ws/documentation.adoc deleted file mode 100644 index f15b5e5649759538397e58f3fb934c7a60008ad3..0000000000000000000000000000000000000000 --- a/entity/Address_entity/entityfields/city_ws/documentation.adoc +++ /dev/null @@ -1,3 +0,0 @@ -This is a field used for the address-webservice. It is only displayed if the webservice is enabled. - -See WsValidation_lib for technical implementation information. \ No newline at end of file diff --git a/entity/Address_entity/entityfields/city_ws/mandatoryProcess.js b/entity/Address_entity/entityfields/city_ws/mandatoryProcess.js deleted file mode 100644 index 866716ba42f0ea5f093b6fa28e66fd244bf17fab..0000000000000000000000000000000000000000 --- a/entity/Address_entity/entityfields/city_ws/mandatoryProcess.js +++ /dev/null @@ -1,6 +0,0 @@ -import("system.vars"); -import("AddressEntity_lib"); -import("WsValidation_lib"); -import("system.result"); - -result.object(WsValidationFieldUtils.wsFieldMandatoryProcess(WsValidationType.get().TYPE_CITY_NOMINATIM, AddressEntityValidation.isMandatoryField(vars.get("$field.COUNTRY"), "CITY"))); \ No newline at end of file diff --git a/entity/Address_entity/entityfields/city_ws/onValueChange.js b/entity/Address_entity/entityfields/city_ws/onValueChange.js deleted file mode 100644 index 5938552243c97f173eaa35e938b3745fa9e23f66..0000000000000000000000000000000000000000 --- a/entity/Address_entity/entityfields/city_ws/onValueChange.js +++ /dev/null @@ -1,3 +0,0 @@ -import("WsValidation_lib"); - -WsValidationFieldUtils.wsOnValueChangeProcess(WsValidationType.get().TYPE_CITY_NOMINATIM, "$field.CITY"); \ No newline at end of file diff --git a/entity/Address_entity/entityfields/city_ws/stateProcess.js b/entity/Address_entity/entityfields/city_ws/stateProcess.js deleted file mode 100644 index 7095f69b78189f64e649f434fa0178d6d7bd26cf..0000000000000000000000000000000000000000 --- a/entity/Address_entity/entityfields/city_ws/stateProcess.js +++ /dev/null @@ -1,9 +0,0 @@ -import("system.neon"); -import("system.vars"); -import("system.result"); -import("WsValidation_lib"); - -if (vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_VIEW) - result.string(neon.COMPONENTSTATE_INVISIBLE); -else - result.string(WsValidationFieldUtils.wsFieldStateProcess(WsValidationType.get().TYPE_CITY_NOMINATIM)); \ No newline at end of file diff --git a/entity/Address_entity/entityfields/city_ws/valueProcess.js b/entity/Address_entity/entityfields/city_ws/valueProcess.js deleted file mode 100644 index 789a3b330381abc87c93a13ef767e578101513bc..0000000000000000000000000000000000000000 --- a/entity/Address_entity/entityfields/city_ws/valueProcess.js +++ /dev/null @@ -1,3 +0,0 @@ -import("WsValidation_lib"); - -WsValidationFieldUtils.wsValueProcess(WsValidationType.get().TYPE_CITY_NOMINATIM, "$field.CITY"); \ No newline at end of file diff --git a/entity/Address_entity/entityfields/country/onValueChange.js b/entity/Address_entity/entityfields/country/onValueChange.js new file mode 100644 index 0000000000000000000000000000000000000000..c21d3544775f95da6a611b15800fdb4e8c377190 --- /dev/null +++ b/entity/Address_entity/entityfields/country/onValueChange.js @@ -0,0 +1,3 @@ +import("system.neon"); + +neon.setFieldValue("$field.VALIDATION_RESULT", null); \ No newline at end of file diff --git a/entity/Address_entity/entityfields/district/dropDownProcess.js b/entity/Address_entity/entityfields/district/dropDownProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..c7e3f04405984fa07f727cf4fe232f5e5ff18f51 --- /dev/null +++ b/entity/Address_entity/entityfields/district/dropDownProcess.js @@ -0,0 +1,8 @@ +import("system.result"); +import("Sql_lib"); + +result.object( + newSelect("distinct DISTRICT, DISTRICT") + .where("ADDRESS.DISTRICT is not null") + .from("ADDRESS").table() +); diff --git a/entity/Address_entity/entityfields/region/dropDownProcess.js b/entity/Address_entity/entityfields/region/dropDownProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..1627eb6de24739eb56fa8f7ec5fc0a4f205cd1c1 --- /dev/null +++ b/entity/Address_entity/entityfields/region/dropDownProcess.js @@ -0,0 +1,8 @@ +import("system.result"); +import("Sql_lib"); + +result.object( + newSelect("distinct REGION, REGION") + .where("ADDRESS.REGION is not null") + .from("ADDRESS").table() +); diff --git a/entity/Address_entity/entityfields/state/onValueChange.js b/entity/Address_entity/entityfields/state/onValueChange.js new file mode 100644 index 0000000000000000000000000000000000000000..c21d3544775f95da6a611b15800fdb4e8c377190 --- /dev/null +++ b/entity/Address_entity/entityfields/state/onValueChange.js @@ -0,0 +1,3 @@ +import("system.neon"); + +neon.setFieldValue("$field.VALIDATION_RESULT", null); \ No newline at end of file diff --git a/entity/Address_entity/entityfields/streetvalidation/children/currentvalue_param/valueProcess.js b/entity/Address_entity/entityfields/streetvalidation/children/currentvalue_param/valueProcess.js deleted file mode 100644 index 8e559d5146426a870e4f44bc529645bdf1770b5b..0000000000000000000000000000000000000000 --- a/entity/Address_entity/entityfields/streetvalidation/children/currentvalue_param/valueProcess.js +++ /dev/null @@ -1,4 +0,0 @@ -import("system.vars"); -import("system.result"); - -result.string(vars.get("$field.ADDRESS")) \ No newline at end of file diff --git a/entity/Address_entity/entityfields/zip/mandatoryProcess.js b/entity/Address_entity/entityfields/zip/mandatoryProcess.js deleted file mode 100644 index 453956bca6527ba6d35f257f0bc3a51d62dc20b2..0000000000000000000000000000000000000000 --- a/entity/Address_entity/entityfields/zip/mandatoryProcess.js +++ /dev/null @@ -1,6 +0,0 @@ -import("system.vars"); -import("AddressEntity_lib"); -import("WsValidation_lib"); -import("system.result"); - -result.object(WsValidationFieldUtils.mainFieldMandatoryProcess(WsValidationType.get().TYPE_ZIP_NOMINATIM, AddressEntityValidation.isMandatoryField(vars.get("$field.COUNTRY")))); \ No newline at end of file diff --git a/entity/Address_entity/entityfields/zip/onValueChange.js b/entity/Address_entity/entityfields/zip/onValueChange.js new file mode 100644 index 0000000000000000000000000000000000000000..c21d3544775f95da6a611b15800fdb4e8c377190 --- /dev/null +++ b/entity/Address_entity/entityfields/zip/onValueChange.js @@ -0,0 +1,3 @@ +import("system.neon"); + +neon.setFieldValue("$field.VALIDATION_RESULT", null); \ No newline at end of file diff --git a/entity/Address_entity/entityfields/zip/stateProcess.js b/entity/Address_entity/entityfields/zip/stateProcess.js index 764f48cdd72329a2d63c83df9f378561f4263b65..ed5e161dcc793ca6dc3a379eea6d6b3445eb3b3c 100644 --- a/entity/Address_entity/entityfields/zip/stateProcess.js +++ b/entity/Address_entity/entityfields/zip/stateProcess.js @@ -1,11 +1,10 @@ import("system.neon"); -import("system.vars"); import("system.result"); -import("WsValidation_lib"); +import("system.vars"); // The field is only displayed in edit mode because there is the "formattedAddress" field which one shows the fromated address. // If the field has a Value it would be displayed next to the formattedAddress field in view mode, so in this case the state is set to invisible. -if (vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_VIEW) +if (vars.get("$sys.recordstate") == "" || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_VIEW) +{ result.string(neon.COMPONENTSTATE_INVISIBLE); -else - result.string(WsValidationFieldUtils.mainFieldStateProcess(WsValidationType.get().TYPE_ZIP_NOMINATIM)); \ No newline at end of file +} \ No newline at end of file diff --git a/entity/Address_entity/entityfields/zip_ws/displayValueProcess.js b/entity/Address_entity/entityfields/zip_ws/displayValueProcess.js deleted file mode 100644 index 3c1fea5790d67cb8180b615b525fd60dce99bef3..0000000000000000000000000000000000000000 --- a/entity/Address_entity/entityfields/zip_ws/displayValueProcess.js +++ /dev/null @@ -1,3 +0,0 @@ -import("WsValidation_lib"); - -WsValidationFieldUtils.wsDisplayValueProcess(WsValidationType.get().TYPE_ZIP_NOMINATIM); \ No newline at end of file diff --git a/entity/Address_entity/entityfields/zip_ws/documentation.adoc b/entity/Address_entity/entityfields/zip_ws/documentation.adoc deleted file mode 100644 index f15b5e5649759538397e58f3fb934c7a60008ad3..0000000000000000000000000000000000000000 --- a/entity/Address_entity/entityfields/zip_ws/documentation.adoc +++ /dev/null @@ -1,3 +0,0 @@ -This is a field used for the address-webservice. It is only displayed if the webservice is enabled. - -See WsValidation_lib for technical implementation information. \ No newline at end of file diff --git a/entity/Address_entity/entityfields/zip_ws/mandatoryProcess.js b/entity/Address_entity/entityfields/zip_ws/mandatoryProcess.js deleted file mode 100644 index 453956bca6527ba6d35f257f0bc3a51d62dc20b2..0000000000000000000000000000000000000000 --- a/entity/Address_entity/entityfields/zip_ws/mandatoryProcess.js +++ /dev/null @@ -1,6 +0,0 @@ -import("system.vars"); -import("AddressEntity_lib"); -import("WsValidation_lib"); -import("system.result"); - -result.object(WsValidationFieldUtils.mainFieldMandatoryProcess(WsValidationType.get().TYPE_ZIP_NOMINATIM, AddressEntityValidation.isMandatoryField(vars.get("$field.COUNTRY")))); \ No newline at end of file diff --git a/entity/Address_entity/entityfields/zip_ws/onValidation.js b/entity/Address_entity/entityfields/zip_ws/onValidation.js deleted file mode 100644 index bbbf2acbbc727130db98ae621e1db16ab3fad89e..0000000000000000000000000000000000000000 --- a/entity/Address_entity/entityfields/zip_ws/onValidation.js +++ /dev/null @@ -1,17 +0,0 @@ -import("WsValidation_lib"); -import("system.translate"); -import("system.result"); -import("system.vars"); -import("PostalAddress_lib"); -import("Entity_lib"); - -if (WsValidationUtils.isWsEnabled(WsValidationType.get().TYPE_ZIP_NOMINATIM)) -{ - var wsData = WsValidationUtils.parseJSONArray(vars.get("$local.value")); - - // If it comes from WS (not null as parsing succeeded), assume it's correct. If not: validate. - if (wsData == null) - { - result.string(AddressValidationUtils.validateZipField(vars.get("$field.COUNTRY"), vars.get("$local.value"))); - } -} \ No newline at end of file diff --git a/entity/Address_entity/entityfields/zip_ws/onValueChange.js b/entity/Address_entity/entityfields/zip_ws/onValueChange.js deleted file mode 100644 index dfd1bbf97d2944b0ffcec04d017e62138a3bb23f..0000000000000000000000000000000000000000 --- a/entity/Address_entity/entityfields/zip_ws/onValueChange.js +++ /dev/null @@ -1,3 +0,0 @@ -import("WsValidation_lib"); - -WsValidationFieldUtils.wsOnValueChangeProcess(WsValidationType.get().TYPE_ZIP_NOMINATIM, "$field.ZIP"); \ No newline at end of file diff --git a/entity/Address_entity/entityfields/zip_ws/stateProcess.js b/entity/Address_entity/entityfields/zip_ws/stateProcess.js deleted file mode 100644 index 624d619e37803cf888573c65a7346c23cbd554ad..0000000000000000000000000000000000000000 --- a/entity/Address_entity/entityfields/zip_ws/stateProcess.js +++ /dev/null @@ -1,11 +0,0 @@ -import("system.neon"); -import("system.vars"); -import("system.result"); -import("WsValidation_lib"); - -// The field is only displayed in edit mode because there is the "formattedAddress" field which one shows the fromated address. -// If the field has a Value it would be displayed next to the formattedAddress field in view mode, so in this case the state is set to invisible. -if (vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_VIEW) - result.string(neon.COMPONENTSTATE_INVISIBLE); -else - result.string(WsValidationFieldUtils.wsFieldStateProcess(WsValidationType.get().TYPE_ZIP_NOMINATIM)); \ No newline at end of file diff --git a/entity/Address_entity/entityfields/zip_ws/valueProcess.js b/entity/Address_entity/entityfields/zip_ws/valueProcess.js deleted file mode 100644 index 0ecfd8b06e718cd095a3958212e60dcf0791e7a5..0000000000000000000000000000000000000000 --- a/entity/Address_entity/entityfields/zip_ws/valueProcess.js +++ /dev/null @@ -1,3 +0,0 @@ -import("WsValidation_lib"); - -WsValidationFieldUtils.wsValueProcess(WsValidationType.get().TYPE_ZIP_NOMINATIM, "$field.ZIP"); \ No newline at end of file diff --git a/entity/Address_entity/entityfields/zipvalidation/children/country_param/valueProcess.js b/entity/Address_entity/entityfields/zipvalidation/children/country_param/valueProcess.js deleted file mode 100644 index 41f3b8dc1a9b50c6ae934a4fae1402d699cc87b8..0000000000000000000000000000000000000000 --- a/entity/Address_entity/entityfields/zipvalidation/children/country_param/valueProcess.js +++ /dev/null @@ -1,4 +0,0 @@ -import("system.result"); -import("system.vars"); - -result.string(vars.get("$field.COUNTRY")); \ No newline at end of file diff --git a/entity/Address_entity/recordcontainers/db/onDBInsert.js b/entity/Address_entity/recordcontainers/db/onDBInsert.js index cddb15a9f8fd75177c6a219a72f240d56a1b257b..8a1561bc5f0c5af242e2f354d43ffc7d6e0ba3b8 100644 --- a/entity/Address_entity/recordcontainers/db/onDBInsert.js +++ b/entity/Address_entity/recordcontainers/db/onDBInsert.js @@ -49,17 +49,29 @@ if(scopeType == "Organisation") } } -DataPrivacyUtils.notifyNeedDataPrivacyUpdate(rowdata["ADDRESS.CONTACT_ID"], vars.get("$param.ShowDsgvoMessage_param")); +if(vars.exists("$context.PushDataPrivacyNotification") && vars.get("$context.PushDataPrivacyNotification") == "false") +{ + DataPrivacyUtils.notifyNeedDataPrivacyUpdate(rowdata["COMMUNICATION.CONTACT_ID"], vars.get("$param.ShowDsgvoMessage_param")); + vars.set("$context.PushDataPrivacyNotification", "true"); +} var address = new AddressObject(rowdata["ADDRESS.ADDRESS"], rowdata["ADDRESS.BUILDINGNO"], rowdata["ADDRESS.ZIP"], rowdata["ADDRESS.CITY"], rowdata["ADDRESS.COUNTRY"], rowdata["ADDRESS.STATE"]); var addressLocation = new LocationFinder().getGeoLocation(address); if (addressLocation) { + let fieldsValues = { + "LAT": addressLocation.lat, + "LON": addressLocation.lon + }; + + if (rowdata["ADDRESS.VALIDATION_RESULT"] === null) + { + fieldsValues["VALIDATION_RESULT"] = addressLocation.requestResult; + } + newWhere("ADDRESS.ADDRESSID", "$local.uid") - .updateFields({ - "LAT": addressLocation.lat, - "LON": addressLocation.lon - }); + .updateFields(fieldsValues); + } WorkflowSignalSender.inserted(); \ No newline at end of file diff --git a/entity/Address_entity/recordcontainers/db/onDBUpdate.js b/entity/Address_entity/recordcontainers/db/onDBUpdate.js index 87c3f2c27180a26dfb2d548acf385067807800a8..5f77dcb6f32edabebb5dca25190c59634e765944 100644 --- a/entity/Address_entity/recordcontainers/db/onDBUpdate.js +++ b/entity/Address_entity/recordcontainers/db/onDBUpdate.js @@ -1,3 +1,4 @@ +import("WsValidation_lib"); import("Workflow_lib"); import("Sql_lib"); import("Location_lib"); @@ -7,7 +8,11 @@ import("DataPrivacy_lib"); var rowdata = vars.get("$local.rowdata"); -DataPrivacyUtils.notifyNeedDataPrivacyUpdate(rowdata["ADDRESS.CONTACT_ID"], vars.get("$param.ShowDsgvoMessage_param")); +if(vars.exists("$context.PushDataPrivacyNotification") && vars.get("$context.PushDataPrivacyNotification") == "false") +{ + DataPrivacyUtils.notifyNeedDataPrivacyUpdate(rowdata["COMMUNICATION.CONTACT_ID"], vars.get("$param.ShowDsgvoMessage_param")); + vars.set("$context.PushDataPrivacyNotification", "true"); +} var changed = vars.get("$local.changed"); var isAddressChanged = changed.includes("ADDRESS.ADDRESS") @@ -23,11 +28,20 @@ if (isAddressChanged) var addressLocation = new LocationFinder().getGeoLocation(address); if (addressLocation) { + let fieldsValues = {}; + if (isAddressChanged) + { + fieldsValues["LAT"] = addressLocation.lat; + fieldsValues["LON"] = addressLocation.lon; + } + + if (rowdata["ADDRESS.VALIDATION_RESULT"] === null) + { + fieldsValues["VALIDATION_RESULT"] = addressLocation.requestResult; + } + newWhere("ADDRESS.ADDRESSID", "$local.uid") - .updateFields({ - "LAT": addressLocation.lat, - "LON": addressLocation.lon - }); + .updateFields(fieldsValues); } } diff --git a/entity/Address_entity/recordcontainers/db/recordfieldmappings/addr_type.displayvalue/expression.js b/entity/Address_entity/recordcontainers/db/recordfieldmappings/addr_type.displayvalue/expression.js index 34af55ea17e392d97e440c715ebb50b3b1f0f66c..cbce8488e0dda3d1bf9904fa764dcad39103f0a3 100644 --- a/entity/Address_entity/recordcontainers/db/recordfieldmappings/addr_type.displayvalue/expression.js +++ b/entity/Address_entity/recordcontainers/db/recordfieldmappings/addr_type.displayvalue/expression.js @@ -1,6 +1,10 @@ import("system.result"); import("Keyword_lib"); import("KeywordRegistry_basic"); +import("Sql_lib"); -var sql = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.addressType(), "ADDRESS.ADDR_TYPE"); -result.string(sql); +let sqlMasking = new SqlMaskingUtils(); + +let sql = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.addressType(), "ADDRESS.ADDR_TYPE"); +let validationICON = SqlBuilder.caseWhen(newWhere("ADDRESS.VALIDATION_RESULT is null")).thenString(" !").elseString("").toString(); +result.string(sqlMasking.concatWithSeparator([sql, validationICON], "", false)); diff --git a/entity/AdminViewRow_entity/AdminViewRow_entity.aod b/entity/AdminViewRow_entity/AdminViewRow_entity.aod index eb56b773bae0329432467ddd786d80a0b7805dc6..342ddfd282eaedc16823470fdbf30bca490693a0 100644 --- a/entity/AdminViewRow_entity/AdminViewRow_entity.aod +++ b/entity/AdminViewRow_entity/AdminViewRow_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>AdminViewRow_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/AdminViewRow_entity/documentation.adoc</documentation> @@ -27,14 +27,6 @@ <entityProvider> <name>AdminViewRows</name> <documentation>%aditoprj%/entity/AdminViewRow_entity/entityfields/adminviewrows/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>b5788fdf-1c82-45e2-8545-994c5e515476</name> - <entityName>DefaultAdminView_entity</entityName> - <fieldName>Rows</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>CONTENTTYPE</name> @@ -48,6 +40,9 @@ <onActionProcess>%aditoprj%/entity/AdminViewRow_entity/entityfields/copyvaluetoclipboard/onActionProcess.js</onActionProcess> <iconId>VAADIN:CLIPBOARD</iconId> </entityActionField> + <entityParameter> + <name>CopiedField_param</name> + </entityParameter> </entityFields> <recordContainers> <jDitoRecordContainer> diff --git a/entity/AdminViewRow_entity/entityfields/copyvaluetoclipboard/onActionProcess.js b/entity/AdminViewRow_entity/entityfields/copyvaluetoclipboard/onActionProcess.js index dd853d9ace41d189f6b152f075fee9c1038e0ecb..2704822e2a27ba7a04b04e33f7e5d1e8e39214fa 100644 --- a/entity/AdminViewRow_entity/entityfields/copyvaluetoclipboard/onActionProcess.js +++ b/entity/AdminViewRow_entity/entityfields/copyvaluetoclipboard/onActionProcess.js @@ -8,4 +8,8 @@ var row = fieldValues.find(function ([id]) return id === fieldId; }); if (row) - neon.copyToClipboard(row[2]); \ No newline at end of file +{ + neon.copyToClipboard(row[2]); + vars.set("$param.CopiedField_param", fieldId); + neon.refresh(); +} \ No newline at end of file diff --git a/entity/AdminViewRow_entity/recordcontainers/jdito/contentProcess.js b/entity/AdminViewRow_entity/recordcontainers/jdito/contentProcess.js index 1aa381774a2bfaf28ac963e84c63dda45cbf7192..032f17fc800e63291177f9c488a0d7a3410db446 100644 --- a/entity/AdminViewRow_entity/recordcontainers/jdito/contentProcess.js +++ b/entity/AdminViewRow_entity/recordcontainers/jdito/contentProcess.js @@ -1,4 +1,12 @@ import("system.vars"); import("system.result"); -result.object(JSON.parse(vars.getString("$param.Rows_param"))); \ No newline at end of file +var rows = JSON.parse(vars.getString("$param.Rows_param")); +var copiedField = vars.get("$param.CopiedField_param"); +if (copiedField) +{ + var copiedRow = rows.find(function ([uid]) {return uid == copiedField;}); + if (copiedRow) + copiedRow[1] = copiedRow[1] + " (Copied!)"; +} +result.object(rows); \ No newline at end of file diff --git a/entity/AdvertisingItem_entity/AdvertisingItem_entity.aod b/entity/AdvertisingItem_entity/AdvertisingItem_entity.aod new file mode 100644 index 0000000000000000000000000000000000000000..13150f4edf7bbb352ce421dc131375d1beb57163 --- /dev/null +++ b/entity/AdvertisingItem_entity/AdvertisingItem_entity.aod @@ -0,0 +1,314 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> + <name>AdvertisingItem_entity</name> + <title>Advertising item</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <documentation>%aditoprj%/entity/AdvertisingItem_entity/documentation.adoc</documentation> + <titlePlural>Advertising items</titlePlural> + <recordContainer>db</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + </entityProvider> + <entityField> + <name>ACTUALAMOUNT</name> + <title>Actual amount</title> + <contentType>NUMBER</contentType> + <outputFormat>#,##0.00</outputFormat> + <inputFormat>#,##0.00</inputFormat> + <mandatory v="false" /> + <state>READONLY</state> + <titleProcess>%aditoprj%/entity/AdvertisingItem_entity/entityfields/actualamount/titleProcess.js</titleProcess> + <valueProcess>%aditoprj%/entity/AdvertisingItem_entity/entityfields/actualamount/valueProcess.js</valueProcess> + <displayValueProcess>%aditoprj%/entity/AdvertisingItem_entity/entityfields/actualamount/displayValueProcess.js</displayValueProcess> + </entityField> + <entityField> + <name>DATE_NEW</name> + <title>Datenew</title> + <contentType>DATE</contentType> + <mandatory v="true" /> + <valueProcess>%aditoprj%/entity/AdvertisingItem_entity/entityfields/date_new/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>DELIVERY</name> + <title>delivery</title> + <consumer>KeywordDelivery</consumer> + <mandatory v="true" /> + <displayValueProcess>%aditoprj%/entity/AdvertisingItem_entity/entityfields/delivery/displayValueProcess.js</displayValueProcess> + </entityField> + <entityField> + <name>FREE</name> + <title>Free</title> + <contentType>BOOLEAN</contentType> + <mandatory v="true" /> + <valueProcess>%aditoprj%/entity/AdvertisingItem_entity/entityfields/free/valueProcess.js</valueProcess> + <onValueChange>%aditoprj%/entity/AdvertisingItem_entity/entityfields/free/onValueChange.js</onValueChange> + </entityField> + <entityField> + <name>INFO</name> + <title>Info</title> + <contentType>LONG_TEXT</contentType> + <mandatory v="false" /> + </entityField> + <entityField> + <name>ITEMPOSITION</name> + <title>Position</title> + <mandatory v="true" /> + <state>DISABLED</state> + <valueProcess>%aditoprj%/entity/AdvertisingItem_entity/entityfields/itemposition/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>PRICE</name> + <title>Price in </title> + <contentType>NUMBER</contentType> + <outputFormat>#,##0.00</outputFormat> + <inputFormat>#,##0.00</inputFormat> + <mandatory v="true" /> + <stateProcess>%aditoprj%/entity/AdvertisingItem_entity/entityfields/price/stateProcess.js</stateProcess> + <titleProcess>%aditoprj%/entity/AdvertisingItem_entity/entityfields/price/titleProcess.js</titleProcess> + <valueProcess>%aditoprj%/entity/AdvertisingItem_entity/entityfields/price/valueProcess.js</valueProcess> + <displayValueProcess>%aditoprj%/entity/AdvertisingItem_entity/entityfields/price/displayValueProcess.js</displayValueProcess> + </entityField> + <entityField> + <name>PRODUCT_ID</name> + <title>Product</title> + <consumer>Products</consumer> + <stateProcess>%aditoprj%/entity/AdvertisingItem_entity/entityfields/product_id/stateProcess.js</stateProcess> + <displayValueProcess>%aditoprj%/entity/AdvertisingItem_entity/entityfields/product_id/displayValueProcess.js</displayValueProcess> + <onValueChange>%aditoprj%/entity/AdvertisingItem_entity/entityfields/product_id/onValueChange.js</onValueChange> + </entityField> + <entityField> + <name>QUANTITY</name> + <title>Quantity</title> + <contentType>NUMBER</contentType> + <mandatory v="true" /> + <stateProcess>%aditoprj%/entity/AdvertisingItem_entity/entityfields/quantity/stateProcess.js</stateProcess> + <valueProcess>%aditoprj%/entity/AdvertisingItem_entity/entityfields/quantity/valueProcess.js</valueProcess> + <onValidation>%aditoprj%/entity/AdvertisingItem_entity/entityfields/quantity/onValidation.js</onValidation> + </entityField> + <entityField> + <name>SENT</name> + <title>Sent</title> + <contentType>BOOLEAN</contentType> + <mandatory v="false" /> + <valueProcess>%aditoprj%/entity/AdvertisingItem_entity/entityfields/sent/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>STATUS</name> + <title>Status</title> + <mandatory v="false" /> + </entityField> + <entityField> + <name>TARGETAMOUNT</name> + <title>Target amount</title> + <contentType>NUMBER</contentType> + <outputFormat>#,##0.00</outputFormat> + <inputFormat>#,##0.00</inputFormat> + <mandatory v="false" /> + <state>READONLY</state> + <titleProcess>%aditoprj%/entity/AdvertisingItem_entity/entityfields/targetamount/titleProcess.js</titleProcess> + <valueProcess>%aditoprj%/entity/AdvertisingItem_entity/entityfields/targetamount/valueProcess.js</valueProcess> + <displayValueProcess>%aditoprj%/entity/AdvertisingItem_entity/entityfields/targetamount/displayValueProcess.js</displayValueProcess> + </entityField> + <entityField> + <name>UNIT</name> + <title>Unit</title> + <consumer>KeywordUnit</consumer> + <mandatory v="true" /> + <displayValueProcess>%aditoprj%/entity/AdvertisingItem_entity/entityfields/unit/displayValueProcess.js</displayValueProcess> + </entityField> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityConsumer> + <name>Products</name> + <dependency> + <name>dependency</name> + <entityName>Product_entity</entityName> + <fieldName>Products</fieldName> + </dependency> + <children> + <entityParameter> + <name>AdvertisingProducts_param</name> + <valueProcess>%aditoprj%/entity/AdvertisingItem_entity/entityfields/products/children/advertisingproducts_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityField> + <name>ADVERTISING_ID</name> + <valueProcess>%aditoprj%/entity/AdvertisingItem_entity/entityfields/advertising_id/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>DATE_EDIT</name> + <title>Date Edit</title> + <valueProcess>%aditoprj%/entity/AdvertisingItem_entity/entityfields/date_edit/valueProcess.js</valueProcess> + </entityField> + <entityProvider> + <name>AdvertisingItems</name> + </entityProvider> + <entityParameter> + <name>AdvertisingId_param</name> + <expose v="true" /> + </entityParameter> + <entityParameter> + <name>ContactId_param</name> + <expose v="true" /> + </entityParameter> + <entityField> + <name>ContactId</name> + <title>Person</title> + <state>READONLY</state> + <valueProcess>%aditoprj%/entity/AdvertisingItem_entity/entityfields/contactid/valueProcess.js</valueProcess> + <displayValueProcess>%aditoprj%/entity/AdvertisingItem_entity/entityfields/contactid/displayValueProcess.js</displayValueProcess> + </entityField> + <entityParameter> + <name>RowId_param</name> + <expose v="true" /> + </entityParameter> + <entityProvider> + <name>AdvertisingItemsForContext</name> + </entityProvider> + <entityField> + <name>ADVERTISINGITEMID</name> + </entityField> + <entityConsumer> + <name>KeywordCurrencies</name> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/AdvertisingItem_entity/entityfields/keywordcurrencies/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityParameter> + <name>ProductObject_param</name> + <valueProcess>%aditoprj%/entity/AdvertisingItem_entity/entityfields/productobject_param/valueProcess.js</valueProcess> + </entityParameter> + <entityParameter> + <name>Currency_param</name> + <valueProcess>%aditoprj%/entity/AdvertisingItem_entity/entityfields/currency_param/valueProcess.js</valueProcess> + </entityParameter> + <entityConsumer> + <name>KeywordUnit</name> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/AdvertisingItem_entity/entityfields/keywordunit/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityConsumer> + <name>KeywordDelivery</name> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/AdvertisingItem_entity/entityfields/keyworddelivery/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityParameter> + <name>OnlyDigital_param</name> + <expose v="true" /> + </entityParameter> + </entityFields> + <recordContainers> + <dbRecordContainer> + <name>db</name> + <conditionProcess>%aditoprj%/entity/AdvertisingItem_entity/recordcontainers/db/conditionProcess.js</conditionProcess> + <orderClauseProcess>%aditoprj%/entity/AdvertisingItem_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess> + <alias>Data_alias</alias> + <recordFieldMappings> + <dbRecordFieldMapping> + <name>ACTUALAMOUNT.value</name> + <recordfield>ADVERTISINGITEM.ACTUALAMOUNT</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DATE_NEW.value</name> + <recordfield>ADVERTISINGITEM.DATE_NEW</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DELIVERY.value</name> + <recordfield>ADVERTISINGITEM.DELIVERY</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>FREE.value</name> + <recordfield>ADVERTISINGITEM.FREE</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>INFO.value</name> + <recordfield>ADVERTISINGITEM.INFO</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>ITEMPOSITION.value</name> + <recordfield>ADVERTISINGITEM.ITEMPOSITION</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>PRICE.value</name> + <recordfield>ADVERTISINGITEM.PRICE</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>PRODUCT_ID.value</name> + <recordfield>ADVERTISINGITEM.PRODUCT_ID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>QUANTITY.value</name> + <recordfield>ADVERTISINGITEM.QUANTITY</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>SENT.value</name> + <recordfield>ADVERTISINGITEM.SENT</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>STATUS.value</name> + <recordfield>ADVERTISINGITEM.STATUS</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>TARGETAMOUNT.value</name> + <recordfield>ADVERTISINGITEM.TARGETAMOUNT</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>UNIT.value</name> + <recordfield>ADVERTISINGITEM.UNIT</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>ADVERTISING_ID.value</name> + <recordfield>ADVERTISINGITEM.ADVERTISING_ID</recordfield> + <columnAlias></columnAlias> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DATE_EDIT.value</name> + <recordfield>ADVERTISINGITEM.DATE_EDIT</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>ADVERTISINGITEMID.value</name> + <recordfield>ADVERTISINGITEM.ADVERTISINGITEMID</recordfield> + </dbRecordFieldMapping> + </recordFieldMappings> + <linkInformation> + <linkInformation> + <name>e6f871fb-ef1c-4637-9a22-b09fedddc4e5</name> + <tableName>ADVERTISINGITEM</tableName> + <primaryKey>ADVERTISINGITEMID</primaryKey> + <isUIDTable v="true" /> + <readonly v="false" /> + </linkInformation> + </linkInformation> + </dbRecordContainer> + </recordContainers> +</entity> diff --git a/entity/AdvertisingItem_entity/documentation.adoc b/entity/AdvertisingItem_entity/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..22737bac227fc1030138c8a04e0940e455dbe839 --- /dev/null +++ b/entity/AdvertisingItem_entity/documentation.adoc @@ -0,0 +1,6 @@ +=AdvertisingItem +An advertising Item is a product which has the flag "Advertising" set +A advertising can have n items, a item can only have 1 advertising ( 1 : n ) +An advertising item represents the item which is sent or given to the person. + +For more detail please check out the documentation of the Advertising_entity \ No newline at end of file diff --git a/entity/AdvertisingItem_entity/entityfields/actualamount/displayValueProcess.js b/entity/AdvertisingItem_entity/entityfields/actualamount/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..911ec54d138da1366c86c6037a04f15254174b68 --- /dev/null +++ b/entity/AdvertisingItem_entity/entityfields/actualamount/displayValueProcess.js @@ -0,0 +1,10 @@ +import("system.vars"); +import("Util_lib"); +import("system.result"); + +var price = vars.get("$this.value"); +if(price) +{ + var currency = vars.get("$param.Currency_param") ? vars.get("$param.Currency_param") : ""; + result.string(NumberUtils.formatWithCurrency(price, "#,##0.00", currency)); +} \ No newline at end of file diff --git a/entity/AdvertisingItem_entity/entityfields/actualamount/titleProcess.js b/entity/AdvertisingItem_entity/entityfields/actualamount/titleProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..372b52c156b61bdf0f8d18d72ec6db62902c06b3 --- /dev/null +++ b/entity/AdvertisingItem_entity/entityfields/actualamount/titleProcess.js @@ -0,0 +1,6 @@ +import("Advertising_lib"); +import("system.result"); +import("system.vars"); +import("system.translate"); + +result.string(AdvertisingUtils.getPriceTitleWithCurrency(translate.text("Actual Amount"), vars.get("$param.Currency_param"))); \ No newline at end of file diff --git a/entity/AdvertisingItem_entity/entityfields/actualamount/valueProcess.js b/entity/AdvertisingItem_entity/entityfields/actualamount/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..29c61d3d4ac545e7d9f2b66eb3e787f527a8a5b2 --- /dev/null +++ b/entity/AdvertisingItem_entity/entityfields/actualamount/valueProcess.js @@ -0,0 +1,12 @@ +import("Util_lib"); +import("system.result"); +import("system.vars"); + +if(vars.get("$field.PRODUCT_ID") && vars.get("$field.PRICE")) +{ + var free = vars.get("$field.FREE"); + var quantity = vars.get("$field.QUANTITY"); + var price = vars.get("$field.PRICE"); + + result.string((Utils.toBoolean(free)) ? 0 : price * quantity); +} \ No newline at end of file diff --git a/entity/AdvertisingItem_entity/entityfields/advertising_id/valueProcess.js b/entity/AdvertisingItem_entity/entityfields/advertising_id/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..a737dda85ac67332ad0c7f8ba46e304aa663eb2c --- /dev/null +++ b/entity/AdvertisingItem_entity/entityfields/advertising_id/valueProcess.js @@ -0,0 +1,11 @@ +import("system.neon"); +import("system.vars"); +import("system.result"); + +if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) +{ + if(vars.exists("$param.AdvertisingId_param") && vars.get("$param.AdvertisingId_param")) + { + result.string(vars.get("$param.AdvertisingId_param")); + } +} \ No newline at end of file diff --git a/entity/AdvertisingItem_entity/entityfields/contactid/displayValueProcess.js b/entity/AdvertisingItem_entity/entityfields/contactid/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..f52abea3632db85ae710f51a6a7616796e7fd161 --- /dev/null +++ b/entity/AdvertisingItem_entity/entityfields/contactid/displayValueProcess.js @@ -0,0 +1,6 @@ +import("system.result"); +import("system.vars"); +import("Contact_lib"); + +var title = ContactUtils.getTitleByContactId(vars.get("$field.ContactId")); +result.string(title); \ No newline at end of file diff --git a/entity/AdvertisingItem_entity/entityfields/contactid/valueProcess.js b/entity/AdvertisingItem_entity/entityfields/contactid/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..d4e4b5ba78296056a7c5a081aa3a82551d05ac8c --- /dev/null +++ b/entity/AdvertisingItem_entity/entityfields/contactid/valueProcess.js @@ -0,0 +1,7 @@ +import("system.result"); +import("system.vars"); + +if(vars.exists("$param.ContactId_param") && vars.get("$param.ContactId_param")) +{ + result.string("$param.ContactId_param"); +} diff --git a/entity/AdvertisingItem_entity/entityfields/currency_param/valueProcess.js b/entity/AdvertisingItem_entity/entityfields/currency_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..a49cb0e8cfea5d52d2ca7f80f5c1c12e29b9721f --- /dev/null +++ b/entity/AdvertisingItem_entity/entityfields/currency_param/valueProcess.js @@ -0,0 +1,15 @@ +import("system.result"); +import("Sql_lib"); +import("Util_lib"); +import("system.vars"); + +var currency = vars.get("$this.value"); + +if(!Utils.toBoolean(currency)) +{ + currency = newSelect("ADVERTISING.CURRENCY") + .from("ADVERTISING") + .where("ADVERTISING.ADVERTISINGID", vars.get("$field.ADVERTISING_ID"), SqlBuilder.EQUAL()) + .cell(); +} +result.string(currency); \ No newline at end of file diff --git a/entity/DuplicateScannerResultFieldConfig_entity/entityfields/user_edit/valueProcess.js b/entity/AdvertisingItem_entity/entityfields/date_edit/valueProcess.js similarity index 77% rename from entity/DuplicateScannerResultFieldConfig_entity/entityfields/user_edit/valueProcess.js rename to entity/AdvertisingItem_entity/entityfields/date_edit/valueProcess.js index 6af880ae3e0e2b89b4eee8327ed49f1eefe458af..22da50b9b081530a1883611e70269a9fe2d38904 100644 --- a/entity/DuplicateScannerResultFieldConfig_entity/entityfields/user_edit/valueProcess.js +++ b/entity/AdvertisingItem_entity/entityfields/date_edit/valueProcess.js @@ -4,4 +4,6 @@ import("system.neon"); import("system.vars"); if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) - result.string(vars.get("$sys.user")); \ No newline at end of file +{ + result.string(vars.get("$sys.date")); +} \ No newline at end of file diff --git a/entity/Prod2prod_entity/entityfields/prod2prodid/valueProcess.js b/entity/AdvertisingItem_entity/entityfields/date_new/valueProcess.js similarity index 68% rename from entity/Prod2prod_entity/entityfields/prod2prodid/valueProcess.js rename to entity/AdvertisingItem_entity/entityfields/date_new/valueProcess.js index 86ef789e064a4016f2d12c432498dc23474807aa..d5cf2ff4f91546bf853125bec438493692a5e048 100644 --- a/entity/Prod2prod_entity/entityfields/prod2prodid/valueProcess.js +++ b/entity/AdvertisingItem_entity/entityfields/date_new/valueProcess.js @@ -1,7 +1,8 @@ -import("system.util"); -import("system.vars"); import("system.result"); import("system.neon"); +import("system.vars"); if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) - result.string(util.getNewUUID()); \ No newline at end of file +{ + result.string(vars.get("$sys.date")); +} \ No newline at end of file diff --git a/entity/AdvertisingItem_entity/entityfields/delivery/displayValueProcess.js b/entity/AdvertisingItem_entity/entityfields/delivery/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..2680d53aa44ffb75dd243b9888128eadc90772b1 --- /dev/null +++ b/entity/AdvertisingItem_entity/entityfields/delivery/displayValueProcess.js @@ -0,0 +1,6 @@ +import("system.vars"); +import("KeywordRegistry_basic"); +import("Keyword_lib"); +import("system.result"); + +result.string(KeywordUtils.getViewValue($KeywordRegistry.advertisingDelivery(), vars.get("$field.DELIVERY"))); \ No newline at end of file diff --git a/entity/AdvertisingItem_entity/entityfields/free/onValueChange.js b/entity/AdvertisingItem_entity/entityfields/free/onValueChange.js new file mode 100644 index 0000000000000000000000000000000000000000..13bf387f06b4b74ad477200832ad3bb31216d0e9 --- /dev/null +++ b/entity/AdvertisingItem_entity/entityfields/free/onValueChange.js @@ -0,0 +1,19 @@ +import("system.neon"); +import("system.vars"); + +var free = vars.get("$this.value"); +var price = 0; + +//when free was switched back we have to set the correct price again +if(free == "0" && vars.get("$field.PRODUCT_ID")) +{ + var productObject = JSON.parse(vars.get("$param.ProductObject_param")); + + if(productObject && productObject.PriceListToUse != null) + { + price = productObject.PriceListToUse.price; + } +} + +neon.setFieldValue("$field.PRICE", price); +neon.refresh(["$field.PRICE"]); diff --git a/entity/AdvertisingItem_entity/entityfields/free/valueProcess.js b/entity/AdvertisingItem_entity/entityfields/free/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..a97324da4cfbc1a1cf5939c3a6579a1bebcd4cee --- /dev/null +++ b/entity/AdvertisingItem_entity/entityfields/free/valueProcess.js @@ -0,0 +1,8 @@ +import("system.result"); +import("system.neon"); +import("system.vars"); + +if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) +{ + result.string("0"); +} \ No newline at end of file diff --git a/entity/AdvertisingItem_entity/entityfields/itemposition/valueProcess.js b/entity/AdvertisingItem_entity/entityfields/itemposition/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..1b61799da85021dd5ebe15d776313c9a56de9773 --- /dev/null +++ b/entity/AdvertisingItem_entity/entityfields/itemposition/valueProcess.js @@ -0,0 +1,11 @@ +import("system.neon"); +import("system.result"); +import("system.vars"); +import("Advertising_lib"); + + +if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) +{ + result.string(AdvertisingUtils.getNextItemPos(vars.get("$field.ADVERTISING_ID"))); +} + diff --git a/entity/AdvertisingItem_entity/entityfields/keywordcurrencies/children/containername_param/valueProcess.js b/entity/AdvertisingItem_entity/entityfields/keywordcurrencies/children/containername_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..b50dc76b773ab7747979427ddacd7542f305594d --- /dev/null +++ b/entity/AdvertisingItem_entity/entityfields/keywordcurrencies/children/containername_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.result"); +import("KeywordRegistry_basic"); + +result.string($KeywordRegistry.currency()); diff --git a/entity/AdvertisingItem_entity/entityfields/keyworddelivery/children/containername_param/valueProcess.js b/entity/AdvertisingItem_entity/entityfields/keyworddelivery/children/containername_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..a8ca4e3ed86cfb4ad6cdd93cb1d667064410062a --- /dev/null +++ b/entity/AdvertisingItem_entity/entityfields/keyworddelivery/children/containername_param/valueProcess.js @@ -0,0 +1,4 @@ +import("KeywordRegistry_basic"); +import("system.result"); + +result.string($KeywordRegistry.advertisingDelivery()); \ No newline at end of file diff --git a/entity/AdvertisingItem_entity/entityfields/keywordunit/children/containername_param/valueProcess.js b/entity/AdvertisingItem_entity/entityfields/keywordunit/children/containername_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..116859e4d94e5bae0bce9983a85ffad7b392cba1 --- /dev/null +++ b/entity/AdvertisingItem_entity/entityfields/keywordunit/children/containername_param/valueProcess.js @@ -0,0 +1,5 @@ +import("system.result"); +import("Keyword_lib"); +import("KeywordRegistry_basic"); + +result.string($KeywordRegistry.quantityUnit()); \ No newline at end of file diff --git a/entity/AdvertisingItem_entity/entityfields/price/displayValueProcess.js b/entity/AdvertisingItem_entity/entityfields/price/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..7b2a8585a138104d70add2a275833f1106373d0c --- /dev/null +++ b/entity/AdvertisingItem_entity/entityfields/price/displayValueProcess.js @@ -0,0 +1,10 @@ +import("system.vars"); +import("Util_lib"); +import("system.result"); + +var price = vars.get("$field.PRICE"); +if(Utils.toBoolean(price)) +{ + var currency = vars.get("$param.Currency_param") ? vars.get("$param.Currency_param") : ""; + result.string(NumberUtils.formatWithCurrency(price, "#,##0.00", currency)); +} \ No newline at end of file diff --git a/entity/AdvertisingItem_entity/entityfields/price/stateProcess.js b/entity/AdvertisingItem_entity/entityfields/price/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..ff4c0f2c4bcfd0cf2656f0675a9edc1e7b47c982 --- /dev/null +++ b/entity/AdvertisingItem_entity/entityfields/price/stateProcess.js @@ -0,0 +1,6 @@ +import("system.result"); +import("Util_lib"); +import("system.neon"); +import("system.vars"); + +result.string(Utils.toBoolean(vars.get("$field.FREE")) ? neon.COMPONENTSTATE_READONLY : neon.COMPONENTSTATE_EDITABLE); \ No newline at end of file diff --git a/entity/AdvertisingItem_entity/entityfields/price/titleProcess.js b/entity/AdvertisingItem_entity/entityfields/price/titleProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..4e3e533742ca7c2121f3d818d3cdf9eccf914a50 --- /dev/null +++ b/entity/AdvertisingItem_entity/entityfields/price/titleProcess.js @@ -0,0 +1,6 @@ +import("Advertising_lib"); +import("system.result"); +import("system.vars"); +import("system.translate"); + +result.string(AdvertisingUtils.getPriceTitleWithCurrency(translate.text("Price"), vars.get("$param.Currency_param"))); \ No newline at end of file diff --git a/entity/AdvertisingItem_entity/entityfields/price/valueProcess.js b/entity/AdvertisingItem_entity/entityfields/price/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..abfeadee880de187ca3bef2ec0ffa689b40d211f --- /dev/null +++ b/entity/AdvertisingItem_entity/entityfields/price/valueProcess.js @@ -0,0 +1,18 @@ +import("system.neon"); +import("system.result"); +import("Util_lib"); +import("system.vars"); + + +if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) +{ + if(vars.get("$field.PRODUCT_ID") && vars.exists("$param.ProductObject_param") && !vars.get("$this.value")) + { + var quantity = vars.get("$field.QUANTITY"); + + var productObj = JSON.parse(vars.get("$param.ProductObject_param")); + var price = (productObj.PriceListToUse != null) ? productObj.PriceListToUse.price : vars.get("$field.PRICE"); + + result.string(price); + } +} \ No newline at end of file diff --git a/entity/AdvertisingItem_entity/entityfields/product_id/displayValueProcess.js b/entity/AdvertisingItem_entity/entityfields/product_id/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..b4a2de7925b59431605cf8b91378dd681e9b342c --- /dev/null +++ b/entity/AdvertisingItem_entity/entityfields/product_id/displayValueProcess.js @@ -0,0 +1,8 @@ +import("system.vars"); +import("system.result"); +import("Sql_lib"); + +if(vars.get("$field.PRODUCT_ID")) +{ + result.string(newSelect("PRODUCT.PRODUCTNAME").from("PRODUCT").whereIfSet("PRODUCT.PRODUCTID", vars.get("$field.PRODUCT_ID")).cell()); +} \ No newline at end of file diff --git a/entity/AdvertisingItem_entity/entityfields/product_id/onValueChange.js b/entity/AdvertisingItem_entity/entityfields/product_id/onValueChange.js new file mode 100644 index 0000000000000000000000000000000000000000..6371c57e68a249dbbbc77c7f93bfeda996633dc7 --- /dev/null +++ b/entity/AdvertisingItem_entity/entityfields/product_id/onValueChange.js @@ -0,0 +1,22 @@ +import("Advertising_lib"); +import("system.neon"); +import("system.vars"); + +if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) +{ + var productDetailObj = AdvertisingUtils.getProductObject(vars.get("$this.value"), vars.get("$field.ADVERTISING_ID"), vars.get("$field.QUANTITY")); + + if(productDetailObj.productId != undefined) + { + neon.setFieldValues({ + "$field.UNIT": productDetailObj.unit, + "$field.INFO": productDetailObj.info, + "$field.QUANTITY": "1" + }); + + if(productDetailObj.PriceListToUse != null) + { + neon.setFieldValue("$field.PRICE", productDetailObj.PriceListToUse.price); + } + } +} \ No newline at end of file diff --git a/entity/AdvertisingItem_entity/entityfields/product_id/stateProcess.js b/entity/AdvertisingItem_entity/entityfields/product_id/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..680d7fd1858089c386e5aab940715a9378d8f21b --- /dev/null +++ b/entity/AdvertisingItem_entity/entityfields/product_id/stateProcess.js @@ -0,0 +1,5 @@ +import("system.vars"); +import("system.neon"); +import("system.result"); + +result.string(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW ? neon.COMPONENTSTATE_EDITABLE : neon.COMPONENTSTATE_READONLY); \ No newline at end of file diff --git a/entity/AdvertisingItem_entity/entityfields/productobject_param/valueProcess.js b/entity/AdvertisingItem_entity/entityfields/productobject_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..d4fb29c92192b41d0f666d2012067b1d4204ab5d --- /dev/null +++ b/entity/AdvertisingItem_entity/entityfields/productobject_param/valueProcess.js @@ -0,0 +1,11 @@ +import("Advertising_lib"); +import("system.result"); +import("system.neon"); +import("system.vars"); + +if( vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT ) +{ + var productDetailObj = AdvertisingUtils.getProductObject(vars.get("$field.PRODUCT_ID"), vars.get("$field.ADVERTISING_ID"), vars.get("$field.QUANTITY")); + + result.string(JSON.stringify(productDetailObj)); +} \ No newline at end of file diff --git a/entity/AdvertisingItem_entity/entityfields/products/children/advertisingproducts_param/valueProcess.js b/entity/AdvertisingItem_entity/entityfields/products/children/advertisingproducts_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..d3ed7d447b6582533c41340415c08d9f97fbf001 --- /dev/null +++ b/entity/AdvertisingItem_entity/entityfields/products/children/advertisingproducts_param/valueProcess.js @@ -0,0 +1,2 @@ +import("system.result"); +result.string("true"); \ No newline at end of file diff --git a/entity/AdvertisingItem_entity/entityfields/quantity/onValidation.js b/entity/AdvertisingItem_entity/entityfields/quantity/onValidation.js new file mode 100644 index 0000000000000000000000000000000000000000..f04bfad82bc491f98a26e20c0874ce364b8ea793 --- /dev/null +++ b/entity/AdvertisingItem_entity/entityfields/quantity/onValidation.js @@ -0,0 +1,10 @@ +import("system.translate"); +import("system.result"); +import("system.vars"); + +var quatity = vars.get("$local.value") ? vars.get("$local.value") : ""; + +if (parseInt(quatity) <= 0) +{ + result.string(translate.text("${QUANTITY_LOWER_THAN_1}")); +} diff --git a/entity/AdvertisingItem_entity/entityfields/quantity/stateProcess.js b/entity/AdvertisingItem_entity/entityfields/quantity/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..dea061a4332f4a2e0ac7693b202410706e61a852 --- /dev/null +++ b/entity/AdvertisingItem_entity/entityfields/quantity/stateProcess.js @@ -0,0 +1,12 @@ +import("system.neon"); +import("system.result"); +import("system.vars"); +import("Advertising_lib"); + +var ret = neon.COMPONENTSTATE_EDITABLE; + +if(vars.get("$field.PRODUCT_ID") && AdvertisingUtils.isDigitalAdvertisingProduct(vars.get("$field.PRODUCT_ID"))) +{ + ret = neon.COMPONENTSTATE_READONLY; +} +result.string(ret); \ No newline at end of file diff --git a/entity/AdvertisingItem_entity/entityfields/quantity/valueProcess.js b/entity/AdvertisingItem_entity/entityfields/quantity/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..1ac9248b801bf16ae9f552666637fb08cacd8daa --- /dev/null +++ b/entity/AdvertisingItem_entity/entityfields/quantity/valueProcess.js @@ -0,0 +1,8 @@ +import("system.neon"); +import("system.result"); +import("system.vars"); + +if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) +{ + result.string("1"); +} \ No newline at end of file diff --git a/entity/AdvertisingItem_entity/entityfields/sent/valueProcess.js b/entity/AdvertisingItem_entity/entityfields/sent/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..15dc711a7f303c8f73c5b27455ffb1e715ae542d --- /dev/null +++ b/entity/AdvertisingItem_entity/entityfields/sent/valueProcess.js @@ -0,0 +1,15 @@ +import("KeywordRegistry_basic"); +import("system.neon"); +import("system.vars"); +import("system.result"); + +if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) +{ + var ret = 0; + //when an item was handover personal the item is already at its destination + if(vars.get("$field.DELIVERY") == $KeywordRegistry.advertisingDelivery$personal()) + { + ret = 1; + } + result.string(ret); +} \ No newline at end of file diff --git a/entity/AdvertisingItem_entity/entityfields/targetamount/displayValueProcess.js b/entity/AdvertisingItem_entity/entityfields/targetamount/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..180930674023d6334c71ccaa4ec5c90298c752e9 --- /dev/null +++ b/entity/AdvertisingItem_entity/entityfields/targetamount/displayValueProcess.js @@ -0,0 +1,11 @@ +import("Util_lib"); +import("system.result"); +import("system.vars"); + +var targetAmount = vars.get("$this.value"); + +if(targetAmount) +{ + var currency = vars.get("$param.Currency_param") ? vars.get("$param.Currency_param") : ""; + result.string(NumberUtils.formatWithCurrency(targetAmount, "#,##0.00", currency)); +} \ No newline at end of file diff --git a/entity/AdvertisingItem_entity/entityfields/targetamount/titleProcess.js b/entity/AdvertisingItem_entity/entityfields/targetamount/titleProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..569277fab22008475f2ba1895897e4c9f6e273d6 --- /dev/null +++ b/entity/AdvertisingItem_entity/entityfields/targetamount/titleProcess.js @@ -0,0 +1,6 @@ +import("Advertising_lib"); +import("system.result"); +import("system.vars"); +import("system.translate"); + +result.string(AdvertisingUtils.getPriceTitleWithCurrency(translate.text("Target Amount"), vars.get("$param.Currency_param"))); \ No newline at end of file diff --git a/entity/AdvertisingItem_entity/entityfields/targetamount/valueProcess.js b/entity/AdvertisingItem_entity/entityfields/targetamount/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..854a02899022dc6e218b49d12692efea495c703c --- /dev/null +++ b/entity/AdvertisingItem_entity/entityfields/targetamount/valueProcess.js @@ -0,0 +1,16 @@ +import("Util_lib"); +import("system.result"); +import("system.vars"); + +if(vars.get("$field.PRODUCT_ID") && vars.exists("$param.ProductObject_param")) +{ + var quantity = vars.get("$field.QUANTITY"); + + //The original price of the product is used as a fallback while the price field can still be edited by the user + var productObj = JSON.parse(vars.get("$param.ProductObject_param")); + var price = (productObj.PriceListToUse != null) ? productObj.PriceListToUse.price : vars.get("$field.PRICE"); + + var ret = (Utils.toBoolean(price)) ? price * quantity : 0; + + result.string(ret); +} diff --git a/entity/AdvertisingItem_entity/entityfields/unit/displayValueProcess.js b/entity/AdvertisingItem_entity/entityfields/unit/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..0838f4ba2dbe84e35c69db61bbcb5eda636ccca2 --- /dev/null +++ b/entity/AdvertisingItem_entity/entityfields/unit/displayValueProcess.js @@ -0,0 +1,14 @@ +import("system.result"); +import("system.vars"); +import("Keyword_lib"); +import("KeywordRegistry_basic"); + +var unit = vars.get("$field.UNIT"); +var viewValue = ""; + +if (unit) +{ + viewValue = KeywordUtils.getViewValue($KeywordRegistry.quantityUnit(), unit); +} + +result.string(viewValue); \ No newline at end of file diff --git a/entity/AdvertisingItem_entity/recordcontainers/db/conditionProcess.js b/entity/AdvertisingItem_entity/recordcontainers/db/conditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..91c684838bc3b41500ee75c5eb81467964cd3f51 --- /dev/null +++ b/entity/AdvertisingItem_entity/recordcontainers/db/conditionProcess.js @@ -0,0 +1,26 @@ +import("KeywordRegistry_basic"); +import("system.result"); +import("system.vars"); +import("Sql_lib"); + + +var cond = newWhere(); +if(vars.exists("$param.AdvertisingId_param") && vars.get("$param.AdvertisingId_param")) +{ + cond.andIfSet("ADVERTISINGITEM.ADVERTISING_ID", vars.getString("$param.AdvertisingId_param"), SqlBuilder.EQUAL()); +} + +if(vars.exists("$param.RowId_param") && vars.get("$param.RowId_param")) +{ + var advSubselect = newSelect("ADVERTISING.ADVERTISINGID") + .from("ADVERTISING").where("ADVERTISING.ROW_ID", vars.getString("$param.RowId_param"), SqlBuilder.EQUAL()); + + cond.andIfSet("ADVERTISINGITEM.ADVERTISING_ID", advSubselect, SqlBuilder.EQUAL()); +} + +if(vars.exists("$param.OnlyDigital_param") && vars.get("$param.OnlyDigital_param")) +{ + cond.andIfSet("ADVERTISINGITEM.DELIVERY", $KeywordRegistry.advertisingDelivery$mail()) +} + +result.string(cond.toString()); \ No newline at end of file diff --git a/entity/AdvertisingItem_entity/recordcontainers/db/orderClauseProcess.js b/entity/AdvertisingItem_entity/recordcontainers/db/orderClauseProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..05b609515c59f5f2df3937c45cafdeb03006712d --- /dev/null +++ b/entity/AdvertisingItem_entity/recordcontainers/db/orderClauseProcess.js @@ -0,0 +1,4 @@ +import("system.db"); +import("system.result"); + +result.object({"ADVERTISINGITEM.ITEMPOSITION": db.ASCENDING}); \ No newline at end of file diff --git a/entity/Advertising_entity/Advertising_entity.aod b/entity/Advertising_entity/Advertising_entity.aod new file mode 100644 index 0000000000000000000000000000000000000000..0be659078ad7d753fa65872712e896f9f85aa2ce --- /dev/null +++ b/entity/Advertising_entity/Advertising_entity.aod @@ -0,0 +1,260 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> + <name>Advertising_entity</name> + <title>Advertising material</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <documentation>%aditoprj%/entity/Advertising_entity/documentation.adoc</documentation> + <grantCreate v="false" /> + <contentTitleProcess>%aditoprj%/entity/Advertising_entity/contentTitleProcess.js</contentTitleProcess> + <contentDescriptionProcess>%aditoprj%/entity/Advertising_entity/contentDescriptionProcess.js</contentDescriptionProcess> + <iconId>VAADIN:PACKAGE</iconId> + <titlePlural>Advertising materials</titlePlural> + <recordContainer>db</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + </entityProvider> + <entityField> + <name>ADVERTISINGID</name> + </entityField> + <entityField> + <name>CONTACT_ID</name> + <title>Contact</title> + <consumer>PersonConsumer</consumer> + <linkedContext>Person</linkedContext> + <state>EDITABLE</state> + <displayValueProcess>%aditoprj%/entity/Advertising_entity/entityfields/contact_id/displayValueProcess.js</displayValueProcess> + </entityField> + <entityField> + <name>CURRENCY</name> + <title>Currency</title> + <consumer>KeywordCurrencies</consumer> + <mandatory v="true" /> + <stateProcess>%aditoprj%/entity/Advertising_entity/entityfields/currency/stateProcess.js</stateProcess> + <valueProcess>%aditoprj%/entity/Advertising_entity/entityfields/currency/valueProcess.js</valueProcess> + <displayValueProcess>%aditoprj%/entity/Advertising_entity/entityfields/currency/displayValueProcess.js</displayValueProcess> + </entityField> + <entityField> + <name>OBJECT_TYPE</name> + </entityField> + <entityField> + <name>RESPONSIBLE_ID</name> + <title>Responsible</title> + <consumer>ResponsibleEmployee</consumer> + <linkedContext>Person</linkedContext> + <mandatory v="true" /> + <displayValueProcess>%aditoprj%/entity/Advertising_entity/entityfields/responsible_id/displayValueProcess.js</displayValueProcess> + </entityField> + <entityField> + <name>ROW_ID</name> + <title>{$OBJECTLINK_OBJECT}</title> + <consumer>Objects</consumer> + <linkedContextProcess>%aditoprj%/entity/Advertising_entity/entityfields/row_id/linkedContextProcess.js</linkedContextProcess> + <displayValueProcess>%aditoprj%/entity/Advertising_entity/entityfields/row_id/displayValueProcess.js</displayValueProcess> + </entityField> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityParameter> + <name>RowId_param</name> + <expose v="true" /> + </entityParameter> + <entityProvider> + <name>BasicInfoAdvertising</name> + </entityProvider> + <entityConsumer> + <name>PersonConsumer</name> + <dependency> + <name>dependency</name> + <entityName>Person_entity</entityName> + <fieldName>Contacts</fieldName> + </dependency> + <children> + <entityParameter> + <name>OnlyShowContactIds_param</name> + <valueProcess>%aditoprj%/entity/Advertising_entity/entityfields/personconsumer/children/onlyshowcontactids_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityParameter> + <name>ContactIds_param</name> + <valueProcess>%aditoprj%/entity/Advertising_entity/entityfields/contactids_param/valueProcess.js</valueProcess> + <expose v="true" /> + </entityParameter> + <entityConsumer> + <name>KeywordCurrencies</name> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/Advertising_entity/entityfields/keywordcurrencies/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityConsumer> + <name>ResponsibleEmployee</name> + <dependency> + <name>dependency</name> + <entityName>Employee_entity</entityName> + <fieldName>Employees</fieldName> + </dependency> + </entityConsumer> + <entityField> + <name>Info</name> + </entityField> + <entityConsumer> + <name>AdvertisingItemsConsumer</name> + <stateProcess>%aditoprj%/entity/Advertising_entity/entityfields/advertisingitemsconsumer/stateProcess.js</stateProcess> + <dependency> + <name>dependency</name> + <entityName>AdvertisingItem_entity</entityName> + <fieldName>AdvertisingItems</fieldName> + </dependency> + <children> + <entityParameter> + <name>AdvertisingId_param</name> + <valueProcess>%aditoprj%/entity/Advertising_entity/entityfields/advertisingitemsconsumer/children/advertisingid_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityField> + <name>STATUS</name> + <title>Status</title> + <consumer>KeywordAdvertisingStatus</consumer> + <valueProcess>%aditoprj%/entity/Advertising_entity/entityfields/status/valueProcess.js</valueProcess> + <displayValueProcess>%aditoprj%/entity/Advertising_entity/entityfields/status/displayValueProcess.js</displayValueProcess> + </entityField> + <entityConsumer> + <name>KeywordAdvertisingStatus</name> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/Advertising_entity/entityfields/keywordadvertisingstatus/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityField> + <name>ACTIVE</name> + <description>needed for 360 Degree </description> + </entityField> + <entityField> + <name>DATE_NEW</name> + <title>Date</title> + <contentType>DATE</contentType> + <resolution>DAY</resolution> + <outputFormat>dd.MM.yyyy</outputFormat> + <inputFormat>dd.MM.yyyy</inputFormat> + <state>READONLY</state> + <valueProcess>%aditoprj%/entity/Advertising_entity/entityfields/date_new/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>DATE_EDIT</name> + <valueProcess>%aditoprj%/entity/Advertising_entity/entityfields/date_edit/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>countItems</name> + <title>Advertising material count</title> + <valueProcess>%aditoprj%/entity/Advertising_entity/entityfields/countitems/valueProcess.js</valueProcess> + </entityField> + <entityConsumer> + <name>Objects</name> + <documentation>%aditoprj%/entity/Advertising_entity/entityfields/objects/documentation.adoc</documentation> + <dependency> + <name>dependency</name> + <entityName>Object_entity</entityName> + <fieldName>AllObjects</fieldName> + </dependency> + <children> + <entityParameter> + <name>ObjectType_param</name> + <valueProcess>%aditoprj%/entity/Advertising_entity/entityfields/objects/children/objecttype_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityActionField> + <name>startWorkflow</name> + <title>Start Workflow</title> + <onActionProcess>%aditoprj%/entity/Advertising_entity/entityfields/startworkflow/onActionProcess.js</onActionProcess> + <iconId>VAADIN:PLAY</iconId> + <stateProcess>%aditoprj%/entity/Advertising_entity/entityfields/startworkflow/stateProcess.js</stateProcess> + <tooltip>Start advertising material workflow</tooltip> + <tooltipProcess>%aditoprj%/entity/Advertising_entity/entityfields/startworkflow/tooltipProcess.js</tooltipProcess> + </entityActionField> + <entityActionField> + <name>newMail</name> + <title>new Email</title> + <onActionProcess>%aditoprj%/entity/Advertising_entity/entityfields/newmail/onActionProcess.js</onActionProcess> + <iconId>VAADIN:AT</iconId> + <stateProcess>%aditoprj%/entity/Advertising_entity/entityfields/newmail/stateProcess.js</stateProcess> + <tooltip>Send digital Advertising materials & complete Workflow Task</tooltip> + </entityActionField> + </entityFields> + <recordContainers> + <dbRecordContainer> + <name>db</name> + <conditionProcess>%aditoprj%/entity/Advertising_entity/recordcontainers/db/conditionProcess.js</conditionProcess> + <alias>Data_alias</alias> + <recordFieldMappings> + <dbRecordFieldMapping> + <name>ADVERTISINGID.value</name> + <recordfield>ADVERTISING.ADVERTISINGID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>CONTACT_ID.value</name> + <recordfield>ADVERTISING.CONTACT_ID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>CURRENCY.value</name> + <recordfield>ADVERTISING.CURRENCY</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>OBJECT_TYPE.value</name> + <recordfield>ADVERTISING.OBJECT_TYPE</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>RESPONSIBLE_ID.value</name> + <recordfield>ADVERTISING.RESPONSIBLE_ID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>ROW_ID.value</name> + <recordfield>ADVERTISING.ROW_ID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>STATUS.value</name> + <recordfield>ADVERTISING.STATUS</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>ACTIVE.value</name> + <expression>%aditoprj%/entity/Advertising_entity/recordcontainers/db/recordfieldmappings/active.value/expression.js</expression> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DATE_NEW.value</name> + <recordfield>ADVERTISING.DATE_NEW</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DATE_EDIT.value</name> + <recordfield>ADVERTISING.DATE_EDIT</recordfield> + </dbRecordFieldMapping> + </recordFieldMappings> + <linkInformation> + <linkInformation> + <name>fc2ebd14-8a58-4c97-8bac-15db1f073445</name> + <tableName>ADVERTISING</tableName> + <primaryKey>ADVERTISINGID</primaryKey> + <isUIDTable v="true" /> + <readonly v="false" /> + </linkInformation> + </linkInformation> + </dbRecordContainer> + </recordContainers> +</entity> diff --git a/entity/Advertising_entity/contentDescriptionProcess.js b/entity/Advertising_entity/contentDescriptionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..0bd9edf00abca37709b32e718362cc224553e7e6 --- /dev/null +++ b/entity/Advertising_entity/contentDescriptionProcess.js @@ -0,0 +1,8 @@ +import("Contact_lib"); +import("system.translate"); +import("system.vars"); +import("system.result"); + +var res = [translate.text("Responsible") + ": "+ ContactUtils.getTitleByContactId(vars.get("$field.RESPONSIBLE_ID")), + translate.text("Advertising count") +": " + vars.get("$field.countItems")] +result.string(res.join(" | ")); \ No newline at end of file diff --git a/entity/Advertising_entity/contentTitleProcess.js b/entity/Advertising_entity/contentTitleProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..156e8754f5e690804fe05e2505d0677d24ef2932 --- /dev/null +++ b/entity/Advertising_entity/contentTitleProcess.js @@ -0,0 +1,14 @@ +import("system.datetime"); +import("Keyword_lib"); +import("KeywordRegistry_basic"); +import("system.vars"); +import("system.translate"); +import("system.result"); + +var ret = [ + translate.text("Advertising"), + KeywordUtils.getViewValue($KeywordRegistry.advertisingStatus(), vars.get("$field.STATUS")), + datetime.toDate(vars.get("$field.DATE_NEW"), "dd.MM.yyyy") +]; + +result.string(ret.join(" | ")); \ No newline at end of file diff --git a/entity/Advertising_entity/documentation.adoc b/entity/Advertising_entity/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..a6942a22dd002328a38cebb291fde6bc7701d51c --- /dev/null +++ b/entity/Advertising_entity/documentation.adoc @@ -0,0 +1,81 @@ +==Advertising_entity +An Entity for handling the process of Advertising Shipment +Advertising has a 1 : n relationship to AdvertisingItems + +The Advertising_entity contains the basic information which is needed for the process of Advertising Shipment +That includes: +Contact_ID : of the person who should get an advertisingmaterial +Responsible_ID : ContactId of the responsible employee +Currency : the currency in which the items should be processed +Row_ID : the linked data set currently activity +Date_new : creation date of the advertising shipment + +=Where to start +In the current version (2021.1.0) Advertisings are linked to an Activity (this can change in the future) +While creating a new Activity the user has the possibility to say 'has Advertisings' +If opt in, the needed data will be prepared in the background. +All information that is needed in an Advertising and can be selected out of the Activity are preselected. +(please check Activity onDbInsert and AdvertisingUtils.insertAdvertising() for more details) + +=Inserting an Advertisement +As mentioned above all relevant data is prefilled during the save process of the Activity. +During this process the function will check for the linked Persons of an Activity and tries to preselect it as well. +When more than one linked Persons is found, the Contact_Id will not be preselected, instead the user has +to pick the 'correct' person. The lookup component will provide all linked persons of an Activity. + +=Accessing Advertisings +There are a few ways to see the Advertising information: +- Person 360 Degree Tab +- Context Menu +- Activity +- Advertising Main View + +=AdvertisingItem +As mentioned at the beginning, an Advertising can have n items, a item can only have 1 Advertising ( 1 : n ) +An Advertising item represents the item which is sent or given to a person. + +A Advertising item is a product which got the flag "Advertising" set. +In the Editview of the AdvertisingItem context you can select those products which are defined as Advertisingmaterials. + +The functionality for this is almost the same as for OfferItem which means, that the prices are selected with the price list and the +whole product is handled through an Object. +In addition to OfferItem Advertising got some additions: + +- Delivery / Handover (determines which workflow instance should be started) +- Free ( determines if a product is free) -> actual amount is set to 0 +- Should / Actual Amount +- Info ( some additional information that you want to store) + +When it's a digital Product, the flag 'digital' is set for a product, a special documentview will be shown in product instead of the normal one +All documents which are stored in that documentfolder will be attached to the email + +=Advertising Workflow + +-How do I get the needed workflow into my system? +It's simple, navigate in the project folder via the filesystem to others -> Workflows -> 'AdvertisingShipment.bpmn20.xml' +copy it and import it in your modeler of course don't forget to deploy and save the changes. + +In the main view of an Advertisingmaterial you can see a button which will start the workflow. Depending on your handover types defined in the items +you can have up to 3 workflow instances. In order to group the sending by handover +( For example: We don't want to send 4 single packages / 4 different emails each) + +Depending on which handover type there are different actions: +-personal +The advertising was given directly in person to a contact -> a follow up task will be generated after a defined amount of time currently 5M +(for testing you can change the time in the workflow) +-post /mail +The item will be send via mail so a usertask is generated which provides the needed information -> after that a follow up task will be generated +as well after a defined duration +-Email/digital +The item will be send via an e-mail, a user task is generated -> here it's important that the user triggers the email via the button in Advertising +the generated task will be set to done and a email preview view will be opened, here you can select your template and download the mail. +The eml file will contain the defined attachments of the digital products. +When the user task is just marked as done it will appear again, it has to be set via the button. In reason that we can't trigger other functions in the +workflow task. + +After that a 'followUp' task is generated in which the user has to follow up the Advertising. +When this is done the status of the Advertising is set 'followed up'. +But only when one workflow instance is left. What does that mean? +You don't want to set the status to followed up when there are still other tasks around like sending the email and so on. +To ensure this, the status will be updated when the follow up task is done and only one workflow instance is left. + diff --git a/entity/Advertising_entity/entityfields/advertisingitemsconsumer/children/advertisingid_param/valueProcess.js b/entity/Advertising_entity/entityfields/advertisingitemsconsumer/children/advertisingid_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..c2cbdbc18abab31a9ab2b3407590163b69d48262 --- /dev/null +++ b/entity/Advertising_entity/entityfields/advertisingitemsconsumer/children/advertisingid_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("system.result"); + +result.string(vars.get("$field.ADVERTISINGID")); diff --git a/entity/Advertising_entity/entityfields/advertisingitemsconsumer/stateProcess.js b/entity/Advertising_entity/entityfields/advertisingitemsconsumer/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..bdb999edd371890526f84b9228194d8d75a343ae --- /dev/null +++ b/entity/Advertising_entity/entityfields/advertisingitemsconsumer/stateProcess.js @@ -0,0 +1,6 @@ +import("system.vars"); +import("system.result"); +import("KeywordRegistry_basic"); +import("system.neon"); + +result.string(vars.get("$field.STATUS") == $KeywordRegistry.advertisingStatus$Open() ? neon.COMPONENTSTATE_EDITABLE : neon.COMPONENTSTATE_READONLY); \ No newline at end of file diff --git a/entity/Advertising_entity/entityfields/contact_id/displayValueProcess.js b/entity/Advertising_entity/entityfields/contact_id/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..091a8570bc80cf56cc34ce7e98c547a80166a88c --- /dev/null +++ b/entity/Advertising_entity/entityfields/contact_id/displayValueProcess.js @@ -0,0 +1,5 @@ +import("system.vars"); +import("system.result"); +import("Contact_lib"); + +result.string(ContactUtils.getTitleByContactId(vars.get("$field.CONTACT_ID"))); \ No newline at end of file diff --git a/entity/Advertising_entity/entityfields/contactids_param/valueProcess.js b/entity/Advertising_entity/entityfields/contactids_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..9d60d178475638345dfc3cb5891db6a8c8a433d9 --- /dev/null +++ b/entity/Advertising_entity/entityfields/contactids_param/valueProcess.js @@ -0,0 +1,27 @@ +import("system.entities"); +import("system.result"); +import("system.neon"); +import("system.vars"); + +//when not set yet, especially when directly in advertising there should be also only the linked person selectable +if(!vars.get("$param.ContactIds_param")) +{ + var contactIds = []; + var conf = entities.createConfigForLoadingRows(); + conf.entity("ActivityLink_entity") + conf.addParameter("ActivityId_param", vars.get("$field.ROW_ID")); + conf.fields(["OBJECT_TYPE", "OBJECT_ROWID"]); + + var links = entities.getRows(conf); + + //only Persons can be linked to an Advertising + links.forEach(function(link) + { + if(link["OBJECT_TYPE"] == "Person") + { + contactIds.push( link["OBJECT_ROWID"]); + } + }); + + result.string(JSON.stringify(contactIds)); +} \ No newline at end of file diff --git a/entity/Advertising_entity/entityfields/countitems/valueProcess.js b/entity/Advertising_entity/entityfields/countitems/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..21765b080a5505cbfb88a888afebeb64670e8b27 --- /dev/null +++ b/entity/Advertising_entity/entityfields/countitems/valueProcess.js @@ -0,0 +1,9 @@ +import("system.result"); +import("system.vars"); +import("system.entities"); + +var conf = entities.createConfigForLoadingRows() +.entity("AdvertisingItem_entity") +.addParameter("AdvertisingId_param", vars.get("$field.ADVERTISINGID")); + +result.string(entities.getRowCount(conf)); \ No newline at end of file diff --git a/entity/Advertising_entity/entityfields/currency/displayValueProcess.js b/entity/Advertising_entity/entityfields/currency/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..71f6fd23918c683ebf7eecb2bfc971f603bd00fe --- /dev/null +++ b/entity/Advertising_entity/entityfields/currency/displayValueProcess.js @@ -0,0 +1,6 @@ +import("system.result"); +import("system.vars"); +import("Keyword_lib"); +import("KeywordRegistry_basic"); + +result.string(KeywordUtils.getViewValue($KeywordRegistry.currency(), vars.get("$field.CURRENCY"))); \ No newline at end of file diff --git a/entity/Advertising_entity/entityfields/currency/stateProcess.js b/entity/Advertising_entity/entityfields/currency/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..0ea94f675e6d0cd8e5acfa0551e348c2d119a470 --- /dev/null +++ b/entity/Advertising_entity/entityfields/currency/stateProcess.js @@ -0,0 +1,19 @@ +import("Advertising_lib"); +import("system.entities"); +import("system.result"); +import("system.neon"); +import("system.vars"); + +var loadConfig = entities.createConfigForLoadingRows() + .entity("AdvertisingItem_entity") + .addParameter("AdvertisingId_param", vars.get("$field.ADVERTISINGID")); +var adverttisingItemCount = entities.getRowCount(loadConfig); + +if(adverttisingItemCount > 0) +{ + result.string(neon.COMPONENTSTATE_DISABLED); +} +else +{ + result.string(AdvertisingUtils.isEditable(vars.get("$field.STATUS")) ? neon.COMPONENTSTATE_AUTO : neon.COMPONENTSTATE_DISABLED); +} diff --git a/entity/Advertising_entity/entityfields/currency/valueProcess.js b/entity/Advertising_entity/entityfields/currency/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..4ec1aa77fcdb20049300a98f563ca8992fe88abd --- /dev/null +++ b/entity/Advertising_entity/entityfields/currency/valueProcess.js @@ -0,0 +1,11 @@ +import("system.neon"); +import("system.result"); +import("system.vars"); +import("KeywordRegistry_basic"); + + + +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$this.value") == null) +{ + result.string($KeywordRegistry.currency$eur()); +} \ No newline at end of file diff --git a/entity/Advertising_entity/entityfields/date_edit/valueProcess.js b/entity/Advertising_entity/entityfields/date_edit/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..2af46a8e46789056c6c341a8e4e087f8e1edc0c4 --- /dev/null +++ b/entity/Advertising_entity/entityfields/date_edit/valueProcess.js @@ -0,0 +1,8 @@ +import("system.result"); +import("system.neon"); +import("system.vars"); + +if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) +{ + result.string(vars.get("$sys.date")); +} \ No newline at end of file diff --git a/entity/Advertising_entity/entityfields/date_new/valueProcess.js b/entity/Advertising_entity/entityfields/date_new/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..f8a1c81be58622edc0e9fe5c65b5eaa2b53a9f7f --- /dev/null +++ b/entity/Advertising_entity/entityfields/date_new/valueProcess.js @@ -0,0 +1,8 @@ +import("system.result"); +import("system.neon"); +import("system.vars"); + +if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) +{ + result.string(vars.get("$sys.date")); +} diff --git a/entity/Advertising_entity/entityfields/keywordadvertisingstatus/children/containername_param/valueProcess.js b/entity/Advertising_entity/entityfields/keywordadvertisingstatus/children/containername_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..a61b5749d302ce9cfa160542a7071fa822fe90b2 --- /dev/null +++ b/entity/Advertising_entity/entityfields/keywordadvertisingstatus/children/containername_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.result"); +import("KeywordRegistry_basic"); + +result.string($KeywordRegistry.advertisingStatus()); \ No newline at end of file diff --git a/entity/Advertising_entity/entityfields/keywordcurrencies/children/containername_param/valueProcess.js b/entity/Advertising_entity/entityfields/keywordcurrencies/children/containername_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..05d20a465b202ed4b5be50ffc09f311e0d325de3 --- /dev/null +++ b/entity/Advertising_entity/entityfields/keywordcurrencies/children/containername_param/valueProcess.js @@ -0,0 +1,5 @@ +import("system.result"); +import("Keyword_lib"); +import("KeywordRegistry_basic"); + +result.string($KeywordRegistry.currency()); diff --git a/entity/Advertising_entity/entityfields/newmail/onActionProcess.js b/entity/Advertising_entity/entityfields/newmail/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..bcb608527e8f740b2a8f0e59e5f6276ab5cd3129 --- /dev/null +++ b/entity/Advertising_entity/entityfields/newmail/onActionProcess.js @@ -0,0 +1,63 @@ +import("system.neon"); +import("Sql_lib"); +import("system.db"); +import("system.entities"); +import("KeywordRegistry_basic"); +import("Email_lib"); +import("system.vars"); +import("Context_lib"); +import("system.workflow"); +import("Workflow_lib"); + +//set workflowTask done +var workflowLoadConfig = workflow.createConfigForLoadingTask(); +workflowLoadConfig.variables({ + targetId: vars.getString("$field.ADVERTISINGID"), + targetContext: ContextUtils.getCurrentContextId(), + mailSent: "false" +}); + +var workflowTask = JSON.parse(workflow.getTask(workflowLoadConfig)); +workflow.completeTask(workflowTask.id, { + mailSent: "true" +}); + +//All AdvertisingItems which are sent by e-mail +var digitalAdvItemsConfig = entities.createConfigForLoadingRows().entity("AdvertisingItem_entity") +.addParameter("OnlyDigital_param", "true") +.addParameter("AdvertisingId_param", vars.get("$field.ADVERTISINGID")) +.fields(["PRODUCT_ID"]); + +var digitalAdvItems = entities.getRows(digitalAdvItemsConfig); +var binaryAlias = SqlUtils.getBinariesAlias(); +var attachments = []; + +//Building the attachments, the attachment has to be provided in an ObjectForm, there can be multiple attachments per product +digitalAdvItems.forEach(function(element) +{ + let productId = element["PRODUCT_ID"]; + let metaData = db.getBinaryMetadata("PRODUCT", "DOCUMENT", productId, false, binaryAlias, "DIGITALADVERTISING"); + metaData.forEach(function(meta) + { + if(meta.id) + { + let binContent = db.getBinaryContent(meta.id, binaryAlias); + let attachObj = {}; + if(binContent) + { + attachObj.content = binContent; + attachObj.mimeType = meta.mimetype; + attachObj.filename = meta.filename; + + attachments.push(attachObj); + } + } + }); + +}); + +EmailWritingUtils.openNewMail(vars.getString("$field.CONTACT_ID"), null, vars.get("$sys.currentcontextname"), attachments, null, null, null, null, + $KeywordRegistry.documentTemplateTypeCategory$single()); + +//refresh is necessary to update the state of the button +neon.refresh(); \ No newline at end of file diff --git a/entity/Advertising_entity/entityfields/newmail/stateProcess.js b/entity/Advertising_entity/entityfields/newmail/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..7d2b37e13bb774f096705a523286034e2e39b805 --- /dev/null +++ b/entity/Advertising_entity/entityfields/newmail/stateProcess.js @@ -0,0 +1,34 @@ +import("system.logging"); +import("Workflow_lib"); +import("system.result"); +import("Util_lib"); +import("system.neon"); +import("Context_lib"); +import("system.vars"); +import("system.workflow"); + +var workflowTask = ""; +if(WorkflowUtils.engineIsEnabled()) +{ + var workflowVariables = { + "targetContext": ContextUtils.getCurrentContextId(), + "targetId": vars.get("$field.ADVERTISINGID"), + "mailSent": "false" + }; + + try{ + var conf = workflow.createConfigForLoadingProcessInstances().processDefinitionKey("AdvertisingShipment").variables(workflowVariables); + var instance = JSON.parse(workflow.getProcessInstances(conf)); + + if(instance.length) + { + var workflowLoadConfig = workflow.createConfigForLoadingTask().variables(workflowVariables); + workflowTask = JSON.parse(workflow.getTask(workflowLoadConfig)); + } + } + catch(ex) + { + logging.log("An error occured while loading the Advertising workflowInstances:\n" + ex); + } +} +result.string(Utils.toBoolean(workflowTask) ? neon.COMPONENTSTATE_EDITABLE : neon.COMPONENTSTATE_INVISIBLE); \ No newline at end of file diff --git a/entity/Advertising_entity/entityfields/objects/children/objecttype_param/valueProcess.js b/entity/Advertising_entity/entityfields/objects/children/objecttype_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..03654e9e87918e0fab7832b51d3f263016f922b8 --- /dev/null +++ b/entity/Advertising_entity/entityfields/objects/children/objecttype_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("system.result"); + +result.string(vars.get("$field.OBJECT_TYPE")); \ No newline at end of file diff --git a/entity/Advertising_entity/entityfields/objects/documentation.adoc b/entity/Advertising_entity/entityfields/objects/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..1c6e8999afe57ad8bbc8b19c96ffc3459bb96b76 --- /dev/null +++ b/entity/Advertising_entity/entityfields/objects/documentation.adoc @@ -0,0 +1,3 @@ +== ObjectConsumer + +In order to keep the advertising flexible, because we store the Object_type and row_id in the database we don't have a fixed consumer \ No newline at end of file diff --git a/entity/Advertising_entity/entityfields/personconsumer/children/onlyshowcontactids_param/valueProcess.js b/entity/Advertising_entity/entityfields/personconsumer/children/onlyshowcontactids_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..d6e48343fadc850bc90790757898cb079046e5de --- /dev/null +++ b/entity/Advertising_entity/entityfields/personconsumer/children/onlyshowcontactids_param/valueProcess.js @@ -0,0 +1,9 @@ +import("system.result"); +import("system.vars"); + + +//check if we have to restrict the working mode... +if(vars.exists("$param.ContactIds_param") && vars.get("$param.ContactIds_param")) +{ + result.string(vars.get("$param.ContactIds_param")); +} \ No newline at end of file diff --git a/entity/Advertising_entity/entityfields/responsible_id/displayValueProcess.js b/entity/Advertising_entity/entityfields/responsible_id/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..3c0d4375ef36b4ae040715951af64cd331dbabe7 --- /dev/null +++ b/entity/Advertising_entity/entityfields/responsible_id/displayValueProcess.js @@ -0,0 +1,5 @@ +import("system.vars"); +import("system.result"); +import("Contact_lib"); + +result.string(ContactUtils.getTitleByContactId(vars.get("$field.RESPONSIBLE_ID"))); \ No newline at end of file diff --git a/entity/Advertising_entity/entityfields/row_id/displayValueProcess.js b/entity/Advertising_entity/entityfields/row_id/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..ffa37a003544be12db61a09266ff073f4ed6bd7d --- /dev/null +++ b/entity/Advertising_entity/entityfields/row_id/displayValueProcess.js @@ -0,0 +1,11 @@ +import("system.neon"); +import("system.vars"); +import("system.result"); +import("Context_lib"); + +if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$field.ROW_ID")) +{ + result.string(""); +} else if (vars.exists("$field.OBJECT_TYPE") && vars.get("$field.OBJECT_TYPE")) { + result.string(ContextUtils.getTitleByContext(vars.get("$field.OBJECT_TYPE"), vars.get("$field.ROW_ID"))); +} \ No newline at end of file diff --git a/entity/Advertising_entity/entityfields/row_id/linkedContextProcess.js b/entity/Advertising_entity/entityfields/row_id/linkedContextProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..bea1100ffad8601e99b20092e4041dc1a13cd39d --- /dev/null +++ b/entity/Advertising_entity/entityfields/row_id/linkedContextProcess.js @@ -0,0 +1,5 @@ +import("system.vars"); +import("system.result"); +import("Context_lib"); + +result.string(ContextUtils.getContextName(vars.get("$field.OBJECT_TYPE"))); \ No newline at end of file diff --git a/entity/Advertising_entity/entityfields/startworkflow/onActionProcess.js b/entity/Advertising_entity/entityfields/startworkflow/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..93f58deeb64f6fa4173539dd712090a98074cf87 --- /dev/null +++ b/entity/Advertising_entity/entityfields/startworkflow/onActionProcess.js @@ -0,0 +1,72 @@ +import("Util_lib"); +import("KeywordRegistry_basic"); +import("system.entities"); +import("system.workflow"); +import("Context_lib"); +import("system.vars"); +import("Workflow_lib"); + +var config = entities.createConfigForLoadingRows() +.entity("AdvertisingItem_entity") +.fields(["ADVERTISINGITEMID", "DELIVERY"]) +.addParameter("AdvertisingId_param", vars.get("$field.ADVERTISINGID")); + +var advertItems = entities.getRows(config); +var itemsSentDigital = []; +var itemsSentPostal = []; +var itemsSentPersonal = []; + +advertItems.forEach(function(element) +{ + if(element) + { + var deliveryType = element["DELIVERY"]; + var itemId = element["ADVERTISNGITEMID"]; + + if(deliveryType == $KeywordRegistry.advertisingDelivery$personal()) + { + itemsSentPersonal.push(itemId); + } + if(deliveryType == $KeywordRegistry.advertisingDelivery$post()) + { + itemsSentPostal.push(itemId); + } + if(deliveryType == $KeywordRegistry.advertisingDelivery$mail()) + { + itemsSentDigital.push(itemId); + } + } +}) + +var variables = { + "targetContext": ContextUtils.getCurrentContextId(), + "targetId": vars.get("$field.ADVERTISINGID") +}; + +if(itemsSentPostal.length) +{ + let postVariables = Utils.clone(variables); + postVariables["delivery"] = $KeywordRegistry.advertisingDelivery$post(); + workflow.startProcessByKey("AdvertisingShipment", postVariables); +} +if(itemsSentPersonal.length) +{ + let personalVariables = Utils.clone(variables); + personalVariables["delivery"] = $KeywordRegistry.advertisingDelivery$personal(); + workflow.startProcessByKey("AdvertisingShipment", personalVariables); +} +if(itemsSentDigital.length) +{ + let digitalVariables = Utils.clone(variables); + digitalVariables["delivery"] = $KeywordRegistry.advertisingDelivery$mail(); + digitalVariables["mailSent"] = "false"; + workflow.startProcessByKey("AdvertisingShipment", digitalVariables); +} + +//updating the status so that no more items can be added +var updConfig = entities.createConfigForUpdatingRows() +.entity("ADVERTISING_entity") +.uid(vars.get("$field.ADVERTISINGID")) +.fieldValues({"STATUS": $KeywordRegistry.advertisingStatus$Sent()}); + +entities.updateRow(updConfig); diff --git a/entity/Advertising_entity/entityfields/startworkflow/stateProcess.js b/entity/Advertising_entity/entityfields/startworkflow/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..c7ac0e6283927165924bd17a288ea540aeb30770 --- /dev/null +++ b/entity/Advertising_entity/entityfields/startworkflow/stateProcess.js @@ -0,0 +1,35 @@ +import("Workflow_lib"); +import("system.logging"); +import("KeywordRegistry_basic"); +import("system.neon"); +import("system.result"); +import("system.vars"); +import("Context_lib"); +import("system.workflow"); + +//when the engine isn't enabled it is better to hide the button +var ret = neon.COMPONENTSTATE_INVISIBLE; + +if(WorkflowUtils.engineIsEnabled()) +{ + ret = neon.COMPONENTSTATE_DISABLED; + if(vars.get("$field.STATUS") == $KeywordRegistry.advertisingStatus$Open()) + { + var conf = workflow.createConfigForLoadingProcessInstances().processDefinitionKey("AdvertisingShipment").variables({ + "targetContext": ContextUtils.getCurrentContextId(), + "targetId": vars.get("$field.ADVERTISINGID") + }); + var instance = []; + try + { + instance = JSON.parse(workflow.getProcessInstances(conf)); + } + catch(ex) + { + logging.log("An error occured while loading the Advertising workflowInstances:\n" + ex); + } + + ret = instance.length ? neon.COMPONENTSTATE_DISABLED : neon.COMPONENTSTATE_EDITABLE; + } +} +result.string(ret); \ No newline at end of file diff --git a/entity/Advertising_entity/entityfields/startworkflow/tooltipProcess.js b/entity/Advertising_entity/entityfields/startworkflow/tooltipProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..08ff773a22fcc6c1a3b167d824df9f9f9a338b38 --- /dev/null +++ b/entity/Advertising_entity/entityfields/startworkflow/tooltipProcess.js @@ -0,0 +1,10 @@ +import("system.neon"); +import("system.result"); +import("system.translate"); +import("system.vars"); + + +if(vars.get("$property.startWorkflow.state") == neon.COMPONENTSTATE_DISABLED) +{ + result.string(translate.text("Workflow already started")); +} \ No newline at end of file diff --git a/entity/Advertising_entity/entityfields/status/displayValueProcess.js b/entity/Advertising_entity/entityfields/status/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..d7fb6631a0a0805dbc4bd74f6f7b91b53984b5fd --- /dev/null +++ b/entity/Advertising_entity/entityfields/status/displayValueProcess.js @@ -0,0 +1,6 @@ +import("system.result"); +import("system.vars"); +import("Keyword_lib"); +import("KeywordRegistry_basic"); + +result.string(KeywordUtils.getViewValue($KeywordRegistry.advertisingStatus(), vars.get("$field.STATUS"))); \ No newline at end of file diff --git a/entity/Advertising_entity/entityfields/status/valueProcess.js b/entity/Advertising_entity/entityfields/status/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..ca5b3e2522509bee6ab3ed99315ddaadab080489 --- /dev/null +++ b/entity/Advertising_entity/entityfields/status/valueProcess.js @@ -0,0 +1,9 @@ +import("KeywordRegistry_basic"); +import("system.result"); +import("system.neon"); +import("system.vars"); + +if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) +{ + result.string($KeywordRegistry.advertisingStatus$Open()); +} \ No newline at end of file diff --git a/entity/Advertising_entity/recordcontainers/db/conditionProcess.js b/entity/Advertising_entity/recordcontainers/db/conditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..61616bf1cb4d788a2a759fed05e26e12b6c7fc74 --- /dev/null +++ b/entity/Advertising_entity/recordcontainers/db/conditionProcess.js @@ -0,0 +1,12 @@ +import("system.result"); +import("system.vars"); +import("Sql_lib"); + +var cond = newWhere(); + +if(vars.exists("$param.RowId_param") && vars.get("$param.RowId_param")) +{ + cond.andIfSet("advertising.ROW_ID", vars.getString("$param.RowId_param"), SqlBuilder.EQUAL()); +} + +result.string(cond.toString()); \ No newline at end of file diff --git a/entity/Advertising_entity/recordcontainers/db/recordfieldmappings/active.value/expression.js b/entity/Advertising_entity/recordcontainers/db/recordfieldmappings/active.value/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..fa1670218952aa83ff8429ef0bf55e7aaaa5a293 --- /dev/null +++ b/entity/Advertising_entity/recordcontainers/db/recordfieldmappings/active.value/expression.js @@ -0,0 +1,6 @@ +import("Context_lib"); +import("system.result"); +import("KeywordRegistry_basic"); + +var activArr = [$KeywordRegistry.advertisingStatus$Open(), $KeywordRegistry.advertisingStatus$Sent(), $KeywordRegistry.advertisingStatus$followedUp()]; +result.string(ContextUtils.buildActiveCaseWhen(activArr, "ADVERTISING.STATUS")); \ No newline at end of file diff --git a/entity/Analyses_entity/Analyses_entity.aod b/entity/Analyses_entity/Analyses_entity.aod index 7d49b0bd6a63ddb2bf1b1ebf8912ab1ec4e166c0..66b762cd1ecbee83fab890384129e6eba80d1a75 100644 --- a/entity/Analyses_entity/Analyses_entity.aod +++ b/entity/Analyses_entity/Analyses_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Analyses_entity</name> <title>Analyses</title> <majorModelMode>DISTRIBUTED</majorModelMode> diff --git a/entity/AnyContact_entity/AnyContact_entity.aod b/entity/AnyContact_entity/AnyContact_entity.aod index f5301bfdd0b5e89907e2e6d06ff321acb8bf70a2..0588ebec20e4fe341c6c2823775e4c7cced8cbc9 100644 --- a/entity/AnyContact_entity/AnyContact_entity.aod +++ b/entity/AnyContact_entity/AnyContact_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>AnyContact_entity</name> <title>Contact</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -11,92 +11,10 @@ <entityFields> <entityProvider> <name>#PROVIDER</name> - <dependencies> - <entityDependency> - <name>5d8b421e-a234-4d03-bfec-ed01f464a54c</name> - <entityName>Contract_entity</entityName> - <fieldName>AnyContacts</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>94e4fa2c-7525-49f9-b933-353d200b829c</name> - <entityName>Offer_entity</entityName> - <fieldName>AnyContacts</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>f1f7d959-ecb5-4438-9762-fc11f1bc5334</name> - <entityName>Order_entity</entityName> - <fieldName>AnyContacts</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>b2895709-2ebf-46ec-a46d-6b2e9a4575a3</name> - <entityName>BulkMailRecipient_entity</entityName> - <fieldName>Contacts</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>c6402198-278c-43e2-9b15-9be28270c83f</name> - <entityName>LetterRecipient_entity</entityName> - <fieldName>Contacts</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>ae9040a2-1f2e-4105-aaed-eb3d067b2376</name> - <entityName>DSGVOInfo_entity</entityName> - <fieldName>Contacts</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>471b6e37-13ce-4e84-a797-82bccbe4e39a</name> - <entityName>UnlinkedMailMappingLink_entity</entityName> - <fieldName>AnyContacts</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>aca9e52c-9138-4ef1-b039-1efeb3deb822</name> - <entityName>BulkMailTesting_entity</entityName> - <fieldName>Contacts</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>bbd2bf84-7cad-4156-b736-32749949f97c</name> - <entityName>BulkMail_entity</entityName> - <fieldName>Contacts</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>60518a9f-eaa5-4af8-8cd6-4276047f4371</name> - <entityName>ObjectProxy_entity</entityName> - <fieldName>Contacts</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>ea7c855e-dccd-4c05-9efb-a1303f37dab8</name> - <entityName>CampaignParticipant_entity</entityName> - <fieldName>AnyContacts</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityProvider> <name>ContactsByIds</name> <documentation>%aditoprj%/entity/AnyContact_entity/entityfields/contactsbyids/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>0206f7a8-fd58-47e8-8b7a-5ff4531e56fb</name> - <entityName>QuickEntry_entity</entityName> - <fieldName>OrgAndPersDuplicates</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>ee4b75ff-e1fc-4dbe-a900-81a7a92a273e</name> - <entityName>CampaignParticipant_entity</entityName> - <fieldName>AnyContacts</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ContactId_param</name> @@ -183,14 +101,6 @@ See ContactUtils.getRelationTypeByPersOrg for possible values</description> <entityProvider> <name>OnlySameCompany</name> <documentation>%aditoprj%/entity/AnyContact_entity/entityfields/onlysamecompany/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>28b19d6b-237c-4268-b6c6-323df408c94a</name> - <entityName>Offer_entity</entityName> - <fieldName>AnyContacts</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ContactId_param</name> @@ -217,6 +127,10 @@ See ContactUtils.getRelationTypeByPersOrg for possible values</description> <name>#PROVIDER_AGGREGATES</name> <useAggregates v="true" /> </entityProvider> + <entityParameter> + <name>IgnoreContactStates_param</name> + <expose v="true" /> + </entityParameter> </entityFields> <recordContainers> <dbRecordContainer> diff --git a/entity/AnyContact_entity/recordcontainers/db/conditionProcess.js b/entity/AnyContact_entity/recordcontainers/db/conditionProcess.js index 4627dbe64019709366398c2648a86fe958da0e98..fcb276c307193fe5f4553328635b9ba2beafe283 100644 --- a/entity/AnyContact_entity/recordcontainers/db/conditionProcess.js +++ b/entity/AnyContact_entity/recordcontainers/db/conditionProcess.js @@ -33,7 +33,15 @@ var cond = newWhereIfSet(conditionPrivateOrganisation) .andIfSet("CONTACT.ORGANISATION_ID", orgContactId); var contactIds = vars.exists("$param.ContactIds_param") && vars.get("$param.ContactIds_param"); -if (contactIds) +if (contactIds) +{ cond.andIfSet("CONTACT.CONTACTID", JSON.parse(contactIds), SqlBuilder.IN()); +} + +var ignoredContactStates = vars.exists("$param.IgnoreContactStates_param") && vars.get("$param.IgnoreContactStates_param"); +if (ignoredContactStates) +{ + cond.andIfSet("CONTACT.STATUS", JSON.parse(ignoredContactStates), SqlBuilder.NOT_IN()); +} result.string(cond.toString()); \ No newline at end of file diff --git a/entity/AppointmentLink_entity/AppointmentLink_entity.aod b/entity/AppointmentLink_entity/AppointmentLink_entity.aod index f049394bc23fffc92a1a735f41aa9bc86cba9d5f..fa6f725f684484833919424d17644c11b4ee417e 100644 --- a/entity/AppointmentLink_entity/AppointmentLink_entity.aod +++ b/entity/AppointmentLink_entity/AppointmentLink_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>AppointmentLink_entity</name> <title>Connection</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -51,14 +51,6 @@ <targetIdField>OBJECTID</targetIdField> <documentation>%aditoprj%/entity/AppointmentLink_entity/entityfields/links/documentation.adoc</documentation> <recordContainer>db</recordContainer> - <dependencies> - <entityDependency> - <name>3dde1745-18a1-4499-83d0-61e414086997</name> - <entityName>Appointment_entity</entityName> - <fieldName>AppointmentLinks</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>AppointmentId_param</name> diff --git a/entity/Appointment_entity/Appointment_entity.aod b/entity/Appointment_entity/Appointment_entity.aod index d615ac8db071653c41b13edc8e574505ab3f4b50..c5080755c5409c0783408463a8c89bfc0110e749 100644 --- a/entity/Appointment_entity/Appointment_entity.aod +++ b/entity/Appointment_entity/Appointment_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Appointment_entity</name> <title>Appointment</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -205,26 +205,6 @@ <name>LinkedAppointments</name> <documentation>%aditoprj%/entity/Appointment_entity/entityfields/linkedappointments/documentation.adoc</documentation> <recordContainer>jdito</recordContainer> - <dependencies> - <entityDependency> - <name>74dea3cd-a528-4616-b468-cd27f3f1a795</name> - <entityName>Activity_entity</entityName> - <fieldName>LinkedAppointments</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>12b2a8cd-1b66-4123-b0a6-f1ca164bdfec</name> - <entityName>Person_entity</entityName> - <fieldName>Appointments</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>17129bd7-1b1b-4090-9185-d6b3b83ffb40</name> - <entityName>Organisation_entity</entityName> - <fieldName>LinkedAppointments</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityParameter> <name>LinkedAppointmentsFromDashlet_param</name> @@ -270,6 +250,7 @@ <jDitoRecordAlias>Data_alias</jDitoRecordAlias> <contentProcess>%aditoprj%/entity/Appointment_entity/recordcontainers/jdito/contentProcess.js</contentProcess> <rowCountProcess>%aditoprj%/entity/Appointment_entity/recordcontainers/jdito/rowCountProcess.js</rowCountProcess> + <hasDependentRecords v="true" /> <onInsert>%aditoprj%/entity/Appointment_entity/recordcontainers/jdito/onInsert.js</onInsert> <onUpdate>%aditoprj%/entity/Appointment_entity/recordcontainers/jdito/onUpdate.js</onUpdate> <onDelete>%aditoprj%/entity/Appointment_entity/recordcontainers/jdito/onDelete.js</onDelete> diff --git a/entity/Appointment_entity/afterUiInit.js b/entity/Appointment_entity/afterUiInit.js index 84f0515ebf4c6c9ba00bb4a071bacebe74fbaace..d1a3fedb127f027d614ce245fc9901599743d2a3 100644 --- a/entity/Appointment_entity/afterUiInit.js +++ b/entity/Appointment_entity/afterUiInit.js @@ -2,7 +2,7 @@ import("system.util"); import("system.neon"); import("system.vars"); -if(vars.exists("$param.Entry_param") && vars.get("$param.Entry_param")) +if(vars.get("$param.Entry_param")) { var entry = JSON.parse(vars.getString("$param.Entry_param")); diff --git a/entity/Appointment_entity/recordcontainers/jdito/contentProcess.js b/entity/Appointment_entity/recordcontainers/jdito/contentProcess.js index 709bfac8d00e3b805a383dc0c78c0cb8b91a07d1..a2b8753c1cf9bcd5783b27f12226693770d0e7af 100644 --- a/entity/Appointment_entity/recordcontainers/jdito/contentProcess.js +++ b/entity/Appointment_entity/recordcontainers/jdito/contentProcess.js @@ -18,12 +18,12 @@ var appointmentUids; /** * Will be used, if the user is operating the calendar. */ -if(vars.exists("$param.Entry_param") && vars.get("$param.Entry_param")) +if(vars.get("$param.Entry_param") && JSON.parse(vars.get("$param.Entry_param"))[calendars.ID] != undefined) { var entry = JSON.parse(vars.getString("$param.Entry_param")); var masterEntry = null; - if (vars.exists("$param.MasterEntry_param") && vars.get("$param.MasterEntry_param") != "") { + if (vars.get("$param.MasterEntry_param") != "") { masterEntry = JSON.parse(vars.getString("$param.MasterEntry_param")); } diff --git a/entity/Appointment_entity/recordcontainers/jdito/onInsert.js b/entity/Appointment_entity/recordcontainers/jdito/onInsert.js index 21d79d0f9f82bfa904e33604db62defa2ca9733f..548745a3cf60a6dfa340e0dec3315f2345f18534 100644 --- a/entity/Appointment_entity/recordcontainers/jdito/onInsert.js +++ b/entity/Appointment_entity/recordcontainers/jdito/onInsert.js @@ -8,6 +8,7 @@ import("system.neon"); import("system.vars"); import("system.text"); import("system.db"); +import("system.entities"); var event = JSON.parse(vars.getString("$param.Entry_param")); @@ -22,36 +23,23 @@ event[calendars.LOCATION] = fields["LOCATION.value"]; event[calendars.DESCRIPTION] = fields["DESCRIPTION.value"]; event[calendars.DTSTART] = fields["BEGIN.value"]; event[calendars.DTEND] = fields["END.value"]; -event["X-ADITO-ISALLDAYEVENT"] = fields["ALLDAY.value"]; event[calendars.CLASSIFICATION] = fields["CLASSIFICATION.value"]; event[calendars.TRANSPARENCY] = fields["TRANSPARENCY.value"]; event[calendars.CATEGORIES] = fields["CATEGORIES.value"]; event[calendars.ORGANIZER] = fields["ORGANIZER.value"]; +event["X-ADITO-ISALLDAYEVENT"] = fields["ALLDAY.value"]; if(fields["RRULE.value"]) +{ event[calendars.RRULE] = [fields["RRULE.value"]]; +} if (fields["REMINDER.value"]) { event[calendars.HASREMINDER] = "true"; event[calendars.REMINDER_DURATION] = fields["REMINDER.value"]; } - -var idstringarray = calendars.insert([event]); - -if(event["LINKS"]) -{ - event["LINKS"].forEach(function(pLink){ - neon.addRecord("AppointmentLinks", - { - "OBJECTID" : pLink["OBJECT_ID"], - "OBJECTTYPE" : pLink["OBJECT_TYPE"], - "APPOINTMENT_ID" : idstringarray[0] - }); - }) -} - -event[calendars.ID] = idstringarray[0]; +event[calendars.ID] = calendars.insert([event])[0]; neon.setFieldValue("$field.UID", event[calendars.ID]); vars.set("$context.editmode", calendars.MODE_UPDATE); diff --git a/entity/AroundLocation_entity/AroundLocation_entity.aod b/entity/AroundLocation_entity/AroundLocation_entity.aod index 1ccc8984c6b21bc186fb84d00416543831fddeaa..2af99e89b5a197085e06ff606dbe59edeb8560ab 100644 --- a/entity/AroundLocation_entity/AroundLocation_entity.aod +++ b/entity/AroundLocation_entity/AroundLocation_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>AroundLocation_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/AroundLocation_entity/documentation.adoc</documentation> diff --git a/entity/AttributeRelation_entity/AttributeRelation_entity.aod b/entity/AttributeRelation_entity/AttributeRelation_entity.aod index 05c0bf6f0734e4ea7c8fbbd41efd67172e936955..46767f5f58a0a82f759143a7cc2119410272ef4c 100644 --- a/entity/AttributeRelation_entity/AttributeRelation_entity.aod +++ b/entity/AttributeRelation_entity/AttributeRelation_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>AttributeRelation_entity</name> <title>Attribute</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -35,68 +35,6 @@ <entityProvider> <name>TreeProvider</name> <documentation>%aditoprj%/entity/AttributeRelation_entity/entityfields/treeprovider/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>e0a7a4bc-ec7f-4f09-9b94-cbeb328cd7b8</name> - <entityName>Organisation_entity</entityName> - <fieldName>AttributeTree</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>f29d91fe-2537-486f-b9de-44065a7790d4</name> - <entityName>Person_entity</entityName> - <fieldName>AttributeTree</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>445c1bd7-4e72-4ab7-a5b1-cc77924eb562</name> - <entityName>Product_entity</entityName> - <fieldName>AttributeTree</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>4498139f-067c-4cca-b122-d9bc9100c53d</name> - <entityName>Activity_entity</entityName> - <fieldName>AttributeTree</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>b728166d-a74f-4ca1-8ce7-7e57032f2a7d</name> - <entityName>Contract_entity</entityName> - <fieldName>AttributeTree</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>3921c712-d15c-4941-b04d-44f4536dc404</name> - <entityName>Employee_entity</entityName> - <fieldName>AttributeTree</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>148faad1-78f6-4ff2-a4d5-9607d919adb9</name> - <entityName>Salesproject_entity</entityName> - <fieldName>AttributeTree</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>8ed8bae6-c69e-45ce-9fc9-5fb43587a47b</name> - <entityName>Order_entity</entityName> - <fieldName>AttributeTree</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>661f5b91-f71e-429e-a170-8bd18781bc69</name> - <entityName>Campaign_entity</entityName> - <fieldName>AttributeTree</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>80a034ee-c3fd-45e3-986c-d3854608c148</name> - <entityName>Activity_entity</entityName> - <fieldName>AttributeTreeIsTheme</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>GetTree_param</name> @@ -167,86 +105,6 @@ <entityProvider> <name>AttributeRelations</name> <documentation>%aditoprj%/entity/AttributeRelation_entity/entityfields/attributerelations/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>69560cc2-d92a-453c-9e64-fb712a538c4f</name> - <entityName>Organisation_entity</entityName> - <fieldName>Attributes</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>34f24d10-7312-4b03-8d6f-2918c8cb9eb8</name> - <entityName>Person_entity</entityName> - <fieldName>Attributes</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>3cb1014d-a6c8-4b4a-83ba-a099d4488ab2</name> - <entityName>Activity_entity</entityName> - <fieldName>Attributes</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>2662f513-6498-40c2-bed6-031087857e82</name> - <entityName>Contract_entity</entityName> - <fieldName>Attributes</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>be336d6c-c550-4ae5-9f78-0f2ee56a2a6c</name> - <entityName>Employee_entity</entityName> - <fieldName>Attributes</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>8488da81-0f98-4c4b-811f-ccda64c8624b</name> - <entityName>Offer_entity</entityName> - <fieldName>Attributes</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>7df4a57a-646d-4b5a-802b-f1e2bf93d09b</name> - <entityName>Order_entity</entityName> - <fieldName>Attributes</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>40a4c698-d34f-4c5a-bee8-239ee9d71f20</name> - <entityName>Product_entity</entityName> - <fieldName>Attributes</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>99bc7ec8-195e-483f-923e-763c6f28a29c</name> - <entityName>Salesproject_entity</entityName> - <fieldName>Attributes</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>fd90bd15-d9c2-4eb6-9e7f-7669fded02f6</name> - <entityName>Competition_entity</entityName> - <fieldName>Attributes</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>e520143e-c72f-46e3-9c27-752471af51ae</name> - <entityName>Organisation_entity</entityName> - <fieldName>AttributeConditions</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>c66e5dbb-3d3c-424a-b816-31762eb72c1c</name> - <entityName>Leadimport_entity</entityName> - <fieldName>Attributes</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>92855510-92c8-4837-85d3-072396f5f7f6</name> - <entityName>Contact_entity</entityName> - <fieldName>Attributes</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>GetTree_param</name> @@ -376,14 +234,6 @@ </entityConsumer> <entityProvider> <name>FilterProvider</name> - <dependencies> - <entityDependency> - <name>0560c6d0-8473-4050-9ca1-a935bbac2ef9</name> - <entityName>Organisation_entity</entityName> - <fieldName>AttributesFilter</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>DisplaySimpleName_param</name> diff --git a/entity/AttributeRelation_entity/entityfields/specificattribute/children/attributecount_param/valueProcess.js b/entity/AttributeRelation_entity/entityfields/specificattribute/children/attributecount_param/valueProcess.js index 9c0bc231731f77eee827bad7693c8ce56d7d45d8..0d6de778c4719400e3c4302e1fa4169fd70fd128 100644 --- a/entity/AttributeRelation_entity/entityfields/specificattribute/children/attributecount_param/valueProcess.js +++ b/entity/AttributeRelation_entity/entityfields/specificattribute/children/attributecount_param/valueProcess.js @@ -5,4 +5,6 @@ import("system.vars"); var objectType = vars.exists("$param.ObjectType_param") && vars.get("$param.ObjectType_param"); var rowId = vars.exists("$param.ObjectRowId_param") && vars.get("$param.ObjectRowId_param"); if (vars.get("$param.GetTree_param") == "true" && rowId) - result.object(AttributeRelationUtils.countAttributeRelations(rowId, objectType)); \ No newline at end of file +{ + result.object(AttributeRelationUtils.countAttributeRelations(rowId, objectType)); +} \ No newline at end of file diff --git a/entity/AttributeRelation_entity/entityfields/value/onValidation.js b/entity/AttributeRelation_entity/entityfields/value/onValidation.js index d2f774193b62a68cfde69f37ce3ee9b740f1ac3c..ef3040e48654b8adde21d33bbed134b180a5b504 100644 --- a/entity/AttributeRelation_entity/entityfields/value/onValidation.js +++ b/entity/AttributeRelation_entity/entityfields/value/onValidation.js @@ -8,5 +8,7 @@ if (attributeType && !attributeType.useLookup) { var validationResult = attributeType.validateValue(vars.get("$local.value"), Utils.parseJSON(vars.get("$field.VALIDATIONPARAMETERS"))); if (validationResult && validationResult !== true) + { result.string(validationResult); + } } \ No newline at end of file diff --git a/entity/AttributeRelation_entity/entityfields/value_lookup/onValidation.js b/entity/AttributeRelation_entity/entityfields/value_lookup/onValidation.js index 26590927b278e6a71b75d42c2f5e9d5a4b5da26e..f517b44992fe2d13b2cca675d774dee0028ff7e0 100644 --- a/entity/AttributeRelation_entity/entityfields/value_lookup/onValidation.js +++ b/entity/AttributeRelation_entity/entityfields/value_lookup/onValidation.js @@ -8,5 +8,7 @@ if (attributeType && attributeType.useLookup) { var validationResult = attributeType.validateValue(vars.get("$local.value"), Utils.parseJSON(vars.get("$field.VALIDATIONPARAMETERS"))); if (validationResult && validationResult !== true) + { result.string(validationResult); -} \ No newline at end of file + } +} diff --git a/entity/AttributeRelation_entity/recordcontainers/jdito/onInsert.js b/entity/AttributeRelation_entity/recordcontainers/jdito/onInsert.js index 2836dcd5bc7ee17da8d0d75e560f05b6117a36ea..f456452e9d7bbb00db08bf0ddc83ee8b955bb20a 100644 --- a/entity/AttributeRelation_entity/recordcontainers/jdito/onInsert.js +++ b/entity/AttributeRelation_entity/recordcontainers/jdito/onInsert.js @@ -1,3 +1,4 @@ +import("Sql_lib"); import("Workflow_lib"); import("DataPrivacy_lib"); import("system.datetime"); @@ -39,7 +40,14 @@ if (valueField) } db.insertData("AB_ATTRIBUTERELATION", columns, null, values); -if (vars.get("$param.ObjectType_param") == "Person") +let countDSGVOUsage = parseInt(newSelect("COUNT(*)") +.from("AB_ATTRIBUTEUSAGE") +.where("AB_ATTRIBUTEUSAGE.OBJECT_TYPE", "DSGVO") +.and("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID", rowdata["AB_ATTRIBUTE_ID.value"]).cell()); + +if (vars.get("$param.ObjectType_param") == "Person" && countDSGVOUsage) +{ DataPrivacyUtils.notifyNeedDataPrivacyUpdate(vars.get("$param.ObjectRowId_param"), vars.get("$param.ShowDsgvoMessage_param")); +} WorkflowSignalSender.inserted(); \ No newline at end of file diff --git a/entity/AttributeRelation_entity/recordcontainers/jdito/onUpdate.js b/entity/AttributeRelation_entity/recordcontainers/jdito/onUpdate.js index e88af46b5b0766cd413f835d6435b7b19609693c..5dc936c76f55f5fc24ab8c8464e2fe25c57f9ed1 100644 --- a/entity/AttributeRelation_entity/recordcontainers/jdito/onUpdate.js +++ b/entity/AttributeRelation_entity/recordcontainers/jdito/onUpdate.js @@ -11,27 +11,27 @@ var attributeId = rowdata["AB_ATTRIBUTE_ID.value"] var type = AttributeUtil.getAttributeType(attributeId); var showEmpty = vars.getString("$param.ShowEmpty_param") == "true"; var attributeRelationId = showEmpty - ? JSON.parse(vars.get("$local.uid"))[0] - : vars.get("$local.uid"); +? JSON.parse(vars.get("$local.uid"))[0] +: vars.get("$local.uid"); if (showEmpty && !rowdata["AB_ATTRIBUTERELATIONID.value"].trim()) { var columns = [ - "AB_ATTRIBUTERELATIONID", - "AB_ATTRIBUTE_ID", - "OBJECT_ROWID", - "OBJECT_TYPE", - "DATE_NEW", - "USER_NEW" + "AB_ATTRIBUTERELATIONID", + "AB_ATTRIBUTE_ID", + "OBJECT_ROWID", + "OBJECT_TYPE", + "DATE_NEW", + "USER_NEW" ]; var values = [ - attributeRelationId, - attributeId, - vars.get("$param.ObjectRowId_param"), - vars.get("$param.ObjectType_param"), - vars.get("$sys.date"), - vars.get("$sys.user") + attributeRelationId, + attributeId, + vars.get("$param.ObjectRowId_param"), + vars.get("$param.ObjectType_param"), + vars.get("$sys.date"), + vars.get("$sys.user") ]; var valueField = AttributeTypeUtil.getDatabaseField(type); var value; @@ -61,15 +61,22 @@ else }); var attributeValue = AttributeTypeUtil.useLookup(type) - ? rowdata["VALUE_LOOKUP.value"] - : rowdata["VALUE.value"]; + ? rowdata["VALUE_LOOKUP.value"] + : rowdata["VALUE.value"]; fieldValues[AttributeTypeUtil.getDatabaseField(type)] = attributeValue; var attributeCondition = newWhere("AB_ATTRIBUTERELATION.AB_ATTRIBUTERELATIONID", attributeRelationId); attributeCondition.updateFields(fieldValues); } -if (vars.get("$param.ObjectType_param") == "Person") +let countDSGVOUsage = parseInt(newSelect("COUNT(*)") + .from("AB_ATTRIBUTEUSAGE") + .where("AB_ATTRIBUTEUSAGE.OBJECT_TYPE", "DSGVO") + .and("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID", attributeId).cell()); + +if (vars.get("$param.ObjectType_param") == "Person" && countDSGVOUsage) +{ DataPrivacyUtils.notifyNeedDataPrivacyUpdate(vars.get("$param.ObjectRowId_param"), vars.get("$param.ShowDsgvoMessage_param")); +} WorkflowSignalSender.updated(); \ No newline at end of file diff --git a/entity/AttributeUsage_entity/AttributeUsage_entity.aod b/entity/AttributeUsage_entity/AttributeUsage_entity.aod index 7537ce268732fefca76ffe7f04f87d7b4e5d98fa..68385293582dd3fad372f7e7789b688f1d42f204 100644 --- a/entity/AttributeUsage_entity/AttributeUsage_entity.aod +++ b/entity/AttributeUsage_entity/AttributeUsage_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>AttributeUsage_entity</name> <title>Usage</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -7,7 +7,6 @@ <siblings> <element>Attribute_entity</element> </siblings> - <onValidation>%aditoprj%/entity/AttributeUsage_entity/onValidation.js</onValidation> <recordContainer>db</recordContainer> <entityFields> <entityProvider> @@ -17,6 +16,7 @@ <name>OBJECT_TYPE</name> <title>Module</title> <consumer>Context</consumer> + <groupable v="true" /> <mandatory v="true" /> <displayValueProcess>%aditoprj%/entity/AttributeUsage_entity/entityfields/object_type/displayValueProcess.js</displayValueProcess> <onValueChangeTypes> @@ -37,14 +37,6 @@ <name>SpecificAttribute</name> <documentation>%aditoprj%/entity/AttributeUsage_entity/entityfields/specificattribute/documentation.adoc</documentation> <recordContainer>db</recordContainer> - <dependencies> - <entityDependency> - <name>47ac9f95-8879-43fd-92a9-86079e735e58</name> - <entityName>Attribute_entity</entityName> - <fieldName>AttributeUsages</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityParameter> <name>AttributeId_param</name> diff --git a/entity/AttributeUsage_entity/entityfields/max_count/onValidation.js b/entity/AttributeUsage_entity/entityfields/max_count/onValidation.js index 0a2f0bdb56a56e509e8977dfd6e93d0eb02994c3..38fd4fbc26dea0c1560f7152e9c69ada8b141f3e 100644 --- a/entity/AttributeUsage_entity/entityfields/max_count/onValidation.js +++ b/entity/AttributeUsage_entity/entityfields/max_count/onValidation.js @@ -3,7 +3,8 @@ import("system.vars"); import("system.translate"); import("Entity_lib"); -var maxCount = vars.get("local.value"); +var minCount = vars.getString("$field.MIN_COUNT"); +var maxCount = vars.get("$local.value"); if (maxCount) { @@ -12,4 +13,7 @@ if (maxCount) result.string(translate.text("Maximal count must be one or higher")); else if (maxCount != Math.floor(maxCount)) result.string(translate.text("Maximal count has to be a whole number")); + else if (minCount && minCount > maxCount) + result.string(translate.text("The minimal count can't be larger than the maximal count!")); } + diff --git a/entity/AttributeUsage_entity/onValidation.js b/entity/AttributeUsage_entity/onValidation.js deleted file mode 100644 index f35c9b28c229e58d70a79ab48c80cb2b0cb14bfc..0000000000000000000000000000000000000000 --- a/entity/AttributeUsage_entity/onValidation.js +++ /dev/null @@ -1,8 +0,0 @@ -import("system.translate"); -import("system.vars"); -import("system.result"); - -var minCount = vars.getString("$field.MIN_COUNT"); -var maxCount = vars.getString("$field.MAX_COUNT"); -if (minCount != "" && maxCount != "" && minCount > maxCount) - result.string(translate.text("The minimal count can't be larger than the maximal count!")); \ No newline at end of file diff --git a/entity/Attribute_entity/Attribute_entity.aod b/entity/Attribute_entity/Attribute_entity.aod index 52049d2bae1366fc8a27a2dbdc032bf69e57e1c8..4fb51c046e550c4b0ded4094d02ffcbae2188e5c 100644 --- a/entity/Attribute_entity/Attribute_entity.aod +++ b/entity/Attribute_entity/Attribute_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Attribute_entity</name> <title>Attribute</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -13,14 +13,6 @@ <entityFields> <entityProvider> <name>#PROVIDER</name> - <dependencies> - <entityDependency> - <name>42e6f528-8452-4262-97bd-68e8cbe99c74</name> - <entityName>ObjectProxy_entity</entityName> - <fieldName>Attributes</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>ATTRIBUTE_NAME</name> @@ -131,32 +123,6 @@ <name>SpecificAttribute</name> <lookupIdfield>UID</lookupIdfield> <documentation>%aditoprj%/entity/Attribute_entity/entityfields/specificattribute/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>ba3b4d47-7385-49df-bf61-54c99f5b2c81</name> - <entityName>AttributeRelation_entity</entityName> - <fieldName>SpecificAttribute</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>6bc87a7f-02f1-4cab-8c98-b89b626b59bd</name> - <entityName>Salesproject_entity</entityName> - <fieldName>ProjectTypeAttribute</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>26b85665-7914-45c4-b611-081ffe9502a4</name> - <entityName>Employee_entity</entityName> - <fieldName>Departments</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>f31eceb3-2fcc-4298-8c5d-1076433e2c2a</name> - <entityName>PermissionCalendar_entity</entityName> - <fieldName>Departments</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ObjectType_param</name> @@ -328,7 +294,7 @@ <onActionProcess>%aditoprj%/entity/Attribute_entity/entityfields/attributeactions/children/newchildattribute/onActionProcess.js</onActionProcess> <isMenuAction v="true" /> <isObjectAction v="false" /> - <isSelectionAction v="true" /> + <selectionType>MULTI</selectionType> <iconId>VAADIN:FILE_TREE_SMALL</iconId> <state>AUTO</state> <stateProcess>%aditoprj%/entity/Attribute_entity/entityfields/attributeactions/children/newchildattribute/stateProcess.js</stateProcess> @@ -350,14 +316,6 @@ </entityActionField> <entityProvider> <name>ThemeProvider</name> - <dependencies> - <entityDependency> - <name>6e314038-62de-4f0c-b89a-92f029c10933</name> - <entityName>Activity_entity</entityName> - <fieldName>ActivityAtrributes</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>AttributeCount_param</name> @@ -392,14 +350,6 @@ <sortingField>SORTING</sortingField> <documentation>%aditoprj%/entity/Attribute_entity/entityfields/attributechildren/documentation.adoc</documentation> <titlePlural>Child Attributes</titlePlural> - <dependencies> - <entityDependency> - <name>80023321-1954-483f-a4be-b7207557c068</name> - <entityName>Attribute_entity</entityName> - <fieldName>ChildAttributes</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ChildId_param</name> @@ -478,14 +428,6 @@ </entityProvider> <entityProvider> <name>SpecificFilterAttributes</name> - <dependencies> - <entityDependency> - <name>9b2b5f2e-229d-4a10-a54f-cbf77aafe512</name> - <entityName>AttributeRelation_entity</entityName> - <fieldName>SpecificFilterAttributes</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>DisplaySimpleName_param</name> diff --git a/entity/Attribute_entity/recordcontainers/jdito/contentProcess.js b/entity/Attribute_entity/recordcontainers/jdito/contentProcess.js index 9f76fa5aee84c3a16afea2c3efe3900b03cf64c1..ba69144b21acba47c5eb7ade4dbad30ec0402bed 100644 --- a/entity/Attribute_entity/recordcontainers/jdito/contentProcess.js +++ b/entity/Attribute_entity/recordcontainers/jdito/contentProcess.js @@ -1,232 +1,232 @@ -import("Context_lib"); -import("system.translate"); -import("Util_lib"); -import("JditoFilter_lib"); -import("KeywordRegistry_basic"); -import("Keyword_lib"); -import("system.db"); -import("system.vars"); -import("system.result"); -import("Sql_lib"); -import("Attribute_lib"); - -var childId = vars.get("$param.ChildId_param"); -var childType = vars.get("$param.ChildType_param"); - -var objectType = vars.get("$param.ObjectType_param"); -var filteredIds = Utils.parseJSON(vars.get("$param.FilteredAttributeIds_param")); -var attributeCountObj = Utils.parseJSON(vars.get("$param.AttributeCount_param")); -var displaySimpleName = Utils.toBoolean(vars.get("$param.DisplaySimpleName_param")); - -var themeObjectRowId = vars.get("$param.ThemeObjectRowId_param"); - -var parentId = vars.get("$param.ParentId_param"); -var includeParentRecord = Utils.toBoolean(vars.get("$param.IncludeParentRecord_param")); -var onlyFirstLevelChildren = Utils.toBoolean(vars.get("$param.GetOnlyFirstLevelChildren_param")); - -var fetchUsages = false; -var translateName = false; - -var condition = newWhere(); - -if (vars.exists("$local.idvalues") && vars.get("$local.idvalues")) -{ - condition.andIfSet("AB_ATTRIBUTE.AB_ATTRIBUTEID", vars.get("$local.idvalues"), SqlBuilder.IN()); - fetchUsages = true; -} -else if (childId) //if a childId is given, it is the lookup for selecting the superordinate attribute -{ - condition.and("AB_ATTRIBUTE.ATTRIBUTE_TYPE", AttributeTypeUtil.getGroupTypes(childType), SqlBuilder.IN()); - - //filter out the child and all children of the child, because an attribute can't have itself or a subordinate attribute as parent - condition.andIfSet("AB_ATTRIBUTE.AB_ATTRIBUTEID", [childId].concat(AttributeUtil.getAllChildren(childId)), SqlBuilder.NOT_IN()); -} -else if (objectType) //if there's an objectType, it comes from the AttributeRelation entity (lookup for the attribute selection) -{ - translateName = true; - - var attributeIds = AttributeUtil.getPossibleAttributes(objectType, true, filteredIds, attributeCountObj); - - if (Utils.isEmpty(attributeIds)) - condition.noResult(); - else - condition.and("AB_ATTRIBUTE.AB_ATTRIBUTEID", attributeIds, SqlBuilder.IN()) - .and("AB_ATTRIBUTE.ATTRIBUTE_TYPE", AttributeTypes.THEME(), !themeObjectRowId ? SqlBuilder.NOT_EQUAL() : undefined); -} -else if (parentId) -{ - if (onlyFirstLevelChildren) - condition.and("AB_ATTRIBUTE.ATTRIBUTE_PARENT_ID", parentId); - else - { - condition.andIfSet("AB_ATTRIBUTE.AB_ATTRIBUTEID", AttributeUtil.getAllChildren(parentId), SqlBuilder.IN()); - translateName = true; - if(includeParentRecord) - condition.or("AB_ATTRIBUTE.AB_ATTRIBUTEID", parentId); - } -} -else -{ - fetchUsages = true; -} - -var filterCondition = new FilterSqlTranslator(vars.get("$local.filter"), "AB_ATTRIBUTE") - .addSpecialFieldConditionFn("USAGE_FILTER", function (pValue, pOperator) - { - var cond = newWhere(); - var subSelect = newSelect("1").from("AB_ATTRIBUTEUSAGE", "attrUse").where("attrUse.AB_ATTRIBUTE_ID = AB_ATTRIBUTE.AB_ATTRIBUTEID"); - - switch (pOperator) - { - case "EQUAL": - case "NOT_EQUAL": - subSelect.and(["AB_ATTRIBUTEUSAGE", "OBJECT_TYPE", "attrUse"], pValue); - case "ISNULL": - case "ISNOTNULL": - return cond.and(null, subSelect, pOperator == "NOT_EQUAL" || pOperator == "ISNULL" ? SqlBuilder.NOT_EXISTS() : SqlBuilder.EXISTS()); - } - return cond; - }) - .getSqlCondition(); -condition.andIfSet(filterCondition); - -var usageLoader = new AttributeUsageLoader(); -if (fetchUsages) - usageLoader.fetchUsages(condition); - -var attributes = newSelect([ - "AB_ATTRIBUTEID", - "ATTRIBUTE_PARENT_ID", - "ATTRIBUTE_NAME", - "ATTRIBUTE_ACTIVE", - "DROPDOWNDEFINITION", - "DROPDOWNFILTER", - "VALIDATIONPARAMETERS", - "SORTING", - "ATTRIBUTE_TYPE", - KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.attributeType(), "ATTRIBUTE_TYPE") - ]) - .from("AB_ATTRIBUTE") - .whereIfSet(condition) - .orderBy(["ATTRIBUTE_PARENT_ID", "SORTING", "ATTRIBUTE_NAME"]) - .table(); - -var nameResolver = new AttributeNameResolver(); -if (attributes.length !== 0) - nameResolver.fetchNames(translateName); - -var attributesById = new Map(); -attributes.forEach(function ([attributeId, parentId, simpleName, isActive, - dropDownDefinition, dropDownFilter, validationParameters, sorting, type, typeName]) -{ - attributesById.set(attributeId, [ - attributeId, - simpleName, - displaySimpleName ? nameResolver.getSimpleName(attributeId) : nameResolver.getFullName(attributeId), - parentId, - nameResolver.getFullName(parentId), - type, - typeName, - isActive, - sorting, - dropDownDefinition, - dropDownFilter, - validationParameters, - type != AttributeTypes.COMBOVALUE() ? usageLoader.getUsageSummary(attributeId) : "", - "usageFilter", - false - ]); -}); - -var resultTable = []; -do { - var oldSize = resultTable.length; - attributesById.forEach(function (row, id) - { - var parentId = row[3]; - //rows that are already in the result array are removed from the attributesById Map, so if the parentId is in that Map, - //the parent has not been added yet - if (!parentId || !attributesById.has(parentId)) - { - resultTable.push(row); - attributesById["delete"](id); - } - }); -} while (oldSize != resultTable.length); //stops the loop when no new items were added so that recursive relations between attributes don't cause an infinite loop - -result.object(resultTable); - - -function AttributeNameResolver () -{ - this.cache = new Map(); - this.nameData = new Map(); - this.fetchNames = function (pTranslateNames) - { - var allNames = newSelect(["AB_ATTRIBUTEID", "ATTRIBUTE_PARENT_ID", "ATTRIBUTE_NAME"]) - .from("AB_ATTRIBUTE") - .table(); - allNames.forEach(function ([attributeId, parentId, attributeName]) - { - this.nameData.set(attributeId, { - parentId: parentId, - name: pTranslateNames ? translate.text(attributeName) : attributeName - }); - }, this); - } - this.getSimpleName = function (pAttributeId) - { - if (this.nameData.has(pAttributeId)) - return this.nameData.get(pAttributeId).name; - return ""; - } - this.getFullName = function (pAttributeId) - { - if (!pAttributeId || !this.nameData.has(pAttributeId)) //if the id is not in this.nameData, it does not exist - return ""; - if (this.cache.has(pAttributeId)) - return this.cache.get(pAttributeId); - - var attributeData = this.nameData.get(pAttributeId); - var fullName = attributeData.name; - if (attributeData.parentId) - { - var parentName = this.getFullName(attributeData.parentId); - if (parentName) - fullName = parentName + " / " + fullName; - } - this.cache.set(pAttributeId, fullName); - return fullName; - } -} - -function AttributeUsageLoader () -{ - this.usageData = new Map(); - this.fetchUsages = function (pCondition) - { - var usages = newSelect(["AB_ATTRIBUTE_ID", "OBJECT_TYPE"]) - .from("AB_ATTRIBUTEUSAGE") - .join("AB_ATTRIBUTE", "AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID = AB_ATTRIBUTE.AB_ATTRIBUTEID") - .whereIfSet(pCondition) - .table(); - usages.forEach(function ([attributeId, objectType]) - { - if (this.usageData.has(attributeId)) - this.usageData.get(attributeId).push(objectType); - else - this.usageData.set(attributeId, [objectType]); - }, this); - } - this.getUsages = function (pAttributeId) - { - return this.usageData.get(pAttributeId) || []; - } - this.getUsageSummary = function (pAttributeId) - { - return this.getUsages(pAttributeId).map(function (usage) - { - return ContextUtils.getTitle(usage, true); - }).join(", "); - } +import("Context_lib"); +import("system.translate"); +import("Util_lib"); +import("JditoFilter_lib"); +import("KeywordRegistry_basic"); +import("Keyword_lib"); +import("system.db"); +import("system.vars"); +import("system.result"); +import("Sql_lib"); +import("Attribute_lib"); + +var childId = vars.get("$param.ChildId_param"); +var childType = vars.get("$param.ChildType_param"); + +var objectType = vars.get("$param.ObjectType_param"); +var filteredIds = Utils.parseJSON(vars.get("$param.FilteredAttributeIds_param")); +var attributeCountObj = Utils.parseJSON(vars.get("$param.AttributeCount_param")); +var displaySimpleName = Utils.toBoolean(vars.get("$param.DisplaySimpleName_param")); + +var themeObjectRowId = vars.get("$param.ThemeObjectRowId_param"); + +var parentId = vars.get("$param.ParentId_param"); +var includeParentRecord = Utils.toBoolean(vars.get("$param.IncludeParentRecord_param")); +var onlyFirstLevelChildren = Utils.toBoolean(vars.get("$param.GetOnlyFirstLevelChildren_param")); + +var fetchUsages = false; +var translateName = false; + +var condition = newWhere(); + +if (vars.exists("$local.idvalues") && vars.get("$local.idvalues")) +{ + condition.andIfSet("AB_ATTRIBUTE.AB_ATTRIBUTEID", vars.get("$local.idvalues"), SqlBuilder.IN()); + fetchUsages = true; +} +else if (childId) //if a childId is given, it is the lookup for selecting the superordinate attribute +{ + condition.and("AB_ATTRIBUTE.ATTRIBUTE_TYPE", AttributeTypeUtil.getGroupTypes(childType), SqlBuilder.IN()); + + //filter out the child and all children of the child, because an attribute can't have itself or a subordinate attribute as parent + condition.andIfSet("AB_ATTRIBUTE.AB_ATTRIBUTEID", [childId].concat(AttributeUtil.getAllChildren(childId)), SqlBuilder.NOT_IN()); +} +else if (objectType) //if there's an objectType, it comes from the AttributeRelation entity (lookup for the attribute selection) +{ + translateName = true; + + var attributeIds = AttributeUtil.getPossibleAttributes(objectType, true, filteredIds, attributeCountObj); + + if (Utils.isEmpty(attributeIds)) + condition.noResult(); + else + condition.and("AB_ATTRIBUTE.AB_ATTRIBUTEID", attributeIds, SqlBuilder.IN()) + .and("AB_ATTRIBUTE.ATTRIBUTE_TYPE", AttributeTypes.THEME(), !themeObjectRowId ? SqlBuilder.NOT_EQUAL() : undefined); +} +else if (parentId) +{ + if (onlyFirstLevelChildren) + condition.and("AB_ATTRIBUTE.ATTRIBUTE_PARENT_ID", parentId); + else + { + condition.andIfSet("AB_ATTRIBUTE.AB_ATTRIBUTEID", AttributeUtil.getAllChildren(parentId), SqlBuilder.IN()); + translateName = true; + if(includeParentRecord) + condition.or("AB_ATTRIBUTE.AB_ATTRIBUTEID", parentId); + } +} +else +{ + fetchUsages = true; +} + +var filterCondition = new FilterSqlTranslator(vars.get("$local.filter"), "AB_ATTRIBUTE") + .addSpecialFieldConditionFn("USAGE_FILTER", function (pValue, pOperator) + { + var cond = newWhere(); + var subSelect = newSelect("1").from("AB_ATTRIBUTEUSAGE", "attrUse").where("attrUse.AB_ATTRIBUTE_ID = AB_ATTRIBUTE.AB_ATTRIBUTEID"); + + switch (pOperator) + { + case "EQUAL": + case "NOT_EQUAL": + subSelect.and(["AB_ATTRIBUTEUSAGE", "OBJECT_TYPE", "attrUse"], pValue); + case "ISNULL": + case "ISNOTNULL": + return cond.and(null, subSelect, pOperator == "NOT_EQUAL" || pOperator == "ISNULL" ? SqlBuilder.NOT_EXISTS() : SqlBuilder.EXISTS()); + } + return cond; + }) + .getSqlCondition(); +condition.andIfSet(filterCondition); + +var usageLoader = new AttributeUsageLoader(); +if (fetchUsages) + usageLoader.fetchUsages(condition); + +var attributes = newSelect([ + "AB_ATTRIBUTEID", + "ATTRIBUTE_PARENT_ID", + "ATTRIBUTE_NAME", + "ATTRIBUTE_ACTIVE", + "DROPDOWNDEFINITION", + "DROPDOWNFILTER", + "VALIDATIONPARAMETERS", + "SORTING", + "ATTRIBUTE_TYPE", + KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.attributeType(), "ATTRIBUTE_TYPE") + ]) + .from("AB_ATTRIBUTE") + .whereIfSet(condition) + .orderBy(["ATTRIBUTE_PARENT_ID", "SORTING", "ATTRIBUTE_NAME"]) + .table(); + +var nameResolver = new AttributeNameResolver(); +if (attributes.length !== 0) + nameResolver.fetchNames(translateName); + +var attributesById = new Map(); +attributes.forEach(function ([attributeId, parentId, simpleName, isActive, + dropDownDefinition, dropDownFilter, validationParameters, sorting, type, typeName]) +{ + attributesById.set(attributeId, [ + attributeId, + simpleName, + displaySimpleName ? nameResolver.getSimpleName(attributeId) : nameResolver.getFullName(attributeId), + parentId, + nameResolver.getFullName(parentId), + type, + typeName, + isActive, + sorting, + dropDownDefinition, + dropDownFilter, + validationParameters, + type != AttributeTypes.COMBOVALUE() ? usageLoader.getUsageSummary(attributeId) : "", + "usageFilter", + false + ]); +}); + +var resultTable = []; +do { + var oldSize = resultTable.length; + attributesById.forEach(function (row, id) + { + var parentId = row[3]; + //rows that are already in the result array are removed from the attributesById Map, so if the parentId is in that Map, + //the parent has not been added yet + if (!parentId || !attributesById.has(parentId)) + { + resultTable.push(row); + attributesById["delete"](id); + } + }); +} while (oldSize != resultTable.length); //stops the loop when no new items were added so that recursive relations between attributes don't cause an infinite loop + +result.object(resultTable); + + +function AttributeNameResolver () +{ + this.cache = new Map(); + this.nameData = new Map(); + this.fetchNames = function (pTranslateNames) + { + var allNames = newSelect(["AB_ATTRIBUTEID", "ATTRIBUTE_PARENT_ID", "ATTRIBUTE_NAME"]) + .from("AB_ATTRIBUTE") + .table(); + allNames.forEach(function ([attributeId, parentId, attributeName]) + { + this.nameData.set(attributeId, { + parentId: parentId, + name: pTranslateNames ? translate.text(attributeName) : attributeName + }); + }, this); + } + this.getSimpleName = function (pAttributeId) + { + if (this.nameData.has(pAttributeId)) + return this.nameData.get(pAttributeId).name; + return ""; + } + this.getFullName = function (pAttributeId) + { + if (!pAttributeId || !this.nameData.has(pAttributeId)) //if the id is not in this.nameData, it does not exist + return ""; + if (this.cache.has(pAttributeId)) + return this.cache.get(pAttributeId); + + var attributeData = this.nameData.get(pAttributeId); + var fullName = attributeData.name; + if (attributeData.parentId) + { + var parentName = this.getFullName(attributeData.parentId); + if (parentName) + fullName = parentName + " / " + fullName; + } + this.cache.set(pAttributeId, fullName); + return fullName; + } +} + +function AttributeUsageLoader () +{ + this.usageData = new Map(); + this.fetchUsages = function (pCondition) + { + var usages = newSelect(["AB_ATTRIBUTE_ID", "OBJECT_TYPE"]) + .from("AB_ATTRIBUTEUSAGE") + .join("AB_ATTRIBUTE", "AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID = AB_ATTRIBUTE.AB_ATTRIBUTEID") + .whereIfSet(pCondition) + .table(); + usages.forEach(function ([attributeId, objectType]) + { + if (this.usageData.has(attributeId)) + this.usageData.get(attributeId).push(objectType); + else + this.usageData.set(attributeId, [objectType]); + }, this); + } + this.getUsages = function (pAttributeId) + { + return this.usageData.get(pAttributeId) || []; + } + this.getUsageSummary = function (pAttributeId) + { + return this.getUsages(pAttributeId).map(function (usage) + { + return ContextUtils.getTitle(usage, true); + }).join(", "); + } } \ No newline at end of file diff --git a/entity/AuditLogHistory_entity/AuditLogHistory_entity.aod b/entity/AuditLogHistory_entity/AuditLogHistory_entity.aod index 4425b01ed72db74d1573848afc1b9473d5e3368a..e094807eb85da3bb7793033896583fb725108837 100644 --- a/entity/AuditLogHistory_entity/AuditLogHistory_entity.aod +++ b/entity/AuditLogHistory_entity/AuditLogHistory_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>AuditLogHistory_entity</name> <title>Audit Log</title> <majorModelMode>DISTRIBUTED</majorModelMode> diff --git a/entity/BulkMailAddRecipients_entity/BulkMailAddRecipients_entity.aod b/entity/BulkMailAddRecipients_entity/BulkMailAddRecipients_entity.aod index a43dd1134fefe62920ca5f7ec6941dba89da5cb8..63b472319fa68c5290688ac1587d01af22ded26b 100644 --- a/entity/BulkMailAddRecipients_entity/BulkMailAddRecipients_entity.aod +++ b/entity/BulkMailAddRecipients_entity/BulkMailAddRecipients_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>BulkMailAddRecipients_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/BulkMailAddRecipients_entity/documentation.adoc</documentation> @@ -8,10 +8,6 @@ <entityProvider> <name>#PROVIDER</name> </entityProvider> - <entityField> - <name>UID</name> - <state>EDITABLE</state> - </entityField> <entityField> <name>recipientCountMessage</name> <state>EDITABLE</state> @@ -39,10 +35,10 @@ <expose v="true" /> </entityParameter> <entityField> - <name>recipientContactIds</name> + <name>validContactIds</name> <description>the filtered contactIds (contactIds that are not already in the bulkmail and don't have a commrestriction)</description> <state>EDITABLE</state> - <valueProcess>%aditoprj%/entity/BulkMailAddRecipients_entity/entityfields/recipientcontactids/valueProcess.js</valueProcess> + <valueProcess>%aditoprj%/entity/BulkMailAddRecipients_entity/entityfields/validcontactids/valueProcess.js</valueProcess> </entityField> <entityActionField> <name>addRecipients</name> @@ -52,30 +48,25 @@ <state>DISABLED</state> <stateProcess>%aditoprj%/entity/BulkMailAddRecipients_entity/entityfields/addrecipients/stateProcess.js</stateProcess> </entityActionField> - <entityField> - <name>recipientCount</name> - <documentation>%aditoprj%/entity/BulkMailAddRecipients_entity/entityfields/recipientcount/documentation.adoc</documentation> - <state>EDITABLE</state> - <valueProcess>%aditoprj%/entity/BulkMailAddRecipients_entity/entityfields/recipientcount/valueProcess.js</valueProcess> - </entityField> <entityParameter> <name>ObjectType_param</name> <expose v="true" /> </entityParameter> <entityField> - <name>currentRecipients</name> - <documentation>%aditoprj%/entity/BulkMailAddRecipients_entity/entityfields/currentrecipients/documentation.adoc</documentation> + <name>currentRecipientCount</name> + <documentation>%aditoprj%/entity/BulkMailAddRecipients_entity/entityfields/currentrecipientcount/documentation.adoc</documentation> <title>Current Recipients</title> - <valueProcess>%aditoprj%/entity/BulkMailAddRecipients_entity/entityfields/currentrecipients/valueProcess.js</valueProcess> + <valueProcess>%aditoprj%/entity/BulkMailAddRecipients_entity/entityfields/currentrecipientcount/valueProcess.js</valueProcess> </entityField> <entityField> - <name>notAddedRecipients</name> + <name>notAddedCount</name> + <valueProcess>%aditoprj%/entity/BulkMailAddRecipients_entity/entityfields/notaddedcount/valueProcess.js</valueProcess> </entityField> <entityField> - <name>futureRecipients</name> - <documentation>%aditoprj%/entity/BulkMailAddRecipients_entity/entityfields/futurerecipients/documentation.adoc</documentation> + <name>futureRecipientCount</name> + <documentation>%aditoprj%/entity/BulkMailAddRecipients_entity/entityfields/futurerecipientcount/documentation.adoc</documentation> <title>Recipients after adding</title> - <valueProcess>%aditoprj%/entity/BulkMailAddRecipients_entity/entityfields/futurerecipients/valueProcess.js</valueProcess> + <valueProcess>%aditoprj%/entity/BulkMailAddRecipients_entity/entityfields/futurerecipientcount/valueProcess.js</valueProcess> </entityField> <entityProvider> <name>#PROVIDER_AGGREGATES</name> @@ -85,6 +76,10 @@ <name>ContactFilter_param</name> <expose v="true" /> </entityParameter> + <entityField> + <name>proposedContactIds</name> + <valueProcess>%aditoprj%/entity/BulkMailAddRecipients_entity/entityfields/proposedcontactids/valueProcess.js</valueProcess> + </entityField> </entityFields> <recordContainers> <datalessRecordContainer> diff --git a/entity/BulkMailAddRecipients_entity/entityfields/addrecipients/onActionProcess.js b/entity/BulkMailAddRecipients_entity/entityfields/addrecipients/onActionProcess.js index cce82d39abe4867c83b6b4289e6d5dfe284ace9a..d8057fbcaec0ce5c0094c723183b6d0538d0710c 100644 --- a/entity/BulkMailAddRecipients_entity/entityfields/addrecipients/onActionProcess.js +++ b/entity/BulkMailAddRecipients_entity/entityfields/addrecipients/onActionProcess.js @@ -1,7 +1,7 @@ import("Bulkmail_lib"); import("system.vars"); -var contactIds = JSON.parse(vars.getString("$field.recipientContactIds")); +var contactIds = JSON.parse(vars.getString("$field.validContactIds")); var bulkMailId = vars.get("$field.BULKMAIL_ID"); BulkMailUtils.addRecipients(bulkMailId, contactIds); diff --git a/entity/BulkMailAddRecipients_entity/entityfields/addrecipients/stateProcess.js b/entity/BulkMailAddRecipients_entity/entityfields/addrecipients/stateProcess.js index 361fb440599d3efccdfbb22747deae2b585fc3b0..8d4f43e10f0c76aaf98c0e64954bb2c5599015f4 100644 --- a/entity/BulkMailAddRecipients_entity/entityfields/addrecipients/stateProcess.js +++ b/entity/BulkMailAddRecipients_entity/entityfields/addrecipients/stateProcess.js @@ -1,9 +1,11 @@ +import("Util_lib"); import("system.neon"); import("system.result"); import("system.vars"); -var count = vars.getString("$field.recipientCount"); -if (count == "0" || !count || vars.get("$sys.validationerrors")) +var validContactIds = Utils.parseJSON(vars.get("$field.validContactIds")); + +if (Utils.isNullOrEmpty(validContactIds) || vars.get("$sys.validationerrors")) result.string(neon.COMPONENTSTATE_DISABLED); else result.string(neon.COMPONENTSTATE_EDITABLE); \ No newline at end of file diff --git a/entity/BulkMailAddRecipients_entity/entityfields/currentrecipients/documentation.adoc b/entity/BulkMailAddRecipients_entity/entityfields/currentrecipientcount/documentation.adoc similarity index 100% rename from entity/BulkMailAddRecipients_entity/entityfields/currentrecipients/documentation.adoc rename to entity/BulkMailAddRecipients_entity/entityfields/currentrecipientcount/documentation.adoc diff --git a/entity/BulkMailAddRecipients_entity/entityfields/currentrecipientcount/valueProcess.js b/entity/BulkMailAddRecipients_entity/entityfields/currentrecipientcount/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..8aa9feddbe80e3c8a1d0286c93cb784cb0158c52 --- /dev/null +++ b/entity/BulkMailAddRecipients_entity/entityfields/currentrecipientcount/valueProcess.js @@ -0,0 +1,11 @@ +import("system.result"); +import("system.vars"); +import("Sql_lib"); + +var currentCount = new SqlBuilder() + .selectCount() + .from("BULKMAILRECIPIENT") + .whereIfSet("BULKMAILRECIPIENT.BULKMAIL_ID", vars.get("$field.BULKMAIL_ID")) + .cell(true) || "0"; + +result.string(currentCount); \ No newline at end of file diff --git a/entity/BulkMailAddRecipients_entity/entityfields/currentrecipients/valueProcess.js b/entity/BulkMailAddRecipients_entity/entityfields/currentrecipients/valueProcess.js deleted file mode 100644 index ab684915b04cac155e1a7c5ef4e4f008443ab5fc..0000000000000000000000000000000000000000 --- a/entity/BulkMailAddRecipients_entity/entityfields/currentrecipients/valueProcess.js +++ /dev/null @@ -1,15 +0,0 @@ -import("system.logging"); -import("system.result"); -import("system.vars"); -import("Sql_lib"); - -var currentCount = newSelect("count(BULKMAILRECIPIENT.CONTACT_ID)") - .from("BULKMAILRECIPIENT") - .where("BULKMAILRECIPIENT.BULKMAIL_ID", vars.get("$field.BULKMAIL_ID")) - .cell() -if(currentCount) - result.string(currentCount) -else - result.string("0") - - diff --git a/entity/BulkMailAddRecipients_entity/entityfields/futurerecipients/documentation.adoc b/entity/BulkMailAddRecipients_entity/entityfields/futurerecipientcount/documentation.adoc similarity index 100% rename from entity/BulkMailAddRecipients_entity/entityfields/futurerecipients/documentation.adoc rename to entity/BulkMailAddRecipients_entity/entityfields/futurerecipientcount/documentation.adoc diff --git a/entity/BulkMailAddRecipients_entity/entityfields/futurerecipientcount/valueProcess.js b/entity/BulkMailAddRecipients_entity/entityfields/futurerecipientcount/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..afd4e40de1a73cfa8b96f4c937f413308fd4cc19 --- /dev/null +++ b/entity/BulkMailAddRecipients_entity/entityfields/futurerecipientcount/valueProcess.js @@ -0,0 +1,8 @@ +import("Util_lib"); +import("system.vars"); +import("system.result"); + +var currentCount = Number(vars.get("$field.currentRecipientCount")); +var validIds = Utils.parseJSON(vars.get("$field.validContactIds")) || []; + +result.string(currentCount + validIds.length); \ No newline at end of file diff --git a/entity/BulkMailAddRecipients_entity/entityfields/futurerecipients/valueProcess.js b/entity/BulkMailAddRecipients_entity/entityfields/futurerecipients/valueProcess.js deleted file mode 100644 index 9c50bb1b4d3e3e9076cff47ff37abfb2b665a600..0000000000000000000000000000000000000000 --- a/entity/BulkMailAddRecipients_entity/entityfields/futurerecipients/valueProcess.js +++ /dev/null @@ -1,9 +0,0 @@ -import("system.vars"); -import("system.result"); -import("system.eMath") - -var res = eMath.addInt(vars.get("$field.recipientCount"), vars.get("$field.currentRecipients")); -if(res) - result.string(res); -else - result.string(0); \ No newline at end of file diff --git a/entity/BulkMailAddRecipients_entity/entityfields/notaddedcount/valueProcess.js b/entity/BulkMailAddRecipients_entity/entityfields/notaddedcount/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..83d9b3c1ffd564ba0b8bc6c0b1c9dc7597f0a9ca --- /dev/null +++ b/entity/BulkMailAddRecipients_entity/entityfields/notaddedcount/valueProcess.js @@ -0,0 +1,8 @@ +import("system.result"); +import("Util_lib"); +import("system.vars"); + +var proposedIds = Utils.parseJSON(vars.get("$field.proposedContactIds")) || []; +var validIds = Utils.parseJSON(vars.get("$field.validContactIds")) || []; + +result.string(proposedIds.length - validIds.length); \ No newline at end of file diff --git a/entity/BulkMailAddRecipients_entity/entityfields/proposedcontactids/valueProcess.js b/entity/BulkMailAddRecipients_entity/entityfields/proposedcontactids/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..abc1e78c4e3211d5cbb9cfbb1440a276edc8f400 --- /dev/null +++ b/entity/BulkMailAddRecipients_entity/entityfields/proposedcontactids/valueProcess.js @@ -0,0 +1,17 @@ +import("Util_lib"); +import("FilterViewAction_lib"); +import("system.result"); +import("system.vars"); + +var bulkMailId = vars.get("$field.BULKMAIL_ID"); +var proposedRecipients = []; +if (bulkMailId) +{ + var contactIds = Utils.parseJSON(vars.get("$param.ContactIds_param")); + var contactFilter = vars.get("$param.ContactFilter_param"); + var context = vars.getString("$param.ObjectType_param"); + + proposedRecipients = FilterViewActionUtils.getUidsBySelectionOrFilter(context, contactIds, contactFilter); +} + +result.string(JSON.stringify(proposedRecipients)); \ No newline at end of file diff --git a/entity/BulkMailAddRecipients_entity/entityfields/recipientcontactids/valueProcess.js b/entity/BulkMailAddRecipients_entity/entityfields/recipientcontactids/valueProcess.js deleted file mode 100644 index 02d7fa1e679412972c3aca009bf79212db5b41e1..0000000000000000000000000000000000000000 --- a/entity/BulkMailAddRecipients_entity/entityfields/recipientcontactids/valueProcess.js +++ /dev/null @@ -1,24 +0,0 @@ -import("Util_lib"); -import("system.eMath"); -import("FilterViewAction_lib"); -import("system.result"); -import("Bulkmail_lib"); -import("Sql_lib"); -import("system.vars"); -import("system.neon"); - -var bulkMailId = vars.get("$field.BULKMAIL_ID"); -if (bulkMailId) -{ - var contactIds = Utils.parseJSON(vars.get("$param.ContactIds_param")); - var contactFilter = vars.get("$param.ContactFilter_param"); - var context = vars.getString("$param.ObjectType_param"); - - contactIds = FilterViewActionUtils.getUidsBySelectionOrFilter(context, contactIds, contactFilter); - - var recipients = BulkMailUtils.filterNewRecipients(bulkMailId, contactIds); - neon.setFieldValue("$field.notAddedRecipients", eMath.subInt(parseInt(contactIds.length), parseInt(recipients.length))); - result.string(JSON.stringify(recipients)); -} -else - result.string(null); \ No newline at end of file diff --git a/entity/BulkMailAddRecipients_entity/entityfields/recipientcount/documentation.adoc b/entity/BulkMailAddRecipients_entity/entityfields/recipientcount/documentation.adoc deleted file mode 100644 index cb66eaab85eed332b2f4d5e7c5e7bce70540b357..0000000000000000000000000000000000000000 --- a/entity/BulkMailAddRecipients_entity/entityfields/recipientcount/documentation.adoc +++ /dev/null @@ -1,6 +0,0 @@ -This field contains the count of the participants that can be added as string. -A value of null or empty string "" means that the count could not be determined (for example because no bulkmail was chosen). -A value of "0" means that the count could be determined but none of the participants can be added (for example because all selected participants are already in the bulkmail). -For example, a value of "12" means that 12 of the given participants can be added. - -This information is needed for disabling the action to proceed and to provide a message for the user. \ No newline at end of file diff --git a/entity/BulkMailAddRecipients_entity/entityfields/recipientcount/valueProcess.js b/entity/BulkMailAddRecipients_entity/entityfields/recipientcount/valueProcess.js deleted file mode 100644 index d04634f708b5331a305b800553ec8c5c9bd1b2fb..0000000000000000000000000000000000000000 --- a/entity/BulkMailAddRecipients_entity/entityfields/recipientcount/valueProcess.js +++ /dev/null @@ -1,11 +0,0 @@ -import("system.translate"); -import("system.result"); -import("system.vars"); - -var res = ""; -if (vars.get("$field.recipientContactIds")) -{ - res = JSON.parse(vars.getString("$field.recipientContactIds")).length; -} - -result.string(res); \ No newline at end of file diff --git a/entity/BulkMailAddRecipients_entity/entityfields/recipientcountmessage/valueProcess.js b/entity/BulkMailAddRecipients_entity/entityfields/recipientcountmessage/valueProcess.js index 80f08142f07db6851da182a44860374521000e27..67be7554841dc3d74cbef94a307675ee7e5b1c1d 100644 --- a/entity/BulkMailAddRecipients_entity/entityfields/recipientcountmessage/valueProcess.js +++ b/entity/BulkMailAddRecipients_entity/entityfields/recipientcountmessage/valueProcess.js @@ -1,22 +1,25 @@ +import("Util_lib"); import("system.translate"); import("system.result"); import("system.vars"); -var count = vars.get("$field.recipientCount") -var res = ""; -var resNotAdded = "\n\ -"; -if (count && !vars.get("$sys.validationerrors")) +var validIdCount = (Utils.parseJSON(vars.get("$field.validContactIds")) || []).length; +var message = ""; +if (!vars.get("$sys.validationerrors")) { - if (count == "0") - res = translate.text("No new recipients found that can be added to the bulk mail."); + if (validIdCount == 0) + { + message = translate.text("No new recipients found that can be added to the bulk mail."); + } else { - res = translate.withArguments("%0 new recipients will be added to the bulk mail.", [count]); - var notAdded = vars.get("$field.notAddedRecipients") + message = translate.withArguments("%0 new recipients will be added to the bulk mail.", [validIdCount]); + var notAdded = vars.get("$field.notAddedCount") if (notAdded > 0) - resNotAdded += translate.withArguments("%0 of the chosen records are already recipients or don't have an e-mail set", [notAdded]); + { + message += "\n" + translate.withArguments("%0 of the chosen records are already recipients or don't have an e-mail set", [notAdded]); + } } } -result.string(res + resNotAdded); \ No newline at end of file +result.string(message); \ No newline at end of file diff --git a/entity/BulkMailAddRecipients_entity/entityfields/validcontactids/valueProcess.js b/entity/BulkMailAddRecipients_entity/entityfields/validcontactids/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..2df0a164747ae867eb2c6a645c4be5625ba9d21c --- /dev/null +++ b/entity/BulkMailAddRecipients_entity/entityfields/validcontactids/valueProcess.js @@ -0,0 +1,14 @@ +import("Util_lib"); +import("system.result"); +import("Bulkmail_lib"); +import("system.vars"); + +var bulkMailId = vars.get("$field.BULKMAIL_ID"); +var validRecipients = []; +if (bulkMailId) +{ + var proposedRecipients = Utils.parseJSON(vars.get("$field.proposedContactIds")); + validRecipients = BulkMailUtils.filterNewRecipients(bulkMailId, proposedRecipients); +} + +result.string(JSON.stringify(validRecipients)); \ No newline at end of file diff --git a/entity/BulkMailAnalysisBounceChart_entity/BulkMailAnalysisBounceChart_entity.aod b/entity/BulkMailAnalysisBounceChart_entity/BulkMailAnalysisBounceChart_entity.aod new file mode 100644 index 0000000000000000000000000000000000000000..2eaefaa39687a80562978217a3acd4d63a897e41 --- /dev/null +++ b/entity/BulkMailAnalysisBounceChart_entity/BulkMailAnalysisBounceChart_entity.aod @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> + <name>BulkMailAnalysisBounceChart_entity</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <recordContainer>jDito</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + </entityProvider> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityField> + <name>UID</name> + </entityField> + <entityField> + <name>count</name> + </entityField> + <entityField> + <name>description</name> + </entityField> + <entityParameter> + <name>BulkMailId_param</name> + <expose v="true" /> + </entityParameter> + </entityFields> + <recordContainers> + <jDitoRecordContainer> + <name>jDito</name> + <jDitoRecordAlias>Data_alias</jDitoRecordAlias> + <contentProcess>%aditoprj%/entity/BulkMailAnalysisBounceChart_entity/recordcontainers/jdito/contentProcess.js</contentProcess> + <recordFieldMappings> + <jDitoRecordFieldMapping> + <name>UID.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>description.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>count.value</name> + </jDitoRecordFieldMapping> + </recordFieldMappings> + </jDitoRecordContainer> + </recordContainers> +</entity> diff --git a/entity/BulkMailAnalysisBounceChart_entity/recordcontainers/jdito/contentProcess.js b/entity/BulkMailAnalysisBounceChart_entity/recordcontainers/jdito/contentProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..25068e3fa468570fc7606789d3e681543fed7ba3 --- /dev/null +++ b/entity/BulkMailAnalysisBounceChart_entity/recordcontainers/jdito/contentProcess.js @@ -0,0 +1,38 @@ +import("system.translate"); +import("Keyword_lib"); +import("KeywordData_lib"); +import("Sql_lib"); +import("system.result"); +import("system.vars"); +import("KeywordRegistry_basic"); +import("BulkmailAnalysis_lib") + +var descriptions = ["Soft","Hard"]; + +var bulkMailAnalysisSql = new BulkMailAnalysisSql() + .setSelects([ + BulkMailAnalysisSql.countSelects.SOFTBOUNCECOUNT, + BulkMailAnalysisSql.countSelects.HARDBOUNCECOUNT + ]); + +if (vars.get("$param.BulkMailId_param")) + bulkMailAnalysisSql.bulkMailId(vars.get("$param.BulkMailId_param")); + + + + +var amounts = bulkMailAnalysisSql.buildSelect().arrayRow(); +var amountSum = amounts.reduce(function(sum, amount) +{ + return sum + Number(amount); +}, 0); +var res = []; +if (amountSum != 0) +{ + res = descriptions.map(function(description,position) + { + return [description, translate.text(description), amounts[position]]; + }); +} + +result.object(res); \ No newline at end of file diff --git a/entity/BulkMailAnalysisOpeningHourChart_entity/BulkMailAnalysisOpeningHourChart_entity.aod b/entity/BulkMailAnalysisOpeningHourChart_entity/BulkMailAnalysisOpeningHourChart_entity.aod new file mode 100644 index 0000000000000000000000000000000000000000..4e594c6e91fd7cf29465e7aec933551e970bbe7a --- /dev/null +++ b/entity/BulkMailAnalysisOpeningHourChart_entity/BulkMailAnalysisOpeningHourChart_entity.aod @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> + <name>BulkMailAnalysisOpeningHourChart_entity</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <recordContainer>jDito</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + </entityProvider> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityField> + <name>UID</name> + </entityField> + <entityField> + <name>X</name> + </entityField> + <entityField> + <name>Y</name> + </entityField> + <entityField> + <name>CATEGORY</name> + <contentType>TEXT</contentType> + </entityField> + <entityParameter> + <name>BulkMailId_param</name> + <expose v="true" /> + </entityParameter> + </entityFields> + <recordContainers> + <jDitoRecordContainer> + <name>jDito</name> + <jDitoRecordAlias>Data_alias</jDitoRecordAlias> + <contentProcess>%aditoprj%/entity/BulkMailAnalysisOpeningHourChart_entity/recordcontainers/jdito/contentProcess.js</contentProcess> + <recordFieldMappings> + <jDitoRecordFieldMapping> + <name>UID.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>CATEGORY.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>CATEGORY.displayValue</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>X.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>X.displayValue</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>Y.value</name> + </jDitoRecordFieldMapping> + </recordFieldMappings> + </jDitoRecordContainer> + </recordContainers> +</entity> diff --git a/entity/BulkMailAnalysisOpeningHourChart_entity/recordcontainers/jdito/contentProcess.js b/entity/BulkMailAnalysisOpeningHourChart_entity/recordcontainers/jdito/contentProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..ffbc6de0af9476c659c0a75a25da17886fece047 --- /dev/null +++ b/entity/BulkMailAnalysisOpeningHourChart_entity/recordcontainers/jdito/contentProcess.js @@ -0,0 +1,40 @@ +import("system.translate"); +import("system.result"); +import("system.db"); +import("Sql_lib"); +import("system.vars"); +import("system.datetime"); + +var dataArray = new Array(24).fill(0); + +newSelect("WEBLINK_CLICK.DATE_OPENED") +.from("MAIL_RUN") +.join("MAIL_LOG","MAIL_LOG.MAIL_RUN_ID = MAIL_RUN.MAIL_RUNID") +.join("WEBLINK_CLICK","MAIL_LOG.OPENER_LINK_CLICK_ID = WEBLINK_CLICK.WEBLINK_CLICKID") +.where("MAIL_RUN.TESTRUN",0) +.and("MAIL_RUN.OBJECT_TYPE","bulkmail") +.and("MAIL_LOG.OPENER_LINK_CLICK_ID is not null") +.andIfSet("MAIL_RUN.OBJECT_ROWID", "$param.BulkMailId_param") +.arrayColumn() +.forEach(function (pDate) +{ + var hour = new Date(datetime.localTimestamp(pDate)).getHours(); + dataArray[hour]++; +}); + +var categories = { + OPENER : "OPENER" +}; +var records = dataArray.map(function (clicksPerHour, i) +{ + return [ + i, + categories.OPENER, + translate.text("Openers"), + i, + i.toString().padStart(2,0), + clicksPerHour || 0 + ]; +}) + +result.object(records); \ No newline at end of file diff --git a/entity/BulkMailAnalysisStatusFunnelChart_entity/BulkMailAnalysisStatusFunnelChart_entity.aod b/entity/BulkMailAnalysisStatusFunnelChart_entity/BulkMailAnalysisStatusFunnelChart_entity.aod new file mode 100644 index 0000000000000000000000000000000000000000..550306ae0d3d97d30affe1e732a7d8e1bec22a9e --- /dev/null +++ b/entity/BulkMailAnalysisStatusFunnelChart_entity/BulkMailAnalysisStatusFunnelChart_entity.aod @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> + <name>BulkMailAnalysisStatusFunnelChart_entity</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <recordContainer>jDito</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + </entityProvider> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityField> + <name>UID</name> + </entityField> + <entityField> + <name>statusDescription</name> + </entityField> + <entityField> + <name>statusCount</name> + </entityField> + <entityParameter> + <name>BulkMailId_param</name> + <expose v="true" /> + </entityParameter> + </entityFields> + <recordContainers> + <jDitoRecordContainer> + <name>jDito</name> + <jDitoRecordAlias>Data_alias</jDitoRecordAlias> + <contentProcess>%aditoprj%/entity/BulkMailAnalysisStatusFunnelChart_entity/recordcontainers/jdito/contentProcess.js</contentProcess> + <recordFieldMappings> + <jDitoRecordFieldMapping> + <name>UID.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>statusDescription.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>statusCount.value</name> + </jDitoRecordFieldMapping> + </recordFieldMappings> + </jDitoRecordContainer> + </recordContainers> +</entity> diff --git a/entity/BulkMailAnalysisStatusFunnelChart_entity/recordcontainers/jdito/contentProcess.js b/entity/BulkMailAnalysisStatusFunnelChart_entity/recordcontainers/jdito/contentProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..4fead50d350a01a40409b6a030522ee0f94993da --- /dev/null +++ b/entity/BulkMailAnalysisStatusFunnelChart_entity/recordcontainers/jdito/contentProcess.js @@ -0,0 +1,33 @@ +import("system.translate"); +import("Keyword_lib"); +import("KeywordData_lib"); +import("Sql_lib"); +import("system.result"); +import("system.vars"); +import("KeywordRegistry_basic"); +import("BulkmailAnalysis_lib") + +var statusArray = ["Recipients","Received","Openers","Klicks","Unsubscribes"]; + +var bulkMailAnalysisSql = new BulkMailAnalysisSql() + .setSelects([ + BulkMailAnalysisSql.countSelects.SENDCOUNT, + BulkMailAnalysisSql.countSelects.RECEIVEDCOUNT, + BulkMailAnalysisSql.countSelects.OPENERCOUNT, + BulkMailAnalysisSql.countSelects.UNIQUECLICKCOUNT, + BulkMailAnalysisSql.countSelects.UNSUBSCRIBECOUNT + ]); + +if (vars.get("$param.BulkMailId_param")) + bulkMailAnalysisSql.bulkMailId(vars.get("$param.BulkMailId_param")); + + + + +var amounts = bulkMailAnalysisSql.buildSelect().arrayRow(); + +var res = statusArray.map(function(status,position){ + return [status,translate.text(status),amounts[position]] +}); + +result.object(res); \ No newline at end of file diff --git a/entity/BulkMailAnalysis_entity/BulkMailAnalysis_entity.aod b/entity/BulkMailAnalysis_entity/BulkMailAnalysis_entity.aod new file mode 100644 index 0000000000000000000000000000000000000000..6a871243c12662fd9b2d97132e5181704d86cb82 --- /dev/null +++ b/entity/BulkMailAnalysis_entity/BulkMailAnalysis_entity.aod @@ -0,0 +1,83 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> + <name>BulkMailAnalysis_entity</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <documentation>%aditoprj%/entity/BulkMailAnalysis_entity/documentation.adoc</documentation> + <recordContainer>jDito</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + </entityProvider> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityField> + <name>clickRate</name> + <title>Clicks</title> + <displayValueProcess>%aditoprj%/entity/BulkMailAnalysis_entity/entityfields/clickrate/displayValueProcess.js</displayValueProcess> + </entityField> + <entityField> + <name>openerRate</name> + <title>Openers</title> + <displayValueProcess>%aditoprj%/entity/BulkMailAnalysis_entity/entityfields/openerrate/displayValueProcess.js</displayValueProcess> + </entityField> + <entityField> + <name>uniqueClickRate</name> + <title>Unique Clicks</title> + <displayValueProcess>%aditoprj%/entity/BulkMailAnalysis_entity/entityfields/uniqueclickrate/displayValueProcess.js</displayValueProcess> + </entityField> + <entityField> + <name>deliveryRate</name> + <title>Received</title> + <displayValueProcess>%aditoprj%/entity/BulkMailAnalysis_entity/entityfields/deliveryrate/displayValueProcess.js</displayValueProcess> + </entityField> + <entityField> + <name>bounceRate</name> + <title>Bounces</title> + <displayValueProcess>%aditoprj%/entity/BulkMailAnalysis_entity/entityfields/bouncerate/displayValueProcess.js</displayValueProcess> + </entityField> + <entityField> + <name>UID</name> + </entityField> + <entityField> + <name>unsubscribeRate</name> + <title>Unsubscribes</title> + <displayValueProcess>%aditoprj%/entity/BulkMailAnalysis_entity/entityfields/unsubscriberate/displayValueProcess.js</displayValueProcess> + </entityField> + <entityField> + <name>deviceType</name> + <title>Device Type</title> + </entityField> + <entityField> + <name>deviceTypeAmount</name> + </entityField> + <entityParameter> + <name>BulkMailId_param</name> + <expose v="true" /> + </entityParameter> + </entityFields> + <recordContainers> + <jDitoRecordContainer> + <name>jDito</name> + <jDitoRecordAlias>Data_alias</jDitoRecordAlias> + <isPageable v="false" /> + <isFilterable v="false" /> + <contentProcess>%aditoprj%/entity/BulkMailAnalysis_entity/recordcontainers/jdito/contentProcess.js</contentProcess> + <recordFieldMappings> + <jDitoRecordFieldMapping> + <name>UID.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>deviceType.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>deviceType.displayValue</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>deviceTypeAmount.value</name> + </jDitoRecordFieldMapping> + </recordFieldMappings> + </jDitoRecordContainer> + </recordContainers> +</entity> diff --git a/entity/BulkMailAnalysis_entity/documentation.adoc b/entity/BulkMailAnalysis_entity/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..6aed8e99434a5d9a4a0a2dcc0991b3c95f391cbf --- /dev/null +++ b/entity/BulkMailAnalysis_entity/documentation.adoc @@ -0,0 +1,3 @@ +== Bulkmail Analyses == + +This entity provides analyses to display different things of all bulkmail. \ No newline at end of file diff --git a/entity/BulkMailAnalysis_entity/entityfields/bouncerate/displayValueProcess.js b/entity/BulkMailAnalysis_entity/entityfields/bouncerate/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..15ae0607aa82ec94271dda16ad95f010d774a756 --- /dev/null +++ b/entity/BulkMailAnalysis_entity/entityfields/bouncerate/displayValueProcess.js @@ -0,0 +1,22 @@ +import("Sql_lib"); +import("system.result"); +import("system.vars"); +import("KeywordRegistry_basic"); +import("BulkmailAnalysis_lib"); + + +var bulkMailAnalysisSql = new BulkMailAnalysisSql() +.setSelects([ + BulkMailAnalysisSql.countSelects.RECEIVEDCOUNT, + BulkMailAnalysisSql.countSelects.BOUNCECOUNT +]).buildSelect(); + + +var [deliveredMails, bounces] = bulkMailAnalysisSql.arrayRow(); +var ratio = 0; +if (deliveredMails != 0 && bounces != 0) +{ + ratio = Number(bounces) / Number(deliveredMails); +} + +result.string(bounces + " - " + (ratio * 100).toFixed(2) + "%"); diff --git a/entity/BulkMailAnalysis_entity/entityfields/clickrate/displayValueProcess.js b/entity/BulkMailAnalysis_entity/entityfields/clickrate/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..e4696f22094e96468b894f3afef24e78efd31349 --- /dev/null +++ b/entity/BulkMailAnalysis_entity/entityfields/clickrate/displayValueProcess.js @@ -0,0 +1,21 @@ +import("BulkmailAnalysis_lib"); +import("Sql_lib"); +import("system.result"); +import("system.vars"); +import("KeywordRegistry_basic"); + + +bulkMailAnalysisSql = new BulkMailAnalysisSql() +.setSelects([ + BulkMailAnalysisSql.countSelects.RECEIVEDCOUNT, + BulkMailAnalysisSql.countSelects.CLICKCOUNT +]).buildSelect(); + +var [deliveredMails, clicks] = bulkMailAnalysisSql.arrayRow(); +var ratio = 0; +if (deliveredMails != 0 && clicks != 0) +{ + ratio = Number(clicks) / Number(deliveredMails); +} + +result.string(clicks + " - " + (ratio * 100).toFixed(2) + "%"); diff --git a/entity/BulkMailAnalysis_entity/entityfields/deliveryrate/displayValueProcess.js b/entity/BulkMailAnalysis_entity/entityfields/deliveryrate/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..2808760ff068688c22ec0d727d845492793d5c04 --- /dev/null +++ b/entity/BulkMailAnalysis_entity/entityfields/deliveryrate/displayValueProcess.js @@ -0,0 +1,21 @@ +import("BulkmailAnalysis_lib"); +import("Sql_lib"); +import("system.result"); +import("system.vars"); +import("KeywordRegistry_basic"); + + +var bulkMailAnalysisSql = new BulkMailAnalysisSql() +.setSelects([ + BulkMailAnalysisSql.countSelects.RECEIVEDCOUNT, + BulkMailAnalysisSql.countSelects.SENDCOUNT +]).buildSelect(); + +var [deliveredMails, sentMails] = bulkMailAnalysisSql.arrayRow(); +var ratio = 0; +if (deliveredMails != 0 && sentMails != 0) +{ + ratio = Number(deliveredMails) / Number(sentMails); +} + +result.string(deliveredMails + " - " + (ratio * 100).toFixed(2) + "%"); diff --git a/entity/BulkMailAnalysis_entity/entityfields/openerrate/displayValueProcess.js b/entity/BulkMailAnalysis_entity/entityfields/openerrate/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..a4794fd6796a2dfb30348def4c6ad13052e882bc --- /dev/null +++ b/entity/BulkMailAnalysis_entity/entityfields/openerrate/displayValueProcess.js @@ -0,0 +1,21 @@ +import("BulkmailAnalysis_lib"); +import("Sql_lib"); +import("system.result"); +import("system.vars"); +import("KeywordRegistry_basic"); + + +bulkMailAnalysisSql = new BulkMailAnalysisSql() +.setSelects([ + BulkMailAnalysisSql.countSelects.RECEIVEDCOUNT, + BulkMailAnalysisSql.countSelects.OPENERCOUNT +]).buildSelect(); + +var [deliveredMails, openers] = bulkMailAnalysisSql.arrayRow(); +var ratio = 0; +if (deliveredMails != 0 && openers != 0) +{ + ratio = Number(openers) / Number(deliveredMails); +} + +result.string(openers + " - " + (ratio * 100).toFixed(2) + "%"); diff --git a/entity/BulkMailAnalysis_entity/entityfields/uniqueclickrate/displayValueProcess.js b/entity/BulkMailAnalysis_entity/entityfields/uniqueclickrate/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..6d09570bfd1c08934c03ee2b2a301b108af8c039 --- /dev/null +++ b/entity/BulkMailAnalysis_entity/entityfields/uniqueclickrate/displayValueProcess.js @@ -0,0 +1,21 @@ +import("BulkmailAnalysis_lib"); +import("Sql_lib"); +import("system.result"); +import("system.vars"); +import("KeywordRegistry_basic"); + + +bulkMailAnalysisSql = new BulkMailAnalysisSql() +.setSelects([ + BulkMailAnalysisSql.countSelects.RECEIVEDCOUNT, + BulkMailAnalysisSql.countSelects.UNIQUECLICKCOUNT +]).buildSelect(); + +var [deliveredMails, uniqueClicks] = bulkMailAnalysisSql.arrayRow(); +var ratio = 0; +if (deliveredMails != 0 && uniqueClicks != 0) +{ + ratio = Number(uniqueClicks) / Number(deliveredMails); +} + +result.string(uniqueClicks + " - " + (ratio * 100).toFixed(2) + "%"); diff --git a/entity/BulkMailAnalysis_entity/entityfields/unsubscriberate/displayValueProcess.js b/entity/BulkMailAnalysis_entity/entityfields/unsubscriberate/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..aa8d03ef114c7c10ef8fdd830ec352bd3fbe4742 --- /dev/null +++ b/entity/BulkMailAnalysis_entity/entityfields/unsubscriberate/displayValueProcess.js @@ -0,0 +1,21 @@ +import("BulkmailAnalysis_lib"); +import("Sql_lib"); +import("system.result"); +import("system.vars"); +import("KeywordRegistry_basic"); + + +bulkMailAnalysisSql = new BulkMailAnalysisSql() +.setSelects([ + BulkMailAnalysisSql.countSelects.RECEIVEDCOUNT, + BulkMailAnalysisSql.countSelects.UNSUBSCRIBECOUNT +]).buildSelect(); + +var [deliveredMails, unsubscribes] = bulkMailAnalysisSql.arrayRow(); +var ratio = 0; +if (deliveredMails != 0 && unsubscribes != 0) +{ + ratio = Number(unsubscribes) / Number(deliveredMails); +} + +result.string(unsubscribes + " - " + (ratio * 100).toFixed(2) + "%"); \ No newline at end of file diff --git a/entity/BulkMailAnalysis_entity/recordcontainers/jdito/contentProcess.js b/entity/BulkMailAnalysis_entity/recordcontainers/jdito/contentProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..4c401cd51d03440549adf460ba5cff35e29faa5c --- /dev/null +++ b/entity/BulkMailAnalysis_entity/recordcontainers/jdito/contentProcess.js @@ -0,0 +1,30 @@ +import("Keyword_lib"); +import("KeywordData_lib"); +import("Sql_lib"); +import("system.result"); +import("system.vars"); +import("KeywordRegistry_basic"); + + +var clickSubsql = newSelect([ + "case when WEBLINK_CLICK.DEVICE_TYPE = '"+$KeywordRegistry.deviceType$tablet()+"' then '"+$KeywordRegistry.deviceType$mobile()+"' else WEBLINK_CLICK.DEVICE_TYPE end as DEVICE_TYPE", + "WEBLINK_CLICK.MAIL_LOG_ID", +]) +.from("WEBLINK_CLICK") +.where("WEBLINK_CLICK.DEVICE_TYPE",[$KeywordRegistry.deviceType$desktop(),$KeywordRegistry.deviceType$tablet(),$KeywordRegistry.deviceType$mobile()]) +.toString(); + +var sql = newSelect([ + "WEBLINK_CLICK.DEVICE_TYPE", + "WEBLINK_CLICK.DEVICE_TYPE", + KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.deviceType(), "WEBLINK_CLICK.DEVICE_TYPE"), + "count(WEBLINK_CLICK.DEVICE_TYPE)" +]) +.from("( "+ clickSubsql+" ) as WEBLINK_CLICK") +.join("MAIL_LOG","WEBLINK_CLICK.MAIL_LOG_ID = MAIL_LOG.MAIL_LOGID") +.join("MAIL_RUN","MAIL_LOG.MAIL_RUN_ID = MAIL_RUN.MAIL_RUNID") +.where("MAIL_RUN.TESTRUN",0) +.groupBy("WEBLINK_CLICK.DEVICE_TYPE") +.andIfSet("MAIL_RUN.OBJECT_ROWID", "$param.BulkMailId_param"); + +result.object(sql.table()); \ No newline at end of file diff --git a/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod b/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod index 1d001090085c21d4535df8e8b11fbd770655ad08..7f856b4de39b2ae6cb730eeec8cc620eef1f0b79 100644 --- a/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod +++ b/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>BulkMailRecipient_entity</name> <title>Recipient</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -23,6 +23,7 @@ <consumer>Contacts</consumer> <linkedContextProcess>%aditoprj%/entity/BulkMailRecipient_entity/entityfields/contact_id/linkedContextProcess.js</linkedContextProcess> <mandatory v="true" /> + <onValueChange>%aditoprj%/entity/BulkMailRecipient_entity/entityfields/contact_id/onValueChange.js</onValueChange> <onValidation>%aditoprj%/entity/BulkMailRecipient_entity/entityfields/contact_id/onValidation.js</onValidation> </entityField> <entityField> @@ -38,14 +39,6 @@ <targetContextField>TARGETCONTEXT</targetContextField> <targetIdField>CONTACT_ID</targetIdField> <documentation>%aditoprj%/entity/BulkMailRecipient_entity/entityfields/bulkmailrecipients/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>575e04ed-14aa-456c-8236-0bd284b1315f</name> - <entityName>BulkMail_entity</entityName> - <fieldName>Recipients</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityParameter> <name>BulkMailId_param</name> @@ -82,8 +75,8 @@ <entityField> <name>EMAIL_ADDRESS</name> <title>Email</title> - <consumer>EmailAdresses</consumer> - <textInputAllowed v="true" /> + <dropDownProcess>%aditoprj%/entity/BulkMailRecipient_entity/entityfields/email_address/dropDownProcess.js</dropDownProcess> + <textInputAllowed v="false" /> <valueProcess>%aditoprj%/entity/BulkMailRecipient_entity/entityfields/email_address/valueProcess.js</valueProcess> <displayValueProcess>%aditoprj%/entity/BulkMailRecipient_entity/entityfields/email_address/displayValueProcess.js</displayValueProcess> </entityField> @@ -108,7 +101,7 @@ <state>READONLY</state> </entityField> <entityField> - <name>HASCOMMRESTRICTION</name> + <name>HASCOMMUNICATIONREJECTION</name> <title>Advertising ban</title> </entityField> <entityActionGroup> @@ -116,6 +109,7 @@ <children> <entityActionField> <name>removeWithCommRestriction</name> + <title>Remove recipients with communication rejection</title> <onActionProcess>%aditoprj%/entity/BulkMailRecipient_entity/entityfields/recipientactions/children/removewithcommrestriction/onActionProcess.js</onActionProcess> <isObjectAction v="false" /> <iconId>VAADIN:BAN</iconId> @@ -152,6 +146,61 @@ <name>#PROVIDER_AGGREGATES</name> <useAggregates v="true" /> </entityProvider> + <entityField> + <name>IS_TEST_RECIPIENT</name> + <title>Test</title> + <contentType>BOOLEAN</contentType> + <valueProcess>%aditoprj%/entity/BulkMailRecipient_entity/entityfields/is_test_recipient/valueProcess.js</valueProcess> + </entityField> + <entityActionGroup> + <name>testRunActions</name> + <title>Test Run Actions</title> + <children> + <entityActionField> + <name>setTestRecipient</name> + <title>Use for test run</title> + <onActionProcess>%aditoprj%/entity/BulkMailRecipient_entity/entityfields/testrunactions/children/settestrecipient/onActionProcess.js</onActionProcess> + <isObjectAction v="false" /> + </entityActionField> + <entityActionField> + <name>removeTestRecipient</name> + <title>Don't use for test run</title> + <onActionProcess>%aditoprj%/entity/BulkMailRecipient_entity/entityfields/testrunactions/children/removetestrecipient/onActionProcess.js</onActionProcess> + <isObjectAction v="false" /> + </entityActionField> + </children> + </entityActionGroup> + <entityParameter> + <name>ExcludeCommunicationRejecting_param</name> + <expose v="true" /> + </entityParameter> + <entityParameter> + <name>ExcludedStatus_param</name> + <expose v="true" /> + </entityParameter> + <entityProvider> + <name>RecipientsToBeMailed</name> + <children> + <entityParameter> + <name>ExcludedStatus_param</name> + <valueProcess>%aditoprj%/entity/BulkMailRecipient_entity/entityfields/recipientstobemailed/children/excludedstatus_param/valueProcess.js</valueProcess> + <expose v="false" /> + </entityParameter> + <entityParameter> + <name>ExcludeCommunicationRejecting_param</name> + <valueProcess>%aditoprj%/entity/BulkMailRecipient_entity/entityfields/recipientstobemailed/children/excludecommunicationrejecting_param/valueProcess.js</valueProcess> + <expose v="false" /> + <title></title> + </entityParameter> + </children> + </entityProvider> + <entityParameter> + <name>IsTestMail_param</name> + <expose v="true" /> + </entityParameter> + <entityParameter> + <name>ExcludeBlacklisted_param</name> + </entityParameter> </entityFields> <recordContainers> <dbRecordContainer> @@ -208,13 +257,10 @@ <name>CONTACT_ID.displayValue</name> <expression>%aditoprj%/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js</expression> </dbRecordFieldMapping> - <dbRecordFieldMapping> - <name>HASCOMMRESTRICTION.value</name> - <expression>%aditoprj%/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/hascommrestriction.value/expression.js</expression> - </dbRecordFieldMapping> <dbRecordFieldMapping> <name>EMAIL_ADDRESS.value</name> <recordfield>BULKMAILRECIPIENT.EMAIL_ADDRESS</recordfield> + <isFilterable v="true" /> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>PROBLEM.value</name> @@ -224,6 +270,14 @@ <name>PROBLEM.displayValue</name> <expression>%aditoprj%/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/problem.displayvalue/expression.js</expression> </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>IS_TEST_RECIPIENT.value</name> + <recordfield>BULKMAILRECIPIENT.IS_TEST_RECIPIENT</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>HASCOMMUNICATIONREJECTION.value</name> + <expression>%aditoprj%/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/hascommunicationrejection.value/expression.js</expression> + </dbRecordFieldMapping> </recordFieldMappings> <linkInformation> <linkInformation> diff --git a/entity/BulkMailRecipient_entity/entityfields/contact_id/onValueChange.js b/entity/BulkMailRecipient_entity/entityfields/contact_id/onValueChange.js new file mode 100644 index 0000000000000000000000000000000000000000..07d0537e1ea23ebabb8028a07f3da9c56fa8bb48 --- /dev/null +++ b/entity/BulkMailRecipient_entity/entityfields/contact_id/onValueChange.js @@ -0,0 +1,9 @@ +import("Communication_lib"); +import("system.neon"); +import("system.vars"); + +var contactId = vars.get("$local.value"); +if(contactId != "") +{ + neon.setFieldValue("$field.EMAIL_ADDRESS",CommUtil.getStandardMail(contactId)); +} \ No newline at end of file diff --git a/entity/BulkMailRecipient_entity/entityfields/email_address/dropDownProcess.js b/entity/BulkMailRecipient_entity/entityfields/email_address/dropDownProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..f44ecd046feca6d4166dd0b200a747c7bffa9ee4 --- /dev/null +++ b/entity/BulkMailRecipient_entity/entityfields/email_address/dropDownProcess.js @@ -0,0 +1,20 @@ +import("Communication_lib"); +import("system.result"); +import("system.vars"); +import("Sql_lib"); + +var contactId = vars.get("$field.CONTACT_ID"); + +if (contactId) +{ + var emailAddresses = new SqlBuilder().selectDistinct(["COMMUNICATION.ADDR","COMMUNICATION.ADDR"]) + .from("COMMUNICATION") + .where("COMMUNICATION.CONTACT_ID",contactId) + .and("COMMUNICATION.MEDIUM_ID",CommUtil.getMediumIdsByCategory("EMAIL"),SqlBuilder.IN()) + .table(); + result.object(emailAddresses); +} +else +{ + result.object([]) +} diff --git a/entity/BulkMailRecipient_entity/entityfields/icon/colorProcess.js b/entity/BulkMailRecipient_entity/entityfields/icon/colorProcess.js index f4a5d6a797f85b33b0d1d819d44e0015a28d24c9..32b81b7db33e5508f206cc74db74609c9adae950 100644 --- a/entity/BulkMailRecipient_entity/entityfields/icon/colorProcess.js +++ b/entity/BulkMailRecipient_entity/entityfields/icon/colorProcess.js @@ -2,5 +2,5 @@ import("system.vars"); import("system.result"); import("system.neon"); -if (vars.get("$field.HASCOMMRESTRICTION") == "true" || !vars.get("$field.EMAIL_ADDRESS")) +if (vars.get("$field.HASCOMMUNICATIONREJECTION") == "true" || !vars.get("$field.EMAIL_ADDRESS")) result.string(neon.PRIORITY_HIGH_COLOR); \ No newline at end of file diff --git a/entity/BulkMailRecipient_entity/entityfields/icon/valueProcess.js b/entity/BulkMailRecipient_entity/entityfields/icon/valueProcess.js index c67e7c5712da325df0f23f47eee957ce28a3ed54..9c601f430b9bc4dec127fcc3e36e2cd6b9be2cf9 100644 --- a/entity/BulkMailRecipient_entity/entityfields/icon/valueProcess.js +++ b/entity/BulkMailRecipient_entity/entityfields/icon/valueProcess.js @@ -1,10 +1,12 @@ +import("Util_lib"); import("system.vars"); import("system.result"); import("Contact_lib"); var type = ContactUtils.getContactTypeByPersOrg(vars.get("$field.PERSON_ID"), vars.get("$field.ORGANISATION_ID")); +var hasCommunicationRejection = Utils.toBoolean(vars.get("$field.HASCOMMUNICATIONREJECTION")); var icon; -if (vars.get("$field.HASCOMMRESTRICTION") == "true") +if (hasCommunicationRejection) icon = "VAADIN:BAN"; else if (type == 1) icon = "VAADIN:BUILDING"; diff --git a/entity/Classification_entity/entityfields/classificationtypeid/valueProcess.js b/entity/BulkMailRecipient_entity/entityfields/is_test_recipient/valueProcess.js similarity index 66% rename from entity/Classification_entity/entityfields/classificationtypeid/valueProcess.js rename to entity/BulkMailRecipient_entity/entityfields/is_test_recipient/valueProcess.js index 2bccd5eb7fbb2311971da0e6ae2ed3b56ed21268..a435bfbd638098da63046add8f824e4b77e4bc51 100644 --- a/entity/Classification_entity/entityfields/classificationtypeid/valueProcess.js +++ b/entity/BulkMailRecipient_entity/entityfields/is_test_recipient/valueProcess.js @@ -1,8 +1,6 @@ -import("system.result"); import("system.neon"); import("system.vars"); +import("system.result"); if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) -{ - result.string(vars.get("$param.ClassificationType_param")); -} \ No newline at end of file + result.string(0); \ No newline at end of file diff --git a/entity/BulkMailRecipient_entity/entityfields/recipientactions/children/removewithcommrestriction/onActionProcess.js b/entity/BulkMailRecipient_entity/entityfields/recipientactions/children/removewithcommrestriction/onActionProcess.js index db090bed7fe1e8f31f659c42f7936638a44050f5..6759a0538060f2485b14c7a15d014401e8bb9f19 100644 --- a/entity/BulkMailRecipient_entity/entityfields/recipientactions/children/removewithcommrestriction/onActionProcess.js +++ b/entity/BulkMailRecipient_entity/entityfields/recipientactions/children/removewithcommrestriction/onActionProcess.js @@ -2,12 +2,13 @@ import("Contact_lib"); import("system.neon"); import("Sql_lib"); import("KeywordRegistry_basic"); +import("MarketingCondition_lib"); var recipientIds = newSelect("BULKMAILRECIPIENTID") .from("BULKMAILRECIPIENT") .join("CONTACT", newWhere() .and("BULKMAILRECIPIENT.CONTACT_ID = CONTACT.CONTACTID") - .and(ContactUtils.getCommRestrictionCondition($KeywordRegistry.communicationMediumCampaign$mail()))) + .and(new CommunicationSettingsCondition().emails().rejected().existSettings().buildCondition())) .whereIfSet("BULKMAILRECIPIENT.BULKMAIL_ID", "$param.BulkMailId_param") .arrayColumn(); diff --git a/entity/BulkMailRecipient_entity/entityfields/recipientstobemailed/children/excludecommunicationrejecting_param/valueProcess.js b/entity/BulkMailRecipient_entity/entityfields/recipientstobemailed/children/excludecommunicationrejecting_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..40effa0178464da0c7850912345f19c7fa95975a --- /dev/null +++ b/entity/BulkMailRecipient_entity/entityfields/recipientstobemailed/children/excludecommunicationrejecting_param/valueProcess.js @@ -0,0 +1,3 @@ +import("system.result"); + +result.string(true); \ No newline at end of file diff --git a/entity/BulkMailRecipient_entity/entityfields/recipientstobemailed/children/excludedstatus_param/valueProcess.js b/entity/BulkMailRecipient_entity/entityfields/recipientstobemailed/children/excludedstatus_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..ae0c566f408d9f9a4bd2181699b7fadeab9a02a4 --- /dev/null +++ b/entity/BulkMailRecipient_entity/entityfields/recipientstobemailed/children/excludedstatus_param/valueProcess.js @@ -0,0 +1,6 @@ +import("KeywordRegistry_basic"); +import("system.result"); + +result.string(JSON.stringify([ + $KeywordRegistry.bulkMailRecipientStatus$sent() +])); \ No newline at end of file diff --git a/entity/BulkMailRecipient_entity/entityfields/testrunactions/children/removetestrecipient/onActionProcess.js b/entity/BulkMailRecipient_entity/entityfields/testrunactions/children/removetestrecipient/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..b19f093933f83c39b3bca1779f28b1a9240aacd3 --- /dev/null +++ b/entity/BulkMailRecipient_entity/entityfields/testrunactions/children/removetestrecipient/onActionProcess.js @@ -0,0 +1,9 @@ +import("Sql_lib"); +import("system.vars"); +import("system.neon"); + +newWhereIfSet("BULKMAILRECIPIENT.BULKMAILRECIPIENTID", vars.get("$sys.selection"), SqlBuilder.IN()) + .updateData(true, "BULKMAILRECIPIENT", ["IS_TEST_RECIPIENT"], null, [0]); + +neon.refreshAll(); + \ No newline at end of file diff --git a/entity/BulkMailRecipient_entity/entityfields/testrunactions/children/settestrecipient/onActionProcess.js b/entity/BulkMailRecipient_entity/entityfields/testrunactions/children/settestrecipient/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..69f831c2f7a1a5dfca2708c9fbee266e552f6773 --- /dev/null +++ b/entity/BulkMailRecipient_entity/entityfields/testrunactions/children/settestrecipient/onActionProcess.js @@ -0,0 +1,9 @@ +import("Sql_lib"); +import("system.vars"); +import("system.neon"); + +newWhereIfSet("BULKMAILRECIPIENT.BULKMAILRECIPIENTID", vars.get("$sys.selection"), SqlBuilder.IN()) + .updateData(true, "BULKMAILRECIPIENT", ["IS_TEST_RECIPIENT"], null, [1]); + +neon.refreshAll(); + \ No newline at end of file diff --git a/entity/BulkMailRecipient_entity/recordcontainers/db/conditionProcess.js b/entity/BulkMailRecipient_entity/recordcontainers/db/conditionProcess.js index 01d4a5dc9c76ee5f350521eea0f4a2bb6016a3ec..fbbbe546a090687cf8aec7d09aa02854a48bbe63 100644 --- a/entity/BulkMailRecipient_entity/recordcontainers/db/conditionProcess.js +++ b/entity/BulkMailRecipient_entity/recordcontainers/db/conditionProcess.js @@ -1,5 +1,34 @@ +import("KeywordRegistry_basic"); +import("system.vars"); +import("Util_lib"); import("system.db"); import("system.result"); import("Sql_lib"); +import("MarketingCondition_lib"); -result.string(newWhere("BULKMAILRECIPIENT.BULKMAIL_ID", "$param.BulkMailId_param").toString()); \ No newline at end of file +var excludeWithCommunicationRejection = Utils.toBoolean(vars.get("$param.ExcludeCommunicationRejecting_param")); +var excludedStatus = Utils.parseJSON(vars.get("$param.ExcludedStatus_param")); +var isTestMail = Utils.toBoolean(vars.get("$param.IsTestMail_param")); + +var condition = newWhere("BULKMAILRECIPIENT.BULKMAIL_ID", "$param.BulkMailId_param"); +if (isTestMail) +{ + condition.and("BULKMAILRECIPIENT.IS_TEST_RECIPIENT", 1); +} +else +{ + if (excludeWithCommunicationRejection) + { + condition.and(new CommunicationSettingsCondition() + .medium($KeywordRegistry.communicationMediumCampaign$mail(), "BULKMAILRECIPIENT.EMAIL_ADDRESS") + .rejected() + .existNoSettings() + .buildCondition()); + } + if (!Utils.isNullOrEmpty(excludedStatus)) + { + condition.and("BULKMAILRECIPIENT.STATUS", excludedStatus, SqlBuilder.NOT_IN()); + } +} + +result.string(condition.toString()); \ No newline at end of file diff --git a/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/hascommrestriction.value/expression.js b/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/hascommrestriction.value/expression.js deleted file mode 100644 index 04cd6d4dc91c5a7e36cd82b78301acf456fc05ff..0000000000000000000000000000000000000000 --- a/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/hascommrestriction.value/expression.js +++ /dev/null @@ -1,9 +0,0 @@ -import("Sql_lib"); -import("KeywordRegistry_basic"); -import("Contact_lib"); -import("system.db"); -import("system.result"); - -var commRestrictionCond = ContactUtils.getCommRestrictionCondition($KeywordRegistry.communicationMediumCampaign$mail()); -var sql = SqlBuilder.caseWhen(commRestrictionCond).thenString("true").elseString("false"); -result.string(sql.toString()); diff --git a/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/hascommunicationrejection.value/expression.js b/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/hascommunicationrejection.value/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..7517b5a5ded16c4697dab1ccd9826f5e77b9a42c --- /dev/null +++ b/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/hascommunicationrejection.value/expression.js @@ -0,0 +1,26 @@ +import("system.vars"); +import("Util_lib"); +import("MarketingCondition_lib"); +import("Sql_lib"); +import("KeywordRegistry_basic"); +import("Contact_lib"); +import("system.db"); +import("system.result"); + +var sql; +//if recipients with communication restriction are excluded by the where-condition, this can never be true +if (Utils.toBoolean(vars.get("$param.ExcludeCommunicationRejecting_param"))) +{ + sql = "'false'"; +} +else +{ + var communicationSettingsCondition = new CommunicationSettingsCondition() + .medium($KeywordRegistry.communicationMediumCampaign$mail(), "BULKMAILRECIPIENT.EMAIL_ADDRESS") + .rejected() + .existSettings() + .buildCondition(); + sql = SqlBuilder.caseWhen(communicationSettingsCondition).thenString("true").elseString("false").toString(); +} + +result.string(sql); diff --git a/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js b/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js index 49b6fefd59233f6aa50934a21ce43f06a3a61172..2b9b21b9b789c2d7823fc09837e0bac6469a8c68 100644 --- a/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js +++ b/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js @@ -1,12 +1,30 @@ +import("system.vars"); +import("Util_lib"); import("Sql_lib"); import("Contact_lib"); import("system.translate"); import("system.result"); import("Keyword_lib"); import("KeywordRegistry_basic"); +import("MarketingCondition_lib"); -var commRestrictionCond = ContactUtils.getCommRestrictionCondition($KeywordRegistry.communicationMediumCampaign$mail()); var keywordSql = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.bulkMailRecipientStatus(), "BULKMAILRECIPIENT.STATUS"); +var sql; +if (!Utils.toBoolean(vars.get("$param.ExcludeCommunicationRejecting_param"))) +{ + var communicationSettingsCondition = new CommunicationSettingsCondition() + .medium($KeywordRegistry.communicationMediumCampaign$mail(), "BULKMAILRECIPIENT.EMAIL_ADDRESS") + .rejected() + .existSettings() + .buildCondition(); -var sql = SqlBuilder.caseWhen(commRestrictionCond).thenString(translate.text("Advertising ban")).elseValue(keywordSql); + sql = SqlBuilder.caseWhen(communicationSettingsCondition) + .thenString(translate.text("Advertising ban")) + .elseValue(keywordSql); +} +else +{ + sql = keywordSql; +} + result.string(sql.toString()); diff --git a/entity/BulkMailStatusChart_entity/BulkMailStatusChart_entity.aod b/entity/BulkMailStatusChart_entity/BulkMailStatusChart_entity.aod index 8449b088e741ea936c249395c17838dee4cd4995..3f31aadc563b07317559410f6ec6cff86b77d7c4 100644 --- a/entity/BulkMailStatusChart_entity/BulkMailStatusChart_entity.aod +++ b/entity/BulkMailStatusChart_entity/BulkMailStatusChart_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>BulkMailStatusChart_entity</name> <title>Recipient status</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -31,14 +31,6 @@ <entityProvider> <name>RecipientStatusChart</name> <documentation>%aditoprj%/entity/BulkMailStatusChart_entity/entityfields/recipientstatuschart/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>e2d96467-ec53-424b-b78c-c97c2db2bb8a</name> - <entityName>BulkMail_entity</entityName> - <fieldName>RecipientStatusChart</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityProvider> <name>#PROVIDER_AGGREGATES</name> diff --git a/entity/BulkMailStatusChart_entity/documentation.adoc b/entity/BulkMailStatusChart_entity/documentation.adoc index cdeb86c7c9cfdb4375f68dfa548f2f9adc462635..09be850685be3e9d660ac76c5ed9740215a4f8c9 100644 --- a/entity/BulkMailStatusChart_entity/documentation.adoc +++ b/entity/BulkMailStatusChart_entity/documentation.adoc @@ -1,3 +1,3 @@ = BulkMailStatusChart_entity -This entity provides information for a status chart with informations out of the "BulkMail_entity". \ No newline at end of file +This entity provides information for a status chart with information out of the "BulkMail_entity". \ No newline at end of file diff --git a/entity/BulkMailTestRecipient_entity/BulkMailTestRecipient_entity.aod b/entity/BulkMailTestRecipient_entity/BulkMailTestRecipient_entity.aod new file mode 100644 index 0000000000000000000000000000000000000000..8204e287fef7ce3b6dbafc9075835ab297e5f397 --- /dev/null +++ b/entity/BulkMailTestRecipient_entity/BulkMailTestRecipient_entity.aod @@ -0,0 +1,113 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> + <name>BulkMailTestRecipient_entity</name> + <title>Test Recipient</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <titlePlural>Test Recipients</titlePlural> + <recordContainer>db</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + </entityProvider> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityParameter> + <name>BulkMailId_param</name> + <expose v="true" /> + <mandatory v="false" /> + </entityParameter> + <entityField> + <name>BULKMAILTESTRECIPIENTID</name> + </entityField> + <entityField> + <name>BULKMAIL_ID</name> + <valueProcess>%aditoprj%/entity/BulkMailTestRecipient_entity/entityfields/bulkmail_id/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>EMAIL_ADDRESS</name> + <title>Email</title> + <dropDownProcess>%aditoprj%/entity/BulkMailTestRecipient_entity/entityfields/email_address/dropDownProcess.js</dropDownProcess> + <textInputAllowed v="true" /> + <valueProcess>%aditoprj%/entity/BulkMailTestRecipient_entity/entityfields/email_address/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>CONTACT_ID</name> + <title>Contact</title> + <consumer>Contacts</consumer> + <linkedContextProcess>%aditoprj%/entity/BulkMailTestRecipient_entity/entityfields/contact_id/linkedContextProcess.js</linkedContextProcess> + </entityField> + <entityProvider> + <name>BulkMailTestRecipients</name> + </entityProvider> + <entityConsumer> + <name>Contacts</name> + <dependency> + <name>dependency</name> + <entityName>AnyContact_entity</entityName> + <fieldName>#PROVIDER</fieldName> + </dependency> + </entityConsumer> + <entityField> + <name>PERSON_ID</name> + </entityField> + <entityField> + <name>ORGANISATION_ID</name> + </entityField> + </entityFields> + <recordContainers> + <dbRecordContainer> + <name>db</name> + <fromClauseProcess>%aditoprj%/entity/BulkMailTestRecipient_entity/recordcontainers/db/fromClauseProcess.js</fromClauseProcess> + <conditionProcess>%aditoprj%/entity/BulkMailTestRecipient_entity/recordcontainers/db/conditionProcess.js</conditionProcess> + <alias>Data_alias</alias> + <recordFieldMappings> + <dbRecordFieldMapping> + <name>BULKMAIL_ID.value</name> + <recordfield>BULKMAILTESTRECIPIENT.BULKMAIL_ID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>BULKMAILTESTRECIPIENTID.value</name> + <recordfield>BULKMAILTESTRECIPIENT.BULKMAILTESTRECIPIENTID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>CONTACT_ID.value</name> + <recordfield>BULKMAILTESTRECIPIENT.CONTACT_ID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>EMAIL_ADDRESS.value</name> + <recordfield>BULKMAILTESTRECIPIENT.EMAIL_ADDRESS</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>CONTACT_ID.displayValue</name> + <expression>%aditoprj%/entity/BulkMailTestRecipient_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js</expression> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>PERSON_ID.value</name> + <recordfield>CONTACT.PERSON_ID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>ORGANISATION_ID.value</name> + <recordfield>CONTACT.ORGANISATION_ID</recordfield> + </dbRecordFieldMapping> + </recordFieldMappings> + <linkInformation> + <linkInformation> + <name>e9b90ccc-0edd-4968-b6bf-966f8e0d5bc2</name> + <tableName>BULKMAILTESTRECIPIENT</tableName> + <primaryKey>BULKMAILTESTRECIPIENTID</primaryKey> + <isUIDTable v="true" /> + <readonly v="false" /> + </linkInformation> + <linkInformation> + <name>566ef9cf-6427-4f60-aa04-e514517c3324</name> + <tableName>CONTACT</tableName> + <primaryKey>CONTACTID</primaryKey> + <isUIDTable v="false" /> + <readonly v="true" /> + </linkInformation> + </linkInformation> + </dbRecordContainer> + </recordContainers> +</entity> diff --git a/entity/BulkMailTestRecipient_entity/entityfields/bulkmail_id/valueProcess.js b/entity/BulkMailTestRecipient_entity/entityfields/bulkmail_id/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..cea362d78f9084fe85f7764b09d0a1fde3065017 --- /dev/null +++ b/entity/BulkMailTestRecipient_entity/entityfields/bulkmail_id/valueProcess.js @@ -0,0 +1,10 @@ +import("system.result"); +import("system.neon"); +import("system.vars"); + +if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) +{ + if (vars.exists("$param.BulkMailId_param") && vars.get("$param.BulkMailId_param")) + result.string(vars.getString("$param.BulkMailId_param")); +} + diff --git a/entity/BulkMailTestRecipient_entity/entityfields/contact_id/linkedContextProcess.js b/entity/BulkMailTestRecipient_entity/entityfields/contact_id/linkedContextProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..2e48676daf3e661032b7d9aaf896c5bfbdd51e2d --- /dev/null +++ b/entity/BulkMailTestRecipient_entity/entityfields/contact_id/linkedContextProcess.js @@ -0,0 +1,5 @@ +import("system.vars"); +import("system.result"); +import("Contact_lib"); + +result.string(ContactUtils.getContextByPersOrg(vars.get("$field.PERSON_ID"), vars.get("$field.ORGANISATION_ID"))); \ No newline at end of file diff --git a/entity/BulkMailTestRecipient_entity/entityfields/email_address/dropDownProcess.js b/entity/BulkMailTestRecipient_entity/entityfields/email_address/dropDownProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..f44ecd046feca6d4166dd0b200a747c7bffa9ee4 --- /dev/null +++ b/entity/BulkMailTestRecipient_entity/entityfields/email_address/dropDownProcess.js @@ -0,0 +1,20 @@ +import("Communication_lib"); +import("system.result"); +import("system.vars"); +import("Sql_lib"); + +var contactId = vars.get("$field.CONTACT_ID"); + +if (contactId) +{ + var emailAddresses = new SqlBuilder().selectDistinct(["COMMUNICATION.ADDR","COMMUNICATION.ADDR"]) + .from("COMMUNICATION") + .where("COMMUNICATION.CONTACT_ID",contactId) + .and("COMMUNICATION.MEDIUM_ID",CommUtil.getMediumIdsByCategory("EMAIL"),SqlBuilder.IN()) + .table(); + result.object(emailAddresses); +} +else +{ + result.object([]) +} diff --git a/entity/BulkMailTestRecipient_entity/entityfields/email_address/valueProcess.js b/entity/BulkMailTestRecipient_entity/entityfields/email_address/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..c55cc06cb71e30c5ffe76fbcf38ddc6e92e68a8e --- /dev/null +++ b/entity/BulkMailTestRecipient_entity/entityfields/email_address/valueProcess.js @@ -0,0 +1,7 @@ +import("system.neon"); +import("system.vars"); +import("system.result"); +import("Communication_lib"); + +if (vars.get("$field.CONTACT_ID") && vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) + result.string(CommUtil.getStandardMail(vars.get("$field.CONTACT_ID"))); \ No newline at end of file diff --git a/entity/BulkMailTestRecipient_entity/recordcontainers/db/conditionProcess.js b/entity/BulkMailTestRecipient_entity/recordcontainers/db/conditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..52cfaea96c15eb2e4ff0c0dcb5281874098355d2 --- /dev/null +++ b/entity/BulkMailTestRecipient_entity/recordcontainers/db/conditionProcess.js @@ -0,0 +1,5 @@ +import("system.db"); +import("system.result"); +import("Sql_lib"); + +result.string(newWhere("BULKMAILTESTRECIPIENT.BULKMAIL_ID", "$param.BulkMailId_param").toString()); \ No newline at end of file diff --git a/entity/BulkMailTestRecipient_entity/recordcontainers/db/fromClauseProcess.js b/entity/BulkMailTestRecipient_entity/recordcontainers/db/fromClauseProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..b281df21b69e52ecbfe7fe636d423d55887e1634 --- /dev/null +++ b/entity/BulkMailTestRecipient_entity/recordcontainers/db/fromClauseProcess.js @@ -0,0 +1,5 @@ +import("system.result"); + +result.string("BULKMAILTESTRECIPIENT join CONTACT on BULKMAILTESTRECIPIENT.CONTACT_ID = CONTACT.CONTACTID \ + left join PERSON on CONTACT.PERSON_ID = PERSON.PERSONID \ + left join ORGANISATION on CONTACT.ORGANISATION_ID = ORGANISATION.ORGANISATIONID"); \ No newline at end of file diff --git a/entity/BulkMailTestRecipient_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js b/entity/BulkMailTestRecipient_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..35781ff56c5ad7469f74111e5dd20b738a87ec18 --- /dev/null +++ b/entity/BulkMailTestRecipient_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js @@ -0,0 +1,4 @@ +import("Contact_lib"); +import("system.result"); + +result.string(ContactUtils.getResolvingDisplaySubSql("BULKMAILTESTRECIPIENT.CONTACT_ID")); \ No newline at end of file diff --git a/entity/BulkMailTesting_entity/BulkMailTesting_entity.aod b/entity/BulkMailTesting_entity/BulkMailTesting_entity.aod index e4d9fa98c6c7fdc68f8b3bafe53331ff672686f6..567fc93585a9c0bb5f3d743e85454f092b1d2164 100644 --- a/entity/BulkMailTesting_entity/BulkMailTesting_entity.aod +++ b/entity/BulkMailTesting_entity/BulkMailTesting_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>BulkMailTesting_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/BulkMailTesting_entity/documentation.adoc</documentation> diff --git a/entity/BulkMail_entity/BulkMail_entity.aod b/entity/BulkMail_entity/BulkMail_entity.aod index 3b728ee07f40467fe2f9f1caddd74ca12e531a4f..4dfdfce86f3537a69b0630d7c5b3431f6f27d6c4 100644 --- a/entity/BulkMail_entity/BulkMail_entity.aod +++ b/entity/BulkMail_entity/BulkMail_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>BulkMail_entity</name> <title>Bulk Mail</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -15,14 +15,6 @@ <entityFields> <entityProvider> <name>#PROVIDER</name> - <dependencies> - <entityDependency> - <name>4ef3e311-d2b2-45bf-8f82-7f9ae7e107a9</name> - <entityName>ObjectProxy_entity</entityName> - <fieldName>Bulkmails</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>BULKMAILID</name> @@ -55,6 +47,7 @@ </entityField> <entityConsumer> <name>Recipients</name> + <selectionMode>MULTI</selectionMode> <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/recipients/stateProcess.js</stateProcess> <dependency> <name>dependency</name> @@ -255,14 +248,6 @@ <entityProvider> <name>BulkMailsNotSent</name> <documentation>%aditoprj%/entity/BulkMail_entity/entityfields/bulkmailsnotsent/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>16cdf326-0b43-4d72-bf19-21434e047e85</name> - <entityName>BulkMailAddRecipients_entity</entityName> - <fieldName>BulkMails</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>BulkMailStatus_param</name> @@ -323,6 +308,198 @@ <iconId>VAADIN:CURLY_BRACKETS</iconId> <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/openadminview/stateProcess.js</stateProcess> </entityActionField> + <entityField> + <name>DATE_TO_SEND</name> + <title>Send Date</title> + <contentType>DATE</contentType> + <resolution>MINUTE</resolution> + <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/date_to_send/stateProcess.js</stateProcess> + <onValidation>%aditoprj%/entity/BulkMail_entity/entityfields/date_to_send/onValidation.js</onValidation> + </entityField> + <entityConsumer> + <name>MailLogs</name> + <dependency> + <name>dependency</name> + <entityName>MailLog_entity</entityName> + <fieldName>MailLogs</fieldName> + </dependency> + <children> + <entityParameter> + <name>ObjectRowId_param</name> + <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/maillogs/children/objectrowid_param/valueProcess.js</valueProcess> + </entityParameter> + <entityParameter> + <name>ObjectType_param</name> + <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/maillogs/children/objecttype_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityConsumer> + <name>BulkMailTestRecipients</name> + <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/bulkmailtestrecipients/stateProcess.js</stateProcess> + <dependency> + <name>dependency</name> + <entityName>BulkMailTestRecipient_entity</entityName> + <fieldName>BulkMailTestRecipients</fieldName> + </dependency> + <children> + <entityParameter> + <name>BulkMailId_param</name> + <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/bulkmailtestrecipients/children/bulkmailid_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityConsumer> + <name>Clicks</name> + <dependency> + <name>dependency</name> + <entityName>WeblinkClick_entity</entityName> + <fieldName>#PROVIDER</fieldName> + </dependency> + <children> + <entityParameter> + <name>ObjectRowId_param</name> + <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/clicks/children/objectrowid_param/valueProcess.js</valueProcess> + </entityParameter> + <entityParameter> + <name>ObjectType_param</name> + <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/clicks/children/objecttype_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityField> + <name>INTEREST_ID</name> + <title>Interest</title> + <consumer>Interests</consumer> + <displayValueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/interest_id/displayValueProcess.js</displayValueProcess> + </entityField> + <entityConsumer> + <name>Interests</name> + <dependency> + <name>dependency</name> + <entityName>Interest_entity</entityName> + <fieldName>#PROVIDER</fieldName> + </dependency> + </entityConsumer> + <entityField> + <name>recipientCount</name> + <title>Recipients</title> + </entityField> + <entityField> + <name>deliveredMailCount</name> + <title>Received</title> + </entityField> + <entityField> + <name>bounceCount</name> + <title>Bounces</title> + </entityField> + <entityField> + <name>EMPLOYEE_CONTACT_ID</name> + <title>Person in charge</title> + <consumer>Employees</consumer> + <linkedContext>Person</linkedContext> + <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/employee_contact_id/valueProcess.js</valueProcess> + <displayValueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/employee_contact_id/displayValueProcess.js</displayValueProcess> + </entityField> + <entityConsumer> + <name>Employees</name> + <dependency> + <name>dependency</name> + <entityName>Employee_entity</entityName> + <fieldName>Employees</fieldName> + </dependency> + </entityConsumer> + <entityParameter> + <name>ShowOnlyCurrentUsersBulkmails_param</name> + <expose v="true" /> + </entityParameter> + <entityConsumer> + <name>OpeningHourChart</name> + <dependency> + <name>dependency</name> + <entityName>BulkMailAnalysisOpeningHourChart_entity</entityName> + <fieldName>#PROVIDER</fieldName> + </dependency> + <children> + <entityParameter> + <name>BulkMailId_param</name> + <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/openinghourchart/children/bulkmailid_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityConsumer> + <name>BulkmailStatusFunnel</name> + <dependency> + <name>dependency</name> + <entityName>BulkMailAnalysisStatusFunnelChart_entity</entityName> + <fieldName>#PROVIDER</fieldName> + </dependency> + <children> + <entityParameter> + <name>BulkMailId_param</name> + <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/bulkmailstatusfunnel/children/bulkmailid_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityConsumer> + <name>DeviceTypeChart</name> + <dependency> + <name>dependency</name> + <entityName>BulkMailAnalysis_entity</entityName> + <fieldName>#PROVIDER</fieldName> + </dependency> + <children> + <entityParameter> + <name>BulkMailId_param</name> + <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/devicetypechart/children/bulkmailid_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityProvider> + <name>BulkMailOverViewView</name> + <documentation>%aditoprj%/entity/BulkMail_entity/entityfields/bulkmailoverviewview/documentation.adoc</documentation> + <titlePlural>Overview</titlePlural> + </entityProvider> + <entityParameter> + <name>BulkMailId_param</name> + <expose v="true" /> + </entityParameter> + <entityConsumer> + <name>BulkMailOverViewViews</name> + <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/bulkmailoverviewviews/stateProcess.js</stateProcess> + <dependency> + <name>dependency</name> + <entityName>BulkMail_entity</entityName> + <fieldName>BulkMailOverViewView</fieldName> + </dependency> + <children> + <entityParameter> + <name>BulkMailId_param</name> + <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/bulkmailoverviewviews/children/bulkmailid_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityConsumer> + <name>BulkMailBounceChart</name> + <dependency> + <name>dependency</name> + <entityName>BulkMailAnalysisBounceChart_entity</entityName> + <fieldName>#PROVIDER</fieldName> + </dependency> + <children> + <entityParameter> + <name>BulkMailId_param</name> + <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/bulkmailbouncechart/children/bulkmailid_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityActionField> + <name>openMosaico</name> + <title>Open Mosaico</title> + <onActionProcess>%aditoprj%/entity/BulkMail_entity/entityfields/openmosaico/onActionProcess.js</onActionProcess> + <iconId>NEON:WRENCH</iconId> + <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/openmosaico/stateProcess.js</stateProcess> + </entityActionField> </entityFields> <recordContainers> <dbRecordContainer> @@ -362,7 +539,7 @@ </dbRecordFieldMapping> <dbRecordFieldMapping> <name>SENDER.value</name> - <recordfield>BULKMAIL.SENDER</recordfield> + <recordfield>BULKMAIL.SENDER_EMAIL_ADDRESS</recordfield> <isFilterable v="true" /> <isLookupFilter v="false" /> </dbRecordFieldMapping> @@ -400,6 +577,42 @@ <name>USE_TEMPLATE_ATTACHMENTS.value</name> <recordfield>BULKMAIL.USE_TEMPLATE_ATTACHMENTS</recordfield> </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DATE_TO_SEND.value</name> + <recordfield>BULKMAIL.DATE_TO_SEND</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>INTEREST_ID.value</name> + <recordfield>BULKMAIL.INTEREST_ID</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>deliveredMailCount.value</name> + <expression>%aditoprj%/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/deliveredmailcount.value/expression.js</expression> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>recipientCount.value</name> + <expression>%aditoprj%/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/recipientcount.value/expression.js</expression> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>bounceCount.value</name> + <expression>%aditoprj%/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/bouncecount.value/expression.js</expression> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>EMPLOYEE_CONTACT_ID.value</name> + <recordfield>BULKMAIL.EMPLOYEE_CONTACT_ID</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>EMPLOYEE_CONTACT_ID.displayValue</name> + <expression>%aditoprj%/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/employee_contact_id.displayvalue/expression.js</expression> + </dbRecordFieldMapping> + <consumerMapping> + <name>Recipients</name> + <filterConditionProcess>%aditoprj%/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/recipients/filterConditionProcess.js</filterConditionProcess> + <isFilterable v="true" /> + <filtertype>BASIC</filtertype> + </consumerMapping> </recordFieldMappings> <linkInformation> <linkInformation> diff --git a/entity/BulkMail_entity/entityfields/bulkmailbouncechart/children/bulkmailid_param/valueProcess.js b/entity/BulkMail_entity/entityfields/bulkmailbouncechart/children/bulkmailid_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..0d6101a3abe44b921e80c8af621cecbd0047e7ca --- /dev/null +++ b/entity/BulkMail_entity/entityfields/bulkmailbouncechart/children/bulkmailid_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("system.result"); + +result.string(vars.get("$param.BulkMailId_param")||vars.get("$field.BULKMAILID")); \ No newline at end of file diff --git a/entity/BulkMail_entity/entityfields/bulkmailoverviewview/documentation.adoc b/entity/BulkMail_entity/entityfields/bulkmailoverviewview/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..6d8e48e884e972b127d1241e3acd8b025456c44e --- /dev/null +++ b/entity/BulkMail_entity/entityfields/bulkmailoverviewview/documentation.adoc @@ -0,0 +1,3 @@ += BulkMailOverViewView + +Used for Selfreference to get a statusprocess for a View. \ No newline at end of file diff --git a/entity/BulkMail_entity/entityfields/bulkmailoverviewviews/children/bulkmailid_param/valueProcess.js b/entity/BulkMail_entity/entityfields/bulkmailoverviewviews/children/bulkmailid_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..2a12b8389ba83e397d6b9ae10eb59989a25590fe --- /dev/null +++ b/entity/BulkMail_entity/entityfields/bulkmailoverviewviews/children/bulkmailid_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("system.result"); + +result.string(vars.get("$field.BULKMAILID")); \ No newline at end of file diff --git a/entity/BulkMail_entity/entityfields/bulkmailoverviewviews/stateProcess.js b/entity/BulkMail_entity/entityfields/bulkmailoverviewviews/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..52e69c9b863cfdfba84eca61fa0fb5af07aba11a --- /dev/null +++ b/entity/BulkMail_entity/entityfields/bulkmailoverviewviews/stateProcess.js @@ -0,0 +1,13 @@ +import("system.vars"); +import("system.result"); +import("system.neon"); +import("KeywordRegistry_basic"); + +if( vars.get("$field.STATUS") == $KeywordRegistry.bulkMailStatus$sent()) +{ + result.string(neon.COMPONENTSTATE_READONLY); +} +else +{ + result.string(neon.COMPONENTSTATE_INVISIBLE); +} \ No newline at end of file diff --git a/entity/BulkMail_entity/entityfields/bulkmailstatusfunnel/children/bulkmailid_param/valueProcess.js b/entity/BulkMail_entity/entityfields/bulkmailstatusfunnel/children/bulkmailid_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..0d6101a3abe44b921e80c8af621cecbd0047e7ca --- /dev/null +++ b/entity/BulkMail_entity/entityfields/bulkmailstatusfunnel/children/bulkmailid_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("system.result"); + +result.string(vars.get("$param.BulkMailId_param")||vars.get("$field.BULKMAILID")); \ No newline at end of file diff --git a/entity/BulkMail_entity/entityfields/bulkmailtestrecipients/children/bulkmailid_param/valueProcess.js b/entity/BulkMail_entity/entityfields/bulkmailtestrecipients/children/bulkmailid_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..2a12b8389ba83e397d6b9ae10eb59989a25590fe --- /dev/null +++ b/entity/BulkMail_entity/entityfields/bulkmailtestrecipients/children/bulkmailid_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("system.result"); + +result.string(vars.get("$field.BULKMAILID")); \ No newline at end of file diff --git a/entity/BulkMail_entity/entityfields/bulkmailtestrecipients/stateProcess.js b/entity/BulkMail_entity/entityfields/bulkmailtestrecipients/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..0e2b38fa2ad190ab5224e7a614c678073f0f5093 --- /dev/null +++ b/entity/BulkMail_entity/entityfields/bulkmailtestrecipients/stateProcess.js @@ -0,0 +1,7 @@ +import("system.vars"); +import("Bulkmail_lib"); +import("system.result"); +import("system.neon"); + +if (BulkMailUtils.isStatusSendingOrSent(vars.get("$field.STATUS"))) + result.string(neon.COMPONENTSTATE_READONLY); \ No newline at end of file diff --git a/entity/BulkMail_entity/entityfields/clicks/children/objectrowid_param/valueProcess.js b/entity/BulkMail_entity/entityfields/clicks/children/objectrowid_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..8aa64f3404b7d77bd5dfade6cc48235558f0d988 --- /dev/null +++ b/entity/BulkMail_entity/entityfields/clicks/children/objectrowid_param/valueProcess.js @@ -0,0 +1,3 @@ +import("system.vars"); +import("system.result"); +result.string(vars.get("$field.BULKMAILID")); \ No newline at end of file diff --git a/entity/BulkMail_entity/entityfields/clicks/children/objecttype_param/valueProcess.js b/entity/BulkMail_entity/entityfields/clicks/children/objecttype_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..008915f61deac19ccdd40fff81701de63eb3b6a2 --- /dev/null +++ b/entity/BulkMail_entity/entityfields/clicks/children/objecttype_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.result"); +import("Context_lib"); + +result.string(ContextUtils.getCurrentContextId()); \ No newline at end of file diff --git a/entity/BulkMail_entity/entityfields/createactivities/valueProcess.js b/entity/BulkMail_entity/entityfields/createactivities/valueProcess.js index 72e22f0a52f1d6439b67df5abc59a66280df8fd4..a4bf6a669269a2e2309090f21ac1975f35021774 100644 --- a/entity/BulkMail_entity/entityfields/createactivities/valueProcess.js +++ b/entity/BulkMail_entity/entityfields/createactivities/valueProcess.js @@ -3,4 +3,4 @@ import("system.vars"); import("system.result"); if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) - result.string("1"); \ No newline at end of file + result.string("0"); \ No newline at end of file diff --git a/entity/BulkMail_entity/entityfields/date_to_send/onValidation.js b/entity/BulkMail_entity/entityfields/date_to_send/onValidation.js new file mode 100644 index 0000000000000000000000000000000000000000..a14234910f2dd2ff5ffdb94f34a939b6268f0379 --- /dev/null +++ b/entity/BulkMail_entity/entityfields/date_to_send/onValidation.js @@ -0,0 +1,7 @@ +import("system.result"); +import("system.vars"); +import("KeywordRegistry_basic"); + +if (vars.get("$field.STATUS") == $KeywordRegistry.bulkMailStatus$planned() && vars.get("$sys.date") > vars.get("local.value")) + result.string("Send date already passed."); +else result.string(""); \ No newline at end of file diff --git a/entity/BulkMail_entity/entityfields/date_to_send/stateProcess.js b/entity/BulkMail_entity/entityfields/date_to_send/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..12d91284a8492b11f3f657f03775a4240f5306a9 --- /dev/null +++ b/entity/BulkMail_entity/entityfields/date_to_send/stateProcess.js @@ -0,0 +1,18 @@ +import("system.result"); +import("system.vars"); +import("KeywordRegistry_basic"); +import("system.neon"); + +var status = vars.get("$field.STATUS"); +var fieldState = neon.COMPONENTSTATE_INVISIBLE; + +if (status == $KeywordRegistry.bulkMailStatus$planned()) +{ + fieldState = neon.COMPONENTSTATE_EDITABLE; +} +else if (status == $KeywordRegistry.bulkMailStatus$missed()) +{ + fieldState = neon.COMPONENTSTATE_READONLY; +} + +result.string(fieldState); \ No newline at end of file diff --git a/entity/BulkMail_entity/entityfields/devicetypechart/children/bulkmailid_param/valueProcess.js b/entity/BulkMail_entity/entityfields/devicetypechart/children/bulkmailid_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..0d6101a3abe44b921e80c8af621cecbd0047e7ca --- /dev/null +++ b/entity/BulkMail_entity/entityfields/devicetypechart/children/bulkmailid_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("system.result"); + +result.string(vars.get("$param.BulkMailId_param")||vars.get("$field.BULKMAILID")); \ No newline at end of file diff --git a/entity/BulkMail_entity/entityfields/employee_contact_id/displayValueProcess.js b/entity/BulkMail_entity/entityfields/employee_contact_id/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..037d5e264baf41f4e2b0ebcfce8103d365ee7e13 --- /dev/null +++ b/entity/BulkMail_entity/entityfields/employee_contact_id/displayValueProcess.js @@ -0,0 +1,5 @@ +import("system.vars"); +import("system.result"); +import("Contact_lib"); + +result.string(ContactUtils.getTitleByContactId(vars.get("$field.EMPLOYEE_CONTACT_ID"))); \ No newline at end of file diff --git a/entity/BulkMail_entity/entityfields/employee_contact_id/valueProcess.js b/entity/BulkMail_entity/entityfields/employee_contact_id/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..4b00f2d048bc22a15174915872c498ea6051b998 --- /dev/null +++ b/entity/BulkMail_entity/entityfields/employee_contact_id/valueProcess.js @@ -0,0 +1,7 @@ +import("system.result"); +import("system.neon"); +import("system.vars"); +import("Employee_lib"); + +if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) + result.string(EmployeeUtils.getCurrentContactId()); \ No newline at end of file diff --git a/entity/BulkMail_entity/entityfields/interest_id/displayValueProcess.js b/entity/BulkMail_entity/entityfields/interest_id/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..e2c5bbf9152d5d220ccba334f4f7b8d2bb15e8f1 --- /dev/null +++ b/entity/BulkMail_entity/entityfields/interest_id/displayValueProcess.js @@ -0,0 +1,5 @@ +import("system.vars"); +import("system.result"); +import("Context_lib"); + +result.string(ContextUtils.loadContentTitle("Interest_entity", vars.get("$field.INTEREST_ID"))); \ No newline at end of file diff --git a/entity/BulkMail_entity/entityfields/maillogs/children/objectrowid_param/valueProcess.js b/entity/BulkMail_entity/entityfields/maillogs/children/objectrowid_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..8aa64f3404b7d77bd5dfade6cc48235558f0d988 --- /dev/null +++ b/entity/BulkMail_entity/entityfields/maillogs/children/objectrowid_param/valueProcess.js @@ -0,0 +1,3 @@ +import("system.vars"); +import("system.result"); +result.string(vars.get("$field.BULKMAILID")); \ No newline at end of file diff --git a/entity/BulkMail_entity/entityfields/maillogs/children/objecttype_param/valueProcess.js b/entity/BulkMail_entity/entityfields/maillogs/children/objecttype_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..008915f61deac19ccdd40fff81701de63eb3b6a2 --- /dev/null +++ b/entity/BulkMail_entity/entityfields/maillogs/children/objecttype_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.result"); +import("Context_lib"); + +result.string(ContextUtils.getCurrentContextId()); \ No newline at end of file diff --git a/entity/BulkMail_entity/entityfields/openinghourchart/children/bulkmailid_param/valueProcess.js b/entity/BulkMail_entity/entityfields/openinghourchart/children/bulkmailid_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..0d6101a3abe44b921e80c8af621cecbd0047e7ca --- /dev/null +++ b/entity/BulkMail_entity/entityfields/openinghourchart/children/bulkmailid_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("system.result"); + +result.string(vars.get("$param.BulkMailId_param")||vars.get("$field.BULKMAILID")); \ No newline at end of file diff --git a/entity/BulkMail_entity/entityfields/openmosaico/onActionProcess.js b/entity/BulkMail_entity/entityfields/openmosaico/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..151f3d8d61ea2c2acd6255a79fdf067a27002886 --- /dev/null +++ b/entity/BulkMail_entity/entityfields/openmosaico/onActionProcess.js @@ -0,0 +1,4 @@ +import("system.neon"); +import("system.project"); + +neon.openUrl(project.getPreferenceValue("custom.mosaico.url"),true); \ No newline at end of file diff --git a/entity/BulkMail_entity/entityfields/openmosaico/stateProcess.js b/entity/BulkMail_entity/entityfields/openmosaico/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..b046fb7ebf6d157125ef135fe4d1f1f7857ac98c --- /dev/null +++ b/entity/BulkMail_entity/entityfields/openmosaico/stateProcess.js @@ -0,0 +1,13 @@ +import("system.neon"); +import("system.result"); +import("system.project"); + + +if (project.getPreferenceValue("custom.mosaico.url") != "") +{ + result.string( neon.COMPONENTSTATE_EDITABLE); +} +else +{ + result.string(neon.COMPONENTSTATE_INVISIBLE); +} \ No newline at end of file diff --git a/entity/BulkMail_entity/entityfields/testmail/onActionProcess.js b/entity/BulkMail_entity/entityfields/testmail/onActionProcess.js index 3845e374537d50e6e9ab706741a4a672d7208d04..a77b2d89d480dd2f0018295bfd128955abe390b4 100644 --- a/entity/BulkMail_entity/entityfields/testmail/onActionProcess.js +++ b/entity/BulkMail_entity/entityfields/testmail/onActionProcess.js @@ -1,17 +1,7 @@ -import("system.neon"); -import("system.db"); -import("Employee_lib"); import("system.vars"); import("Bulkmail_lib"); -var testingContact = vars.get("$field.TESTING_CONTACT_ID"); -var testingEmail = vars.get("$field.TESTING_EMAIL_ADDRESS"); -if (testingContact && testingEmail) - BulkMailUtils.sendBulkMailOnServer(vars.get("$field.BULKMAILID"), [[testingContact, testingEmail]]); -else - neon.openContext("BulkMailTesting", "BulkMailTesting_view", null, neon.OPERATINGSTATE_VIEW, { - "BulkMailId_param" : vars.get("$field.BULKMAILID") - }); +BulkMailUtils.sendBulkMailOnServer(vars.get("$field.BULKMAILID"), true); diff --git a/entity/BulkMail_entity/recordcontainers/db/conditionProcess.js b/entity/BulkMail_entity/recordcontainers/db/conditionProcess.js index 114bc7ba5a6f35edd1be22cbb150d7f47add0d7e..762df3e9809aba6face2dfd65e386c2623830a34 100644 --- a/entity/BulkMail_entity/recordcontainers/db/conditionProcess.js +++ b/entity/BulkMail_entity/recordcontainers/db/conditionProcess.js @@ -1,4 +1,14 @@ +import("Employee_lib"); +import("system.vars"); import("system.result"); import("Sql_lib"); -result.string(newWhereIfSet("BULKMAIL.STATUS", "$param.BulkMailStatus_param").toString()); \ No newline at end of file +var cond = newWhereIfSet("BULKMAIL.STATUS", "$param.BulkMailStatus_param") + .andIfSet("BULKMAIL.BULKMAILID","$param.BulkMailId_param"); + +if(vars.get("$param.ShowOnlyCurrentUsersBulkmails_param") == 'true') +{ + cond.and("BULKMAIL.EMPLOYEE_CONTACT_ID", EmployeeUtils.getCurrentContactId()); +} + +result.string(cond.toString()); \ No newline at end of file diff --git a/entity/BulkMail_entity/recordcontainers/db/onDBDelete.js b/entity/BulkMail_entity/recordcontainers/db/onDBDelete.js index 69fbfd853d241f4d4350edb4243837c849bbd16a..aaa02ff8073f59cb12e50e314b8e88b7a39f79cd 100644 --- a/entity/BulkMail_entity/recordcontainers/db/onDBDelete.js +++ b/entity/BulkMail_entity/recordcontainers/db/onDBDelete.js @@ -1,8 +1,12 @@ +import("Document_lib"); +import("Context_lib"); import("Workflow_lib"); import("system.vars"); import("Binary_lib"); import("Sql_lib"); +DocumentUtil.deleteAllUploadedImages("content_IMAGE_UPLOAD"); + newWhere("BULKMAILRECIPIENT.BULKMAIL_ID", "$local.uid").deleteData(); SingleBinaryUtils.remove("BULKMAIL", "DOCUMENT", vars.get("$local.uid")); diff --git a/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/bouncecount.value/expression.js b/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/bouncecount.value/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..3ec0abc2d93ce5a64b9690d61a5eae4095ecffb0 --- /dev/null +++ b/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/bouncecount.value/expression.js @@ -0,0 +1,9 @@ +import("system.result"); +import("BulkmailAnalysis_lib"); + +var sql = new BulkMailAnalysisSql() +.bulkMailIdField("BULKMAIL.BULKMAILID") +.setSelects([ + BulkMailAnalysisSql.countSelects.BOUNCECOUNT +]).buildSelect() +result.string(sql.toString()); \ No newline at end of file diff --git a/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/deliveredmailcount.value/expression.js b/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/deliveredmailcount.value/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..a93cc049857b4b01dd8ea0b5470fd4fa6f46f8db --- /dev/null +++ b/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/deliveredmailcount.value/expression.js @@ -0,0 +1,15 @@ +import("KeywordRegistry_basic"); +import("system.result"); +import("Bulkmail_lib"); +import("Sql_lib"); + +var cond = new SqlBuilder().selectCount("MAIL_LOG.MAIL_LOGID") + .from("MAIL_LOG") + .join("MAIL_RUN","MAIL_RUN.MAIL_RUNID = MAIL_LOG.MAIL_RUN_ID") + .where("MAIL_RUN.OBJECT_TYPE","bulkmail") + .and("MAIL_RUN.TESTRUN",0) + .and("MAIL_LOG.STATUS",$KeywordRegistry.bulkMailRecipientStatus$sent()) + .and("MAIL_RUN.OBJECT_ROWID=BULKMAIL.BULKMAILID"); + + +result.string(cond.toString()) \ No newline at end of file diff --git a/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/employee_contact_id.displayvalue/expression.js b/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/employee_contact_id.displayvalue/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..39b635bffd96afba9ecdbbc71bb7bf03167f6802 --- /dev/null +++ b/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/employee_contact_id.displayvalue/expression.js @@ -0,0 +1,3 @@ +import("Person_lib"); +import("system.result"); +result.string(PersUtils.getResolvingDisplaySubSql("BULKMAIL.EMPLOYEE_CONTACT_ID")); \ No newline at end of file diff --git a/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/recipientcount.value/expression.js b/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/recipientcount.value/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..c30687bdfd81a47f64e3685d8d1f8679a53fc36b --- /dev/null +++ b/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/recipientcount.value/expression.js @@ -0,0 +1,2 @@ +import("system.result"); +result.string("select count(BULKMAILRECIPIENT.BULKMAILRECIPIENTID) from BULKMAILRECIPIENT where BULKMAILRECIPIENT.BULKMAIL_ID = BULKMAIL.BULKMAILID"); \ No newline at end of file diff --git a/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/recipients/filterConditionProcess.js b/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/recipients/filterConditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..45824972a732100b38c4459e28be0f81ba3c38f3 --- /dev/null +++ b/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/recipients/filterConditionProcess.js @@ -0,0 +1,11 @@ +import("system.vars"); +import("system.result"); +import("Sql_lib"); + +var cond = newWhere("BULKMAIL.BULKMAILID", + newSelect("BULKMAILRECIPIENT.BULKMAIL_ID") + .from("BULKMAILRECIPIENT") + .where(vars.get("$local.condition")) + ,SqlBuilder.IN()); + +result.string(cond.toString()); \ No newline at end of file diff --git a/entity/CampaignAddParticipants_entity/CampaignAddParticipants_entity.aod b/entity/CampaignAddParticipants_entity/CampaignAddParticipants_entity.aod index 8f088d36615ee56043631b62277a508976268c50..f867fcdc4097bd543af7e7698418c8c9ae9fd68a 100644 --- a/entity/CampaignAddParticipants_entity/CampaignAddParticipants_entity.aod +++ b/entity/CampaignAddParticipants_entity/CampaignAddParticipants_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>CampaignAddParticipants_entity</name> <title>Add participants to Campaign</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -19,6 +19,7 @@ <consumer>CampaignConsumer</consumer> <mandatory v="true" /> <state>EDITABLE</state> + <stateProcess>%aditoprj%/entity/CampaignAddParticipants_entity/entityfields/campaign_id/stateProcess.js</stateProcess> <valueProcess>%aditoprj%/entity/CampaignAddParticipants_entity/entityfields/campaign_id/valueProcess.js</valueProcess> <displayValueProcess>%aditoprj%/entity/CampaignAddParticipants_entity/entityfields/campaign_id/displayValueProcess.js</displayValueProcess> <onValueChange>%aditoprj%/entity/CampaignAddParticipants_entity/entityfields/campaign_id/onValueChange.js</onValueChange> @@ -37,7 +38,7 @@ <mandatory v="true" /> <state>EDITABLE</state> <displayValueProcess>%aditoprj%/entity/CampaignAddParticipants_entity/entityfields/campaignstep_id/displayValueProcess.js</displayValueProcess> - <onValueChange>%aditoprj%/entity/CampaignAddParticipants_entity/entityfields/campaignstep_id/onValueChange.js</onValueChange> + <onValidation>%aditoprj%/entity/CampaignAddParticipants_entity/entityfields/campaignstep_id/onValidation.js</onValidation> </entityField> <entityField> <name>campaignParticipantMessage</name> diff --git a/entity/CampaignAddParticipants_entity/entityfields/addparticipants/onActionProcess.js b/entity/CampaignAddParticipants_entity/entityfields/addparticipants/onActionProcess.js index b299466750aeaa2162df03031f3dc9098cdf5967..ceeb7e8662d98a71b9a214fd5cd0fbb100c5c8c3 100644 --- a/entity/CampaignAddParticipants_entity/entityfields/addparticipants/onActionProcess.js +++ b/entity/CampaignAddParticipants_entity/entityfields/addparticipants/onActionProcess.js @@ -1,3 +1,5 @@ +import("system.logging"); +import("Util_lib"); import("system.neon"); import("Sql_lib"); import("system.vars"); @@ -7,67 +9,32 @@ import("Campaign_lib"); var cols = []; -var participantCondition = ""; -var participantRowIds = JSON.parse(vars.getString("$param.campaignParticipantsRowIds_param")); -var conditionSourceTableName = vars.getString("$param.dataSourceTableName_param"); -var isUpdate = vars.get("$field.isUpdate"); + +var contactIds = JSON.parse(vars.get("$field.campaignparticipantContactIds")); +var isUpdate = Utils.toBoolean(vars.get("$param.isUpdate_param")); + var campaignId = vars.getString("$field.CAMPAIGN_ID"); var newCampaignStepId = vars.getString("$field.CAMPAIGNSTEP_ID"); var colNamesCampaignParticipantLog = CampaignUtils.getParticipantLogInsertColumnNames(); -if(participantRowIds != null && participantRowIds.length > 0) -{ - var contactIdsToHandle = participantRowIds; - - if(isUpdate == "false") - contactIdsToHandle = JSON.parse(vars.get("$field.campaignparticipantContactIds")); - - _handleRowIds(contactIdsToHandle, campaignId); -} -else +if(contactIds != null && contactIds.length > 0) { - participantCondition = JSON.parse(vars.getString("$param.campaignParticipantsCondition_param")).condition; - _handleCondition(campaignId, conditionSourceTableName, participantCondition); + _handleRowIds(contactIds, campaignId); } + neon.refreshAll(); if (!vars.exists("$param.currentCampaignId_param") || !vars.get("$param.currentCampaignId_param")) neon.openContext("Campaign", "CampaignMain_view", [campaignId], neon.OPERATINGSTATE_VIEW, null); -function _handleCondition(pCampaignId, pTargetTableName, pCondition) -{ - var contactIdsToHandle = []; - var contextComingFrom = "Person"; - - if(pTargetTableName == "ORGANISATION") - { - pCondition += " and PERSON.PERSONID is NULL"; - contextComingFrom = "Organisation"; - } - - /* - * If it's an update of participants, get the participants defined by the condition in the selected campaign - * Because they already are participants, no restrictions apply to the affected IDs. - * - * Otherwise the participants ought to be inserted. The only restriction right now is, hat the participants to be inserted - * can't already be in this specific campaign. Therefore all IDs hat are defined by the condition and not in the campaign are selected. - */ - if(isUpdate == "true") - { - contactIdsToHandle = CampaignUtils.GetContactIdsInCampaignByCondition(pCampaignId, pCondition); - } - else - contactIdsToHandle = CampaignUtils.GetContactIdsNotInCampaignByCondition(pCampaignId, pCondition, contextComingFrom); - - _handleRowIds(contactIdsToHandle, pCampaignId); -} + function _handleRowIds(pParticipantRowIds, pCampaignId) { var oldStepIds = {}; - if(isUpdate == "true") + if(isUpdate) { cols = [ "CAMPAIGNSTEP_ID", @@ -75,7 +42,7 @@ function _handleRowIds(pParticipantRowIds, pCampaignId) "DATE_EDIT" ]; - var oldSteps = newSelect("CAMPAIGNPARTICIPANTID, CAMPAIGNSTEP_ID") + var oldSteps = newSelect("CONTACT_ID, CAMPAIGNSTEP_ID") .from("CAMPAIGNPARTICIPANT") .whereIfSet("CAMPAIGNPARTICIPANT.CONTACT_ID", pParticipantRowIds, SqlBuilder.IN()) .and("CAMPAIGNPARTICIPANT.CAMPAIGN_ID", pCampaignId) @@ -105,9 +72,10 @@ function _handleRowIds(pParticipantRowIds, pCampaignId) { var campaignParticipantLogId = util.getNewUUID(); var valsCampaignParticipantLog; - if(isUpdate == "true") + if(isUpdate) { var oldCampaignStepId = oldStepIds[pParticipantRowIds[participant]] || ""; + var updatedValues = [ newCampaignStepId, @@ -116,8 +84,7 @@ function _handleRowIds(pParticipantRowIds, pCampaignId) ]; var condition = newWhere("CAMPAIGNPARTICIPANT.CONTACT_ID", pParticipantRowIds[participant]) - .and("CAMPAIGNPARTICIPANT.CAMPAIGN_ID", pCampaignId) - .or("CAMPAIGNPARTICIPANT.CAMPAIGNPARTICIPANTID", pParticipantRowIds[participant]); + .and("CAMPAIGNPARTICIPANT.CAMPAIGN_ID", pCampaignId); valsCampaignParticipantLog = [ campaignParticipantLogId, @@ -159,8 +126,7 @@ function _handleRowIds(pParticipantRowIds, pCampaignId) logArray.push(["CAMPAIGNPARTICIPANTLOG", colNamesCampaignParticipantLog, null, valsCampaignParticipantLog]); } } - - if(isUpdate == "true") + if(isUpdate) { db.updates(statementArray) } diff --git a/entity/CampaignAddParticipants_entity/entityfields/campaign_id/onValidation.js b/entity/CampaignAddParticipants_entity/entityfields/campaign_id/onValidation.js index c596003e424ef1b3ec890598ce9a8ecadedc4ec4..f4f7ad8fa87f0ce1c5983c6913e0c14fc7d4f3ff 100644 --- a/entity/CampaignAddParticipants_entity/entityfields/campaign_id/onValidation.js +++ b/entity/CampaignAddParticipants_entity/entityfields/campaign_id/onValidation.js @@ -1,24 +1,17 @@ +import("Util_lib"); import("system.vars"); import("system.result"); import("Sql_lib"); import("system.translate"); +var validCount = JSON.parse(vars.get("$field.campaignparticipantContactIds")).length; +var maxCount = vars.get("$field.campaignStepMaxParticipantCount"); +var isUpdate = Utils.toBoolean(vars.get("$param.isUpdate_param")); -if (vars.get("$param.campaignParticipantsRowIds_param") != null && vars.get("$param.campaignParticipantsRowIds_param") != "") -{ - let participants = JSON.parse(vars.get("$param.campaignParticipantsRowIds_param")); +if (vars.get("$field.CAMPAIGN_ID")){ - if(participants.length > 0) - { - let thisParticipantCount = newSelect("COUNT(*)") - .from("CAMPAIGNPARTICIPANT") - .where("CAMPAIGNPARTICIPANT.CAMPAIGN_ID", vars.get("$field.CAMPAIGN_ID")) - .and("CAMPAIGNPARTICIPANT.CONTACT_ID", participants, SqlBuilder.IN()) - .cell(); - - if(parseInt(thisParticipantCount) > 0) - { - result.string(translate.text("Participant is already participating")); - } + + if (validCount == 0 && !isUpdate){ + result.string(translate.text("All of the chosen records are already in the campaign")); } } diff --git a/entity/CampaignAddParticipants_entity/entityfields/campaign_id/stateProcess.js b/entity/CampaignAddParticipants_entity/entityfields/campaign_id/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..31931105f9e8011ac8e49b1ec3e9443c6ec2095b --- /dev/null +++ b/entity/CampaignAddParticipants_entity/entityfields/campaign_id/stateProcess.js @@ -0,0 +1,10 @@ +import("system.result"); +import("system.neon"); +import("system.vars"); + + +if(vars.exists("$param.currentCampaignId_param") && vars.get("$param.currentCampaignId_param")) +{ + result.string(neon.COMPONENTSTATE_READONLY); +} +else result.string(neon.COMPONENTSTATE_EDITABLE); \ No newline at end of file diff --git a/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantcontactids/valueProcess.js b/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantcontactids/valueProcess.js index d1c7824536e06bed2ffb8d47a1b93cc8f1260253..6511d5abbe134859e02af1b780da968a76fdd7ba 100644 --- a/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantcontactids/valueProcess.js +++ b/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantcontactids/valueProcess.js @@ -1,3 +1,4 @@ +import("Util_lib"); import("system.eMath"); import("system.result"); import("system.vars"); @@ -6,10 +7,10 @@ import("FilterViewAction_lib"); import("Campaign_lib"); -if(vars.get("$field.CAMPAIGN_ID")) +if(vars.get("$field.CAMPAIGN_ID") && vars.get("$field.CAMPAIGNSTEP_ID")) { var contactIds, filteredContactIds; - var isUpdate = vars.getString("$param.isUpdate_param"); + var isUpdate = Utils.toBoolean(vars.get("$param.isUpdate_param")); var comingfrom = vars.getString("$param.dataSourceTableName_param"); var selection = JSON.parse(vars.getString("$param.campaignParticipantsRowIds_param")); @@ -28,17 +29,18 @@ if(vars.get("$field.CAMPAIGN_ID")) { if (vars.get("$param.campaignParticipantsCondition_param")) { + var contactFilterCondition = JSON.parse(vars.get("$param.campaignParticipantsCondition_param")).condition; - contactIds = CampaignUtils.GetContactIdsInCampaignByCondition(vars.get("$field.CAMPAIGN_ID"), contactFilterCondition); + contactIds = CampaignUtils.GetContactIdsNotInCampaignStepByCondition(vars.get("$field.CAMPAIGNSTEP_ID"),vars.get("$field.CAMPAIGN_ID"), contactFilterCondition); } else { - contactIds = selection; + contactIds = CampaignUtils.GetContactIdsNotInCampaignStepByRowIds(vars.get("$field.CAMPAIGNSTEP_ID"), selection); } } else { - contactIds = CampaignUtils.GetContactIdsNotInCampaignByRowIds(vars.get("$field.CAMPAIGN_ID"), JSON.parse(selection)); + contactIds = CampaignUtils.GetContactIdsNotInCampaignByRowIds(vars.get("$field.CAMPAIGN_ID"), selection); } result.string(JSON.stringify(contactIds)); diff --git a/entity/CampaignAddParticipants_entity/entityfields/campaignstep_id/onValidation.js b/entity/CampaignAddParticipants_entity/entityfields/campaignstep_id/onValidation.js new file mode 100644 index 0000000000000000000000000000000000000000..9767998d73621627977f7032ebf94d92f3ac544e --- /dev/null +++ b/entity/CampaignAddParticipants_entity/entityfields/campaignstep_id/onValidation.js @@ -0,0 +1,21 @@ +import("Campaign_lib"); +import("Util_lib"); +import("system.vars"); +import("system.result"); +import("Sql_lib"); +import("system.translate"); + +var validCount = JSON.parse(vars.get("$field.campaignparticipantContactIds")).length; +var maxCount = vars.get("$field.campaignStepMaxParticipantCount"); + +var isUpdate = Utils.toBoolean(vars.get("$param.isUpdate_param")); + +if (vars.get("$field.CAMPAIGN_ID")){ + var currentCount = parseInt(CampaignUtils.getParticipantCountForStep(vars.get("$field.CAMPAIGNSTEP_ID"),vars.get("$field.CAMPAIGN_ID"))); + if ( (validCount+currentCount) > maxCount) + result.string(translate.text("Not enough room in campaignstep")); + + if (validCount == 0 && isUpdate){ + result.string(translate.text("All of the chosen records are already in the campaignstep")); + } +} \ No newline at end of file diff --git a/entity/CampaignAnalysis_entity/CampaignAnalysis_entity.aod b/entity/CampaignAnalysis_entity/CampaignAnalysis_entity.aod index 432e1d4f798b4c2928c0e37cc9b506016699886f..5bd52372fc9092d7c687468678d14cc533dee974 100644 --- a/entity/CampaignAnalysis_entity/CampaignAnalysis_entity.aod +++ b/entity/CampaignAnalysis_entity/CampaignAnalysis_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>CampaignAnalysis_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/CampaignAnalysis_entity/documentation.adoc</documentation> @@ -15,14 +15,6 @@ <entityProvider> <name>CampaignAnalysisProvider</name> <documentation>%aditoprj%/entity/CampaignAnalysis_entity/entityfields/campaignanalysisprovider/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>bd130613-f0e4-4591-8035-2c2491b08c50</name> - <entityName>Campaign_entity</entityName> - <fieldName>CampaignAnalysisConsumer</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>DateEnd_param</name> diff --git a/entity/CampaignCostChart_entity/CampaignCostChart_entity.aod b/entity/CampaignCostChart_entity/CampaignCostChart_entity.aod index 58a579ab19e9eb374abf7a186b1d33602d0b5407..07c1ff71b49728c347e49070a488a4496078b7e1 100644 --- a/entity/CampaignCostChart_entity/CampaignCostChart_entity.aod +++ b/entity/CampaignCostChart_entity/CampaignCostChart_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>CampaignCostChart_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/CampaignCostChart_entity/documentation.adoc</documentation> @@ -34,14 +34,6 @@ <entityProvider> <name>CostChart</name> <documentation>%aditoprj%/entity/CampaignCostChart_entity/entityfields/costchart/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>e519262b-ff42-4c26-9d28-4d9566eafcdc</name> - <entityName>Campaign_entity</entityName> - <fieldName>CampaignCostsChart</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityProvider> <name>#PROVIDER_AGGREGATES</name> diff --git a/entity/CampaignCost_entity/CampaignCost_entity.aod b/entity/CampaignCost_entity/CampaignCost_entity.aod index 9016cfd74c6a4c08c3db2342593a2499338aaba3..e7262dec3c778502423d0504d3883c71b20b440a 100644 --- a/entity/CampaignCost_entity/CampaignCost_entity.aod +++ b/entity/CampaignCost_entity/CampaignCost_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>CampaignCost_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/CampaignCost_entity/documentation.adoc</documentation> @@ -80,14 +80,6 @@ <entityProvider> <name>CampaignCosts</name> <documentation>%aditoprj%/entity/CampaignCost_entity/entityfields/campaigncosts/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>7131288b-af5c-4914-96f5-c5d70217fc23</name> - <entityName>Campaign_entity</entityName> - <fieldName>CampaignCosts</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>CampaignStepId_param</name> @@ -111,20 +103,6 @@ <entityProvider> <name>StepCosts</name> <documentation>%aditoprj%/entity/CampaignCost_entity/entityfields/stepcosts/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>af147f3e-a1bd-4eb0-9ac8-325dbdaba17d</name> - <entityName>CampaignStep_entity</entityName> - <fieldName>CampaignStepCosts</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>2a92b738-c0bb-4c14-9915-aff9e18effaf</name> - <entityName>Campaign_entity</entityName> - <fieldName>CampaignStepCosts</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>CampaignStepId_param</name> diff --git a/entity/CampaignParticipantChart_entity/CampaignParticipantChart_entity.aod b/entity/CampaignParticipantChart_entity/CampaignParticipantChart_entity.aod index 5e514a302a5165452ac0cb7ee1c1b4fd1448a141..f33503df3822931e371d355c60e76cb1cff04518 100644 --- a/entity/CampaignParticipantChart_entity/CampaignParticipantChart_entity.aod +++ b/entity/CampaignParticipantChart_entity/CampaignParticipantChart_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>CampaignParticipantChart_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/CampaignParticipantChart_entity/documentation.adoc</documentation> @@ -17,14 +17,6 @@ <entityProvider> <name>ParticipantChart</name> <documentation>%aditoprj%/entity/CampaignParticipantChart_entity/entityfields/participantchart/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>59e7c7ff-a649-4efe-89dd-8fdb7967261b</name> - <entityName>Campaign_entity</entityName> - <fieldName>CampaignParticipantsChart</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>UID</name> diff --git a/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod b/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod index 3466c72ea7263175fbc96f5b59d15e44b6e13336..7f9346cc2d57a6e3eba0f70aa8c2bdd96968eb7f 100644 --- a/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod +++ b/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>CampaignParticipant_entity</name> <title>Participant</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -21,20 +21,6 @@ <name>CampaignParticipantsProvider</name> <documentation>%aditoprj%/entity/CampaignParticipant_entity/entityfields/campaignparticipantsprovider/documentation.adoc</documentation> <recordContainer>db</recordContainer> - <dependencies> - <entityDependency> - <name>f28945cd-4613-4dfa-91f7-a7d9d64cef58</name> - <entityName>Campaign_entity</entityName> - <fieldName>CampaignParticipants</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>7ad08378-b36f-4512-8891-db727c6ddcd7</name> - <entityName>CampaignStep_entity</entityName> - <fieldName>CampaignParticipantsConsumer</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ContactId_param</name> @@ -117,6 +103,7 @@ <state>READONLY</state> <stateProcess>%aditoprj%/entity/CampaignParticipant_entity/entityfields/contact_id/stateProcess.js</stateProcess> <displayValueProcess>%aditoprj%/entity/CampaignParticipant_entity/entityfields/contact_id/displayValueProcess.js</displayValueProcess> + <onValidation>%aditoprj%/entity/CampaignParticipant_entity/entityfields/contact_id/onValidation.js</onValidation> </entityField> <entityField> <name>DATE_NEW</name> diff --git a/entity/CampaignParticipant_entity/entityfields/contact_id/onValidation.js b/entity/CampaignParticipant_entity/entityfields/contact_id/onValidation.js new file mode 100644 index 0000000000000000000000000000000000000000..6be2052997ff4d0cd3999bdc62ac2814b43f206e --- /dev/null +++ b/entity/CampaignParticipant_entity/entityfields/contact_id/onValidation.js @@ -0,0 +1,17 @@ +import("system.translate"); +import("system.result"); +import("system.neon"); +import("system.vars"); +import("Sql_lib"); + +if (vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW && vars.get("$local.value") && vars.get("$field.CAMPAIGN_ID")) +{ + var isParticipant= newSelect(["CONTACT_ID"]) + .from("CAMPAIGNPARTICIPANT") + .where("CAMPAIGNPARTICIPANT.CAMPAIGN_ID", vars.get("$field.CAMPAIGN_ID")) + .and("CAMPAIGNPARTICIPANT.CONTACT_ID",vars.get("$local.value")) + .cell(); + if (isParticipant){ + result.string(translate.text("Chosen record is already in the campaign")); + } +} \ No newline at end of file diff --git a/entity/CampaignParticipant_entity/entityfields/contact_id/stateProcess.js b/entity/CampaignParticipant_entity/entityfields/contact_id/stateProcess.js index aefbe65aa0e63f246ad293afa03a021aa57679af..1d20f9f105caff1beea424c6752b7e54f3aae850 100644 --- a/entity/CampaignParticipant_entity/entityfields/contact_id/stateProcess.js +++ b/entity/CampaignParticipant_entity/entityfields/contact_id/stateProcess.js @@ -2,7 +2,7 @@ import("system.result"); import("system.neon"); import("system.vars"); -if(vars.exists("$param.ContactId_param") && vars.get("$param.ContactId_param")) +if(vars.exists("$param.ContactId_param") && vars.get("$param.ContactId_param") || vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT) //A contact has been provided. Show it in readonly. fieldState = neon.COMPONENTSTATE_READONLY; else diff --git a/entity/CampaignPlanning_entity/CampaignPlanning_entity.aod b/entity/CampaignPlanning_entity/CampaignPlanning_entity.aod index 33c4b451adff6a01240d01795313d03eda9a0dac..b36112d302c6b7f1ebf1f853393f752060e4a4a8 100644 --- a/entity/CampaignPlanning_entity/CampaignPlanning_entity.aod +++ b/entity/CampaignPlanning_entity/CampaignPlanning_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>CampaignPlanning_entity</name> <title>Campaign Planning</title> <majorModelMode>DISTRIBUTED</majorModelMode> diff --git a/entity/CampaignStep_entity/CampaignStep_entity.aod b/entity/CampaignStep_entity/CampaignStep_entity.aod index 00d2090a782a2b6b9c4beb0cc55e001d7261fd74..98f8c9ab6be8c4a0fb9717db8b329df74f40a675 100644 --- a/entity/CampaignStep_entity/CampaignStep_entity.aod +++ b/entity/CampaignStep_entity/CampaignStep_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>CampaignStep_entity</name> <title>Campaign Step</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -20,20 +20,6 @@ <entityFields> <entityProvider> <name>#PROVIDER</name> - <dependencies> - <entityDependency> - <name>13f82959-7e04-449f-a657-c34f6b97f3be</name> - <entityName>Object_entity</entityName> - <fieldName>CampaignSteps</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>ae4ec215-b2a0-4b19-b4f5-ca2410439421</name> - <entityName>ObjectProxy_entity</entityName> - <fieldName>CampaignSteps</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>CAMPAIGNSTEPID</name> @@ -132,44 +118,6 @@ <name>CampaignSteps</name> <documentation>%aditoprj%/entity/CampaignStep_entity/entityfields/campaignsteps/documentation.adoc</documentation> <recordContainer>db</recordContainer> - <dependencies> - <entityDependency> - <name>421e6cc2-f874-4834-b022-fe1b253d50af</name> - <entityName>Campaign_entity</entityName> - <fieldName>CampaignSteps</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>7f1c046b-0e8f-429e-a0a6-3322382c61d4</name> - <entityName>CampaignParticipant_entity</entityName> - <fieldName>CampaignSteps</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>eedc7b17-af98-4ffb-b527-97835cf8f903</name> - <entityName>CampaignAddParticipants_entity</entityName> - <fieldName>CampaignStepConsumer</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>ad4ee503-95b9-4add-a0ef-e833db008349</name> - <entityName>CampaignCost_entity</entityName> - <fieldName>CampaignSteps</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>3fde1e51-cc4c-4727-b4e7-fd30bed1ee04</name> - <entityName>Campaign_entity</entityName> - <fieldName>CampaignStepsReadonly</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>db1a63f3-753b-423d-9ab9-db3d03315dc6</name> - <entityName>CampaignStep_entity</entityName> - <fieldName>CampaignStepsConsumer</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>campaignId_param</name> @@ -309,7 +257,6 @@ <entityConsumer> <name>Tasks</name> <title>Tasks</title> - <stateProcess>%aditoprj%/entity/CampaignStep_entity/entityfields/tasks/stateProcess.js</stateProcess> <dependency> <name>dependency</name> <entityName>Task_entity</entityName> @@ -432,10 +379,29 @@ </entityParameter> </children> </entityConsumer> + <entityActionGroup> + <name>group</name> + <children> + <entityActionField> + <name>moveUp</name> + <onActionProcess>%aditoprj%/entity/CampaignStep_entity/entityfields/group/children/moveup/onActionProcess.js</onActionProcess> + <iconId>VAADIN:ARROW_UP</iconId> + <state>DISABLED</state> + <stateProcess>%aditoprj%/entity/CampaignStep_entity/entityfields/group/children/moveup/stateProcess.js</stateProcess> + </entityActionField> + <entityActionField> + <name>moveDown</name> + <onActionProcess>%aditoprj%/entity/CampaignStep_entity/entityfields/group/children/movedown/onActionProcess.js</onActionProcess> + <iconId>VAADIN:ARROW_DOWN</iconId> + <stateProcess>%aditoprj%/entity/CampaignStep_entity/entityfields/group/children/movedown/stateProcess.js</stateProcess> + </entityActionField> + </children> + </entityActionGroup> </entityFields> <recordContainers> <dbRecordContainer> <name>db</name> + <hasDependentRecords v="true" /> <conditionProcess>%aditoprj%/entity/CampaignStep_entity/recordcontainers/db/conditionProcess.js</conditionProcess> <orderClauseProcess>%aditoprj%/entity/CampaignStep_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess> <onDBInsert>%aditoprj%/entity/CampaignStep_entity/recordcontainers/db/onDBInsert.js</onDBInsert> diff --git a/entity/CampaignStep_entity/entityfields/group/children/movedown/onActionProcess.js b/entity/CampaignStep_entity/entityfields/group/children/movedown/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..d55de329e829bb8bfc0289f86bd0b788690775df --- /dev/null +++ b/entity/CampaignStep_entity/entityfields/group/children/movedown/onActionProcess.js @@ -0,0 +1,9 @@ +import("system.vars"); +import("system.neon"); +import("Campaign_lib"); + +CampaignUtils.moveStepDown(vars.get("$field.CAMPAIGNSTEPID")) + +neon.refreshAll(); + + diff --git a/entity/CampaignStep_entity/entityfields/group/children/movedown/stateProcess.js b/entity/CampaignStep_entity/entityfields/group/children/movedown/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..984483b8fc661196e26875d32d1ea126410d084d --- /dev/null +++ b/entity/CampaignStep_entity/entityfields/group/children/movedown/stateProcess.js @@ -0,0 +1,27 @@ +import("system.result"); +import("Sql_lib"); +import("system.vars"); +import("system.neon"); + +var sorting = parseInt(vars.get("$field.SORTING")); +var campaignId = vars.get("$field.CAMPAIGN_ID"); +var campaignStepId = vars.get("$field.CAMPAIGNSTEPID"); + +var validNextStep = newSelect("CAMPAIGNSTEP.CAMPAIGNSTEPID") + .from("CAMPAIGNSTEP") + .where("CAMPAIGNSTEP.CAMPAIGN_ID",campaignId) + .and("CAMPAIGNSTEP.SORTING",sorting+1) + .and(newWhere("CAMPAIGNSTEP.PREDECESSORSTEP_ID",campaignStepId,SqlBuilder.NOT_EQUAL()) + .or("CAMPAIGNSTEP.PREDECESSORSTEP_ID is null")) + .cell(); + + +if (validNextStep) +{ + result.string(neon.COMPONENTSTATE_EDITABLE); +} +else +{ + result.string(neon.COMPONENTSTATE_DISABLED); +} + diff --git a/entity/CampaignStep_entity/entityfields/group/children/moveup/onActionProcess.js b/entity/CampaignStep_entity/entityfields/group/children/moveup/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..f6c210312a2f9fb04333581c8610b8ffa7b9cb88 --- /dev/null +++ b/entity/CampaignStep_entity/entityfields/group/children/moveup/onActionProcess.js @@ -0,0 +1,8 @@ +import("system.vars"); +import("system.neon"); +import("Campaign_lib"); + +CampaignUtils.moveStepUp(vars.get("$field.CAMPAIGNSTEPID")) + + +neon.refreshAll(); diff --git a/entity/CampaignStep_entity/entityfields/group/children/moveup/stateProcess.js b/entity/CampaignStep_entity/entityfields/group/children/moveup/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..f24f17d1e3f1e4cbc209549fc52a408789a746bb --- /dev/null +++ b/entity/CampaignStep_entity/entityfields/group/children/moveup/stateProcess.js @@ -0,0 +1,25 @@ +import("system.result"); +import("Sql_lib"); +import("system.vars"); +import("system.neon"); + +var sorting = parseInt(vars.get("$field.SORTING")); +var campaignId = vars.get("$field.CAMPAIGN_ID"); +var predecessorStepId = vars.get("$field.PREDECESSORSTEP_ID"); + +var validPreviousStep = newSelect("CAMPAIGNSTEP.CAMPAIGNSTEPID") + .from("CAMPAIGNSTEP") + .where("CAMPAIGNSTEP.CAMPAIGN_ID",campaignId) + .and("CAMPAIGNSTEP.SORTING",sorting-1) + .and("CAMPAIGNSTEP.CAMPAIGNSTEPID",predecessorStepId,SqlBuilder.NOT_EQUAL()) + .cell(); + +if (validPreviousStep) +{ + result.string(neon.COMPONENTSTATE_EDITABLE); +} +else +{ + result.string(neon.COMPONENTSTATE_DISABLED); +} + diff --git a/entity/CampaignStep_entity/entityfields/tasks/stateProcess.js b/entity/CampaignStep_entity/entityfields/tasks/stateProcess.js deleted file mode 100644 index 24d86976c9030f4f7791d87a88dc253cfdd8d20c..0000000000000000000000000000000000000000 --- a/entity/CampaignStep_entity/entityfields/tasks/stateProcess.js +++ /dev/null @@ -1,10 +0,0 @@ -import("system.result"); -import("system.neon"); -import("system.vars"); -import("ActivityTask_lib"); -import("Context_lib"); - -if (TaskUtils.hasTasks(vars.get("$field.CAMPAIGNSTEPID"), ContextUtils.getCurrentContextId())) - result.string(neon.COMPONENTSTATE_EDITABLE); -else - result.string(neon.COMPONENTSTATE_INVISIBLE); \ No newline at end of file diff --git a/entity/CampaignStep_entity/recordcontainers/db/onDBDelete.js b/entity/CampaignStep_entity/recordcontainers/db/onDBDelete.js index 6ff91a5eb319120b527776868367d3cdb0f445f1..c851ee9b66d5efaa3ee2e62cdfff1beb6e4402e2 100644 --- a/entity/CampaignStep_entity/recordcontainers/db/onDBDelete.js +++ b/entity/CampaignStep_entity/recordcontainers/db/onDBDelete.js @@ -1,3 +1,21 @@ +import("system.neon"); +import("system.vars"); import("Workflow_lib"); +import("Sql_lib"); +import("Campaign_lib"); + +newSelect("CAMPAIGNSTEP.CAMPAIGNSTEPID") +.from("CAMPAIGNSTEP") +.where("CAMPAIGNSTEP.CAMPAIGN_ID",vars.get("$field.CAMPAIGN_ID")) +.and("CAMPAIGNSTEP.SORTING",vars.get("$field.SORTING"),SqlBuilder.GREATER_OR_EQUAL()) +.orderBy("CAMPAIGNSTEP.SORTING asc") +.arrayColumn() +.forEach(function(pCampaignStepId) + { + CampaignUtils.moveStepUp(pCampaignStepId) + }); + +newWhere("CAMPAIGNSTEP.PREDECESSORSTEP_ID",vars.get("$field.CAMPAIGNSTEPID")) +.updateFields({"CAMPAIGNSTEP.PREDECESSORSTEP_ID":null}); WorkflowSignalSender.deleted(); \ No newline at end of file diff --git a/entity/Campaign_entity/Campaign_entity.aod b/entity/Campaign_entity/Campaign_entity.aod index ab1ebaa775b6f01cf20840381913eae2b48065d8..7e0c6abd260e50c2900bb4da742fbf585ee67fe4 100644 --- a/entity/Campaign_entity/Campaign_entity.aod +++ b/entity/Campaign_entity/Campaign_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Campaign_entity</name> <title>Campaign</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -46,20 +46,6 @@ </entityActionGroup> <entityProvider> <name>#PROVIDER</name> - <dependencies> - <entityDependency> - <name>8db36fa6-e799-488c-882f-1141f781c9dc</name> - <entityName>Object_entity</entityName> - <fieldName>Campaigns</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>ccbac0b6-9708-4afe-9676-1c6aa913463c</name> - <entityName>ObjectProxy_entity</entityName> - <fieldName>Campaigns</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>CAMPAIGNID</name> @@ -170,32 +156,6 @@ <name>Campaigns</name> <documentation>%aditoprj%/entity/Campaign_entity/entityfields/campaigns/documentation.adoc</documentation> <recordContainer>db</recordContainer> - <dependencies> - <entityDependency> - <name>7cb37ad1-a0a9-41bc-9a9e-7207317cd812</name> - <entityName>CampaignParticipant_entity</entityName> - <fieldName>CampaignsConsumer</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>918b744c-4bd5-4ae0-9a09-5ecf1927b8f6</name> - <entityName>CampaignAddParticipants_entity</entityName> - <fieldName>CampaignConsumer</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>d238b02c-75e7-4cf4-b90c-bb36d41ae90f</name> - <entityName>CampaignCost_entity</entityName> - <fieldName>Campaigns</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>92ec68f6-2ff5-4f15-9001-6297a6d5790d</name> - <entityName>CampaignStep_entity</entityName> - <fieldName>CampaignConsumer</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityConsumer> <name>CampaignParticipants</name> diff --git a/entity/ChecklistEntryValue_entity/ChecklistEntryValue_entity.aod b/entity/ChecklistEntryValue_entity/ChecklistEntryValue_entity.aod index 307cc1e87027b5757a020bf21e3965c812548a4d..d338522fd916a7f3cdba56ca7c02c4dcebd5b9e5 100644 --- a/entity/ChecklistEntryValue_entity/ChecklistEntryValue_entity.aod +++ b/entity/ChecklistEntryValue_entity/ChecklistEntryValue_entity.aod @@ -1,11 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>ChecklistEntryValue_entity</name> <title>Checklist entries</title> <majorModelMode>DISTRIBUTED</majorModelMode> <icon>NEON:MQL</icon> <imageProcess>%aditoprj%/entity/ChecklistEntryValue_entity/imageProcess.js</imageProcess> - <recordContainer>jdito</recordContainer> + <recordContainer>jDito</recordContainer> <entityFields> <entityProvider> <name>#PROVIDER</name> @@ -14,9 +14,6 @@ <name>#PROVIDER_AGGREGATES</name> <useAggregates v="true" /> </entityProvider> - <entityField> - <name>CHECKLISTENTRYVALUEID</name> - </entityField> <entityField> <name>CHECKLISTENTRY_ID</name> <title>Checklist entry</title> @@ -48,6 +45,7 @@ <entityParameter> <name>ObjectRowId_param</name> <expose v="true" /> + <mandatory v="true" /> </entityParameter> <entityParameter> <name>ObjectType_param</name> @@ -60,29 +58,7 @@ <entityProvider> <name>ChecklistEntryValues</name> <titlePlural>Checklist entries</titlePlural> - <recordContainer>jdito</recordContainer> - <dependencies> - <entityDependency> - <name>7eae9b1e-cea7-4688-898a-754dba82eac7</name> - <entityName>ChecklistEntry_entity</entityName> - <fieldName>ChecklistEntryValues</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>d4bddebc-b38b-46dc-8bb8-5ffa4fbdf627</name> - <entityName>Salesproject_entity</entityName> - <fieldName>ChecklistEntryValues</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> - <entityParameter> - <name>Verifier_param</name> - <valueProcess>%aditoprj%/entity/ChecklistEntryValue_entity/entityfields/verifier_param/valueProcess.js</valueProcess> - </entityParameter> - <entityParameter> - <name>VerifierFnName_param</name> - </entityParameter> <entityField> <name>UID</name> </entityField> @@ -93,44 +69,53 @@ <children> <entityActionField> <name>setCompleted</name> - <title>Set completed</title> <onActionProcess>%aditoprj%/entity/ChecklistEntryValue_entity/entityfields/setchecklistentrycompleted/children/setcompleted/onActionProcess.js</onActionProcess> <isObjectAction v="false" /> - <isSelectionAction v="true" /> + <selectionType>MULTI</selectionType> <iconId>NEON:MQL</iconId> + <titleProcess>%aditoprj%/entity/ChecklistEntryValue_entity/entityfields/setchecklistentrycompleted/children/setcompleted/titleProcess.js</titleProcess> </entityActionField> </children> </entityActionGroup> <entityField> <name>AUTO</name> <title>Automatically</title> + <contentType>BOOLEAN</contentType> + </entityField> + <entityField> + <name>DONEDATE</name> + <title>Done on</title> + <contentType>DATE</contentType> + <resolution>MINUTE</resolution> + </entityField> + <entityField> + <name>DONEUSER</name> + <title>Done by</title> </entityField> - <entityParameter> - <name>ChecklistEntryValueId_param</name> - <expose v="true" /> - </entityParameter> </entityFields> <recordContainers> <jDitoRecordContainer> - <name>jdito</name> + <name>jDito</name> <jDitoRecordAlias>Data_alias</jDitoRecordAlias> <contentProcess>%aditoprj%/entity/ChecklistEntryValue_entity/recordcontainers/jdito/contentProcess.js</contentProcess> - <onUpdate>%aditoprj%/entity/ChecklistEntryValue_entity/recordcontainers/jdito/onUpdate.js</onUpdate> <recordFieldMappings> <jDitoRecordFieldMapping> <name>UID.value</name> </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>AUTO.value</name> + </jDitoRecordFieldMapping> <jDitoRecordFieldMapping> <name>CHECKLISTENTRY_ID.value</name> </jDitoRecordFieldMapping> <jDitoRecordFieldMapping> - <name>CHECKLISTENTRYVALUEID.value</name> + <name>CHECKLISTENTRY_ID.displayValue</name> </jDitoRecordFieldMapping> <jDitoRecordFieldMapping> - <name>DATE_EDIT.value</name> + <name>DONEUSER.value</name> </jDitoRecordFieldMapping> <jDitoRecordFieldMapping> - <name>DATE_NEW.value</name> + <name>DONEDATE.value</name> </jDitoRecordFieldMapping> <jDitoRecordFieldMapping> <name>IS_FULFILLED.value</name> @@ -142,19 +127,16 @@ <name>OBJECT_TYPE.value</name> </jDitoRecordFieldMapping> <jDitoRecordFieldMapping> - <name>USER_EDIT.value</name> - </jDitoRecordFieldMapping> - <jDitoRecordFieldMapping> - <name>USER_NEW.value</name> + <name>DATE_EDIT.value</name> </jDitoRecordFieldMapping> <jDitoRecordFieldMapping> - <name>CHECKLISTENTRY_ID.displayValue</name> + <name>DATE_NEW.value</name> </jDitoRecordFieldMapping> <jDitoRecordFieldMapping> - <name>AUTO.value</name> + <name>USER_EDIT.value</name> </jDitoRecordFieldMapping> <jDitoRecordFieldMapping> - <name>AUTO.displayValue</name> + <name>USER_NEW.value</name> </jDitoRecordFieldMapping> </recordFieldMappings> </jDitoRecordContainer> diff --git a/entity/ChecklistEntryValue_entity/entityfields/setchecklistentrycompleted/children/setcompleted/onActionProcess.js b/entity/ChecklistEntryValue_entity/entityfields/setchecklistentrycompleted/children/setcompleted/onActionProcess.js index 80020200dc6b4dbf08aa00f5c0699d6db47d79e0..9ac4b995eb7e8f87127e037ef37566db7633c185 100644 --- a/entity/ChecklistEntryValue_entity/entityfields/setchecklistentrycompleted/children/setcompleted/onActionProcess.js +++ b/entity/ChecklistEntryValue_entity/entityfields/setchecklistentrycompleted/children/setcompleted/onActionProcess.js @@ -1,8 +1,37 @@ +import("Util_lib"); +import("Sql_lib"); import("system.vars"); import("system.neon"); -import("Sql_lib"); -newWhere("CHECKLISTENTRYVALUE.CHECKLISTENTRYVALUEID", "$field.CHECKLISTENTRYVALUEID") - .updateFields({"IS_FULFILLED":1}); - -neon.refresh(); \ No newline at end of file +var isFulfilled = Utils.toBoolean(vars.get("$field.IS_FULFILLED")); +var fulfilledValue = isFulfilled ? "0" : "1"; +var fulfilledUser = isFulfilled ? "" : vars.get("$sys.user"); +var fulfilledDate = isFulfilled ? "" : vars.get("$sys.date"); + +var cond = newWhere("CHECKLISTENTRYVALUE.CHECKLISTENTRYVALUEID", vars.get("$field.UID")).toString(); + +if(Utils.toBoolean(newSelect("count(*)").from("CHECKLISTENTRYVALUE").where(cond).cell())) +{ + newWhere(cond).updateFields({ + DONEUSER: fulfilledUser, + DONEDATE: fulfilledDate, + IS_FULFILLED: fulfilledValue + }, "CHECKLISTENTRYVALUE"); +} +else +{ + new SqlBuilder().insertFields({ + CHECKLISTENTRYVALUEID: vars.get("$field.UID"), + CHECKLISTENTRY_ID: vars.get("$field.CHECKLISTENTRY_ID"), + DONEUSER: fulfilledUser, + DONEDATE: fulfilledDate, + IS_FULFILLED: fulfilledValue, + OBJECT_TYPE: vars.get("$field.OBJECT_TYPE"), + OBJECT_ROWID: vars.get("$field.OBJECT_ROWID"), + DATE_EDIT: vars.get("$field.DATE_EDIT"), + DATE_NEW: vars.get("$field.DATE_NEW"), + USER_EDIT: vars.get("$field.USER_EDIT"), + USER_NEW: vars.get("$field.USER_NEW") + }, "CHECKLISTENTRYVALUE"); +} +neon.refresh(); diff --git a/entity/ChecklistEntryValue_entity/entityfields/setchecklistentrycompleted/children/setcompleted/titleProcess.js b/entity/ChecklistEntryValue_entity/entityfields/setchecklistentrycompleted/children/setcompleted/titleProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..7a3fbe0a7a5a7bd2743b000c2953487533e4686a --- /dev/null +++ b/entity/ChecklistEntryValue_entity/entityfields/setchecklistentrycompleted/children/setcompleted/titleProcess.js @@ -0,0 +1,8 @@ +import("system.translate"); +import("system.vars"); +import("system.result"); + +result.string(parseInt(vars.get("$field.IS_FULFILLED")) > 0 + ? translate.text("Set not completed") + : translate.text("Set completed") +); diff --git a/entity/ChecklistEntryValue_entity/entityfields/verifier_param/valueProcess.js b/entity/ChecklistEntryValue_entity/entityfields/verifier_param/valueProcess.js deleted file mode 100644 index bd99ebeed2027694251b6959689c55508a87b6bb..0000000000000000000000000000000000000000 --- a/entity/ChecklistEntryValue_entity/entityfields/verifier_param/valueProcess.js +++ /dev/null @@ -1,14 +0,0 @@ -import("Util_lib"); -import("system.result"); -import("system.vars"); -import("ChecklistEntryRegistry_basic"); - - -var fnName = vars.get("$param.VerifierFnName_param"); -var objectRowId = vars.get("$param.ObjectRowId_param"); -var isFulfilledFn = $ChecklistEntryRegistry[fnName]; - -if (Utils.isFunction(isFulfilledFn)) - result.string(isFulfilledFn().verifierFn(objectRowId)); - - diff --git a/entity/ChecklistEntryValue_entity/recordcontainers/jdito/contentProcess.js b/entity/ChecklistEntryValue_entity/recordcontainers/jdito/contentProcess.js index a17f5785d37a462f4d534cf5770264812e1d2cfe..e1e1e87749e51d75a7b8090cd0df45d187441724 100644 --- a/entity/ChecklistEntryValue_entity/recordcontainers/jdito/contentProcess.js +++ b/entity/ChecklistEntryValue_entity/recordcontainers/jdito/contentProcess.js @@ -1,172 +1,48 @@ -import("system.translate"); -import("system.result"); -import("system.vars"); import("system.util"); -import("system.db"); -import("KeywordRegistry_basic"); -import("Util_lib"); +import("system.vars"); +import("system.result"); +import("system.datetime"); import("Sql_lib"); import("ChecklistEntryRegistry_basic"); -var newUid; -var doesExist; -var checklistEntryIds = []; -var preparedStatements = []; -var checklistEntryValues = []; -var manualChecklistEntries = []; -var manualChecklistEntryValues = []; -var cols = ["CHECKLISTENTRYVALUEID", "CHECKLISTENTRY_ID", "OBJECT_ROWID", "OBJECT_TYPE", - "IS_FULFILLED", "USER_NEW", "USER_EDIT", "DATE_NEW", "DATE_EDIT"]; - -var checklistId = vars.get("$param.ChecklistId_param"); -var objectRowId = vars.get("$param.ObjectRowId_param"); -var checklistEntries = []; -var checklistEntryValueId = vars.get("$param.ChecklistEntryValueId_param"); -if (checklistEntryValueId) -{ - //get all entries of the current checklist - checklistEntries = newSelect([ - "CHECKLISTENTRY.CHECKLISTENTRYID", - "CHECKLISTENTRY.CHECKLIST_ID", - "CHECKLISTENTRY.TITLE", - "CHECKLISTENTRY.AUTO", - "CHECKLISTENTRY.USER_NEW", - "CHECKLISTENTRY.USER_EDIT", - "CHECKLISTENTRY.DATE_NEW", - "CHECKLISTENTRY.DATE_EDIT"]) - .from("CHECKLISTENTRY") - .join("CHECKLISTENTRYVALUE", "CHECKLISTENTRYVALUE.CHECKLISTENTRY_ID = CHECKLISTENTRY.CHECKLISTENTRYID") - .where("CHECKLISTENTRY.CHECKLIST_ID", checklistId) - .and("CHECKLISTENTRYVALUE.CHECKLISTENTRYVALUEID", checklistEntryValueId) - .table(); - - checklistEntries.forEach(function(pRow){ - if (pRow[0]) - { - checklistEntryIds.push(pRow[0]); - } - }); -} -else if (checklistId) -{ - //get all entries of the current checklist - checklistEntries = newSelect([ - "CHECKLISTENTRY.CHECKLISTENTRYID", - "CHECKLISTENTRY.CHECKLIST_ID", - "CHECKLISTENTRY.TITLE", - "CHECKLISTENTRY.AUTO", - "CHECKLISTENTRY.USER_NEW", - "CHECKLISTENTRY.USER_EDIT", - "CHECKLISTENTRY.DATE_NEW", - "CHECKLISTENTRY.DATE_EDIT"]) - .from("CHECKLISTENTRY") - .where("CHECKLISTENTRY.CHECKLIST_ID", checklistId) - .table(); - - checklistEntries.forEach(function(pRow){ - if (pRow[0]) - { - checklistEntryIds.push(pRow[0]); - } - }); -} - -//loop trough the checklistEntries and handle them according to their type -for (let i = 0; i < checklistEntries.length; i++) +var data = newSelect([ + "CHECKLISTENTRYVALUE.CHECKLISTENTRYVALUEID", + "CHECKLISTENTRY.AUTO", + "CHECKLISTENTRY.CHECKLISTENTRYID", + "CHECKLISTENTRY.TITLE", + "CHECKLISTENTRYVALUE.DONEUSER", + "CHECKLISTENTRYVALUE.DONEDATE", + "CHECKLISTENTRYVALUE.IS_FULFILLED", + "CHECKLISTENTRYVALUE.OBJECT_ROWID", + "CHECKLISTENTRYVALUE.OBJECT_TYPE", + "CHECKLISTENTRYVALUE.DATE_EDIT", + "CHECKLISTENTRYVALUE.DATE_NEW", + "CHECKLISTENTRYVALUE.USER_EDIT", + "CHECKLISTENTRYVALUE.USER_NEW" +]).from("CHECKLISTENTRY") +.leftJoin( + "CHECKLISTENTRYVALUE", + newWhere("CHECKLISTENTRYVALUE.CHECKLISTENTRY_ID = CHECKLISTENTRY.CHECKLISTENTRYID") + .and("CHECKLISTENTRYVALUE.OBJECT_ROWID", vars.get("$param.ObjectRowId_param")) + .andIfSet("CHECKLISTENTRYVALUE.OBJECT_TYPE", vars.get("$param.ObjectType_param")) +).whereIfSet("CHECKLISTENTRY.CHECKLIST_ID", vars.get("$param.ChecklistId_param")) +.table(); + +for(let i = 0; i < data.length; i++) { - for (let ii = 0; ii < checklistEntries[i].length; ii++) + data[i][0] = data[i][0] || util.getNewUUID(); + data[i][6] = data[i][6] || "0"; + data[i][7] = data[i][7] || vars.get("$param.ObjectRowId_param"); + data[i][8] = data[i][8] || vars.get("$param.ObjectType_param"); + data[i][10] = data[i][10] || datetime.date(); + data[i][12] = data[i][12] || vars.get("$sys.user"); + + if(parseInt(data[i][1])) { - checklistEntryValues[i] = new Array(13); - - if (checklistEntries[i][3] == 1)//if auto == true - { - newUid = util.getNewUUID(); - vars.set("$param.VerifierFnName_param", checklistEntries[i][2]); - checklistEntryValues[i] = [newUid, checklistEntries[i][0], newUid, "", vars.get("$sys.date"), - Utils.toBoolean(vars.get("$param.Verifier_param")) ? 1 : 0, objectRowId, - "", "null", vars.get("$sys.user")]; - } - else//else manual - { - doesExist = newSelect([ - "CHECKLISTENTRYVALUE.CHECKLISTENTRYVALUEID", - "CHECKLISTENTRYVALUE.CHECKLISTENTRY_ID", - "CHECKLISTENTRYVALUE.CHECKLISTENTRYVALUEID", - "CHECKLISTENTRYVALUE.DATE_EDIT", - "CHECKLISTENTRYVALUE.DATE_NEW", - "CHECKLISTENTRYVALUE.IS_FULFILLED", - "CHECKLISTENTRYVALUE.OBJECT_ROWID", - "CHECKLISTENTRYVALUE.OBJECT_TYPE", - "CHECKLISTENTRYVALUE.USER_EDIT", - "CHECKLISTENTRYVALUE.USER_NEW"]) - .from("CHECKLISTENTRYVALUE") - .where("CHECKLISTENTRYVALUE.CHECKLISTENTRY_ID", checklistEntries[i][0]) - .and("CHECKLISTENTRYVALUE.OBJECT_ROWID", objectRowId) - .arrayRow(); - if (doesExist.length > 0) - { - checklistEntryValues[i] = doesExist; - } - else - { - newUid = util.getNewUUID(); - checklistEntryValues[i] = [newUid, checklistEntries[i][0], newUid, "", vars.get("$sys.date"), "0", objectRowId, "", - "null", vars.get("$sys.user"), ""]; - doesExist = preparedStatements.some(function(pPreparedStatement){ - return pPreparedStatement[3].includes(checklistEntries[i][0]) && pPreparedStatement[3].includes(objectRowId); - }); - - if (!doesExist) - { - preparedStatements.push(["CHECKLISTENTRYVALUE", - cols, - db.getColumnTypes("CHECKLISTENTRYVALUE", cols), - [checklistEntryValues[i][0], - checklistEntryValues[i][1], - checklistEntryValues[i][6], - checklistEntryValues[i][7], - checklistEntryValues[i][5].toString(), - checklistEntryValues[i][9], - checklistEntryValues[i][8], - checklistEntryValues[i][4], - checklistEntryValues[i][3]]]); - } - } - } + var checklistEntry = $ChecklistEntryRegistry[data[i][3]](); + data[i][3] = checklistEntry.title; + data[i][6] = checklistEntry.verifierFn(vars.get("$param.ObjectRowId_param")) ? "1" : "0"; } - checklistEntryValues[i][10] = _checklistEntryDisplayValue(checklistEntries[i][2]); - checklistEntryValues[i][11] = checklistEntries[i][3]; - checklistEntryValues[i][12] = _autoDisplayValue(checklistEntries[i][3]); -} - -db.inserts(preparedStatements);//insert the ones that don't already exist -result.object(checklistEntryValues); - - -function _checklistEntryDisplayValue(pChecklistEntryTitle) -{ - var displayValue; - var verfierFnName = pChecklistEntryTitle; - - var verifierFn = $ChecklistEntryRegistry[verfierFnName]; - - - if (Utils.isFunction(verifierFn)) - displayValue = verifierFn().title; - else{ - displayValue = translate.text(verfierFnName); - } - return displayValue; } -function _autoDisplayValue(pAutoValue) -{ - if(pAutoValue == 1) - { - return translate.text("Automatically"); - } - else - { - return translate.text("Manually"); - } -} \ No newline at end of file +result.object(data); diff --git a/entity/ChecklistEntryValue_entity/recordcontainers/jdito/onUpdate.js b/entity/ChecklistEntryValue_entity/recordcontainers/jdito/onUpdate.js deleted file mode 100644 index 666ee575b4538a2df8721203cf2feaea2a61158e..0000000000000000000000000000000000000000 --- a/entity/ChecklistEntryValue_entity/recordcontainers/jdito/onUpdate.js +++ /dev/null @@ -1,10 +0,0 @@ -import("Sql_lib"); -import("system.vars"); - -var changed = vars.get("$local.changed"); - -if(changed) -{ - newWhere("CHECKLISTENTRYVALUE.CHECKLISTENTRYVALUEID", "$field.CHECKLISTENTRYVALUEID") - .updateFields({"IS_FULFILLED" : vars.get("$field.IS_FULFILLED")}); -} \ No newline at end of file diff --git a/entity/ChecklistEntry_entity/ChecklistEntry_entity.aod b/entity/ChecklistEntry_entity/ChecklistEntry_entity.aod index 3385604c588240288d04438c5f6946dc6b7b6d22..bbc1bc5a7bf7a97678f2639a3d5b8788c2842f34 100644 --- a/entity/ChecklistEntry_entity/ChecklistEntry_entity.aod +++ b/entity/ChecklistEntry_entity/ChecklistEntry_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>ChecklistEntry_entity</name> <title>Checklist entries</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -30,6 +30,9 @@ <placeholderProcess>%aditoprj%/entity/ChecklistEntry_entity/entityfields/auto/placeholderProcess.js</placeholderProcess> <displayValueProcess>%aditoprj%/entity/ChecklistEntry_entity/entityfields/auto/displayValueProcess.js</displayValueProcess> <onValueChange>%aditoprj%/entity/ChecklistEntry_entity/entityfields/auto/onValueChange.js</onValueChange> + <onValueChangeTypes> + <element>MASK</element> + </onValueChangeTypes> </entityField> <entityField> <name>USER_EDIT</name> @@ -49,20 +52,6 @@ </entityField> <entityProvider> <name>ChecklistEntries</name> - <dependencies> - <entityDependency> - <name>84d5df6b-1aff-4ab2-88a5-fd3b591916ce</name> - <entityName>Checklist_entity</entityName> - <fieldName>ChecklistEntries</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>9134e842-dac3-4f09-9e03-f71827b15fcf</name> - <entityName>SalesprojectPhaseDefinition_entity</entityName> - <fieldName>ChecklistEntries</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>CHECKLIST_ID</name> diff --git a/entity/ChecklistEntry_entity/entityfields/auto/displayValueProcess.js b/entity/ChecklistEntry_entity/entityfields/auto/displayValueProcess.js index 94bb5f7e4d05d71c1b725767f2c128ea325687dd..afddf0e768df1b60a36f706193e2d563fc9f7f0a 100644 --- a/entity/ChecklistEntry_entity/entityfields/auto/displayValueProcess.js +++ b/entity/ChecklistEntry_entity/entityfields/auto/displayValueProcess.js @@ -2,9 +2,7 @@ import("system.translate"); import("system.result"); import("system.vars"); -var auto = vars.get("$field.AUTO"); - -if(auto == 1) +if(vars.get("$this.value") == 1) { result.string(translate.text("Automatically")); } diff --git a/entity/ChecklistEntry_entity/entityfields/title/displayValueProcess.js b/entity/ChecklistEntry_entity/entityfields/title/displayValueProcess.js index 8a1672dcd95f28d745482af6021264e667c9abe7..b3faf49a58ac77eacc78015a3054bcf2fcef9ae6 100644 --- a/entity/ChecklistEntry_entity/entityfields/title/displayValueProcess.js +++ b/entity/ChecklistEntry_entity/entityfields/title/displayValueProcess.js @@ -1,11 +1,17 @@ +import("Util_lib"); import("system.result"); import("system.vars"); import("system.translate"); import("KeywordRegistry_basic"); +import("ChecklistEntryRegistry_basic"); var title = vars.get("$field.TITLE"); -if (vars.get("$field.AUTO") != 1) +if (Utils.toBoolean(vars.get("$field.AUTO"))) +{ + result.string($ChecklistEntryRegistry[title]().title); +} +else { result.string(translate.text(title)); -} \ No newline at end of file +} diff --git a/entity/ChecklistEntry_entity/recordcontainers/db/conditionProcess.js b/entity/ChecklistEntry_entity/recordcontainers/db/conditionProcess.js index 6c25101de02357ff096464daebd0cb512ce138c8..fb47eb24c56e539ee2259dfed324a2de4f29c811 100644 --- a/entity/ChecklistEntry_entity/recordcontainers/db/conditionProcess.js +++ b/entity/ChecklistEntry_entity/recordcontainers/db/conditionProcess.js @@ -1,18 +1,5 @@ -import("system.result"); import("system.vars"); +import("system.result"); import("Sql_lib"); - -var checklistId = vars.get("$param.ChecklistUid_param"); -var cond = newWhere(); - -if (checklistId) -{ - cond.and("CHECKLISTENTRY.CHECKLIST_ID", checklistId); -} -else -{ - cond.and("1 = 2"); -} - -result.string(cond.toString()); \ No newline at end of file +result.string(newWhereIfSet("CHECKLISTENTRY.CHECKLIST_ID", vars.get("$param.ChecklistUid_param"))); diff --git a/entity/Checklist_entity/Checklist_entity.aod b/entity/Checklist_entity/Checklist_entity.aod index 5addd3e3f03439f55e3a892ba55ca4c86552b2d3..fab6c2cd44a9a57f68bb543ed3e3e9f1989d13ec 100644 --- a/entity/Checklist_entity/Checklist_entity.aod +++ b/entity/Checklist_entity/Checklist_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Checklist_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <icon>NEON:MQC</icon> diff --git a/entity/ClassificationAdmin_entity/ClassificationAdmin_entity.aod b/entity/ClassificationAdmin_entity/ClassificationAdmin_entity.aod index a2ecf6d0ca95c3fa6adb10903a636bc8a28eab8e..6d1f4898e6c51d2ee284a1e1624d14c6e805d868 100644 --- a/entity/ClassificationAdmin_entity/ClassificationAdmin_entity.aod +++ b/entity/ClassificationAdmin_entity/ClassificationAdmin_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>ClassificationAdmin_entity</name> <title>Classification</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -91,18 +91,18 @@ <name>FilterviewActionGroup</name> <children> <entityActionField> - <name>UpdateClassification</name> + <name>UpdateClassifications</name> <title>Recalculate Classifications</title> - <onActionProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/updateclassification/onActionProcess.js</onActionProcess> + <onActionProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/updateclassifications/onActionProcess.js</onActionProcess> <iconId>VAADIN:AUTOMATION</iconId> - <tooltip>Starts the serverprocess manually, which will recalculate all (potentially) outdated classifications. Use this after changes to the configuration of classifications.</tooltip> + <tooltip>Starts the server process manually, which will recalculate all (potentially) outdated classifications. This process should be executed after changes to the classification configuration.</tooltip> </entityActionField> <entityActionField> <name>UpdateAllClassifications</name> <title>Recalculate all Classifications</title> <onActionProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/updateallclassifications/onActionProcess.js</onActionProcess> <iconId>VAADIN:AUTOMATION</iconId> - <tooltip>Starts the serverprocess manually, which will recalculate all classifications from scratch. Only do this after e.g importing data from elsewhere where the outdated flag couldn't been set correctly. Since this can take some time.</tooltip> + <tooltip>Starts the server process manually, which will recalculate all classifications from scratch. This process should only be executed after importing data from elsewhere, where the outdated flag couldn't be set correctly, since this can take some time.</tooltip> </entityActionField> </children> </entityActionGroup> @@ -114,13 +114,6 @@ <stateProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/sorting/stateProcess.js</stateProcess> <valueProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/sorting/valueProcess.js</valueProcess> </entityField> - <entityField> - <name>CLASSIFICATIONTYPEIDDISPLAYVALUE</name> - <title>Indicator</title> - <mandatory v="true" /> - <stateProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/classificationtypeiddisplayvalue/stateProcess.js</stateProcess> - <valueProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/classificationtypeiddisplayvalue/valueProcess.js</valueProcess> - </entityField> <entityField> <name>recordCategory</name> <valueProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/recordcategory/valueProcess.js</valueProcess> @@ -154,6 +147,25 @@ <mandatoryProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/scorepoints/mandatoryProcess.js</mandatoryProcess> <stateProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/scorepoints/stateProcess.js</stateProcess> </entityField> + <entityField> + <name>FIELD</name> + <title>Indicator</title> + <mandatory v="false" /> + <mandatoryProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/field/mandatoryProcess.js</mandatoryProcess> + <dropDownProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/field/dropDownProcess.js</dropDownProcess> + <stateProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/field/stateProcess.js</stateProcess> + <onValueChange>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/field/onValueChange.js</onValueChange> + </entityField> + <entityField> + <name>FIELDTYPE</name> + <title>Field Type</title> + <state>INVISIBLE</state> + </entityField> + <entityField> + <name>INDICATORTYPE</name> + <title>Indicator Type</title> + <state>INVISIBLE</state> + </entityField> </entityFields> <recordContainers> <jDitoRecordContainer> @@ -207,6 +219,18 @@ <jDitoRecordFieldMapping> <name>CLASSIFICATIONGROUPDISPLAYVALUE.value</name> </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>FIELD.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>FIELDTYPE.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>INDICATORTYPE.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>FIELD.displayValue</name> + </jDitoRecordFieldMapping> </recordFieldMappings> </jDitoRecordContainer> </recordContainers> diff --git a/entity/ClassificationAdmin_entity/documentation.adoc b/entity/ClassificationAdmin_entity/documentation.adoc index 52829958f6942c4a6c44173339b47fb1422aacfe..4fa1c03050eaae9015eb061ec991da4acc72b139 100644 --- a/entity/ClassificationAdmin_entity/documentation.adoc +++ b/entity/ClassificationAdmin_entity/documentation.adoc @@ -10,19 +10,19 @@ Purpose: This Entity gives the administrators an easy way to change the classification. Classifications get stored in the Classification table with their own uid, the ids of the classification type, classification score, object_rowId and object_type. - This entity displays the classifications (classificationGroup) and indicators (classificationType) and their usage(filter) grouped with the object_type in an treetable. + This entity displays the classifications (classificationGroup) and indicators (classificationType) and their max Points, usage(filter) grouped by the object_type in an treetable. with the object_type as the first group, followed by the classifications (classificationgroup) of that group and it's indicators. The grading of the classification can be changed in the preview of an classification. The possible values of an indicator can be changed when opening the preview of the indicator. TreeTable Example: - CLASSIFICATION INDICATOR USAGE + CLASSIFICATION INDICATOR MAX POINTS USAGE Organisation 1. Target Group - Industry No restrictions - Headquarters Filter set (ToDo: 1067241) - Product preference No restrictions + Status 30 No restrictions + Assessment / Target group 30 Filter set (ToDo: 1067241) + Assessment / Industry 40 No restrictions 2. Customer value Salesproject 1. Classification @@ -67,15 +67,16 @@ Adding the classification to other modules: -add CLASSIFICATIONSTORAGE_ID to the Filterview and Preview. -optional: check "filterable" if you want it filterable (probably not that useful) Add the reference to the ClassificationView to the Mainview Context (see als organsiation and salesproject) - Add both of the classificationFilterExtensionSets: - -"ClassificationType_filter" for filtering of the classificationTypes and it's values + Add the classificationFilterExtensionSet: -"ClassificationType_filter" for filtering of the achieved Classifications for each group + Add the entityFields you want to use to $ClassificationIndicatorRegistry.getEntityNumberFields() and $ClassificationIndicatorRegistry.getEntityDropDownFields() + And optionally add complex Fields in an registry like ClassificationIndicatorRegistry_basic + -> if you do add a new registry: don't forget to add its functions in ClassificationUpdate_lib Important: - -If you are deleting these datasets you always have to also delete the CLASSIFICATIONSTORAGE entry and the classification entries(if they exist), + -If you are deleting these datasets you always have to also delete the CLASSIFICATIONSTORAGE entry so add the these deleteconditions to all actions that delete those datasets: - newWhere("CLASSIFICATIONSTORAGE.OBJECT_ROWID", eigeneUid).deleteData(); - newWhere("CLASSIFICATION.OBJECT_ROWID", eigeneUid).deleteData(); + newWhere("CLASSIFICATIONSTORAGE.OBJECT_ROWID", uid).deleteData(); -Be sure to use WorkflowSignalSender.updated(); in the onUpdateProcess of the module and add the dependency mapping for classificationStorage in the Dependency_lib so the outdated flag of the classificationStorage dataset can automatically be set everytime an dataset get's modified @@ -87,10 +88,9 @@ Adding the classification to other modules: The groups now have their own table and we are using an uuid instead of the groupname for the classificationgroups We store classificationgrading with the the minPERCENT and the resulting grading for each classificationGroup dataset We can now store filter for classificationtype datasets - We now store the scorepoints for classificationtype datasets + We now store the max scorepoints for classificationtype datasets we are storing the achieved classifications (e.g. "ACD") in CLASSIFICATIONSTORAGE - and the stored classifiaction now also store the value(because it will be possible to also use things like attributes as classifications) and the - scorepoints (scorepercent of the linked classificationscore dataset * Scorepoints of the linked classificationtype dataset) + we don' persist the classifiaction values anymore We also added an outdated flag to both ClassificationStorage and ClassificationType -> so the updateClassificationsServerprocess knows what it has to update (see also documentationProperty of said process) - The ClassificationStorage one get's set via the onUpdate of the module (see above) diff --git a/entity/ClassificationAdmin_entity/entityfields/classificationgroupdisplayvalue/dropDownProcess.js b/entity/ClassificationAdmin_entity/entityfields/classificationgroupdisplayvalue/dropDownProcess.js index 917fbdf4fd535892b9a297d66d82bd0e16e21c92..226ff90e56f9acc269d2d97a16337783fc5b7b7d 100644 --- a/entity/ClassificationAdmin_entity/entityfields/classificationgroupdisplayvalue/dropDownProcess.js +++ b/entity/ClassificationAdmin_entity/entityfields/classificationgroupdisplayvalue/dropDownProcess.js @@ -4,7 +4,8 @@ import("system.vars"); import("system.result"); //no Translation since the same logic as in the Keywords applies (Admin User is able to change the title) -if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) +//only when new, since it shouldn't be possible anymore to move the classificationTypes to another group, but the user should be able to rename a group +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) { var objectType = vars.get("$field.OBJECT_TYPE") if (objectType) diff --git a/entity/ClassificationAdmin_entity/entityfields/classificationgroupdisplayvalue/stateProcess.js b/entity/ClassificationAdmin_entity/entityfields/classificationgroupdisplayvalue/stateProcess.js index 75628dd48b118ed61a38a10a7e1a96a2b58d8ec7..53859257bfdb74003197c82d0e006fc9b9b04d77 100644 --- a/entity/ClassificationAdmin_entity/entityfields/classificationgroupdisplayvalue/stateProcess.js +++ b/entity/ClassificationAdmin_entity/entityfields/classificationgroupdisplayvalue/stateProcess.js @@ -3,9 +3,16 @@ import("system.vars"); import("system.result"); import("system.neon"); -if((vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT || vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW)) +if (vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW + || (vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT && vars.get("$field.CLASSIFICATIONTYPEID") == $ClassificationPlaceholder.TOPSECRETPLACEHOLDER())) { - result.string(neon.COMPONENTSTATE_EDITABLE) + result.string(neon.COMPONENTSTATE_EDITABLE); +} +else if (vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT && vars.get("$field.CLASSIFICATIONTYPEID") != $ClassificationPlaceholder.TOPSECRETPLACEHOLDER()) +{ + result.string(neon.COMPONENTSTATE_DISABLED); } else - result.string(neon.COMPONENTSTATE_INVISIBLE) \ No newline at end of file +{ + result.string(neon.COMPONENTSTATE_INVISIBLE); +} \ No newline at end of file diff --git a/entity/ClassificationAdmin_entity/entityfields/classificationtypefilter/filterTreeExcludedFieldsProcess.js b/entity/ClassificationAdmin_entity/entityfields/classificationtypefilter/filterTreeExcludedFieldsProcess.js index cf03254dee3ad99700634720a48d4bbeb569bd23..448b8a68819d4a960edc23172c364ac973abc513 100644 --- a/entity/ClassificationAdmin_entity/entityfields/classificationtypefilter/filterTreeExcludedFieldsProcess.js +++ b/entity/ClassificationAdmin_entity/entityfields/classificationtypefilter/filterTreeExcludedFieldsProcess.js @@ -9,7 +9,7 @@ import("ClassificationFilter_lib"); import("Sql_lib"); import("system.result"); -if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT) +if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT && vars.get("$field.CLASSIFICATIONTYPEID") != $ClassificationPlaceholder.TOPSECRETPLACEHOLDER()) { //We want to exclude all the classificationFilterFields. //Excluding via this process works by returning a array with all the fieldNames you want to exclude. diff --git a/entity/ClassificationAdmin_entity/entityfields/classificationtypeiddisplayvalue/stateProcess.js b/entity/ClassificationAdmin_entity/entityfields/classificationtypeiddisplayvalue/stateProcess.js deleted file mode 100644 index 9366c2e0e8a8d10e0f2e70beb8f3c82662b588a1..0000000000000000000000000000000000000000 --- a/entity/ClassificationAdmin_entity/entityfields/classificationtypeiddisplayvalue/stateProcess.js +++ /dev/null @@ -1,12 +0,0 @@ -import("Classification_lib"); -import("system.vars"); -import("system.result"); -import("system.neon"); - -if((vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT || vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW) - && vars.get("$this.value") != $ClassificationPlaceholder.TOPSECRETPLACEHOLDER()) -{ - result.string(neon.COMPONENTSTATE_EDITABLE) -} -else - result.string(neon.COMPONENTSTATE_INVISIBLE) \ No newline at end of file diff --git a/entity/ClassificationAdmin_entity/entityfields/classificationtypeiddisplayvalue/valueProcess.js b/entity/ClassificationAdmin_entity/entityfields/classificationtypeiddisplayvalue/valueProcess.js deleted file mode 100644 index 85208cfbe4e8e978e2a67702710029f6fbb49a71..0000000000000000000000000000000000000000 --- a/entity/ClassificationAdmin_entity/entityfields/classificationtypeiddisplayvalue/valueProcess.js +++ /dev/null @@ -1,21 +0,0 @@ -import("system.result"); -import("system.vars"); -import("system.translate"); -import("Sql_lib"); -import("Classification_lib"); - -var res = vars.get("$this.value"); -if(!res) -{ - var classificationTypeId = vars.get("$field.CLASSIFICATIONTYPEID"); - if(classificationTypeId != $ClassificationPlaceholder.TOPSECRETPLACEHOLDER()) - { - res = newSelect("CLASSIFICATIONTYPE.SCORETYPE") - .from("CLASSIFICATIONTYPE") - .where("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", classificationTypeId) - .cell(); - } - else - res = $ClassificationPlaceholder.TOPSECRETPLACEHOLDER(); -} -result.string(res); \ No newline at end of file diff --git a/entity/ClassificationAdmin_entity/entityfields/field/dropDownProcess.js b/entity/ClassificationAdmin_entity/entityfields/field/dropDownProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..cb06d13166cf7e1c2f662df466f67d08ad625bc1 --- /dev/null +++ b/entity/ClassificationAdmin_entity/entityfields/field/dropDownProcess.js @@ -0,0 +1,21 @@ +import("ClassificationComplexIndicatorRegistry_basic"); +import("ClassificationIndicatorFieldRegistry_basic"); +import("system.result"); +import("Classification_lib"); +import("system.neon"); +import("system.vars"); + + +var res = []; +//this field is only editable when craeting a new classificationtype, so we only need the dropDown when the operatingstate == neon.OPERATINGSTATE_NEW +if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW && vars.get("$field.OBJECT_TYPE")) +{ + var context = vars.get("$field.OBJECT_TYPE"); + res = ClassificationUtils.getEntityFields(context); + var attributeFilterFields = ClassificationUtils.getEntityAttributes(context); + var attributeFieldArray = ClassificationUtils.getEntityAttributesArray(attributeFilterFields); + res = res.concat(attributeFieldArray); + var complexIndicators = ClassificationComplexIndicatorRegistryUtils.getComplexIndicatorArray(context); + res = res.concat(complexIndicators); +} +result.object(res); diff --git a/entity/ClassificationAdmin_entity/entityfields/field/mandatoryProcess.js b/entity/ClassificationAdmin_entity/entityfields/field/mandatoryProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..34103c074eb3e0d881a227628e7c54058b39672c --- /dev/null +++ b/entity/ClassificationAdmin_entity/entityfields/field/mandatoryProcess.js @@ -0,0 +1,10 @@ +import("system.result"); +import("Classification_lib"); +import("system.vars"); + +var mandatory = true; +if(vars.get("$field.CLASSIFICATIONTYPEID")== $ClassificationPlaceholder.TOPSECRETPLACEHOLDER()) +{ + mandatory = false; +} +result.string(mandatory); \ No newline at end of file diff --git a/entity/ClassificationAdmin_entity/entityfields/field/onValueChange.js b/entity/ClassificationAdmin_entity/entityfields/field/onValueChange.js new file mode 100644 index 0000000000000000000000000000000000000000..f50ea67a8b44b813e3983223d495ddd124476ad9 --- /dev/null +++ b/entity/ClassificationAdmin_entity/entityfields/field/onValueChange.js @@ -0,0 +1,89 @@ +import("ClassificationComplexIndicatorRegistry_basic"); +import("ClassificationIndicatorFieldRegistry_basic"); +import("Attribute_lib"); +import("Classification_lib"); +import("system.neon"); +import("system.vars"); + +//We have different fieldTypes and indicatorTypes, depending on the field. +//So we have to determine the correct ones everytime the field changes. +if (vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") && vars.get("$field.OBJECT_TYPE")) +{ + var field = vars.get("$this.value"); + var objectType = vars.get("$field.OBJECT_TYPE"); + + //helper function to check if the pString is included in pArray + function _checkIfInArrays(pArray, pString) + { + var inArray = false; + inArray = pArray.some(function (attr){ + if (attr.includes(pString)) + { + return true; + } + else + { + return false; + } + }); + return inArray; + } + + //helper function to check if the pString is included in pArray + function _checkIfInAttributeArray (pArray, pString) + { + for (var i = 0; i < pArray.length; i++) + { + if (pArray[i]["name"] == pString) + { + return {"inArray": true + , "attributeArrayAtPosition": pArray[i]}; + } + } + return {"inArray": false + , "attributeArrayAtPosition": null}; + } + var position; + var attributeArray; + if (_checkIfInArrays($ClassificationIndicatorRegistry.getEntityNumberFields(objectType), field)) + { + neon.setFieldValues({ + "$field.FIELDTYPE": $ClassificationFieldTypes.NUMBER(), + "$field.INDICATORTYPE": $ClassificationIndicatorTypes.ENTITYFIELD() + }); + } + else if (_checkIfInArrays($ClassificationIndicatorRegistry.getEntityDropDownFields(objectType), field)) + { + neon.setFieldValues({ + "$field.FIELDTYPE": $ClassificationFieldTypes.DROPDOWN(), + "$field.INDICATORTYPE": $ClassificationIndicatorTypes.ENTITYFIELD() + }); + } + else if (_checkIfInAttributeArray(ClassificationUtils.getEntityAttributes(objectType), field)["inArray"]) + { + let arrayAtPosition = _checkIfInAttributeArray(ClassificationUtils.getEntityAttributes(objectType), field)["attributeArrayAtPosition"]; + neon.setFieldValue("$field.INDICATORTYPE", $ClassificationIndicatorTypes.ATTRIBUTE()); + if ((arrayAtPosition["contentType"] == AttributeTypes.TEXT() && arrayAtPosition["hasDropDownValues"] === true) + || attributeArray[position]["contentType"] == AttributeTypes.BOOLEAN() + || attributeArray[position]["contentType"] == AttributeTypes.COMBO() + || attributeArray[position]["contentType"] == AttributeTypes.KEYWORD()) + { + neon.setFieldValue("$field.FIELDTYPE", $ClassificationFieldTypes.DROPDOWN()); + } + else if (arrayAtPosition["contentType"] == AttributeTypes.NUMBER()) + { + neon.setFieldValue("$field.FIELDTYPE", $ClassificationFieldTypes.NUMBER()); + } + else if (arrayAtPosition["contentType"] == AttributeTypes.INTEGER()) + { + neon.setFieldValue("$field.FIELDTYPE", $ClassificationFieldTypes.INTEGER()); + } + } + else if (_checkIfInArrays(ClassificationComplexIndicatorRegistryUtils.getComplexIndicatorArray(objectType), field)) + { + neon.setFieldValues({ + "$field.FIELDTYPE": $ClassificationComplexIndicatorRegistry[field]()["type"], + "$field.INDICATORTYPE": $ClassificationIndicatorTypes.COMPLEX() + }); + } +} \ No newline at end of file diff --git a/entity/ClassificationAdmin_entity/entityfields/field/stateProcess.js b/entity/ClassificationAdmin_entity/entityfields/field/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..7b0636d5c5191f8ebb2455d7a7ab062ba844287b --- /dev/null +++ b/entity/ClassificationAdmin_entity/entityfields/field/stateProcess.js @@ -0,0 +1,20 @@ +import("Classification_lib"); +import("system.vars"); +import("system.result"); +import("system.neon"); + +var state = neon.COMPONENTSTATE_EDITABLE; +var recordCategory = vars.get("$field.recordCategory"); + +if(vars.get("$sys.operatingstate") != neon.OPERATINGSTATE_NEW) +{ + state = neon.COMPONENTSTATE_DISABLED; +} +if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT + && (recordCategory == $ClassificationRecordCategories.CLASSIFICATION_CLASSIFICATION_GROUP() + || recordCategory == $ClassificationRecordCategories.CLASSIFICATION_GROUP_DOESNT_EXIST())) +{ + +} + +result.string(state); \ No newline at end of file diff --git a/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/updateallclassifications/onActionProcess.js b/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/updateallclassifications/onActionProcess.js index a8ccdd28ccba6f9fe16b69d57538c16dc9898ba3..130f76a2297ba13fc73aa83143c85c4fcf8e5bb6 100644 --- a/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/updateallclassifications/onActionProcess.js +++ b/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/updateallclassifications/onActionProcess.js @@ -8,8 +8,6 @@ import("system.vars"); var execute = question.askYesNo(translate.text("Start Serveprocess"), translate.text("Are you sure you want to recalculate all classifications using the current classificationgradings? This can take some time, since ALL classifications will get freshly calculated and updated if needed."), false); if(execute) { - - var processConfig = process.createStartAsyncConfig() .setName("updateClassifications_serverProcess") .setUser( vars.get("$sys.user")) diff --git a/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/updateclassification/onActionProcess.js b/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/updateclassifications/onActionProcess.js similarity index 100% rename from entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/updateclassification/onActionProcess.js rename to entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/updateclassifications/onActionProcess.js diff --git a/entity/ClassificationAdmin_entity/entityfields/object_type/onValueChange.js b/entity/ClassificationAdmin_entity/entityfields/object_type/onValueChange.js index 22539b26e09b6166510840fc3fd9c28e751c9a5f..1dbd39f8e4ecde189947a7845067b0f1bf684ada 100644 --- a/entity/ClassificationAdmin_entity/entityfields/object_type/onValueChange.js +++ b/entity/ClassificationAdmin_entity/entityfields/object_type/onValueChange.js @@ -1,3 +1,9 @@ import("system.neon"); -neon.setFieldValue("$field.CLASSIFICATIONGROUP", ""); \ No newline at end of file +neon.setFieldValues({ + "$field.CLASSIFICATIONGROUP": "" + ,"$field.CLASSIFICATIONGROUPDISPLAYVALUE": "" + ,"$field.FIELD": "" + ,"$field.FIELDTYPE": "" + ,"$field.INDICATORTYPE": "" + }); \ No newline at end of file diff --git a/entity/ClassificationAdmin_entity/recordcontainers/jdito/contentProcess.js b/entity/ClassificationAdmin_entity/recordcontainers/jdito/contentProcess.js index 4022fc575bdb2dd5b3884809e0bb4819285cc65b..8a2d00bece631016f8dcb5bffa88ac7024d87b6f 100644 --- a/entity/ClassificationAdmin_entity/recordcontainers/jdito/contentProcess.js +++ b/entity/ClassificationAdmin_entity/recordcontainers/jdito/contentProcess.js @@ -1,3 +1,5 @@ +import("ClassificationComplexIndicatorRegistry_basic"); +import("ClassificationIndicatorFieldRegistry_basic"); import("Context_lib"); import("JditoFilter_lib"); import("system.entities"); @@ -13,17 +15,17 @@ import("system.vars"); var idvalues = vars.get("$local.idvalues"); var decodedIdvalues, entity, groupTitle; var res = []; -if(idvalues) +if (idvalues) { - if(idvalues[0].charAt(0) != ";" && idvalues[0].charAt(idvalues[0].length) != ";") + if (idvalues[0].charAt(0) != ";" && idvalues[0].charAt(idvalues[0].length) != ";") { res.push([idvalues[0], "", "", "", "", "", idvalues[0], translate.text(idvalues[0]), - "", $ClassificationRecordCategories.CLASSIFICATION_OBJECT_TYPE(), "", "", "", ""]); + "", $ClassificationRecordCategories.CLASSIFICATION_OBJECT_TYPE(), "", "", "", "", "", "", "", ""]); } else { decodedIdvalues = text.decodeMS(idvalues[0]); - if(decodedIdvalues[0].charAt(0) != ";" && decodedIdvalues[0].charAt(decodedIdvalues[0].length) != ";") + if (decodedIdvalues[0].charAt(0) != ";" && decodedIdvalues[0].charAt(decodedIdvalues[0].length) != ";") { var groupName = newSelect("CLASSIFICATIONGROUP.TITLE") .from("CLASSIFICATIONGROUP") @@ -31,83 +33,103 @@ if(idvalues) .cell(); res.push([idvalues[0], decodedIdvalues[0], decodedIdvalues[1], translate.text(groupName), "", "", "", - "", "", $ClassificationRecordCategories.CLASSIFICATION_CLASSIFICATION_GROUP(), "", "", "", groupName]); + "", "", $ClassificationRecordCategories.CLASSIFICATION_CLASSIFICATION_GROUP(), "", "", "", groupName, "", "", "", ""]); } else { - var typeAndFilter = newSelect("OBJECT_TYPE, CLASSIFICATIONTYPE.FILTER, CLASSIFICATIONTYPE.SCORETYPE, CLASSIFICATIONTYPE.SCOREPOINTS") + var classificationType = newSelect("OBJECT_TYPE, CLASSIFICATIONTYPE.FILTER, CLASSIFICATIONTYPE.SCORETYPE, CLASSIFICATIONTYPE.SCOREPOINTS, CLASSIFICATIONTYPE.FIELD") .from("CLASSIFICATIONTYPE") .where("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", decodedIdvalues[1]) .orderBy("CLASSIFICATIONTYPE.SCORETYPE") .arrayRow(); - var filter = typeAndFilter[1]; + var filter = classificationType[1]; var filterDisplay = translate.text("Filter set"); //ToDo: "resolved" DisplayValue for the Filterstrings #1067160/1067241 - entity = ContextUtils.getEntity(typeAndFilter[0]); + entity = ContextUtils.getEntity(classificationType[0]); var emptyFilter = JditoFilterUtils.getEmptyFilter(entity) - if(filter == "") + if (filter == "") + { filter = emptyFilter; + } if (filter == emptyFilter) + { filterDisplay = translate.text("No Restrictions"); + } - var maxScore = typeAndFilter[3]; + var maxScore = classificationType[3]; groupTitle = newSelect("CLASSIFICATIONGROUP.TITLE") .from("CLASSIFICATIONGROUP") .where("CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID", text.decodeMS(decodedIdvalues[0])[1]) .cell(); + var classificationTypeFieldKeysWithDisplayValues = ClassificationUtils.getEntityFields(classificationType[0]) + .concat(ClassificationUtils.getEntityAttributesArray(ClassificationUtils.getEntityAttributes(classificationType[0]))) + .concat(ClassificationComplexIndicatorRegistryUtils.getComplexIndicatorArray(classificationType[0])); //ToDo: "resolved" DisplayValue for the Filterstrings #1067160/1067241 - res.push([idvalues[0], decodedIdvalues[0], "", "", decodedIdvalues[1], translate.text(typeAndFilter[2]), - "", "","", $ClassificationRecordCategories.CLASSIFICATION_CLASSIFICATION_TYPE(), filter, filterDisplay, maxScore, groupTitle]); + res.push([idvalues[0], decodedIdvalues[0], "", "", decodedIdvalues[1], translate.text(filterDisplay[2]), + "", "","", $ClassificationRecordCategories.CLASSIFICATION_CLASSIFICATION_TYPE(), filter, filterDisplay, maxScore, groupTitle + , ClassificationUtils.getFieldDisplayValue(classificationTypeFieldKeysWithDisplayValues, classificationType[4]), "", "" + , ClassificationUtils.getFieldDisplayValue(classificationTypeFieldKeysWithDisplayValues, classificationType[4])]); } } } else { var savedData = new Set(); + var fields = {}; var classificationData = newSelect("CLASSIFICATIONTYPE.OBJECT_TYPE, CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID, \n\ - CLASSIFICATIONGROUP.TITLE, CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID, CLASSIFICATIONTYPE.SCORETYPE, CLASSIFICATIONTYPE.FILTER, CLASSIFICATIONTYPE.SCOREPOINTS") + CLASSIFICATIONGROUP.TITLE, CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID, CLASSIFICATIONTYPE.SCORETYPE\n\ + , CLASSIFICATIONTYPE.FILTER, CLASSIFICATIONTYPE.SCOREPOINTS, CLASSIFICATIONTYPE.FIELD\n\ + , CLASSIFICATIONTYPE.FIELDTYPE, CLASSIFICATIONTYPE.INDICATORTYPE") .from("CLASSIFICATIONGROUP") .join("CLASSIFICATIONTYPE", "CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID = CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID") .orderBy("CLASSIFICATIONTYPE.OBJECT_TYPE, CLASSIFICATIONGROUP.SORTING") .table() //run trough the data and build the tree - classificationData.forEach(function ([objectType, classificationGroupId, classificationGroupName, classificationTypeId, classificationScoreType, classificationTypeFilter, classificationTypeScorePoints]) + classificationData.forEach(function ([objectType, classificationGroupId, classificationGroupName, classificationTypeId, classificationScoreType, classificationTypeFilter, classificationTypeScorePoints, field, fieldType, indicatorType]) { uidClassificationGroup = text.encodeMS([objectType, classificationGroupId]); uidClassificationType = text.encodeMS([uidClassificationGroup, classificationTypeId]); uidClassificationTypeFilter = text.encodeMS([uidClassificationType, util.getNewUUID()]); + if (!fields.hasOwnProperty(objectType)) + { + fields[objectType] = ClassificationUtils.getEntityFields(objectType) + .concat(ClassificationUtils.getEntityAttributesArray(ClassificationUtils.getEntityAttributes(objectType))) + .concat(ClassificationComplexIndicatorRegistryUtils.getComplexIndicatorArray(objectType)); + } - if(!savedData.has(objectType)) //objectType + if (!savedData.has(objectType)) //objectType { res.push([objectType, "", "", "", "", "", objectType, translate.text(objectType), - "", $ClassificationRecordCategories.CLASSIFICATION_OBJECT_TYPE(), "", "", "", ""]); + "", $ClassificationRecordCategories.CLASSIFICATION_OBJECT_TYPE(), "", "", "", "", "", "", "", ""]); savedData.add(objectType); } - if(!savedData.has(classificationGroupId)) //classificationGroup + if (!savedData.has(classificationGroupId)) //classificationGroup { res.push([uidClassificationGroup, objectType, classificationGroupId, translate.text(classificationGroupName), "", "", "", - "", "", $ClassificationRecordCategories.CLASSIFICATION_CLASSIFICATION_GROUP(), "", "", "", ""]); + "", "", $ClassificationRecordCategories.CLASSIFICATION_CLASSIFICATION_GROUP(), "", "", "", "", "", "", "", ""]); savedData.add(classificationGroupId); } - if(!savedData.has(classificationTypeId)) //classificationType + if (!savedData.has(classificationTypeId)) //classificationType { var classificationTypeFilterDisplay = translate.text("Filter set"); //ToDo: "resolved" DisplayValue for the Filterstrings #1067160/1067241 entity = ContextUtils.getEntity(objectType); emptyFilter = JditoFilterUtils.getEmptyFilter(entity); - if(classificationTypeFilter == "") + if (classificationTypeFilter == "") { classificationTypeFilter = emptyFilter; } - if(classificationTypeFilter == emptyFilter) + if (classificationTypeFilter == emptyFilter) { classificationTypeFilterDisplay = translate.text("No Restrictions"); } res.push([uidClassificationType, uidClassificationGroup, "", "", classificationTypeId, translate.text(classificationScoreType), - "", "", "", $ClassificationRecordCategories.CLASSIFICATION_CLASSIFICATION_TYPE(), classificationTypeFilter, classificationTypeFilterDisplay, classificationTypeScorePoints, ""]); + "", "", "", $ClassificationRecordCategories.CLASSIFICATION_CLASSIFICATION_TYPE(), classificationTypeFilter + , classificationTypeFilterDisplay, classificationTypeScorePoints, "" + , field, fieldType, indicatorType, ClassificationUtils.getFieldDisplayValue(fields[objectType], field)]); savedData.add(classificationTypeId); } diff --git a/entity/ClassificationAdmin_entity/recordcontainers/jdito/onDelete.js b/entity/ClassificationAdmin_entity/recordcontainers/jdito/onDelete.js index 57378b99c786b9baab1443e999d675df3fb6a351..d436e8067ff123529390eed82aa901461716fb47 100644 --- a/entity/ClassificationAdmin_entity/recordcontainers/jdito/onDelete.js +++ b/entity/ClassificationAdmin_entity/recordcontainers/jdito/onDelete.js @@ -1,3 +1,4 @@ +import("Util_lib"); import("system.entities"); import("Classification_lib"); import("Sql_lib"); @@ -22,32 +23,90 @@ function _delete() { var rowData = vars.get("$local.rowdata"); var classificationType = rowData["CLASSIFICATIONTYPEID.value"]; - var objectType = rowData["OBJECT_TYPE.value"]; - var table; - var columns; - var values; var classificationGroup = rowData["CLASSIFICATIONGROUP.value"]; var recordCategory = rowData["recordCategory.value"]; + var classificationTypes = []; - if(recordCategory == $ClassificationRecordCategories.CLASSIFICATION_CLASSIFICATION_TYPE()) // the deleted dataset must be an classificationType + if (recordCategory == $ClassificationRecordCategories.CLASSIFICATION_CLASSIFICATION_TYPE()) // the deleted dataset must be an classificationType { classificationGroup = ClassificationUtils.getClassificationGroup(classificationType); //get the group before deleting the classificationtype dataset newWhere("CLASSIFICATIONSCORE.CLASSIFICATIONTYPE_ID", classificationType).deleteData(); //deletes the classificationscores that are linked to the classificationtype newWhere("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", classificationType).deleteData(); //deletes the classificationtype newWhere("CLASSIFICATION.CLASSIFICATIONTYPE_ID", classificationType).deleteData(); //deletes all the classifications + + //get all the classificationTypes of the group so we can set those as outdated + classificationTypes = newSelect("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID") + .from("CLASSIFICATIONTYPE") + .where("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID", classificationGroup) + .and("CLASSIFICATIONTYPE.OUTDATED", 0) + .arrayColumn(); + + newWhereIfSet("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", classificationTypes, SqlBuilder.IN()).updateData(true, "CLASSIFICATIONTYPE", ["OUTDATED"], null, [1]); + } - - else if(recordCategory == $ClassificationRecordCategories.CLASSIFICATION_CLASSIFICATION_GROUP()) //the deleted dataset must be an classificationGroup + else if (recordCategory == $ClassificationRecordCategories.CLASSIFICATION_CLASSIFICATION_GROUP()) //the deleted dataset must be an classificationGroup { - var classificationTypes = newSelect("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID") + classificationTypes = newSelect("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID") .from("CLASSIFICATIONTYPE") - .where("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID", classificationGroup) - + .where("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID", classificationGroup); + + var objectType = newSelect("CLASSIFICATIONTYPE.OBJECT_TYPE") + .from("CLASSIFICATIONTYPE") + .where("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID", classificationGroup) + .cell(); + + var existingGroups = newSelect("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID") + .from("CLASSIFICATIONTYPE") + .where("CLASSIFICATIONTYPE.OBJECT_TYPE", objectType) + .arrayColumn(); + + //get the position of the deleted group, so we can update the stored classificationStrings + var position = 0; + if (existingGroups.length > 0) + { var groupPositions = newSelect("CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID") + .from("CLASSIFICATIONGROUP") + .where("CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID", existingGroups, SqlBuilder.IN()) + .orderBy("CLASSIFICATIONGROUP.SORTING") + .table(); + for (let i = 0; i < groupPositions.length; i++) + { + if (groupPositions[i] != classificationGroup) + { + position = position + 1; + } + else + { + break; + } + } + } + function _updateStringLengthFn(pBatchData, pBatchNum) + { + var statements = []; + for ( let i = 0; i < pBatchData.length; i++) + { + var oldString = pBatchData[i][1]; + var newString = StringUtils.replaceAt(oldString, position, "") + statements.push(["CLASSIFICATIONSTORAGE", ["CLASSIFICATIONVALUE"], null, [newString], + newWhere("CLASSIFICATIONSTORAGE.CLASSIFICATIONSTORAGEID", pBatchData[i][0]).build()]); + } + if (statements.length > 0) + { + db.execute(statements); + } + } + + newSelect("CLASSIFICATIONSTORAGE.CLASSIFICATIONSTORAGEID, CLASSIFICATIONSTORAGE.CLASSIFICATIONVALUE") + .from("CLASSIFICATIONSTORAGE") + .where("CLASSIFICATIONSTORAGE.OBJECT_TYPE", objectType) + .pageSize(400) + .forEachPage(_updateStringLengthFn); //update the storageStrings + //delete the classificationscores, types and that are linked to the classificationtypes of te classificationgroup newWhere("CLASSIFICATIONSCORE.CLASSIFICATIONTYPE_ID", classificationTypes, SqlBuilder.IN()).deleteData(true, "CLASSIFICATIONSCORE"); newWhere("CLASSIFICATION.CLASSIFICATIONTYPE_ID", classificationTypes, SqlBuilder.IN()).deleteData(true, "CLASSIFICATION"); - classificationTypes.deleteData(true, "CLASSIFICATIONTYPE"); + newWhere("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", classificationTypes, SqlBuilder.IN()).deleteData(true, "CLASSIFICATIONTYPE"); newWhere("CLASSIFICATIONGRADING.CLASSIFICATIONGROUP_ID", classificationGroup).deleteData(); newWhere("CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID", classificationGroup).deleteData(); diff --git a/entity/ClassificationAdmin_entity/recordcontainers/jdito/onInsert.js b/entity/ClassificationAdmin_entity/recordcontainers/jdito/onInsert.js index 687c5a1a474b6a974e613b30fdff2d4675d9a55d..63490869f508e748005b4c5a97991bcdded1796f 100644 --- a/entity/ClassificationAdmin_entity/recordcontainers/jdito/onInsert.js +++ b/entity/ClassificationAdmin_entity/recordcontainers/jdito/onInsert.js @@ -1,3 +1,4 @@ +import("Sql_lib"); import("system.entities"); import("system.util"); import("system.db"); @@ -20,7 +21,7 @@ function _insert() var rowData = vars.get("$local.rowdata"); var groupId; var groupValue = rowData["CLASSIFICATIONGROUPDISPLAYVALUE.value"]; - if(groupValue.length != 36 && (groupValue.match(/-/g) || []).length != 4) //if groupValue is no Id -> insert new group + if (groupValue.length != 36 && (groupValue.match(/-/g) || []).length != 4) //if groupValue is no Id -> insert new group { groupId = util.getNewUUID(); var groupValues = [ @@ -35,29 +36,89 @@ function _insert() "SORTING" ]; - db.insertData("CLASSIFICATIONGROUP", groupColumns, null, groupValues); + db.insertData("CLASSIFICATIONGROUP", groupColumns, null, groupValues);//insert the new classificationGroup + + var gradingCol = ["CLASSIFICATIONGRADINGID", "GRADING", "MINPERCENT", "CLASSIFICATIONGROUP_ID"]; + //also insert this dummy gradingtable + var gradingVal = [util.getNewUUID(), "A", 76, groupId]; + db.insertData("CLASSIFICATIONGRADING", gradingCol, null, gradingVal); + gradingVal = [util.getNewUUID(), "B", 51, groupId]; + db.insertData("CLASSIFICATIONGRADING", gradingCol, null, gradingVal); + gradingVal = [util.getNewUUID(), "C", 26, groupId]; + db.insertData("CLASSIFICATIONGRADING", gradingCol, null, gradingVal); + gradingVal = [util.getNewUUID(), "D", 0, groupId]; + db.insertData("CLASSIFICATIONGRADING", gradingCol, null, gradingVal); + + var existingGroups = newSelect("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID") + .from("CLASSIFICATIONTYPE") + .where("CLASSIFICATIONTYPE.OBJECT_TYPE", rowData["OBJECT_TYPE.value"]) + .arrayColumn(); + var position = 0; + if (existingGroups.length > 0) + { var groupPositions = newSelect("CLASSIFICATIONGROUP.SORTING") + .from("CLASSIFICATIONGROUP") + .where("CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID", existingGroups, SqlBuilder.IN()) + .orderBy("CLASSIFICATIONGROUP.SORTING") + .arrayColumn(); + for (var i = 0; i < groupPositions.length; i++) + { + if (groupPositions[i] < rowData["SORTING.value"]) + { + position = position + 1; + } + } + } + //helper function to update the stored ClassificationStrings + function _updateStringLengthFn(pBatchData, pBatchNum) + { + var statements = []; + for (let i = 0; i < pBatchData.length; i++) + { + var oldString = pBatchData[i][1]; + oldString = oldString.split(''); + oldString.splice(position, 0, "-"); + var newString = oldString.join(''); + statements.push(["CLASSIFICATIONSTORAGE", ["CLASSIFICATIONVALUE"], null, [newString], + newWhere("CLASSIFICATIONSTORAGE.CLASSIFICATIONSTORAGEID", pBatchData[i][0]).build()]); + } + if (statements.length > 0) + { + db.execute(statements); + } + } + + newSelect("CLASSIFICATIONSTORAGE.CLASSIFICATIONSTORAGEID, CLASSIFICATIONSTORAGE.CLASSIFICATIONVALUE") + .from("CLASSIFICATIONSTORAGE") + .where("CLASSIFICATIONSTORAGE.OBJECT_TYPE", rowData["OBJECT_TYPE.value"]) + .pageSize(400) + .forEachPage(_updateStringLengthFn); + + } else { groupId = groupValue; //else the groupValue is the groupId } - var typeValues = [ - vars.get("$field.CLASSIFICATIONTYPEIDDISPLAYVALUE"), util.getNewUUID(), groupId, rowData["OBJECT_TYPE.value"], rowData["SCOREPOINTS.value"], - 1 + 1, + rowData["FIELD.value"], + rowData["FIELDTYPE.value"], + rowData["INDICATORTYPE.value"] ]; var typeColumns = [ - "SCORETYPE", "CLASSIFICATIONTYPEID", "CLASSIFICATIONGROUP_ID", "OBJECT_TYPE", "SCOREPOINTS", - "OUTDATED" + "OUTDATED", + "FIELD", + "FIELDTYPE", + "INDICATORTYPE" ]; db.insertData("CLASSIFICATIONTYPE", typeColumns, null, typeValues); // always insert the classificationtype } \ No newline at end of file diff --git a/entity/ClassificationAdmin_entity/recordcontainers/jdito/onUpdate.js b/entity/ClassificationAdmin_entity/recordcontainers/jdito/onUpdate.js index 9a9e04cfd71ca1864d2663355453c080d3cc4d05..f54db92f296acd3faeebb24f29e7d57d964da2b7 100644 --- a/entity/ClassificationAdmin_entity/recordcontainers/jdito/onUpdate.js +++ b/entity/ClassificationAdmin_entity/recordcontainers/jdito/onUpdate.js @@ -8,7 +8,6 @@ import("system.text"); import("system.util"); import("system.vars"); - //always make sure that the cache is as valid as possible //ClassificationType_entity accesses the CLASSIFICATIONSCORE (max value of scores) so we need to update the cache to prevent inconsesty @@ -43,16 +42,12 @@ function _update() var cond, typeCond; var values = []; var columns = []; - var groupCol = []; - var groupVal = []; - var gradingCol = []; - var gradingVal = []; var i; var isGroupDataSet = false; -// the classificationtypeId.value has the placeholder set when editing a classificationgroup dataset to allow us -// to handle the updating differently depending on whether its an classifcation group dataset or an classification type dataset -// since you want changes to the name of groups to effect only the group name and changes to the group of an classificationtype to change it's group + //the classificationtypeId.value has the placeholder set when editing a classificationgroup dataset to allow us + //to handle the updating differently depending on whether its an classifcation group dataset or an classification type dataset + //since you want changes to the name of groups to effect only the group name if(rowData["CLASSIFICATIONTYPEID.value"] == $ClassificationPlaceholder.TOPSECRETPLACEHOLDER()) isGroupDataSet = true; @@ -71,39 +66,13 @@ function _update() var groupIds = ClassificationUtils.getAllGroups(rowData["OBJECT_TYPE.value"]); //gets all existing groups of the object_type var newGroupId; var newGroupName; - var insertGroup = false; - var groupChange = false; var markOutdated = false; var newId; var condition; - for (i = 0; i < columns.length; i++) { - - if(columns[i] == "CLASSIFICATIONGROUP_ID")//if the classificationgroup_Id changed: determine whether or not a new group has to be inserted - { - condition = true; - for (let ii = 0; ii < groupIds.length; ii++) { - if(groupIds[ii][1] == rowData["CLASSIFICATIONGROUPDISPLAYVALUE.value"]) - { - condition = false; - } - } - if(condition && rowData["CLASSIFICATIONGROUPDISPLAYVALUE.value"].length != 36) - { - newGroupName = rowData["CLASSIFICATIONGROUPDISPLAYVALUE.value"]; - newGroupId = util.getNewUUID(); - values[i] = newGroupId; - insertGroup = true; - groupChange = true; - } - else if(values[2] != rowData["CLASSIFICATIONGROUPDISPLAYVALUE.value"] && values[2] != rowData["CLASSIFICATIONGROUP.value"] && rowData["CLASSIFICATIONGROUPDISPLAYVALUE.value"].length == 36) - { - groupChange = true; - insertGroup = false; - values[i] = rowData["CLASSIFICATIONGROUPDISPLAYVALUE.value"]; - } - } - else if(columns[i] == "CLASSIFICATIONTYPEID") + for (i = 0; i < columns.length; i++) { + + if(columns[i] == "CLASSIFICATIONTYPEID") { columns.splice(i, 1); values.splice(i, 1); @@ -121,7 +90,9 @@ function _update() if(columns[i] == "FILTER") { if(JSON.parse(values[i]).filter.childs.length == 0) //insert "" intead of an empty filter + { values[i] = ""; + } } } else if(columns[i] == undefined || columns[i] == null || columns[i] == "") @@ -131,64 +102,35 @@ function _update() i = i-1; } } - if(insertGroup) // new group has to be inserted - { - groupVal = [newGroupId, newGroupName]; - groupCol = ["CLASSIFICATIONGROUPID", "TITLE"]; - db.insertData("CLASSIFICATIONGROUP", groupCol, null, groupVal) - - gradingCol = ["CLASSIFICATIONGRADINGID", "GRADING", "MINPERCENT", "CLASSIFICATIONGROUP_ID"]; - //also insert this dummy gradingtable - gradingVal = [util.getNewUUID(), "A", 76, newGroupId]; - db.insertData("CLASSIFICATIONGRADING", gradingCol, null, gradingVal) - gradingVal = [util.getNewUUID(), "B", 51, newGroupId]; - db.insertData("CLASSIFICATIONGRADING", gradingCol, null, gradingVal) - gradingVal = [util.getNewUUID(), "C", 26, newGroupId]; - db.insertData("CLASSIFICATIONGRADING", gradingCol, null, gradingVal) - gradingVal = [util.getNewUUID(), "D", 0, newGroupId]; - db.insertData("CLASSIFICATIONGRADING", gradingCol, null, gradingVal) - } - - if(groupChange || insertGroup || markOutdated) + + if(markOutdated) { columns.push("OUTDATED"); - values.push(1) - if(groupChange || insertGroup) - { - var classificationTypesOfOldGroup = ClassificationUtils.getClassificationTypesOfGroup(rowData["CLASSIFICATIONGROUP.value"],rowData["CLASSIFICATIONTYPEID.value"], true) - - for (i = 0; i < classificationTypesOfOldGroup.length; i++) - { - typeCond = newWhere("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", classificationTypesOfOldGroup[i]); - typeCond.updateData(true, "CLASSIFICATIONTYPE" , ["OUTDATED"], null, [1]); - } - } + values.push(1); } cond = newWhereIfSet("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", text.decodeMS(uid)[1]); cond.updateData(true, table, columns, null, values); } - else //-> update the classification group dataset { var value = rowData["CLASSIFICATION_PARENT_ID.value"]; - if(value.charAt(0) != ";" && value.charAt(value.length) != ";") - id = text.decodeMS(uid)[1]; - - var classificationGroupId = newSelect("CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID") - .from("CLASSIFICATIONGROUP") - .where("CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID", id) - .cell(); + var classificationGroupId = text.decodeMS(uid)[1]; cond = newWhereIfSet("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID", classificationGroupId); var groupTable = "CLASSIFICATIONGROUP"; var groupColumns = ["SORTING", "TITLE"]; - var groupName = rowData["CLASSIFICATIONGROUP.value"] == classificationGroupId ? rowData["CLASSIFICATIONGROUP.displayValue"] : rowData["CLASSIFICATIONGROUP.value"]; + var groupName = rowData["CLASSIFICATIONGROUPDISPLAYVALUE.value"]; var groupValues = [rowData["SORTING.value"], groupName]; var groupCond = newWhereIfSet("CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID", classificationGroupId); groupCond.updateData(true, groupTable, groupColumns, null, groupValues); + + if(columns.includes("SORTING"))//set all classificationtypes of said Object as outdated if sorting changed + { + newWhere("CLASSIFICATIONTYPE.OBJECT_TYPE", rowData["OBJECT_TYPE.value"]).updateData(true, "CLASSIFICATIONTYPE", ["OUTDATED"], null, [1]); + } } } \ No newline at end of file diff --git a/entity/ClassificationGrading_entity/ClassificationGrading_entity.aod b/entity/ClassificationGrading_entity/ClassificationGrading_entity.aod index 81876c26e624810fd02f57d640df8fbc10bcc132..bb15b3c717a84f26ac5040b1273ae9dc4cd56e28 100644 --- a/entity/ClassificationGrading_entity/ClassificationGrading_entity.aod +++ b/entity/ClassificationGrading_entity/ClassificationGrading_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>ClassificationGrading_entity</name> <title>Grading</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -16,7 +16,7 @@ </entityField> <entityField> <name>GRADING</name> - <title>Scoretype</title> + <title>Grading</title> </entityField> <entityField> <name>CLASSIFICATIONGROUP_ID</name> @@ -30,14 +30,6 @@ <entityProvider> <name>ClassificationGradings</name> <documentation>%aditoprj%/entity/ClassificationGrading_entity/entityfields/classificationgradings/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>e0c6b86e-dcc1-43e1-9581-2b10c5c3d0cd</name> - <entityName>ClassificationGroup_entity</entityName> - <fieldName>ClassificationGradings</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ClassificationTypeId_param</name> @@ -52,7 +44,7 @@ <entityField> <name>MINPERCENT</name> <documentation>%aditoprj%/entity/ClassificationGrading_entity/entityfields/minpercent/documentation.adoc</documentation> - <title>Percent</title> + <title>from Percent</title> <displayValueProcess>%aditoprj%/entity/ClassificationGrading_entity/entityfields/minpercent/displayValueProcess.js</displayValueProcess> <onValidation>%aditoprj%/entity/ClassificationGrading_entity/entityfields/minpercent/onValidation.js</onValidation> </entityField> diff --git a/entity/ClassificationGrading_entity/documentation.adoc b/entity/ClassificationGrading_entity/documentation.adoc index 9638714b062297d11de3f9ae52382a81e9500040..3b060496fbf25e269ddef28594a154c021856a18 100644 --- a/entity/ClassificationGrading_entity/documentation.adoc +++ b/entity/ClassificationGrading_entity/documentation.adoc @@ -11,7 +11,7 @@ Purpose: This Entity gives the administrators an easy way to change the classification grading in the preview of classificationAdmin when selecting a classification (classificationGroup). The classificationgrading gets stored in the table classificationgrading with it's own classificationgradingId, the classificationGroup_id, - the grading (e.g. "A", "B", "C") and the min score you get this grade for. + the grading (e.g. "A", "B", "C") and the min score (in percent) you get this grade for. This entity only has one view: the ClassificationGradingMultipleEdit_view which has both the minPercent and the grading column. making it possible for the admin to configure something like this: diff --git a/entity/ClassificationGrading_entity/recordcontainers/db/onDBInsert.js b/entity/ClassificationGrading_entity/recordcontainers/db/onDBInsert.js index 9c06240960ec310a0b8dec6386a6bf8667ce396f..02b185c19d97718a367481e467165ab9a3e6934a 100644 --- a/entity/ClassificationGrading_entity/recordcontainers/db/onDBInsert.js +++ b/entity/ClassificationGrading_entity/recordcontainers/db/onDBInsert.js @@ -5,5 +5,5 @@ import("system.vars"); var classificationGroupId = vars.get("$field.CLASSIFICATIONGROUP_ID") var classificationTypeIds = ClassificationUtils.getClassificationTypesOfGroup(classificationGroupId, null, true) -var cond = newWhere("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", classificationTypeIds); +var cond = newWhereIfSet("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", classificationTypeIds); cond.updateData(true, "CLASSIFICATIONTYPE", ["OUTDATED"], null, [1]); \ No newline at end of file diff --git a/entity/ClassificationGroup_entity/ClassificationGroup_entity.aod b/entity/ClassificationGroup_entity/ClassificationGroup_entity.aod index 68724063ba34834853391bc581552e49765003cb..82f3b1f94c0b96e18502caae219c2ea4f3ed31b9 100644 --- a/entity/ClassificationGroup_entity/ClassificationGroup_entity.aod +++ b/entity/ClassificationGroup_entity/ClassificationGroup_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>ClassificationGroup_entity</name> <title>Classification</title> <majorModelMode>DISTRIBUTED</majorModelMode> diff --git a/entity/ClassificationScore_entity/ClassificationScore_entity.aod b/entity/ClassificationScore_entity/ClassificationScore_entity.aod index e90b0af702c203f25071d8a982bdc4e2d4a927d0..de2b879dbdc091ebd0f374cd1f13aa1391adfb5b 100644 --- a/entity/ClassificationScore_entity/ClassificationScore_entity.aod +++ b/entity/ClassificationScore_entity/ClassificationScore_entity.aod @@ -1,10 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>ClassificationScore_entity</name> <title>Possible Value</title> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/ClassificationScore_entity/documentation.adoc</documentation> <contentTitleProcess>%aditoprj%/entity/ClassificationScore_entity/contentTitleProcess.js</contentTitleProcess> + <onValidation>%aditoprj%/entity/ClassificationScore_entity/onValidation.js</onValidation> <titlePlural>Possible Values</titlePlural> <recordContainer>db</recordContainer> <entityFields> @@ -18,7 +19,7 @@ <entityField> <name>TITLE</name> <title>Title</title> - <mandatory v="true" /> + <mandatory v="false" /> <displayValueProcess>%aditoprj%/entity/ClassificationScore_entity/entityfields/title/displayValueProcess.js</displayValueProcess> </entityField> <entityField> @@ -90,6 +91,7 @@ <minValue v="0" /> <outputFormat>0.00'%'</outputFormat> <inputFormat>0.00</inputFormat> + <mandatory v="true" /> <onValidation>%aditoprj%/entity/ClassificationScore_entity/entityfields/scorepercent/onValidation.js</onValidation> </entityField> <entityField> @@ -100,6 +102,58 @@ <inputFormat>#,##0.00</inputFormat> <state>READONLY</state> <valueProcess>%aditoprj%/entity/ClassificationScore_entity/entityfields/scoreinpoints/valueProcess.js</valueProcess> + <onValueChangeTypes> + <element>MASK</element> + <element>PROCESS</element> + <element>PROCESS_SETVALUE</element> + </onValueChangeTypes> + </entityField> + <entityField> + <name>FIELDVALUE</name> + <title>Value</title> + <contentType>FILTER_TREE</contentType> + <filterTreeExcludedFieldsProcess>%aditoprj%/entity/ClassificationScore_entity/entityfields/fieldvalue/filterTreeExcludedFieldsProcess.js</filterTreeExcludedFieldsProcess> + <state>AUTO</state> + <stateProcess>%aditoprj%/entity/ClassificationScore_entity/entityfields/fieldvalue/stateProcess.js</stateProcess> + <valueProcess>%aditoprj%/entity/ClassificationScore_entity/entityfields/fieldvalue/valueProcess.js</valueProcess> + <onValueChange>%aditoprj%/entity/ClassificationScore_entity/entityfields/fieldvalue/onValueChange.js</onValueChange> + <onValueChangeTypes> + <element>MASK</element> + <element>PROCESS</element> + <element>PROCESS_SETVALUE</element> + </onValueChangeTypes> + </entityField> + <entityField> + <name>INDICATORNUMBER</name> + <title>Value</title> + <contentType>NUMBER</contentType> + <mandatoryProcess>%aditoprj%/entity/ClassificationScore_entity/entityfields/indicatornumber/mandatoryProcess.js</mandatoryProcess> + <stateProcess>%aditoprj%/entity/ClassificationScore_entity/entityfields/indicatornumber/stateProcess.js</stateProcess> + </entityField> + <entityField> + <name>INDICATORINTEGER</name> + <title>Value</title> + <contentType>NUMBER</contentType> + <outputFormat>#0</outputFormat> + <mandatoryProcess>%aditoprj%/entity/ClassificationScore_entity/entityfields/indicatorinteger/mandatoryProcess.js</mandatoryProcess> + <stateProcess>%aditoprj%/entity/ClassificationScore_entity/entityfields/indicatorinteger/stateProcess.js</stateProcess> + </entityField> + <entityField> + <name>INDICATORTEXT</name> + <title>Value</title> + <mandatoryProcess>%aditoprj%/entity/ClassificationScore_entity/entityfields/indicatortext/mandatoryProcess.js</mandatoryProcess> + <dropDownProcess>%aditoprj%/entity/ClassificationScore_entity/entityfields/indicatortext/dropDownProcess.js</dropDownProcess> + <stateProcess>%aditoprj%/entity/ClassificationScore_entity/entityfields/indicatortext/stateProcess.js</stateProcess> + </entityField> + <entityParameter> + <name>ClassificationTypeInfo_param</name> + <expose v="true" /> + </entityParameter> + <entityField> + <name>displayValueForTitleField</name> + <state>READONLY</state> + <stateProcess>%aditoprj%/entity/ClassificationScore_entity/entityfields/displayvaluefortitlefield/stateProcess.js</stateProcess> + <valueProcess>%aditoprj%/entity/ClassificationScore_entity/entityfields/displayvaluefortitlefield/valueProcess.js</valueProcess> </entityField> </entityFields> <recordContainers> @@ -108,6 +162,7 @@ <isPageable v="false" /> <conditionProcess>%aditoprj%/entity/ClassificationScore_entity/recordcontainers/db/conditionProcess.js</conditionProcess> <orderClauseProcess>%aditoprj%/entity/ClassificationScore_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess> + <onDBInsert>%aditoprj%/entity/ClassificationScore_entity/recordcontainers/db/onDBInsert.js</onDBInsert> <onDBUpdate>%aditoprj%/entity/ClassificationScore_entity/recordcontainers/db/onDBUpdate.js</onDBUpdate> <onDBDelete>%aditoprj%/entity/ClassificationScore_entity/recordcontainers/db/onDBDelete.js</onDBDelete> <alias>Data_alias</alias> @@ -138,6 +193,22 @@ <name>SCOREPERCENT.value</name> <recordfield>CLASSIFICATIONSCORE.SCOREPERCENT</recordfield> </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>FIELDVALUE.value</name> + <recordfield>CLASSIFICATIONSCORE.FIELDVALUE</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>INDICATORINTEGER.value</name> + <recordfield>CLASSIFICATIONSCORE.INDICATORINTEGER</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>INDICATORNUMBER.value</name> + <recordfield>CLASSIFICATIONSCORE.INDICATORNUMBER</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>INDICATORTEXT.value</name> + <recordfield>CLASSIFICATIONSCORE.INDICATORTEXT</recordfield> + </dbRecordFieldMapping> </recordFieldMappings> <linkInformation> <linkInformation> diff --git a/entity/ClassificationScore_entity/contentTitleProcess.js b/entity/ClassificationScore_entity/contentTitleProcess.js index a32d1c4fccfbd2b173010c5281709660619bd4cf..78abc419e0a661a3469d8ae80032e206e7cc4ce3 100644 --- a/entity/ClassificationScore_entity/contentTitleProcess.js +++ b/entity/ClassificationScore_entity/contentTitleProcess.js @@ -2,4 +2,6 @@ import("system.translate"); import("system.result"); import("system.vars"); -result.string(translate.text(vars.get("$field.TITLE"))); \ No newline at end of file +var title = vars.get("$field.INDICATORINTEGER") || vars.get("$field.INDICATORNUMBER") || translate.text(vars.get("$field.INDICATORTEXT")) || vars.get("$field.FIELDVALUE"); + +result.string(title); \ No newline at end of file diff --git a/entity/ClassificationScore_entity/documentation.adoc b/entity/ClassificationScore_entity/documentation.adoc index 8d280e34f85ddcafd52b0ea546f64389b0ea40ee..2610527000dabfb503e620b1ec5d43080396c5d9 100644 --- a/entity/ClassificationScore_entity/documentation.adoc +++ b/entity/ClassificationScore_entity/documentation.adoc @@ -9,7 +9,8 @@ Purpose: This Entity gives the administrators an easy way to edit the possible values, their scorePercent and sorting in the preview of classificationAdmin when selecting a indicator (classificationType). - The values gets stored in the table classificationscore with their own classificationScoreId, the classificationType_Id, title, scorePercent and sort. + The values gets stored in the table classificationscore with their own classificationScoreId, the classificationType_Id, scorePercent and sort. + -> the value get's stored either in FIELDVALUE, INDICATORTEXT, INDICATORNUMBER or INDICATORINTEGER, depending on the indicatorType and fieldType This entity only has one view: the ClassificationScoreMultipleEdit_view which has title as the title field and score and sort as columns making it possible for the admin to configure something like this: @@ -18,21 +19,26 @@ Purpose: USAGE: Organisation CLASSIFICATION: 1. Target Group - INDICATOR: Headquarters + INDICATOR: Industry SCOREPOINTS: 35 - Germany 100%, 35,00 - Austria 100%, 35,00 - Switzerland 70%, 25,00 + Finance 100%, 40,00 + Logistics 60%, 24,00 + Trade 0%, 0,00 Other 0%, 0,00 Particularities: The reason why we use percent is because the classificationTypes of the group can have different filterconditions, which excludes them for some datasets -> we had to settle for percent - The score itself get's calculated by the adding all the archeived scores of the relevant classificationType datasets of the object + The score itself get's calculated by the adding all the achieved scores of the relevant classificationType datasets of the object (scorePercent of the classificationScore dataset * the scorePoints of the classificationType dataset) and matching it against the the sum of the best possible scores of each relevant classificationType of that group and calculating it via the classificationGrading minPercents If none of the classificationTypes of a group is relevant we ignore that group. + At the moment we only allow classificating with drop down values or number/integer values. + For the dropDownFields of the entity or attributes we use a FILTER_TREE field so the user has all the possible values as the selection and we can easily evaluate them. + The dropDownValues of complex indicators work trough a dropDownProcess. + The numbers have a simple numberfield so the user can specify how many percent the object get's from that many points. + We also have to set the outdated flag of the classificationtype dataset everytime we insert/update/delete diff --git a/entity/ClassificationScore_entity/entityfields/classificationscoreid/valueProcess.js b/entity/ClassificationScore_entity/entityfields/classificationscoreid/valueProcess.js index 394e2a4a036323a90283bed48ca7ee378dd6200c..24e8467f15a62bf30965849807daf8fb85977f2e 100644 --- a/entity/ClassificationScore_entity/entityfields/classificationscoreid/valueProcess.js +++ b/entity/ClassificationScore_entity/entityfields/classificationscoreid/valueProcess.js @@ -3,5 +3,7 @@ import("system.util"); import("system.result"); import("system.vars"); -if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value")) - result.string(util.getNewUUID()); \ No newline at end of file +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) +{ + result.string(util.getNewUUID()); +} \ No newline at end of file diff --git a/entity/ClassificationScore_entity/entityfields/classificationtype_id/valueProcess.js b/entity/ClassificationScore_entity/entityfields/classificationtype_id/valueProcess.js index 8806f470d922646ce6c4127ee42e945e86119076..186858e8e7cd2bbfca3a5ea52a8745e84c7de18d 100644 --- a/entity/ClassificationScore_entity/entityfields/classificationtype_id/valueProcess.js +++ b/entity/ClassificationScore_entity/entityfields/classificationtype_id/valueProcess.js @@ -2,5 +2,7 @@ import("system.result"); import("system.neon"); import("system.vars"); -if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) - result.string(vars.get("$param.ClassificationTypeId_param")); \ No newline at end of file +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) +{ + result.string(vars.get("$param.ClassificationTypeId_param")); +} \ No newline at end of file diff --git a/entity/ClassificationScore_entity/entityfields/displayvaluefortitlefield/stateProcess.js b/entity/ClassificationScore_entity/entityfields/displayvaluefortitlefield/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..ceb8b4c2e65dc2b6f8b05cc77b5b5b93ed241f4f --- /dev/null +++ b/entity/ClassificationScore_entity/entityfields/displayvaluefortitlefield/stateProcess.js @@ -0,0 +1,6 @@ +import("Classification_lib"); +import("system.result"); +import("system.vars"); + +var filterValue = vars.get("$field.FIELDVALUE"); +result.string(ClassificationUtils.getClassificationScoreStateProcess(vars.get("$sys.recordstate"), null, null, null, filterValue)); \ No newline at end of file diff --git a/entity/ClassificationScore_entity/entityfields/displayvaluefortitlefield/valueProcess.js b/entity/ClassificationScore_entity/entityfields/displayvaluefortitlefield/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..03b0db7617bb790d394435b2fec5518ec070d0da --- /dev/null +++ b/entity/ClassificationScore_entity/entityfields/displayvaluefortitlefield/valueProcess.js @@ -0,0 +1,31 @@ +import("system.result"); +import("system.vars"); + + +var filterValue = vars.get("$field.FIELDVALUE"); +var integerValue = vars.get("$field.INDICATORINTEGER"); +var numberValue = vars.get("$field.INDICATORNUMBER"); +var textValue = vars.get("$field.INDICATORTEXT"); +var res = ""; + +if (integerValue) +{ + res = integerValue; +} +else if (numberValue) +{ + res = numberValue; +} +else if (textValue) +{ + res = vars.get("$property.INDICATORTEXT.dropDown")[textValue]; +} +else if (filterValue) +{ + if (JSON.parse(filterValue)["filter"]["childs"]["0"]) + { + res = JSON.parse(filterValue)["filter"]["childs"]["0"]["value"]; //always the first child, because we only allow simple filters with one child + } +} + +result.string(res); \ No newline at end of file diff --git a/entity/ClassificationScore_entity/entityfields/fieldvalue/filterTreeExcludedFieldsProcess.js b/entity/ClassificationScore_entity/entityfields/fieldvalue/filterTreeExcludedFieldsProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..1741b0560dccf75ec963c8fa87b620647383a771 --- /dev/null +++ b/entity/ClassificationScore_entity/entityfields/fieldvalue/filterTreeExcludedFieldsProcess.js @@ -0,0 +1,102 @@ +//TODO: Use this once possible, in the meantime: handle wrongly configured fieldvalues in the upadteProcess +// +// +// +////import("system.logging"); +//import("system.neon"); +//import("system.text"); +//import("Classification_lib"); +//import("system.vars"); +//import("Context_lib"); +//import("Dependency_lib"); +//import("system.project"); +//import("ClassificationFilter_lib"); +//import("Sql_lib"); +//import("system.result"); +// +// +//////if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT) +//////{ +//// var classificationTypeInformation = newSelect("CLASSIFICATIONTYPE.OBJECT_TYPE, CLASSIFICATIONTYPE.FIELD, CLASSIFICATIONTYPE.FIELDTYPE, CLASSIFICATIONTYPE.INDICATORTYPE") +//// .from("CLASSIFICATIONTYPE") +//// .where("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", vars.get("$param.ClassificationTypeId_param")) +//// .arrayRow(); +//// var context = classificationTypeInformation[0]; +//// var fieldV = classificationTypeInformation[1]; +//// var fieldType = classificationTypeInformation[2]; +//// var indicatorType = classificationTypeInformation[3]; +//// var entity = ContextUtils.getEntity(context); +//// var fields = project.getEntityStructure(entity)["fields"]; +//// +//// +//// +//// //We want to exclude all the classificationFilterFields. +//// //Excluding via this process works by returning a array with all the fieldNames you want to exclude. +//// //The ClassificationFilters are ClassificationFilterExtensionSets so the name of one of these fields looks like this: +//// // "#EXTENSION." + Set-Name + "." + Field-Name + "#" + Contenttype +//// // e.g: "#EXTENSION.ClassificationType_filter.d67397c5-5e05-433b-b61d-12807906aa5a#TEXT"" +//// +//// var classificationTypes = newSelect("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID, CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID, CLASSIFICATIONTYPE.OBJECT_TYPE") +//// .from("CLASSIFICATIONTYPE") +//// .join("CLASSIFICATIONGROUP", "CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID = CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID") +//// .orderBy("CLASSIFICATIONTYPE.OBJECT_TYPE, CLASSIFICATIONGROUP.SORTING") +//// .table(); +//// +//// var res = ["CLASSIFICATIONVALUE"]; +//// var groupObject = {}; +//// var sqlHelper = new SqlMaskingUtils(); +//// var ii; +//// var previousObjectType; +//// +//// for (let i = 0; i < classificationTypes.length; i++) { +//// +//// //classificationGroupFilterFields are a little complicated: +//// //it's the classificationGroupId + the correct SqlCondition (as String) encoded via ClassificationGroupFilterNameCoder +correct prefix and contenttype +//// if(!groupObject.hasOwnProperty(classificationTypes[i][1]))//only once per group +//// { +//// if(previousObjectType == null || previousObjectType != classificationTypes[i][2]) +//// { +//// ii = 0;// reset the position once we are done with that object_type (possible thanks to the orderBy of the select above +//// } +//// +//// var sqlConditionForGroup = SqlBuilder.caseWhen(newWhere("CLASSIFICATIONSTORAGE.CLASSIFICATIONVALUE is null")) +//// .thenString("-") +//// .elseValue(sqlHelper.substring("CLASSIFICATIONVALUE", ii+1, 1)) +//// .toString(); +//// +//// res.push("#EXTENSION.ClassificationGroup_filter."+ClassificationGroupFilterNameCoder.encode(classificationTypes[i][1], sqlConditionForGroup)+"#TEXT"); +//// groupObject[classificationTypes[i][1]] = ""; +//// ii++;// used for the correct Position in the grading string (we need the exact same condition as in the filterExtensionSet +//// previousObjectType = classificationTypes[i][2]; +//// } +//// } +//// +//// //remove all the fields of consumers with no dependency set between the entity of the object_type and the consumer entity +//// +////// for (var field in fields) +////// { +////// if(fields[field]["fieldType"] == "CONSUMER") +////// { +////// var consumerEntity = fields[field]["entityName"]; +////// +////// if(!Dependency.getReverseDependency(entity).includes(consumerEntity)) +////// { +////// var consumerStructure = project.getEntityStructure(consumerEntity); +////// var consumerName = fields[field]["name"]; +////// var consumerFields = consumerStructure["fields"]; +////// +////// for (var consumerField in consumerFields) +////// { +////// //name of these filterFields = consumerName + '.' + fieldname +////// res.push(consumerName +"."+consumerFields[consumerField]["name"]); +////// } +////// } +////// } +////// } +//res = ["#EXTENSION.ClassificationGroup_filter.eyJjbGFzc2lmaWNhdGlvbkdyb3VwSWQiOiI4MmJlMzY1OS05MTdiLTRhN2UtYmYzMS0zMzI1OGFmMDBhMTYiLCJyZXByZXNlbnRpbmdTcWxFeHByZXNzaW9uIjoiY2FzZSB3aGVuICAoIENMQVNTSUZJQ0FUSU9OU1RPUkFHRS5DTEFTU0lGSUNBVElPTlZBTFVFIGlzIG51bGwgKSAgdGhlbiAnLScgZWxzZSBzdWJzdHIoQ0xBU1NJRklDQVRJT05WQUxVRSwgMSwgMSkgZW5kIn0=#TEXT" +// , "#EXTENSION.ClassificationGroup_filter.eyJjbGFzc2lmaWNhdGlvbkdyb3VwSWQiOiI0YWY3NzQyZS1lMGRkLTQ4NGItYTMwOS05NDJmYmE1NDY4MzMiLCJyZXByZXNlbnRpbmdTcWxFeHByZXNzaW9uIjoiY2FzZSB3aGVuICAoIENMQVNTSUZJQ0FUSU9OU1RPUkFHRS5DTEFTU0lGSUNBVElPTlZBTFVFIGlzIG51bGwgKSAgdGhlbiAnLScgZWxzZSBzdWJzdHIoQ0xBU1NJRklDQVRJT05WQUxVRSwgMiwgMSkgZW5kIn0=#TEXT" +// , "#EXTENSION.ClassificationGroup_filter.eyJjbGFzc2lmaWNhdGlvbkdyb3VwSWQiOiIyMWFmMmI0ZC0zNGY3LTRjMDMtOGQ0ZS0wYTQwYmIxN2ZhZjIiLCJyZXByZXNlbnRpbmdTcWxFeHByZXNzaW9uIjoiY2FzZSB3aGVuICAoIENMQVNTSUZJQ0FUSU9OU1RPUkFHRS5DTEFTU0lGSUNBVElPTlZBTFVFIGlzIG51bGwgKSAgdGhlbiAnLScgZWxzZSBzdWJzdHIoQ0xBU1NJRklDQVRJT05WQUxVRSwgMSwgMSkgZW5kIn0=#TEXT" +// , "#EXTENSION.ClassificationGroup_filter.eyJjbGFzc2lmaWNhdGlvbkdyb3VwSWQiOiJhYjczM2FiNy1mOWIzLTRiOGYtOTY3NC0xOWU0MzQwY2MzMWEiLCJyZXByZXNlbnRpbmdTcWxFeHByZXNzaW9uIjoiY2FzZSB3aGVuICAoIENMQVNTSUZJQ0FUSU9OU1RPUkFHRS5DTEFTU0lGSUNBVElPTlZBTFVFIGlzIG51bGwgKSAgdGhlbiAnLScgZWxzZSBzdWJzdHIoQ0xBU1NJRklDQVRJT05WQUxVRSwgMiwgMSkgZW5kIn0=#TEXT" +// ] +// result.object(res); +////} \ No newline at end of file diff --git a/entity/CampaignAddParticipants_entity/entityfields/campaignstep_id/onValueChange.js b/entity/ClassificationScore_entity/entityfields/fieldvalue/onValueChange.js similarity index 100% rename from entity/CampaignAddParticipants_entity/entityfields/campaignstep_id/onValueChange.js rename to entity/ClassificationScore_entity/entityfields/fieldvalue/onValueChange.js diff --git a/entity/ClassificationScore_entity/entityfields/fieldvalue/stateProcess.js b/entity/ClassificationScore_entity/entityfields/fieldvalue/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..fa537cdef8c45aed0d625756c32da7d02d042bde --- /dev/null +++ b/entity/ClassificationScore_entity/entityfields/fieldvalue/stateProcess.js @@ -0,0 +1,9 @@ +import("system.result"); +import("system.vars"); +import("Classification_lib"); + +var state = ClassificationUtils.getClassificationScoreStateProcess(vars.get("$sys.recordstate") + , [$ClassificationFieldTypes.DROPDOWN()] + , JSON.parse(vars.getString("$param.ClassificationTypeInfo_param")) + , [$ClassificationIndicatorTypes.ENTITYFIELD(), $ClassificationIndicatorTypes.ATTRIBUTE()]); +result.string(state); \ No newline at end of file diff --git a/entity/ClassificationScore_entity/entityfields/fieldvalue/valueProcess.js b/entity/ClassificationScore_entity/entityfields/fieldvalue/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..773f1925cc801f0bd56eee0e491a4175a0a94434 --- /dev/null +++ b/entity/ClassificationScore_entity/entityfields/fieldvalue/valueProcess.js @@ -0,0 +1,18 @@ +import("system.neon"); +import("JditoFilter_lib"); +import("Sql_lib"); +import("system.result"); +import("Context_lib"); +import("system.vars"); + +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value")) +{ + var objectType = newSelect("CLASSIFICATIONTYPE.OBJECT_TYPE") + .from("CLASSIFICATIONTYPE") + .where("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", vars.getString("$field.CLASSIFICATIONTYPE_ID")) + .cell(); + + var entity = ContextUtils.getEntity(objectType); + var emptyFilter = JditoFilterUtils.getEmptyFilter(entity); + result.string(emptyFilter); +} \ No newline at end of file diff --git a/entity/ClassificationScore_entity/entityfields/indicatorinteger/mandatoryProcess.js b/entity/ClassificationScore_entity/entityfields/indicatorinteger/mandatoryProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..93d9930ec5ad3aa85d31478a628f23984bb61be8 --- /dev/null +++ b/entity/ClassificationScore_entity/entityfields/indicatorinteger/mandatoryProcess.js @@ -0,0 +1,8 @@ +import("system.result"); +import("system.vars"); +import("Classification_lib"); + +var fieldInfo = JSON.parse(vars.getString("$param.ClassificationTypeInfo_param")); +var res = fieldInfo && fieldInfo["fieldType"] == $ClassificationFieldTypes.INTEGER(); + +result.string(res); \ No newline at end of file diff --git a/entity/ClassificationScore_entity/entityfields/indicatorinteger/stateProcess.js b/entity/ClassificationScore_entity/entityfields/indicatorinteger/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..093ba4b941d1819399870d309b32b58880ceabf6 --- /dev/null +++ b/entity/ClassificationScore_entity/entityfields/indicatorinteger/stateProcess.js @@ -0,0 +1,7 @@ +import("system.result"); +import("system.vars"); +import("Classification_lib"); + +result.string(ClassificationUtils.getClassificationScoreStateProcess(vars.get("$sys.recordstate") + , [$ClassificationFieldTypes.INTEGER()] + , JSON.parse(vars.getString("$param.ClassificationTypeInfo_param")))); \ No newline at end of file diff --git a/entity/ClassificationScore_entity/entityfields/indicatornumber/mandatoryProcess.js b/entity/ClassificationScore_entity/entityfields/indicatornumber/mandatoryProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..218dc09e20453ba5dde497481d6f306dbe2d3533 --- /dev/null +++ b/entity/ClassificationScore_entity/entityfields/indicatornumber/mandatoryProcess.js @@ -0,0 +1,8 @@ +import("system.result"); +import("system.vars"); +import("Classification_lib"); + +var fieldInfo = JSON.parse(vars.getString("$param.ClassificationTypeInfo_param")); +var res = fieldInfo && fieldInfo["fieldType"] == $ClassificationFieldTypes.NUMBER(); + +result.string(res); \ No newline at end of file diff --git a/entity/ClassificationScore_entity/entityfields/indicatornumber/stateProcess.js b/entity/ClassificationScore_entity/entityfields/indicatornumber/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..412a3e13378d200416035ef778174b31bb711ec8 --- /dev/null +++ b/entity/ClassificationScore_entity/entityfields/indicatornumber/stateProcess.js @@ -0,0 +1,7 @@ +import("system.result"); +import("system.vars"); +import("Classification_lib"); + +result.string(ClassificationUtils.getClassificationScoreStateProcess(vars.get("$sys.recordstate") + , [$ClassificationFieldTypes.NUMBER()] + , JSON.parse(vars.getString("$param.ClassificationTypeInfo_param")))); \ No newline at end of file diff --git a/entity/ClassificationScore_entity/entityfields/indicatortext/dropDownProcess.js b/entity/ClassificationScore_entity/entityfields/indicatortext/dropDownProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..8fb59508d1502596e9215f822db2205ed8d67c11 --- /dev/null +++ b/entity/ClassificationScore_entity/entityfields/indicatortext/dropDownProcess.js @@ -0,0 +1,16 @@ +import("ClassificationComplexIndicatorRegistry_basic"); +import("system.result"); +import("Classification_lib"); +import("Sql_lib"); +import("system.vars"); + +var res = []; + +var fieldInfo = JSON.parse(vars.getString("$param.ClassificationTypeInfo_param")); + +if(fieldInfo && (fieldInfo["fieldType"] == $ClassificationFieldTypes.DROPDOWN() || fieldInfo["fieldType"] == $ClassificationFieldTypes.DATE()) + && fieldInfo["indicatorType"] == $ClassificationIndicatorTypes.COMPLEX()) +{ + res = ClassificationComplexIndicatorRegistryUtils.getComplexIndicatorValueArray(fieldInfo["field"]); +} +result.object(res); \ No newline at end of file diff --git a/entity/ClassificationScore_entity/entityfields/indicatortext/mandatoryProcess.js b/entity/ClassificationScore_entity/entityfields/indicatortext/mandatoryProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..8e4b65df0e79ff1ee2c330dc19a804695cca827b --- /dev/null +++ b/entity/ClassificationScore_entity/entityfields/indicatortext/mandatoryProcess.js @@ -0,0 +1,14 @@ +import("system.result"); +import("system.vars"); +import("Classification_lib"); + +var res = false; + +var fieldInfo = JSON.parse(vars.getString("$param.ClassificationTypeInfo_param")); + +if(fieldInfo && fieldInfo["fieldType"] == $ClassificationFieldTypes.DROPDOWN() + && fieldInfo["indicatorType"] == $ClassificationIndicatorTypes.COMPLEX()) +{ + res = true; +} +result.string(res); \ No newline at end of file diff --git a/entity/ClassificationScore_entity/entityfields/indicatortext/stateProcess.js b/entity/ClassificationScore_entity/entityfields/indicatortext/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..c39e741b11259629c4eb56d2080b0abd77489cc7 --- /dev/null +++ b/entity/ClassificationScore_entity/entityfields/indicatortext/stateProcess.js @@ -0,0 +1,9 @@ +import("system.result"); +import("system.vars"); +import("Classification_lib"); + +var state = ClassificationUtils.getClassificationScoreStateProcess(vars.get("$sys.recordstate") + , [$ClassificationFieldTypes.DROPDOWN(), $ClassificationFieldTypes.DATE()] + , JSON.parse(vars.getString("$param.ClassificationTypeInfo_param")) + , [$ClassificationIndicatorTypes.COMPLEX()]); +result.string(state); \ No newline at end of file diff --git a/entity/DuplicateScannerPrefilterConfig_entity/recordcontainers/dbrecordcontainer/conditionProcess.js b/entity/ClassificationScore_entity/onValidation.js similarity index 100% rename from entity/DuplicateScannerPrefilterConfig_entity/recordcontainers/dbrecordcontainer/conditionProcess.js rename to entity/ClassificationScore_entity/onValidation.js diff --git a/entity/ClassificationScore_entity/recordcontainers/db/onDBInsert.js b/entity/ClassificationScore_entity/recordcontainers/db/onDBInsert.js new file mode 100644 index 0000000000000000000000000000000000000000..1d7a46d81d65023d1f0ce5acf224e6fb6362c040 --- /dev/null +++ b/entity/ClassificationScore_entity/recordcontainers/db/onDBInsert.js @@ -0,0 +1,8 @@ +import("Sql_lib"); +import("system.vars"); + +//we have to set the corresponding classificationType dataset as outdated everytime we insert a new classificationScore or edit an existing one +//quick reminder: the classifications are not calculated in realtime, so we have to set this flag so the serverprocess knows what has changed and can recalculate accordingly +var classificationTypeId = vars.get("$field.CLASSIFICATIONTYPE_ID"); +var cond = newWhere("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", classificationTypeId); +cond.updateData(true, "CLASSIFICATIONTYPE", ["OUTDATED"], null, [1]); \ No newline at end of file diff --git a/entity/ClassificationScore_entity/recordcontainers/db/onDBUpdate.js b/entity/ClassificationScore_entity/recordcontainers/db/onDBUpdate.js index c9d29f0a6ed67c07d8974c97aa4318ff6f50cb8a..1d7a46d81d65023d1f0ce5acf224e6fb6362c040 100644 --- a/entity/ClassificationScore_entity/recordcontainers/db/onDBUpdate.js +++ b/entity/ClassificationScore_entity/recordcontainers/db/onDBUpdate.js @@ -1,8 +1,8 @@ import("Sql_lib"); import("system.vars"); +//we have to set the corresponding classificationType dataset as outdated everytime we insert a new classificationScore or edit an existing one +//quick reminder: the classifications are not calculated in realtime, so we have to set this flag so the serverprocess knows what has changed and can recalculate accordingly var classificationTypeId = vars.get("$field.CLASSIFICATIONTYPE_ID"); - var cond = newWhere("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", classificationTypeId); - cond.updateData(true, "CLASSIFICATIONTYPE", ["OUTDATED"], null, [1]); \ No newline at end of file diff --git a/entity/ClassificationType_entity/ClassificationType_entity.aod b/entity/ClassificationType_entity/ClassificationType_entity.aod index 749feeedc36f37bc816ada37def0bd46b14aabaf..4aadb51b31db8f6c584d801d50ff1e99aac1eb80 100644 --- a/entity/ClassificationType_entity/ClassificationType_entity.aod +++ b/entity/ClassificationType_entity/ClassificationType_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>ClassificationType_entity</name> <title>Indicator</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -9,14 +9,6 @@ <entityFields> <entityProvider> <name>#PROVIDER</name> - <dependencies> - <entityDependency> - <name>908ca339-4dca-41c6-a32b-472617e1742e</name> - <entityName>ClassificationGroup_entity</entityName> - <fieldName>ClassificationGroups</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>CLASSIFICATIONTYPEID</name> @@ -40,6 +32,7 @@ <entityConsumer> <name>ClassificationScores</name> <refreshParent v="true" /> + <onValidation>%aditoprj%/entity/ClassificationType_entity/entityfields/classificationscores/onValidation.js</onValidation> <dependency> <name>dependency</name> <entityName>ClassificationScore_entity</entityName> @@ -54,6 +47,10 @@ <name>ClassificationGroup_param</name> <valueProcess>%aditoprj%/entity/ClassificationType_entity/entityfields/classificationscores/children/classificationgroup_param/valueProcess.js</valueProcess> </entityParameter> + <entityParameter> + <name>ClassificationTypeInfo_param</name> + <valueProcess>%aditoprj%/entity/ClassificationType_entity/entityfields/classificationscores/children/classificationtypeinfo_param/valueProcess.js</valueProcess> + </entityParameter> </children> </entityConsumer> <entityProvider> @@ -88,6 +85,15 @@ <entityField> <name>OUTDATED</name> </entityField> + <entityField> + <name>FIELD</name> + </entityField> + <entityField> + <name>FIELDTYPE</name> + </entityField> + <entityField> + <name>INDICATORTYPE</name> + </entityField> </entityFields> <recordContainers> <dbRecordContainer> @@ -122,6 +128,18 @@ <name>SCOREPOINTS.value</name> <recordfield>CLASSIFICATIONTYPE.SCOREPOINTS</recordfield> </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>FIELD.value</name> + <recordfield>CLASSIFICATIONTYPE.FIELD</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>FIELDTYPE.value</name> + <recordfield>CLASSIFICATIONTYPE.FIELDTYPE</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>INDICATORTYPE.value</name> + <recordfield>CLASSIFICATIONTYPE.INDICATORTYPE</recordfield> + </dbRecordFieldMapping> </recordFieldMappings> <linkInformation> <linkInformation> diff --git a/entity/ClassificationType_entity/documentation.adoc b/entity/ClassificationType_entity/documentation.adoc index ec1b4d8a15791b2e5f541eb575bde404113fbc1b..e2fa391d6ffc725913910d1dce9c3daf53bb5d20 100644 --- a/entity/ClassificationType_entity/documentation.adoc +++ b/entity/ClassificationType_entity/documentation.adoc @@ -8,11 +8,11 @@ Definition: Purpose: This entity is used for storing the indicators and making it possible for the admin to change - the details of the indicator (classificationType) like the name, it's usage or it's classification (classificationGroup) + the details of the indicator (classificationType) the field, it's usage or it's classification (classificationGroup) This entity only has one view: the ClassificationTypePreview which has the usagePlace (object_type), - classification (classificationgroup_Id), title (scoretype), and the usagefilter to make it possible to have classificationTypes - that are only relevant for certain objects, scorepoints + classification (classificationgroup_Id), the usagefilter(to make it possible to have classificationTypes + that are only relevant for certain objects) and the scorepoints + the ClassificationScoreMultipleEdit_view. making it possible for the admin to configure something like this: @@ -33,7 +33,13 @@ Particularities: We also have to set the outdated flag of the classificationtype dataset everytime we insert/update it and set the flag for all the other classificationtypes of the group if we delete the current classificationType - + + We only classificate fields of the entity itself, it's attributes or the complex ones specified by customizing (see also ClassificationComplexIndicatorRegistry_basic) + At the moment we only allow classificating with drop down values or number/integer values. + For the dropDownFields of the entity or attributes we use a FILTER_TREE field so the user has all the possible values as the selection and we can easily evaluate them. + The dropDownValues of complex indicators work trough a dropDownProcess. + The numbers have a simple numberfield so the user can specify how many percent the object get's from that many points. + The Classification consists of the following entities: Classification_entity, ClassificationAdmin_entity, diff --git a/entity/ClassificationType_entity/entityfields/classificationscores/children/classificationtypeinfo_param/valueProcess.js b/entity/ClassificationType_entity/entityfields/classificationscores/children/classificationtypeinfo_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..c40502a50f014e80b53a78e17c8944e80eff483f --- /dev/null +++ b/entity/ClassificationType_entity/entityfields/classificationscores/children/classificationtypeinfo_param/valueProcess.js @@ -0,0 +1,12 @@ +import("system.vars"); +import("system.result"); + +result.string( + JSON.stringify( + { + field: vars.get("$field.FIELD"), + fieldType: vars.get("$field.FIELDTYPE"), + indicatorType: vars.get("$field.INDICATORTYPE") + } + ) +); \ No newline at end of file diff --git a/entity/ClassificationType_entity/entityfields/classificationscores/onValidation.js b/entity/ClassificationType_entity/entityfields/classificationscores/onValidation.js new file mode 100644 index 0000000000000000000000000000000000000000..d6bba218749fb3bc538990c9bcfc0cabad14bddb --- /dev/null +++ b/entity/ClassificationType_entity/entityfields/classificationscores/onValidation.js @@ -0,0 +1,56 @@ +import("AttributeFilter_lib"); +import("system.translate"); +import("system.result"); +import("Classification_lib"); +import("system.neon"); +import("system.project"); +import("Context_lib"); +import("system.vars"); +import("Sql_lib"); + +//this process doesn't always get triggered when changing the FIELDVALUE value. +//Because there are some bugs when it comes to triggering processes by FILTER_TREE fields in multiEdits +var fieldType = vars.get("$field.FIELDTYPE"); +var indicatorType = vars.get("$field.INDICATORTYPE"); + +if(fieldType == $ClassificationFieldTypes.DROPDOWN() + && (indicatorType == $ClassificationIndicatorTypes.ENTITYFIELD() + || indicatorType == $ClassificationIndicatorTypes.ATTRIBUTE())) +{ + //we only care about the newly inserted and the changed rows, since the ones we already have stored are valid and we don't care about the deleted ones' + var insertedRows = vars.get("$field.ClassificationScores.insertedRows"); + var changedRows = vars.get("$field.ClassificationScores.changedRows"); + var relevantRows = insertedRows.concat(changedRows); + + var field = vars.get("$field.FIELD"); + + var validationText = ""; + for (let i = 0; i < relevantRows.length; i++) + { + validationText = _getValidationString(JSON.parse(relevantRows[i]["FIELDVALUE"]), field, validationText, indicatorType); + } + if (validationText != "") + { + result.string(validationText); + } +} + +function _getValidationString (pFilter, pField, pValidationString, pIndicatorType) +{ + if(pFilter["filter"]["childs"].length != 1) + { + pValidationString += translate.text("only use simple filters") + "\n\ +"; + } + else if(pFilter["filter"]["childs"][0]["name"] != pField || (pIndicatorType == $ClassificationIndicatorTypes.ATTRIBUTE() && pField.includes(pFilter["filter"]["childs"][0]["name"]))) + { + pValidationString += translate.text("only filter using the specified indicatorfield")+ "\n\ +"; + } + else if(pFilter["filter"]["childs"][0]["operator"] != "EQUAL") + { + pValidationString += translate.text("please only filter using 'equal'")+ "\n\ +"; + } + return pValidationString; +} \ No newline at end of file diff --git a/entity/Classification_entity/Classification_entity.aod b/entity/Classification_entity/Classification_entity.aod index e12475949f9f1680936642c87819779ca78616db..5dfcffcc838eaf10372aab1aba5f4a70a4e3926c 100644 --- a/entity/Classification_entity/Classification_entity.aod +++ b/entity/Classification_entity/Classification_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Classification_entity</name> <title>Classification</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -12,14 +12,10 @@ <entityProvider> <name>#PROVIDER</name> </entityProvider> - <entityField> - <name>CLASSIFICATIONID</name> - </entityField> <entityField> <name>VALUE</name> <title>Selection</title> <consumer>ClassificationScores</consumer> - <displayValueProcess>%aditoprj%/entity/Classification_entity/entityfields/value/displayValueProcess.js</displayValueProcess> </entityField> <entityParameter> <name>ClassificationType_param</name> @@ -42,27 +38,10 @@ <entityProvider> <name>Classifications</name> <documentation>%aditoprj%/entity/Classification_entity/entityfields/classifications/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>6274acfa-3dbf-4a9b-8926-2a2d1ff80d6d</name> - <entityName>Salesproject_entity</entityName> - <fieldName>Classifications</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>ed17d4ca-1bdd-45b2-8a38-d7a73b1669e7</name> - <entityName>Organisation_entity</entityName> - <fieldName>Classifications</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>CLASSIFICATIONTYPEID</name> <title>Indicator</title> - <consumer>KeywordClassificationTypes</consumer> - <stateProcess>%aditoprj%/entity/Classification_entity/entityfields/classificationtypeid/stateProcess.js</stateProcess> - <valueProcess>%aditoprj%/entity/Classification_entity/entityfields/classificationtypeid/valueProcess.js</valueProcess> </entityField> <entityField> <name>CLASSIFICATIONGROUP</name> @@ -70,19 +49,11 @@ <title>Classification</title> <contentType>TEXT</contentType> <groupable v="true" /> - <mandatoryProcess>%aditoprj%/entity/Classification_entity/entityfields/classificationgroup/mandatoryProcess.js</mandatoryProcess> <textInputAllowed v="true" /> </entityField> - <entityField> - <name>OBJECT_ROWID</name> - <valueProcess>%aditoprj%/entity/Classification_entity/entityfields/object_rowid/valueProcess.js</valueProcess> - </entityField> - <entityField> - <name>OBJECT_TYPE</name> - <valueProcess>%aditoprj%/entity/Classification_entity/entityfields/object_type/valueProcess.js</valueProcess> - </entityField> <entityField> <name>UID</name> + <state>INVISIBLE</state> </entityField> <entityConsumer> <name>ClassificationScores</name> @@ -106,14 +77,6 @@ </entityParameter> </children> </entityConsumer> - <entityField> - <name>Info</name> - <title>Rating</title> - <contentType>HTML</contentType> - <groupable v="true" /> - <state>READONLY</state> - <displayValueProcess>%aditoprj%/entity/Classification_entity/entityfields/info/displayValueProcess.js</displayValueProcess> - </entityField> <entityField> <name>SCORE_RESULTS</name> </entityField> @@ -135,14 +98,6 @@ <name>SCORETYPE</name> <title>Indicator</title> <mandatory v="false" /> - <displayValueProcess>%aditoprj%/entity/Classification_entity/entityfields/scoretype/displayValueProcess.js</displayValueProcess> - </entityField> - <entityField> - <name>GroupScore</name> - <valueProcess>%aditoprj%/entity/Classification_entity/entityfields/groupscore/valueProcess.js</valueProcess> - </entityField> - <entityField> - <name>GRADINGVALUE</name> </entityField> <entityProvider> <name>#PROVIDER_AGGREGATES</name> @@ -151,26 +106,14 @@ <entityField> <name>SCOREPOINTS</name> <title>Points</title> - <contentType>NUMBER</contentType> + <contentType>TEXT</contentType> <outputFormat>#,##0.00</outputFormat> <inputFormat>#,##0.00</inputFormat> </entityField> - <entityField> - <name>DISPLAYVALUE</name> - </entityField> - <entityActionGroup> - <name>fitlerviewActionGroup</name> - <title>Action</title> - <children> - <entityActionField> - <name>refreshClassificationsOfThisDataset</name> - <title>refresh classifications</title> - <onActionProcess>%aditoprj%/entity/Classification_entity/entityfields/fitlerviewactiongroup/children/refreshclassificationsofthisdataset/onActionProcess.js</onActionProcess> - <isObjectAction v="false" /> - <iconId>VAADIN:REFRESH</iconId> - </entityActionField> - </children> - </entityActionGroup> + <entityParameter> + <name>ClassificationContent_param</name> + <expose v="true" /> + </entityParameter> </entityFields> <recordContainers> <jDitoRecordContainer> @@ -180,17 +123,10 @@ <isRequireContainerFiltering v="true" /> <contentProcess>%aditoprj%/entity/Classification_entity/recordcontainers/jdito/contentProcess.js</contentProcess> <hasDependentRecords v="true" /> - <onUpdate>%aditoprj%/entity/Classification_entity/recordcontainers/jdito/onUpdate.js</onUpdate> <recordFieldMappings> <jDitoRecordFieldMapping> <name>UID.value</name> </jDitoRecordFieldMapping> - <jDitoRecordFieldMapping> - <name>CLASSIFICATIONTYPEID.value</name> - </jDitoRecordFieldMapping> - <jDitoRecordFieldMapping> - <name>CLASSIFICATIONID.value</name> - </jDitoRecordFieldMapping> <jDitoRecordFieldMapping> <name>CLASSIFICATIONGROUP.value</name> </jDitoRecordFieldMapping> @@ -198,10 +134,10 @@ <name>CLASSIFICATIONGROUP.displayValue</name> </jDitoRecordFieldMapping> <jDitoRecordFieldMapping> - <name>CLASSIFICATIONTYPEID.displayValue</name> + <name>CLASSIFICATIONTYPEID.value</name> </jDitoRecordFieldMapping> <jDitoRecordFieldMapping> - <name>SCOREPOINTS.value</name> + <name>CLASSIFICATIONTYPEID.displayValue</name> </jDitoRecordFieldMapping> <jDitoRecordFieldMapping> <name>VALUE.value</name> @@ -210,10 +146,7 @@ <name>VALUE.displayValue</name> </jDitoRecordFieldMapping> <jDitoRecordFieldMapping> - <name>Info.displayValue</name> - </jDitoRecordFieldMapping> - <jDitoRecordFieldMapping> - <name>Info.value</name> + <name>SCOREPOINTS.value</name> </jDitoRecordFieldMapping> </recordFieldMappings> </jDitoRecordContainer> diff --git a/entity/Classification_entity/entityfields/classificationgroup/mandatoryProcess.js b/entity/Classification_entity/entityfields/classificationgroup/mandatoryProcess.js deleted file mode 100644 index 7bbc5aa02d8beaf00c4458e4297646209f00ad91..0000000000000000000000000000000000000000 --- a/entity/Classification_entity/entityfields/classificationgroup/mandatoryProcess.js +++ /dev/null @@ -1,5 +0,0 @@ -import("system.neon"); -import("system.result"); -import("system.vars"); - -result.object(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT); \ No newline at end of file diff --git a/entity/Classification_entity/entityfields/classificationscores/children/classificationtype_param/valueProcess.js b/entity/Classification_entity/entityfields/classificationscores/children/classificationtype_param/valueProcess.js index 66d1a9ae5a70ffada860ab15cf8caffd67aea623..49cfe957ff858694a0732c68ce0125a2630cd3d2 100644 --- a/entity/Classification_entity/entityfields/classificationscores/children/classificationtype_param/valueProcess.js +++ b/entity/Classification_entity/entityfields/classificationscores/children/classificationtype_param/valueProcess.js @@ -1,4 +1,2 @@ import("system.vars"); import("system.result"); - -result.string(vars.get("$field.OBJECT_TYPE")) \ No newline at end of file diff --git a/entity/Classification_entity/entityfields/fitlerviewactiongroup/children/refreshclassificationsofthisdataset/onActionProcess.js b/entity/Classification_entity/entityfields/fitlerviewactiongroup/children/refreshclassificationsofthisdataset/onActionProcess.js deleted file mode 100644 index 10cfa6bda238dca910902b0b1a731d2e483336eb..0000000000000000000000000000000000000000 --- a/entity/Classification_entity/entityfields/fitlerviewactiongroup/children/refreshclassificationsofthisdataset/onActionProcess.js +++ /dev/null @@ -1,18 +0,0 @@ -import("system.process"); -import("system.util"); -import("system.vars"); - -var params = { - "refreshSingleRecord_param" : true, - "ObjectRowid_param" : vars.get("$param.ObjectRowid_param"), - "ObjectType_param" : vars.get("$param.ObjectType_param")} - -var processConfig = process.createStartAsyncConfig() - .setName("updateClassifications_serverProcess") - .setUser( vars.get("$sys.user")) - .setThreadPriority(process.THREADPRIORITY_LOW) - .setTimerType(process.TIMERTYPE_SERVER) - .setLocalVariables(params); - - -process.startAsync(processConfig); \ No newline at end of file diff --git a/entity/Classification_entity/entityfields/groupscore/valueProcess.js b/entity/Classification_entity/entityfields/groupscore/valueProcess.js deleted file mode 100644 index f711050aab02378a519ccc866a44d5005e79f3e2..0000000000000000000000000000000000000000 --- a/entity/Classification_entity/entityfields/groupscore/valueProcess.js +++ /dev/null @@ -1,15 +0,0 @@ -import("system.vars"); -import("system.result"); -import("system.result"); - -if (vars.getString("$field.SCORE_RESULTS")) -{ - var score = JSON.parse(vars.getString("$field.SCORE_RESULTS"))[vars.getString("$field.CLASSIFICATIONGROUP")]; - - if (!score) - score = 0; - else - score = parseInt(score); - - result.string(score); -} diff --git a/entity/Classification_entity/entityfields/info/displayValueProcess.js b/entity/Classification_entity/entityfields/info/displayValueProcess.js deleted file mode 100644 index 8cc250e8c5e8bb966333b5dd0843cebbe01e2991..0000000000000000000000000000000000000000 --- a/entity/Classification_entity/entityfields/info/displayValueProcess.js +++ /dev/null @@ -1,26 +0,0 @@ -import("system.translate"); -import("system.neon"); -import("system.result"); -import("system.vars"); -import("Sql_lib"); - -if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT) -{ - var classificationTypeId = vars.get("$field.CLASSIFICATIONTYPEID"); - var value = vars.get("$field.VALUE"); - if(classificationTypeId) - { - var select = newSelect(["CLASSIFICATIONSCORE.SCOREPERCENT/100*CLASSIFICATIONTYPE.SCOREPOINTS", - newSelect("max(CLASSIFICATIONSCORE.SCOREPERCENT)/100*CLASSIFICATIONTYPE.SCOREPOINTS") - .from("CLASSIFICATIONSCORE") - .join("CLASSIFICATIONTYPE on CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID = CLASSIFICATIONSCORE.CLASSIFICATIONTYPE_ID") - .where("CLASSIFICATIONSCORE.CLASSIFICATIONTYPE_ID", classificationTypeId) - .groupBy("CLASSIFICATIONTYPE.SCOREPOINTS").cell()]) - .from("CLASSIFICATIONSCORE") - .join("CLASSIFICATIONTYPE on CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID = CLASSIFICATIONSCORE.CLASSIFICATIONTYPE_ID") - .where("CLASSIFICATIONSCORE.CLASSIFICATIONSCOREID", value) - .arrayRow(); - - result.string(Math.round(select[0] * 100) / 100 +"/"+Math.round(select[1] * 100) / 100 + " " +translate.text("Points")); - } -} \ No newline at end of file diff --git a/entity/Classification_entity/entityfields/object_rowid/valueProcess.js b/entity/Classification_entity/entityfields/object_rowid/valueProcess.js deleted file mode 100644 index fe14f896ec8a83c8570a94ad6b64c9585c122e99..0000000000000000000000000000000000000000 --- a/entity/Classification_entity/entityfields/object_rowid/valueProcess.js +++ /dev/null @@ -1,8 +0,0 @@ -import("system.result"); -import("system.neon"); -import("system.vars"); - -if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT && vars.get("$this.value") == null && vars.get("$param.ObjectRowid_param")) -{ - result.string(vars.get("$param.ObjectRowid_param")); -} \ No newline at end of file diff --git a/entity/Classification_entity/entityfields/object_type/valueProcess.js b/entity/Classification_entity/entityfields/object_type/valueProcess.js deleted file mode 100644 index f51252e64ad7fb10b50c67ab339385859219f11b..0000000000000000000000000000000000000000 --- a/entity/Classification_entity/entityfields/object_type/valueProcess.js +++ /dev/null @@ -1,6 +0,0 @@ -import("system.result"); -import("system.neon"); -import("system.vars"); - -if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT && vars.get("$this.value") == null) - result.string(vars.get("$param.ObjectType_param")); \ No newline at end of file diff --git a/entity/Classification_entity/entityfields/value/displayValueProcess.js b/entity/Classification_entity/entityfields/value/displayValueProcess.js deleted file mode 100644 index 142bdf632c32fc623494dd125caca5f75abc104e..0000000000000000000000000000000000000000 --- a/entity/Classification_entity/entityfields/value/displayValueProcess.js +++ /dev/null @@ -1,19 +0,0 @@ -import("system.vars"); -import("system.translate"); -import("Sql_lib"); -import("system.db"); -import("system.result"); - -// no need to load, if no classificationscore exists -if (vars.get("$field.VALUE")) -{ - // TODO: loadEntity / #Title - result.string(translate.text(newSelect("TITLE") - .from("CLASSIFICATIONSCORE") - .where("CLASSIFICATIONSCORE.CLASSIFICATIONSCOREID", "$field.VALUE") - .cell())); -} -else -{ - result.string(""); -} diff --git a/entity/Classification_entity/recordcontainers/jdito/contentProcess.js b/entity/Classification_entity/recordcontainers/jdito/contentProcess.js index 9012ad499cb17403800936f7ad257cca37b1d91b..241ef0e0133f813467bde62a324fcb2bb45fdc8d 100644 --- a/entity/Classification_entity/recordcontainers/jdito/contentProcess.js +++ b/entity/Classification_entity/recordcontainers/jdito/contentProcess.js @@ -1,563 +1,8 @@ -import("Context_lib"); -import("Util_lib"); -import("system.eMath"); -import("system.entities"); -import("Organisation_lib"); -import("system.text"); -import("Classification_lib"); -import("Contact_lib"); -import("JditoFilter_lib"); -import("Sql_lib"); -import("system.db"); import("system.result"); -import("system.util"); import("system.vars"); -import("system.translate"); -//helper object for coding/decoding the uid of a record in this entity -function _UidEncoder(){} - -_UidEncoder.encode = function (pClassifactionTypeId, pObjectRowId, pObjectType) -{ - var res = text.encodeMS(Array.from(arguments)); - return res; -} - -_UidEncoder.decode = function (pEncodedUid) -{ - var vals = text.decodeMS(pEncodedUid); - return { - classifactionTypeId: vals[0], - objectRowId: vals[1], - objectType: vals[2] - }; -} - -//grouping is not done in this recordContainer but in it is done in the ClassificaitonTree_view via the defaultGroupFields - -var objectRowIdParam = vars.get("$param.ObjectRowid_param"); -var objectTypeParam = vars.get("$param.ObjectType_param"); - -var classificationTypeGroupDisplayCache = {}; -var gradingObject = {}; -var bestPossibleValuesObj = {}; -var achievedGroupScoresObj = {}; -var achievedGroupGradingsObj = {}; -var translatedClassificationTypesObj = {}; -var gradingTables = {}; -var maxScoresObj = {}; - -var resultSet = []; -var select; - -var classificationGroups = []; - -if (vars.exists("$local.idvalues") && vars.get("$local.idvalues")) -{ - var decodedId = _UidEncoder.decode(vars.get("$local.idvalues")); -} - -if(decodedId)//data selected -> only one select has to be done with the classificationtype (which we get from the uuid) in the condition -{ - select = newSelect(["CLASSIFICATION.CLASSIFICATIONID, CLASSIFICATIONGROUP.TITLE, CLASSIFICATIONTYPE.SCORETYPE, \n\ - CLASSIFICATION.SCOREPOINTS, CLASSIFICATION.VALUE, CLASSIFICATIONSCORE.TITLE, CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID", - newSelect("max(CLASSIFICATIONSCORE.SCOREPERCENT)*CLASSIFICATIONTYPE.SCOREPOINTS") - .from("CLASSIFICATIONSCORE") - .join("CLASSIFICATIONTYPE on CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID = CLASSIFICATIONSCORE.CLASSIFICATIONTYPE_ID") - .where("CLASSIFICATIONSCORE.CLASSIFICATIONTYPE_ID", decodedId["classifactionTypeId"]) - .groupBy("CLASSIFICATIONTYPE.SCOREPOINTS").cell()]) - .from("CLASSIFICATIONSCORE") - .join("CLASSIFICATION", "CLASSIFICATION.VALUE = CLASSIFICATIONSCORE.CLASSIFICATIONSCOREID") - .leftJoin("CLASSIFICATIONTYPE", "CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID = CLASSIFICATION.CLASSIFICATIONTYPE_ID") - .leftJoin("CLASSIFICATIONGROUP", "CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID = CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID") - .where("CLASSIFICATION.CLASSIFICATIONTYPE_ID", decodedId["classifactionTypeId"]) - .and("CLASSIFICATION.OBJECT_TYPE", decodedId["objectType"]) - .and("CLASSIFICATION.OBJECT_ROWID", decodedId["objectRowId"]) - .arrayRow(); - - if(select.length == 0)//different select needed if no classifications have been stored for the current object_rowId (otherwise problem with the from clause) - { - select = newSelect(["CLASSIFICATION.CLASSIFICATIONID, CLASSIFICATIONGROUP.TITLE, CLASSIFICATIONTYPE.SCORETYPE, \n\ - CLASSIFICATION.SCOREPOINTS, CLASSIFICATION.VALUE" - , SqlBuilder.caseWhen(newWhere("CLASSIFICATION.VALUE", "")) - .thenString("") - .elseValue("CLASSIFICATIONSCORE.TITLE") - .toString() - , "CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID", - newSelect("max(CLASSIFICATIONSCORE.SCOREPERCENT)*CLASSIFICATIONTYPE.SCOREPOINTS") - .from("CLASSIFICATIONSCORE") - .join("CLASSIFICATIONTYPE on CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID = CLASSIFICATIONSCORE.CLASSIFICATIONTYPE_ID") - .where("CLASSIFICATIONSCORE.CLASSIFICATIONTYPE_ID", decodedId["classifactionTypeId"]) - .groupBy("CLASSIFICATIONTYPE.SCOREPOINTS").cell()]) - .from("CLASSIFICATION") - .leftJoin("CLASSIFICATIONTYPE", "CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID = CLASSIFICATION.CLASSIFICATIONTYPE_ID") - .leftJoin("CLASSIFICATIONSCORE", "CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID = CLASSIFICATIONSCORE.CLASSIFICATIONTYPE_ID") - .leftJoin("CLASSIFICATIONGROUP", "CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID = CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID") - .where("CLASSIFICATION.CLASSIFICATIONTYPE_ID", decodedId["classifactionTypeId"]) - .and("CLASSIFICATION.OBJECT_TYPE", decodedId["objectType"]) - .and("CLASSIFICATION.OBJECT_ROWID", decodedId["objectRowId"]) - .arrayRow(); - } - - - var groupId = select[6]; - _buildMaxScore(); //builds maxScoresObj - maxTypeScoreObj = {}; - achievedScoresObj = {}; - var maxPointsArray = newSelect("CLASSIFICATION.SCOREPOINTS, CLASSIFICATION.CLASSIFICATIONTYPE_ID, CLASSIFICATIONTYPE.SCOREPOINTS") - .from("CLASSIFICATION") - .join("CLASSIFICATIONTYPE", "CLASSIFICATION.CLASSIFICATIONTYPE_ID = CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID") - .where("CLASSIFICATION.CLASSIFICATIONTYPE_ID", - newSelect("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID") - .from("CLASSIFICATIONTYPE") - .where("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID", groupId), SqlBuilder.IN()) - .and("CLASSIFICATION.OBJECT_ROWID", objectRowIdParam) - .table(); - var maxScoreGroup = 0; - var achievedScoreGroup = 0; - for (let i = 0; i < maxPointsArray.length; i++) - { - [achievedScore, classificationTypeId, maxScore] = maxPointsArray[i]; - - - maxScoreGroup = eMath.addDec(maxScoreGroup, (maxScoresObj[classificationTypeId]*maxScore)); - - achievedScoreGroup = eMath.addDec(achievedScore, achievedScoreGroup); - } - - gradingTables = newSelect("CLASSIFICATIONGRADING.CLASSIFICATIONGROUP_ID, CLASSIFICATIONGRADING.MINPERCENT, CLASSIFICATIONGRADING.GRADING") - .from("CLASSIFICATIONGRADING") - .where("CLASSIFICATIONGRADING.CLASSIFICATIONGROUP_ID", groupId) - .orderBy("CLASSIFICATIONGRADING.MINPERCENT asc") - .table(); - - for (let i = 0; i < gradingTables.length; i++) - { - [groupId, minPercent, grading] = gradingTables[i]; - - if(gradingObject[groupId] == undefined) - gradingObject[groupId] = []; - - gradingObject[groupId].push([minPercent, grading]); - } - - displayString = ClassificationUtils.formatDisplaySummaryForGroup(achievedScoreGroup, maxScoreGroup, groupId, translate.text(select[1]), - ClassificationUtils.getGradingFromObject(gradingObject, groupId, achievedScoreGroup, maxScoreGroup)) - - resultSet.push([vars.get("$local.idvalues")[0] - , decodedId["classifactionTypeId"] - , select[0] - , groupId - , displayString - , translate.text(select[2]) - , select[3] - , select[4] - , translate.text(select[5]) - , Math.round(select[3] * 100) / 100 +"/"+Math.round(select[7]) / 100 + " " +translate.text("Points")//do this here instead of in the sql so we don't get a lot of zeros behind the comma - , groupId - ]); - -} -else//else -> build via stored classification datasets; if we don't have any: 1. we get all relevant classificationtypes (this can take some time due to the filters) -{ //2. insert empty values for them and then 3. load the selected classificationtypes - - // if the select that's done in _buildTreeFromPersistetData() doesnt't return any persisted classifications -> the context has never been opened - // for this dataset before and we need to load all relevant classificationTypes and persist them and return the data - if(!_buildTreeFromPersistetData()) - { - _buildMaxScore(); - - //get's all the the classificationtypes of the current objectType - var classificationTypeArray = newSelect("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID, CLASSIFICATIONGROUP.TITLE, CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID, \n\ - CLASSIFICATIONTYPE.SCORETYPE, CLASSIFICATIONTYPE.SCOREPOINTS, CLASSIFICATIONTYPE.FILTER") - .from("CLASSIFICATIONTYPE") - .join("CLASSIFICATIONGROUP", "CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID = CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID") - .where("CLASSIFICATIONTYPE.OBJECT_TYPE", objectTypeParam) - .orderBy("CLASSIFICATIONGROUP.TITLE, CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID") - .table(); - - helperObject = {}; - classificationTypeObj = {}; - checkedFilterObj = {}; - for (let i = 0; i < classificationTypeArray.length; i++) - { - [groupId, classificationGroupTitle, typeId, classificationTypeScoreType, classificationTypeScorePoints, classificationTypeFilter] = classificationTypeArray[i]; - - if(!helperObject.hasOwnProperty(groupId)) //classificationGroup - { - classificationTypeObj[groupId] = {}; - classificationGroups.push(groupId); - helperObject[groupId] = ""; - } - if(!helperObject.hasOwnProperty(typeId)) //classificationType - { - if(_isRelevant()) - { - classificationTypeObj[groupId][typeId] = { "classificationGroupTitle": classificationGroupTitle - ,"classificationTypeScoreType": classificationTypeScoreType - ,"classificationTypeMaxPoints": Math.round(classificationTypeScorePoints*maxScoresObj[typeId] * 100) / 100}; - if(bestPossibleValuesObj[groupId] == undefined) - bestPossibleValuesObj[groupId] = 0; - bestPossibleValuesObj[groupId] = eMath.addDec(bestPossibleValuesObj[groupId], classificationTypeScorePoints) - } - helperObject[typeId] = ""; - } - } - - var columns = ["CLASSIFICATION.CLASSIFICATIONID" - , "CLASSIFICATION.VALUE" - , "CLASSIFICATION.CLASSIFICATIONTYPE_ID" - , "CLASSIFICATION.OBJECT_TYPE" - , "CLASSIFICATION.OBJECT_ROWID" - , "CLASSIFICATION.SCOREPOINTS" - ]; - - - //we loop trough all the relevant classificationtypes and insert classification datasets for every one of them. - //here we can easily build resultSet since we are already looping trough all the classificationTypes, so why not do it? - for (groupId in classificationTypeObj) - { - for (var typeId in classificationTypeObj[groupId]) - { - classificationId = util.getNewUUID(); - var values = [classificationId - , " " - , typeId - , objectTypeParam - , objectRowIdParam - , "0" - ]; - - db.insertData("CLASSIFICATION", columns, null, values);//insert into CLASSIFICATION for every relevant classificationtype - - //build resultSet: - uid = _UidEncoder.encode(typeId, objectRowIdParam, objectTypeParam); - resultSet.push([uid, typeId, classificationId, groupId, translate.text(classificationTypeObj[groupId][typeId]["classificationGroupTitle"]), - translate.text(classificationTypeObj[groupId][typeId]["classificationTypeScoreType"]), - "0", "", "", classificationTypeObj[groupId][typeId]["classificationTypeMaxPoints"]+" "+translate.text("Points")]); - } - } - } - - // get displayvalues, and build the infoString using gradingObj (this is relevant for every way of loading data) - - gradingTables = newSelect("CLASSIFICATIONGRADING.CLASSIFICATIONGROUP_ID, CLASSIFICATIONGRADING.MINPERCENT, CLASSIFICATIONGRADING.GRADING") - .from("CLASSIFICATIONGRADING") - .where("CLASSIFICATIONGRADING.CLASSIFICATIONGROUP_ID", classificationGroups, SqlBuilder.IN()) - .orderBy("CLASSIFICATIONGRADING.CLASSIFICATIONGROUP_ID, MINPERCENT asc") - .table(); - - for (i = 0; i < gradingTables.length; i++) - { - [groupId, minPercent, grading] = gradingTables[i]; - - if(gradingObject[groupId] == undefined) - gradingObject[groupId] = []; - - gradingObject[groupId].push([minPercent, grading]); - } - - for (i = 0; i < classificationGroups.length; i++) - { - var classificatioGroupId = classificationGroups[i]; - if(achievedGroupScoresObj[classificatioGroupId] == undefined) - achievedGroupScoresObj[classificatioGroupId] = 0; - - achievedGroupGradingsObj[classificatioGroupId] = ClassificationUtils.getGradingFromObject(gradingObject, classificatioGroupId, - achievedGroupScoresObj[classificatioGroupId], bestPossibleValuesObj[classificatioGroupId]); - } - - - for (i = 0; i < resultSet.length; i++) { - groupId = resultSet[i][3]; - - //display value is the same for every groupId, so let's cache it that we do not need to load it in every row => better performance - if (classificationTypeGroupDisplayCache[groupId] == undefined) - { - classificationTypeGroupDisplayCache[groupId] = ClassificationUtils.formatDisplaySummaryForGroup(achievedGroupScoresObj[groupId] - ,bestPossibleValuesObj[groupId], groupId, resultSet[i][4], achievedGroupGradingsObj[groupId]); - } - resultSet[i][4] = classificationTypeGroupDisplayCache[groupId]; - resultSet[i][9] = ""; - resultSet[i][10] = ""; - } - - -} -var newStorageString = ""; -var oldStorageString = newSelect("CLASSIFICATIONSTORAGE.CLASSIFICATIONVALUE") - .from("CLASSIFICATIONSTORAGE") - .where("CLASSIFICATIONSTORAGE.OBJECT_TYPE", objectTypeParam) - .and("CLASSIFICATIONSTORAGE.OBJECT_ROWID", objectRowIdParam) - .cell(); - -for(var groupid in classificationTypeGroupDisplayCache) -{ - newStorageString += classificationTypeGroupDisplayCache[groupid].slice(classificationTypeGroupDisplayCache[groupid].length-1) -} - -var update; -if(newStorageString != oldStorageString && !decodedId)//update the old string if the new one differs -{ - update = newWhere("CLASSIFICATIONSTORAGE.OBJECT_TYPE", objectTypeParam) - .and("CLASSIFICATIONSTORAGE.OBJECT_ROWID", objectRowIdParam) - .updateData(true, "CLASSIFICATIONSTORAGE", ["CLASSIFICATIONVALUE"], null, [newStorageString]);//don't set the OUTDATED flag to false since even our new value could be outdated! - - if(update == 0)//update wasnt succesfull -> the storage dataset doesnt exist yet -> insert - { - db.insertData("CLASSIFICATIONSTORAGE", ["CLASSIFICATIONSTORAGEID", "CLASSIFICATIONVALUE", "OBJECT_ROWID", "OBJECT_TYPE", "OUTDATED"], null, - [util.getNewUUID(), newStorageString, objectRowIdParam, objectTypeParam, 0]) - } -} -else if(decodedId)//different way of handling when data is selected since we can only check for the grading of the group of the current classificationtype -{ - var orderedGroups = newSelect("distinct CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID, CLASSIFICATIONGROUP.SORTING") - .from("CLASSIFICATION") - .join("CLASSIFICATIONTYPE", "CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID = CLASSIFICATION.CLASSIFICATIONTYPE_ID") - .join("CLASSIFICATIONGROUP", "CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID = CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID") - .where("CLASSIFICATION.OBJECT_ROWID", objectRowIdParam) - .orderBy("CLASSIFICATIONGROUP.SORTING") - .table(); - //get the of our grading in the string - var position = 0; - for (i = 0; i < orderedGroups.length; i++) { - if(orderedGroups[i][0] == groupId) - { - position = i; - break; - } - } - newStorageString = displayString.slice(displayString.length-1); //slice current grading from the displaystring - if(newStorageString != oldStorageString.slice(position, position+1)) // our letter/char/whatever differs from the one at the correct position of the storred string - { - newStorageString = StringUtils.replaceAt(oldStorageString, position, newStorageString) - update = newWhere("CLASSIFICATIONSTORAGE.OBJECT_TYPE", objectTypeParam) - .and("CLASSIFICATIONSTORAGE.OBJECT_ROWID", objectRowIdParam) - .updateData(true, "CLASSIFICATIONSTORAGE", ["CLASSIFICATIONVALUE"], null, [newStorageString]);//don't set the OUTDATED flag to false since even our new value could be outdated! - - if(update == 0)//update wasnt succesfull -> the storage dataset doesnt exist yet -> insert - { - db.insertData("CLASSIFICATIONSTORAGE", ["CLASSIFICATIONSTORAGEID", "CLASSIFICATIONVALUE", "OBJECT_ROWID", "OBJECT_TYPE", "OUTDATED"], null, - [util.getNewUUID(), newStorageString, objectRowIdParam, objectTypeParam, 0]) - } - } -} - -result.object(resultSet); - -/** - * Checks whether or not the classification is relevant for the current dataset - */ -function _isRelevant() +var contentParam = vars.get("$param.ClassificationContent_param"); +if(contentParam) { - var cond = ((classificationTypeFilter == "" || classificationTypeFilter == undefined || classificationTypeFilter == null) - && checkedFilterObj[classificationTypeFilter] == undefined) - || (checkedFilterObj[classificationTypeFilter] != undefined && checkedFilterObj[classificationTypeFilter] != false); - if(!cond)// return true if we don't have an filter set or already checked the filter and it's true - { - if(checkedFilterObj[classificationTypeFilter] != false) - { - var selectRelevance, loadConfig, row, filterFields, filterableRow, value, filteredRecs; - var res = false; - var entityField = true; - - parsedFilter = JSON.parse(classificationTypeFilter).filter; - - if(parsedFilter["childs"]["0"] != undefined) // ignore empty filters - { - //no "." in the name means its a field of the entity itself: use entities.getRow and JditoFilterUtils.filterRecords - //to check whether or not the Filter excludes this row - //else: currently a count is made whith the filtercondition as the where clause --> poor performance - if(parsedFilter["childs"]["0"]["name"].includes(".")) - { - entityField = false - parsedFilter = JSON.stringify(parsedFilter); - } - - if(objectTypeParam == "Organisation") - { - if(entityField == true) - { - filterFields = ["CUSTOMERCODE", "INFO", "LANGUAGE", "NAME", "STANDARD_CITY", "STANDARD_EMAIL_COMMUNICATION", "STANDARD_PHONE_COMMUNICATION", "STATUS", "TYPE"]; - } - else - { - selectRelevance = newSelect("count(*)") - .from("ORGANISATION") - .join("CONTACT", "ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID and CONTACT.PERSON_ID is null") - .leftJoin("ADDRESS", "ADDRESS.ADDRESSID = CONTACT.ADDRESS_ID") - .leftJoin("CLASSIFICATIONSTORAGE", "CLASSIFICATIONSTORAGE.OBJECT_ROWID = CONTACT.CONTACTID") - .where(db.toFilterCondition(parsedFilter, "Organisation_entity")) - .and("ORGANISATION.ORGANISATIONID", OrgUtils.getPrivateOrganisationId(), SqlBuilder.NOT_EQUAL()) - .and("CONTACT.CONTACTID", objectRowIdParam) - } - } - else if(objectTypeParam == "Salesproject") - { - if(entityField == true) - { - filterFields = ["CONTACT_ID", "ENDDATE", "INFO", "PHASE", "PROBABILITY", "PROJECTCODE", "PROJECTTITLE", "REASONS", "STARTDATE", "STATUS", "VOLUME"]; - } - else - { - selectRelevance = newSelect("count(*)") - .from("Salesproject") - .leftJoin("CONTACT", "SALESPROJECT.CONTACT_ID = CONTACT.CONTACTID") - .leftJoin("ORGANISATION", "CONTACT.ORGANISATION_ID = ORGANISATION.ORGANISATIONID") - .leftJoin("CLASSIFICATIONSTORAGE", "CLASSIFICATIONSTORAGE.OBJECT_ROWID = SALESPROJECT.SAALESPROJECTID") - .where(db.toFilterCondition(parsedFilter, "Salesproject_entity")) - .and("SALESPROJECT.SALESPROJECTID", objectRowIdParam) - } - } - else - { - throw new Error("Classification_entity.jdito.contentProcess: objectType doesn't exist or is not implemented correctly, contact an administrator."); - } - - //if its a field of the entity itself: use entities.getRow and JditoFilterUtils.filterRecords to check whether or not the Filter excludes this row - if(entityField == true) - { - if(filterableRow == undefined)//filterableRow has only have to be done once per objectType -> cache for better performance - { - loadConfig = entities.createConfigForLoadingRows() - .entity(ContextUtils.getEntity(objectTypeParam)) - .uid(objectRowIdParam) - .fields(filterFields) - - row = entities.getRow(loadConfig) - - filterableRow = filterFields.map(function (field){ - value = null; - if (field in row) - value = row[field]; - return value; - }); - } - //filter gets used after using entities.getRow and not in the loadconfig, since we can have multiple filters - //and don't want to do entities.getRow for every single one - filteredRecs = JditoFilterUtils.filterRecords(filterFields, [filterableRow], parsedFilter); - if(filteredRecs.length > 0) - res = true; - } - //else: currently a count is made whith the filtercondition as the where clause --> poor performance - else - { - selectRelevance = selectRelevance.cell(); - - if(selectRelevance > 0) - res = true; - } - } - if(res == true) - { - checkedFilterObj[classificationTypeFilter] = true; - } - else - { - checkedFilterObj[classificationTypeFilter] = false; - res = false; - } - } - } - else - res = true; - - return res; -} - -/** - * Builds the Array using stored classification datasets; - * returns true after pushing into resultSet and false if there are no persistent datasets for the current object - */ -function _buildTreeFromPersistetData() -{ - var treeBuilt = false; - var maxPercents = newSelect("CLASSIFICATIONSCORE.CLASSIFICATIONTYPE_ID, max(CLASSIFICATIONSCORE.SCOREPERCENT)/100") - .from("CLASSIFICATIONSCORE") - .join("CLASSIFICATIONTYPE", "CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID = CLASSIFICATIONSCORE.CLASSIFICATIONTYPE_ID") - .where("CLASSIFICATIONTYPE.OBJECT_TYPE", objectTypeParam) - .groupBy("CLASSIFICATIONTYPE_ID") - .table(); - - - //this is the main select for the data - select = newSelect("CLASSIFICATION.CLASSIFICATIONTYPE_ID, CLASSIFICATION.CLASSIFICATIONID, CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID, \n\ - CLASSIFICATIONGROUP.TITLE, CLASSIFICATIONTYPE.SCORETYPE, CLASSIFICATION.SCOREPOINTS, CLASSIFICATION.VALUE, \n\ - CLASSIFICATIONSCORE.TITLE, CLASSIFICATIONTYPE.SCOREPOINTS") - .from("CLASSIFICATIONTYPE") - .leftJoin("CLASSIFICATION", "CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID = CLASSIFICATION.CLASSIFICATIONTYPE_ID") - .leftJoin("CLASSIFICATIONGROUP", "CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID = CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID") - .leftJoin("CLASSIFICATIONSCORE", "CLASSIFICATIONSCORE.CLASSIFICATIONSCOREID = CLASSIFICATION.VALUE") - .where("CLASSIFICATION.OBJECT_TYPE", objectTypeParam) - .and("CLASSIFICATION.OBJECT_ROWID", objectRowIdParam) - .orderBy("CLASSIFICATIONGROUP.SORTING, CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID") - - - - /* After loading the data from the database some preparation for the record container is done like translating display values into the - * correct locale or calculating some values - */ - //declaration needs to be separated because if declaration is done in the deconstructioning the IDE (designer) autocomplete does not work anymore - var typeId, classificationId, groupId, classificationGroupTitle, classificationTypeScoreType - , classificationScorePoints, classificationValue, valueDisplayValue, uid, classificationTypeScorePoints, maxValue; - select.table().forEach(function (pRow){ - //deconstructioning for easy access when the selected data changes - [typeId, classificationId, groupId, classificationGroupTitle, classificationTypeScoreType, - classificationScorePoints, classificationValue, valueDisplayValue, classificationTypeScorePoints] = pRow; - - uid = _UidEncoder.encode(typeId, objectRowIdParam, objectTypeParam); - - if(translatedClassificationTypesObj[typeId] == undefined) - { - translatedClassificationTypesObj[typeId] = translate.text(classificationTypeScoreType) - } - classificationTypeScoreType = translatedClassificationTypesObj[typeId]; - - if (valueDisplayValue) - valueDisplayValue = translate.text(valueDisplayValue); - if (classificationGroupTitle) - classificationGroupTitle = translate.text(classificationGroupTitle); - - for (i = 0; i < maxPercents.length; i++) { - if(typeId == maxPercents[i][0]) - { - maxValue = classificationTypeScorePoints*maxPercents[i][1]; - break; - } - } - if(bestPossibleValuesObj[groupId] == undefined) - bestPossibleValuesObj[groupId] = 0; - bestPossibleValuesObj[groupId] = eMath.addDec(bestPossibleValuesObj[groupId], maxValue) - - if(achievedGroupScoresObj[groupId] == undefined) - { - achievedGroupScoresObj[groupId] = 0 - classificationGroups.push(groupId) - } - if(classificationScorePoints != undefined || classificationScorePoints != "") - achievedGroupScoresObj[groupId] = eMath.addDec(Number(achievedGroupScoresObj[groupId]), Number(classificationScorePoints)); - - treeBuilt = true; - resultSet.push([uid, typeId, classificationId, groupId, classificationGroupTitle, classificationTypeScoreType, - classificationScorePoints, classificationValue, valueDisplayValue, maxValue]); - }); - return treeBuilt; -} - -/** - * selects maxScoresArray and builds maxScoresObj (maxScoresObj[classificationTypeId] = maxScorePercent) - */ -function _buildMaxScore() -{ - var maxScoresArray = newSelect("max(CLASSIFICATIONSCORE.SCOREPERCENT)/100, CLASSIFICATIONSCORE.CLASSIFICATIONTYPE_ID") - .from("CLASSIFICATIONSCORE") - .join("CLASSIFICATIONTYPE", "CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID = CLASSIFICATIONSCORE.CLASSIFICATIONTYPE_ID") - .where("CLASSIFICATIONTYPE.OBJECT_TYPE", objectTypeParam) - .groupBy("CLASSIFICATIONSCORE.CLASSIFICATIONTYPE_ID") - .table(); - - for (i = 0; i < maxScoresArray.length; i++) - { - maxScoresObj[maxScoresArray[i][1]] = maxScoresArray[i][0]; //build maxScoresObj using maxScoresArray (easier acces later) - } + result.object(JSON.parse(contentParam)); } \ No newline at end of file diff --git a/entity/Classification_entity/recordcontainers/jdito/onUpdate.js b/entity/Classification_entity/recordcontainers/jdito/onUpdate.js deleted file mode 100644 index cae77afa19642fa2f242928af66a796cb1141be7..0000000000000000000000000000000000000000 --- a/entity/Classification_entity/recordcontainers/jdito/onUpdate.js +++ /dev/null @@ -1,11 +0,0 @@ -import("Sql_lib"); -import("system.vars"); - -var changed = vars.get("$local.changed"); -if(changed) -{ - newWhere("CLASSIFICATION.CLASSIFICATIONID", "$field.CLASSIFICATIONID") - .updateFields({"VALUE" : vars.get("$field.VALUE") - ,"SCOREPOINTS" : vars.get("$field.Info.displayValue").slice(0, vars.get("$field.Info.displayValue").indexOf("/")) - }); -} \ No newline at end of file diff --git a/entity/CommRestriction_Entity/CommRestriction_Entity.aod b/entity/CommRestriction_Entity/CommRestriction_Entity.aod index b1604aa94b0cfb68fd202ff113e3586b76268cfa..d7cc3907cb56979a3e108b0b136c292a37d4c3ef 100644 --- a/entity/CommRestriction_Entity/CommRestriction_Entity.aod +++ b/entity/CommRestriction_Entity/CommRestriction_Entity.aod @@ -1,11 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>CommRestriction_Entity</name> <title>Advertising ban</title> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/CommRestriction_Entity/documentation.adoc</documentation> <contentTitleProcess>%aditoprj%/entity/CommRestriction_Entity/contentTitleProcess.js</contentTitleProcess> - <contentTitleProcess>%aditoprj%/entity/CommRestriction_Entity/contentTitleProcess.js</contentTitleProcess> <titlePlural>Advertising bans</titlePlural> <recordContainer>db</recordContainer> <entityFields> @@ -77,20 +76,6 @@ <entityProvider> <name>CommRestrictions</name> <documentation>%aditoprj%/entity/CommRestriction_Entity/entityfields/commrestrictions/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>b50e33cd-e20f-4bdf-b0ee-2ecdab921ffd</name> - <entityName>Person_entity</entityName> - <fieldName>CommRestrictions</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>1108f15c-75e3-49a8-b1cd-03259bfbb8a0</name> - <entityName>Organisation_entity</entityName> - <fieldName>CommRestrictions</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityParameter> <name>ContactId_param</name> diff --git a/entity/CommunicationChannel_entity/CommunicationChannel_entity.aod b/entity/CommunicationChannel_entity/CommunicationChannel_entity.aod new file mode 100644 index 0000000000000000000000000000000000000000..76d1239d442f3e976babdcdab7e70d1d9e6a4bf8 --- /dev/null +++ b/entity/CommunicationChannel_entity/CommunicationChannel_entity.aod @@ -0,0 +1,63 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> + <name>CommunicationChannel_entity</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + </entityProvider> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityParameter> + <name>ContactId_param</name> + <expose v="true" /> + </entityParameter> + <entityConsumer> + <name>Addresses</name> + <dependency> + <name>dependency</name> + <entityName>Address_entity</entityName> + <fieldName>ContactAddresses</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContactId_param</name> + <valueProcess>%aditoprj%/entity/CommunicationChannel_entity/entityfields/addresses/children/contactid_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityConsumer> + <name>Communications</name> + <dependency> + <name>dependency</name> + <entityName>Communication_entity</entityName> + <fieldName>AllCommunications</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContactId_param</name> + <valueProcess>%aditoprj%/entity/CommunicationChannel_entity/entityfields/communications/children/contactid_param/valueProcess.js</valueProcess> + </entityParameter> + <entityParameter> + <name>CommCategory_param</name> + <valueProcess>%aditoprj%/entity/CommunicationChannel_entity/entityfields/communications/children/commcategory_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityProvider> + <name>ContactCommunicationChannels</name> + <targetConsumerProcess>%aditoprj%/entity/CommunicationChannel_entity/entityfields/contactcommunicationchannels/targetConsumerProcess.js</targetConsumerProcess> + </entityProvider> + <entityParameter> + <name>CommunicationChannelType_param</name> + <expose v="true" /> + <mandatory v="true" /> + </entityParameter> + <entityParameter> + <name>CommunicationCategory_param</name> + <expose v="true" /> + </entityParameter> + </entityFields> +</entity> diff --git a/entity/CommunicationChannel_entity/entityfields/addresses/children/contactid_param/valueProcess.js b/entity/CommunicationChannel_entity/entityfields/addresses/children/contactid_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..2f392d5c2e143090012fa5b4cc765d8e5ba278ac --- /dev/null +++ b/entity/CommunicationChannel_entity/entityfields/addresses/children/contactid_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("system.result"); + +result.string(vars.get("$param.ContactId_param")); \ No newline at end of file diff --git a/entity/CommunicationChannel_entity/entityfields/communications/children/commcategory_param/valueProcess.js b/entity/CommunicationChannel_entity/entityfields/communications/children/commcategory_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..f113cc9898867b3769345d93eb25eaf25e89ee31 --- /dev/null +++ b/entity/CommunicationChannel_entity/entityfields/communications/children/commcategory_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.result"); +import("system.vars"); + +result.string(vars.get("$param.CommunicationCategory_param")); \ No newline at end of file diff --git a/entity/CommunicationChannel_entity/entityfields/communications/children/contactid_param/valueProcess.js b/entity/CommunicationChannel_entity/entityfields/communications/children/contactid_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..2f392d5c2e143090012fa5b4cc765d8e5ba278ac --- /dev/null +++ b/entity/CommunicationChannel_entity/entityfields/communications/children/contactid_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("system.result"); + +result.string(vars.get("$param.ContactId_param")); \ No newline at end of file diff --git a/entity/CommunicationChannel_entity/entityfields/contactcommunicationchannels/targetConsumerProcess.js b/entity/CommunicationChannel_entity/entityfields/contactcommunicationchannels/targetConsumerProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..87fa13898fe7efe1acb5adc1ad3c941c2b6a4bc3 --- /dev/null +++ b/entity/CommunicationChannel_entity/entityfields/contactcommunicationchannels/targetConsumerProcess.js @@ -0,0 +1,12 @@ +import("system.result"); +import("system.vars"); +import("KeywordRegistry_basic"); + +var channelType = vars.get("$param.CommunicationChannelType_param"); +var consumer = "Communications"; //fallback +if (channelType == $KeywordRegistry.communicationChannelType$communication()) + consumer = "Communications"; +else if (channelType == $KeywordRegistry.communicationChannelType$address()) + consumer = "Addresses"; + +result.string(consumer); \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod b/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod new file mode 100644 index 0000000000000000000000000000000000000000..42abe2d2685789827ba185dff396aeced522da14 --- /dev/null +++ b/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod @@ -0,0 +1,329 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> + <name>CommunicationSettings_entity</name> + <title>Communication Settings</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <contentTitleProcess>%aditoprj%/entity/CommunicationSettings_entity/contentTitleProcess.js</contentTitleProcess> + <onValidation>%aditoprj%/entity/CommunicationSettings_entity/onValidation.js</onValidation> + <iconIdProcess>%aditoprj%/entity/CommunicationSettings_entity/iconIdProcess.js</iconIdProcess> + <titlePlural>Communication Settings</titlePlural> + <recordContainer>db</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + </entityProvider> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityProvider> + <name>SettingsForContact</name> + </entityProvider> + <entityField> + <name>COMMUNICATIONSETTINGSID</name> + </entityField> + <entityField> + <name>USER_NEW</name> + <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/user_new/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>USER_EDIT</name> + <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/user_edit/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>DATE_NEW</name> + <title>Created on</title> + <contentType>DATE</contentType> + <state>READONLY</state> + <stateProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/date_new/stateProcess.js</stateProcess> + <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/date_new/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>DATE_EDIT</name> + <title>Last change</title> + <contentType>DATE</contentType> + <state>READONLY</state> + <stateProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/date_edit/stateProcess.js</stateProcess> + <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/date_edit/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>CONTACT_ID</name> + <title>Contact</title> + <mandatory v="true" /> + <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/contact_id/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>STATUS</name> + <title>Status</title> + <consumer>StatusKeyword</consumer> + <groupable v="true" /> + <mandatory v="true" /> + <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/status/valueProcess.js</valueProcess> + <displayValueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/status/displayValueProcess.js</displayValueProcess> + </entityField> + <entityField> + <name>MEDIUM</name> + <title>Medium</title> + <consumer>MediumKeyword</consumer> + <groupable v="true" /> + <stateProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/medium/stateProcess.js</stateProcess> + <displayValueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/medium/displayValueProcess.js</displayValueProcess> + <onValueChange>%aditoprj%/entity/CommunicationSettings_entity/entityfields/medium/onValueChange.js</onValueChange> + <onValueChangeTypes> + <element>MASK</element> + </onValueChangeTypes> + </entityField> + <entityField> + <name>CHANNEL_TYPE</name> + <title>Channel type</title> + <consumer>ChannelTypeKeyword</consumer> + <groupable v="true" /> + <mandatory v="true" /> + <onValueChange>%aditoprj%/entity/CommunicationSettings_entity/entityfields/channel_type/onValueChange.js</onValueChange> + <onValueChangeTypes> + <element>MASK</element> + </onValueChangeTypes> + </entityField> + <entityField> + <name>CHANNEL_ID</name> + <title>Channel</title> + <consumer>CommunicationChannels</consumer> + <stateProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/channel_id/stateProcess.js</stateProcess> + <titleProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/channel_id/titleProcess.js</titleProcess> + <displayValueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/channel_id/displayValueProcess.js</displayValueProcess> + </entityField> + <entityConsumer> + <name>StatusKeyword</name> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityParameter> + <name>ContactId_param</name> + <expose v="true" /> + <mandatory v="true" /> + </entityParameter> + <entityConsumer> + <name>ChannelTypeKeyword</name> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/channeltypekeyword/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityConsumer> + <name>MediumKeyword</name> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/mediumkeyword/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + <entityParameter> + <name>BlacklistIds_param</name> + <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/mediumkeyword/children/blacklistids_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityConsumer> + <name>CommunicationChannels</name> + <dependency> + <name>dependency</name> + <entityName>CommunicationChannel_entity</entityName> + <fieldName>ContactCommunicationChannels</fieldName> + </dependency> + <children> + <entityParameter> + <name>CommunicationChannelType_param</name> + <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/communicationchannels/children/communicationchanneltype_param/valueProcess.js</valueProcess> + </entityParameter> + <entityParameter> + <name>ContactId_param</name> + <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/communicationchannels/children/contactid_param/valueProcess.js</valueProcess> + </entityParameter> + <entityParameter> + <name>CommunicationCategory_param</name> + <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/communicationchannels/children/communicationcategory_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityField> + <name>ICON</name> + <contentType>IMAGE</contentType> + <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/icon/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>COMMUNICATIONLEGALBASEID</name> + </entityField> + <entityField> + <name>INFO</name> + <title>Info</title> + <contentType>LONG_TEXT</contentType> + </entityField> + <entityField> + <name>COMMUNICATIONSETTINGS_ID</name> + <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/communicationsettings_id/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>DATE_NEW_LEGALBASE</name> + <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/date_new_legalbase/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>USER_NEW_LEGALBASE</name> + <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/user_new_legalbase/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>USER_EDIT_LEGALBASE</name> + <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/user_edit_legalbase/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>DATE_EDIT_LEGALBASE</name> + <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/date_edit_legalbase/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>VERSION</name> + <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/version/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>overrideInfo</name> + <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/overrideinfo/valueProcess.js</valueProcess> + </entityField> + </entityFields> + <recordContainers> + <dbRecordContainer> + <name>db</name> + <fromClauseProcess>%aditoprj%/entity/CommunicationSettings_entity/recordcontainers/db/fromClauseProcess.js</fromClauseProcess> + <conditionProcess>%aditoprj%/entity/CommunicationSettings_entity/recordcontainers/db/conditionProcess.js</conditionProcess> + <orderClauseProcess>%aditoprj%/entity/CommunicationSettings_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess> + <alias>Data_alias</alias> + <recordFieldMappings> + <dbRecordFieldMapping> + <name>CHANNEL_ID.value</name> + <recordfield>COMMUNICATIONSETTINGS.CHANNEL_ID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>CHANNEL_TYPE.value</name> + <recordfield>COMMUNICATIONSETTINGS.CHANNEL_TYPE</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>COMMUNICATIONSETTINGSID.value</name> + <recordfield>COMMUNICATIONSETTINGS.COMMUNICATIONSETTINGSID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>CONTACT_ID.value</name> + <recordfield>COMMUNICATIONSETTINGS.CONTACT_ID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>MEDIUM.value</name> + <recordfield>COMMUNICATIONSETTINGS.MEDIUM</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>STATUS.value</name> + <recordfield>COMMUNICATIONSETTINGS.STATUS</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>CHANNEL_TYPE.displayValue</name> + <expression>%aditoprj%/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/channel_type.displayvalue/expression.js</expression> + <columnAlias>channelTypeName</columnAlias> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>MEDIUM.displayValue</name> + <expression>%aditoprj%/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/medium.displayvalue/expression.js</expression> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>STATUS.displayValue</name> + <expression>%aditoprj%/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js</expression> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>CHANNEL_ID.displayValue</name> + <expression>%aditoprj%/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/channel_id.displayvalue/expression.js</expression> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>INFO.value</name> + <recordfield>COMMUNICATIONLEGALBASE.INFO</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DATE_EDIT.value</name> + <recordfield>COMMUNICATIONSETTINGS.DATE_EDIT</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DATE_NEW.value</name> + <recordfield>COMMUNICATIONSETTINGS.DATE_NEW</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>USER_EDIT.value</name> + <recordfield>COMMUNICATIONSETTINGS.USER_EDIT</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>USER_NEW.value</name> + <recordfield>COMMUNICATIONSETTINGS.USER_NEW</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>COMMUNICATIONLEGALBASEID.value</name> + <recordfield>COMMUNICATIONLEGALBASE.COMMUNICATIONLEGALBASEID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>COMMUNICATIONSETTINGS_ID.value</name> + <recordfield>COMMUNICATIONLEGALBASE.COMMUNICATIONSETTINGS_ID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DATE_EDIT_LEGALBASE.value</name> + <recordfield>COMMUNICATIONLEGALBASE.DATE_EDIT</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DATE_NEW_LEGALBASE.value</name> + <recordfield>COMMUNICATIONLEGALBASE.DATE_NEW</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>USER_EDIT_LEGALBASE.value</name> + <recordfield>COMMUNICATIONLEGALBASE.USER_EDIT</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>USER_NEW_LEGALBASE.value</name> + <recordfield>COMMUNICATIONLEGALBASE.USER_NEW</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>VERSION.value</name> + <recordfield>COMMUNICATIONLEGALBASE.VERSION</recordfield> + </dbRecordFieldMapping> + </recordFieldMappings> + <linkInformation> + <linkInformation> + <name>c618d72c-9ae5-4f24-bfc7-92911df8ee67</name> + <tableName>COMMUNICATIONSETTINGS</tableName> + <primaryKey>COMMUNICATIONSETTINGSID</primaryKey> + <isUIDTable v="true" /> + <readonly v="false" /> + </linkInformation> + <linkInformation> + <name>ce7a5962-18b9-4840-9c64-3b05a111a4b0</name> + <tableName>COMMUNICATIONLEGALBASE</tableName> + <primaryKey>COMMUNICATIONLEGALBASEID</primaryKey> + <isUIDTable v="false" /> + <readonly v="false" /> + </linkInformation> + </linkInformation> + </dbRecordContainer> + </recordContainers> +</entity> diff --git a/entity/CommunicationSettings_entity/contentTitleProcess.js b/entity/CommunicationSettings_entity/contentTitleProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..8d8c4734469b997363f4f33fa17b92701bfca98a --- /dev/null +++ b/entity/CommunicationSettings_entity/contentTitleProcess.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("system.result"); + +result.string(vars.get("$field.MEDIUM.displayValue") || vars.get("$field.CHANNEL_TYPE.displayValue")); \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/entityfields/channel_id/displayValueProcess.js b/entity/CommunicationSettings_entity/entityfields/channel_id/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..da04d27adcdef470f0549ab22050affb126be286 --- /dev/null +++ b/entity/CommunicationSettings_entity/entityfields/channel_id/displayValueProcess.js @@ -0,0 +1,17 @@ +import("PostalAddress_lib"); +import("system.vars"); +import("system.result"); +import("KeywordRegistry_basic"); +import("Sql_lib"); + +var channelType = vars.get("$field.CHANNEL_TYPE"); +var channel = vars.get("$field.CHANNEL_ID"); + +if (channelType == $KeywordRegistry.communicationChannelType$address()) +{ + result.string(AddressUtils.getFormattedOnlineAddressById(channel)); +} +else if (channelType == $KeywordRegistry.communicationChannelType$communication()) +{ + result.string(newSelect("ADDR").from("COMMUNICATION").where("COMMUNICATION.COMMUNICATIONID", channel).cell()); +} \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/entityfields/channel_id/stateProcess.js b/entity/CommunicationSettings_entity/entityfields/channel_id/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..9caec77e4d7a7a9fc66d0d97fb57ce87f0752279 --- /dev/null +++ b/entity/CommunicationSettings_entity/entityfields/channel_id/stateProcess.js @@ -0,0 +1,15 @@ +import("system.result"); +import("KeywordRegistry_basic"); +import("system.neon"); +import("system.vars"); + +if ((vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) + && vars.get("$field.CHANNEL_TYPE") != $KeywordRegistry.communicationChannelType$communication() + && vars.get("$field.CHANNEL_TYPE") != $KeywordRegistry.communicationChannelType$address()) +{ + result.string(neon.COMPONENTSTATE_INVISIBLE); +} +else +{ + result.string(neon.COMPONENTSTATE_EDITABLE); +} \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/entityfields/channel_id/titleProcess.js b/entity/CommunicationSettings_entity/entityfields/channel_id/titleProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..67d56550550b8196260ba8942cc2d377a6b6a3c6 --- /dev/null +++ b/entity/CommunicationSettings_entity/entityfields/channel_id/titleProcess.js @@ -0,0 +1,10 @@ +import("system.translate"); +import("KeywordRegistry_basic"); +import("system.result"); +import("system.vars"); + +var type = vars.get("$field.CHANNEL_TYPE"); +if (type == $KeywordRegistry.communicationChannelType$communication()) + result.string(translate.text("Communication")); +else if (type == $KeywordRegistry.communicationChannelType$address()) + result.string(translate.text("Address")); \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/entityfields/channel_type/onValueChange.js b/entity/CommunicationSettings_entity/entityfields/channel_type/onValueChange.js new file mode 100644 index 0000000000000000000000000000000000000000..a37d392eb37dd225820f7a7d6f3c9ea390dd2ebb --- /dev/null +++ b/entity/CommunicationSettings_entity/entityfields/channel_type/onValueChange.js @@ -0,0 +1,6 @@ +import("system.neon"); + +neon.setFieldValues({ + "$field.MEDIUM": "", + "$field.CHANNEL_ID": "" +}); \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/entityfields/channeltypekeyword/children/containername_param/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/channeltypekeyword/children/containername_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..353ea6f4bf85e804015624dbf0c96655491125f8 --- /dev/null +++ b/entity/CommunicationSettings_entity/entityfields/channeltypekeyword/children/containername_param/valueProcess.js @@ -0,0 +1,4 @@ +import("KeywordRegistry_basic"); +import("system.result"); + +result.string($KeywordRegistry.communicationChannelType()); \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/entityfields/communicationchannels/children/communicationcategory_param/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/communicationchannels/children/communicationcategory_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..92dc282c45a62faa071d7ccb0b88ca26570da90d --- /dev/null +++ b/entity/CommunicationSettings_entity/entityfields/communicationchannels/children/communicationcategory_param/valueProcess.js @@ -0,0 +1,12 @@ +import("system.vars"); +import("system.result"); +import("Keyword_lib") +import("KeywordRegistry_basic"); + +var medium = vars.get("$field.MEDIUM"); +if (medium) +{ + var categoryAttribute = new KeywordAttribute($KeywordRegistry.communicationMediumCampaign(), "category"); + var category = categoryAttribute.getValue(medium); + result.string(category); +} \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/entityfields/communicationchannels/children/communicationchanneltype_param/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/communicationchannels/children/communicationchanneltype_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..fc362f395eb7ce08a4386585b8c3276ac6d5a5dd --- /dev/null +++ b/entity/CommunicationSettings_entity/entityfields/communicationchannels/children/communicationchanneltype_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("system.result"); + +result.string(vars.get("$field.CHANNEL_TYPE")); \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/entityfields/communicationchannels/children/contactid_param/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/communicationchannels/children/contactid_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..ef0d5bcac51027b862291e5abd61c0c05773a8df --- /dev/null +++ b/entity/CommunicationSettings_entity/entityfields/communicationchannels/children/contactid_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("system.result"); + +result.string(vars.get("$field.CONTACT_ID")); \ No newline at end of file diff --git a/entity/Classification_entity/entityfields/classificationtypeid/stateProcess.js b/entity/CommunicationSettings_entity/entityfields/communicationsettings_id/valueProcess.js similarity index 56% rename from entity/Classification_entity/entityfields/classificationtypeid/stateProcess.js rename to entity/CommunicationSettings_entity/entityfields/communicationsettings_id/valueProcess.js index d2c0dd18db355cc71410e59b8fae386dc591254e..1b3c724dc990b3caf81399f58b86abf6c71cf1fe 100644 --- a/entity/Classification_entity/entityfields/classificationtypeid/stateProcess.js +++ b/entity/CommunicationSettings_entity/entityfields/communicationsettings_id/valueProcess.js @@ -3,6 +3,4 @@ import("system.neon"); import("system.vars"); if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) - result.string(neon.COMPONENTSTATE_EDITABLE); -else - result.string(neon.COMPONENTSTATE_READONLY); \ No newline at end of file + result.string(vars.get("$field.COMMUNICATIONSETTINGSID")); \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/entityfields/contact_id/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/contact_id/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..d877bfcaca49d927d93af76a0600ce037fe93bf8 --- /dev/null +++ b/entity/CommunicationSettings_entity/entityfields/contact_id/valueProcess.js @@ -0,0 +1,6 @@ +import("system.neon"); +import("system.vars"); +import("system.result"); + +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) + result.string(vars.get("$param.ContactId_param")); \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/entityfields/date_edit/stateProcess.js b/entity/CommunicationSettings_entity/entityfields/date_edit/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..44f9deec70be67bc123e9c3cfa7f499b9268489f --- /dev/null +++ b/entity/CommunicationSettings_entity/entityfields/date_edit/stateProcess.js @@ -0,0 +1,10 @@ +import("system.result"); +import("system.neon"); +import("system.vars"); + +var state = neon.COMPONENTSTATE_READONLY; +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) +{ + state = neon.COMPONENTSTATE_INVISIBLE; +} +result.string(state); \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/entityfields/date_edit/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/date_edit/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..2194ba21bc59d11cfba9d4f1b84375b73ec67525 --- /dev/null +++ b/entity/CommunicationSettings_entity/entityfields/date_edit/valueProcess.js @@ -0,0 +1,6 @@ +import("system.result"); +import("system.neon"); +import("system.vars"); + +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) + result.string(vars.get("$sys.date")); \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/entityfields/date_edit_legalbase/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/date_edit_legalbase/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..2194ba21bc59d11cfba9d4f1b84375b73ec67525 --- /dev/null +++ b/entity/CommunicationSettings_entity/entityfields/date_edit_legalbase/valueProcess.js @@ -0,0 +1,6 @@ +import("system.result"); +import("system.neon"); +import("system.vars"); + +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) + result.string(vars.get("$sys.date")); \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/entityfields/date_new/stateProcess.js b/entity/CommunicationSettings_entity/entityfields/date_new/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..44f9deec70be67bc123e9c3cfa7f499b9268489f --- /dev/null +++ b/entity/CommunicationSettings_entity/entityfields/date_new/stateProcess.js @@ -0,0 +1,10 @@ +import("system.result"); +import("system.neon"); +import("system.vars"); + +var state = neon.COMPONENTSTATE_READONLY; +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) +{ + state = neon.COMPONENTSTATE_INVISIBLE; +} +result.string(state); \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/entityfields/date_new/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/date_new/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..1dbb1c3887f7cdc3e41fc6ddd1bcb3c4032843c5 --- /dev/null +++ b/entity/CommunicationSettings_entity/entityfields/date_new/valueProcess.js @@ -0,0 +1,6 @@ +import("system.result"); +import("system.neon"); +import("system.vars"); + +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) + result.string(vars.get("$sys.date")); \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/entityfields/date_new_legalbase/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/date_new_legalbase/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..1dbb1c3887f7cdc3e41fc6ddd1bcb3c4032843c5 --- /dev/null +++ b/entity/CommunicationSettings_entity/entityfields/date_new_legalbase/valueProcess.js @@ -0,0 +1,6 @@ +import("system.result"); +import("system.neon"); +import("system.vars"); + +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) + result.string(vars.get("$sys.date")); \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/entityfields/icon/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/icon/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..4483d06c910b2a47246299abe962b7387d38d6e9 --- /dev/null +++ b/entity/CommunicationSettings_entity/entityfields/icon/valueProcess.js @@ -0,0 +1,13 @@ +import("system.result"); +import("system.vars"); +import("Keyword_lib"); +import("KeywordRegistry_basic"); + +var medium = vars.getString("$field.MEDIUM"); +var icon = ""; +if (medium) +{ + var keywordAttributes = KeywordUtils.getAttributeRelationsByKey(medium, $KeywordRegistry.communicationMediumCampaign()); + icon = keywordAttributes.AdvertisingBanIcon; +} +result.string(icon); diff --git a/entity/CommunicationSettings_entity/entityfields/medium/displayValueProcess.js b/entity/CommunicationSettings_entity/entityfields/medium/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..496cea3abe31f14d58f44eee73b6f870e43e206f --- /dev/null +++ b/entity/CommunicationSettings_entity/entityfields/medium/displayValueProcess.js @@ -0,0 +1,6 @@ +import("system.vars"); +import("KeywordRegistry_basic"); +import("system.result"); +import("Keyword_lib"); + +result.string(KeywordUtils.getViewValue($KeywordRegistry.communicationMediumCampaign(), vars.get("$field.MEDIUM"))); \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/entityfields/medium/onValueChange.js b/entity/CommunicationSettings_entity/entityfields/medium/onValueChange.js new file mode 100644 index 0000000000000000000000000000000000000000..c9d056e37f40741c4ad66405d2e11c328aaf1d5d --- /dev/null +++ b/entity/CommunicationSettings_entity/entityfields/medium/onValueChange.js @@ -0,0 +1,5 @@ +import("system.neon"); +import("system.vars"); + +if (vars.get("$local.value")) + neon.setFieldValue("$field.CHANNEL_ID", ""); \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/entityfields/medium/stateProcess.js b/entity/CommunicationSettings_entity/entityfields/medium/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..58b2b7867af34f2d3a13d59798bc14ad040a0854 --- /dev/null +++ b/entity/CommunicationSettings_entity/entityfields/medium/stateProcess.js @@ -0,0 +1,14 @@ +import("system.result"); +import("KeywordRegistry_basic"); +import("system.neon"); +import("system.vars"); + +if ((vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) + && vars.get("$field.CHANNEL_TYPE") != $KeywordRegistry.communicationChannelType$communication()) +{ + result.string(neon.COMPONENTSTATE_INVISIBLE); +} +else +{ + result.string(neon.COMPONENTSTATE_EDITABLE); +} \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/entityfields/mediumkeyword/children/blacklistids_param/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/mediumkeyword/children/blacklistids_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..283448c24cc389d3355b6057a8c75a21d8ecdd37 --- /dev/null +++ b/entity/CommunicationSettings_entity/entityfields/mediumkeyword/children/blacklistids_param/valueProcess.js @@ -0,0 +1,4 @@ +import("KeywordRegistry_basic"); +import("system.result"); + +result.string(JSON.stringify([$KeywordRegistry.communicationMediumCampaign$letter()])); \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/entityfields/mediumkeyword/children/containername_param/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/mediumkeyword/children/containername_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..a7553cb4bb5d328f447bc621fa071696d8418b6e --- /dev/null +++ b/entity/CommunicationSettings_entity/entityfields/mediumkeyword/children/containername_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.result"); +import("KeywordRegistry_basic"); + +result.string($KeywordRegistry.communicationMediumCampaign()); \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/entityfields/overrideinfo/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/overrideinfo/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..be189450db2f690b7f43814a0cf1537bfee929f8 --- /dev/null +++ b/entity/CommunicationSettings_entity/entityfields/overrideinfo/valueProcess.js @@ -0,0 +1,40 @@ +import("Keyword_lib"); +import("KeywordRegistry_basic"); +import("system.translate"); +import("system.result"); +import("system.vars"); +import("Sql_lib"); +import("MarketingCondition_lib"); + +var channelType = vars.get("$field.CHANNEL_TYPE"); +if (channelType == $KeywordRegistry.communicationChannelType$communication() || channelType == $KeywordRegistry.communicationChannelType$address()) +{ + var channelIdSql = "'" + vars.get("$field.CHANNEL_ID") + "'"; + + var superSettingCondition = new CommunicationSettingsCondition() + .contactId(vars.get("$field.CONTACT_ID")) + .rejected(); + + if (channelType == $KeywordRegistry.communicationChannelType$communication()) + { + superSettingCondition.medium(vars.get("$field.MEDIUM"), channelIdSql); + } + else if (channelType == $KeywordRegistry.communicationChannelType$address()) + { + superSettingCondition.address(channelIdSql); + } + + var [superSettingId, superSettingChannelType, superSettingMedium, superSettingStatus] = superSettingCondition + .buildSelect(["COMMUNICATIONSETTINGSID", "CHANNEL_TYPE", "MEDIUM", "STATUS"]) + .orderBy("CHANNEL_TYPE") + .arrayRow(); + + if (superSettingId && superSettingId != vars.get("$field.COMMUNICATIONSETTINGSID") && superSettingStatus != vars.get("$field.STATUS")) + { + var channelName = superSettingMedium + ? KeywordUtils.getViewValue($KeywordRegistry.communicationMediumCampaign(), superSettingMedium) + : KeywordUtils.getViewValue($KeywordRegistry.communicationChannelType(), superSettingChannelType); + var settingTitle = channelName + " - " + KeywordUtils.getViewValue($KeywordRegistry.communicationSettingStatus(), superSettingStatus); + result.string(translate.withArguments("This setting is overridden by the setting '%0'", [settingTitle])); + } +} \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/entityfields/status/displayValueProcess.js b/entity/CommunicationSettings_entity/entityfields/status/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..d3ac19b3e9138d5e98a5772ba56a104449011868 --- /dev/null +++ b/entity/CommunicationSettings_entity/entityfields/status/displayValueProcess.js @@ -0,0 +1,6 @@ +import("system.vars"); +import("KeywordRegistry_basic"); +import("system.result"); +import("Keyword_lib"); + +result.string(KeywordUtils.getViewValue($KeywordRegistry.communicationSettingStatus(), vars.get("$field.STATUS"))); \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/entityfields/status/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/status/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..bd4556b964af6e506db2dd34ff8419b542db23c9 --- /dev/null +++ b/entity/CommunicationSettings_entity/entityfields/status/valueProcess.js @@ -0,0 +1,7 @@ +import("KeywordRegistry_basic"); +import("system.neon"); +import("system.vars"); +import("system.result"); + +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) + result.string($KeywordRegistry.communicationSettingStatus$pending()); \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..6e9094784904aeb14e3231ab86844965215e4481 --- /dev/null +++ b/entity/CommunicationSettings_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.result"); +import("KeywordRegistry_basic"); + +result.string($KeywordRegistry.communicationSettingStatus()); \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/entityfields/user_edit/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/user_edit/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..47a3dbd1201377ecf0a93083e23b7706175c359f --- /dev/null +++ b/entity/CommunicationSettings_entity/entityfields/user_edit/valueProcess.js @@ -0,0 +1,6 @@ +import("system.result"); +import("system.neon"); +import("system.vars"); + +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) + result.string(vars.get("$sys.user")); \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/entityfields/user_edit_legalbase/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/user_edit_legalbase/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..47a3dbd1201377ecf0a93083e23b7706175c359f --- /dev/null +++ b/entity/CommunicationSettings_entity/entityfields/user_edit_legalbase/valueProcess.js @@ -0,0 +1,6 @@ +import("system.result"); +import("system.neon"); +import("system.vars"); + +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) + result.string(vars.get("$sys.user")); \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/entityfields/user_new/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/user_new/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..8d9eb72f007f3af16b698a9483ed117730ec3680 --- /dev/null +++ b/entity/CommunicationSettings_entity/entityfields/user_new/valueProcess.js @@ -0,0 +1,6 @@ +import("system.result"); +import("system.neon"); +import("system.vars"); + +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) + result.string(vars.get("$sys.user")); \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/entityfields/user_new_legalbase/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/user_new_legalbase/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..8d9eb72f007f3af16b698a9483ed117730ec3680 --- /dev/null +++ b/entity/CommunicationSettings_entity/entityfields/user_new_legalbase/valueProcess.js @@ -0,0 +1,6 @@ +import("system.result"); +import("system.neon"); +import("system.vars"); + +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) + result.string(vars.get("$sys.user")); \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/entityfields/version/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/version/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..fd82c76775cd61c184add5a2ad4ac153a00b16fe --- /dev/null +++ b/entity/CommunicationSettings_entity/entityfields/version/valueProcess.js @@ -0,0 +1,6 @@ +import("system.neon"); +import("system.vars"); +import("system.result"); + +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) + result.string("1"); \ No newline at end of file diff --git a/entity/Address_entity/entityfields/streetvalidation/children/city_param/valueProcess.js b/entity/CommunicationSettings_entity/iconIdProcess.js similarity index 55% rename from entity/Address_entity/entityfields/streetvalidation/children/city_param/valueProcess.js rename to entity/CommunicationSettings_entity/iconIdProcess.js index 74c070329cde0f8edeabd0e80677b4105b3e256e..f86b12ac2a9815380d0355d333a56acb87083bb0 100644 --- a/entity/Address_entity/entityfields/streetvalidation/children/city_param/valueProcess.js +++ b/entity/CommunicationSettings_entity/iconIdProcess.js @@ -1,4 +1,4 @@ import("system.vars"); import("system.result"); -result.string(vars.get("$field.CITY")) \ No newline at end of file +result.string(vars.get("$field.ICON")); \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/onValidation.js b/entity/CommunicationSettings_entity/onValidation.js new file mode 100644 index 0000000000000000000000000000000000000000..9641a12f5a4edec9e96b0f93da73cef3a1411947 --- /dev/null +++ b/entity/CommunicationSettings_entity/onValidation.js @@ -0,0 +1,38 @@ +import("system.translate"); +import("system.result"); +import("system.vars"); +import("Sql_lib"); + +var channelType = vars.get("$field.CHANNEL_TYPE"); +var medium = vars.get("$field.MEDIUM"); +var channelId = vars.get("$field.CHANNEL_ID"); + +var alreadyExistsQuery = new SqlBuilder() + .selectCount() + .from("COMMUNICATIONSETTINGS") + .where("COMMUNICATIONSETTINGS.CONTACT_ID", vars.get("$field.CONTACT_ID")) + .and("COMMUNICATIONSETTINGS.COMMUNICATIONSETTINGSID", vars.get("$field.COMMUNICATIONSETTINGSID"), SqlBuilder.NOT_EQUAL()) + .and("COMMUNICATIONSETTINGS.CHANNEL_TYPE", channelType); + +if (medium) +{ + alreadyExistsQuery.and("COMMUNICATIONSETTINGS.MEDIUM", medium); +} +else +{ + alreadyExistsQuery.and("COMMUNICATIONSETTINGS.MEDIUM is null"); +} + +if (channelId) +{ + alreadyExistsQuery.and("COMMUNICATIONSETTINGS.CHANNEL_ID", channelId); +} +else +{ + alreadyExistsQuery.and("COMMUNICATIONSETTINGS.CHANNEL_ID is null"); +} + +if (alreadyExistsQuery.cell() > 0) +{ + result.string(translate.text("A communication setting for this channel already exists!")); +} \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/recordcontainers/db/conditionProcess.js b/entity/CommunicationSettings_entity/recordcontainers/db/conditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..03ff6265427cd772e5b562a252ab1f7efaa6f62a --- /dev/null +++ b/entity/CommunicationSettings_entity/recordcontainers/db/conditionProcess.js @@ -0,0 +1,6 @@ +import("system.result"); +import("Sql_lib"); + +var condition = newWhereIfSet("COMMUNICATIONSETTINGS.CONTACT_ID", "$param.ContactId_param"); + +result.string(condition.toString()); \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/recordcontainers/db/fromClauseProcess.js b/entity/CommunicationSettings_entity/recordcontainers/db/fromClauseProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..d178b505c1a0cd0177f4253deac9784d7152eca2 --- /dev/null +++ b/entity/CommunicationSettings_entity/recordcontainers/db/fromClauseProcess.js @@ -0,0 +1,15 @@ +import("system.result"); +import("Sql_lib"); + +var from = new SqlBuilder() + .from("COMMUNICATIONSETTINGS") + .join("COMMUNICATIONLEGALBASE", new SqlBuilder() + .where("COMMUNICATIONSETTINGS.COMMUNICATIONSETTINGSID = COMMUNICATIONLEGALBASE.COMMUNICATIONSETTINGS_ID") + .and(null, new SqlBuilder() + .select("fresher.COMMUNICATIONLEGALBASEID") + .from("COMMUNICATIONLEGALBASE", "fresher") + .where("fresher.COMMUNICATIONSETTINGS_ID = COMMUNICATIONSETTINGS.COMMUNICATIONSETTINGSID") + .and("fresher.DATE_NEW > COMMUNICATIONLEGALBASE.DATE_NEW"), + SqlBuilder.NOT_EXISTS())); + +result.string(from.toString()); \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/recordcontainers/db/orderClauseProcess.js b/entity/CommunicationSettings_entity/recordcontainers/db/orderClauseProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..88d3371b95e19c0fa35060fe9cf63968b9494b8a --- /dev/null +++ b/entity/CommunicationSettings_entity/recordcontainers/db/orderClauseProcess.js @@ -0,0 +1,8 @@ +import("system.db"); +import("system.result"); + +result.object({ + "channelTypeName": db.ASCENDING, + "MEDIUM": db.ASCENDING, + "CHANNEL_ID": db.ASCENDING +}); \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/channel_id.displayvalue/expression.js b/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/channel_id.displayvalue/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..aff37a959f83f072af80884f84351b32c2c6103a --- /dev/null +++ b/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/channel_id.displayvalue/expression.js @@ -0,0 +1,18 @@ +import("system.result"); +import("KeywordRegistry_basic"); +import("Sql_lib"); +import("PostalAddress_lib"); + +var displayValueSql = SqlBuilder.caseStatement() + .when("COMMUNICATIONSETTINGS.CHANNEL_TYPE", $KeywordRegistry.communicationChannelType$address()) + .then(new SqlBuilder() + .select(AddressUtils.formatOnelineSql()) + .from("ADDRESS") + .where("ADDRESS.ADDRESSID = COMMUNICATIONSETTINGS.CHANNEL_ID")) + .when("COMMUNICATIONSETTINGS.CHANNEL_TYPE", $KeywordRegistry.communicationChannelType$communication()) + .then(new SqlBuilder() + .select("ADDR") + .from("COMMUNICATION") + .where("COMMUNICATIONID = COMMUNICATIONSETTINGS.CHANNEL_ID")); + +result.string(displayValueSql.toString()); \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/channel_type.displayvalue/expression.js b/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/channel_type.displayvalue/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..c2b7346dd81d0b28adc307f0d533740ae06d0fc9 --- /dev/null +++ b/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/channel_type.displayvalue/expression.js @@ -0,0 +1,5 @@ +import("KeywordRegistry_basic"); +import("system.result"); +import("Keyword_lib"); + +result.string(KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.communicationChannelType(), "COMMUNICATIONSETTINGS.CHANNEL_TYPE")); \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/medium.displayvalue/expression.js b/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/medium.displayvalue/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..531e372f98c68180b2883f8702140dbe8dac4c6e --- /dev/null +++ b/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/medium.displayvalue/expression.js @@ -0,0 +1,5 @@ +import("KeywordRegistry_basic"); +import("system.result"); +import("Keyword_lib"); + +result.string(KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.communicationMediumCampaign(), "COMMUNICATIONSETTINGS.MEDIUM")); \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js b/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..47b4114fc5c2961b0af902a8401d06551d9c3bd5 --- /dev/null +++ b/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js @@ -0,0 +1,5 @@ +import("KeywordRegistry_basic"); +import("system.result"); +import("Keyword_lib"); + +result.string(KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.communicationSettingStatus(), "COMMUNICATIONSETTINGS.STATUS")); \ No newline at end of file diff --git a/entity/Communication_entity/Communication_entity.aod b/entity/Communication_entity/Communication_entity.aod index 31f48ebaa3a51281176d95c6a40ea1c27f54c59d..237914cda02baf58e0aec615e1cbb426de7f8bfc 100644 --- a/entity/Communication_entity/Communication_entity.aod +++ b/entity/Communication_entity/Communication_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Communication_entity</name> <title>Communication</title> <description>former Comm</description> @@ -65,32 +65,6 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact <name>AllCommunications</name> <documentation>%aditoprj%/entity/Communication_entity/entityfields/allcommunications/documentation.adoc</documentation> <recordContainer>db</recordContainer> - <dependencies> - <entityDependency> - <name>070b2457-3766-4c8a-b43f-a2bf7c9ef638</name> - <entityName>Organisation_entity</entityName> - <fieldName>Communications</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>22dd8c4d-2081-4547-adbd-929868f23069</name> - <entityName>Person_entity</entityName> - <fieldName>Communications</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>a22c32e2-6d76-4e79-8c71-251ee381b22e</name> - <entityName>Contact_entity</entityName> - <fieldName>Communications</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>cbf1d4ab-b3c3-4571-907e-687d1b931134</name> - <entityName>DSGVO_entity</entityName> - <fieldName>Communications</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>CommCategory_param</name> @@ -117,20 +91,6 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact <name>PhoneCommunications</name> <documentation>%aditoprj%/entity/Communication_entity/entityfields/phonecommunications/documentation.adoc</documentation> <recordContainer>db</recordContainer> - <dependencies> - <entityDependency> - <name>7382242a-aa18-4a31-ab77-69a79f2b97b8</name> - <entityName>Organisation_entity</entityName> - <fieldName>PhoneCommunications</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>0eed17a6-443e-4469-a53b-3ce81440d7d0</name> - <entityName>Person_entity</entityName> - <fieldName>PhoneCommunications</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>CommCategory_param</name> @@ -159,32 +119,6 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact <name>EmailCommunications</name> <documentation>%aditoprj%/entity/Communication_entity/entityfields/emailcommunications/documentation.adoc</documentation> <recordContainer>db</recordContainer> - <dependencies> - <entityDependency> - <name>ecfbf518-fe92-4661-8ebe-e2d3c8d259e1</name> - <entityName>Organisation_entity</entityName> - <fieldName>EmailCommunications</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>f8cc4865-ab08-4540-bd02-2b2c92946c84</name> - <entityName>Person_entity</entityName> - <fieldName>EmailCommunications</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>b5ebddec-002b-40a5-a760-cedb78e94cfb</name> - <entityName>Email_entity</entityName> - <fieldName>EmailAddresses</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>eccb5046-7490-4059-903f-40b7d42ebfda</name> - <entityName>BulkMailRecipient_entity</entityName> - <fieldName>EmailAdresses</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>CommCategory_param</name> @@ -266,14 +200,6 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact <entityProvider> <name>QuickEntryCommunications</name> <documentation>%aditoprj%/entity/Communication_entity/entityfields/quickentrycommunications/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>85bc11c4-7226-4b3e-82cb-947dfb05a972</name> - <entityName>QuickEntry_entity</entityName> - <fieldName>Communications</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityParameter> <name>AdditionalContactIds_param</name> diff --git a/entity/Communication_entity/afterOperatingState.js b/entity/Communication_entity/afterOperatingState.js index 7085e9f853c10e7ebaadcd76f44b8786c5d621ed..8c0033867c1e45e42fa9b62d26f0d6218a48452d 100644 --- a/entity/Communication_entity/afterOperatingState.js +++ b/entity/Communication_entity/afterOperatingState.js @@ -2,4 +2,7 @@ import("system.vars"); import("system.neon"); if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_VIEW) - vars.set("$context.PushDataPrivacyNotification", "false"); \ No newline at end of file +{ + vars.set("$context.PushDataPrivacyNotification", "false"); +} + \ No newline at end of file diff --git a/entity/Communication_entity/entityfields/communicationid/valueProcess.js b/entity/Communication_entity/entityfields/communicationid/valueProcess.js index 86ef789e064a4016f2d12c432498dc23474807aa..823247cf893e603a8e2b8d5725d6b94ecd975695 100644 --- a/entity/Communication_entity/entityfields/communicationid/valueProcess.js +++ b/entity/Communication_entity/entityfields/communicationid/valueProcess.js @@ -3,5 +3,7 @@ import("system.vars"); import("system.result"); import("system.neon"); -if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) - result.string(util.getNewUUID()); \ No newline at end of file +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) +{ + result.string(util.getNewUUID()); +} \ No newline at end of file diff --git a/entity/Communication_entity/recordcontainers/db/onDBInsert.js b/entity/Communication_entity/recordcontainers/db/onDBInsert.js index 7d836ae39e0b9d809ba388111d4ab1ab4302a6f9..b78d0ded2a4a2afff809ac6007a5a4704bb59a96 100644 --- a/entity/Communication_entity/recordcontainers/db/onDBInsert.js +++ b/entity/Communication_entity/recordcontainers/db/onDBInsert.js @@ -11,7 +11,7 @@ var rowdata = vars.get("$local.rowdata"); var standard = new StandardObject("Communication", vars.get("$local.uid"), "Person", rowdata["COMMUNICATION.CONTACT_ID"]) standard.onCommunicationInsert(rowdata["COMMUNICATION.MEDIUM_ID"]); -if(vars.exists("$context.PushDataPrivacyNotification") && vars.get("$context.PushDataPrivacyNotification") == "false" && vars.get("$sys.isclient")) +if(vars.exists("$context.PushDataPrivacyNotification") && vars.get("$context.PushDataPrivacyNotification") == "false") { DataPrivacyUtils.notifyNeedDataPrivacyUpdate(rowdata["COMMUNICATION.CONTACT_ID"], vars.get("$param.ShowDsgvoMessage_param")); vars.set("$context.PushDataPrivacyNotification", "true"); diff --git a/entity/Communication_entity/recordcontainers/db/onDBUpdate.js b/entity/Communication_entity/recordcontainers/db/onDBUpdate.js index ebf288114b69f9c461bebc6ca31b2c39ada5b513..1b8a0279c1d23eec7987e99f07cd735d7e75fa06 100644 --- a/entity/Communication_entity/recordcontainers/db/onDBUpdate.js +++ b/entity/Communication_entity/recordcontainers/db/onDBUpdate.js @@ -11,7 +11,7 @@ if (rowdata["COMMUNICATION.CONTACT_ID"] != null) standard.onCommunicationUpdate(rowdata["COMMUNICATION.MEDIUM_ID"]); } -if(vars.exists("$context.PushDataPrivacyNotification") && vars.get("$context.PushDataPrivacyNotification") == "false" && vars.get("$sys.isclient")) +if(vars.exists("$context.PushDataPrivacyNotification") && vars.get("$context.PushDataPrivacyNotification") == "false") { DataPrivacyUtils.notifyNeedDataPrivacyUpdate(rowdata["COMMUNICATION.CONTACT_ID"], vars.get("$param.ShowDsgvoMessage_param")); vars.set("$context.PushDataPrivacyNotification", "true"); diff --git a/entity/Competition_entity/Competition_entity.aod b/entity/Competition_entity/Competition_entity.aod index 7c7f311b945078d8803fe0682ce7979c6a7c3eae..1fe54675aa10cb72973ac960741e10c8df5772c8 100644 --- a/entity/Competition_entity/Competition_entity.aod +++ b/entity/Competition_entity/Competition_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Competition_entity</name> <title>Competition</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -270,14 +270,6 @@ <entityProvider> <name>Links</name> <recordContainer>db</recordContainer> - <dependencies> - <entityDependency> - <name>be977304-6623-42eb-a8bd-80ef43831204</name> - <entityName>Salesproject_entity</entityName> - <fieldName>Competitions</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ObjectRowId_param</name> diff --git a/entity/Competition_entity/entityfields/reason/dropDownProcess.js b/entity/Competition_entity/entityfields/reason/dropDownProcess.js index 8e12cae7f3fa1cc744096ce53b70005aebe91ef0..d134de8779c994a76f872c9c5ba49ae72ceaf699 100644 --- a/entity/Competition_entity/entityfields/reason/dropDownProcess.js +++ b/entity/Competition_entity/entityfields/reason/dropDownProcess.js @@ -5,7 +5,8 @@ import("system.result"); var keyIds = newSelect("AB_KEYWORD_ENTRY.KEYID") .from("AB_KEYWORD_ENTRY") - .where("AB_KEYWORD_ENTRY.CONTAINER", "SalesprojectWonLost") + .where("AB_KEYWORD_ENTRY.AB_KEYWORD_CATEGORY_ID", + KeywordUtils.getCategoryIdByName($KeywordRegistry.salesprojectWonLost())) .arrayColumn(); var res = keyIds.map(function (keyId) { diff --git a/entity/Contact_entity/Contact_entity.aod b/entity/Contact_entity/Contact_entity.aod index 76d2877c06a3cab9ccd4c6805e41709ab6115b5f..7918197fb38dbffc8367cdd5f9bab3fd14ab0a21 100644 --- a/entity/Contact_entity/Contact_entity.aod +++ b/entity/Contact_entity/Contact_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Contact_entity</name> <title>Contact</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -17,14 +17,6 @@ <entityFields> <entityProvider> <name>#PROVIDER</name> - <dependencies> - <entityDependency> - <name>ccbf2270-c30c-458e-8a99-bf0cdcc89689</name> - <entityName>Object_entity</entityName> - <fieldName>Persons</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>CONTACTID</name> @@ -87,14 +79,6 @@ <name>PersonRelated</name> <targetContextField>targetContext</targetContextField> <targetIdField>CONTACTID</targetIdField> - <dependencies> - <entityDependency> - <name>14975dad-907c-4f8c-bd39-243508ede721</name> - <entityName>PrivatePerson_entity</entityName> - <fieldName>Persons</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>OwnContactId_param</name> @@ -164,14 +148,6 @@ <targetContextField>targetContext</targetContextField> <targetIdField>CONTACTID</targetIdField> <titlePlural>Other Contactroles</titlePlural> - <dependencies> - <entityDependency> - <name>34cc85f4-5555-4631-94fc-f3ad35b7ce7e</name> - <entityName>Person_entity</entityName> - <fieldName>OtherContacts</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>PersonId_param</name> diff --git a/entity/Contact_entity/recordcontainers/db/onDBDelete.js b/entity/Contact_entity/recordcontainers/db/onDBDelete.js index 61afa46ba950988b60515de3cae0e732553cfe69..c7b08f7110800f03efb3ca755622080493d3fd48 100644 --- a/entity/Contact_entity/recordcontainers/db/onDBDelete.js +++ b/entity/Contact_entity/recordcontainers/db/onDBDelete.js @@ -5,7 +5,8 @@ import("system.vars"); import("DuplicateScanner_lib"); var contactId = vars.get("$field.CONTACTID"); -DuplicateScannerUtils.deleteCachedDuplicate(contactId); +DuplicateScannerUtils.deleteHasDuplicateEntries("Person_entity", [contactId]); +DuplicateScannerUtils.deleteHasDuplicateEntries("Organisation_entity", [contactId]); new AttributeRelationQuery(contactId, null, "Person") .deleteAllAttributes(); diff --git a/entity/Context_entity/Context_entity.aod b/entity/Context_entity/Context_entity.aod index 96796bb96d331a2252b3414e454833e28b1c5732..063809fea729fd8ff0978f4d790e35b6efcfdcb3 100644 --- a/entity/Context_entity/Context_entity.aod +++ b/entity/Context_entity/Context_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Context_entity</name> <title>Private person</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -11,14 +11,6 @@ <entityProvider> <name>#PROVIDER</name> <recordContainer>jdito</recordContainer> - <dependencies> - <entityDependency> - <name>37559258-24f1-4c8c-b462-23ddf8de4e1e</name> - <entityName>AppointmentLink_entity</entityName> - <fieldName>Context</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>UID</name> @@ -30,32 +22,6 @@ </entityField> <entityProvider> <name>Context</name> - <dependencies> - <entityDependency> - <name>dab09827-2eeb-403d-a070-ba805d2640ee</name> - <entityName>ObjectRelationType_entity</entityName> - <fieldName>Contexts</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>209539e0-15ad-47eb-9175-a3aaa5af13fc</name> - <entityName>Forecast_entity</entityName> - <fieldName>Contexts</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>8183e19e-c8cc-45d8-9763-417eaeffb940</name> - <entityName>Competition_entity</entityName> - <fieldName>Contexts</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>4543a0ae-7bd2-4c70-8eaf-d4f32e014173</name> - <entityName>Member_entity</entityName> - <fieldName>Contexts</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>InvertBlacklist_param</name> @@ -74,14 +40,6 @@ </entityParameter> <entityProvider> <name>ActivityLinkable</name> - <dependencies> - <entityDependency> - <name>de50f67e-5ed0-46aa-b007-8c086cf5fea5</name> - <entityName>ActivityLink_entity</entityName> - <fieldName>Context</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>Blacklist_param</name> @@ -92,14 +50,6 @@ </entityProvider> <entityProvider> <name>TaskLinkable</name> - <dependencies> - <entityDependency> - <name>ff8925da-b69a-46dd-8fe2-d6707da8808e</name> - <entityName>TaskLink_entity</entityName> - <fieldName>Contexts</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>Blacklist_param</name> @@ -116,67 +66,9 @@ </entityParameter> <entityProvider> <name>Exclusive</name> - <dependencies> - <entityDependency> - <name>2fb3e0df-0372-4ba4-acde-210432517ee8</name> - <entityName>Offer_entity</entityName> - <fieldName>Contexts</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>66a69b09-d02a-4de6-a2dd-d11ce1467e01</name> - <entityName>Order_entity</entityName> - <fieldName>Contexts</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>b48df8c7-9d56-40f2-8269-b749afc92af5</name> - <entityName>Attribute_entity</entityName> - <fieldName>Contexts</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>9ad799f1-6303-4119-9bea-8e559850541b</name> - <entityName>AttributeUsage_entity</entityName> - <fieldName>Context</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>59cdaa2b-41c3-4b04-bcf3-7a5bc0843361</name> - <entityName>WorkflowStartConfig_entity</entityName> - <fieldName>Contexts</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>591679c2-8fd3-4d05-9ef3-b648373785f7</name> - <entityName>WorkflowSignal_entity</entityName> - <fieldName>Contexts</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>f69007c7-d495-42d2-9a12-6426c24771a4</name> - <entityName>Observation_entity</entityName> - <fieldName>Contexts</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityProvider> <name>ContextTemplatePlaceOfUse</name> - <dependencies> - <entityDependency> - <name>423a7a33-02f4-4975-94fd-fa0c21278e3b</name> - <entityName>DocumentTemplatePlaceOfUse_entity</entityName> - <fieldName>ContextDocumentTemplatePlaceOfUse</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>26628738-c954-4bf5-8c1f-cbc008d73056</name> - <entityName>ExportTemplatePlaceOfUse_entity</entityName> - <fieldName>ContextExportTemplatePlaceOfUse</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>InvertBlacklist_param</name> @@ -193,6 +85,25 @@ <name>#PROVIDER_AGGREGATES</name> <useAggregates v="true" /> </entityProvider> + <entityProvider> + <name>AdvertisingLinkable</name> + <dependencies> + <entityDependency> + <name>f874db4f-2015-41ea-acbb-afedbb6e1d8a</name> + <isConsumer v="false" /> + </entityDependency> + </dependencies> + <children> + <entityParameter> + <name>Blacklist_param</name> + <valueProcess>%aditoprj%/entity/Context_entity/entityfields/advertisinglinkable/children/blacklist_param/valueProcess.js</valueProcess> + </entityParameter> + <entityParameter> + <name>InvertBlacklist_param</name> + <valueProcess>%aditoprj%/entity/Context_entity/entityfields/advertisinglinkable/children/invertblacklist_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityProvider> </entityFields> <recordContainers> <jDitoRecordContainer> diff --git a/entity/Context_entity/entityfields/advertisinglinkable/children/blacklist_param/valueProcess.js b/entity/Context_entity/entityfields/advertisinglinkable/children/blacklist_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..8017ce496e64179a517077ee47e29be484c01bc2 --- /dev/null +++ b/entity/Context_entity/entityfields/advertisinglinkable/children/blacklist_param/valueProcess.js @@ -0,0 +1,3 @@ +import("system.result"); + +result.object(["Person", "Advertising"]); \ No newline at end of file diff --git a/entity/Context_entity/entityfields/advertisinglinkable/children/invertblacklist_param/valueProcess.js b/entity/Context_entity/entityfields/advertisinglinkable/children/invertblacklist_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..e5bfa3bbe7f58d2ffaf401248014a6d1a560d2de --- /dev/null +++ b/entity/Context_entity/entityfields/advertisinglinkable/children/invertblacklist_param/valueProcess.js @@ -0,0 +1,3 @@ +import("system.result"); + +result.string("true"); \ No newline at end of file diff --git a/entity/Contract_entity/Contract_entity.aod b/entity/Contract_entity/Contract_entity.aod index 49afa5872c3c02495fe5846da0a83f2234d4fa72..bf30590d500661ce5b5c167697dc9cabea1c909f 100644 --- a/entity/Contract_entity/Contract_entity.aod +++ b/entity/Contract_entity/Contract_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Contract_entity</name> <title>Contract</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -125,20 +125,6 @@ <name>Contracts</name> <documentation>%aditoprj%/entity/Contract_entity/entityfields/contracts/documentation.adoc</documentation> <recordContainer>db</recordContainer> - <dependencies> - <entityDependency> - <name>6d7c7166-84b4-4da2-9a48-cc1e390ac987</name> - <entityName>Organisation_entity</entityName> - <fieldName>Contracts</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>3698fe59-fd02-427b-8c95-a90c7d8036e5</name> - <entityName>Person_entity</entityName> - <fieldName>Contracts</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ContactId_param</name> @@ -197,24 +183,16 @@ <entityName>AnyContact_entity</entityName> <fieldName>#PROVIDER</fieldName> </dependency> + <children> + <entityParameter> + <name>IgnoreContactStates_param</name> + <valueProcess>%aditoprj%/entity/Contract_entity/entityfields/anycontacts/children/ignorecontactstates_param/valueProcess.js</valueProcess> + </entityParameter> + </children> </entityConsumer> <entityProvider> <name>#PROVIDER</name> <recordContainer>db</recordContainer> - <dependencies> - <entityDependency> - <name>7d8f586a-3ee0-47e8-b328-3b624cf4abfa</name> - <entityName>Object_entity</entityName> - <fieldName>Contracts</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>9b6c0b15-b252-49bf-a5b5-f7f74f984a9c</name> - <entityName>ObjectProxy_entity</entityName> - <fieldName>Contracts</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>CONTACT_ORG_ID</name> @@ -360,7 +338,6 @@ </entityConsumer> <entityConsumer> <name>Tasks</name> - <stateProcess>%aditoprj%/entity/Contract_entity/entityfields/tasks/stateProcess.js</stateProcess> <dependency> <name>dependency</name> <entityName>Task_entity</entityName> diff --git a/entity/Contract_entity/entityfields/anycontacts/children/ignorecontactstates_param/valueProcess.js b/entity/Contract_entity/entityfields/anycontacts/children/ignorecontactstates_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..c6c72b9e8a3069a5a22fbd37d3d56c131409e561 --- /dev/null +++ b/entity/Contract_entity/entityfields/anycontacts/children/ignorecontactstates_param/valueProcess.js @@ -0,0 +1,7 @@ +import("system.result"); +import("KeywordRegistry_basic"); + +result.string(JSON.stringify([ + $KeywordRegistry.contactStatus$inactive(), + $KeywordRegistry.contactStatus$markToDelete() +])); diff --git a/entity/Contract_entity/entityfields/contractid/valueProcess.js b/entity/Contract_entity/entityfields/contractid/valueProcess.js index 86ef789e064a4016f2d12c432498dc23474807aa..823247cf893e603a8e2b8d5725d6b94ecd975695 100644 --- a/entity/Contract_entity/entityfields/contractid/valueProcess.js +++ b/entity/Contract_entity/entityfields/contractid/valueProcess.js @@ -3,5 +3,7 @@ import("system.vars"); import("system.result"); import("system.neon"); -if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) - result.string(util.getNewUUID()); \ No newline at end of file +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) +{ + result.string(util.getNewUUID()); +} \ No newline at end of file diff --git a/entity/Contract_entity/entityfields/tasks/stateProcess.js b/entity/Contract_entity/entityfields/tasks/stateProcess.js deleted file mode 100644 index 1b34404a3884f0b970939e41fdf6853c392ecd3e..0000000000000000000000000000000000000000 --- a/entity/Contract_entity/entityfields/tasks/stateProcess.js +++ /dev/null @@ -1,10 +0,0 @@ -import("system.result"); -import("system.neon"); -import("system.vars"); -import("ActivityTask_lib"); -import("Context_lib"); - -if(TaskUtils.hasTasks(vars.get("$field.CONTRACTID"), ContextUtils.getCurrentContextId())) - result.string(neon.COMPONENTSTATE_EDITABLE); -else - result.string(neon.COMPONENTSTATE_INVISIBLE); \ No newline at end of file diff --git a/entity/Countries_Entity/Countries_Entity.aod b/entity/Countries_Entity/Countries_Entity.aod index dd854efc611530e48d5e2dd0b2442754701db8fc..1b89d6d86e1aa5af1b8baec1c7ba1ede4f8286e2 100644 --- a/entity/Countries_Entity/Countries_Entity.aod +++ b/entity/Countries_Entity/Countries_Entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Countries_Entity</name> <title>Countries</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -16,20 +16,6 @@ <name>ISO2Name</name> <lookupIdfield>ISO2</lookupIdfield> <documentation>%aditoprj%/entity/Countries_Entity/entityfields/iso2name/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>83e8a2e6-aa80-4b35-a0ad-8dad483ed428</name> - <entityName>Address_entity</entityName> - <fieldName>Countries</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>8e8d1ace-3cbb-4ed7-b029-f486805605ef</name> - <entityName>Organisation_entity</entityName> - <fieldName>Countries</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>Key_param</name> diff --git a/entity/CovidCasesData_entity/CovidCasesData_entity.aod b/entity/CovidCasesData_entity/CovidCasesData_entity.aod index dd76a30e26d1c5389a4466df97dad0954cccdd69..f06f4c4eddb742ea94c252214a29ef9f4160d30f 100644 --- a/entity/CovidCasesData_entity/CovidCasesData_entity.aod +++ b/entity/CovidCasesData_entity/CovidCasesData_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>CovidCasesData_entity</name> <description></description> <majorModelMode>DISTRIBUTED</majorModelMode> diff --git a/entity/DSGVOConfigurationAttribute_entity/DSGVOConfigurationAttribute_entity.aod b/entity/DSGVOConfigurationAttribute_entity/DSGVOConfigurationAttribute_entity.aod new file mode 100644 index 0000000000000000000000000000000000000000..51a8dfdf877d62359a7519082af3ef1771bd4b2b --- /dev/null +++ b/entity/DSGVOConfigurationAttribute_entity/DSGVOConfigurationAttribute_entity.aod @@ -0,0 +1,68 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> + <name>DSGVOConfigurationAttribute_entity</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <documentation>%aditoprj%/entity/DSGVOConfigurationAttribute_entity/documentation.adoc</documentation> + <recordContainer>jdito</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + </entityProvider> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityField> + <name>UID</name> + </entityField> + <entityField> + <name>ATTRIBUTE_PARENT_ID</name> + </entityField> + <entityField> + <name>ATTRIBUTE_NAME</name> + <title>Name</title> + <displayValueProcess>%aditoprj%/entity/DSGVOConfigurationAttribute_entity/entityfields/attribute_name/displayValueProcess.js</displayValueProcess> + </entityField> + <entityField> + <name>isDSGVORelevant</name> + <title>is DSGVO Relevant</title> + <contentType>BOOLEAN</contentType> + <valueProcess>%aditoprj%/entity/DSGVOConfigurationAttribute_entity/entityfields/isdsgvorelevant/valueProcess.js</valueProcess> + </entityField> + <entityProvider> + <name>DSGVOAttributeConfig</name> + </entityProvider> + <entityActionGroup> + <name>FilterActions</name> + <state>DISABLED</state> + <stateProcess>%aditoprj%/entity/DSGVOConfigurationAttribute_entity/entityfields/filteractions/stateProcess.js</stateProcess> + <children> + <entityActionField> + <name>changeDSGVORelevance</name> + <title>change DSGVO Relevance</title> + <onActionProcess>%aditoprj%/entity/DSGVOConfigurationAttribute_entity/entityfields/filteractions/children/changedsgvorelevance/onActionProcess.js</onActionProcess> + <isMenuAction v="true" /> + <selectionType>MULTI</selectionType> + </entityActionField> + </children> + </entityActionGroup> + </entityFields> + <recordContainers> + <jDitoRecordContainer> + <name>jdito</name> + <jDitoRecordAlias>Data_alias</jDitoRecordAlias> + <contentProcess>%aditoprj%/entity/DSGVOConfigurationAttribute_entity/recordcontainers/jdito/contentProcess.js</contentProcess> + <recordFieldMappings> + <jDitoRecordFieldMapping> + <name>UID.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>ATTRIBUTE_NAME.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>ATTRIBUTE_PARENT_ID.value</name> + </jDitoRecordFieldMapping> + </recordFieldMappings> + </jDitoRecordContainer> + </recordContainers> +</entity> diff --git a/entity/DSGVOConfigurationAttribute_entity/documentation.adoc b/entity/DSGVOConfigurationAttribute_entity/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..4441147717e0c61613ba2e247db2e3f0c5828431 --- /dev/null +++ b/entity/DSGVOConfigurationAttribute_entity/documentation.adoc @@ -0,0 +1,5 @@ += DSGVOConfigurationAttribute_entity + +The entity shows all attributes relevant to the person and it is for the configuration of the GDPR-relevant attributes. +If a attribute is markt as GDPR-relevant you get a data privacy message, when you update or insert one in the persons. +Also these attributes are shown in the data privacy tap of the person. diff --git a/entity/Classification_entity/entityfields/scoretype/displayValueProcess.js b/entity/DSGVOConfigurationAttribute_entity/entityfields/attribute_name/displayValueProcess.js similarity index 56% rename from entity/Classification_entity/entityfields/scoretype/displayValueProcess.js rename to entity/DSGVOConfigurationAttribute_entity/entityfields/attribute_name/displayValueProcess.js index 87d569a0e2dc50c0ef3859fdbc0f22c3d9ac89e3..a5717eabb76417046c488939aadcfa7beb915dcd 100644 --- a/entity/Classification_entity/entityfields/scoretype/displayValueProcess.js +++ b/entity/DSGVOConfigurationAttribute_entity/entityfields/attribute_name/displayValueProcess.js @@ -2,4 +2,4 @@ import("system.vars"); import("system.translate"); import("system.result"); -result.string(translate.text(vars.get("$field.SCORETYPE"))); \ No newline at end of file +result.string(translate.text(vars.get("$this.value"))); \ No newline at end of file diff --git a/entity/DSGVOConfigurationAttribute_entity/entityfields/filteractions/children/changedsgvorelevance/onActionProcess.js b/entity/DSGVOConfigurationAttribute_entity/entityfields/filteractions/children/changedsgvorelevance/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..0c425285f1ac351bf2327587da08f930c866eef7 --- /dev/null +++ b/entity/DSGVOConfigurationAttribute_entity/entityfields/filteractions/children/changedsgvorelevance/onActionProcess.js @@ -0,0 +1,34 @@ +import("system.neon"); +import("Sql_lib"); +import("system.entities"); +import("system.vars"); + + +if (vars.get("$field.isDSGVORelevant") == "0") +{ + let fields = { + "OBJECT_TYPE" : "DSGVO", + "AB_ATTRIBUTE_ID" : vars.get("$field.UID"), + "MAX_COUNT": "1" + } + + let createRowConfig = entities.createConfigForAddingRows() + .entity("AttributeUsage_entity"); + entities.createRow(createRowConfig.fieldValues(fields)); +} +else +{ + newSelect("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTEUSAGEID") + .from("AB_ATTRIBUTEUSAGE") + .where("AB_ATTRIBUTEUSAGE.OBJECT_TYPE", "DSGVO") + .and("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID", vars.get("$field.UID")) + .arrayColumn() + .forEach(function (pUsageId) { + let deleteRowConfig = entities.createConfigForDeletingRows() + .uid(pUsageId) + .entity("AttributeUsage_entity"); + entities.deleteRow(deleteRowConfig); + }); +} + +neon.refreshAll(); \ No newline at end of file diff --git a/entity/DSGVOConfigurationAttribute_entity/entityfields/filteractions/stateProcess.js b/entity/DSGVOConfigurationAttribute_entity/entityfields/filteractions/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..7bc43bb218f1477c70b73958cf6784458b2714f0 --- /dev/null +++ b/entity/DSGVOConfigurationAttribute_entity/entityfields/filteractions/stateProcess.js @@ -0,0 +1,8 @@ +import("system.neon"); +import("system.result"); +import("system.vars"); + +if (vars.get("$sys.selection").length > 0) +{ + result.string(neon.COMPONENTSTATE_EDITABLE); +} \ No newline at end of file diff --git a/entity/DSGVOConfigurationAttribute_entity/entityfields/isdsgvorelevant/valueProcess.js b/entity/DSGVOConfigurationAttribute_entity/entityfields/isdsgvorelevant/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..10bd0fec530097f2fabb20287cc417d16b1f8946 --- /dev/null +++ b/entity/DSGVOConfigurationAttribute_entity/entityfields/isdsgvorelevant/valueProcess.js @@ -0,0 +1,8 @@ +import("system.result"); +import("system.vars"); +import("Sql_lib"); + +result.string( newSelect("COUNT(*)") +.from("AB_ATTRIBUTEUSAGE") +.where("AB_ATTRIBUTEUSAGE.OBJECT_TYPE", "DSGVO") +.and("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID", vars.get("$field.UID")).cell()); diff --git a/entity/DSGVOConfigurationAttribute_entity/recordcontainers/jdito/contentProcess.js b/entity/DSGVOConfigurationAttribute_entity/recordcontainers/jdito/contentProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..bd4950c921fc7cc464cc4e86555ea9970df6d009 --- /dev/null +++ b/entity/DSGVOConfigurationAttribute_entity/recordcontainers/jdito/contentProcess.js @@ -0,0 +1,12 @@ +import("system.result"); +import("Attribute_lib"); +import("Sql_lib"); + + +result.object(newSelect(["AB_ATTRIBUTE.AB_ATTRIBUTEID", "AB_ATTRIBUTE.ATTRIBUTE_NAME", "AB_ATTRIBUTE.ATTRIBUTE_PARENT_ID"]) + .from("AB_ATTRIBUTE") + .join("AB_ATTRIBUTEUSAGE", "AB_ATTRIBUTE.AB_ATTRIBUTEID = AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID") + .where("AB_ATTRIBUTEUSAGE.OBJECT_TYPE", "Person") + .and("AB_ATTRIBUTE.ATTRIBUTE_TYPE", AttributeTypes.COMBOVALUE(), SqlBuilder.NOT_EQUAL()) + .and("ATTRIBUTE_ACTIVE = 1") + .orderBy("AB_ATTRIBUTE.ATTRIBUTE_PARENT_ID DESC").table()); \ No newline at end of file diff --git a/entity/DSGVOConfiguration_entity/DSGVOConfiguration_entity.aod b/entity/DSGVOConfiguration_entity/DSGVOConfiguration_entity.aod new file mode 100644 index 0000000000000000000000000000000000000000..1c47b5724dc3c8f7237c539f8296e3c30159ce20 --- /dev/null +++ b/entity/DSGVOConfiguration_entity/DSGVOConfiguration_entity.aod @@ -0,0 +1,187 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> + <name>DSGVOConfiguration_entity</name> + <title>DSGVO Configuration</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <documentation>%aditoprj%/entity/DSGVOConfiguration_entity/documentation.adoc</documentation> + <recordContainer>db</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + </entityProvider> + <entityField> + <name>DATE_EDIT</name> + <contentType>DATE</contentType> + <mandatory v="false" /> + <valueProcess>%aditoprj%/entity/DSGVOConfiguration_entity/entityfields/date_edit/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>DATE_NEW</name> + <contentType>DATE</contentType> + <mandatory v="true" /> + <valueProcess>%aditoprj%/entity/DSGVOConfiguration_entity/entityfields/date_new/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>DSGVOCONFIGURATIONID</name> + </entityField> + <entityField> + <name>FILTER</name> + <title>Filter</title> + <contentType>FILTER_TREE</contentType> + <mandatory v="true" /> + <valueProcess>%aditoprj%/entity/DSGVOConfiguration_entity/entityfields/filter/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>REASON</name> + <title>Reason</title> + <mandatory v="true" /> + <dropDownProcess>%aditoprj%/entity/DSGVOConfiguration_entity/entityfields/reason/dropDownProcess.js</dropDownProcess> + <textInputAllowed v="true" /> + <valueProcess>%aditoprj%/entity/DSGVOConfiguration_entity/entityfields/reason/valueProcess.js</valueProcess> + <onValidation>%aditoprj%/entity/DSGVOConfiguration_entity/entityfields/reason/onValidation.js</onValidation> + </entityField> + <entityField> + <name>USER_EDIT</name> + <mandatory v="false" /> + <valueProcess>%aditoprj%/entity/DSGVOConfiguration_entity/entityfields/user_edit/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>USER_NEW</name> + <mandatory v="true" /> + <valueProcess>%aditoprj%/entity/DSGVOConfiguration_entity/entityfields/user_new/valueProcess.js</valueProcess> + </entityField> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityField> + <name>entity</name> + <valueProcess>%aditoprj%/entity/DSGVOConfiguration_entity/entityfields/entity/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>alreadyMarked</name> + <title>Marked for deletion</title> + <valueProcess>%aditoprj%/entity/DSGVOConfiguration_entity/entityfields/alreadymarked/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>COUNT_USAGE</name> + <title>Count Usage</title> + <state>READONLY</state> + <stateProcess>%aditoprj%/entity/DSGVOConfiguration_entity/entityfields/count_usage/stateProcess.js</stateProcess> + </entityField> + <entityConsumer> + <name>Persons</name> + <dependency> + <name>dependency</name> + <entityName>Person_entity</entityName> + <fieldName>Contacts</fieldName> + </dependency> + </entityConsumer> + <entityActionGroup> + <name>FilterConfigActions</name> + <children> + <entityActionField> + <name>MarkToDelete</name> + <title>Mark to Delete</title> + <onActionProcess>%aditoprj%/entity/DSGVOConfiguration_entity/entityfields/filterconfigactions/children/marktodelete/onActionProcess.js</onActionProcess> + <isObjectAction v="true" /> + <iconId>NEON:SAL</iconId> + <titleProcess>%aditoprj%/entity/DSGVOConfiguration_entity/entityfields/filterconfigactions/children/marktodelete/titleProcess.js</titleProcess> + </entityActionField> + <entityActionField> + <name>AnonymizePersons</name> + <title>anonymize Persons</title> + <onActionProcess>%aditoprj%/entity/DSGVOConfiguration_entity/entityfields/filterconfigactions/children/anonymizepersons/onActionProcess.js</onActionProcess> + <isObjectAction v="false" /> + <iconId>NEON:TRASH</iconId> + </entityActionField> + </children> + </entityActionGroup> + <entityActionField> + <name>OpenContacts</name> + <title>Open Contacts</title> + <onActionProcess>%aditoprj%/entity/DSGVOConfiguration_entity/entityfields/opencontacts/onActionProcess.js</onActionProcess> + <isMenuAction v="true" /> + <selectionType>UNBOUND</selectionType> + <iconId>VAADIN:USERS</iconId> + </entityActionField> + <entityConsumer> + <name>ConfigKeywordAttributeRelation</name> + <dependency> + <name>dependency</name> + <entityName>KeywordAttributeRelation_entity</entityName> + <fieldName>AttributesForKeywordEntry</fieldName> + </dependency> + <children> + <entityParameter> + <name>KeywordEntryId_param</name> + <valueProcess>%aditoprj%/entity/DSGVOConfiguration_entity/entityfields/configkeywordattributerelation/children/keywordentryid_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityConsumer> + <name>DSGVOConfigurationAttributes</name> + <dependency> + <name>dependency</name> + <entityName>DSGVOConfigurationAttribute_entity</entityName> + <fieldName>DSGVOAttributeConfig</fieldName> + </dependency> + </entityConsumer> + <entityField> + <name>REASONID</name> + </entityField> + </entityFields> + <recordContainers> + <dbRecordContainer> + <name>db</name> + <isPageable v="true" /> + <onDBInsert>%aditoprj%/entity/DSGVOConfiguration_entity/recordcontainers/db/onDBInsert.js</onDBInsert> + <onDBUpdate>%aditoprj%/entity/DSGVOConfiguration_entity/recordcontainers/db/onDBUpdate.js</onDBUpdate> + <onDBDelete>%aditoprj%/entity/DSGVOConfiguration_entity/recordcontainers/db/onDBDelete.js</onDBDelete> + <alias>Data_alias</alias> + <recordFieldMappings> + <dbRecordFieldMapping> + <name>DATE_EDIT.value</name> + <recordfield>DSGVOCONFIGURATION.DATE_EDIT</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DATE_NEW.value</name> + <recordfield>DSGVOCONFIGURATION.DATE_NEW</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DSGVOCONFIGURATIONID.value</name> + <recordfield>DSGVOCONFIGURATION.DSGVOCONFIGURATIONID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>USER_EDIT.value</name> + <recordfield>DSGVOCONFIGURATION.USER_EDIT</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>USER_NEW.value</name> + <recordfield>DSGVOCONFIGURATION.USER_NEW</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>FILTER.value</name> + <recordfield>DSGVOCONFIGURATION.FILTER</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>COUNT_USAGE.value</name> + <expression>%aditoprj%/entity/DSGVOConfiguration_entity/recordcontainers/db/recordfieldmappings/count_usage.value/expression.js</expression> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>REASONID.value</name> + <recordfield>DSGVOCONFIGURATION.REASON</recordfield> + </dbRecordFieldMapping> + </recordFieldMappings> + <linkInformation> + <linkInformation> + <name>6efbaa15-d5ef-49d5-b2fc-ca21f55b110a</name> + <tableName>DSGVOCONFIGURATION</tableName> + <primaryKey>DSGVOCONFIGURATIONID</primaryKey> + <isUIDTable v="true" /> + <readonly v="false" /> + </linkInformation> + </linkInformation> + </dbRecordContainer> + </recordContainers> +</entity> diff --git a/entity/DSGVOConfiguration_entity/documentation.adoc b/entity/DSGVOConfiguration_entity/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..0c451d61a372f05803f38408206387690b2f4309 --- /dev/null +++ b/entity/DSGVOConfiguration_entity/documentation.adoc @@ -0,0 +1,8 @@ += DSGVOConfiguration_entity + +This entity is for the configurations of the filter to set the marks for deletion in the persons. +In the filter_view also can start the two processes. + +- The prozess to mark all to delete +- and then anonymize the persons with the second prozess + diff --git a/entity/DSGVOConfiguration_entity/entityfields/alreadymarked/valueProcess.js b/entity/DSGVOConfiguration_entity/entityfields/alreadymarked/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..2689a33903eceb090cc1103977eac0c779804fe0 --- /dev/null +++ b/entity/DSGVOConfiguration_entity/entityfields/alreadymarked/valueProcess.js @@ -0,0 +1,5 @@ +import("KeywordRegistry_basic"); +import("system.result"); +import("Sql_lib"); + +result.string(parseInt(newSelect("COUNT(*)").from("CONTACT").where("CONTACT.STATUS", $KeywordRegistry.contactStatus$markToDelete()).cell())); \ No newline at end of file diff --git a/entity/DSGVOConfiguration_entity/entityfields/configkeywordattributerelation/children/keywordentryid_param/valueProcess.js b/entity/DSGVOConfiguration_entity/entityfields/configkeywordattributerelation/children/keywordentryid_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..abbda7b1960a316165e5285f1c5c12875b696db4 --- /dev/null +++ b/entity/DSGVOConfiguration_entity/entityfields/configkeywordattributerelation/children/keywordentryid_param/valueProcess.js @@ -0,0 +1,4 @@ +import("KeywordRegistry_basic"); +import("system.result"); + +result.string($KeywordRegistry.dsgvoConfiguration$configId()); \ No newline at end of file diff --git a/entity/DSGVOConfiguration_entity/entityfields/count_usage/stateProcess.js b/entity/DSGVOConfiguration_entity/entityfields/count_usage/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..fb8e12bf234d636a35da74d064f5ddaf2f3a4369 --- /dev/null +++ b/entity/DSGVOConfiguration_entity/entityfields/count_usage/stateProcess.js @@ -0,0 +1,12 @@ +import("system.vars"); +import("system.result"); +import("system.neon"); + +var res = neon.COMPONENTSTATE_INVISIBLE + +if (vars.get("$sys.recordstate") != neon.OPERATINGSTATE_EDIT && vars.get("$sys.recordstate") != neon.OPERATINGSTATE_EDIT) +{ + res = neon.COMPONENTSTATE_READONLY; +} + +result.string(res); \ No newline at end of file diff --git a/entity/DSGVOConfiguration_entity/entityfields/date_edit/valueProcess.js b/entity/DSGVOConfiguration_entity/entityfields/date_edit/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..1cd90b34ea56f1e22f023e13710fed73f62d2c78 --- /dev/null +++ b/entity/DSGVOConfiguration_entity/entityfields/date_edit/valueProcess.js @@ -0,0 +1,9 @@ +import("system.result"); +import("system.neon"); +import("system.vars"); + +if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) +{ + result.string(vars.get("$sys.date")); +} + \ No newline at end of file diff --git a/entity/DSGVOConfiguration_entity/entityfields/date_new/valueProcess.js b/entity/DSGVOConfiguration_entity/entityfields/date_new/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..0c68e0b1ce5d1bcb6519f306dfa01de18c10be7c --- /dev/null +++ b/entity/DSGVOConfiguration_entity/entityfields/date_new/valueProcess.js @@ -0,0 +1,9 @@ +import("system.result"); +import("system.neon"); +import("system.vars"); + +if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) +{ + result.string(vars.get("$sys.date")); +} + \ No newline at end of file diff --git a/entity/Duplicates_entity/entityfields/selfpersonduplicatesconsumer/children/targetentity/valueProcess.js b/entity/DSGVOConfiguration_entity/entityfields/entity/valueProcess.js similarity index 98% rename from entity/Duplicates_entity/entityfields/selfpersonduplicatesconsumer/children/targetentity/valueProcess.js rename to entity/DSGVOConfiguration_entity/entityfields/entity/valueProcess.js index 0f7bee25ea3bd34aeeceff7f47f7f9118e69b7ba..c8fadb7380feb48636999dc2c70bd9b79ef5927e 100644 --- a/entity/Duplicates_entity/entityfields/selfpersonduplicatesconsumer/children/targetentity/valueProcess.js +++ b/entity/DSGVOConfiguration_entity/entityfields/entity/valueProcess.js @@ -1,2 +1,3 @@ import("system.result"); + result.string("Person_entity"); \ No newline at end of file diff --git a/entity/DSGVOConfiguration_entity/entityfields/filter/valueProcess.js b/entity/DSGVOConfiguration_entity/entityfields/filter/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..1d66c48f85bd3a672a0c4f094b134377989e1a5c --- /dev/null +++ b/entity/DSGVOConfiguration_entity/entityfields/filter/valueProcess.js @@ -0,0 +1,23 @@ +import("system.translate"); +import("system.vars"); +import("system.result"); + +if (!vars.get("$this.value")) +{ + result.string(JSON.stringify({ + entity: "" + vars.get("$field.entity") + "", + filter: { + type: "group", + operator: "AND", + childs: [{ + "type":"row", + "name":"#EXTENSION.IsEmployee_filter.IsEmployee_filter#BOOLEAN", + "operator":"EQUAL", + "value":translate.text("No"), + "key":"false", + "contenttype":"BOOLEAN" + }] + } + })); +} + diff --git a/entity/DSGVOConfiguration_entity/entityfields/filterconfigactions/children/anonymizepersons/onActionProcess.js b/entity/DSGVOConfiguration_entity/entityfields/filterconfigactions/children/anonymizepersons/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..84cb5f3efd8a922cf45861cbc260fa2170398cc9 --- /dev/null +++ b/entity/DSGVOConfiguration_entity/entityfields/filterconfigactions/children/anonymizepersons/onActionProcess.js @@ -0,0 +1,18 @@ +import("system.translate"); +import("system.question"); +import("system.neon"); +import("system.vars"); +import("system.process"); + +let deleteFlags = question.askYesNo(translate.text("DSGVO"), translate.text("Do you really want to anonymize all marked persons?"), false); + +if (deleteFlags) +{ + var processConfig = process.createStartAsyncConfig() + .setShowErrorDialog(true) + .setName("DSGVOAnonymize_serverProcess"); + + process.startAsync(processConfig); +} + + diff --git a/entity/DSGVOConfiguration_entity/entityfields/filterconfigactions/children/marktodelete/onActionProcess.js b/entity/DSGVOConfiguration_entity/entityfields/filterconfigactions/children/marktodelete/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..d811e528c09a14d498ebbc9774f22a779d33b6fe --- /dev/null +++ b/entity/DSGVOConfiguration_entity/entityfields/filterconfigactions/children/marktodelete/onActionProcess.js @@ -0,0 +1,15 @@ +import("system.translate"); +import("system.question"); +import("system.neon"); +import("system.vars"); +import("system.process"); + +let deleteFlags = question.askYesNo(translate.text("DSGVO"), translate.text("Do you want to delete the flags of the already maked Persons?"), false); + +var processConfig = process.createStartConfig() +.setLocalVariables({"deleteFlags" : deleteFlags, "tableSelection": JSON.stringify(vars.get("$sys.selection"))}) +.setName("DSGVOSetDeleteFlags_serverProcess"); + +process.start(processConfig); + +neon.refreshAll(); \ No newline at end of file diff --git a/entity/DSGVOConfiguration_entity/entityfields/filterconfigactions/children/marktodelete/titleProcess.js b/entity/DSGVOConfiguration_entity/entityfields/filterconfigactions/children/marktodelete/titleProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..9c5b8ed9a40d00d0d8ccc0a55708200a0b0a7164 --- /dev/null +++ b/entity/DSGVOConfiguration_entity/entityfields/filterconfigactions/children/marktodelete/titleProcess.js @@ -0,0 +1,12 @@ +import("system.translate"); +import("system.result"); +import("system.vars"); + +if (vars.get("$sys.selection").length) +{ + result.string(translate.text("Mark selection to delete")); +} +else +{ + result.string(translate.text("Mark all to delete")); +} \ No newline at end of file diff --git a/entity/DSGVOConfiguration_entity/entityfields/opencontacts/onActionProcess.js b/entity/DSGVOConfiguration_entity/entityfields/opencontacts/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..36f8bf311d6d36d3c7f19d97c0df4c02ad6ae438 --- /dev/null +++ b/entity/DSGVOConfiguration_entity/entityfields/opencontacts/onActionProcess.js @@ -0,0 +1,7 @@ +import("system.translate"); +import("system.vars"); +import("system.neon"); + +neon.openContext("Person", "PersonFilterOverlay_view", null, neon.OPERATINGSTATE_SEARCH , { + FilterPreSet_param: JSON.stringify(JSON.parse(vars.get("$field.FILTER")).filter) +}); \ No newline at end of file diff --git a/entity/DSGVOConfiguration_entity/entityfields/reason/dropDownProcess.js b/entity/DSGVOConfiguration_entity/entityfields/reason/dropDownProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..a488f2d4c2827d59419c30c05460028da5d3fb53 --- /dev/null +++ b/entity/DSGVOConfiguration_entity/entityfields/reason/dropDownProcess.js @@ -0,0 +1,9 @@ +import("system.result"); +import("KeywordRegistry_basic"); +import("Keyword_lib"); + +let keywords = KeywordUtils.getEntryNamesAndIdsByContainer($KeywordRegistry.dsgvoReason()); + +keywords.shift(); + +result.object(keywords); \ No newline at end of file diff --git a/entity/DSGVOConfiguration_entity/entityfields/reason/onValidation.js b/entity/DSGVOConfiguration_entity/entityfields/reason/onValidation.js new file mode 100644 index 0000000000000000000000000000000000000000..315525a5cb90558f9db0c496138b193c93fcbdcb --- /dev/null +++ b/entity/DSGVOConfiguration_entity/entityfields/reason/onValidation.js @@ -0,0 +1,8 @@ +import("system.vars"); +import("system.translate"); +import("system.result"); + +if (vars.getString("$local.value") && vars.getString("$local.value").length > 100) +{ + result.string(translate.text("Characters to use")); +} diff --git a/entity/DSGVOConfiguration_entity/entityfields/reason/valueProcess.js b/entity/DSGVOConfiguration_entity/entityfields/reason/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..13e5f3cef514c67ebdd301630820e4d50cb80ce2 --- /dev/null +++ b/entity/DSGVOConfiguration_entity/entityfields/reason/valueProcess.js @@ -0,0 +1,8 @@ +import("system.result"); +import("Sql_lib"); +import("system.vars"); + +if (!vars.get("$this.value") && vars.get("$field.REASONID")) +{ + result.string(vars.get("$field.REASONID")); +} \ No newline at end of file diff --git a/entity/DSGVOConfiguration_entity/entityfields/user_edit/valueProcess.js b/entity/DSGVOConfiguration_entity/entityfields/user_edit/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..4b5364ae7513fbd76d26cbb9bfe34adc90541764 --- /dev/null +++ b/entity/DSGVOConfiguration_entity/entityfields/user_edit/valueProcess.js @@ -0,0 +1,9 @@ +import("system.result"); +import("system.neon"); +import("system.vars"); + +if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) +{ + result.string(vars.get("$sys.user")); +} + \ No newline at end of file diff --git a/entity/DSGVOConfiguration_entity/entityfields/user_new/valueProcess.js b/entity/DSGVOConfiguration_entity/entityfields/user_new/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..821388b7f44d42e12179d8886bd3f42b59c984b1 --- /dev/null +++ b/entity/DSGVOConfiguration_entity/entityfields/user_new/valueProcess.js @@ -0,0 +1,9 @@ +import("system.result"); +import("system.neon"); +import("system.vars"); + +if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) +{ + result.string(vars.get("$sys.user")); +} + \ No newline at end of file diff --git a/entity/DSGVOConfiguration_entity/recordcontainers/db/onDBDelete.js b/entity/DSGVOConfiguration_entity/recordcontainers/db/onDBDelete.js new file mode 100644 index 0000000000000000000000000000000000000000..f0ff8160c66e5bea01b2ec4971555b91b340aab0 --- /dev/null +++ b/entity/DSGVOConfiguration_entity/recordcontainers/db/onDBDelete.js @@ -0,0 +1,21 @@ +import("system.SQLTYPES"); +import("KeywordRegistry_basic"); +import("Sql_lib"); +import("system.vars"); + +let reason = vars.get("$local.rowdata")["DSGVOCONFIGURATION.REASON"]; + +newWhereIfSet("CONTACT.STATUS", $KeywordRegistry.contactStatus$markToDelete()) + .and("CONTACT.CONTACTID", + newSelect("DSGVODELETEFLAG.CONTACT_ID") + .from("DSGVODELETEFLAG") + .where("DSGVODELETEFLAG.REASON", reason), + SqlBuilder.IN()) + .and(newSelect("COUNT(*)") + .from("DSGVODELETEFLAG") + .where("DSGVODELETEFLAG.CONTACT_ID = CONTACT.CONTACTID"), 1, SqlBuilder.EQUAL(), SQLTYPES.INTEGER) + .updateData(true, "CONTACT", ["STATUS"], null, [$KeywordRegistry.contactStatus$active()]); + +newWhereIfSet("DSGVODELETEFLAG.REASON", reason) + .deleteData(true, "DSGVODELETEFLAG"); + diff --git a/entity/DSGVOConfiguration_entity/recordcontainers/db/onDBInsert.js b/entity/DSGVOConfiguration_entity/recordcontainers/db/onDBInsert.js new file mode 100644 index 0000000000000000000000000000000000000000..d5181af765a21d043dd354ba9ba2858ee01caaf0 --- /dev/null +++ b/entity/DSGVOConfiguration_entity/recordcontainers/db/onDBInsert.js @@ -0,0 +1,36 @@ +import("Sql_lib"); +import("system.entities"); +import("KeywordRegistry_basic"); +import("Keyword_lib"); +import("system.util"); +import("system.vars"); + +let rowdata = vars.get("$local.rowdata"); +let reason = vars.get("$field.REASON"); +let reasonID; + +if ( vars.get("$property.REASON.dropDown")[reason] == reason ) +{ + let newUID = util.getNewUUID(); + + let fields = { + "AB_KEYWORD_CATEGORY_ID" : KeywordUtils.getCategoryIdByName($KeywordRegistry.dsgvoReason()), + "TITLE" : reason, + "ISACTIVE": "1", + "KEYID" : newUID, + "AB_KEYWORD_ENTRYID": newUID + } + + let createRowConfig = entities.createConfigForAddingRows() + .entity("KeywordEntry_entity"); + entities.createRow(createRowConfig.fieldValues(fields)); + + reasonID = newUID; +} else { + reasonID = reason; +} + + newWhere("DSGVOCONFIGURATION.DSGVOCONFIGURATIONID", rowdata["DSGVOCONFIGURATION.DSGVOCONFIGURATIONID"]) + .updateFields({ + "DSGVOCONFIGURATION.REASON" : reasonID + }, "DSGVOCONFIGURATION"); \ No newline at end of file diff --git a/entity/DSGVOConfiguration_entity/recordcontainers/db/onDBUpdate.js b/entity/DSGVOConfiguration_entity/recordcontainers/db/onDBUpdate.js new file mode 100644 index 0000000000000000000000000000000000000000..d5181af765a21d043dd354ba9ba2858ee01caaf0 --- /dev/null +++ b/entity/DSGVOConfiguration_entity/recordcontainers/db/onDBUpdate.js @@ -0,0 +1,36 @@ +import("Sql_lib"); +import("system.entities"); +import("KeywordRegistry_basic"); +import("Keyword_lib"); +import("system.util"); +import("system.vars"); + +let rowdata = vars.get("$local.rowdata"); +let reason = vars.get("$field.REASON"); +let reasonID; + +if ( vars.get("$property.REASON.dropDown")[reason] == reason ) +{ + let newUID = util.getNewUUID(); + + let fields = { + "AB_KEYWORD_CATEGORY_ID" : KeywordUtils.getCategoryIdByName($KeywordRegistry.dsgvoReason()), + "TITLE" : reason, + "ISACTIVE": "1", + "KEYID" : newUID, + "AB_KEYWORD_ENTRYID": newUID + } + + let createRowConfig = entities.createConfigForAddingRows() + .entity("KeywordEntry_entity"); + entities.createRow(createRowConfig.fieldValues(fields)); + + reasonID = newUID; +} else { + reasonID = reason; +} + + newWhere("DSGVOCONFIGURATION.DSGVOCONFIGURATIONID", rowdata["DSGVOCONFIGURATION.DSGVOCONFIGURATIONID"]) + .updateFields({ + "DSGVOCONFIGURATION.REASON" : reasonID + }, "DSGVOCONFIGURATION"); \ No newline at end of file diff --git a/entity/DSGVOConfiguration_entity/recordcontainers/db/recordfieldmappings/count_usage.value/expression.js b/entity/DSGVOConfiguration_entity/recordcontainers/db/recordfieldmappings/count_usage.value/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..d2be7823837c0c6680941efd8f3c746c7e90efa3 --- /dev/null +++ b/entity/DSGVOConfiguration_entity/recordcontainers/db/recordfieldmappings/count_usage.value/expression.js @@ -0,0 +1,4 @@ +import("system.result"); +import("Sql_lib"); + +result.string(newSelect("COUNT(*)").from("DSGVODELETEFLAG").where("DSGVOCONFIGURATION.REASON = DSGVODELETEFLAG.REASON").toString()) \ No newline at end of file diff --git a/entity/DSGVODeleteFlag_entity/DSGVODeleteFlag_entity.aod b/entity/DSGVODeleteFlag_entity/DSGVODeleteFlag_entity.aod new file mode 100644 index 0000000000000000000000000000000000000000..e34d12654bb418fb3469e8cacf2f20859af55ed6 --- /dev/null +++ b/entity/DSGVODeleteFlag_entity/DSGVODeleteFlag_entity.aod @@ -0,0 +1,118 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> + <name>DSGVODeleteFlag_entity</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <documentation>%aditoprj%/entity/DSGVODeleteFlag_entity/documentation.adoc</documentation> + <siblings> + <element>Person_entity</element> + <element>LogHistory_entity</element> + </siblings> + <grantUpdate v="false" /> + <recordContainer>db</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + </entityProvider> + <entityField> + <name>DATE_NEW</name> + <title>Date</title> + <contentType>DATE</contentType> + <mandatory v="true" /> + </entityField> + <entityField> + <name>DSGVODELETEFLAGID</name> + </entityField> + <entityField> + <name>REASON</name> + <title>Reason</title> + <consumer>DSGVOReasonKeywords</consumer> + <mandatory v="true" /> + <state>READONLY</state> + <displayValueProcess>%aditoprj%/entity/DSGVODeleteFlag_entity/entityfields/reason/displayValueProcess.js</displayValueProcess> + </entityField> + <entityField> + <name>USER_NEW</name> + <title>User</title> + <mandatory v="true" /> + </entityField> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityField> + <name>CONTACT_ID</name> + </entityField> + <entityProvider> + <name>DSGVODeleteFlags</name> + </entityProvider> + <entityParameter> + <name>ContactId_param</name> + <expose v="true" /> + <mandatory v="true" /> + </entityParameter> + <entityConsumer> + <name>DSGVOReasonKeywords</name> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>OrderedBySortingFieldKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/DSGVODeleteFlag_entity/entityfields/dsgvoreasonkeywords/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityActionGroup> + <name>FilterActions</name> + <children> + <entityActionField> + <name>AddManualDeleteFlag</name> + <title>Add Manual Delete Flag</title> + <onActionProcess>%aditoprj%/entity/DSGVODeleteFlag_entity/entityfields/filteractions/children/addmanualdeleteflag/onActionProcess.js</onActionProcess> + <iconId>VAADIN:PLUS</iconId> + </entityActionField> + </children> + </entityActionGroup> + </entityFields> + <recordContainers> + <dbRecordContainer> + <name>db</name> + <conditionProcess>%aditoprj%/entity/DSGVODeleteFlag_entity/recordcontainers/db/conditionProcess.js</conditionProcess> + <onDBDelete>%aditoprj%/entity/DSGVODeleteFlag_entity/recordcontainers/db/onDBDelete.js</onDBDelete> + <alias>Data_alias</alias> + <recordFieldMappings> + <dbRecordFieldMapping> + <name>DATE_NEW.value</name> + <recordfield>DSGVODELETEFLAG.DATE_NEW</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DSGVODELETEFLAGID.value</name> + <recordfield>DSGVODELETEFLAG.DSGVODELETEFLAGID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>REASON.value</name> + <recordfield>DSGVODELETEFLAG.REASON</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>USER_NEW.value</name> + <recordfield>DSGVODELETEFLAG.USER_NEW</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>CONTACT_ID.value</name> + <recordfield>DSGVODELETEFLAG.CONTACT_ID</recordfield> + </dbRecordFieldMapping> + </recordFieldMappings> + <linkInformation> + <linkInformation> + <name>883f262d-bb32-48ca-a3b0-5256df85bf59</name> + <tableName>DSGVODELETEFLAG</tableName> + <primaryKey>DSGVODELETEFLAGID</primaryKey> + <isUIDTable v="true" /> + <readonly v="false" /> + </linkInformation> + </linkInformation> + </dbRecordContainer> + </recordContainers> +</entity> diff --git a/entity/DSGVODeleteFlag_entity/documentation.adoc b/entity/DSGVODeleteFlag_entity/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..415fdca25d9a77d239b9ac97d03d6288321058d6 --- /dev/null +++ b/entity/DSGVODeleteFlag_entity/documentation.adoc @@ -0,0 +1,9 @@ += DSGVODeleteFlag_entity + +This Entity handles the Delete Flags for a Person and you can set it manually or delete the already set ones. +If one Delete Flag is set, the Person Status will set to "mark to delete". +If all Delete Flags was removed, the Status of the Person will set to "active". + + + + diff --git a/entity/DSGVODeleteFlag_entity/entityfields/dsgvoreasonkeywords/children/containername_param/valueProcess.js b/entity/DSGVODeleteFlag_entity/entityfields/dsgvoreasonkeywords/children/containername_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..7aca2ec20585e17c01b70bee2aa7e852b84e6a88 --- /dev/null +++ b/entity/DSGVODeleteFlag_entity/entityfields/dsgvoreasonkeywords/children/containername_param/valueProcess.js @@ -0,0 +1,4 @@ +import("KeywordRegistry_basic"); +import("system.result"); + +result.string($KeywordRegistry.dsgvoReason()); \ No newline at end of file diff --git a/entity/DSGVODeleteFlag_entity/entityfields/filteractions/children/addmanualdeleteflag/onActionProcess.js b/entity/DSGVODeleteFlag_entity/entityfields/filteractions/children/addmanualdeleteflag/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..9601edb7847d4f03e9ac2b2b55e1af4ff2833455 --- /dev/null +++ b/entity/DSGVODeleteFlag_entity/entityfields/filteractions/children/addmanualdeleteflag/onActionProcess.js @@ -0,0 +1,15 @@ +import("KeywordRegistry_basic"); +import("system.vars"); +import("system.util"); +import("system.entities"); +import("Sql_lib"); + +new SqlBuilder().insertData("DSGVODELETEFLAG", ["DSGVODELETEFLAGID","REASON", "CONTACT_ID", "USER_NEW", "DATE_NEW"], null, [util.getNewUUID(), $KeywordRegistry.dsgvoReason$manuel(), vars.get("$param.ContactId_param"), vars.get("$sys.user"), vars.get("$sys.date")]); + +let config = entities.createConfigForUpdatingRows() +.ignorePermissions(true) +.entity("Person_entity") +.fieldValues({"STATUS": $KeywordRegistry.contactStatus$markToDelete() }) +.uid(vars.get("$param.ContactId_param")); + +entities.updateRow(config); \ No newline at end of file diff --git a/entity/DSGVODeleteFlag_entity/entityfields/reason/displayValueProcess.js b/entity/DSGVODeleteFlag_entity/entityfields/reason/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..7e63a5beb356861619d2729e0598b7ca8bc1651d --- /dev/null +++ b/entity/DSGVODeleteFlag_entity/entityfields/reason/displayValueProcess.js @@ -0,0 +1,6 @@ +import("system.result"); +import("system.vars"); +import("Keyword_lib"); +import("KeywordRegistry_basic"); + +result.string(KeywordUtils.getViewValue($KeywordRegistry.dsgvoReason(), vars.get("$this.value"))); \ No newline at end of file diff --git a/entity/DSGVODeleteFlag_entity/recordcontainers/db/conditionProcess.js b/entity/DSGVODeleteFlag_entity/recordcontainers/db/conditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..a7c168d2d17b472e51c40d06b642d103dad36a38 --- /dev/null +++ b/entity/DSGVODeleteFlag_entity/recordcontainers/db/conditionProcess.js @@ -0,0 +1,8 @@ +import("system.vars"); +import("system.db"); +import("system.result"); +import("Sql_lib"); + +var cond = newWhereIfSet("DSGVODELETEFLAG.CONTACT_ID", "$param.ContactId_param", SqlBuilder.EQUAL()); + +result.string(cond.toString()); \ No newline at end of file diff --git a/entity/DSGVODeleteFlag_entity/recordcontainers/db/onDBDelete.js b/entity/DSGVODeleteFlag_entity/recordcontainers/db/onDBDelete.js new file mode 100644 index 0000000000000000000000000000000000000000..b6365c6f9fc7804381168a37c33b86a7240597f7 --- /dev/null +++ b/entity/DSGVODeleteFlag_entity/recordcontainers/db/onDBDelete.js @@ -0,0 +1,19 @@ +import("system.vars"); +import("KeywordRegistry_basic"); +import("system.entities"); +import("Sql_lib"); + +let contactId = vars.get("$param.ContactId_param"); + +if (parseInt(newSelect(["Count(*)"]).from("DSGVODELETEFLAG").where("DSGVODELETEFLAG.CONTACT_ID", contactId).cell()) == 1) +{ + let config = entities.createConfigForUpdatingRows() + .ignorePermissions(true) + .entity("Person_entity") + .fieldValues({ + "STATUS": $KeywordRegistry.contactStatus$active() + }) + .uid(contactId); + + entities.updateRow(config); +} \ No newline at end of file diff --git a/entity/DSGVOInfo_entity/DSGVOInfo_entity.aod b/entity/DSGVOInfo_entity/DSGVOInfo_entity.aod index 674803b125b89af582baac331f6db7261ae087f6..215011e99f00fa3dd29bc2e9cc731a7771bffb26 100644 --- a/entity/DSGVOInfo_entity/DSGVOInfo_entity.aod +++ b/entity/DSGVOInfo_entity/DSGVOInfo_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>DSGVOInfo_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/DSGVOInfo_entity/documentation.adoc</documentation> diff --git a/entity/DSGVOReport_entity/DSGVOReport_entity.aod b/entity/DSGVOReport_entity/DSGVOReport_entity.aod index b3482dff7d057f512eef04d6dfe882eba55cfe24..df5b97c20fe7874e0a508873ee90f74eb14b6e71 100644 --- a/entity/DSGVOReport_entity/DSGVOReport_entity.aod +++ b/entity/DSGVOReport_entity/DSGVOReport_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>DSGVOReport_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/DSGVOReport_entity/documentation.adoc</documentation> diff --git a/entity/DSGVOReport_entity/entityfields/dsgvoreportdispatch/children/dispatchdsgvoreport/onActionProcess.js b/entity/DSGVOReport_entity/entityfields/dsgvoreportdispatch/children/dispatchdsgvoreport/onActionProcess.js index e7ffc71bedc55beb9053abc8da900f809680228c..14f74060919a8c1a315722141e9c31f814003bc7 100644 --- a/entity/DSGVOReport_entity/entityfields/dsgvoreportdispatch/children/dispatchdsgvoreport/onActionProcess.js +++ b/entity/DSGVOReport_entity/entityfields/dsgvoreportdispatch/children/dispatchdsgvoreport/onActionProcess.js @@ -1,3 +1,4 @@ +import("KeywordRegistry_basic"); import("system.logging"); import("system.translate"); import("system.vars"); @@ -19,10 +20,12 @@ var emailFilename = translate.text(reportType == "DSGVO_Disclosure_report" ? "Di var fullname = ContactUtils.getTitleByContactId(contactId); emailFilename = emailFilename + " " + fullname; -dsgvoReport.content = reportData; +dsgvoReport.content = reportData.substr(1); dsgvoReport.mimeType = MimeTypes.PDF(); dsgvoReport.filename = emailFilename + ".pdf"; attachmentArray[0] = dsgvoReport; -EmailWritingUtils.sendReportAsMail(recipient, attachmentArray, "DSGVOReport", null, emailFilename, null, null); + +EmailWritingUtils.sendReportAsMail(recipient, attachmentArray, "DSGVOReport", null, emailFilename, null, null, + $KeywordRegistry.documentTemplateTypeCategory$single()); \ No newline at end of file diff --git a/entity/DSGVO_entity/DSGVO_entity.aod b/entity/DSGVO_entity/DSGVO_entity.aod index be47ef0d4009d01d94464151a2e7ecf970b46d83..58c2e8479495c7e71e3580084e7b520d5f4438e2 100644 --- a/entity/DSGVO_entity/DSGVO_entity.aod +++ b/entity/DSGVO_entity/DSGVO_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>DSGVO_entity</name> <title>Data Privacy</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -18,14 +18,6 @@ <entityFields> <entityProvider> <name>#PROVIDER</name> - <dependencies> - <entityDependency> - <name>848916ba-482b-4e53-ac22-48ee6fbf2b64</name> - <entityName>Person_entity</entityName> - <fieldName>DSGVOEntries</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>UID</name> @@ -52,6 +44,17 @@ <name>ROW_ID</name> <valueProcess>%aditoprj%/entity/DSGVO_entity/entityfields/row_id/valueProcess.js</valueProcess> </entityField> + <entityField> + <name>bindata</name> + <title>File</title> + <contentType>FILE</contentType> + <mandatory v="true" /> + <mandatoryProcess>%aditoprj%/entity/DSGVO_entity/entityfields/bindata/mandatoryProcess.js</mandatoryProcess> + <state>INVISIBLE</state> + <stateProcess>%aditoprj%/entity/DSGVO_entity/entityfields/bindata/stateProcess.js</stateProcess> + <valueProcess>%aditoprj%/entity/DSGVO_entity/entityfields/bindata/valueProcess.js</valueProcess> + <displayValueProcess>%aditoprj%/entity/DSGVO_entity/entityfields/bindata/displayValueProcess.js</displayValueProcess> + </entityField> <entityField> <name>STATUORITYSOURCE</name> <title>DataPrivacy Right</title> @@ -165,7 +168,7 @@ <onActionProcess>%aditoprj%/entity/DSGVO_entity/entityfields/dsgvoactions/children/anonymperson/onActionProcess.js</onActionProcess> <actionOrder v="0" /> <isObjectAction v="false" /> - <isSelectionAction v="true" /> + <selectionType>MULTI</selectionType> <iconId>VAADIN:ASTERISK</iconId> <state>INVISIBLE</state> </entityActionField> diff --git a/entity/DSGVO_entity/entityfields/bindata/displayValueProcess.js b/entity/DSGVO_entity/entityfields/bindata/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..82d715638aff20681723c714a0b94f32702ed2cc --- /dev/null +++ b/entity/DSGVO_entity/entityfields/bindata/displayValueProcess.js @@ -0,0 +1,15 @@ +import("Sql_lib"); +import("system.result"); +import("system.vars"); +import("system.db"); + +var binMetadatas = db.getBinaryMetadata("CONTACT", "DOCUMENT", vars.get("$field.CONTACT_ID"), false, SqlUtils.getBinariesAlias(), "PRIVACY_NOTICE"); + +if (binMetadatas.length > 0) +{ + result.string(binMetadatas[0].filename); +} +else +{ + result.string("FILE MISSING"); +} \ No newline at end of file diff --git a/entity/DSGVO_entity/entityfields/bindata/mandatoryProcess.js b/entity/DSGVO_entity/entityfields/bindata/mandatoryProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..4ec1aa1eb03e216f66ff40491d918f9cfa6213da --- /dev/null +++ b/entity/DSGVO_entity/entityfields/bindata/mandatoryProcess.js @@ -0,0 +1,13 @@ +import("KeywordRegistry_basic"); +import("system.vars"); +import("system.result"); +import("system.neon"); + +var res = "false"; + +if (vars.get("$field.DSGVOTYPE") == $KeywordRegistry.dsgvoType$privacyNotice()) +{ + res = "true"; +} + +result.string(res); \ No newline at end of file diff --git a/entity/DSGVO_entity/entityfields/bindata/stateProcess.js b/entity/DSGVO_entity/entityfields/bindata/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..51bae3fa772a47011ab6cf8eb7e6c6ceaaf39925 --- /dev/null +++ b/entity/DSGVO_entity/entityfields/bindata/stateProcess.js @@ -0,0 +1,10 @@ +import("KeywordRegistry_basic"); +import("system.vars"); +import("system.result"); +import("system.neon"); + +if (vars.get("$field.DSGVOTYPE") == $KeywordRegistry.dsgvoType$privacyNotice()) +{ + result.string("EDITABLE"); +} + \ No newline at end of file diff --git a/entity/DSGVO_entity/entityfields/bindata/valueProcess.js b/entity/DSGVO_entity/entityfields/bindata/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..5a5737b0600a4fc027888b6a571c4fa94ba022bf --- /dev/null +++ b/entity/DSGVO_entity/entityfields/bindata/valueProcess.js @@ -0,0 +1,18 @@ +import("system.translate"); +import("system.result"); +import("system.neon"); +import("Sql_lib"); +import("system.db"); +import("system.vars"); + +if (vars.get("$sys.recordstate") && vars.get("$sys.recordstate") != neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) +{ + var binMetadatas = db.getBinaryMetadata("CONTACT", "DOCUMENT", vars.get("$field.CONTACT_ID"), false, SqlUtils.getBinariesAlias(), "PRIVACY_NOTICE"); + if (binMetadatas.length > 0) + { + // preset the field. This is to allow just editing the other fields without uploading a file (because this field is mandatory) + // if the user did not upload a file "FILE NOT CHANGED" will be still in the field in onDBUpdate and nothing has to be done there + // --> this is a marking that the field didn't change + result.string(translate.text("FILE NOT CHANGED")); + } +} \ No newline at end of file diff --git a/entity/DSGVO_entity/entityfields/dsgvoactions/children/anonymperson/onActionProcess.js b/entity/DSGVO_entity/entityfields/dsgvoactions/children/anonymperson/onActionProcess.js index 154dd846f477bee30e3d50c88b73a9f1be840acb..d5f013ed1b214e04593755cf0e405b91c1e84e6a 100644 --- a/entity/DSGVO_entity/entityfields/dsgvoactions/children/anonymperson/onActionProcess.js +++ b/entity/DSGVO_entity/entityfields/dsgvoactions/children/anonymperson/onActionProcess.js @@ -2,4 +2,4 @@ import("system.vars"); import("DataPrivacy_lib"); // TODO open View DSGVOPreviewAnonym_view mit Auswahl an Kategorien -//DataPrivacyUtils.dsgvoMkDataAnonymous(vars.get("$field.CONTACT_ID"), vars.get("$field.ROW_ID")); \ No newline at end of file +// DataPrivacyUtils.dsgvoMkDataAnonymous(vars.get("$field.CONTACT_ID"), vars.get("$field.ROW_ID")); \ No newline at end of file diff --git a/entity/DSGVO_entity/recordcontainers/jdito/onUpdate.js b/entity/DSGVO_entity/recordcontainers/jdito/onUpdate.js index 5197563de59cb12e5b47e19d0800de70288d720e..014592cb299052ba5248bbec35950c038e4e69fc 100644 --- a/entity/DSGVO_entity/recordcontainers/jdito/onUpdate.js +++ b/entity/DSGVO_entity/recordcontainers/jdito/onUpdate.js @@ -1,8 +1,29 @@ +import("Binary_lib"); +import("Document_lib"); import("system.neon"); import("system.db"); import("Sql_lib"); import("system.vars"); +var binMetadata = db.getBinaryMetadata("CONTACT", "DOCUMENT", vars.get("$field.CONTACT_ID"), false, SqlUtils.getBinariesAlias(), "PRIVACY_NOTICE"); +var assignmentRowId = vars.get("$field.CONTACT_ID"); + +// "FILE NOT CHANGED" is set in the value process of the field to indicate that the user didn't upload a new file +if (vars.get("$field.bindata") != "FILE NOT CHANGED") +{ + let bindata = DocumentUtil.getBindataFromUpload(vars.get("$field.bindata")); + let filename = DocumentUtil.getFilenameFromUpload(vars.get("$field.bindata")); + + if(bindata != '' && filename != '') + { + if (binMetadata.length == 1) + { + db.updateBinaryMetadata(binMetadata[0].id, "", binMetadata[0].filename, "", "", SqlUtils.getBinariesAlias()); + } + db.insertBinary("CONTACT", "DOCUMENT", assignmentRowId, "", bindata, filename, "", "PRIVACY_NOTICE", SqlUtils.getBinariesAlias()); + } +} + var columns = [ "STATUORITYSOURCE", "PURPOSE", diff --git a/entity/DefaultAdminView_entity/DefaultAdminView_entity.aod b/entity/DefaultAdminView_entity/DefaultAdminView_entity.aod index a5e20a92430010b0dc20174dabb6df69d5fbe5c2..75ad6975d070c255295d1e8469372a6cfd11cf50 100644 --- a/entity/DefaultAdminView_entity/DefaultAdminView_entity.aod +++ b/entity/DefaultAdminView_entity/DefaultAdminView_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>DefaultAdminView_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/DefaultAdminView_entity/documentation.adoc</documentation> diff --git a/entity/DescriptionTranslation_entity/DescriptionTranslation_entity.aod b/entity/DescriptionTranslation_entity/DescriptionTranslation_entity.aod index 858fe5c982aebdceca1d11bf68ab048984c8b6f2..fc6a33e2c950d08639f13789b31f1da0f784acdc 100644 --- a/entity/DescriptionTranslation_entity/DescriptionTranslation_entity.aod +++ b/entity/DescriptionTranslation_entity/DescriptionTranslation_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>DescriptionTranslation_entity</name> <title>Description</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -64,14 +64,6 @@ </entityParameter> <entityProvider> <name>DescriptionTranslations</name> - <dependencies> - <entityDependency> - <name>72298519-6028-4d4b-9ef6-3227fb065bb8</name> - <entityName>Product_entity</entityName> - <fieldName>DescriptionTranslations</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityProvider> <name>#PROVIDER_AGGREGATES</name> diff --git a/entity/DistrictContact_entity/DistrictContact_entity.aod b/entity/DistrictContact_entity/DistrictContact_entity.aod index a8f9c248146913e119e15a9e5eafd0f9eaa113da..49da7262c12ca4cc54951a216148a333d740a940 100644 --- a/entity/DistrictContact_entity/DistrictContact_entity.aod +++ b/entity/DistrictContact_entity/DistrictContact_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>DistrictContact_entity</name> <title>District Contact</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -164,20 +164,6 @@ </entityConsumer> <entityProvider> <name>DistrictContacts</name> - <dependencies> - <entityDependency> - <name>6a15b92f-e0b6-459d-a106-615dcfac3dbd</name> - <entityName>District_entity</entityName> - <fieldName>DistrictContactUIDs</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>e33ae6f8-0a21-406c-950a-ab60f27026b3</name> - <entityName>Organisation_entity</entityName> - <fieldName>DistrictContacts</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityParameter> <name>DistrictId_param</name> @@ -202,7 +188,7 @@ <name>setActive</name> <title>Set active</title> <onActionProcess>%aditoprj%/entity/DistrictContact_entity/entityfields/setstatus/children/setactive/onActionProcess.js</onActionProcess> - <isSelectionAction v="true" /> + <selectionType>MULTI</selectionType> <iconId>VAADIN:THUMBS_UP</iconId> <tooltip>Set status to active</tooltip> </entityActionField> @@ -210,7 +196,7 @@ <name>setInactive</name> <title>Set inactive</title> <onActionProcess>%aditoprj%/entity/DistrictContact_entity/entityfields/setstatus/children/setinactive/onActionProcess.js</onActionProcess> - <isSelectionAction v="true" /> + <selectionType>MULTI</selectionType> <iconId>VAADIN:THUMBS_DOWN</iconId> <tooltip>Set status to inactive</tooltip> </entityActionField> diff --git a/entity/DistrictResponsible_entity/DistrictResponsible_entity.aod b/entity/DistrictResponsible_entity/DistrictResponsible_entity.aod index 199213fe56c0a805961dce132a36b4a23269795f..928ca8eb81283b109438d2fa88fd15dae568a249 100644 --- a/entity/DistrictResponsible_entity/DistrictResponsible_entity.aod +++ b/entity/DistrictResponsible_entity/DistrictResponsible_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>DistrictResponsible_entity</name> <title>District Responsible</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -63,14 +63,6 @@ <name>DistrictResponsibles</name> <documentation>%aditoprj%/entity/DistrictResponsible_entity/entityfields/districtresponsibles/documentation.adoc</documentation> <titlePlural>Responsibles</titlePlural> - <dependencies> - <entityDependency> - <name>ae1dcbbe-b302-44df-ab4c-f7937d197cd5</name> - <entityName>District_entity</entityName> - <fieldName>DistrictResponsibleUIDs</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>DistrictId_param</name> @@ -124,20 +116,6 @@ <targetContextField>targetContext</targetContextField> <targetIdField>EMPLOYEE_CONTACT_ID</targetIdField> <documentation>%aditoprj%/entity/DistrictResponsible_entity/entityfields/organisationresponsibles/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>9c2fe0da-9456-44ef-ac6c-28ac234b35f7</name> - <entityName>Organisation_entity</entityName> - <fieldName>DistrictResponsibles</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>2b3318a3-4925-4aa8-bf6e-bc5489549327</name> - <entityName>Person_entity</entityName> - <fieldName>DistrictResponsibles</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>DistrictId_param</name> @@ -250,15 +228,11 @@ <entityProvider> <name>DistrictResponsibleAdvisers</name> <lookupIdfield>EMPLOYEE_CONTACT_ID</lookupIdfield> - <dependencies> - <entityDependency> - <name>ac067a2d-e313-44b7-b219-f834ef4a7629</name> - <entityName>DistrictContact_entity</entityName> - <fieldName>Advisers</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> + <entityParameter> + <name>OnlyActive_param</name> + <expose v="true" /> + </entityParameter> </entityFields> <recordContainers> <dbRecordContainer> diff --git a/entity/DistrictResponsible_entity/grantDeleteProcess.js b/entity/DistrictResponsible_entity/grantDeleteProcess.js index 7039de6df63613d5985e26ef10ab10e90161e5c9..164a0d74af04ec7f0ad9cc499c8b4fb6b775e031 100644 --- a/entity/DistrictResponsible_entity/grantDeleteProcess.js +++ b/entity/DistrictResponsible_entity/grantDeleteProcess.js @@ -8,6 +8,7 @@ var currentContext = ContextUtils.getCurrentContextId(); var canDelete = new HasLinkedObjectTester() .andNoEntityRows("DistrictContact_entity", "DistrictContacts", {ObjectId_param : currentContext, RowId_param : rowId}) //District Contact + .andNoEntityRows("Document_entity", "Documents", {AssignmentTable_param : "DISTRICTRESPONSIBLE", AssignmentRowId_param : rowId}) //Documents .validate(); result.string(canDelete); \ No newline at end of file diff --git a/entity/DistrictResponsible_entity/recordcontainers/db/conditionProcess.js b/entity/DistrictResponsible_entity/recordcontainers/db/conditionProcess.js index d61189649016e2ed0cd022e862c5ecaf1290801c..e9c5a40572f327f7b2f90252704d59bd65f501ac 100644 --- a/entity/DistrictResponsible_entity/recordcontainers/db/conditionProcess.js +++ b/entity/DistrictResponsible_entity/recordcontainers/db/conditionProcess.js @@ -2,6 +2,7 @@ import("system.entities"); import("system.result"); import("system.vars"); import("Sql_lib"); +import("KeywordRegistry_basic"); var districtId = vars.get("$param.DistrictId_param"); var orgUid = vars.get("$param.OrgUid_param"); @@ -22,4 +23,14 @@ else if(orgUid) } } +if(vars.exists("$param.OnlyActive_param") && vars.get("$param.OnlyActive_param")) +{ + // not equal on null is undefined behavior + cond.and(newWhere( + "DISTRICTRESPONSIBLE.ADVISER_STATUS", + $KeywordRegistry.contactStatus$inactive(), + SqlBuilder.NOT_EQUAL() + ).or("DISTRICTRESPONSIBLE.ADVISER_STATUS is null")); +} + result.string(cond.toString()); \ No newline at end of file diff --git a/entity/District_entity/District_entity.aod b/entity/District_entity/District_entity.aod index 1501adb177652439951bcd1501084f8e55729aa4..66c1873901ec47942b117e46ddd71905aabe4264 100644 --- a/entity/District_entity/District_entity.aod +++ b/entity/District_entity/District_entity.aod @@ -1,11 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>District_entity</name> <title>District definition</title> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/District_entity/documentation.adoc</documentation> <icon>VAADIN:GLOBE</icon> - <grantDelete v="false" /> + <grantDelete v="true" /> <grantDeleteProcess>%aditoprj%/entity/District_entity/grantDeleteProcess.js</grantDeleteProcess> <contentTitleProcess>%aditoprj%/entity/District_entity/contentTitleProcess.js</contentTitleProcess> <iconIdProcess>%aditoprj%/entity/District_entity/iconIdProcess.js</iconIdProcess> @@ -84,14 +84,6 @@ <documentation>%aditoprj%/entity/District_entity/entityfields/responsibledistricts/documentation.adoc</documentation> <titlePlural>Responsible Districts</titlePlural> <recordContainer>db</recordContainer> - <dependencies> - <entityDependency> - <name>291c0ca4-5a68-45f5-80a7-745c7df56d7c</name> - <entityName>DistrictResponsible_entity</entityName> - <fieldName>Districts</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ExcludedDistrictIds_param</name> @@ -226,14 +218,6 @@ <entityProvider> <name>ValidParentDistricts</name> <documentation>%aditoprj%/entity/District_entity/entityfields/validparentdistricts/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>8b0738a4-e4cd-4f9e-8df1-f499046c81bf</name> - <entityName>District_entity</entityName> - <fieldName>ParentDistricts</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>DistrictsByContactId_param</name> @@ -285,14 +269,6 @@ </entityActionGroup> <entityProvider> <name>DistrictContacts</name> - <dependencies> - <entityDependency> - <name>d94c353f-c66d-489c-934b-72ca154ba37a</name> - <entityName>DistrictContact_entity</entityName> - <fieldName>Districts</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>DistrictsByContactId_param</name> diff --git a/entity/District_entity/grantDeleteProcess.js b/entity/District_entity/grantDeleteProcess.js index 74e29836785f40313a3ff29d94ae95cf743007df..2aa49f3be4ce09fa49552cf97b5b5ab914774d6d 100644 --- a/entity/District_entity/grantDeleteProcess.js +++ b/entity/District_entity/grantDeleteProcess.js @@ -6,7 +6,11 @@ import("system.vars"); var districtId = vars.get("$field.DISTRICTID"); var count = newSelect("COUNT(*)") .from("DISTRICT") - .where("DISTRICT.PARENTDISTRICT_DISTRICTID", districtId) - .cell(); - -result.string(count == 0); + .where("DISTRICT.PARENTDISTRICT_DISTRICTID", districtId); + +var canDelete = new HasLinkedObjectTester() + .andNoEntityRows("Document_entity", "Documents", {AssignmentTable_param : "DISTRICT", AssignmentRowId_param : districtId}) //Documents + .andSqlYieldsZero(count) + .validate(); + +result.string(canDelete); diff --git a/entity/DocumentTemplateLink_entity/DocumentTemplateLink_entity.aod b/entity/DocumentTemplateLink_entity/DocumentTemplateLink_entity.aod index 843d06ed290041280f020427f11738ff3dbe06d9..f113a88dd1d4953783869d6ed0748ad6e1d9d928 100644 --- a/entity/DocumentTemplateLink_entity/DocumentTemplateLink_entity.aod +++ b/entity/DocumentTemplateLink_entity/DocumentTemplateLink_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>DocumentTemplateLink_entity</name> <title>Attachment</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -69,14 +69,6 @@ <targetIdField>DOCUMENTTEMPLATE_ID_CHILD</targetIdField> <documentation>%aditoprj%/entity/DocumentTemplateLink_entity/entityfields/links/documentation.adoc</documentation> <recordContainer>db</recordContainer> - <dependencies> - <entityDependency> - <name>db3b7e04-ca3b-4205-a1d3-5e5e5cb13073</name> - <entityName>DocumentTemplate_entity</entityName> - <fieldName>Links</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>DocumentId_param</name> diff --git a/entity/DocumentTemplatePlaceOfUse_entity/DocumentTemplatePlaceOfUse_entity.aod b/entity/DocumentTemplatePlaceOfUse_entity/DocumentTemplatePlaceOfUse_entity.aod index 4ac6764a9d7f53074eb326f85cd32142258de9d6..e8e7b3f14a3f708c88dc66926e7f1baee2a65cf0 100644 --- a/entity/DocumentTemplatePlaceOfUse_entity/DocumentTemplatePlaceOfUse_entity.aod +++ b/entity/DocumentTemplatePlaceOfUse_entity/DocumentTemplatePlaceOfUse_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>DocumentTemplatePlaceOfUse_entity</name> <title>Documenttemplate Place Of Use</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -48,14 +48,6 @@ <entityProvider> <name>DocumentTemplatePlaceOfUse</name> <documentation>%aditoprj%/entity/DocumentTemplatePlaceOfUse_entity/entityfields/documenttemplateplaceofuse/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>bc05b556-ecca-478c-9a92-b77e4d98d6f3</name> - <entityName>DocumentTemplate_entity</entityName> - <fieldName>DocumentTemplatePlaceOfUse</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>DocumentTemplatePlaceOfUse_param</name> diff --git a/entity/DocumentTemplatePlaceOfUse_entity/entityfields/contextdocumenttemplateplaceofuse/children/blacklist_param/valueProcess.js b/entity/DocumentTemplatePlaceOfUse_entity/entityfields/contextdocumenttemplateplaceofuse/children/blacklist_param/valueProcess.js index 9d5b64bb87394e32432cb693008cd7332ada7be6..dbc5c8b1007ed7a9822b590d526dc28d5d012c1f 100644 --- a/entity/DocumentTemplatePlaceOfUse_entity/entityfields/contextdocumenttemplateplaceofuse/children/blacklist_param/valueProcess.js +++ b/entity/DocumentTemplatePlaceOfUse_entity/entityfields/contextdocumenttemplateplaceofuse/children/blacklist_param/valueProcess.js @@ -1,3 +1,3 @@ import("system.result"); -result.object(["Person", "Organisation", "Offer", "MarketingWorkflowLauncher"]); \ No newline at end of file +result.object(["Person", "Organisation", "Offer", "MarketingWorkflowLauncher", "Advertising"]); \ No newline at end of file diff --git a/entity/DocumentTemplateTypeCategory_entity/DocumentTemplateTypeCategory_entity.aod b/entity/DocumentTemplateTypeCategory_entity/DocumentTemplateTypeCategory_entity.aod index cd4ef60ae543ee6cb2407d59bf510f368cb64f66..245ea52fe1173ad92b2cf87fec7e2a810745f209 100644 --- a/entity/DocumentTemplateTypeCategory_entity/DocumentTemplateTypeCategory_entity.aod +++ b/entity/DocumentTemplateTypeCategory_entity/DocumentTemplateTypeCategory_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>DocumentTemplateTypeCategory_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/DocumentTemplateTypeCategory_entity/documentation.adoc</documentation> @@ -32,14 +32,6 @@ <lookupIdfield>KEYID</lookupIdfield> <documentation>%aditoprj%/entity/DocumentTemplateTypeCategory_entity/entityfields/bycategory/documentation.adoc</documentation> <recordContainer>db</recordContainer> - <dependencies> - <entityDependency> - <name>5eb6b17c-8c13-48df-84d5-a949b7d21cf3</name> - <entityName>DocumentTemplate_entity</entityName> - <fieldName>DocumentTemplateTypeCategory</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>usageFilter_param</name> diff --git a/entity/DocumentTemplate_entity/DocumentTemplate_entity.aod b/entity/DocumentTemplate_entity/DocumentTemplate_entity.aod index 30e957717bd688d4b60b8b624272000b4935b5a3..59d3e3d3a79dcc35163280358c4eb6a06246b895 100644 --- a/entity/DocumentTemplate_entity/DocumentTemplate_entity.aod +++ b/entity/DocumentTemplate_entity/DocumentTemplate_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>DocumentTemplate_entity</name> <title>Document Template</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -16,20 +16,6 @@ <entityFields> <entityProvider> <name>#PROVIDER</name> - <dependencies> - <entityDependency> - <name>5cc2e566-309c-4b47-84f3-52376e919b9b</name> - <entityName>Email_entity</entityName> - <fieldName>DocumentTemplates</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>aa0b6a21-d458-4723-b1d8-526324024662</name> - <entityName>ObjectProxy_entity</entityName> - <fieldName>DocumentTemplates</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>DATE_EDIT</name> @@ -196,14 +182,6 @@ <documentation>%aditoprj%/entity/DocumentTemplate_entity/entityfields/attachments/documentation.adoc</documentation> <titlePlural>Attachments</titlePlural> <recordContainer>db</recordContainer> - <dependencies> - <entityDependency> - <name>856e3435-a173-4cf5-8e81-3f884f8238d3</name> - <entityName>DocumentTemplateLink_entity</entityName> - <fieldName>Attachments</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityConsumer> <name>Links</name> @@ -234,50 +212,6 @@ <entityProvider> <name>DocumentTemplateProvider</name> <documentation>%aditoprj%/entity/DocumentTemplate_entity/entityfields/documenttemplateprovider/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>9c10883d-eb73-4587-b758-693a66367a4c</name> - <entityName>Offer_entity</entityName> - <fieldName>DocumentTemplateTexHeader</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>67f64ed9-bc92-41ba-a040-671a12b7a5f3</name> - <entityName>Offer_entity</entityName> - <fieldName>DocumentTemplateTexFooter</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>57f408e3-aeb7-4006-a20d-287dae1f0922</name> - <entityName>Letter_entity</entityName> - <fieldName>DocumentTemplates</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>233d356c-c81b-41e6-8489-440ca8c81dfa</name> - <entityName>BulkMail_entity</entityName> - <fieldName>Templates</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>196500d7-0b87-4f99-94f8-2e4966e38104</name> - <entityName>SerialLetter_entity</entityName> - <fieldName>Templates</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>93242043-ddc2-414e-84c8-610342b0bd85</name> - <entityName>Order_entity</entityName> - <fieldName>DocumentTemplateTexHeader</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>62dc5f05-4203-40b3-9d34-cbbefc8264ae</name> - <entityName>Order_entity</entityName> - <fieldName>DocumentTemplateTexFooter</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ComingFrom_param</name> diff --git a/entity/DocumentTemplate_entity/entityfields/documenttemplateid/valueProcess.js b/entity/DocumentTemplate_entity/entityfields/documenttemplateid/valueProcess.js index a2378ee42b3638db13001b2890b78669e5c65d9e..10c60ad094014a75c4a8baa7464624b65e4817f1 100644 --- a/entity/DocumentTemplate_entity/entityfields/documenttemplateid/valueProcess.js +++ b/entity/DocumentTemplate_entity/entityfields/documenttemplateid/valueProcess.js @@ -3,5 +3,7 @@ import("system.vars"); import("system.result"); import("system.neon"); -if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) - result.string(util.getNewUUID()); \ No newline at end of file +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) +{ + result.string(util.getNewUUID()); +} \ No newline at end of file diff --git a/entity/DocumentTemplate_entity/recordcontainers/db/onDBDelete.js b/entity/DocumentTemplate_entity/recordcontainers/db/onDBDelete.js index e59e3a882a1511e371559c50a02ae6869b5d3e21..e462cebdbd5ea7a1e9c4e762e6c837302c2b4503 100644 --- a/entity/DocumentTemplate_entity/recordcontainers/db/onDBDelete.js +++ b/entity/DocumentTemplate_entity/recordcontainers/db/onDBDelete.js @@ -5,12 +5,15 @@ import("system.vars"); import("system.db"); import("Attribute_lib"); -var binaryId = newSelect("ID", SqlUtils.getBinariesAlias()) +var binaryIds = newSelect("ID", SqlUtils.getBinariesAlias()) .from("ASYS_BINARIES") .where("ASYS_BINARIES.ROW_ID", "$field.DOCUMENTTEMPLATEID") - .cell(); -if (binaryId) - db.deleteBinary(binaryId, SqlUtils.getBinariesAlias()); + .arrayColumn(); + +binaryIds.forEach(function(pIds) +{ //delete the connected binData + db.deleteBinary(pIds, SqlUtils.getBinariesAlias()); +}); new AttributeRelationQuery(vars.get("$field.DOCUMENTTEMPLATEID"), null, ContextUtils.getCurrentContextId()) .deleteAllAttributes(); diff --git a/entity/DocumentTemplate_entity/recordcontainers/db/onDBUpdate.js b/entity/DocumentTemplate_entity/recordcontainers/db/onDBUpdate.js index dee24321b4a3655b4a253742be82b7ca9c25d66e..868bf99d8db12ec4b84073fcd8e16fa00c30dded 100644 --- a/entity/DocumentTemplate_entity/recordcontainers/db/onDBUpdate.js +++ b/entity/DocumentTemplate_entity/recordcontainers/db/onDBUpdate.js @@ -7,10 +7,13 @@ var rowdata = vars.get("$local.rowdata"); var content = vars.get("$field.Content"); var upload = new FileUpload(vars.get("$field.BINDATA")); var rowId = vars.get("$local.uid"); +var htmlEdit = vars.get("$field.HtmlEdit"); -DocumentTemplateUtils.updateTemplateData(rowId, upload, rowdata["DOCUMENTTEMPLATE.KIND"], content, rowdata["DOCUMENTTEMPLATE.CLASSIFICATION"], rowdata["DOCUMENTTEMPLATE.NAME"]); +if(htmlEdit != null && htmlEdit === DocumentTemplateUtils.getTemplateContent(rowId, upload)) +{ + content = htmlEdit; +} -if(vars.get("$field.HtmlEdit") != null) - DocumentTemplateUtils.updateTemplateData(rowId, upload, rowdata["DOCUMENTTEMPLATE.KIND"], vars.get("$field.HtmlEdit"), rowdata["DOCUMENTTEMPLATE.CLASSIFICATION"], rowdata["DOCUMENTTEMPLATE.NAME"]) - -WorkflowSignalSender.updated(); \ No newline at end of file +DocumentTemplateUtils.updateTemplateData(rowId, upload, rowdata["DOCUMENTTEMPLATE.KIND"], content, + rowdata["DOCUMENTTEMPLATE.CLASSIFICATION"], rowdata["DOCUMENTTEMPLATE.NAME"]); +WorkflowSignalSender.updated(); diff --git a/entity/Document_entity/Document_entity.aod b/entity/Document_entity/Document_entity.aod index db44542e1140ab1217d412a752b85812417d5935..e0f413cd2ffd2a3818b17ec680c34b16ce528adf 100644 --- a/entity/Document_entity/Document_entity.aod +++ b/entity/Document_entity/Document_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Document_entity</name> <title>Document</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -14,14 +14,6 @@ <entityProvider> <name>#PROVIDER</name> <recordContainer>jdito</recordContainer> - <dependencies> - <entityDependency> - <name>6bbed1fb-7f22-420d-988e-7f9413c0b294</name> - <entityName>Task_entity</entityName> - <fieldName>MainDocuments</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>NAME</name> @@ -68,19 +60,6 @@ </onValueChangeTypes> <onValidation>%aditoprj%/entity/Document_entity/entityfields/bindata_upload/onValidation.js</onValidation> </entityField> - <entityActionGroup> - <name>Document_actions</name> - <children> - <entityActionField> - <name>downloadFilesAction</name> - <title>Download</title> - <onActionProcess>%aditoprj%/entity/Document_entity/entityfields/document_actions/children/downloadfilesaction/onActionProcess.js</onActionProcess> - <isObjectAction v="false" /> - <isSelectionAction v="true" /> - <iconId>VAADIN:DOWNLOAD</iconId> - </entityActionField> - </children> - </entityActionGroup> <entityParameter> <name>AssignmentTable_param</name> <expose v="true" /> @@ -124,6 +103,7 @@ <title>Main document</title> <contentType>BOOLEAN</contentType> <placeholderProcess>%aditoprj%/entity/Document_entity/entityfields/is_main_document/placeholderProcess.js</placeholderProcess> + <stateProcess>%aditoprj%/entity/Document_entity/entityfields/is_main_document/stateProcess.js</stateProcess> <valueProcess>%aditoprj%/entity/Document_entity/entityfields/is_main_document/valueProcess.js</valueProcess> <onValueChange>%aditoprj%/entity/Document_entity/entityfields/is_main_document/onValueChange.js</onValueChange> <onValueChangeTypes> @@ -136,114 +116,10 @@ <mandatory v="false" /> <description>PARAMETER</description> </entityParameter> - <entityActionField> - <name>downloadSingleFileAction</name> - <title>Download</title> - <onActionProcess>%aditoprj%/entity/Document_entity/entityfields/downloadsinglefileaction/onActionProcess.js</onActionProcess> - <iconId>VAADIN:DOWNLOAD</iconId> - </entityActionField> <entityProvider> <name>Documents</name> <documentation>%aditoprj%/entity/Document_entity/entityfields/documents/documentation.adoc</documentation> <recordContainer>jdito</recordContainer> - <dependencies> - <entityDependency> - <name>1eae1907-53ea-4d6f-bcf1-772052365020</name> - <entityName>Activity_entity</entityName> - <fieldName>Documents</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>e4f23cab-a238-4123-8f96-1e09b9da3cb7</name> - <entityName>Contract_entity</entityName> - <fieldName>Documents</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>8867e012-ed4e-4c34-9c1f-402acf910190</name> - <entityName>Offer_entity</entityName> - <fieldName>Documents</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>af4d109a-9265-4119-926e-b1fef4b3a2b3</name> - <entityName>Order_entity</entityName> - <fieldName>Documents</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>92765669-c236-44c1-bacf-6d1aef7c1433</name> - <entityName>Organisation_entity</entityName> - <fieldName>Documents</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>0d8ec167-6db1-4a8b-b1d5-8cba3f050bca</name> - <entityName>Person_entity</entityName> - <fieldName>Documents</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>31a82406-7a61-49d9-b75b-731040614ecb</name> - <entityName>Product_entity</entityName> - <fieldName>Documents</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>35ebe1f6-b2a2-4659-8b50-afdbe37269de</name> - <entityName>Salesproject_entity</entityName> - <fieldName>Documents</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>abd400df-a5a4-4750-b3a4-0476b2721161</name> - <entityName>Employee_entity</entityName> - <fieldName>Documents</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>e326d4f9-40fd-42c8-88d6-0c5cefc6fa71</name> - <entityName>Task_entity</entityName> - <fieldName>Documents</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>7a20bd0f-9b1f-4a2b-a823-dbd4220613ca</name> - <entityName>Campaign_entity</entityName> - <fieldName>Documents</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>6ba908f0-e75f-4304-be79-18ed65fa609e</name> - <entityName>Leadimport_entity</entityName> - <fieldName>DocumentC</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>cea7ef62-e3fb-43af-8a11-952d809e8242</name> - <entityName>LeadLog_entity</entityName> - <fieldName>LogDocuments</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>2e6fcf27-ee98-4f7d-a99d-7ce02774076b</name> - <entityName>UserhelpResources_entity</entityName> - <fieldName>Documents</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>b7b14281-6e78-4005-ad5b-14dffc4091f5</name> - <entityName>District_entity</entityName> - <fieldName>Documents</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>e6553781-e306-4335-a929-2c2a8ad8270f</name> - <entityName>DistrictResponsible_entity</entityName> - <fieldName>Documents</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>AssignmentName_param</name> @@ -268,50 +144,6 @@ <entityProvider> <name>MainDocuments</name> <recordContainer>jdito</recordContainer> - <dependencies> - <entityDependency> - <name>87d738a5-5d5e-425e-b013-007371475a38</name> - <entityName>Activity_entity</entityName> - <fieldName>MainDocuments</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>457fd01e-4197-4fca-8079-e2025295f89c</name> - <entityName>Contract_entity</entityName> - <fieldName>MainDocuments</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>ff2d676c-7dd0-47ad-b7f2-ce35b0546e9f</name> - <entityName>Offer_entity</entityName> - <fieldName>MainDocuments</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>75c1875c-5cb6-4cae-8bc7-82c45a2934e5</name> - <entityName>Order_entity</entityName> - <fieldName>MainDocuments</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>8366d11d-4c46-4410-b255-6d196229a534</name> - <entityName>Product_entity</entityName> - <fieldName>MainDocuments</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>dfd2ed28-212f-4135-8f0c-7772f17b6ee6</name> - <entityName>Salesproject_entity</entityName> - <fieldName>MainDocuments</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>056f943d-2ad2-4359-9825-7b445f0267ff</name> - <entityName>SupportTicket_entity</entityName> - <fieldName>MainDocuments</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>Keyword_param</name> @@ -348,14 +180,6 @@ <entityProvider> <name>SingleDocument</name> <titlePlural>Document</titlePlural> - <dependencies> - <entityDependency> - <name>91f87622-d0e8-43c6-99a0-5f9cebf79aaf</name> - <entityName>SerialLetter_entity</entityName> - <fieldName>Documents</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>AssignmentName_param</name> @@ -376,6 +200,56 @@ <name>#PROVIDER_AGGREGATES</name> <useAggregates v="true" /> </entityProvider> + <entityParameter> + <name>MSTTeamId_param</name> + <expose v="true" /> + </entityParameter> + <entityField> + <name>assignmentRowID</name> + <valueProcess>%aditoprj%/entity/Document_entity/entityfields/assignmentrowid/valueProcess.js</valueProcess> + </entityField> + <entityActionGroup> + <name>Document_actions</name> + <title>Document actions</title> + <children> + <entityActionField> + <name>openFileAction</name> + <title>${ACTION_DO_OPEN}</title> + <onActionProcess>%aditoprj%/entity/Document_entity/entityfields/document_actions/children/openfileaction/onActionProcess.js</onActionProcess> + <isMenuAction v="true" /> + <isObjectAction v="false" /> + <selectionType>MULTI</selectionType> + <isSaveAction v="false" /> + <iconId>VAADIN:FOLDER_OPEN</iconId> + <state>AUTO</state> + <stateProcess>%aditoprj%/entity/Document_entity/entityfields/document_actions/children/openfileaction/stateProcess.js</stateProcess> + </entityActionField> + <entityActionField> + <name>downloadFilesAction</name> + <title>Download</title> + <onActionProcess>%aditoprj%/entity/Document_entity/entityfields/document_actions/children/downloadfilesaction/onActionProcess.js</onActionProcess> + <isObjectAction v="false" /> + <selectionType>MULTI</selectionType> + <iconId>VAADIN:DOWNLOAD</iconId> + <state>EDITABLE</state> + </entityActionField> + </children> + </entityActionGroup> + <entityActionField> + <name>openSingleFileAction</name> + <title>${ACTION_DO_OPEN}</title> + <onActionProcess>%aditoprj%/entity/Document_entity/entityfields/opensinglefileaction/onActionProcess.js</onActionProcess> + <selectionType>UNBOUND</selectionType> + <iconId>VAADIN:FOLDER_OPEN</iconId> + <state>AUTO</state> + <stateProcess>%aditoprj%/entity/Document_entity/entityfields/opensinglefileaction/stateProcess.js</stateProcess> + </entityActionField> + <entityActionField> + <name>downloadSingleFileAction</name> + <title>Download</title> + <onActionProcess>%aditoprj%/entity/Document_entity/entityfields/downloadsinglefileaction/onActionProcess.js</onActionProcess> + <iconId>VAADIN:DOWNLOAD</iconId> + </entityActionField> <entityActionGroup> <name>MSTeam</name> <title>MS Teams</title> @@ -390,14 +264,6 @@ </entityActionField> </children> </entityActionGroup> - <entityParameter> - <name>MSTTeamId_param</name> - <expose v="true" /> - </entityParameter> - <entityField> - <name>assignmentRowID</name> - <valueProcess>%aditoprj%/entity/Document_entity/entityfields/assignmentrowid/valueProcess.js</valueProcess> - </entityField> </entityFields> <recordContainers> <jDitoRecordContainer> diff --git a/entity/Document_entity/entityfields/document_actions/children/openfileaction/onActionProcess.js b/entity/Document_entity/entityfields/document_actions/children/openfileaction/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..b33a4fd30ed0c36f55a21b834ff8580c7110ecb5 --- /dev/null +++ b/entity/Document_entity/entityfields/document_actions/children/openfileaction/onActionProcess.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("Document_lib"); + +DocumentUtil.openSelectedDocument(vars.get("$param.AssignmentName_param")); \ No newline at end of file diff --git a/entity/Document_entity/entityfields/document_actions/children/openfileaction/stateProcess.js b/entity/Document_entity/entityfields/document_actions/children/openfileaction/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..d29ab3ca86a4675ae8d22a18bdad6bfd7b3c49f9 --- /dev/null +++ b/entity/Document_entity/entityfields/document_actions/children/openfileaction/stateProcess.js @@ -0,0 +1,11 @@ +import("system.neon"); +import("system.result"); +import("Document_lib"); + +var openFileState; +if(DocumentUtil.canOpenSelectedDocument()) + openFileState = neon.COMPONENTSTATE_EDITABLE; +else + openFileState = neon.COMPONENTSTATE_INVISIBLE; + +result.string(openFileState); \ No newline at end of file diff --git a/entity/Document_entity/entityfields/is_main_document/stateProcess.js b/entity/Document_entity/entityfields/is_main_document/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..e938ad58641a89586b266f8c509d02aefe402237 --- /dev/null +++ b/entity/Document_entity/entityfields/is_main_document/stateProcess.js @@ -0,0 +1,9 @@ +import("system.result"); +import("system.vars"); +import("system.neon"); + +if(vars.get("$field.KEYWORD") == 'PRIVACY_NOTICE') +{ + result.string(neon.COMPONENTSTATE_READONLY); +} + \ No newline at end of file diff --git a/entity/Document_entity/entityfields/is_main_document/valueProcess.js b/entity/Document_entity/entityfields/is_main_document/valueProcess.js index 044f5d99f80a775c390b772a5d8e1cf875c87479..e835769e69dd948edc744ace57110039ee884e0f 100644 --- a/entity/Document_entity/entityfields/is_main_document/valueProcess.js +++ b/entity/Document_entity/entityfields/is_main_document/valueProcess.js @@ -1,7 +1,11 @@ import("system.vars"); import("system.result"); -if(vars.get("$field.KEYWORD") == 'MAINDOCUMENT') - result.string("1"); -else - result.string("0"); \ No newline at end of file +var res = "0" + +if(vars.get("$field.KEYWORD") == 'MAINDOCUMENT' || vars.get("$field.KEYWORD") == 'PRIVACY_NOTICE') +{ + res = "1"; +} + +result.string(res); \ No newline at end of file diff --git a/entity/Document_entity/entityfields/opensinglefileaction/onActionProcess.js b/entity/Document_entity/entityfields/opensinglefileaction/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..b33a4fd30ed0c36f55a21b834ff8580c7110ecb5 --- /dev/null +++ b/entity/Document_entity/entityfields/opensinglefileaction/onActionProcess.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("Document_lib"); + +DocumentUtil.openSelectedDocument(vars.get("$param.AssignmentName_param")); \ No newline at end of file diff --git a/entity/Document_entity/entityfields/opensinglefileaction/stateProcess.js b/entity/Document_entity/entityfields/opensinglefileaction/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..d29ab3ca86a4675ae8d22a18bdad6bfd7b3c49f9 --- /dev/null +++ b/entity/Document_entity/entityfields/opensinglefileaction/stateProcess.js @@ -0,0 +1,11 @@ +import("system.neon"); +import("system.result"); +import("Document_lib"); + +var openFileState; +if(DocumentUtil.canOpenSelectedDocument()) + openFileState = neon.COMPONENTSTATE_EDITABLE; +else + openFileState = neon.COMPONENTSTATE_INVISIBLE; + +result.string(openFileState); \ No newline at end of file diff --git a/entity/Document_entity/recordcontainers/jdito/onInsert.js b/entity/Document_entity/recordcontainers/jdito/onInsert.js index 3f40dd1a2053a6cb5a202c82085fe3c51afda898..db26ea759ab1f6b533aafd3d224dcb7b535ad879 100644 --- a/entity/Document_entity/recordcontainers/jdito/onInsert.js +++ b/entity/Document_entity/recordcontainers/jdito/onInsert.js @@ -6,6 +6,8 @@ import("Document_lib"); var assignmentTable = vars.get("$param.AssignmentTable_param"); var assignmentName = vars.get("$param.AssignmentName_param"); var assignmentRowId = vars.get("$param.AssignmentRowId_param"); +var keyword = vars.get("$param.Keyword_param"); + var bindata = DocumentUtil.getBindataFromUpload(vars.get("$field.BINDATA_UPLOAD")); var filename = vars.get("$field.NAME"); var description = vars.get("$field.DESCRIPTION"); @@ -13,7 +15,7 @@ var alias = db.getCurrentAlias(); var id = vars.get("$field.UID"); if(bindata != '' && filename != ''){ - var keyword = ''; + keyword = (keyword) ? keyword : ''; if(vars.get("$field.IS_MAIN_DOCUMENT") == '1') { keyword = 'MAINDOCUMENT'; } diff --git a/entity/DuplicateOrganisation_entity/DuplicateOrganisation_entity.aod b/entity/DuplicateOrganisation_entity/DuplicateOrganisation_entity.aod new file mode 100644 index 0000000000000000000000000000000000000000..bc20fd9bae6482a9cc37ed0359e09d93cad030a4 --- /dev/null +++ b/entity/DuplicateOrganisation_entity/DuplicateOrganisation_entity.aod @@ -0,0 +1,234 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> + <name>DuplicateOrganisation_entity</name> + <title>Duplicate</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <documentation>%aditoprj%/entity/DuplicateOrganisation_entity/documentation.adoc</documentation> + <grantCreate v="false" /> + <grantUpdate v="false" /> + <grantDelete v="false" /> + <initFilterProcess>%aditoprj%/entity/DuplicateOrganisation_entity/initFilterProcess.js</initFilterProcess> + <titlePlural>Duplicates</titlePlural> + <recordContainer>db</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + <targetContextField>targetContext</targetContextField> + <targetIdField>CONTACTID</targetIdField> + </entityProvider> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityField> + <name>CONTACTID</name> + <linkedContext>Organisation</linkedContext> + </entityField> + <entityField> + <name>ORGNAME</name> + <title>Name</title> + <linkedContext>Organisation</linkedContext> + </entityField> + <entityParameter> + <name>Id_param</name> + <valueProcess>%aditoprj%/entity/DuplicateOrganisation_entity/entityfields/id_param/valueProcess.js</valueProcess> + <mandatory v="true" /> + </entityParameter> + <entityParameter> + <name>Obj_param</name> + <expose v="true" /> + <mandatory v="true" /> + <description>Contains a name value object of all variables that can be used to scan for duplicates</description> + </entityParameter> + <entityActionGroup> + <name>filterActions</name> + <children> + <entityActionField> + <name>ignoreDuplicates</name> + <title>${IGNORE_DUPLICATE}</title> + <onActionProcess>%aditoprj%/entity/DuplicateOrganisation_entity/entityfields/filteractions/children/ignoreduplicates/onActionProcess.js</onActionProcess> + <isObjectAction v="false" /> + <selectionType>MULTI</selectionType> + <iconId>VAADIN:CLOSE</iconId> + <titleProcess>%aditoprj%/entity/DuplicateOrganisation_entity/entityfields/filteractions/children/ignoreduplicates/titleProcess.js</titleProcess> + </entityActionField> + <entityActionField> + <name>mergeselectedintocurrent</name> + <title>Integrate selected into current contact</title> + <onActionProcess>%aditoprj%/entity/DuplicateOrganisation_entity/entityfields/filteractions/children/mergeselectedintocurrent/onActionProcess.js</onActionProcess> + <selectionType>MULTI</selectionType> + <iconId>NEON:IMPORT</iconId> + </entityActionField> + <entityActionField> + <name>mergecurrentintoselected</name> + <title>Integrate current into selected contact</title> + <onActionProcess>%aditoprj%/entity/DuplicateOrganisation_entity/entityfields/filteractions/children/mergecurrentintoselected/onActionProcess.js</onActionProcess> + <selectionType>MULTI</selectionType> + <iconId>NEON:EXPORT</iconId> + </entityActionField> + </children> + </entityActionGroup> + <entityField> + <name>STATUS</name> + <title>Status</title> + <consumer>KeywordContactStates</consumer> + </entityField> + <entityField> + <name>CUSTOMERCODE</name> + <title>Customercode</title> + </entityField> + <entityConsumer> + <name>KeywordContactStates</name> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/DuplicateOrganisation_entity/entityfields/keywordcontactstates/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityField> + <name>TYPE</name> + <title>Type</title> + <consumer>KeywordOrganisationTypes</consumer> + </entityField> + <entityField> + <name>STANDARD_EMAIL_COMMUNICATION</name> + <title>E-Mail</title> + </entityField> + <entityField> + <name>STANDARD_PHONE_COMMUNICATION</name> + <title>Phone</title> + </entityField> + <entityField> + <name>STANDARD_ADDRESS</name> + <title>Address</title> + </entityField> + <entityConsumer> + <name>KeywordOrganisationTypes</name> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/DuplicateOrganisation_entity/entityfields/keywordorganisationtypes/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityField> + <name>targetContext</name> + <valueProcess>%aditoprj%/entity/DuplicateOrganisation_entity/entityfields/targetcontext/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>DUPLICATE</name> + <title>Duplicate</title> + <contentType>BOOLEAN</contentType> + </entityField> + <entityField> + <name>PICTURE</name> + <title>Picture</title> + <contentType>IMAGE</contentType> + <displayValueProcess>%aditoprj%/entity/DuplicateOrganisation_entity/entityfields/picture/displayValueProcess.js</displayValueProcess> + </entityField> + </entityFields> + <recordContainers> + <dbRecordContainer> + <name>db</name> + <isReadOnly v="true" /> + <fromClauseProcess>%aditoprj%/entity/DuplicateOrganisation_entity/recordcontainers/db/fromClauseProcess.js</fromClauseProcess> + <conditionProcess>%aditoprj%/entity/DuplicateOrganisation_entity/recordcontainers/db/conditionProcess.js</conditionProcess> + <alias>Data_alias</alias> + <recordFieldMappings> + <dbRecordFieldMapping> + <name>CONTACTID.value</name> + <recordfield>CONTACT.CONTACTID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>ORGNAME.value</name> + <recordfield>CONTACT.CONTACTID</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>ORGNAME.displayValue</name> + <recordfield>ORGANISATION.NAME</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>CUSTOMERCODE.value</name> + <recordfield>ORGANISATION.CUSTOMERCODE</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>STATUS.value</name> + <recordfield>CONTACT.STATUS</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>STATUS.displayValue</name> + <expression>%aditoprj%/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js</expression> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>STANDARD_EMAIL_COMMUNICATION.value</name> + <expression>%aditoprj%/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js</expression> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>STANDARD_PHONE_COMMUNICATION.value</name> + <expression>%aditoprj%/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js</expression> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>STANDARD_ADDRESS.value</name> + <recordfield>ADDRESS.ADDRESS</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>TYPE.value</name> + <recordfield>ORGANISATION.KIND</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>TYPE.displayValue</name> + <expression>%aditoprj%/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/type.displayvalue/expression.js</expression> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DUPLICATE.value</name> + <expression>%aditoprj%/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/duplicate.value/expression.js</expression> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>PICTURE.value</name> + <recordfield>ORGANISATION.PICTURE</recordfield> + </dbRecordFieldMapping> + </recordFieldMappings> + <linkInformation> + <linkInformation> + <name>49ea0faa-d04e-4d9d-b489-5a7b815e9e89</name> + <tableName>ORGANISATION</tableName> + <primaryKey>ORGANISATIONID</primaryKey> + <isUIDTable v="false" /> + <readonly v="true" /> + </linkInformation> + <linkInformation> + <name>523f6891-14ee-49ba-952d-7d5981e14b0c</name> + <tableName>CONTACT</tableName> + <primaryKey>CONTACTID</primaryKey> + <isUIDTable v="true" /> + <readonly v="true" /> + </linkInformation> + <linkInformation> + <name>6b73b998-a194-4fb6-8659-42eac09e20cc</name> + <tableName>ADDRESS</tableName> + <primaryKey>ADDRESSID</primaryKey> + <isUIDTable v="false" /> + <readonly v="true" /> + </linkInformation> + </linkInformation> + </dbRecordContainer> + </recordContainers> +</entity> diff --git a/entity/DuplicateOrganisation_entity/documentation.adoc b/entity/DuplicateOrganisation_entity/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..73695092a6b0fcb6d5afaa09001147aad6bc69f8 --- /dev/null +++ b/entity/DuplicateOrganisation_entity/documentation.adoc @@ -0,0 +1,17 @@ += DuplicateOrganisation_entity + +== Overview + +Shows the duplicates of a record. +The views are only referenced in the OrganisationMain_view. + +This entity is used to show all duplicates of an organisation, merge duplicates to one record and to ignore duplicates. + +==== Actions + +* ignoreDuplicates: The selected record is marked as no duplicate. +* mergeselectedintocurrent: The selected record will be merged into the current opened one. +* mergecurrentintoselected: Same behavior as with the mergeselectedintocurrent action only the other way. + +== AID +More information on duplicates can be found in the AID60 or in the documentation of the DuplicateScanner_entity \ No newline at end of file diff --git a/entity/DuplicateOrganisation_entity/entityfields/filteractions/children/ignoreduplicates/onActionProcess.js b/entity/DuplicateOrganisation_entity/entityfields/filteractions/children/ignoreduplicates/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..a070181a8e991188f1a7ff62ab87423364cdb5a6 --- /dev/null +++ b/entity/DuplicateOrganisation_entity/entityfields/filteractions/children/ignoreduplicates/onActionProcess.js @@ -0,0 +1,7 @@ +import("system.neon"); +import("system.vars"); +import("system.result"); +import("DuplicateScanner_lib"); + +DuplicateScannerUtils.updateIgnored("Organisation_entity", vars.get("$param.Id_param"), vars.get("$sys.selection"), parseInt(vars.get("$field.DUPLICATE"))); +neon.refreshAll(); // Update the rows, because UNRELATEDDUPLICATES wont trigger a refresh even with write entities diff --git a/entity/DuplicateOrganisation_entity/entityfields/filteractions/children/ignoreduplicates/titleProcess.js b/entity/DuplicateOrganisation_entity/entityfields/filteractions/children/ignoreduplicates/titleProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..4c5ccfffeb0e7b5efc940eba237fbdc99ab9b603 --- /dev/null +++ b/entity/DuplicateOrganisation_entity/entityfields/filteractions/children/ignoreduplicates/titleProcess.js @@ -0,0 +1,9 @@ +import("system.translate"); +import("system.vars"); +import("system.result"); + +result.string( + parseInt(vars.get("$field.DUPLICATE")) ? + translate.text("${IGNORE_DUPLICATE}") : + translate.text("${UNIGNORE_DUPLICATE}") +); diff --git a/entity/Organisation_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/onActionProcess.js b/entity/DuplicateOrganisation_entity/entityfields/filteractions/children/mergecurrentintoselected/onActionProcess.js similarity index 51% rename from entity/Organisation_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/onActionProcess.js rename to entity/DuplicateOrganisation_entity/entityfields/filteractions/children/mergecurrentintoselected/onActionProcess.js index 29dab7b72c8898044cfabd79426552733f9f7dc4..b23396c01c1214f15be0e2bae435e1e9da91c702 100644 --- a/entity/Organisation_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/onActionProcess.js +++ b/entity/DuplicateOrganisation_entity/entityfields/filteractions/children/mergecurrentintoselected/onActionProcess.js @@ -1,20 +1,29 @@ +import("system.translate"); +import("system.question"); import("Employee_lib"); import("system.vars"); import("system.neon"); -import("DuplicateScanner_lib"); +import("DuplicateMerge_lib"); -let sourceContactId = vars.get("$param.DuplicateCurrentContactId_param"); +if(vars.get("$sys.selection").length == 1) +{ +let sourceContactId = vars.get("$param.Id_param"); let targetContactId = vars.get("$sys.selection")[0]; //todo the actual merge ought to happen in a separate view where the contact infos can be merged manually by the user. -let mergeSuccess = DuplicateScannerUtils.mergeOrganisation(sourceContactId, targetContactId); +let mergeSuccess = DuplicateMergeUtils.mergeOrganisation(sourceContactId, targetContactId); if(mergeSuccess) { let currentContactId = EmployeeUtils.getCurrentContactId(); if(currentContactId == null) currentContactId = ""; - DuplicateScannerUtils.createMergeSuccessActivity(sourceContactId, targetContactId, currentContactId, "Organisation"); + DuplicateMergeUtils.createMergeSuccessActivity(sourceContactId, targetContactId, currentContactId, "Organisation"); neon.openContext("Organisation", "OrganisationMain_view", [targetContactId], neon.OPERATINGSTATE_VIEW, null) -} \ No newline at end of file +} +} +else +{ + question.showMessage(translate.text("Please select only one element")); +} diff --git a/entity/Organisation_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/onActionProcess.js b/entity/DuplicateOrganisation_entity/entityfields/filteractions/children/mergeselectedintocurrent/onActionProcess.js similarity index 61% rename from entity/Organisation_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/onActionProcess.js rename to entity/DuplicateOrganisation_entity/entityfields/filteractions/children/mergeselectedintocurrent/onActionProcess.js index 5ac58579f1326724bf4e6340a751ee86b12850b4..ac1a9260b226c00b472e5222a97c0c4f8286bfad 100644 --- a/entity/Organisation_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/onActionProcess.js +++ b/entity/DuplicateOrganisation_entity/entityfields/filteractions/children/mergeselectedintocurrent/onActionProcess.js @@ -1,22 +1,31 @@ +import("system.translate"); +import("system.question"); import("Employee_lib"); import("system.vars"); import("system.neon"); -import("DuplicateScanner_lib"); +import("DuplicateMerge_lib"); -let targetContactId = vars.get("$param.DuplicateCurrentContactId_param"); +if(vars.get("$sys.selection").length == 1) +{ +let targetContactId = vars.get("$param.Id_param"); let sourceContactId = vars.get("$sys.selection")[0]; //todo the actual merge ought to happen in a separate view where the contact infos can be merged manually by the user. -let mergeSuccess = DuplicateScannerUtils.mergeOrganisation(sourceContactId, targetContactId); +let mergeSuccess = DuplicateMergeUtils.mergeOrganisation(sourceContactId, targetContactId); if(mergeSuccess) { let currentContactId = EmployeeUtils.getCurrentContactId(); if(currentContactId == null) currentContactId = ""; - DuplicateScannerUtils.createMergeSuccessActivity(sourceContactId, targetContactId, currentContactId, "Organisation"); + DuplicateMergeUtils.createMergeSuccessActivity(sourceContactId, targetContactId, currentContactId, "Organisation"); //neon.refresh() with no fields will refresh the current image (and all sub images) but NOT the preview. neon.refreshAll() would refresh both, //why it would lead to an error because it's trying to load the already opened preview of the duplicateContact which just got deleted //and does not exist any more which results in an exception neon.refresh(); -} \ No newline at end of file +} +} +else +{ + question.showMessage(translate.text("Please select only one element")); +} diff --git a/entity/DuplicateOrganisation_entity/entityfields/id_param/valueProcess.js b/entity/DuplicateOrganisation_entity/entityfields/id_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..bffe18eb097c82b9fa662880ad23d5d1ee32f7ff --- /dev/null +++ b/entity/DuplicateOrganisation_entity/entityfields/id_param/valueProcess.js @@ -0,0 +1,5 @@ +import("system.result"); +import("system.vars"); + +var jsonObj = JSON.parse(vars.get("$param.Obj_param")); +result.string(jsonObj["CONTACTID"]); diff --git a/entity/DuplicateOrganisation_entity/entityfields/keywordcontactstates/children/containername_param/valueProcess.js b/entity/DuplicateOrganisation_entity/entityfields/keywordcontactstates/children/containername_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..43e8d27c6a6cdd11f092f8b404a97dc237577a38 --- /dev/null +++ b/entity/DuplicateOrganisation_entity/entityfields/keywordcontactstates/children/containername_param/valueProcess.js @@ -0,0 +1,5 @@ +import("system.result"); +import("Keyword_lib"); +import("KeywordRegistry_basic"); + +result.string($KeywordRegistry.contactStatus()); diff --git a/entity/DuplicateOrganisation_entity/entityfields/keywordorganisationtypes/children/containername_param/valueProcess.js b/entity/DuplicateOrganisation_entity/entityfields/keywordorganisationtypes/children/containername_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..9f418ef99a76f73e9ce0e06b98eb299c5431d63c --- /dev/null +++ b/entity/DuplicateOrganisation_entity/entityfields/keywordorganisationtypes/children/containername_param/valueProcess.js @@ -0,0 +1,5 @@ +import("system.result"); +import("Keyword_lib"); +import("KeywordRegistry_basic"); + +result.string($KeywordRegistry.organisationType()); diff --git a/entity/DuplicateOrganisation_entity/entityfields/picture/displayValueProcess.js b/entity/DuplicateOrganisation_entity/entityfields/picture/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..aa69acba15ba5aa0635f9e0a4a391a04c5819c2f --- /dev/null +++ b/entity/DuplicateOrganisation_entity/entityfields/picture/displayValueProcess.js @@ -0,0 +1,11 @@ +import("system.result"); +import("system.vars"); + +if (vars.get("$field.PICTURE")) +{ + result.string(vars.get("$field.PICTURE")); +} +else +{ + result.string("TEXT:" + vars.getString("$field.ORGNAME.displayValue").trim()); +} diff --git a/entity/DuplicateOrganisation_entity/entityfields/targetcontext/valueProcess.js b/entity/DuplicateOrganisation_entity/entityfields/targetcontext/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..84e4b61c2566393178456e74db7e36eb6abdaf80 --- /dev/null +++ b/entity/DuplicateOrganisation_entity/entityfields/targetcontext/valueProcess.js @@ -0,0 +1,4 @@ +import("system.result"); +import("Context_lib"); + +result.string(ContextUtils.getContextName("Organisation")); diff --git a/entity/DuplicateOrganisation_entity/initFilterProcess.js b/entity/DuplicateOrganisation_entity/initFilterProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..92797e84dbb193011bf821bb4ecc828681a2d414 --- /dev/null +++ b/entity/DuplicateOrganisation_entity/initFilterProcess.js @@ -0,0 +1,15 @@ +import("system.translate"); +import("system.result"); + +result.string(JSON.stringify({ + type: "group", + operator: "AND", + childs: [{ + type: "row", + name: "DUPLICATE", + operator: "EQUAL", + contenttype: "BOOLEAN", + key: "1", + value: translate.text("Yes") + }] +})); diff --git a/entity/DuplicateOrganisation_entity/recordcontainers/db/conditionProcess.js b/entity/DuplicateOrganisation_entity/recordcontainers/db/conditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..e53fabe5b3f46c2048bdb6500df6f37ca9300d61 --- /dev/null +++ b/entity/DuplicateOrganisation_entity/recordcontainers/db/conditionProcess.js @@ -0,0 +1,8 @@ +import("system.vars"); +import("Sql_lib"); +import("DuplicateScanner_lib"); +import("system.result"); + +var duplicateIds = DuplicateScannerUtils.getDuplicateIdsByEntityObj("Organisation_entity", JSON.parse(vars.get("$param.Obj_param"))); +duplicateIds.push("-"); // workaround empty arrays +result.string(newWhere("CONTACT.CONTACTID", duplicateIds, SqlBuilder.IN()).toString()); diff --git a/entity/DuplicateOrganisation_entity/recordcontainers/db/fromClauseProcess.js b/entity/DuplicateOrganisation_entity/recordcontainers/db/fromClauseProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..5412501fe024b394c16299840fb75b9997368d1f --- /dev/null +++ b/entity/DuplicateOrganisation_entity/recordcontainers/db/fromClauseProcess.js @@ -0,0 +1,14 @@ +import("Sql_lib"); +import("system.vars"); +import("system.result"); + +var unrelatedCondition = newWhere("UNRELATEDDUPLICATES.DUPLICATETYPE", "Organisation_entity") + .and("UNRELATEDDUPLICATES.SOURCEDUPLICATEID", vars.get("$param.Id_param")) + .and("UNRELATEDDUPLICATES.UNRELATEDDUPLICATEID = CONTACT.CONTACTID"); + +result.string( + "ORGANISATION " + + "join CONTACT on (ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID) " + + "left join ADDRESS on (ADDRESS.ADDRESSID = CONTACT.ADDRESS_ID) " + + "left join UNRELATEDDUPLICATES on " + unrelatedCondition.toString() +); diff --git a/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/duplicate.value/expression.js b/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/duplicate.value/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..8f7063b2ac8e637e6618ccc1ff745653daf0b339 --- /dev/null +++ b/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/duplicate.value/expression.js @@ -0,0 +1,7 @@ +import("system.result"); +import("Sql_lib"); + +var statement = SqlBuilder.caseStatement() + .when("UNRELATEDDUPLICATES.UNRELATEDDUPLICATEID is not null") + .thenString("0").elseString("1"); +result.string(statement); diff --git a/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js b/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..5827c59c416c332ba9281a60756f919fcb75c0a2 --- /dev/null +++ b/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js @@ -0,0 +1,4 @@ +import("system.result"); +import("Communication_lib"); + +result.string(CommUtil.getStandardSubSqlMail()); diff --git a/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js b/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..0f438c2535b21180c5ad03637de90f577f2c736e --- /dev/null +++ b/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js @@ -0,0 +1,4 @@ +import("system.result"); +import("Communication_lib"); + +result.string(CommUtil.getStandardSubSqlPhone()); diff --git a/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js b/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..b63b2d57742bc29e8f35acd8bae539ec0a560c9c --- /dev/null +++ b/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js @@ -0,0 +1,6 @@ +import("system.result"); +import("Keyword_lib"); +import("KeywordRegistry_basic"); + +var sql = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.contactStatus(), "CONTACT.STATUS"); +result.string(sql); diff --git a/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/type.displayvalue/expression.js b/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/type.displayvalue/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..7ab8eb06526a4f6be6502246408fe7891c4dc46d --- /dev/null +++ b/entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/type.displayvalue/expression.js @@ -0,0 +1,6 @@ +import("system.result"); +import("Keyword_lib"); +import("KeywordRegistry_basic"); + +var sql = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.organisationType(), "ORGANISATION.KIND"); +result.string(sql); diff --git a/entity/DuplicatePerson_entity/DuplicatePerson_entity.aod b/entity/DuplicatePerson_entity/DuplicatePerson_entity.aod new file mode 100644 index 0000000000000000000000000000000000000000..09b341ca2b19374f703ac6008f1189d21904f091 --- /dev/null +++ b/entity/DuplicatePerson_entity/DuplicatePerson_entity.aod @@ -0,0 +1,257 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> + <name>DuplicatePerson_entity</name> + <title>Duplicate</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <documentation>%aditoprj%/entity/DuplicatePerson_entity/documentation.adoc</documentation> + <grantCreate v="false" /> + <grantUpdate v="false" /> + <grantDelete v="false" /> + <initFilterProcess>%aditoprj%/entity/DuplicatePerson_entity/initFilterProcess.js</initFilterProcess> + <titlePlural>Duplicates</titlePlural> + <recordContainer>db</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + <targetContextField>parentContext</targetContextField> + <targetIdField>CONTACTID</targetIdField> + </entityProvider> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityParameter> + <name>Obj_param</name> + <expose v="true" /> + <mandatory v="true" /> + <description>Contains a name value object of all variables that can be used to scan for duplicates</description> + </entityParameter> + <entityActionGroup> + <name>filterActions</name> + <children> + <entityActionField> + <name>ignoreDuplicates</name> + <title>${IGNORE_DUPLICATE}</title> + <onActionProcess>%aditoprj%/entity/DuplicatePerson_entity/entityfields/filteractions/children/ignoreduplicates/onActionProcess.js</onActionProcess> + <isObjectAction v="false" /> + <selectionType>MULTI</selectionType> + <iconId>VAADIN:CLOSE</iconId> + <titleProcess>%aditoprj%/entity/DuplicatePerson_entity/entityfields/filteractions/children/ignoreduplicates/titleProcess.js</titleProcess> + </entityActionField> + <entityActionField> + <name>mergeselectedintocurrent</name> + <title>Integrate selected into current contact</title> + <onActionProcess>%aditoprj%/entity/DuplicatePerson_entity/entityfields/filteractions/children/mergeselectedintocurrent/onActionProcess.js</onActionProcess> + <selectionType>MULTI</selectionType> + <iconId>NEON:IMPORT</iconId> + </entityActionField> + <entityActionField> + <name>mergecurrentintoselected</name> + <title>Integrate current into selected contact</title> + <onActionProcess>%aditoprj%/entity/DuplicatePerson_entity/entityfields/filteractions/children/mergecurrentintoselected/onActionProcess.js</onActionProcess> + <selectionType>MULTI</selectionType> + <iconId>NEON:EXPORT</iconId> + </entityActionField> + </children> + </entityActionGroup> + <entityField> + <name>CONTACTID</name> + <linkedContext>Person</linkedContext> + </entityField> + <entityParameter> + <name>Id_param</name> + <valueProcess>%aditoprj%/entity/DuplicatePerson_entity/entityfields/id_param/valueProcess.js</valueProcess> + <mandatory v="true" /> + </entityParameter> + <entityField> + <name>FIRSTNAME</name> + <title>Firstname</title> + </entityField> + <entityField> + <name>LASTNAME</name> + <title>Lastname</title> + <linkedContext>Person</linkedContext> + </entityField> + <entityField> + <name>MIDDLENAME</name> + <title>Middlename</title> + </entityField> + <entityField> + <name>LETTERSALUTATION</name> + <title>Salutation</title> + </entityField> + <entityField> + <name>TITLE</name> + <title>Title</title> + </entityField> + <entityField> + <name>PICTURE</name> + <title>Picture</title> + <contentType>IMAGE</contentType> + <displayValueProcess>%aditoprj%/entity/DuplicatePerson_entity/entityfields/picture/displayValueProcess.js</displayValueProcess> + </entityField> + <entityField> + <name>STANDARD_EMAIL_COMMUNICATION</name> + <title>E-Mail</title> + </entityField> + <entityField> + <name>STANDARD_PHONE_COMMUNICATION</name> + <title>Phone</title> + </entityField> + <entityField> + <name>ORGANISATION_ID</name> + <title>Company</title> + <consumer>Organisations</consumer> + <linkedContext>Organisation</linkedContext> + </entityField> + <entityConsumer> + <name>Organisations</name> + <dependency> + <name>dependency</name> + <entityName>Organisation_entity</entityName> + <fieldName>Organisations</fieldName> + </dependency> + </entityConsumer> + <entityField> + <name>STATUS</name> + <title>Status</title> + <consumer>KeywordContactStates</consumer> + </entityField> + <entityConsumer> + <name>KeywordContactStates</name> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/DuplicatePerson_entity/entityfields/keywordcontactstates/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityField> + <name>STANDARD_ADDRESS</name> + <title>Address</title> + </entityField> + <entityField> + <name>parentContext</name> + <valueProcess>%aditoprj%/entity/DuplicatePerson_entity/entityfields/parentcontext/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>DUPLICATE</name> + <title>Duplicate</title> + <contentType>BOOLEAN</contentType> + </entityField> + </entityFields> + <recordContainers> + <dbRecordContainer> + <name>db</name> + <isReadOnly v="true" /> + <fromClauseProcess>%aditoprj%/entity/DuplicatePerson_entity/recordcontainers/db/fromClauseProcess.js</fromClauseProcess> + <conditionProcess>%aditoprj%/entity/DuplicatePerson_entity/recordcontainers/db/conditionProcess.js</conditionProcess> + <alias>Data_alias</alias> + <recordFieldMappings> + <dbRecordFieldMapping> + <name>CONTACTID.value</name> + <recordfield>CONTACT.CONTACTID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>MIDDLENAME.value</name> + <recordfield>PERSON.MIDDLENAME</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>LASTNAME.value</name> + <recordfield>CONTACT.CONTACTID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>FIRSTNAME.value</name> + <recordfield>PERSON.FIRSTNAME</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>LETTERSALUTATION.value</name> + <recordfield>PERSON.SALUTATION</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>LASTNAME.displayValue</name> + <recordfield>PERSON.LASTNAME</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>TITLE.value</name> + <recordfield>PERSON.TITLE</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>PICTURE.value</name> + <recordfield>PERSON.PICTURE</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>STANDARD_PHONE_COMMUNICATION.value</name> + <expression>%aditoprj%/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js</expression> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>STANDARD_EMAIL_COMMUNICATION.value</name> + <expression>%aditoprj%/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js</expression> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>ORGANISATION_ID.value</name> + <expression>%aditoprj%/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/organisation_id.value/expression.js</expression> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>STATUS.value</name> + <recordfield>CONTACT.STATUS</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>STATUS.displayValue</name> + <expression>%aditoprj%/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js</expression> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>STANDARD_ADDRESS.value</name> + <recordfield>ADDRESS.ADDRESS</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>ORGANISATION_ID.displayValue</name> + <expression>%aditoprj%/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/organisation_id.displayvalue/expression.js</expression> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DUPLICATE.value</name> + <expression>%aditoprj%/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/duplicate.value/expression.js</expression> + <isFilterable v="true" /> + </dbRecordFieldMapping> + </recordFieldMappings> + <linkInformation> + <linkInformation> + <name>93f86a28-8c69-491e-8f62-79f5840e23a5</name> + <tableName>PERSON</tableName> + <primaryKey>PERSONID</primaryKey> + <isUIDTable v="false" /> + <readonly v="true" /> + </linkInformation> + <linkInformation> + <name>c989f19d-d211-4f54-9ea5-ddf16e5a13a0</name> + <tableName>CONTACT</tableName> + <primaryKey>CONTACTID</primaryKey> + <isUIDTable v="true" /> + <readonly v="true" /> + </linkInformation> + <linkInformation> + <name>7ff69154-f1ff-4e33-8cd4-5a88e3b18269</name> + <tableName>ADDRESS</tableName> + <primaryKey>ADDRESSID</primaryKey> + <isUIDTable v="false" /> + <readonly v="true" /> + </linkInformation> + </linkInformation> + </dbRecordContainer> + </recordContainers> +</entity> diff --git a/entity/DuplicatePerson_entity/documentation.adoc b/entity/DuplicatePerson_entity/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..8d2e8be6b145c97ddff336e74921c2d77918c3d2 --- /dev/null +++ b/entity/DuplicatePerson_entity/documentation.adoc @@ -0,0 +1,17 @@ += DuplicateOrganisation_entity + +== Overview + +Shows the duplicates of a record. +The views are only referenced in the PersonMain_view. + +This entity is used to show all duplicates of a person, merge duplicates to one record and to ignore duplicates. + +==== Actions + +* ignoreDuplicates: The selected record is marked as no duplicate. +* mergeselectedintocurrent: The selected record will be merged into the current opened one. +* mergecurrentintoselected: Same behavior as with the mergeselectedintocurrent action only the other way. + +== AID +More information on duplicates can be found in the AID60 or in the documentation of the DuplicateScanner_entity diff --git a/entity/DuplicatePerson_entity/entityfields/filteractions/children/ignoreduplicates/onActionProcess.js b/entity/DuplicatePerson_entity/entityfields/filteractions/children/ignoreduplicates/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..69c03d7bc979275e8276e8bc9700787e0e513f13 --- /dev/null +++ b/entity/DuplicatePerson_entity/entityfields/filteractions/children/ignoreduplicates/onActionProcess.js @@ -0,0 +1,7 @@ +import("system.neon"); +import("system.vars"); +import("system.result"); +import("DuplicateScanner_lib"); + +DuplicateScannerUtils.updateIgnored("Person_entity", vars.get("$param.Id_param"), vars.get("$sys.selection"), parseInt(vars.get("$field.DUPLICATE"))); +neon.refreshAll(); // Update the rows, because UNRELATEDDUPLICATES wont trigger a refresh even with write entities diff --git a/entity/DuplicatePerson_entity/entityfields/filteractions/children/ignoreduplicates/titleProcess.js b/entity/DuplicatePerson_entity/entityfields/filteractions/children/ignoreduplicates/titleProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..4c5ccfffeb0e7b5efc940eba237fbdc99ab9b603 --- /dev/null +++ b/entity/DuplicatePerson_entity/entityfields/filteractions/children/ignoreduplicates/titleProcess.js @@ -0,0 +1,9 @@ +import("system.translate"); +import("system.vars"); +import("system.result"); + +result.string( + parseInt(vars.get("$field.DUPLICATE")) ? + translate.text("${IGNORE_DUPLICATE}") : + translate.text("${UNIGNORE_DUPLICATE}") +); diff --git a/entity/Person_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/onActionProcess.js b/entity/DuplicatePerson_entity/entityfields/filteractions/children/mergecurrentintoselected/onActionProcess.js similarity index 60% rename from entity/Person_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/onActionProcess.js rename to entity/DuplicatePerson_entity/entityfields/filteractions/children/mergecurrentintoselected/onActionProcess.js index d5f864db525910dd0635ee2ab84279e3346599b6..8e96e7fcea38ebc093da5fceaaa9ad34a9a5c7a9 100644 --- a/entity/Person_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/onActionProcess.js +++ b/entity/DuplicatePerson_entity/entityfields/filteractions/children/mergecurrentintoselected/onActionProcess.js @@ -1,14 +1,18 @@ +import("system.translate"); +import("system.question"); import("system.tools"); import("Employee_lib"); import("system.vars"); import("system.neon"); -import("DuplicateScanner_lib"); +import("DuplicateMerge_lib"); -var sourceContactId = vars.get("$param.DuplicateCurrentContactId_param"); +if(vars.get("$sys.selection").length == 1) +{ +var sourceContactId = vars.get("$param.Id_param"); var targetContactId = vars.get("$sys.selection")[0]; //todo the actual merge ought to happen in a separate view where the contact infos can be merged manually by the user. -var mergeSuccess = DuplicateScannerUtils.mergePerson(sourceContactId, targetContactId); +var mergeSuccess = DuplicateMergeUtils.mergePerson(sourceContactId, targetContactId); if(mergeSuccess) { @@ -21,7 +25,12 @@ if(mergeSuccess) var currentContactId = EmployeeUtils.getCurrentContactId(); if(currentContactId == null) currentContactId = ""; - DuplicateScannerUtils.createMergeSuccessActivity(sourceContactId, targetContactId, currentContactId, "Person"); + DuplicateMergeUtils.createMergeSuccessActivity(sourceContactId, targetContactId, currentContactId, "Person"); neon.openContext("Person", "PersonMain_view", [targetContactId], neon.OPERATINGSTATE_VIEW, null) -} \ No newline at end of file +} +} +else +{ + question.showMessage(translate.text("Please select only one element")); +} diff --git a/entity/Person_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/onActionProcess.js b/entity/DuplicatePerson_entity/entityfields/filteractions/children/mergeselectedintocurrent/onActionProcess.js similarity index 70% rename from entity/Person_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/onActionProcess.js rename to entity/DuplicatePerson_entity/entityfields/filteractions/children/mergeselectedintocurrent/onActionProcess.js index 6a9f2ac39a7238d7dd5fbaec53e41c57eabec241..30d97b1c8023db93074e3cee7b3f30487e920aad 100644 --- a/entity/Person_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/onActionProcess.js +++ b/entity/DuplicatePerson_entity/entityfields/filteractions/children/mergeselectedintocurrent/onActionProcess.js @@ -1,3 +1,5 @@ +import("system.translate"); +import("system.question"); import("system.tools"); import("system.db"); import("Employee_lib"); @@ -5,14 +7,16 @@ import("KeywordRegistry_basic"); import("ActivityTask_lib"); import("system.vars"); import("system.neon"); -import("DuplicateScanner_lib"); +import("DuplicateMerge_lib"); -var targetContactId = vars.get("$param.DuplicateCurrentContactId_param"); +if(vars.get("$sys.selection").length == 1) +{ +var targetContactId = vars.get("$param.Id_param"); var sourceContactIdArray = vars.get("$sys.selection"); var sourceContactId = sourceContactIdArray[0]; //todo the actual merge ought to happen in a separate view where the contact infos can be merged manually by the user. -var mergeSuccess = DuplicateScannerUtils.mergePerson(sourceContactId, targetContactId); +var mergeSuccess = DuplicateMergeUtils.mergePerson(sourceContactId, targetContactId); if(mergeSuccess) { @@ -25,9 +29,14 @@ if(mergeSuccess) var currentContactId = EmployeeUtils.getCurrentContactId(); if(currentContactId == null) currentContactId = ""; - DuplicateScannerUtils.createMergeSuccessActivity(sourceContactId, targetContactId, currentContactId, "Person"); + DuplicateMergeUtils.createMergeSuccessActivity(sourceContactId, targetContactId, currentContactId, "Person"); //neon.refresh() with no fields will refresh the current image (and all sub images) but NOT the preview. neon.refreshAll() would refresh both, //why it would lead to an error because it's trying to load the already opened preview of the duplicateContact which just got deleted //and does not exist any more which results in an exception neon.refresh(); -} \ No newline at end of file +} +} +else +{ + question.showMessage(translate.text("Please select only one element")); +} diff --git a/entity/DuplicatePerson_entity/entityfields/id_param/valueProcess.js b/entity/DuplicatePerson_entity/entityfields/id_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..bffe18eb097c82b9fa662880ad23d5d1ee32f7ff --- /dev/null +++ b/entity/DuplicatePerson_entity/entityfields/id_param/valueProcess.js @@ -0,0 +1,5 @@ +import("system.result"); +import("system.vars"); + +var jsonObj = JSON.parse(vars.get("$param.Obj_param")); +result.string(jsonObj["CONTACTID"]); diff --git a/entity/DuplicatePerson_entity/entityfields/keywordcontactstates/children/containername_param/valueProcess.js b/entity/DuplicatePerson_entity/entityfields/keywordcontactstates/children/containername_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..43e8d27c6a6cdd11f092f8b404a97dc237577a38 --- /dev/null +++ b/entity/DuplicatePerson_entity/entityfields/keywordcontactstates/children/containername_param/valueProcess.js @@ -0,0 +1,5 @@ +import("system.result"); +import("Keyword_lib"); +import("KeywordRegistry_basic"); + +result.string($KeywordRegistry.contactStatus()); diff --git a/entity/DuplicatePerson_entity/entityfields/parentcontext/valueProcess.js b/entity/DuplicatePerson_entity/entityfields/parentcontext/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..f7baa76a6be6f585b2829869961b69b1ca4a5e15 --- /dev/null +++ b/entity/DuplicatePerson_entity/entityfields/parentcontext/valueProcess.js @@ -0,0 +1,4 @@ +import("system.result"); +import("Context_lib"); + +result.string(ContextUtils.getContextName("Person")); diff --git a/entity/DuplicatePerson_entity/entityfields/picture/displayValueProcess.js b/entity/DuplicatePerson_entity/entityfields/picture/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..e09fa2ae490ce0756966fd490af0150cc05e726f --- /dev/null +++ b/entity/DuplicatePerson_entity/entityfields/picture/displayValueProcess.js @@ -0,0 +1,11 @@ +import("system.result"); +import("system.vars"); + +if (vars.get("$field.PICTURE")) +{ + result.string(vars.get("$field.PICTURE")); +} +else +{ + result.string("TEXT:" + (vars.getString("$field.FIRSTNAME") + " " + vars.getString("$field.LASTNAME")).trim()); +} diff --git a/entity/DuplicatePerson_entity/initFilterProcess.js b/entity/DuplicatePerson_entity/initFilterProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..92797e84dbb193011bf821bb4ecc828681a2d414 --- /dev/null +++ b/entity/DuplicatePerson_entity/initFilterProcess.js @@ -0,0 +1,15 @@ +import("system.translate"); +import("system.result"); + +result.string(JSON.stringify({ + type: "group", + operator: "AND", + childs: [{ + type: "row", + name: "DUPLICATE", + operator: "EQUAL", + contenttype: "BOOLEAN", + key: "1", + value: translate.text("Yes") + }] +})); diff --git a/entity/DuplicatePerson_entity/recordcontainers/db/conditionProcess.js b/entity/DuplicatePerson_entity/recordcontainers/db/conditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..658b1af578f9b7fb2d68728d73cef7393c3a7740 --- /dev/null +++ b/entity/DuplicatePerson_entity/recordcontainers/db/conditionProcess.js @@ -0,0 +1,8 @@ +import("system.vars"); +import("Sql_lib"); +import("DuplicateScanner_lib"); +import("system.result"); + +var duplicateIds = DuplicateScannerUtils.getDuplicateIdsByEntityObj("Person_entity", JSON.parse(vars.get("$param.Obj_param"))); +duplicateIds.push("-"); // workaround empty arrays +result.string(newWhere("CONTACT.CONTACTID", duplicateIds, SqlBuilder.IN()).toString()); diff --git a/entity/DuplicatePerson_entity/recordcontainers/db/fromClauseProcess.js b/entity/DuplicatePerson_entity/recordcontainers/db/fromClauseProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..2205f0c5af7cbe0439abdf3017bae42b6e9be2cd --- /dev/null +++ b/entity/DuplicatePerson_entity/recordcontainers/db/fromClauseProcess.js @@ -0,0 +1,14 @@ +import("Sql_lib"); +import("system.vars"); +import("system.result"); + +var unrelatedCondition = newWhere("UNRELATEDDUPLICATES.DUPLICATETYPE", "Person_entity") + .and("UNRELATEDDUPLICATES.SOURCEDUPLICATEID", vars.get("$param.Id_param")) + .and("UNRELATEDDUPLICATES.UNRELATEDDUPLICATEID = CONTACT.CONTACTID"); + +result.string( + "PERSON " + + "join CONTACT on (PERSON.PERSONID = CONTACT.PERSON_ID) " + + "left join ADDRESS on (ADDRESS.ADDRESSID = CONTACT.ADDRESS_ID) " + + "left join UNRELATEDDUPLICATES on " + unrelatedCondition.toString() +); diff --git a/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/duplicate.value/expression.js b/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/duplicate.value/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..8f7063b2ac8e637e6618ccc1ff745653daf0b339 --- /dev/null +++ b/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/duplicate.value/expression.js @@ -0,0 +1,7 @@ +import("system.result"); +import("Sql_lib"); + +var statement = SqlBuilder.caseStatement() + .when("UNRELATEDDUPLICATES.UNRELATEDDUPLICATEID is not null") + .thenString("0").elseString("1"); +result.string(statement); diff --git a/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/organisation_id.displayvalue/expression.js b/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/organisation_id.displayvalue/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..64f71be666b2bbb3421d182e2fe8b25d989a3316 --- /dev/null +++ b/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/organisation_id.displayvalue/expression.js @@ -0,0 +1,5 @@ +import("Sql_lib"); +import("system.result"); + +result.string(newSelect("ORGANISATION.NAME").from("ORGANISATION") + .where("ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID").toString()); diff --git a/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/organisation_id.value/expression.js b/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/organisation_id.value/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..e37273248e57bcb47a83af87693aa9cca2ed5636 --- /dev/null +++ b/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/organisation_id.value/expression.js @@ -0,0 +1,6 @@ +import("system.result"); +import("Sql_lib"); + +result.string(newSelect("c.CONTACTID").from("CONTACT as c") + .where("c.ORGANISATION_ID = CONTACT.ORGANISATION_ID") + .and("c.PERSON_ID is null").toString()); diff --git a/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js b/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..5827c59c416c332ba9281a60756f919fcb75c0a2 --- /dev/null +++ b/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js @@ -0,0 +1,4 @@ +import("system.result"); +import("Communication_lib"); + +result.string(CommUtil.getStandardSubSqlMail()); diff --git a/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js b/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..0f438c2535b21180c5ad03637de90f577f2c736e --- /dev/null +++ b/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js @@ -0,0 +1,4 @@ +import("system.result"); +import("Communication_lib"); + +result.string(CommUtil.getStandardSubSqlPhone()); diff --git a/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js b/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..50433a35e5f298cf550485a4d9ea33ac405a6ebd --- /dev/null +++ b/entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js @@ -0,0 +1,5 @@ +import("system.result"); +import("Keyword_lib"); +import("KeywordRegistry_basic"); + +result.string(KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.contactStatus(), "CONTACT.STATUS")); diff --git a/entity/DuplicateScannerResultFieldConfig_entity/DuplicateScannerResultFieldConfig_entity.aod b/entity/DuplicateScannerResultFieldConfig_entity/DuplicateScannerResultFieldConfig_entity.aod deleted file mode 100644 index b336a59f809d6d5834741fc16f8a6034815597b2..0000000000000000000000000000000000000000 --- a/entity/DuplicateScannerResultFieldConfig_entity/DuplicateScannerResultFieldConfig_entity.aod +++ /dev/null @@ -1,104 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> - <name>DuplicateScannerResultFieldConfig_entity</name> - <majorModelMode>DISTRIBUTED</majorModelMode> - <recordContainer>recordContainer</recordContainer> - <entityFields> - <entityProvider> - <name>#PROVIDER</name> - </entityProvider> - <entityField> - <name>UID</name> - </entityField> - <entityField> - <name>ENTITY_FIELD_NAME</name> - <title>Entity field name</title> - </entityField> - <entityField> - <name>DATE_EDIT</name> - <valueProcess>%aditoprj%/entity/DuplicateScannerResultFieldConfig_entity/entityfields/date_edit/valueProcess.js</valueProcess> - </entityField> - <entityField> - <name>DATE_NEW</name> - <valueProcess>%aditoprj%/entity/DuplicateScannerResultFieldConfig_entity/entityfields/date_new/valueProcess.js</valueProcess> - </entityField> - <entityField> - <name>USER_NEW</name> - <valueProcess>%aditoprj%/entity/DuplicateScannerResultFieldConfig_entity/entityfields/user_new/valueProcess.js</valueProcess> - </entityField> - <entityField> - <name>USER_EDIT</name> - <valueProcess>%aditoprj%/entity/DuplicateScannerResultFieldConfig_entity/entityfields/user_edit/valueProcess.js</valueProcess> - </entityField> - <entityParameter> - <name>DuplicateScannerId_param</name> - <expose v="true" /> - <mandatory v="true" /> - </entityParameter> - <entityProvider> - <name>ScannerResultFieldConfigProvider</name> - <dependencies> - <entityDependency> - <name>119b48a5-ce78-4169-bd31-76e524cece99</name> - <entityName>DuplicateScanner_entity</entityName> - <fieldName>ScannerResultFieldsConfig_Consumer</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> - </entityProvider> - <entityField> - <name>DUPLICATESCANNER_ID</name> - <valueProcess>%aditoprj%/entity/DuplicateScannerResultFieldConfig_entity/entityfields/duplicatescanner_id/valueProcess.js</valueProcess> - </entityField> - <entityProvider> - <name>#PROVIDER_AGGREGATES</name> - <useAggregates v="true" /> - </entityProvider> - </entityFields> - <recordContainers> - <dbRecordContainer> - <name>recordContainer</name> - <conditionProcess>%aditoprj%/entity/DuplicateScannerResultFieldConfig_entity/recordcontainers/recordcontainer/conditionProcess.js</conditionProcess> - <alias>Data_alias</alias> - <recordFieldMappings> - <dbRecordFieldMapping> - <name>DATE_EDIT.value</name> - <recordfield>DUPLICATESCANNERRESULTFIELDCONFIG.DATE_EDIT</recordfield> - </dbRecordFieldMapping> - <dbRecordFieldMapping> - <name>DATE_NEW.value</name> - <recordfield>DUPLICATESCANNERRESULTFIELDCONFIG.DATE_NEW</recordfield> - </dbRecordFieldMapping> - <dbRecordFieldMapping> - <name>ENTITY_FIELD_NAME.value</name> - <recordfield>DUPLICATESCANNERRESULTFIELDCONFIG.ENTITY_FIELD_NAME</recordfield> - </dbRecordFieldMapping> - <dbRecordFieldMapping> - <name>UID.value</name> - <recordfield>DUPLICATESCANNERRESULTFIELDCONFIG.ID</recordfield> - </dbRecordFieldMapping> - <dbRecordFieldMapping> - <name>USER_EDIT.value</name> - <recordfield>DUPLICATESCANNERRESULTFIELDCONFIG.USER_EDIT</recordfield> - </dbRecordFieldMapping> - <dbRecordFieldMapping> - <name>USER_NEW.value</name> - <recordfield>DUPLICATESCANNERRESULTFIELDCONFIG.USER_NEW</recordfield> - </dbRecordFieldMapping> - <dbRecordFieldMapping> - <name>DUPLICATESCANNER_ID.value</name> - <recordfield>DUPLICATESCANNERRESULTFIELDCONFIG.DUPLICATESCANNER_ID</recordfield> - </dbRecordFieldMapping> - </recordFieldMappings> - <linkInformation> - <linkInformation> - <name>f7126f94-9e4c-46a0-8dc9-9e52fda1c7c0</name> - <tableName>DUPLICATESCANNERRESULTFIELDCONFIG</tableName> - <primaryKey>ID</primaryKey> - <isUIDTable v="false" /> - <readonly v="false" /> - </linkInformation> - </linkInformation> - </dbRecordContainer> - </recordContainers> -</entity> diff --git a/entity/DuplicateScannerResultFieldConfig_entity/entityfields/duplicatescanner_id/valueProcess.js b/entity/DuplicateScannerResultFieldConfig_entity/entityfields/duplicatescanner_id/valueProcess.js deleted file mode 100644 index b8c682ad670116ff553d3774001f92eeec9478ce..0000000000000000000000000000000000000000 --- a/entity/DuplicateScannerResultFieldConfig_entity/entityfields/duplicatescanner_id/valueProcess.js +++ /dev/null @@ -1,7 +0,0 @@ -import("system.result"); -import("system.vars"); - -if(vars.get("$this.value") == null || vars.get("$this.value") == "") -{ - result.string(vars.get("$param.DuplicateScannerId_param")); -} \ No newline at end of file diff --git a/entity/DuplicateScannerResultFieldConfig_entity/recordcontainers/recordcontainer/conditionProcess.js b/entity/DuplicateScannerResultFieldConfig_entity/recordcontainers/recordcontainer/conditionProcess.js deleted file mode 100644 index b9bff609c91222abb6c3b0292492600907585487..0000000000000000000000000000000000000000 --- a/entity/DuplicateScannerResultFieldConfig_entity/recordcontainers/recordcontainer/conditionProcess.js +++ /dev/null @@ -1,5 +0,0 @@ -import("system.vars"); -import("system.result"); - -if (vars.get("$param.DuplicateScannerId_param")) - result.string(newWhere("DUPLICATESCANNERRESULTFIELDCONFIG.DUPLICATESCANNER_ID", "$param.DuplicateScannerId_param").toString()); \ No newline at end of file diff --git a/entity/DuplicateScanner_entity/DuplicateScanner_entity.aod b/entity/DuplicateScanner_entity/DuplicateScanner_entity.aod index 34fb0577dfe0c9ee42cc2f58458267359bd8f094..2be26b094c838a7ca8d136ff7dbf35a491e48aa8 100644 --- a/entity/DuplicateScanner_entity/DuplicateScanner_entity.aod +++ b/entity/DuplicateScanner_entity/DuplicateScanner_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>DuplicateScanner_entity</name> <title>Duplicate Configuration</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -33,16 +33,6 @@ <contentType>BOOLEAN</contentType> <valueProcess>%aditoprj%/entity/DuplicateScanner_entity/entityfields/external_service_usage_allowed/valueProcess.js</valueProcess> </entityField> - <entityActionGroup> - <name>TestActionGroup</name> - <children> - <entityActionField> - <name>TestDuplicateScanner</name> - <title>Test DuplicateSearch</title> - <onActionProcess>%aditoprj%/entity/DuplicateScanner_entity/entityfields/testactiongroup/children/testduplicatescanner/onActionProcess.js</onActionProcess> - </entityActionField> - </children> - </entityActionGroup> <entityField> <name>USER_NEW</name> <valueProcess>%aditoprj%/entity/DuplicateScanner_entity/entityfields/user_new/valueProcess.js</valueProcess> @@ -71,40 +61,36 @@ <state>AUTO</state> <stateProcess>%aditoprj%/entity/DuplicateScanner_entity/entityfields/scan_pattern/stateProcess.js</stateProcess> </entityField> - <entityConsumer> - <name>ScannerResultFieldsConfig_Consumer</name> - <dependency> - <name>dependency</name> - <entityName>DuplicateScannerResultFieldConfig_entity</entityName> - <fieldName>ScannerResultFieldConfigProvider</fieldName> - </dependency> - <children> - <entityParameter> - <name>DuplicateScannerId_param</name> - <valueProcess>%aditoprj%/entity/DuplicateScanner_entity/entityfields/scannerresultfieldsconfig_consumer/children/duplicatescannerid_param/valueProcess.js</valueProcess> - </entityParameter> - </children> - </entityConsumer> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> <entityActionGroup> - <name>RunActionGroup</name> - <documentation>%aditoprj%/entity/DuplicateScanner_entity/entityfields/runactiongroup/documentation.adoc</documentation> + <name>FilterActions</name> <children> <entityActionField> - <name>RebuildPersonDuplicatesCache</name> - <title>Rebuild Person duplicates cache</title> - <onActionProcess>%aditoprj%/entity/DuplicateScanner_entity/entityfields/runactiongroup/children/rebuildpersonduplicatescache/onActionProcess.js</onActionProcess> + <name>rebuild</name> + <title>Rebuild selected entries</title> + <onActionProcess>%aditoprj%/entity/DuplicateScanner_entity/entityfields/filteractions/children/rebuild/onActionProcess.js</onActionProcess> + <isObjectAction v="false" /> + <selectionType>MULTI</selectionType> + <iconId>VAADIN:CALC</iconId> + <tooltip>Rebuild all duplicates from the selected scanners</tooltip> </entityActionField> <entityActionField> - <name>RebuildOrganisationDuplicatesCache</name> - <title>Rebuild Organisation duplicates cache</title> - <onActionProcess>%aditoprj%/entity/DuplicateScanner_entity/entityfields/runactiongroup/children/rebuildorganisationduplicatescache/onActionProcess.js</onActionProcess> + <name>viewDuplicates</name> + <title>View duplicates</title> + <onActionProcess>%aditoprj%/entity/DuplicateScanner_entity/entityfields/filteractions/children/viewduplicates/onActionProcess.js</onActionProcess> + <selectionType>MULTI</selectionType> + <iconId>VAADIN:TABLE</iconId> + <tooltip>View all duplicates from this scanner</tooltip> </entityActionField> </children> </entityActionGroup> - <entityProvider> - <name>#PROVIDER_AGGREGATES</name> - <useAggregates v="true" /> - </entityProvider> + <entityField> + <name>DUPLICATECOUNT</name> + <title>Count</title> + </entityField> </entityFields> <recordContainers> <dbRecordContainer> @@ -154,6 +140,11 @@ <name>SCAN_PATTERN.value</name> <recordfield>DUPLICATESCANNER.SCAN_PATTERN</recordfield> </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DUPLICATECOUNT.value</name> + <expression>%aditoprj%/entity/DuplicateScanner_entity/recordcontainers/dbrecordcontainer/recordfieldmappings/duplicatecount.value/expression.js</expression> + <isFilterable v="true" /> + </dbRecordFieldMapping> </recordFieldMappings> <linkInformation> <linkInformation> diff --git a/entity/DuplicateScanner_entity/documentation.adoc b/entity/DuplicateScanner_entity/documentation.adoc index 6284402b762958e1f8d9b2d9b848c4189920e666..63f59e3f44e71a5213500fd605fc6879041243af 100644 --- a/entity/DuplicateScanner_entity/documentation.adoc +++ b/entity/DuplicateScanner_entity/documentation.adoc @@ -1,7 +1,27 @@ -=DuplicateScanner_entity += DuplicateScanner_entity -A "DuplicateScanner" is a definition -- WHICH objects may be searched for duplicates -- and HOW these are searched +== Overview +The duplicate scanner is the configuration for duplicate recognition. +It defines WHICH objects may be searched for duplicates and HOW these are searched. -Speaking of this, the duplicate scanner is the configuration for duplicate recognition. +== Technical details +The filter is a field with contentType: FILTER_TREE which is loaded in the onInsert/onUpdate of the db recordcontainer. + +All records in the DuplicateScanner cannot be deleted/created +and should be created via liquibase scripts, during the implementation of the duplicates for a new entity. Note that, the provider and the entity must be set in the filter. + +The field EXTERNAL_SERVICE_USAGE_ALLOWED is deprecated and is not used in the implementation as of 06 May 2021. + +The field FILTER_NAME is only used as displayName in the UI and is irrelevant for the duplicate search. + +SCAN_PATTERN defines the filter. Note that, the provider of the ENTITY_TO_SCAN_NAME must use an index recordContainer. + +ID_FIELD_NAME the uid field for the duplicate search. Note that currently, it must be the uid field of the entity. + +==== Actions +* rebuild: rebuilds all duplicates see rebuildDuplicates_serverProcess. +* viewDuplicates: opens the target entity with default duplicate filter. + +== AID + +Further information and how to implement custom duplicate functionality can be found in AID60 Duplicates diff --git a/entity/DuplicateScanner_entity/entityfields/filteractions/children/rebuild/onActionProcess.js b/entity/DuplicateScanner_entity/entityfields/filteractions/children/rebuild/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..fc6ae65d2d318b7ba951ae069442ed54db022857 --- /dev/null +++ b/entity/DuplicateScanner_entity/entityfields/filteractions/children/rebuild/onActionProcess.js @@ -0,0 +1,34 @@ +import("system.process"); +import("system.logging"); +import("system.entities"); +import("system.vars"); +import("DuplicateScanner_lib"); + +var selectedIds = vars.get("$sys.selection"); +var loadConfig = entities.createConfigForLoadingRows() + .entity("DuplicateScanner_entity") + .uids(selectedIds) + .fields(["FILTER_NAME", "ENTITY_TO_SCAN_NAME", "ID_FIELD_NAME", "SCAN_PATTERN"]); +var selectedEntries = entities.getRows(loadConfig); +logging.log("Rebuilding " + selectedEntries.length + " entries"); + +selectedEntries.forEach(function(currEntry) +{ + var filterName = currEntry["FILTER_NAME"]; + var targetEntity = currEntry["ENTITY_TO_SCAN_NAME"]; + var targetIdField = currEntry["ID_FIELD_NAME"]; + var filter = JSON.parse(currEntry["SCAN_PATTERN"]); + + var startConfig = process.createStartAsyncConfig() + .setName("rebuildDuplicates_serverProcess") + .setShowErrorDialog(true) + .setLocalVariables({ + filterName: filterName, + targetEntity: targetEntity, + targetIdField: targetIdField, + filter: JSON.stringify(filter.filter) + }) + .setUser(vars.get("$sys.user")) + .setTimerType(process.TIMERTYPE_SERVER); + process.startAsync(startConfig); +}); diff --git a/entity/DuplicateScanner_entity/entityfields/filteractions/children/viewduplicates/onActionProcess.js b/entity/DuplicateScanner_entity/entityfields/filteractions/children/viewduplicates/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..064e1f6c17fd9f84dc46723d329baf5a181ddc6d --- /dev/null +++ b/entity/DuplicateScanner_entity/entityfields/filteractions/children/viewduplicates/onActionProcess.js @@ -0,0 +1,35 @@ +import("system.translate"); +import("system.question"); +import("system.vars"); +import("system.neon"); +import("system.entities"); +import("Context_lib"); + +if(vars.get("$sys.selection").length == 1) +{ + var config = entities.createConfigForLoadingRows() + .entity("DuplicateScanner_entity") + .uid(vars.get("$sys.selection")[0]) + .fields(["ENTITY_TO_SCAN_NAME"]); + var scanner = entities.getRow(config); + var contextId = ContextUtils.getContextName(ContextUtils.getContextId(scanner["ENTITY_TO_SCAN_NAME"])); + + neon.openContext(contextId, null, null, neon.OPERATINGSTATE_SEARCH, { + FilterPreSet_param: JSON.stringify({ + type: "group", + operator: "AND", + childs: [{ + type: "row", + name: "#EXTENSION.Duplicates_filter.Duplicates_filter#NUMBER", + operator: "GREATER", + value: "All Duplicates", + key: "0", + contenttype: "NUMBER" + }] + }) + }); +} +else +{ + question.showMessage(translate.text("Please select only one element")); +} diff --git a/entity/DuplicateScanner_entity/entityfields/runactiongroup/children/rebuildorganisationduplicatescache/onActionProcess.js b/entity/DuplicateScanner_entity/entityfields/runactiongroup/children/rebuildorganisationduplicatescache/onActionProcess.js deleted file mode 100644 index e391b4c1938da96eddca596f8fb2211dd3d681ab..0000000000000000000000000000000000000000 --- a/entity/DuplicateScanner_entity/entityfields/runactiongroup/children/rebuildorganisationduplicatescache/onActionProcess.js +++ /dev/null @@ -1,18 +0,0 @@ -import("system.logging"); -import("system.logging"); -import("DuplicateScanner_lib"); - -var filterName = "OrganisationDuplicates"; -var targetEntity = "Organisation_entity"; -var recordBlockSize = DuplicateScannerUtils.getBlockSize(); - -logging.log(filterName + ": Delete duplicates -> "); -DuplicateScannerUtils.deleteClustersByTargetEntity(targetEntity); - -logging.log(filterName + ": Recalculate duplicates -> "); -DuplicateScannerUtils.rebuildDuplicatesCache(filterName, targetEntity, recordBlockSize, null); - -logging.log(filterName + ": Refresh unrelated duplicates -> "); -DuplicateScannerUtils.refreshUnrelatedDuplicateRelations(targetEntity); - -logging.log(filterName + ": Done rebuilding "); \ No newline at end of file diff --git a/entity/DuplicateScanner_entity/entityfields/runactiongroup/children/rebuildpersonduplicatescache/onActionProcess.js b/entity/DuplicateScanner_entity/entityfields/runactiongroup/children/rebuildpersonduplicatescache/onActionProcess.js deleted file mode 100644 index cad8736382338846edff77ef164f85488513731d..0000000000000000000000000000000000000000 --- a/entity/DuplicateScanner_entity/entityfields/runactiongroup/children/rebuildpersonduplicatescache/onActionProcess.js +++ /dev/null @@ -1,18 +0,0 @@ -import("system.project"); -import("system.logging"); -import("DuplicateScanner_lib"); - -var filterName = "PersonDuplicates"; -var targetEntity = "Person_entity"; -var recordBlockSize = DuplicateScannerUtils.getBlockSize(); - -logging.log(filterName + ": Delete duplicates -> "); -DuplicateScannerUtils.deleteClustersByTargetEntity(targetEntity); - -logging.log(filterName + ": Recalculate duplicates -> "); -DuplicateScannerUtils.rebuildDuplicatesCache(filterName, targetEntity, recordBlockSize, null); - -logging.log(filterName + ": Refresh unrelated duplicates -> "); -DuplicateScannerUtils.refreshUnrelatedDuplicateRelations(targetEntity); - -logging.log(filterName + ": Done rebuilding "); \ No newline at end of file diff --git a/entity/DuplicateScanner_entity/entityfields/runactiongroup/documentation.adoc b/entity/DuplicateScanner_entity/entityfields/runactiongroup/documentation.adoc deleted file mode 100644 index f998dfcc78c6497f121cd16b294c8d01e6e1c1c7..0000000000000000000000000000000000000000 --- a/entity/DuplicateScanner_entity/entityfields/runactiongroup/documentation.adoc +++ /dev/null @@ -1 +0,0 @@ -Since duplicate caching is disabled there is no need to show this action group within views at the moment. \ No newline at end of file diff --git a/entity/DuplicateScanner_entity/entityfields/scannerresultfieldsconfig_consumer/children/duplicatescannerid_param/valueProcess.js b/entity/DuplicateScanner_entity/entityfields/scannerresultfieldsconfig_consumer/children/duplicatescannerid_param/valueProcess.js deleted file mode 100644 index 3c559d42002c59103607e03f79eb792d99d74d31..0000000000000000000000000000000000000000 --- a/entity/DuplicateScanner_entity/entityfields/scannerresultfieldsconfig_consumer/children/duplicatescannerid_param/valueProcess.js +++ /dev/null @@ -1,3 +0,0 @@ -import("system.vars"); -import("system.result"); -result.string(vars.get("$field.UID")); \ No newline at end of file diff --git a/entity/DuplicateScanner_entity/entityfields/testactiongroup/children/testduplicatescanner/onActionProcess.js b/entity/DuplicateScanner_entity/entityfields/testactiongroup/children/testduplicatescanner/onActionProcess.js deleted file mode 100644 index af7cd56a2472c2305bf914b22fc59c89a7ba03a8..0000000000000000000000000000000000000000 --- a/entity/DuplicateScanner_entity/entityfields/testactiongroup/children/testduplicatescanner/onActionProcess.js +++ /dev/null @@ -1,432 +0,0 @@ -import("system.process"); -import("KeywordRegistry_basic"); -import("system.db"); -import("ActivityTask_lib"); -import("Employee_lib"); -import("system.util"); -import("system.notification"); -import("system.notificationtypes"); -import("system.entities"); -import("system.project"); -import("system.indexsearch"); -import("system.question"); -import("system.logging"); -import("DuplicateScanner_lib"); -import("JditoFilter_lib"); - -//let testFields = []; -//let filters = DuplicateScannerUtils.loadFilters("PersonDuplicates", "Person_entity") -//logging.log("filters -> " + filters); -// -//for (let i = 0; i < filters.length; i++) -//{ -// logging.log("filters[i] -> " + filters[i]); -// let filter = JSON.parse(filters[i][0]).filter; -// let fields = JditoFilterUtils.getFilterFields(filter.childs); -// testFields = testFields.concat(fields); -//} -//logging.log("testFields -> " + testFields); - - -//##############################Test Duplicate Scan###################################################### - -//var filterName = "PersonDuplicates"; -//var targetEntity = "Person_entity"; -//var resultFieldsIdFieldName = "CONTACTID"; -// -//var tmpFieldsInFilterRay = ["CONTACTID", "FIRSTNAME", "LASTNAME", "GENDER"]; -//var queryPersonContactIds = "select CONTACTID, FIRSTNAME, LASTNAME, GENDER from CONTACT" -// + " join PERSON on PERSONID = PERSON_ID"; -// -// -//var filterFieldValueRays = [["CONTACTID", "29271db0-4253-46c9-b7c2-5e25376b9d19"], ["FIRSTNAME", "Narkus"], ["LASTNAME", "Bltinger"], ["GENDER", "m"]]; -// -////DuplicateScannerUtils.ScanForDuplicatesIndex = function(pFilterName, pTargetEntity, pFilterFieldValueRays, -////pTargetEntityResultFields, pRecordIdFieldToIgnore, pRecordIdValueToIgnore) -// -///* -// * -// */ -// -// -// -//let duplicateFieldsConfig = DuplicateScannerUtils.LoadDuplicateIndexFieldsConfiguration(filterName, targetEntity); -// -//let querySelectFields = ""; -//for (let i = 0; i < duplicateFieldsConfig.length; i++) -//{ -// querySelectFields += duplicateFieldsConfig[i][0]; -// -// if(i < duplicateFieldsConfig.length) -// querySelectFields += ", "; -//} -// -//let queryPersonFieldData = "select " + querySelectFields + " from CONTACT" -// + " join PERSON on PERSONID = PERSON_ID"; -// -//DuplicateScannerUtils.GetEntityFieldNameValueMap(duplicateFieldsConfig); -// -//DuplicateScannerUtils.ScanForDuplicatesIndex(filterName, targetEntity, -//filterFieldValueRays, [], resultFieldsIdFieldName, "29271db0-4253-46c9-b7c2-5e25376b9d19"); - - -//##############################ANs Beispiel###################################################### - - -//logging.log("TEST INDEX API with Entities"); -//logging.log(indexsearch.lookupIndexField("Person_entity", "FIRSTNAME")); -//logging.log(indexsearch.lookupIndexField("Person_entity", "FIRSTNAME.value")); -//logging.log(indexsearch.lookupIndexField("Person_entity", "PersAddresses.CITY")); -//logging.log(indexsearch.lookupIndexField("Person_entity", "PersAddresses.CITY.value")); -//logging.log(indexsearch.lookupIndexField(null, "Person_entity.FIRSTNAME.value")); -//logging.log(indexsearch.lookupIndexField(null, "Person_entity.PersAddresses.CITY.value")); -//var json = '{"entity":"Person_entity","filter":{"type":"group","operator":"AND","childs":[{"type":"row","name":"FIRSTNAME","operator":"STARTSWITH","value":"asd","key":"","contenttype":"TEXT"},{"type":"group","operator":"OR","childs":[{"type":"row","name":"LASTNAME","operator":"STARTSWITH","value":"L","key":"","contenttype":"TEXT"}]}]}}'; -//logging.log(indexsearch.buildQueryFromSearchCondition(json)); -// -//var t1 = indexsearch.createTerm("lisa").setEntityField("Person_entity.FIRSTNAME"); -//var t2 = indexsearch.createTerm("sommer").setEntityField("Person_entity.LASTNAME"); -//var t3 = indexsearch.createWildcardTerm("L").setEntityField("Person_entity.PersAddresses.CITY"); -// -//var patternConf = indexsearch.createPatternConfig().or(t1).or(t2).or(t3); -//var pattern = indexsearch.buildPatternString(patternConf); -//logging.log(pattern); -// -//var query = indexsearch.createIndexQuery() -//.setPattern(pattern) -//.setEntities("Person_entity") -////.addResultIndexFields(indexsearch.FIELD_ID) -//.addResultFields("Person_entity.FIRSTNAME") -//.addSearchFields("Person_entity.FIRSTNAME", "Person_entity.LASTNAME"); -// -//var res = indexsearch.searchIndex(query); -//logging.log("" + res); - - - -//######################################Demosuche nach Datensatz############################################## - - - - -// -//let indexQuery = indexsearch.createIndexQuery() -// .setPattern("(+(-contactid_value:(29271db0-4253-46c9-b7c2-5e25376b9d19)) +gender_value:m*)") -// .setEntities(["Person_entity"]) -// .addResultFields("Person_entity.FIRSTNAME") -// .setRows(50); -// -// -//let filterTerm1 = indexsearch.createTerm("Barkus") -// .setIndexField("firstname_value") -// .setFuzzySearchFactor(0); -////let filterTerm2 = indexsearch.createTerm("Altinger") -//// .setIndexField("lastname_value") -//// .setFuzzySearchFactor(0); -// -//let filterPatternConfig = indexsearch.createPatternConfig().and(filterTerm1); -// -//let filterPatternString = indexsearch.buildPatternString(filterPatternConfig); -//logging.log("Hauptsuche filterPatternString -> " + filterPatternString); -//indexQuery = indexQuery.addFilter(filterPatternString); -// -//let searchResult = indexsearch.searchIndex(indexQuery); -//logging.log("searchResult -> " + searchResult); -// -//logging.log("searchResults hits length -> " + searchResult[indexsearch.HITS].length); -// -//for (let i = 0; i < searchResult[indexsearch.HITS].length; i++) -//{ -// logging.log("Treffer Nr -> " + i); -// //searchResults hits 0 -> {#ADITO_SEARCH_ID=1868bd3a-05af-4b7f-a633-e3aec50ac45c, _index_group_=Person, #ADITO_SEARCH_TYPE=Person, firstname_value=Peter, _local_id_=1868bd3a-05af-4b7f-a633-e3aec50ac45c} -// let localId = searchResult[indexsearch.HITS][i]["_local_id_"]; -// let firstname = searchResult[indexsearch.HITS][i]["firstname_value"]; -// let indexGroup = searchResult[indexsearch.HITS][i]["_index_group_"]; -// logging.log("localId -> " + localId); -// logging.log("firstname -> " + firstname); -// logging.log("indexGroup -> " + indexGroup); -//} - - - - - -//#################################################################################### - - -// -//var filterName = "PersonDuplicates"; -//var targetEntity = "Person_entity"; -//var resultFieldsIdFieldName = "CONTACTID"; -//var queryPersonContactIds = "select CONTACTID, FIRSTNAME, LASTNAME, GENDER from CONTACT" -// + " join PERSON on PERSONID = PERSON_ID"; -//var tmpFieldsInFilterRay = ["CONTACTID", "FIRSTNAME", "LASTNAME", "GENDER"]; -// -//logging.log("Löschen von PERSON Dubletten -> "); -//DuplicateScannerUtils.deleteClustersByTargetEntity("Person_entity"); -// -//logging.log("Neu berechnen von PERSON Dubletten -> "); -//DuplicateScannerUtils.rebuildDuplicatesCache(filterName, targetEntity, queryPersonContactIds, -//tmpFieldsInFilterRay, resultFieldsIdFieldName); -// -//DuplicateScannerUtils.refreshUnrelatedDuplicateRelations(targetEntity); - -//############################################################################## - -//filterName = "OrganisationDuplicates"; -//targetEntity = "Organisation_entity"; -//resultFieldsIdFieldName = "CONTACTID"; -//queryPersonContactIds = "select CONTACTID, ORGANISATION.NAME from ORGANISATION" -// + " join CONTACT on CONTACT.CONTACTID = ORGANISATION.ORGANISATIONID" -// + " where CONTACTID != '0'"; -//tmpFieldsInFilterRay = ["CONTACTID", "NAME"]; -// -// -//logging.log("Löschen von ORGANISATION Dubletten -> "); -//DuplicateScannerUtils.deleteClustersByTargetEntity(targetEntity) -// -//logging.log("Neu berechnen von ORGANISATION Dubletten -> "); -//DuplicateScannerUtils.rebuildDuplicatesCache(filterName, targetEntity, queryPersonContactIds, -//tmpFieldsInFilterRay, resultFieldsIdFieldName); -// -//DuplicateScannerUtils.refreshUnrelatedDuplicateRelations(targetEntity); - - -//####################################Rebuild person duplicates########################################## - -//var filterName = "PersonDuplicates"; -//var targetEntity = "Person_entity"; -// -//let duplicateFieldsConfig = DuplicateScannerUtils.LoadIndexFieldsConfiguration(filterName, targetEntity); -//let resultFields = DuplicateScannerUtils.getResultFields(filterName, targetEntity); -// -//logging.log("duplicateFieldsConfig -> " + duplicateFieldsConfig); -//logging.log("resultFields -> " + resultFields); -// -//let querySelectFields = DuplicateScannerUtils.BuildSqlSelectFieldsFromFieldConfig(duplicateFieldsConfig); -//logging.log("querySelectFields -> " + querySelectFields); -// -//let queryPersonFieldData = "select " + querySelectFields + " from CONTACT" -// + " join PERSON on PERSONID = PERSON_ID" -// + " left join ADDRESS on ADDRESS.CONTACT_ID = CONTACT.CONTACTID"; -// -//logging.log("Löschen von PERSON Dubletten -> "); -//DuplicateScannerUtils.deleteClustersByTargetEntity(targetEntity); -// -//let formatToJsonAndCallWsCallback = function(pPossibleDuplicatesRay) -//{ -// let indexResultFields = DuplicateScannerUtils.translateEntityToIndexFields(targetEntity, resultFields) -// -// //Run thru every duplicate result an read out the resultfields -// for (let i = 0; i < pPossibleDuplicatesRay.length; i++) -// { -// for (let b = 0; b < resultFields.length; b++) -// { -// let entityFieldName = resultFields[b]; -// let indexFieldName = indexResultFields[entityFieldName]; -// //logging.log("Entity Field -> "+ pPossibleDuplicatesRay[i][indexFieldName]); -// //format values -// } -// } -// //call webservice -// //reformat results to same structure as before -// return pPossibleDuplicatesRay; -//}; -// -//logging.log("Neu berechnen von PERSON Dubletten -> "); -//DuplicateScannerUtils.rebuildDuplicatesCache(filterName, targetEntity, queryPersonFieldData, -//duplicateFieldsConfig, resultFields, formatToJsonAndCallWsCallback); -// -//DuplicateScannerUtils.refreshUnrelatedDuplicateRelations(targetEntity); - - - - - -//##################################single scanForDuplicates####################################################################### - - -//var filterName = "PersonDuplicates"; -//var targetEntity = "Person_entity"; -// -////Values to check, the same fields as configured -//let valuesToCheck = {}; -//valuesToCheck["CONTACTID"] = "c7ddf982-0e58-4152-b82b-8f5673b0b729"; -//valuesToCheck["FIRSTNAME"] = "Tim"; -//valuesToCheck["GENDER"] = "m "; -// -////The result values can be accessed as seen above in "formatToJsonAndCallWsCallback" -//let pPossibleDuplicatesRay = DuplicateScannerUtils.scanForDuplicates(filterName, targetEntity, valuesToCheck, null); -// -//logging.log(" pPossibleDuplicatesRay-> " + pPossibleDuplicatesRay); -// -//for (let i = 0; i < pPossibleDuplicatesRay.length; i++) -//{ -// logging.log("pPossibleDuplicatesRay[i] -> " + pPossibleDuplicatesRay[i]); -//} -// - - -//################################ entity structure auslesen ############################################## - - -//var model = project.getEntityStructure("Person_entity"); -//logging.log("Name: " + model.name); -//logging.log("Title: " + model.title); -//logging.log("Description: " + model.description); -//logging.log("UsePermissions: " + model.usePermissions); -// -//for (fieldname in model.fields) -//{ -// field = model.fields[fieldname]; -// if(field.fieldType == project.ENTITYFIELDTYPE_FIELD) -// { -// logging.log(" Name: " + field.name); -// logging.log(" Type: " + field.fieldType); -// logging.log(" Title: " + field.title); -// logging.log(" Description: " + field.description); -// logging.log(" UsePermissions: " + field.usePermissions); -// logging.log("###################### -> "); -// } -// if(field.fieldType == project.ENTITYFIELDTYPE_CONSUMER) -// { -// let consumerEntity = field.entityName; -// -// if(consumerEntity == null || consumerEntity == "") -// continue; -// -// let consumerEntityFields = project.getEntityStructure(consumerEntity); -// for (consumerEntityFieldname in consumerEntityFields.fields) -// { -// consumerField = consumerEntityFields.fields[consumerEntityFieldname]; -// if(consumerField.fieldType == project.ENTITYFIELDTYPE_FIELD) -// { -// logging.log(" Name: " + consumerField.name); -// logging.log(" Type: " + consumerField.fieldType); -// logging.log(" Title: " + consumerField.title); -// logging.log(" Description: " + consumerField.description); -// logging.log(" UsePermissions: " + consumerField.usePermissions); -// logging.log("###################### -> "); -// } -// } -// } -//} - -//############################################################################## - -//var model = project.getEntityStructure("Person_entity"); -//let duplicateFieldsConfig = DuplicateScannerUtils.LoadIndexFieldsConfiguration(filterName, targetEntity); -// -//let combinedData = [] -//let entityFieldsToLoad = []; -//for (field in duplicateFieldsConfig) -//{ -// let entityFieldName = duplicateFieldsConfig[field][0]; -// let isIdField = duplicateFieldsConfig[field][1]; -// let useForIndexSearch = duplicateFieldsConfig[field][2]; -// let entityFieldData = model[entiyFieldName]; -// combinedData.push(entityFieldName, isIdField, useForIndexSearch, entityFieldData); -//} -// -//var filterName = "PersonDuplicates"; -//var targetEntity = "Person_entity"; -//DuplicateScannerUtils.getEntityRecords(targetEntity, entityFieldsToLoad, 0, 50); - -//Beispiel 1: -//Feld mit verknüpftem Consumer - -//[entity, feldname, consumerName, ProviderName] -//let test = ["Communication_entity", "STANDARD_EMAIL_COMMUNICATION", "EmailCommunications", "EmailCommunications"]; -// -//let testrow = entities.createConfigForLoadingRows() -// .fields([test[1]]) -// .entity(test[0]) -// .provider(test[3]) -// .addParameter("ContactId_param", "d4c1bec3-656f-45ec-ae03-1c4d729d99fe") -// //.uid() -//let resultTest = entities.getRows(testrow); -//logging.log("resultTest -> " + JSON.stringify(resultTest)); - - - -//Beispiel 2: -//Feld direkt von anderem Entity -//let testrow = entities.createConfigForLoadingRows() -// .fields(["ZIP"]) -// .entity("Address_entity") -// .uid("1a67eaa7-21da-4a18-97ab-755ac5cb74f7") -// -//let resultTest = entities.getRows(testrow); -//logging.log("resultTest Beispiel 2 -> " + JSON.stringify(resultTest)); - - -//indexsearch.runIndexer(["Person"]); - - - - -//let resultClusterId = DuplicateScannerUtils.GetClusterWithDuplicates(["7a34d9d0-04c7-478c-a8e2-f584fe625c45", "c7ddf982-0e58-4152-b82b-8f5673b0b729"]); -//logging.log("resultClusterId -> " + resultClusterId); - - -// -//var filterName = "PersonDuplicates"; -//var targetEntity = "Person_entity"; -//var recordBlockSize = DuplicateScannerUtils.GetBlockSizeForScanner(filterName, targetEntity); -// -//logging.log("recordBlockSize -> " + recordBlockSize); - -//try -//{ -// let sourceContactId = "sourceContactId"; -// let targetContactId = "targetContactId"; -// -// var activityDataForInsert = { -// subject: "Es wurde ein Personendatensatz in diesen integriert", -// content: "Person mit ID " + sourceContactId + " wurde in Person mit ID " + targetContactId + " integriert", -// //categoryKeywordId: $KeywordRegistry.ac -// directionKeywordId: "x", -// responsibleContactId: EmployeeUtils.getCurrentContactId() -// }; -// -// var activityLinks = [["Person", "6e667085-bb97-4039-8dfe-2230002985e0"]] -// -// //activityLinks = ArrayUtils.distinct2d(activityLinks);//TODO: better check before adding the elements into the array if it already exists there -// -// var activityRes = ActivityUtils.insertNewActivity(activityDataForInsert, activityLinks, null, db.getCurrentAlias()); -//} -//catch (exception) -//{ -// logging.log("exception -> " + exception); -//} - -////notification.addNotification(util.getNewUUID(), null, null, null, notification., notification.PRIO_NORMAL, 2, notification.STATE_UNSEEN, [user], message, description); - - -//let currentContactId = EmployeeUtils.getCurrentContactId(); -//DuplicateScannerUtils.CreateMergeSuccessActivity("a2e084e2-d68a-4f1e-a1bb-f8d46ad6293d", "6e667085-bb97-4039-8dfe-2230002985e0", currentContactId, "Person"); - - -//logging.log("$KeywordRegistry.activityDirection$internal() -> " + $KeywordRegistry.activityDirection$internal()); - - - -//let processParameters = { -// filterName: "PersonDuplicates", -// targetEntity: "Person_entity" //process.execute is only able to handle strings -//} -//let userId = EmployeeUtils.getCurrentUserId(); -//if(userId == null) -// userId == ""; -//try -//{ -// let processId = "manualrun_rebuild_duplicatecache_" + util.getNewUUID(); -// process.executeTimer(processId, "RebuildAllDuplicatesCache_serverProcess", 0, true, false, process.TIMERTYPE_SERVER_RUN, userId, false, process.THREADPRIORITY_LOW) -// process.stopTimer(processId); -// logging.log("test -> "); -// process.executeAsync("RebuildAllDuplicateCaches_serverProcess", processParameters, false, userId, process.THREADPRIORITY_LOW) -// logging.log("test2 -> "); -//} -//catch (exception) -//{ -// logging.log(" exception-> " + exception); -//} diff --git a/entity/DuplicateScanner_entity/recordcontainers/dbrecordcontainer/recordfieldmappings/duplicatecount.value/expression.js b/entity/DuplicateScanner_entity/recordcontainers/dbrecordcontainer/recordfieldmappings/duplicatecount.value/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..a49f1a0db948473f671384d79a28219c3a23cd17 --- /dev/null +++ b/entity/DuplicateScanner_entity/recordcontainers/dbrecordcontainer/recordfieldmappings/duplicatecount.value/expression.js @@ -0,0 +1,13 @@ +import("system.result"); +import("Sql_lib"); + +var subselect = newSelect("count(*)").from("UNRELATEDDUPLICATES") +.where("UNRELATEDDUPLICATES.DUPLICATETYPE = HASDUPLICATE.OBJECT_TYPE") +.and("UNRELATEDDUPLICATES.SOURCEDUPLICATEID = HASDUPLICATE.OBJECT_ROWID"); +result.string( + newSelect("count(*)") + .from("HASDUPLICATE") + .where("HASDUPLICATE.OBJECT_TYPE = DUPLICATESCANNER.ENTITY_TO_SCAN_NAME") + .and("(HASDUPLICATE.DUPLICATECOUNT - (" + subselect.toString() + ")) > 0") + .toString() +); diff --git a/entity/DuplicatesUnrelated_entity/DuplicatesUnrelated_entity.aod b/entity/DuplicatesUnrelated_entity/DuplicatesUnrelated_entity.aod deleted file mode 100644 index 7d2241b72c2014a236b28f81f3f8a49060a1f768..0000000000000000000000000000000000000000 --- a/entity/DuplicatesUnrelated_entity/DuplicatesUnrelated_entity.aod +++ /dev/null @@ -1,91 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> - <name>DuplicatesUnrelated_entity</name> - <majorModelMode>DISTRIBUTED</majorModelMode> - <documentation>%aditoprj%/entity/DuplicatesUnrelated_entity/documentation.adoc</documentation> - <siblings> - <element>Duplicates_entity</element> - </siblings> - <recordContainer>jditoRecordContainer</recordContainer> - <entityFields> - <entityProvider> - <name>#PROVIDER</name> - </entityProvider> - <entityProvider> - <name>UnrelatedPersonsProvider</name> - <titlePlural>Unrelated person duplicates</titlePlural> - <children> - <entityParameter> - <name>TargetEntity</name> - <expose v="true" /> - <mandatory v="true" /> - </entityParameter> - <entityParameter> - <name>ClusterId_param</name> - <expose v="true" /> - <mandatory v="false" /> - </entityParameter> - </children> - </entityProvider> - <entityParameter> - <name>TargetEntity</name> - <expose v="true" /> - <mandatory v="true" /> - </entityParameter> - <entityProvider> - <name>UnrelatedOrganisationsProvider</name> - <titlePlural>Unrelated organisations duplicates</titlePlural> - <children> - <entityParameter> - <name>TargetEntity</name> - <expose v="true" /> - <mandatory v="true" /> - </entityParameter> - <entityParameter> - <name>ClusterId_param</name> - <expose v="true" /> - <mandatory v="false" /> - </entityParameter> - </children> - </entityProvider> - <entityField> - <name>SourceDuplicateDescription</name> - <title>Source duplicate</title> - </entityField> - <entityField> - <name>UnrelatedDuplicateDescription</name> - <title>Unrelated duplicate</title> - </entityField> - <entityField> - <name>UID</name> - </entityField> - <entityParameter> - <name>ClusterId_param</name> - <expose v="true" /> - <mandatory v="true" /> - </entityParameter> - <entityProvider> - <name>#PROVIDER_AGGREGATES</name> - <useAggregates v="true" /> - </entityProvider> - </entityFields> - <recordContainers> - <jDitoRecordContainer> - <name>jditoRecordContainer</name> - <jDitoRecordAlias>Data_alias</jDitoRecordAlias> - <contentProcess>%aditoprj%/entity/DuplicatesUnrelated_entity/recordcontainers/jditorecordcontainer/contentProcess.js</contentProcess> - <onDelete>%aditoprj%/entity/DuplicatesUnrelated_entity/recordcontainers/jditorecordcontainer/onDelete.js</onDelete> - <recordFieldMappings> - <jDitoRecordFieldMapping> - <name>UID.value</name> - </jDitoRecordFieldMapping> - <jDitoRecordFieldMapping> - <name>SourceDuplicateDescription.value</name> - </jDitoRecordFieldMapping> - <jDitoRecordFieldMapping> - <name>UnrelatedDuplicateDescription.value</name> - </jDitoRecordFieldMapping> - </recordFieldMappings> - </jDitoRecordContainer> - </recordContainers> -</entity> diff --git a/entity/DuplicatesUnrelated_entity/documentation.adoc b/entity/DuplicatesUnrelated_entity/documentation.adoc deleted file mode 100644 index 06d0fa27494b89bf6d02bef96f9872cb1409c379..0000000000000000000000000000000000000000 --- a/entity/DuplicatesUnrelated_entity/documentation.adoc +++ /dev/null @@ -1,3 +0,0 @@ -=DuplicateUnrelated_entity - -These Duplicates not related to another Entity. \ No newline at end of file diff --git a/entity/DuplicatesUnrelated_entity/recordcontainers/jditorecordcontainer/contentProcess.js b/entity/DuplicatesUnrelated_entity/recordcontainers/jditorecordcontainer/contentProcess.js deleted file mode 100644 index 7f6beb6cd3e8fff07df2f33aa29835976eedc12d..0000000000000000000000000000000000000000 --- a/entity/DuplicatesUnrelated_entity/recordcontainers/jditorecordcontainer/contentProcess.js +++ /dev/null @@ -1,73 +0,0 @@ -import("system.result"); -import("system.vars"); -import("system.db"); -import("Sql_lib"); - -var INDEX_ID = 0; -var INDEX_SOURCE_INFO1 = 1; -var INDEX_SOURCE_INFO2 = 3; -var INDEX_UNRELATED_INFO1 = 2; -var INDEX_UNRELATED_INFO2 = 4; -var INDEX_SOURCE_INFO = 1; -var INDEX_UNRELATED_INFO = 2; - - -let unrelatedDuplicates = []; -let resultUnrelatedDuplicates = []; -let targetEntity = vars.get("$param.TargetEntity"); -let clusterId = vars.get("$param.ClusterId_param"); -let querySelect = new SqlBuilder(); - -if(targetEntity == 'Person_entity') -{ - querySelect.select("ud.ID," - + " pSource.FIRSTNAME, pUnrelated.FIRSTNAME," - + " pSource.LASTNAME, pUnrelated.LASTNAME") - .from("UNRELATEDDUPLICATES", "ud") - .join("CONTACT", "cUnrelated.CONTACTID = ud.UNRELATEDDUPLICATEID", "cUnrelated") - .join("PERSON", "pUnrelated.PERSONID = cUnrelated.PERSON_ID", "pUnrelated") - .join("CONTACT", "cSource.CONTACTID = ud.SOURCEDUPLICATEID", "cSource") - .join("PERSON", "pSource.PERSONID = cSource.PERSON_ID", "pSource") - //If the clusterid parameter is present, only load the duplicates for this particular cluster - .whereIfSet(["UNRELATEDDUPLICATES", "CLUSTERID", "ud"], clusterId); - -} -else -{ - querySelect.select("ud.ID," - + " oSource.\"NAME\"," - + " oUnrelated.\"NAME\"") - .from("UNRELATEDDUPLICATES", "ud") - .join("CONTACT", "cUnrelated.CONTACTID = ud.UNRELATEDDUPLICATEID", "cUnrelated") - .join("ORGANISATION", "oUnrelated.ORGANISATIONID = cUnrelated.CONTACTID", "oUnrelated") - .join("CONTACT", "cSource.CONTACTID = ud.SOURCEDUPLICATEID", "cSource") - .join("ORGANISATION", "oSource.ORGANISATIONID = cSource.CONTACTID", "oSource") - //If the clusterid parameter is present, only load the duplicates for this particular cluster - .whereIfSet(["UNRELATEDDUPLICATES", "CLUSTERID", "ud"], clusterId); -} - -unrelatedDuplicates = querySelect.table(); - -for (let i = 0; i < unrelatedDuplicates.length; i++) -{ - let id = unrelatedDuplicates[i][INDEX_ID]; - let sourceInfo = ""; - let unrelatedInfo = ""; - - let sourceInfo1 = unrelatedDuplicates[i][INDEX_SOURCE_INFO1]; - let sourceInfo2 = unrelatedDuplicates[i][INDEX_SOURCE_INFO2]; - let unrelatedInfo1 = unrelatedDuplicates[i][INDEX_UNRELATED_INFO1]; - let unrelatedInfo2 = unrelatedDuplicates[i][INDEX_UNRELATED_INFO2]; - - sourceInfo = sourceInfo1; - if(sourceInfo2 != undefined) - sourceInfo += " " + sourceInfo2; - - unrelatedInfo = unrelatedInfo1; - if(unrelatedInfo2 != undefined) - unrelatedInfo += " " + unrelatedInfo2; - - resultUnrelatedDuplicates.push([id, sourceInfo, unrelatedInfo]); -} - -result.object(resultUnrelatedDuplicates); \ No newline at end of file diff --git a/entity/DuplicatesUnrelated_entity/recordcontainers/jditorecordcontainer/onDelete.js b/entity/DuplicatesUnrelated_entity/recordcontainers/jditorecordcontainer/onDelete.js deleted file mode 100644 index 4cb5ca4f2a88d7144b24d27ecf99028f547ca144..0000000000000000000000000000000000000000 --- a/entity/DuplicatesUnrelated_entity/recordcontainers/jditorecordcontainer/onDelete.js +++ /dev/null @@ -1,3 +0,0 @@ -import("Sql_lib"); - -newWhere("UNRELATEDDUPLICATES.ID", "$local.uid").deleteData(); \ No newline at end of file diff --git a/entity/Duplicates_entity/Duplicates_entity.aod b/entity/Duplicates_entity/Duplicates_entity.aod deleted file mode 100644 index fe9a19485083c678b01823430ae02631da122683..0000000000000000000000000000000000000000 --- a/entity/Duplicates_entity/Duplicates_entity.aod +++ /dev/null @@ -1,234 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> - <name>Duplicates_entity</name> - <title>Duplicates</title> - <majorModelMode>DISTRIBUTED</majorModelMode> - <documentation>%aditoprj%/entity/Duplicates_entity/documentation.adoc</documentation> - <siblings> - <element>DuplicatesUnrelated_entity</element> - </siblings> - <iconId>VAADIN:DATABASE</iconId> - <recordContainer>recordContainer</recordContainer> - <entityFields> - <entityProvider> - <name>#PROVIDER</name> - </entityProvider> - <entityField> - <name>CLUSTER_DESCRIPTION</name> - <title>Cluster description</title> - </entityField> - <entityField> - <name>COUNT_DUPLICATES_IN_CLUSTER</name> - <title>Count duplicates in cluster</title> - <contentType>NUMBER</contentType> - </entityField> - <entityField> - <name>TARGET_ENTITY</name> - </entityField> - <entityField> - <name>UID</name> - </entityField> - <entityProvider> - <name>SelfPersonDuplicatesProvider</name> - <titlePluralProcess>%aditoprj%/entity/Duplicates_entity/entityfields/selfpersonduplicatesprovider/titlePluralProcess.js</titlePluralProcess> - <titlePlural>Person duplicates</titlePlural> - <children> - <entityParameter> - <name>TargetEntity</name> - <expose v="true" /> - <mandatory v="true" /> - </entityParameter> - </children> - </entityProvider> - <entityConsumer> - <name>SelfPersonDuplicatesConsumer</name> - <dependency> - <name>dependency</name> - <entityName>Duplicates_entity</entityName> - <fieldName>SelfPersonDuplicatesProvider</fieldName> - </dependency> - <children> - <entityParameter> - <name>TargetEntity</name> - <valueProcess>%aditoprj%/entity/Duplicates_entity/entityfields/selfpersonduplicatesconsumer/children/targetentity/valueProcess.js</valueProcess> - </entityParameter> - <entityParameter> - <name>ClusterId_param</name> - <valueProcess>%aditoprj%/entity/Duplicates_entity/entityfields/selfpersonduplicatesconsumer/children/clusterid_param/valueProcess.js</valueProcess> - <title></title> - </entityParameter> - </children> - </entityConsumer> - <entityParameter> - <name>TargetEntity</name> - <expose v="true" /> - <mandatory v="true" /> - </entityParameter> - <entityConsumer> - <name>SelfOrganisationDuplicatesConsumer</name> - <dependency> - <name>dependency</name> - <entityName>Duplicates_entity</entityName> - <fieldName>SelfOrganisationDuplicatesProvider</fieldName> - </dependency> - <children> - <entityParameter> - <name>TargetEntity</name> - <valueProcess>%aditoprj%/entity/Duplicates_entity/entityfields/selforganisationduplicatesconsumer/children/targetentity/valueProcess.js</valueProcess> - </entityParameter> - <entityParameter> - <name>ClusterId_param</name> - <valueProcess>%aditoprj%/entity/Duplicates_entity/entityfields/selforganisationduplicatesconsumer/children/clusterid_param/valueProcess.js</valueProcess> - </entityParameter> - </children> - </entityConsumer> - <entityProvider> - <name>SelfOrganisationDuplicatesProvider</name> - <titlePlural>Organisation duplicates</titlePlural> - </entityProvider> - <entityConsumer> - <name>DuplicatesUnrelatedPersonConsumer</name> - <dependency> - <name>dependency</name> - <entityName>DuplicatesUnrelated_entity</entityName> - <fieldName>UnrelatedPersonsProvider</fieldName> - </dependency> - <children> - <entityParameter> - <name>TargetEntity</name> - <valueProcess>%aditoprj%/entity/Duplicates_entity/entityfields/duplicatesunrelatedpersonconsumer/children/targetentity/valueProcess.js</valueProcess> - </entityParameter> - <entityParameter> - <name>ClusterId_param</name> - <valueProcess>%aditoprj%/entity/Duplicates_entity/entityfields/duplicatesunrelatedpersonconsumer/children/clusterid_param/valueProcess.js</valueProcess> - </entityParameter> - </children> - </entityConsumer> - <entityField> - <name>CLUSTER_ID</name> - </entityField> - <entityConsumer> - <name>DuplicatePersonsConsumer</name> - <dependency> - <name>dependency</name> - <entityName>Person_entity</entityName> - <fieldName>NonselfDuplicates</fieldName> - </dependency> - <children> - <entityParameter> - <name>OnlyShowContactIds_param</name> - <valueProcess>%aditoprj%/entity/Duplicates_entity/entityfields/duplicatepersonsconsumer/children/onlyshowcontactids_param/valueProcess.js</valueProcess> - </entityParameter> - <entityParameter> - <name>DuplicateActionsControl_param</name> - <valueProcess>%aditoprj%/entity/Duplicates_entity/entityfields/duplicatepersonsconsumer/children/duplicateactionscontrol_param/valueProcess.js</valueProcess> - </entityParameter> - </children> - </entityConsumer> - <entityActionGroup> - <name>DuplicateClusterActionGroup</name> - <title>Duplicate actions</title> - <children> - <entityActionField> - <name>IgnoreWholeCluster</name> - <title>Ignore whole cluster</title> - <onActionProcess>%aditoprj%/entity/Duplicates_entity/entityfields/duplicateclusteractiongroup/children/ignorewholecluster/onActionProcess.js</onActionProcess> - <isSelectionAction v="true" /> - <iconId>VAADIN:CLOSE</iconId> - </entityActionField> - </children> - </entityActionGroup> - <entityConsumer> - <name>DuplicatesUnrelatedOrganisationConsumer</name> - <dependency> - <name>dependency</name> - <entityName>DuplicatesUnrelated_entity</entityName> - <fieldName>UnrelatedOrganisationsProvider</fieldName> - </dependency> - <children> - <entityParameter> - <name>TargetEntity</name> - <valueProcess>%aditoprj%/entity/Duplicates_entity/entityfields/duplicatesunrelatedorganisationconsumer/children/targetentity/valueProcess.js</valueProcess> - </entityParameter> - <entityParameter> - <name>ClusterId_param</name> - <valueProcess>%aditoprj%/entity/Duplicates_entity/entityfields/duplicatesunrelatedorganisationconsumer/children/clusterid_param/valueProcess.js</valueProcess> - </entityParameter> - </children> - </entityConsumer> - <entityActionGroup> - <name>PersonOpenClusterDetailActionGroup</name> - <children> - <entityActionField> - <name>PersonOpenClusterDetail</name> - <title></title> - <onActionProcess>%aditoprj%/entity/Duplicates_entity/entityfields/personopenclusterdetailactiongroup/children/personopenclusterdetail/onActionProcess.js</onActionProcess> - <isSelectionAction v="true" /> - <iconId>VAADIN:FOLDER_OPEN</iconId> - </entityActionField> - </children> - </entityActionGroup> - <entityParameter> - <name>ClusterId_param</name> - <expose v="true" /> - </entityParameter> - <entityActionGroup> - <name>OrganisationOpenClusterDetailActionGroup</name> - <children> - <entityActionField> - <name>OrganisationOpenClusterDetail</name> - <title>Open cluster detail</title> - <onActionProcess>%aditoprj%/entity/Duplicates_entity/entityfields/organisationopenclusterdetailactiongroup/children/organisationopenclusterdetail/onActionProcess.js</onActionProcess> - <isSelectionAction v="true" /> - <iconId>VAADIN:FOLDER_OPEN</iconId> - </entityActionField> - </children> - </entityActionGroup> - <entityConsumer> - <name>DuplicateOrganisationsConsumer</name> - <dependency> - <name>dependency</name> - <entityName>Organisation_entity</entityName> - <fieldName>NonselfDuplicates</fieldName> - </dependency> - <children> - <entityParameter> - <name>DuplicateActionsControl_param</name> - <valueProcess>%aditoprj%/entity/Duplicates_entity/entityfields/duplicateorganisationsconsumer/children/duplicateactionscontrol_param/valueProcess.js</valueProcess> - </entityParameter> - <entityParameter> - <name>OnlyShowContactIds_param</name> - <valueProcess>%aditoprj%/entity/Duplicates_entity/entityfields/duplicateorganisationsconsumer/children/onlyshowcontactids_param/valueProcess.js</valueProcess> - </entityParameter> - </children> - </entityConsumer> - <entityProvider> - <name>#PROVIDER_AGGREGATES</name> - <useAggregates v="true" /> - </entityProvider> - </entityFields> - <recordContainers> - <jDitoRecordContainer> - <name>recordContainer</name> - <jDitoRecordAlias>Data_alias</jDitoRecordAlias> - <contentProcess>%aditoprj%/entity/Duplicates_entity/recordcontainers/recordcontainer/contentProcess.js</contentProcess> - <recordFieldMappings> - <jDitoRecordFieldMapping> - <name>UID.value</name> - </jDitoRecordFieldMapping> - <jDitoRecordFieldMapping> - <name>CLUSTER_DESCRIPTION.value</name> - </jDitoRecordFieldMapping> - <jDitoRecordFieldMapping> - <name>COUNT_DUPLICATES_IN_CLUSTER.value</name> - </jDitoRecordFieldMapping> - <jDitoRecordFieldMapping> - <name>TARGET_ENTITY.value</name> - </jDitoRecordFieldMapping> - <jDitoRecordFieldMapping> - <name>CLUSTER_ID.value</name> - </jDitoRecordFieldMapping> - </recordFieldMappings> - </jDitoRecordContainer> - </recordContainers> -</entity> diff --git a/entity/Duplicates_entity/documentation.adoc b/entity/Duplicates_entity/documentation.adoc deleted file mode 100644 index aa8d46c4a31d622c6ed142e3e92422218a302ae9..0000000000000000000000000000000000000000 --- a/entity/Duplicates_entity/documentation.adoc +++ /dev/null @@ -1,3 +0,0 @@ -=Duplicates_entity - -This Entity shows the Duplicates of \ No newline at end of file diff --git a/entity/Duplicates_entity/entityfields/duplicateclusteractiongroup/children/ignorewholecluster/onActionProcess.js b/entity/Duplicates_entity/entityfields/duplicateclusteractiongroup/children/ignorewholecluster/onActionProcess.js deleted file mode 100644 index 77822dbca0461d5ffccc31af058b9a5750002a4b..0000000000000000000000000000000000000000 --- a/entity/Duplicates_entity/entityfields/duplicateclusteractiongroup/children/ignorewholecluster/onActionProcess.js +++ /dev/null @@ -1,27 +0,0 @@ -import("system.logging"); -import("system.neon"); -import("system.vars"); -import("DuplicateScanner_lib"); -import("system.notification"); - -let clusterId = vars.get("$sys.selection"); - -let duplicateContactIdsInClusterRay = DuplicateScannerUtils.getCachedDuplicatesForClusterId(clusterId) - -if(duplicateContactIdsInClusterRay.length > 1) -{ - let referenceDuplicateId = duplicateContactIdsInClusterRay[0]; - for (let i = 1; i < duplicateContactIdsInClusterRay.length; i++) - { - DuplicateScannerUtils.createUnrelatedDuplicateRelation(referenceDuplicateId, duplicateContactIdsInClusterRay[i], clusterId); - } - //notification.createConfig().notificationType(notification.t) - //neon.refresh(["$field.SelfPersonDuplicatesConsumer"]) - - //todo Temporary!!! In the first refresh is the record via idValue selected and gets refreshed but stays visible in the record container - //todo Temporary!!! on the second refresh, no selecten remains and the container loads the remaining records as expected - neon.refreshAll(); - neon.refreshAll(); -} - - diff --git a/entity/Duplicates_entity/entityfields/duplicateorganisationsconsumer/children/duplicateactionscontrol_param/valueProcess.js b/entity/Duplicates_entity/entityfields/duplicateorganisationsconsumer/children/duplicateactionscontrol_param/valueProcess.js deleted file mode 100644 index 5267adbe23e51fbb6b2c1c2aa44c947c3c3e7c34..0000000000000000000000000000000000000000 --- a/entity/Duplicates_entity/entityfields/duplicateorganisationsconsumer/children/duplicateactionscontrol_param/valueProcess.js +++ /dev/null @@ -1,2 +0,0 @@ -import("system.result"); -result.string("2");//todo exchange with keyword diff --git a/entity/Duplicates_entity/entityfields/duplicateorganisationsconsumer/children/onlyshowcontactids_param/valueProcess.js b/entity/Duplicates_entity/entityfields/duplicateorganisationsconsumer/children/onlyshowcontactids_param/valueProcess.js deleted file mode 100644 index ecb8c518cd40068c5e36606b64c83765a69962f6..0000000000000000000000000000000000000000 --- a/entity/Duplicates_entity/entityfields/duplicateorganisationsconsumer/children/onlyshowcontactids_param/valueProcess.js +++ /dev/null @@ -1,18 +0,0 @@ -import("system.logging"); -import("system.result"); -import("system.vars"); -import("DuplicateScanner_lib"); - -let clusterRecordId = vars.get("$field.UID"); - -let contactIdsInCluster = DuplicateScannerUtils.getCachedDuplicatesForClusterId(clusterRecordId); - -/* - * To achieve that if there are no duplicates, no contacts should be shown and therefore returned by the - * recordcontainer, an invalid id gets returned. It then is used in the conditionProcess to load the duplicates. - * Because of its invalidity, no records are shown. -*/ -if(contactIdsInCluster.length == 0) - result.string(JSON.stringify(["nodata"])); -else - result.string(JSON.stringify(contactIdsInCluster)); \ No newline at end of file diff --git a/entity/Duplicates_entity/entityfields/duplicatepersonsconsumer/children/duplicateactionscontrol_param/valueProcess.js b/entity/Duplicates_entity/entityfields/duplicatepersonsconsumer/children/duplicateactionscontrol_param/valueProcess.js deleted file mode 100644 index 5267adbe23e51fbb6b2c1c2aa44c947c3c3e7c34..0000000000000000000000000000000000000000 --- a/entity/Duplicates_entity/entityfields/duplicatepersonsconsumer/children/duplicateactionscontrol_param/valueProcess.js +++ /dev/null @@ -1,2 +0,0 @@ -import("system.result"); -result.string("2");//todo exchange with keyword diff --git a/entity/Duplicates_entity/entityfields/duplicatepersonsconsumer/children/onlyshowcontactids_param/valueProcess.js b/entity/Duplicates_entity/entityfields/duplicatepersonsconsumer/children/onlyshowcontactids_param/valueProcess.js deleted file mode 100644 index ecb8c518cd40068c5e36606b64c83765a69962f6..0000000000000000000000000000000000000000 --- a/entity/Duplicates_entity/entityfields/duplicatepersonsconsumer/children/onlyshowcontactids_param/valueProcess.js +++ /dev/null @@ -1,18 +0,0 @@ -import("system.logging"); -import("system.result"); -import("system.vars"); -import("DuplicateScanner_lib"); - -let clusterRecordId = vars.get("$field.UID"); - -let contactIdsInCluster = DuplicateScannerUtils.getCachedDuplicatesForClusterId(clusterRecordId); - -/* - * To achieve that if there are no duplicates, no contacts should be shown and therefore returned by the - * recordcontainer, an invalid id gets returned. It then is used in the conditionProcess to load the duplicates. - * Because of its invalidity, no records are shown. -*/ -if(contactIdsInCluster.length == 0) - result.string(JSON.stringify(["nodata"])); -else - result.string(JSON.stringify(contactIdsInCluster)); \ No newline at end of file diff --git a/entity/Duplicates_entity/entityfields/duplicatesunrelatedorganisationconsumer/children/clusterid_param/valueProcess.js b/entity/Duplicates_entity/entityfields/duplicatesunrelatedorganisationconsumer/children/clusterid_param/valueProcess.js deleted file mode 100644 index 152dfe0324a75ddba53552148d86b4af97acc6dd..0000000000000000000000000000000000000000 --- a/entity/Duplicates_entity/entityfields/duplicatesunrelatedorganisationconsumer/children/clusterid_param/valueProcess.js +++ /dev/null @@ -1,5 +0,0 @@ -import("system.vars"); -import("system.result"); - -let clusterId = vars.get("$field.UID"); -result.string(clusterId); \ No newline at end of file diff --git a/entity/Duplicates_entity/entityfields/duplicatesunrelatedpersonconsumer/children/clusterid_param/valueProcess.js b/entity/Duplicates_entity/entityfields/duplicatesunrelatedpersonconsumer/children/clusterid_param/valueProcess.js deleted file mode 100644 index 03d5df5be8044683b94f306002bcbeada25b8737..0000000000000000000000000000000000000000 --- a/entity/Duplicates_entity/entityfields/duplicatesunrelatedpersonconsumer/children/clusterid_param/valueProcess.js +++ /dev/null @@ -1,6 +0,0 @@ -import("system.vars"); -import("system.result"); - -//let clusterId = vars.get("$field.UID"); -let clusterId = vars.get("$param.ClusterId_param"); -result.string(clusterId); \ No newline at end of file diff --git a/entity/Duplicates_entity/entityfields/duplicatesunrelatedpersonconsumer/children/targetentity/valueProcess.js b/entity/Duplicates_entity/entityfields/duplicatesunrelatedpersonconsumer/children/targetentity/valueProcess.js deleted file mode 100644 index f8b07f56abc4e6b2df8800916a77fa58b50e99bf..0000000000000000000000000000000000000000 --- a/entity/Duplicates_entity/entityfields/duplicatesunrelatedpersonconsumer/children/targetentity/valueProcess.js +++ /dev/null @@ -1,4 +0,0 @@ -import("system.vars"); -import("system.result"); - -result.string("Person_entity"); \ No newline at end of file diff --git a/entity/Duplicates_entity/entityfields/organisationopenclusterdetailactiongroup/children/organisationopenclusterdetail/onActionProcess.js b/entity/Duplicates_entity/entityfields/organisationopenclusterdetailactiongroup/children/organisationopenclusterdetail/onActionProcess.js deleted file mode 100644 index f599915bdc2dbbb45a9b52bb92e7de622c74f618..0000000000000000000000000000000000000000 --- a/entity/Duplicates_entity/entityfields/organisationopenclusterdetailactiongroup/children/organisationopenclusterdetail/onActionProcess.js +++ /dev/null @@ -1,12 +0,0 @@ -import("system.logging"); -import("system.vars"); -import("system.neon"); - -let contextName = "Duplicates"; -let viewName = "OrganisationClusterMain_view"; - -var params = {}; -params["ClusterId_param"] = vars.get("$sys.selection")[0]; -params["TargetEntity"] = "Organisation_entity"; - -neon.openContext(contextName, viewName, null, neon.OPERATINGSTATE_VIEW, params); \ No newline at end of file diff --git a/entity/Duplicates_entity/entityfields/personopenclusterdetailactiongroup/children/personopenclusterdetail/onActionProcess.js b/entity/Duplicates_entity/entityfields/personopenclusterdetailactiongroup/children/personopenclusterdetail/onActionProcess.js deleted file mode 100644 index 9d5cf8d6da175cc02200a6874c07f460589f6745..0000000000000000000000000000000000000000 --- a/entity/Duplicates_entity/entityfields/personopenclusterdetailactiongroup/children/personopenclusterdetail/onActionProcess.js +++ /dev/null @@ -1,12 +0,0 @@ -import("system.logging"); -import("system.vars"); -import("system.neon"); - -let contextName = "Duplicates"; -let viewName = "PersonClusterMain_view"; - -var params = {}; -params["ClusterId_param"] = vars.get("$sys.selection")[0]; -params["TargetEntity"] = "Person_entity"; - -neon.openContext(contextName, viewName, null, neon.OPERATINGSTATE_VIEW, params); \ No newline at end of file diff --git a/entity/Duplicates_entity/entityfields/selforganisationduplicatesconsumer/children/clusterid_param/valueProcess.js b/entity/Duplicates_entity/entityfields/selforganisationduplicatesconsumer/children/clusterid_param/valueProcess.js deleted file mode 100644 index 8ef7b768764a4f534b886492c99ec2e9408c00e5..0000000000000000000000000000000000000000 --- a/entity/Duplicates_entity/entityfields/selforganisationduplicatesconsumer/children/clusterid_param/valueProcess.js +++ /dev/null @@ -1,5 +0,0 @@ -import("system.vars"); -import("system.result"); - -let clusterId = vars.get("$param.ClusterId_param"); -result.string(clusterId); \ No newline at end of file diff --git a/entity/Duplicates_entity/entityfields/selforganisationduplicatesconsumer/children/targetentity/valueProcess.js b/entity/Duplicates_entity/entityfields/selforganisationduplicatesconsumer/children/targetentity/valueProcess.js deleted file mode 100644 index e781fb72fd248164b8b63a98008094744aee7460..0000000000000000000000000000000000000000 --- a/entity/Duplicates_entity/entityfields/selforganisationduplicatesconsumer/children/targetentity/valueProcess.js +++ /dev/null @@ -1,2 +0,0 @@ -import("system.result"); -result.string("Organisation_entity"); \ No newline at end of file diff --git a/entity/Duplicates_entity/entityfields/selfpersonduplicatesconsumer/children/clusterid_param/valueProcess.js b/entity/Duplicates_entity/entityfields/selfpersonduplicatesconsumer/children/clusterid_param/valueProcess.js deleted file mode 100644 index 258d52e236265f259b354a56fd04b1a3d2fcb566..0000000000000000000000000000000000000000 --- a/entity/Duplicates_entity/entityfields/selfpersonduplicatesconsumer/children/clusterid_param/valueProcess.js +++ /dev/null @@ -1,6 +0,0 @@ -import("system.vars"); -import("system.result"); - -//let clusterId = vars.get("$sys.selection"); -let clusterId = vars.get("$param.ClusterId_param"); -result.string(clusterId); \ No newline at end of file diff --git a/entity/Duplicates_entity/entityfields/selfpersonduplicatesprovider/titlePluralProcess.js b/entity/Duplicates_entity/entityfields/selfpersonduplicatesprovider/titlePluralProcess.js deleted file mode 100644 index b213a20410d97225b6a299a51857dcf0057ba50c..0000000000000000000000000000000000000000 --- a/entity/Duplicates_entity/entityfields/selfpersonduplicatesprovider/titlePluralProcess.js +++ /dev/null @@ -1,3 +0,0 @@ -import("system.result"); -import("system.translate"); -result.string(translate.text("Person duplicates")); \ No newline at end of file diff --git a/entity/Duplicates_entity/recordcontainers/recordcontainer/contentProcess.js b/entity/Duplicates_entity/recordcontainers/recordcontainer/contentProcess.js deleted file mode 100644 index fc29941db97b09cd069a88b166304eb2be952b1e..0000000000000000000000000000000000000000 --- a/entity/Duplicates_entity/recordcontainers/recordcontainer/contentProcess.js +++ /dev/null @@ -1,121 +0,0 @@ -import("Sql_lib"); -import("system.logging"); -import("system.db"); -import("system.vars"); -import("system.result"); - -var INDEX_CLUSTERID = 0; -var INDEX_FIRSTNAME = 1; -var INDEX_LASTNAME = 2; -var INDEX_ORGNAME = 1; - -let targetEntity = vars.get("$param.TargetEntity"); -let duplicates = []; - -let selectedClusterId = vars.get("$param.ClusterId_param"); - -let duplicateInfosQuery = new SqlBuilder(); - -let selectedId = vars.get("$local.idvalues"); - -if(selectedId) -{ - /* - * Definitely a todo. - * Support for the action "Ignore whole cluster" - * If this action is used two times in a row, an error occurs on the second time. - * Although the selected record isn't present in the recordcontainer any more, the core tries to load a record with the same id. - * As a result an error gets thrown. If a dummy record gets returned here, it plays along with the current internal logic and doesn't throw an error. - * If a preview should be shown, this part of the container has to be extended. - */ - duplicates.push([selectedId, "", "", "", ""]); - result.object(duplicates); -} -else -{ - if(targetEntity == "Person_entity") - { - duplicateInfosQuery.select("CLUSTERID, FIRSTNAME, LASTNAME") - .from("DUPLICATECLUSTERS") - .join("CONTACT", "CONTACT.CONTACTID = DUPLICATEID") - .join("PERSON", "PERSON.PERSONID = CONTACT.PERSON_ID") - .where("DUPLICATEID not in (select UNRELATEDDUPLICATES.UNRELATEDDUPLICATEID from UNRELATEDDUPLICATES)") - .andIfSet("DUPLICATECLUSTERS.CLUSTERID", selectedClusterId) - .orderBy("CLUSTERID"); - } - else - { - duplicateInfosQuery.select("CLUSTERID, ORGANISATION.\"NAME\"") - .from("DUPLICATECLUSTERS") - .join("CONTACT", "CONTACT.CONTACTID = DUPLICATEID") - .join("ORGANISATION", "ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID") - .where("DUPLICATEID not in (select UNRELATEDDUPLICATES.UNRELATEDDUPLICATEID from UNRELATEDDUPLICATES)") - .andIfSet("DUPLICATECLUSTERS.CLUSTERID", vars.get("$local.idvalues"), SqlBuilder.IN()) - .orderBy("CLUSTERID"); - } - let duplicateInfos = duplicateInfosQuery.table(); - - let MAX_SHOW_CLUSTER_RECORDS = 4; - let recordClusterId = ""; - let recordDescription = ""; - let recordDuplicateInClusterCount = 0; - - for (let i = 0; i < duplicateInfos.length; i++) - { - let currentClusterId = duplicateInfos[i][INDEX_CLUSTERID]; - let currentDescription = ""; - - //Build the description depending on the targetEntity - if(targetEntity == "Person_entity") - currentDescription = duplicateInfos[i][INDEX_FIRSTNAME] + " " + duplicateInfos[i][INDEX_LASTNAME]; - else - currentDescription = duplicateInfos[i][INDEX_ORGNAME]; - - if(i == 0) - { - recordClusterId = currentClusterId; - recordDescription = currentDescription; - recordDuplicateInClusterCount = 1; - continue; - } - - //If the record belongs to the same Cluster as the one before, append its value and increase the counter - //otherwise write the clusters record an start a new record. - if(recordClusterId == currentClusterId) - { - if(recordDuplicateInClusterCount < MAX_SHOW_CLUSTER_RECORDS) - recordDescription += ", " + currentDescription; - if(recordDuplicateInClusterCount == MAX_SHOW_CLUSTER_RECORDS) - recordDescription += ", ..." - recordDuplicateInClusterCount++; - - /* - * Finish the current record if its the last duplicate. - * It has to be checked wether or not more than one element is currently in the cluster: - * Normally, there are always at least 2 elements in a cluster. If then a duplicate relation - * is beign ignored, there's only one record left in this particluar cluster. - * As there are then no interactions possible (and a cluster of one is no cluster), this cluster musn't be shown in the list. - */ - if(i == duplicateInfos.length-1 && recordDuplicateInClusterCount > 1) - duplicates.push([recordClusterId, recordDescription, recordDuplicateInClusterCount, targetEntity, recordClusterId]); - } - else - { - /* - * Finish the current record if its the next cluster. - * It has to be checked wether or not more than one element is currently in the cluster: - * Normally, there are always at least 2 elements in a cluster. If then a duplicate relation - * is beign ignored, there's only one record left in this particluar cluster. - * As there would be no interactions possible (and a cluster of one is no cluster), this cluster musn't be shown in the list. - */ - if(recordDuplicateInClusterCount > 1) - duplicates.push([recordClusterId, recordDescription, recordDuplicateInClusterCount, targetEntity, recordClusterId]); - - recordClusterId = currentClusterId - recordDescription = currentDescription - recordDuplicateInClusterCount = 1; - } - } - - result.object(duplicates); -} diff --git a/entity/EmailData_entity/EmailData_entity.aod b/entity/EmailData_entity/EmailData_entity.aod new file mode 100644 index 0000000000000000000000000000000000000000..86a513a1b6ed57606b1ae1f10575f37be7aa905d --- /dev/null +++ b/entity/EmailData_entity/EmailData_entity.aod @@ -0,0 +1,72 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> + <name>EmailData_entity</name> + <title>Email</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <recordContainer>jdito</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + </entityProvider> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityField> + <name>SUBJECT</name> + <title>Subject</title> + </entityField> + <entityField> + <name>SENDER</name> + <title>Sender address</title> + </entityField> + <entityField> + <name>UID</name> + </entityField> + <entityField> + <name>BODY_PLAIN</name> + <title>Email body</title> + </entityField> + <entityField> + <name>ATTACHMENTCOUNT</name> + <title>Attachment count</title> + <contentType>NUMBER</contentType> + </entityField> + <entityField> + <name>BODY_REGEX</name> + <title>Email body (Regular expression)</title> + </entityField> + </entityFields> + <recordContainers> + <jDitoRecordContainer> + <name>jdito</name> + <jDitoRecordAlias>Data_alias</jDitoRecordAlias> + <isFilterable v="true" /> + <recordFieldMappings> + <jDitoRecordFieldMapping> + <name>UID.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>SUBJECT.value</name> + <isFilterable v="true" /> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>SENDER.value</name> + <isFilterable v="true" /> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>BODY_PLAIN.value</name> + <isFilterable v="true" /> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>BODY_REGEX.value</name> + <isFilterable v="true" /> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>ATTACHMENTCOUNT.value</name> + <isFilterable v="true" /> + </jDitoRecordFieldMapping> + </recordFieldMappings> + </jDitoRecordContainer> + </recordContainers> +</entity> diff --git a/entity/EmailFilterHandling_entity/EmailFilterHandling_entity.aod b/entity/EmailFilterHandling_entity/EmailFilterHandling_entity.aod new file mode 100644 index 0000000000000000000000000000000000000000..2b3ec48be0b04a1e3f76b9818f7a2621134b5dc9 --- /dev/null +++ b/entity/EmailFilterHandling_entity/EmailFilterHandling_entity.aod @@ -0,0 +1,153 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> + <name>EmailFilterHandling_entity</name> + <title>Email Filter</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <iconId>VAADIN:INBOX</iconId> + <titlePlural>Email Filter</titlePlural> + <recordContainer>db</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + </entityProvider> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityField> + <name>FILTER_TYPE</name> + <title>Type</title> + <consumer>FilterTypeKeyword</consumer> + <mandatory v="true" /> + </entityField> + <entityField> + <name>FILTER</name> + <title>Filter</title> + <contentType>FILTER_TREE</contentType> + <valueProcess>%aditoprj%/entity/EmailFilterHandling_entity/entityfields/filter/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>EMAIL_FILTER_HANDLINGID</name> + </entityField> + <entityField> + <name>WORKFLOWDEFINITION_KEY</name> + <title>Workflow</title> + <consumer>Workflows</consumer> + <displayValueProcess>%aditoprj%/entity/EmailFilterHandling_entity/entityfields/workflowdefinition_key/displayValueProcess.js</displayValueProcess> + </entityField> + <entityConsumer> + <name>FilterTypeKeyword</name> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/EmailFilterHandling_entity/entityfields/filtertypekeyword/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityConsumer> + <name>Workflows</name> + <dependency> + <name>dependency</name> + <entityName>WorkflowDefinition_entity</entityName> + <fieldName>#PROVIDER</fieldName> + </dependency> + </entityConsumer> + <entityField> + <name>TITLE</name> + <title>Title</title> + <mandatory v="true" /> + </entityField> + <entityField> + <name>PRIORITY</name> + <title>Priority</title> + <contentType>NUMBER</contentType> + <valueProcess>%aditoprj%/entity/EmailFilterHandling_entity/entityfields/priority/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>ISACTIVE</name> + <title>Active</title> + <contentType>BOOLEAN</contentType> + <valueProcess>%aditoprj%/entity/EmailFilterHandling_entity/entityfields/isactive/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>DESCRIPTION</name> + <title>Description</title> + <contentType>LONG_TEXT</contentType> + </entityField> + <entityField> + <name>WORKFLOWSIGNAL_NAME</name> + <title>Signal</title> + </entityField> + <entityField> + <name>ACTION_TYPE</name> + <title>Action</title> + </entityField> + <entityField> + <name>ISFALLTHROUGH</name> + <contentType>BOOLEAN</contentType> + <valueProcess>%aditoprj%/entity/EmailFilterHandling_entity/entityfields/isfallthrough/valueProcess.js</valueProcess> + </entityField> + </entityFields> + <recordContainers> + <dbRecordContainer> + <name>db</name> + <orderClauseProcess>%aditoprj%/entity/EmailFilterHandling_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess> + <alias>Data_alias</alias> + <recordFieldMappings> + <dbRecordFieldMapping> + <name>EMAIL_FILTER_HANDLINGID.value</name> + <recordfield>EMAIL_FILTER_HANDLING.EMAIL_FILTER_HANDLINGID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>FILTER_TYPE.value</name> + <recordfield>EMAIL_FILTER_HANDLING.FILTER_TYPE</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>FILTER_TYPE.displayValue</name> + <expression>%aditoprj%/entity/EmailFilterHandling_entity/recordcontainers/db/recordfieldmappings/filter_type.displayvalue/expression.js</expression> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>FILTER.value</name> + <recordfield>EMAIL_FILTER_HANDLING.FILTER</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>TITLE.value</name> + <recordfield>EMAIL_FILTER_HANDLING.TITLE</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>WORKFLOWDEFINITION_KEY.value</name> + <recordfield>EMAIL_FILTER_HANDLING.WORKFLOWDEFINITION_KEY</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>ISACTIVE.value</name> + <recordfield>EMAIL_FILTER_HANDLING.ISACTIVE</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>PRIORITY.value</name> + <recordfield>EMAIL_FILTER_HANDLING.PRIORITY</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>ISFALLTHROUGH.value</name> + <recordfield>EMAIL_FILTER_HANDLING.ISFALLTHROUGH</recordfield> + </dbRecordFieldMapping> + </recordFieldMappings> + <linkInformation> + <linkInformation> + <name>9827b0a5-16f0-4911-af60-9d446adcc3b8</name> + <tableName>EMAIL_FILTER_HANDLING</tableName> + <primaryKey>EMAIL_FILTER_HANDLINGID</primaryKey> + <isUIDTable v="true" /> + <readonly v="false" /> + </linkInformation> + </linkInformation> + </dbRecordContainer> + </recordContainers> +</entity> diff --git a/entity/EmailFilterHandling_entity/entityfields/filter/valueProcess.js b/entity/EmailFilterHandling_entity/entityfields/filter/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..68905f859e230105569f3c4675f5ca9df21c6f7b --- /dev/null +++ b/entity/EmailFilterHandling_entity/entityfields/filter/valueProcess.js @@ -0,0 +1,19 @@ +import("KeywordRegistry_basic"); +import("Util_lib"); +import("system.neon"); +import("system.vars"); +import("system.result"); + +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) +{ + var currentFilter = Utils.parseJSON(vars.get("$this.value")); + var requiredEntity = vars.get("$field.FILTER_TYPE") == $KeywordRegistry.emailFilterType$blacklist() + ? "BulkMailRecipient_entity" + : "EmailData_entity"; + + if (!currentFilter || currentFilter.entity != requiredEntity) + { + var emptyFilter = {entity: requiredEntity, filter: {type: "group", operator: "AND", childs: []}}; + result.string(JSON.stringify(emptyFilter)); + } +} \ No newline at end of file diff --git a/entity/EmailFilterHandling_entity/entityfields/filtertypekeyword/children/containername_param/valueProcess.js b/entity/EmailFilterHandling_entity/entityfields/filtertypekeyword/children/containername_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..0122337e949356e527363b705217383ba074f32d --- /dev/null +++ b/entity/EmailFilterHandling_entity/entityfields/filtertypekeyword/children/containername_param/valueProcess.js @@ -0,0 +1,3 @@ +import("system.result"); + +result.string("EmailFilterType"); \ No newline at end of file diff --git a/entity/EmailFilterHandling_entity/entityfields/isactive/valueProcess.js b/entity/EmailFilterHandling_entity/entityfields/isactive/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..e056e70a86e09a933db2882efb0ef4a1ed7163fe --- /dev/null +++ b/entity/EmailFilterHandling_entity/entityfields/isactive/valueProcess.js @@ -0,0 +1,8 @@ +import("system.neon"); +import("system.vars"); +import("system.result"); + +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) +{ + result.string("1"); +} \ No newline at end of file diff --git a/entity/EmailFilterHandling_entity/entityfields/isfallthrough/valueProcess.js b/entity/EmailFilterHandling_entity/entityfields/isfallthrough/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..3c10e6fa54fca826654bc01d400f8309522d6453 --- /dev/null +++ b/entity/EmailFilterHandling_entity/entityfields/isfallthrough/valueProcess.js @@ -0,0 +1,8 @@ +import("system.neon"); +import("system.vars"); +import("system.result"); + +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) +{ + result.string("0"); +} \ No newline at end of file diff --git a/entity/EmailFilterHandling_entity/entityfields/priority/valueProcess.js b/entity/EmailFilterHandling_entity/entityfields/priority/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..dfe73fb463cc738c21425b263856cd993e990d30 --- /dev/null +++ b/entity/EmailFilterHandling_entity/entityfields/priority/valueProcess.js @@ -0,0 +1,15 @@ +import("system.result"); +import("Sql_lib"); +import("system.neon"); +import("system.vars"); + +var filterType = vars.get("$field.FILTER_TYPE"); +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && filterType && !vars.get("$this.value")) +{ + var lastPriority = newSelect("max(PRIORITY)") + .from("EMAIL_FILTER_HANDLING") + .where("EMAIL_FILTER_HANDLING.FILTER_TYPE", filterType) + .cell(); + //no check if value == "" because Number("") === 0 + result.string(Number(lastPriority) + 1); +} \ No newline at end of file diff --git a/entity/EmailFilterHandling_entity/entityfields/workflowdefinition_key/displayValueProcess.js b/entity/EmailFilterHandling_entity/entityfields/workflowdefinition_key/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..9b4c511d8c7320136a7cee0848d48822b2c6ca75 --- /dev/null +++ b/entity/EmailFilterHandling_entity/entityfields/workflowdefinition_key/displayValueProcess.js @@ -0,0 +1,5 @@ +import("system.vars"); +import("system.result"); + +if (vars.get("$field.WORKFLOWDEFINITION_KEY")) +result.string("Werbeeinstellung setzen") \ No newline at end of file diff --git a/entity/EmailFilterHandling_entity/recordcontainers/db/recordfieldmappings/filter_type.displayvalue/expression.js b/entity/EmailFilterHandling_entity/recordcontainers/db/recordfieldmappings/filter_type.displayvalue/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..e6005b9db2cf77e40d352e2554430f2827292601 --- /dev/null +++ b/entity/EmailFilterHandling_entity/recordcontainers/db/recordfieldmappings/filter_type.displayvalue/expression.js @@ -0,0 +1,4 @@ +import("system.result"); +import("Keyword_lib"); + +result.string(KeywordUtils.getResolvedTitleSqlPart("EmailFilterType", "FILTER_TYPE")); \ No newline at end of file diff --git a/entity/Email_entity/Email_entity.aod b/entity/Email_entity/Email_entity.aod index 852de0f302412a156749687e8310926281b57465..bd561c52e2dd4dd40cd496fb8e680db3111c9433 100644 --- a/entity/Email_entity/Email_entity.aod +++ b/entity/Email_entity/Email_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Email_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/Email_entity/documentation.adoc</documentation> @@ -7,14 +7,6 @@ <entityFields> <entityProvider> <name>#PROVIDER</name> - <dependencies> - <entityDependency> - <name>e7abc276-7adc-4928-8f5c-33d8ab6247e8</name> - <entityName>Offer_entity</entityName> - <fieldName>Emails</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>UID</name> diff --git a/entity/EmployeeRole_entity/EmployeeRole_entity.aod b/entity/EmployeeRole_entity/EmployeeRole_entity.aod index 74475d9d45b11c221626176f114da280cd1c5fc4..772f769f7bcb28204547beeb4fd29519a8b0886d 100644 --- a/entity/EmployeeRole_entity/EmployeeRole_entity.aod +++ b/entity/EmployeeRole_entity/EmployeeRole_entity.aod @@ -1,10 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>EmployeeRole_entity</name> <title>Role</title> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/EmployeeRole_entity/documentation.adoc</documentation> - <grantUpdate v="false" /> + <grantUpdate v="true" /> <titlePlural>Roles</titlePlural> <recordContainer>jdito</recordContainer> <entityFields> @@ -26,14 +26,6 @@ <name>EmployeeRoles</name> <targetContextField>TARGETCONTEXT</targetContextField> <targetIdField>UID</targetIdField> - <dependencies> - <entityDependency> - <name>3bcec57a-7165-4773-9253-5ecab26ee3f4</name> - <entityName>Employee_entity</entityName> - <fieldName>EmployeeRoles</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>UserTitle_param</name> diff --git a/entity/EmployeeRole_entity/recordcontainers/jdito/contentProcess.js b/entity/EmployeeRole_entity/recordcontainers/jdito/contentProcess.js index dd75cc33f86c2b062631ed65b17a701a7ae79d31..84cbd8aec77c4f592a21d310a3fe304e041e3f96 100644 --- a/entity/EmployeeRole_entity/recordcontainers/jdito/contentProcess.js +++ b/entity/EmployeeRole_entity/recordcontainers/jdito/contentProcess.js @@ -31,7 +31,18 @@ if (userTitle && tools.existUsers(userTitle)) } var idvalues = vars.get("$local.idvalues"); -if (!Utils.isNullOrEmpty(idvalues)) +var selectedRole = vars.get("$field.ROLE"); + +// if idvalues and selectedRole are filled -> insert, update or delete happened +// if idvalues and selectedRole are filled and distinct -> edit (role in idvalues got changed to role in selectedRole) +if (!Utils.isNullOrEmpty(idvalues) && !Utils.isNullOrEmpty(selectedRole) && idvalues != selectedRole) +{ + roles = roles.filter(function(role) + { + return selectedRole.includes(role[0]); + }); +} +else if (!Utils.isNullOrEmpty(idvalues)) { roles = roles.filter(function(role) { diff --git a/entity/EmployeeToken_entity/EmployeeToken_entity.aod b/entity/EmployeeToken_entity/EmployeeToken_entity.aod index bb7b9740621ddec0a55a5603a430d09a1a83b760..7388aea9e48570a651b875896dc57cf53b3c787f 100644 --- a/entity/EmployeeToken_entity/EmployeeToken_entity.aod +++ b/entity/EmployeeToken_entity/EmployeeToken_entity.aod @@ -1,8 +1,9 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>EmployeeToken_entity</name> <title>User token</title> <majorModelMode>DISTRIBUTED</majorModelMode> + <documentation>%aditoprj%/entity/EmployeeToken_entity/documentation.adoc</documentation> <titlePlural>User tokens</titlePlural> <recordContainer>db</recordContainer> <entityFields> @@ -55,14 +56,6 @@ </entityField> <entityProvider> <name>EmployeeTokenProvider</name> - <dependencies> - <entityDependency> - <name>08c3e88c-5119-477e-8374-3f89bbc4ded0</name> - <entityName>Employee_entity</entityName> - <fieldName>EmployeeTokens</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityParameter> <name>employeeId_param</name> diff --git a/entity/EmployeeToken_entity/documentation.adoc b/entity/EmployeeToken_entity/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..bae9bc62936159c0e26b0ee19d0878a4d4527bcc --- /dev/null +++ b/entity/EmployeeToken_entity/documentation.adoc @@ -0,0 +1,12 @@ += User Token + +.Definition +This entity manages authentication tokens for users. +Those tokens might be the token for the automatic login or other special tokens used for authentication. + +.Purpose +Users or the admin can see which tokens are in the system for a particular user. +Tokens might be removed manually for various reasons. + +.Other +This entity belongs to the Employee_entity. diff --git a/entity/Employee_entity/Employee_entity.aod b/entity/Employee_entity/Employee_entity.aod index bfd8058aad0b247a60cbaa1f25a8ffe947c08eb4..7d17b6b50c75771b55e83b9354cd0e843c011a0a 100644 --- a/entity/Employee_entity/Employee_entity.aod +++ b/entity/Employee_entity/Employee_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Employee_entity</name> <title>Employee</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -230,74 +230,6 @@ <name>Employees</name> <lookupIdfield>CONTACT_ID</lookupIdfield> <filterVariablesProcess>%aditoprj%/entity/Employee_entity/entityfields/employees/filterVariablesProcess.js</filterVariablesProcess> - <dependencies> - <entityDependency> - <name>0ca415b9-a940-424e-bee8-05c007b20659</name> - <entityName>Activity_entity</entityName> - <fieldName>Employees</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>73f93f34-bfe9-48fd-b9ce-7f8ba46014c9</name> - <entityName>Timetracking_entity</entityName> - <fieldName>Employees</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>02bacafb-433c-497d-8561-96c426da61e9</name> - <entityName>Campaign_entity</entityName> - <fieldName>Employee</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>fefc05d2-6087-4600-bc77-80804654809e</name> - <entityName>CampaignStep_entity</entityName> - <fieldName>Employees</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>1affaf42-1889-42d8-802a-730a83b79cc4</name> - <entityName>Task_entity</entityName> - <fieldName>ContactEditors</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>24d41887-29f4-4a3d-9a0b-063adb6603dc</name> - <entityName>Task_entity</entityName> - <fieldName>ContactRequestors</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>6a502317-8b81-4bea-803f-003f990513df</name> - <entityName>CommRestriction_Entity</entityName> - <fieldName>EmployeeInvolved</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>773cd8d0-c4e2-4e2e-b910-a1f4e4b87801</name> - <entityName>UnlinkedMailMappingWrapper_entity</entityName> - <fieldName>Employees</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>4f377eaf-bd24-4347-99fc-c6c8ab4355be</name> - <entityName>Leadimport_entity</entityName> - <fieldName>Leadimport_Empl</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>7e6bff46-4047-49da-a5ef-40510a8255a2</name> - <entityName>VisitRecommendation_entity</entityName> - <fieldName>Employees</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>14d61385-28fb-40b2-a31a-a5764a8da2f0</name> - <entityName>VisitPlanEmployeeWeek_entity</entityName> - <fieldName>Employees</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>OnlyActives_param</name> @@ -345,38 +277,10 @@ </entityField> <entityProvider> <name>EmployeesByUserId</name> - <dependencies> - <entityDependency> - <name>1d000ca2-f27e-47d2-95e2-ee14771c4ced</name> - <entityName>WorkflowTask_entity</entityName> - <fieldName>Employees</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>c83ebe7a-5a3b-49ed-b40c-d667bb72f268</name> - <entityName>Observation_entity</entityName> - <fieldName>Users</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityProvider> <name>EmployeesByShortUserId</name> <lookupIdfield>SHORT_UID</lookupIdfield> - <dependencies> - <entityDependency> - <name>8b02831c-e831-4314-8ea3-d913c3394db2</name> - <entityName>ObjectProxy_entity</entityName> - <fieldName>Employees</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>4dad4b91-52ae-4263-9587-3b45101444fd</name> - <entityName>PermissionCalendar_entity</entityName> - <fieldName>User</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>PHONE_ADDRESS</name> diff --git a/entity/Employee_entity/recordcontainers/jdito/contentProcess.js b/entity/Employee_entity/recordcontainers/jdito/contentProcess.js index 8970fd6bd60fb0f744c14a2089ae5a213ef71702..5fabbf72734e00a22b4fb52ad5cb2e3472adcf76 100644 --- a/entity/Employee_entity/recordcontainers/jdito/contentProcess.js +++ b/entity/Employee_entity/recordcontainers/jdito/contentProcess.js @@ -1,6 +1,4 @@ -import("system.logging"); import("Sql_lib"); -import("system.db"); import("Attribute_lib"); import("system.vars"); import("system.result"); diff --git a/entity/EwsSyncAddContacts_entity/EwsSyncAddContacts_entity.aod b/entity/EwsSyncAddContacts_entity/EwsSyncAddContacts_entity.aod index 332169d840fba95e4b9a7507ede82835e4fda87e..09e4da1fcdbb91f665c805be7d4625bfa6f051f6 100644 --- a/entity/EwsSyncAddContacts_entity/EwsSyncAddContacts_entity.aod +++ b/entity/EwsSyncAddContacts_entity/EwsSyncAddContacts_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>EwsSyncAddContacts_entity</name> <title>add contact to ewssync</title> <majorModelMode>DISTRIBUTED</majorModelMode> diff --git a/entity/ExportTemplateField_entity/ExportTemplateField_entity.aod b/entity/ExportTemplateField_entity/ExportTemplateField_entity.aod index dc20a3f5bb9bec0c61d420246445af1ee6a8d848..63fc56aa972f5dafb6c28368cc40acb5f6ffc94e 100644 --- a/entity/ExportTemplateField_entity/ExportTemplateField_entity.aod +++ b/entity/ExportTemplateField_entity/ExportTemplateField_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>ExportTemplateField_entity</name> <title>Export Template Field</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -33,14 +33,6 @@ <entityProvider> <name>ExportTemplateFields</name> <documentation>%aditoprj%/entity/ExportTemplateField_entity/entityfields/exporttemplatefields/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>b111615c-cde3-46b7-b229-46cc2db004fd</name> - <entityName>ExportTemplate_entity</entityName> - <fieldName>ExportTemplateFields</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityParameter> <name>ExportTemplateField_param</name> diff --git a/entity/ExportTemplatePlaceOfUse_entity/ExportTemplatePlaceOfUse_entity.aod b/entity/ExportTemplatePlaceOfUse_entity/ExportTemplatePlaceOfUse_entity.aod index 7689336446e654e8fe6101f83224fe07f7d6728c..19bccd43d84655e55b77e4cc29c5d962b962cc03 100644 --- a/entity/ExportTemplatePlaceOfUse_entity/ExportTemplatePlaceOfUse_entity.aod +++ b/entity/ExportTemplatePlaceOfUse_entity/ExportTemplatePlaceOfUse_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>ExportTemplatePlaceOfUse_entity</name> <title>Place of Use</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -55,14 +55,6 @@ <entityProvider> <name>ExportTemplatePlaceOfUser</name> <documentation>%aditoprj%/entity/ExportTemplatePlaceOfUse_entity/entityfields/exporttemplateplaceofuser/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>c60a238a-51f0-4538-8c53-6921481ddd4c</name> - <entityName>ExportTemplate_entity</entityName> - <fieldName>ExportTemplateplaceOfUseCon</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ExportTemplatePlaceOfUse_param</name> diff --git a/entity/ExportTemplateSelection_entity/ExportTemplateSelection_entity.aod b/entity/ExportTemplateSelection_entity/ExportTemplateSelection_entity.aod index f68f881f9ad028080e6c7a3d2e1bff49295b9e88..fe3b83665d57d5431171e6f10703afd1591da446 100644 --- a/entity/ExportTemplateSelection_entity/ExportTemplateSelection_entity.aod +++ b/entity/ExportTemplateSelection_entity/ExportTemplateSelection_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>ExportTemplateSelection_entity</name> <title>Exporttempalte Selection</title> <majorModelMode>DISTRIBUTED</majorModelMode> diff --git a/entity/ExportTemplate_entity/ExportTemplate_entity.aod b/entity/ExportTemplate_entity/ExportTemplate_entity.aod index 8fbadb06e1dd4ca130d3f21172629c2c4031a2db..fdfa7fc493ec71eb6c1095d054e1c35bd72ae8d6 100644 --- a/entity/ExportTemplate_entity/ExportTemplate_entity.aod +++ b/entity/ExportTemplate_entity/ExportTemplate_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>ExportTemplate_entity</name> <title>Export Template</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -112,14 +112,6 @@ <name>ExportTemplateIDs</name> <documentation>%aditoprj%/entity/ExportTemplate_entity/entityfields/exporttemplateids/documentation.adoc</documentation> <recordContainer>db</recordContainer> - <dependencies> - <entityDependency> - <name>1b692618-b800-47ae-a48c-3d4164d68401</name> - <entityName>ExportTemplateSelection_entity</entityName> - <fieldName>ExportTemplateComsumer</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ExportTemplateIDs_param</name> diff --git a/entity/Favorite_entity/Favorite_entity.aod b/entity/Favorite_entity/Favorite_entity.aod index 4d3a729393f10f8feb1957675d44092d7a05ba30..264567968f5bf32ed4fa11ebd44e6c504360ddc3 100644 --- a/entity/Favorite_entity/Favorite_entity.aod +++ b/entity/Favorite_entity/Favorite_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Favorite_entity</name> <title>Favorite</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -71,7 +71,7 @@ <jDitoRecordAlias>_____SYSTEMALIAS</jDitoRecordAlias> <isFilterable v="true" /> <isGroupable v="true" /> - <isSortable v="true" /> + <isSortable v="false" /> <contentProcess>%aditoprj%/entity/Favorite_entity/recordcontainers/jditorecordcontainer/contentProcess.js</contentProcess> <onDelete>%aditoprj%/entity/Favorite_entity/recordcontainers/jditorecordcontainer/onDelete.js</onDelete> <recordFieldMappings> diff --git a/entity/Forecast_entity/Forecast_entity.aod b/entity/Forecast_entity/Forecast_entity.aod index d8b6f1c7fe8094323f828a1e133cfa91704bf158..c5ca5ac38a15ff8769588eaae98adf074dc28e9e 100644 --- a/entity/Forecast_entity/Forecast_entity.aod +++ b/entity/Forecast_entity/Forecast_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Forecast_entity</name> <title>${FORECAST_ENGLISH}</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -103,14 +103,6 @@ <entityProvider> <name>Links</name> <recordContainer>db</recordContainer> - <dependencies> - <entityDependency> - <name>42f3a486-1fcd-46b7-8282-e55b1c7ac965</name> - <entityName>Salesproject_entity</entityName> - <fieldName>Forecasts</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityParameter> <name>ObjectRowId_param</name> @@ -126,11 +118,18 @@ <name>#PROVIDER_AGGREGATES</name> <useAggregates v="true" /> </entityProvider> + <entityField> + <name>KIND</name> + <valueProcess>%aditoprj%/entity/Forecast_entity/entityfields/kind/valueProcess.js</valueProcess> + </entityField> </entityFields> <recordContainers> <dbRecordContainer> <name>db</name> <conditionProcess>%aditoprj%/entity/Forecast_entity/recordcontainers/db/conditionProcess.js</conditionProcess> + <onDBInsert>%aditoprj%/entity/Forecast_entity/recordcontainers/db/onDBInsert.js</onDBInsert> + <onDBUpdate>%aditoprj%/entity/Forecast_entity/recordcontainers/db/onDBUpdate.js</onDBUpdate> + <onDBDelete>%aditoprj%/entity/Forecast_entity/recordcontainers/db/onDBDelete.js</onDBDelete> <alias>Data_alias</alias> <recordFieldMappings> <dbRecordFieldMapping> @@ -173,6 +172,10 @@ <name>FORECASTID.value</name> <recordfield>FORECAST.FORECASTID</recordfield> </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>KIND.value</name> + <recordfield>FORECAST.KIND</recordfield> + </dbRecordFieldMapping> </recordFieldMappings> <linkInformation> <linkInformation> diff --git a/entity/Forecast_entity/entityfields/kind/valueProcess.js b/entity/Forecast_entity/entityfields/kind/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..0c435ef9c8d8c55358dcec3248633382dde57b30 --- /dev/null +++ b/entity/Forecast_entity/entityfields/kind/valueProcess.js @@ -0,0 +1,9 @@ +import("system.vars"); +import("system.result"); +import("KeywordRegistry_basic"); + +if(vars.get("$this.value") == null) +{ + result.string($KeywordRegistry.forecastKind$forecast()); +} + diff --git a/entity/Forecast_entity/recordcontainers/db/conditionProcess.js b/entity/Forecast_entity/recordcontainers/db/conditionProcess.js index 0c0805ca63787abe761e25b34fa860f9cb5c820d..8bdcaacb995af969f571d8c5847671e31caa5c21 100644 --- a/entity/Forecast_entity/recordcontainers/db/conditionProcess.js +++ b/entity/Forecast_entity/recordcontainers/db/conditionProcess.js @@ -1,9 +1,11 @@ +import("KeywordRegistry_basic"); import("system.vars"); import("system.db"); import("system.result"); import("Sql_lib"); var cond = newWhere() + .and("FORECAST.KIND", $KeywordRegistry.forecastKind$forecast()) .andIfSet("FORECAST.OBJECT_ROWID", "$param.ObjectRowId_param") .andIfSet("FORECAST.OBJECT_TYPE", "$param.ObjectType_param"); diff --git a/entity/Forecast_entity/recordcontainers/db/onDBDelete.js b/entity/Forecast_entity/recordcontainers/db/onDBDelete.js new file mode 100644 index 0000000000000000000000000000000000000000..6ff91a5eb319120b527776868367d3cdb0f445f1 --- /dev/null +++ b/entity/Forecast_entity/recordcontainers/db/onDBDelete.js @@ -0,0 +1,3 @@ +import("Workflow_lib"); + +WorkflowSignalSender.deleted(); \ No newline at end of file diff --git a/entity/Forecast_entity/recordcontainers/db/onDBInsert.js b/entity/Forecast_entity/recordcontainers/db/onDBInsert.js new file mode 100644 index 0000000000000000000000000000000000000000..54f0349c9f1ddaab6b25f85f758d52928df41847 --- /dev/null +++ b/entity/Forecast_entity/recordcontainers/db/onDBInsert.js @@ -0,0 +1,3 @@ +import("Workflow_lib"); + +WorkflowSignalSender.inserted(); \ No newline at end of file diff --git a/entity/Forecast_entity/recordcontainers/db/onDBUpdate.js b/entity/Forecast_entity/recordcontainers/db/onDBUpdate.js new file mode 100644 index 0000000000000000000000000000000000000000..2e53f3cad9a9edf21cc5bbc6fdecc00c5001dfee --- /dev/null +++ b/entity/Forecast_entity/recordcontainers/db/onDBUpdate.js @@ -0,0 +1,3 @@ +import("Workflow_lib"); + +WorkflowSignalSender.updated(); \ No newline at end of file diff --git a/entity/Gender_keyword/Gender_keyword.aod b/entity/Gender_keyword/Gender_keyword.aod index 17f5aa15fef8b6f6797172f4e04def1e4c823e99..a778a5b5d809a7245c8a73fc831b76fdbfa9e4f6 100644 --- a/entity/Gender_keyword/Gender_keyword.aod +++ b/entity/Gender_keyword/Gender_keyword.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Gender_keyword</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/Gender_keyword/documentation.adoc</documentation> @@ -14,14 +14,6 @@ </entityField> <entityProvider> <name>#PROVIDER</name> - <dependencies> - <entityDependency> - <name>ede7d623-3709-4d22-85fa-30214e2293e2</name> - <entityName>Person_entity</entityName> - <fieldName>Genders</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityProvider> <name>#PROVIDER_AGGREGATES</name> diff --git a/entity/ImportField_Entity/ImportField_Entity.aod b/entity/ImportField_Entity/ImportField_Entity.aod index fb47af9cfe9e5cc16060f6155577916e6a0fd57b..360410fe7562e1fc3e51431638d131c53c1be207 100644 --- a/entity/ImportField_Entity/ImportField_Entity.aod +++ b/entity/ImportField_Entity/ImportField_Entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>ImportField_Entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/ImportField_Entity/documentation.adoc</documentation> @@ -60,14 +60,6 @@ <name>LeadImportIds</name> <documentation>%aditoprj%/entity/ImportField_Entity/entityfields/leadimportids/documentation.adoc</documentation> <titlePlural>Import Fields</titlePlural> - <dependencies> - <entityDependency> - <name>49a27c65-90d8-4ac0-8a62-0fac1ace7124</name> - <entityName>Leadimport_entity</entityName> - <fieldName>ImportFieldID</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityParameter> <name>LeadImportID</name> diff --git a/entity/IndexSearchEntity/IndexSearchEntity.aod b/entity/IndexSearchEntity/IndexSearchEntity.aod index 4cd16dc36dd3f05e50987feed06cd763385031cf..c2737a2c883ce43be972fde1834072b200b4e82d 100644 --- a/entity/IndexSearchEntity/IndexSearchEntity.aod +++ b/entity/IndexSearchEntity/IndexSearchEntity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>IndexSearchEntity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/IndexSearchEntity/documentation.adoc</documentation> diff --git a/entity/InterestLink_entity/InterestLink_entity.aod b/entity/InterestLink_entity/InterestLink_entity.aod new file mode 100644 index 0000000000000000000000000000000000000000..6b13ef837bd71b412f22b21d446cc468373b757b --- /dev/null +++ b/entity/InterestLink_entity/InterestLink_entity.aod @@ -0,0 +1,126 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> + <name>InterestLink_entity</name> + <title>Interest</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <titlePlural>Interests</titlePlural> + <recordContainer>db</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + </entityProvider> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityField> + <name>INTEREST_ID</name> + <title>Interest</title> + <consumer>Interests</consumer> + <displayValueProcess>%aditoprj%/entity/InterestLink_entity/entityfields/interest_id/displayValueProcess.js</displayValueProcess> + </entityField> + <entityField> + <name>INTERESTLINKID</name> + </entityField> + <entityField> + <name>CONTACT_ID</name> + <valueProcess>%aditoprj%/entity/InterestLink_entity/entityfields/contact_id/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>STATUS</name> + <title>Status</title> + <consumer>StatusKeyword</consumer> + <valueProcess>%aditoprj%/entity/InterestLink_entity/entityfields/status/valueProcess.js</valueProcess> + <displayValueProcess>%aditoprj%/entity/InterestLink_entity/entityfields/status/displayValueProcess.js</displayValueProcess> + </entityField> + <entityConsumer> + <name>Interests</name> + <dependency> + <name>dependency</name> + <entityName>Interest_entity</entityName> + <fieldName>#PROVIDER</fieldName> + </dependency> + </entityConsumer> + <entityConsumer> + <name>StatusKeyword</name> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/InterestLink_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityParameter> + <name>ContactId_param</name> + <expose v="true" /> + <mandatory v="true" /> + </entityParameter> + <entityProvider> + <name>InterestsForContact</name> + </entityProvider> + <entityField> + <name>DESCRIPTION</name> + <title>Description</title> + <state>READONLY</state> + </entityField> + </entityFields> + <recordContainers> + <dbRecordContainer> + <name>db</name> + <fromClauseProcess>%aditoprj%/entity/InterestLink_entity/recordcontainers/db/fromClauseProcess.js</fromClauseProcess> + <conditionProcess>%aditoprj%/entity/InterestLink_entity/recordcontainers/db/conditionProcess.js</conditionProcess> + <alias>Data_alias</alias> + <recordFieldMappings> + <dbRecordFieldMapping> + <name>CONTACT_ID.value</name> + <recordfield>INTERESTLINK.CONTACT_ID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DESCRIPTION.value</name> + <recordfield>INTEREST.DESCRIPTION</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>INTEREST_ID.value</name> + <recordfield>INTERESTLINK.INTEREST_ID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>INTERESTLINKID.value</name> + <recordfield>INTERESTLINK.INTERESTLINKID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>STATUS.value</name> + <recordfield>INTERESTLINK.STATUS</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>INTEREST_ID.displayValue</name> + <recordfield>INTEREST.TITLE</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>STATUS.displayValue</name> + <expression>%aditoprj%/entity/InterestLink_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js</expression> + </dbRecordFieldMapping> + </recordFieldMappings> + <linkInformation> + <linkInformation> + <name>085ae9b5-3760-460a-911c-cb4b8ffb336f</name> + <tableName>INTERESTLINK</tableName> + <primaryKey>INTERESTLINKID</primaryKey> + <isUIDTable v="true" /> + <readonly v="false" /> + </linkInformation> + <linkInformation> + <name>f8e78ecd-8d26-4285-95c8-093a08877374</name> + <tableName>INTEREST</tableName> + <primaryKey>INTERESTID</primaryKey> + <isUIDTable v="false" /> + <readonly v="true" /> + </linkInformation> + </linkInformation> + </dbRecordContainer> + </recordContainers> +</entity> diff --git a/entity/InterestLink_entity/entityfields/contact_id/valueProcess.js b/entity/InterestLink_entity/entityfields/contact_id/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..d877bfcaca49d927d93af76a0600ce037fe93bf8 --- /dev/null +++ b/entity/InterestLink_entity/entityfields/contact_id/valueProcess.js @@ -0,0 +1,6 @@ +import("system.neon"); +import("system.vars"); +import("system.result"); + +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) + result.string(vars.get("$param.ContactId_param")); \ No newline at end of file diff --git a/entity/InterestLink_entity/entityfields/interest_id/displayValueProcess.js b/entity/InterestLink_entity/entityfields/interest_id/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..e2c5bbf9152d5d220ccba334f4f7b8d2bb15e8f1 --- /dev/null +++ b/entity/InterestLink_entity/entityfields/interest_id/displayValueProcess.js @@ -0,0 +1,5 @@ +import("system.vars"); +import("system.result"); +import("Context_lib"); + +result.string(ContextUtils.loadContentTitle("Interest_entity", vars.get("$field.INTEREST_ID"))); \ No newline at end of file diff --git a/entity/InterestLink_entity/entityfields/status/displayValueProcess.js b/entity/InterestLink_entity/entityfields/status/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..99daaad8a4f81f5e36f990ce8230fefd42f01029 --- /dev/null +++ b/entity/InterestLink_entity/entityfields/status/displayValueProcess.js @@ -0,0 +1,6 @@ +import("system.vars"); +import("KeywordRegistry_basic"); +import("system.result"); +import("Keyword_lib"); + +result.string(KeywordUtils.getViewValue($KeywordRegistry.interestLinkStatus(), vars.get("$field.STATUS"))); \ No newline at end of file diff --git a/entity/InterestLink_entity/entityfields/status/valueProcess.js b/entity/InterestLink_entity/entityfields/status/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..544c9707223d3140fcd7f1d04a87f9ea362d954a --- /dev/null +++ b/entity/InterestLink_entity/entityfields/status/valueProcess.js @@ -0,0 +1,7 @@ +import("KeywordRegistry_basic"); +import("system.neon"); +import("system.vars"); +import("system.result"); + +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) + result.string($KeywordRegistry.interestLinkStatus$subscribed()); \ No newline at end of file diff --git a/entity/InterestLink_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js b/entity/InterestLink_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..e9b1fd0fbd8593e28529bef2a05cc48ff5874276 --- /dev/null +++ b/entity/InterestLink_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js @@ -0,0 +1,4 @@ +import("KeywordRegistry_basic"); +import("system.result"); + +result.string($KeywordRegistry.interestLinkStatus()); \ No newline at end of file diff --git a/entity/InterestLink_entity/recordcontainers/db/conditionProcess.js b/entity/InterestLink_entity/recordcontainers/db/conditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..23abeb0f0cd7dcf2cf1cc63a56165555c2071c9c --- /dev/null +++ b/entity/InterestLink_entity/recordcontainers/db/conditionProcess.js @@ -0,0 +1,6 @@ +import("system.result"); +import("Sql_lib"); + +var condition = newWhere("INTERESTLINK.CONTACT_ID", "$param.ContactId_param"); + +result.string(condition.toString()); \ No newline at end of file diff --git a/entity/InterestLink_entity/recordcontainers/db/fromClauseProcess.js b/entity/InterestLink_entity/recordcontainers/db/fromClauseProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..3f4a87ce8c145477940f84f29238b1dc3730f5e3 --- /dev/null +++ b/entity/InterestLink_entity/recordcontainers/db/fromClauseProcess.js @@ -0,0 +1,8 @@ +import("system.result"); +import("Sql_lib"); + +var from = new SqlBuilder() + .from("INTEREST") + .join("INTERESTLINK", "INTEREST.INTERESTID = INTERESTLINK.INTEREST_ID"); + +result.string(from.toString()); \ No newline at end of file diff --git a/entity/InterestLink_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js b/entity/InterestLink_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..4d9a79c193a877db1499d034091c56605d9ee994 --- /dev/null +++ b/entity/InterestLink_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js @@ -0,0 +1,5 @@ +import("KeywordRegistry_basic"); +import("system.result"); +import("Keyword_lib"); + +result.string(KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.interestLinkStatus(), "INTERESTLINK.STATUS")); \ No newline at end of file diff --git a/entity/Interest_entity/Interest_entity.aod b/entity/Interest_entity/Interest_entity.aod new file mode 100644 index 0000000000000000000000000000000000000000..4dbed8e6bffb1e652677678218207d5df5eea875 --- /dev/null +++ b/entity/Interest_entity/Interest_entity.aod @@ -0,0 +1,107 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> + <name>Interest_entity</name> + <title>Interest</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <contentTitleProcess>%aditoprj%/entity/Interest_entity/contentTitleProcess.js</contentTitleProcess> + <contentDescriptionProcess>%aditoprj%/entity/Interest_entity/contentDescriptionProcess.js</contentDescriptionProcess> + <iconId>VAADIN:GAMEPAD</iconId> + <titlePlural>Interests</titlePlural> + <recordContainer>db</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + </entityProvider> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityField> + <name>INTERESTID</name> + </entityField> + <entityField> + <name>TITLE</name> + <title>Title</title> + <mandatory v="true" /> + </entityField> + <entityField> + <name>DESCRIPTION</name> + <title>Description</title> + <contentType>LONG_TEXT</contentType> + </entityField> + <entityField> + <name>STATUS</name> + <title>Status</title> + <consumer>StatusKeyword</consumer> + <mandatory v="true" /> + <valueProcess>%aditoprj%/entity/Interest_entity/entityfields/status/valueProcess.js</valueProcess> + <displayValueProcess>%aditoprj%/entity/Interest_entity/entityfields/status/displayValueProcess.js</displayValueProcess> + </entityField> + <entityField> + <name>IS_DEFAULT</name> + <title>Default</title> + <contentType>BOOLEAN</contentType> + </entityField> + <entityConsumer> + <name>StatusKeyword</name> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/Interest_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + </entityFields> + <recordContainers> + <dbRecordContainer> + <name>db</name> + <alias>Data_alias</alias> + <recordFieldMappings> + <dbRecordFieldMapping> + <name>DESCRIPTION.value</name> + <recordfield>INTEREST.DESCRIPTION</recordfield> + <isFilterable v="true" /> + <isLookupFilter v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>INTERESTID.value</name> + <recordfield>INTEREST.INTERESTID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>IS_DEFAULT.value</name> + <recordfield>INTEREST.IS_DEFAULT</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>STATUS.value</name> + <recordfield>INTEREST.STATUS</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>TITLE.value</name> + <recordfield>INTEREST.TITLE</recordfield> + <isFilterable v="true" /> + <isLookupFilter v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>STATUS.displayValue</name> + <expression>%aditoprj%/entity/Interest_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js</expression> + </dbRecordFieldMapping> + </recordFieldMappings> + <linkInformation> + <linkInformation> + <name>62b56e0f-e284-4d95-ac45-4e23a33d7758</name> + <tableName>INTEREST</tableName> + <primaryKey>INTERESTID</primaryKey> + <isUIDTable v="true" /> + <readonly v="false" /> + </linkInformation> + </linkInformation> + </dbRecordContainer> + </recordContainers> +</entity> diff --git a/entity/Interest_entity/contentDescriptionProcess.js b/entity/Interest_entity/contentDescriptionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..06a46eb63894622c07e5021280fbb098c3d4385c --- /dev/null +++ b/entity/Interest_entity/contentDescriptionProcess.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("system.result"); + +result.string(vars.get("$field.DESCRIPTION")); \ No newline at end of file diff --git a/entity/Address_entity/entityfields/zipvalidation/children/currentvalue_param/valueProcess.js b/entity/Interest_entity/contentTitleProcess.js similarity index 55% rename from entity/Address_entity/entityfields/zipvalidation/children/currentvalue_param/valueProcess.js rename to entity/Interest_entity/contentTitleProcess.js index d9e7983e6f2422f678b9a024ace857de80d1dc1c..94f61859cc64100bb6a6dcd445efc67835002c1a 100644 --- a/entity/Address_entity/entityfields/zipvalidation/children/currentvalue_param/valueProcess.js +++ b/entity/Interest_entity/contentTitleProcess.js @@ -1,4 +1,4 @@ import("system.vars"); import("system.result"); -result.string(vars.get("$field.ZIP")) \ No newline at end of file +result.string(vars.get("$field.TITLE")); \ No newline at end of file diff --git a/entity/Interest_entity/entityfields/status/displayValueProcess.js b/entity/Interest_entity/entityfields/status/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..ef495661f151f322c852e7655df9bbb2ae22d397 --- /dev/null +++ b/entity/Interest_entity/entityfields/status/displayValueProcess.js @@ -0,0 +1,6 @@ +import("system.vars"); +import("KeywordRegistry_basic"); +import("system.result"); +import("Keyword_lib"); + +result.string(KeywordUtils.getViewValue($KeywordRegistry.interestStatus(), vars.get("$field.STATUS"))); \ No newline at end of file diff --git a/entity/Interest_entity/entityfields/status/valueProcess.js b/entity/Interest_entity/entityfields/status/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..f7e43680cde9693212cb0123d4685a3455ee1663 --- /dev/null +++ b/entity/Interest_entity/entityfields/status/valueProcess.js @@ -0,0 +1,7 @@ +import("KeywordRegistry_basic"); +import("system.neon"); +import("system.vars"); +import("system.result"); + +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) + result.string($KeywordRegistry.interestStatus$active()); \ No newline at end of file diff --git a/entity/Interest_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js b/entity/Interest_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..e99e16494cb8494d0fd4d749c57805325ae1b14b --- /dev/null +++ b/entity/Interest_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js @@ -0,0 +1,4 @@ +import("KeywordRegistry_basic"); +import("system.result"); + +result.string($KeywordRegistry.interestStatus()); \ No newline at end of file diff --git a/entity/Interest_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js b/entity/Interest_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..a1072f1cee61b8fbadeec10d4efb9826f450f69d --- /dev/null +++ b/entity/Interest_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js @@ -0,0 +1,5 @@ +import("KeywordRegistry_basic"); +import("system.result"); +import("Keyword_lib"); + +result.string(KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.interestStatus(), "INTEREST.STATUS")); \ No newline at end of file diff --git a/entity/KeywordAttributeRelation_entity/KeywordAttributeRelation_entity.aod b/entity/KeywordAttributeRelation_entity/KeywordAttributeRelation_entity.aod index b5a77caf977897ec0e18eeab0f316384718fc55e..ce371ea313fea915b1ded9be74c9f606230d10ff 100644 --- a/entity/KeywordAttributeRelation_entity/KeywordAttributeRelation_entity.aod +++ b/entity/KeywordAttributeRelation_entity/KeywordAttributeRelation_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>KeywordAttributeRelation_entity</name> <title>Keyword Attribute Values</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -51,14 +51,6 @@ <name>AttributesForKeywordEntry</name> <titlePlural></titlePlural> <recordContainer>db</recordContainer> - <dependencies> - <entityDependency> - <name>490d12c0-6ace-42e5-89e1-d40b25322161</name> - <entityName>KeywordEntry_entity</entityName> - <fieldName>KeywordAttributeRelations</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>KeywordEntryId_param</name> diff --git a/entity/KeywordAttribute_entity/KeywordAttribute_entity.aod b/entity/KeywordAttribute_entity/KeywordAttribute_entity.aod index f323e21738e421a8a016ff2f8baccc78f185722e..af75707b37e8fd809282db52e9207947603068c7 100644 --- a/entity/KeywordAttribute_entity/KeywordAttribute_entity.aod +++ b/entity/KeywordAttribute_entity/KeywordAttribute_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>KeywordAttribute_entity</name> <title>Keyword Attribute</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -34,20 +34,6 @@ <entityProvider> <name>SpecificContainerKeyword</name> <documentation>%aditoprj%/entity/KeywordAttribute_entity/entityfields/specificcontainerkeyword/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>1d11c064-1cf2-4f08-b842-9fa941ad3157</name> - <entityName>KeywordAttributeRelation_entity</entityName> - <fieldName>KeywordAttributes</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>684a3e60-00ad-4d46-8c98-6559e485a729</name> - <entityName>CommRestriction_Entity</entityName> - <fieldName>MediumKeywordAttribute</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityParameter> <name>ContainerName_param</name> diff --git a/entity/KeywordCategory_entity/KeywordCategory_entity.aod b/entity/KeywordCategory_entity/KeywordCategory_entity.aod index fb84b88df68c8861fce153afa44801416d21431f..c4cfe16844da693e7633e4d0e8352a23b5eadcee 100644 --- a/entity/KeywordCategory_entity/KeywordCategory_entity.aod +++ b/entity/KeywordCategory_entity/KeywordCategory_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>KeywordCategory_entity</name> <title>Keyword Category</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -47,14 +47,6 @@ <name>AllKeywordCategoryProvider</name> <lookupIdfield>AB_KEYWORD_CATEGORYID</lookupIdfield> <sortingField>NAME</sortingField> - <dependencies> - <entityDependency> - <name>d93010a7-5c20-4144-8efb-8eb43c69b7b1</name> - <entityName>KeywordEntry_entity</entityName> - <fieldName>KeywordCategoryConsumer</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityConsumer> <name>OrderedByNameFieldKeywordsConsumer</name> diff --git a/entity/KeywordCategory_entity/entityfields/ab_keyword_categoryid/valueProcess.js b/entity/KeywordCategory_entity/entityfields/ab_keyword_categoryid/valueProcess.js index ad93cec3bf8be83cc92959219f4f810752413b7d..cd3d2877ed5a1bef204427e5d61d3657be21608a 100644 --- a/entity/KeywordCategory_entity/entityfields/ab_keyword_categoryid/valueProcess.js +++ b/entity/KeywordCategory_entity/entityfields/ab_keyword_categoryid/valueProcess.js @@ -4,6 +4,7 @@ import("system.util"); import("system.vars"); -if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) { +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) +{ result.string(util.getNewUUID()); } diff --git a/entity/KeywordCategory_entity/recordcontainers/db/onDBDelete.js b/entity/KeywordCategory_entity/recordcontainers/db/onDBDelete.js index 9fb896f27e82dbcc7f7afcadf277a6a2383d6f24..5d42defb0b26b5b8267b5340c0067bccecf1ecc2 100644 --- a/entity/KeywordCategory_entity/recordcontainers/db/onDBDelete.js +++ b/entity/KeywordCategory_entity/recordcontainers/db/onDBDelete.js @@ -5,11 +5,11 @@ import("Sql_lib"); var categoryId = vars.get("$local.uid"); newWhere("AB_KEYWORD_ATTRIBUTERELATION.AB_KEYWORD_ATTRIBUTE_ID", newSelect("AB_KEYWORD_ATTRIBUTE.AB_KEYWORD_ATTRIBUTEID") - .from("AB_KEYWORD_ATTRIBUTE") - .where("AB_KEYWORD_ATTRIBUTE.AB_KEYWORD_CATEGORY_ID", categoryId) - , SqlBuilder.IN()).deleteData(); -newWhere("AB_KEYWORD_ATTRIBUTE.AB_KEYWORD_CATEGORY_ID", categoryId).deleteData(); -newWhere("AB_KEYWORD_ENTRY.AB_KEYWORD_CATEGORY_ID", categoryId).deleteData(); + .from("AB_KEYWORD_ATTRIBUTE") + .where("AB_KEYWORD_ATTRIBUTE.AB_KEYWORD_CATEGORY_ID", categoryId) + , SqlBuilder.IN()).deleteData(true, "AB_KEYWORD_ATTRIBUTERELATION"); +newWhere("AB_KEYWORD_ATTRIBUTE.AB_KEYWORD_CATEGORY_ID", categoryId).deleteData(true, "AB_KEYWORD_ATTRIBUTE"); +newWhere("AB_KEYWORD_ENTRY.AB_KEYWORD_CATEGORY_ID", categoryId).deleteData(true, "AB_KEYWORD_ENTRY"); //dependecies are removed so the cache needs to be updated entities.invalidateCache("KeywordEntry_entity", "db"); \ No newline at end of file diff --git a/entity/KeywordEntry_entity/KeywordEntry_entity.aod b/entity/KeywordEntry_entity/KeywordEntry_entity.aod index 44c798ccabe7ae92fb32abac9855b811f4edcbc7..43a8ea7d421dac915a8e2706c817ec767f2b3078 100644 --- a/entity/KeywordEntry_entity/KeywordEntry_entity.aod +++ b/entity/KeywordEntry_entity/KeywordEntry_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>KeywordEntry_entity</name> <title>Keyword Entry</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -18,26 +18,6 @@ <name>#PROVIDER</name> <lookupIdfield>KEYID</lookupIdfield> <recordContainer>db</recordContainer> - <dependencies> - <entityDependency> - <name>ce10e4d3-7799-4473-a681-a3c6d9f93b02</name> - <entityName>Notification_entity</entityName> - <fieldName>StateKeywords</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>0015f4fa-9f54-4d99-8e23-92e36a614d7a</name> - <entityName>Notification_entity</entityName> - <fieldName>PrioKeywords</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>01b9bba5-3b65-4db0-b466-1e41061feb1a</name> - <entityName>Observation_entity</entityName> - <fieldName>PrioKeywords</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>CONTAINER</name> @@ -102,542 +82,6 @@ <lookupIdfield>KEYID</lookupIdfield> <documentation>%aditoprj%/entity/KeywordEntry_entity/entityfields/specificcontainerkeywords/documentation.adoc</documentation> <recordContainer>jDito</recordContainer> - <dependencies> - <entityDependency> - <name>bb48a3ee-f340-4fd4-8c80-ef73b765ab58</name> - <entityName>Organisation_entity</entityName> - <fieldName>KeywordContactStates</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>4b1d1def-36d3-45e9-9ed5-eaef12d1ec82</name> - <entityName>Activity_entity</entityName> - <fieldName>KeywordDirections</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>42219987-4eff-4429-a22c-93e8a9c55c45</name> - <entityName>Contract_entity</entityName> - <fieldName>ContractPayments</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>2712e2b3-f17f-4a9c-9752-2383f62eb2b8</name> - <entityName>Contract_entity</entityName> - <fieldName>ContractStates</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>bd68f269-457c-487d-a1b2-e045d98f74b7</name> - <entityName>Contract_entity</entityName> - <fieldName>ContractTypes</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>b88b5cc8-c29e-4110-b86e-d1d0050460e5</name> - <entityName>Offer_entity</entityName> - <fieldName>KeywordCurrencies</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>57c746ee-a8c0-484a-8c73-6301609b76b1</name> - <entityName>Order_entity</entityName> - <fieldName>KeywordCurrencies</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>bf014596-954b-4c7d-9304-8283c9bcc7ae</name> - <entityName>Productprice_entity</entityName> - <fieldName>KeywordCurrencies</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>f5dcbf08-3765-4a9d-8b42-cb1219c87f57</name> - <entityName>Offeritem_entity</entityName> - <fieldName>KeywordProductGroupcodes</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>53bcaa07-94eb-4e81-9e9e-c5748156dad5</name> - <entityName>Orderitem_entity</entityName> - <fieldName>KeywordProductGroupcodes</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>c404b010-1634-4160-adca-7edf1535ee26</name> - <entityName>Product_entity</entityName> - <fieldName>KeywordProductGroupcodes</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>3575fdd7-3dd6-4318-b0d2-32d1df821076</name> - <entityName>Forecast_entity</entityName> - <fieldName>KeywordProductGroupcodes</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>5a21cbe2-4eb0-4968-80fa-b98a64599230</name> - <entityName>Offer_entity</entityName> - <fieldName>KeywordOfferStates</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>8696e561-b263-4c7c-b753-c5da44b48055</name> - <entityName>Organisation_entity</entityName> - <fieldName>KeywordOrganisationTypes</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>0d54d283-f158-4b91-8f6d-026954ed9c50</name> - <entityName>Person_entity</entityName> - <fieldName>KeywordGenders</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>8d28f08b-675d-4bcf-9318-a508d45ca69e</name> - <entityName>Task_entity</entityName> - <fieldName>KeywordStates</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>b069ef7d-07a0-460c-a8e7-cde5861c96c2</name> - <entityName>Productprice_entity</entityName> - <fieldName>KeywordPricelists</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>7f134ef1-cff5-4cf4-9d2a-e288c7904c28</name> - <entityName>Offeritem_entity</entityName> - <fieldName>KeywordQuantityUnits</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>c3c3b430-a14f-46b4-909a-9b53cef35413</name> - <entityName>Orderitem_entity</entityName> - <fieldName>KeywordQuantityUnits</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>a1983efd-92f9-4a6b-8805-d2977fcde0c8</name> - <entityName>Product_entity</entityName> - <fieldName>KeywordQuantityUnits</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>356e23f9-eb05-4e18-b0b5-cbc7c8716dba</name> - <entityName>SalesprojectSource_entity</entityName> - <fieldName>KeywordSources</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>36a72192-902f-431b-8f43-0bef311678f7</name> - <entityName>Order_entity</entityName> - <fieldName>KeywordStates</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>e2041dea-8647-49e9-aacf-4481b75b76ff</name> - <entityName>Stock_entity</entityName> - <fieldName>KeywordWarehouses</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>403c40a4-f747-4e47-ad60-07334724d6fb</name> - <entityName>KeywordAttribute_entity</entityName> - <fieldName>KeywordAttributeTypes</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>078bbd52-87fa-44cc-9902-04af935b5fbc</name> - <entityName>Attribute_entity</entityName> - <fieldName>KeywordAttributeTypes</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>a44375e9-917c-4db8-9aa8-de0625caf78f</name> - <entityName>Activity_entity</entityName> - <fieldName>KeywordCategories</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>fa831dac-3287-422a-8f28-504fc525876a</name> - <entityName>Communication_entity</entityName> - <fieldName>KeywordMediums</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>04b28ce6-a144-4c19-ac2d-4cfbc3568700</name> - <entityName>Organisation_entity</entityName> - <fieldName>KeywordPricePolitics</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>f024df05-2faf-4447-9eed-ae31b329d542</name> - <entityName>Competition_entity</entityName> - <fieldName>KeywordPricePolitics</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>60840c28-9875-4e3e-8099-5ca208d58bbe</name> - <entityName>Organisation_entity</entityName> - <fieldName>KeywordWeaknesses</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>854148e2-2532-4562-b393-832819e8d462</name> - <entityName>Organisation_entity</entityName> - <fieldName>KeywordStrenghts</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>613d5861-0494-45f9-a839-a705347a68da</name> - <entityName>Competition_entity</entityName> - <fieldName>KeywordWeaknesses</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>119d79d0-9e04-4dd0-80bb-0bc32eaae775</name> - <entityName>Competition_entity</entityName> - <fieldName>KeywordStrenghts</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>6e2d164c-1ac7-4ed0-ad8f-7bfda1328493</name> - <entityName>Salesproject_entity</entityName> - <fieldName>KeywordStates</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>1053a90d-574a-4ca2-b41d-42b513db0fd2</name> - <entityName>Task_entity</entityName> - <fieldName>KeywordPriorities</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>bf9f7a07-dfb9-44d0-8f9b-d3814053683e</name> - <entityName>Competition_entity</entityName> - <fieldName>KeywordStates</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>ef8b9397-6292-42de-806e-5aaf3e3db5f3</name> - <entityName>Salesproject_entity</entityName> - <fieldName>KeywordWonLost</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>5d9e0e48-ece8-4b8e-ab72-beef77b5dcc3</name> - <entityName>Task_entity</entityName> - <fieldName>KeywordProgress</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>36aa04c1-5361-4e40-a036-0546db596973</name> - <entityName>Offer_entity</entityName> - <fieldName>KeywordDeliveryTerm</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>7e12cbd6-3a2c-4bd8-bc66-5001c282b690</name> - <entityName>Offer_entity</entityName> - <fieldName>KeywordPaymentTerm</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>77be3cca-8b50-4810-9549-3fd3e6fdf220</name> - <entityName>Person_entity</entityName> - <fieldName>KeywordContactStates</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>7945545b-f1e6-446d-84c3-ef68486652f4</name> - <entityName>Contact_entity</entityName> - <fieldName>KeywordContactStates</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>740a9696-d394-48ea-bcbf-a5484a093bde</name> - <entityName>SalesprojectMilestone_entity</entityName> - <fieldName>Keywords</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>b5c39776-509e-4758-8d05-a64eac4e7f38</name> - <entityName>CampaignStep_entity</entityName> - <fieldName>KeywordStates</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>13d739cb-2b97-44a0-bed0-b6868b0e579e</name> - <entityName>CampaignCost_entity</entityName> - <fieldName>KeywordCampaignManagementCostCategory</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>3a81e886-0d83-47f0-9ec7-c864ffc57cda</name> - <entityName>Classification_entity</entityName> - <fieldName>KeywordClassificationTypes</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>995646a8-ccec-4962-8c81-05a54903c433</name> - <entityName>CommRestriction_Entity</entityName> - <fieldName>CommRestrictionMedium</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>eb7c17de-3057-45c5-96c0-f863551cc049</name> - <entityName>BulkMailRecipient_entity</entityName> - <fieldName>StatusKeyword</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>3ab18dc8-b702-49d9-9cbc-4b8d8ffaea2e</name> - <entityName>DSGVO_entity</entityName> - <fieldName>KeywordDSGVOPurpose</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>86501073-4e62-42ef-ba15-e9f6a2eb3495</name> - <entityName>DSGVO_entity</entityName> - <fieldName>KeywordDSGVOStatuoritysource</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>ae2c4712-5513-4c0d-911a-532f50483c76</name> - <entityName>DSGVO_entity</entityName> - <fieldName>KeywordDSGVOType</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>44f84932-2a27-4e11-833b-def950c064d9</name> - <entityName>SupportTicket_entity</entityName> - <fieldName>KeywordTickettype</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>10ba6c44-779c-4ba8-9277-e9583af03ed5</name> - <entityName>SupportTicket_entity</entityName> - <fieldName>KeywordTaskState</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>e1b87370-aa15-4540-99c1-7bd63f0f3263</name> - <entityName>SupportTicket_entity</entityName> - <fieldName>KeywordTaskPriority</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>d8c587cc-47db-4e08-a6ac-92ec1d91acb5</name> - <entityName>BulkMail_entity</entityName> - <fieldName>StatusKeyword</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>41fd8fd4-7285-4493-9a56-cc0c44353057</name> - <entityName>DSGVOInfo_entity</entityName> - <fieldName>KeywordDeadline</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>1cbfe51f-43c3-4e99-895f-673097915249</name> - <entityName>DSGVOInfo_entity</entityName> - <fieldName>KeywordTransmission</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>718da6a7-229b-4075-a8ff-b0458c770e7b</name> - <entityName>DSGVOInfo_entity</entityName> - <fieldName>KeywordGuarantee</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>2443c7e3-9e66-41dc-99c7-3283e9315000</name> - <entityName>Campaign_entity</entityName> - <fieldName>KeywordCurrency</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>2694515c-eda4-44aa-9826-d430aa8a8089</name> - <entityName>Order_entity</entityName> - <fieldName>KeywordOrderTypes</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>72ae7a5c-acc9-4e59-8110-f5b544f47f15</name> - <entityName>Order_entity</entityName> - <fieldName>KeywordDunningLevels</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>ea9260e9-b5e8-457c-ae84-45c4692348ce</name> - <entityName>Order_entity</entityName> - <fieldName>KeywordPaymentTerms</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>5d296f68-0a8f-429c-b630-e3ca88874945</name> - <entityName>Order_entity</entityName> - <fieldName>KeywordDeliveryTerms</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>b4238087-6333-453a-a501-760732c68f5d</name> - <entityName>SerialLetter_entity</entityName> - <fieldName>StatusKeyword</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>613f86de-26bb-458d-a1b7-31b0e06ec3dc</name> - <entityName>ImportField_Entity</entityName> - <fieldName>KeywordImportFields</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>157be5ff-0568-4029-8295-cfb05fb2fafc</name> - <entityName>Lead_entity</entityName> - <fieldName>KeywordDupStatus</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>5016fdbc-c41b-4d4d-bb3c-bd29b9625db5</name> - <entityName>Leadimport_entity</entityName> - <fieldName>KeywordImportStatus</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>24b11c85-618a-494b-980b-a94b56523b78</name> - <entityName>WorkflowStartConfig_entity</entityName> - <fieldName>TriggerKeyword</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>b25f4a3e-706b-43f5-b4d4-44249e8fa125</name> - <entityName>CampaignPlanning_entity</entityName> - <fieldName>CampaignStatusKeyword</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>66c64130-1997-4565-854e-94802b46dc96</name> - <entityName>WorkflowSignal_entity</entityName> - <fieldName>TriggerKeyword</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>38c8a85b-3bea-44cf-b57e-23eba340adb4</name> - <entityName>ExportTemplatePlaceOfUse_entity</entityName> - <fieldName>ContextExportTemplatePlaceOfUse</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>f21760f5-e138-4924-b3ee-3881afbda5d9</name> - <entityName>DocumentTemplatePlaceOfUse_entity</entityName> - <fieldName>ContextDocumentTemplatePlaceOfUse</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>8c5b1d49-f0b5-4a7c-9bff-02165996e11b</name> - <entityName>PermissionCalendar_entity</entityName> - <fieldName>KeywordPermissionCalendarTypes</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>7c05378a-c50f-4f94-bd18-e256baf86e31</name> - <entityName>WorkflowInstanceHistory_entity</entityName> - <fieldName>ActivityTypeKeyword</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>6ac610a4-64a0-4396-8901-80711850129a</name> - <entityName>VisitPlanEntry_entity</entityName> - <fieldName>KeywordVisitPlanEntryStatus</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>eec28bd6-7631-4653-9335-511f0298f8b6</name> - <entityName>VisitRecommendation_entity</entityName> - <fieldName>KeywordVisitRecommendationPriority</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>40c6ff94-05b4-4477-8067-55494e180657</name> - <entityName>Campaign_entity</entityName> - <fieldName>KeywordCampaignType</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>f8974482-093a-482a-be44-5e1d4029bb23</name> - <entityName>Campaign_entity</entityName> - <fieldName>KeywordEventType</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>54410e7f-e5e6-4dd1-8f60-7864ed907aed</name> - <entityName>WorkflowDefinition_entity</entityName> - <fieldName>CategoryKeyword</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>d1769b5e-db2a-445b-bb79-c72ac757038b</name> - <entityName>LeadimportMappingAssistant_entity</entityName> - <fieldName>KeywordImportFields</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>2823f5a0-2b1d-41f4-abf1-3e7b332fa176</name> - <entityName>VisitRecommendation_entity</entityName> - <fieldName>KeywordVisitRecommendationSource</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>10ced13f-78ae-4e99-a315-82f1f7389029</name> - <entityName>CampaignStep_entity</entityName> - <fieldName>KeywordStepMedium</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>f2719502-19e8-4a24-8f3f-e4aa4dd77e70</name> - <entityName>VisitPlanEntry_entity</entityName> - <fieldName>KeywordVisitPlanEntryStatusAppointment</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>edde64f8-8f71-4fa3-a807-b6b3af971446</name> - <entityName>DistrictContact_entity</entityName> - <fieldName>KeywordContactStates</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>146dc4e4-7e99-48da-9572-09f2a57ea7f6</name> - <entityName>DistrictContact_entity</entityName> - <fieldName>KeywordAdviserRoles</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>223e4198-157d-43b5-b31e-417eb6ebf39c</name> - <entityName>DistrictContact_entity</entityName> - <fieldName>KeywordDistrictOrigin</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>6f8ca40b-52bc-461f-8b97-083e1509c6fb</name> - <entityName>DistrictResponsible_entity</entityName> - <fieldName>AdviserStates</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>146306af-cb4e-4d60-8298-f298770e7efb</name> - <entityName>DistrictResponsible_entity</entityName> - <fieldName>AdviserRoles</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>eb5684f7-200a-401c-ac73-cc905a4d3f06</name> - <entityName>Competition_entity</entityName> - <fieldName>KeywordPhases</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>OnlyActives_param</name> @@ -652,7 +96,7 @@ </entityProvider> <entityField> <name>TITLE_TRANSLATED</name> - <state>INVISIBLE</state> + <title>Title (translated)</title> <valueProcess>%aditoprj%/entity/KeywordEntry_entity/entityfields/title_translated/valueProcess.js</valueProcess> </entityField> <entityParameter> @@ -735,14 +179,6 @@ <lookupIdfield>AB_KEYWORD_ENTRYID</lookupIdfield> <sortingField>SORTING</sortingField> <recordContainer>db</recordContainer> - <dependencies> - <entityDependency> - <name>f677c429-246a-4550-afc7-73dac953bfbf</name> - <entityName>KeywordCategory_entity</entityName> - <fieldName>OrderedBySortingFieldKeywordsConsumer</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ContainerName_param</name> @@ -754,14 +190,6 @@ <name>OrderedByNameFieldKeywords</name> <lookupIdfield>AB_KEYWORD_ENTRYID</lookupIdfield> <recordContainer>jDito</recordContainer> - <dependencies> - <entityDependency> - <name>63218865-e3ef-4fb6-9f0a-3fef321ce30c</name> - <entityName>KeywordCategory_entity</entityName> - <fieldName>OrderedByNameFieldKeywordsConsumer</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ContainerName_param</name> diff --git a/entity/KeywordEntry_entity/entityfields/openadminview/onActionProcess.js b/entity/KeywordEntry_entity/entityfields/openadminview/onActionProcess.js index d564b4d76feb764e6f7db9d65f92c66db58a1a28..e78831577965cb8f629169b00cf80af0fae5a171 100644 --- a/entity/KeywordEntry_entity/entityfields/openadminview/onActionProcess.js +++ b/entity/KeywordEntry_entity/entityfields/openadminview/onActionProcess.js @@ -1,6 +1,4 @@ import("system.vars"); import("Context_lib"); -AdminViewUtils.open("AB_KEYWORD_ENTRYID", [ - ["KEYID", vars.get("$field.KEYID")] -]); \ No newline at end of file +AdminViewUtils.open("AB_KEYWORD_ENTRYID", ["KEYID", "AB_KEYWORD_CATEGORY_ID"]); \ No newline at end of file diff --git a/entity/KeywordEntry_entity/recordcontainers/jdito/contentProcess.js b/entity/KeywordEntry_entity/recordcontainers/jdito/contentProcess.js index 7fa2f2e399d563df82aef2d74d90aa34ac3b7eb6..bd4a9e38d84665f44c06f299131ae95cdb5fe930 100644 --- a/entity/KeywordEntry_entity/recordcontainers/jdito/contentProcess.js +++ b/entity/KeywordEntry_entity/recordcontainers/jdito/contentProcess.js @@ -20,6 +20,24 @@ var keywordStatement = newSelect("AB_KEYWORD_ENTRY.KEYID, AB_KEYWORD_ENTRY.TITLE .from("AB_KEYWORD_ENTRY") .join("AB_KEYWORD_CATEGORY", "AB_KEYWORD_ENTRY.AB_KEYWORD_CATEGORY_ID = AB_KEYWORD_CATEGORY.AB_KEYWORD_CATEGORYID") .where(); + +var whitelist = JSON.parse(vars.get("$param.WhitelistIds_param")); +var blacklist = JSON.parse(vars.get("$param.BlacklistIds_param")); +if (whitelist) +{ + if (whitelist.length > 0) + { + keywordStatement.and("AB_KEYWORD_ENTRY.KEYID", whitelist, SqlBuilder.IN()); + } + else + { + keywordStatement.noResult(); // force empty result if whitelist is empty + } +} +if (blacklist && blacklist.length > 0) +{ + keywordStatement.and("AB_KEYWORD_ENTRY.KEYID", blacklist, SqlBuilder.NOT_IN()); +} if (vars.get("$param.OnlyActives_param") == "true") { diff --git a/entity/KnowledgeDiscussion_entity/KnowledgeDiscussion_entity.aod b/entity/KnowledgeDiscussion_entity/KnowledgeDiscussion_entity.aod index ae567dde14c71703c4a112adbdf38ecc24896957..9c3cceddc40f0d8c6d7250e4aaff85841f39e144 100644 --- a/entity/KnowledgeDiscussion_entity/KnowledgeDiscussion_entity.aod +++ b/entity/KnowledgeDiscussion_entity/KnowledgeDiscussion_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>KnowledgeDiscussion_entity</name> <title>Discussion</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -81,14 +81,6 @@ <entityProvider> <name>ByKnowledgeId</name> <documentation>%aditoprj%/entity/KnowledgeDiscussion_entity/entityfields/byknowledgeid/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>fbacb136-2690-495a-82c5-b6ab1576d3f9</name> - <entityName>KnowledgeManagement_entity</entityName> - <fieldName>DiscussionsByKnowledgeId</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityParameter> <name>KnowledgeId_param</name> @@ -103,7 +95,7 @@ <title>Reply</title> <onActionProcess>%aditoprj%/entity/KnowledgeDiscussion_entity/entityfields/edit_actiongroup/children/addanswer_action/onActionProcess.js</onActionProcess> <isObjectAction v="false" /> - <isSelectionAction v="true" /> + <selectionType>MULTI</selectionType> <iconId>VAADIN:COMMENT_O</iconId> <tooltip>Adds an answer to the selected discussion</tooltip> </entityActionField> @@ -112,7 +104,7 @@ <title>Toggle status</title> <onActionProcess>%aditoprj%/entity/KnowledgeDiscussion_entity/entityfields/edit_actiongroup/children/togglediscussionstatus_action/onActionProcess.js</onActionProcess> <isObjectAction v="false" /> - <isSelectionAction v="true" /> + <selectionType>MULTI</selectionType> <iconId>VAADIN:LOCK</iconId> <tooltip>Toggles the status of selected discussion between open and closed</tooltip> </entityActionField> diff --git a/entity/KnowledgeLink_entity/KnowledgeLink_entity.aod b/entity/KnowledgeLink_entity/KnowledgeLink_entity.aod index 6b817307e82b88644ccaf5957c72db7d0606a134..06a1067217c2574a3cfef2167bd7beedd87a33e0 100644 --- a/entity/KnowledgeLink_entity/KnowledgeLink_entity.aod +++ b/entity/KnowledgeLink_entity/KnowledgeLink_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>KnowledgeLink_entity</name> <title>Link</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -58,17 +58,17 @@ </entityConsumer> <entityConsumer> <name>Objects</name> + <dependency> + <name>dependency</name> + <entityName>ObjectProxy_entity</entityName> + <fieldName>FilteredObjects</fieldName> + </dependency> <children> <entityParameter> <name>Entity_param</name> <valueProcess>%aditoprj%/entity/KnowledgeLink_entity/entityfields/objects/children/entity_param/valueProcess.js</valueProcess> </entityParameter> </children> - <dependency> - <name>dependency</name> - <entityName>ObjectProxy_entity</entityName> - <fieldName>FilteredObjects</fieldName> - </dependency> </entityConsumer> <entityParameter> <name>KnowledgeManagementId_param</name> @@ -89,14 +89,6 @@ <expose v="false" /> </entityParameter> </children> - <dependencies> - <entityDependency> - <name>c3ed10c1-db55-4e55-9c18-2b8d400df033</name> - <entityName>KnowledgeManagement_entity</entityName> - <fieldName>LinksByKnowledgeId</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityParameter> <name>RowId_param</name> diff --git a/entity/KnowledgeManagementTagList_entity/KnowledgeManagementTagList_entity.aod b/entity/KnowledgeManagementTagList_entity/KnowledgeManagementTagList_entity.aod index ce3999d283e928e1d8f13079bf2738c3a5aba3ed..98a8aab49e515de34861d26f6de5e26ee7d7d857 100644 --- a/entity/KnowledgeManagementTagList_entity/KnowledgeManagementTagList_entity.aod +++ b/entity/KnowledgeManagementTagList_entity/KnowledgeManagementTagList_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>KnowledgeManagementTagList_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/KnowledgeManagementTagList_entity/documentation.adoc</documentation> @@ -18,14 +18,6 @@ <entityProvider> <name>CompleteList</name> <documentation>%aditoprj%/entity/KnowledgeManagementTagList_entity/entityfields/completelist/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>85925baa-5edc-4908-804e-f7ec4c5a2a0c</name> - <entityName>KnowledgeManagementTags_entity</entityName> - <fieldName>CompleteTagList</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityProvider> <name>#PROVIDER_AGGREGATES</name> diff --git a/entity/KnowledgeManagementTags_entity/KnowledgeManagementTags_entity.aod b/entity/KnowledgeManagementTags_entity/KnowledgeManagementTags_entity.aod index 3047fb341eae892c2ca271f2fd24f24aec096ac1..f80e360b29cbf45de0b149da9354531fd590b668 100644 --- a/entity/KnowledgeManagementTags_entity/KnowledgeManagementTags_entity.aod +++ b/entity/KnowledgeManagementTags_entity/KnowledgeManagementTags_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>KnowledgeManagementTags_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/KnowledgeManagementTags_entity/documentation.adoc</documentation> @@ -15,14 +15,6 @@ <entityProvider> <name>ByKnowledgeManagementId</name> <documentation>%aditoprj%/entity/KnowledgeManagementTags_entity/entityfields/byknowledgemanagementid/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>8d86a61b-0fe3-44c4-a512-e044c990fded</name> - <entityName>KnowledgeManagement_entity</entityName> - <fieldName>TagsByKnowledgeId</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>KnowledgeManagementId_param</name> diff --git a/entity/KnowledgeManagement_entity/KnowledgeManagement_entity.aod b/entity/KnowledgeManagement_entity/KnowledgeManagement_entity.aod index 4cc143f137158ab3bc3da5e2940ffca3b264e299..67a9351abb04151d93cc71ec10085ce55be35d74 100644 --- a/entity/KnowledgeManagement_entity/KnowledgeManagement_entity.aod +++ b/entity/KnowledgeManagement_entity/KnowledgeManagement_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>KnowledgeManagement_entity</name> <title>Knowledge</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -102,44 +102,36 @@ <refreshParent v="true" /> <state>EDITABLE</state> <onValidation>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/tagsbyknowledgeid/onValidation.js</onValidation> + <dependency> + <name>dependency</name> + <entityName>KnowledgeManagementTags_entity</entityName> + <fieldName>ByKnowledgeManagementId</fieldName> + </dependency> <children> <entityParameter> <name>KnowledgeManagementId_param</name> <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/tagsbyknowledgeid/children/knowledgemanagementid_param/valueProcess.js</valueProcess> </entityParameter> </children> - <dependency> - <name>dependency</name> - <entityName>KnowledgeManagementTags_entity</entityName> - <fieldName>ByKnowledgeManagementId</fieldName> - </dependency> </entityConsumer> <entityConsumer> <name>DiscussionsByKnowledgeId</name> <refreshParent v="true" /> + <dependency> + <name>dependency</name> + <entityName>KnowledgeDiscussion_entity</entityName> + <fieldName>ByKnowledgeId</fieldName> + </dependency> <children> <entityParameter> <name>KnowledgeId_param</name> <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/discussionsbyknowledgeid/children/knowledgeid_param/valueProcess.js</valueProcess> </entityParameter> </children> - <dependency> - <name>dependency</name> - <entityName>KnowledgeDiscussion_entity</entityName> - <fieldName>ByKnowledgeId</fieldName> - </dependency> </entityConsumer> <entityProvider> <name>Provider</name> <documentation>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/provider/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>20c983b0-4575-4bd3-83ce-477458ece62d</name> - <entityName>Product_entity</entityName> - <fieldName>KnowledgeManagements</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityConsumer> <name>PersonContacts</name> @@ -151,37 +143,42 @@ </entityConsumer> <entityConsumer> <name>KeywordKnowledgeType</name> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> + </dependency> <children> <entityParameter> <name>ContainerName_param</name> <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/keywordknowledgetype/children/containername_param/valueProcess.js</valueProcess> </entityParameter> </children> + </entityConsumer> + <entityConsumer> + <name>KeywordPublish</name> <dependency> <name>dependency</name> <entityName>KeywordEntry_entity</entityName> <fieldName>SpecificContainerKeywords</fieldName> </dependency> - </entityConsumer> - <entityConsumer> - <name>KeywordPublish</name> <children> <entityParameter> <name>ContainerName_param</name> <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/keywordpublish/children/containername_param/valueProcess.js</valueProcess> </entityParameter> </children> - <dependency> - <name>dependency</name> - <entityName>KeywordEntry_entity</entityName> - <fieldName>SpecificContainerKeywords</fieldName> - </dependency> </entityConsumer> <entityField> <name>indexTag</name> </entityField> <entityConsumer> <name>LinkedDocuments</name> + <dependency> + <name>dependency</name> + <entityName>Document_entity</entityName> + <fieldName>Documents</fieldName> + </dependency> <children> <entityParameter> <name>AssignmentTable_param</name> @@ -192,35 +189,30 @@ <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/linkeddocuments/children/assignmentrowid_param/valueProcess.js</valueProcess> </entityParameter> </children> - <dependency> - <name>dependency</name> - <entityName>Document_entity</entityName> - <fieldName>Documents</fieldName> - </dependency> </entityConsumer> <entityActionField> <name>openEntryAsMail</name> <title>send as mail</title> <onActionProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/openentryasmail/onActionProcess.js</onActionProcess> <isMenuAction v="true" /> - <isSelectionAction v="true" /> + <selectionType>MULTI</selectionType> <iconId>VAADIN:ENVELOPE</iconId> <state>INVISIBLE</state> </entityActionField> <entityConsumer> <name>LinksByKnowledgeId</name> <refreshParent v="true" /> + <dependency> + <name>dependency</name> + <entityName>KnowledgeLink_entity</entityName> + <fieldName>ByKnowledgeId</fieldName> + </dependency> <children> <entityParameter> <name>KnowledgeManagementId_param</name> <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/linksbyknowledgeid/children/knowledgemanagementid_param/valueProcess.js</valueProcess> </entityParameter> </children> - <dependency> - <name>dependency</name> - <entityName>KnowledgeLink_entity</entityName> - <fieldName>ByKnowledgeId</fieldName> - </dependency> </entityConsumer> <entityField> <name>LastChange</name> @@ -229,17 +221,17 @@ </entityField> <entityConsumer> <name>LogHistories</name> + <dependency> + <name>dependency</name> + <entityName>LogHistory_entity</entityName> + <fieldName>LogHistoryProvider</fieldName> + </dependency> <children> <entityParameter> <name>tablenames_param</name> <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js</valueProcess> </entityParameter> </children> - <dependency> - <name>dependency</name> - <entityName>LogHistory_entity</entityName> - <fieldName>LogHistoryProvider</fieldName> - </dependency> </entityConsumer> <entityActionField> <name>exportHTML_action</name> @@ -281,6 +273,11 @@ <name>KnowledgeRoles</name> <stateProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/knowledgeroles/stateProcess.js</stateProcess> <onValidation>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/knowledgeroles/onValidation.js</onValidation> + <dependency> + <name>dependency</name> + <entityName>KnowledgeRole_entity</entityName> + <fieldName>KnowledgeRole</fieldName> + </dependency> <children> <entityParameter> <name>KnowledgeManagement_param</name> @@ -292,14 +289,14 @@ <expose v="true" /> </entityParameter> </children> - <dependency> - <name>dependency</name> - <entityName>KnowledgeRole_entity</entityName> - <fieldName>KnowledgeRole</fieldName> - </dependency> </entityConsumer> <entityConsumer> <name>Tasks</name> + <dependency> + <name>dependency</name> + <entityName>Task_entity</entityName> + <fieldName>Tasks</fieldName> + </dependency> <children> <entityParameter> <name>ObjectId_param</name> @@ -314,11 +311,6 @@ <valueProcess>%aditoprj%/entity/KnowledgeManagement_entity/entityfields/tasks/children/presetlinks_param/valueProcess.js</valueProcess> </entityParameter> </children> - <dependency> - <name>dependency</name> - <entityName>Task_entity</entityName> - <fieldName>Tasks</fieldName> - </dependency> </entityConsumer> <entityField> <name>RESPONSIBLE_CONTACT_ID</name> @@ -353,6 +345,7 @@ <orderClauseProcess>%aditoprj%/entity/KnowledgeManagement_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess> <onDBInsert>%aditoprj%/entity/KnowledgeManagement_entity/recordcontainers/db/onDBInsert.js</onDBInsert> <onDBUpdate>%aditoprj%/entity/KnowledgeManagement_entity/recordcontainers/db/onDBUpdate.js</onDBUpdate> + <onDBDelete>%aditoprj%/entity/KnowledgeManagement_entity/recordcontainers/db/onDBDelete.js</onDBDelete> <alias>Data_alias</alias> <recordFieldMappings> <dbRecordFieldMapping> diff --git a/entity/KnowledgeManagement_entity/recordcontainers/db/onDBDelete.js b/entity/KnowledgeManagement_entity/recordcontainers/db/onDBDelete.js new file mode 100644 index 0000000000000000000000000000000000000000..2a22a7d643f73469bf2c7b64e3a770c378cb0bae --- /dev/null +++ b/entity/KnowledgeManagement_entity/recordcontainers/db/onDBDelete.js @@ -0,0 +1,3 @@ +import("Document_lib"); + +DocumentUtil.deleteAllUploadedImages("CONTENT_IMAGE_UPLOAD"); \ No newline at end of file diff --git a/entity/KnowledgeNewsFeed_entity/KnowledgeNewsFeed_entity.aod b/entity/KnowledgeNewsFeed_entity/KnowledgeNewsFeed_entity.aod index 044c654b107b2bcf87397e6bb3559dd3b6848081..645f4066b12f8f6109a3c0cb29a0cd555a3d51ca 100644 --- a/entity/KnowledgeNewsFeed_entity/KnowledgeNewsFeed_entity.aod +++ b/entity/KnowledgeNewsFeed_entity/KnowledgeNewsFeed_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>KnowledgeNewsFeed_entity</name> <title>Feed</title> <majorModelMode>DISTRIBUTED</majorModelMode> diff --git a/entity/KnowledgeRole_entity/KnowledgeRole_entity.aod b/entity/KnowledgeRole_entity/KnowledgeRole_entity.aod index a3aa8d298eaa34a733a08787263629302027f518..9c72617379c57469ec35a615d600f95308cb0c0a 100644 --- a/entity/KnowledgeRole_entity/KnowledgeRole_entity.aod +++ b/entity/KnowledgeRole_entity/KnowledgeRole_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>KnowledgeRole_entity</name> <title>Knowledge Role</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -35,14 +35,6 @@ <documentation>%aditoprj%/entity/KnowledgeRole_entity/entityfields/knowledgerole/documentation.adoc</documentation> <titlePlural>KnowledgeRoles</titlePlural> <recordContainer>db</recordContainer> - <dependencies> - <entityDependency> - <name>404bd92c-6222-4b58-95b4-d7f657b62c82</name> - <entityName>KnowledgeManagement_entity</entityName> - <fieldName>KnowledgeRoles</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>KNOWLEDGEROLEID</name> diff --git a/entity/Language_entity/Language_entity.aod b/entity/Language_entity/Language_entity.aod index 84fea3b199336bf18913f8a69c0211add91721c7..e8c4852d6f3389ea0d83cdb95a0272fcd0452ffe 100644 --- a/entity/Language_entity/Language_entity.aod +++ b/entity/Language_entity/Language_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Language_entity</name> <title>Language</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -33,68 +33,6 @@ <lookupIdfield>ISO3</lookupIdfield> <documentation>%aditoprj%/entity/Language_entity/entityfields/iso3name/documentation.adoc</documentation> <recordContainer>db</recordContainer> - <dependencies> - <entityDependency> - <name>471b099a-03ab-4c49-8372-729b1e789ecc</name> - <entityName>Organisation_entity</entityName> - <fieldName>Languages</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>3429b46c-03e1-458a-9b60-0b6d2a560ce1</name> - <entityName>Order_entity</entityName> - <fieldName>Languages</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>d2ae2b80-941f-42c5-89a4-67269d9a0411</name> - <entityName>Person_entity</entityName> - <fieldName>Languages</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>f0fd487b-6d1e-4247-8539-4b0912b003f8</name> - <entityName>Offer_entity</entityName> - <fieldName>Languages</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>030ac1ae-5f5b-4815-b9f4-1121b7c881ad</name> - <entityName>Contact_entity</entityName> - <fieldName>Languages</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>156f3abb-eef3-41a0-8bfa-aa888fe587df</name> - <entityName>Salutation_entity</entityName> - <fieldName>KeywordLanguages</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>12f3a19a-259e-46ba-bc31-aa776c3d324c</name> - <entityName>QuickEntry_entity</entityName> - <fieldName>Languages</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>6eb7101e-690f-4f55-a780-7b7129071fd1</name> - <entityName>ObjectProxy_entity</entityName> - <fieldName>Languages</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>809a6f10-7cdc-4dd8-a2bb-c6bc8085dd26</name> - <entityName>ExportTemplate_entity</entityName> - <fieldName>Languages</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>9ee48241-5d40-46e9-83ec-a1dc55fdb7d5</name> - <entityName>District_entity</entityName> - <fieldName>Languages</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ExcludedIds_param</name> @@ -106,14 +44,6 @@ <name>ISO3NameFiltered</name> <lookupIdfield>ISO3</lookupIdfield> <documentation>%aditoprj%/entity/Language_entity/entityfields/iso3namefiltered/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>2df9d0ed-c26b-4166-9667-786a55146e05</name> - <entityName>DescriptionTranslation_entity</entityName> - <fieldName>Languages</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ExcludedIds_param</name> diff --git a/entity/LeadLog_entity/LeadLog_entity.aod b/entity/LeadLog_entity/LeadLog_entity.aod index 60e321526ff8163355ca475842c04ef2ff6af8aa..823aabceeaeae291ec1de724cc79600929ac2d6c 100644 --- a/entity/LeadLog_entity/LeadLog_entity.aod +++ b/entity/LeadLog_entity/LeadLog_entity.aod @@ -1,12 +1,13 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>LeadLog_entity</name> <description></description> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/LeadLog_entity/documentation.adoc</documentation> <grantCreate v="false" /> <grantUpdate v="false" /> - <grantDelete v="false" /> + <grantDelete v="true" /> + <grantDeleteProcess>%aditoprj%/entity/LeadLog_entity/grantDeleteProcess.js</grantDeleteProcess> <recordContainer>db</recordContainer> <entityFields> <entityProvider> @@ -42,14 +43,6 @@ <entityProvider> <name>LeadLogP</name> <titlePlural>Import logs</titlePlural> - <dependencies> - <entityDependency> - <name>eaecc675-2fc3-4e10-8c3c-f8173444d329</name> - <entityName>Leadimport_entity</entityName> - <fieldName>LeadLogC</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityParameter> <name>LeadImportId</name> diff --git a/entity/LeadLog_entity/grantDeleteProcess.js b/entity/LeadLog_entity/grantDeleteProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..cea08cc1f625bdd4b38ced32dffe9b979c2a0c5b --- /dev/null +++ b/entity/LeadLog_entity/grantDeleteProcess.js @@ -0,0 +1,10 @@ +import("system.vars"); +import("system.result"); + +var leadLogId = vars.get("$field.LEADLOGID"); + +var canDelete = new HasLinkedObjectTester() + .andNoEntityRows("Document_entity", "Documents", {AssignmentTable_param : "LEADLOG", AssignmentRowId_param : leadLogId}) //Documents + .validate(); + +result.string(canDelete); \ No newline at end of file diff --git a/entity/LeadTemp_entity/LeadTemp_entity.aod b/entity/LeadTemp_entity/LeadTemp_entity.aod index b8ae307bfe5693e730a607c25c2f74d9f6cbce4d..b4780474887a5f8d344c4abbc72fff46d5e64876 100644 --- a/entity/LeadTemp_entity/LeadTemp_entity.aod +++ b/entity/LeadTemp_entity/LeadTemp_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>LeadTemp_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/LeadTemp_entity/documentation.adoc</documentation> @@ -151,14 +151,6 @@ <entityProvider> <name>LeadTempP</name> <titlePlural>Import Data</titlePlural> - <dependencies> - <entityDependency> - <name>1728cc52-9368-4a39-9702-c905d3594738</name> - <entityName>Leadimport_entity</entityName> - <fieldName>LeadTempC</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityParameter> <name>LeadImportId</name> diff --git a/entity/Lead_entity/Lead_entity.aod b/entity/Lead_entity/Lead_entity.aod index f4f73b84ea74b558b60dc4df4fc0f0a4993ac336..d30008faf23207c0dc529439969492841ff2925f 100644 --- a/entity/Lead_entity/Lead_entity.aod +++ b/entity/Lead_entity/Lead_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Lead_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/Lead_entity/documentation.adoc</documentation> @@ -52,21 +52,13 @@ <targetContextField>person_context</targetContextField> <targetIdField>LEAD_PERSCONTACT</targetIdField> <titlePlural>Transfered data</titlePlural> - <dependencies> - <entityDependency> - <name>71d298e2-79b9-43f0-9c8c-ee0a1a71cea4</name> - <entityName>Leadimport_entity</entityName> - <fieldName>LeadC</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityParameter> <name>LeadImportId</name> <expose v="true" /> </entityParameter> <entityField> - <name>LEADID</name> + <name>LEADSID</name> </entityField> <entityField> <name>LEAD_SOURCE</name> @@ -134,88 +126,88 @@ <recordFieldMappings> <dbRecordFieldMapping> <name>LEAD_ADDRESS.value</name> - <recordfield>LEAD.ADDRESS</recordfield> + <recordfield>LEADS.ADDRESS</recordfield> <isFilterable v="true" /> <isLookupFilter v="true" /> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>LEAD_CITY.value</name> - <recordfield>LEAD.CITY</recordfield> + <recordfield>LEADS.CITY</recordfield> <isFilterable v="true" /> <isLookupFilter v="true" /> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>LEAD_COUNTRY.value</name> - <recordfield>LEAD.COUNTRY</recordfield> + <recordfield>LEADS.COUNTRY</recordfield> <isFilterable v="true" /> <isLookupFilter v="true" /> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>LEAD_FIRSTNAME.value</name> - <recordfield>LEAD.FIRSTNAME</recordfield> + <recordfield>LEADS.FIRSTNAME</recordfield> <isFilterable v="true" /> <isLookupFilter v="true" /> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>LEAD_LASTNAME.value</name> - <recordfield>LEAD.LASTNAME</recordfield> + <recordfield>LEADS.LASTNAME</recordfield> <isFilterable v="true" /> <isLookupFilter v="true" /> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>LEAD_NAME.value</name> - <recordfield>LEAD.NAME</recordfield> + <recordfield>LEADS.NAME</recordfield> <isFilterable v="true" /> <isLookupFilter v="true" /> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>LEAD_SALUTATION.value</name> - <recordfield>LEAD.SALUTATION</recordfield> + <recordfield>LEADS.SALUTATION</recordfield> <isFilterable v="true" /> <isLookupFilter v="true" /> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>LEAD_TITLE.value</name> - <recordfield>LEAD.TITLE</recordfield> + <recordfield>LEADS.TITLE</recordfield> <isFilterable v="true" /> <isLookupFilter v="true" /> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>LEAD_ZIP.value</name> - <recordfield>LEAD.ZIP</recordfield> + <recordfield>LEADS.ZIP</recordfield> <isFilterable v="true" /> <isLookupFilter v="true" /> </dbRecordFieldMapping> <dbRecordFieldMapping> - <name>LEADID.value</name> - <recordfield>LEAD.LEADID</recordfield> + <name>LEADSID.value</name> + <recordfield>LEADS.LEADSID</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>LEAD_SOURCE.value</name> - <recordfield>LEAD.SOURCE</recordfield> + <recordfield>LEADS.SOURCE</recordfield> <isFilterable v="true" /> <isLookupFilter v="true" /> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>LEADDUP_STATUS.value</name> - <recordfield>LEAD.DUPSTATUS</recordfield> + <recordfield>LEADS.STATUS</recordfield> <isFilterable v="true" /> <isLookupFilter v="true" /> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>LEAD_PERSON.value</name> - <recordfield>LEAD.PERSON_ID</recordfield> + <recordfield>LEADS.PERSON_ID</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>LEAD_ORGANISATIONID.value</name> - <recordfield>LEAD.ORGANISATION_ID</recordfield> + <recordfield>LEADS.ORGANISATION_ID</recordfield> </dbRecordFieldMapping> </recordFieldMappings> <linkInformation> <linkInformation> - <name>c4a59fcc-2c94-4944-ae57-790a4adcca30</name> - <tableName>LEAD</tableName> - <primaryKey>LEADID</primaryKey> + <name>b0fe187f-a6e9-456b-a523-de40ea2d674d</name> + <tableName>LEADS</tableName> + <primaryKey>LEADSID</primaryKey> <isUIDTable v="true" /> <readonly v="false" /> </linkInformation> diff --git a/entity/Lead_entity/recordcontainers/db/conditionProcess.js b/entity/Lead_entity/recordcontainers/db/conditionProcess.js index fe9e31415a33cc2ab1916661060c308870f2dc52..898acc9967c48cf5086fcc2c771423fc529151e9 100644 --- a/entity/Lead_entity/recordcontainers/db/conditionProcess.js +++ b/entity/Lead_entity/recordcontainers/db/conditionProcess.js @@ -1,4 +1,4 @@ import("system.result"); import("Sql_lib"); -result.string(newWhere("LEAD.LEADIMPORT_ID", "$param.LeadImportId").toString()); \ No newline at end of file +result.string(newWhere("LEADS.LEADIMPORT_ID", "$param.LeadImportId").toString()); \ No newline at end of file diff --git a/entity/LeadimportMappingAssistant_entity/LeadimportMappingAssistant_entity.aod b/entity/LeadimportMappingAssistant_entity/LeadimportMappingAssistant_entity.aod index 1d52cd2f81549670b246a953ec4836f1cc769230..470ed88432d205fa3e4b2ced73079ffaa1f82f09 100644 --- a/entity/LeadimportMappingAssistant_entity/LeadimportMappingAssistant_entity.aod +++ b/entity/LeadimportMappingAssistant_entity/LeadimportMappingAssistant_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>LeadimportMappingAssistant_entity</name> <title>Mapping</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -55,14 +55,6 @@ <entityProvider> <name>LeadimportMapping</name> <documentation>%aditoprj%/entity/LeadimportMappingAssistant_entity/entityfields/leadimportmapping/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>89a94a8b-9447-47a6-94c7-240e25aff7a8</name> - <entityName>Leadimport_entity</entityName> - <fieldName>LeadimportMappings</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityParameter> <name>Leadimport_ID_param</name> diff --git a/entity/Leadimport_entity/Leadimport_entity.aod b/entity/Leadimport_entity/Leadimport_entity.aod index 6dd8755383e13bf7bbebf6c77c00bf0e3f0688dc..3bece6cbcfb27e1950f1f379dbd38417ecaa8ffd 100644 --- a/entity/Leadimport_entity/Leadimport_entity.aod +++ b/entity/Leadimport_entity/Leadimport_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Leadimport_entity</name> <title>Lead Import</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -42,14 +42,6 @@ </entityActionGroup> <entityProvider> <name>#PROVIDER</name> - <dependencies> - <entityDependency> - <name>451f0237-27f9-4018-a165-9bb4857d6565</name> - <entityName>Object_entity</entityName> - <fieldName>Leadimports</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>NAME</name> @@ -99,7 +91,7 @@ <onActionProcess>%aditoprj%/entity/Leadimport_entity/entityfields/transferdata/onActionProcess.js</onActionProcess> <isMenuAction v="true" /> <isObjectAction v="false" /> - <isSelectionAction v="false" /> + <selectionType>UNBOUND</selectionType> <iconId>VAADIN:INBOX</iconId> <stateProcess>%aditoprj%/entity/Leadimport_entity/entityfields/transferdata/stateProcess.js</stateProcess> </entityActionField> @@ -173,14 +165,6 @@ <entityProvider> <name>ImportField</name> <documentation>%aditoprj%/entity/Leadimport_entity/entityfields/importfield/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>ae9f958f-b816-4826-8579-9f01362e0596</name> - <entityName>ImportField_Entity</entityName> - <fieldName>LeadImportC</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityConsumer> <name>ImportFieldID</name> diff --git a/entity/Leadimport_entity/entityfields/leadimportreset/onActionProcess.js b/entity/Leadimport_entity/entityfields/leadimportreset/onActionProcess.js index da2f76e57b3a9489eba26332a54159fa4b4df186..52cbc29086bbe33a5df0efb4542ae253ae5fadd3 100644 --- a/entity/Leadimport_entity/entityfields/leadimportreset/onActionProcess.js +++ b/entity/Leadimport_entity/entityfields/leadimportreset/onActionProcess.js @@ -26,9 +26,9 @@ newWhere("LEADLOG.LEADIMPORT_ID", leadimportId) .from("LEADLOG") .deleteData(); -newWhere("LEAD.LEADIMPORT_ID", leadimportId) - .and("LEAD.DATE_NEW", dateADayBefore.getTime(), "# >= ?") - .from("LEAD") +newWhere("LEADS.LEADIMPORT_ID", leadimportId) + .and("LEADS.DATE_NEW", dateADayBefore.getTime(), "# >= ?") + .from("LEADS") .deleteData(); // Ändern des Status auf Created newWhere("LEADIMPORT.LEADIMPORTID", leadimportId).updateData(true, "LEADIMPORT", ["Status"], null, [$KeywordRegistry.importStatus$created()]); diff --git a/entity/Leadimport_entity/grantDeleteProcess.js b/entity/Leadimport_entity/grantDeleteProcess.js index 416fae60ccb6b7be26ccf428eb9c5f692b18b077..673d09de7739420cae7e94fc8270ceacba96564b 100644 --- a/entity/Leadimport_entity/grantDeleteProcess.js +++ b/entity/Leadimport_entity/grantDeleteProcess.js @@ -8,6 +8,7 @@ var currentContext = ContextUtils.getCurrentContextId(); var canDelete = new HasLinkedObjectTester() .andNoEntityRows("Task_entity", "Tasks", {ObjectId_param : currentContext, RowId_param : rowId}) //Tasks + .andNoEntityRows("Document_entity", "Documents", {AssignmentTable_param : "LEADIMPORT", AssignmentRowId_param : rowId}) //Documents .validate(); result.string(canDelete); diff --git a/entity/Leadimport_entity/recordcontainers/db/onDBDelete.js b/entity/Leadimport_entity/recordcontainers/db/onDBDelete.js index 17ff5bbfc50c4ab8b2f59bfa43e530c9f6fbd6dd..0e876c9b6fd38f630f8cd94e0458a6fed6daef8a 100644 --- a/entity/Leadimport_entity/recordcontainers/db/onDBDelete.js +++ b/entity/Leadimport_entity/recordcontainers/db/onDBDelete.js @@ -27,7 +27,7 @@ if(leadImportId != "")//delete the connected importfields und der Mappings { newWhere("IMPORTFIELD.LEADIMPORT_ID", leadImportId).deleteData(); newWhere("LEADTEMP.ROW_ID", leadImportId).deleteData(); - newWhere("LEAD.LEADIMPORT_ID", leadImportId).deleteData(); + newWhere("LEADS.LEADIMPORT_ID", leadImportId).deleteData(); newWhere("LEADLOG.LEADIMPORT_ID", leadImportId).deleteData(); newWhere("LEADIMPORTMAPPINGASSISTANT.LEADIMPORT_ID", leadImportId).deleteData(); } diff --git a/entity/LetterRecipient_entity/LetterRecipient_entity.aod b/entity/LetterRecipient_entity/LetterRecipient_entity.aod index c69902cd77d808ef4787a6f2e0ec3de07a9494e9..2672cecc140933313a57a6104b1ab7af0db9c4bb 100644 --- a/entity/LetterRecipient_entity/LetterRecipient_entity.aod +++ b/entity/LetterRecipient_entity/LetterRecipient_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>LetterRecipient_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/LetterRecipient_entity/documentation.adoc</documentation> @@ -28,14 +28,6 @@ <lookupIdfield>LETTERRECIPIENTID</lookupIdfield> <targetContextField>TARGETCONTEXT</targetContextField> <targetIdField>CONTACT_ID</targetIdField> - <dependencies> - <entityDependency> - <name>f8e19c87-d226-4712-b431-2b56324dacb8</name> - <entityName>SerialLetter_entity</entityName> - <fieldName>Recipients</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityParameter> <name>SerialLetterId_param</name> @@ -79,7 +71,7 @@ <name>downloadLetterForSelection</name> <onActionProcess>%aditoprj%/entity/LetterRecipient_entity/entityfields/recipientactions/children/downloadletterforselection/onActionProcess.js</onActionProcess> <isObjectAction v="false" /> - <isSelectionAction v="true" /> + <selectionType>MULTI</selectionType> <iconId>VAADIN:DOWNLOAD_ALT</iconId> <tooltipProcess>%aditoprj%/entity/LetterRecipient_entity/entityfields/recipientactions/children/downloadletterforselection/tooltipProcess.js</tooltipProcess> </entityActionField> diff --git a/entity/LetterRecipient_entity/entityfields/recipientactions/children/removewithcommrestriction/onActionProcess.js b/entity/LetterRecipient_entity/entityfields/recipientactions/children/removewithcommrestriction/onActionProcess.js index 8b54190ef14b5fc4f16d0af6c67e4e84d8773602..21b3e80d49548da9a8276548790b5c7e81fefc27 100644 --- a/entity/LetterRecipient_entity/entityfields/recipientactions/children/removewithcommrestriction/onActionProcess.js +++ b/entity/LetterRecipient_entity/entityfields/recipientactions/children/removewithcommrestriction/onActionProcess.js @@ -2,13 +2,14 @@ import("Contact_lib"); import("system.neon"); import("Sql_lib"); import("KeywordRegistry_basic"); +import("MarketingCondition_lib"); var recipientIds = new SqlBuilder() .select("LETTERRECIPIENTID") .from("LETTERRECIPIENT") .join("CONTACT", newWhere("LETTERRECIPIENT.CONTACT_ID = CONTACT.CONTACTID") - .and(ContactUtils.getCommRestrictionCondition($KeywordRegistry.communicationMediumCampaign$letter()))) + .and(new CommunicationSettingsCondition().address().rejected().existSettings().buildCondition())) .whereIfSet("LETTERRECIPIENT.SERIALLETTER_ID", "$param.SerialLetterId_param") .arrayColumn(); diff --git a/entity/LetterRecipient_entity/recordcontainers/db/recordfieldmappings/hascommrestriction.value/expression.js b/entity/LetterRecipient_entity/recordcontainers/db/recordfieldmappings/hascommrestriction.value/expression.js index c4cd2c2544b5f45d0c4c2a7604c40204f18a2867..680d9a147730724fbabb42853d29043a281971be 100644 --- a/entity/LetterRecipient_entity/recordcontainers/db/recordfieldmappings/hascommrestriction.value/expression.js +++ b/entity/LetterRecipient_entity/recordcontainers/db/recordfieldmappings/hascommrestriction.value/expression.js @@ -3,7 +3,10 @@ import("KeywordRegistry_basic"); import("Contact_lib"); import("system.db"); import("system.result"); +import("MarketingCondition_lib"); -var commRestrictionCond = ContactUtils.getCommRestrictionCondition($KeywordRegistry.communicationMediumCampaign$letter()).build(); -var sql = "case when (" + SqlUtils.translateStatementWithQuotes(commRestrictionCond) + ") then 'true' else 'false' end"; +var sql = SqlBuilder.caseWhen(new CommunicationSettingsCondition().address("CONTACT.ADDRESS_ID").rejected().existSettings().buildCondition()) + .thenString("true") + .elseString("false") + .toString(); result.string(sql); diff --git a/entity/Letter_entity/Letter_entity.aod b/entity/Letter_entity/Letter_entity.aod index 1cd209bbe24e5d306cd48ea4ee0b2fe208fad318..8d06b2a2c21234c506eb4576631b93a53453ee02 100644 --- a/entity/Letter_entity/Letter_entity.aod +++ b/entity/Letter_entity/Letter_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Letter_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/Letter_entity/documentation.adoc</documentation> diff --git a/entity/LogHistory_entity/LogHistory_entity.aod b/entity/LogHistory_entity/LogHistory_entity.aod index 059c91250db6c8663797945a0a537cc699c7307e..5337d8f6ea078d4bc6c10a58e6489a3860f876c5 100644 --- a/entity/LogHistory_entity/LogHistory_entity.aod +++ b/entity/LogHistory_entity/LogHistory_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>LogHistory_entity</name> <title>Log</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -39,92 +39,6 @@ <entityProvider> <name>LogHistoryProvider</name> <documentation>%aditoprj%/entity/LogHistory_entity/entityfields/loghistoryprovider/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>23dbfa51-5340-48e3-bd60-e0dcb7d44ad3</name> - <entityName>Person_entity</entityName> - <fieldName>LogHistories</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>093a40d9-9f20-4c2f-8b43-3eed39b6bede</name> - <entityName>Organisation_entity</entityName> - <fieldName>LogHistories</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>58532bc9-e789-403d-91a5-832ac40d6a6e</name> - <entityName>Salesproject_entity</entityName> - <fieldName>LogHistories</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>6caadcde-8fda-40cb-97e0-ae507beab9d7</name> - <entityName>Offer_entity</entityName> - <fieldName>LogHistories</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>f49eacab-f62c-4354-88eb-359cc92c2d44</name> - <entityName>Order_entity</entityName> - <fieldName>LogHistories</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>de473d92-dbd3-4300-8887-163c997fcd62</name> - <entityName>Contract_entity</entityName> - <fieldName>LogHistories</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>1c941565-b8ca-4805-a9d6-d49eb26a9801</name> - <entityName>Product_entity</entityName> - <fieldName>LogHistories</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>6d14d6dd-ce6e-464f-9132-3e10c1116246</name> - <entityName>Task_entity</entityName> - <fieldName>LogHistories</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>c7d97e89-6363-4ad3-8132-b5aeb7a0c98e</name> - <entityName>BulkMail_entity</entityName> - <fieldName>LogHistories</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>deef9cab-515b-423c-87df-1a57b3ee1ff2</name> - <entityName>SerialLetter_entity</entityName> - <fieldName>LogHistories</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>dd4e11e2-696c-4066-88f7-1f81b06e565a</name> - <entityName>Leadimport_entity</entityName> - <fieldName>LogHistoryC</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>3426c963-c46f-48a1-96e8-8176b5b093c4</name> - <entityName>Activity_entity</entityName> - <fieldName>LogHistories</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>fd46379e-f1be-4a9e-9914-4f3f81d96ad5</name> - <entityName>District_entity</entityName> - <fieldName>LogHistories</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>e97b5f2d-d2e0-4539-96e9-e3f96107ffaa</name> - <entityName>DistrictResponsible_entity</entityName> - <fieldName>LogHistories</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>tablenames_param</name> diff --git a/entity/MSTTeamLink_entity/MSTTeamLink_entity.aod b/entity/MSTTeamLink_entity/MSTTeamLink_entity.aod index 3660a3783e7130d2d9c515823b0bf6dd58b9628f..799395a268157c689401283deaa3e9bc06aaaa05 100644 --- a/entity/MSTTeamLink_entity/MSTTeamLink_entity.aod +++ b/entity/MSTTeamLink_entity/MSTTeamLink_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>MSTTeamLink_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/MSTTeamLink_entity/documentation.adoc</documentation> diff --git a/entity/MSTTeamMember_entity/MSTTeamMember_entity.aod b/entity/MSTTeamMember_entity/MSTTeamMember_entity.aod index 3c692264449930b67d31618a638c5c7aeb10245f..afae0bf21456527fb0dc3bc68f8adb543dcd85fe 100644 --- a/entity/MSTTeamMember_entity/MSTTeamMember_entity.aod +++ b/entity/MSTTeamMember_entity/MSTTeamMember_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>MSTTeamMember_entity</name> <title>Member</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -10,12 +10,6 @@ <entityFields> <entityProvider> <name>#PROVIDER</name> - <dependencies> - <entityDependency> - <name>335d30c4-7beb-4dcb-8a0f-de85108530a9</name> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>CONTACT_ID</name> @@ -70,14 +64,6 @@ <entityProvider> <name>MembersOfTeam</name> <documentation>%aditoprj%/entity/MSTTeamMember_entity/entityfields/membersofteam/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>37854fde-c4ae-4f56-82df-14385717f82e</name> - <entityName>MSTTeam_entity</entityName> - <fieldName>TeamMembers</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityParameter> <name>ObjectRowId_param</name> diff --git a/entity/MSTTeam_entity/MSTTeam_entity.aod b/entity/MSTTeam_entity/MSTTeam_entity.aod index 16929c27f7d6349825f5f3cfb85851fb493da0b5..d210c614240826ec1ce967ccbc49475f9bca0e22 100644 --- a/entity/MSTTeam_entity/MSTTeam_entity.aod +++ b/entity/MSTTeam_entity/MSTTeam_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>MSTTeam_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/MSTTeam_entity/documentation.adoc</documentation> @@ -104,14 +104,6 @@ <name>TeamsByIdAndName</name> <lookupIdfield>TEAMID_AND_NAME</lookupIdfield> <documentation>%aditoprj%/entity/MSTTeam_entity/entityfields/teamsbyidandname/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>e48136a2-5f66-4399-903a-cd1363fa30c6</name> - <entityName>MSTTeamLink_entity</entityName> - <fieldName>Teams</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>UseCache_param</name> diff --git a/entity/MSTeamsActivityImport_entity/MSTeamsActivityImport_entity.aod b/entity/MSTeamsActivityImport_entity/MSTeamsActivityImport_entity.aod index 5a3b3cc6b813e48b8674a6acb8e1000a42f4f4a6..cd48a813bf263d150a7f6eba7d19fed0ff9cc38f 100644 --- a/entity/MSTeamsActivityImport_entity/MSTeamsActivityImport_entity.aod +++ b/entity/MSTeamsActivityImport_entity/MSTeamsActivityImport_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>MSTeamsActivityImport_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/MSTeamsActivityImport_entity/documentation.adoc</documentation> diff --git a/entity/MSTeamsChannel_entity/MSTeamsChannel_entity.aod b/entity/MSTeamsChannel_entity/MSTeamsChannel_entity.aod index 88467d44647314dcfe53fa5d31f47142bf79944d..f61de16eed00b99c9a5b9b6aefa844bba212004d 100644 --- a/entity/MSTeamsChannel_entity/MSTeamsChannel_entity.aod +++ b/entity/MSTeamsChannel_entity/MSTeamsChannel_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>MSTeamsChannel_entity</name> <title>Channel</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -22,20 +22,6 @@ <entityProvider> <name>ChannelsForTeam</name> <documentation>%aditoprj%/entity/MSTeamsChannel_entity/entityfields/channelsforteam/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>a784ee43-b2ef-4d55-a092-9c7f822905fa</name> - <entityName>MSTeamsActivityImport_entity</entityName> - <fieldName>Channels</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>c2b60ab3-3edd-4571-b9aa-766826f561fd</name> - <entityName>MSTTeam_entity</entityName> - <fieldName>Channels</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityParameter> <name>TeamId_param</name> @@ -46,14 +32,6 @@ <name>ChannelsByName</name> <lookupIdfield>CHANNELNAME</lookupIdfield> <documentation>%aditoprj%/entity/MSTeamsChannel_entity/entityfields/channelsbyname/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>3dfb5be2-d956-4e8a-9aec-4c80b81e0527</name> - <entityName>MSTeamsDocument_entity</entityName> - <fieldName>Channels</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityProvider> <name>#PROVIDER_AGGREGATES</name> diff --git a/entity/MSTeamsDocument_entity/MSTeamsDocument_entity.aod b/entity/MSTeamsDocument_entity/MSTeamsDocument_entity.aod index 6ba0493ae1f7e53e1929d69f92b7ba88a086e031..07c7f724cd85d1961540f848750302b1b62a21ad 100644 --- a/entity/MSTeamsDocument_entity/MSTeamsDocument_entity.aod +++ b/entity/MSTeamsDocument_entity/MSTeamsDocument_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>MSTeamsDocument_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/MSTeamsDocument_entity/documentation.adoc</documentation> diff --git a/entity/MSTeamsMessage_entity/MSTeamsMessage_entity.aod b/entity/MSTeamsMessage_entity/MSTeamsMessage_entity.aod index eb9b4954def6f93d5f51650148618ae46813bae6..f5052112279071f8c8927dd0542f6d45f19b942a 100644 --- a/entity/MSTeamsMessage_entity/MSTeamsMessage_entity.aod +++ b/entity/MSTeamsMessage_entity/MSTeamsMessage_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>MSTeamsMessage_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/MSTeamsMessage_entity/documentation.adoc</documentation> @@ -25,18 +25,6 @@ <name>Messages</name> <documentation>%aditoprj%/entity/MSTeamsMessage_entity/entityfields/messages/documentation.adoc</documentation> <recordContainer>jdito</recordContainer> - <dependencies> - <entityDependency> - <name>89048e4d-32bc-4531-9b45-b0c0d9de82b1</name> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>c79dc4f8-df40-47ba-9baa-b6a64c00f46c</name> - <entityName>MSTeamsActivityImport_entity</entityName> - <fieldName>Messages</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>UID</name> diff --git a/entity/MailLog_entity/MailLog_entity.aod b/entity/MailLog_entity/MailLog_entity.aod new file mode 100644 index 0000000000000000000000000000000000000000..431f9c0c316beb11581af1068a2414a2643814a2 --- /dev/null +++ b/entity/MailLog_entity/MailLog_entity.aod @@ -0,0 +1,240 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> + <name>MailLog_entity</name> + <title>Maillog</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <grantCreate v="false" /> + <grantUpdate v="false" /> + <grantDelete v="false" /> + <titlePlural>Maillogs</titlePlural> + <recordContainer>db</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + </entityProvider> + <entityField> + <name>CONTACT_ID</name> + <title>Contact</title> + <consumer>Contacts</consumer> + <groupable v="true" /> + <linkedContextProcess>%aditoprj%/entity/MailLog_entity/entityfields/contact_id/linkedContextProcess.js</linkedContextProcess> + <mandatory v="true" /> + </entityField> + <entityField> + <name>MAILING_SUBJECT</name> + <title>Subject</title> + <mandatory v="true" /> + </entityField> + <entityField> + <name>RECIPIENT_EMAIL</name> + <title>Recipient</title> + <mandatory v="true" /> + </entityField> + <entityField> + <name>SENDER_EMAIL</name> + <title>Sender</title> + <mandatory v="true" /> + </entityField> + <entityField> + <name>OBJECT_ROWID</name> + <mandatory v="true" /> + </entityField> + <entityField> + <name>OBJECT_TYPE</name> + <mandatory v="true" /> + </entityField> + <entityField> + <name>MAIL_RUNID</name> + </entityField> + <entityField> + <name>MAIL_LOGID</name> + </entityField> + <entityField> + <name>STATUS</name> + <title>Status</title> + <mandatory v="true" /> + </entityField> + <entityField> + <name>BCC_EMAIL</name> + <mandatory v="true" /> + </entityField> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityField> + <name>PERSON_ID</name> + </entityField> + <entityField> + <name>ORGANISATION_ID</name> + </entityField> + <entityParameter> + <name>ObjectType_param</name> + <expose v="true" /> + </entityParameter> + <entityParameter> + <name>ObjectRowId_param</name> + <expose v="true" /> + </entityParameter> + <entityProvider> + <name>MailLogs</name> + <children> + <entityParameter> + <name>ObjectType_param</name> + <valueProcess>%aditoprj%/entity/MailLog_entity/entityfields/maillogs/children/objecttype_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityProvider> + <entityField> + <name>DATE_SEND</name> + <title>Send Date</title> + <contentType>DATE</contentType> + <resolution>MINUTE</resolution> + </entityField> + <entityActionGroup> + <name>RecipientActions</name> + <children> + <entityActionField> + <name>DownloadEml</name> + <title>Download</title> + <onActionProcess>%aditoprj%/entity/MailLog_entity/entityfields/recipientactions/children/downloademl/onActionProcess.js</onActionProcess> + <isMenuAction v="true" /> + <isObjectAction v="true" /> + <selectionType>MULTI</selectionType> + </entityActionField> + </children> + </entityActionGroup> + <entityConsumer> + <name>Contacts</name> + <dependency> + <name>dependency</name> + <entityName>AnyContact_entity</entityName> + <fieldName>#PROVIDER</fieldName> + </dependency> + </entityConsumer> + <entityField> + <name>TESTRUN</name> + <title>Test Run</title> + <contentType>BOOLEAN</contentType> + </entityField> + <entityField> + <name>DATE_OPENED</name> + <title>Opening Date</title> + <contentType>DATE</contentType> + <resolution>MINUTE</resolution> + </entityField> + </entityFields> + <recordContainers> + <dbRecordContainer> + <name>db</name> + <fromClauseProcess>%aditoprj%/entity/MailLog_entity/recordcontainers/db/fromClauseProcess.js</fromClauseProcess> + <conditionProcess>%aditoprj%/entity/MailLog_entity/recordcontainers/db/conditionProcess.js</conditionProcess> + <orderClauseProcess>%aditoprj%/entity/MailLog_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess> + <alias>Data_alias</alias> + <recordFieldMappings> + <dbRecordFieldMapping> + <name>CONTACT_ID.value</name> + <recordfield>MAIL_LOG.CONTACT_ID</recordfield> + <isFilterable v="true" /> + <isLookupFilter v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>MAILING_SUBJECT.value</name> + <recordfield>MAIL_LOG.MAILING_SUBJECT</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>RECIPIENT_EMAIL.value</name> + <recordfield>MAIL_LOG.RECIPIENT_EMAIL</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>SENDER_EMAIL.value</name> + <recordfield>MAIL_LOG.SENDER_EMAIL</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>OBJECT_ROWID.value</name> + <recordfield>MAIL_RUN.OBJECT_ROWID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>OBJECT_TYPE.value</name> + <recordfield>MAIL_RUN.OBJECT_TYPE</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>MAIL_RUNID.value</name> + <recordfield>MAIL_RUN.MAIL_RUNID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>MAIL_LOGID.value</name> + <recordfield>MAIL_LOG.MAIL_LOGID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>STATUS.value</name> + <recordfield>MAIL_LOG.STATUS</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>BCC_EMAIL.value</name> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>CONTACT_ID.displayValue</name> + <expression>%aditoprj%/entity/MailLog_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js</expression> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>PERSON_ID.value</name> + <recordfield>CONTACT.PERSON_ID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>ORGANISATION_ID.value</name> + <recordfield>CONTACT.ORGANISATION_ID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DATE_SEND.value</name> + <recordfield>MAIL_LOG.DATE_SEND</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>STATUS.displayValue</name> + <expression>%aditoprj%/entity/MailLog_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js</expression> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>TESTRUN.value</name> + <recordfield>MAIL_RUN.TESTRUN</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DATE_OPENED.value</name> + <recordfield>WEBLINK_CLICK.DATE_OPENED</recordfield> + </dbRecordFieldMapping> + </recordFieldMappings> + <linkInformation> + <linkInformation> + <name>6b1b4cc2-cdc1-4c15-a1d7-6b1236332884</name> + <tableName>MAIL_LOG</tableName> + <primaryKey>MAIL_LOGID</primaryKey> + <isUIDTable v="true" /> + <readonly v="false" /> + </linkInformation> + <linkInformation> + <name>f3319573-943a-40e8-85b7-e01192c55c1d</name> + <tableName>MAIL_RUN</tableName> + <primaryKey>MAIL_RUNID</primaryKey> + <isUIDTable v="false" /> + <readonly v="true" /> + </linkInformation> + <linkInformation> + <name>04a01533-28bc-4b89-b3f2-b06b7c12f393</name> + <tableName>CONTACT</tableName> + <primaryKey>CONTACTID</primaryKey> + <isUIDTable v="false" /> + <readonly v="true" /> + </linkInformation> + <linkInformation> + <name>ad7f427d-fdd8-426d-b068-ce89e2dbeeda</name> + <tableName>WEBLINK_CLICK</tableName> + <primaryKey>WEBLINK_CLICKID</primaryKey> + <isUIDTable v="false" /> + <readonly v="true" /> + </linkInformation> + </linkInformation> + </dbRecordContainer> + </recordContainers> +</entity> diff --git a/entity/MailLog_entity/entityfields/contact_id/linkedContextProcess.js b/entity/MailLog_entity/entityfields/contact_id/linkedContextProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..2e48676daf3e661032b7d9aaf896c5bfbdd51e2d --- /dev/null +++ b/entity/MailLog_entity/entityfields/contact_id/linkedContextProcess.js @@ -0,0 +1,5 @@ +import("system.vars"); +import("system.result"); +import("Contact_lib"); + +result.string(ContactUtils.getContextByPersOrg(vars.get("$field.PERSON_ID"), vars.get("$field.ORGANISATION_ID"))); \ No newline at end of file diff --git a/entity/MailLog_entity/entityfields/maillogs/children/objecttype_param/valueProcess.js b/entity/MailLog_entity/entityfields/maillogs/children/objecttype_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..e8b4e72e74a0a4696ff39e83135aa6100ef908c0 --- /dev/null +++ b/entity/MailLog_entity/entityfields/maillogs/children/objecttype_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.result"); +import("Context_lib"); + +result.string(ContextUtils.getCurrentContextId()); diff --git a/entity/MailLog_entity/entityfields/recipientactions/children/downloademl/onActionProcess.js b/entity/MailLog_entity/entityfields/recipientactions/children/downloademl/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..ec52de0578cce8142d206552c2e34f5a18bca2de --- /dev/null +++ b/entity/MailLog_entity/entityfields/recipientactions/children/downloademl/onActionProcess.js @@ -0,0 +1,5 @@ +import("system.neon"); +import("system.vars"); +import("Bulkmail_lib"); + +neon.download(BulkMailUtils.getEmlFile(vars.get("$field.OBJECT_ROWID"), vars.get("$field.MAIL_RUNID"), vars.get("$field.MAIL_LOGID")),"test.eml"); diff --git a/entity/MailLog_entity/recordcontainers/db/conditionProcess.js b/entity/MailLog_entity/recordcontainers/db/conditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..3abd921bd5cf8ea0a7ad4d1a8ca63ee6e7222037 --- /dev/null +++ b/entity/MailLog_entity/recordcontainers/db/conditionProcess.js @@ -0,0 +1,7 @@ +import("system.result"); +import("Sql_lib"); + +var cond = newWhereIfSet("MAIL_RUN.OBJECT_TYPE", "$param.ObjectType_param") + .andIfSet("MAIL_RUN.OBJECT_ROWID", "$param.ObjectRowId_param"); + +result.string(cond.toString()); \ No newline at end of file diff --git a/entity/MailLog_entity/recordcontainers/db/fromClauseProcess.js b/entity/MailLog_entity/recordcontainers/db/fromClauseProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..5403f0c7eeded52578dbbf92b605b1a5fa2c4081 --- /dev/null +++ b/entity/MailLog_entity/recordcontainers/db/fromClauseProcess.js @@ -0,0 +1,4 @@ +import("system.result"); +result.string("MAIL_LOG join MAIL_RUN on MAIL_LOG.MAIL_RUN_ID = MAIL_RUN.MAIL_RUNID\n\ + join CONTACT on CONTACT.CONTACTID = MAIL_LOG.CONTACT_ID\n\ + left join WEBLINK_CLICK on WEBLINK_CLICK.WEBLINK_CLICKID = MAIL_LOG.OPENER_LINK_CLICK_ID"); \ No newline at end of file diff --git a/entity/MailLog_entity/recordcontainers/db/orderClauseProcess.js b/entity/MailLog_entity/recordcontainers/db/orderClauseProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..294f3ffbb2105339dab7ddf91efefc4ccc903f36 --- /dev/null +++ b/entity/MailLog_entity/recordcontainers/db/orderClauseProcess.js @@ -0,0 +1,4 @@ +import("system.result"); +import("system.db"); + +result.object({"MAIL_LOG.DATE_SEND": db.DESCENDING}); \ No newline at end of file diff --git a/entity/MailLog_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js b/entity/MailLog_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..72d1600cff8a2f7f9cd33dd3551e372cdec7790c --- /dev/null +++ b/entity/MailLog_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js @@ -0,0 +1,4 @@ +import("Contact_lib"); +import("system.result"); + +result.string(ContactUtils.getResolvingDisplaySubSql("MAIL_LOG.CONTACT_ID")); \ No newline at end of file diff --git a/entity/MailLog_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js b/entity/MailLog_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..7ea51e488a10108e55122b9f9f0f3b8cdca09e93 --- /dev/null +++ b/entity/MailLog_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js @@ -0,0 +1,5 @@ +import("system.result"); +import("Keyword_lib"); +import("KeywordRegistry_basic"); + +result.string( KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.bulkMailRecipientStatus(), "MAIL_LOG.STATUS")); diff --git a/entity/MarketingWorkflowLauncher_entity/MarketingWorkflowLauncher_entity.aod b/entity/MarketingWorkflowLauncher_entity/MarketingWorkflowLauncher_entity.aod index 272d727e2b88e8dba72f92d5d0cfc8fbb446b988..1cc1dc569cc5cb86c7d03a8ab16528fdff12e050 100644 --- a/entity/MarketingWorkflowLauncher_entity/MarketingWorkflowLauncher_entity.aod +++ b/entity/MarketingWorkflowLauncher_entity/MarketingWorkflowLauncher_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>MarketingWorkflowLauncher_entity</name> <title>Marketing workflow</title> <majorModelMode>DISTRIBUTED</majorModelMode> diff --git a/entity/MemberRoles_entity/MemberRoles_entity.aod b/entity/MemberRoles_entity/MemberRoles_entity.aod index 969210f822a52c5972b08f8f8c7512f2f5e18b10..39185cc9c1da38f3c2f91b7b3777e6aecf7ad2c4 100644 --- a/entity/MemberRoles_entity/MemberRoles_entity.aod +++ b/entity/MemberRoles_entity/MemberRoles_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>MemberRoles_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/MemberRoles_entity/documentation.adoc</documentation> @@ -21,14 +21,6 @@ <entityProvider> <name>ByCategory</name> <lookupIdfield>KEYID</lookupIdfield> - <dependencies> - <entityDependency> - <name>94956ddd-5ad8-47a9-8709-cf66da8e497d</name> - <entityName>Member_entity</entityName> - <fieldName>KeywordMemberRoles</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityParameter> <name>UsageFilter_param</name> diff --git a/entity/Member_entity/Member_entity.aod b/entity/Member_entity/Member_entity.aod index 2352659698a9a46d1b461716f2e1ec4289f38284..97b8ff6f214851a906f1b612b6a4ab69cf5e482e 100644 --- a/entity/Member_entity/Member_entity.aod +++ b/entity/Member_entity/Member_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Member_entity</name> <title>${SALESPROJECT_MEMBER}</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -185,14 +185,6 @@ <targetContextField>TARGETCONTEXT</targetContextField> <targetIdField>CONTACT_ID</targetIdField> <recordContainer>db</recordContainer> - <dependencies> - <entityDependency> - <name>efeb191c-dd03-46e1-b176-c4e0c2f75fc5</name> - <entityName>Campaign_entity</entityName> - <fieldName>MemberConsumer</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>ICON</name> @@ -226,7 +218,7 @@ <name>createTeam</name> <title>Create Team</title> <onActionProcess>%aditoprj%/entity/Member_entity/entityfields/msteamsactiongroup/children/createteam/onActionProcess.js</onActionProcess> - <isSelectionAction v="false" /> + <selectionType>UNBOUND</selectionType> <iconId>NEON:PLUS</iconId> <state>EDITABLE</state> <stateProcess>%aditoprj%/entity/Member_entity/entityfields/msteamsactiongroup/children/createteam/stateProcess.js</stateProcess> @@ -278,14 +270,6 @@ <entityProvider> <name>TeamMemberProvider</name> <lookupIdfield>CONTACT_ID</lookupIdfield> - <dependencies> - <entityDependency> - <name>373a0c5c-dff5-4a6d-9a1f-68d7b73804ce</name> - <entityName>MSTTeamMember_entity</entityName> - <fieldName>ProjectMembers</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityParameter> <name>MSTTeamId_param</name> @@ -321,6 +305,12 @@ <name>ObjectSubType_param</name> <expose v="true" /> </entityParameter> + <entityField> + <name>PERSON_ATTR_LOYALTY</name> + <title>Loyalty</title> + <groupable v="true" /> + <displayValueProcess>%aditoprj%/entity/Member_entity/entityfields/person_attr_loyalty/displayValueProcess.js</displayValueProcess> + </entityField> </entityFields> <recordContainers> <dbRecordContainer> @@ -420,6 +410,10 @@ <recordfield>OBJECTMEMBER.ONSITE</recordfield> <isFilterable v="true" /> </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>PERSON_ATTR_LOYALTY.value</name> + <expression>%aditoprj%/entity/Member_entity/recordcontainers/db/recordfieldmappings/person_attr_loyalty.value/expression.js</expression> + </dbRecordFieldMapping> </recordFieldMappings> <linkInformation> <linkInformation> @@ -533,6 +527,9 @@ <jDitoRecordFieldMapping> <name>MST_MEMBERROLE.value</name> </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>PERSON_ATTR_LOYALTY.value</name> + </jDitoRecordFieldMapping> </recordFieldMappings> </jDitoRecordContainer> </recordContainers> diff --git a/entity/Member_entity/entityfields/person_attr_loyalty/displayValueProcess.js b/entity/Member_entity/entityfields/person_attr_loyalty/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..b8857b8ffd70bbb62ff1dce0e3eff18072071bc1 --- /dev/null +++ b/entity/Member_entity/entityfields/person_attr_loyalty/displayValueProcess.js @@ -0,0 +1,5 @@ +import("system.vars"); +import("system.translate"); +import("system.result"); + +result.string(translate.text(vars.get("$this.value"))); diff --git a/entity/Member_entity/recordcontainers/db/recordfieldmappings/person_attr_loyalty.value/expression.js b/entity/Member_entity/recordcontainers/db/recordfieldmappings/person_attr_loyalty.value/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..16ce5832a5e2bbd32e7488db9bf20bb5611f8211 --- /dev/null +++ b/entity/Member_entity/recordcontainers/db/recordfieldmappings/person_attr_loyalty.value/expression.js @@ -0,0 +1,12 @@ +import("Attribute_lib"); +import("AttributeRegistry_basic"); +import("Sql_lib"); +import("system.result"); + +var attrSql = newSelect("COMBOVAL.ATTRIBUTE_NAME") + .from("AB_ATTRIBUTERELATION") + .join("AB_ATTRIBUTE", "AB_ATTRIBUTE_ID = AB_ATTRIBUTE.AB_ATTRIBUTEID") + .leftJoin("AB_ATTRIBUTE COMBOVAL", AttributeTypes.COMBO.databaseField + " = COMBOVAL.AB_ATTRIBUTEID") + .where("AB_ATTRIBUTERELATION.OBJECT_ROWID = OBJECTMEMBER.CONTACT_ID") + .and("AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID", $AttributeRegistry.loyalty()); +result.string("(" + attrSql.toString() + ")"); diff --git a/entity/Member_entity/recordcontainers/jdito/contentProcess.js b/entity/Member_entity/recordcontainers/jdito/contentProcess.js index 85d651ee76c4f9f5d1898f4a39d2c48644226946..ae5e30a855fc0a3b811afcfadf5ada107c88e4c5 100644 --- a/entity/Member_entity/recordcontainers/jdito/contentProcess.js +++ b/entity/Member_entity/recordcontainers/jdito/contentProcess.js @@ -1,3 +1,4 @@ +import("AttributeRegistry_basic"); import("Util_lib"); import("system.translate"); import("system.result"); @@ -17,7 +18,7 @@ var memberLoadingConfig = entities.createConfigForLoadingRows() "MEMBERROLE", "MEMBERROLE.displayValue", "OBJECT_ROWID", "OBJECT_TYPE", "OBJECTMEMBERID", "ORG_ORGID", "ORGANISATION_NAME", "PERSON_FIRSTNAME", "PERSON_FULL_NAME", "PERSON_LASTNAME", "PERSON_PERSID", "PERSON_SALUTATION", "PERSON_TITLE", "POSITION", "TARGETCONTEXT", - "recordType", "MST_MEMBERROLE"]); + "recordType", "MST_MEMBERROLE", "PERSON_ATTR_LOYALTY"]); if (idValues) { @@ -56,96 +57,9 @@ memberRows = memberRows.map(function(row) row["POSITION"], row["TARGETCONTEXT"], row["recordType"], - row["MST_MEMBERROLE"] + row["MST_MEMBERROLE"], + row["PERSON_ATTR_LOYALTY"] ]; }); -if (Utils.isNullOrEmpty(idValues) || memberRows.length === 0) -{ - if (vars.get("$param.ObjectType_param") == "Salesproject" && vars.get("$param.ObjectRowId_param") != null) - { - var orgContactId = newSelect("SALESPROJECT.CONTACT_ID") - .from("SALESPROJECT") - .where("SALESPROJECT.SALESPROJECTID", "$param.ObjectRowId_param") - .cell(); - - var districtLoadingConfig = entities.createConfigForLoadingRows() - .entity("DistrictResponsible_entity") - .provider("OrganisationResponsibles") - .addParameter("OrgUid_param", orgContactId) - .fields(["#UID","DISTRICTRESPONSIBLEID", "DISTRICT_ID", "EMPLOYEE_CONTACT_ID", - "EMPLOYEE_CONTACT_ID.displayValue", "USER_EDIT", "USER_NEW", - "departmentAttributeName", "DATE_EDIT", "DATE_NEW"]); - - var districtRows = entities.getRows(districtLoadingConfig); - - districtRows = districtRows.map(function(row) - { - return [ - row["#UID"], - row["DISTRICTRESPONSIBLEID"], - row["DISTRICT_ID"], - row["EMPLOYEE_CONTACT_ID"], - row["EMPLOYEE_CONTACT_ID.displayValue"], - row["USER_EDIT"], - row["USER_NEW"], - row["departmentAttributeName"], - row["DATE_EDIT"], - row["DATE_NEW"] - ]; - }); - } - - var responsibleUids = []; - - districtRows.forEach(function(row){ - responsibleUids.push(row[3]); - }); - - var loadingConfPers = entities.createConfigForLoadingRows() - .entity("Person_entity") - .uids(responsibleUids) - .fields(["ORGANISATION_ID", "ORGANISATION_NAME", "CONTACTROLE", "POSITION", - "FIRSTNAME", "LASTNAME", "SALUTATION", "TITLE"]); - - var persRows = entities.getRows(loadingConfPers); - - persRows = persRows.map(function(row){ - return [row["SALUTATION"], row["TITLE"], row["FIRSTNAME"], row["LASTNAME"], - row["ORGANISATION_NAME"], row["ORGANISATION_ID"], row["CONTACTROLE"], - row["POSITION"], row["PERSONID"]]; - }); - - - districtRows.forEach(function(row, counter){ - - memberRows.push( - [row[0], - null, - row[3], - row[4], - persRows[counter][6], - row[7], - "VAADIN:GLOBE", - "TEXT:" + row[4].substring(row[4].indexOf(" ", 0)+1, row[4].length), - "70cbad1b-eac6-4369-ba50-4946e0fbcb3a", - translate.text("District Responsible"), - vars.get("$param.ObjectRowId_param"), - vars.get("$param.ObjectType_param"), - persRows[counter][5], - persRows[counter][4], - persRows[counter][2], - row[4], - persRows[counter][3], - persRows[counter][8], - persRows[counter][0], - persRows[counter][1], - persRows[counter][7], - null, - "DistrictResponsible", - "" - ]); - }); -} - -result.object(memberRows); \ No newline at end of file +result.object(memberRows); diff --git a/entity/ModuleTree_entity/ModuleTree_entity.aod b/entity/ModuleTree_entity/ModuleTree_entity.aod index f799c2ef9b653646252b369d8a81e6996a4471a9..c380d83ddbdc22a178ddbe7f1bbcaa147e1e0ece 100644 --- a/entity/ModuleTree_entity/ModuleTree_entity.aod +++ b/entity/ModuleTree_entity/ModuleTree_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>ModuleTree_entity</name> <title>History</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -26,26 +26,6 @@ <targetContextField>TYPE</targetContextField> <targetIdField>ROW_ID</targetIdField> <recordContainer>jdito</recordContainer> - <dependencies> - <entityDependency> - <name>7da88ffb-4292-4fe2-88e2-dda2dc4aa625</name> - <entityName>Task_entity</entityName> - <fieldName>ModuleTrees</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>70e2ea81-1e08-47a6-ac89-3164bdbd9e02</name> - <entityName>Activity_entity</entityName> - <fieldName>ModuleTrees</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>3132e321-3b6a-4828-b600-01897ae83646</name> - <entityName>SupportTicket_entity</entityName> - <fieldName>ModuleTrees</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ContextName_param</name> diff --git a/entity/Notification_entity/Notification_entity.aod b/entity/Notification_entity/Notification_entity.aod index a6d76f43b45ddca29ebe511c0aaba259817c1e1e..2374ea30f1a06418f85eb7fdb62ae2212cc8eb20 100644 --- a/entity/Notification_entity/Notification_entity.aod +++ b/entity/Notification_entity/Notification_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Notification_entity</name> <title>Notifications</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -48,6 +48,7 @@ <entityField> <name>DESCRIPTION</name> <title>Description</title> + <contentType>HTML</contentType> </entityField> <entityField> <name>FORCEDPRIORITY</name> @@ -98,7 +99,7 @@ <title>Archive</title> <description></description> <onActionProcess>%aditoprj%/entity/Notification_entity/entityfields/setnotificationstate/children/archive/onActionProcess.js</onActionProcess> - <isSelectionAction v="true" /> + <selectionType>MULTI</selectionType> <iconId>VAADIN:ARCHIVE</iconId> <tooltip></tooltip> <tooltipProcess>%aditoprj%/entity/Notification_entity/entityfields/setnotificationstate/children/archive/tooltipProcess.js</tooltipProcess> @@ -108,7 +109,7 @@ <title>set Read</title> <description></description> <onActionProcess>%aditoprj%/entity/Notification_entity/entityfields/setnotificationstate/children/setread/onActionProcess.js</onActionProcess> - <isSelectionAction v="true" /> + <selectionType>MULTI</selectionType> <iconId>VAADIN:OPEN_BOOK</iconId> <tooltip></tooltip> <tooltipProcess>%aditoprj%/entity/Notification_entity/entityfields/setnotificationstate/children/setread/tooltipProcess.js</tooltipProcess> @@ -118,7 +119,7 @@ <title>set New</title> <description></description> <onActionProcess>%aditoprj%/entity/Notification_entity/entityfields/setnotificationstate/children/setnew/onActionProcess.js</onActionProcess> - <isSelectionAction v="true" /> + <selectionType>MULTI</selectionType> <iconId>VAADIN:BOOK</iconId> <tooltip></tooltip> <tooltipProcess>%aditoprj%/entity/Notification_entity/entityfields/setnotificationstate/children/setnew/tooltipProcess.js</tooltipProcess> diff --git a/entity/ObjectProxy_entity/ObjectProxy_entity.aod b/entity/ObjectProxy_entity/ObjectProxy_entity.aod index 71ef1a617e9be009da686d4da8c5d16f587760b3..1e633cfb90637ff024ff9356586b2a7a3a9cda52 100644 --- a/entity/ObjectProxy_entity/ObjectProxy_entity.aod +++ b/entity/ObjectProxy_entity/ObjectProxy_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>ObjectProxy_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/ObjectProxy_entity/documentation.adoc</documentation> @@ -19,32 +19,6 @@ <name>FilteredObjects</name> <targetConsumerProcess>%aditoprj%/entity/ObjectProxy_entity/entityfields/filteredobjects/targetConsumerProcess.js</targetConsumerProcess> <documentation>%aditoprj%/entity/ObjectProxy_entity/entityfields/filteredobjects/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>92e21c48-19aa-402c-b75f-96cad75d8a14</name> - <entityName>AttributeRelation_entity</entityName> - <fieldName>Objects</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>2aab6429-6fd4-4745-b3ad-8c31862feb0d</name> - <entityName>WorkflowTask_entity</entityName> - <fieldName>LinkedObject</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>ccc805b6-14ea-457c-956d-8c025e178936</name> - <entityName>Observation_entity</entityName> - <fieldName>ObjectProxyConsumer</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>9d75842d-0f91-4ddf-bd94-d8f092f17224</name> - <entityName>KnowledgeLink_entity</entityName> - <fieldName>Objects</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityParameter> <name>Filter_param</name> @@ -182,8 +156,6 @@ <name>DocumentTemplates</name> <dependency> <name>dependency</name> - <entityName>DocumentTemplate_entity</entityName> - <fieldName>#PROVIDER</fieldName> </dependency> </entityConsumer> <entityConsumer> diff --git a/entity/ObjectRelationType_entity/ObjectRelationType_entity.aod b/entity/ObjectRelationType_entity/ObjectRelationType_entity.aod index 4da3974ee653f99c331db00e1c7f75c28d293d0c..09c648f8e1aec8811f74c4f8b570bfbfbcd47d17 100644 --- a/entity/ObjectRelationType_entity/ObjectRelationType_entity.aod +++ b/entity/ObjectRelationType_entity/ObjectRelationType_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>ObjectRelationType_entity</name> <title>Relation Type</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -30,14 +30,6 @@ </entityParameter> <entityProvider> <name>ObjectRelationTypes</name> - <dependencies> - <entityDependency> - <name>81f4567a-fc89-49fc-be86-77600cb66305</name> - <entityName>ObjectTree_entity</entityName> - <fieldName>ObjectRelationTypes</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>OnlyFirstSide_param</name> @@ -66,7 +58,7 @@ </entityField> <entityField> <name>DEST_OBJECT_TYPE</name> - <title>Context 2</title> + <title>Object type 2</title> <consumer>Contexts</consumer> <mandatoryProcess>%aditoprj%/entity/ObjectRelationType_entity/entityfields/dest_object_type/mandatoryProcess.js</mandatoryProcess> <stateProcess>%aditoprj%/entity/ObjectRelationType_entity/entityfields/dest_object_type/stateProcess.js</stateProcess> @@ -74,7 +66,7 @@ </entityField> <entityField> <name>SOURCE_OBJECT_TYPE</name> - <title>Context 1</title> + <title>Object type 1</title> <consumer>Contexts</consumer> <mandatory v="true" /> <stateProcess>%aditoprj%/entity/ObjectRelationType_entity/entityfields/source_object_type/stateProcess.js</stateProcess> @@ -104,8 +96,19 @@ <dependency> <name>dependency</name> <entityName>Context_entity</entityName> - <fieldName>Context</fieldName> + <fieldName>Exclusive</fieldName> </dependency> + <children> + <entityParameter> + <name>Blacklist_param</name> + <valueProcess>%aditoprj%/entity/ObjectRelationType_entity/entityfields/contexts/children/blacklist_param/valueProcess.js</valueProcess> + </entityParameter> + <entityParameter> + <name>InvertBlacklist_param</name> + <valueProcess>%aditoprj%/entity/ObjectRelationType_entity/entityfields/contexts/children/invertblacklist_param/valueProcess.js</valueProcess> + <documentation>%aditoprj%/entity/ObjectRelationType_entity/entityfields/contexts/children/invertblacklist_param/documentation.adoc</documentation> + </entityParameter> + </children> </entityConsumer> <entityField> <name>Type2Enabled_proxy</name> @@ -134,7 +137,7 @@ <title>Delete all usage</title> <onActionProcess>%aditoprj%/entity/ObjectRelationType_entity/entityfields/removeactiongroup/children/removeusage/onActionProcess.js</onActionProcess> <isObjectAction v="false" /> - <isSelectionAction v="true" /> + <selectionType>MULTI</selectionType> <iconId>NEON:TRASH</iconId> </entityActionField> </children> diff --git a/entity/ObjectRelationType_entity/entityfields/contexts/children/blacklist_param/valueProcess.js b/entity/ObjectRelationType_entity/entityfields/contexts/children/blacklist_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..a4c5350f954c8e1c2dc5a468fe8dcef540c2bd5c --- /dev/null +++ b/entity/ObjectRelationType_entity/entityfields/contexts/children/blacklist_param/valueProcess.js @@ -0,0 +1,3 @@ +import("system.result"); + +result.string(JSON.stringify(["Organisation", "Person"])); \ No newline at end of file diff --git a/entity/ObjectRelationType_entity/entityfields/contexts/children/invertblacklist_param/valueProcess.js b/entity/ObjectRelationType_entity/entityfields/contexts/children/invertblacklist_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..e5bfa3bbe7f58d2ffaf401248014a6d1a560d2de --- /dev/null +++ b/entity/ObjectRelationType_entity/entityfields/contexts/children/invertblacklist_param/valueProcess.js @@ -0,0 +1,3 @@ +import("system.result"); + +result.string("true"); \ No newline at end of file diff --git a/entity/ObjectTree_entity/ObjectTree_entity.aod b/entity/ObjectTree_entity/ObjectTree_entity.aod index f3a46c5839d338501ef343806fcf249244a0490a..0da39a07ebb8d5c54df0f7d2ee79529a4714e960 100644 --- a/entity/ObjectTree_entity/ObjectTree_entity.aod +++ b/entity/ObjectTree_entity/ObjectTree_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>ObjectTree_entity</name> <title>Object relation</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -18,20 +18,7 @@ <name>TreeProvider</name> <targetContextField>TARGET_CONTEXT</targetContextField> <targetIdField>TARGET_ID</targetIdField> - <dependencies> - <entityDependency> - <name>f4c0605f-3ccb-4ff1-b460-7268e8553857</name> - <entityName>Organisation_entity</entityName> - <fieldName>ObjectTrees</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>423acf79-e2c5-46e4-9fb5-7b1a7078d4f4</name> - <entityName>Person_entity</entityName> - <fieldName>ObjectTrees</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> + <documentation>%aditoprj%/entity/ObjectTree_entity/entityfields/treeprovider/documentation.adoc</documentation> <children> <entityParameter> <name>Uid_param</name> diff --git a/entity/ObjectTree_entity/entityfields/target_context/valueProcess.js b/entity/ObjectTree_entity/entityfields/target_context/valueProcess.js index cd4083fad2fbb15ab6da846ce70808957582da6a..3e02447bb646e02e5628d0c43c8846e53dfc1bf3 100644 --- a/entity/ObjectTree_entity/entityfields/target_context/valueProcess.js +++ b/entity/ObjectTree_entity/entityfields/target_context/valueProcess.js @@ -6,8 +6,5 @@ import("ObjectRelation_lib"); if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) { var relationType = ObjectRelationUtils.getRelationType(vars.get("$field.OBJECTRELATIONTYPEID")); - if(relationType[3] == "reverse") - result.string(ObjectRelationUtils.getRelationType(vars.get("$field.OBJECTRELATIONTYPEID"))[5]); - else - result.string(ObjectRelationUtils.getRelationType(vars.get("$field.OBJECTRELATIONTYPEID"))[6]); + result.string(ObjectRelationUtils.getRelationType(vars.get("$field.OBJECTRELATIONTYPEID"))[6]); } \ No newline at end of file diff --git a/entity/ObjectTree_entity/entityfields/treeprovider/documentation.adoc b/entity/ObjectTree_entity/entityfields/treeprovider/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..3129116b5e8fc4593aba491b1c1f30feee06fbba --- /dev/null +++ b/entity/ObjectTree_entity/entityfields/treeprovider/documentation.adoc @@ -0,0 +1,3 @@ +Provides the data, which is needed for building the tree, +which represents the relation between persons and organisations +(e.g.: person A "supports" person B and person B is "supported by" person A). \ No newline at end of file diff --git a/entity/Object_entity/Object_entity.aod b/entity/Object_entity/Object_entity.aod index 860935ef74c48b42e5dc6379fd4c7b76d3c8fac1..6aba8ccb6be6887bd1cc524a12613d8e02f39848 100644 --- a/entity/Object_entity/Object_entity.aod +++ b/entity/Object_entity/Object_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Object_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/Object_entity/documentation.adoc</documentation> @@ -27,44 +27,6 @@ <targetConsumerProcess>%aditoprj%/entity/Object_entity/entityfields/allobjects/targetConsumerProcess.js</targetConsumerProcess> <documentation>%aditoprj%/entity/Object_entity/entityfields/allobjects/documentation.adoc</documentation> <recordContainer>jdito</recordContainer> - <dependencies> - <entityDependency> - <name>445b79b3-e826-40d1-b6c2-46d62daf0818</name> - <entityName>TaskLink_entity</entityName> - <fieldName>Objects</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>0a2aa5c9-1ba2-41bd-b5f4-3a761efbcf2e</name> - <entityName>ActivityLink_entity</entityName> - <fieldName>Objects</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>564d43e8-a7d6-44a5-82a0-3443129d568c</name> - <entityName>AppointmentLink_entity</entityName> - <fieldName>Objects</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>40bf3a74-2335-4925-9490-1404fa7c81f6</name> - <entityName>Forecast_entity</entityName> - <fieldName>Objects</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>8834387f-acf8-4d9f-80ec-45425622a3dd</name> - <entityName>Competition_entity</entityName> - <fieldName>Objects</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>349f13ea-8b4c-4cc0-987c-ae1717855bc1</name> - <entityName>Member_entity</entityName> - <fieldName>Objects</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ObjectType_param</name> @@ -185,26 +147,6 @@ <entityProvider> <name>FilteredObjects</name> <targetConsumerProcess>%aditoprj%/entity/Object_entity/entityfields/filteredobjects/targetConsumerProcess.js</targetConsumerProcess> - <dependencies> - <entityDependency> - <name>e644a709-cc8f-425e-bef2-9c51eea9bbe9</name> - <entityName>ObjectTree_entity</entityName> - <fieldName>Objects</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>e93b8c8f-2575-4669-9e45-48d8382444ab</name> - <entityName>Offer_entity</entityName> - <fieldName>Objects</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>6a7a34e0-22ae-4bd7-b762-84a332a0a937</name> - <entityName>Order_entity</entityName> - <fieldName>Objects</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ExcludedObjectIds_param</name> diff --git a/entity/ObservationMultiple_entity/ObservationMultiple_entity.aod b/entity/ObservationMultiple_entity/ObservationMultiple_entity.aod index 2f9186f4f69144ae457fa6dcadbc871057f6643f..e60da1f9ce8ba8443d124ff9fc15ad0f3e6d1712 100644 --- a/entity/ObservationMultiple_entity/ObservationMultiple_entity.aod +++ b/entity/ObservationMultiple_entity/ObservationMultiple_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>ObservationMultiple_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/ObservationMultiple_entity/documentation.adoc</documentation> @@ -109,7 +109,6 @@ <children> <entityParameter> <name>Blacklist_param</name> - <valueProcess>%aditoprj%/entity/ObservationMultiple_entity/entityfields/contexts/children/blacklist_param/valueProcess.js</valueProcess> </entityParameter> <entityParameter> <name>InvertBlacklist_param</name> diff --git a/entity/ObservationMultiple_entity/entityfields/contexts/children/blacklist_param/valueProcess.js b/entity/ObservationMultiple_entity/entityfields/contexts/children/blacklist_param/valueProcess.js deleted file mode 100644 index c40747f7e7256dd47edf175310a55a6b7293c3a3..0000000000000000000000000000000000000000 --- a/entity/ObservationMultiple_entity/entityfields/contexts/children/blacklist_param/valueProcess.js +++ /dev/null @@ -1,5 +0,0 @@ -import("Observation_lib"); -import("system.vars"); -import("system.result"); - -result.object(Observation.getContextFields(vars.get("$field.OBSERVATION_ID"))); \ No newline at end of file diff --git a/entity/Observation_entity/Observation_entity.aod b/entity/Observation_entity/Observation_entity.aod index 56b10c9389cc18e4ed0b4746638d4101a50874d1..dd75d356f6dbf53cb772829dee427a5bd1a5caa2 100644 --- a/entity/Observation_entity/Observation_entity.aod +++ b/entity/Observation_entity/Observation_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Observation_entity</name> <title>Observation</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -43,6 +43,7 @@ <consumer>Users</consumer> <groupable v="true" /> <mandatory v="true" /> + <state>DISABLED</state> <valueProcess>%aditoprj%/entity/Observation_entity/entityfields/observer/valueProcess.js</valueProcess> <displayValueProcess>%aditoprj%/entity/Observation_entity/entityfields/observer/displayValueProcess.js</displayValueProcess> </entityField> @@ -205,7 +206,7 @@ <name>addDependency</name> <title>Add Dependency</title> <onActionProcess>%aditoprj%/entity/Observation_entity/entityfields/filteractions/children/adddependency/onActionProcess.js</onActionProcess> - <isSelectionAction v="true" /> + <selectionType>MULTI</selectionType> <stateProcess>%aditoprj%/entity/Observation_entity/entityfields/filteractions/children/adddependency/stateProcess.js</stateProcess> </entityActionField> </children> diff --git a/entity/Observation_entity/documentation.adoc b/entity/Observation_entity/documentation.adoc index 5968fb30c133a2a4193a1de4fa8c0e2655281b7f..4337e3eb2962ea51bf3afed9e58f06e13644137d 100644 --- a/entity/Observation_entity/documentation.adoc +++ b/entity/Observation_entity/documentation.adoc @@ -19,4 +19,3 @@ inserted, updated or deleted. * Enable the custom field observation.isEnabled in the _____PREFERENCES_PROJECT * Create the Observation Context and add the Entity, the Views (ObservationEdit_view, ObservationFilter_view, ObservationPreview_view), the Icon (VAADIN:EYE) and the Tile "Observation" to it - diff --git a/entity/Observation_entity/entityfields/includedependencies/valueProcess.js b/entity/Observation_entity/entityfields/includedependencies/valueProcess.js index 17d96815f787ef6b77dd7e341456d3c52a69f46a..13e327167d0c0540abfe928c87bdd43d4f9298b9 100644 --- a/entity/Observation_entity/entityfields/includedependencies/valueProcess.js +++ b/entity/Observation_entity/entityfields/includedependencies/valueProcess.js @@ -4,7 +4,7 @@ import("system.result"); let isIncluded; -if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) { if (vars.get("$field.OBSERVATION_ID")) { diff --git a/entity/Offer_entity/Offer_entity.aod b/entity/Offer_entity/Offer_entity.aod index 2e4d0172c3a4491f7491084b6f429aa92ebedfd3..339c61499b8787d822be7bac1b6c15013eb493a0 100644 --- a/entity/Offer_entity/Offer_entity.aod +++ b/entity/Offer_entity/Offer_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Offer_entity</name> <title>Offer</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -20,20 +20,6 @@ <entityFields> <entityProvider> <name>#PROVIDER</name> - <dependencies> - <entityDependency> - <name>f909c251-16c1-49e2-9b43-6d5f834137c6</name> - <entityName>Object_entity</entityName> - <fieldName>Offers</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>b34efdc3-f405-4fe6-b9c6-ed79f8f10155</name> - <entityName>ObjectProxy_entity</entityName> - <fieldName>Offers</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>CURRENCY</name> @@ -75,12 +61,12 @@ <entityField> <name>PROBABILITY</name> <title>Probability</title> + <consumer>KeywordProbabilityOffer</consumer> <contentType>NUMBER</contentType> <maxValue v="100" /> <minValue v="0" /> - <outputFormat>0.00'%'</outputFormat> + <outputFormat>0'%'</outputFormat> <groupable v="true" /> - <dropDownProcess>%aditoprj%/entity/Offer_entity/entityfields/probability/dropDownProcess.js</dropDownProcess> <stateProcess>%aditoprj%/entity/Offer_entity/entityfields/probability/stateProcess.js</stateProcess> <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/probability/valueProcess.js</valueProcess> </entityField> @@ -251,6 +237,10 @@ <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/anycontacts/children/contactids_param/valueProcess.js</valueProcess> <expose v="true" /> </entityParameter> + <entityParameter> + <name>IgnoreContactStates_param</name> + <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/anycontacts/children/ignorecontactstates_param/valueProcess.js</valueProcess> + </entityParameter> </children> </entityConsumer> <entityConsumer> @@ -342,6 +332,10 @@ <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/keywordofferstates/children/containername_param/valueProcess.js</valueProcess> <expose v="false" /> </entityParameter> + <entityParameter> + <name>WhitelistIds_param</name> + <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/keywordofferstates/children/whitelistids_param/valueProcess.js</valueProcess> + </entityParameter> </children> </entityConsumer> <entityConsumer> @@ -376,26 +370,6 @@ </entityConsumer> <entityProvider> <name>ContactOffers</name> - <dependencies> - <entityDependency> - <name>5c9720b5-1288-4a30-88fd-6dcff6359083</name> - <entityName>Person_entity</entityName> - <fieldName>Offers</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>b308795f-3c81-4e60-99ca-3b5f8e82f62a</name> - <entityName>Organisation_entity</entityName> - <fieldName>Offers</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>a74b02c4-bdb3-4ba8-9207-66a0af528b1b</name> - <entityName>Order_entity</entityName> - <fieldName>Offers</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ContactId_param</name> @@ -537,7 +511,6 @@ </entityConsumer> <entityConsumer> <name>Tasks</name> - <stateProcess>%aditoprj%/entity/Offer_entity/entityfields/tasks/stateProcess.js</stateProcess> <dependency> <name>dependency</name> <entityName>Task_entity</entityName> @@ -712,14 +685,6 @@ <entityProvider> <name>Links</name> <recordContainer>db</recordContainer> - <dependencies> - <entityDependency> - <name>88a166e6-ccd0-4d51-b554-e3327f66d834</name> - <entityName>Salesproject_entity</entityName> - <fieldName>Offers</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>OfferDeliveryTerm_param</name> @@ -1043,6 +1008,56 @@ </entityParameter> </children> </entityConsumer> + <entityConsumer> + <name>Orders</name> + <dependency> + <name>dependency</name> + <entityName>Order_entity</entityName> + <fieldName>#PROVIDER</fieldName> + </dependency> + <children> + <entityParameter> + <name>OfferId_param</name> + <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/orders/children/offerid_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityParameter> + <name>ContactIds_param</name> + <expose v="true" /> + </entityParameter> + <entityParameter> + <name>Info_param</name> + <expose v="true" /> + </entityParameter> + <entityParameter> + <name>TaskId_param</name> + <expose v="true" /> + </entityParameter> + <entityConsumer> + <name>KeywordProbabilityOffer</name> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/keywordprobabilityoffer/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityField> + <name>APPROVAL</name> + </entityField> + <entityField> + <name>ACTIONUSER</name> + </entityField> + <entityParameter> + <name>Approval_param</name> + <expose v="true" /> + </entityParameter> <entityActionGroup> <name>observeActionGroup</name> <children> @@ -1107,7 +1122,7 @@ <name>startWorkflow</name> <title>Start workflow</title> <onActionProcess>%aditoprj%/entity/Offer_entity/entityfields/startworkflow/onActionProcess.js</onActionProcess> - <isSelectionAction v="true" /> + <selectionType>MULTI</selectionType> <iconId>VAADIN:PLAY</iconId> <stateProcess>%aditoprj%/entity/Offer_entity/entityfields/startworkflow/stateProcess.js</stateProcess> </entityActionField> @@ -1125,6 +1140,23 @@ </entityActionField> </children> </entityActionGroup> + <entityActionField> + <name>checkOffer</name> + <title>check offer</title> + <onActionProcess>%aditoprj%/entity/Offer_entity/entityfields/checkoffer/onActionProcess.js</onActionProcess> + <iconId>VAADIN:CLIPBOARD_CHECK</iconId> + <stateProcess>%aditoprj%/entity/Offer_entity/entityfields/checkoffer/stateProcess.js</stateProcess> + <titleProcess>%aditoprj%/entity/Offer_entity/entityfields/checkoffer/titleProcess.js</titleProcess> + </entityActionField> + <entityActionField> + <name>approveOffer</name> + <title>approve/deny</title> + <onActionProcess>%aditoprj%/entity/Offer_entity/entityfields/approveoffer/onActionProcess.js</onActionProcess> + <iconId>NEON:MQC</iconId> + <usePermissions v="true" /> + <stateProcess>%aditoprj%/entity/Offer_entity/entityfields/approveoffer/stateProcess.js</stateProcess> + <titleProcess>%aditoprj%/entity/Offer_entity/entityfields/approveoffer/titleProcess.js</titleProcess> + </entityActionField> <entityActionField> <name>openAdminView</name> <title>Open admin view</title> @@ -1132,32 +1164,6 @@ <iconId>VAADIN:CURLY_BRACKETS</iconId> <stateProcess>%aditoprj%/entity/Offer_entity/entityfields/openadminview/stateProcess.js</stateProcess> </entityActionField> - <entityConsumer> - <name>Orders</name> - <dependency> - <name>dependency</name> - <entityName>Order_entity</entityName> - <fieldName>#PROVIDER</fieldName> - </dependency> - <children> - <entityParameter> - <name>OfferId_param</name> - <valueProcess>%aditoprj%/entity/Offer_entity/entityfields/orders/children/offerid_param/valueProcess.js</valueProcess> - </entityParameter> - </children> - </entityConsumer> - <entityParameter> - <name>ContactIds_param</name> - <expose v="true" /> - </entityParameter> - <entityParameter> - <name>Info_param</name> - <expose v="true" /> - </entityParameter> - <entityParameter> - <name>TaskId_param</name> - <expose v="true" /> - </entityParameter> </entityFields> <recordContainers> <dbRecordContainer> @@ -1385,6 +1391,14 @@ <recordfield>OFFER.PROBABILITY</recordfield> <aggregateType>AVG</aggregateType> </aggregateFieldDbMapping> + <dbRecordFieldMapping> + <name>ACTIONUSER.value</name> + <recordfield>OFFER.ACTIONUSER</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>APPROVAL.value</name> + <recordfield>OFFER.APPROVAL</recordfield> + </dbRecordFieldMapping> </recordFieldMappings> <linkInformation> <linkInformation> diff --git a/entity/Offer_entity/contentDescriptionProcess.js b/entity/Offer_entity/contentDescriptionProcess.js index f1afab18db7ad38a661329de19f0554dac92285c..57c6fc7fc6df77618a3524295f67a7edef4b7236 100644 --- a/entity/Offer_entity/contentDescriptionProcess.js +++ b/entity/Offer_entity/contentDescriptionProcess.js @@ -6,7 +6,7 @@ import("system.vars"); import("system.result"); var res = [translate.text("Total gross") + ": " + vars.get("$field.TotalGross.displayValue"), - translate.text("Probability") + ": " + vars.get("$field.PROBABILITY.displayValue"), + translate.text("Probability") + ": " + vars.get("$field.PROBABILITY") + "%", translate.text("Creation date") + ": " + datetime.toDate(vars.get("$field.DATE_NEW"), translate.text("dd.MM.yyyy"))]; result.string(res.join(" | ")); \ No newline at end of file diff --git a/entity/Offer_entity/entityfields/anycontacts/children/contactids_param/valueProcess.js b/entity/Offer_entity/entityfields/anycontacts/children/contactids_param/valueProcess.js index 64ebdd402a070cab2fb3c837720f16423cda76ec..b705ec11cfccaaef8f29c1143c3980d86f028ae2 100644 --- a/entity/Offer_entity/entityfields/anycontacts/children/contactids_param/valueProcess.js +++ b/entity/Offer_entity/entityfields/anycontacts/children/contactids_param/valueProcess.js @@ -1,10 +1,21 @@ import("system.result"); import("system.vars"); +import("Sql_lib"); -var contactIds = ""; -if (vars.exists("$param.ContactIds_param") && vars.get("$param.ContactIds_param")) { +var contactIds = null; +if(vars.exists("$param.ContactIds_param") && vars.get("$param.ContactIds_param")) +{ contactIds = vars.get("$param.ContactIds_param"); } -if (contactIds) - result.string(contactIds); \ No newline at end of file +if(!contactIds && vars.get("$field.CONTACT_ORG_ID")) +{ + var sql = newSelect("CONTACTID").from("CONTACT") + .where("CONTACT.ORGANISATION_ID", vars.get("$field.CONTACT_ORG_ID")); + contactIds = JSON.stringify(sql.arrayColumn()); +} + +if(contactIds) +{ + result.string(contactIds); +} diff --git a/entity/Offer_entity/entityfields/anycontacts/children/ignorecontactstates_param/valueProcess.js b/entity/Offer_entity/entityfields/anycontacts/children/ignorecontactstates_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..c6c72b9e8a3069a5a22fbd37d3d56c131409e561 --- /dev/null +++ b/entity/Offer_entity/entityfields/anycontacts/children/ignorecontactstates_param/valueProcess.js @@ -0,0 +1,7 @@ +import("system.result"); +import("KeywordRegistry_basic"); + +result.string(JSON.stringify([ + $KeywordRegistry.contactStatus$inactive(), + $KeywordRegistry.contactStatus$markToDelete() +])); diff --git a/entity/Offer_entity/entityfields/approveoffer/onActionProcess.js b/entity/Offer_entity/entityfields/approveoffer/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..4c386d3779ff76da939bd8e54d01b4d3f1c662a8 --- /dev/null +++ b/entity/Offer_entity/entityfields/approveoffer/onActionProcess.js @@ -0,0 +1,13 @@ +import("Employee_lib"); +import("Workflow_lib"); +import("system.neon"); +import("Sql_lib"); +import("Context_lib"); +import("system.vars"); + +var offerId = vars.get("$field.OFFERID"); +var taskId = WorkflowUtils.getTaskId(offerId, ContextUtils.getCurrentContextId()); + +newWhere("OFFER.OFFERID", offerId).updateFields({"ACTIONUSER" : EmployeeUtils.getCurrentContactId()}); + +neon.openContext("WorkflowTask", "WorkflowTaskForm_view", [taskId], neon.OPERATINGSTATE_EDIT, null); \ No newline at end of file diff --git a/entity/Offer_entity/entityfields/approveoffer/stateProcess.js b/entity/Offer_entity/entityfields/approveoffer/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..d44aa31f28dd690404411cad54970e6be7b82690 --- /dev/null +++ b/entity/Offer_entity/entityfields/approveoffer/stateProcess.js @@ -0,0 +1,20 @@ +import("system.tools"); +import("Workflow_lib"); +import("system.neon"); +import("system.result"); +import("Context_lib"); +import("system.vars"); + +var offerId = vars.get("$field.OFFERID"); +var taskId = WorkflowUtils.getTaskId(offerId, ContextUtils.getCurrentContextId()); +var roleIf = tools.currentUserHasAnyRole(["PROJECT_Inspector1", "PROJECT_Inspector2"]); + +if (vars.get("$field.APPROVAL") == 2){ + roleIf = tools.currentUserHasRole("PROJECT_Inspector2"); +} + +if (taskId != "" && roleIf) { + result.string(neon.COMPONENTSTATE_EDITABLE); +} else { + result.string(neon.COMPONENTSTATE_INVISIBLE); +} diff --git a/entity/Offer_entity/entityfields/approveoffer/titleProcess.js b/entity/Offer_entity/entityfields/approveoffer/titleProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..e74ec5edc13ae60f065a89b3262dad8ca1aa3b4b --- /dev/null +++ b/entity/Offer_entity/entityfields/approveoffer/titleProcess.js @@ -0,0 +1,7 @@ +import("system.translate"); +import("system.result"); +import("system.vars"); + +if (vars.get("$field.APPROVAL") == 2) { + result.string(translate.text("approve/deny (2nd approval)")); +} \ No newline at end of file diff --git a/entity/Offer_entity/entityfields/checkoffer/onActionProcess.js b/entity/Offer_entity/entityfields/checkoffer/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..65b29fcbc160c54bbcf4dd006a97d4ee2c6412a9 --- /dev/null +++ b/entity/Offer_entity/entityfields/checkoffer/onActionProcess.js @@ -0,0 +1,20 @@ +import("system.translate"); +import("system.question"); +import("system.neon"); +import("system.workflow"); +import("system.vars"); +import("Context_lib"); + +var variables = { + "targetContext": ContextUtils.getCurrentContextId(), + "targetId": vars.get("$field.OFFERID"), + "approvalCount": 0, + "userNew": vars.get("$field.USER_NEW"), + "net": vars.get("$field.NET") +}; + +workflow.startProcessByKey("approveOffer", variables); + +question.showMessage(translate.text("Approval started"), question.INFORMATION, ""); + +neon.refreshAll(); \ No newline at end of file diff --git a/entity/Offer_entity/entityfields/checkoffer/stateProcess.js b/entity/Offer_entity/entityfields/checkoffer/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..3c0c76db0955ffed4c5365720365158dbac3b25c --- /dev/null +++ b/entity/Offer_entity/entityfields/checkoffer/stateProcess.js @@ -0,0 +1,29 @@ +import("Sql_lib"); +import("KeywordRegistry_basic"); +import("Workflow_lib"); +import("Context_lib"); +import("system.neon"); +import("system.result"); +import("system.vars"); + +var offerId = vars.get("$field.OFFERID"); +var offerStatus = vars.get("$field.STATUS"); +var taskId = WorkflowUtils.getTaskId(offerId, ContextUtils.getCurrentContextId()); +var itemcount = newSelect("count(*)") + .from("OFFERITEM") + .whereIfSet("OFFERITEM.OFFER_ID", "$field.OFFERID") + .cell(true, "0"); + +if (taskId != "") +{ + result.string(neon.COMPONENTSTATE_INVISIBLE); +} +else if (offerStatus == $KeywordRegistry.offerStatus$sent() || offerStatus == $KeywordRegistry.offerStatus$approved() || itemcount == "0") +{ + result.string(neon.COMPONENTSTATE_DISABLED); +} +else +{ + result.string(neon.COMPONENTSTATE_EDITABLE); +} + diff --git a/entity/Offer_entity/entityfields/checkoffer/titleProcess.js b/entity/Offer_entity/entityfields/checkoffer/titleProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..8127f6169b0af366b43a3064fcb6fcf20dc671ed --- /dev/null +++ b/entity/Offer_entity/entityfields/checkoffer/titleProcess.js @@ -0,0 +1,8 @@ +import("system.translate"); +import("system.result"); +import("KeywordRegistry_basic"); +import("system.vars"); + +if (vars.get("$field.STATUS") == $KeywordRegistry.offerStatus$denied()) { + result.string(translate.text("check offer again")); +} \ No newline at end of file diff --git a/entity/Offer_entity/entityfields/contact_id/onValueChange.js b/entity/Offer_entity/entityfields/contact_id/onValueChange.js index f28ede59359d846143641e0e2046f576652d9b45..8d9524327c89d1782a5a2d5bedd6863272a1aee5 100644 --- a/entity/Offer_entity/entityfields/contact_id/onValueChange.js +++ b/entity/Offer_entity/entityfields/contact_id/onValueChange.js @@ -32,7 +32,7 @@ if(contactId != "") var salutation = addrobj.getFormattedAddress(false, "{letter_salutation},"); if (salutation != "Err.,") { - neon.setFieldValue("field.LETTERSALUTATION", salutation); + neon.setFieldValue("$field.LETTERSALUTATION", salutation); } // set $field.CONTATCT_ORG_ID per contactId diff --git a/entity/Offer_entity/entityfields/contact_id/valueProcess.js b/entity/Offer_entity/entityfields/contact_id/valueProcess.js index c50907d05b5a89d6a44af670474fff35f2f6c74d..c0b04b66955d098cc77487c068ccbf00045c7b76 100644 --- a/entity/Offer_entity/entityfields/contact_id/valueProcess.js +++ b/entity/Offer_entity/entityfields/contact_id/valueProcess.js @@ -6,27 +6,31 @@ import("Sql_lib"); import("Context_lib"); if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) -var contactId = ""; -if ((!vars.exists("$param.ContactId_param") || !vars.get("$param.ContactId_param")) - && (vars.exists("$param.ObjectType_param") - && vars.get("$param.ObjectType_param") - && vars.exists("$param.ObjectRowId_param") - && vars.get("$param.ObjectRowId_param"))) { - contactId = ContextUtils.getContactId(vars.get("$param.ObjectType_param"), vars.get("$param.ObjectRowId_param")) -} else if (vars.exists("$param.ContactId_param") && vars.get("$param.ContactId_param")) { - contactId = vars.get("$param.ContactId_param"); -} - -if (contactId) -{ - var lang = newSelect("ISOLANGUAGE") - .from("CONTACT") - .where("CONTACT.CONTACTID", contactId) - .cell(); - - if(lang != "") - neon.setFieldValue("field.ISOLANGUAGE", lang); + var contactId = ""; + if ((!vars.exists("$param.ContactId_param") || !vars.get("$param.ContactId_param")) + && (vars.exists("$param.ObjectType_param") + && vars.get("$param.ObjectType_param") + && vars.exists("$param.ObjectRowId_param") + && vars.get("$param.ObjectRowId_param"))) + { + contactId = ContextUtils.getContactId(vars.get("$param.ObjectType_param"), vars.get("$param.ObjectRowId_param")); + } + else if (vars.exists("$param.ContactId_param") && vars.get("$param.ContactId_param")) + { + contactId = vars.get("$param.ContactId_param"); + } - result.string(contactId); -} \ No newline at end of file + if (contactId) + { + var lang = newSelect("ISOLANGUAGE") + .from("CONTACT") + .where("CONTACT.CONTACTID", contactId) + .cell(); + + if(lang != "") + neon.setFieldValue("field.ISOLANGUAGE", lang); + + result.string(contactId); + } +} diff --git a/entity/Offer_entity/entityfields/currency/stateProcess.js b/entity/Offer_entity/entityfields/currency/stateProcess.js index 3625a84172ccbedf97a4a6aa2c74ff6f9fe83679..20a5979a7502c8f535158aa31c0f850bf2405526 100644 --- a/entity/Offer_entity/entityfields/currency/stateProcess.js +++ b/entity/Offer_entity/entityfields/currency/stateProcess.js @@ -2,5 +2,18 @@ import("system.vars"); import("system.result"); import("system.neon"); import("Offer_lib"); +import("system.entities"); -result.string(OfferUtils.isEditable(vars.get("$field.STATUS")) ? neon.COMPONENTSTATE_AUTO : neon.COMPONENTSTATE_DISABLED); \ No newline at end of file +var loadConfig = entities.createConfigForLoadingRows() + .entity("OfferItem_entity") + .addParameter("OfferId_param", vars.get("$field.OFFERID")); +var offerItemCount = entities.getRowCount(loadConfig); + +if(offerItemCount > 0) +{ + result.string(neon.COMPONENTSTATE_DISABLED); +} +else +{ + result.string(OfferUtils.isEditable(vars.get("$field.STATUS")) ? neon.COMPONENTSTATE_AUTO : neon.COMPONENTSTATE_DISABLED); +} diff --git a/entity/Offer_entity/entityfields/keywordofferstates/children/whitelistids_param/valueProcess.js b/entity/Offer_entity/entityfields/keywordofferstates/children/whitelistids_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..31c9a715e41135a13d978901f32297c3c8db8f5c --- /dev/null +++ b/entity/Offer_entity/entityfields/keywordofferstates/children/whitelistids_param/valueProcess.js @@ -0,0 +1,12 @@ +import("system.vars"); +import("system.result"); +import("KeywordRegistry_basic"); + +if(vars.get("$field.STATUS") == $KeywordRegistry.offerStatus$sent()) +{ + result.string(JSON.stringify([ + $KeywordRegistry.offerStatus$sent(), + $KeywordRegistry.offerStatus$won(), + $KeywordRegistry.offerStatus$lost() + ])); +} diff --git a/entity/Offer_entity/entityfields/keywordprobabilityoffer/children/containername_param/valueProcess.js b/entity/Offer_entity/entityfields/keywordprobabilityoffer/children/containername_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..919d72f4949f84b002bbb10f270a96245d081ce4 --- /dev/null +++ b/entity/Offer_entity/entityfields/keywordprobabilityoffer/children/containername_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.result"); +import("KeywordRegistry_basic"); + +result.string($KeywordRegistry.probabilityOffer()); diff --git a/entity/Offer_entity/entityfields/offercode/onValidation.js b/entity/Offer_entity/entityfields/offercode/onValidation.js index 58a3364596c6f0a8f85c3863acf31b877c629f69..63c69739e9c8429c0c1471f30a67781b9db395ae 100644 --- a/entity/Offer_entity/entityfields/offercode/onValidation.js +++ b/entity/Offer_entity/entityfields/offercode/onValidation.js @@ -1,5 +1,9 @@ +import("system.vars"); import("system.neon"); //reload the field on save to make sure the offercode is really unique, otherwise the offercode could be the same for two offers created at //the same time -neon.refresh(["$field.OFFERCODE"]); \ No newline at end of file +if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW) +{ + neon.refresh(["$field.OFFERCODE"]); +} \ No newline at end of file diff --git a/entity/Offer_entity/entityfields/offerreportdispatch/children/dispatchofferreport/onActionProcess.js b/entity/Offer_entity/entityfields/offerreportdispatch/children/dispatchofferreport/onActionProcess.js index 820659874926c9870e401c3898695443e6c2a075..c9be3c889870754bed49436e6818a86aebc8ca22 100644 --- a/entity/Offer_entity/entityfields/offerreportdispatch/children/dispatchofferreport/onActionProcess.js +++ b/entity/Offer_entity/entityfields/offerreportdispatch/children/dispatchofferreport/onActionProcess.js @@ -16,7 +16,6 @@ var notificationMsg = translate.text("The status of the offer was changed to \"s var contactId = vars.get("$field.CONTACT_ID"); var arrayReport = OfferUtils.buildOfferReport(vars.get("$field.OFFERID")); var emailFilename = translate.text("Offerrequest"); -var offerId = vars.get("$field.OFFERID") var additionalPlaceholders = [ new Placeholder("offerCode", Placeholder.types.FIXEDVALUE, vars.get("$field.FullOfferCode")) ]; @@ -29,4 +28,5 @@ offerReport.filename = translate.text("Offer No.") + vars.get("$field.#CONTENTTI attachmentArray[0] = offerReport; -EmailWritingUtils.sendReportAsMail(contactId, attachmentArray, "Offer", notificationMsg, emailFilename, additionalPlaceholders, updateStatements); +EmailWritingUtils.sendReportAsMail(contactId, attachmentArray, "Offer", notificationMsg, emailFilename, additionalPlaceholders, updateStatements, + $KeywordRegistry.documentTemplateTypeCategory$single()); diff --git a/entity/Offer_entity/entityfields/offerreportdispatch/children/dispatchofferreport/stateProcess.js b/entity/Offer_entity/entityfields/offerreportdispatch/children/dispatchofferreport/stateProcess.js index 738545ff1396978318ecf3e043e3942f9ed2773f..47d7dcf10fc8b13a3ecc64f1df95b5a0c4657f79 100644 --- a/entity/Offer_entity/entityfields/offerreportdispatch/children/dispatchofferreport/stateProcess.js +++ b/entity/Offer_entity/entityfields/offerreportdispatch/children/dispatchofferreport/stateProcess.js @@ -1,3 +1,4 @@ +import("KeywordRegistry_basic"); import("system.vars"); import("system.neon"); import("system.result"); @@ -6,4 +7,7 @@ import("Sql_lib"); var offerStatus = newSelect("OFFER.STATUS").from("OFFER") .where("OFFER.OFFERID", "$field.OFFERID").cell(); -if (offerStatus == "OFFERSTATSENT") result.string(neon.COMPONENTSTATE_DISABLED); \ No newline at end of file +if (offerStatus == $KeywordRegistry.offerStatus$sent() || offerStatus == $KeywordRegistry.offerStatus$toCheck() || offerStatus == $KeywordRegistry.offerStatus$denied()) +{ + result.string(neon.COMPONENTSTATE_DISABLED); +} \ No newline at end of file diff --git a/entity/Offer_entity/entityfields/probability/dropDownProcess.js b/entity/Offer_entity/entityfields/probability/dropDownProcess.js deleted file mode 100644 index 0ce6525ee92048543d83d251c2b289e710aa5e01..0000000000000000000000000000000000000000 --- a/entity/Offer_entity/entityfields/probability/dropDownProcess.js +++ /dev/null @@ -1,9 +0,0 @@ -import("system.result"); - -result.object([ - ["0.00", "0%"], - ["25.00", "25%"], - ["50.00", "50%"], - ["75.00", "75%"], - ["100.00", "100%"] -]); diff --git a/entity/Offer_entity/entityfields/probability/valueProcess.js b/entity/Offer_entity/entityfields/probability/valueProcess.js index ad82690b022e8c95df71cc2a924d30b643efcacc..72e0517304f96f7d2aa94f10a9e938d71b4fef50 100644 --- a/entity/Offer_entity/entityfields/probability/valueProcess.js +++ b/entity/Offer_entity/entityfields/probability/valueProcess.js @@ -2,7 +2,7 @@ import("system.neon"); import("system.result"); import("system.vars"); -if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) { result.string("0.00"); } \ No newline at end of file diff --git a/entity/Offer_entity/entityfields/status/stateProcess.js b/entity/Offer_entity/entityfields/status/stateProcess.js index 2f47d5d1011fd2ccbe859630ac7904f21f4c6a09..547c00b1f8ff3f450ee6e9b33fcd7a472dd34d71 100644 --- a/entity/Offer_entity/entityfields/status/stateProcess.js +++ b/entity/Offer_entity/entityfields/status/stateProcess.js @@ -4,4 +4,11 @@ import("system.neon"); import("Offer_lib"); import("KeywordRegistry_basic"); -result.string(OfferUtils.isEditable(vars.get("$field.STATUS")) || vars.get("$field.STATUS") == $KeywordRegistry.offerStatus$sent() ? neon.COMPONENTSTATE_AUTO : neon.COMPONENTSTATE_DISABLED); \ No newline at end of file +if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW) +{ + result.string(neon.COMPONENTSTATE_READONLY); +} +else +{ + result.string(OfferUtils.isEditable(vars.get("$field.STATUS")) || vars.get("$field.STATUS") == $KeywordRegistry.offerStatus$sent() ? neon.COMPONENTSTATE_AUTO : neon.COMPONENTSTATE_DISABLED); +} diff --git a/entity/Offer_entity/entityfields/tasks/stateProcess.js b/entity/Offer_entity/entityfields/tasks/stateProcess.js deleted file mode 100644 index fca9129ea68cf45ad847604b3e6f12b25052ce36..0000000000000000000000000000000000000000 --- a/entity/Offer_entity/entityfields/tasks/stateProcess.js +++ /dev/null @@ -1,10 +0,0 @@ -import("system.result"); -import("system.neon"); -import("system.vars"); -import("ActivityTask_lib"); -import("Context_lib"); - -if(TaskUtils.hasTasks(vars.get("$field.OFFERID"), ContextUtils.getCurrentContextId())) - result.string(neon.COMPONENTSTATE_EDITABLE); -else - result.string(neon.COMPONENTSTATE_INVISIBLE); \ No newline at end of file diff --git a/entity/Offer_entity/grantUpdateProcess.js b/entity/Offer_entity/grantUpdateProcess.js index f022059101691315bf584048dfcd766f0d747cdf..1677ad01a5fab5626a4ae9c7b04b260f656e4754 100644 --- a/entity/Offer_entity/grantUpdateProcess.js +++ b/entity/Offer_entity/grantUpdateProcess.js @@ -1,2 +1,12 @@ +import("system.tools"); +import("system.result"); +import("system.vars"); +import("KeywordRegistry_basic"); + // as one field (status) should be editable if status is sent and all other not, it is done by a state process in each field. -// using the grant update would also disable the status field. \ No newline at end of file +// using the grant update would also disable the status field. + +var status = vars.get("$field.STATUS"); +var editable = status != $KeywordRegistry.offerStatus$won() && status != $KeywordRegistry.offerStatus$lost(); + +result.string(editable || tools.hasRole(vars.get("$sys.user"), "INTERNAL_ADMINISTRATOR")); diff --git a/entity/Offer_entity/recordcontainers/db/conditionProcess.js b/entity/Offer_entity/recordcontainers/db/conditionProcess.js index eabc7f2454152f89cb58b7cd582e76dc41cdcdd6..687c5f8bf92623d65bbfef791ffe4b1bc0caded9 100644 --- a/entity/Offer_entity/recordcontainers/db/conditionProcess.js +++ b/entity/Offer_entity/recordcontainers/db/conditionProcess.js @@ -3,7 +3,8 @@ import("system.db"); import("system.result"); import("Sql_lib"); -var cond = newWhere() +var cond = newWhere(); +var approval = vars.get("$param.Approval_param"); if(vars.exists("$param.ContactId_param") && vars.get("$param.ContactId_param")) cond.andIfSet("OFFER.CONTACT_ID", "$param.ContactId_param"); @@ -12,6 +13,16 @@ else { cond.andIfSet("OFFER.OBJECT_TYPE", "$param.ObjectType_param"); } +if (approval == 1) +{ + cond.andIfSet("OFFER.APPROVAL", "1"); +} +else if(approval == 2) +{ + cond.andIfSet("OFFER.APPROVAL", "2"); +} + + cond.andIfSet("OFFER.STATUS", "$param.OfferStatus_param") result.string(cond.toString()); \ No newline at end of file diff --git a/entity/Offer_entity/recordcontainers/db/onDBInsert.js b/entity/Offer_entity/recordcontainers/db/onDBInsert.js index cbd146d2878aa365cd24c7beb64ba9d8a0e71e9d..dee3726f2ed43d0d95ca7a19780beaaff7b8e5b8 100644 --- a/entity/Offer_entity/recordcontainers/db/onDBInsert.js +++ b/entity/Offer_entity/recordcontainers/db/onDBInsert.js @@ -18,8 +18,6 @@ if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) if (vars.exists("$param.OfferOriginal_Id_param") && vars.get("$param.OfferOriginal_Id_param")) OfferUtils.copyOfferItems(vars.getString("$param.OfferOriginal_Id_param"), offerId, discount); - var binaryColumns; - var binaries; var activityId = vars.get("$param.ActivityId_param"); if (activityId) { @@ -30,30 +28,14 @@ if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) "OBJECT_TYPE": ContextUtils.getCurrentContextId(), "OBJECT_ROWID": offerId }, "ACTIVITYLINK", "ACTIVITYLINKID"); - - binaryColumns = "BINDATA, FILENAME, DESCRIPTION, KEYWORD"; - binaries = newSelect(binaryColumns, SqlUtils.getBinariesAlias()) - .from("ASYS_BINARIES") - .where("ASYS_BINARIES.ROW_ID", activityId) - .table() - for (i = 0; i < binaries.length; i++) - { - SingleBinaryUtils.insert("OFFER", "DOCUMENT", offerId, binaries[i][0], binaries[i][1], binaries[i][2], binaries[i][3], SqlUtils.getBinariesAlias()) - } + BinaryUtils.copyBinaries("ACTIVITY", activityId, "OFFER", offerId, "DOCUMENT"); } + var taskId = vars.get("$param.TaskId_param"); if (taskId) { - binaryColumns = "BINDATA, FILENAME, DESCRIPTION, KEYWORD"; - binaries = newSelect(binaryColumns, SqlUtils.getBinariesAlias()) - .from("ASYS_BINARIES") - .where("ASYS_BINARIES.ROW_ID", taskId) - .table() - for (i = 0; i < binaries.length; i++) - { - SingleBinaryUtils.insert("OFFER", "DOCUMENT", taskId, binaries[i][0], binaries[i][1], binaries[i][2], binaries[i][3], SqlUtils.getBinariesAlias()) - } + BinaryUtils.copyBinaries("TASK", taskId, "OFFER", offerId, "DOCUMENT"); } } -WorkflowSignalSender.inserted(); \ No newline at end of file +WorkflowSignalSender.inserted(); diff --git a/entity/Offeritem_entity/Offeritem_entity.aod b/entity/Offeritem_entity/Offeritem_entity.aod index 002cae927a6f49f5b009e413ce6338fb70b475e3..f6360e58a26d1723764e7a5743546bc307f4c78d 100644 --- a/entity/Offeritem_entity/Offeritem_entity.aod +++ b/entity/Offeritem_entity/Offeritem_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Offeritem_entity</name> <title>Offeritem</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -73,8 +73,8 @@ <contentType>NUMBER</contentType> <outputFormat>#,##0.00</outputFormat> <inputFormat>#,##0.00</inputFormat> + <mandatory v="true" /> <displayValueProcess>%aditoprj%/entity/Offeritem_entity/entityfields/price/displayValueProcess.js</displayValueProcess> - <onValidation>%aditoprj%/entity/Offeritem_entity/entityfields/price/onValidation.js</onValidation> </entityField> <entityField> <name>PRODUCT_ID</name> @@ -126,7 +126,6 @@ <contentType>NUMBER</contentType> <outputFormat>0.00'%'</outputFormat> <inputFormat>0.00</inputFormat> - <state>READONLY</state> <valueProcess>%aditoprj%/entity/Offeritem_entity/entityfields/vat/valueProcess.js</valueProcess> </entityField> <entityParameter> @@ -169,14 +168,6 @@ <entityProvider> <name>OfferItems</name> <recordContainer>db</recordContainer> - <dependencies> - <entityDependency> - <name>7810e350-d011-4d95-8d0b-883f3a0e519c</name> - <entityName>Offer_entity</entityName> - <fieldName>Offeritems</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ContactId_param</name> @@ -292,6 +283,16 @@ </entityActionField> </children> </entityActionGroup> + <entityField> + <name>itemInsertStatements</name> + <documentation>%aditoprj%/entity/Offeritem_entity/entityfields/iteminsertstatements/documentation.adoc</documentation> + </entityField> + <entityField> + <name>currency</name> + <title>Currency</title> + <state>READONLY</state> + <valueProcess>%aditoprj%/entity/Offeritem_entity/entityfields/currency/valueProcess.js</valueProcess> + </entityField> </entityFields> <recordContainers> <dbRecordContainer> diff --git a/entity/Offeritem_entity/entityfields/currency/valueProcess.js b/entity/Offeritem_entity/entityfields/currency/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..f125324e596f8c1180a1fbb47601c2a8f0ad95c0 --- /dev/null +++ b/entity/Offeritem_entity/entityfields/currency/valueProcess.js @@ -0,0 +1,13 @@ +import("KeywordRegistry_basic"); +import("Keyword_lib"); +import("system.result"); +import("system.neon"); +import("system.vars"); + +if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) +{ + if(vars.get("$param.Currency_param") && vars.get("$param.Currency_param") != "") + { + result.string(KeywordUtils.getViewValue($KeywordRegistry.currency(), vars.getString("$param.Currency_param"))); + } +} \ No newline at end of file diff --git a/entity/Offeritem_entity/entityfields/iteminsertstatements/documentation.adoc b/entity/Offeritem_entity/entityfields/iteminsertstatements/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..483999ea30ce8b8d311f57b6a69113bfa9d9f1e6 --- /dev/null +++ b/entity/Offeritem_entity/entityfields/iteminsertstatements/documentation.adoc @@ -0,0 +1,5 @@ += itemInsertStatements + +Helper field to store the statements for the childitems (statements get built with the correct amounts when changing the product or the quantity). +Statements get stored as stringified object. +And parsed and inserted in the onInsertProcess \ No newline at end of file diff --git a/entity/Offeritem_entity/entityfields/offeritemid/valueProcess.js b/entity/Offeritem_entity/entityfields/offeritemid/valueProcess.js index 86ef789e064a4016f2d12c432498dc23474807aa..823247cf893e603a8e2b8d5725d6b94ecd975695 100644 --- a/entity/Offeritem_entity/entityfields/offeritemid/valueProcess.js +++ b/entity/Offeritem_entity/entityfields/offeritemid/valueProcess.js @@ -3,5 +3,7 @@ import("system.vars"); import("system.result"); import("system.neon"); -if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) - result.string(util.getNewUUID()); \ No newline at end of file +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) +{ + result.string(util.getNewUUID()); +} \ No newline at end of file diff --git a/entity/Offeritem_entity/entityfields/price/onValidation.js b/entity/Offeritem_entity/entityfields/price/onValidation.js deleted file mode 100644 index 20fb049467d74f3d2770187652e1e958bd69a285..0000000000000000000000000000000000000000 --- a/entity/Offeritem_entity/entityfields/price/onValidation.js +++ /dev/null @@ -1,9 +0,0 @@ -import("system.translate"); -import("system.result"); -import("system.vars"); - -var localValue = vars.get("$local.value"); -if(!localValue || parseFloat(localValue) <= 0) -{ - result.string(translate.text("Price could not be determined")); -} diff --git a/entity/Offeritem_entity/entityfields/product_id/onValueChange.js b/entity/Offeritem_entity/entityfields/product_id/onValueChange.js index 0d52517c981eb2f8832ea8149f8206dae6067d8b..2dc7f5d987c0b34ce0729068c679995626a41707 100644 --- a/entity/Offeritem_entity/entityfields/product_id/onValueChange.js +++ b/entity/Offeritem_entity/entityfields/product_id/onValueChange.js @@ -1,11 +1,35 @@ +import("system.neon"); import("system.vars"); import("OfferOrder_lib"); +import("Offer_lib"); var pId = vars.get("$local.value"); -var uid = vars.get("$field.OFFERITEMID"); -var entity = vars.get("$sys.currententityname"); -if(pId != "") +if(pId != "" && vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) { + var uid = vars.get("$field.OFFERITEMID"); + var entity = vars.get("$sys.currententityname"); ItemUtils.product_IdOnValueChange(pId, uid, entity); -} \ No newline at end of file + var oiUtils = new OfferItemUtils(vars.get("$field.OFFER_ID")); + var curr = vars.exists("$param.Currency_param") ? vars.get("$param.Currency_param") : ""; + var contactid = vars.exists("$param.ContactId_param") ? vars.get("$param.ContactId_param") : ""; + var language = vars.exists("$param.Language_param") ? vars.get("$param.Language_param") : ""; + var quantity = vars.get("$field.QUANTITY"); + + var sumUpTop = false; + var price = vars.get("$field.PRICE"); + if(!price) + { + sumUpTop = true; + } + + var partsListObject = oiUtils.insertPartsList(pId, vars.get("$field.OFFERITEMID"), curr, contactid, language, quantity, true, vars.get("$field.OFFER_ID"), sumUpTop); + + neon.setFieldValue("$field.itemInsertStatements", JSON.stringify(partsListObject["partsList"])); + + if(sumUpTop && partsListObject["topProductInfo"])//only sum-up this price if there is no valid Price + { + neon.setFieldValue("$field.PRICE", partsListObject["topProductInfo"]["price"]*quantity); + neon.setFieldValue("$field.VAT", partsListObject["topProductInfo"]["vat"]); + } +} diff --git a/entity/Offeritem_entity/entityfields/quantity/onValueChange.js b/entity/Offeritem_entity/entityfields/quantity/onValueChange.js index 051fa52ad7aebb44ad62ec755fa776f4232cc9bd..3e3d47e47f449955f79e2011a16541b2832627ed 100644 --- a/entity/Offeritem_entity/entityfields/quantity/onValueChange.js +++ b/entity/Offeritem_entity/entityfields/quantity/onValueChange.js @@ -1,36 +1,34 @@ -import("AttributeRegistry_basic"); import("system.vars"); import("system.neon"); -import("Product_lib"); -import("Util_lib"); -import("Entity_lib"); -import("Attribute_lib"); +import("OfferOrder_lib"); +import("Offer_lib"); -var pid = vars.get("$field.PRODUCT_ID"); -var newQuantity = vars.get("local.value"); -if(pid != "" && newQuantity != "") +var pId = vars.get("$field.PRODUCT_ID"); +if(pId != "" && vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) { + var uid = vars.get("$field.OFFERITEMID"); + var entity = vars.get("$sys.currententityname"); + var quantity = vars.get("$local.value"); + ItemUtils.product_IdOnValueChange(pId, uid, entity, quantity); + + var oiUtils = new OfferItemUtils(vars.get("$field.OFFER_ID")); var curr = vars.exists("$param.Currency_param") ? vars.get("$param.Currency_param") : ""; var contactid = vars.exists("$param.ContactId_param") ? vars.get("$param.ContactId_param") : ""; - var pricelist = new AttributeRelationQuery(contactid, $AttributeRegistry.pricelist()).getSingleAttributeValue() || ""; - - var PriceListFilter = { currency: curr, quantity: newQuantity, relationId: contactid, priceList: pricelist }; + var language = vars.exists("$param.Language_param") ? vars.get("$param.Language_param") : ""; + + var sumUpTop = false; + var price = vars.get("$field.PRICE"); + if(!price) + { + sumUpTop = true; + } - var ProductDetails = ProductUtils.getProductDetails(pid, PriceListFilter); + var partsListObject = oiUtils.insertPartsList(pId, vars.get("$field.OFFERITEMID"), curr, contactid, language, quantity, true, vars.get("$field.OFFER_ID"), sumUpTop); + neon.setFieldValue("$field.itemInsertStatements", JSON.stringify(partsListObject["partsList"])); - if(ProductDetails.productId != undefined && ProductDetails.PriceListToUse != null) + if(sumUpTop)//only sum-up this price if there is no valid Price { - neon.setFieldValue("$field.PRICE", ProductDetails.PriceListToUse.price); - neon.setFieldValue("$field.VAT", ProductDetails.PriceListToUse.vat); + neon.setFieldValue("$field.PRICE", partsListObject["topProductInfo"]["price"]); + neon.setFieldValue("$field.VAT", partsListObject["topProductInfo"]["vat"]); } } - - -//checks if the value is <= 0, if so fallback to 1 -var quatity = vars.get("$local.value") ? vars.get("$local.value") : ""; - -if (parseInt(quatity) <= 0) -{ - neon.setFieldValue("local.value", "1"); -} - \ No newline at end of file diff --git a/entity/Offeritem_entity/recordcontainers/db/onDBDelete.js b/entity/Offeritem_entity/recordcontainers/db/onDBDelete.js index 283d1cb7a7cdb0568b117c1f8001fe4f7a2ef796..c00baa2b4d1917e12c5fe5ed0db7c0a6d00852bb 100644 --- a/entity/Offeritem_entity/recordcontainers/db/onDBDelete.js +++ b/entity/Offeritem_entity/recordcontainers/db/onDBDelete.js @@ -16,28 +16,15 @@ if(oid != "") deletedIds.push(oiid); var cols = ["NET", "VAT"]; + var vals = oiUtils.getNetAndVat(deletedIds); - var vals = oiUtils.getNetAndVat(deletedIds); var discountedVals = OfferItemUtils.getDiscountedNet(deletedIds, oid, discount); - - let config = entities.createConfigForUpdatingRows() - config.entity("Offer_entity"); - - if(discountedVals){ - config.fieldValues({ - "NET": vals[0], - "VAT": vals[1], - "DISCOUNTED_NET": discountedVals[0], - "DISCOUNTED_VAT": discountedVals[1] - }); - } - else{ - config.fieldValues({ - "NET": vals[0], - "VAT": vals[1] - }); + if(discountedVals) + { + cols.push("DISCOUNTED_NET", "DISCOUNTED_VAT"); + vals = vals.concat(discountedVals); } - config.uid(oid); - entities.updateRow(config); - -} \ No newline at end of file + + newWhere("SALESORDER.SALESORDERID", oid) + .updateData(true, "SALESORDER", cols, null, vals); +} diff --git a/entity/Offeritem_entity/recordcontainers/db/onDBInsert.js b/entity/Offeritem_entity/recordcontainers/db/onDBInsert.js index ccbec217a9ab2911b54beeaef6e915c64863b14c..e78ed8f9e28022f4232709ca1a9c97cbea10b41d 100644 --- a/entity/Offeritem_entity/recordcontainers/db/onDBInsert.js +++ b/entity/Offeritem_entity/recordcontainers/db/onDBInsert.js @@ -1,172 +1,41 @@ -import("system.eMath"); +import("system.db"); +import("OfferOrder_lib"); import("system.entities"); -import("system.datetime"); import("system.neon"); import("system.vars"); -import("system.db"); -import("system.util"); import("Offer_lib"); import("Product_lib"); import("Sql_lib"); var rowdata = vars.get("$local.rowdata"); - var oid = rowdata["OFFERITEM.OFFER_ID"]; if(oid != "") { - var curr = vars.exists("$param.Currency_param") ? vars.get("$param.Currency_param") : ""; - var contactid = vars.exists("$param.ContactId_param") ? vars.get("$param.ContactId_param") : ""; var discount = vars.exists("$param.Discount_param") ? vars.get("$param.Discount_param"): ""; - var quantity = vars.get("$field.QUANTITY"); var oiUtils = new OfferItemUtils(rowdata["OFFERITEM.OFFER_ID"]); - var insertParts = oiUtils.insertPartsList(rowdata["OFFERITEM.PRODUCT_ID"], vars.get("$local.uid"), curr, contactid, vars.get("$param.Language_param"), quantity, true); - oiUtils.reOrgItems(); - var calculatedPrices = {}; - var priceObj = insertParts["priceObject"]; - var treeStructure = insertParts["treeStructure"][rowdata["OFFERITEM.OFFERITEMID"]]; - var productsWithSumUpPrices = insertParts["productsWithSumUpPrices"] - var correctOrder = insertParts["insertedItemIds"]; - _handleSumUpPricesOfItems(correctOrder, treeStructure, productsWithSumUpPrices, priceObj); - var price = rowdata["OFFERITEM.PRICE"]; - if(price === "" || price === undefined || price === null) - { - var calcPrice = 0; - var vat = 0; - for(var id in treeStructure) - { - calcPrice = eMath.addDec(priceObj[id]["price"], calcPrice); - if(priceObj[id]["vat"] !== null && priceObj[id]["vat"] !== undefined && priceObj[id]["vat"] > 0) - { - vat = priceObj[id]["vat"]; - } - } - var config = entities.createConfigForUpdatingRows() - .entity("Offeritem_entity") - .addParameter("OfferId_param", oid) - .addParameter("IgnoreOnUpdateProcess_param", true) - .uid(rowdata["OFFERITEM.OFFERITEMID"]) - .fieldValues({ - "PRICE": calcPrice, - "VAT": vat - }); - entities.updateRow(config); - } + + var insertStatements = JSON.parse(vars.get("$field.itemInsertStatements"));//insert statements get set by insertPartsList in the onvalueChanges of product_id and quantity + var statements = []; //update offer price var vals = oiUtils.getNetAndVat(); var discountedVals = OfferItemUtils.getDiscountedNet(null, oid, discount); - - let config = entities.createConfigForUpdatingRows() - config.entity("Offer_entity"); - if(discountedVals) { - config.fieldValues({ - "NET": vals[0], - "VAT": vals[1], - "DISCOUNTED_NET": discountedVals[0], - "DISCOUNTED_VAT": discountedVals[1] - }); - } - else - { - config.fieldValues({ - "NET": vals[0], - "VAT": vals[1] - }); - + statements.push( + newWhere("OFFER.OFFERID", rowdata["OFFERITEM.OFFER_ID"]).buildUpdateStatement({ + "NET": vals[0], + "VAT": vals[1], + "DISCOUNTED_NET": discountedVals[0], + "DISCOUNTED_VAT": discountedVals[1] + }) + ) } - config.uid(oid); - entities.updateRow(config); -} -//We want to sum up the prices directly under the current item to calculate the price if we don't have an valid price for them -function _handleSumUpPricesOfItems(pOrder, pTreestruct, pSumUpPrices, pPriceObj) -{ - - var currentStruc = pTreestruct; - var sumUpPrices = pSumUpPrices; - var order = pOrder; - var summandObject = {}; - for (var i = order.length; i > -1; i--)//we do this backwards because otherwiese we would run into problems when trying to build the sum (we could have items without an price yet) - { - if(sumUpPrices.hasOwnProperty(order[i])) - { - summandObject[order[i]] = _getNode(pTreestruct, order[i], Object.keys(pTreestruct)[0]); - } - } - - for(var offerItem in summandObject) + if(insertStatements) { - var calcPrice = 0; - var vat = null; - for (var child in summandObject[offerItem]) - { - var childPrice; - if(priceObj[child] != undefined) - { - childPrice = priceObj[child]["price"] - } - else if(summandObject[child][child] != undefined) - { - childPrice = priceObj[Object.keys(summandObject[child][child])[0]]["price"] - vat = priceObj[Object.keys(summandObject[child][child])[0]]["vat"] - } - else - { - childPrice = 0; - vat = 0; - } - calcPrice = eMath.addDec(childPrice, calcPrice); - if(!vat) - { - vat = priceObj[child]["vat"]; - } - } - calculatedPrices[offerItem] = {}; - calculatedPrices[offerItem]["price"] = calcPrice; - calculatedPrices[offerItem]["vat"] = vat; - priceObj[offerItem] = {}; - priceObj[offerItem]["price"] = calcPrice; - priceObj[offerItem]["vat"] = vat; - - } - //ToDo: Document - function _getNode(pObject, pName, pCurrName){ - if(pCurrName == pName) - { - return pObject; - } - else if (pObject != undefined) - { - let x; - let res = null; - for(var obj in pObject) - { - if(res == null) - { - res = _getNode(pObject[obj], pName, obj); - } - else - { - break; - } - } - return res; - } - return null; + statements = statements.concat(insertStatements); } - - var config = entities.createConfigForUpdatingRows().entity("Offeritem_entity").addParameter("OfferId_param", oid).addParameter("IgnoreOnUpdateProcess_param", true); - for(var oiId in productsWithSumUpPrices) - { - config.uid(oiId) - .fieldValues({ - "PRICE": priceObj[oiId]["price"], - "VAT": priceObj[oiId]["vat"] - }); - - entities.updateRow(config); - } + db.execute(statements, "Data_alias", 10000000); } \ No newline at end of file diff --git a/entity/Offeritem_entity/recordcontainers/db/onDBUpdate.js b/entity/Offeritem_entity/recordcontainers/db/onDBUpdate.js index a3e8e2fb33ac86ffe5baad4675c7dba8ab206316..a86dd0453eef51446501a4f8119e4896ee27fa68 100644 --- a/entity/Offeritem_entity/recordcontainers/db/onDBUpdate.js +++ b/entity/Offeritem_entity/recordcontainers/db/onDBUpdate.js @@ -51,10 +51,10 @@ if(oid != "") var potentialAsignees = {}; var offerItemsToUpdate = {}; var stop = false; - while(stop == false) + while(stop == false)//we have too loop forall the rows for each row that needs updating, since those are also pontially asignees { stop = true; - for(var offeritem in rows) + for(var offeritem in rows)//loop trough all the rows and build offerItemsToUpdate { if(!(rows[offeritem]["OFFERITEMID"] in offerItemsToUpdate) &&(rows[offeritem]["ASSIGNEDTO"] == offerItemId || rows[offeritem]["ASSIGNEDTO"] in potentialAsignees)) { diff --git a/entity/Order_entity/Order_entity.aod b/entity/Order_entity/Order_entity.aod index ea20792d664c1f6d3213eaeb1ef3dc411bfc94c2..4c9cd4456c3f942948a45ab3d522c6d69a4ead5c 100644 --- a/entity/Order_entity/Order_entity.aod +++ b/entity/Order_entity/Order_entity.aod @@ -1,9 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Order_entity</name> <title>Receipt</title> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/Order_entity/documentation.adoc</documentation> + <grantUpdateProcess>%aditoprj%/entity/Order_entity/grantUpdateProcess.js</grantUpdateProcess> <grantDeleteProcess>%aditoprj%/entity/Order_entity/grantDeleteProcess.js</grantDeleteProcess> <contentTitleProcess>%aditoprj%/entity/Order_entity/contentTitleProcess.js</contentTitleProcess> <contentDescriptionProcess>%aditoprj%/entity/Order_entity/contentDescriptionProcess.js</contentDescriptionProcess> @@ -16,32 +17,6 @@ <entityFields> <entityProvider> <name>#PROVIDER</name> - <dependencies> - <entityDependency> - <name>95e7ab85-0af9-46ea-a50a-7719833acd2a</name> - <entityName>Object_entity</entityName> - <fieldName>Orders</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>683107cc-2908-4930-8581-d3636f9ec196</name> - <entityName>ObjectProxy_entity</entityName> - <fieldName>Orders</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>bfc738ad-8af3-4d2b-9ed5-b3ca2212bb9e</name> - <entityName>Person_entity</entityName> - <fieldName>Orders</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>b9cdee36-bfa3-4682-9a1d-26996dd6a5c2</name> - <entityName>Offer_entity</entityName> - <fieldName>Orders</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>CURRENCY</name> @@ -174,6 +149,7 @@ <consumer>Languages</consumer> <groupable v="true" /> <mandatory v="true" /> + <valueProcess>%aditoprj%/entity/Order_entity/entityfields/isolanguage/valueProcess.js</valueProcess> <displayValueProcess>%aditoprj%/entity/Order_entity/entityfields/isolanguage/displayValueProcess.js</displayValueProcess> </entityField> <entityField> @@ -206,6 +182,12 @@ <entityName>AnyContact_entity</entityName> <fieldName>#PROVIDER</fieldName> </dependency> + <children> + <entityParameter> + <name>IgnoreContactStates_param</name> + <valueProcess>%aditoprj%/entity/Order_entity/entityfields/anycontacts/children/ignorecontactstates_param/valueProcess.js</valueProcess> + </entityParameter> + </children> </entityConsumer> <entityConsumer> <name>Documents</name> @@ -337,7 +319,6 @@ </entityField> <entityConsumer> <name>Tasks</name> - <stateProcess>%aditoprj%/entity/Order_entity/entityfields/tasks/stateProcess.js</stateProcess> <dependency> <name>dependency</name> <entityName>Task_entity</entityName> @@ -518,6 +499,7 @@ <mandatory v="true" /> <mandatoryProcess>%aditoprj%/entity/Order_entity/entityfields/object_rowid/mandatoryProcess.js</mandatoryProcess> <titleProcess>%aditoprj%/entity/Order_entity/entityfields/object_rowid/titleProcess.js</titleProcess> + <valueProcess>%aditoprj%/entity/Order_entity/entityfields/object_rowid/valueProcess.js</valueProcess> <displayValueProcess>%aditoprj%/entity/Order_entity/entityfields/object_rowid/displayValueProcess.js</displayValueProcess> <onValueChangeTypes> <element>MASK</element> diff --git a/entity/Order_entity/entityfields/anycontacts/children/ignorecontactstates_param/valueProcess.js b/entity/Order_entity/entityfields/anycontacts/children/ignorecontactstates_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..c6c72b9e8a3069a5a22fbd37d3d56c131409e561 --- /dev/null +++ b/entity/Order_entity/entityfields/anycontacts/children/ignorecontactstates_param/valueProcess.js @@ -0,0 +1,7 @@ +import("system.result"); +import("KeywordRegistry_basic"); + +result.string(JSON.stringify([ + $KeywordRegistry.contactStatus$inactive(), + $KeywordRegistry.contactStatus$markToDelete() +])); diff --git a/entity/Order_entity/entityfields/contact_id/onValueChange.js b/entity/Order_entity/entityfields/contact_id/onValueChange.js index 65ebe4338bb6690dbd09b396c412410910ede21a..f9eb528b6dc9d3dbd8d3a99ccaee424ebba0d4d7 100644 --- a/entity/Order_entity/entityfields/contact_id/onValueChange.js +++ b/entity/Order_entity/entityfields/contact_id/onValueChange.js @@ -32,7 +32,7 @@ if(contactId != "") neon.setFieldValue("$field.DELIVERYADDRESS", AddressUtils.getAddressById(defaultAddressId)); } - var cond;hal + var cond; if(ContactUtils.isPersonOfOrganisation(contactId))//change contactId to contactId of organisation if needed { contactId = newSelect("CONTACT.CONTACTID") diff --git a/entity/Order_entity/entityfields/isolanguage/valueProcess.js b/entity/Order_entity/entityfields/isolanguage/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..34f97d72165af718a0fc01e553581ab7167c8feb --- /dev/null +++ b/entity/Order_entity/entityfields/isolanguage/valueProcess.js @@ -0,0 +1,16 @@ +import("system.result"); +import("system.neon"); +import("system.vars"); +import("Sql_lib"); + +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value") && vars.get("$field.CONTACT_ID")) +{ + var lang = newSelect("ISOLANGUAGE") + .from("CONTACT") + .where("CONTACT.CONTACTID", vars.get("$field.CONTACT_ID")) + .cell(); + if(lang != "") + { + result.string(lang); + } +} \ No newline at end of file diff --git a/entity/Order_entity/entityfields/object_rowid/valueProcess.js b/entity/Order_entity/entityfields/object_rowid/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..2d2ca846a93d9699b21edd9cd1b1588ee72d7fdd --- /dev/null +++ b/entity/Order_entity/entityfields/object_rowid/valueProcess.js @@ -0,0 +1,37 @@ +import("system.neon"); +import("system.vars"); +import("system.result"); +import("Contact_lib"); +import("Sql_lib"); + +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value")) +{ + var contactId = vars.get("$field.CONTACT_ID"); + if(contactId) + { + if(ContactUtils.isPersonOfOrganisation(contactId))//change contactId to contactId of organisation if needed + { + contactId = newSelect("CONTACT.CONTACTID") + .from("CONTACT") + .where("CONTACT.ORGANISATION_ID", newSelect("CONTACT.ORGANISATION_ID") + .from("CONTACT") + .where("CONTACT.CONTACTID", contactId) + .cell()) + .and("CONTACT.PERSON_ID is null") + .cell(); + } + + if(contactId) + { + //Salesproject Preset + var salesProjectIds = newSelect("SALESPROJECT.SALESPROJECTID") + .from("SALESPROJECT") + .where("SALESPROJECT.CONTACT_ID", contactId) + .arrayColumn(); + if(salesProjectIds.length == 1) + { + result.string(salesProjectIds[0]); + } + } + } +} \ No newline at end of file diff --git a/entity/Order_entity/entityfields/orderreportdispatch/children/dispatchorderreport/onActionProcess.js b/entity/Order_entity/entityfields/orderreportdispatch/children/dispatchorderreport/onActionProcess.js index 53225e7adf9f1876a1494a42cda2bf08e726f5b0..ae3cb6d2522110a36f98cf2dfd10124bd90fe50c 100644 --- a/entity/Order_entity/entityfields/orderreportdispatch/children/dispatchorderreport/onActionProcess.js +++ b/entity/Order_entity/entityfields/orderreportdispatch/children/dispatchorderreport/onActionProcess.js @@ -2,6 +2,7 @@ import("system.question"); import("system.translate"); import("system.vars"); import("system.db"); +import("KeywordRegistry_basic"); import("MimeType_lib"); import("Email_lib"); import("Sql_lib"); @@ -13,10 +14,7 @@ var notificationMsg = translate.text("The status of the order was changed to \"s var contactId = vars.get("$field.CONTACT_ID"); var orgContactId = vars.get("$field.CONTACT_ORG_ID"); var reportData = vars.get("$field.ORDER_REPORT_DATA"); -var emailFilename = vars.get("$field.#CONTENTTITLE"); -var orderNo = emailFilename.substring(emailFilename.indexOf(" ", 0)+1, emailFilename.length); -emailFilename = emailFilename.substring(0, emailFilename.indexOf(" ", 0)); -emailFilename = emailFilename + " " + orderNo; +var emailFilename = vars.get("$field.ORDERTYPE.displayValue") + " " + vars.get("$field.SALESORDERCODE"); if (contactId == null || "") contactId = orgContactId; @@ -27,4 +25,4 @@ orderReport.filename = emailFilename + ".pdf"; attachmentArray[0] = orderReport; -EmailWritingUtils.sendReportAsMail(contactId, attachmentArray, "Order", notificationMsg, emailFilename, null, updateStatements); +EmailWritingUtils.sendReportAsMail(contactId, attachmentArray, "Order", notificationMsg, emailFilename, null, updateStatements, $KeywordRegistry.documentTemplateTypeCategory$single()); diff --git a/entity/Order_entity/entityfields/reminderreportdispatch/children/dispatchreminderreport/onActionProcess.js b/entity/Order_entity/entityfields/reminderreportdispatch/children/dispatchreminderreport/onActionProcess.js index 7538162cacd9d49220e1ded198b3293f6dc46564..17b33080116cffcaee2512c24b460a663eb8e478 100644 --- a/entity/Order_entity/entityfields/reminderreportdispatch/children/dispatchreminderreport/onActionProcess.js +++ b/entity/Order_entity/entityfields/reminderreportdispatch/children/dispatchreminderreport/onActionProcess.js @@ -2,6 +2,7 @@ import("system.question"); import("system.translate"); import("system.vars"); import("system.db"); +import("KeywordRegistry_basic"); import("MimeType_lib"); import("Email_lib"); import("Order_lib"); @@ -25,4 +26,5 @@ orderReport.filename = emailFilename + ".pdf"; attachmentArray[0] = orderReport; -EmailWritingUtils.sendReportAsMail(contactId, attachmentArray, "Order", null, emailFilename, null, null); +EmailWritingUtils.sendReportAsMail(contactId, attachmentArray, "Order", null, emailFilename, null, null, + $KeywordRegistry.documentTemplateTypeCategory$single()) diff --git a/entity/Order_entity/entityfields/salesordercode/onValidation.js b/entity/Order_entity/entityfields/salesordercode/onValidation.js index f3e48817277e5545f8b9b6296bd84039c58682bf..7dea3bc9db7862239f4114433c8d7e78ab4e5cd0 100644 --- a/entity/Order_entity/entityfields/salesordercode/onValidation.js +++ b/entity/Order_entity/entityfields/salesordercode/onValidation.js @@ -1,5 +1,9 @@ +import("system.vars"); import("system.neon"); //reload the field on save to make sure the salesordercode is really unique, otherwise the salesordercode could be the same for two salesorders //created at the same time -neon.refresh(["$field.SALESORDERCODE"]); \ No newline at end of file +if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW) +{ + neon.refresh(["$field.SALESORDERCODE"]); +} \ No newline at end of file diff --git a/entity/Order_entity/entityfields/salesorderid/valueProcess.js b/entity/Order_entity/entityfields/salesorderid/valueProcess.js index 86ef789e064a4016f2d12c432498dc23474807aa..823247cf893e603a8e2b8d5725d6b94ecd975695 100644 --- a/entity/Order_entity/entityfields/salesorderid/valueProcess.js +++ b/entity/Order_entity/entityfields/salesorderid/valueProcess.js @@ -3,5 +3,7 @@ import("system.vars"); import("system.result"); import("system.neon"); -if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) - result.string(util.getNewUUID()); \ No newline at end of file +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) +{ + result.string(util.getNewUUID()); +} \ No newline at end of file diff --git a/entity/Order_entity/entityfields/tasks/stateProcess.js b/entity/Order_entity/entityfields/tasks/stateProcess.js deleted file mode 100644 index 01f44a309055b0f28943b5325e8cfd59c2dac06e..0000000000000000000000000000000000000000 --- a/entity/Order_entity/entityfields/tasks/stateProcess.js +++ /dev/null @@ -1,10 +0,0 @@ -import("system.result"); -import("system.neon"); -import("system.vars"); -import("ActivityTask_lib"); -import("Context_lib"); - -if(TaskUtils.hasTasks(vars.get("$field.SALESORDERID"), ContextUtils.getCurrentContextId())) - result.string(neon.COMPONENTSTATE_EDITABLE); -else - result.string(neon.COMPONENTSTATE_INVISIBLE); \ No newline at end of file diff --git a/entity/Order_entity/grantUpdateProcess.js b/entity/Order_entity/grantUpdateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..1559507308ff05db1a670d59cd825ca8d9d24160 --- /dev/null +++ b/entity/Order_entity/grantUpdateProcess.js @@ -0,0 +1,6 @@ +import("system.tools"); +import("system.result"); +import("system.vars"); + +var editable = !parseInt(vars.get("$field.ORDERSTATUS")); +result.string(editable || tools.hasRole(vars.get("$sys.user"), "INTERNAL_ADMINISTRATOR")); diff --git a/entity/Orderitem_entity/Orderitem_entity.aod b/entity/Orderitem_entity/Orderitem_entity.aod index 7abed959968cbf47b141f802a6c7c240a6f5201d..6c64a71bd8933f478df1a83f0b104929ca9f4c7e 100644 --- a/entity/Orderitem_entity/Orderitem_entity.aod +++ b/entity/Orderitem_entity/Orderitem_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Orderitem_entity</name> <title>Orderitem</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -60,6 +60,7 @@ <contentType>NUMBER</contentType> <outputFormat>#,##0.00</outputFormat> <inputFormat>#,##0.00</inputFormat> + <mandatory v="true" /> <displayValueProcess>%aditoprj%/entity/Orderitem_entity/entityfields/price/displayValueProcess.js</displayValueProcess> </entityField> <entityField> @@ -140,20 +141,6 @@ <entityProvider> <name>Orderitems</name> <recordContainer>db</recordContainer> - <dependencies> - <entityDependency> - <name>7810e350-d011-4d95-8d0b-883f3a0e519c</name> - <entityName>Order_entity</entityName> - <fieldName>Orderitems</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>911de4a4-0e85-4d50-93ee-6f8f2308589e</name> - <entityName>Order_entity</entityName> - <fieldName>Orderitems</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ContactId_param</name> @@ -272,6 +259,21 @@ </entityActionField> </children> </entityActionGroup> + <entityParameter> + <name>IgnoreOnUpdateProcess_param</name> + <expose v="true" /> + <documentation>%aditoprj%/entity/Orderitem_entity/entityfields/ignoreonupdateprocess_param/documentation.adoc</documentation> + </entityParameter> + <entityField> + <name>itemInsertStatements</name> + <documentation>%aditoprj%/entity/Orderitem_entity/entityfields/iteminsertstatements/documentation.adoc</documentation> + </entityField> + <entityField> + <name>currency</name> + <title>Currency</title> + <state>READONLY</state> + <valueProcess>%aditoprj%/entity/Orderitem_entity/entityfields/currency/valueProcess.js</valueProcess> + </entityField> </entityFields> <recordContainers> <dbRecordContainer> diff --git a/entity/Orderitem_entity/entityfields/currency/valueProcess.js b/entity/Orderitem_entity/entityfields/currency/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..f125324e596f8c1180a1fbb47601c2a8f0ad95c0 --- /dev/null +++ b/entity/Orderitem_entity/entityfields/currency/valueProcess.js @@ -0,0 +1,13 @@ +import("KeywordRegistry_basic"); +import("Keyword_lib"); +import("system.result"); +import("system.neon"); +import("system.vars"); + +if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) +{ + if(vars.get("$param.Currency_param") && vars.get("$param.Currency_param") != "") + { + result.string(KeywordUtils.getViewValue($KeywordRegistry.currency(), vars.getString("$param.Currency_param"))); + } +} \ No newline at end of file diff --git a/entity/Orderitem_entity/entityfields/ignoreonupdateprocess_param/documentation.adoc b/entity/Orderitem_entity/entityfields/ignoreonupdateprocess_param/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..3b7c3bfb85ecfca60367469d04eb39274a4de3e2 --- /dev/null +++ b/entity/Orderitem_entity/entityfields/ignoreonupdateprocess_param/documentation.adoc @@ -0,0 +1,3 @@ +=IgnoreOnUpdateProcess_param + +This param only exists because we use writeEntiy in the onUpdateProcess and don't want to execute parts of it again for the updates we trigger for the children. \ No newline at end of file diff --git a/entity/Orderitem_entity/entityfields/iteminsertstatements/documentation.adoc b/entity/Orderitem_entity/entityfields/iteminsertstatements/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..483999ea30ce8b8d311f57b6a69113bfa9d9f1e6 --- /dev/null +++ b/entity/Orderitem_entity/entityfields/iteminsertstatements/documentation.adoc @@ -0,0 +1,5 @@ += itemInsertStatements + +Helper field to store the statements for the childitems (statements get built with the correct amounts when changing the product or the quantity). +Statements get stored as stringified object. +And parsed and inserted in the onInsertProcess \ No newline at end of file diff --git a/entity/Orderitem_entity/entityfields/product_id/onValueChange.js b/entity/Orderitem_entity/entityfields/product_id/onValueChange.js index 1996256d8084708c434b34ce31be70a28bb63879..83f60fa1a8d9b90b49baed0d01c96d4a97e32fa1 100644 --- a/entity/Orderitem_entity/entityfields/product_id/onValueChange.js +++ b/entity/Orderitem_entity/entityfields/product_id/onValueChange.js @@ -1,8 +1,34 @@ +import("system.neon"); import("system.vars"); import("OfferOrder_lib"); +import("Order_lib"); var pId = vars.get("$local.value"); -if(pId != "") + +if(pId != "" && vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) { - ItemUtils.product_IdOnValueChange(pId); -} \ No newline at end of file + var uid = vars.get("$field.SALESORDERITEMID"); + var entity = vars.get("$sys.currententityname"); + + ItemUtils.product_IdOnValueChange(pId, uid, entity); + var oiUtils = new OrderItemUtils(vars.get("$field.SALESORDER_ID")); + var curr = vars.exists("$param.Currency_param") ? vars.get("$param.Currency_param") : ""; + var contactid = vars.exists("$param.ContactId_param") ? vars.get("$param.ContactId_param") : ""; + var quantity = vars.get("$field.QUANTITY"); + + var sumUpTop = false; + var price = vars.get("$field.PRICE"); + if(!price) + { + sumUpTop = true; + } + + var partsListObject = oiUtils.insertPartsList(pId, vars.get("$field.SALESORDERITEMID"), curr, contactid, quantity, true, vars.get("$field.SALESORDER_ID"), sumUpTop); + neon.setFieldValue("$field.itemInsertStatements", JSON.stringify(partsListObject["partsList"])); + if(sumUpTop && partsListObject["topProductInfo"])//only sum-up this price if there is no valid Price + { + neon.setFieldValue("$field.PRICE", partsListObject["topProductInfo"]["price"]*quantity); + neon.setFieldValue("$field.VAT", partsListObject["topProductInfo"]["vat"]); + } +} + diff --git a/entity/Orderitem_entity/entityfields/quantity/onValueChange.js b/entity/Orderitem_entity/entityfields/quantity/onValueChange.js index 5fbe3952a65b6081c9a845b0ec03e4092303c315..5946e7dffec4186398e7664403a3f9be56bd654b 100644 --- a/entity/Orderitem_entity/entityfields/quantity/onValueChange.js +++ b/entity/Orderitem_entity/entityfields/quantity/onValueChange.js @@ -1,23 +1,33 @@ import("system.vars"); import("system.neon"); -import("Product_lib"); -import("Util_lib"); -import("Entity_lib"); +import("OfferOrder_lib"); +import("Order_lib"); -var pid = vars.get("$field.PRODUCT_ID"); -var newQuantity = vars.get("local.value"); -if(pid != "" && newQuantity != "") +var pId = vars.get("$field.PRODUCT_ID"); +if(pId != "" && vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) { + var uid = vars.get("$field.SALESORDERITEMID"); + var entity = vars.get("$sys.currententityname"); + ItemUtils.product_IdOnValueChange(pId, uid, entity); + + var oiUtils = new OrderItemUtils(vars.get("$field.SALESORDER_ID")); var curr = vars.exists("$param.Currency_param") ? vars.get("$param.Currency_param") : ""; var contactid = vars.exists("$param.ContactId_param") ? vars.get("$param.ContactId_param") : ""; + var quantity = vars.get("$local.value"); + + var sumUpTop = false; + var price = vars.get("$field.PRICE"); + if(!price) + { + sumUpTop = true; + } - var PriceListFilter = { currency: curr, quantity: newQuantity, relationId: contactid }; - - var ProductDetails = ProductUtils.getProductDetails(pid, PriceListFilter); + var partsListObject = oiUtils.insertPartsList(pId, vars.get("$field.SALESORDERITEMID"), curr, contactid, quantity, true, vars.get("$field.SALESORDER_ID"), sumUpTop); + neon.setFieldValue("$field.itemInsertStatements", JSON.stringify(partsListObject["partsList"])); - if(ProductDetails.productId != undefined && ProductDetails.PriceListToUse != null) + if(sumUpTop)//only sum-up this price if there is no valid Price { - vars.set("$field.PRICE", ProductDetails.PriceListToUse.price); - vars.set("$field.VAT", ProductDetails.PriceListToUse.vat); + neon.setFieldValue("$field.PRICE", partsListObject["topProductInfo"]["price"]); + neon.setFieldValue("$field.VAT", partsListObject["topProductInfo"]["vat"]); } } \ No newline at end of file diff --git a/entity/Orderitem_entity/recordcontainers/db/onDBInsert.js b/entity/Orderitem_entity/recordcontainers/db/onDBInsert.js index 23d5cc030038257a4b6ef7d593867dd0a5a851fd..2c949920f21cecceaf3869b6f81ac6549d18623e 100644 --- a/entity/Orderitem_entity/recordcontainers/db/onDBInsert.js +++ b/entity/Orderitem_entity/recordcontainers/db/onDBInsert.js @@ -1,25 +1,26 @@ +import("system.db"); +import("OfferOrder_lib"); import("system.entities"); -import("system.datetime"); -import("system.neon"); import("system.vars"); -import("system.db"); import("system.util"); import("Order_lib"); import("Product_lib"); import("Sql_lib"); - var rowdata = vars.get("$local.rowdata"); var oid = rowdata["SALESORDERITEM.SALESORDER_ID"]; if(oid != "") { - var curr = vars.exists("$param.Currency_param") ? vars.get("$param.Currency_param") : ""; - var contactid = vars.exists("$param.ContactId_param") ? vars.get("$param.ContactId_param") : ""; var discount = vars.exists("$param.Discount_param") ? vars.get("$param.Discount_param"): ""; var oiUtils = new OrderItemUtils(oid); - oiUtils.insertPartsList(rowdata["SALESORDERITEM.PRODUCT_ID"], vars.get("$local.uid"), curr, contactid, vars.get("$param.Language_param")); - oiUtils.reOrgItems(); + + var insertStatements = JSON.parse(vars.get("$field.itemInsertStatements"));//insert statements get set by insertPartsList in the onvalueChanges of product_id and quantity + + if(insertStatements) + { + db.inserts(insertStatements); + } //update order price var vals = oiUtils.getNetAndVat(); @@ -42,7 +43,6 @@ if(oid != "") "NET": vals[0], "VAT": vals[1] }); - } config.uid(oid); entities.updateRow(config); diff --git a/entity/Orderitem_entity/recordcontainers/db/onDBUpdate.js b/entity/Orderitem_entity/recordcontainers/db/onDBUpdate.js index a763dd4a6bcb8cc0232ef42817f0d777f5cab1ec..55517585ef0974dec7e7964e713775ebf6a944c6 100644 --- a/entity/Orderitem_entity/recordcontainers/db/onDBUpdate.js +++ b/entity/Orderitem_entity/recordcontainers/db/onDBUpdate.js @@ -33,4 +33,44 @@ if(oid != "") } config.uid(oid); entities.updateRow(config); + + + //this process get's executed for every child of this offerItem since we use writeEntiy, so we use the param to make sure we don't execute it for the children + if(vars.getString("$param.IgnoreOnUpdateProcess_param") != "true") + { + var newQuanitity = parseFloat(vars.get("$field.QUANTITY")); + var oldQuantity = parseFloat(vars.get("$local.initialRowdata")["SALESORDERITEM.QUANTITY"]); + var offerItemId = vars.get("$field.SALESORDERITEMID"); + if(newQuanitity != oldQuantity) //quantity changed -> change quantities of the childitems accordingly + { + var multiplier = newQuanitity/oldQuantity; + + var loadConfig = entities.createConfigForLoadingRows().entity("Orderitem_entity").addParameter("OrderId_param", oid).fields(["SALESORDERITEMID", "ASSIGNEDTO", "PRODUCT_ID", "QUANTITY"]) + + var rows = entities.getRows(loadConfig); + + var potentialAsignees = {}; + var offerItemsToUpdate = {}; + var stop = false; + while(stop == false)//we have too loop forall the rows for each row that needs updating, since those are also pontially asignees + { + stop = true; + for(var offeritem in rows)//loop trough all the rows and build offerItemsToUpdate + { + if(!(rows[offeritem]["SALESORDERITEMID"] in offerItemsToUpdate) &&(rows[offeritem]["ASSIGNEDTO"] == offerItemId || rows[offeritem]["ASSIGNEDTO"] in potentialAsignees)) + { + offerItemsToUpdate[rows[offeritem]["SALESORDERITEMID"]] = parseInt(rows[offeritem]["QUANTITY"])*multiplier; + potentialAsignees[rows[offeritem]["SALESORDERITEMID"]] = ""; + stop = false; + } + } + } + + var updateConfig = entities.createConfigForUpdatingRows().entity("Orderitem_entity").addParameter("OrderId_param", oid).addParameter("IgnoreOnUpdateProcess_param", true); + for(var object_Id in offerItemsToUpdate) + { + entities.updateRow(updateConfig.fieldValues({"QUANTITY": offerItemsToUpdate[object_Id]}).uid(object_Id)) + } + } + } } \ No newline at end of file diff --git a/entity/Organisation_entity/Organisation_entity.aod b/entity/Organisation_entity/Organisation_entity.aod index a1c9dc5748145d7807a8927740c9383fa46d735c..1d08483c9cc2c2bc110a4fb4eb94941e39d1bb81 100644 --- a/entity/Organisation_entity/Organisation_entity.aod +++ b/entity/Organisation_entity/Organisation_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Organisation_entity</name> <title>Company</title> <description>former Org</description> @@ -51,7 +51,7 @@ <entityField> <name>NAME</name> <title>Name</title> - <contentType>LONG_TEXT</contentType> + <contentType>TEXT</contentType> <mandatory v="true" /> </entityField> <entityField> @@ -137,56 +137,6 @@ <name>Organisations</name> <documentation>%aditoprj%/entity/Organisation_entity/entityfields/organisations/documentation.adoc</documentation> <recordContainer>db</recordContainer> - <dependencies> - <entityDependency> - <name>85aa363e-d8ba-4df5-8422-bf7aff86a4f8</name> - <entityName>Salesproject_entity</entityName> - <fieldName>Organisations</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>2eb60a6e-575c-4579-9278-5868ffe4bc75</name> - <entityName>Product_entity</entityName> - <fieldName>Organisations</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>be92b8cc-2cba-409c-b139-2b7cc8b567e6</name> - <entityName>DSGVOInfo_entity</entityName> - <fieldName>Organisations</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>308bf57b-0e80-48a7-be13-8cf0d5005118</name> - <entityName>VisitPlanEntry_entity</entityName> - <fieldName>Organisations</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>cbb5b03c-8c47-4aff-8f95-172216d2eff6</name> - <entityName>VisitRecommendation_entity</entityName> - <fieldName>OrganisationConsumer</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>36d6824f-8f2f-4207-9dde-60f0b8f08815</name> - <entityName>District_entity</entityName> - <fieldName>Organisations</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>b64b29e6-59c5-4250-9bc7-b08c85976e7e</name> - <entityName>DistrictContact_entity</entityName> - <fieldName>Organisations</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>6a81a15e-2015-48d6-9f69-0a032b4d5507</name> - <entityName>CampaignParticipant_entity</entityName> - <fieldName>OrganisationConsumer</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>WithPrivate_param</name> @@ -208,14 +158,6 @@ <name>AttributeId_param</name> <expose v="false" /> </entityParameter> - <entityParameter> - <name>DuplicateActionsControl_param</name> - <expose v="false" /> - </entityParameter> - <entityParameter> - <name>DuplicateCurrentContactId_param</name> - <expose v="false" /> - </entityParameter> <entityParameter> <name>MapViewAdditionalFeatures_param</name> <expose v="false" /> @@ -315,38 +257,6 @@ </entityConsumer> <entityProvider> <name>#PROVIDER</name> - <dependencies> - <entityDependency> - <name>1a472ca0-4d27-453c-8de5-a046b86f22fb</name> - <entityName>Object_entity</entityName> - <fieldName>Organisations</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>c79dd08b-8f62-4514-836b-2e176460000c</name> - <entityName>Productprice_entity</entityName> - <fieldName>OrganisationConditions</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>49db6b8b-c27d-4e52-b456-ad48405cc246</name> - <entityName>Salesproject_entity</entityName> - <fieldName>Organisations</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>6a11ffa0-a226-436a-9831-4dc02380e715</name> - <entityName>ObjectProxy_entity</entityName> - <fieldName>Organisations</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>271c43f9-8807-4439-9ab4-906fbf019475</name> - <entityName>Campaign_entity</entityName> - <fieldName>OrganisationConsumer</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityConsumer> <name>Documents</name> @@ -450,6 +360,10 @@ <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/keywordcontactstates/children/containername_param/valueProcess.js</valueProcess> <expose v="false" /> </entityParameter> + <entityParameter> + <name>BlacklistIds_param</name> + <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/keywordcontactstates/children/blacklistids_param/valueProcess.js</valueProcess> + </entityParameter> </children> </entityConsumer> <entityConsumer> @@ -638,26 +552,6 @@ <entityProvider> <name>WithPersonIdFilter</name> <documentation>%aditoprj%/entity/Organisation_entity/entityfields/withpersonidfilter/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>5a456b04-f0ca-4a45-9c1f-bdfdf074434a</name> - <entityName>Contact_entity</entityName> - <fieldName>Organisations</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>a80c3db0-29db-433c-8f7c-4ebf6639ad6d</name> - <entityName>Person_entity</entityName> - <fieldName>Organisations</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>748a3083-89c2-41b4-a233-3fd5364396e9</name> - <entityName>Competition_entity</entityName> - <fieldName>Organisation</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ExcludeOrganisationsByPersonId</name> @@ -681,14 +575,6 @@ <name>ExcludedContactIds_param</name> <expose v="false" /> </entityParameter> - <entityParameter> - <name>DuplicateActionsControl_param</name> - <expose v="false" /> - </entityParameter> - <entityParameter> - <name>DuplicateCurrentContactId_param</name> - <expose v="false" /> - </entityParameter> <entityParameter> <name>MapViewAdditionalFeatures_param</name> <expose v="false" /> @@ -716,20 +602,6 @@ <entityProvider> <name>WithAttribute</name> <documentation>%aditoprj%/entity/Organisation_entity/entityfields/withattribute/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>10480df2-f0b6-4cb6-8bfb-4a468b994996</name> - <entityName>Competition_entity</entityName> - <fieldName>Organisations</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>f368be61-1a15-449f-b37c-b1343069412c</name> - <entityName>Product_entity</entityName> - <fieldName>Organisations</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>AttributeId_param</name> @@ -752,14 +624,6 @@ <name>ExcludedContactIds_param</name> <expose v="true" /> </entityParameter> - <entityParameter> - <name>DuplicateActionsControl_param</name> - <expose v="false" /> - </entityParameter> - <entityParameter> - <name>DuplicateCurrentContactId_param</name> - <expose v="false" /> - </entityParameter> <entityParameter> <name>MapViewAdditionalFeatures_param</name> <expose v="false" /> @@ -937,65 +801,10 @@ <colorProcess>%aditoprj%/entity/Organisation_entity/entityfields/lastactivity/colorProcess.js</colorProcess> <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/lastactivity/valueProcess.js</valueProcess> </entityField> - <entityProvider> - <name>SelfDuplicates</name> - <documentation>%aditoprj%/entity/Organisation_entity/entityfields/selfduplicates/documentation.adoc</documentation> - <titlePlural>Duplicates</titlePlural> - <children> - <entityParameter> - <name>AttributeId_param</name> - <expose v="false" /> - </entityParameter> - <entityParameter> - <name>AttributeKeyId_param</name> - <expose v="false" /> - </entityParameter> - <entityParameter> - <name>FilterPreSet_param</name> - <expose v="false" /> - </entityParameter> - <entityParameter> - <name>OrganisationType_param</name> - <expose v="false" /> - </entityParameter> - <entityParameter> - <name>WithPrivate_param</name> - <expose v="false" /> - </entityParameter> - <entityParameter> - <name>OnlyOwnSupervised_param</name> - <expose v="false" /> - </entityParameter> - <entityParameter> - <name>ExcludeOrganisationsByPersonId</name> - <expose v="false" /> - </entityParameter> - <entityParameter> - <name>MapViewAdditionalFeatures_param</name> - <expose v="false" /> - </entityParameter> - <entityParameter> - <name>MapViewCenterLat_param</name> - <expose v="false" /> - </entityParameter> - <entityParameter> - <name>MapViewCenterLon_param</name> - <expose v="false" /> - </entityParameter> - </children> - </entityProvider> <entityParameter> <name>OnlyShowContactIds_param</name> <expose v="true" /> </entityParameter> - <entityParameter> - <name>DuplicateActionsControl_param</name> - <expose v="true" /> - </entityParameter> - <entityParameter> - <name>DuplicateCurrentContactId_param</name> - <expose v="true" /> - </entityParameter> <entityField> <name>STANDARD_COUNTRY</name> <title>Standard Country</title> @@ -1005,52 +814,11 @@ <name>OnlyOwnSupervised_param</name> <expose v="true" /> </entityParameter> - <entityConsumer> - <name>SelfDuplicatesUncached</name> - <dependency> - <name>dependency</name> - <entityName>Organisation_entity</entityName> - <fieldName>SelfDuplicates</fieldName> - </dependency> - <children> - <entityParameter> - <name>DuplicateActionsControl_param</name> - <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/selfduplicatesuncached/children/duplicateactionscontrol_param/valueProcess.js</valueProcess> - </entityParameter> - <entityParameter> - <name>DuplicateCurrentContactId_param</name> - <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/selfduplicatesuncached/children/duplicatecurrentcontactid_param/valueProcess.js</valueProcess> - <title></title> - </entityParameter> - <entityParameter> - <name>OnlyShowContactIds_param</name> - <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/selfduplicatesuncached/children/onlyshowcontactids_param/valueProcess.js</valueProcess> - </entityParameter> - <entityParameter> - <name>ExcludedContactIds_param</name> - <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/selfduplicatesuncached/children/excludedcontactids_param/valueProcess.js</valueProcess> - </entityParameter> - </children> - </entityConsumer> - <entityConsumer> - <name>CommRestrictions</name> - <dependency> - <name>dependency</name> - <entityName>CommRestriction_Entity</entityName> - <fieldName>CommRestrictions</fieldName> - </dependency> - <children> - <entityParameter> - <name>ContactId_param</name> - <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/commrestrictions/children/contactid_param/valueProcess.js</valueProcess> - </entityParameter> - </children> - </entityConsumer> <entityField> <name>COMMRESTRICTIONS_ACTIVE</name> <title>Commrestrictions</title> <color>$priority-high-color</color> - <displayValueProcess>%aditoprj%/entity/Organisation_entity/entityfields/commrestrictions_active/displayValueProcess.js</displayValueProcess> + <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/commrestrictions_active/valueProcess.js</valueProcess> </entityField> <entityField> <name>STANDARD_ADDRESS</name> @@ -1114,14 +882,6 @@ <name>OrganisationsViaIndex</name> <documentation>%aditoprj%/entity/Organisation_entity/entityfields/organisationsviaindex/documentation.adoc</documentation> <recordContainer>index</recordContainer> - <dependencies> - <entityDependency> - <name>e60b8983-166d-4280-a1a5-f990ad77eeb9</name> - <entityName>AroundLocation_entity</entityName> - <fieldName>Organisations</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ExcludeOrganisationsByPersonId</name> @@ -1135,14 +895,6 @@ <name>AttributeKeyId_param</name> <expose v="false" /> </entityParameter> - <entityParameter> - <name>DuplicateActionsControl_param</name> - <expose v="false" /> - </entityParameter> - <entityParameter> - <name>DuplicateCurrentContactId_param</name> - <expose v="false" /> - </entityParameter> <entityParameter> <name>ExcludedContactIds_param</name> <expose v="false" /> @@ -1208,10 +960,6 @@ <name>OnlyShowContactIds_param</name> <expose v="false" /> </entityParameter> - <entityParameter> - <name>DuplicateCurrentContactId_param</name> - <expose v="false" /> - </entityParameter> <entityParameter> <name>ExcludeOrganisationsByPersonId</name> <expose v="false" /> @@ -1264,52 +1012,6 @@ <name>FilterPreSet_param</name> <expose v="true" /> </entityParameter> - <entityProvider> - <name>NonselfDuplicates</name> - <documentation>%aditoprj%/entity/Organisation_entity/entityfields/nonselfduplicates/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>2e410b9e-5ebc-48ea-9562-da386202d7e8</name> - <entityName>Duplicates_entity</entityName> - <fieldName>DuplicateOrganisationsConsumer</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> - <children> - <entityParameter> - <name>AttributeKeyId_param</name> - <expose v="false" /> - </entityParameter> - <entityParameter> - <name>DuplicateCurrentContactId_param</name> - <expose v="false" /> - </entityParameter> - <entityParameter> - <name>ExcludedContactIds_param</name> - <expose v="false" /> - </entityParameter> - <entityParameter> - <name>OnlyShowContactIds_param</name> - <expose v="true" /> - </entityParameter> - <entityParameter> - <name>OnlyOwnSupervised_param</name> - <expose v="false" /> - </entityParameter> - <entityParameter> - <name>MapViewAdditionalFeatures_param</name> - <expose v="false" /> - </entityParameter> - <entityParameter> - <name>MapViewCenterLon_param</name> - <expose v="false" /> - </entityParameter> - <entityParameter> - <name>MapViewCenterLat_param</name> - <expose v="false" /> - </entityParameter> - </children> - </entityProvider> <entityConsumer> <name>AttributesFilter</name> <dependency> @@ -1418,6 +1120,7 @@ <title>New appointment</title> <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/newappointment/onActionProcess.js</onActionProcess> <iconId>VAADIN:CALENDAR</iconId> + <state>EDITABLE</state> <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/newappointment/stateProcess.js</stateProcess> <tooltip>New Appointment</tooltip> </entityActionField> @@ -1432,7 +1135,7 @@ <title>Add to Campaign</title> <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/addtocampaignfromtable/onActionProcess.js</onActionProcess> <isObjectAction v="false" /> - <isSelectionAction v="false" /> + <selectionType>UNBOUND</selectionType> <iconId>NEON:GROUP_APPOINTMENT</iconId> <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/addtocampaignfromtable/stateProcess.js</stateProcess> <tooltip>Add the selection to a campaign</tooltip> @@ -1475,6 +1178,14 @@ <isObjectAction v="false" /> <iconId>VAADIN:ENVELOPES</iconId> </entityActionField> + <entityActionField> + <name>addPlanningToOrganisations</name> + <title>Create planning</title> + <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/addplanningtoorganisations/onActionProcess.js</onActionProcess> + <isObjectAction v="false" /> + <selectionType>UNBOUND</selectionType> + <iconId>VAADIN:MONEY</iconId> + </entityActionField> </children> </entityActionGroup> <entityActionField> @@ -1499,52 +1210,6 @@ <iconId>VAADIN:ENVELOPE</iconId> <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/newletter/stateProcess.js</stateProcess> </entityActionField> - <entityActionGroup> - <name>DuplicateActions</name> - <title>Duplicate actions</title> - <state>AUTO</state> - <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/stateProcess.js</stateProcess> - <children> - <entityActionField> - <name>IntegrateSelectedIntoCurrentAction</name> - <title>Integrate selected into current contact</title> - <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/onActionProcess.js</onActionProcess> - <isMenuAction v="true" /> - <isObjectAction v="false" /> - <isSelectionAction v="true" /> - <iconId>NEON:IMPORT</iconId> - <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/stateProcess.js</stateProcess> - </entityActionField> - <entityActionField> - <name>IntegrateCurrentIntoSelectedAction</name> - <title>Integrate current into selected contact</title> - <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/onActionProcess.js</onActionProcess> - <isMenuAction v="true" /> - <isObjectAction v="false" /> - <isSelectionAction v="true" /> - <iconId>NEON:EXPORT</iconId> - <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/stateProcess.js</stateProcess> - </entityActionField> - <entityActionField> - <name>IgnoreDuplicate</name> - <title>Ignore Duplicate</title> - <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/ignoreduplicate/onActionProcess.js</onActionProcess> - <isMenuAction v="true" /> - <isObjectAction v="false" /> - <isSelectionAction v="true" /> - <iconId>VAADIN:CLOSE</iconId> - <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/ignoreduplicate/stateProcess.js</stateProcess> - </entityActionField> - <entityActionField> - <name>IgnoreWholeCluster</name> - <title>Ignore whole Cluster</title> - <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/ignorewholecluster/onActionProcess.js</onActionProcess> - <isObjectAction v="false" /> - <iconId>VAADIN:CLOSE</iconId> - <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicateactions/children/ignorewholecluster/stateProcess.js</stateProcess> - </entityActionField> - </children> - </entityActionGroup> <entityActionField> <name>startWorkflow</name> <title>Start workflow</title> @@ -1577,7 +1242,7 @@ <documentation>%aditoprj%/entity/Organisation_entity/entityfields/openaroundlocation/documentation.adoc</documentation> <title>Radius Search</title> <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/openaroundlocation/onActionProcess.js</onActionProcess> - <isSelectionAction v="true" /> + <selectionType>MULTI</selectionType> <iconId>VAADIN:LOCATION_ARROW_CIRCLE_O</iconId> <state>DISABLED</state> <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/openaroundlocation/stateProcess.js</stateProcess> @@ -1602,6 +1267,108 @@ <iconId>VAADIN:CURLY_BRACKETS</iconId> <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/openadminview/stateProcess.js</stateProcess> </entityActionField> + <entityConsumer> + <name>Duplicates</name> + <selectionMode>MULTI</selectionMode> + <selectionModeProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicates/selectionModeProcess.js</selectionModeProcess> + <dependency> + <name>dependency</name> + <entityName>DuplicateOrganisation_entity</entityName> + <fieldName>#PROVIDER</fieldName> + </dependency> + <children> + <entityParameter> + <name>Obj_param</name> + <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/duplicates/children/obj_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityConsumer> + <name>Plannings</name> + <dependency> + <name>dependency</name> + <entityName>Planning_entity</entityName> + <fieldName>Plannings</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContactId_param</name> + <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/plannings/children/contactid_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityConsumer> + <name>Turnovers</name> + <dependency> + <name>dependency</name> + <entityName>Turnover_entity</entityName> + <fieldName>DynamicTurnover</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContactId_param</name> + <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/turnovers/children/contactid_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityConsumer> + <name>conversionrates</name> + <dependency> + <name>dependency</name> + <entityName>SalesprojectConversionRate_entity</entityName> + <fieldName>#PROVIDER</fieldName> + </dependency> + </entityConsumer> + <entityConsumer> + <name>ContactCommunicationSettings</name> + <dependency> + <name>dependency</name> + <entityName>CommunicationSettings_entity</entityName> + <fieldName>SettingsForContact</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContactId_param</name> + <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/contactcommunicationsettings/children/contactid_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityConsumer> + <name>Campaigns</name> + <dependency> + <name>dependency</name> + <entityName>Campaign_entity</entityName> + <fieldName>Campaigns</fieldName> + </dependency> + </entityConsumer> + <entityConsumer> + <name>Bulkmails</name> + <dependency> + <name>dependency</name> + <entityName>BulkMail_entity</entityName> + <fieldName>#PROVIDER</fieldName> + </dependency> + </entityConsumer> + <entityConsumer> + <name>CommunicationSettingStatusKeyword</name> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/Organisation_entity/entityfields/communicationsettingstatuskeyword/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityActionField> + <name>openClassificationOverView</name> + <title>Show Classification</title> + <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/openclassificationoverview/onActionProcess.js</onActionProcess> + <iconId>VAADIN:LIST_OL</iconId> + </entityActionField> </entityFields> <recordContainers> <dbRecordContainer> @@ -1724,11 +1491,13 @@ </dbRecordFieldMapping> <dbRecordFieldMapping> <name>STANDARD_EMAIL_COMMUNICATION.value</name> + <expression>%aditoprj%/entity/Organisation_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js</expression> <isFilterable v="false" /> <isLookupFilter v="false" /> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>STANDARD_PHONE_COMMUNICATION.value</name> + <expression>%aditoprj%/entity/Organisation_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js</expression> <isFilterable v="false" /> <isLookupFilter v="false" /> </dbRecordFieldMapping> @@ -1771,7 +1540,6 @@ </consumerMapping> <dbRecordFieldMapping> <name>COMMRESTRICTIONS_ACTIVE.value</name> - <expression>%aditoprj%/entity/Organisation_entity/recordcontainers/db/recordfieldmappings/commrestrictions_active.value/expression.js</expression> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>STANDARD_ADDRESS.value</name> @@ -1846,15 +1614,6 @@ <groupQueryProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/filterextensions/attribute_filter/groupQueryProcess.js</groupQueryProcess> <filtertype>BASIC</filtertype> </filterExtensionSet> - <filterExtensionSet> - <name>ClassificationType_filter</name> - <filterFieldsProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterFieldsProcess.js</filterFieldsProcess> - <filterValuesProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterValuesProcess.js</filterValuesProcess> - <filterConditionProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterConditionProcess.js</filterConditionProcess> - <isGroupable v="true" /> - <groupQueryProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/groupQueryProcess.js</groupQueryProcess> - <filtertype>BASIC</filtertype> - </filterExtensionSet> <filterExtensionSet> <name>ClassificationGroup_filter</name> <filterFieldsProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationgroup_filter/filterFieldsProcess.js</filterFieldsProcess> @@ -1880,6 +1639,13 @@ <filterConditionProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/filterextensions/responsibleassignment/filterConditionProcess.js</filterConditionProcess> <filtertype>EXTENDED</filtertype> </filterExtension> + <filterExtension> + <name>Duplicates_filter</name> + <title>Duplicates</title> + <contentType>NUMBER</contentType> + <filterConditionProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/filterextensions/duplicates_filter/filterConditionProcess.js</filterConditionProcess> + <filtertype>BASIC</filtertype> + </filterExtension> <filterExtension> <name>Communication_Mail_filter</name> <title>Communication: Mail</title> @@ -1901,6 +1667,30 @@ <filterConditionProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/filterextensions/commincation_link_filter/filterConditionProcess.js</filterConditionProcess> <filtertype>BASIC</filtertype> </filterExtension> + <filterExtension> + <name>CampaignParticipation_filter</name> + <title>Campaign participation</title> + <contentType>TEXT</contentType> + <useConsumer v="true" /> + <consumer>Campaigns</consumer> + <filterConditionProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/filterextensions/campaignparticipation_filter/filterConditionProcess.js</filterConditionProcess> + <filtertype>BASIC</filtertype> + </filterExtension> + <filterExtension> + <name>BulkmailReceived_filter</name> + <title>Received Bulk Mail</title> + <contentType>TEXT</contentType> + <useConsumer v="true" /> + <consumer>Bulkmails</consumer> + <filterConditionProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/filterextensions/bulkmailreceived_filter/filterConditionProcess.js</filterConditionProcess> + <filtertype>BASIC</filtertype> + </filterExtension> + <filterExtensionSet> + <name>CommunicationSettings_filter</name> + <filterFieldsProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/filterextensions/communicationsettings_filter/filterFieldsProcess.js</filterFieldsProcess> + <filterConditionProcess>%aditoprj%/entity/Organisation_entity/recordcontainers/db/filterextensions/communicationsettings_filter/filterConditionProcess.js</filterConditionProcess> + <filtertype>BASIC</filtertype> + </filterExtensionSet> </filterExtensions> </dbRecordContainer> <indexRecordContainer> diff --git a/entity/Organisation_entity/entityfields/360degreeobjects/children/objectrowid_param/valueProcess.js b/entity/Organisation_entity/entityfields/360degreeobjects/children/objectrowid_param/valueProcess.js index aee05ab473a438d99830659e02d26be864a17c3f..8ab26e2080a446436766c55a45e57659f81f7af6 100644 --- a/entity/Organisation_entity/entityfields/360degreeobjects/children/objectrowid_param/valueProcess.js +++ b/entity/Organisation_entity/entityfields/360degreeobjects/children/objectrowid_param/valueProcess.js @@ -5,6 +5,9 @@ import("system.result"); var contactids = newSelect( "CONTACTID" ) .from("CONTACT") .where("CONTACT.ORGANISATION_ID", vars.getString("$field.ORGANISATIONID")) - .orderBy("CONTACT.PERSON_ID DESC").arrayColumn(); + // ordering is necessary because the 360DegreeObject_entity will use the first + // entry as default for creating offers, salesprojects and so on + .orderBy(new SqlMaskingUtils().isNull("PERSON_ID", "'0'")) + .arrayColumn(); result.string( JSON.stringify(contactids) ); \ No newline at end of file diff --git a/entity/Organisation_entity/entityfields/commrestrictions/children/contactid_param/valueProcess.js b/entity/Organisation_entity/entityfields/commrestrictions/children/contactid_param/valueProcess.js deleted file mode 100644 index 08da3b121c951607015025c5ed6ea3ea8de1a4cb..0000000000000000000000000000000000000000 --- a/entity/Organisation_entity/entityfields/commrestrictions/children/contactid_param/valueProcess.js +++ /dev/null @@ -1,4 +0,0 @@ -import("system.result"); -import("system.vars"); - -result.string(vars.getString("$field.CONTACTID")); \ No newline at end of file diff --git a/entity/Organisation_entity/entityfields/commrestrictions_active/displayValueProcess.js b/entity/Organisation_entity/entityfields/commrestrictions_active/displayValueProcess.js deleted file mode 100644 index 7ab26545fc8d0bb63d06c4382eca2e3ea68e0971..0000000000000000000000000000000000000000 --- a/entity/Organisation_entity/entityfields/commrestrictions_active/displayValueProcess.js +++ /dev/null @@ -1,8 +0,0 @@ -import("system.vars"); -import("system.translate"); -import("system.result"); - -if (vars.get("$field.COMMRESTRICTIONS_ACTIVE").trim()) -{ // bug in SqlMaskingUtils.concat. -> use " " as seperator and replace " " by ", " - result.string(translate.text("No advertising by") + " " + ((vars.get("$field.COMMRESTRICTIONS_ACTIVE")).trim()).replace("/ +/g", ", ")); -} diff --git a/entity/Organisation_entity/entityfields/commrestrictions_active/valueProcess.js b/entity/Organisation_entity/entityfields/commrestrictions_active/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..eb0180412d1da157d1c0c7c2b6cc9de3818d508b --- /dev/null +++ b/entity/Organisation_entity/entityfields/commrestrictions_active/valueProcess.js @@ -0,0 +1,9 @@ +import("Contact_lib"); +import("system.neon"); +import("system.result"); +import("system.vars"); + +if (vars.get("$sys.viewmode") == neon.FRAME_VIEWMODE_DATASET) +{ + result.string(ContactUtils.getCommunicationRejectionSummary(vars.get("$field.CONTACTID"))); +} diff --git a/entity/Organisation_entity/entityfields/communications/children/contactsmaincountry_param/valueProcess.js b/entity/Organisation_entity/entityfields/communications/children/contactsmaincountry_param/valueProcess.js index 04b4079531ba7cc7a965aa5162e950e6213ecfdf..e02b6634f4b41a21ddba3d197f3429978f4fb0c9 100644 --- a/entity/Organisation_entity/entityfields/communications/children/contactsmaincountry_param/valueProcess.js +++ b/entity/Organisation_entity/entityfields/communications/children/contactsmaincountry_param/valueProcess.js @@ -1,7 +1,21 @@ +import("Entity_lib"); import("system.logging"); import("system.vars"); import("system.result"); +//references needed for auto refresh: +"$field.Addresses.insertedRows"; +"$field.Addresses.changedRows"; +"$field.Addresses.deletedRows"; + var country = vars.get("$field.STANDARD_COUNTRY"); if (country) - result.string(country); \ No newline at end of file +{ + result.string(country); +} +else +{ + var addressRows = EntityConsumerRowsHelper.getCurrentConsumerRows("Addresses", ["COUNTRY"]); + if(addressRows.length > 0) + result.string(addressRows[0]["COUNTRY"]); +} diff --git a/entity/Organisation_entity/entityfields/communicationsettingstatuskeyword/children/containername_param/valueProcess.js b/entity/Organisation_entity/entityfields/communicationsettingstatuskeyword/children/containername_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..6e9094784904aeb14e3231ab86844965215e4481 --- /dev/null +++ b/entity/Organisation_entity/entityfields/communicationsettingstatuskeyword/children/containername_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.result"); +import("KeywordRegistry_basic"); + +result.string($KeywordRegistry.communicationSettingStatus()); \ No newline at end of file diff --git a/entity/Organisation_entity/entityfields/selfduplicatesuncached/children/duplicatecurrentcontactid_param/valueProcess.js b/entity/Organisation_entity/entityfields/contactcommunicationsettings/children/contactid_param/valueProcess.js similarity index 98% rename from entity/Organisation_entity/entityfields/selfduplicatesuncached/children/duplicatecurrentcontactid_param/valueProcess.js rename to entity/Organisation_entity/entityfields/contactcommunicationsettings/children/contactid_param/valueProcess.js index 821415ae694dd9c3d98a7703f4c59b81a37f524b..7b6137b4d105e9ba592cf8ef6e796fb838a32b09 100644 --- a/entity/Organisation_entity/entityfields/selfduplicatesuncached/children/duplicatecurrentcontactid_param/valueProcess.js +++ b/entity/Organisation_entity/entityfields/contactcommunicationsettings/children/contactid_param/valueProcess.js @@ -1,3 +1,4 @@ import("system.vars"); import("system.result"); + result.string(vars.get("$field.CONTACTID")); \ No newline at end of file diff --git a/entity/Organisation_entity/entityfields/duplicateactions/children/ignoreduplicate/onActionProcess.js b/entity/Organisation_entity/entityfields/duplicateactions/children/ignoreduplicate/onActionProcess.js deleted file mode 100644 index c9289cbd0ef896d7dbcf5eae668bac8a87e861da..0000000000000000000000000000000000000000 --- a/entity/Organisation_entity/entityfields/duplicateactions/children/ignoreduplicate/onActionProcess.js +++ /dev/null @@ -1,10 +0,0 @@ -import("system.neon"); -import("system.vars"); -import("DuplicateScanner_lib"); - -let sourceContactId = vars.get("$param.DuplicateCurrentContactId_param"); -let selectedContactId = vars.get("$sys.selection"); -let clusterId = DuplicateScannerUtils.getClusterId(sourceContactId); -DuplicateScannerUtils.createUnrelatedDuplicateRelation(sourceContactId, selectedContactId, clusterId); - -neon.refreshAll(); \ No newline at end of file diff --git a/entity/Organisation_entity/entityfields/duplicateactions/children/ignoreduplicate/stateProcess.js b/entity/Organisation_entity/entityfields/duplicateactions/children/ignoreduplicate/stateProcess.js deleted file mode 100644 index b736eb15f5b18e779e37281fe216c9297ca86191..0000000000000000000000000000000000000000 --- a/entity/Organisation_entity/entityfields/duplicateactions/children/ignoreduplicate/stateProcess.js +++ /dev/null @@ -1,11 +0,0 @@ -import("system.logging"); -import("system.vars"); -import("system.neon"); -import("system.result"); - -//Actions to show in the duplicates view inside the persons main view - -let actionState = vars.get("$param.DuplicateActionsControl_param"); - -if(actionState != null && actionState != "1")//todo replace with keyword - result.string(neon.COMPONENTSTATE_INVISIBLE); \ No newline at end of file diff --git a/entity/Organisation_entity/entityfields/duplicateactions/children/ignorewholecluster/onActionProcess.js b/entity/Organisation_entity/entityfields/duplicateactions/children/ignorewholecluster/onActionProcess.js deleted file mode 100644 index 99d7f55925b3fed54dc2d5e20604793b6e9fd862..0000000000000000000000000000000000000000 --- a/entity/Organisation_entity/entityfields/duplicateactions/children/ignorewholecluster/onActionProcess.js +++ /dev/null @@ -1,21 +0,0 @@ -import("system.logging"); -import("system.neon"); -import("system.vars"); -import("DuplicateScanner_lib"); -import("system.notification"); - -let contactId = vars.get("$field.CONTACTID"); -let clusterId = DuplicateScannerUtils.getClusterId(contactId); - -let duplicateContactIdsInClusterRay = DuplicateScannerUtils.getCachedDuplicatesForClusterId(clusterId) - -if(duplicateContactIdsInClusterRay.length > 1) -{ - let referenceDuplicateId = duplicateContactIdsInClusterRay[0]; - for (let i = 1; i < duplicateContactIdsInClusterRay.length; i++) - { - DuplicateScannerUtils.createUnrelatedDuplicateRelation(referenceDuplicateId, duplicateContactIdsInClusterRay[i], clusterId); - } -} - - diff --git a/entity/Organisation_entity/entityfields/duplicateactions/children/ignorewholecluster/stateProcess.js b/entity/Organisation_entity/entityfields/duplicateactions/children/ignorewholecluster/stateProcess.js deleted file mode 100644 index fdd913ad06bf2815da3127d405d21b258c4ad795..0000000000000000000000000000000000000000 --- a/entity/Organisation_entity/entityfields/duplicateactions/children/ignorewholecluster/stateProcess.js +++ /dev/null @@ -1,11 +0,0 @@ -import("system.logging"); -import("system.vars"); -import("system.neon"); -import("system.result"); - -//Actions to show in the duplicates view inside the persons main view - -let actionState = vars.get("$param.DuplicateActionsControl_param"); - -if(actionState != null && actionState != "2")//todo replace with keyword - result.string(neon.COMPONENTSTATE_INVISIBLE); \ No newline at end of file diff --git a/entity/Organisation_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/stateProcess.js b/entity/Organisation_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/stateProcess.js deleted file mode 100644 index b736eb15f5b18e779e37281fe216c9297ca86191..0000000000000000000000000000000000000000 --- a/entity/Organisation_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/stateProcess.js +++ /dev/null @@ -1,11 +0,0 @@ -import("system.logging"); -import("system.vars"); -import("system.neon"); -import("system.result"); - -//Actions to show in the duplicates view inside the persons main view - -let actionState = vars.get("$param.DuplicateActionsControl_param"); - -if(actionState != null && actionState != "1")//todo replace with keyword - result.string(neon.COMPONENTSTATE_INVISIBLE); \ No newline at end of file diff --git a/entity/Organisation_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/stateProcess.js b/entity/Organisation_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/stateProcess.js deleted file mode 100644 index b736eb15f5b18e779e37281fe216c9297ca86191..0000000000000000000000000000000000000000 --- a/entity/Organisation_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/stateProcess.js +++ /dev/null @@ -1,11 +0,0 @@ -import("system.logging"); -import("system.vars"); -import("system.neon"); -import("system.result"); - -//Actions to show in the duplicates view inside the persons main view - -let actionState = vars.get("$param.DuplicateActionsControl_param"); - -if(actionState != null && actionState != "1")//todo replace with keyword - result.string(neon.COMPONENTSTATE_INVISIBLE); \ No newline at end of file diff --git a/entity/Organisation_entity/entityfields/duplicateactions/stateProcess.js b/entity/Organisation_entity/entityfields/duplicateactions/stateProcess.js deleted file mode 100644 index 5b8b24021ddfcba34a258bf7af7d4ec5ec65852a..0000000000000000000000000000000000000000 --- a/entity/Organisation_entity/entityfields/duplicateactions/stateProcess.js +++ /dev/null @@ -1,11 +0,0 @@ -import("system.logging"); -import("system.vars"); -import("system.neon"); -import("system.result"); - -//Actions to show in the duplicates view inside the persons main view - -let actionState = vars.get("$param.DuplicateActionsControl_param"); - -if(actionState == null || actionState == "0")//todo replace with keyword - result.string(neon.COMPONENTSTATE_INVISIBLE); \ No newline at end of file diff --git a/entity/Organisation_entity/entityfields/duplicates/children/obj_param/valueProcess.js b/entity/Organisation_entity/entityfields/duplicates/children/obj_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..39bdfae5361be160d838627fc4e4de2d45eb9b82 --- /dev/null +++ b/entity/Organisation_entity/entityfields/duplicates/children/obj_param/valueProcess.js @@ -0,0 +1,20 @@ +import("system.vars"); +import("system.result"); + +result.string(JSON.stringify({ + CONTACTID: vars.get("$field.CONTACTID"), + NAME: vars.get("$field.NAME"), + ADDRESS_ID: vars.get("$field.ADDRESS_ID"), + CUSTOMERCODE: vars.get("$field.CUSTOMERCODE"), + LANGUAGE: vars.get("$field.LANGUAGE"), + TYPE: vars.get("$field.TYPE"), + STATUS: vars.get("$field.STATUS"), + STANDARD_ADDRESS: vars.get("$field.STANDARD_ADDRESS"), + STANDARD_CITY: vars.get("$field.STANDARD_CITY"), + STANDARD_COUNTRY: vars.get("$field.STANDARD_COUNTRY"), + STANDARD_EMAIL_COMMUNICATION: vars.get("$field.STANDARD_EMAIL_COMMUNICATION"), + STANDARD_LAT: vars.get("$field.STANDARD_LAT"), + STANDARD_LON: vars.get("$field.STANDARD_LON"), + STANDARD_PHONE_COMMUNICATION: vars.get("$field.STANDARD_PHONE_COMMUNICATION"), + STANDARD_ZIP: vars.get("$field.STANDARD_ZIP") +})); diff --git a/entity/Organisation_entity/entityfields/duplicates/selectionModeProcess.js b/entity/Organisation_entity/entityfields/duplicates/selectionModeProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..c92317456ba1a7476401171e875526c8eff6fa76 --- /dev/null +++ b/entity/Organisation_entity/entityfields/duplicates/selectionModeProcess.js @@ -0,0 +1,9 @@ +import("system.result"); +import("system.vars"); +import("system.neon"); + +result.string( + vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW || + vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT ? + "NONE" : "MULTI" +); diff --git a/entity/Organisation_entity/entityfields/filterviewactiongroup/children/addplanningtoorganisations/onActionProcess.js b/entity/Organisation_entity/entityfields/filterviewactiongroup/children/addplanningtoorganisations/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..4015c373ea1b0e8eaec6b01b545bcfa496111c96 --- /dev/null +++ b/entity/Organisation_entity/entityfields/filterviewactiongroup/children/addplanningtoorganisations/onActionProcess.js @@ -0,0 +1,17 @@ +import("system.vars"); +import("system.neon"); + +var params = {}; +var selection = vars.get("$sys.selection"); + +if(selection.length > 0) +{ + params["SelectedOrganisations_param"] = JSON.stringify(vars.get("$sys.selection")); +} +else +{ + params["OrganisationsWithFilter_param"] = JSON.stringify(vars.get("$sys.filter")); +} + + +neon.openContext("PlanningAddToOrganisations", "PlanningAddToOrganisations_view", null, neon.OPERATINGSTATE_NEW, params); diff --git a/entity/Organisation_entity/entityfields/keywordcontactstates/children/blacklistids_param/valueProcess.js b/entity/Organisation_entity/entityfields/keywordcontactstates/children/blacklistids_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..a52cc0873588ad599c0efe525b8ec15716c7ec07 --- /dev/null +++ b/entity/Organisation_entity/entityfields/keywordcontactstates/children/blacklistids_param/valueProcess.js @@ -0,0 +1,4 @@ +import("KeywordRegistry_basic"); +import("system.result"); + +result.object([$KeywordRegistry.contactStatus$markToDelete()]); \ No newline at end of file diff --git a/entity/Organisation_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js b/entity/Organisation_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js index 17ba5b0226b9dfea75bf805ada3e957ad6da28eb..723ad4e60c53d97f7a480574168404dc1a1fb465 100644 --- a/entity/Organisation_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js +++ b/entity/Organisation_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js @@ -3,7 +3,7 @@ import("system.result"); import("Context_lib"); var res = []; -res.push({id: vars.get("$field.CONTACTID"), tableNames: ["CONTACT", "COMMUNICATION", "ADDRESS", "AB_ATTRIBUTERELATION"]}); +res.push({id: vars.get("$field.CONTACTID"), tableNames: ["CONTACT", "COMMUNICATION", "ADDRESS", "AB_ATTRIBUTERELATION", "COMMUNICATIONSETTINGS"]}); res.push({id: vars.get("$field.ORGANISATIONID"), tableNames: ["ORGANISATION"]}); res = JSON.stringify(res);//currently only strings can be passed as param diff --git a/entity/Organisation_entity/entityfields/newemail/onActionProcess.js b/entity/Organisation_entity/entityfields/newemail/onActionProcess.js index a46efc111ddcfd413f0dcfff1c46e9fc6562b64e..ae42fcf1dfba4735bfe64eff2b80bfc9b7fb2686 100644 --- a/entity/Organisation_entity/entityfields/newemail/onActionProcess.js +++ b/entity/Organisation_entity/entityfields/newemail/onActionProcess.js @@ -2,4 +2,5 @@ import("system.vars"); import("Email_lib"); import("KeywordRegistry_basic"); -EmailWritingUtils.openNewMail(vars.getString("$field.CONTACTID"), null, vars.get("$sys.currentcontextname"), null, null, null, null, null, $KeywordRegistry.documentTemplateTypeCategory$single()); \ No newline at end of file +EmailWritingUtils.openNewMail(vars.getString("$field.CONTACTID"), null, vars.get("$sys.currentcontextname"), null, null, null, null, null, + $KeywordRegistry.documentTemplateTypeCategory$single()); \ No newline at end of file diff --git a/entity/Organisation_entity/entityfields/newemail/stateProcess.js b/entity/Organisation_entity/entityfields/newemail/stateProcess.js index aefbc6e8f76f99c4281890f3461553c49562d5b9..5c748f19d4d580b9706725fb5572fe18d7473062 100644 --- a/entity/Organisation_entity/entityfields/newemail/stateProcess.js +++ b/entity/Organisation_entity/entityfields/newemail/stateProcess.js @@ -3,5 +3,7 @@ import("system.neon"); import("system.vars"); import("KeywordRegistry_basic"); -if (vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$inactive()) - result.string(neon.COMPONENTSTATE_DISABLED); \ No newline at end of file +if (vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$inactive() || vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$markToDelete()) +{ + result.string(neon.COMPONENTSTATE_DISABLED); +} \ No newline at end of file diff --git a/entity/Organisation_entity/entityfields/nonselfduplicates/documentation.adoc b/entity/Organisation_entity/entityfields/nonselfduplicates/documentation.adoc deleted file mode 100644 index dc35980c12405163da2417e0472197dd9e3c7285..0000000000000000000000000000000000000000 --- a/entity/Organisation_entity/entityfields/nonselfduplicates/documentation.adoc +++ /dev/null @@ -1,3 +0,0 @@ -Provides organisation duplicate-records without the `Organisation_entity` scope, for example for the `Duplicates_entity`. - -The provider is named `NonselfDuplicates` to differentiate this provider and the `SelfDuplicates`-provider. \ No newline at end of file diff --git a/entity/Organisation_entity/entityfields/openclassificationoverview/onActionProcess.js b/entity/Organisation_entity/entityfields/openclassificationoverview/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..20382b740f4628039b481ff7bd875e0a205cab33 --- /dev/null +++ b/entity/Organisation_entity/entityfields/openclassificationoverview/onActionProcess.js @@ -0,0 +1,7 @@ +import("system.neon"); +import("ClassificationUpdate_lib"); +import("system.vars"); + +var classificationData = ClassificationUtils.executeUpdating(false, vars.get("$field.CONTACTID"), "Organisation"); + +neon.openContext("Classification", "ClassificationTree_view", null, neon.OPERATINGSTATE_SEARCH, {"ClassificationContent_param": classificationData}, null); \ No newline at end of file diff --git a/entity/Organisation_entity/entityfields/organisationid/valueProcess.js b/entity/Organisation_entity/entityfields/organisationid/valueProcess.js index 056f5c94f173d94976edc1ce66ca20d57ecfb0ea..2f2038a392ead49738f56f41ee304f0d5e5d10b4 100644 --- a/entity/Organisation_entity/entityfields/organisationid/valueProcess.js +++ b/entity/Organisation_entity/entityfields/organisationid/valueProcess.js @@ -3,5 +3,7 @@ import("system.result"); import("system.neon"); import("system.util"); -if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) - result.string(util.getNewUUID()); \ No newline at end of file +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) +{ + result.string(util.getNewUUID()); +} \ No newline at end of file diff --git a/entity/Organisation_entity/entityfields/orgreportdispatch/children/dispatchorgreport/onActionProcess.js b/entity/Organisation_entity/entityfields/orgreportdispatch/children/dispatchorgreport/onActionProcess.js index ca54b8d0ce3503663165304eea9856fae5ff423c..f5b721ea2e143660d01fa2502a898d7154263f09 100644 --- a/entity/Organisation_entity/entityfields/orgreportdispatch/children/dispatchorgreport/onActionProcess.js +++ b/entity/Organisation_entity/entityfields/orgreportdispatch/children/dispatchorgreport/onActionProcess.js @@ -1,8 +1,9 @@ import("system.logging"); -import("Organisation_lib"); import("system.translate"); import("system.vars"); import("system.db"); +import("KeywordRegistry_basic"); +import("Organisation_lib"); import("MimeType_lib"); import("Email_lib"); import("Order_lib"); @@ -21,4 +22,5 @@ orgReport.filename = emailFilename + ".pdf"; attachmentArray[0] = orgReport; -EmailWritingUtils.sendReportAsMail(orgContactId, attachmentArray, "Organisation", null, emailFilename, null, null); +EmailWritingUtils.sendReportAsMail(orgContactId, attachmentArray, "Organisation", null, emailFilename, null, null, + $KeywordRegistry.documentTemplateTypeCategory$single()) diff --git a/entity/Person_entity/entityfields/selfduplicatesuncached/children/duplicatecurrentcontactid_param/valueProcess.js b/entity/Organisation_entity/entityfields/plannings/children/contactid_param/valueProcess.js similarity index 98% rename from entity/Person_entity/entityfields/selfduplicatesuncached/children/duplicatecurrentcontactid_param/valueProcess.js rename to entity/Organisation_entity/entityfields/plannings/children/contactid_param/valueProcess.js index 821415ae694dd9c3d98a7703f4c59b81a37f524b..7b6137b4d105e9ba592cf8ef6e796fb838a32b09 100644 --- a/entity/Person_entity/entityfields/selfduplicatesuncached/children/duplicatecurrentcontactid_param/valueProcess.js +++ b/entity/Organisation_entity/entityfields/plannings/children/contactid_param/valueProcess.js @@ -1,3 +1,4 @@ import("system.vars"); import("system.result"); + result.string(vars.get("$field.CONTACTID")); \ No newline at end of file diff --git a/entity/Organisation_entity/entityfields/selfduplicates/documentation.adoc b/entity/Organisation_entity/entityfields/selfduplicates/documentation.adoc deleted file mode 100644 index 396162acb9e2db72c8c1090f4fdda9eb84a95738..0000000000000000000000000000000000000000 --- a/entity/Organisation_entity/entityfields/selfduplicates/documentation.adoc +++ /dev/null @@ -1 +0,0 @@ -Provides organisation duplicate-records within the `Organisation_entity` scope itself. \ No newline at end of file diff --git a/entity/Organisation_entity/entityfields/selfduplicatesuncached/children/duplicateactionscontrol_param/valueProcess.js b/entity/Organisation_entity/entityfields/selfduplicatesuncached/children/duplicateactionscontrol_param/valueProcess.js deleted file mode 100644 index 81570217c3ecd3cf76deb5e14d7ac0a6121a59bb..0000000000000000000000000000000000000000 --- a/entity/Organisation_entity/entityfields/selfduplicatesuncached/children/duplicateactionscontrol_param/valueProcess.js +++ /dev/null @@ -1,2 +0,0 @@ -import("system.result"); -result.string("1");//todo use keyword \ No newline at end of file diff --git a/entity/Organisation_entity/entityfields/selfduplicatesuncached/children/excludedcontactids_param/valueProcess.js b/entity/Organisation_entity/entityfields/selfduplicatesuncached/children/excludedcontactids_param/valueProcess.js deleted file mode 100644 index 849632882bbabd4e65dfb25c7dc984366bde5116..0000000000000000000000000000000000000000 --- a/entity/Organisation_entity/entityfields/selfduplicatesuncached/children/excludedcontactids_param/valueProcess.js +++ /dev/null @@ -1,7 +0,0 @@ -import("system.logging"); -import("system.vars"); -import("system.result"); -import("DuplicateScanner_lib"); - -let unrelatedIds = DuplicateScannerUtils.getUnrelatedRelationsForDuplicate(vars.get("$field.CONTACTID")); -result.string(JSON.stringify(unrelatedIds)); \ No newline at end of file diff --git a/entity/Organisation_entity/entityfields/selfduplicatesuncached/children/onlyshowcontactids_param/valueProcess.js b/entity/Organisation_entity/entityfields/selfduplicatesuncached/children/onlyshowcontactids_param/valueProcess.js deleted file mode 100644 index 77f449d52a0995e5bb7e8ba94746a1659bf36001..0000000000000000000000000000000000000000 --- a/entity/Organisation_entity/entityfields/selfduplicatesuncached/children/onlyshowcontactids_param/valueProcess.js +++ /dev/null @@ -1,55 +0,0 @@ -import("system.project"); -import("system.indexsearch"); -import("system.vars"); -import("DuplicateScanner_lib"); -import("system.result"); - -var scannerName = "OrganisationDuplicates"; -var targetEntity = "Organisation_entity"; -var valuesToCheck = {}; -var entityFieldsToLoad = DuplicateScannerUtils.getEntityFieldObjectFromConfig(scannerName, targetEntity); - -var idsForEmptyResult = JSON.stringify(["nodata"]); - -if (entityFieldsToLoad == null) - result.string(idsForEmptyResult); -else -{ - //Read the values of all available entity fields and write the fieldname7value combination - //as key/value pairs into an object. This is used to trigger the scan for duplicates - - vars.get("$field.NAME") - vars.get("$field.STANDARD_CITY"); - vars.get("$field.STANDARD_ZIP"); - vars.get("$field.STANDARD_ADDRESS"); - - var allFieldsToLoad = entityFieldsToLoad.entityFields.concat(entityFieldsToLoad.entityIdField); - allFieldsToLoad.forEach(function (field) - { - var fieldValue = vars.get("$field." + field); - if (fieldValue) - valuesToCheck[field] = fieldValue; - }); - - var scanResults = []; - - //don't search if only the id field has a value - var fieldsToCheck = Object.keys(valuesToCheck); - if (!(fieldsToCheck.length === 0 || (fieldsToCheck.length === 1 && entityFieldsToLoad.entityIdField in valuesToCheck))) - scanResults = DuplicateScannerUtils.scanForDuplicates(scannerName, targetEntity, valuesToCheck, null) || []; - - var duplicateIds = scanResults.map(function (scanResult) - { - return scanResult[indexsearch.FIELD_ID]; - }); - - /* - * To achieve that if there are no duplicates, no contacts should be shown and therefore returned by the - * recordcontainer, an invalid id gets returned. It then is used in the conditionProcess to load the duplicates. - * Because of its invalidity, no records are shown. - */ - if (duplicateIds.length == 0) - result.string(idsForEmptyResult); - else - result.string(JSON.stringify(duplicateIds)); -} \ No newline at end of file diff --git a/entity/Address_entity/entityfields/cityvalidation/children/country_param/valueProcess.js b/entity/Organisation_entity/entityfields/turnovers/children/contactid_param/valueProcess.js similarity index 52% rename from entity/Address_entity/entityfields/cityvalidation/children/country_param/valueProcess.js rename to entity/Organisation_entity/entityfields/turnovers/children/contactid_param/valueProcess.js index 41f3b8dc1a9b50c6ae934a4fae1402d699cc87b8..7b6137b4d105e9ba592cf8ef6e796fb838a32b09 100644 --- a/entity/Address_entity/entityfields/cityvalidation/children/country_param/valueProcess.js +++ b/entity/Organisation_entity/entityfields/turnovers/children/contactid_param/valueProcess.js @@ -1,4 +1,4 @@ -import("system.result"); import("system.vars"); +import("system.result"); -result.string(vars.get("$field.COUNTRY")); \ No newline at end of file +result.string(vars.get("$field.CONTACTID")); \ No newline at end of file diff --git a/entity/Organisation_entity/initFilterProcess.js b/entity/Organisation_entity/initFilterProcess.js index 936a623f599055fc4fb5fa81c850fc7d323bff22..afecc1ede02d6f412681545610696b1efa17dc90 100644 --- a/entity/Organisation_entity/initFilterProcess.js +++ b/entity/Organisation_entity/initFilterProcess.js @@ -5,15 +5,10 @@ import("KeywordRegistry_basic"); import("system.result"); var filter = vars.get("$param.FilterPreSet_param"); - -var res; -if (filter) - res = filter; -else if (vars.get("$sys.presentationmode") === neon.CONTEXT_PRESENTATIONMODE_FILTER) +if(!filter && vars.get("$sys.presentationmode") === neon.CONTEXT_PRESENTATIONMODE_FILTER) { var statusInactive = $KeywordRegistry.contactStatus$inactive(); - - filter = { + filter = JSON.stringify({ type: "group", operator: "AND", childs: [{ @@ -24,9 +19,9 @@ else if (vars.get("$sys.presentationmode") === neon.CONTEXT_PRESENTATIONMODE_FIL key: statusInactive, value: KeywordUtils.getViewValue($KeywordRegistry.contactStatus(), statusInactive) }] - }; - res = JSON.stringify(filter); + }); +} +if(filter) +{ + result.string(filter); } - -if (res) - result.string(res); \ No newline at end of file diff --git a/entity/Organisation_entity/recordcontainers/db/filterextensions/bulkmailreceived_filter/filterConditionProcess.js b/entity/Organisation_entity/recordcontainers/db/filterextensions/bulkmailreceived_filter/filterConditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..d3faf412183151d3c87fb8b5b1aa91785f096fcf --- /dev/null +++ b/entity/Organisation_entity/recordcontainers/db/filterextensions/bulkmailreceived_filter/filterConditionProcess.js @@ -0,0 +1,23 @@ +import("KeywordRegistry_basic"); +import("Sql_lib"); +import("system.result"); +import("system.vars"); + +var bulkmailRecipientSql = newSelect("BULKMAILRECIPIENTID") + .from("BULKMAILRECIPIENT") + .where("BULKMAILRECIPIENT.CONTACT_ID = CONTACT.CONTACTID") + .and("BULKMAILRECIPIENT.STATUS", $KeywordRegistry.bulkMailRecipientStatus$sent()); + +var condType = SqlBuilder.EXISTS(); +var operator = vars.get("$local.comparison"); + +if (operator == "NOT_EQUAL" || operator == "ISNULL") +{ + condType = SqlBuilder.NOT_EXISTS(); +} +if (operator == "EQUAL" || operator == "NOT_EQUAL") +{ + bulkmailRecipientSql.and("BULKMAILRECIPIENT.BULKMAIL_ID", vars.get("$local.rawvalue")); +} + +result.string(newWhere(null, bulkmailRecipientSql, condType)); \ No newline at end of file diff --git a/entity/Organisation_entity/recordcontainers/db/filterextensions/campaignparticipation_filter/filterConditionProcess.js b/entity/Organisation_entity/recordcontainers/db/filterextensions/campaignparticipation_filter/filterConditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..d3472ac783401b760e6f0b59b7737117947583a2 --- /dev/null +++ b/entity/Organisation_entity/recordcontainers/db/filterextensions/campaignparticipation_filter/filterConditionProcess.js @@ -0,0 +1,21 @@ +import("Sql_lib"); +import("system.result"); +import("system.vars"); + +var campaignParticipantSql = newSelect("CAMPAIGNPARTICIPANTID") + .from("CAMPAIGNPARTICIPANT") + .where("CAMPAIGNPARTICIPANT.CONTACT_ID = CONTACT.CONTACTID"); + +var condType = SqlBuilder.EXISTS(); +var operator = vars.get("$local.comparison"); + +if (operator == "NOT_EQUAL" || operator == "ISNULL") +{ + condType = SqlBuilder.NOT_EXISTS(); +} +if (operator == "EQUAL" || operator == "NOT_EQUAL") +{ + campaignParticipantSql.and("CAMPAIGNPARTICIPANT.CAMPAIGN_ID", vars.get("$local.rawvalue")); +} + +result.string(newWhere(null, campaignParticipantSql, condType)); \ No newline at end of file diff --git a/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterConditionProcess.js b/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterConditionProcess.js deleted file mode 100644 index 5875efb7699dfc5aaa3b567c912990895b03eded..0000000000000000000000000000000000000000 --- a/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterConditionProcess.js +++ /dev/null @@ -1,6 +0,0 @@ -import("system.result"); -import("ClassificationFilter_lib"); - -var sqlCond = ClassificationTypeFilterUtils.makeFilterConditionSql(); - -result.string(sqlCond); \ No newline at end of file diff --git a/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterFieldsProcess.js b/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterFieldsProcess.js deleted file mode 100644 index eebe4d838230a9702e630d919349e7c5aceefb9f..0000000000000000000000000000000000000000 --- a/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterFieldsProcess.js +++ /dev/null @@ -1,8 +0,0 @@ -import("system.vars"); -import("system.result"); -import("ClassificationFilter_lib"); - -//this filterExtensionSet is for the Indicators (ClassificationTypes, e.g. Industry, Loyality, Number of employees...) -var fields = ClassificationTypeFilterUtils.getFilterFields(vars.get("$sys.currentcontextname")); - -result.string(fields); \ No newline at end of file diff --git a/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/groupQueryProcess.js b/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/groupQueryProcess.js deleted file mode 100644 index bffcdb6a1e0be8fb6cc55de23fc79701ba3d660d..0000000000000000000000000000000000000000 --- a/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/groupQueryProcess.js +++ /dev/null @@ -1,28 +0,0 @@ -import("system.translate"); -import("Sql_lib"); -import("system.result"); -import("system.vars"); -import("system.logging"); - -var isCount = vars.get("$local.count"); // TRUE if the count of the records is needed -var columns = vars.get("$local.columnlist"); // The column, expected from the querry, see also AttributeFilter_lib -var condition = vars.get("$local.condition"); // The Condition that's beeing used, includes the grouphirachy -var groupedColumns = vars.get("$local.groupedlist") // The coloumns, used for grouping -var order = vars.get("$local.order"); // The order of the result -var classificationId = vars.get("$local.name"); -classificationId = classificationId.slice(classificationId.lastIndexOf(".") + 1, classificationId.length); - -var sql = newSelect(isCount ? "1" : columns) - .from("ORGANISATION") - .join("CONTACT", "ORGANISATIONID = ORGANISATION_ID and PERSON_ID is null") - .leftJoin("CLASSIFICATION", newWhere("CLASSIFICATION.OBJECT_ROWID = CONTACT.CONTACTID") - .and("CLASSIFICATION.OBJECT_TYPE", "Organisation") - .and("CLASSIFICATION.CLASSIFICATIONTYPE_ID", classificationId)) - .leftJoin("CLASSIFICATIONSCORE", "CLASSIFICATIONSCOREID = CLASSIFICATION.VALUE") - .whereIfSet(condition.trim()) - .groupBy(groupedColumns); - -if (order != null && !isCount) - sql.orderBy(order); - -result.string(sql.toString()); \ No newline at end of file diff --git a/entity/Organisation_entity/recordcontainers/db/filterextensions/communicationsettings_filter/filterConditionProcess.js b/entity/Organisation_entity/recordcontainers/db/filterextensions/communicationsettings_filter/filterConditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..b45b894a148f0b32658a19efcd0c383f070059d3 --- /dev/null +++ b/entity/Organisation_entity/recordcontainers/db/filterextensions/communicationsettings_filter/filterConditionProcess.js @@ -0,0 +1,21 @@ +import("Sql_lib"); +import("system.result"); +import("system.vars"); +import("MarketingCondition_lib"); + +var mediumId = vars.get("$local.name"); +mediumId = mediumId.slice(mediumId.lastIndexOf(".") + 1); +var condition = new CommunicationSettingsCondition() + .medium(mediumId); + +var operator = vars.get("$local.comparison"); +if (operator == "EQUAL" || operator == "NOT_EQUAL") +{ + condition.status(vars.get("$local.rawvalue")); +} +if (operator == "NOT_EQUAL" || operator == "ISNULL") +{ + condition.existNoSettings(); +} + +result.string(condition.buildCondition().toString()); \ No newline at end of file diff --git a/entity/Organisation_entity/recordcontainers/db/filterextensions/communicationsettings_filter/filterFieldsProcess.js b/entity/Organisation_entity/recordcontainers/db/filterextensions/communicationsettings_filter/filterFieldsProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..31db294836785e691a74681590ba304d31ebad96 --- /dev/null +++ b/entity/Organisation_entity/recordcontainers/db/filterextensions/communicationsettings_filter/filterFieldsProcess.js @@ -0,0 +1,25 @@ +import("system.translate"); +import("system.result"); +import("KeywordRegistry_basic"); +import("Keyword_lib"); + +var mediums = KeywordUtils.getEntryNamesAndIdsByContainer($KeywordRegistry.communicationMediumCampaign(), null, true); +var filterFields = []; +mediums.forEach(function ([mediumId, mediumTitle]) +{ + if (mediumId != $KeywordRegistry.communicationMediumCampaign$letter()) + { + filterFields.push({ + name: mediumId, + title: translate.withArguments("Communication Setting: %0", [mediumTitle]), + contentType: "TEXT", + hasDropDownValues: false, + isGroupable: false, + groupedRecordField: null, + titleRecordField: null, + consumer: "CommunicationSettingStatusKeyword" + }); + } +}); + +result.string(JSON.stringify(filterFields)); \ No newline at end of file diff --git a/entity/Organisation_entity/recordcontainers/db/filterextensions/duplicates_filter/filterConditionProcess.js b/entity/Organisation_entity/recordcontainers/db/filterextensions/duplicates_filter/filterConditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..96f185ae76701ab39777fe91db3d18baf328b614 --- /dev/null +++ b/entity/Organisation_entity/recordcontainers/db/filterextensions/duplicates_filter/filterConditionProcess.js @@ -0,0 +1,16 @@ +import("system.result"); +import("Sql_lib"); +import("system.vars"); +import("DuplicateScanner_lib"); + +var sqlOperator = SqlUtils.getSqlConditionalOperator(vars.get("$local.operator")); + +result.string(newWhere( + "CONTACT.CONTACTID", + DuplicateScannerUtils.getDuplicateConditionalListSql( + ["Organisation_entity"], + vars.get("$local.rawvalue"), + sqlOperator, true + ), + SqlBuilder.IN() +)); diff --git a/entity/Organisation_entity/recordcontainers/db/onDBDelete.js b/entity/Organisation_entity/recordcontainers/db/onDBDelete.js index 00e50690d485216c4b4956f416b688ab433e68a8..320f4e3329fa4fd7195da03495b3cd7e5812a9d6 100644 --- a/entity/Organisation_entity/recordcontainers/db/onDBDelete.js +++ b/entity/Organisation_entity/recordcontainers/db/onDBDelete.js @@ -7,7 +7,7 @@ import("Attribute_lib"); // TODO: enable when duplicate-module is finalized let contactId = vars.get("$field.CONTACTID"); -DuplicateScannerUtils.deleteCachedDuplicate(contactId); +DuplicateScannerUtils.deleteHasDuplicateEntries("Organisation_entity", [contactId]); new AttributeRelationQuery(contactId, null, ContextUtils.getCurrentContextId()) .deleteAllAttributes(); diff --git a/entity/Organisation_entity/recordcontainers/db/onDBInsert.js b/entity/Organisation_entity/recordcontainers/db/onDBInsert.js index 60299cd7d4eda2ceed743571cec9cbda912ad318..c8db8fdecb72ba18f14ae3fd3a5bd05223ac2396 100644 --- a/entity/Organisation_entity/recordcontainers/db/onDBInsert.js +++ b/entity/Organisation_entity/recordcontainers/db/onDBInsert.js @@ -1,5 +1,8 @@ import("system.vars"); import("Workflow_lib"); +import("DuplicateScanner_lib"); + +DuplicateScannerUtils.updateHasDuplicateEntry("Organisation_entity"); //start the execution in afterOperatingState, because here the dataset is not yet inserted vars.set("$context.workflowQueue", {}); diff --git a/entity/Organisation_entity/recordcontainers/db/onDBUpdate.js b/entity/Organisation_entity/recordcontainers/db/onDBUpdate.js index 9f0337793c84207f61013809345f829d1f874671..737768cc8678c59374d99e790f4956812e3661db 100644 --- a/entity/Organisation_entity/recordcontainers/db/onDBUpdate.js +++ b/entity/Organisation_entity/recordcontainers/db/onDBUpdate.js @@ -6,6 +6,9 @@ import("Communication_lib"); import("Entity_lib"); import("Workflow_lib"); import("KeywordRegistry_basic"); +import("DuplicateScanner_lib"); + +DuplicateScannerUtils.updateHasDuplicateEntry("Organisation_entity"); // TODO: this is a workaround for missing possibility to react on changes of fields not connected to record Contqainer #1030023 var rowdata = vars.get("$local.rowdata"); diff --git a/entity/Organisation_entity/recordcontainers/db/recordfieldmappings/commrestrictions_active.value/expression.js b/entity/Organisation_entity/recordcontainers/db/recordfieldmappings/commrestrictions_active.value/expression.js deleted file mode 100644 index 5c633cb5d6343c9ab5546304ab34410b8062adc5..0000000000000000000000000000000000000000 --- a/entity/Organisation_entity/recordcontainers/db/recordfieldmappings/commrestrictions_active.value/expression.js +++ /dev/null @@ -1,4 +0,0 @@ -import("Contact_lib"); -import("system.result"); - -result.string(ContactUtils.getActiveCommRestrictionsSubselect()); \ No newline at end of file diff --git a/entity/Organisation_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js b/entity/Organisation_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..41ef07ff58ec51eda018bed12cb5b0b2b657c348 --- /dev/null +++ b/entity/Organisation_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js @@ -0,0 +1,5 @@ +import("system.result"); +import("Communication_lib"); + +var res = CommUtil.getStandardSubSqlMail(); +result.string(res); \ No newline at end of file diff --git a/entity/Organisation_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js b/entity/Organisation_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..320ae40ad1ba794b4e759037fa0f382b9af67696 --- /dev/null +++ b/entity/Organisation_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js @@ -0,0 +1,5 @@ +import("system.result"); +import("Communication_lib"); + +var res = CommUtil.getStandardSubSqlPhone(); +result.string(res); \ No newline at end of file diff --git a/entity/OrganisationsMultiEdit_entity/OrganisationsMultiEdit_entity.aod b/entity/OrganisationsMultiEdit_entity/OrganisationsMultiEdit_entity.aod new file mode 100644 index 0000000000000000000000000000000000000000..2ba2c4ea5fffa163031ef5ed32650d9d4f15843c --- /dev/null +++ b/entity/OrganisationsMultiEdit_entity/OrganisationsMultiEdit_entity.aod @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> + <name>OrganisationsMultiEdit_entity</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <documentation>%aditoprj%/entity/OrganisationsMultiEdit_entity/documentation.adoc</documentation> + <recordContainer>jdito</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + </entityProvider> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityField> + <name>CONTACT_ID</name> + <title>Organisation</title> + <consumer>Organisations</consumer> + <displayValueProcess>%aditoprj%/entity/OrganisationsMultiEdit_entity/entityfields/contact_id/displayValueProcess.js</displayValueProcess> + </entityField> + <entityConsumer> + <name>Organisations</name> + <dependency> + <name>dependency</name> + <entityName>Organisation_entity</entityName> + <fieldName>Organisations</fieldName> + </dependency> + </entityConsumer> + <entityField> + <name>UID</name> + <state>INVISIBLE</state> + </entityField> + </entityFields> + <recordContainers> + <jDitoRecordContainer> + <name>jdito</name> + <jDitoRecordAlias>Data_alias</jDitoRecordAlias> + <contentProcess>%aditoprj%/entity/OrganisationsMultiEdit_entity/recordcontainers/jdito/contentProcess.js</contentProcess> + <onInsert>%aditoprj%/entity/OrganisationsMultiEdit_entity/recordcontainers/jdito/onInsert.js</onInsert> + <recordFieldMappings> + <jDitoRecordFieldMapping> + <name>UID.value</name> + </jDitoRecordFieldMapping> + </recordFieldMappings> + </jDitoRecordContainer> + </recordContainers> +</entity> diff --git a/entity/OrganisationsMultiEdit_entity/documentation.adoc b/entity/OrganisationsMultiEdit_entity/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..dce629f858c22192f8745e1251d4872dbf655917 --- /dev/null +++ b/entity/OrganisationsMultiEdit_entity/documentation.adoc @@ -0,0 +1,4 @@ += OrganisationsMultiEdit_entity + +This entity is used to have a GenericMultiple selection of organisations. +For example, it is used in the series action "Create planning" in the organisation. \ No newline at end of file diff --git a/entity/OrganisationsMultiEdit_entity/entityfields/contact_id/displayValueProcess.js b/entity/OrganisationsMultiEdit_entity/entityfields/contact_id/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..9d7be1063f1aba777a205ded715b26133f8144a0 --- /dev/null +++ b/entity/OrganisationsMultiEdit_entity/entityfields/contact_id/displayValueProcess.js @@ -0,0 +1,6 @@ +import("Contact_lib"); +import("system.result"); +import("system.neon"); +import("system.vars"); + +result.string(OrganisationUtils.getNameByContactId(vars.get("$field.CONTACT_ID"))); \ No newline at end of file diff --git a/entity/OrganisationsMultiEdit_entity/recordcontainers/jdito/contentProcess.js b/entity/OrganisationsMultiEdit_entity/recordcontainers/jdito/contentProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..8a8b23ca6e41d5f262b6e6e9d5d47ddb8f0d2c56 --- /dev/null +++ b/entity/OrganisationsMultiEdit_entity/recordcontainers/jdito/contentProcess.js @@ -0,0 +1,7 @@ +import("system.result"); +import("system.vars"); + +if(vars.get("$local.idvalues")) +{ + result.object([vars.get("$local.idvalues")]); +} \ No newline at end of file diff --git a/entity/OrganisationsMultiEdit_entity/recordcontainers/jdito/onInsert.js b/entity/OrganisationsMultiEdit_entity/recordcontainers/jdito/onInsert.js new file mode 100644 index 0000000000000000000000000000000000000000..1b78561c5f27d03689ff51f7b20711a814ae99e1 --- /dev/null +++ b/entity/OrganisationsMultiEdit_entity/recordcontainers/jdito/onInsert.js @@ -0,0 +1 @@ +""; // this line must not be deleted, because there must always be something in that process \ No newline at end of file diff --git a/entity/PermissionAction_entity/PermissionAction_entity.aod b/entity/PermissionAction_entity/PermissionAction_entity.aod index 88bf81393497716ef1aff171175fafd687c31d4a..63f9c0c639b2a8b731d9ae85b1df09d993bad720 100644 --- a/entity/PermissionAction_entity/PermissionAction_entity.aod +++ b/entity/PermissionAction_entity/PermissionAction_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>PermissionAction_entity</name> <title>Action</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -23,14 +23,6 @@ <entityProvider> <name>PermissionActions</name> <recordContainer>jDito</recordContainer> - <dependencies> - <entityDependency> - <name>c92e552c-6d88-4fe1-918f-1a9a71ea28ad</name> - <entityName>PermissionDetail_entity</entityName> - <fieldName>PermissionActions</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityConsumer> <name>PermissionDetails</name> diff --git a/entity/PermissionCalendar_entity/PermissionCalendar_entity.aod b/entity/PermissionCalendar_entity/PermissionCalendar_entity.aod index c21dd398145e59c0b1391486cfd18f2540199db6..71412a63c277e5c84b4a457d6482e5e69441d0c7 100644 --- a/entity/PermissionCalendar_entity/PermissionCalendar_entity.aod +++ b/entity/PermissionCalendar_entity/PermissionCalendar_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>PermissionCalendar_entity</name> <title>Calendar Permission</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -95,7 +95,7 @@ <onActionProcess>%aditoprj%/entity/PermissionCalendar_entity/entityfields/addactions/children/receivenewuserpermissiondealeraction/onActionProcess.js</onActionProcess> <isMenuAction v="true" /> <isObjectAction v="false" /> - <isSelectionAction v="false" /> + <selectionType>UNBOUND</selectionType> <iconId>VAADIN:USER</iconId> <state>AUTO</state> <tooltip></tooltip> @@ -113,20 +113,6 @@ <entityProvider> <name>Permissions</name> <titlePluralProcess>%aditoprj%/entity/PermissionCalendar_entity/entityfields/permissions/titlePluralProcess.js</titlePluralProcess> - <dependencies> - <entityDependency> - <name>5bf53339-4c8d-4285-8af2-2aead61d3e38</name> - <entityName>Employee_entity</entityName> - <fieldName>MyPermission</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>890d8d97-2ff5-425b-9987-0adbd90e608e</name> - <entityName>Employee_entity</entityName> - <fieldName>TheirPermissions</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityParameter> <name>PermissionProcurer_param</name> diff --git a/entity/PermissionDetail_entity/PermissionDetail_entity.aod b/entity/PermissionDetail_entity/PermissionDetail_entity.aod index 9fc1e645aeb101610c4a37985388a857ac79896a..37e1d2cb8c9de829dd024f85d82c3f4177da9763 100644 --- a/entity/PermissionDetail_entity/PermissionDetail_entity.aod +++ b/entity/PermissionDetail_entity/PermissionDetail_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>PermissionDetail_entity</name> <title>Permission Detail</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -88,26 +88,6 @@ <entityProvider> <name>Permissions</name> <recordContainer>jDito</recordContainer> - <dependencies> - <entityDependency> - <name>b1a6483c-e7b1-4eb7-aa22-d0e9d0ef0b49</name> - <entityName>Role_entity</entityName> - <fieldName>TheirPermissions</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>cc0e9a4d-5d82-4407-bc4e-698dcfae5c86</name> - <entityName>PermissionMetaData_entity</entityName> - <fieldName>PermissionDetails</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>62a56e76-d049-4c53-a439-79261a8058e1</name> - <entityName>PermissionAction_entity</entityName> - <fieldName>PermissionDetails</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityParameter> <name>RoleName_param</name> @@ -196,7 +176,6 @@ </entityParameter> <entityParameter> <name>Field_param</name> - <valueProcess>%aditoprj%/entity/PermissionDetail_entity/entityfields/permissionactions/children/fieldtype_param/valueProcess.js</valueProcess> </entityParameter> <entityParameter> <name>EntityTitle_param</name> diff --git a/entity/PermissionDetail_entity/entityfields/permissionactions/children/fieldtype_param/valueProcess.js b/entity/PermissionDetail_entity/entityfields/permissionactions/children/fieldtype_param/valueProcess.js deleted file mode 100644 index 52bd0deb2169ccfd1f5d531869b4e2fe4304d298..0000000000000000000000000000000000000000 --- a/entity/PermissionDetail_entity/entityfields/permissionactions/children/fieldtype_param/valueProcess.js +++ /dev/null @@ -1,4 +0,0 @@ -import("system.vars"); -import("system.result"); - -result.string(vars.get("$field.FIELD")); \ No newline at end of file diff --git a/entity/PermissionMetaData_entity/PermissionMetaData_entity.aod b/entity/PermissionMetaData_entity/PermissionMetaData_entity.aod index c611be5a933d6bf1bae16636842e63a4bbf2ae4e..f18de305ef76fec75cb578c506f50285e4be2b75 100644 --- a/entity/PermissionMetaData_entity/PermissionMetaData_entity.aod +++ b/entity/PermissionMetaData_entity/PermissionMetaData_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>PermissionMetaData_entity</name> <title>Permission</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -32,14 +32,6 @@ <entityProvider> <name>MetaData</name> <recordContainer>jDito</recordContainer> - <dependencies> - <entityDependency> - <name>3b2c9421-5ff0-49a3-99f0-6790f17bd76c</name> - <entityName>PermissionDetail_entity</entityName> - <fieldName>MetaData</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>EntityName_param</name> diff --git a/entity/PermissionOverview_entity/PermissionOverview_entity.aod b/entity/PermissionOverview_entity/PermissionOverview_entity.aod index 16c9910812240e9439516b2d3daa4d37ca83f36c..10bcfbb8d783c2d4ecad6df05a0a4f9ca741f711 100644 --- a/entity/PermissionOverview_entity/PermissionOverview_entity.aod +++ b/entity/PermissionOverview_entity/PermissionOverview_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>PermissionOverview_entity</name> <title>Permission Overview</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -60,20 +60,6 @@ <entityProvider> <name>PermissionOverviews</name> <recordContainer>jDito</recordContainer> - <dependencies> - <entityDependency> - <name>b9f4df41-74e9-41d2-bfe6-1427ae7c8c36</name> - <entityName>Role_entity</entityName> - <fieldName>PermissionOverviews</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>ac8eb318-8d26-43a0-9463-e1c3741c7710</name> - <entityName>PermissionMetaData_entity</entityName> - <fieldName>PermissionOverviews</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityParameter> <name>RoleName_param</name> diff --git a/entity/Person_entity/Person_entity.aod b/entity/Person_entity/Person_entity.aod index f294673d397ad7e5b12ab7f16821daa5d3c0d75b..2dac9e53d499168f5c9f716e0f6a5044616ab56f 100644 --- a/entity/Person_entity/Person_entity.aod +++ b/entity/Person_entity/Person_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Person_entity</name> <title>Contact</title> <description>former Pers</description> @@ -8,6 +8,7 @@ <siblings> <element>Address_entity</element> <element>Contact_entity</element> + <element>DSGVODeleteFlag_entity</element> </siblings> <grantDeleteProcess>%aditoprj%/entity/Person_entity/grantDeleteProcess.js</grantDeleteProcess> <contentTitleProcess>%aditoprj%/entity/Person_entity/contentTitleProcess.js</contentTitleProcess> @@ -141,14 +142,6 @@ <name>OrganisationRelated</name> <documentation>%aditoprj%/entity/Person_entity/entityfields/organisationrelated/documentation.adoc</documentation> <recordContainer>db</recordContainer> - <dependencies> - <entityDependency> - <name>41952879-c2f0-411f-8ca1-36c38914a629</name> - <entityName>Organisation_entity</entityName> - <fieldName>Contact</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ContactId_param</name> @@ -162,10 +155,6 @@ <name>OnlyActive_param</name> <expose v="false" /> </entityParameter> - <entityParameter> - <name>DuplicateCurrentContactId_param</name> - <expose v="false" /> - </entityParameter> </children> </entityProvider> <entityField> @@ -293,32 +282,6 @@ </entityConsumer> <entityProvider> <name>#PROVIDER</name> - <dependencies> - <entityDependency> - <name>ec66d6b0-a1fa-40a1-9612-34775d3e89a9</name> - <entityName>Object_entity</entityName> - <fieldName>Persons</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>a8f2893b-fce7-4a55-97d4-f19ec83f9bdb</name> - <entityName>ObjectProxy_entity</entityName> - <fieldName>Persons</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>4baa56bc-f570-4c19-81b9-4ed9ba7f0cfb</name> - <entityName>VisitRecommendation_entity</entityName> - <fieldName>PersonConsumer</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>befbfd87-c065-4a4b-9d1e-8de8fba87302</name> - <entityName>Campaign_entity</entityName> - <fieldName>PersonConsumer</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>LANGUAGE</name> @@ -379,20 +342,6 @@ <name>Contact</name> <documentation>%aditoprj%/entity/Person_entity/entityfields/contact/documentation.adoc</documentation> <recordContainer>db</recordContainer> - <dependencies> - <entityDependency> - <name>f925c8e6-b096-4093-bd39-c9cd30a6a71a</name> - <entityName>Lead_entity</entityName> - <fieldName>ContactId</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>9c5ade71-e56c-4684-95f1-151a47175797</name> - <entityName>CampaignParticipant_entity</entityName> - <fieldName>PersonConsumer</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>OrgId_param</name> @@ -411,14 +360,6 @@ <name>OnlyActive_param</name> <expose v="false" /> </entityParameter> - <entityParameter> - <name>DuplicateCurrentContactId_param</name> - <expose v="false" /> - </entityParameter> - <entityParameter> - <name>DuplicateActionsControl_param</name> - <expose v="false" /> - </entityParameter> </children> </entityProvider> <entityConsumer> @@ -636,6 +577,7 @@ <title>Status</title> <consumer>KeywordContactStates</consumer> <groupable v="true" /> + <stateProcess>%aditoprj%/entity/Person_entity/entityfields/status/stateProcess.js</stateProcess> <valueProcess>%aditoprj%/entity/Person_entity/entityfields/status/valueProcess.js</valueProcess> <displayValueProcess>%aditoprj%/entity/Person_entity/entityfields/status/displayValueProcess.js</displayValueProcess> </entityField> @@ -651,6 +593,10 @@ <name>ContainerName_param</name> <valueProcess>%aditoprj%/entity/Person_entity/entityfields/keywordcontactstates/children/containername_param/valueProcess.js</valueProcess> </entityParameter> + <entityParameter> + <name>BlacklistIds_param</name> + <valueProcess>%aditoprj%/entity/Person_entity/entityfields/keywordcontactstates/children/blacklistids_param/valueProcess.js</valueProcess> + </entityParameter> </children> </entityConsumer> <entityConsumer> @@ -735,26 +681,6 @@ <entityProvider> <name>Contacts</name> <documentation>%aditoprj%/entity/Person_entity/entityfields/contacts/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>c98da62f-d6b2-4ddb-9101-92e9a60abdfb</name> - <entityName>VisitPlanEmployeeWeek_entity</entityName> - <fieldName>Persons</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>f56b1378-138d-4f88-b9df-274adce9f90c</name> - <entityName>VisitPlanEntry_entity</entityName> - <fieldName>Persons</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>6854e035-f459-41b2-84f8-9f5cca5dbe80</name> - <entityName>DistrictResponsible_entity</entityName> - <fieldName>Persons</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ContactId_param</name> @@ -776,10 +702,6 @@ <name>OnlyActive_param</name> <expose v="false" /> </entityParameter> - <entityParameter> - <name>DuplicateCurrentContactId_param</name> - <expose v="false" /> - </entityParameter> </children> </entityProvider> <entityConsumer> @@ -878,20 +800,6 @@ <expose v="true" /> <description>PARAMETER</description> </entityParameter> - <entityConsumer> - <name>CommRestrictions</name> - <dependency> - <name>dependency</name> - <entityName>CommRestriction_Entity</entityName> - <fieldName>CommRestrictions</fieldName> - </dependency> - <children> - <entityParameter> - <name>ContactId_param</name> - <valueProcess>%aditoprj%/entity/Person_entity/entityfields/commrestrictions/children/contactid_param/valueProcess.js</valueProcess> - </entityParameter> - </children> - </entityConsumer> <entityConsumer> <name>DSGVOEntries</name> <stateProcess>%aditoprj%/entity/Person_entity/entityfields/dsgvoentries/stateProcess.js</stateProcess> @@ -945,46 +853,11 @@ <displayValueProcess>%aditoprj%/entity/Person_entity/entityfields/organisation_contactid/displayValueProcess.js</displayValueProcess> <onValidation>%aditoprj%/entity/Person_entity/entityfields/organisation_contactid/onValidation.js</onValidation> </entityField> - <entityParameter> - <name>DuplicateCurrentContactId_param</name> - <expose v="true" /> - </entityParameter> - <entityParameter> - <name>DuplicateActionsControl_param</name> - <expose v="true" /> - <mandatory v="false" /> - </entityParameter> <entityField> <name>STANDARD_COUNTRY</name> <title>Country</title> <groupable v="true" /> </entityField> - <entityConsumer> - <name>SelfDuplicatesUncached</name> - <dependency> - <name>dependency</name> - <entityName>Person_entity</entityName> - <fieldName>SelfDuplicates</fieldName> - </dependency> - <children> - <entityParameter> - <name>DuplicateActionsControl_param</name> - <valueProcess>%aditoprj%/entity/Person_entity/entityfields/selfduplicatesuncached/children/duplicateactionscontrol_param/valueProcess.js</valueProcess> - </entityParameter> - <entityParameter> - <name>DuplicateCurrentContactId_param</name> - <valueProcess>%aditoprj%/entity/Person_entity/entityfields/selfduplicatesuncached/children/duplicatecurrentcontactid_param/valueProcess.js</valueProcess> - </entityParameter> - <entityParameter> - <name>OnlyShowContactIds_param</name> - <valueProcess>%aditoprj%/entity/Person_entity/entityfields/selfduplicatesuncached/children/onlyshowcontactids_param/valueProcess.js</valueProcess> - </entityParameter> - <entityParameter> - <name>ExcludedContactIds_param</name> - <valueProcess>%aditoprj%/entity/Person_entity/entityfields/selfduplicatesuncached/children/excludedcontactids_param/valueProcess.js</valueProcess> - </entityParameter> - </children> - </entityConsumer> <entityField> <name>LEAD_LEADID</name> </entityField> @@ -992,8 +865,7 @@ <name>COMMRESTRICTIONS_ACTIVE</name> <title>Commrestrictions</title> <color>$priority-high-color</color> - <groupable v="true" /> - <displayValueProcess>%aditoprj%/entity/Person_entity/entityfields/commrestrictions_active/displayValueProcess.js</displayValueProcess> + <valueProcess>%aditoprj%/entity/Person_entity/entityfields/commrestrictions_active/valueProcess.js</valueProcess> </entityField> <entityField> <name>STANDARD_ZIP</name> @@ -1014,14 +886,6 @@ <name>QuickEntryContacts</name> <documentation>%aditoprj%/entity/Person_entity/entityfields/quickentrycontacts/documentation.adoc</documentation> <titlePlural>Additional Contacts</titlePlural> - <dependencies> - <entityDependency> - <name>6d137850-63ba-4be0-9ca5-1464e71d4f77</name> - <entityName>QuickEntry_entity</entityName> - <fieldName>Contacts</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ContactId_param</name> @@ -1035,47 +899,12 @@ <name>OnlyActive_param</name> <expose v="false" /> </entityParameter> - <entityParameter> - <name>DuplicateActionsControl_param</name> - <expose v="false" /> - </entityParameter> - <entityParameter> - <name>DuplicateCurrentContactId_param</name> - <expose v="false" /> - </entityParameter> </children> </entityProvider> <entityParameter> <name>OnlyShowContactIds_param</name> <expose v="true" /> </entityParameter> - <entityProvider> - <name>SelfDuplicates</name> - <documentation>%aditoprj%/entity/Person_entity/entityfields/selfduplicates/documentation.adoc</documentation> - <titlePlural>Duplicates</titlePlural> - <children> - <entityParameter> - <name>OnlyShowContactIds_param</name> - <mandatory v="true" /> - </entityParameter> - <entityParameter> - <name>OnlyActive_param</name> - <expose v="false" /> - </entityParameter> - <entityParameter> - <name>OrgId_param</name> - <expose v="false" /> - </entityParameter> - <entityParameter> - <name>OnlyOwnSupervised_param</name> - <expose v="false" /> - </entityParameter> - <entityParameter> - <name>ContactId_param</name> - <expose v="false" /> - </entityParameter> - </children> - </entityProvider> <entityField> <name>IndexCommunication</name> </entityField> @@ -1107,14 +936,6 @@ <entityProvider> <name>IdFilteredActiveContacts</name> <documentation>%aditoprj%/entity/Person_entity/entityfields/idfilteredactivecontacts/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>511f3e4c-7493-4a31-a136-0ba80ba2ec85</name> - <entityName>Member_entity</entityName> - <fieldName>Contacts</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ExcludedContactIds_param</name> @@ -1124,10 +945,6 @@ <name>ContactId_param</name> <expose v="false" /> </entityParameter> - <entityParameter> - <name>DuplicateActionsControl_param</name> - <expose v="false" /> - </entityParameter> <entityParameter> <name>OnlyOwnSupervised_param</name> <expose v="false" /> @@ -1144,10 +961,6 @@ <name>OnlyActive_param</name> <expose v="true" /> </entityParameter> - <entityParameter> - <name>DuplicateCurrentContactId_param</name> - <expose v="false" /> - </entityParameter> </children> </entityProvider> <entityField> @@ -1164,12 +977,6 @@ <name>indexP</name> <documentation>%aditoprj%/entity/Person_entity/entityfields/indexp/documentation.adoc</documentation> <recordContainer>index</recordContainer> - <children> - <entityParameter> - <name>DuplicateActionsControl_param</name> - <expose v="false" /> - </entityParameter> - </children> </entityProvider> <entityField> <name>PERSON_OBJECTTYPE</name> @@ -1195,66 +1002,8 @@ </entityParameter> </children> </entityConsumer> - <entityProvider> - <name>NonselfDuplicates</name> - <documentation>%aditoprj%/entity/Person_entity/entityfields/nonselfduplicates/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>3a4352e2-9686-4c52-9d01-dbfad8c68ea7</name> - <entityName>Duplicates_entity</entityName> - <fieldName>DuplicatePersonsConsumer</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> - <children> - <entityParameter> - <name>ContactId_param</name> - <expose v="false" /> - </entityParameter> - <entityParameter> - <name>DuplicateCurrentContactId_param</name> - <expose v="false" /> - </entityParameter> - <entityParameter> - <name>OnlyShowContactIds_param</name> - <expose v="true" /> - </entityParameter> - <entityParameter> - <name>OrgId_param</name> - <expose v="false" /> - </entityParameter> - <entityParameter> - <name>OnlyOwnSupervised_param</name> - <expose v="false" /> - </entityParameter> - </children> - </entityProvider> - <entityConsumer> - <name>DistrictResponsibles</name> - <state>INVISIBLE</state> - <stateProcess>%aditoprj%/entity/Person_entity/entityfields/districtresponsibles/stateProcess.js</stateProcess> - <dependency> - <name>dependency</name> - <entityName>DistrictResponsible_entity</entityName> - <fieldName>OrganisationResponsibles</fieldName> - </dependency> - <children> - <entityParameter> - <name>OrgUid_param</name> - <valueProcess>%aditoprj%/entity/Person_entity/entityfields/districtresponsibles/children/orguid_param/valueProcess.js</valueProcess> - </entityParameter> - </children> - </entityConsumer> <entityProvider> <name>ebdb88f5-f030-426c-b261-9f3828d19356</name> - <dependencies> - <entityDependency> - <name>511f3e4c-7493-4a31-a136-0ba80ba2ec85</name> - <entityName>Member_entity</entityName> - <fieldName>Contacts</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityConsumer> <name>Orders</name> @@ -1329,7 +1078,7 @@ <onActionProcess>%aditoprj%/entity/Person_entity/entityfields/filterviewactiongroup/children/addtocampaignfromtable/onActionProcess.js</onActionProcess> <isMenuAction v="true" /> <isObjectAction v="false" /> - <isSelectionAction v="false" /> + <selectionType>UNBOUND</selectionType> <iconId>NEON:GROUP_APPOINTMENT</iconId> <stateProcess>%aditoprj%/entity/Person_entity/entityfields/filterviewactiongroup/children/addtocampaignfromtable/stateProcess.js</stateProcess> <tooltip>Add the selection to a campaign</tooltip> @@ -1395,52 +1144,6 @@ </entityActionField> </children> </entityActionGroup> - <entityActionGroup> - <name>DuplicateActions</name> - <title>Duplicate actions</title> - <state>AUTO</state> - <stateProcess>%aditoprj%/entity/Person_entity/entityfields/duplicateactions/stateProcess.js</stateProcess> - <children> - <entityActionField> - <name>IntegrateSelectedIntoCurrentAction</name> - <title>Integrate selected into current contact</title> - <onActionProcess>%aditoprj%/entity/Person_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/onActionProcess.js</onActionProcess> - <isMenuAction v="true" /> - <isObjectAction v="false" /> - <isSelectionAction v="true" /> - <iconId>NEON:IMPORT</iconId> - <stateProcess>%aditoprj%/entity/Person_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/stateProcess.js</stateProcess> - </entityActionField> - <entityActionField> - <name>IntegrateCurrentIntoSelectedAction</name> - <title>Integrate current into selected contact</title> - <onActionProcess>%aditoprj%/entity/Person_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/onActionProcess.js</onActionProcess> - <isMenuAction v="true" /> - <isObjectAction v="false" /> - <isSelectionAction v="true" /> - <iconId>NEON:EXPORT</iconId> - <stateProcess>%aditoprj%/entity/Person_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/stateProcess.js</stateProcess> - </entityActionField> - <entityActionField> - <name>IgnoreDuplicate</name> - <title>Ignore Duplicate</title> - <onActionProcess>%aditoprj%/entity/Person_entity/entityfields/duplicateactions/children/ignoreduplicate/onActionProcess.js</onActionProcess> - <isMenuAction v="true" /> - <isObjectAction v="false" /> - <isSelectionAction v="true" /> - <iconId>VAADIN:CLOSE</iconId> - <stateProcess>%aditoprj%/entity/Person_entity/entityfields/duplicateactions/children/ignoreduplicate/stateProcess.js</stateProcess> - </entityActionField> - <entityActionField> - <name>IgnoreWholeCluster</name> - <title>Ignore whole cluster</title> - <onActionProcess>%aditoprj%/entity/Person_entity/entityfields/duplicateactions/children/ignorewholecluster/onActionProcess.js</onActionProcess> - <isObjectAction v="false" /> - <iconId>VAADIN:CLOSE</iconId> - <stateProcess>%aditoprj%/entity/Person_entity/entityfields/duplicateactions/children/ignorewholecluster/stateProcess.js</stateProcess> - </entityActionField> - </children> - </entityActionGroup> <entityActionField> <name>newEmail</name> <title>Write email</title> @@ -1453,6 +1156,7 @@ <title>New appointment</title> <onActionProcess>%aditoprj%/entity/Person_entity/entityfields/newappointment/onActionProcess.js</onActionProcess> <iconId>VAADIN:CALENDAR</iconId> + <state>EDITABLE</state> <stateProcess>%aditoprj%/entity/Person_entity/entityfields/newappointment/stateProcess.js</stateProcess> <tooltip>New Appointment</tooltip> </entityActionField> @@ -1498,6 +1202,110 @@ <iconId>VAADIN:CURLY_BRACKETS</iconId> <stateProcess>%aditoprj%/entity/Person_entity/entityfields/openadminview/stateProcess.js</stateProcess> </entityActionField> + <entityConsumer> + <name>DSGVODeleteFlags</name> + <stateProcess>%aditoprj%/entity/Person_entity/entityfields/dsgvodeleteflags/stateProcess.js</stateProcess> + <dependency> + <name>dependency</name> + <entityName>DSGVODeleteFlag_entity</entityName> + <fieldName>DSGVODeleteFlags</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContactId_param</name> + <valueProcess>%aditoprj%/entity/Person_entity/entityfields/dsgvodeleteflags/children/contactid_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityConsumer> + <name>Campaigns</name> + <dependency> + <name>dependency</name> + <entityName>Campaign_entity</entityName> + <fieldName>Campaigns</fieldName> + </dependency> + </entityConsumer> + <entityParameter> + <name>FilterPreSet_param</name> + <expose v="true" /> + </entityParameter> + <entityConsumer> + <name>Duplicates</name> + <selectionMode>MULTI</selectionMode> + <selectionModeProcess>%aditoprj%/entity/Person_entity/entityfields/duplicates/selectionModeProcess.js</selectionModeProcess> + <dependency> + <name>dependency</name> + <entityName>DuplicatePerson_entity</entityName> + <fieldName>#PROVIDER</fieldName> + </dependency> + <children> + <entityParameter> + <name>Obj_param</name> + <valueProcess>%aditoprj%/entity/Person_entity/entityfields/duplicates/children/obj_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityConsumer> + <name>ContactCommunicationSettings</name> + <refreshParent v="true" /> + <dependency> + <name>dependency</name> + <entityName>CommunicationSettings_entity</entityName> + <fieldName>SettingsForContact</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContactId_param</name> + <valueProcess>%aditoprj%/entity/Person_entity/entityfields/contactcommunicationsettings/children/contactid_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityConsumer> + <name>InterestLinks</name> + <dependency> + <name>dependency</name> + <entityName>InterestLink_entity</entityName> + <fieldName>InterestsForContact</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContactId_param</name> + <valueProcess>%aditoprj%/entity/Person_entity/entityfields/interestlinks/children/contactid_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityConsumer> + <name>Interests</name> + <description>Used for the filterExtension "InterestLink_filter"</description> + <dependency> + <name>dependency</name> + <entityName>Interest_entity</entityName> + <fieldName>#PROVIDER</fieldName> + </dependency> + </entityConsumer> + <entityConsumer> + <name>Bulkmails</name> + <description>Used for the filterExtension "BulkmailReceived_filter"</description> + <dependency> + <name>dependency</name> + <entityName>BulkMail_entity</entityName> + <fieldName>#PROVIDER</fieldName> + </dependency> + </entityConsumer> + <entityConsumer> + <name>CommunicationSettingStatusKeyword</name> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/Person_entity/entityfields/communicationsettingstatuskeyword/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> </entityFields> <recordContainers> <dbRecordContainer> @@ -1635,6 +1443,8 @@ <dbRecordFieldMapping> <name>ORGANISATION_NAME.value</name> <recordfield>ORGANISATION.NAME</recordfield> + <isFilterable v="true" /> + <isLookupFilter v="true" /> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>USER_NEW.value</name> @@ -1671,11 +1481,13 @@ </dbRecordFieldMapping> <dbRecordFieldMapping> <name>STANDARD_EMAIL_COMMUNICATION.value</name> + <expression>%aditoprj%/entity/Person_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js</expression> <isFilterable v="false" /> <isLookupFilter v="false" /> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>STANDARD_PHONE_COMMUNICATION.value</name> + <expression>%aditoprj%/entity/Person_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js</expression> <isFilterable v="false" /> <isLookupFilter v="false" /> </dbRecordFieldMapping> @@ -1723,7 +1535,6 @@ </consumerMapping> <dbRecordFieldMapping> <name>COMMRESTRICTIONS_ACTIVE.value</name> - <expression>%aditoprj%/entity/Person_entity/recordcontainers/db/recordfieldmappings/commrestrictions_active.value/expression.js</expression> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>STANDARD_ADDRESS.value</name> @@ -1768,6 +1579,39 @@ <isFilterable v="true" /> <isLookupFilter v="false" /> </dbRecordFieldMapping> + <consumerMapping> + <name>Offers</name> + <filterConditionProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/recordfieldmappings/offers/filterConditionProcess.js</filterConditionProcess> + <isFilterable v="true" /> + <filtertype>EXTENDED</filtertype> + </consumerMapping> + <consumerMapping> + <name>Orders</name> + <filterConditionProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/recordfieldmappings/orders/filterConditionProcess.js</filterConditionProcess> + <isFilterable v="true" /> + <filtertype>EXTENDED</filtertype> + </consumerMapping> + <consumerMapping> + <name>Campaigns</name> + <filterConditionProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/recordfieldmappings/campaigns/filterConditionProcess.js</filterConditionProcess> + <isFilterable v="true" /> + <filtertype>EXTENDED</filtertype> + </consumerMapping> + <consumerMapping> + <name>Tasks</name> + <filterConditionProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/recordfieldmappings/tasks/filterConditionProcess.js</filterConditionProcess> + <isFilterable v="true" /> + <filtertype>EXTENDED</filtertype> + </consumerMapping> + <consumerMapping> + <name>Contracts</name> + <filterConditionProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/recordfieldmappings/contracts/filterConditionProcess.js</filterConditionProcess> + <isFilterable v="true" /> + <filtertype>EXTENDED</filtertype> + </consumerMapping> + <consumerMapping> + <name>ContactCommunicationSettings</name> + </consumerMapping> </recordFieldMappings> <linkInformation> <linkInformation> @@ -1825,6 +1669,13 @@ <filterConditionProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/filterextensions/supervisorassignment/filterConditionProcess.js</filterConditionProcess> <filtertype>BASIC</filtertype> </filterExtension> + <filterExtension> + <name>Duplicates_filter</name> + <title>Duplicates</title> + <contentType>NUMBER</contentType> + <filterConditionProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/filterextensions/duplicates_filter/filterConditionProcess.js</filterConditionProcess> + <filtertype>BASIC</filtertype> + </filterExtension> <filterExtension> <name>Communication_Mail_filter</name> <title>Communication: Mail</title> @@ -1847,6 +1698,53 @@ <isLookupFilter v="false" /> <filtertype>BASIC</filtertype> </filterExtension> + <filterExtension> + <name>IsEmployee_filter</name> + <title>Is an active Employee</title> + <contentType>BOOLEAN</contentType> + <filterValuesProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/filterextensions/isemployee_filter/filterValuesProcess.js</filterValuesProcess> + <filterConditionProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/filterextensions/isemployee_filter/filterConditionProcess.js</filterConditionProcess> + </filterExtension> + <filterExtension> + <name>Advertising_filter</name> + <title>Advertising received</title> + <contentType>DATE</contentType> + <filterConditionProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/filterextensions/advertising_filter/filterConditionProcess.js</filterConditionProcess> + <filtertype>BASIC</filtertype> + </filterExtension> + <filterExtension> + <name>InterestLink_filter</name> + <title>Interest (subscribed)</title> + <contentType>TEXT</contentType> + <useConsumer v="true" /> + <consumer>Interests</consumer> + <filterConditionProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/filterextensions/interestlink_filter/filterConditionProcess.js</filterConditionProcess> + <filtertype>BASIC</filtertype> + </filterExtension> + <filterExtensionSet> + <name>CommunicationSettings_filter</name> + <filterFieldsProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/filterextensions/communicationsettings_filter/filterFieldsProcess.js</filterFieldsProcess> + <filterConditionProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/filterextensions/communicationsettings_filter/filterConditionProcess.js</filterConditionProcess> + <filtertype>BASIC</filtertype> + </filterExtensionSet> + <filterExtension> + <name>BulkmailReceived_filter</name> + <title>Received Bulk Mail</title> + <contentType>TEXT</contentType> + <useConsumer v="true" /> + <consumer>Bulkmails</consumer> + <filterConditionProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/filterextensions/bulkmailreceived_filter/filterConditionProcess.js</filterConditionProcess> + <filtertype>BASIC</filtertype> + </filterExtension> + <filterExtension> + <name>CampaignParticipation_filter</name> + <title>Campaign participation</title> + <contentType>TEXT</contentType> + <useConsumer v="true" /> + <consumer>Campaigns</consumer> + <filterConditionProcess>%aditoprj%/entity/Person_entity/recordcontainers/db/filterextensions/campaignparticipation_filter/filterConditionProcess.js</filterConditionProcess> + <filtertype>BASIC</filtertype> + </filterExtension> </filterExtensions> </dbRecordContainer> <indexRecordContainer> diff --git a/entity/Person_entity/entityfields/addtocampaign/stateProcess.js b/entity/Person_entity/entityfields/addtocampaign/stateProcess.js index aefbc6e8f76f99c4281890f3461553c49562d5b9..5c748f19d4d580b9706725fb5572fe18d7473062 100644 --- a/entity/Person_entity/entityfields/addtocampaign/stateProcess.js +++ b/entity/Person_entity/entityfields/addtocampaign/stateProcess.js @@ -3,5 +3,7 @@ import("system.neon"); import("system.vars"); import("KeywordRegistry_basic"); -if (vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$inactive()) - result.string(neon.COMPONENTSTATE_DISABLED); \ No newline at end of file +if (vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$inactive() || vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$markToDelete()) +{ + result.string(neon.COMPONENTSTATE_DISABLED); +} \ No newline at end of file diff --git a/entity/Person_entity/entityfields/commrestrictions/children/contactid_param/valueProcess.js b/entity/Person_entity/entityfields/commrestrictions/children/contactid_param/valueProcess.js deleted file mode 100644 index 375a85e730194ab84d2caa83bb173dd1131e8b10..0000000000000000000000000000000000000000 --- a/entity/Person_entity/entityfields/commrestrictions/children/contactid_param/valueProcess.js +++ /dev/null @@ -1,4 +0,0 @@ -import("system.result"); -import("system.vars"); - -result.string(vars.getString("$field.CONTACTID")); \ No newline at end of file diff --git a/entity/Person_entity/entityfields/commrestrictions_active/displayValueProcess.js b/entity/Person_entity/entityfields/commrestrictions_active/displayValueProcess.js deleted file mode 100644 index 89026aeebe7406ed9dd9fb3b6e618c9cb6dac561..0000000000000000000000000000000000000000 --- a/entity/Person_entity/entityfields/commrestrictions_active/displayValueProcess.js +++ /dev/null @@ -1,8 +0,0 @@ -import("system.vars"); -import("system.translate"); -import("system.result"); - -if (vars.get("$field.COMMRESTRICTIONS_ACTIVE").trim()) -{ // bug in SqlMaskingUtils.concat. -> use " " as seperator and replace " " by ", " - result.string(translate.text("No advertising by") + " " + ((vars.get("$field.COMMRESTRICTIONS_ACTIVE")).trim()).replace(/ +/g, ", ")); -} diff --git a/entity/Person_entity/entityfields/commrestrictions_active/valueProcess.js b/entity/Person_entity/entityfields/commrestrictions_active/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..eb0180412d1da157d1c0c7c2b6cc9de3818d508b --- /dev/null +++ b/entity/Person_entity/entityfields/commrestrictions_active/valueProcess.js @@ -0,0 +1,9 @@ +import("Contact_lib"); +import("system.neon"); +import("system.result"); +import("system.vars"); + +if (vars.get("$sys.viewmode") == neon.FRAME_VIEWMODE_DATASET) +{ + result.string(ContactUtils.getCommunicationRejectionSummary(vars.get("$field.CONTACTID"))); +} diff --git a/entity/Person_entity/entityfields/communications/children/contactsmaincountry_param/valueProcess.js b/entity/Person_entity/entityfields/communications/children/contactsmaincountry_param/valueProcess.js index 04b4079531ba7cc7a965aa5162e950e6213ecfdf..48e3079503511a492aae0634eeb6853d9f198fe3 100644 --- a/entity/Person_entity/entityfields/communications/children/contactsmaincountry_param/valueProcess.js +++ b/entity/Person_entity/entityfields/communications/children/contactsmaincountry_param/valueProcess.js @@ -1,7 +1,36 @@ +import("Sql_lib"); +import("Entity_lib"); import("system.logging"); import("system.vars"); import("system.result"); +//references needed for auto refresh: +"$field.PersAddresses.insertedRows"; +"$field.PersAddresses.changedRows"; +"$field.PersAddresses.deletedRows"; + +var res = ""; var country = vars.get("$field.STANDARD_COUNTRY"); -if (country) - result.string(country); \ No newline at end of file +var orgAddressId = newSelect("CONTACT.ADDRESS_ID").from("CONTACT") + .where("CONTACT.ORGANISATION_ID", vars.get("$field.ORGANISATION_ID")) + .and("CONTACT.PERSON_ID is null") + .cell(); + +var standardCountryOrg = newSelect("ADDRESS.COUNTRY").from("ADDRESS") + .where("ADDRESS.ADDRESSID", orgAddressId).cell(); + +if(country) +{ + res = country; +} +else if(standardCountryOrg) +{ + res = standardCountryOrg; +} +else +{ + var addressPersonRows = EntityConsumerRowsHelper.getCurrentConsumerRows("PersAddresses", ["COUNTRY"]); + if(addressPersonRows.length > 0) + res = addressPersonRows[0]["COUNTRY"]; +} +result.string(res); \ No newline at end of file diff --git a/entity/Person_entity/entityfields/communicationsettingstatuskeyword/children/containername_param/valueProcess.js b/entity/Person_entity/entityfields/communicationsettingstatuskeyword/children/containername_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..63ee095ed6025141520ea022324c1c082d676a01 --- /dev/null +++ b/entity/Person_entity/entityfields/communicationsettingstatuskeyword/children/containername_param/valueProcess.js @@ -0,0 +1,4 @@ +import("KeywordRegistry_basic"); +import("system.result"); + +result.string($KeywordRegistry.communicationSettingStatus()); \ No newline at end of file diff --git a/entity/Address_entity/entityfields/cityvalidation/children/currentvalue_param/valueProcess.js b/entity/Person_entity/entityfields/contactcommunicationsettings/children/contactid_param/valueProcess.js similarity index 52% rename from entity/Address_entity/entityfields/cityvalidation/children/currentvalue_param/valueProcess.js rename to entity/Person_entity/entityfields/contactcommunicationsettings/children/contactid_param/valueProcess.js index 74c070329cde0f8edeabd0e80677b4105b3e256e..7b6137b4d105e9ba592cf8ef6e796fb838a32b09 100644 --- a/entity/Address_entity/entityfields/cityvalidation/children/currentvalue_param/valueProcess.js +++ b/entity/Person_entity/entityfields/contactcommunicationsettings/children/contactid_param/valueProcess.js @@ -1,4 +1,4 @@ import("system.vars"); import("system.result"); -result.string(vars.get("$field.CITY")) \ No newline at end of file +result.string(vars.get("$field.CONTACTID")); \ No newline at end of file diff --git a/entity/Person_entity/entityfields/deletefunction/onActionProcess.js b/entity/Person_entity/entityfields/deletefunction/onActionProcess.js index 083e2d8b0d3d0649e0984e06b3947a6ae709fd3e..324c438c9d7953e5177748efa8679fe55ab0e8f6 100644 --- a/entity/Person_entity/entityfields/deletefunction/onActionProcess.js +++ b/entity/Person_entity/entityfields/deletefunction/onActionProcess.js @@ -21,7 +21,7 @@ if(contactIds > 1) entities.deleteRow(config); - DuplicateScannerUtils.deleteCachedDuplicate(contactId); + DuplicateScannerUtils.deleteHasDuplicateEntries("Person_entity", [contactId]); new AttributeRelationQuery(contactId, null, ContextUtils.getCurrentContextId()) .deleteAllAttributes(); diff --git a/entity/Person_entity/entityfields/districtresponsibles/children/orguid_param/valueProcess.js b/entity/Person_entity/entityfields/districtresponsibles/children/orguid_param/valueProcess.js deleted file mode 100644 index 9bae30ceb90f4556e7b3044e3d02abb3d8691eb2..0000000000000000000000000000000000000000 --- a/entity/Person_entity/entityfields/districtresponsibles/children/orguid_param/valueProcess.js +++ /dev/null @@ -1,8 +0,0 @@ -import("system.result"); -import("system.vars"); - - -if (vars.exists("$field.ORGANISATION_CONTACTID") && vars.get("$field.ORGANISATION_CONTACTID")) -{ - result.string(vars.get("$field.ORGANISATION_CONTACTID")); -} \ No newline at end of file diff --git a/entity/Person_entity/entityfields/districtresponsibles/stateProcess.js b/entity/Person_entity/entityfields/districtresponsibles/stateProcess.js deleted file mode 100644 index 6b51996c159548e16d62f4eec7568e089f142022..0000000000000000000000000000000000000000 --- a/entity/Person_entity/entityfields/districtresponsibles/stateProcess.js +++ /dev/null @@ -1,9 +0,0 @@ -import("Employee_lib"); -import("system.result"); -import("system.vars"); -import("system.neon"); - -if (vars.get("$field.ORGANISATION_CONTACTID") && !EmployeeUtils.isUser(vars.get("$field.CONTACTID"))) -{ - result.string(neon.COMPONENTSTATE_EDITABLE); -} \ No newline at end of file diff --git a/entity/Person_entity/entityfields/dsgvodeleteflags/children/contactid_param/valueProcess.js b/entity/Person_entity/entityfields/dsgvodeleteflags/children/contactid_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..7b6137b4d105e9ba592cf8ef6e796fb838a32b09 --- /dev/null +++ b/entity/Person_entity/entityfields/dsgvodeleteflags/children/contactid_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("system.result"); + +result.string(vars.get("$field.CONTACTID")); \ No newline at end of file diff --git a/entity/Person_entity/entityfields/dsgvodeleteflags/stateProcess.js b/entity/Person_entity/entityfields/dsgvodeleteflags/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..76191b70ac2e7e57490e9ae2aeaa4b9162d49936 --- /dev/null +++ b/entity/Person_entity/entityfields/dsgvodeleteflags/stateProcess.js @@ -0,0 +1,15 @@ +import("system.result"); +import("system.project"); +import("system.neon"); + +var isActive = JSON.parse(project.getPreferenceValue("custom.dsgvo.active", "true")); + +if(isActive) +{ + result.string(neon.COMPONENTSTATE_EDITABLE); +} +else +{ + result.string(neon.COMPONENTSTATE_INVISIBLE); +} + \ No newline at end of file diff --git a/entity/Person_entity/entityfields/duplicateactions/children/ignoreduplicate/onActionProcess.js b/entity/Person_entity/entityfields/duplicateactions/children/ignoreduplicate/onActionProcess.js deleted file mode 100644 index c9289cbd0ef896d7dbcf5eae668bac8a87e861da..0000000000000000000000000000000000000000 --- a/entity/Person_entity/entityfields/duplicateactions/children/ignoreduplicate/onActionProcess.js +++ /dev/null @@ -1,10 +0,0 @@ -import("system.neon"); -import("system.vars"); -import("DuplicateScanner_lib"); - -let sourceContactId = vars.get("$param.DuplicateCurrentContactId_param"); -let selectedContactId = vars.get("$sys.selection"); -let clusterId = DuplicateScannerUtils.getClusterId(sourceContactId); -DuplicateScannerUtils.createUnrelatedDuplicateRelation(sourceContactId, selectedContactId, clusterId); - -neon.refreshAll(); \ No newline at end of file diff --git a/entity/Person_entity/entityfields/duplicateactions/children/ignoreduplicate/stateProcess.js b/entity/Person_entity/entityfields/duplicateactions/children/ignoreduplicate/stateProcess.js deleted file mode 100644 index b736eb15f5b18e779e37281fe216c9297ca86191..0000000000000000000000000000000000000000 --- a/entity/Person_entity/entityfields/duplicateactions/children/ignoreduplicate/stateProcess.js +++ /dev/null @@ -1,11 +0,0 @@ -import("system.logging"); -import("system.vars"); -import("system.neon"); -import("system.result"); - -//Actions to show in the duplicates view inside the persons main view - -let actionState = vars.get("$param.DuplicateActionsControl_param"); - -if(actionState != null && actionState != "1")//todo replace with keyword - result.string(neon.COMPONENTSTATE_INVISIBLE); \ No newline at end of file diff --git a/entity/Person_entity/entityfields/duplicateactions/children/ignorewholecluster/onActionProcess.js b/entity/Person_entity/entityfields/duplicateactions/children/ignorewholecluster/onActionProcess.js deleted file mode 100644 index f74997cb1d72c3baa56b1dd12a42ba77eb782769..0000000000000000000000000000000000000000 --- a/entity/Person_entity/entityfields/duplicateactions/children/ignorewholecluster/onActionProcess.js +++ /dev/null @@ -1,28 +0,0 @@ -import("system.logging"); -import("system.neon"); -import("system.vars"); -import("DuplicateScanner_lib"); -import("system.notification"); - -let contactId = vars.get("$field.CONTACTID"); -logging.log("contactId -> " + contactId); -let clusterId = DuplicateScannerUtils.getClusterId(contactId); -logging.log("clusterId -> " + clusterId); -let duplicateContactIdsInClusterRay = DuplicateScannerUtils.getCachedDuplicatesForClusterId(clusterId) -logging.log("duplicateContactIdsInClusterRay -> " + duplicateContactIdsInClusterRay); -if(duplicateContactIdsInClusterRay.length > 1) -{ - let referenceDuplicateId = duplicateContactIdsInClusterRay[0]; - for (let i = 1; i < duplicateContactIdsInClusterRay.length; i++) - { - DuplicateScannerUtils.createUnrelatedDuplicateRelation(referenceDuplicateId, duplicateContactIdsInClusterRay[i], clusterId); - } - neon.refreshAll(); - -// var params = {}; -// params["TargetEntity"] = "Person_entity"; -// -// neon.openContext("Duplicates", "DuplicatesOverview_view", null, neon.OPERATINGSTATE_VIEW, params); -} - - diff --git a/entity/Person_entity/entityfields/duplicateactions/children/ignorewholecluster/stateProcess.js b/entity/Person_entity/entityfields/duplicateactions/children/ignorewholecluster/stateProcess.js deleted file mode 100644 index fdd913ad06bf2815da3127d405d21b258c4ad795..0000000000000000000000000000000000000000 --- a/entity/Person_entity/entityfields/duplicateactions/children/ignorewholecluster/stateProcess.js +++ /dev/null @@ -1,11 +0,0 @@ -import("system.logging"); -import("system.vars"); -import("system.neon"); -import("system.result"); - -//Actions to show in the duplicates view inside the persons main view - -let actionState = vars.get("$param.DuplicateActionsControl_param"); - -if(actionState != null && actionState != "2")//todo replace with keyword - result.string(neon.COMPONENTSTATE_INVISIBLE); \ No newline at end of file diff --git a/entity/Person_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/stateProcess.js b/entity/Person_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/stateProcess.js deleted file mode 100644 index b736eb15f5b18e779e37281fe216c9297ca86191..0000000000000000000000000000000000000000 --- a/entity/Person_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/stateProcess.js +++ /dev/null @@ -1,11 +0,0 @@ -import("system.logging"); -import("system.vars"); -import("system.neon"); -import("system.result"); - -//Actions to show in the duplicates view inside the persons main view - -let actionState = vars.get("$param.DuplicateActionsControl_param"); - -if(actionState != null && actionState != "1")//todo replace with keyword - result.string(neon.COMPONENTSTATE_INVISIBLE); \ No newline at end of file diff --git a/entity/Person_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/stateProcess.js b/entity/Person_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/stateProcess.js deleted file mode 100644 index b736eb15f5b18e779e37281fe216c9297ca86191..0000000000000000000000000000000000000000 --- a/entity/Person_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/stateProcess.js +++ /dev/null @@ -1,11 +0,0 @@ -import("system.logging"); -import("system.vars"); -import("system.neon"); -import("system.result"); - -//Actions to show in the duplicates view inside the persons main view - -let actionState = vars.get("$param.DuplicateActionsControl_param"); - -if(actionState != null && actionState != "1")//todo replace with keyword - result.string(neon.COMPONENTSTATE_INVISIBLE); \ No newline at end of file diff --git a/entity/Person_entity/entityfields/duplicateactions/stateProcess.js b/entity/Person_entity/entityfields/duplicateactions/stateProcess.js deleted file mode 100644 index 5b8b24021ddfcba34a258bf7af7d4ec5ec65852a..0000000000000000000000000000000000000000 --- a/entity/Person_entity/entityfields/duplicateactions/stateProcess.js +++ /dev/null @@ -1,11 +0,0 @@ -import("system.logging"); -import("system.vars"); -import("system.neon"); -import("system.result"); - -//Actions to show in the duplicates view inside the persons main view - -let actionState = vars.get("$param.DuplicateActionsControl_param"); - -if(actionState == null || actionState == "0")//todo replace with keyword - result.string(neon.COMPONENTSTATE_INVISIBLE); \ No newline at end of file diff --git a/entity/Person_entity/entityfields/duplicates/children/obj_param/valueProcess.js b/entity/Person_entity/entityfields/duplicates/children/obj_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..59dc755e2ab02e6af201c71f835676e5172180bc --- /dev/null +++ b/entity/Person_entity/entityfields/duplicates/children/obj_param/valueProcess.js @@ -0,0 +1,23 @@ +import("system.vars"); +import("system.result"); + +result.string(JSON.stringify({ + CONTACTID: vars.get("$field.CONTACTID"), + FIRSTNAME: vars.get("$field.FIRSTNAME"), + MIDDLENAME: vars.get("$field.MIDDLENAME"), + LASTNAME: vars.get("$field.LASTNAME"), + DATEOFBIRTH: vars.get("$field.DATEOFBIRTH"), + GENDER: vars.get("$field.GENDER"), + SALUTATION: vars.get("$field.SALUTATION"), + TITLE: vars.get("$field.TITLE"), + TITLESUFFIX: vars.get("$field.TITLESUFFIX"), + POSITION: vars.get("$field.POSITION"), + STATUS: vars.get("$field.STATUS"), + DEPARTMENT: vars.get("$field.DEPARTMENT"), + STANDARD_ADDRESS: vars.get("$field.STANDARD_ADDRESS"), + STANDARD_CITY: vars.get("$field.STANDARD_CITY"), + STANDARD_COUNTRY: vars.get("$field.STANDARD_COUNTRY"), + STANDARD_EMAIL_COMMUNICATION: vars.get("$field.STANDARD_EMAIL_COMMUNICATION"), + STANDARD_PHONE_COMMUNICATION: vars.get("$field.STANDARD_PHONE_COMMUNICATION"), + STANDARD_ZIP: vars.get("$field.STANDARD_ZIP") +})); diff --git a/entity/Person_entity/entityfields/duplicates/selectionModeProcess.js b/entity/Person_entity/entityfields/duplicates/selectionModeProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..c92317456ba1a7476401171e875526c8eff6fa76 --- /dev/null +++ b/entity/Person_entity/entityfields/duplicates/selectionModeProcess.js @@ -0,0 +1,9 @@ +import("system.result"); +import("system.vars"); +import("system.neon"); + +result.string( + vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW || + vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT ? + "NONE" : "MULTI" +); diff --git a/entity/Person_entity/entityfields/interestlinks/children/contactid_param/valueProcess.js b/entity/Person_entity/entityfields/interestlinks/children/contactid_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..7b6137b4d105e9ba592cf8ef6e796fb838a32b09 --- /dev/null +++ b/entity/Person_entity/entityfields/interestlinks/children/contactid_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("system.result"); + +result.string(vars.get("$field.CONTACTID")); \ No newline at end of file diff --git a/entity/Person_entity/entityfields/keywordcontactstates/children/blacklistids_param/valueProcess.js b/entity/Person_entity/entityfields/keywordcontactstates/children/blacklistids_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..a52cc0873588ad599c0efe525b8ec15716c7ec07 --- /dev/null +++ b/entity/Person_entity/entityfields/keywordcontactstates/children/blacklistids_param/valueProcess.js @@ -0,0 +1,4 @@ +import("KeywordRegistry_basic"); +import("system.result"); + +result.object([$KeywordRegistry.contactStatus$markToDelete()]); \ No newline at end of file diff --git a/entity/Person_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js b/entity/Person_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js index 4941f4e681715d0769512fba14d11801e4fc5d1f..a8eb52024128d27079bf9b9d01377e2e408d308c 100644 --- a/entity/Person_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js +++ b/entity/Person_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js @@ -3,7 +3,7 @@ import("system.result"); import("Context_lib"); var res = []; -res.push({id: vars.get("$field.CONTACTID"), tableNames: ["CONTACT", "COMMUNICATION", "ADDRESS", "AB_ATTRIBUTERELATION"]}); +res.push({id: vars.get("$field.CONTACTID"), tableNames: ["CONTACT", "COMMUNICATION", "ADDRESS", "AB_ATTRIBUTERELATION", "DSGVODELETEFLAG", "DSGVO", "COMMUNICATIONSETTINGS"]}); res.push({id: vars.get("$field.PERSONID"), tableNames: ["PERSON"]}); res = JSON.stringify(res);//currently only strings can be passed as param diff --git a/entity/Person_entity/entityfields/newappointment/onActionProcess.js b/entity/Person_entity/entityfields/newappointment/onActionProcess.js index beb5dd48021852127db99015ed5db0c1417fc5aa..703676cc9ebc97f75fa7af44bd667ec938349ef6 100644 --- a/entity/Person_entity/entityfields/newappointment/onActionProcess.js +++ b/entity/Person_entity/entityfields/newappointment/onActionProcess.js @@ -11,6 +11,10 @@ var links = [ { "OBJECT_ID":vars.get("$field.CONTACTID"), "OBJECT_TYPE":ContextUtils.getCurrentContextId() + }, + { + "OBJECT_ID":vars.get("$field.ORGANISATION_CONTACTID"), + "OBJECT_TYPE":"Organisation" } ]; diff --git a/entity/Person_entity/entityfields/newappointment/stateProcess.js b/entity/Person_entity/entityfields/newappointment/stateProcess.js index aefbc6e8f76f99c4281890f3461553c49562d5b9..5c748f19d4d580b9706725fb5572fe18d7473062 100644 --- a/entity/Person_entity/entityfields/newappointment/stateProcess.js +++ b/entity/Person_entity/entityfields/newappointment/stateProcess.js @@ -3,5 +3,7 @@ import("system.neon"); import("system.vars"); import("KeywordRegistry_basic"); -if (vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$inactive()) - result.string(neon.COMPONENTSTATE_DISABLED); \ No newline at end of file +if (vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$inactive() || vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$markToDelete()) +{ + result.string(neon.COMPONENTSTATE_DISABLED); +} \ No newline at end of file diff --git a/entity/Person_entity/entityfields/newemail/onActionProcess.js b/entity/Person_entity/entityfields/newemail/onActionProcess.js index a4b80166ed668dd700c51c1429cae7aa647edff5..c4ff5861b8aa9dc43e67f0d8975c65216188aab6 100644 --- a/entity/Person_entity/entityfields/newemail/onActionProcess.js +++ b/entity/Person_entity/entityfields/newemail/onActionProcess.js @@ -3,4 +3,5 @@ import("Email_lib"); import("KeywordRegistry_basic"); -EmailWritingUtils.openNewMail(vars.getString("$field.CONTACTID"), null, vars.get("$sys.currentcontextname"), null, null, null, null, null, $KeywordRegistry.documentTemplateTypeCategory$single()); \ No newline at end of file +EmailWritingUtils.openNewMail(vars.getString("$field.CONTACTID"), null, vars.get("$sys.currentcontextname"), null, null, null, null, null, + $KeywordRegistry.documentTemplateTypeCategory$single()); \ No newline at end of file diff --git a/entity/Person_entity/entityfields/newemail/stateProcess.js b/entity/Person_entity/entityfields/newemail/stateProcess.js index aefbc6e8f76f99c4281890f3461553c49562d5b9..5c748f19d4d580b9706725fb5572fe18d7473062 100644 --- a/entity/Person_entity/entityfields/newemail/stateProcess.js +++ b/entity/Person_entity/entityfields/newemail/stateProcess.js @@ -3,5 +3,7 @@ import("system.neon"); import("system.vars"); import("KeywordRegistry_basic"); -if (vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$inactive()) - result.string(neon.COMPONENTSTATE_DISABLED); \ No newline at end of file +if (vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$inactive() || vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$markToDelete()) +{ + result.string(neon.COMPONENTSTATE_DISABLED); +} \ No newline at end of file diff --git a/entity/Person_entity/entityfields/newletter/stateProcess.js b/entity/Person_entity/entityfields/newletter/stateProcess.js index aefbc6e8f76f99c4281890f3461553c49562d5b9..5c748f19d4d580b9706725fb5572fe18d7473062 100644 --- a/entity/Person_entity/entityfields/newletter/stateProcess.js +++ b/entity/Person_entity/entityfields/newletter/stateProcess.js @@ -3,5 +3,7 @@ import("system.neon"); import("system.vars"); import("KeywordRegistry_basic"); -if (vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$inactive()) - result.string(neon.COMPONENTSTATE_DISABLED); \ No newline at end of file +if (vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$inactive() || vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$markToDelete()) +{ + result.string(neon.COMPONENTSTATE_DISABLED); +} \ No newline at end of file diff --git a/entity/Person_entity/entityfields/newoffer/stateProcess.js b/entity/Person_entity/entityfields/newoffer/stateProcess.js index aefbc6e8f76f99c4281890f3461553c49562d5b9..5c748f19d4d580b9706725fb5572fe18d7473062 100644 --- a/entity/Person_entity/entityfields/newoffer/stateProcess.js +++ b/entity/Person_entity/entityfields/newoffer/stateProcess.js @@ -3,5 +3,7 @@ import("system.neon"); import("system.vars"); import("KeywordRegistry_basic"); -if (vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$inactive()) - result.string(neon.COMPONENTSTATE_DISABLED); \ No newline at end of file +if (vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$inactive() || vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$markToDelete()) +{ + result.string(neon.COMPONENTSTATE_DISABLED); +} \ No newline at end of file diff --git a/entity/Person_entity/entityfields/newvisitplanentry/stateProcess.js b/entity/Person_entity/entityfields/newvisitplanentry/stateProcess.js index aefbc6e8f76f99c4281890f3461553c49562d5b9..5c748f19d4d580b9706725fb5572fe18d7473062 100644 --- a/entity/Person_entity/entityfields/newvisitplanentry/stateProcess.js +++ b/entity/Person_entity/entityfields/newvisitplanentry/stateProcess.js @@ -3,5 +3,7 @@ import("system.neon"); import("system.vars"); import("KeywordRegistry_basic"); -if (vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$inactive()) - result.string(neon.COMPONENTSTATE_DISABLED); \ No newline at end of file +if (vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$inactive() || vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$markToDelete()) +{ + result.string(neon.COMPONENTSTATE_DISABLED); +} \ No newline at end of file diff --git a/entity/Person_entity/entityfields/newvisitrecommendation/stateProcess.js b/entity/Person_entity/entityfields/newvisitrecommendation/stateProcess.js index aefbc6e8f76f99c4281890f3461553c49562d5b9..5c748f19d4d580b9706725fb5572fe18d7473062 100644 --- a/entity/Person_entity/entityfields/newvisitrecommendation/stateProcess.js +++ b/entity/Person_entity/entityfields/newvisitrecommendation/stateProcess.js @@ -3,5 +3,7 @@ import("system.neon"); import("system.vars"); import("KeywordRegistry_basic"); -if (vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$inactive()) - result.string(neon.COMPONENTSTATE_DISABLED); \ No newline at end of file +if (vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$inactive() || vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$markToDelete()) +{ + result.string(neon.COMPONENTSTATE_DISABLED); +} \ No newline at end of file diff --git a/entity/Person_entity/entityfields/nonselfduplicates/documentation.adoc b/entity/Person_entity/entityfields/nonselfduplicates/documentation.adoc deleted file mode 100644 index d7964dadc0c8a8c7d5ea6856c3b82d07ccbcc361..0000000000000000000000000000000000000000 --- a/entity/Person_entity/entityfields/nonselfduplicates/documentation.adoc +++ /dev/null @@ -1,3 +0,0 @@ -Provides contact duplicate-records without the `Person_entity` scope, for example for the `Duplicates_entity`. - -The provider is named `NonselfDuplicates` to differentiate this provider and the `SelfDuplicates`-provider. \ No newline at end of file diff --git a/entity/Person_entity/entityfields/openeditdefaultsview/stateProcess.js b/entity/Person_entity/entityfields/openeditdefaultsview/stateProcess.js index aefbc6e8f76f99c4281890f3461553c49562d5b9..8ce4375618f2004c11461e3a9f01e183a463e8d1 100644 --- a/entity/Person_entity/entityfields/openeditdefaultsview/stateProcess.js +++ b/entity/Person_entity/entityfields/openeditdefaultsview/stateProcess.js @@ -3,5 +3,8 @@ import("system.neon"); import("system.vars"); import("KeywordRegistry_basic"); -if (vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$inactive()) - result.string(neon.COMPONENTSTATE_DISABLED); \ No newline at end of file +if (vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$inactive() || vars.get("$field.STATUS") == $KeywordRegistry.contactStatus$markToDelete()) +{ + result.string(neon.COMPONENTSTATE_DISABLED); +} + \ No newline at end of file diff --git a/entity/Person_entity/entityfields/personid/valueProcess.js b/entity/Person_entity/entityfields/personid/valueProcess.js index 86ef789e064a4016f2d12c432498dc23474807aa..293bbaf03442ce3edfc5c3cbc0c09953b8f935c9 100644 --- a/entity/Person_entity/entityfields/personid/valueProcess.js +++ b/entity/Person_entity/entityfields/personid/valueProcess.js @@ -3,5 +3,7 @@ import("system.vars"); import("system.result"); import("system.neon"); -if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) - result.string(util.getNewUUID()); \ No newline at end of file +if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) +{ + result.string(util.getNewUUID()); +} \ No newline at end of file diff --git a/entity/Person_entity/entityfields/selfduplicates/documentation.adoc b/entity/Person_entity/entityfields/selfduplicates/documentation.adoc deleted file mode 100644 index 4f02d8b1a256bb4d0a791bab46cf0cda23790c84..0000000000000000000000000000000000000000 --- a/entity/Person_entity/entityfields/selfduplicates/documentation.adoc +++ /dev/null @@ -1 +0,0 @@ -Provides contact duplicate-records within the `Person_entity` scope itself. \ No newline at end of file diff --git a/entity/Person_entity/entityfields/selfduplicatesuncached/children/duplicateactionscontrol_param/valueProcess.js b/entity/Person_entity/entityfields/selfduplicatesuncached/children/duplicateactionscontrol_param/valueProcess.js deleted file mode 100644 index 81570217c3ecd3cf76deb5e14d7ac0a6121a59bb..0000000000000000000000000000000000000000 --- a/entity/Person_entity/entityfields/selfduplicatesuncached/children/duplicateactionscontrol_param/valueProcess.js +++ /dev/null @@ -1,2 +0,0 @@ -import("system.result"); -result.string("1");//todo use keyword \ No newline at end of file diff --git a/entity/Person_entity/entityfields/selfduplicatesuncached/children/excludedcontactids_param/valueProcess.js b/entity/Person_entity/entityfields/selfduplicatesuncached/children/excludedcontactids_param/valueProcess.js deleted file mode 100644 index 849632882bbabd4e65dfb25c7dc984366bde5116..0000000000000000000000000000000000000000 --- a/entity/Person_entity/entityfields/selfduplicatesuncached/children/excludedcontactids_param/valueProcess.js +++ /dev/null @@ -1,7 +0,0 @@ -import("system.logging"); -import("system.vars"); -import("system.result"); -import("DuplicateScanner_lib"); - -let unrelatedIds = DuplicateScannerUtils.getUnrelatedRelationsForDuplicate(vars.get("$field.CONTACTID")); -result.string(JSON.stringify(unrelatedIds)); \ No newline at end of file diff --git a/entity/Person_entity/entityfields/selfduplicatesuncached/children/onlyshowcontactids_param/valueProcess.js b/entity/Person_entity/entityfields/selfduplicatesuncached/children/onlyshowcontactids_param/valueProcess.js deleted file mode 100644 index 8fa370156eae601ebddb1f7b6f024650a156de52..0000000000000000000000000000000000000000 --- a/entity/Person_entity/entityfields/selfduplicatesuncached/children/onlyshowcontactids_param/valueProcess.js +++ /dev/null @@ -1,60 +0,0 @@ -import("system.indexsearch"); -import("system.project"); -import("system.logging"); -import("system.vars"); -import("DuplicateScanner_lib"); -import("system.result"); - -var scannerName = "PersonDuplicates"; -var targetEntity = "Person_entity"; -var valuesToCheck = {}; -var entityFieldsToLoad = DuplicateScannerUtils.getEntityFieldObjectFromConfig(scannerName, targetEntity); - -var idsForEmptyResult = JSON.stringify(["nodata"]); - -if (entityFieldsToLoad == null) - result.string(idsForEmptyResult); -else -{ - //Read the values of all available entity fields and write the fieldname7value combination - //as key/value pairs into an object. This is used to trigger the scan for duplicates - - vars.get("$field.STANDARD_CITY"); - vars.get("$field.STANDARD_ZIP"); - vars.get("$field.STANDARD_ADDRESS"); - vars.get("$field.FIRSTNAME"); - vars.get("$field.LASTNAME"); - vars.get("$field.PersAddresses.insertedRows") - vars.get("$field.PersAddresses.changedRows") - vars.get("$field.PersAddresses.deletedRows") - - var allFieldsToLoad = entityFieldsToLoad.entityFields.concat(entityFieldsToLoad.entityIdField); - allFieldsToLoad.forEach(function (field) - { - var fieldValue = vars.get("$field." + field); - if (fieldValue) - valuesToCheck[field] = fieldValue; - }); - - var scanResults = []; - - //don't search if only the id field has a value - var fieldsToCheck = Object.keys(valuesToCheck); - if (!(fieldsToCheck.length === 0 || (fieldsToCheck.length === 1 && entityFieldsToLoad.entityIdField in valuesToCheck))) - scanResults = DuplicateScannerUtils.scanForDuplicates(scannerName, targetEntity, valuesToCheck, null) || []; - - var duplicateIds = scanResults.map(function (duplicate) - { - return duplicate[indexsearch.FIELD_ID]; - }); - - /* - * To achieve that if there are no duplicates, no contacts should be shown and therefore returned by the - * recordcontainer, an invalid id gets returned. It then is used in the conditionProcess to load the duplicates. - * Because of its invalidity, no records are shown. - */ - if (duplicateIds.length == 0) - result.string(idsForEmptyResult); - else - result.string(JSON.stringify(duplicateIds)); -} \ No newline at end of file diff --git a/entity/Person_entity/entityfields/status/stateProcess.js b/entity/Person_entity/entityfields/status/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..f0a13ec4459b571c5dda9ee71b3470fc70866531 --- /dev/null +++ b/entity/Person_entity/entityfields/status/stateProcess.js @@ -0,0 +1,9 @@ +import("KeywordRegistry_basic"); +import("system.result"); +import("system.vars"); +import("system.neon"); + +if (vars.get("$this.value") == $KeywordRegistry.contactStatus$markToDelete() && vars.get("$sys.recordstate") != "") +{ + result.string(neon.COMPONENTSTATE_READONLY); +} \ No newline at end of file diff --git a/entity/Person_entity/initFilterProcess.js b/entity/Person_entity/initFilterProcess.js index f64ef8977cc3f20a910f104d6196bfe90c43fc34..afecc1ede02d6f412681545610696b1efa17dc90 100644 --- a/entity/Person_entity/initFilterProcess.js +++ b/entity/Person_entity/initFilterProcess.js @@ -1,14 +1,14 @@ -import("system.entities"); +import("system.neon"); +import("system.vars"); import("Keyword_lib"); import("KeywordRegistry_basic"); import("system.result"); -import("system.vars"); -import("system.neon"); -if (vars.get("$sys.presentationmode") === neon.CONTEXT_PRESENTATIONMODE_FILTER) +var filter = vars.get("$param.FilterPreSet_param"); +if(!filter && vars.get("$sys.presentationmode") === neon.CONTEXT_PRESENTATIONMODE_FILTER) { var statusInactive = $KeywordRegistry.contactStatus$inactive(); - var filter = { + filter = JSON.stringify({ type: "group", operator: "AND", childs: [{ @@ -19,7 +19,9 @@ if (vars.get("$sys.presentationmode") === neon.CONTEXT_PRESENTATIONMODE_FILTER) key: statusInactive, value: KeywordUtils.getViewValue($KeywordRegistry.contactStatus(), statusInactive) }] - }; - - result.string(JSON.stringify(filter)); -} \ No newline at end of file + }); +} +if(filter) +{ + result.string(filter); +} diff --git a/entity/Person_entity/recordcontainers/db/conditionProcess.js b/entity/Person_entity/recordcontainers/db/conditionProcess.js index 338811158360900835c45a56b055904518f65ed6..c24eb7b7e0e4ffb85e6660796fabfe866ec6129d 100644 --- a/entity/Person_entity/recordcontainers/db/conditionProcess.js +++ b/entity/Person_entity/recordcontainers/db/conditionProcess.js @@ -10,11 +10,15 @@ import("system.result"); import("Sql_lib"); var cond = newWhereIfSet("CONTACT.ORGANISATION_ID", "$param.OrgId_param") - .andIfSet("CONTACT.CONTACTID", "$param.ContactId_param"); +.andIfSet("CONTACT.CONTACTID", "$param.ContactId_param"); if(vars.getString("$param.OnlyActive_param") == "true") +{ cond.and("CONTACT.STATUS", $KeywordRegistry.contactStatus$inactive(), SqlBuilder.NOT_EQUAL()); + cond.and("CONTACT.STATUS", $KeywordRegistry.contactStatus$markToDelete(), SqlBuilder.NOT_EQUAL()); +} + if (vars.exists("$param.ExcludedContactIds_param") && vars.get("$param.ExcludedContactIds_param")) { @@ -38,7 +42,7 @@ if (vars.exists("$param.OnlyOwnSupervised_param") && vars.get("$param.OnlyOwnSup .and("AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID", $AttributeRegistry.responsibleADsupervisor()) .and("AB_ATTRIBUTERELATION." + AttributeTypes.OBJECTSELECTION.databaseField, EmployeeUtils.sliceUserId(EmployeeUtils.getCurrentUserId())), SqlBuilder.EXISTS() - ); + ); } result.string(cond.toString()); \ No newline at end of file diff --git a/entity/Person_entity/recordcontainers/db/filterextensions/advertising_filter/filterConditionProcess.js b/entity/Person_entity/recordcontainers/db/filterextensions/advertising_filter/filterConditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..ae1a432eacebeabaf18aa40902a1198c72bf4304 --- /dev/null +++ b/entity/Person_entity/recordcontainers/db/filterextensions/advertising_filter/filterConditionProcess.js @@ -0,0 +1,4 @@ +import("Advertising_lib"); +import("system.result"); + +result.string(AdvertisingUtils.getAdvertisingFilterExtensionCondition()); \ No newline at end of file diff --git a/entity/Person_entity/recordcontainers/db/filterextensions/bulkmailreceived_filter/filterConditionProcess.js b/entity/Person_entity/recordcontainers/db/filterextensions/bulkmailreceived_filter/filterConditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..d3faf412183151d3c87fb8b5b1aa91785f096fcf --- /dev/null +++ b/entity/Person_entity/recordcontainers/db/filterextensions/bulkmailreceived_filter/filterConditionProcess.js @@ -0,0 +1,23 @@ +import("KeywordRegistry_basic"); +import("Sql_lib"); +import("system.result"); +import("system.vars"); + +var bulkmailRecipientSql = newSelect("BULKMAILRECIPIENTID") + .from("BULKMAILRECIPIENT") + .where("BULKMAILRECIPIENT.CONTACT_ID = CONTACT.CONTACTID") + .and("BULKMAILRECIPIENT.STATUS", $KeywordRegistry.bulkMailRecipientStatus$sent()); + +var condType = SqlBuilder.EXISTS(); +var operator = vars.get("$local.comparison"); + +if (operator == "NOT_EQUAL" || operator == "ISNULL") +{ + condType = SqlBuilder.NOT_EXISTS(); +} +if (operator == "EQUAL" || operator == "NOT_EQUAL") +{ + bulkmailRecipientSql.and("BULKMAILRECIPIENT.BULKMAIL_ID", vars.get("$local.rawvalue")); +} + +result.string(newWhere(null, bulkmailRecipientSql, condType)); \ No newline at end of file diff --git a/entity/Person_entity/recordcontainers/db/filterextensions/campaignparticipation_filter/filterConditionProcess.js b/entity/Person_entity/recordcontainers/db/filterextensions/campaignparticipation_filter/filterConditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..d3472ac783401b760e6f0b59b7737117947583a2 --- /dev/null +++ b/entity/Person_entity/recordcontainers/db/filterextensions/campaignparticipation_filter/filterConditionProcess.js @@ -0,0 +1,21 @@ +import("Sql_lib"); +import("system.result"); +import("system.vars"); + +var campaignParticipantSql = newSelect("CAMPAIGNPARTICIPANTID") + .from("CAMPAIGNPARTICIPANT") + .where("CAMPAIGNPARTICIPANT.CONTACT_ID = CONTACT.CONTACTID"); + +var condType = SqlBuilder.EXISTS(); +var operator = vars.get("$local.comparison"); + +if (operator == "NOT_EQUAL" || operator == "ISNULL") +{ + condType = SqlBuilder.NOT_EXISTS(); +} +if (operator == "EQUAL" || operator == "NOT_EQUAL") +{ + campaignParticipantSql.and("CAMPAIGNPARTICIPANT.CAMPAIGN_ID", vars.get("$local.rawvalue")); +} + +result.string(newWhere(null, campaignParticipantSql, condType)); \ No newline at end of file diff --git a/entity/Person_entity/recordcontainers/db/filterextensions/communicationsettings_filter/filterConditionProcess.js b/entity/Person_entity/recordcontainers/db/filterextensions/communicationsettings_filter/filterConditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..b45b894a148f0b32658a19efcd0c383f070059d3 --- /dev/null +++ b/entity/Person_entity/recordcontainers/db/filterextensions/communicationsettings_filter/filterConditionProcess.js @@ -0,0 +1,21 @@ +import("Sql_lib"); +import("system.result"); +import("system.vars"); +import("MarketingCondition_lib"); + +var mediumId = vars.get("$local.name"); +mediumId = mediumId.slice(mediumId.lastIndexOf(".") + 1); +var condition = new CommunicationSettingsCondition() + .medium(mediumId); + +var operator = vars.get("$local.comparison"); +if (operator == "EQUAL" || operator == "NOT_EQUAL") +{ + condition.status(vars.get("$local.rawvalue")); +} +if (operator == "NOT_EQUAL" || operator == "ISNULL") +{ + condition.existNoSettings(); +} + +result.string(condition.buildCondition().toString()); \ No newline at end of file diff --git a/entity/Person_entity/recordcontainers/db/filterextensions/communicationsettings_filter/filterFieldsProcess.js b/entity/Person_entity/recordcontainers/db/filterextensions/communicationsettings_filter/filterFieldsProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..31db294836785e691a74681590ba304d31ebad96 --- /dev/null +++ b/entity/Person_entity/recordcontainers/db/filterextensions/communicationsettings_filter/filterFieldsProcess.js @@ -0,0 +1,25 @@ +import("system.translate"); +import("system.result"); +import("KeywordRegistry_basic"); +import("Keyword_lib"); + +var mediums = KeywordUtils.getEntryNamesAndIdsByContainer($KeywordRegistry.communicationMediumCampaign(), null, true); +var filterFields = []; +mediums.forEach(function ([mediumId, mediumTitle]) +{ + if (mediumId != $KeywordRegistry.communicationMediumCampaign$letter()) + { + filterFields.push({ + name: mediumId, + title: translate.withArguments("Communication Setting: %0", [mediumTitle]), + contentType: "TEXT", + hasDropDownValues: false, + isGroupable: false, + groupedRecordField: null, + titleRecordField: null, + consumer: "CommunicationSettingStatusKeyword" + }); + } +}); + +result.string(JSON.stringify(filterFields)); \ No newline at end of file diff --git a/entity/Person_entity/recordcontainers/db/filterextensions/duplicates_filter/filterConditionProcess.js b/entity/Person_entity/recordcontainers/db/filterextensions/duplicates_filter/filterConditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..6a53c389f9916191793616c6e838f781cd140e7c --- /dev/null +++ b/entity/Person_entity/recordcontainers/db/filterextensions/duplicates_filter/filterConditionProcess.js @@ -0,0 +1,16 @@ +import("system.result"); +import("Sql_lib"); +import("system.vars"); +import("DuplicateScanner_lib"); + +var sqlOperator = SqlUtils.getSqlConditionalOperator(vars.get("$local.operator")); + +result.string(newWhere( + "CONTACT.CONTACTID", + DuplicateScannerUtils.getDuplicateConditionalListSql( + ["Person_entity"], + vars.get("$local.rawvalue"), + sqlOperator, true + ), + SqlBuilder.IN() +)); diff --git a/entity/Person_entity/recordcontainers/db/filterextensions/interestlink_filter/filterConditionProcess.js b/entity/Person_entity/recordcontainers/db/filterextensions/interestlink_filter/filterConditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..daf0725b4a43c6c68a2c67006e31ef4efc987c83 --- /dev/null +++ b/entity/Person_entity/recordcontainers/db/filterextensions/interestlink_filter/filterConditionProcess.js @@ -0,0 +1,23 @@ +import("KeywordRegistry_basic"); +import("Sql_lib"); +import("system.result"); +import("system.vars"); + +var interestLinkSql = newSelect("INTERESTLINKID") + .from("INTERESTLINK") + .where("INTERESTLINK.CONTACT_ID = CONTACT.CONTACTID") + .and("INTERESTLINK.STATUS", $KeywordRegistry.interestLinkStatus$subscribed()); + +var condType = SqlBuilder.EXISTS(); +var operator = vars.get("$local.comparison"); + +if (operator == "NOT_EQUAL" || operator == "ISNULL") +{ + condType = SqlBuilder.NOT_EXISTS(); +} +if (operator == "EQUAL" || operator == "NOT_EQUAL") +{ + interestLinkSql.and("INTERESTLINK.INTEREST_ID", vars.get("$local.rawvalue")); +} + +result.string(newWhere(null, interestLinkSql, condType)); \ No newline at end of file diff --git a/entity/Person_entity/recordcontainers/db/filterextensions/isemployee_filter/filterConditionProcess.js b/entity/Person_entity/recordcontainers/db/filterextensions/isemployee_filter/filterConditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..4ba4942ef35de128bbda600380a3202f62e7d8bb --- /dev/null +++ b/entity/Person_entity/recordcontainers/db/filterextensions/isemployee_filter/filterConditionProcess.js @@ -0,0 +1,38 @@ +import("Util_lib"); +import("system.tools"); +import("KeywordRegistry_basic"); +import("Sql_lib"); +import("system.vars"); +import("system.result"); + +var operator = vars.get("$local.operator"); +var rawvalue = vars.get("$local.rawvalue"); +var operator2 = null; +var contactIDs = []; + +users = tools.getUsersByAttribute(tools.ISACTIVE, ["true"], tools.PROFILE_DEFAULT); + +rawvalue = (Utils.toBoolean(rawvalue)); + +if(operator == "1" && !rawvalue || operator == "2" && rawvalue ) +{ + operator2 = SqlBuilder.NOT_IN(); +} +else if(operator == "1" && rawvalue || operator == "2" && !rawvalue) +{ + operator2 = SqlBuilder.IN(); +} +else +{ + result.string(newWhere().noResult().toString()); +} + +for (let i = 0; i < users.length; i++) +{ + contactIDs.push(users[i].params.contactID); +} + +if (contactIDs.length > 0 && operator2) +{ + result.string(newWhere("CONTACT.CONTACTID", contactIDs, operator2).toString()); +} \ No newline at end of file diff --git a/entity/Person_entity/recordcontainers/db/filterextensions/isemployee_filter/filterValuesProcess.js b/entity/Person_entity/recordcontainers/db/filterextensions/isemployee_filter/filterValuesProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..4462144da5638267f7c76cce0c779305ae80c089 --- /dev/null +++ b/entity/Person_entity/recordcontainers/db/filterextensions/isemployee_filter/filterValuesProcess.js @@ -0,0 +1,4 @@ +import("system.translate"); +import("system.result"); + +result.object([["true", translate.text("Yes")], ["false", translate.text("No")]]); \ No newline at end of file diff --git a/entity/Person_entity/recordcontainers/db/onDBDelete.js b/entity/Person_entity/recordcontainers/db/onDBDelete.js index 56d4461823493222635f99ab42de361ec497f838..26d095805ed1fc2a0f944c3a99c4f7e49475057a 100644 --- a/entity/Person_entity/recordcontainers/db/onDBDelete.js +++ b/entity/Person_entity/recordcontainers/db/onDBDelete.js @@ -6,7 +6,7 @@ import("system.vars"); import("DuplicateScanner_lib"); var contactId = vars.get("$field.CONTACTID"); -DuplicateScannerUtils.deleteCachedDuplicate(contactId); +DuplicateScannerUtils.deleteHasDuplicateEntries("Person_entity", [contactId]); new AttributeRelationQuery(contactId, null, ContextUtils.getCurrentContextId()) .deleteAllAttributes(); diff --git a/entity/Person_entity/recordcontainers/db/onDBInsert.js b/entity/Person_entity/recordcontainers/db/onDBInsert.js index 3385c553d10f5332ad4c946ea239bf7bcdf4b6bc..8d1c5ddea0bed7f36862a8423508f130794a3a07 100644 --- a/entity/Person_entity/recordcontainers/db/onDBInsert.js +++ b/entity/Person_entity/recordcontainers/db/onDBInsert.js @@ -4,6 +4,9 @@ import("Sql_lib"); import("system.db"); import("DataPrivacy_lib"); import("system.vars"); +import("DuplicateScanner_lib"); + +DuplicateScannerUtils.updateHasDuplicateEntry("Person_entity"); //let targetEntity = "Person_entity"; let contactId = vars.get("$local.uid"); diff --git a/entity/Person_entity/recordcontainers/db/onDBUpdate.js b/entity/Person_entity/recordcontainers/db/onDBUpdate.js index 0c29899fd4393c2528219ef9dc213eb151d10b18..100f1f714f83179a745ab4c332591ab988c0e60b 100644 --- a/entity/Person_entity/recordcontainers/db/onDBUpdate.js +++ b/entity/Person_entity/recordcontainers/db/onDBUpdate.js @@ -8,6 +8,9 @@ import("Person_lib"); import("Communication_lib"); import("Entity_lib"); import("StandardObject_lib"); +import("DuplicateScanner_lib"); + +DuplicateScannerUtils.updateHasDuplicateEntry("Person_entity"); var localChanged = vars.get("$local.changed"); var orgChanged = false; diff --git a/entity/Person_entity/recordcontainers/db/recordfieldmappings/campaigns/filterConditionProcess.js b/entity/Person_entity/recordcontainers/db/recordfieldmappings/campaigns/filterConditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..7217d840fee842a5ba7e90b24829446b93fcf038 --- /dev/null +++ b/entity/Person_entity/recordcontainers/db/recordfieldmappings/campaigns/filterConditionProcess.js @@ -0,0 +1,12 @@ +import("system.vars"); +import("Sql_lib"); +import("system.result"); + +result.string(newWhere("CONTACT.PERSON_ID", + newSelect("SALESORDER.CONTACT_ID") + .from("CONTACT") + .join("SALESORDER", + newWhere("CONTACT.CONTACTID = SALESORDER.CONTACT_ID")) + .whereIfSet(vars.get("$local.condition")), + SqlBuilder.IN()) +.toString()); \ No newline at end of file diff --git a/entity/Person_entity/recordcontainers/db/recordfieldmappings/commrestrictions_active.value/expression.js b/entity/Person_entity/recordcontainers/db/recordfieldmappings/commrestrictions_active.value/expression.js deleted file mode 100644 index 5c633cb5d6343c9ab5546304ab34410b8062adc5..0000000000000000000000000000000000000000 --- a/entity/Person_entity/recordcontainers/db/recordfieldmappings/commrestrictions_active.value/expression.js +++ /dev/null @@ -1,4 +0,0 @@ -import("Contact_lib"); -import("system.result"); - -result.string(ContactUtils.getActiveCommRestrictionsSubselect()); \ No newline at end of file diff --git a/entity/Person_entity/recordcontainers/db/recordfieldmappings/contracts/filterConditionProcess.js b/entity/Person_entity/recordcontainers/db/recordfieldmappings/contracts/filterConditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..03e121a6f567a23f1c54c0474cb8ed8a4e414975 --- /dev/null +++ b/entity/Person_entity/recordcontainers/db/recordfieldmappings/contracts/filterConditionProcess.js @@ -0,0 +1,10 @@ +import("system.vars"); +import("Sql_lib"); +import("system.result"); + +result.string(newWhere("CONTACT.CONTACT_ID", + newSelect("CONTRACT.CONTACT_ID") + .from("CONTRACT") + .whereIfSet(vars.get("$local.condition")), + SqlBuilder.IN()) +.toString()) \ No newline at end of file diff --git a/entity/Person_entity/recordcontainers/db/recordfieldmappings/offers/filterConditionProcess.js b/entity/Person_entity/recordcontainers/db/recordfieldmappings/offers/filterConditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..a977f62ef6ff61d8d3125ca070722ac674897dfd --- /dev/null +++ b/entity/Person_entity/recordcontainers/db/recordfieldmappings/offers/filterConditionProcess.js @@ -0,0 +1,13 @@ +import("Sql_lib"); +import("system.vars"); +import("system.result"); + +result.string(newWhere("PERSON.PERSONID", + newSelect("CONTACT.PERSON_ID") + .from("CONTACT") + .join("OFFER", + newWhere("CONTACT.CONTACTID = OFFER.CONTACT_ID")) + .whereIfSet(vars.get("$local.condition")), + SqlBuilder.IN()) +.toString()); + diff --git a/entity/Person_entity/recordcontainers/db/recordfieldmappings/orders/filterConditionProcess.js b/entity/Person_entity/recordcontainers/db/recordfieldmappings/orders/filterConditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..25c57f4cc5af755dee6679691c65a5210892b742 --- /dev/null +++ b/entity/Person_entity/recordcontainers/db/recordfieldmappings/orders/filterConditionProcess.js @@ -0,0 +1,17 @@ +import("system.vars"); +import("Sql_lib"); +import("system.result"); + +result.string(newWhere("CONTACT.CONTACT_ID", + newSelect("CAMPAIGNPARTICIPANT.CONTACT_ID") + .from("CAMPAIGN") + .join("CAMPAIGNPARTICIPANT", + newWhere("CAMPAIGN.CAMPAIGNID = CAMPAIGNPARTICIPANT.CAMPAIGN_ID")) + .whereIfSet(vars.get("$local.condition")), + SqlBuilder.IN()) +.orIfSet("CONTACT.CONTACT_ID", + newSelect("CAMPAIGN.EMPLOYEE_CONTACT_ID") + .from("CAMPAIGN") + .whereIfSet(vars.get("$local.condition")), + SqlBuilder.IN()) +.toString()); \ No newline at end of file diff --git a/entity/Person_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js b/entity/Person_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..41ef07ff58ec51eda018bed12cb5b0b2b657c348 --- /dev/null +++ b/entity/Person_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js @@ -0,0 +1,5 @@ +import("system.result"); +import("Communication_lib"); + +var res = CommUtil.getStandardSubSqlMail(); +result.string(res); \ No newline at end of file diff --git a/entity/Person_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js b/entity/Person_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..320ae40ad1ba794b4e759037fa0f382b9af67696 --- /dev/null +++ b/entity/Person_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js @@ -0,0 +1,5 @@ +import("system.result"); +import("Communication_lib"); + +var res = CommUtil.getStandardSubSqlPhone(); +result.string(res); \ No newline at end of file diff --git a/entity/Person_entity/recordcontainers/db/recordfieldmappings/tasks/filterConditionProcess.js b/entity/Person_entity/recordcontainers/db/recordfieldmappings/tasks/filterConditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..f54fd98dd31046b7693d195bac361769219f0aad --- /dev/null +++ b/entity/Person_entity/recordcontainers/db/recordfieldmappings/tasks/filterConditionProcess.js @@ -0,0 +1,16 @@ +import("system.vars"); +import("Sql_lib"); +import("system.result"); + + +result.string(newWhere("CONTACT.CONTACT_ID", + newSelect("TASK.REQUESTOR_CONTACT_ID") + .from("TASK") + .whereIfSet(vars.get("$local.condition")), + SqlBuilder.IN()) +.orIfSet("CONTACT.CONTACT_ID", + newSelect("TASK.EDITOR_CONTACT_ID") + .from("TASK") + .whereIfSet(vars.get("$local.condition")), + SqlBuilder.IN()) +.toString()); \ No newline at end of file diff --git a/entity/PlanningAddToOrganisations_entity/PlanningAddToOrganisations_entity.aod b/entity/PlanningAddToOrganisations_entity/PlanningAddToOrganisations_entity.aod new file mode 100644 index 0000000000000000000000000000000000000000..c26311d3b6f225aad5a2a320faf5897412efd373 --- /dev/null +++ b/entity/PlanningAddToOrganisations_entity/PlanningAddToOrganisations_entity.aod @@ -0,0 +1,158 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> + <name>PlanningAddToOrganisations_entity</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <documentation>%aditoprj%/entity/PlanningAddToOrganisations_entity/documentation.adoc</documentation> + <afterUiInit>%aditoprj%/entity/PlanningAddToOrganisations_entity/afterUiInit.js</afterUiInit> + <afterSave>%aditoprj%/entity/PlanningAddToOrganisations_entity/afterSave.js</afterSave> + <recordContainer>jdito</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + </entityProvider> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityField> + <name>YEAR</name> + <title>Year</title> + <contentType>DATE</contentType> + <resolution>YEAR</resolution> + <state>EDITABLE</state> + <valueProcess>%aditoprj%/entity/PlanningAddToOrganisations_entity/entityfields/year/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>VOLUME</name> + <state>EDITABLE</state> + <titleProcess>%aditoprj%/entity/PlanningAddToOrganisations_entity/entityfields/volume/titleProcess.js</titleProcess> + </entityField> + <entityConsumer> + <name>Organisations</name> + <dependency> + <name>dependency</name> + <entityName>OrganisationsMultiEdit_entity</entityName> + <fieldName>#PROVIDER</fieldName> + </dependency> + </entityConsumer> + <entityField> + <name>UID</name> + </entityField> + <entityParameter> + <name>SelectedOrganisations_param</name> + <expose v="true" /> + </entityParameter> + <entityField> + <name>STATUS</name> + <title>Status</title> + <consumer>KeywordStatus</consumer> + <state>READONLY</state> + <valueProcess>%aditoprj%/entity/PlanningAddToOrganisations_entity/entityfields/status/valueProcess.js</valueProcess> + <displayValueProcess>%aditoprj%/entity/PlanningAddToOrganisations_entity/entityfields/status/displayValueProcess.js</displayValueProcess> + </entityField> + <entityField> + <name>RESPONSIBLE_CONTACT_ID</name> + <title>Responsible</title> + <consumer>Responsible</consumer> + <state>EDITABLE</state> + <valueProcess>%aditoprj%/entity/PlanningAddToOrganisations_entity/entityfields/responsible_contact_id/valueProcess.js</valueProcess> + <displayValueProcess>%aditoprj%/entity/PlanningAddToOrganisations_entity/entityfields/responsible_contact_id/displayValueProcess.js</displayValueProcess> + </entityField> + <entityField> + <name>GROUPCODE</name> + <title>Product group</title> + <consumer>KeywordGroupcode</consumer> + <state>EDITABLE</state> + <displayValueProcess>%aditoprj%/entity/PlanningAddToOrganisations_entity/entityfields/groupcode/displayValueProcess.js</displayValueProcess> + </entityField> + <entityConsumer> + <name>KeywordGroupcode</name> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/PlanningAddToOrganisations_entity/entityfields/keywordgroupcode/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityConsumer> + <name>KeywordStatus</name> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/PlanningAddToOrganisations_entity/entityfields/keywordstatus/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityConsumer> + <name>Responsible</name> + <dependency> + <name>dependency</name> + <entityName>Employee_entity</entityName> + <fieldName>Employees</fieldName> + </dependency> + </entityConsumer> + <entityConsumer> + <name>PlanningsAlreadyExists</name> + <dependency> + <name>dependency</name> + <entityName>Planning_entity</entityName> + <fieldName>Plannings</fieldName> + </dependency> + <children> + <entityParameter> + <name>PlanningIds_param</name> + <valueProcess>%aditoprj%/entity/PlanningAddToOrganisations_entity/entityfields/planningsalreadyexists/children/planningids_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityConsumer> + <name>PlanningsNew</name> + <dependency> + <name>dependency</name> + <entityName>Planning_entity</entityName> + <fieldName>Plannings</fieldName> + </dependency> + <children> + <entityParameter> + <name>PlanningIds_param</name> + <valueProcess>%aditoprj%/entity/PlanningAddToOrganisations_entity/entityfields/planningsnew/children/planningids_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityParameter> + <name>PlanningIdsNew_param</name> + <expose v="true" /> + </entityParameter> + <entityParameter> + <name>PlanningIdsAlreadyExists_param</name> + <expose v="true" /> + </entityParameter> + <entityParameter> + <name>OrganisationsWithFilter_param</name> + <expose v="true" /> + </entityParameter> + </entityFields> + <recordContainers> + <jDitoRecordContainer> + <name>jdito</name> + <jDitoRecordAlias>Data_alias</jDitoRecordAlias> + <contentProcess>%aditoprj%/entity/PlanningAddToOrganisations_entity/recordcontainers/jdito/contentProcess.js</contentProcess> + <onInsert>%aditoprj%/entity/PlanningAddToOrganisations_entity/recordcontainers/jdito/onInsert.js</onInsert> + <recordFieldMappings> + <jDitoRecordFieldMapping> + <name>UID.value</name> + </jDitoRecordFieldMapping> + </recordFieldMappings> + </jDitoRecordContainer> + </recordContainers> +</entity> diff --git a/entity/PlanningAddToOrganisations_entity/afterSave.js b/entity/PlanningAddToOrganisations_entity/afterSave.js new file mode 100644 index 0000000000000000000000000000000000000000..559470208ca89a3a5a43ca4f2f8c6f06d2fd591b --- /dev/null +++ b/entity/PlanningAddToOrganisations_entity/afterSave.js @@ -0,0 +1,14 @@ +import("system.neon"); +import("system.vars"); + + +var instertedPlannings = vars.get("$context.InsertedPlannings"); +var existingPlannings = vars.get("$context.ExistingPlannings"); +var uid = vars.get("$local.entitydata")["UID"]; + +var params = { + "PlanningIdsNew_param": instertedPlannings, + "PlanningIdsAlreadyExists_param": existingPlannings +}; + +neon.openContext("PlanningAddToOrganisations", "PlanningAddToOrganisationOverlay_view", [uid], neon.OPERATINGSTATE_VIEW, params); \ No newline at end of file diff --git a/entity/PlanningAddToOrganisations_entity/afterUiInit.js b/entity/PlanningAddToOrganisations_entity/afterUiInit.js new file mode 100644 index 0000000000000000000000000000000000000000..9d32ea72e6e8350f799fb65c3df5392278e7c690 --- /dev/null +++ b/entity/PlanningAddToOrganisations_entity/afterUiInit.js @@ -0,0 +1,39 @@ +import("Sql_lib"); +import("system.util"); +import("system.vars"); +import("system.neon"); + +var selectedOrganisations = JSON.parse(vars.get("$param.SelectedOrganisations_param")); +var organisationsWithFilter = JSON.parse(vars.get("$param.OrganisationsWithFilter_param")); + +// If nothing is selected in the organisation, a filter is provided to limit the companies in the query. +if(organisationsWithFilter) +{ + selectedOrganisations = newSelect("CONTACT.CONTACTID") + .from("ORGANISATION") + .join("CONTACT", "ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID and CONTACT.PERSON_ID is null") + .leftJoin("ADDRESS", "ADDRESS.ADDRESSID = CONTACT.ADDRESS_ID") + .leftJoin("CLASSIFICATIONSTORAGE", "CLASSIFICATIONSTORAGE.OBJECT_ROWID = CONTACT.CONTACTID") + .where(organisationsWithFilter.condition) + .arrayColumn(); +} + +if(selectedOrganisations) +{ + var emptyRows = vars.get("$field.Organisations.insertedRows"); + + // the empty rows of the consumer are deleted + emptyRows.forEach(function(oneRow) + { + neon.deleteRecord("Organisations", oneRow["#UID"]); + }); + + // the sselected organisations are added to the consumer + selectedOrganisations.forEach(function(contactId) + { + neon.addRecord("Organisations", + { + "CONTACT_ID": contactId + }); + }); +} diff --git a/entity/PlanningAddToOrganisations_entity/documentation.adoc b/entity/PlanningAddToOrganisations_entity/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..a6304142ab9fdc5aca689268b5c540f8857a2e5b --- /dev/null +++ b/entity/PlanningAddToOrganisations_entity/documentation.adoc @@ -0,0 +1,3 @@ += PlanningAddToOrganisations_entity + +Opens in the series action "Create planning" and creates planning for selected companies. \ No newline at end of file diff --git a/entity/PlanningAddToOrganisations_entity/entityfields/groupcode/displayValueProcess.js b/entity/PlanningAddToOrganisations_entity/entityfields/groupcode/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..b969a4ff0bee37ef3e8d525de185396c440adf25 --- /dev/null +++ b/entity/PlanningAddToOrganisations_entity/entityfields/groupcode/displayValueProcess.js @@ -0,0 +1,6 @@ +import("system.result"); +import("system.vars"); +import("Keyword_lib"); +import("KeywordRegistry_basic"); + +result.string(KeywordUtils.getViewValue($KeywordRegistry.productGroupcode(), vars.get("$field.GROUPCODE"))); diff --git a/entity/PlanningAddToOrganisations_entity/entityfields/keywordgroupcode/children/containername_param/valueProcess.js b/entity/PlanningAddToOrganisations_entity/entityfields/keywordgroupcode/children/containername_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..e0b3a6dd6b49bace8935531285f8defc51731f36 --- /dev/null +++ b/entity/PlanningAddToOrganisations_entity/entityfields/keywordgroupcode/children/containername_param/valueProcess.js @@ -0,0 +1,5 @@ +import("system.result"); +import("Keyword_lib"); +import("KeywordRegistry_basic"); + +result.string($KeywordRegistry.productGroupcode()); diff --git a/entity/PlanningAddToOrganisations_entity/entityfields/keywordstatus/children/containername_param/valueProcess.js b/entity/PlanningAddToOrganisations_entity/entityfields/keywordstatus/children/containername_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..87817cdbaef598656d71e960792d8bb868601bf2 --- /dev/null +++ b/entity/PlanningAddToOrganisations_entity/entityfields/keywordstatus/children/containername_param/valueProcess.js @@ -0,0 +1,4 @@ +import("KeywordRegistry_basic"); +import("system.result"); + +result.string($KeywordRegistry.forecastStatus()); \ No newline at end of file diff --git a/entity/PlanningAddToOrganisations_entity/entityfields/planningsalreadyexists/children/planningids_param/valueProcess.js b/entity/PlanningAddToOrganisations_entity/entityfields/planningsalreadyexists/children/planningids_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..010d78872bbd3010fe571026492f38c96d2e774d --- /dev/null +++ b/entity/PlanningAddToOrganisations_entity/entityfields/planningsalreadyexists/children/planningids_param/valueProcess.js @@ -0,0 +1,9 @@ +import("system.vars"); +import("system.result"); + +var planningIds = vars.get("$param.PlanningIdsAlreadyExists_param"); + +if(planningIds) +{ + result.string(planningIds); +} \ No newline at end of file diff --git a/entity/PlanningAddToOrganisations_entity/entityfields/planningsnew/children/planningids_param/valueProcess.js b/entity/PlanningAddToOrganisations_entity/entityfields/planningsnew/children/planningids_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..07283d79208802774a6fadea6166f4d1e739af0f --- /dev/null +++ b/entity/PlanningAddToOrganisations_entity/entityfields/planningsnew/children/planningids_param/valueProcess.js @@ -0,0 +1,9 @@ +import("system.vars"); +import("system.result"); + +var planningIds = vars.get("$param.PlanningIdsNew_param"); + +if(planningIds) +{ + result.string(planningIds); +} \ No newline at end of file diff --git a/entity/PlanningAddToOrganisations_entity/entityfields/responsible_contact_id/displayValueProcess.js b/entity/PlanningAddToOrganisations_entity/entityfields/responsible_contact_id/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..688c1f577469ab057712c28e731741c12d9a2da9 --- /dev/null +++ b/entity/PlanningAddToOrganisations_entity/entityfields/responsible_contact_id/displayValueProcess.js @@ -0,0 +1,5 @@ +import("system.vars"); +import("Contact_lib"); +import("system.result"); + +result.string(ContactUtils.getFullTitleByContactId(vars.get("$field.RESPONSIBLE_CONTACT_ID"))); \ No newline at end of file diff --git a/entity/PlanningAddToOrganisations_entity/entityfields/responsible_contact_id/valueProcess.js b/entity/PlanningAddToOrganisations_entity/entityfields/responsible_contact_id/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..a4c7e25a113f238ca83a0e6800afe8b8a061a687 --- /dev/null +++ b/entity/PlanningAddToOrganisations_entity/entityfields/responsible_contact_id/valueProcess.js @@ -0,0 +1,10 @@ +import("Employee_lib"); +import("KeywordRegistry_basic"); +import("system.neon"); +import("system.vars"); +import("system.result"); + +if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value")) +{ + result.string(EmployeeUtils.getCurrentContactId()); +} \ No newline at end of file diff --git a/entity/PlanningAddToOrganisations_entity/entityfields/status/displayValueProcess.js b/entity/PlanningAddToOrganisations_entity/entityfields/status/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..f25ee6cc31c469da23ef615a51367848b9da3d37 --- /dev/null +++ b/entity/PlanningAddToOrganisations_entity/entityfields/status/displayValueProcess.js @@ -0,0 +1,6 @@ +import("system.result"); +import("system.vars"); +import("Keyword_lib"); +import("KeywordRegistry_basic"); + +result.string(KeywordUtils.getViewValue($KeywordRegistry.forecastStatus(), vars.get("$field.STATUS"))); diff --git a/entity/PlanningAddToOrganisations_entity/entityfields/status/valueProcess.js b/entity/PlanningAddToOrganisations_entity/entityfields/status/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..ec3ba22fcd9f2773e90c85317a86808ff542abce --- /dev/null +++ b/entity/PlanningAddToOrganisations_entity/entityfields/status/valueProcess.js @@ -0,0 +1,9 @@ +import("KeywordRegistry_basic"); +import("system.neon"); +import("system.vars"); +import("system.result"); + +if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value")) +{ + result.string($KeywordRegistry.forecastStatus$inPlanning()); +} \ No newline at end of file diff --git a/entity/PlanningAddToOrganisations_entity/entityfields/volume/titleProcess.js b/entity/PlanningAddToOrganisations_entity/entityfields/volume/titleProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..f7b76c335483a7410366d5c56db6ae8ba7917091 --- /dev/null +++ b/entity/PlanningAddToOrganisations_entity/entityfields/volume/titleProcess.js @@ -0,0 +1,4 @@ +import("system.result"); +import("system.translate"); + +result.string(translate.text("${VOLUME_MONEY}") + " (" + translate.text("${EURO_SIGN}") + ")"); \ No newline at end of file diff --git a/entity/PlanningAddToOrganisations_entity/entityfields/year/valueProcess.js b/entity/PlanningAddToOrganisations_entity/entityfields/year/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..71920b6293bd1f359fb80ff155183ddd35447f23 --- /dev/null +++ b/entity/PlanningAddToOrganisations_entity/entityfields/year/valueProcess.js @@ -0,0 +1,8 @@ +import("system.result"); +import("system.neon"); +import("system.vars"); + +if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) +{ + result.string(vars.get("$sys.date")); +} \ No newline at end of file diff --git a/entity/PlanningAddToOrganisations_entity/recordcontainers/jdito/contentProcess.js b/entity/PlanningAddToOrganisations_entity/recordcontainers/jdito/contentProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..10ff3a0d5e227a014f34f889dc7442c31715d4da --- /dev/null +++ b/entity/PlanningAddToOrganisations_entity/recordcontainers/jdito/contentProcess.js @@ -0,0 +1,8 @@ +import("system.result"); +import("system.vars"); + +if(vars.get("$local.idvalues")) +{ + + result.object([vars.get("$local.idvalues")]); +} \ No newline at end of file diff --git a/entity/PlanningAddToOrganisations_entity/recordcontainers/jdito/onInsert.js b/entity/PlanningAddToOrganisations_entity/recordcontainers/jdito/onInsert.js new file mode 100644 index 0000000000000000000000000000000000000000..e28934ac0d7b9c11d3eaec01521ae960814fc5b4 --- /dev/null +++ b/entity/PlanningAddToOrganisations_entity/recordcontainers/jdito/onInsert.js @@ -0,0 +1,75 @@ +import("system.neon"); +import("Sql_lib"); +import("system.datetime"); +import("system.db"); +import("KeywordRegistry_basic"); +import("system.util"); +import("system.vars"); + +var selectedOrganisations = vars.get("$field.Organisations.insertedRows"); +selectedOrganisations = selectedOrganisations.map(function(row){ + return row["CONTACT_ID"]; +}); + +var year = datetime.toDate(vars.get("$field.YEAR"), "yyyy", "UTC"); +var volume = vars.get("$field.VOLUME"); +var responsible = vars.get("$field.RESPONSIBLE_CONTACT_ID"); +var status = vars.get("$field.STATUS"); +var groupcode = vars.get("$field.GROUPCODE"); +var inserts = []; +var cols = ["FORECASTID", "FORECAST_YEAR", "CONTACT_ID", "VOLUME", "KIND", "RESPONSIBLE_CONTACT_ID", "STATUS"]; +var table = "FORECAST"; +var existingPlanningIds = []; + +if(groupcode) +{ + cols.push("GROUPCODE"); +} + +var existingPlannings = newSelect("FORECAST.CONTACT_ID, FORECAST.FORECASTID") +.from("FORECAST") +.where("FORECAST.CONTACT_ID", selectedOrganisations, SqlBuilder.IN()) +.and("FORECAST.FORECAST_YEAR", year); + +if(!groupcode) +{ + existingPlannings.and("FORECAST.GROUPCODE is null"); +} +else +{ + existingPlannings.and("FORECAST.GROUPCODE", groupcode); +} + +existingPlannings = existingPlannings.table(); + +existingPlannings = existingPlannings.map(function([contactId, planningId]) +{ + existingPlanningIds.push(planningId); + return contactId; +}); + +var insertedPlannings = []; +selectedOrganisations.forEach(function(contactId) +{ + if(!existingPlannings.includes(contactId)) + { + var uid = util.getNewUUID(); + insertedPlannings.push(uid); + var vals = [uid, year, contactId, volume, $KeywordRegistry.forecastKind$planning(), responsible, status]; + + if(groupcode) + { + vals.push(groupcode); + } + + inserts.push([table, cols, null, vals]); + } +}); + + + +vars.set("$context.InsertedPlannings", JSON.stringify(insertedPlannings.length == 0? [""]: insertedPlannings)); +vars.set("$context.ExistingPlannings", JSON.stringify(existingPlanningIds.length == 0? [""]: existingPlanningIds)); + + +db.inserts(inserts); diff --git a/entity/PlanningChangeStatusAndResponsible_entity/PlanningChangeStatusAndResponsible_entity.aod b/entity/PlanningChangeStatusAndResponsible_entity/PlanningChangeStatusAndResponsible_entity.aod new file mode 100644 index 0000000000000000000000000000000000000000..462141c2bfdd33d6f9987c9fb8b9c23d37d70295 --- /dev/null +++ b/entity/PlanningChangeStatusAndResponsible_entity/PlanningChangeStatusAndResponsible_entity.aod @@ -0,0 +1,75 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> + <name>PlanningChangeStatusAndResponsible_entity</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <documentation>%aditoprj%/entity/PlanningChangeStatusAndResponsible_entity/documentation.adoc</documentation> + <afterSave>%aditoprj%/entity/PlanningChangeStatusAndResponsible_entity/afterSave.js</afterSave> + <recordContainer>jdito</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + </entityProvider> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityField> + <name>STATUS</name> + <title>Status</title> + <consumer>KeywordStatus</consumer> + <state>EDITABLE</state> + </entityField> + <entityField> + <name>RESPONSIBLE</name> + <title>Responsible</title> + <consumer>Responsibles</consumer> + <state>EDITABLE</state> + </entityField> + <entityConsumer> + <name>Responsibles</name> + <dependency> + <name>dependency</name> + <entityName>Employee_entity</entityName> + <fieldName>Employees</fieldName> + </dependency> + </entityConsumer> + <entityConsumer> + <name>KeywordStatus</name> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/PlanningChangeStatusAndResponsible_entity/entityfields/keywordstatus/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityParameter> + <name>PlanningIds_param</name> + <expose v="true" /> + </entityParameter> + <entityParameter> + <name>OrganisationContactId_param</name> + <expose v="true" /> + </entityParameter> + <entityField> + <name>UID</name> + </entityField> + </entityFields> + <recordContainers> + <jDitoRecordContainer> + <name>jdito</name> + <jDitoRecordAlias>Data_alias</jDitoRecordAlias> + <contentProcess>%aditoprj%/entity/PlanningChangeStatusAndResponsible_entity/recordcontainers/jdito/contentProcess.js</contentProcess> + <onInsert>%aditoprj%/entity/PlanningChangeStatusAndResponsible_entity/recordcontainers/jdito/onInsert.js</onInsert> + <recordFieldMappings> + <jDitoRecordFieldMapping> + <name>UID.value</name> + </jDitoRecordFieldMapping> + </recordFieldMappings> + </jDitoRecordContainer> + </recordContainers> +</entity> diff --git a/entity/PlanningChangeStatusAndResponsible_entity/afterSave.js b/entity/PlanningChangeStatusAndResponsible_entity/afterSave.js new file mode 100644 index 0000000000000000000000000000000000000000..87b9d67c893c48c3194bc93885b0d2f983204995 --- /dev/null +++ b/entity/PlanningChangeStatusAndResponsible_entity/afterSave.js @@ -0,0 +1,13 @@ +import("system.neon"); +import("system.vars"); + +var orgContactId = vars.get("$param.OrganisationContactId_param"); + +if(orgContactId) +{ + neon.openContext("Organisation", "OrganisationMain_view", [orgContactId], neon.OPERATINGSTATE_VIEW, null, "4c03be39-db8d-4cef-b75c-3325f70101c2"); +} +else +{ + neon.openContext("Planning", "PlanningFilter_view", null, neon.OPERATINGSTATE_SEARCH, null, null); +} diff --git a/entity/PlanningChangeStatusAndResponsible_entity/documentation.adoc b/entity/PlanningChangeStatusAndResponsible_entity/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..7fff46ead5c0c962c1dfb2d6c233674360482ff4 --- /dev/null +++ b/entity/PlanningChangeStatusAndResponsible_entity/documentation.adoc @@ -0,0 +1,7 @@ += PlanningChangeStatusAndResponsible_entity + +This entity is used for the series actions "Change status" and "Change responsible" in the Planning_entity. +When the "Change Status" action is called, the PlanningChangeStatus_view is opened. +In this case, only the STATUS field is filled and it is known that the serial action for status change has been called. +When the serial action "Change responsible" is called, the PlanningChangeResponsible_view is opened. +Here again only the RESPONSIBLE field is filled and it is known that the responsible person has been changed. diff --git a/entity/PlanningChangeStatusAndResponsible_entity/entityfields/keywordstatus/children/containername_param/valueProcess.js b/entity/PlanningChangeStatusAndResponsible_entity/entityfields/keywordstatus/children/containername_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..87817cdbaef598656d71e960792d8bb868601bf2 --- /dev/null +++ b/entity/PlanningChangeStatusAndResponsible_entity/entityfields/keywordstatus/children/containername_param/valueProcess.js @@ -0,0 +1,4 @@ +import("KeywordRegistry_basic"); +import("system.result"); + +result.string($KeywordRegistry.forecastStatus()); \ No newline at end of file diff --git a/entity/PlanningChangeStatusAndResponsible_entity/recordcontainers/jdito/contentProcess.js b/entity/PlanningChangeStatusAndResponsible_entity/recordcontainers/jdito/contentProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..5de89893d6ba5c0db535dbb63b3a6694a1630a27 --- /dev/null +++ b/entity/PlanningChangeStatusAndResponsible_entity/recordcontainers/jdito/contentProcess.js @@ -0,0 +1,7 @@ +import("system.result"); +import("system.vars"); + +if(vars.get("$local.idvalues")) +{ + result.object(vars.get("$local.idvalues")); +} \ No newline at end of file diff --git a/entity/PlanningChangeStatusAndResponsible_entity/recordcontainers/jdito/onInsert.js b/entity/PlanningChangeStatusAndResponsible_entity/recordcontainers/jdito/onInsert.js new file mode 100644 index 0000000000000000000000000000000000000000..14addd0dc1415ae52b7c7d3a9fb6a9576cc0aa1b --- /dev/null +++ b/entity/PlanningChangeStatusAndResponsible_entity/recordcontainers/jdito/onInsert.js @@ -0,0 +1,83 @@ +import("Contact_lib"); +import("Keyword_lib"); +import("Employee_lib"); +import("system.translate"); +import("system.notification"); +import("KeywordRegistry_basic"); +import("Sql_lib"); +import("system.db"); +import("system.vars"); +import("system.neon"); +import("system.tools"); + +var planningObj = JSON.parse(vars.get("$param.PlanningIds_param")); +var status = vars.get("$field.STATUS"); +var responsible = vars.get("$field.RESPONSIBLE"); +var table = "FORECAST"; +var cols; +var vals; +var planningIds; + + +planningIds = planningObj.filter(function(oneObj){ + + var cond = oneObj["STATUS"] != $KeywordRegistry.forecastStatus$locked(); + + if(status) + { + cond = cond || tools.currentUserHasRole("INTERNAL_ADMINISTRATOR"); + } + + return cond; +}).map(function(oneObj) +{ + return oneObj["FORECASTID"]; +}); + + +if(status) +{ + cols = ["STATUS"]; + vals = [status]; + +} +else if(responsible) +{ + cols = ["RESPONSIBLE_CONTACT_ID"]; + vals = [responsible]; +} + +if(planningIds.length > 0) +{ + db.updateData(table, cols, null, vals, newWhere("FORECAST.FORECASTID", planningIds, SqlBuilder.IN()).toString()); +} + +var notUpdatedRecordsLength = (planningObj.length - planningIds.length); +var descriptionText = "%0 out of %1 records were changed to \"%2\".\n %3 record/s could not be updated."; + +var captionStatus = translate.withArguments("%0 status was/were changed", [planningIds.length]); +var captionResponsible = translate.withArguments("%0 responsilbe/s was/were changed", [planningIds.length]); +var descriptionStatus = translate.withArguments(descriptionText, [planningIds.length, planningObj.length, KeywordUtils.getViewValue($KeywordRegistry.forecastStatus(), status), notUpdatedRecordsLength]); +var descriptionResponsible = translate.withArguments(descriptionText, [planningIds.length, planningObj.length, ContactUtils.getFullTitleByContactId(responsible), notUpdatedRecordsLength]); + +var notificationConfig = notification.createConfig() + .addUserWithId(EmployeeUtils.getCurrentUserId()) + .forcedPriority(notification.PRIO_NONE) + .notificationType("_____SYSTEM_NOTIFICATION_MESSAGE") + .initialState(notification.STATE_UNSEEN) + .daysToLive(1); + +if(status) +{ + notificationConfig.caption(captionStatus) + .description(descriptionStatus); +} +else if(responsible) +{ + notificationConfig.caption(captionResponsible) + .description(descriptionResponsible); +} + +notification.addNotificationWith(notificationConfig); + + diff --git a/entity/Planning_entity/Planning_entity.aod b/entity/Planning_entity/Planning_entity.aod new file mode 100644 index 0000000000000000000000000000000000000000..dec3c63131a269a5bac6742377c362eb7ab0d2be --- /dev/null +++ b/entity/Planning_entity/Planning_entity.aod @@ -0,0 +1,283 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> + <name>Planning_entity</name> + <title>Planning</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <documentation>%aditoprj%/entity/Planning_entity/documentation.adoc</documentation> + <icon>VAADIN:MONEY</icon> + <grantUpdate v="true" /> + <grantUpdateProcess>%aditoprj%/entity/Planning_entity/grantUpdateProcess.js</grantUpdateProcess> + <grantDeleteProcess>%aditoprj%/entity/Planning_entity/grantDeleteProcess.js</grantDeleteProcess> + <onValidation>%aditoprj%/entity/Planning_entity/onValidation.js</onValidation> + <titlePlural>Plannings</titlePlural> + <recordContainer>db</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + </entityProvider> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityField> + <name>FORECASTID</name> + </entityField> + <entityField> + <name>INFO</name> + <title>Information</title> + <contentType>LONG_TEXT</contentType> + </entityField> + <entityField> + <name>VOLUME</name> + <title>Volume</title> + <contentType>NUMBER</contentType> + <outputFormat>#,##0.00</outputFormat> + <inputFormat>#,##0.00</inputFormat> + <groupable v="true" /> + <mandatory v="true" /> + </entityField> + <entityField> + <name>FORECAST_YEAR</name> + <title>Year</title> + <contentType>NUMBER</contentType> + <outputFormat>####</outputFormat> + <groupable v="true" /> + <state>EDITABLE</state> + <onValueChangeTypes> + <element>MASK</element> + </onValueChangeTypes> + </entityField> + <entityField> + <name>GROUPCODE</name> + <title>Product Group</title> + <consumer>KeywordGroupcode</consumer> + <groupable v="true" /> + <stateProcess>%aditoprj%/entity/Planning_entity/entityfields/groupcode/stateProcess.js</stateProcess> + <displayValueProcess>%aditoprj%/entity/Planning_entity/entityfields/groupcode/displayValueProcess.js</displayValueProcess> + </entityField> + <entityField> + <name>CONTACT_ID</name> + <title>Organisation</title> + <consumer>Organisations</consumer> + <groupable v="true" /> + <linkedContext>Organisation</linkedContext> + <mandatory v="true" /> + <stateProcess>%aditoprj%/entity/Planning_entity/entityfields/contact_id/stateProcess.js</stateProcess> + <valueProcess>%aditoprj%/entity/Planning_entity/entityfields/contact_id/valueProcess.js</valueProcess> + <displayValueProcess>%aditoprj%/entity/Planning_entity/entityfields/contact_id/displayValueProcess.js</displayValueProcess> + </entityField> + <entityField> + <name>KIND</name> + <consumer>KeywordKinds</consumer> + <valueProcess>%aditoprj%/entity/Planning_entity/entityfields/kind/valueProcess.js</valueProcess> + </entityField> + <entityConsumer> + <name>KeywordKinds</name> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/Planning_entity/entityfields/keywordkinds/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityConsumer> + <name>Organisations</name> + <dependency> + <name>dependency</name> + <entityName>Organisation_entity</entityName> + <fieldName>Organisations</fieldName> + </dependency> + </entityConsumer> + <entityField> + <name>YEAR_DATETIME</name> + <title>Year</title> + <contentType>DATE</contentType> + <resolution>YEAR</resolution> + <mandatory v="true" /> + <state>EDITABLE</state> + <stateProcess>%aditoprj%/entity/Planning_entity/entityfields/year_datetime/stateProcess.js</stateProcess> + <valueProcess>%aditoprj%/entity/Planning_entity/entityfields/year_datetime/valueProcess.js</valueProcess> + <onValueChange>%aditoprj%/entity/Planning_entity/entityfields/year_datetime/onValueChange.js</onValueChange> + <onValueChangeTypes> + <element>MASK</element> + </onValueChangeTypes> + </entityField> + <entityProvider> + <name>Plannings</name> + </entityProvider> + <entityParameter> + <name>ContactId_param</name> + <expose v="true" /> + </entityParameter> + <entityField> + <name>STATUS</name> + <title>Status</title> + <consumer>KeywordStatus</consumer> + <groupable v="true" /> + <stateProcess>%aditoprj%/entity/Planning_entity/entityfields/status/stateProcess.js</stateProcess> + <valueProcess>%aditoprj%/entity/Planning_entity/entityfields/status/valueProcess.js</valueProcess> + <displayValueProcess>%aditoprj%/entity/Planning_entity/entityfields/status/displayValueProcess.js</displayValueProcess> + </entityField> + <entityField> + <name>RESPONSIBLE_CONTACT_ID</name> + <title>Responsible</title> + <consumer>Responsible</consumer> + <groupable v="true" /> + <stateProcess>%aditoprj%/entity/Planning_entity/entityfields/responsible_contact_id/stateProcess.js</stateProcess> + <valueProcess>%aditoprj%/entity/Planning_entity/entityfields/responsible_contact_id/valueProcess.js</valueProcess> + <displayValueProcess>%aditoprj%/entity/Planning_entity/entityfields/responsible_contact_id/displayValueProcess.js</displayValueProcess> + </entityField> + <entityConsumer> + <name>KeywordStatus</name> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/Planning_entity/entityfields/keywordstatus/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityConsumer> + <name>KeywordGroupcode</name> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/Planning_entity/entityfields/keywordgroupcode/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityConsumer> + <name>Responsible</name> + <dependency> + <name>dependency</name> + <entityName>Employee_entity</entityName> + <fieldName>Employees</fieldName> + </dependency> + </entityConsumer> + <entityActionGroup> + <name>FilterViewActions</name> + <children> + <entityActionField> + <name>ChangeResponsible</name> + <title>Change responsible</title> + <onActionProcess>%aditoprj%/entity/Planning_entity/entityfields/filterviewactions/children/changeresponsible/onActionProcess.js</onActionProcess> + <isObjectAction v="false" /> + <selectionType>MULTI</selectionType> + <iconId>VAADIN:USER</iconId> + </entityActionField> + <entityActionField> + <name>ChangeStatus</name> + <title>Change status</title> + <onActionProcess>%aditoprj%/entity/Planning_entity/entityfields/filterviewactions/children/changestatus/onActionProcess.js</onActionProcess> + <isObjectAction v="false" /> + <selectionType>MULTI</selectionType> + <iconId>VAADIN:CHECK_SQUARE_O</iconId> + </entityActionField> + </children> + </entityActionGroup> + <entityParameter> + <name>SerialActionAddPlanning_param</name> + <expose v="true" /> + </entityParameter> + <entityParameter> + <name>PlanningIds_param</name> + <expose v="true" /> + </entityParameter> + </entityFields> + <recordContainers> + <dbRecordContainer> + <name>db</name> + <conditionProcess>%aditoprj%/entity/Planning_entity/recordcontainers/db/conditionProcess.js</conditionProcess> + <alias>Data_alias</alias> + <recordFieldMappings> + <dbRecordFieldMapping> + <name>FORECASTID.value</name> + <recordfield>FORECAST.FORECASTID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>GROUPCODE.value</name> + <recordfield>FORECAST.GROUPCODE</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>INFO.value</name> + <recordfield>FORECAST.INFO</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>VOLUME.value</name> + <recordfield>FORECAST.VOLUME</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>KIND.value</name> + <recordfield>FORECAST.KIND</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>FORECAST_YEAR.value</name> + <recordfield>FORECAST.FORECAST_YEAR</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>CONTACT_ID.value</name> + <recordfield>FORECAST.CONTACT_ID</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <consumerMapping> + <name>Organisations</name> + <filterConditionProcess>%aditoprj%/entity/Planning_entity/recordcontainers/db/recordfieldmappings/organisations/filterConditionProcess.js</filterConditionProcess> + <isFilterable v="true" /> + <filtertype>EXTENDED</filtertype> + </consumerMapping> + <dbRecordFieldMapping> + <name>STATUS.value</name> + <recordfield>FORECAST.STATUS</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>RESPONSIBLE_CONTACT_ID.value</name> + <recordfield>FORECAST.RESPONSIBLE_CONTACT_ID</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>STATUS.displayValue</name> + <expression>%aditoprj%/entity/Planning_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js</expression> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>GROUPCODE.displayValue</name> + <expression>%aditoprj%/entity/Planning_entity/recordcontainers/db/recordfieldmappings/groupcode.displayvalue/expression.js</expression> + </dbRecordFieldMapping> + </recordFieldMappings> + <linkInformation> + <linkInformation> + <name>52c342ed-8a01-4d01-80b6-d9b74e9e66ab</name> + <tableName>FORECAST</tableName> + <primaryKey>FORECASTID</primaryKey> + <isUIDTable v="true" /> + <readonly v="false" /> + </linkInformation> + </linkInformation> + <filterExtensions> + <filterExtensionSet> + <name>OrganisationAttributes_filter</name> + <filterFieldsProcess>%aditoprj%/entity/Planning_entity/recordcontainers/db/filterextensions/organisationattributes_filter/filterFieldsProcess.js</filterFieldsProcess> + <filterValuesProcess>%aditoprj%/entity/Planning_entity/recordcontainers/db/filterextensions/organisationattributes_filter/filterValuesProcess.js</filterValuesProcess> + <filterConditionProcess>%aditoprj%/entity/Planning_entity/recordcontainers/db/filterextensions/organisationattributes_filter/filterConditionProcess.js</filterConditionProcess> + <filtertype>EXTENDED</filtertype> + </filterExtensionSet> + </filterExtensions> + </dbRecordContainer> + </recordContainers> +</entity> diff --git a/entity/Planning_entity/documentation.adoc b/entity/Planning_entity/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..29fb921f7f52b2dc0e6c3ee1b4c22807aad7df4f --- /dev/null +++ b/entity/Planning_entity/documentation.adoc @@ -0,0 +1,4 @@ += Planning_entity + +An entity for handling Plannings. +A planning is a forecast that is not yet realistic. diff --git a/entity/Planning_entity/entityfields/contact_id/displayValueProcess.js b/entity/Planning_entity/entityfields/contact_id/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..9d7be1063f1aba777a205ded715b26133f8144a0 --- /dev/null +++ b/entity/Planning_entity/entityfields/contact_id/displayValueProcess.js @@ -0,0 +1,6 @@ +import("Contact_lib"); +import("system.result"); +import("system.neon"); +import("system.vars"); + +result.string(OrganisationUtils.getNameByContactId(vars.get("$field.CONTACT_ID"))); \ No newline at end of file diff --git a/entity/Planning_entity/entityfields/contact_id/stateProcess.js b/entity/Planning_entity/entityfields/contact_id/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..e00d986e700ae99be24e13b62ec5f88affba025b --- /dev/null +++ b/entity/Planning_entity/entityfields/contact_id/stateProcess.js @@ -0,0 +1,8 @@ +import("system.vars"); +import("system.neon"); +import("system.result"); + +if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT) +{ + result.string(neon.COMPONENTSTATE_READONLY); +} \ No newline at end of file diff --git a/entity/Planning_entity/entityfields/contact_id/valueProcess.js b/entity/Planning_entity/entityfields/contact_id/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..1507222472010e26b83f9e18151678a2b7af1673 --- /dev/null +++ b/entity/Planning_entity/entityfields/contact_id/valueProcess.js @@ -0,0 +1,9 @@ +import("system.vars"); +import("system.result"); + +var contactId = vars.get("$param.ContactId_param"); + +if(vars.get("$this.value") == null && contactId) +{ + result.string(contactId); +} \ No newline at end of file diff --git a/entity/Planning_entity/entityfields/filterviewactions/children/changeresponsible/onActionProcess.js b/entity/Planning_entity/entityfields/filterviewactions/children/changeresponsible/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..dc355adfad0f5c6dd5e131d51fb14ddadea9c051 --- /dev/null +++ b/entity/Planning_entity/entityfields/filterviewactions/children/changeresponsible/onActionProcess.js @@ -0,0 +1,13 @@ +import("system.vars"); +import("system.neon"); + +var params = { + "PlanningIds_param": JSON.stringify(vars.get("$sys.selectionRows")) +}; + +if(vars.get("$param.ContactId_param")) +{ + params["OrganisationContactId_param"] = vars.get("$param.ContactId_param"); +} + +neon.openContext("PlanningChangeStatusAndResponsible", "PlanningChangeResponsible_view", null, neon.OPERATINGSTATE_NEW, params); \ No newline at end of file diff --git a/entity/Planning_entity/entityfields/filterviewactions/children/changestatus/onActionProcess.js b/entity/Planning_entity/entityfields/filterviewactions/children/changestatus/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..c3e1224d7beec61e97ade927146387bcddff6942 --- /dev/null +++ b/entity/Planning_entity/entityfields/filterviewactions/children/changestatus/onActionProcess.js @@ -0,0 +1,13 @@ +import("system.vars"); +import("system.neon"); + +var params = { + "PlanningIds_param": JSON.stringify(vars.get("$sys.selectionRows")) +}; + +if(vars.get("$param.ContactId_param")) +{ + params["OrganisationContactId_param"] = vars.get("$param.ContactId_param"); +} + +neon.openContext("PlanningChangeStatusAndResponsible", "PlanningChangeStatus_view", null, neon.OPERATINGSTATE_NEW, params); \ No newline at end of file diff --git a/entity/Planning_entity/entityfields/groupcode/displayValueProcess.js b/entity/Planning_entity/entityfields/groupcode/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..b969a4ff0bee37ef3e8d525de185396c440adf25 --- /dev/null +++ b/entity/Planning_entity/entityfields/groupcode/displayValueProcess.js @@ -0,0 +1,6 @@ +import("system.result"); +import("system.vars"); +import("Keyword_lib"); +import("KeywordRegistry_basic"); + +result.string(KeywordUtils.getViewValue($KeywordRegistry.productGroupcode(), vars.get("$field.GROUPCODE"))); diff --git a/entity/Planning_entity/entityfields/groupcode/stateProcess.js b/entity/Planning_entity/entityfields/groupcode/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..e00d986e700ae99be24e13b62ec5f88affba025b --- /dev/null +++ b/entity/Planning_entity/entityfields/groupcode/stateProcess.js @@ -0,0 +1,8 @@ +import("system.vars"); +import("system.neon"); +import("system.result"); + +if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT) +{ + result.string(neon.COMPONENTSTATE_READONLY); +} \ No newline at end of file diff --git a/entity/Planning_entity/entityfields/keywordgroupcode/children/containername_param/valueProcess.js b/entity/Planning_entity/entityfields/keywordgroupcode/children/containername_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..e0b3a6dd6b49bace8935531285f8defc51731f36 --- /dev/null +++ b/entity/Planning_entity/entityfields/keywordgroupcode/children/containername_param/valueProcess.js @@ -0,0 +1,5 @@ +import("system.result"); +import("Keyword_lib"); +import("KeywordRegistry_basic"); + +result.string($KeywordRegistry.productGroupcode()); diff --git a/entity/Planning_entity/entityfields/keywordkinds/children/containername_param/valueProcess.js b/entity/Planning_entity/entityfields/keywordkinds/children/containername_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..7dd10c8e07794e1ee9aade2bb0babf386d08573d --- /dev/null +++ b/entity/Planning_entity/entityfields/keywordkinds/children/containername_param/valueProcess.js @@ -0,0 +1,4 @@ +import("KeywordRegistry_basic"); +import("system.result"); + +result.string($KeywordRegistry.forecastKind()); \ No newline at end of file diff --git a/entity/Planning_entity/entityfields/keywordstatus/children/containername_param/valueProcess.js b/entity/Planning_entity/entityfields/keywordstatus/children/containername_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..87817cdbaef598656d71e960792d8bb868601bf2 --- /dev/null +++ b/entity/Planning_entity/entityfields/keywordstatus/children/containername_param/valueProcess.js @@ -0,0 +1,4 @@ +import("KeywordRegistry_basic"); +import("system.result"); + +result.string($KeywordRegistry.forecastStatus()); \ No newline at end of file diff --git a/entity/Planning_entity/entityfields/kind/valueProcess.js b/entity/Planning_entity/entityfields/kind/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..9c3cc5fe072b13dc822063ffd8d69c53e6dfa88f --- /dev/null +++ b/entity/Planning_entity/entityfields/kind/valueProcess.js @@ -0,0 +1,9 @@ +import("KeywordRegistry_basic"); +import("system.result"); +import("system.neon"); +import("system.vars"); + +if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW) +{ + result.string($KeywordRegistry.forecastKind$planning()); +} \ No newline at end of file diff --git a/entity/Planning_entity/entityfields/responsible_contact_id/displayValueProcess.js b/entity/Planning_entity/entityfields/responsible_contact_id/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..688c1f577469ab057712c28e731741c12d9a2da9 --- /dev/null +++ b/entity/Planning_entity/entityfields/responsible_contact_id/displayValueProcess.js @@ -0,0 +1,5 @@ +import("system.vars"); +import("Contact_lib"); +import("system.result"); + +result.string(ContactUtils.getFullTitleByContactId(vars.get("$field.RESPONSIBLE_CONTACT_ID"))); \ No newline at end of file diff --git a/entity/Planning_entity/entityfields/responsible_contact_id/stateProcess.js b/entity/Planning_entity/entityfields/responsible_contact_id/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..e00d986e700ae99be24e13b62ec5f88affba025b --- /dev/null +++ b/entity/Planning_entity/entityfields/responsible_contact_id/stateProcess.js @@ -0,0 +1,8 @@ +import("system.vars"); +import("system.neon"); +import("system.result"); + +if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT) +{ + result.string(neon.COMPONENTSTATE_READONLY); +} \ No newline at end of file diff --git a/entity/Planning_entity/entityfields/responsible_contact_id/valueProcess.js b/entity/Planning_entity/entityfields/responsible_contact_id/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..a4c7e25a113f238ca83a0e6800afe8b8a061a687 --- /dev/null +++ b/entity/Planning_entity/entityfields/responsible_contact_id/valueProcess.js @@ -0,0 +1,10 @@ +import("Employee_lib"); +import("KeywordRegistry_basic"); +import("system.neon"); +import("system.vars"); +import("system.result"); + +if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value")) +{ + result.string(EmployeeUtils.getCurrentContactId()); +} \ No newline at end of file diff --git a/entity/Planning_entity/entityfields/status/displayValueProcess.js b/entity/Planning_entity/entityfields/status/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..f25ee6cc31c469da23ef615a51367848b9da3d37 --- /dev/null +++ b/entity/Planning_entity/entityfields/status/displayValueProcess.js @@ -0,0 +1,6 @@ +import("system.result"); +import("system.vars"); +import("Keyword_lib"); +import("KeywordRegistry_basic"); + +result.string(KeywordUtils.getViewValue($KeywordRegistry.forecastStatus(), vars.get("$field.STATUS"))); diff --git a/entity/Planning_entity/entityfields/status/stateProcess.js b/entity/Planning_entity/entityfields/status/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..ae436c75973b625076a73472675414be0c9687c7 --- /dev/null +++ b/entity/Planning_entity/entityfields/status/stateProcess.js @@ -0,0 +1,10 @@ +import("system.neon"); +import("system.vars"); +import("system.result"); + +var operatingstate = vars.get("$sys.operatingstate"); + +if(operatingstate == neon.OPERATINGSTATE_NEW || operatingstate == neon.OPERATINGSTATE_EDIT) +{ + result.string(neon.COMPONENTSTATE_READONLY); +} \ No newline at end of file diff --git a/entity/Planning_entity/entityfields/status/valueProcess.js b/entity/Planning_entity/entityfields/status/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..ec3ba22fcd9f2773e90c85317a86808ff542abce --- /dev/null +++ b/entity/Planning_entity/entityfields/status/valueProcess.js @@ -0,0 +1,9 @@ +import("KeywordRegistry_basic"); +import("system.neon"); +import("system.vars"); +import("system.result"); + +if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW && !vars.get("$this.value")) +{ + result.string($KeywordRegistry.forecastStatus$inPlanning()); +} \ No newline at end of file diff --git a/entity/Planning_entity/entityfields/year_datetime/onValueChange.js b/entity/Planning_entity/entityfields/year_datetime/onValueChange.js new file mode 100644 index 0000000000000000000000000000000000000000..33c75c30f93eb29f2c67415ccca75b994d88fa74 --- /dev/null +++ b/entity/Planning_entity/entityfields/year_datetime/onValueChange.js @@ -0,0 +1,10 @@ +import("system.datetime"); +import("system.neon"); +import("system.vars"); + +var yearDatetime = vars.get("$local.value"); + +if(yearDatetime) +{ + neon.setFieldValue("$field.FORECAST_YEAR", datetime.toDate(yearDatetime, "yyyy", "UTC")); +} \ No newline at end of file diff --git a/entity/Planning_entity/entityfields/year_datetime/stateProcess.js b/entity/Planning_entity/entityfields/year_datetime/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..d5b44033c15b257a0ccbf07443098ecbade16ee4 --- /dev/null +++ b/entity/Planning_entity/entityfields/year_datetime/stateProcess.js @@ -0,0 +1,14 @@ +import("system.result"); +import("system.neon"); +import("system.vars"); + +var operatingstate = vars.get("$sys.operatingstate"); + +if(operatingstate == neon.OPERATINGSTATE_EDIT) +{ + result.string(neon.COMPONENTSTATE_READONLY); +} +else if(operatingstate == neon.OPERATINGSTATE_VIEW && vars.get("$sys.recordstate") == neon.OPERATINGSTATE_VIEW) +{ + result.string(neon.COMPONENTSTATE_INVISIBLE); +} \ No newline at end of file diff --git a/entity/Planning_entity/entityfields/year_datetime/valueProcess.js b/entity/Planning_entity/entityfields/year_datetime/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..1f2d4b665b8a9e079f379c194dc2d84ac47537b7 --- /dev/null +++ b/entity/Planning_entity/entityfields/year_datetime/valueProcess.js @@ -0,0 +1,17 @@ +import("system.neon"); +import("system.vars"); +import("system.result"); +import("system.datetime"); + +var yearDate = vars.get("$field.FORECAST_YEAR"); +var operatingstate = vars.get("$sys.operatingstate"); +var thisValue = vars.get("$this.value"); + +if(operatingstate == neon.OPERATINGSTATE_NEW && thisValue == null) +{ + result.string(vars.get("$sys.date")); +} +else if(yearDate && operatingstate == neon.OPERATINGSTATE_EDIT && thisValue == null) +{ + result.string(datetime.toLong(yearDate, "yyyy", "UTC")); +} \ No newline at end of file diff --git a/entity/Planning_entity/grantDeleteProcess.js b/entity/Planning_entity/grantDeleteProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..a6ac3b38ec75bda6924c8fe3c0c738c787d69655 --- /dev/null +++ b/entity/Planning_entity/grantDeleteProcess.js @@ -0,0 +1,8 @@ +import("system.result"); +import("KeywordRegistry_basic"); +import("system.vars"); + +if(vars.get("$field.STATUS") == $KeywordRegistry.forecastStatus$locked()) +{ + result.string(false); +} \ No newline at end of file diff --git a/entity/Planning_entity/grantUpdateProcess.js b/entity/Planning_entity/grantUpdateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..a6ac3b38ec75bda6924c8fe3c0c738c787d69655 --- /dev/null +++ b/entity/Planning_entity/grantUpdateProcess.js @@ -0,0 +1,8 @@ +import("system.result"); +import("KeywordRegistry_basic"); +import("system.vars"); + +if(vars.get("$field.STATUS") == $KeywordRegistry.forecastStatus$locked()) +{ + result.string(false); +} \ No newline at end of file diff --git a/entity/Planning_entity/onValidation.js b/entity/Planning_entity/onValidation.js new file mode 100644 index 0000000000000000000000000000000000000000..047915d05fafd8a5103104a807e57842e9fdf6b9 --- /dev/null +++ b/entity/Planning_entity/onValidation.js @@ -0,0 +1,37 @@ +import("system.neon"); +import("system.translate"); +import("system.result"); +import("Sql_lib"); +import("system.vars"); + +if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW) +{ + var contact_id = vars.get("$field.CONTACT_ID"); + var year = vars.get("$field.FORECAST_YEAR"); + var groupcode = vars.get("$field.GROUPCODE"); + + if(contact_id && year) + { + var plannings = newSelect("FORECAST.FORECASTID") + .from("FORECAST") + .where("FORECAST.CONTACT_ID", contact_id) + .and("FORECAST.FORECAST_YEAR", year); + + + if(!groupcode) + { + plannings.and("FORECAST.GROUPCODE is null"); + } + else + { + plannings.and("FORECAST.GROUPCODE", groupcode); + } + + plannings = plannings.cell(); + + if(plannings) + { + result.string(translate.text("The combination of organisation, product group and year already exists.")); + } + } +} \ No newline at end of file diff --git a/entity/Planning_entity/recordcontainers/db/conditionProcess.js b/entity/Planning_entity/recordcontainers/db/conditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..7241ab84dcb6128aefd11daf0b2407de72695f8f --- /dev/null +++ b/entity/Planning_entity/recordcontainers/db/conditionProcess.js @@ -0,0 +1,11 @@ +import("system.vars"); +import("KeywordRegistry_basic"); +import("system.result"); +import("Sql_lib"); + +var cond = newWhere() + .and("FORECAST.KIND", $KeywordRegistry.forecastKind$planning()) + .andIfSet("FORECAST.CONTACT_ID", "$param.ContactId_param") + .andIfSet("FORECAST.FORECASTID", JSON.parse(vars.get("$param.PlanningIds_param")), SqlBuilder.IN()); + +result.string(cond.toString()); \ No newline at end of file diff --git a/entity/Planning_entity/recordcontainers/db/filterextensions/organisationattributes_filter/filterConditionProcess.js b/entity/Planning_entity/recordcontainers/db/filterextensions/organisationattributes_filter/filterConditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..50f428b461f003b03cfc7e6cc151773dc8306319 --- /dev/null +++ b/entity/Planning_entity/recordcontainers/db/filterextensions/organisationattributes_filter/filterConditionProcess.js @@ -0,0 +1,6 @@ +import("system.result"); +import("AttributeFilter_lib"); + +var sqlCond = AttributeFilterExtensionMaker.makeFilterConditionSql("CONTACT_ID", "Organisation"); + +result.string(sqlCond); \ No newline at end of file diff --git a/entity/Planning_entity/recordcontainers/db/filterextensions/organisationattributes_filter/filterFieldsProcess.js b/entity/Planning_entity/recordcontainers/db/filterextensions/organisationattributes_filter/filterFieldsProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..105c59dca1f529f109664b425b83d8de93041f00 --- /dev/null +++ b/entity/Planning_entity/recordcontainers/db/filterextensions/organisationattributes_filter/filterFieldsProcess.js @@ -0,0 +1,5 @@ +import("system.result"); +import("AttributeFilter_lib"); + +var fields = AttributeFilterExtensionMaker.makeFilterFields("Organisation"); +result.string(fields); \ No newline at end of file diff --git a/entity/Planning_entity/recordcontainers/db/filterextensions/organisationattributes_filter/filterValuesProcess.js b/entity/Planning_entity/recordcontainers/db/filterextensions/organisationattributes_filter/filterValuesProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..942b0a0495a179f9c25d19330bb8cd59c5563ec0 --- /dev/null +++ b/entity/Planning_entity/recordcontainers/db/filterextensions/organisationattributes_filter/filterValuesProcess.js @@ -0,0 +1,5 @@ +import("system.result"); +import("AttributeFilter_lib"); + +var values = AttributeFilterExtensionMaker.makeFilterValues(); +result.object(values); \ No newline at end of file diff --git a/entity/Planning_entity/recordcontainers/db/recordfieldmappings/groupcode.displayvalue/expression.js b/entity/Planning_entity/recordcontainers/db/recordfieldmappings/groupcode.displayvalue/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..24e9e9e299565f26fa9151cdda86f2c73c7c102b --- /dev/null +++ b/entity/Planning_entity/recordcontainers/db/recordfieldmappings/groupcode.displayvalue/expression.js @@ -0,0 +1,5 @@ +import("KeywordRegistry_basic"); +import("Keyword_lib"); +import("system.result"); + +result.string(KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.productGroupcode(), "FORECAST.GROUPCODE")); \ No newline at end of file diff --git a/entity/Planning_entity/recordcontainers/db/recordfieldmappings/organisations/filterConditionProcess.js b/entity/Planning_entity/recordcontainers/db/recordfieldmappings/organisations/filterConditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..8e208adfb692eded396d7ddcd4a46a66cb5e825b --- /dev/null +++ b/entity/Planning_entity/recordcontainers/db/recordfieldmappings/organisations/filterConditionProcess.js @@ -0,0 +1,13 @@ +import("Sql_lib"); +import("system.vars"); +import("system.result"); + + +var subSql = newSelect("CONTACT.CONTACTID") +.from("CONTACT") +.join("ORGANISATION", "ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID and CONTACT.PERSON_ID is null") +.leftJoin("ADDRESS", "ADDRESS.ADDRESSID = CONTACT.ADDRESS_ID") +.leftJoin("CLASSIFICATIONSTORAGE", "CLASSIFICATIONSTORAGE.OBJECT_ROWID = CONTACT.CONTACTID") +.where(vars.get("$local.condition")).toString(); + +result.string(newWhere("FORECAST.CONTACT_ID in (" + subSql + ")").toString()); \ No newline at end of file diff --git a/entity/Planning_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js b/entity/Planning_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..c13a0a906da9ffc60b722608fd8ea32a086d4003 --- /dev/null +++ b/entity/Planning_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js @@ -0,0 +1,5 @@ +import("KeywordRegistry_basic"); +import("Keyword_lib"); +import("system.result"); + +result.string(KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.forecastStatus(), "FORECAST.STATUS")); \ No newline at end of file diff --git a/entity/PrivatePerson_entity/PrivatePerson_entity.aod b/entity/PrivatePerson_entity/PrivatePerson_entity.aod index 67d65775c2f3ffe527aa14ef30497695aa3f7316..9ab398fbfae79b4e6ee63e96d6f936aa610bf062 100644 --- a/entity/PrivatePerson_entity/PrivatePerson_entity.aod +++ b/entity/PrivatePerson_entity/PrivatePerson_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>PrivatePerson_entity</name> <title>Private person</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -9,14 +9,6 @@ <entityFields> <entityProvider> <name>#PROVIDER</name> - <dependencies> - <entityDependency> - <name>805b77bd-2728-4979-9503-95760ebb6b49</name> - <entityName>Object_entity</entityName> - <fieldName>PrivatePersons</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>PERSONID</name> diff --git a/entity/Prod2prod_entity/Prod2prod_entity.aod b/entity/Prod2prod_entity/Prod2prod_entity.aod index 0acf3ef262439b9abf72d47cb858eac6817b1f60..a011d4d458c4e1fcc00eb9b9b6180ea1c09e483c 100644 --- a/entity/Prod2prod_entity/Prod2prod_entity.aod +++ b/entity/Prod2prod_entity/Prod2prod_entity.aod @@ -1,11 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Prod2prod_entity</name> <title>Parts list</title> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/Prod2prod_entity/documentation.adoc</documentation> <titlePlural>Parts list</titlePlural> - <recordContainer>jdito</recordContainer> + <recordContainer>jDito</recordContainer> <entityFields> <entityProvider> <name>#PROVIDER</name> @@ -23,10 +23,6 @@ <valueProcess>%aditoprj%/entity/Prod2prod_entity/entityfields/optional/valueProcess.js</valueProcess> <onValueChange>%aditoprj%/entity/Prod2prod_entity/entityfields/optional/onValueChange.js</onValueChange> </entityField> - <entityField> - <name>UID</name> - <valueProcess>%aditoprj%/entity/Prod2prod_entity/entityfields/uid/valueProcess.js</valueProcess> - </entityField> <entityField> <name>QUANTITY</name> <title>Quantity</title> @@ -42,7 +38,6 @@ <title>Product</title> <consumer>Products</consumer> <mandatory v="true" /> - <valueProcess>%aditoprj%/entity/Prod2prod_entity/entityfields/source_id/valueProcess.js</valueProcess> <onValueChange>%aditoprj%/entity/Prod2prod_entity/entityfields/source_id/onValueChange.js</onValueChange> </entityField> <entityField> @@ -60,20 +55,11 @@ </entityParameter> <entityField> <name>PROD2PRODID</name> - <valueProcess>%aditoprj%/entity/Prod2prod_entity/entityfields/prod2prodid/valueProcess.js</valueProcess> </entityField> <entityProvider> <name>ProductLinks</name> <targetContextField>targetContext</targetContextField> <targetIdField>SOURCE_ID</targetIdField> - <dependencies> - <entityDependency> - <name>4bd06e3b-17a0-483e-a61c-818ff7e86be3</name> - <entityName>Product_entity</entityName> - <fieldName>ProductLinks</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ProductId_param</name> @@ -100,7 +86,7 @@ <name>insert</name> <title>New child product</title> <onActionProcess>%aditoprj%/entity/Prod2prod_entity/entityfields/alter/children/insert/onActionProcess.js</onActionProcess> - <isSelectionAction v="true" /> + <selectionType>MULTI</selectionType> <iconId>VAADIN:FILE_TREE_SMALL</iconId> </entityActionField> </children> @@ -138,9 +124,6 @@ <title>Unit</title> <state>READONLY</state> </entityField> - <entityField> - <name>vat</name> - </entityField> <entityField> <name>currentPurchasePrice</name> <title>Curr. purchase price</title> @@ -151,13 +134,17 @@ <title>Curr. sales price</title> <state>READONLY</state> </entityField> + <entityField> + <name>PARENT_ID</name> + </entityField> + <entityField> + <name>UID</name> + </entityField> </entityFields> <recordContainers> <jDitoRecordContainer> - <name>jdito</name> + <name>jDito</name> <jDitoRecordAlias>Data_alias</jDitoRecordAlias> - <isRequireContainerFiltering v="true" /> - <isSortable v="true" /> <contentProcess>%aditoprj%/entity/Prod2prod_entity/recordcontainers/jdito/contentProcess.js</contentProcess> <hasDependentRecords v="true" /> <onInsert>%aditoprj%/entity/Prod2prod_entity/recordcontainers/jdito/onInsert.js</onInsert> @@ -168,22 +155,22 @@ <name>UID.value</name> </jDitoRecordFieldMapping> <jDitoRecordFieldMapping> - <name>SOURCE_ID.value</name> + <name>PROD2PRODID.value</name> </jDitoRecordFieldMapping> <jDitoRecordFieldMapping> - <name>DEST_ID.value</name> + <name>PARENT_ID.value</name> </jDitoRecordFieldMapping> <jDitoRecordFieldMapping> - <name>QUANTITY.value</name> + <name>SOURCE_ID.value</name> </jDitoRecordFieldMapping> <jDitoRecordFieldMapping> - <name>PRODUCTCODE.value</name> + <name>SOURCE_ID.displayValue</name> </jDitoRecordFieldMapping> <jDitoRecordFieldMapping> - <name>PRODUCTID.value</name> + <name>DEST_ID.value</name> </jDitoRecordFieldMapping> <jDitoRecordFieldMapping> - <name>PROD2PRODID.value</name> + <name>QUANTITY.value</name> </jDitoRecordFieldMapping> <jDitoRecordFieldMapping> <name>OPTIONAL.value</name> @@ -192,11 +179,17 @@ <name>TAKEPRICE.value</name> </jDitoRecordFieldMapping> <jDitoRecordFieldMapping> - <name>SOURCE_ID.displayValue</name> + <name>PRODUCTID.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>PRODUCTCODE.value</name> </jDitoRecordFieldMapping> <jDitoRecordFieldMapping> <name>unit.value</name> </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>unit.displayValue</name> + </jDitoRecordFieldMapping> <jDitoRecordFieldMapping> <name>currentPurchasePrice.value</name> </jDitoRecordFieldMapping> diff --git a/entity/Prod2prod_entity/entityfields/uid/valueProcess.js b/entity/Prod2prod_entity/entityfields/uid/valueProcess.js deleted file mode 100644 index 884a038bbce84aa5a3bc93ac65bc962fd93f468d..0000000000000000000000000000000000000000 --- a/entity/Prod2prod_entity/entityfields/uid/valueProcess.js +++ /dev/null @@ -1,7 +0,0 @@ -import("system.util"); -import("system.vars"); -import("system.result"); -import("system.neon"); - -if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) - result.object([util.getNewUUID(), vars.get("$field.PROD2PRODID")]); // 1. is some random uid for uniqueness 2. is the prod2ProdID \ No newline at end of file diff --git a/entity/Prod2prod_entity/recordcontainers/jdito/contentProcess.js b/entity/Prod2prod_entity/recordcontainers/jdito/contentProcess.js index fb53ccb23f6522117378f94c664f60efbbf33c78..bb1b8c223115b5ed5937f795d5ee3890d2174718 100644 --- a/entity/Prod2prod_entity/recordcontainers/jdito/contentProcess.js +++ b/entity/Prod2prod_entity/recordcontainers/jdito/contentProcess.js @@ -1,218 +1,76 @@ +import("Product_lib"); import("system.text"); -import("KeywordRegistry_basic"); -import("Keyword_lib"); -import("Sql_lib"); import("system.neon"); -import("system.result"); import("system.vars"); -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] = JSON.stringify([virtualProd2ProdId, elementData[0]]); - - // 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]]; +import("system.result"); +import("Sql_lib"); +import("Keyword_lib"); +import("KeywordRegistry_basic"); - if (childrens !== undefined && childrens.length > 0) { - // Build graph for each children +var query = newSelect([ + "PROD2PROD.PROD2PRODID", // UID.value + "PROD2PROD.PROD2PRODID", // PROD2PRODID.value + "''", // PARENT_ID.value + "PROD2PROD.SOURCE_ID", // SOURCE_ID.value + "PRODUCT.PRODUCTNAME", // SOURCE_ID.displaValue + "PROD2PROD.DEST_ID", // DEST_ID.value + "PROD2PROD.QUANTITY", // QUANTITY.value + "PROD2PROD.OPTIONAL", // OPTIONAL.value + "PROD2PROD.TAKEPRICE", // TAKEPRICE.value + "PRODUCT.PRODUCTID", // PRODUCT.value + "PRODUCT.PRODUCTCODE", // PRODUCTCODE.value + "PRODUCT.UNIT", // unit.value + KeywordUtils.getResolvedTitleSqlPart( // unit.displaValue + $KeywordRegistry.quantityUnit(), + "PRODUCT.UNIT" + ) +]).from("PROD2PROD") +.join("PRODUCT", "PRODUCT.PRODUCTID = PROD2PROD.SOURCE_ID"); - childrens.forEach(function(children) { - // Recursive function call (!) - - var graphResult = buildGraph(children, elementData[0], mappingStructure, prod2prodIdMapping); - - graphResult.forEach(function(res) {elements.push(res)}) - }); +function _returnData(data) { + for(let i = 0; i < data.length; i++) + { + var productId = data[i][3]; + + // currentPurchasePrice.value + var purchasePrice = ProductUtils.getCurrentProductPrice(productId, "PP", true); + data[i].push( + purchasePrice.length == 0 ? "" : + text.formatDouble(purchasePrice[0], "#,##0.00", true) + " " + purchasePrice[1] + ); + + // currentSalesPrice.value + var salesPrice = ProductUtils.getCurrentProductPrice(productId, "SP", true); + data[i].push( + salesPrice.length == 0 ? "" : + text.formatDouble(salesPrice[0], "#,##0.00", true) + " " + salesPrice[1] + ); } - - return elements; + result.object(data); } -/* - * in the past at this point a check for the "recordstate" was done - * this should not be necessery and in fact causes a problem: - * When adding a new prod2prod entry and performing a cancel an error is raised that the variable does not exist. - * - * So *IF* you need that check for the state, you should check if this error is thrown - * + add a comment why the check is needed here instead of this current comment - */ - -if (vars.get("$local.idvalues") && vars.get("$local.idvalues").length > 0) +if(vars.exists("$local.idvalues") && vars.get("$local.idvalues")) { - var prod2prodId = JSON.parse(vars.get("$local.idvalues")[0])[1]; - if (prod2prodId) - { - var prodData = newSelect(["PROD2PROD.PROD2PRODID", - "PROD2PROD.SOURCE_ID", - "PROD2PROD.DEST_ID", - "PROD2PROD.QUANTITY", - "PRODUCT.PRODUCTCODE", - "PRODUCT.PRODUCTID", - "PROD2PROD.PROD2PRODID", - "PROD2PROD.OPTIONAL", - "PROD2PROD.TAKEPRICE", - "PRODUCT.PRODUCTNAME", - KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.quantityUnit(), "PRODUCT.UNIT")]) - .from("PROD2PROD") - .join("PRODUCT", "PROD2PROD.SOURCE_ID = PRODUCTID") - .where("PROD2PROD.PROD2PRODID", prod2prodId) - .arrayRow(); - - prodData[0] = vars.get("$local.idvalues")[0]; //only first one since whe have single selection as the selection mode - prodData[11] = ""; - prodData[12] = ""; - - let purchasePrice = ProductUtils.getCurrentProductPrice(prodData[5], "PP", true); - if (purchasePrice.length > 0) - { - prodData[11] = text.formatDouble(purchasePrice[0], "#,##0.00", true) + " " + purchasePrice[1]; - } - - let salesPrice = ProductUtils.getCurrentProductPrice(prodData[5], "SP", true); - if (salesPrice.length > 0) - { - prodData[12] = text.formatDouble(salesPrice[0], "#,##0.00", true) + " " + salesPrice[1]; - } - result.object([prodData]); - } + _returnData(query.where("PROD2PROD.PROD2PRODID", vars.get("$local.idvalues"), SqlBuilder.IN()).table()); } else { - var prodid = vars.exists("$param.ProductId_param") - && vars.get("$param.ProductId_param") != null ? vars.get("$param.ProductId_param") : ""; - if(prodid != "") + var prod2prod = query.table(); + function _getChilds(pId, pProductId, pMaxRecursion) { - // First 3 columns are crucial, the rest is optional. - var data = newSelect(["PROD2PROD.PROD2PRODID", - "PROD2PROD.SOURCE_ID", - "PROD2PROD.DEST_ID", - "PROD2PROD.QUANTITY", - "PRODUCT.PRODUCTCODE", - "PRODUCT.PRODUCTID", - "PROD2PROD.PROD2PRODID", - "PROD2PROD.OPTIONAL", - "PROD2PROD.TAKEPRICE", - "PRODUCT.PRODUCTNAME", - KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.quantityUnit(), "PRODUCT.UNIT")]) - .from("PROD2PROD") - .join("PRODUCT", "PROD2PROD.SOURCE_ID = PRODUCTID") - .orderBy("PRODUCTCODE") - .table(); - - 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); }) - }) - - for (let i = 0; i < allData.length; i++) { - allData[i][11] = ""; - allData[i][12] = ""; - - let purchasePrice = ProductUtils.getCurrentProductPrice(allData[i][5], "PP", true); - if (purchasePrice.length > 0) - { - allData[i][11] = text.formatDouble(purchasePrice[0], "#,##0.00", true) + " " + purchasePrice[1]; - } - - let salesPrice = ProductUtils.getCurrentProductPrice(allData[i][5], "SP", true); - if (salesPrice.length > 0) - { - allData[i][12] = text.formatDouble(salesPrice[0], "#,##0.00", true) + " " + salesPrice[1]; - } + if(pMaxRecursion == 0) + { + return []; } - result.object(allData); + var items = prod2prod.filter(function(p2p) { + return p2p[5] == pProductId; + }); + var itemChilds = []; + items.forEach(function(p2p) { + p2p[2] = pId; + itemChilds.push(_getChilds(p2p[0], p2p[3], pMaxRecursion - 1)); + }); + return Array.prototype.concat.apply(items, itemChilds); } -} \ No newline at end of file + _returnData(_getChilds(null, vars.get("$param.ProductId_param"), 20)); +} diff --git a/entity/Prod2prod_entity/recordcontainers/jdito/onDelete.js b/entity/Prod2prod_entity/recordcontainers/jdito/onDelete.js index 94f252cf1229adcd080a63a58a821d873fc3ccc1..7cf6538eadb00ee62b1c3b7096b98fc81ec4bf6d 100644 --- a/entity/Prod2prod_entity/recordcontainers/jdito/onDelete.js +++ b/entity/Prod2prod_entity/recordcontainers/jdito/onDelete.js @@ -1,3 +1,4 @@ import("Sql_lib"); +import("system.vars"); -newWhereIfSet("PROD2PROD.PROD2PRODID", "$field.PROD2PRODID").deleteData(); \ No newline at end of file +newWhereIfSet("PROD2PROD.PROD2PRODID", vars.get("$local.uid")).deleteData(); diff --git a/entity/Prod2prod_entity/recordcontainers/jdito/onInsert.js b/entity/Prod2prod_entity/recordcontainers/jdito/onInsert.js index d1adc28758e4d7e3d9d2c7dcc2e505e54039c03d..2e13aacb363ad913dfe9a7996dcd497d2af308a5 100644 --- a/entity/Prod2prod_entity/recordcontainers/jdito/onInsert.js +++ b/entity/Prod2prod_entity/recordcontainers/jdito/onInsert.js @@ -10,11 +10,11 @@ var cols = [ "PROD2PRODID" , "OPTIONAL" , "TAKEPRICE" ]; -var vals = [ vars.get("$field.PROD2PRODID") +var vals = [ vars.get("$local.uid") , vars.get("$field.DEST_ID") , vars.get("$field.SOURCE_ID") , vars.get("$field.QUANTITY") , vars.get("$field.OPTIONAL") , vars.get("$field.TAKEPRICE") ]; -db.insertData("PROD2PROD", cols, null, vals); \ No newline at end of file +db.insertData("PROD2PROD", cols, null, vals); diff --git a/entity/Prod2prod_entity/recordcontainers/jdito/onUpdate.js b/entity/Prod2prod_entity/recordcontainers/jdito/onUpdate.js index c71a9c41db27fb3478fde565b44b9c5b7643c1c3..a98faf66d87ef816d36d0ac543e1245313c535a8 100644 --- a/entity/Prod2prod_entity/recordcontainers/jdito/onUpdate.js +++ b/entity/Prod2prod_entity/recordcontainers/jdito/onUpdate.js @@ -1,6 +1,5 @@ -import("Sql_lib"); -import("system.datetime"); import("system.vars"); +import("Sql_lib"); var cols = [ "SOURCE_ID" , "QUANTITY" @@ -12,5 +11,5 @@ var vals = [ vars.get("$field.SOURCE_ID") , vars.get("$field.OPTIONAL") , vars.get("$field.TAKEPRICE") ]; -newWhere("PROD2PROD.PROD2PRODID", "$field.PROD2PRODID") - .updateData(true, "PROD2PROD", cols, null, vals); \ No newline at end of file +newWhere("PROD2PROD.PROD2PRODID", vars.get("$local.uid")) + .updateData(true, "PROD2PROD", cols, null, vals); diff --git a/entity/Product_entity/Product_entity.aod b/entity/Product_entity/Product_entity.aod index 740f556ee5bee37ebc380a6ef7e9a190f664aaac..4b80873056c21be1b4f4911a029582b8e0f6df58 100644 --- a/entity/Product_entity/Product_entity.aod +++ b/entity/Product_entity/Product_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Product_entity</name> <title>Product</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -172,35 +172,10 @@ <entityProvider> <name>#PROVIDER</name> <recordContainer>db</recordContainer> - <dependencies> - <entityDependency> - <name>edd8a3af-d168-4a3b-871d-39db964c700b</name> - <entityName>Offeritem_entity</entityName> - <fieldName>Products</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>e4ba4c26-a777-4560-ab68-311ffae76e2f</name> - <entityName>Orderitem_entity</entityName> - <fieldName>Products</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>760f179a-f37e-4bdf-af8f-d8935e86db0f</name> - <entityName>Object_entity</entityName> - <fieldName>Products</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>6d0654ed-35f1-4de4-9cec-ad25f7ad43b6</name> - <entityName>ObjectProxy_entity</entityName> - <fieldName>Products</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityConsumer> <name>ProductLinks</name> + <selectionMode>MULTI</selectionMode> <dependency> <name>dependency</name> <entityName>Prod2prod_entity</entityName> @@ -231,6 +206,7 @@ <entityConsumer> <name>Documents</name> <selectionMode>MULTI</selectionMode> + <stateProcess>%aditoprj%/entity/Product_entity/entityfields/documents/stateProcess.js</stateProcess> <dependency> <name>dependency</name> <entityName>Document_entity</entityName> @@ -351,32 +327,6 @@ </entityParameter> <entityProvider> <name>Products</name> - <dependencies> - <entityDependency> - <name>1b12e8ef-74ba-4294-bd2b-9d4afa80798c</name> - <entityName>Prod2prod_entity</entityName> - <fieldName>Products</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>0129066d-805c-4522-b1bc-9bbbc9588629</name> - <entityName>Organisation_entity</entityName> - <fieldName>Products</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>19171308-e523-438a-994c-9d6e7b58ee04</name> - <entityName>Offer_entity</entityName> - <fieldName>Products</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>acbbb19a-16e6-4220-8997-4a79db85100a</name> - <entityName>Order_entity</entityName> - <fieldName>Products</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ExcludedProducts_param</name> @@ -392,7 +342,6 @@ </entityActionField> <entityConsumer> <name>Tasks</name> - <stateProcess>%aditoprj%/entity/Product_entity/entityfields/tasks/stateProcess.js</stateProcess> <dependency> <name>dependency</name> <entityName>Task_entity</entityName> @@ -560,6 +509,41 @@ <name>ProductIds_param</name> <expose v="true" /> </entityParameter> + <entityConsumer> + <name>DigitalAdvertisingDocuments</name> + <selectionMode>MULTI</selectionMode> + <state>EDITABLE</state> + <stateProcess>%aditoprj%/entity/Product_entity/entityfields/digitaladvertisingdocuments/stateProcess.js</stateProcess> + <dependency> + <name>dependency</name> + <entityName>Document_entity</entityName> + <fieldName>Documents</fieldName> + </dependency> + <children> + <entityParameter> + <name>AssignmentRowId_param</name> + <valueProcess>%aditoprj%/entity/Product_entity/entityfields/digitaladvertisingdocuments/children/assignmentrowid_param/valueProcess.js</valueProcess> + </entityParameter> + <entityParameter> + <name>AssignmentTable_param</name> + <valueProcess>%aditoprj%/entity/Product_entity/entityfields/digitaladvertisingdocuments/children/assignmenttable_param/valueProcess.js</valueProcess> + </entityParameter> + <entityParameter> + <name>Keyword_param</name> + <valueProcess>%aditoprj%/entity/Product_entity/entityfields/digitaladvertisingdocuments/children/keyword_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityField> + <name>DIGITAL</name> + <title>Digital</title> + <contentType>BOOLEAN</contentType> + <stateProcess>%aditoprj%/entity/Product_entity/entityfields/digital/stateProcess.js</stateProcess> + </entityField> + <entityParameter> + <name>AdvertisingProducts_param</name> + <expose v="true" /> + </entityParameter> </entityFields> <recordContainers> <dbRecordContainer> @@ -666,6 +650,10 @@ <recordfield>PRODUCT.PRODUCTID</recordfield> <aggregateType>COUNT</aggregateType> </aggregateFieldDbMapping> + <dbRecordFieldMapping> + <name>DIGITAL.value</name> + <recordfield>PRODUCT.DIGITAL</recordfield> + </dbRecordFieldMapping> </recordFieldMappings> <linkInformation> <linkInformation> diff --git a/entity/Product_entity/entityfields/addtooffer/stateProcess.js b/entity/Product_entity/entityfields/addtooffer/stateProcess.js index a28ffee7b2185270e3e81736bcbf2605c8af57f9..e04ccbdcb9187f77de02fe5af77889134808e2b0 100644 --- a/entity/Product_entity/entityfields/addtooffer/stateProcess.js +++ b/entity/Product_entity/entityfields/addtooffer/stateProcess.js @@ -3,16 +3,12 @@ import("system.result"); import("Offer_lib"); import("system.vars"); - - if(vars.get("$param.ShownInOfferMainView_param")) { - - var res; - res = OfferUtils.isEditable(vars.get("$param.OrderOfferInformations_param")["OfferStatus_param"])? - neon.COMPONENTSTATE_EDITABLE: neon.COMPONENTSTATE_DISABLED; - - - result.string(res); + result.string( + OfferUtils.isEditable(JSON.parse( + vars.get("$param.OrderOfferInformations_param") + )["OfferStatus_param"]) ? + neon.COMPONENTSTATE_EDITABLE: neon.COMPONENTSTATE_DISABLED + ); } - \ No newline at end of file diff --git a/entity/Product_entity/entityfields/currentpurchaseprice/valueProcess.js b/entity/Product_entity/entityfields/currentpurchaseprice/valueProcess.js index 48d5a48dba985e36efff385275848c0daf4cd188..de7096303d2fcaf0a4b3c31b8ea352577816af70 100644 --- a/entity/Product_entity/entityfields/currentpurchaseprice/valueProcess.js +++ b/entity/Product_entity/entityfields/currentpurchaseprice/valueProcess.js @@ -4,6 +4,14 @@ import("system.result"); import("system.vars"); import("Product_lib"); -var price = ProductUtils.getCurrentProductPrice(vars.get("$field.PRODUCTID"), "PP", true); +var currency; +if(vars.get("$param.OrderOfferInformations_param")) +{ + currency = JSON.parse(vars.get("$param.OrderOfferInformations_param")).Currency_param; +} + +var price = ProductUtils.getCurrentProductPrice(vars.get("$field.PRODUCTID"), "PP", true, currency); if (price.length > 0) - result.string(text.formatDouble(price[0], "#,##0.00", true) + " " + price[1]); \ No newline at end of file +{ + result.string(text.formatDouble(price[0], "#,##0.00", true) + " " + price[1]); +} \ No newline at end of file diff --git a/entity/Product_entity/entityfields/currentsalesprice/valueProcess.js b/entity/Product_entity/entityfields/currentsalesprice/valueProcess.js index 6981610dc3c3738e745b030d2c37468a7e48d186..b7abab4378b2ecedf8698130a15889ebc5e02ac5 100644 --- a/entity/Product_entity/entityfields/currentsalesprice/valueProcess.js +++ b/entity/Product_entity/entityfields/currentsalesprice/valueProcess.js @@ -4,6 +4,14 @@ import("system.result"); import("system.vars"); import("Product_lib"); -var price = ProductUtils.getCurrentProductPrice(vars.get("$field.PRODUCTID"), "SP", true); +var currency; +if(vars.get("$param.OrderOfferInformations_param")) +{ + currency = JSON.parse(vars.get("$param.OrderOfferInformations_param")).Currency_param; +} + +var price = ProductUtils.getCurrentProductPrice(vars.get("$field.PRODUCTID"), "SP", true, currency); if (price.length > 0) - result.string(text.formatDouble(price[0], "#,##0.00", true) + " " + price[1]); \ No newline at end of file +{ + result.string(text.formatDouble(price[0], "#,##0.00", true) + " " + price[1]); +} \ No newline at end of file diff --git a/entity/Product_entity/entityfields/digital/stateProcess.js b/entity/Product_entity/entityfields/digital/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..a3c48311cd55a3aa953ade08d6d30eedc3e3964c --- /dev/null +++ b/entity/Product_entity/entityfields/digital/stateProcess.js @@ -0,0 +1,5 @@ +import("system.neon"); +import("system.vars"); +import("system.result"); + +result.string(vars.get("$field.ADVERTISING") == "Y" ? neon.COMPONENTSTATE_EDITABLE : neon.COMPONENTSTATE_INVISIBLE); \ No newline at end of file diff --git a/entity/Address_entity/entityfields/streetvalidation/children/country_param/valueProcess.js b/entity/Product_entity/entityfields/digitaladvertisingdocuments/children/assignmentrowid_param/valueProcess.js similarity index 52% rename from entity/Address_entity/entityfields/streetvalidation/children/country_param/valueProcess.js rename to entity/Product_entity/entityfields/digitaladvertisingdocuments/children/assignmentrowid_param/valueProcess.js index 41f3b8dc1a9b50c6ae934a4fae1402d699cc87b8..eaa8f9632d85a5a73a33bfe5e9ce56e6dddd390e 100644 --- a/entity/Address_entity/entityfields/streetvalidation/children/country_param/valueProcess.js +++ b/entity/Product_entity/entityfields/digitaladvertisingdocuments/children/assignmentrowid_param/valueProcess.js @@ -1,4 +1,4 @@ import("system.result"); import("system.vars"); -result.string(vars.get("$field.COUNTRY")); \ No newline at end of file +result.string(vars.get("$field.PRODUCTID")); \ No newline at end of file diff --git a/entity/Product_entity/entityfields/digitaladvertisingdocuments/children/assignmenttable_param/valueProcess.js b/entity/Product_entity/entityfields/digitaladvertisingdocuments/children/assignmenttable_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..3d8d233b6f8fecc19f4944c5c3e58203cb87147d --- /dev/null +++ b/entity/Product_entity/entityfields/digitaladvertisingdocuments/children/assignmenttable_param/valueProcess.js @@ -0,0 +1,3 @@ +import("system.result"); + +result.string("PRODUCT"); \ No newline at end of file diff --git a/entity/Product_entity/entityfields/digitaladvertisingdocuments/children/keyword_param/valueProcess.js b/entity/Product_entity/entityfields/digitaladvertisingdocuments/children/keyword_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..bf12b6cd681e9366b547be3b8aa3a03f67ba10cf --- /dev/null +++ b/entity/Product_entity/entityfields/digitaladvertisingdocuments/children/keyword_param/valueProcess.js @@ -0,0 +1,3 @@ +import("system.result"); + +result.string("DIGITALADVERTISING"); \ No newline at end of file diff --git a/entity/Product_entity/entityfields/digitaladvertisingdocuments/stateProcess.js b/entity/Product_entity/entityfields/digitaladvertisingdocuments/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..5972c08198d84d4befd0840a3ffe3bc6e50322ff --- /dev/null +++ b/entity/Product_entity/entityfields/digitaladvertisingdocuments/stateProcess.js @@ -0,0 +1,12 @@ +import("Util_lib"); +import("system.result"); +import("system.vars"); +import("system.neon"); + +var ret = neon.COMPONENTSTATE_INVISIBLE; + +if(Utils.toBoolean(vars.get("$field.ADVERTISING") == "Y" && vars.get("$field.DIGITAL"))) +{ + ret = neon.COMPONENTSTATE_EDITABLE; +} +result.string(ret); diff --git a/entity/Product_entity/entityfields/documents/stateProcess.js b/entity/Product_entity/entityfields/documents/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..d885b0520747da465a1ba022ab559d3cdc178a0b --- /dev/null +++ b/entity/Product_entity/entityfields/documents/stateProcess.js @@ -0,0 +1,13 @@ +import("Util_lib"); +import("system.result"); +import("system.vars"); +import("system.neon"); + +var ret = neon.COMPONENTSTATE_EDITABLE; +//disabling the 'normal' Documentfolder when the product is a digital advertisingmaterial the second document component +//will be enabled in reason there will be a keyword preselected so that digital Advertising Documents can be identified easier +if(Utils.toBoolean(vars.get("$field.ADVERTISING") == "Y" && vars.get("$field.DIGITAL"))) +{ + ret = neon.COMPONENTSTATE_INVISIBLE; +} +result.string(ret); \ No newline at end of file diff --git a/entity/Product_entity/entityfields/tasks/stateProcess.js b/entity/Product_entity/entityfields/tasks/stateProcess.js deleted file mode 100644 index 062f477b61b1ef7467fc25a4b5c84395116c3d29..0000000000000000000000000000000000000000 --- a/entity/Product_entity/entityfields/tasks/stateProcess.js +++ /dev/null @@ -1,10 +0,0 @@ -import("system.result"); -import("system.neon"); -import("system.vars"); -import("ActivityTask_lib"); -import("Context_lib"); - -if(TaskUtils.hasTasks(vars.get("$field.PRODUCTID"), ContextUtils.getCurrentContextId())) - result.string(neon.COMPONENTSTATE_EDITABLE); -else - result.string(neon.COMPONENTSTATE_INVISIBLE); \ No newline at end of file diff --git a/entity/Product_entity/recordcontainers/db/conditionProcess.js b/entity/Product_entity/recordcontainers/db/conditionProcess.js index 33a3aee401b560ffcb70929b80881e8f0a01aa03..8a3a4bf9287fc6c1ce31aa671db428bc61358123 100644 --- a/entity/Product_entity/recordcontainers/db/conditionProcess.js +++ b/entity/Product_entity/recordcontainers/db/conditionProcess.js @@ -17,4 +17,8 @@ if (vars.exists("$param.ExcludedProducts_param") && vars.get("$param.ExcludedPro productCond.andIfSet("PRODUCT.PRODUCTID", excludedIds, SqlBuilder.NOT_IN()); } +if(vars.exists("$param.AdvertisingProducts_param") && vars.get("$param.AdvertisingProducts_param")) +{ + productCond.andIfSet("PRODUCT.ADVERTISING", "Y", SqlBuilder.EQUAL()); +} result.string(productCond.toString()); diff --git a/entity/Productprice_entity/Productprice_entity.aod b/entity/Productprice_entity/Productprice_entity.aod index db95abf550f0eb6f8be509961236a026edce225b..7281523593909679196a4c4ec765b483d63c76be 100644 --- a/entity/Productprice_entity/Productprice_entity.aod +++ b/entity/Productprice_entity/Productprice_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Productprice_entity</name> <title>Prices</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -20,6 +20,7 @@ <dropDownProcess>%aditoprj%/entity/Productprice_entity/entityfields/buysell/dropDownProcess.js</dropDownProcess> <stateProcess>%aditoprj%/entity/Productprice_entity/entityfields/buysell/stateProcess.js</stateProcess> <valueProcess>%aditoprj%/entity/Productprice_entity/entityfields/buysell/valueProcess.js</valueProcess> + <onValueChange>%aditoprj%/entity/Productprice_entity/entityfields/buysell/onValueChange.js</onValueChange> </entityField> <entityField> <name>CURRENCY</name> @@ -112,6 +113,7 @@ <titleProcess>%aditoprj%/entity/Productprice_entity/entityfields/pricelist/titleProcess.js</titleProcess> <valueProcess>%aditoprj%/entity/Productprice_entity/entityfields/pricelist/valueProcess.js</valueProcess> <displayValueProcess>%aditoprj%/entity/Productprice_entity/entityfields/pricelist/displayValueProcess.js</displayValueProcess> + <onValueChange>%aditoprj%/entity/Productprice_entity/entityfields/pricelist/onValueChange.js</onValueChange> </entityField> <entityParameter> <name>ProductId_param</name> @@ -147,26 +149,6 @@ <name>Productprices</name> <titlePluralProcess>%aditoprj%/entity/Productprice_entity/entityfields/productprices/titlePluralProcess.js</titlePluralProcess> <recordContainer>db</recordContainer> - <dependencies> - <entityDependency> - <name>d5f4c7c4-cd21-4075-bd56-c479672dc09a</name> - <entityName>Product_entity</entityName> - <fieldName>Productprices</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>4efc927f-7441-480c-aaaa-36347e2e60c5</name> - <entityName>Person_entity</entityName> - <fieldName>Pricelists</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>dc9e2360-1769-41ec-b4ec-1a4c67013ef8</name> - <entityName>Organisation_entity</entityName> - <fieldName>Productprices</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ContactId_param</name> diff --git a/entity/Productprice_entity/entityfields/buysell/onValueChange.js b/entity/Productprice_entity/entityfields/buysell/onValueChange.js new file mode 100644 index 0000000000000000000000000000000000000000..b9fbc8bb8696d58f2540bb8a93d6a6464adedfea --- /dev/null +++ b/entity/Productprice_entity/entityfields/buysell/onValueChange.js @@ -0,0 +1,9 @@ +import("system.neon"); +import("Product_lib"); +import("system.vars"); + +if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT) +{ + var productId = vars.get("$field.PRODUCT_ID"); + ProductUtils.presetPriceAndVat(vars.get("$field.PRODUCT_ID"), vars.get("$field.VAT"),vars.get("$field.PRICELIST") , vars.get("$this.value")); +} \ No newline at end of file diff --git a/entity/Productprice_entity/entityfields/contact_id/valueProcess.js b/entity/Productprice_entity/entityfields/contact_id/valueProcess.js index ebfa36528a52773185f164d4ecd96bc17b6e4a80..f8d1effa944871f3f72c5576a8aa3fa492c202fd 100644 --- a/entity/Productprice_entity/entityfields/contact_id/valueProcess.js +++ b/entity/Productprice_entity/entityfields/contact_id/valueProcess.js @@ -5,6 +5,8 @@ import("system.vars"); if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) { if(vars.exists("$param.ContactId_param") && vars.get("$param.ContactId_param")) + { result.string(vars.get("$param.ContactId_param")); + } } diff --git a/entity/Productprice_entity/entityfields/pricelist/onValueChange.js b/entity/Productprice_entity/entityfields/pricelist/onValueChange.js new file mode 100644 index 0000000000000000000000000000000000000000..190d27786a2d386cdb57927e6c422d1ff16716fd --- /dev/null +++ b/entity/Productprice_entity/entityfields/pricelist/onValueChange.js @@ -0,0 +1,9 @@ +import("system.neon"); +import("Product_lib"); +import("system.vars"); + +if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT) +{ + var productId = vars.get("$field.PRODUCT_ID"); + ProductUtils.presetPriceAndVat(vars.get("$field.PRODUCT_ID"), vars.get("$field.VAT"), vars.get("$this.value"), vars.get("$field.BUYSELL")); +} \ No newline at end of file diff --git a/entity/Productprice_entity/onValidation.js b/entity/Productprice_entity/onValidation.js index 2bfd42916247e16b08a7d6d09da372ed9bef0449..e1091b4245789e8eae75adb06910c971b621b673 100644 --- a/entity/Productprice_entity/onValidation.js +++ b/entity/Productprice_entity/onValidation.js @@ -1,3 +1,8 @@ +import("system.datetime"); +import("system.eMath"); +import("system.translate"); +import("system.neon"); +import("Product_lib"); import("Date_lib"); import("system.result"); import("system.vars"); @@ -11,4 +16,75 @@ if(vars.getString("$param.IgnoreOnValidation_param") != "true") { result.string(DateUtils.getValidationFailString()); } + //The logic for creating a new priceA is the following: + //If there already exists the same priceB (-> same pricelist, buySell, fromQuantity and currency) + // and the validFrom of priceB is before the validFrom of priceA + // ->change the validTo of priceB to one date prior the validFrom of priceA. + // (A)|-------| -> |---| + // (B) |-----------| -> |-----------| + // + // and the validTo of priceB is after the validTo of priceA + // ->change the validFrom of priceB to one date after the validTo of priceA. + // (A) |-------| -> |-----| + // (B) |---------| -> |---------| + // + //There is another case we cannot handle as easy: + // if priceB's validFrom is after the validFrom of priceA and it's validTo is also before the validTo of priceA + // -> catch this case in the onValidation, since the only solution would be to delete priceB + // (A) |----| -> handle in onValidation + // (B) |-------------| -> handle in onValidation + else if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) + { + var priceList = vars.get("$field.PRICELIST"); + var productId = vars.get("$field.PRODUCT_ID"); + var buySell = vars.get("$field.BUYSELL"); + var validFrom = vars.get("$field.VALID_FROM"); + var validTo = vars.get("$field.VALID_TO"); + var currency = vars.get("$field.CURRENCY"); + var productPriceListId = vars.get("$field.PRODUCTPRICEID"); + var quantity = vars.get("$field.FROMQUANTITY"); + + var priceListFilter = { currency: currency + , quantity: quantity + , priceList: priceList + , buySell: buySell + , dateFrom: validFrom + , dateTo: validTo}; + var ProductDetails = ProductUtils.getProductDetails(productId, priceListFilter); + + var priceListsToPotentiallyReplace = ProductDetails.PriceLists; + var priceListsToReplace1 = []; + var priceListsToReplace2 = []; + + var showMessage = false; + for (var valPriceList in priceListsToPotentiallyReplace) + { + var currPriceList = priceListsToPotentiallyReplace[valPriceList]; + if(currPriceList["priceList"] == priceList && currPriceList["buySell"] == buySell && + Number.parseInt(currPriceList["fromQuantity"]) == Number.parseInt(quantity) && + currPriceList["currency"] == currency) + { + if(currPriceList["validFrom"] > validFrom && ((validTo == undefined || validTo == "") || + (currPriceList["validTo"] != undefined && currPriceList["validTo"] != "" && currPriceList["validTo"] < validTo))) + { + showMessage = true; + break; + } + else if(eMath.addInt(currPriceList["validFrom"], datetime.ONE_DAY) == currPriceList["validTo"]) + { + showMessage = true; + break; + } + else if(currPriceList["validFrom"] == validFrom && validTo == currPriceList["validTo"]) + { + showMessage = true; + break; + } + } + } + if(showMessage) + { + result.string(translate.withArguments("There already exists a %0 price with the same type of pricelist, quantity and currency in the defined range.", [vars.get("$field.BUYSELL")])); + } + } } \ No newline at end of file diff --git a/entity/Productprice_entity/recordcontainers/db/onDBInsert.js b/entity/Productprice_entity/recordcontainers/db/onDBInsert.js index 5d9ed76f358f35176af7e052e4630a14b9774255..a67c60ee19fba912c468b6399be24380ea0312a3 100644 --- a/entity/Productprice_entity/recordcontainers/db/onDBInsert.js +++ b/entity/Productprice_entity/recordcontainers/db/onDBInsert.js @@ -4,28 +4,76 @@ import("system.datetime"); import("system.entities"); import("Sql_lib"); import("system.vars"); +import("Product_lib"); +//The logic for creating a new priceA is the following: +//If there already exists the same priceB (-> same pricelist, buySell, fromQuantity and currency) +// and the validFrom of priceB is before the validFrom of priceA +// ->change the validTo of priceB to one date prior the validFrom of priceA. +// (A)|-------| -> |---| +// (B) |-----------| -> |-----------| +// +// and the validTo of priceB is after the validTo of priceA +// ->change the validFrom of priceB to one date after the validTo of priceA. +// (A) |-------| -> |-----| +// (B) |---------| -> |---------| +// +//There is another case we cannot handle as easy: +// if priceB's validFrom is after the validFrom of priceA and it's validTo is also before the validTo of priceA +// -> catch this case in the onValidation, since the only solution would be to delete priceB +// (A) |----| -> handle in onValidation +// (B) |-------------| -> handle in onValidation +// +var priceListId = vars.get("$field.PRODUCTPRICEID"); var priceList = vars.get("$field.PRICELIST"); var productId = vars.get("$field.PRODUCT_ID"); var buySell = vars.get("$field.BUYSELL"); var validFrom = vars.get("$field.VALID_FROM"); +var validTo = vars.get("$field.VALID_TO"); +var currency = vars.get("$field.CURRENCY"); var oneDayPrior = eMath.subInt(validFrom, datetime.ONE_DAY); +var oneDayAfter = eMath.addInt(validTo, datetime.ONE_DAY); var productPriceListId = vars.get("$field.PRODUCTPRICEID"); +var quantity = vars.get("$field.FROMQUANTITY"); -var validPriceLists = newSelect("PRODUCTPRICE.PRODUCTPRICEID") - .from("PRODUCTPRICE") - .where("PRODUCTPRICE.PRICELIST", priceList) - .and("PRODUCTPRICE.PRODUCTPRICEID", productPriceListId, SqlBuilder.NOT_EQUAL()) - .and("PRODUCTPRICE.PRODUCT_ID", productId) - .and("PRODUCTPRICE.BUYSELL", buySell) - .and("PRODUCTPRICE.FROMQUANTITY", validFrom, SqlBuilder.LESS_OR_EQUAL()) - .and(newWhere("PRODUCTPRICE.VALID_TO", validFrom, SqlBuilder.GREATER_OR_EQUAL()).or("PRODUCTPRICE.VALID_TO is null")) - .arrayColumn(); +var PriceListFilter = { currency: currency + , quantity: quantity + , priceList: priceList + , buySell: buySell + , dateFrom: validFrom + , dateTo: validTo}; +var ProductDetails = ProductUtils.getProductDetails(productId, PriceListFilter); -var config = entities.createConfigForUpdatingRows().entity("Productprice_entity").fieldValues({"VALID_TO": oneDayPrior}).addParameter("IgnoreOnValidation_param", true); +var priceListsToPotentiallyReplace = ProductDetails.PriceLists; +var priceListsUpdateValidTo = []; +var priceListsUpdateValidFrom = []; +var configValidTo = entities.createConfigForUpdatingRows().entity("Productprice_entity") + .fieldValues({"VALID_TO": oneDayPrior}).addParameter("IgnoreOnValidation_param", true); +var configValidFrom = entities.createConfigForUpdatingRows().entity("Productprice_entity") + .fieldValues({"VALID_FROM": oneDayAfter}).addParameter("IgnoreOnValidation_param", true); + +for (var valPriceList in priceListsToPotentiallyReplace) +{ + var currPriceList = priceListsToPotentiallyReplace[valPriceList]; + if(currPriceList["priceListId"] != priceListId && currPriceList["priceList"] == priceList && currPriceList["buySell"] == buySell && Number.parseInt(currPriceList["fromQuantity"]) == Number.parseInt(quantity)) + { + if(currPriceList["validFrom"] < validFrom && (!currPriceList["validTo"] || currPriceList["validTo"] > validFrom)) + { + priceListsUpdateValidTo.push(currPriceList["priceListId"]); + } + else if(currPriceList["validFrom"] < validTo && (!currPriceList["validTo"] || currPriceList["validTo"] > validTo)) + { + priceListsUpdateValidFrom.push(currPriceList["priceListId"]); + } + } +} -for (i = 0; i < validPriceLists.length; i++) { - - entities.updateRow(config.uid(validPriceLists[i])) +for (let i = 0; i < priceListsUpdateValidTo.length; i++) +{ + entities.updateRow(configValidTo.uid(priceListsUpdateValidTo[i])); } +for (let i = 0; i < priceListsUpdateValidFrom.length; i++) +{ + entities.updateRow(configValidFrom.uid(priceListsUpdateValidFrom[i])); +} \ No newline at end of file diff --git a/entity/QuickEntry_entity/QuickEntry_entity.aod b/entity/QuickEntry_entity/QuickEntry_entity.aod index 9ce66331b3242cbbba9001036cd3e65dc920d156..6a5199461c77194181b4f53eb8cd68b2749ab65b 100644 --- a/entity/QuickEntry_entity/QuickEntry_entity.aod +++ b/entity/QuickEntry_entity/QuickEntry_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>QuickEntry_entity</name> <title>Quick entry</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -17,7 +17,7 @@ <entityField> <name>ORGANISATION_NAME</name> <title>Company</title> - <contentType>LONG_TEXT</contentType> + <contentType>TEXT</contentType> <mandatoryProcess>%aditoprj%/entity/QuickEntry_entity/entityfields/organisation_name/mandatoryProcess.js</mandatoryProcess> </entityField> <entityConsumer> @@ -223,8 +223,14 @@ <name>leadQuickAcquisition</name> <title>{$QUICK_ENTRY_LEAD_QUICK_ACQUISITION}</title> <contentType>FILE</contentType> + <state>INVISIBLE</state> <stateProcess>%aditoprj%/entity/QuickEntry_entity/entityfields/leadquickacquisition/stateProcess.js</stateProcess> <onValueChange>%aditoprj%/entity/QuickEntry_entity/entityfields/leadquickacquisition/onValueChange.js</onValueChange> + <onValueChangeTypes> + <element>MASK</element> + <element>PROCESS</element> + <element>PROCESS_SETVALUE</element> + </onValueChangeTypes> </entityField> <entityConsumer> <name>OrgAndPersDuplicates</name> @@ -237,6 +243,7 @@ <entityParameter> <name>ContactIds_param</name> <valueProcess>%aditoprj%/entity/QuickEntry_entity/entityfields/organdpersduplicates/children/contactids_param/valueProcess.js</valueProcess> + <documentation>%aditoprj%/entity/QuickEntry_entity/entityfields/organdpersduplicates/children/contactids_param/documentation.adoc</documentation> </entityParameter> <entityParameter> <name>WithPrivatePersons_param</name> @@ -248,6 +255,13 @@ <name>#PROVIDER_AGGREGATES</name> <useAggregates v="true" /> </entityProvider> + <entityField> + <name>businessCardLanguage</name> + <title>Business Card Language</title> + <consumer>Languages</consumer> + <state>INVISIBLE</state> + <stateProcess>%aditoprj%/entity/QuickEntry_entity/entityfields/businesscardlanguage/stateProcess.js</stateProcess> + </entityField> </entityFields> <recordContainers> <jDitoRecordContainer> diff --git a/entity/QuickEntry_entity/entityfields/businesscardlanguage/stateProcess.js b/entity/QuickEntry_entity/entityfields/businesscardlanguage/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..70bf57136fdac2315ef5cc58c2742cf952eeca41 --- /dev/null +++ b/entity/QuickEntry_entity/entityfields/businesscardlanguage/stateProcess.js @@ -0,0 +1,11 @@ +import("system.result"); +import("system.neon"); +import("LeadQuickAcquisition_lib"); + +var isMailSigWebserviceEnabled = LeadQuickAcquisitionBusinessCardUtils.isEnabled(); +var isBusinessCardWebserviceEnabled = LeadQuickAcquisitionMailSigUtils.isEnabled(); + +if (isBusinessCardWebserviceEnabled || isMailSigWebserviceEnabled) +{ + result.string(neon.COMPONENTSTATE_EDITABLE); +} diff --git a/entity/QuickEntry_entity/entityfields/leadquickacquisition/onValueChange.js b/entity/QuickEntry_entity/entityfields/leadquickacquisition/onValueChange.js index b947b83417f285ad03738e8fd67ba59f1dd07162..c76bdbc402bb0c14ec2e2c0e5c61a33f067c3ba1 100644 --- a/entity/QuickEntry_entity/entityfields/leadquickacquisition/onValueChange.js +++ b/entity/QuickEntry_entity/entityfields/leadquickacquisition/onValueChange.js @@ -4,6 +4,7 @@ import("Entity_lib"); import("system.entities"); import("KeywordRegistry_basic"); import("LeadQuickAcquisition_lib"); +import("Sql_lib"); if(vars.get("$local.value")) @@ -11,7 +12,11 @@ if(vars.get("$local.value")) //Get file, call web service and get response. var upload = new FileUpload(vars.get("$local.value")); var response = new WebserviceResponse(); - response = LeadQuickAcquisition.callWebService(upload); + var lang = newSelect("AB_LANGUAGE.NAME_LATIN") + .from("AB_LANGUAGE") + .where("AB_LANGUAGE.ISO3", vars.get("$field.businessCardLanguage")) + .cell(); + response = LeadQuickAcquisition.callWebService(upload, lang); if (response != null) { @@ -19,58 +24,15 @@ if(vars.get("$local.value")) EntityConsumerUtils.rmInsertedConsumerRows("Communications"); //Filling necessary fields for company address - if (response.street && response.buildingNo && response.postalCode && response.city) - { - var addressFields = { - "ADDRESS" : response.street, - "BUILDINGNO" : response.buildingNo, - "ZIP" : response.zip, - "CITY" : response.city - }; - - if (response.country && response.state) - { - addressFields.COUNTRY = response.country; - addressFields.STATE = response.state; - } - - neon.addRecord("OrgAdresses", addressFields) - } - else if(response.address) - { - var orgAddressPresets = { - "AddressSearch" : response.address - }; - - var getRowsConfig = entities.createConfigForLoadingRows() - .entity("AddressValidation_entity") - .provider("FullAddressValidation") - .fields(["CITY", "ZIP", "STREET"]) - .addParameter("CurrentValue_param", response.address); - - var rows = entities.getRows(getRowsConfig); - - if (rows.length > 0) - { - var affectedRow = rows[0]; - - if (affectedRow["CITY"]) - orgAddressPresets.CITY = affectedRow["CITY"]; - - if (affectedRow["ZIP"]) - { - orgAddressPresets.ZIP = affectedRow["ZIP"]; - } - - if (affectedRow["STREET"]) - { - orgAddressPresets.ADDRESS = affectedRow["STREET"]; - } - - } - - neon.addRecord("OrgAddresses", orgAddressPresets); - } + var addressFields = { + "ADDRESS" : response.address, + "ZIP" : response.postalCode, + "CITY" : response.city, + "COUNTRY" : response.country, + "STATE" : response.state + }; + + neon.addRecord("OrgAddresses", addressFields) if(response.companyName) neon.setFieldValue("$field.ORGANISATION_NAME", response.companyName); @@ -120,7 +82,6 @@ if(vars.get("$local.value")) if(response.firstName) neon.setFieldValue("$field.FIRSTNAME", response.firstName); if(response.lastName) neon.setFieldValue("$field.LASTNAME", response.lastName); } - } /** diff --git a/entity/QuickEntry_entity/entityfields/leadquickacquisition/stateProcess.js b/entity/QuickEntry_entity/entityfields/leadquickacquisition/stateProcess.js index 7376f4d25ace8fcbbe6139214369ecb85f05df79..4b5f20add3762cc585216cb2911a76c9b7779ba0 100644 --- a/entity/QuickEntry_entity/entityfields/leadquickacquisition/stateProcess.js +++ b/entity/QuickEntry_entity/entityfields/leadquickacquisition/stateProcess.js @@ -1,12 +1,12 @@ +import("system.vars"); import("system.result"); import("system.neon"); import("LeadQuickAcquisition_lib"); var isMailSigWebserviceEnabled = LeadQuickAcquisitionBusinessCardUtils.isEnabled(); var isBusinessCardWebserviceEnabled = LeadQuickAcquisitionMailSigUtils.isEnabled(); -var state = null; -if (isBusinessCardWebserviceEnabled || isMailSigWebserviceEnabled) state = neon.COMPONENTSTATE_AUTO; -else state = neon.COMPONENTSTATE_INVISIBLE; - -result.string(state); \ No newline at end of file +if ((isBusinessCardWebserviceEnabled || isMailSigWebserviceEnabled) && vars.get("$field.businessCardLanguage")) +{ + result.string(neon.COMPONENTSTATE_EDITABLE); +} \ No newline at end of file diff --git a/entity/QuickEntry_entity/entityfields/organdpersduplicates/children/contactids_param/documentation.adoc b/entity/QuickEntry_entity/entityfields/organdpersduplicates/children/contactids_param/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..667cdd59e70d81d319b110ff44e24478616dae1d --- /dev/null +++ b/entity/QuickEntry_entity/entityfields/organdpersduplicates/children/contactids_param/documentation.adoc @@ -0,0 +1,2 @@ +returns a list of duplicate ids +the index will be searched via the values entered in the edit frame \ No newline at end of file diff --git a/entity/QuickEntry_entity/entityfields/organdpersduplicates/children/contactids_param/valueProcess.js b/entity/QuickEntry_entity/entityfields/organdpersduplicates/children/contactids_param/valueProcess.js index 68ef6879ab48622e909ec092bb0314156746f96e..98b27caa01f480c5b39a7c62f68970a13519812b 100644 --- a/entity/QuickEntry_entity/entityfields/organdpersduplicates/children/contactids_param/valueProcess.js +++ b/entity/QuickEntry_entity/entityfields/organdpersduplicates/children/contactids_param/valueProcess.js @@ -2,6 +2,7 @@ import("system.indexsearch"); import("system.vars"); import("DuplicateScanner_lib"); import("system.result"); +import("IndexSearch_lib"); //trigger refresh vars.get("$field.FIRSTNAME"); @@ -11,11 +12,11 @@ var uid = vars.get("$field.UID"); var idsForEmptyResult = JSON.stringify(["nodata"]); var duplicateScans = []; -duplicateScans.push(["PersonDuplicates", "Person_entity", {"CONTACTID" : uid}]); +duplicateScans.push(["Person_entity", {"CONTACTID" : uid}]); vars.get("$field.Contacts.insertedRows").forEach(function (contact) { - duplicateScans.push(["PersonDuplicates", "Person_entity", contact]); + duplicateScans.push(["Person_entity", contact]); }); var organisationName = vars.get("$field.ORGANISATION_NAME"); @@ -34,7 +35,7 @@ if (organisationName || firstOrganisationAddress) address = firstOrganisationAddress["ADDRESS"]; } - duplicateScans.push(["OrganisationDuplicates", "Organisation_entity", { + duplicateScans.push(["Organisation_entity", { "CONTACTID" : uid, "NAME" : organisationName, "STANDARD_CITY" : city, @@ -43,9 +44,9 @@ if (organisationName || firstOrganisationAddress) }]); } -var duplicates = duplicateScans.reduce(function (duplicateArr, [scannerName, entity, fieldValues]) +var duplicates = duplicateScans.reduce(function (duplicateArr, [entity, fieldValues]) { - return duplicateArr.concat(_getDuplicates(scannerName, entity, fieldValues)); + return duplicateArr.concat(_getDuplicates(entity, fieldValues)); }, []); if (duplicates.length === 0) @@ -54,34 +55,22 @@ else result.string(JSON.stringify(duplicates)); -function _getDuplicates (pScannerName, pEntity, pEntityFieldValues) +function _getDuplicates(pEntity, pEntityFieldValues) { - var fieldsToLoad = DuplicateScannerUtils.getEntityFieldObjectFromConfig(pScannerName, pEntity); - if (fieldsToLoad == null) - return []; + var scanner = DuplicateScannerUtils.getScannerByEntity(pEntity); + var indexsearchFilter = IndexsearchFilterUtils.fromFilter(scanner.filter); + var entityFields = indexsearchFilter.getFields(); + entityFields.add(scanner.idField); var valuesToCheck = {}; - - var allFieldsToLoad = fieldsToLoad.entityFields.concat(fieldsToLoad.entityIdField); - allFieldsToLoad.forEach(function (field) - { + entityFields.forEach(function(field) { var fieldValue = field in pEntityFieldValues ? pEntityFieldValues[field] - : vars.get("$field." + field); - if (fieldValue) - valuesToCheck[field] = fieldValue; - }); - - //don't search if only the id field has a value - var fieldsToCheck = Object.keys(valuesToCheck); - if (fieldsToCheck.length === 0 || (fieldsToCheck.length === 1 && fieldsToLoad.entityIdField in valuesToCheck)) - return []; - - var scanResults = DuplicateScannerUtils.scanForDuplicates(pScannerName, pEntity, valuesToCheck, null) || []; - var duplicateIds = scanResults.map(function (duplicate) - { - return duplicate[indexsearch.FIELD_ID]; + : vars.exists("$field." + field) ? vars.get("$field." + field) : ""; + valuesToCheck[field] = fieldValue || ""; }); - return duplicateIds; + var indexPattern = indexsearchFilter.buildQuery(valuesToCheck); + var duplicateIds = DuplicateScannerUtils.getDuplicateIds(pEntity, indexPattern, valuesToCheck[scanner.idField]); + return DuplicateScannerUtils.filterIgnored(pEntity, valuesToCheck[scanner.idField], duplicateIds); } diff --git a/entity/QuickEntry_entity/entityfields/organisation_id/valueProcess.js b/entity/QuickEntry_entity/entityfields/organisation_id/valueProcess.js index 24b4e1750592c7cc17e62f913cab93d8dc62934e..663cf5f6581f5cfd96408a4a7b7109550cbf0ff4 100644 --- a/entity/QuickEntry_entity/entityfields/organisation_id/valueProcess.js +++ b/entity/QuickEntry_entity/entityfields/organisation_id/valueProcess.js @@ -3,5 +3,7 @@ import("system.vars"); import("system.util"); import("system.result"); -if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) - result.string(util.getNewUUID()); \ No newline at end of file +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) +{ + result.string(util.getNewUUID()); +} \ No newline at end of file diff --git a/entity/QuickEntry_entity/entityfields/person_contact_id/valueProcess.js b/entity/QuickEntry_entity/entityfields/person_contact_id/valueProcess.js index 24b4e1750592c7cc17e62f913cab93d8dc62934e..663cf5f6581f5cfd96408a4a7b7109550cbf0ff4 100644 --- a/entity/QuickEntry_entity/entityfields/person_contact_id/valueProcess.js +++ b/entity/QuickEntry_entity/entityfields/person_contact_id/valueProcess.js @@ -3,5 +3,7 @@ import("system.vars"); import("system.util"); import("system.result"); -if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) - result.string(util.getNewUUID()); \ No newline at end of file +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) +{ + result.string(util.getNewUUID()); +} \ No newline at end of file diff --git a/entity/QuickEntry_entity/entityfields/person_id/valueProcess.js b/entity/QuickEntry_entity/entityfields/person_id/valueProcess.js index 24b4e1750592c7cc17e62f913cab93d8dc62934e..363f6bcdd85145923d42471b7c2ca6fddcc3b602 100644 --- a/entity/QuickEntry_entity/entityfields/person_id/valueProcess.js +++ b/entity/QuickEntry_entity/entityfields/person_id/valueProcess.js @@ -3,5 +3,8 @@ import("system.vars"); import("system.util"); import("system.result"); -if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) - result.string(util.getNewUUID()); \ No newline at end of file +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) +{ + result.string(util.getNewUUID()); +} + \ No newline at end of file diff --git a/entity/RoleChildren_entity/RoleChildren_entity.aod b/entity/RoleChildren_entity/RoleChildren_entity.aod index 353284819b7f5f9730cfcb8e16e6d7748ccc204c..f5d7e4d0001af34af75537fea85caf9f76f6c648 100644 --- a/entity/RoleChildren_entity/RoleChildren_entity.aod +++ b/entity/RoleChildren_entity/RoleChildren_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>RoleChildren_entity</name> <title>Child Role</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -29,14 +29,6 @@ <entityProvider> <name>RoleChildrens</name> <recordContainer>jDito</recordContainer> - <dependencies> - <entityDependency> - <name>cb55e16e-fd6c-4aa9-8bc5-151c7cd766c6</name> - <entityName>Role_entity</entityName> - <fieldName>RoleChildrens</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityConsumer> <name>Roles</name> diff --git a/entity/RoleChildren_entity/entityfields/child_role/dropDownProcess.js b/entity/RoleChildren_entity/entityfields/child_role/dropDownProcess.js index 8867a68b1cb4c9e3d8b2d4fdb5b61936c46cdf5b..0085da92a9397782f1ecdf2395e6cc517e6ed52e 100644 --- a/entity/RoleChildren_entity/entityfields/child_role/dropDownProcess.js +++ b/entity/RoleChildren_entity/entityfields/child_role/dropDownProcess.js @@ -3,10 +3,16 @@ import("system.tools"); import("system.vars"); import("system.result"); -var newChildRoles = []; +var possibleChildRoles = []; var alias = SqlUtils.getSystemAlias(); var parentRole = vars.get("$param.RoleId_param"); -var allCustomAndProjectRoles = tools.getAllRoles(["CUSTOM", "PROJECT"], true); +var roleType = vars.get("$param.RoleType_param"); +var allPossibleRoles; + +if (roleType && roleType == "PROJECT") + allPossibleRoles = tools.getAllRoles(["PROJECT"], true); +else + allPossibleRoles = tools.getAllRoles(["CUSTOM", "PROJECT"], true); var childRoles = newSelect("CHILD_ROLE", alias) .from("ASYS_ROLES_CHILDREN") @@ -16,23 +22,15 @@ var childRoles = newSelect("CHILD_ROLE", alias) var parentIsAlreadyChildOf = newSelect("PARENT_ROLE", alias) .from("ASYS_ROLES_CHILDREN") .where("ASYS_ROLES_CHILDREN.CHILD_ROLE", parentRole) -.table(); +.arrayColumn(); -for each (let role in allCustomAndProjectRoles) { - // dont show current role as possible child in dropdown - if (role[3] != parentRole) { - newChildRoles.push([role[3], role[3]]); +for each (let role in allPossibleRoles) { + // dont add current role as possible child in dropdown + // check for cycles in hierarchy - dont add role which could create a cycle + // e.g. role A can't be child of role B while it is already parent of B + if (role[3] != parentRole && parentIsAlreadyChildOf.indexOf(role[3]) == -1) { + possibleChildRoles.push([role[3], role[3]]); } } -// check for cyclces in hierarchy, A can't be child of B while it is already parent of B -for each (let role in parentIsAlreadyChildOf) { - newChildRoles = newChildRoles.filter(function(childRole) { - if (role == childRole[0]) { - return false; - } - return true; - }); -} - -result.object(newChildRoles.sort()); \ No newline at end of file +result.object(possibleChildRoles.sort()); \ No newline at end of file diff --git a/entity/RoleParent_entity/RoleParent_entity.aod b/entity/RoleParent_entity/RoleParent_entity.aod index 86b569290664d1f362b0a808d39fe4a669ce07e5..adb2805123463810f497f8bb6af41d1e435bb628 100644 --- a/entity/RoleParent_entity/RoleParent_entity.aod +++ b/entity/RoleParent_entity/RoleParent_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>RoleParent_entity</name> <title>Parent Role</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -30,14 +30,6 @@ <entityProvider> <name>RoleParents</name> <recordContainer>jDito</recordContainer> - <dependencies> - <entityDependency> - <name>6aa59dd4-1193-47be-8b69-58c82a0d9daa</name> - <entityName>Role_entity</entityName> - <fieldName>RoleParents</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityParameter> <name>RoleId_param</name> diff --git a/entity/Role_entity/Role_entity.aod b/entity/Role_entity/Role_entity.aod index 956b66e51dfad38f8a28214fb7591790faeef497..bb4d3c0d11b0e9dec858fb7a19ce71896b60a984 100644 --- a/entity/Role_entity/Role_entity.aod +++ b/entity/Role_entity/Role_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Role_entity</name> <title>Roles</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -70,26 +70,6 @@ <entityProvider> <name>Roles</name> <recordContainer>jDito</recordContainer> - <dependencies> - <entityDependency> - <name>64d800d0-4db5-4b95-ab6a-9197b83cc09c</name> - <entityName>PermissionDetail_entity</entityName> - <fieldName>Roles</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>6d8db50e-e86f-4ebb-bb63-b520f84acca1</name> - <entityName>RoleChildren_entity</entityName> - <fieldName>Roles</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>23ceb9b3-429c-4381-9ae2-bd23d9d08d42</name> - <entityName>RoleParent_entity</entityName> - <fieldName>Roles</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ExcludeRoles_param</name> @@ -104,20 +84,6 @@ </entityParameter> <entityProvider> <name>FilteredRoles</name> - <dependencies> - <entityDependency> - <name>a31b8e4d-fa44-46ea-89a7-e3f9d659cfea</name> - <entityName>EmployeeRole_entity</entityName> - <fieldName>Roles</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>6d7b7a16-e958-4f9d-9108-81a42257d65e</name> - <entityName>Employee_entity</entityName> - <fieldName>PossibleRoles</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>IS_ASSIGNABLE</name> diff --git a/entity/SalesprojectAnalyses_entity/SalesprojectAnalyses_entity.aod b/entity/SalesprojectAnalyses_entity/SalesprojectAnalyses_entity.aod index 153d97d7307a0475640a7ed9cbb61dee68cdb2ba..b1f661d9798990a3df7adff1135cd920848e7d22 100644 --- a/entity/SalesprojectAnalyses_entity/SalesprojectAnalyses_entity.aod +++ b/entity/SalesprojectAnalyses_entity/SalesprojectAnalyses_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>SalesprojectAnalyses_entity</name> <title>Sales Project Analyses</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -91,6 +91,26 @@ <name>#PROVIDER_AGGREGATES</name> <useAggregates v="true" /> </entityProvider> + <entityField> + <name>OVERALL_PLANNING</name> + <contentType>NUMBER</contentType> + <titleProcess>%aditoprj%/entity/SalesprojectAnalyses_entity/entityfields/overall_planning/titleProcess.js</titleProcess> + <valueProcess>%aditoprj%/entity/SalesprojectAnalyses_entity/entityfields/overall_planning/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>OVERALL_FORECAST_weighted</name> + <contentType>NUMBER</contentType> + <titleProcess>%aditoprj%/entity/SalesprojectAnalyses_entity/entityfields/overall_forecast_weighted/titleProcess.js</titleProcess> + <valueProcess>%aditoprj%/entity/SalesprojectAnalyses_entity/entityfields/overall_forecast_weighted/valueProcess.js</valueProcess> + </entityField> + <entityActionField> + <name>openPlanning</name> + <onActionProcess>%aditoprj%/entity/SalesprojectAnalyses_entity/entityfields/openplanning/onActionProcess.js</onActionProcess> + </entityActionField> + <entityActionField> + <name>openForecastWeighted</name> + <onActionProcess>%aditoprj%/entity/SalesprojectAnalyses_entity/entityfields/openforecastweighted/onActionProcess.js</onActionProcess> + </entityActionField> </entityFields> <recordContainers> <jDitoRecordContainer> diff --git a/entity/SalesprojectAnalyses_entity/entityfields/my_forecast/valueProcess.js b/entity/SalesprojectAnalyses_entity/entityfields/my_forecast/valueProcess.js index b42db4e92b2f1cd8d5c2c26e12119155191db777..294c23f1c5e14e44b189997f12792b7edfa9ebd2 100644 --- a/entity/SalesprojectAnalyses_entity/entityfields/my_forecast/valueProcess.js +++ b/entity/SalesprojectAnalyses_entity/entityfields/my_forecast/valueProcess.js @@ -1,3 +1,4 @@ +import("KeywordRegistry_basic"); import("system.result"); import("system.SQLTYPES"); import("system.vars"); @@ -13,6 +14,7 @@ var forecast = newSelect("SUM(VOLUME)") .where("FORECAST.DATE_START", datetime.toDate(vars.get("$sys.date"), "yyyy"), "year(#) = ?", SQLTYPES.INTEGER) .and("OBJECTMEMBER.OBJECT_TYPE", 'Salesproject') .and("OBJECTMEMBER.CONTACT_ID", myContactId) + .and("FORECAST.KIND", $KeywordRegistry.forecastKind$forecast()) .cell(); result.string(forecast); \ No newline at end of file diff --git a/entity/SalesprojectAnalyses_entity/entityfields/openforecast/onActionProcess.js b/entity/SalesprojectAnalyses_entity/entityfields/openforecast/onActionProcess.js index a4f17e146fc1bc27447f0f53818616a254bcf6d1..9fefbbb1bd449bb98340f8e877b522be8474e48e 100644 --- a/entity/SalesprojectAnalyses_entity/entityfields/openforecast/onActionProcess.js +++ b/entity/SalesprojectAnalyses_entity/entityfields/openforecast/onActionProcess.js @@ -1,7 +1,4 @@ import("KeywordRegistry_basic"); import("system.neon"); -neon.openContext("Turnover", null, null, neon.OPERATINGSTATE_SEARCH, { - "ShowForecast_param": "true", - "ShowTurnover_param": "false" -}); +neon.openContext("Turnover", null, null, neon.OPERATINGSTATE_SEARCH, null); \ No newline at end of file diff --git a/entity/SalesprojectAnalyses_entity/entityfields/openforecastweighted/onActionProcess.js b/entity/SalesprojectAnalyses_entity/entityfields/openforecastweighted/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..9fefbbb1bd449bb98340f8e877b522be8474e48e --- /dev/null +++ b/entity/SalesprojectAnalyses_entity/entityfields/openforecastweighted/onActionProcess.js @@ -0,0 +1,4 @@ +import("KeywordRegistry_basic"); +import("system.neon"); + +neon.openContext("Turnover", null, null, neon.OPERATINGSTATE_SEARCH, null); \ No newline at end of file diff --git a/entity/SalesprojectAnalyses_entity/entityfields/openplanning/onActionProcess.js b/entity/SalesprojectAnalyses_entity/entityfields/openplanning/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..9fefbbb1bd449bb98340f8e877b522be8474e48e --- /dev/null +++ b/entity/SalesprojectAnalyses_entity/entityfields/openplanning/onActionProcess.js @@ -0,0 +1,4 @@ +import("KeywordRegistry_basic"); +import("system.neon"); + +neon.openContext("Turnover", null, null, neon.OPERATINGSTATE_SEARCH, null); \ No newline at end of file diff --git a/entity/SalesprojectAnalyses_entity/entityfields/openturnover/onActionProcess.js b/entity/SalesprojectAnalyses_entity/entityfields/openturnover/onActionProcess.js index b278ec2dce925c93c0fcccbd8689f8ad68f7c781..9fefbbb1bd449bb98340f8e877b522be8474e48e 100644 --- a/entity/SalesprojectAnalyses_entity/entityfields/openturnover/onActionProcess.js +++ b/entity/SalesprojectAnalyses_entity/entityfields/openturnover/onActionProcess.js @@ -1,7 +1,4 @@ import("KeywordRegistry_basic"); import("system.neon"); -neon.openContext("Turnover", null, null, neon.OPERATINGSTATE_SEARCH, { - "ShowForecast_param": "false", - "ShowTurnover_param": "true" -}); +neon.openContext("Turnover", null, null, neon.OPERATINGSTATE_SEARCH, null); \ No newline at end of file diff --git a/entity/SalesprojectAnalyses_entity/entityfields/overall_forecast/valueProcess.js b/entity/SalesprojectAnalyses_entity/entityfields/overall_forecast/valueProcess.js index 11bf47828e54c9717e4be2002742fd632e42f3e7..6fc6fe33750bbc53c98debb67d376a87ae05d68b 100644 --- a/entity/SalesprojectAnalyses_entity/entityfields/overall_forecast/valueProcess.js +++ b/entity/SalesprojectAnalyses_entity/entityfields/overall_forecast/valueProcess.js @@ -1,3 +1,4 @@ +import("KeywordRegistry_basic"); import("system.datetime"); import("system.db"); import("system.result"); @@ -9,6 +10,7 @@ import("system.SQLTYPES") var forecast = newSelect("sum(VOLUME)") .from("FORECAST") .where("FORECAST.DATE_START", datetime.toDate(vars.get("$sys.date"), "yyyy"), "year(#) = ?", SQLTYPES.INTEGER) + .and("FORECAST.KIND", $KeywordRegistry.forecastKind$forecast()) .cell(); result.string(forecast); \ No newline at end of file diff --git a/entity/SalesprojectAnalyses_entity/entityfields/overall_forecast_weighted/titleProcess.js b/entity/SalesprojectAnalyses_entity/entityfields/overall_forecast_weighted/titleProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..5597a3a86393359f334f257db8a9cccbdbebc391 --- /dev/null +++ b/entity/SalesprojectAnalyses_entity/entityfields/overall_forecast_weighted/titleProcess.js @@ -0,0 +1,6 @@ +import("system.vars"); +import("system.result"); +import("system.translate"); +import("system.datetime"); + +result.string(translate.text("Forecast weighted") + " " + datetime.toDate(vars.get("$sys.date"), "yyyy")); \ No newline at end of file diff --git a/entity/SalesprojectAnalyses_entity/entityfields/overall_forecast_weighted/valueProcess.js b/entity/SalesprojectAnalyses_entity/entityfields/overall_forecast_weighted/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..feeaefb3bd905925bbbc32e4ea240279862db0fc --- /dev/null +++ b/entity/SalesprojectAnalyses_entity/entityfields/overall_forecast_weighted/valueProcess.js @@ -0,0 +1,17 @@ +import("KeywordRegistry_basic"); +import("system.datetime"); +import("system.db"); +import("system.result"); +import("system.vars"); +import("Date_lib"); +import("Sql_lib"); +import("system.SQLTYPES") + +var forecast = newSelect("sum(FORECAST.VOLUME/100*SALESPROJECT.PROBABILITY)") + .from("FORECAST") + .join("SALESPROJECT", "OBJECT_TYPE = 'Salesproject' and OBJECT_ROWID = SALESPROJECTID") + .where("FORECAST.DATE_START", datetime.toDate(vars.get("$sys.date"), "yyyy"), "year(#) = ?", SQLTYPES.INTEGER) + .and("FORECAST.KIND", $KeywordRegistry.forecastKind$forecast()) + .cell(); + +result.string(forecast); \ No newline at end of file diff --git a/entity/SalesprojectAnalyses_entity/entityfields/overall_planning/titleProcess.js b/entity/SalesprojectAnalyses_entity/entityfields/overall_planning/titleProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..10c0846daeb8fbdc1eca20617a2e69ba3d9a0e59 --- /dev/null +++ b/entity/SalesprojectAnalyses_entity/entityfields/overall_planning/titleProcess.js @@ -0,0 +1,6 @@ +import("system.vars"); +import("system.result"); +import("system.translate"); +import("system.datetime"); + +result.string(translate.text("Planning") + " " + datetime.toDate(vars.get("$sys.date"), "yyyy")); \ No newline at end of file diff --git a/entity/SalesprojectAnalyses_entity/entityfields/overall_planning/valueProcess.js b/entity/SalesprojectAnalyses_entity/entityfields/overall_planning/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..090e68361372538732d3d2e9851581657afd9e63 --- /dev/null +++ b/entity/SalesprojectAnalyses_entity/entityfields/overall_planning/valueProcess.js @@ -0,0 +1,16 @@ +import("KeywordRegistry_basic"); +import("system.datetime"); +import("system.db"); +import("system.result"); +import("system.vars"); +import("Date_lib"); +import("Sql_lib"); +import("system.SQLTYPES") + +var forecast = newSelect("sum(FORECAST.VOLUME)") + .from("FORECAST") + .where("FORECAST.FORECAST_YEAR", datetime.toDate(vars.get("$sys.date"), "yyyy")) + .and("FORECAST.KIND", $KeywordRegistry.forecastKind$planning()) + .cell(); + +result.string(forecast); \ No newline at end of file diff --git a/entity/SalesprojectAnalyses_entity/entityfields/overall_turnover/valueProcess.js b/entity/SalesprojectAnalyses_entity/entityfields/overall_turnover/valueProcess.js index fb9181d479ded05d017fa498a37642d570c9e70f..9e90122f8d0c2cfaf927bb627e9f0852d0314dc6 100644 --- a/entity/SalesprojectAnalyses_entity/entityfields/overall_turnover/valueProcess.js +++ b/entity/SalesprojectAnalyses_entity/entityfields/overall_turnover/valueProcess.js @@ -4,7 +4,10 @@ import("system.vars"); import("system.datetime"); import("Sql_lib"); -var turnover = newSelect("sum(NET + VAT)") +var sqlHelper = new SqlMaskingUtils(); + + +var turnover = newSelect(sqlHelper.cast("sum(NET + VAT)", SQLTYPES.INTEGER)) .from("SALESORDER") .where("SALESORDER.SALESORDERDATE", datetime.toDate(vars.get("$sys.date"), "yyyy"), "year(#) = ?", SQLTYPES.INTEGER) .cell(); diff --git a/entity/SalesprojectConversionRate_entity/SalesprojectConversionRate_entity.aod b/entity/SalesprojectConversionRate_entity/SalesprojectConversionRate_entity.aod index 834661f182666bfb72d744ba2a9e67ae4185900f..d0803f1b7a1ea699f13e9e2a66b74fca3f0dcd0b 100644 --- a/entity/SalesprojectConversionRate_entity/SalesprojectConversionRate_entity.aod +++ b/entity/SalesprojectConversionRate_entity/SalesprojectConversionRate_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>SalesprojectConversionRate_entity</name> <title>Conversion Rate</title> <majorModelMode>DISTRIBUTED</majorModelMode> diff --git a/entity/SalesprojectConversionRate_entity/recordcontainers/jdito/contentProcess.js b/entity/SalesprojectConversionRate_entity/recordcontainers/jdito/contentProcess.js index d178c9b6a5223ada92f5560f27deb405e65543e9..d089bda4986c95444506a3c9a76a783579a71d9e 100644 --- a/entity/SalesprojectConversionRate_entity/recordcontainers/jdito/contentProcess.js +++ b/entity/SalesprojectConversionRate_entity/recordcontainers/jdito/contentProcess.js @@ -62,4 +62,4 @@ else sql.select(["AB_KEYWORD_ENTRY.AB_KEYWORD_ENTRYID", "AB_KEYWORD_ENTRY.KEYID", "AB_KEYWORD_ENTRY.TITLE"]) .orderBy("AB_KEYWORD_ENTRY.SORTING"); result.object(sql.table()); -} \ No newline at end of file +} diff --git a/entity/SalesprojectConversionRate_entity/recordcontainers/jdito/rowCountProcess.js b/entity/SalesprojectConversionRate_entity/recordcontainers/jdito/rowCountProcess.js index 60aed2227590efc2bded1bbfc77689af0c89e0fc..b118d35605a04e93448f89038190d574a59a8b58 100644 --- a/entity/SalesprojectConversionRate_entity/recordcontainers/jdito/rowCountProcess.js +++ b/entity/SalesprojectConversionRate_entity/recordcontainers/jdito/rowCountProcess.js @@ -1,3 +1,4 @@ +import("Observation_lib"); import("Keyword_lib"); import("system.result"); import("JditoFilter_lib"); diff --git a/entity/SalesprojectMilestone_entity/SalesprojectMilestone_entity.aod b/entity/SalesprojectMilestone_entity/SalesprojectMilestone_entity.aod index 9b33104d183410e5faf5ea980bc1ced20093efd5..639fb185cecd50ebb2c5b42ca7ea193d657ce920 100644 --- a/entity/SalesprojectMilestone_entity/SalesprojectMilestone_entity.aod +++ b/entity/SalesprojectMilestone_entity/SalesprojectMilestone_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>SalesprojectMilestone_entity</name> <title></title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -92,14 +92,6 @@ </entityParameter> <entityProvider> <name>StateMilestones</name> - <dependencies> - <entityDependency> - <name>f705534d-dcf3-4049-a1ea-3f75e93aa2f0</name> - <entityName>Salesproject_entity</entityName> - <fieldName>SalesprojectStateMilestones</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>Kind_param</name> @@ -109,14 +101,6 @@ </entityProvider> <entityProvider> <name>PhaseMilestones</name> - <dependencies> - <entityDependency> - <name>b132527b-990c-416a-b2d6-ddbe6f4397e2</name> - <entityName>Salesproject_entity</entityName> - <fieldName>SalesprojectPhaseMilestones</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>Kind_param</name> @@ -139,10 +123,6 @@ <name>dateEndGantt</name> <valueProcess>%aditoprj%/entity/SalesprojectMilestone_entity/entityfields/dateendgantt/valueProcess.js</valueProcess> </entityField> - <entityField> - <name>valueLongName</name> - <valueProcess>%aditoprj%/entity/SalesprojectMilestone_entity/entityfields/valuelongname/valueProcess.js</valueProcess> - </entityField> <entityProvider> <name>#PROVIDER_AGGREGATES</name> <useAggregates v="true" /> diff --git a/entity/SalesprojectMilestone_entity/entityfields/salesproject_milestoneid/valueProcess.js b/entity/SalesprojectMilestone_entity/entityfields/salesproject_milestoneid/valueProcess.js index 86ef789e064a4016f2d12c432498dc23474807aa..823247cf893e603a8e2b8d5725d6b94ecd975695 100644 --- a/entity/SalesprojectMilestone_entity/entityfields/salesproject_milestoneid/valueProcess.js +++ b/entity/SalesprojectMilestone_entity/entityfields/salesproject_milestoneid/valueProcess.js @@ -3,5 +3,7 @@ import("system.vars"); import("system.result"); import("system.neon"); -if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) - result.string(util.getNewUUID()); \ No newline at end of file +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) +{ + result.string(util.getNewUUID()); +} \ No newline at end of file diff --git a/entity/SalesprojectMilestone_entity/entityfields/valuelongname/valueProcess.js b/entity/SalesprojectMilestone_entity/entityfields/valuelongname/valueProcess.js deleted file mode 100644 index b153ca0c6bd48838fbd12bef7a2cb820d3f05e19..0000000000000000000000000000000000000000 --- a/entity/SalesprojectMilestone_entity/entityfields/valuelongname/valueProcess.js +++ /dev/null @@ -1,8 +0,0 @@ -import("system.translate"); -import("system.vars"); -import("system.result"); -import("Keyword_lib") - -var keywordAttr = new KeywordAttribute(vars.get("$field.KIND"), "longName", vars.get("$field.MILESTONEVALUE.displayValue")) - -result.string(translate.text(keywordAttr.getValue(vars.get("$field.MILESTONEVALUE")))) \ No newline at end of file diff --git a/entity/SalesprojectPhaseDefinition_entity/SalesprojectPhaseDefinition_entity.aod b/entity/SalesprojectPhaseDefinition_entity/SalesprojectPhaseDefinition_entity.aod index 29cb770c0a049830e8884a6a41d1dcd3c5e5290b..f0edc98a503d3148cc0d6084b10b2d3171db4e28 100644 --- a/entity/SalesprojectPhaseDefinition_entity/SalesprojectPhaseDefinition_entity.aod +++ b/entity/SalesprojectPhaseDefinition_entity/SalesprojectPhaseDefinition_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>SalesprojectPhaseDefinition_entity</name> <title>Salesproject phases</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -53,22 +53,10 @@ <entityProvider> <name>SalesprojectPhaseDefinitions</name> <lookupIdfield>SALESPROJECTPHASETRAITDEFINITIONID</lookupIdfield> - <dependencies> - <entityDependency> - <name>1d8760d0-186d-411d-a84e-dc82556ad722</name> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> - <entityFieldGroup> - <name>SalesprojectPhaseFullname</name> - <valueProcess>%aditoprj%/entity/SalesprojectPhaseDefinition_entity/entityfields/salesprojectphasefullname/valueProcess.js</valueProcess> - <fields> - <element>PHASE</element> - </fields> - </entityFieldGroup> <entityConsumer> <name>ChecklistEntries</name> + <refreshParent v="true" /> <dependency> <name>dependency</name> <entityName>ChecklistEntry_entity</entityName> @@ -95,6 +83,29 @@ <title>Description</title> <contentType>LONG_TEXT</contentType> </entityField> + <entityField> + <name>AUTOPROBABILITY</name> + <title>Auto probability</title> + <consumer>KeywordProbabilitySalesproject</consumer> + <contentType>NUMBER</contentType> + <maxValue v="100" /> + <minValue v="0" /> + <outputFormat>0'%'</outputFormat> + </entityField> + <entityConsumer> + <name>KeywordProbabilitySalesproject</name> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/SalesprojectPhaseDefinition_entity/entityfields/keywordprobabilitysalesproject/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> </entityFields> <recordContainers> <dbRecordContainer> @@ -139,6 +150,10 @@ <name>USER_NEW.value</name> <recordfield>SALESPROJECTPHASEDEFINITION.USER_NEW</recordfield> </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>AUTOPROBABILITY.value</name> + <recordfield>SALESPROJECTPHASEDEFINITION.AUTOPROBABILITY</recordfield> + </dbRecordFieldMapping> </recordFieldMappings> <linkInformation> <linkInformation> diff --git a/entity/SalesprojectPhaseDefinition_entity/entityfields/keywordprobabilitysalesproject/children/containername_param/valueProcess.js b/entity/SalesprojectPhaseDefinition_entity/entityfields/keywordprobabilitysalesproject/children/containername_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..79fdf41a10d8702af60dd889bde78c20248605c6 --- /dev/null +++ b/entity/SalesprojectPhaseDefinition_entity/entityfields/keywordprobabilitysalesproject/children/containername_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.result"); +import("KeywordRegistry_basic"); + +result.string($KeywordRegistry.probabilitySalesproject()); diff --git a/entity/SalesprojectPhaseDefinition_entity/entityfields/salesprojectphasefullname/valueProcess.js b/entity/SalesprojectPhaseDefinition_entity/entityfields/salesprojectphasefullname/valueProcess.js deleted file mode 100644 index 75192dbbe5da1c412c31fb25d1849b2b6572b455..0000000000000000000000000000000000000000 --- a/entity/SalesprojectPhaseDefinition_entity/entityfields/salesprojectphasefullname/valueProcess.js +++ /dev/null @@ -1,36 +0,0 @@ -import("system.result"); -import("system.vars"); -import("KeywordRegistry_basic"); - - -var salesprojectPhase = vars.get("$field.PHASE"); -var longForm = ""; - -switch(salesprojectPhase){ - case $KeywordRegistry.salesprojectPhase$mal(): - longForm = "Marketing Accepted Lead"; - break; - case $KeywordRegistry.salesprojectPhase$mql(): - longForm = "Marketing Qualified Lead"; - break; - case $KeywordRegistry.salesprojectPhase$nego(): - longForm = "Negotiation"; - break; - case $KeywordRegistry.salesprojectPhase$nqc(): - longForm = "Non Qualified Contact"; - break; - case $KeywordRegistry.salesprojectPhase$offer(): - longForm = "Offer"; - break; - case $KeywordRegistry.salesprojectPhase$sal(): - longForm = "Sales Accepted Lead"; - break; - case $KeywordRegistry.salesprojectPhase$sqo(): - longForm = "Sales Qualified Offer"; - break; - case $KeywordRegistry.salesprojectPhase$mqc(): - longForm = "Marketing Qualified Contact"; - break; -} - -result.string(longForm); diff --git a/entity/SalesprojectPhase_entity/SalesprojectPhase_entity.aod b/entity/SalesprojectPhase_entity/SalesprojectPhase_entity.aod index 8bbdd874ccb3a760aa05be55f8269b54a6215e9c..6b56e6c4cfebc1119e80ddbe682a9d773b9cc115 100644 --- a/entity/SalesprojectPhase_entity/SalesprojectPhase_entity.aod +++ b/entity/SalesprojectPhase_entity/SalesprojectPhase_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>SalesprojectPhase_entity</name> <title>Phase</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -33,20 +33,6 @@ </entityField> <entityProvider> <name>Phases</name> - <dependencies> - <entityDependency> - <name>22c52a24-f1ad-4035-9567-1b5e99c7b5be</name> - <entityName>Salesproject_entity</entityName> - <fieldName>SalesprojectPhaseStepper</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>26a15e56-6ce6-4d6a-9e46-793c10ac3aa6</name> - <entityName>SalesprojectMilestone_entity</entityName> - <fieldName>SalesProjectPhases</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityProvider> <name>#PROVIDER_AGGREGATES</name> diff --git a/entity/SalesprojectPhase_entity/recordcontainers/jdito/contentProcess.js b/entity/SalesprojectPhase_entity/recordcontainers/jdito/contentProcess.js index c66d85815d3f52def5b26491e9e6ccaff853f137..e957ab3b90b5a27c1b053e01e4eb4c284e1750de 100644 --- a/entity/SalesprojectPhase_entity/recordcontainers/jdito/contentProcess.js +++ b/entity/SalesprojectPhase_entity/recordcontainers/jdito/contentProcess.js @@ -10,7 +10,7 @@ import("Util_lib"); var res = []; var ids = vars.get("$local.idvalues"); var disabledPhases = JSON.parse(vars.get("$param.DisabledPhases_param")) || []; -var steps = KeywordUtils.getEntryNamesAndIdsByContainer($KeywordRegistry.salesprojectPhase()); +var steps = KeywordUtils.getEntryNamesAndIdsByContainer($KeywordRegistry.salesprojectPhase(), null, true); var selected = vars.exists("$param.CurrentPhase_param") && vars.get("$param.CurrentPhase_param"); // filter only for steps reqested by the system diff --git a/entity/SalesprojectSource_entity/SalesprojectSource_entity.aod b/entity/SalesprojectSource_entity/SalesprojectSource_entity.aod index 6621e3295e7e4c328cb55dee2b6b35decccc78e2..258c2c5bb899f248724f3f7cccc3932288b4568c 100644 --- a/entity/SalesprojectSource_entity/SalesprojectSource_entity.aod +++ b/entity/SalesprojectSource_entity/SalesprojectSource_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>SalesprojectSource_entity</name> <title>Touchpoint</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -14,14 +14,6 @@ <entityProvider> <name>SalesprojectSouces</name> <recordContainer>db</recordContainer> - <dependencies> - <entityDependency> - <name>c1628437-2813-464f-b91c-71b1c6bb63a4</name> - <entityName>Salesproject_entity</entityName> - <fieldName>SalesprojectSources</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityParameter> <name>SalesprojectId_param</name> diff --git a/entity/Salesproject_entity/Salesproject_entity.aod b/entity/Salesproject_entity/Salesproject_entity.aod index d567ac3a36efcd8d474b14981641eb0eda498497..db4b360e280910583249fd834d818f7050b36eb5 100644 --- a/entity/Salesproject_entity/Salesproject_entity.aod +++ b/entity/Salesproject_entity/Salesproject_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Salesproject_entity</name> <title>Sales Project</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -23,20 +23,6 @@ <entityFields> <entityProvider> <name>#PROVIDER</name> - <dependencies> - <entityDependency> - <name>f010781d-453d-4df3-b330-75c1336e4d4c</name> - <entityName>Object_entity</entityName> - <fieldName>Salesprojects</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>b53c4fc0-4ac9-4020-a6fd-359c6dd2d2c8</name> - <entityName>ObjectProxy_entity</entityName> - <fieldName>Salesprojects</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>ENDDATE</name> @@ -61,6 +47,10 @@ <mandatory v="true" /> <state>EDITABLE</state> <displayValueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/phase/displayValueProcess.js</displayValueProcess> + <onValueChange>%aditoprj%/entity/Salesproject_entity/entityfields/phase/onValueChange.js</onValueChange> + <onValueChangeTypes> + <element>MASK</element> + </onValueChangeTypes> </entityField> <entityField> <name>PROJECTCODE</name> @@ -139,12 +129,12 @@ <entityField> <name>PROBABILITY</name> <title>Probability</title> + <consumer>KeywordProbabilitySalesproject</consumer> <contentType>NUMBER</contentType> <maxValue v="100" /> <minValue v="0" /> - <outputFormat>0.00'%'</outputFormat> + <outputFormat>0'%'</outputFormat> <groupable v="true" /> - <dropDownProcess>%aditoprj%/entity/Salesproject_entity/entityfields/probability/dropDownProcess.js</dropDownProcess> </entityField> <entityConsumer> <name>SalesprojectSources</name> @@ -422,26 +412,6 @@ </entityField> <entityProvider> <name>Salesprojects</name> - <dependencies> - <entityDependency> - <name>0925d17f-a26a-4641-aaf4-0f74796fefa7</name> - <entityName>Organisation_entity</entityName> - <fieldName>Salesprojects</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>bdea1358-ebf2-4356-8df1-af3eb1e6338a</name> - <entityName>Offer_entity</entityName> - <fieldName>Salesprojects</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>cb529e29-37cb-4e8d-9e89-f15cff56df68</name> - <entityName>Order_entity</entityName> - <fieldName>Salesprojects</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ContactId_param</name> @@ -460,7 +430,6 @@ </entityProvider> <entityConsumer> <name>Tasks</name> - <stateProcess>%aditoprj%/entity/Salesproject_entity/entityfields/tasks/stateProcess.js</stateProcess> <dependency> <name>dependency</name> <entityName>Task_entity</entityName> @@ -483,14 +452,6 @@ </entityConsumer> <entityProvider> <name>OpenSalesprojects</name> - <dependencies> - <entityDependency> - <name>631f55f9-fb0f-4205-bdb8-6e3476268ab4</name> - <entityName>Offer_entity</entityName> - <fieldName>Salesprojects</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>Status_param</name> @@ -687,14 +648,6 @@ </entityConsumer> <entityProvider> <name>QuickEntrySalesprojects</name> - <dependencies> - <entityDependency> - <name>98389ad3-2134-4479-9e53-19623f05ae75</name> - <entityName>QuickEntry_entity</entityName> - <fieldName>Salesprojects</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>PhaseRequirementsFulfilled_parm</name> @@ -868,6 +821,40 @@ <parentField>VOLUME</parentField> <title>Volume</title> </entityAggregateField> + <entityConsumer> + <name>Turnovers</name> + <dependency> + <name>dependency</name> + <entityName>Turnover_entity</entityName> + <fieldName>DynamicTurnover</fieldName> + </dependency> + <children> + <entityParameter> + <name>SalesprojectIdDynamicChart_param</name> + <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/turnovers/children/salesprojectiddynamicchart_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityConsumer> + <name>KeywordProbabilitySalesproject</name> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/Salesproject_entity/entityfields/keywordprobabilitysalesproject/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityActionField> + <name>openClassificationOverView</name> + <title>Show Classification</title> + <onActionProcess>%aditoprj%/entity/Salesproject_entity/entityfields/openclassificationoverview/onActionProcess.js</onActionProcess> + <iconId>VAADIN:LIST_OL</iconId> + </entityActionField> </entityFields> <recordContainers> <dbRecordContainer> @@ -1069,15 +1056,6 @@ <groupQueryProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationgroup_filter/groupQueryProcess.js</groupQueryProcess> <filtertype>BASIC</filtertype> </filterExtensionSet> - <filterExtensionSet> - <name>ClassificationType_filter</name> - <filterFieldsProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterFieldsProcess.js</filterFieldsProcess> - <filterValuesProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterValuesProcess.js</filterValuesProcess> - <filterConditionProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterConditionProcess.js</filterConditionProcess> - <isGroupable v="true" /> - <groupQueryProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/groupQueryProcess.js</groupQueryProcess> - <filtertype>BASIC</filtertype> - </filterExtensionSet> <filterExtension> <name>Phase_filterExtention</name> <title>Phase</title> @@ -1106,7 +1084,7 @@ </filterExtension> <filterExtension> <name>Competitor_filterExtension</name> - <title>Competitor</title> + <title>Competitions/Competitor</title> <contentType>TEXT</contentType> <filterValuesProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/competitor_filterextension/filterValuesProcess.js</filterValuesProcess> <filterConditionProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/competitor_filterextension/filterConditionProcess.js</filterConditionProcess> diff --git a/entity/Salesproject_entity/entityfields/inactivetime/valueProcess.js b/entity/Salesproject_entity/entityfields/inactivetime/valueProcess.js index ac06e819274086b19cdb2c46e8b93252b4e6277d..0daeae79aa840b4f4acaa4c0f65adcdcbdab2858 100644 --- a/entity/Salesproject_entity/entityfields/inactivetime/valueProcess.js +++ b/entity/Salesproject_entity/entityfields/inactivetime/valueProcess.js @@ -1,20 +1,28 @@ -import("system.datetime"); -import("system.translate"); -import("system.result"); -import("system.vars"); -import("ActivityTask_lib"); -import("Date_lib"); - -var entryDate = ActivityUtils.getLastActivityDate(vars.get("$field.SALESPROJECTID")); -if (!entryDate) - entryDate = vars.get("$field.STARTDATE"); - -var roleoutDate = vars.getString("$field.ENDDATE"); -var daysPassed ; -if (!roleoutDate || roleoutDate < datetime.date()) - daysPassed = 0; -else - daysPassed = DateUtils.getDayDifference(entryDate); - -if (daysPassed != null) - result.string(daysPassed); \ No newline at end of file +import("system.datetime"); +import("system.translate"); +import("system.result"); +import("system.vars"); +import("ActivityTask_lib"); +import("Date_lib"); + +var entryDate = ActivityUtils.getLastActivityDate(vars.get("$field.SALESPROJECTID")); +if (!entryDate) +{ + entryDate = vars.get("$field.DATE_NEW"); +} + +var roleoutDate = vars.getString("$field.ENDDATE"); +var daysPassed ; +if (!roleoutDate || roleoutDate < datetime.date()) +{ + daysPassed = 0; +} +else +{ + daysPassed = DateUtils.getDayDifference(entryDate); +} + +if (daysPassed != null) +{ + result.string(daysPassed); +} \ No newline at end of file diff --git a/entity/Salesproject_entity/entityfields/keywordprobabilitysalesproject/children/containername_param/valueProcess.js b/entity/Salesproject_entity/entityfields/keywordprobabilitysalesproject/children/containername_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..79fdf41a10d8702af60dd889bde78c20248605c6 --- /dev/null +++ b/entity/Salesproject_entity/entityfields/keywordprobabilitysalesproject/children/containername_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.result"); +import("KeywordRegistry_basic"); + +result.string($KeywordRegistry.probabilitySalesproject()); diff --git a/entity/Salesproject_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js b/entity/Salesproject_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js index 97523412f94b7d77b72b9a0973be454ca2a0bf04..b8fbd1a1da983471d2a8e72e6d06593e7e77cc4e 100644 --- a/entity/Salesproject_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js +++ b/entity/Salesproject_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js @@ -3,7 +3,7 @@ import("system.result"); import("Context_lib"); var res = []; -res.push({id: vars.get("$field.SALESPROJECTID"), tableNames: ["AB_ATTRIBUTERELATION", "ACTIVITY"]}); +res.push({id: vars.get("$field.SALESPROJECTID"), tableNames: ["AB_ATTRIBUTERELATION", "ACTIVITY", "FORECAST"]}); res.push({id: vars.get("$field.SALESPROJECTID"), tableNames: ["SALESPROJECT"]}); res = JSON.stringify(res);//currently only strings can be passed as param diff --git a/entity/Salesproject_entity/entityfields/openclassificationoverview/onActionProcess.js b/entity/Salesproject_entity/entityfields/openclassificationoverview/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..409ae146ee56ad2bd7f74d1450e90f1dea097905 --- /dev/null +++ b/entity/Salesproject_entity/entityfields/openclassificationoverview/onActionProcess.js @@ -0,0 +1,7 @@ +import("system.neon"); +import("ClassificationUpdate_lib"); +import("system.vars"); + +var classificationData = ClassificationUtils.executeUpdating(false, vars.get("$field.SALESPROJECTID"), "Salesproject"); + +neon.openContext("Classification", "ClassificationTree_view", null, neon.OPERATINGSTATE_SEARCH, {"ClassificationContent_param": classificationData}, null); \ No newline at end of file diff --git a/entity/Salesproject_entity/entityfields/phase/onValueChange.js b/entity/Salesproject_entity/entityfields/phase/onValueChange.js new file mode 100644 index 0000000000000000000000000000000000000000..4fbd8be4825302fe3dff5a594409614a6ae1f40f --- /dev/null +++ b/entity/Salesproject_entity/entityfields/phase/onValueChange.js @@ -0,0 +1,25 @@ +import("Sql_lib"); +import("system.neon"); +import("system.vars"); + +var currPobab = parseInt( + newSelect("SALESPROJECT.PROBABILITY") + .from("SALESPROJECT") + .where("SALESPROJECT.SALESPROJECTID", vars.get("$field.SALESPROJECTID")) + .cell() +); +var autoProbab = parseInt( + newSelect("SALESPROJECTPHASEDEFINITION.AUTOPROBABILITY") + .from("SALESPROJECTPHASEDEFINITION") + .where("SALESPROJECTPHASEDEFINITION.PHASE", vars.get("$this.value")) + .cell() +); + +if(isNaN(autoProbab) || autoProbab < currPobab) +{ + neon.setFieldValue("$field.PROBABILITY", currPobab); +} +else +{ + neon.setFieldValue("$field.PROBABILITY", autoProbab); +} diff --git a/entity/Salesproject_entity/entityfields/probability/dropDownProcess.js b/entity/Salesproject_entity/entityfields/probability/dropDownProcess.js deleted file mode 100644 index 0ce6525ee92048543d83d251c2b289e710aa5e01..0000000000000000000000000000000000000000 --- a/entity/Salesproject_entity/entityfields/probability/dropDownProcess.js +++ /dev/null @@ -1,9 +0,0 @@ -import("system.result"); - -result.object([ - ["0.00", "0%"], - ["25.00", "25%"], - ["50.00", "50%"], - ["75.00", "75%"], - ["100.00", "100%"] -]); diff --git a/entity/Salesproject_entity/entityfields/tasks/stateProcess.js b/entity/Salesproject_entity/entityfields/tasks/stateProcess.js deleted file mode 100644 index 8a5375f38fda775fd00271e774f45d992d491a98..0000000000000000000000000000000000000000 --- a/entity/Salesproject_entity/entityfields/tasks/stateProcess.js +++ /dev/null @@ -1,10 +0,0 @@ -import("system.result"); -import("system.neon"); -import("system.vars"); -import("ActivityTask_lib"); -import("Context_lib"); - -if(TaskUtils.hasTasks(vars.get("$field.SALESPROJECTID"), ContextUtils.getCurrentContextId())) - result.string(neon.COMPONENTSTATE_EDITABLE); -else - result.string(neon.COMPONENTSTATE_INVISIBLE); \ No newline at end of file diff --git a/entity/Salesproject_entity/entityfields/turnovers/children/salesprojectiddynamicchart_param/valueProcess.js b/entity/Salesproject_entity/entityfields/turnovers/children/salesprojectiddynamicchart_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..2b119ebfa1944164fd2a1cb645511740bec9015e --- /dev/null +++ b/entity/Salesproject_entity/entityfields/turnovers/children/salesprojectiddynamicchart_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("system.result"); + +result.string(vars.get("$field.SALESPROJECTID")); \ No newline at end of file diff --git a/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterConditionProcess.js b/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterConditionProcess.js deleted file mode 100644 index 5875efb7699dfc5aaa3b567c912990895b03eded..0000000000000000000000000000000000000000 --- a/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterConditionProcess.js +++ /dev/null @@ -1,6 +0,0 @@ -import("system.result"); -import("ClassificationFilter_lib"); - -var sqlCond = ClassificationTypeFilterUtils.makeFilterConditionSql(); - -result.string(sqlCond); \ No newline at end of file diff --git a/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterFieldsProcess.js b/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterFieldsProcess.js deleted file mode 100644 index b2cf16be606711221d28048b4af26922e946c004..0000000000000000000000000000000000000000 --- a/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterFieldsProcess.js +++ /dev/null @@ -1,7 +0,0 @@ -import("system.vars"); -import("system.result"); -import("ClassificationFilter_lib"); - -var fields = ClassificationTypeFilterUtils.getFilterFields(vars.get("$sys.currentcontextname")); - -result.string(fields); \ No newline at end of file diff --git a/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterValuesProcess.js b/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterValuesProcess.js deleted file mode 100644 index 541cc6c67ce6e4dc53ccc16714b3b7746eb0f097..0000000000000000000000000000000000000000 --- a/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterValuesProcess.js +++ /dev/null @@ -1,5 +0,0 @@ -import("system.result"); -import("ClassificationFilter_lib"); - -var values = ClassificationTypeFilterUtils.makeFilterFields(); -result.object(values); diff --git a/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/groupQueryProcess.js b/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/groupQueryProcess.js deleted file mode 100644 index 2120bd1a538559a9c50f8af3831405f0471cfb70..0000000000000000000000000000000000000000 --- a/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/groupQueryProcess.js +++ /dev/null @@ -1,26 +0,0 @@ -import("system.translate"); -import("Sql_lib"); -import("system.result"); -import("system.vars"); - -var isCount = vars.get("$local.count"); // TRUE if the count of the records is needed -var columns = vars.get("$local.columnlist"); // The column, expected from the querry, see also AttributeFilter_lib -var condition = vars.get("$local.condition"); // The Condition that's beeing used, includes the grouphirachy -var groupedColumns = vars.get("$local.groupedlist") // The coloumns, used for grouping -var order = vars.get("$local.order"); // The order of the result -var classificationId = vars.get("$local.name"); -classificationId = classificationId.slice(classificationId.lastIndexOf(".") + 1, classificationId.length); - -var sql = newSelect(isCount ? "1" : columns) - .from("SALESPROJECT") - .leftJoin("CLASSIFICATION", newWhere("CLASSIFICATION.OBJECT_ROWID = SALESPROJECT.SALESPROJECTID") - .and("CLASSIFICATION.OBJECT_TYPE", "Salesproject") - .and("CLASSIFICATION.CLASSIFICATIONTYPE_ID", classificationId)) - .leftJoin("CLASSIFICATIONSCORE", "CLASSIFICATIONSCORE.CLASSIFICATIONSCOREID = CLASSIFICATION.VALUE") - .whereIfSet(condition.trim()) - .groupBy(groupedColumns); - -if (order != null && !isCount) - sql.orderBy(order); - -result.string(sql.toString()); \ No newline at end of file diff --git a/entity/Salesproject_entity/recordcontainers/db/filterextensions/competitor_filterextension/filterValuesProcess.js b/entity/Salesproject_entity/recordcontainers/db/filterextensions/competitor_filterextension/filterValuesProcess.js index da7c6ab53f019279a547eceb717a2f49dc14a6a2..84000eea2406693953fc6b130871618cb3737c8a 100644 --- a/entity/Salesproject_entity/recordcontainers/db/filterextensions/competitor_filterextension/filterValuesProcess.js +++ b/entity/Salesproject_entity/recordcontainers/db/filterextensions/competitor_filterextension/filterValuesProcess.js @@ -7,5 +7,8 @@ result.object(newSelect([ "ORGANISATION.NAME" ]) .from("ORGANISATION") -.join("CONTACT", newWhere("ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID")) +.join("CONTACT", + newWhere("ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID") + .and("CONTACT.PERSON_ID is null") +) .table()); diff --git a/entity/Salesproject_entity/recordcontainers/db/onDBUpdate.js b/entity/Salesproject_entity/recordcontainers/db/onDBUpdate.js index b81c1dd9c2cada650eca9c3555eb0c6cb51416aa..c9dfa3fa5c396f3cfb5d459cf9c5f0f91db4a270 100644 --- a/entity/Salesproject_entity/recordcontainers/db/onDBUpdate.js +++ b/entity/Salesproject_entity/recordcontainers/db/onDBUpdate.js @@ -22,7 +22,6 @@ vars.get("$local.changed").forEach(function(fieldName) { switch (fieldName) { case "SALESPROJECT.PHASE": - typeValue = "SalesprojectPhase"; break; case "SALESPROJECT.STATUS": // Milestone diff --git a/entity/SalutationDistinct_entity/SalutationDistinct_entity.aod b/entity/SalutationDistinct_entity/SalutationDistinct_entity.aod index b3181e070d98eda13c99a61241dd4c8bb9a8e7e2..a0dd011e9c266f022325d2536167df42492263b2 100644 --- a/entity/SalutationDistinct_entity/SalutationDistinct_entity.aod +++ b/entity/SalutationDistinct_entity/SalutationDistinct_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>SalutationDistinct_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/SalutationDistinct_entity/documentation.adoc</documentation> @@ -14,14 +14,6 @@ </entityField> <entityProvider> <name>Salutations</name> - <dependencies> - <entityDependency> - <name>2f56ee5c-0f54-4d26-a4d8-a598c136967b</name> - <entityName>QuickEntry_entity</entityName> - <fieldName>Salutations</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>Language_param</name> diff --git a/entity/SalutationTitleDistinct_entity/SalutationTitleDistinct_entity.aod b/entity/SalutationTitleDistinct_entity/SalutationTitleDistinct_entity.aod index 967342e884d3c8323471238a7e58b891b08dde4b..79a829d056da4c57a4be980b0286696f43240bff 100644 --- a/entity/SalutationTitleDistinct_entity/SalutationTitleDistinct_entity.aod +++ b/entity/SalutationTitleDistinct_entity/SalutationTitleDistinct_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>SalutationTitleDistinct_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/SalutationTitleDistinct_entity/documentation.adoc</documentation> @@ -19,14 +19,6 @@ </entityParameter> <entityProvider> <name>SalutationTitles</name> - <dependencies> - <entityDependency> - <name>3514c1fb-09f5-485f-884b-2e21e4e85490</name> - <entityName>QuickEntry_entity</entityName> - <fieldName>SalutationTitles</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>Language_param</name> diff --git a/entity/Salutation_entity/Salutation_entity.aod b/entity/Salutation_entity/Salutation_entity.aod index 09ab3134e33c28818a418c5219f9f8ffbea238b8..4399dc9137d945e18598cf75a5795df1f4b63413 100644 --- a/entity/Salutation_entity/Salutation_entity.aod +++ b/entity/Salutation_entity/Salutation_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Salutation_entity</name> <title>Salutation</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -10,14 +10,6 @@ <entityFields> <entityProvider> <name>#PROVIDER</name> - <dependencies> - <entityDependency> - <name>d3915336-2a77-4456-9e59-869a7b8eb812</name> - <entityName>QuickEntry_entity</entityName> - <fieldName>Salutations</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>SALUTATIONID</name> diff --git a/entity/Salutation_entity/entityfields/salutationid/valueProcess.js b/entity/Salutation_entity/entityfields/salutationid/valueProcess.js index b00a74fd01954b6aeac70538fa243fd7a99aa335..885ed2edec421395ccaf52b1fc5620995a85fcf0 100644 --- a/entity/Salutation_entity/entityfields/salutationid/valueProcess.js +++ b/entity/Salutation_entity/entityfields/salutationid/valueProcess.js @@ -3,5 +3,7 @@ import("system.neon"); import("system.result"); import("system.vars"); -if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) - result.string(util.getNewUUID()); \ No newline at end of file +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) +{ + result.string(util.getNewUUID()); +} \ No newline at end of file diff --git a/entity/SerialLetterAddRecipients_entity/SerialLetterAddRecipients_entity.aod b/entity/SerialLetterAddRecipients_entity/SerialLetterAddRecipients_entity.aod index 6109b0da0af9beceaa48ca285e4190ba1745554e..ab3393bc5bca0f248b29582231fcd73ad0eaf245 100644 --- a/entity/SerialLetterAddRecipients_entity/SerialLetterAddRecipients_entity.aod +++ b/entity/SerialLetterAddRecipients_entity/SerialLetterAddRecipients_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>SerialLetterAddRecipients_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/SerialLetterAddRecipients_entity/documentation.adoc</documentation> diff --git a/entity/SerialLetter_entity/SerialLetter_entity.aod b/entity/SerialLetter_entity/SerialLetter_entity.aod index 2e747b5209ad1e75e3d17ce1595d1ee92ff27934..3aa3b44fe5edd00375e1b1b881c2df8c5c6e2d67 100644 --- a/entity/SerialLetter_entity/SerialLetter_entity.aod +++ b/entity/SerialLetter_entity/SerialLetter_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>SerialLetter_entity</name> <title>Serial Letter</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -14,20 +14,6 @@ <entityFields> <entityProvider> <name>#PROVIDER</name> - <dependencies> - <entityDependency> - <name>8cb1a355-eb91-414a-8860-0210b18bd1ba</name> - <entityName>SerialLetterAddRecipients_entity</entityName> - <fieldName>SerialLetters</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>988dfd7a-dad6-440f-95d9-2288ba7de92e</name> - <entityName>ObjectProxy_entity</entityName> - <fieldName>SerialLetters</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>SERIALLETTERID</name> diff --git a/entity/SingleObject_entity/SingleObject_entity.aod b/entity/SingleObject_entity/SingleObject_entity.aod index c6b3b52e6d48e650d3b579fe99f38b6ddc2e84f4..a2aac325aa8fbcfbc7197287d175eedd7f1d606a 100644 --- a/entity/SingleObject_entity/SingleObject_entity.aod +++ b/entity/SingleObject_entity/SingleObject_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>SingleObject_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <recordContainer>jdito</recordContainer> diff --git a/entity/Social_entity/Social_entity.aod b/entity/Social_entity/Social_entity.aod index 1f3883abe85bdf5d1de98470cae7fb076cc4b905..fcbc51b11ba120b211ab3cc522dd8e36e197681d 100644 --- a/entity/Social_entity/Social_entity.aod +++ b/entity/Social_entity/Social_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Social_entity</name> <title>Social Media</title> <majorModelMode>DISTRIBUTED</majorModelMode> diff --git a/entity/StandardWorkflow_entity/StandardWorkflow_entity.aod b/entity/StandardWorkflow_entity/StandardWorkflow_entity.aod new file mode 100644 index 0000000000000000000000000000000000000000..d83e0534b8952944bbe86b276c8af247a963d8e6 --- /dev/null +++ b/entity/StandardWorkflow_entity/StandardWorkflow_entity.aod @@ -0,0 +1,83 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> + <name>StandardWorkflow_entity</name> + <title>Standard workflow</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <documentation>%aditoprj%/entity/StandardWorkflow_entity/documentation.adoc</documentation> + <grantCreate v="false" /> + <grantUpdate v="false" /> + <grantDelete v="false" /> + <titlePlural>Standard workflows</titlePlural> + <recordContainer>db</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + </entityProvider> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityField> + <name>STANDARD_WORKFLOWID</name> + </entityField> + <entityField> + <name>DIAGRAM</name> + <contentType>IMAGE</contentType> + </entityField> + <entityField> + <name>PROCESSKEY</name> + <title>Key</title> + </entityField> + <entityField> + <name>DESCRIPTION</name> + <title>Description</title> + </entityField> + <entityField> + <name>NAME</name> + <title>Name</title> + </entityField> + <entityParameter> + <name>ExcludeExisting_param</name> + <expose v="true" /> + </entityParameter> + </entityFields> + <recordContainers> + <dbRecordContainer> + <name>db</name> + <isReadOnly v="true" /> + <conditionProcess>%aditoprj%/entity/StandardWorkflow_entity/recordcontainers/db/conditionProcess.js</conditionProcess> + <alias>Data_alias</alias> + <recordFieldMappings> + <dbRecordFieldMapping> + <name>DESCRIPTION.value</name> + <recordfield>STANDARD_WORKFLOW.DESCRIPTION</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DIAGRAM.value</name> + <recordfield>STANDARD_WORKFLOW.DIAGRAM</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>PROCESSKEY.value</name> + <recordfield>STANDARD_WORKFLOW.PROCESSKEY</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>NAME.value</name> + <recordfield>STANDARD_WORKFLOW.NAME</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>STANDARD_WORKFLOWID.value</name> + <recordfield>STANDARD_WORKFLOW.STANDARD_WORKFLOWID</recordfield> + </dbRecordFieldMapping> + </recordFieldMappings> + <linkInformation> + <linkInformation> + <name>f0c5e67d-3851-488b-833c-7721678c599a</name> + <tableName>STANDARD_WORKFLOW</tableName> + <primaryKey>STANDARD_WORKFLOWID</primaryKey> + <isUIDTable v="true" /> + <readonly v="false" /> + </linkInformation> + </linkInformation> + </dbRecordContainer> + </recordContainers> +</entity> diff --git a/entity/StandardWorkflow_entity/documentation.adoc b/entity/StandardWorkflow_entity/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..82672b0e0b08393b5453fb619d5a242e27a2a1aa --- /dev/null +++ b/entity/StandardWorkflow_entity/documentation.adoc @@ -0,0 +1,3 @@ += StandardWorkflow_entity + +Standard workflows are stored in the table STANDARD_WORKFLOW. The table is filled exclusively by liquibase scripts, this entity is read-only. diff --git a/entity/StandardWorkflow_entity/recordcontainers/db/conditionProcess.js b/entity/StandardWorkflow_entity/recordcontainers/db/conditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..9e683c7e4dcd25c8dce2af1f6c84cbdfd2b43cac --- /dev/null +++ b/entity/StandardWorkflow_entity/recordcontainers/db/conditionProcess.js @@ -0,0 +1,17 @@ +import("system.result"); +import("Sql_lib"); +import("system.workflow"); +import("system.vars"); +import("Util_lib"); + +var isExcludeExisting = Utils.toBoolean(vars.get("$param.ExcludeExisting_param")); +if (isExcludeExisting) +{ + var existingWorkflows = JSON.parse(workflow.getProcessDefinitions(workflow.createConfigForLoadingProcessDefinitions())); + var existingKeys = existingWorkflows.map(function (workflowDefinition) + { + return workflowDefinition.key; + }); + var condition = newWhereIfSet("STANDARD_WORKFLOW.PROCESSKEY", existingKeys, SqlBuilder.NOT_IN()); + result.string(condition.toString()); +} \ No newline at end of file diff --git a/entity/Stock_entity/Stock_entity.aod b/entity/Stock_entity/Stock_entity.aod index d41f642e3ef523e7714df230e050a4e4b1891007..42fe08d7b6ac899cfe4558d854f05d3c28c172a1 100644 --- a/entity/Stock_entity/Stock_entity.aod +++ b/entity/Stock_entity/Stock_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Stock_entity</name> <title>Stock</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -53,20 +53,6 @@ <entityProvider> <name>Stocks</name> <recordContainer>db</recordContainer> - <dependencies> - <entityDependency> - <name>aa9264c8-2c96-4a7a-94c7-e38bc0ae7df3</name> - <entityName>Product_entity</entityName> - <fieldName>Stocks</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>e6168337-2f0b-4135-be16-1a4fd1c2ff65</name> - <entityName>Product_entity</entityName> - <fieldName>StockCounts</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ProductId_param</name> diff --git a/entity/Stock_entity/entityfields/stockid/valueProcess.js b/entity/Stock_entity/entityfields/stockid/valueProcess.js index 86ef789e064a4016f2d12c432498dc23474807aa..823247cf893e603a8e2b8d5725d6b94ecd975695 100644 --- a/entity/Stock_entity/entityfields/stockid/valueProcess.js +++ b/entity/Stock_entity/entityfields/stockid/valueProcess.js @@ -3,5 +3,7 @@ import("system.vars"); import("system.result"); import("system.neon"); -if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) - result.string(util.getNewUUID()); \ No newline at end of file +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) +{ + result.string(util.getNewUUID()); +} \ No newline at end of file diff --git a/entity/SupportTicket_entity/SupportTicket_entity.aod b/entity/SupportTicket_entity/SupportTicket_entity.aod index 18411b1b108aadcd8107ce353aed8febb31b5fc8..642c7b3f71299b97cc301237872980e5286aa9e6 100644 --- a/entity/SupportTicket_entity/SupportTicket_entity.aod +++ b/entity/SupportTicket_entity/SupportTicket_entity.aod @@ -1,9 +1,10 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>SupportTicket_entity</name> <title>Support Ticket</title> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/SupportTicket_entity/documentation.adoc</documentation> + <grantDeleteProcess>%aditoprj%/entity/SupportTicket_entity/grantDeleteProcess.js</grantDeleteProcess> <contentTitleProcess>%aditoprj%/entity/SupportTicket_entity/contentTitleProcess.js</contentTitleProcess> <contentDescriptionProcess>%aditoprj%/entity/SupportTicket_entity/contentDescriptionProcess.js</contentDescriptionProcess> <afterUiInit>%aditoprj%/entity/SupportTicket_entity/afterUiInit.js</afterUiInit> @@ -37,20 +38,6 @@ </entityActionGroup> <entityProvider> <name>#PROVIDER</name> - <dependencies> - <entityDependency> - <name>71f2720a-a7d1-422e-8dc6-4e60d586c812</name> - <entityName>ObjectProxy_entity</entityName> - <fieldName>SupportTickets</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>3190ea51-a767-436f-af75-869b43d0c568</name> - <entityName>Object_entity</entityName> - <fieldName>SupportTickets</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>CODE</name> diff --git a/entity/SupportTicket_entity/grantDeleteProcess.js b/entity/SupportTicket_entity/grantDeleteProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..1300a4f0d525e6083e9f8dc6df280f802ef813c2 --- /dev/null +++ b/entity/SupportTicket_entity/grantDeleteProcess.js @@ -0,0 +1,10 @@ +import("system.vars"); +import("system.result"); + +var uid = vars.get("$sys.uid"); + +var canDelete = new HasLinkedObjectTester() + .andNoEntityRows("Document_entity", "Documents", {AssignmentTable_param : "TICKET", AssignmentRowId_param : uid}) //Documents + .validate(); + +result.string(canDelete); \ No newline at end of file diff --git a/entity/TaskLink_entity/TaskLink_entity.aod b/entity/TaskLink_entity/TaskLink_entity.aod index b78981407b37c38dbf1590f0f6e5f852109c2214..e31e30cb39ae827f24d9dc508de283cfea2d52b6 100644 --- a/entity/TaskLink_entity/TaskLink_entity.aod +++ b/entity/TaskLink_entity/TaskLink_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>TaskLink_entity</name> <title>Connection</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -39,20 +39,6 @@ <targetIdField>OBJECT_ROWID</targetIdField> <documentation>%aditoprj%/entity/TaskLink_entity/entityfields/link/documentation.adoc</documentation> <recordContainer>db</recordContainer> - <dependencies> - <entityDependency> - <name>40cc8bcd-c178-4a77-a968-642e1d8e1f70</name> - <entityName>Task_entity</entityName> - <fieldName>Links</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>96ab81b2-20d1-4e30-8563-4b06d8406269</name> - <entityName>SupportTicket_entity</entityName> - <fieldName>Links</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>TaskId_param</name> diff --git a/entity/Task_entity/Task_entity.aod b/entity/Task_entity/Task_entity.aod index 4c1ec3f2dfaf5993c4e7afd21b7af88d6cf5d019..5b2912ed81b703846fe450e91b9abf3dffdc3fc6 100644 --- a/entity/Task_entity/Task_entity.aod +++ b/entity/Task_entity/Task_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Task_entity</name> <title>Task</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -39,14 +39,6 @@ <entityProvider> <name>#PROVIDER</name> <recordContainer>db</recordContainer> - <dependencies> - <entityDependency> - <name>7a20f989-4c0a-40aa-9092-6ea9e99e851e</name> - <entityName>Object_entity</entityName> - <fieldName>Tasks</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>SUBJECT</name> @@ -310,74 +302,6 @@ <entityProvider> <name>Tasks</name> <documentation>%aditoprj%/entity/Task_entity/entityfields/tasks/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>dd79df43-264c-494b-9c92-cadf19e61db6</name> - <entityName>Organisation_entity</entityName> - <fieldName>Tasks</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>dc29832e-15da-4f64-b17a-f1dd978ef47b</name> - <entityName>Person_entity</entityName> - <fieldName>Tasks</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>c6507834-cd91-4202-bdf7-6566f968edb4</name> - <entityName>Salesproject_entity</entityName> - <fieldName>Tasks</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>26b9b221-de02-40ef-a400-d4b5e356da0b</name> - <entityName>Offer_entity</entityName> - <fieldName>Tasks</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>b2bb448a-b647-40c8-baec-16356f3e23f5</name> - <entityName>Order_entity</entityName> - <fieldName>Tasks</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>a93f1e7e-f929-438f-8f37-21e4af8b53b6</name> - <entityName>Product_entity</entityName> - <fieldName>Tasks</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>2b0c15eb-fa9a-4ee8-a8b1-5d0f344ddad6</name> - <entityName>Contract_entity</entityName> - <fieldName>Tasks</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>335e31ad-ab67-4567-b4ea-3668f04922b2</name> - <entityName>Campaign_entity</entityName> - <fieldName>Tasks</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>fbaa2f6c-0ba1-4c93-acae-d7b636581679</name> - <entityName>CampaignStep_entity</entityName> - <fieldName>Tasks</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>f2bd3784-3f43-4a23-8b58-0a25e0584178</name> - <entityName>Leadimport_entity</entityName> - <fieldName>Tasks</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>0a5c7719-8f33-4647-a81d-02763c0df0a3</name> - <entityName>ObjectProxy_entity</entityName> - <fieldName>Tasks</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>RowId_param</name> diff --git a/entity/Timetracking_entity/Timetracking_entity.aod b/entity/Timetracking_entity/Timetracking_entity.aod index 7801512b42160c39b811dd0b390d34a678aa0b96..019c0092c6fdb6e9ee4b93af47fa88cb47ace671 100644 --- a/entity/Timetracking_entity/Timetracking_entity.aod +++ b/entity/Timetracking_entity/Timetracking_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Timetracking_entity</name> <title>Timetracking</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -75,14 +75,6 @@ <entityProvider> <name>Timetrackings</name> <recordContainer>db</recordContainer> - <dependencies> - <entityDependency> - <name>3636c414-fbc9-4144-a8b1-8e4ca0a146b2</name> - <entityName>Salesproject_entity</entityName> - <fieldName>Timetrackings</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ObjectId_param</name> diff --git a/entity/TurnoverTree_entity/TurnoverTree_entity.aod b/entity/TurnoverTree_entity/TurnoverTree_entity.aod index dc19068f6d1d91e2fafb207c321293bf91982ff3..22a71c3c65c58d1aae90260ce19664352d239e9d 100644 --- a/entity/TurnoverTree_entity/TurnoverTree_entity.aod +++ b/entity/TurnoverTree_entity/TurnoverTree_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>TurnoverTree_entity</name> <title>Tree</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -57,14 +57,6 @@ <entityProvider> <name>FilteredTurnovers</name> <documentation>%aditoprj%/entity/TurnoverTree_entity/entityfields/filteredturnovers/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>0ea4ad47-985b-4a9c-81d8-946be324ae04</name> - <entityName>Turnover_entity</entityName> - <fieldName>Turnover_tree</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>YearCountToShow_param</name> diff --git a/entity/Turnover_entity/Turnover_entity.aod b/entity/Turnover_entity/Turnover_entity.aod index 5949a1679dc99db0137406414b81cb4b22c7d8e8..3f19987dceda7f6646969418315736cd3a9897e9 100644 --- a/entity/Turnover_entity/Turnover_entity.aod +++ b/entity/Turnover_entity/Turnover_entity.aod @@ -1,18 +1,18 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Turnover_entity</name> - <title>Turnover</title> + <title>Sales forecast</title> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/Turnover_entity/documentation.adoc</documentation> <siblings> <element>Forecast_entity</element> </siblings> + <initFilterProcess>%aditoprj%/entity/Turnover_entity/initFilterProcess.js</initFilterProcess> <iconId>VAADIN:CHART</iconId> - <recordContainer>jdito</recordContainer> + <recordContainer>jditoDynamicMultiDataChart</recordContainer> <entityFields> <entityProvider> <name>#PROVIDER</name> - <recordContainer>jdito</recordContainer> </entityProvider> <entityField> <name>UID</name> @@ -54,14 +54,7 @@ <entityProvider> <name>FilteredTurnovers</name> <documentation>%aditoprj%/entity/Turnover_entity/entityfields/filteredturnovers/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>51106aba-bd82-4ac5-8de6-fc56d53c6117</name> - <entityName>Salesproject_entity</entityName> - <fieldName>SalesprojectForecastCharts</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> + <recordContainer>jdito</recordContainer> <children> <entityParameter> <name>MaxYear_param</name> @@ -117,11 +110,111 @@ <name>#PROVIDER_AGGREGATES</name> <useAggregates v="true" /> </entityProvider> + <entityField> + <name>GroupField</name> + <title>Year</title> + </entityField> + <entityField> + <name>FORECAST_VOLUME</name> + <title>Forecast</title> + <contentType>NUMBER</contentType> + </entityField> + <entityField> + <name>PLANNING_VOLUME</name> + <title>Planning</title> + <contentType>NUMBER</contentType> + </entityField> + <entityField> + <name>TURNOVER_VOLUME</name> + <title>Turnover</title> + <contentType>NUMBER</contentType> + </entityField> + <entityAggregateField> + <name>ForecastVolume_aggregate</name> + <parentField>FORECAST_VOLUME</parentField> + </entityAggregateField> + <entityAggregateField> + <name>TurnoverVolume_aggregate</name> + <parentField>TURNOVER_VOLUME</parentField> + </entityAggregateField> + <entityAggregateField> + <name>PlanningVolume_aggregate</name> + <parentField>PLANNING_VOLUME</parentField> + </entityAggregateField> + <entityField> + <name>ORGANISATION_ID</name> + <title>Organisation</title> + <consumer>Organisations</consumer> + <groupable v="true" /> + </entityField> + <entityConsumer> + <name>Organisations</name> + <refreshParent v="false" /> + <dependency> + <name>dependency</name> + <entityName>Organisation_entity</entityName> + <fieldName>Organisations</fieldName> + </dependency> + </entityConsumer> + <entityField> + <name>TURNOVER_YEAR</name> + <title>Year</title> + <contentType>NUMBER</contentType> + <groupable v="true" /> + </entityField> + <entityField> + <name>emptyField</name> + <contentType>NUMBER</contentType> + </entityField> + <entityField> + <name>FORECAST_VOLUME_weighted</name> + <title>Forecast weighted</title> + <contentType>NUMBER</contentType> + </entityField> + <entityAggregateField> + <name>ForecastVolumeWeighted_aggregate</name> + <parentField>FORECAST_VOLUME_weighted</parentField> + </entityAggregateField> + <entityProvider> + <name>DynamicTurnover</name> + <children> + <entityParameter> + <name>MaxYear_param</name> + <expose v="false" /> + </entityParameter> + <entityParameter> + <name>ShowTurnover_param</name> + <expose v="false" /> + </entityParameter> + <entityParameter> + <name>ShowForecast_param</name> + <expose v="false" /> + </entityParameter> + <entityParameter> + <name>SalesprojectId_param</name> + <expose v="false" /> + </entityParameter> + <entityParameter> + <name>YearCountToShow_param</name> + <expose v="false" /> + </entityParameter> + </children> + </entityProvider> + <entityParameter> + <name>ContactId_param</name> + <expose v="true" /> + </entityParameter> + <entityParameter> + <name>SalesprojectIdDynamicChart_param</name> + <expose v="true" /> + </entityParameter> </entityFields> <recordContainers> <jDitoRecordContainer> <name>jdito</name> <jDitoRecordAlias>Data_alias</jDitoRecordAlias> + <isFilterable v="true" /> + <isGroupable v="true" /> <contentProcess>%aditoprj%/entity/Turnover_entity/recordcontainers/jdito/contentProcess.js</contentProcess> <recordFieldMappings> <jDitoRecordFieldMapping> @@ -141,5 +234,175 @@ </jDitoRecordFieldMapping> </recordFieldMappings> </jDitoRecordContainer> + <jDitoRecordContainer> + <name>jditoDynamicMultiDataChart</name> + <jDitoRecordAlias>Data_alias</jDitoRecordAlias> + <isPageable v="true" /> + <isFilterable v="true" /> + <isGroupable v="true" /> + <contentProcess>%aditoprj%/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/contentProcess.js</contentProcess> + <rowCountProcess>%aditoprj%/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/rowCountProcess.js</rowCountProcess> + <description></description> + <recordFieldMappings> + <jDitoRecordFieldMapping> + <name>UID.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>GroupField.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>ORGANISATION_ID.value</name> + <isFilterable v="true" /> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>TURNOVER_YEAR.value</name> + <isFilterable v="true" /> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>PLANNING_VOLUME.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>FORECAST_VOLUME.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>TURNOVER_VOLUME.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>FORECAST_VOLUME_weighted.value</name> + </jDitoRecordFieldMapping> + </recordFieldMappings> + <aggregateFieldMappings> + <jDitoRecordFieldMapping> + <name>PlanningVolume_aggregate.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>ForecastVolume_aggregate.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>TurnoverVolume_aggregate.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>ForecastVolumeWeighted_aggregate.value</name> + </jDitoRecordFieldMapping> + </aggregateFieldMappings> + <filterExtensions> + <filterExtension> + <name>Groupcode_filter</name> + <title>Product group</title> + <contentType>TEXT</contentType> + <filterValuesProcess>%aditoprj%/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/groupcode_filter/filterValuesProcess.js</filterValuesProcess> + <isGroupable v="true" /> + <filtertype>BASIC</filtertype> + </filterExtension> + <filterExtension> + <name>Month_filter</name> + <title>Month</title> + <contentType>TEXT</contentType> + <filterValuesProcess>%aditoprj%/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/month_filter/filterValuesProcess.js</filterValuesProcess> + <isFilterable v="true" /> + <isGroupable v="true" /> + <filtertype>BASIC</filtertype> + </filterExtension> + <filterExtensionSet> + <name>ClassificationGroup_filter</name> + <filterFieldsProcess>%aditoprj%/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/classificationgroup_filter/filterFieldsProcess.js</filterFieldsProcess> + <filterValuesProcess>%aditoprj%/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/classificationgroup_filter/filterValuesProcess.js</filterValuesProcess> + <isGroupable v="false" /> + <filtertype>EXTENDED</filtertype> + </filterExtensionSet> + <filterExtension> + <name>OrgCountry_filter</name> + <title>Organisation Country</title> + <contentType>TEXT</contentType> + <filterValuesProcess>%aditoprj%/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orgcountry_filter/filterValuesProcess.js</filterValuesProcess> + <filtertype>BASIC</filtertype> + </filterExtension> + <filterExtension> + <name>OrgAddress_filter</name> + <title>Organisation Address</title> + <contentType>TEXT</contentType> + <filtertype>BASIC</filtertype> + </filterExtension> + <filterExtension> + <name>OrgDistrict_filter</name> + <title>Organisation District</title> + <contentType>TEXT</contentType> + <filterValuesProcess>%aditoprj%/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orgdistrict_filter/filterValuesProcess.js</filterValuesProcess> + <filtertype>BASIC</filtertype> + </filterExtension> + <filterExtension> + <name>OrgState_filter</name> + <title>Organisation State</title> + <contentType>TEXT</contentType> + <filtertype>BASIC</filtertype> + </filterExtension> + <filterExtension> + <name>OrgZip_filter</name> + <title>Organisation Zip</title> + <contentType>TEXT</contentType> + <filtertype>BASIC</filtertype> + </filterExtension> + <filterExtension> + <name>OrgCity_filter</name> + <title>Organisation City</title> + <contentType>TEXT</contentType> + <filtertype>BASIC</filtertype> + </filterExtension> + <filterExtension> + <name>OrgRegion_filter</name> + <title>Organisation Region</title> + <contentType>TEXT</contentType> + <filterValuesProcess>%aditoprj%/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orgregion_filter/filterValuesProcess.js</filterValuesProcess> + <filtertype>BASIC</filtertype> + </filterExtension> + <filterExtension> + <name>OrgType_filter</name> + <title>Organisation Type</title> + <contentType>TEXT</contentType> + <filterValuesProcess>%aditoprj%/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orgtype_filter/filterValuesProcess.js</filterValuesProcess> + <filtertype>BASIC</filtertype> + </filterExtension> + <filterExtension> + <name>OrgClassification_filter</name> + <title>Organisation Classification</title> + <contentType>TEXT</contentType> + <filterValuesProcess>%aditoprj%/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orgclassification_filter/filterValuesProcess.js</filterValuesProcess> + <filtertype>BASIC</filtertype> + </filterExtension> + <filterExtension> + <name>OrgLanguage_filter</name> + <title>Organisation Language</title> + <contentType>TEXT</contentType> + <filterValuesProcess>%aditoprj%/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orglanguage_filter/filterValuesProcess.js</filterValuesProcess> + <filtertype>BASIC</filtertype> + </filterExtension> + <filterExtensionSet> + <name>OrgAttribute_filter</name> + <filterFieldsProcess>%aditoprj%/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orgattribute_filter/filterFieldsProcess.js</filterFieldsProcess> + <filterValuesProcess>%aditoprj%/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orgattribute_filter/filterValuesProcess.js</filterValuesProcess> + <filtertype>EXTENDED</filtertype> + </filterExtensionSet> + <filterExtension> + <name>Salesproject_filter</name> + <title>Salesproject</title> + <contentType>TEXT</contentType> + <filterValuesProcess>%aditoprj%/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/salesproject_filter/filterValuesProcess.js</filterValuesProcess> + <filtertype>BASIC</filtertype> + </filterExtension> + <filterExtension> + <name>DistrictName_filter</name> + <title>District: Name</title> + <contentType>TEXT</contentType> + <filterValuesProcess>%aditoprj%/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/districtname_filter/filterValuesProcess.js</filterValuesProcess> + <filtertype>BASIC</filtertype> + </filterExtension> + <filterExtension> + <name>DistrictDistrictnumber_filter</name> + <title>District: Number</title> + <contentType>NUMBER</contentType> + <filtertype>BASIC</filtertype> + </filterExtension> + </filterExtensions> + </jDitoRecordContainer> </recordContainers> </entity> diff --git a/entity/Turnover_entity/documentation.adoc b/entity/Turnover_entity/documentation.adoc index c369458ae651df5cf5b04e813fc3cbe93c66a6e4..4198a9d4a298a1caad40904d697560266da8b2df 100644 --- a/entity/Turnover_entity/documentation.adoc +++ b/entity/Turnover_entity/documentation.adoc @@ -1,6 +1,45 @@ = Turnover_entity +General explanation of MultiDataChart: For technical docu see the contentProcess of the jdito-record container of this entityThis entity provides charts to display the Turnover. This chart can show any data in a cumulative way: * It loads the most specific data (e.g. Productgroups) and calculates the layers above (e.g. Productgroups -> Months -> years) - * And then it shows the most top layer (years) at the top. If you click on it, it drills down to the more specific layer (Months / Productgroups) \ No newline at end of file + * And then it shows the most top layer (years) at the top. If you click on it, it drills down to the more specific layer (Months / Productgroups) + + +General explanation of DynamicMultiDataChart: +The fields FORECAST_VOLUME, GroupField, MONTH, ORGANISATION_ID, PLANNING_VOLUME, TURNOVER_VOLUME and TURNOVER_YEAR are only used +for the jditoDynamicMultiDataChart-RecordContainer. +To be able to group this RecordContainer the properties isPageable and isGroupable must be set and the rowCountProcess must be filled. +If you specify these settings for a jditoRecordContainer and you want to group them, certain things have to be considered +when they are returned in the contentProcess. +If grouping is selected, the array returned in the contentProcess must have the following structure: +[[NumberOfUnderlyingRecords, UID, ValueGrouping, AggregateField1, AggregateField2, AggregateFieldx]]. +The first position of the array must always be the number of underlying records. +After that always comes the UID and after that the value of the grouping. +These fields must be specified like this. After that, any number of aggregate fields can be specified. +Therefore, if you specify more than two fields in the recordFieldMappings, the rest will be ignored. +That means, if a grouping exists, then only the fields UID and GroupField in the recordFieldMappings +and all fields in the aggregateFieldMappings are considered. +If no grouping exists, the fields in aggregateFieldMappings are ignored and all fields in recordFieldMappings are used. +So if no grouping is selected, the array returned must match the recordFieldMappings. +To get a lookup when filtering on the company, a field was created and no FilterExtension was used. +The year was also not created as a FilterExtension, because it must be stored as a default grouping in the view +and no FilterExtension can be selected there. + +Extend filter: +To add a new FilterExtension the following steps have to be done: +- Create new FilterExtension +- check isFilterable +- In the Turnover_lib extend the object in the function TurnoverDynamicChart.getFilterMapping(). + Structure of the object is described in the function and can be done analog to the existing filter fields. + +Expand grouping: +If you want to group by another field the following steps have to be done: +- Create new FilterExtension +- check isGroupable +- In the Turnover_lib extend the object in the function TurnoverDynamicChart.getFilterMapping(). + Structure of the object is described in the function and can be extended analog to the existing ones. +- In Turnover_lib the switch case must be extended in the function TurnoverDynamicChart.prototype.getGroupFieldDisplayValue(). + The titles used in the case are defined in the grouping object under the key fieldName. + diff --git a/entity/Turnover_entity/initFilterProcess.js b/entity/Turnover_entity/initFilterProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..b7905f93bee903ee6fcf57f098aab5f024c94796 --- /dev/null +++ b/entity/Turnover_entity/initFilterProcess.js @@ -0,0 +1,53 @@ +import("Sql_lib"); +import("Contact_lib"); +import("system.neon"); +import("system.vars"); +import("Keyword_lib"); +import("KeywordRegistry_basic"); +import("system.result"); + +var contactId = vars.get("$param.ContactId_param"); +var salesprojectId = vars.get("$param.SalesprojectIdDynamicChart_param"); + +if(contactId || salesprojectId) +{ + var filter = { + type: "group", + operator: "AND", + childs: [{ + type: "row", + name: null, + operator: "EQUAL", + contenttype: "TEXT", + key: null, + value: null + }] + }; + + if(contactId) + { + filter.childs[0].name = "ORGANISATION_ID"; + filter.childs[0].key = contactId; + filter.childs[0].value = OrganisationUtils.getNameByContactId(contactId); + } + else if(salesprojectId) + { + var salesprojectTitle = newSelect("PROJECTCODE, PROJECTTITLE") + .from("SALESPROJECT") + .where("SALESPROJECT.SALESPROJECTID", salesprojectId) + .arrayColumn(); + salesprojectTitle = salesprojectTitle[0] + " | " + salesprojectTitle[1]; + + filter.childs[0].name = "#EXTENSION.Salesproject_filter.Salesproject_filter#TEXT"; + filter.childs[0].key = salesprojectId; + filter.childs[0].value = salesprojectTitle; + } + + res = JSON.stringify(filter); + + if (res) + { + result.string(res); + } +} + diff --git a/entity/Turnover_entity/recordcontainers/jdito/contentProcess.js b/entity/Turnover_entity/recordcontainers/jdito/contentProcess.js index fd0e3bd7a6f2c7518d54d02f9351a842f3d25d9b..ad9b4204f6e6c67c2ca3a1dd03883f10f801dba9 100644 --- a/entity/Turnover_entity/recordcontainers/jdito/contentProcess.js +++ b/entity/Turnover_entity/recordcontainers/jdito/contentProcess.js @@ -206,4 +206,4 @@ function _addCount(pKeys, pValue) { countData[key].count += parseFloat(pValue); } } -} \ No newline at end of file +} diff --git a/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/contentProcess.js b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/contentProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..1fcebb28452b67db784123e4f923c9f0fd6f5e42 --- /dev/null +++ b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/contentProcess.js @@ -0,0 +1,42 @@ +import("system.SQLTYPES"); +import("Contact_lib"); +import("KeywordRegistry_basic"); +import("Keyword_lib"); +import("system.datetime"); +import("JditoFilter_lib"); +import("system.vars"); +import("system.result"); +import("Sql_lib"); +import("Turnover_lib"); + + + +var filter = vars.get("$local.filters"); +var dynamicChart = new TurnoverDynamicChart(filter); +var fromSql; + +if( vars.exists("$local.grouped")) +{ + + var groupedField = vars.get("$local.grouped"); + dynamicChart.groupedField = groupedField; + + fromSql = dynamicChart.getFromSql(); + + var sqlHelper = new SqlMaskingUtils(); + + + var select = newSelect("count(*), results.uid, results.groupField, " + sqlHelper.cast("sum(results.sum_planning)", SQLTYPES.INTEGER) + ", " + + sqlHelper.cast("sum(results.sum_forecast)", SQLTYPES.INTEGER) + ", " + sqlHelper.cast("sum(results.sum_turnover)", SQLTYPES.INTEGER) + + "," + sqlHelper.cast("sum(results.sum_forecast_weighted)", SQLTYPES.INTEGER)) + .from("(" + fromSql.toString() + ") results") + .groupBy("results.uid, results.groupField"); + + var dataResult = select.table(); + result.object(dataResult); +} +else +{ + fromSql = dynamicChart.getFromSql(); + result.object(fromSql.table()); +} \ No newline at end of file diff --git a/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/classificationgroup_filter/filterFieldsProcess.js b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/classificationgroup_filter/filterFieldsProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..2a00071eedf9ebb4dbce585f63f92e2839f57ae7 --- /dev/null +++ b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/classificationgroup_filter/filterFieldsProcess.js @@ -0,0 +1,6 @@ +import("system.result"); +import("ClassificationFilter_lib"); + +var fields = ClassificationGroupFilterUtils.makeFilterFields("Organisation"); + +result.string(fields); \ No newline at end of file diff --git a/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterValuesProcess.js b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/classificationgroup_filter/filterValuesProcess.js similarity index 56% rename from entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterValuesProcess.js rename to entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/classificationgroup_filter/filterValuesProcess.js index 488499064a9bdd69b939b834b9a8c642bae09484..1b8a9b50976e699ff763ca7856c501df123ca054 100644 --- a/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterValuesProcess.js +++ b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/classificationgroup_filter/filterValuesProcess.js @@ -1,5 +1,6 @@ import("system.result"); import("ClassificationFilter_lib"); -var values = ClassificationTypeFilterUtils.makeFilterFields(); +var values = ClassificationGroupFilterUtils.makeFilterValues(); + result.object(values); \ No newline at end of file diff --git a/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/districtname_filter/filterValuesProcess.js b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/districtname_filter/filterValuesProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..3195439a60db8e1b3e8dfed5695cd363637468e5 --- /dev/null +++ b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/districtname_filter/filterValuesProcess.js @@ -0,0 +1,7 @@ +import("system.result"); +import("Sql_lib"); + +result.object( + newSelect(["DISTRICT_NAME", "DISTRICT_NAME"]) + .from("DISTRICT").table() +); diff --git a/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/groupcode_filter/filterValuesProcess.js b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/groupcode_filter/filterValuesProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..e36045723141095186b689258098409dedadeb49 --- /dev/null +++ b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/groupcode_filter/filterValuesProcess.js @@ -0,0 +1,12 @@ +import("KeywordRegistry_basic"); +import("system.result"); +import("Keyword_lib"); +import("Sql_lib"); + + + +result.object(newSelect("KEYID, " + KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.productGroupcode(), "AB_KEYWORD_ENTRY.KEYID")) + .from("AB_KEYWORD_ENTRY") + .join("AB_KEYWORD_CATEGORY", "AB_KEYWORD_CATEGORY_ID = AB_KEYWORD_CATEGORYID") + .where("AB_KEYWORD_CATEGORY.NAME", $KeywordRegistry.productGroupcode()) + .table()); \ No newline at end of file diff --git a/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/month_filter/filterValuesProcess.js b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/month_filter/filterValuesProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..8dd51ba80ba9d3230e7316be92bd79a03edb8abd --- /dev/null +++ b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/month_filter/filterValuesProcess.js @@ -0,0 +1,17 @@ +import("system.result"); +import("system.translate"); + +result.object([ + ["1", translate.text("January")], + ["2", translate.text("February")], + ["3", translate.text("March")], + ["4", translate.text("April")], + ["5", translate.text("May")], + ["6", translate.text("June")], + ["7", translate.text("July")], + ["8", translate.text("August")], + ["9", translate.text("September")], + ["10", translate.text("October")], + ["11", translate.text("November")], + ["12", translate.text("December")] +]); \ No newline at end of file diff --git a/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orgattribute_filter/filterFieldsProcess.js b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orgattribute_filter/filterFieldsProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..105c59dca1f529f109664b425b83d8de93041f00 --- /dev/null +++ b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orgattribute_filter/filterFieldsProcess.js @@ -0,0 +1,5 @@ +import("system.result"); +import("AttributeFilter_lib"); + +var fields = AttributeFilterExtensionMaker.makeFilterFields("Organisation"); +result.string(fields); \ No newline at end of file diff --git a/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orgattribute_filter/filterValuesProcess.js b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orgattribute_filter/filterValuesProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..942b0a0495a179f9c25d19330bb8cd59c5563ec0 --- /dev/null +++ b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orgattribute_filter/filterValuesProcess.js @@ -0,0 +1,5 @@ +import("system.result"); +import("AttributeFilter_lib"); + +var values = AttributeFilterExtensionMaker.makeFilterValues(); +result.object(values); \ No newline at end of file diff --git a/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orgclassification_filter/filterValuesProcess.js b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orgclassification_filter/filterValuesProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..b8ebaf03a411092da7ddd03166632c4820f9b3a4 --- /dev/null +++ b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orgclassification_filter/filterValuesProcess.js @@ -0,0 +1,9 @@ +import("system.result"); +import("Sql_lib"); + +var resultData = newSelect("distinct CLASSIFICATIONVALUE, CLASSIFICATIONVALUE") +.from("CLASSIFICATIONSTORAGE") +.orderBy("CLASSIFICATIONVALUE") +.table(); + +result.object(resultData); \ No newline at end of file diff --git a/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orgcountry_filter/filterValuesProcess.js b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orgcountry_filter/filterValuesProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..0a0ee5818385a190191326efad26abc14e018e48 --- /dev/null +++ b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orgcountry_filter/filterValuesProcess.js @@ -0,0 +1,15 @@ +import("system.result"); +import("system.entities"); + +var entityConfig = entities.createConfigForLoadingRows() + .entity("Countries_Entity") + .fields(["ISO2", "#CONTENTTITLE"]); + +var entityRow = entities.getRows(entityConfig); + +entityRow = entityRow.map(function(row) +{ + return [row["ISO2"], row["#CONTENTTITLE"]]; +}); + +result.object(entityRow); \ No newline at end of file diff --git a/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orgdistrict_filter/filterValuesProcess.js b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orgdistrict_filter/filterValuesProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..c7e3f04405984fa07f727cf4fe232f5e5ff18f51 --- /dev/null +++ b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orgdistrict_filter/filterValuesProcess.js @@ -0,0 +1,8 @@ +import("system.result"); +import("Sql_lib"); + +result.object( + newSelect("distinct DISTRICT, DISTRICT") + .where("ADDRESS.DISTRICT is not null") + .from("ADDRESS").table() +); diff --git a/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orglanguage_filter/filterValuesProcess.js b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orglanguage_filter/filterValuesProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..a8b5a7d0f10dcd75c459519259381d8dc0184955 --- /dev/null +++ b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orglanguage_filter/filterValuesProcess.js @@ -0,0 +1,15 @@ +import("system.result"); +import("system.entities"); + +var entityConfig = entities.createConfigForLoadingRows() + .entity("Language_entity") + .fields(["ISO3", "#CONTENTTITLE"]); + +var entityRow = entities.getRows(entityConfig); + +entityRow = entityRow.map(function(row) +{ + return [row["ISO3"], row["#CONTENTTITLE"]]; +}); + +result.object(entityRow); \ No newline at end of file diff --git a/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orgregion_filter/filterValuesProcess.js b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orgregion_filter/filterValuesProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..1627eb6de24739eb56fa8f7ec5fc0a4f205cd1c1 --- /dev/null +++ b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orgregion_filter/filterValuesProcess.js @@ -0,0 +1,8 @@ +import("system.result"); +import("Sql_lib"); + +result.object( + newSelect("distinct REGION, REGION") + .where("ADDRESS.REGION is not null") + .from("ADDRESS").table() +); diff --git a/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orgtype_filter/filterValuesProcess.js b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orgtype_filter/filterValuesProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..4742b4b09934c6676734a4f3d40e40124d37a259 --- /dev/null +++ b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orgtype_filter/filterValuesProcess.js @@ -0,0 +1,17 @@ +import("KeywordRegistry_basic"); +import("system.result"); +import("system.entities"); + +var entityConfig = entities.createConfigForLoadingRows() + .entity("KeywordEntry_entity") + .fields(["KEYID", "TITLE_TRANSLATED"]) + .addParameter("ContainerName_param", $KeywordRegistry.organisationType()); + +var entityRow = entities.getRows(entityConfig); + +entityRow = entityRow.map(function(row) +{ + return [row["KEYID"], row["TITLE_TRANSLATED"]]; +}); + +result.object(entityRow); \ No newline at end of file diff --git a/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/salesproject_filter/filterValuesProcess.js b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/salesproject_filter/filterValuesProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..9391c3e568a387b764bf9c2755be6aae9b6ef8c5 --- /dev/null +++ b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/salesproject_filter/filterValuesProcess.js @@ -0,0 +1,13 @@ +import("Sql_lib"); +import("system.result"); + +var sqlHelper = new SqlMaskingUtils(); +var dataResult = newSelect("SALESPROJECTID, PROJECTCODE, PROJECTTITLE") + .from("SALESPROJECT") + .table(); + +dataResult = dataResult.map(function(row) +{ + return [row[0], row[1] + " | " + row[2]]; +}); +result.object(dataResult); \ No newline at end of file diff --git a/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/rowCountProcess.js b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/rowCountProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..4dda5fa2a6d783c577d9c0397464fbebccf441f7 --- /dev/null +++ b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/rowCountProcess.js @@ -0,0 +1,39 @@ +import("system.SQLTYPES"); +import("Contact_lib"); +import("KeywordRegistry_basic"); +import("Keyword_lib"); +import("system.datetime"); +import("JditoFilter_lib"); +import("system.vars"); +import("system.result"); +import("Sql_lib"); +import("Turnover_lib"); + +var filter = vars.get("$local.filters"); +var dynamicChart = new TurnoverDynamicChart(filter); +var fromSql; + +if( vars.exists("$local.grouped")) +{ + + var groupedField = vars.get("$local.grouped"); + dynamicChart.groupedField = groupedField; + + fromSql = dynamicChart.getFromSql(); + + var sqlHelper = new SqlMaskingUtils(); + + var select = newSelect("count(*), results.uid, results.groupField, sum(results.sum_planning), " + + "sum(results.sum_forecast), sum(results.sum_turnover), sum(results.sum_forecast_weighted) ") + .from("(" + fromSql.toString() + ") results") + .groupBy("results.uid, results.groupField"); + + var dataResult = select.table(); + + result.string(dataResult.length); +} +else +{ + fromSql = dynamicChart.getFromSql(); + result.string(fromSql.table().length); +} \ No newline at end of file diff --git a/entity/UniversalFileProcessor_entity/UniversalFileProcessor_entity.aod b/entity/UniversalFileProcessor_entity/UniversalFileProcessor_entity.aod index c02555601d5382f8af78f3e63e9087f1a2136d75..838e84e5f70feaf7e8d1c96222fbf119d3ca521d 100644 --- a/entity/UniversalFileProcessor_entity/UniversalFileProcessor_entity.aod +++ b/entity/UniversalFileProcessor_entity/UniversalFileProcessor_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>UniversalFileProcessor_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/UniversalFileProcessor_entity/documentation.adoc</documentation> diff --git a/entity/UnlinkedMailMappingLink_entity/UnlinkedMailMappingLink_entity.aod b/entity/UnlinkedMailMappingLink_entity/UnlinkedMailMappingLink_entity.aod index b769af088b5a4c8e5d959bcd29ed97aa951acb1f..33c5ab0f3c4b4dfe8f486f847ba4a28b30c17f1e 100644 --- a/entity/UnlinkedMailMappingLink_entity/UnlinkedMailMappingLink_entity.aod +++ b/entity/UnlinkedMailMappingLink_entity/UnlinkedMailMappingLink_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>UnlinkedMailMappingLink_entity</name> <title>${UNLINKEDMAILMAPPING_ADDITIONAL_LINK}</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -9,14 +9,6 @@ <entityFields> <entityProvider> <name>#PROVIDER</name> - <dependencies> - <entityDependency> - <name>9958543a-9e47-4f7f-8f06-8f18757f8586</name> - <entityName>UnlinkedMailMappingWrapper_entity</entityName> - <fieldName>UnlinkedMailMappingLinks</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityParameter> <name>MailAsText_param</name> diff --git a/entity/UnlinkedMailMappingWrapper_entity/UnlinkedMailMappingWrapper_entity.aod b/entity/UnlinkedMailMappingWrapper_entity/UnlinkedMailMappingWrapper_entity.aod index 54532cd9c86648b4b23ca5242bbf2dd46f5ae71f..39f072a9aa1d0380a6dd5270aeea42934c3526e7 100644 --- a/entity/UnlinkedMailMappingWrapper_entity/UnlinkedMailMappingWrapper_entity.aod +++ b/entity/UnlinkedMailMappingWrapper_entity/UnlinkedMailMappingWrapper_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>UnlinkedMailMappingWrapper_entity</name> <title>Link unlinked e-mail</title> <majorModelMode>DISTRIBUTED</majorModelMode> diff --git a/entity/UnlinkedMail_entity/UnlinkedMail_entity.aod b/entity/UnlinkedMail_entity/UnlinkedMail_entity.aod index 3d3bf8f882d37350f1387d165d08824a0ceb3129..04d2a21438907b6c5d88c2e326d07ffa9934b01f 100644 --- a/entity/UnlinkedMail_entity/UnlinkedMail_entity.aod +++ b/entity/UnlinkedMail_entity/UnlinkedMail_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>UnlinkedMail_entity</name> <title>Unlinked e-mail</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -46,7 +46,7 @@ <name>DownloadMail_action</name> <title>Download Mail</title> <onActionProcess>%aditoprj%/entity/UnlinkedMail_entity/entityfields/toactivity_actiongroup/children/downloadmail_action/onActionProcess.js</onActionProcess> - <isSelectionAction v="true" /> + <selectionType>MULTI</selectionType> <iconId>VAADIN:DOWNLOAD_ALT</iconId> <tooltip>Download e-mail</tooltip> </entityActionField> @@ -54,7 +54,7 @@ <name>ToActivity_action</name> <title>Create activity</title> <onActionProcess>%aditoprj%/entity/UnlinkedMail_entity/entityfields/toactivity_actiongroup/children/toactivity_action/onActionProcess.js</onActionProcess> - <isSelectionAction v="true" /> + <selectionType>MULTI</selectionType> <iconIdProcess>%aditoprj%/entity/UnlinkedMail_entity/entityfields/toactivity_actiongroup/children/toactivity_action/iconIdProcess.js</iconIdProcess> <tooltip>Try to create activity automatically and ask for more information if necessary</tooltip> </entityActionField> diff --git a/entity/UserhelpResources_entity/UserhelpResources_entity.aod b/entity/UserhelpResources_entity/UserhelpResources_entity.aod index 39dd475719ae970e55ee4ecd00e9b0f05458f10d..831f7a4eff67ad9d1ce8d500a4b51d3add2027af 100644 --- a/entity/UserhelpResources_entity/UserhelpResources_entity.aod +++ b/entity/UserhelpResources_entity/UserhelpResources_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>UserhelpResources_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/UserhelpResources_entity/documentation.adoc</documentation> diff --git a/entity/Usersettings_entity/Usersettings_entity.aod b/entity/Usersettings_entity/Usersettings_entity.aod index 2653396deac35232a2ca79f7464a20c9cbc99f1e..1ec4ab0c78aac9ce1e53ef674737b7f7f9dcfed8 100644 --- a/entity/Usersettings_entity/Usersettings_entity.aod +++ b/entity/Usersettings_entity/Usersettings_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>Usersettings_entity</name> <title>Settings</title> <majorModelMode>DISTRIBUTED</majorModelMode> diff --git a/entity/VisitPlanEmployeeWeek_entity/VisitPlanEmployeeWeek_entity.aod b/entity/VisitPlanEmployeeWeek_entity/VisitPlanEmployeeWeek_entity.aod index df9c843f9b51af26f4093e09c4b3cc78a37cd715..14897c0211e34f9bc450dc6ddc420a9a8b4bcb98 100644 --- a/entity/VisitPlanEmployeeWeek_entity/VisitPlanEmployeeWeek_entity.aod +++ b/entity/VisitPlanEmployeeWeek_entity/VisitPlanEmployeeWeek_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>VisitPlanEmployeeWeek_entity</name> <title>Visitplan Weekly Overview</title> <majorModelMode>DISTRIBUTED</majorModelMode> diff --git a/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod b/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod index acc3d4d6af16f5a623d57e47879a2c4a6a9b679f..b2bbe781dbe8f457d19d9e55790a7b018c05d732 100644 --- a/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod +++ b/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>VisitPlanEntry_entity</name> <title>Weekplan</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -223,12 +223,11 @@ <children> <entityParameter> <name>OrgId_param</name> - <valueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/persons/children/orgid_param/valueProcess.js</valueProcess> - <expose v="true" /> </entityParameter> <entityParameter> <name>OnlyShowContactIds_param</name> <valueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/persons/children/onlyshowcontactids_param/valueProcess.js</valueProcess> + <expose v="true" /> </entityParameter> </children> </entityConsumer> @@ -239,14 +238,6 @@ <entityProvider> <name>Entries</name> <documentation>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/entries/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>22b61edd-c062-4c94-8848-8ac25831c5ba</name> - <entityName>VisitPlanEmployeeWeek_entity</entityName> - <fieldName>Entries</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityProvider> <name>#PROVIDER_AGGREGATES</name> diff --git a/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newappointment/onActionProcess.js b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newappointment/onActionProcess.js index b760e1613d9594960cabd2067bade94a03105560..6de5e67211d4a10723765b058e83b58c8cdf6530 100644 --- a/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newappointment/onActionProcess.js +++ b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newappointment/onActionProcess.js @@ -25,12 +25,10 @@ var summary = translate.text("Site visit") + " || " + fullName; var description = fullName; var standardMail = CommUtil.getStandardMail(selectionRowData[0].CONTACT_ID); -var startTime = selectionRowData[0].BEGIN_TIME; -var endTime = selectionRowData[0].END_TIME; -var duration = eMath.subInt(endTime, startTime); -var entryDate = datetime.toLocaleDate(selectionRowData[0].ENTRYDATE, "dd-MM-yyyy"); -startTime = entryDate + " " + datetime.toLocaleDate(selectionRowData[0].BEGIN_TIME, "HH:mm:ss.S"); -startTime = datetime.toLong(startTime, "dd-MM-yyyy HH:mm:ss.S", "UTC"); // #1076044 set tz to prevent time gaps. +//creates an js date object with the current utc time and adds the appointment begin/end time. +//necessary for CalendarUtil.createEntry() +var start = new Date(datetime.today(vars.get("$sys.timezone"))+Number(selectionRowData[0].BEGIN_TIME)); +var end = new Date(datetime.today(vars.get("$sys.timezone"))+Number(selectionRowData[0].END_TIME)); var links = [ { @@ -44,8 +42,8 @@ var links = [ ]; var params = { - "Entry_param": JSON.stringify(CalendarUtil.createEntry(summary, description, links, undefined, undefined, Date(Date.toExponential(startTime)), - Date(Date.toExponential(endTime)), undefined, undefined, undefined, [standardMail], + "Entry_param": JSON.stringify(CalendarUtil.createEntry(summary, description, links, undefined, undefined, start, + end, undefined, undefined, undefined, [standardMail], undefined, undefined, undefined)) }; diff --git a/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newappointment/stateProcess.js b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newappointment/stateProcess.js index 3f986eb99cdd8c56ea85788bc2ab0f547f172b25..181e70bbeca24bebbcad6595818e49b2e55484ad 100644 --- a/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newappointment/stateProcess.js +++ b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newappointment/stateProcess.js @@ -2,9 +2,14 @@ import("system.logging"); import("system.result"); import("system.vars"); import("system.neon"); +import("Util_lib"); -if (vars.get("$field.ISGROUP") == "false" && vars.get("$sys.selectionRows") != "" +if (Utils.toBoolean(vars.get("$field.ISGROUP")) && (vars.get("$field.STATUS") == "VISITSTATUSAPPPLANED" - || vars.get("$field.STATUS_APPOINTMENT") == "VISITSTATUSAPPOINTMENTCONFIRMED ")) - result.string(neon.COMPONENTSTATE_DISABLED); + || vars.get("$field.STATUS_APPOINTMENT") == "VISITSTATUSAPPOINTMENTCONFIRMED ") + || Utils.isNullOrEmpty(vars.get("$sys.selectionRows")) + || Utils.isNullOrEmpty(vars.get("$field.PARENT_ID"))) +{ + result.string(neon.COMPONENTSTATE_DISABLED); +} diff --git a/entity/VisitPlanEntry_entity/entityfields/persons/children/onlyshowcontactids_param/valueProcess.js b/entity/VisitPlanEntry_entity/entityfields/persons/children/onlyshowcontactids_param/valueProcess.js index a11c9601feff0a1405f971aa786c5137ec825881..0dcb7912c8cee051ddf7ffa3e075e89df70c9cbc 100644 --- a/entity/VisitPlanEntry_entity/entityfields/persons/children/onlyshowcontactids_param/valueProcess.js +++ b/entity/VisitPlanEntry_entity/entityfields/persons/children/onlyshowcontactids_param/valueProcess.js @@ -1,3 +1,5 @@ +import("system.logging"); +import("KeywordRegistry_basic"); import("Contact_lib"); import("system.result"); import("system.vars"); @@ -8,6 +10,7 @@ var contactIdArray = newSelect("CONTACT.CONTACTID") .from("CONTACT") .where("CONTACT.ORGANISATION_ID", ContactUtils.getPersOrgIds(orgContactId)[2], SqlBuilder.EQUAL()) .and("CONTACT.CONTACTID", orgContactId, SqlBuilder.NOT_EQUAL()) + .and("CONTACT.STATUS", $KeywordRegistry.contactStatus$inactive(), SqlBuilder.NOT_EQUAL()) .arrayColumn(); result.object(contactIdArray) \ No newline at end of file diff --git a/entity/VisitPlanEntry_entity/entityfields/persons/children/orgid_param/valueProcess.js b/entity/VisitPlanEntry_entity/entityfields/persons/children/orgid_param/valueProcess.js deleted file mode 100644 index c6e583e8bd66c32b6b8243af36cc6c2264c8ac18..0000000000000000000000000000000000000000 --- a/entity/VisitPlanEntry_entity/entityfields/persons/children/orgid_param/valueProcess.js +++ /dev/null @@ -1,9 +0,0 @@ -import("system.logging"); -import("Sql_lib"); -import("system.vars"); -import("system.result"); - -var orgContactId = vars.get("$field.ORGANISATION_CONTACT_ID") -var orgId = newSelect("CONTACT.ORGANISATION_ID").from("CONTACT").where("CONTACT.CONTACTID", orgContactId).cell(); - -result.string(orgId); \ No newline at end of file diff --git a/entity/VisitRecommendation_entity/VisitRecommendation_entity.aod b/entity/VisitRecommendation_entity/VisitRecommendation_entity.aod index 5b3aed5fe7eb132446e7268945dd6ba265eb60c5..122aecbad7c8416f3899f0646ae322097b5fb6f4 100644 --- a/entity/VisitRecommendation_entity/VisitRecommendation_entity.aod +++ b/entity/VisitRecommendation_entity/VisitRecommendation_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>VisitRecommendation_entity</name> <title>Visit Recommendation</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -18,14 +18,6 @@ <targetContextField>TARGET_CONTEXT</targetContextField> <targetIdField>TARGET_ID</targetIdField> <documentation>%aditoprj%/entity/VisitRecommendation_entity/entityfields/#provider/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>d39ab3e0-0b61-4a6d-a6f9-5c5fef20a801</name> - <entityName>VisitPlanEmployeeWeek_entity</entityName> - <fieldName>recommendations</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>CONTACT_ID</name> diff --git a/entity/WeblinkClick_entity/WeblinkClick_entity.aod b/entity/WeblinkClick_entity/WeblinkClick_entity.aod new file mode 100644 index 0000000000000000000000000000000000000000..bfc0e2a5eed1df3e534c506c6a7005a50e391652 --- /dev/null +++ b/entity/WeblinkClick_entity/WeblinkClick_entity.aod @@ -0,0 +1,217 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> + <name>WeblinkClick_entity</name> + <title>Click</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <grantCreate v="false" /> + <grantUpdate v="false" /> + <grantDelete v="false" /> + <titlePlural>Clicks</titlePlural> + <recordContainer>db</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + </entityProvider> + <entityField> + <name>BROWSER</name> + <title>Browser</title> + <mandatory v="true" /> + </entityField> + <entityField> + <name>DATE_OPENED</name> + <title>Date Clicked</title> + <contentType>DATE</contentType> + <mandatory v="true" /> + </entityField> + <entityField> + <name>DEVICE_TYPE</name> + <title>Device Type</title> + <mandatory v="true" /> + </entityField> + <entityField> + <name>IP_ADDRESS</name> + <title>IP Address</title> + <mandatory v="true" /> + </entityField> + <entityField> + <name>WEBLINK_CLICKID</name> + </entityField> + <entityField> + <name>WEBLINK_ID</name> + <mandatory v="true" /> + </entityField> + <entityField> + <name>OBJECT_TYPE</name> + <mandatory v="true" /> + </entityField> + <entityField> + <name>OPERATING_SYSTEM</name> + <title>Operating System</title> + <mandatory v="true" /> + </entityField> + <entityField> + <name>CONTACT_ID</name> + <title>Contact</title> + <consumer>Contacts</consumer> + <linkedContextProcess>%aditoprj%/entity/WeblinkClick_entity/entityfields/contact_id/linkedContextProcess.js</linkedContextProcess> + <mandatory v="true" /> + </entityField> + <entityField> + <name>OBJECT_ROWID</name> + <mandatory v="true" /> + </entityField> + <entityField> + <name>INTEREST_ID</name> + <title>Interest</title> + <mandatory v="true" /> + </entityField> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityField> + <name>URL</name> + <title>Url</title> + </entityField> + <entityParameter> + <name>WeblinkId_param</name> + <expose v="true" /> + </entityParameter> + <entityParameter> + <name>ObjectType_param</name> + <expose v="true" /> + </entityParameter> + <entityParameter> + <name>ObjectRowId_param</name> + <expose v="true" /> + </entityParameter> + <entityField> + <name>PERSON_ID</name> + </entityField> + <entityField> + <name>ORGANISATION_ID</name> + </entityField> + <entityConsumer> + <name>Contacts</name> + <dependency> + <name>dependency</name> + <entityName>AnyContact_entity</entityName> + <fieldName>#PROVIDER</fieldName> + </dependency> + </entityConsumer> + </entityFields> + <recordContainers> + <dbRecordContainer> + <name>db</name> + <fromClauseProcess>%aditoprj%/entity/WeblinkClick_entity/recordcontainers/db/fromClauseProcess.js</fromClauseProcess> + <conditionProcess>%aditoprj%/entity/WeblinkClick_entity/recordcontainers/db/conditionProcess.js</conditionProcess> + <orderClauseProcess>%aditoprj%/entity/WeblinkClick_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess> + <alias>Data_alias</alias> + <recordFieldMappings> + <dbRecordFieldMapping> + <name>BROWSER.value</name> + <recordfield>WEBLINK_CLICK.BROWSER</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DATE_OPENED.value</name> + <recordfield>WEBLINK_CLICK.DATE_OPENED</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DEVICE_TYPE.value</name> + <recordfield>WEBLINK_CLICK.DEVICE_TYPE</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>IP_ADDRESS.value</name> + <recordfield>WEBLINK_CLICK.IP_ADDRESS</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>WEBLINK_CLICKID.value</name> + <recordfield>WEBLINK_CLICK.WEBLINK_CLICKID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>WEBLINK_ID.value</name> + <recordfield>WEBLINK_CLICK.WEBLINK_ID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>OBJECT_TYPE.value</name> + <recordfield>MAIL_RUN.OBJECT_TYPE</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>OPERATING_SYSTEM.value</name> + <recordfield>WEBLINK_CLICK.OPERATING_SYSTEM</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>CONTACT_ID.value</name> + <recordfield>MAIL_LOG.CONTACT_ID</recordfield> + <isFilterable v="true" /> + <isLookupFilter v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>OBJECT_ROWID.value</name> + <recordfield>MAIL_RUN.OBJECT_ROWID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>INTEREST_ID.value</name> + <recordfield>MAIL_RUN.INTEREST_ID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>CONTACT_ID.displayValue</name> + <expression>%aditoprj%/entity/WeblinkClick_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js</expression> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>URL.value</name> + <recordfield>WEBLINK.URL</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>PERSON_ID.value</name> + <recordfield>CONTACT.PERSON_ID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>ORGANISATION_ID.value</name> + <recordfield>CONTACT.ORGANISATION_ID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DEVICE_TYPE.displayValue</name> + <expression>%aditoprj%/entity/WeblinkClick_entity/recordcontainers/db/recordfieldmappings/device_type.displayvalue/expression.js</expression> + </dbRecordFieldMapping> + </recordFieldMappings> + <linkInformation> + <linkInformation> + <name>bec597d4-29cb-48b4-9d26-d98b57a2bea2</name> + <tableName>WEBLINK_CLICK</tableName> + <primaryKey>WEBLINK_CLICKID</primaryKey> + <isUIDTable v="true" /> + <readonly v="false" /> + </linkInformation> + <linkInformation> + <name>fd8737aa-96fa-4831-98eb-6dd9082ff023</name> + <tableName>MAIL_LOG</tableName> + <primaryKey>MAIL_LOGID</primaryKey> + <isUIDTable v="false" /> + <readonly v="true" /> + </linkInformation> + <linkInformation> + <name>5d47ca65-a3b5-4cdf-97d7-3336a3601d2a</name> + <tableName>MAIL_RUN</tableName> + <primaryKey>MAIL_RUNID</primaryKey> + <isUIDTable v="false" /> + <readonly v="true" /> + </linkInformation> + <linkInformation> + <name>a3b88623-2fe7-4d05-b13b-b3bbaad6a2f3</name> + <tableName>WEBLINK</tableName> + <primaryKey>WEBLINKID</primaryKey> + <isUIDTable v="false" /> + <readonly v="true" /> + </linkInformation> + <linkInformation> + <name>5e8806a6-a5b6-4fb8-9672-6db23c9706a5</name> + <tableName>CONTACT</tableName> + <primaryKey>CONTACTID</primaryKey> + <isUIDTable v="false" /> + <readonly v="true" /> + </linkInformation> + </linkInformation> + </dbRecordContainer> + </recordContainers> +</entity> diff --git a/entity/WeblinkClick_entity/entityfields/contact_id/linkedContextProcess.js b/entity/WeblinkClick_entity/entityfields/contact_id/linkedContextProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..95bad245448809f807648349f7f23be11a6b3eca --- /dev/null +++ b/entity/WeblinkClick_entity/entityfields/contact_id/linkedContextProcess.js @@ -0,0 +1,7 @@ +import("system.vars"); +import("system.result"); +import("Contact_lib"); + +var res = ContactUtils.getContextByPersOrg(vars.get("$field.PERSON_ID"), vars.get("$field.ORGANISATION_ID")); + +result.string(res||"Person"); \ No newline at end of file diff --git a/entity/WeblinkClick_entity/recordcontainers/db/conditionProcess.js b/entity/WeblinkClick_entity/recordcontainers/db/conditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..12cab1c71355e0b5f0f2157e8574dbf2eed39696 --- /dev/null +++ b/entity/WeblinkClick_entity/recordcontainers/db/conditionProcess.js @@ -0,0 +1,8 @@ +import("system.result"); +import("Sql_lib"); + +var cond = newWhereIfSet("WEBLINK_CLICK.WEBLINK_ID", "$param.WeblinkId_param") + .andIfSet("MAIL_RUN.OBJECT_TYPE", "$param.ObjectType_param") + .andIfSet("MAIL_RUN.OBJECT_ROWID", "$param.ObjectRowId_param"); + +result.string(cond.toString()); \ No newline at end of file diff --git a/entity/WeblinkClick_entity/recordcontainers/db/fromClauseProcess.js b/entity/WeblinkClick_entity/recordcontainers/db/fromClauseProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..44b1758c89376187fd4e3cb3b96a40110dab36c4 --- /dev/null +++ b/entity/WeblinkClick_entity/recordcontainers/db/fromClauseProcess.js @@ -0,0 +1,11 @@ +import("system.result"); +import("Sql_lib"); + +var from = new SqlBuilder() + .from("WEBLINK_CLICK") + .join("MAIL_LOG","MAIL_LOG.MAIL_LOGID = WEBLINK_CLICK.MAIL_LOG_ID") + .join("MAIL_RUN","MAIL_RUN.MAIL_RUNID = MAIL_LOG.MAIL_RUN_ID") + .join("CONTACT","MAIL_LOG.CONTACT_ID = CONTACT.CONTACTID") + .join("WEBLINK","WEBLINK.WEBLINKID = WEBLINK_CLICK.WEBLINK_ID"); + +result.string(from.toString()); \ No newline at end of file diff --git a/entity/WeblinkClick_entity/recordcontainers/db/orderClauseProcess.js b/entity/WeblinkClick_entity/recordcontainers/db/orderClauseProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..08dda059e99f3d7917d6520e564b730883f79b08 --- /dev/null +++ b/entity/WeblinkClick_entity/recordcontainers/db/orderClauseProcess.js @@ -0,0 +1,6 @@ +import("system.db"); +import("system.result"); + +result.object({ + "WEBLINK_CLICK.DATE_OPENED" : db.DESCENDING +}); \ No newline at end of file diff --git a/entity/WeblinkClick_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js b/entity/WeblinkClick_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..72d1600cff8a2f7f9cd33dd3551e372cdec7790c --- /dev/null +++ b/entity/WeblinkClick_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js @@ -0,0 +1,4 @@ +import("Contact_lib"); +import("system.result"); + +result.string(ContactUtils.getResolvingDisplaySubSql("MAIL_LOG.CONTACT_ID")); \ No newline at end of file diff --git a/entity/WeblinkClick_entity/recordcontainers/db/recordfieldmappings/device_type.displayvalue/expression.js b/entity/WeblinkClick_entity/recordcontainers/db/recordfieldmappings/device_type.displayvalue/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..c4b623c5f30e94b437527cb920a01c0866658423 --- /dev/null +++ b/entity/WeblinkClick_entity/recordcontainers/db/recordfieldmappings/device_type.displayvalue/expression.js @@ -0,0 +1,6 @@ +import("system.result"); +import("Keyword_lib"); +import("KeywordRegistry_basic"); + +var sql = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.deviceType(), "WEBLINK_CLICK.DEVICE_TYPE"); +result.string(sql); diff --git a/entity/WeblinkTag_entity/WeblinkTag_entity.aod b/entity/WeblinkTag_entity/WeblinkTag_entity.aod new file mode 100644 index 0000000000000000000000000000000000000000..88e59eec7f12eae5313b362320839cbe58815d89 --- /dev/null +++ b/entity/WeblinkTag_entity/WeblinkTag_entity.aod @@ -0,0 +1,117 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> + <name>WeblinkTag_entity</name> + <title>Tag</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <grantUpdate v="false" /> + <grantUpdateProcess>%aditoprj%/entity/WeblinkTag_entity/grantUpdateProcess.js</grantUpdateProcess> + <onInit>%aditoprj%/entity/WeblinkTag_entity/onInit.js</onInit> + <titlePlural>Tags</titlePlural> + <recordContainer>db</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + </entityProvider> + <entityProvider> + <name>Tags</name> + </entityProvider> + <entityParameter> + <name>WeblinkId_param</name> + <expose v="true" /> + </entityParameter> + <entityField> + <name>TAG</name> + <title>Tag</title> + <consumer>KeywordLinkTags</consumer> + <displayValueProcess>%aditoprj%/entity/WeblinkTag_entity/entityfields/tag/displayValueProcess.js</displayValueProcess> + </entityField> + <entityField> + <name>WEBLINKTAGID</name> + </entityField> + <entityField> + <name>WEBLINK_ID</name> + <title>Url</title> + <valueProcess>%aditoprj%/entity/WeblinkTag_entity/entityfields/weblink_id/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>DATE_NEW</name> + <valueProcess>%aditoprj%/entity/WeblinkTag_entity/entityfields/date_new/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>DATE_EDIT</name> + <valueProcess>%aditoprj%/entity/WeblinkTag_entity/entityfields/date_edit/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>USER_NEW</name> + <valueProcess>%aditoprj%/entity/WeblinkTag_entity/entityfields/user_new/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>USER_EDIT</name> + <valueProcess>%aditoprj%/entity/WeblinkTag_entity/entityfields/user_edit/valueProcess.js</valueProcess> + </entityField> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityConsumer> + <name>KeywordLinkTags</name> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/WeblinkTag_entity/entityfields/keywordlinktags/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + </entityFields> + <recordContainers> + <dbRecordContainer> + <name>db</name> + <conditionProcess>%aditoprj%/entity/WeblinkTag_entity/recordcontainers/db/conditionProcess.js</conditionProcess> + <alias>Data_alias</alias> + <recordFieldMappings> + <dbRecordFieldMapping> + <name>TAG.value</name> + <recordfield>WEBLINKTAG.TAG</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>WEBLINK_ID.value</name> + <recordfield>WEBLINKTAG.WEBLINK_ID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DATE_EDIT.value</name> + <recordfield>WEBLINKTAG.DATE_EDIT</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DATE_NEW.value</name> + <recordfield>WEBLINKTAG.DATE_NEW</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>USER_EDIT.value</name> + <recordfield>WEBLINKTAG.USER_EDIT</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>USER_NEW.value</name> + <recordfield>WEBLINKTAG.USER_NEW</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>WEBLINKTAGID.value</name> + <recordfield>WEBLINKTAG.WEBLINKTAGID</recordfield> + </dbRecordFieldMapping> + </recordFieldMappings> + <linkInformation> + <linkInformation> + <name>2d72b86c-d2f6-46c9-bd82-5781ca93c630</name> + <tableName>WEBLINKTAG</tableName> + <primaryKey>WEBLINKTAGID</primaryKey> + <isUIDTable v="true" /> + <readonly v="false" /> + </linkInformation> + </linkInformation> + </dbRecordContainer> + </recordContainers> +</entity> diff --git a/entity/DuplicateScannerResultFieldConfig_entity/entityfields/date_edit/valueProcess.js b/entity/WeblinkTag_entity/entityfields/date_edit/valueProcess.js similarity index 68% rename from entity/DuplicateScannerResultFieldConfig_entity/entityfields/date_edit/valueProcess.js rename to entity/WeblinkTag_entity/entityfields/date_edit/valueProcess.js index 5e6ef059738e0c724a468685333a5e257ac228ce..daf59b91c5ec63190a50eded0333513b4bb444a8 100644 --- a/entity/DuplicateScannerResultFieldConfig_entity/entityfields/date_edit/valueProcess.js +++ b/entity/WeblinkTag_entity/entityfields/date_edit/valueProcess.js @@ -1,7 +1,7 @@ import("system.util"); +import("system.vars"); import("system.result"); import("system.neon"); -import("system.vars"); -if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) +if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT) result.string(vars.get("$sys.date")); \ No newline at end of file diff --git a/entity/DuplicateScannerResultFieldConfig_entity/entityfields/date_new/valueProcess.js b/entity/WeblinkTag_entity/entityfields/date_new/valueProcess.js similarity index 68% rename from entity/DuplicateScannerResultFieldConfig_entity/entityfields/date_new/valueProcess.js rename to entity/WeblinkTag_entity/entityfields/date_new/valueProcess.js index a72892783bf2bd04fe353c47f1be0cb570bbb323..fe44d4d71b1063092bb6fa4619e86f84f45cbf96 100644 --- a/entity/DuplicateScannerResultFieldConfig_entity/entityfields/date_new/valueProcess.js +++ b/entity/WeblinkTag_entity/entityfields/date_new/valueProcess.js @@ -1,7 +1,7 @@ import("system.util"); +import("system.vars"); import("system.result"); import("system.neon"); -import("system.vars"); -if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) +if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW) result.string(vars.get("$sys.date")); \ No newline at end of file diff --git a/entity/WeblinkTag_entity/entityfields/keywordlinktags/children/containername_param/valueProcess.js b/entity/WeblinkTag_entity/entityfields/keywordlinktags/children/containername_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..99b326480d0411aa466ca7dc716c1bee110fe1d5 --- /dev/null +++ b/entity/WeblinkTag_entity/entityfields/keywordlinktags/children/containername_param/valueProcess.js @@ -0,0 +1,2 @@ +import("system.result"); +result.string("LinkTags"); \ No newline at end of file diff --git a/entity/WeblinkTag_entity/entityfields/tag/displayValueProcess.js b/entity/WeblinkTag_entity/entityfields/tag/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..beebea09168f9f4766bae042d7e7f9ce35a70aed --- /dev/null +++ b/entity/WeblinkTag_entity/entityfields/tag/displayValueProcess.js @@ -0,0 +1,5 @@ +import("system.vars"); +import("Keyword_lib"); +import("system.result"); + +result.string(KeywordUtils.getViewValue("LinkTags", vars.get("$field.TAG"))); \ No newline at end of file diff --git a/entity/WeblinkTag_entity/entityfields/user_edit/valueProcess.js b/entity/WeblinkTag_entity/entityfields/user_edit/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..3ba15fa737b55fb359b165560ce8ea213df3bd85 --- /dev/null +++ b/entity/WeblinkTag_entity/entityfields/user_edit/valueProcess.js @@ -0,0 +1,7 @@ +import("system.util"); +import("system.vars"); +import("system.result"); +import("system.neon"); + +if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT) + result.string(vars.get("$sys.user")); \ No newline at end of file diff --git a/entity/DuplicateScannerResultFieldConfig_entity/entityfields/user_new/valueProcess.js b/entity/WeblinkTag_entity/entityfields/user_new/valueProcess.js similarity index 68% rename from entity/DuplicateScannerResultFieldConfig_entity/entityfields/user_new/valueProcess.js rename to entity/WeblinkTag_entity/entityfields/user_new/valueProcess.js index e518bc75a9494e53a83613dedd943106e74fc00a..ee55f943ae28a210c66facb7fc6ec1931c857421 100644 --- a/entity/DuplicateScannerResultFieldConfig_entity/entityfields/user_new/valueProcess.js +++ b/entity/WeblinkTag_entity/entityfields/user_new/valueProcess.js @@ -1,7 +1,7 @@ import("system.util"); +import("system.vars"); import("system.result"); import("system.neon"); -import("system.vars"); -if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) +if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW) result.string(vars.get("$sys.user")); \ No newline at end of file diff --git a/entity/WeblinkTag_entity/entityfields/weblink_id/valueProcess.js b/entity/WeblinkTag_entity/entityfields/weblink_id/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..927a984275c538117230634c5c748ec9a0082225 --- /dev/null +++ b/entity/WeblinkTag_entity/entityfields/weblink_id/valueProcess.js @@ -0,0 +1,8 @@ +import("system.util"); +import("system.vars"); +import("system.result"); +import("system.neon"); + + +if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) + result.string(vars.get("$param.WeblinkId_param")) \ No newline at end of file diff --git a/entity/WeblinkTag_entity/grantUpdateProcess.js b/entity/WeblinkTag_entity/grantUpdateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..017ae1610931b3e01dea064cb348e276aa96aca4 --- /dev/null +++ b/entity/WeblinkTag_entity/grantUpdateProcess.js @@ -0,0 +1,6 @@ +import("system.result"); +import("system.neon"); +import("system.vars"); + +if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_EDIT) + result.string(true); \ No newline at end of file diff --git a/entity/WeblinkTag_entity/onInit.js b/entity/WeblinkTag_entity/onInit.js new file mode 100644 index 0000000000000000000000000000000000000000..e27158065612d9200a8ff432327d14e5aebd7267 --- /dev/null +++ b/entity/WeblinkTag_entity/onInit.js @@ -0,0 +1,14 @@ +import("system.vars"); +import("system.neon"); +import("system.logging"); + + +var recordState = vars.get("$sys.recordstate"); +if(recordState == neon.OPERATINGSTATE_NEW || recordState == neon.OPERATINGSTATE_EDIT) +{ + var insertedRow = null + if(vars.exists("$field.Tags.insertedRows")) + insertedRow = vars.get("$field.Tags.insertedRows") + if(insertedRow.length == 1 && !insertedRow[0]["#"]) + neon.deleteRecord("Tags", insertedRow[0]["#UID"]) +} \ No newline at end of file diff --git a/entity/WeblinkTag_entity/recordcontainers/db/conditionProcess.js b/entity/WeblinkTag_entity/recordcontainers/db/conditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..1c1f407304637771e7d8691cb3a1bf85c5041942 --- /dev/null +++ b/entity/WeblinkTag_entity/recordcontainers/db/conditionProcess.js @@ -0,0 +1,5 @@ +import("system.vars"); +import("Sql_lib"); +import("system.result"); + +result.string(newWhereIfSet("WEBLINKTAG.WEBLINK_ID", vars.get("$param.WeblinkId_param")).toString()) \ No newline at end of file diff --git a/entity/Weblink_entity/Weblink_entity.aod b/entity/Weblink_entity/Weblink_entity.aod new file mode 100644 index 0000000000000000000000000000000000000000..d2e768f7f45fcbbbb135ca3f249a8f274f892847 --- /dev/null +++ b/entity/Weblink_entity/Weblink_entity.aod @@ -0,0 +1,242 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> + <name>Weblink_entity</name> + <title>Weblink</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <contentTitleProcess>%aditoprj%/entity/Weblink_entity/contentTitleProcess.js</contentTitleProcess> + <iconId>NEON:FILTER</iconId> + <titlePlural>Weblinks</titlePlural> + <recordContainer>db</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + </entityProvider> + <entityField> + <name>URL</name> + <title>Url</title> + <mandatory v="true" /> + <stateProcess>%aditoprj%/entity/Weblink_entity/entityfields/url/stateProcess.js</stateProcess> + <onValidation>%aditoprj%/entity/Weblink_entity/entityfields/url/onValidation.js</onValidation> + </entityField> + <entityField> + <name>WEBLINKID</name> + </entityField> + <entityField> + <name>DATE_NEW</name> + <valueProcess>%aditoprj%/entity/Weblink_entity/entityfields/date_new/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>USER_NEW</name> + <valueProcess>%aditoprj%/entity/Weblink_entity/entityfields/user_new/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>DATE_EDIT</name> + </entityField> + <entityField> + <name>USER_EDIT</name> + </entityField> + <entityField> + <name>SCORE</name> + <title>Score</title> + <contentType>NUMBER</contentType> + <outputFormat>#' Punkte'</outputFormat> + <valueProcess>%aditoprj%/entity/Weblink_entity/entityfields/score/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>LINKTYPE</name> + <title>Link Type</title> + <consumer>KeywordLinkType</consumer> + <mandatory v="true" /> + </entityField> + <entityField> + <name>Tags</name> + <title>Tags</title> + </entityField> + <entityConsumer> + <name>WebtrackingTags</name> + <selectionMode>MULTI</selectionMode> + <dependency> + <name>dependency</name> + <entityName>WeblinkTag_entity</entityName> + <fieldName>Tags</fieldName> + </dependency> + <children> + <entityParameter> + <name>WeblinkId_param</name> + <valueProcess>%aditoprj%/entity/Weblink_entity/entityfields/webtrackingtags/children/weblinkid_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityField> + <name>LINKTYPE_ICON</name> + <contentType>IMAGE</contentType> + <valueProcess>%aditoprj%/entity/Weblink_entity/entityfields/linktype_icon/valueProcess.js</valueProcess> + </entityField> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityConsumer> + <name>KeywordLinkType</name> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/Weblink_entity/entityfields/keywordlinktype/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityField> + <name>PLACEHOLDER</name> + <title>Placeholder</title> + <stateProcess>%aditoprj%/entity/Weblink_entity/entityfields/placeholder/stateProcess.js</stateProcess> + <displayValueProcess>%aditoprj%/entity/Weblink_entity/entityfields/placeholder/displayValueProcess.js</displayValueProcess> + <onValidation>%aditoprj%/entity/Weblink_entity/entityfields/placeholder/onValidation.js</onValidation> + </entityField> + <entityConsumer> + <name>Clicks</name> + <dependency> + <name>dependency</name> + <entityName>WeblinkClick_entity</entityName> + <fieldName>#PROVIDER</fieldName> + </dependency> + <children> + <entityParameter> + <name>WeblinkId_param</name> + </entityParameter> + </children> + </entityConsumer> + <entityConsumer> + <name>WorkflowDefinitions</name> + <dependency> + <name>dependency</name> + <entityName>WorkflowDefinition_entity</entityName> + <fieldName>#PROVIDER</fieldName> + </dependency> + </entityConsumer> + <entityField> + <name>WORKFLOWPROCESSDEFINITION_KEY</name> + <title>Workflow</title> + <consumer>WorkflowDefinitions</consumer> + <stateProcess>%aditoprj%/entity/Weblink_entity/entityfields/workflowprocessdefinition_key/stateProcess.js</stateProcess> + <displayValueProcess>%aditoprj%/entity/Weblink_entity/entityfields/workflowprocessdefinition_key/displayValueProcess.js</displayValueProcess> + </entityField> + <entityField> + <name>ISREDIRECT</name> + <title>Redirect</title> + <contentType>BOOLEAN</contentType> + <stateProcess>%aditoprj%/entity/Weblink_entity/entityfields/isredirect/stateProcess.js</stateProcess> + <valueProcess>%aditoprj%/entity/Weblink_entity/entityfields/isredirect/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>ACTION_TYPE</name> + <title>Action</title> + <consumer>KeywordActionTypes</consumer> + <stateProcess>%aditoprj%/entity/Weblink_entity/entityfields/action_type/stateProcess.js</stateProcess> + </entityField> + <entityConsumer> + <name>KeywordActionTypes</name> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/Weblink_entity/entityfields/keywordactiontypes/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityField> + <name>WORKFLOWSIGNAL_NAME</name> + <title>Signal</title> + <stateProcess>%aditoprj%/entity/Weblink_entity/entityfields/workflowsignal_name/stateProcess.js</stateProcess> + </entityField> + </entityFields> + <recordContainers> + <dbRecordContainer> + <name>db</name> + <conditionProcess>%aditoprj%/entity/Weblink_entity/recordcontainers/db/conditionProcess.js</conditionProcess> + <orderClauseProcess>%aditoprj%/entity/Weblink_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess> + <alias>Data_alias</alias> + <recordFieldMappings> + <dbRecordFieldMapping> + <name>DATE_EDIT.value</name> + <recordfield>WEBLINK.DATE_EDIT</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DATE_NEW.value</name> + <recordfield>WEBLINK.DATE_NEW</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>WEBLINKID.value</name> + <recordfield>WEBLINK.WEBLINKID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>SCORE.value</name> + <recordfield>WEBLINK.SCORE</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>URL.value</name> + <recordfield>WEBLINK.URL</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>LINKTYPE.value</name> + <recordfield>WEBLINK.LINKTYPE</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>USER_EDIT.value</name> + <recordfield>WEBLINK.USER_EDIT</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>USER_NEW.value</name> + <recordfield>WEBLINK.USER_NEW</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>Tags.value</name> + <expression>%aditoprj%/entity/Weblink_entity/recordcontainers/db/recordfieldmappings/tags.value/expression.js</expression> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>LINKTYPE.displayValue</name> + <expression>%aditoprj%/entity/Weblink_entity/recordcontainers/db/recordfieldmappings/linktype.displayvalue/expression.js</expression> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>PLACEHOLDER.value</name> + <recordfield>WEBLINK.PLACEHOLDER</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>WORKFLOWPROCESSDEFINITION_KEY.value</name> + <recordfield>WEBLINK.WORKFLOWPROCESSDEFINITION_KEY</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>ISREDIRECT.value</name> + <recordfield>WEBLINK.ISREDIRECT</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>ACTION_TYPE.value</name> + <recordfield>WEBLINK.ACTION_TYPE</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>WORKFLOWSIGNAL_NAME.value</name> + <recordfield>WEBLINK.WORKFLOWSIGNAL_NAME</recordfield> + </dbRecordFieldMapping> + </recordFieldMappings> + <linkInformation> + <linkInformation> + <name>d7ef8574-3b73-4435-93f6-74bb60a86c1b</name> + <tableName>WEBLINK</tableName> + <primaryKey>WEBLINKID</primaryKey> + <isUIDTable v="true" /> + <readonly v="false" /> + </linkInformation> + </linkInformation> + </dbRecordContainer> + </recordContainers> +</entity> diff --git a/entity/Duplicates_entity/entityfields/duplicatesunrelatedorganisationconsumer/children/targetentity/valueProcess.js b/entity/Weblink_entity/contentTitleProcess.js similarity index 56% rename from entity/Duplicates_entity/entityfields/duplicatesunrelatedorganisationconsumer/children/targetentity/valueProcess.js rename to entity/Weblink_entity/contentTitleProcess.js index ea14ae6b612db05a0e3a34e900ca16547f9ed208..532ae9cda8ed3a4a4678499bcee1c551ebe48021 100644 --- a/entity/Duplicates_entity/entityfields/duplicatesunrelatedorganisationconsumer/children/targetentity/valueProcess.js +++ b/entity/Weblink_entity/contentTitleProcess.js @@ -1,4 +1,4 @@ import("system.vars"); import("system.result"); -result.string("Organisation_entity"); \ No newline at end of file +result.string(vars.get("$field.URL")); \ No newline at end of file diff --git a/entity/Weblink_entity/entityfields/action_type/stateProcess.js b/entity/Weblink_entity/entityfields/action_type/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..eb0cd9f7f6fe891ffaba649ba6e36d28a5b8c0bc --- /dev/null +++ b/entity/Weblink_entity/entityfields/action_type/stateProcess.js @@ -0,0 +1,17 @@ +import("Util_lib"); +import("system.result"); +import("system.vars"); +import("KeywordRegistry_basic"); +import("system.neon"); + +var linktype = vars.get("$field.LINKTYPE"); +var isRedirect = Utils.toBoolean(vars.get("$field.ISREDIRECT")); + +if (linktype == $KeywordRegistry.weblinkType$EMail() && isRedirect) +{ + result.string(neon.COMPONENTSTATE_EDITABLE); +} +else +{ + result.string(neon.COMPONENTSTATE_INVISIBLE); +} \ No newline at end of file diff --git a/entity/Weblink_entity/entityfields/date_new/valueProcess.js b/entity/Weblink_entity/entityfields/date_new/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..83de1a18d6fcfe9926e5cc8f87cc552b779987f4 --- /dev/null +++ b/entity/Weblink_entity/entityfields/date_new/valueProcess.js @@ -0,0 +1,6 @@ +import("system.result"); +import("system.neon"); +import("system.vars"); + +if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW) + result.string(vars.get("$sys.date")); \ No newline at end of file diff --git a/entity/Weblink_entity/entityfields/isredirect/stateProcess.js b/entity/Weblink_entity/entityfields/isredirect/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..31b3cd25a65e38f049ef0a5fdfffcba9bd830d4a --- /dev/null +++ b/entity/Weblink_entity/entityfields/isredirect/stateProcess.js @@ -0,0 +1,15 @@ +import("system.result"); +import("system.vars"); +import("KeywordRegistry_basic"); +import("system.neon"); + +var linktype = vars.get("$field.LINKTYPE"); + +if (linktype == $KeywordRegistry.weblinkType$EMail()) +{ + result.string(neon.COMPONENTSTATE_EDITABLE); +} +else +{ + result.string(neon.COMPONENTSTATE_INVISIBLE); +} \ No newline at end of file diff --git a/entity/Weblink_entity/entityfields/isredirect/valueProcess.js b/entity/Weblink_entity/entityfields/isredirect/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..4e9b28e10759f126432a2a9d86d3684f4ac33ad2 --- /dev/null +++ b/entity/Weblink_entity/entityfields/isredirect/valueProcess.js @@ -0,0 +1,8 @@ +import("system.neon"); +import("system.result"); +import("system.vars"); + +if (!vars.get("$this.value") && vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW ) +{ + result.string("0"); +} \ No newline at end of file diff --git a/entity/Weblink_entity/entityfields/keywordactiontypes/children/containername_param/valueProcess.js b/entity/Weblink_entity/entityfields/keywordactiontypes/children/containername_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..e2c2914556c6e5c59be1bec07528c80d65f520db --- /dev/null +++ b/entity/Weblink_entity/entityfields/keywordactiontypes/children/containername_param/valueProcess.js @@ -0,0 +1,4 @@ +import("KeywordRegistry_basic"); +import("system.result"); + +result.string($KeywordRegistry.weblinkActionType()); \ No newline at end of file diff --git a/entity/Weblink_entity/entityfields/keywordlinktype/children/containername_param/valueProcess.js b/entity/Weblink_entity/entityfields/keywordlinktype/children/containername_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..05de1cabb8d01404fedbb9bae7b14749fb75b9a2 --- /dev/null +++ b/entity/Weblink_entity/entityfields/keywordlinktype/children/containername_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.result"); +import("KeywordRegistry_basic"); + +result.string($KeywordRegistry.weblinkType()); \ No newline at end of file diff --git a/entity/Weblink_entity/entityfields/linktype_icon/valueProcess.js b/entity/Weblink_entity/entityfields/linktype_icon/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..2378458ad3051dcd29b6a54ea0558156d9747ff5 --- /dev/null +++ b/entity/Weblink_entity/entityfields/linktype_icon/valueProcess.js @@ -0,0 +1,11 @@ +import("system.result"); +import("system.vars"); + +var res = "" +if(vars.get("$field.LINKTYPE") == 1)//leadforensics + res = "NEON:IMPORT" + +if(vars.get("$field.LINKTYPE")=="EMAIL") + res = "VAADIN:MAILBOX" + +result.string(res); \ No newline at end of file diff --git a/entity/Weblink_entity/entityfields/placeholder/displayValueProcess.js b/entity/Weblink_entity/entityfields/placeholder/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..f02de4a47ade61409736bc698d4c448149eadc2e --- /dev/null +++ b/entity/Weblink_entity/entityfields/placeholder/displayValueProcess.js @@ -0,0 +1,10 @@ +import("system.result"); +import("system.vars"); +import("Placeholder_lib"); + +var placeholder = vars.get("$field.PLACEHOLDER"); + +if (placeholder) +{ + result.string(PlaceholderUtils.formatPlaceholder(placeholder)); +} \ No newline at end of file diff --git a/entity/Weblink_entity/entityfields/placeholder/onValidation.js b/entity/Weblink_entity/entityfields/placeholder/onValidation.js new file mode 100644 index 0000000000000000000000000000000000000000..8871cd11363addcacdd59d2d79ec312db1973437 --- /dev/null +++ b/entity/Weblink_entity/entityfields/placeholder/onValidation.js @@ -0,0 +1,22 @@ +import("system.result"); +import("system.vars"); +import("Placeholder_lib"); +import("Sql_lib"); + +if (vars.get("$local.value")) +{ + var defaultPlaceholders = PlaceholderUtils.getPlaceholders(); + var linkPlaceholders = newSelect("WEBLINK.PLACEHOLDER") + .from("WEBLINK") + .where("WEBLINK.WEBLINKID", vars.get("$field.WEBLINKID"), SqlBuilder.NOT_EQUAL()) + .and("WEBLINK.PLACEHOLDER is not null") + .arrayColumn(); + + var defaultPlaceholderNames = defaultPlaceholders.map(function(placeholder){return placeholder.placeholderName}); + + if(defaultPlaceholderNames.includes(vars.get("$local.value")) || linkPlaceholders.includes(vars.get("$local.value"))) + { + result.string("Placeholders must be unique") + } + +} \ No newline at end of file diff --git a/entity/Weblink_entity/entityfields/placeholder/stateProcess.js b/entity/Weblink_entity/entityfields/placeholder/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..9be3319eefba688cc1103d3f86a6275d936b0f10 --- /dev/null +++ b/entity/Weblink_entity/entityfields/placeholder/stateProcess.js @@ -0,0 +1,13 @@ +import("system.result"); +import("system.vars"); +import("KeywordRegistry_basic"); +import("system.neon"); + + +var linktype = vars.get("$field.LINKTYPE") +var res = neon.COMPONENTSTATE_INVISIBLE +if (linktype == $KeywordRegistry.weblinkType$EMail()) +{ + res = neon.COMPONENTSTATE_EDITABLE; +} +result.string(res); \ No newline at end of file diff --git a/entity/Weblink_entity/entityfields/score/valueProcess.js b/entity/Weblink_entity/entityfields/score/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..73553d1782a7e8f4182dee2a7abf23aeb48da737 --- /dev/null +++ b/entity/Weblink_entity/entityfields/score/valueProcess.js @@ -0,0 +1,7 @@ +import("system.vars"); +import("system.result"); +import("system.neon"); + + +if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) + result.string(0) \ No newline at end of file diff --git a/entity/Weblink_entity/entityfields/url/onValidation.js b/entity/Weblink_entity/entityfields/url/onValidation.js new file mode 100644 index 0000000000000000000000000000000000000000..789eb86303fe57cc5de8c7bc23d243d90c03d6c4 --- /dev/null +++ b/entity/Weblink_entity/entityfields/url/onValidation.js @@ -0,0 +1,16 @@ +import("system.translate"); +import("system.result"); +import("system.neon"); +import("system.vars"); +import("Sql_lib"); + +if (vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW && vars.get("$local.value")) +{ + if (newSelect("URL").from("WEBLINK").where("WEBLINK.URL", vars.get("$local.value")).cell()) + result.string(translate.text("Url must be unique")); + + if (vars.get("$field.ISREDIRECT") == "1" && !/^(?:http(s)?:\/\/)[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]+$/g.test(vars.get("$local.value"))) + { + result.string(translate.text("Redirect needs a full Url with http/https")); + } +} diff --git a/entity/Weblink_entity/entityfields/url/stateProcess.js b/entity/Weblink_entity/entityfields/url/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..d20b8d2ca5be994c533a30296e168cc01a62a9e2 --- /dev/null +++ b/entity/Weblink_entity/entityfields/url/stateProcess.js @@ -0,0 +1,9 @@ +import("system.neon"); +import("system.result"); +import("system.vars"); +import("KeywordRegistry_basic"); + +if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW || vars.get("$field.LINKTYPE") == $KeywordRegistry.weblinkType$EMail()) + result.string(neon.COMPONENTSTATE_EDITABLE) +else + result.string(neon.COMPONENTSTATE_READONLY) \ No newline at end of file diff --git a/entity/Weblink_entity/entityfields/user_new/valueProcess.js b/entity/Weblink_entity/entityfields/user_new/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..b9c2b5e127b9ecbf3ad03794b46e3dbad137f25b --- /dev/null +++ b/entity/Weblink_entity/entityfields/user_new/valueProcess.js @@ -0,0 +1,5 @@ +import("system.result"); +import("system.neon"); +import("system.vars"); +if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW) + result.string(vars.get("$sys.user")); \ No newline at end of file diff --git a/entity/Weblink_entity/entityfields/webtrackingtags/children/weblinkid_param/valueProcess.js b/entity/Weblink_entity/entityfields/webtrackingtags/children/weblinkid_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..39f7dede612ab2f9b2256dbde6b40f846fbca0d3 --- /dev/null +++ b/entity/Weblink_entity/entityfields/webtrackingtags/children/weblinkid_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("system.result"); + +result.string(vars.get("$field.WEBLINKID")); \ No newline at end of file diff --git a/entity/Weblink_entity/entityfields/workflowprocessdefinition_key/displayValueProcess.js b/entity/Weblink_entity/entityfields/workflowprocessdefinition_key/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..4172453ca7446af20c19646ab6677cb871c5f06b --- /dev/null +++ b/entity/Weblink_entity/entityfields/workflowprocessdefinition_key/displayValueProcess.js @@ -0,0 +1,5 @@ +import("system.vars"); +import("system.result"); +import("Context_lib"); + +result.string(ContextUtils.loadContentTitle("WorkflowDefinition_entity", vars.get("$field.WORKFLOWPROCESSDEFINITION_KEY"))); \ No newline at end of file diff --git a/entity/Weblink_entity/entityfields/workflowprocessdefinition_key/stateProcess.js b/entity/Weblink_entity/entityfields/workflowprocessdefinition_key/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..0fa195d165620e2a55ad7a61c9e62d80733246d9 --- /dev/null +++ b/entity/Weblink_entity/entityfields/workflowprocessdefinition_key/stateProcess.js @@ -0,0 +1,18 @@ +import("Util_lib"); +import("system.result"); +import("system.vars"); +import("KeywordRegistry_basic"); +import("system.neon"); + +var linktype = vars.get("$field.LINKTYPE"); +var isRedirect = Utils.toBoolean(vars.get("$field.ISREDIRECT")); +var actionType = vars.get("$field.ACTION_TYPE"); + +if (linktype == $KeywordRegistry.weblinkType$EMail() && isRedirect && actionType == $KeywordRegistry.weblinkActionType$startWorkflow()) +{ + result.string(neon.COMPONENTSTATE_EDITABLE); +} +else +{ + result.string(neon.COMPONENTSTATE_INVISIBLE); +} \ No newline at end of file diff --git a/entity/Weblink_entity/entityfields/workflowsignal_name/stateProcess.js b/entity/Weblink_entity/entityfields/workflowsignal_name/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..a5de238dc97d0f34d8e98e709ed2c41aa6a36fba --- /dev/null +++ b/entity/Weblink_entity/entityfields/workflowsignal_name/stateProcess.js @@ -0,0 +1,18 @@ +import("Util_lib"); +import("system.result"); +import("system.vars"); +import("KeywordRegistry_basic"); +import("system.neon"); + +var linktype = vars.get("$field.LINKTYPE"); +var isRedirect = Utils.toBoolean(vars.get("$field.ISREDIRECT")); +var actionType = vars.get("$field.ACTION_TYPE"); + +if (linktype == $KeywordRegistry.weblinkType$EMail() && isRedirect && actionType == $KeywordRegistry.weblinkActionType$sendWorkflowSignal()) +{ + result.string(neon.COMPONENTSTATE_EDITABLE); +} +else +{ + result.string(neon.COMPONENTSTATE_INVISIBLE); +} \ No newline at end of file diff --git a/entity/Weblink_entity/recordcontainers/db/conditionProcess.js b/entity/Weblink_entity/recordcontainers/db/conditionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..8c1d7a1352f22e5f793e5a600e690357bdaf62fd --- /dev/null +++ b/entity/Weblink_entity/recordcontainers/db/conditionProcess.js @@ -0,0 +1,10 @@ +import("system.result"); +import("system.result"); +import("Sql_lib"); + + +var cond = newWhere(); + +cond.and("url not like '/fileadmin/uploads/Dokumente/%' "); + +result.string(cond.toString()); \ No newline at end of file diff --git a/entity/Weblink_entity/recordcontainers/db/orderClauseProcess.js b/entity/Weblink_entity/recordcontainers/db/orderClauseProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..38161951b9087fbc4b8c50bf683c86f7739c834e --- /dev/null +++ b/entity/Weblink_entity/recordcontainers/db/orderClauseProcess.js @@ -0,0 +1,5 @@ +import("system.result"); +import("system.db"); +result.object({ + "WEBLINK.URL": db.ASCENDING +}); \ No newline at end of file diff --git a/entity/Weblink_entity/recordcontainers/db/recordfieldmappings/linktype.displayvalue/expression.js b/entity/Weblink_entity/recordcontainers/db/recordfieldmappings/linktype.displayvalue/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..92a7316b871e779d6a203b3bcc72352f3f95cc15 --- /dev/null +++ b/entity/Weblink_entity/recordcontainers/db/recordfieldmappings/linktype.displayvalue/expression.js @@ -0,0 +1,5 @@ +import("system.result"); +import("Keyword_lib"); +import("KeywordRegistry_basic"); + +result.string(KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.weblinkType(), "WEBLINK.LINKTYPE")); \ No newline at end of file diff --git a/entity/Weblink_entity/recordcontainers/db/recordfieldmappings/tags.value/expression.js b/entity/Weblink_entity/recordcontainers/db/recordfieldmappings/tags.value/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..cc71aa0d01711dcadf67a55903df7ee3499f5e89 --- /dev/null +++ b/entity/Weblink_entity/recordcontainers/db/recordfieldmappings/tags.value/expression.js @@ -0,0 +1,3 @@ +import("system.result"); +result.string("(SELECT GROUP_CONCAT(CONCAT(' ', TITLE)) from ab_keyword_entry join WEBLINKTAG on " ++" KEYID = WEBLINKTAG.TAG join ab_keyword_category on ab_keyword_category_id = ab_keyword_categoryid where WEBLINKTAG.WEBLINK_ID = WEBLINKID and AB_KEYWORD_CATEGORY.NAME = 'WeblinkTags')"); \ No newline at end of file diff --git a/entity/WorkflowDefinitionStore_entity/WorkflowDefinitionStore_entity.aod b/entity/WorkflowDefinitionStore_entity/WorkflowDefinitionStore_entity.aod new file mode 100644 index 0000000000000000000000000000000000000000..c5b314b15944ca13faa9f35b0ff3495c3c7438ca --- /dev/null +++ b/entity/WorkflowDefinitionStore_entity/WorkflowDefinitionStore_entity.aod @@ -0,0 +1,67 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> + <name>WorkflowDefinitionStore_entity</name> + <title>Workflow definitions</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <documentation>%aditoprj%/entity/WorkflowDefinitionStore_entity/documentation.adoc</documentation> + <recordContainer>dataless</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + </entityProvider> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityField> + <name>selectedWorkflows</name> + <consumer>StandardWorkflows</consumer> + </entityField> + <entityConsumer> + <name>StandardWorkflows</name> + <dependency> + <name>dependency</name> + <entityName>StandardWorkflow_entity</entityName> + <fieldName>#PROVIDER</fieldName> + </dependency> + <children> + <entityParameter> + <name>ExcludeExisting_param</name> + <valueProcess>%aditoprj%/entity/WorkflowDefinitionStore_entity/entityfields/standardworkflows/children/excludeexisting_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityActionField> + <name>deploySelectedWorkflow</name> + <title>Add selected workflow</title> + <onActionProcess>%aditoprj%/entity/WorkflowDefinitionStore_entity/entityfields/deployselectedworkflow/onActionProcess.js</onActionProcess> + <iconId>VAADIN:PLUS</iconId> + <stateProcess>%aditoprj%/entity/WorkflowDefinitionStore_entity/entityfields/deployselectedworkflow/stateProcess.js</stateProcess> + </entityActionField> + <entityActionField> + <name>deployAllWorkflows</name> + <title>Add all</title> + <onActionProcess>%aditoprj%/entity/WorkflowDefinitionStore_entity/entityfields/deployallworkflows/onActionProcess.js</onActionProcess> + <iconId>VAADIN:PLUS_CIRCLE</iconId> + </entityActionField> + <entityField> + <name>excludeExisting</name> + <title>Exclude existing workflows</title> + <contentType>BOOLEAN</contentType> + <state>EDITABLE</state> + </entityField> + <entityActionField> + <name>downloadSelectedWorkflow</name> + <title>Download selected workflow</title> + <onActionProcess>%aditoprj%/entity/WorkflowDefinitionStore_entity/entityfields/downloadselectedworkflow/onActionProcess.js</onActionProcess> + <iconId>VAADIN:DOWNLOAD</iconId> + <stateProcess>%aditoprj%/entity/WorkflowDefinitionStore_entity/entityfields/downloadselectedworkflow/stateProcess.js</stateProcess> + </entityActionField> + </entityFields> + <recordContainers> + <datalessRecordContainer> + <name>dataless</name> + <alias>Data_alias</alias> + </datalessRecordContainer> + </recordContainers> +</entity> diff --git a/entity/WorkflowDefinitionStore_entity/documentation.adoc b/entity/WorkflowDefinitionStore_entity/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..608df1a5bed24a00633b573fdb23c5fcc9edc960 --- /dev/null +++ b/entity/WorkflowDefinitionStore_entity/documentation.adoc @@ -0,0 +1,9 @@ += WorkflowDefinitionStore_entity + +The purpose of this entity is to display all the standard workflow definitions that can be imported into the system. It provides an overlay +where the workflows can be selected and deployed with the actions of this entity. + +Standard workflows are handled this way because the workflow engine is running inside its own service with an own database. That's why these workflows +cannot be inserted directly with liquibase. Instead, the standard workflows are stored in a database table on the ADITO side, and can be transferred +to the workflow service using this entity. An additional advantage of this solution is better flexibility, as it makes using the standard workflows +optional, the admin can choose in the client what workflow definitions to deploy. \ No newline at end of file diff --git a/entity/WorkflowDefinitionStore_entity/entityfields/deployallworkflows/onActionProcess.js b/entity/WorkflowDefinitionStore_entity/entityfields/deployallworkflows/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..880fea03eb11fc77dc47c8abac8c80b4cd409a0a --- /dev/null +++ b/entity/WorkflowDefinitionStore_entity/entityfields/deployallworkflows/onActionProcess.js @@ -0,0 +1,27 @@ +import("Util_lib"); +import("system.neon"); +import("system.util"); +import("system.workflow"); +import("Sql_lib"); +import("system.vars"); + +var workflowSql = newSelect(["PROCESSKEY", "PROCESSXML"]).from("STANDARD_WORKFLOW"); + +var isExcludeExisting = Utils.toBoolean(vars.get("$field.excludeExisting")); +if (isExcludeExisting) +{ + var existingWorkflows = JSON.parse(workflow.getProcessDefinitions(workflow.createConfigForLoadingProcessDefinitions())); + var existingKeys = existingWorkflows.map(function (workflowDefinition) + { + return workflowDefinition.key; + }); + workflowSql.whereIfSet("STANDARD_WORKFLOW.PROCESSKEY", existingKeys, SqlBuilder.NOT_IN()); +} + +workflowSql.table().forEach(function ([key, processXml]) +{ + processXml = util.decodeBase64String(processXml); + workflow.deployProcess(key, processXml); +}); + +neon.refreshAll(); \ No newline at end of file diff --git a/entity/WorkflowDefinitionStore_entity/entityfields/deployselectedworkflow/onActionProcess.js b/entity/WorkflowDefinitionStore_entity/entityfields/deployselectedworkflow/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..185311ec1d7c36acba219f2882935845e3339a77 --- /dev/null +++ b/entity/WorkflowDefinitionStore_entity/entityfields/deployselectedworkflow/onActionProcess.js @@ -0,0 +1,16 @@ +import("system.neon"); +import("system.util"); +import("system.workflow"); +import("Sql_lib"); +import("system.vars"); + +var workflowId = vars.get("$field.selectedWorkflows"); +var [key, processXml] = newSelect(["PROCESSKEY", "PROCESSXML"]) + .from("STANDARD_WORKFLOW") + .where("STANDARD_WORKFLOW.STANDARD_WORKFLOWID", workflowId) + .arrayRow(); + +processXml = util.decodeBase64String(processXml); +workflow.deployProcess(key, processXml); + +neon.refreshAll(); \ No newline at end of file diff --git a/entity/WorkflowDefinitionStore_entity/entityfields/deployselectedworkflow/stateProcess.js b/entity/WorkflowDefinitionStore_entity/entityfields/deployselectedworkflow/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..a0cbee140b30c3f499f7b5d86f1dbcbfcc4172e4 --- /dev/null +++ b/entity/WorkflowDefinitionStore_entity/entityfields/deployselectedworkflow/stateProcess.js @@ -0,0 +1,10 @@ +import("system.result"); +import("system.vars"); +import("system.neon"); + +var state = neon.COMPONENTSTATE_DISABLED; +if (vars.get("$field.selectedWorkflows")) +{ + state = neon.COMPONENTSTATE_EDITABLE; +} +result.string(state); \ No newline at end of file diff --git a/entity/WorkflowDefinitionStore_entity/entityfields/downloadselectedworkflow/onActionProcess.js b/entity/WorkflowDefinitionStore_entity/entityfields/downloadselectedworkflow/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..94d54bfc7c37cf8dba90c930ab85a7585aae19df --- /dev/null +++ b/entity/WorkflowDefinitionStore_entity/entityfields/downloadselectedworkflow/onActionProcess.js @@ -0,0 +1,13 @@ +import("system.neon"); +import("system.util"); +import("system.workflow"); +import("Sql_lib"); +import("system.vars"); + +var workflowId = vars.get("$field.selectedWorkflows"); +var [name, processXml] = newSelect(["NAME", "PROCESSXML"]) + .from("STANDARD_WORKFLOW") + .where("STANDARD_WORKFLOW.STANDARD_WORKFLOWID", workflowId) + .arrayRow(); + +neon.download(processXml, name + ".xml"); \ No newline at end of file diff --git a/entity/WorkflowDefinitionStore_entity/entityfields/downloadselectedworkflow/stateProcess.js b/entity/WorkflowDefinitionStore_entity/entityfields/downloadselectedworkflow/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..a0cbee140b30c3f499f7b5d86f1dbcbfcc4172e4 --- /dev/null +++ b/entity/WorkflowDefinitionStore_entity/entityfields/downloadselectedworkflow/stateProcess.js @@ -0,0 +1,10 @@ +import("system.result"); +import("system.vars"); +import("system.neon"); + +var state = neon.COMPONENTSTATE_DISABLED; +if (vars.get("$field.selectedWorkflows")) +{ + state = neon.COMPONENTSTATE_EDITABLE; +} +result.string(state); \ No newline at end of file diff --git a/entity/WorkflowDefinitionStore_entity/entityfields/standardworkflows/children/excludeexisting_param/valueProcess.js b/entity/WorkflowDefinitionStore_entity/entityfields/standardworkflows/children/excludeexisting_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..60469fabc553bfe606d029a532264f4aec07c9a8 --- /dev/null +++ b/entity/WorkflowDefinitionStore_entity/entityfields/standardworkflows/children/excludeexisting_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("system.result"); + +result.string(vars.get("$field.excludeExisting")); \ No newline at end of file diff --git a/entity/WorkflowDefinition_entity/WorkflowDefinition_entity.aod b/entity/WorkflowDefinition_entity/WorkflowDefinition_entity.aod index 17bfa5940323c1306ad8b4a09841f9e3cc53e973..eae978b187ac5bf1a41def9a0639c7cc7da41577 100644 --- a/entity/WorkflowDefinition_entity/WorkflowDefinition_entity.aod +++ b/entity/WorkflowDefinition_entity/WorkflowDefinition_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>WorkflowDefinition_entity</name> <title>Workflow Definition</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -15,20 +15,6 @@ <entityProvider> <name>#PROVIDER</name> <lookupIdfield>KEY</lookupIdfield> - <dependencies> - <entityDependency> - <name>e68df135-cdc4-46c4-9ca2-1712145ebe5d</name> - <entityName>WorkflowInstance_entity</entityName> - <fieldName>WorkflowDefinitions</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>8c60efea-5fa1-4df0-a6bb-9fadcc88554c</name> - <entityName>WorkflowLauncher_entity</entityName> - <fieldName>WorkflowDefinitions</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>UID</name> @@ -226,6 +212,13 @@ <isObjectAction v="false" /> <iconId>NEON:PLUS</iconId> </entityActionField> + <entityActionField> + <name>openStore</name> + <title>Standard workflows</title> + <onActionProcess>%aditoprj%/entity/WorkflowDefinition_entity/entityfields/tableactions/children/openstore/onActionProcess.js</onActionProcess> + <isObjectAction v="false" /> + <iconId>VAADIN:PACKAGE</iconId> + </entityActionField> </children> </entityActionGroup> <entityActionField> diff --git a/entity/WorkflowDefinition_entity/entityfields/tableactions/children/openstore/onActionProcess.js b/entity/WorkflowDefinition_entity/entityfields/tableactions/children/openstore/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..dec35f2444423141abf1d9fcef1829bc1d4489ae --- /dev/null +++ b/entity/WorkflowDefinition_entity/entityfields/tableactions/children/openstore/onActionProcess.js @@ -0,0 +1,3 @@ +import("system.neon"); + +neon.openContext("WorkflowDefinitionStore", "WorkflowDefinitionStore_view", null, neon.OPERATINGSTATE_VIEW, {}); \ No newline at end of file diff --git a/entity/WorkflowInstanceHistory_entity/WorkflowInstanceHistory_entity.aod b/entity/WorkflowInstanceHistory_entity/WorkflowInstanceHistory_entity.aod index 2ca484e8dd1742dd952588ea6501469843056906..183cada70540e2204fea477b21980acbd37af008 100644 --- a/entity/WorkflowInstanceHistory_entity/WorkflowInstanceHistory_entity.aod +++ b/entity/WorkflowInstanceHistory_entity/WorkflowInstanceHistory_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>WorkflowInstanceHistory_entity</name> <title>History</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -53,14 +53,6 @@ <targetIdField>TASK_ID</targetIdField> <documentation>%aditoprj%/entity/WorkflowInstanceHistory_entity/entityfields/historyforworkflowinstance/documentation.adoc</documentation> <titlePlural>History</titlePlural> - <dependencies> - <entityDependency> - <name>dae4ffad-5627-46b5-bf4c-b3b8490d4a29</name> - <entityName>WorkflowInstance_entity</entityName> - <fieldName>History</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>ICON</name> diff --git a/entity/WorkflowInstance_entity/WorkflowInstance_entity.aod b/entity/WorkflowInstance_entity/WorkflowInstance_entity.aod index ecdc057e397f87bea6051e6797f820fb170545b2..af630567187988000258a1d95e9c61d936d1fda1 100644 --- a/entity/WorkflowInstance_entity/WorkflowInstance_entity.aod +++ b/entity/WorkflowInstance_entity/WorkflowInstance_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>WorkflowInstance_entity</name> <title>Workflow instance</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -19,14 +19,6 @@ <entityProvider> <name>InstancesOfWorkflow</name> <documentation>%aditoprj%/entity/WorkflowInstance_entity/entityfields/instancesofworkflow/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>96f047cf-7f3b-417e-ac08-9dc231c5d0ac</name> - <entityName>WorkflowDefinition_entity</entityName> - <fieldName>Instances</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityParameter> <name>WorkflowDefinitionId_param</name> diff --git a/entity/WorkflowLauncher_entity/WorkflowLauncher_entity.aod b/entity/WorkflowLauncher_entity/WorkflowLauncher_entity.aod index f33bea3edcaa3205f2f185b9d33422e940fbd82a..876a676e433409f72f642c45e353fbebc22efca9 100644 --- a/entity/WorkflowLauncher_entity/WorkflowLauncher_entity.aod +++ b/entity/WorkflowLauncher_entity/WorkflowLauncher_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>WorkflowLauncher_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/WorkflowLauncher_entity/documentation.adoc</documentation> diff --git a/entity/WorkflowModel_entity/WorkflowModel_entity.aod b/entity/WorkflowModel_entity/WorkflowModel_entity.aod index 674696c52739d76ac96b4dd2ccd79a59e54d53bf..e4c027090fba6135e37dba8479796804240e4bb1 100644 --- a/entity/WorkflowModel_entity/WorkflowModel_entity.aod +++ b/entity/WorkflowModel_entity/WorkflowModel_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>WorkflowModel_entity</name> <title>Workflow Model</title> <majorModelMode>DISTRIBUTED</majorModelMode> diff --git a/entity/WorkflowSignal_entity/WorkflowSignal_entity.aod b/entity/WorkflowSignal_entity/WorkflowSignal_entity.aod index a64a66745a095455ea7bfa4a3134cd0fe135b180..2e5432914570dff181579533db28da26f0d1aab8 100644 --- a/entity/WorkflowSignal_entity/WorkflowSignal_entity.aod +++ b/entity/WorkflowSignal_entity/WorkflowSignal_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>WorkflowSignal_entity</name> <title>Signal</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -80,14 +80,6 @@ <entityProvider> <name>ProcessDefinitionSignals</name> <documentation>%aditoprj%/entity/WorkflowSignal_entity/entityfields/processdefinitionsignals/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>f08ff63c-296a-4b1f-8264-b6b1e6c1d748</name> - <entityName>WorkflowDefinition_entity</entityName> - <fieldName>Signals</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>PROCESSDEFINITION_KEY</name> diff --git a/entity/WorkflowSignal_entity/entityfields/contexts/children/blacklist_param/valueProcess.js b/entity/WorkflowSignal_entity/entityfields/contexts/children/blacklist_param/valueProcess.js index b8dcc60644aa4dbb344116dfb4f851a269055e2b..3e844ef887ec7ba17bc82a8dae76a2fcde0229b6 100644 --- a/entity/WorkflowSignal_entity/entityfields/contexts/children/blacklist_param/valueProcess.js +++ b/entity/WorkflowSignal_entity/entityfields/contexts/children/blacklist_param/valueProcess.js @@ -18,5 +18,7 @@ result.object([ "Salesproject", "SerialLetter", "SupportTicket", - "Task" + "Task", + "Advertising", + "AdvertisingItem" ]); \ No newline at end of file diff --git a/entity/WorkflowStartConfig_entity/WorkflowStartConfig_entity.aod b/entity/WorkflowStartConfig_entity/WorkflowStartConfig_entity.aod index dde2a612a51ebc947a7c5f96d59effd665d91992..2ee19112c2fe024c4a735a5cce609896ea2ae2bd 100644 --- a/entity/WorkflowStartConfig_entity/WorkflowStartConfig_entity.aod +++ b/entity/WorkflowStartConfig_entity/WorkflowStartConfig_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>WorkflowStartConfig_entity</name> <title>Usage</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -38,14 +38,6 @@ </entityParameter> <entityProvider> <name>StartConfig</name> - <dependencies> - <entityDependency> - <name>16a810bd-b531-425c-8677-11d16f9456e4</name> - <entityName>WorkflowDefinition_entity</entityName> - <fieldName>StartConfigs</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityConsumer> <name>Contexts</name> diff --git a/entity/WorkflowTask_entity/WorkflowTask_entity.aod b/entity/WorkflowTask_entity/WorkflowTask_entity.aod index f686333ba78f732e4a59061abd44b4c146be7a75..2c7b0ff1bca7ed5d54281a7d5a0ad1754eaf4d88 100644 --- a/entity/WorkflowTask_entity/WorkflowTask_entity.aod +++ b/entity/WorkflowTask_entity/WorkflowTask_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>WorkflowTask_entity</name> <title>Task</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -14,14 +14,6 @@ <entityFields> <entityProvider> <name>#PROVIDER</name> - <dependencies> - <entityDependency> - <name>f199d701-3d7a-4dbe-abf5-2f5e598e9839</name> - <entityName>WorkflowDefinition_entity</entityName> - <fieldName>Tasks</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>UID</name> @@ -77,14 +69,6 @@ <entityProvider> <name>InstanceTasks</name> <documentation>%aditoprj%/entity/WorkflowTask_entity/entityfields/instancetasks/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>5913327f-1bb4-48b8-846e-639274290cee</name> - <entityName>WorkflowInstance_entity</entityName> - <fieldName>Tasks</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>OnlyFinishedTasks_param</name> @@ -185,14 +169,6 @@ <entityProvider> <name>FinishedInstanceTasks</name> <documentation>%aditoprj%/entity/WorkflowTask_entity/entityfields/finishedinstancetasks/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>d5d39281-0183-42fa-960a-01347cddc85a</name> - <entityName>WorkflowInstance_entity</entityName> - <fieldName>FinishedTasks</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>OnlyFinishedTasks_param</name> @@ -227,7 +203,7 @@ <title>Complete tasks</title> <onActionProcess>%aditoprj%/entity/WorkflowTask_entity/entityfields/tableactions/children/completemultipletasks/onActionProcess.js</onActionProcess> <isObjectAction v="false" /> - <isSelectionAction v="true" /> + <selectionType>MULTI</selectionType> <iconId>VAADIN:CHECK</iconId> <stateProcess>%aditoprj%/entity/WorkflowTask_entity/entityfields/tableactions/children/completemultipletasks/stateProcess.js</stateProcess> </entityActionField> diff --git a/entity/WorkflowVariableValue_entity/WorkflowVariableValue_entity.aod b/entity/WorkflowVariableValue_entity/WorkflowVariableValue_entity.aod index 76e08b7ad6b6eb6e33adab9d93c38e2fc5b8701a..6bdb790952fd2dcc395f534eb26db19e10717e31 100644 --- a/entity/WorkflowVariableValue_entity/WorkflowVariableValue_entity.aod +++ b/entity/WorkflowVariableValue_entity/WorkflowVariableValue_entity.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.21" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.21"> <name>WorkflowVariableValue_entity</name> <title>Variable</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -32,14 +32,6 @@ <entityProvider> <name>VariablesOfInstance</name> <documentation>%aditoprj%/entity/WorkflowVariableValue_entity/entityfields/variablesofinstance/documentation.adoc</documentation> - <dependencies> - <entityDependency> - <name>b10924d7-0ba4-4268-8b2f-383e7cf6045c</name> - <entityName>WorkflowInstance_entity</entityName> - <fieldName>Variables</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityParameter> <name>WorkflowInstanceId_param</name> diff --git a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index a147fbceb5578dc7cc49da5e3b1f6488d401059e..2bcd082e9852e811fa7d17eac11642a17ee133bb 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -589,7 +589,7 @@ <key>Timetracking</key> </entry> <entry> - <key>Further informations</key> + <key>Further information</key> </entry> <entry> <key>Social</key> @@ -8062,7 +8062,7 @@ <key>by sorting</key> </entry> <entry> - <key>Starts the serverprocess manually, which will recalculate all (potentially) outdated classifications. Use this after changes to the configuration of classifications.</key> + <key>Starts the server process manually, which will recalculate all (potentially) outdated classifications. This process should be executed after changes to the classification configuration.</key> </entry> <entry> <key>Recalculate Classifications</key> @@ -8071,11 +8071,17 @@ <key>Are you sure you want to recalculate all classifications using the current classificationgradings? This can take some time, since ALL classifications will get freshly calculated and updated if needed.</key> </entry> <entry> - <key>Starts the serverprocess manually, which will recalculate all classifications from scratch. Only do this after e.g importing data from elsewhere where the outdated flag couldn't been set correctly. Since this can take some time.</key> + <key>Starts the server process manually, which will recalculate all classifications from scratch. This process should only be executed after importing data from elsewhere, where the outdated flag couldn't be set correctly, since this can take some time.</key> </entry> <entry> <key>EML files can't be edited here. You can download, edit and reupload the template to change the content.</key> </entry> + <entry> + <key>The duplicate row corrosponding to %0 has been rebuild</key> + </entry> + <entry> + <key>Duplicaterow rebuild</key> + </entry> <entry> <key>Edit HTML</key> </entry> @@ -8088,6 +8094,30 @@ <entry> <key>Add to offer</key> </entry> + <entry> + <key>Event Data</key> + </entry> + <entry> + <key>On Site</key> + </entry> + <entry> + <key>Event Type</key> + </entry> + <entry> + <key>Event Begin</key> + </entry> + <entry> + <key>Event</key> + </entry> + <entry> + <key>other</key> + </entry> + <entry> + <key>Event End</key> + </entry> + <entry> + <key>On site</key> + </entry> <entry> <key>Participant is already participating</key> </entry> @@ -8101,46 +8131,115 @@ <key>Traits have already been defined for this salesproject phase.</key> </entry> <entry> - <key>Event Data</key> + <key>New child product</key> </entry> <entry> - <key>On Site</key> + <key>Communication: Link</key> </entry> <entry> - <key>Event Type</key> + <key>Communication: Phone</key> </entry> <entry> - <key>New child product</key> + <key>Communication: Mail</key> </entry> <entry> - <key>Communication: Link</key> + <key>Vacation</key> </entry> <entry> - <key>Event Begin</key> + <key>Price could not be determined</key> </entry> <entry> - <key>Communication: Phone</key> + <key>Channel type</key> </entry> <entry> - <key>Event</key> + <key>Allowed</key> </entry> <entry> - <key>other</key> + <key>Rejected</key> </entry> <entry> - <key>Communication: Mail</key> + <key>Communication Settings</key> </entry> <entry> - <key>Vacation</key> + <key>Advertising</key> </entry> <entry> - <key>Event End</key> + <key>Test Recipient</key> </entry> <entry> - <key>On site</key> + <key>Remove Test Recipient</key> </entry> <entry> - <key>Price could not be determined</key> + <key>Set Test Recipient</key> + </entry> + <entry> + <key>Test Run Actions</key> + </entry> + <entry> + <key>Test Recipients</key> + </entry> + <entry> + <key>Object not found</key> + </entry> + <entry> + <key>Use for test run</key> + </entry> + <entry> + <key>Don't use for test run</key> + </entry> + <entry> + <key>Interest</key> + </entry> + <entry> + <key>Subscribed</key> + </entry> + <entry> + <key>Not subscribed</key> + </entry> + <entry> + <key>Test Run</key> + </entry> + <entry> + <key>Placeholder</key> + </entry> + <entry> + <key>Link Type</key> + </entry> + <entry> + <key>Clicks</key> + </entry> + <entry> + <key>Device Type</key> + </entry> + <entry> + <key>Mobile</key> + </entry> + <entry> + <key>Console</key> + </entry> + <entry> + <key>IP Address</key> + </entry> + <entry> + <key>Operating System</key> + </entry> + <entry> + <key>Date Clicked</key> + </entry> + <entry> + <key>Send Date</key> + </entry> + <entry> + <key>Filter can't be empty</key> + </entry> + <entry> + <key>Opening Date</key> + </entry> + <entry> + <key>Recipient filter</key> + </entry> + <entry> + <key>Url must be unique</key> </entry> <entry> <key>Volume(€)</key> @@ -8151,9 +8250,6 @@ <entry> <key>Invalid value</key> </entry> - <entry> - <key>Object not found</key> - </entry> <entry> <key>Value is too big, the maximum is %0</key> </entry> @@ -8166,6 +8262,652 @@ <entry> <key>Value must be an integer</key> </entry> + <entry> + <key>Buyer</key> + </entry> + <entry> + <key>Internal responsible</key> + </entry> + <entry> + <key>Initiator</key> + </entry> + <entry> + <key>Internal Sales</key> + </entry> + <entry> + <key>Influencer</key> + </entry> + <entry> + <key>Set not completed</key> + </entry> + <entry> + <key>Add planning to organisations</key> + </entry> + <entry> + <key>Planning</key> + </entry> + <entry> + <key>Create planning</key> + </entry> + <entry> + <key>The combination of organisation, product group and year already exists.</key> + </entry> + <entry> + <key>Change responsible</key> + </entry> + <entry> + <key>Plannings</key> + </entry> + <entry> + <key>Save</key> + </entry> + <entry> + <key>%0 status was/were changed</key> + </entry> + <entry> + <key>Change status</key> + </entry> + <entry> + <key>%0 out of %1 records were changed to \"%2\".\n %3 record/s could not be updated.</key> + </entry> + <entry> + <key>%0 responsilbe/s was/were changed</key> + </entry> + <entry> + <key>Already existing</key> + </entry> + <entry> + <key>Forecast weighted</key> + </entry> + <entry> + <key>Turnover, Forecast, Planning</key> + </entry> + <entry> + <key>Unchanged plan values</key> + </entry> + <entry> + <key>New created plan values</key> + </entry> + <entry> + <key>Fixed</key> + </entry> + <entry> + <key>Sales forecast</key> + </entry> + <entry> + <key>Planning/Forecast/Turnover</key> + </entry> + <entry> + <key>Organisation Zip</key> + </entry> + <entry> + <key>Organisation City</key> + </entry> + <entry> + <key>Organisation Classification</key> + </entry> + <entry> + <key>Organisation District</key> + </entry> + <entry> + <key>Organisation Type</key> + </entry> + <entry> + <key>Organisation Language</key> + </entry> + <entry> + <key>Organisation Region</key> + </entry> + <entry> + <key>Organisation Address</key> + </entry> + <entry> + <key>Organisation Country</key> + </entry> + <entry> + <key>Organisation State</key> + </entry> + <entry> + <key>Shows the global Covid Cases in a Table</key> + </entry> + <entry> + <key>Global Cases Table</key> + </entry> + <entry> + <key>Global Cases</key> + </entry> + <entry> + <key>New Cases</key> + </entry> + <entry> + <key>Shows the new daily Covid Cases</key> + </entry> + <entry> + <key>${SALESPROJECT_PROSPECT}</key> + </entry> + <entry> + <key>${SALESPROJECT_LEAD}</key> + </entry> + <entry> + <key>${SALESPROJECT_CONTACT}</key> + </entry> + <entry> + <key>Starts the serverprocess manually, which will recalculate all (potentially) outdated classifications. Use this after changes to the configuration of classifications.</key> + </entry> + <entry> + <key>Title (translated)</key> + </entry> + <entry> + <key>There already exists a %0 price with the same type of pricelist, quantity and currency in the defined range.</key> + </entry> + <entry> + <key>Competitions/Competitor</key> + </entry> + <entry> + <key>Starts the serverprocess manually, which will recalculate all classifications from scratch. Only do this after e.g importing data from elsewhere where the outdated flag couldn't been set correctly. Since this can take some time.</key> + </entry> + <entry> + <key>Invalid attribute count</key> + </entry> + <entry> + <key>Redirect needs a full Url with http/https</key> + </entry> + <entry> + <key>${IGNORE_DUPLICATE}</key> + </entry> + <entry> + <key>${UNIGNORE_DUPLICATE}</key> + </entry> + <entry> + <key>View all duplicates from this scanner</key> + </entry> + <entry> + <key>Rebuild all duplicates from the selected scanners</key> + </entry> + <entry> + <key>View duplicates</key> + </entry> + <entry> + <key>Rebuild selected entries</key> + </entry> + <entry> + <key>Ignored</key> + <value>Ignoriert</value> + </entry> + <entry> + <key>Not enough room in campaignstep</key> + </entry> + <entry> + <key>Location of the Event</key> + </entry> + <entry> + <key>Migrate Probabilities</key> + </entry> + <entry> + <key>change DSGVO Relevance</key> + </entry> + <entry> + <key>No customer since creation > 3 years</key> + </entry> + <entry> + <key>advanced training</key> + </entry> + <entry> + <key>No valid sales contract</key> + </entry> + <entry> + <key>Count Usage</key> + </entry> + <entry> + <key>Marked for deletion</key> + </entry> + <entry> + <key>Add Manuel Delete Flag</key> + </entry> + <entry> + <key>DSGVO Configuration</key> + </entry> + <entry> + <key>Privacy Notice</key> + </entry> + <entry> + <key>Code</key> + </entry> + <entry> + <key>Mark to Delete</key> + </entry> + <entry> + <key>Is an active employee</key> + </entry> + <entry> + <key>Open Contacts</key> + </entry> + <entry> + <key>Integer</key> + </entry> + <entry> + <key>anonymize Persons</key> + </entry> + <entry> + <key>DSGVO</key> + </entry> + <entry> + <key>Event Planer</key> + </entry> + <entry> + <key>is DSGVO Relevant</key> + </entry> + <entry> + <key>Manuel set</key> + </entry> + <entry> + <key>consent pending</key> + </entry> + <entry> + <key>Mark selection to delete</key> + </entry> + <entry> + <key>Mark all to delete</key> + </entry> + <entry> + <key>Manually set</key> + </entry> + <entry> + <key>Add Manual Delete Flag</key> + </entry> + <entry> + <key>Delete Delay in Days</key> + </entry> + <entry> + <key>Do you want to delete the flags of the already maked Persons?</key> + </entry> + <entry> + <key>Do you really want to anonymize all marked persons?</key> + </entry> + <entry> + <key>FILE MISSING</key> + </entry> + <entry> + <key>All of the chosen records are already in the campaign</key> + </entry> + <entry> + <key>All of the chosen records are already in the campaignstep</key> + </entry> + <entry> + <key>Placeholders must be unique</key> + </entry> + <entry> + <key>Auto probability</key> + </entry> + <entry> + <key>Done by</key> + </entry> + <entry> + <key>Done on</key> + </entry> + <entry> + <key>First customer conversation</key> + </entry> + <entry> + <key>Further customer meetings</key> + </entry> + <entry> + <key>Post office box number</key> + </entry> + <entry> + <key>Project team</key> + </entry> + <entry> + <key>Prioritization based on segmentation parameters</key> + </entry> + <entry> + <key>Source / origin of the generation of contacts</key> + </entry> + <entry> + <key>Object type 1</key> + </entry> + <entry> + <key>Object type 2</key> + </entry> + <entry> + <key>A communication setting for this channel already exists!</key> + </entry> + <entry> + <key>This setting is overridden by the setting '%0'</key> + </entry> + <entry> + <key>Business Card Language</key> + </entry> + <entry> + <key>No advertising</key> + </entry> + <entry> + <key>Approval started</key> + </entry> + <entry> + <key>approved</key> + </entry> + <entry> + <key>executives</key> + </entry> + <entry> + <key>approve/deny (2nd approval)</key> + </entry> + <entry> + <key>approve/deny</key> + </entry> + <entry> + <key>offer denied</key> + </entry> + <entry> + <key>check offer again</key> + </entry> + <entry> + <key>your offer \“%0\“ was %1 by \“%2\“</key> + </entry> + <entry> + <key>check offer</key> + </entry> + <entry> + <key>area manager</key> + </entry> + <entry> + <key>denied</key> + </entry> + <entry> + <key>offer approved</key> + </entry> + <entry> + <key>First Approval</key> + </entry> + <entry> + <key>show all offers with second approval</key> + </entry> + <entry> + <key>Second Approval</key> + </entry> + <entry> + <key>Approval denied</key> + </entry> + <entry> + <key>show all offers with first approval</key> + </entry> + <entry> + <key>[TEST] Importer</key> + </entry> + <entry> + <key>Weblink</key> + </entry> + <entry> + <key>Covid Information</key> + </entry> + <entry> + <key>Document actions</key> + </entry> + <entry> + <key>Click</key> + </entry> + <entry> + <key>Linkmanagement</key> + </entry> + <entry> + <key>[TEST] Calendar_lib</key> + </entry> + <entry> + <key>Redirect</key> + </entry> + <entry> + <key>Maillog</key> + </entry> + <entry> + <key>Maillogs</key> + </entry> + <entry> + <key>Url</key> + </entry> + <entry> + <key>[TEST] Util_lib</key> + </entry> + <entry> + <key>Daily Cases</key> + </entry> + <entry> + <key>Is an active Employee</key> + </entry> + <entry> + <key>Weblinks</key> + </entry> + <entry> + <key>Browser</key> + </entry> + <entry> + <key>Global Cases </key> + </entry> + <entry> + <key>Attributes of attribute group \"%0\" have to be used at least %1.</key> + </entry> + <entry> + <key>Attributes of attribute group \"%0\" can't be used more than %1.</key> + </entry> + <entry> + <key>Add selected workflow</key> + </entry> + <entry> + <key>Profiling</key> + </entry> + <entry> + <key>Add all</key> + </entry> + <entry> + <key>Standard workflow</key> + </entry> + <entry> + <key>Standard workflows</key> + </entry> + <entry> + <key>Global</key> + </entry> + <entry> + <key>Bounce (Soft)</key> + </entry> + <entry> + <key>Test1</key> + </entry> + <entry> + <key>Bounce (Hard)</key> + </entry> + <entry> + <key>Smart TV</key> + </entry> + <entry> + <key>Desktop</key> + </entry> + <entry> + <key>Download selected workflow</key> + </entry> + <entry> + <key>Send workflow signal</key> + </entry> + <entry> + <key>Tablet</key> + </entry> + <entry> + <key>Blacklist</key> + </entry> + <entry> + <key>SubTest1</key> + </entry> + <entry> + <key>Exclude existing workflows</key> + </entry> + <entry> + <key>Advertising received</key> + </entry> + <entry> + <key>Actual Amount</key> + </entry> + <entry> + <key>Advertising count</key> + </entry> + <entry> + <key>Advertising Shipment</key> + </entry> + <entry> + <key>Target Amount</key> + </entry> + <entry> + <key>delivery</key> + </entry> + <entry> + <key>Start Advertising Workflow</key> + </entry> + <entry> + <key>Workflow already started</key> + </entry> + <entry> + <key>Send digital Advertising materials & complete Workflow Task</key> + </entry> + <entry> + <key>Followed up</key> + </entry> + <entry> + <key>Advertising materials</key> + </entry> + <entry> + <key>per post</key> + </entry> + <entry> + <key>Advertisingitems</key> + </entry> + <entry> + <key>Advertisingitem</key> + </entry> + <entry> + <key>per mail</key> + </entry> + <entry> + <key>via post</key> + </entry> + <entry> + <key>via mail</key> + </entry> + <entry> + <key>Advertisin gmaterial</key> + </entry> + <entry> + <key>Send digital Advertisingmaterials & complete Workflow Task</key> + </entry> + <entry> + <key>Advertisingmaterial</key> + </entry> + <entry> + <key>Advertisingsmaterial</key> + </entry> + <entry> + <key>Advertising material count</key> + </entry> + <entry> + <key>Interest (subscribed)</key> + </entry> + <entry> + <key>Bulk Mail Key Figures</key> + </entry> + <entry> + <key>My Bulkmails</key> + </entry> + <entry> + <key>Bounces</key> + </entry> + <entry> + <key>Show my bulkmails</key> + </entry> + <entry> + <key>Number of openers</key> + </entry> + <entry> + <key>Bulkmail Key Figures</key> + </entry> + <entry> + <key>Openers</key> + </entry> + <entry> + <key>Opener</key> + </entry> + <entry> + <key>Marketing Dashboard</key> + </entry> + <entry> + <key>Unsubscribes</key> + </entry> + <entry> + <key>Number of clicks</key> + </entry> + <entry> + <key>Unique Clicks</key> + </entry> + <entry> + <key>Received</key> + </entry> + <entry> + <key>Bulkmail Device Types</key> + </entry> + <entry> + <key>Shows device types used by bulkmail recipients</key> + </entry> + <entry> + <key>Open Mosaico</key> + </entry> + <entry> + <key>Show Classification</key> + </entry> + <entry> + <key>District: Number</key> + </entry> + <entry> + <key>Industry of Organisation</key> + </entry> + <entry> + <key>District: Name</key> + </entry> + <entry> + <key>within the last six Months</key> + </entry> + <entry> + <key>within the next year</key> + </entry> + <entry> + <key>within the last Month</key> + </entry> + <entry> + <key>within the next Month</key> + </entry> + <entry> + <key>within the last year</key> + </entry> + <entry> + <key>within the next six Months</key> + </entry> + <entry> + <key>from Percent</key> + </entry> + <entry> + <key>Total of Forecasts</key> + </entry> + <entry> + <key>Communication Setting: %0</key> + </entry> + <entry> + <key>Campaign participation</key> + </entry> + <entry> + <key>Remove recipients with communication rejection</key> + </entry> + <entry> + <key>Chosen record is already in the campaign</key> + </entry> + <entry> + <key>Received Bulk Mail</key> + </entry> </keyValueMap> <font name="Dialog" style="0" size="11" /> <sqlModels> diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod index e58f48ed810e3e924239be23397a809edc0303bc..c6f5985c3436b6f6ec303d1bce84b3030aaf1e08 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -6,67 +6,274 @@ <country></country> <variant></variant> <keyValueMap> + <entry> + <key>Unsubscribes</key> + <value>Abmeldungen</value> + </entry> <entry> <key>Event End</key> <value>Veranstaltungs Ende</value> </entry> + <entry> + <key>Number of openers</key> + <value>Anzahl Openers</value> + </entry> + <entry> + <key>Openers</key> + <value>Geöffnet</value> + </entry> + <entry> + <key>Number of clicks</key> + <value>Anzahl Klicks</value> + </entry> + <entry> + <key>Attributes of attribute group \"%0\" have to be used at least %1.</key> + <value>Eigenschaften der Eigenschaftsgruppe \"%0\" müssen mindestens %1 verwendet werden.</value> + </entry> + <entry> + <key>Redirect needs a full Url with http/https</key> + <value>Für die Weiterleitung wird eine vollständige Url mit http/https benötigt</value> + </entry> + <entry> + <key>My Bulkmails</key> + <value>Meine Serienmails</value> + </entry> + <entry> + <key>Use for test run</key> + <value>Bei Testversand verwenden</value> + </entry> + <entry> + <key>Not subscribed</key> + <value>Nicht abonniert</value> + </entry> + <entry> + <key>Set Test Recipient</key> + <value>Testempfänger setzen</value> + </entry> + <entry> + <key>Url must be unique</key> + <value>Die Url muss eindeutig sein!</value> + </entry> + <entry> + <key>Opening Date</key> + <value>Öffnungsdatum</value> + </entry> + <entry> + <key>check offer</key> + <value>Freigabe anfordern</value> + </entry> + <entry> + <key>%0 out of %1 records were changed to \"%2\".\n %3 record/s could not be updated.</key> + <value>%0 von %1 Datensätze wurden auf \"%2\" geändert.\n%3 Datensätze konnten nicht akutualisiert werden.</value> + </entry> + <entry> + <key>This setting is overridden by the setting '%0'</key> + <value>Diese Einstellung wird durch die Einstellung '%0' überschrieben</value> + </entry> <entry> <key>Value is too big, the maximum is %0</key> <value>Wert ist zu groß, das Maximum ist %0</value> </entry> + <entry> + <key>Approval started</key> + <value>Freigabeprozess gestartet</value> + </entry> + <entry> + <key>Not enough room in campaignstep</key> + <value>In der Kampagnenstufe ist nicht genug Platz vorhanden</value> + </entry> <entry> <key>The max participants count can not be equal or less then 0</key> <value>Die maximale Teilnehmerzahl muss größer 0 sein!</value> </entry> + <entry> + <key>Communication Setting: %0</key> + <value>Werbeeinstellung: %0</value> + </entry> + <entry> + <key>No advertising</key> + <value>Keine Werbung</value> + </entry> + <entry> + <key>Interest (subscribed)</key> + <value>Interesse (abonniert)</value> + </entry> <entry> <key>Value is too small, the minimum is %0</key> <value>Wert ist zu klein, das Minimum ist %0</value> </entry> + <entry> + <key>via post</key> + <value>per Post</value> + </entry> <entry> <key>Object not found</key> <value>Objekt nicht gefunden </value> </entry> + <entry> + <key>Attributes of attribute group \"%0\" can't be used more than %1.</key> + <value>Eigenschaften der Eigenschaftsgruppe \"%0\" dürfen maximal %1 verwendet werden.</value> + </entry> + <entry> + <key>Received</key> + <value>Empfangen</value> + </entry> + <entry> + <key>Change responsible</key> + <value>Verantwortlichen wechseln</value> + </entry> + <entry> + <key>Already existing</key> + <value>Bereits existierende</value> + </entry> + <entry> + <key>Rejected</key> + <value>Abgelehnt</value> + </entry> + <entry> + <key>Channel type</key> + <value>Kanalart</value> + </entry> <entry> <key>discounted Vat</key> <value>Rbt. Mehrwertssteuer</value> </entry> + <entry> + <key>Filter can't be empty</key> + <value>Filter darf nicht leer sein</value> + </entry> + <entry> + <key>Organisation Country</key> + <value>Firma Land</value> + </entry> + <entry> + <key>Planning</key> + <value>Planung</value> + </entry> + <entry> + <key>Add planning to organisations</key> + <value>Planung der Firma hinzufügen</value> + </entry> + <entry> + <key>New created plan values</key> + <value>Neu erstellte Planwerte</value> + </entry> <entry> <key>Illegal Parent Operator in buildFilterObj-Function:</key> <value>Übergebener Operator ungültig in Funktion "buildFilterObj"</value> </entry> + <entry> + <key>Organisation Language</key> + <value>Firma Sprache</value> + </entry> + <entry> + <key>Send digital Advertising materials & complete Workflow Task</key> + </entry> + <entry> + <key>The combination of organisation, product group and year already exists.</key> + <value>Die Kombination aus Firma, Produktgruppe und Jahr existiert bereits.</value> + </entry> + <entry> + <key>Advertising material</key> + <value>Werbemittel</value> + </entry> + <entry> + <key>Title (translated)</key> + <value>Titel (übersetzt)</value> + </entry> + <entry> + <key>Organisation State</key> + <value>Firma Staat</value> + </entry> + <entry> + <key>Organisation Zip</key> + <value>Firma PLZ</value> + </entry> <entry> <key>EML files can't be edited here. You can download, edit and reupload the template to change the content.</key> <value>Das Bearbeiten von EML-Dateien ist hier nicht möglich. Um den Inhalt zu ändern, können Sie die Vorlage herunterladen, bearbeiten und erneut hochladen.</value> </entry> + <entry> + <key>Date Clicked</key> + <value>Klickdatum</value> + </entry> <entry> <key>Value must be an integer</key> <value>Wert muss eine Ganzzahl sein</value> </entry> + <entry> + <key>Organisation Address</key> + <value>Firma Straße</value> + </entry> + <entry> + <key>Organisation Classification</key> + <value>Firma Klassifizierung</value> + </entry> <entry> <key>Checklist entries</key> <value>Checklisteneinträge</value> </entry> + <entry> + <key>Operating System</key> + <value>Betriebssystem</value> + </entry> + <entry> + <key>Organisation Region</key> + <value>Firma Kreis</value> + </entry> + <entry> + <key>Organisation Type</key> + <value>Firma Typ</value> + </entry> + <entry> + <key>Organisation City</key> + <value>Firma Ort</value> + </entry> <entry> <key>Project team: \"Project manager\"</key> <value>Projektteam: \"Projektmanager\"</value> </entry> + <entry> + <key>Send Date</key> + <value>Versanddatum</value> + </entry> + <entry> + <key>Organisation District</key> + <value>Firma Gebiet</value> + </entry> <entry> <key>Checklist entry</key> <value>Checklisteneintrag</value> </entry> + <entry> + <key>Create planning</key> + <value>Planung erstellen</value> + </entry> <entry> <key>descending</key> <value>absteigend</value> </entry> + <entry> + <key>Recipient filter</key> + <value>Empfänger Filter</value> + </entry> <entry> <key>Salesproject phases</key> <value>Vertriebsprojektphasen</value> </entry> + <entry> + <key>Test Recipient</key> + <value>Test Empfänger</value> + </entry> <entry> <key>To skip a salesproject phase isn't allowed.</key> <value>Das Überspringen einer Vertriebsprojektphase ist nicht erlaubt.</value> </entry> + <entry> + <key>IP Address</key> + <value>IP-Adresse</value> + </entry> <entry> <key>Its not allowed to step over some salesproject phases.</key> <value>Es ist nicht erlaubt Vertriebsprojektphasen zu überspringen.</value> @@ -131,6 +338,10 @@ <key>Communication: Link</key> <value>Kommunikation: Webseite</value> </entry> + <entry> + <key>Advertising material count</key> + <value>Anzahl Werbemittel</value> + </entry> <entry> <key>The start date has to be before the end date.</key> <value>Das Startdatum muss vor dem Enddatum sein.</value> @@ -223,6 +434,10 @@ <key>No fax</key> <value>Kein Fax</value> </entry> + <entry> + <key>Advertising item</key> + <value>Werbemittelposition</value> + </entry> <entry> <key>Distribution list</key> <value>Marketingliste</value> @@ -271,6 +486,10 @@ <key>Claim task</key> <value>Aufgabe annehmen</value> </entry> + <entry> + <key>Chosen record is already in the campaign</key> + <value>Ausgewählter Datensatz befindet sich bereits in der Kampagne</value> + </entry> <entry> <key>Finished tasks</key> <value>Abgeschlossene Aufgaben</value> @@ -384,8 +603,8 @@ <value>Weitere Versionen</value> </entry> <entry> - <key>Remove recipients with advertising ban</key> - <value>Empfänger mit Werbesperre entfernen</value> + <key>Remove recipients with communication rejection</key> + <value>Empfänger mit Werbeablehnung entfernen</value> </entry> <entry> <key>Company group</key> @@ -423,6 +642,10 @@ <key>My Contacts</key> <value>Meine Kontakte</value> </entry> + <entry> + <key>%0 status was/were changed</key> + <value>%0 Status wurde/n geändert</value> + </entry> <entry> <key>Workflow definition</key> <value>Workflowdefinition</value> @@ -431,6 +654,10 @@ <key>Object selection</key> <value>Objektauswahl</value> </entry> + <entry> + <key>All of the chosen records are already in the campaign</key> + <value>Alle ausgewählten Datensätze sind schon in der Kampagne.</value> + </entry> <entry> <key>Send</key> <value>Senden</value> @@ -439,6 +666,10 @@ <key>${ORDER_CANCELLED}</key> <value>Storniert</value> </entry> + <entry> + <key>Plannings</key> + <value>Planungen</value> + </entry> <entry> <key>CONFIRMED</key> <value>Gelesen</value> @@ -459,6 +690,10 @@ <key>Deletion</key> <value>Löschung</value> </entry> + <entry> + <key>%0 responsilbe/s was/were changed</key> + <value>%0 Verantwortliche/r wurde/n geändert</value> + </entry> <entry> <key>Please check if the following fields are filled correctly</key> <value>Bitte überprüfen Sie ob folgende Felder richtig befüllt sind</value> @@ -563,6 +798,10 @@ <key>still incorrect</key> <value>weiterhin fehlerhaft</value> </entry> + <entry> + <key>Target amount</key> + <value>Soll Betrag</value> + </entry> <entry> <key>Priority</key> <value>Priorität</value> @@ -843,6 +1082,10 @@ <key>Male</key> <value>Männlich</value> </entry> + <entry> + <key>Advertising items</key> + <value>Werbemittelpositionen</value> + </entry> <entry> <key>SqlBuilder must contain a select clause!</key> <value>SqlBuilder muss eine Select-Clause enthalten!</value> @@ -867,6 +1110,10 @@ <key>Balancing of interests</key> <value>Interessenausgleich</value> </entry> + <entry> + <key>Advertising received</key> + <value>Werbemittel erhalten</value> + </entry> <entry> <key>SqlBuilder must contain a from clause!</key> <value>SqlBuilder muss eine from-Clause enthalten!</value> @@ -887,6 +1134,10 @@ <key>New time tracking</key> <value>Neuer Zeiteintrag</value> </entry> + <entry> + <key>Advertising shipment</key> + <value>Werbemittel Versand</value> + </entry> <entry> <key>Export CSV</key> <value>CSV exportieren</value> @@ -907,6 +1158,10 @@ <key>Extend - request count</key> <value>Verlängert - Anfrageanzahl</value> </entry> + <entry> + <key>Console</key> + <value>Konsole</value> + </entry> <entry> <key>The person is already associated with another employee!</key> <value>Die Person ist bereits mit einem anderen Mitarbeiter verknüpft!</value> @@ -971,6 +1226,10 @@ <key>Status</key> <value>Status</value> </entry> + <entry> + <key>denied</key> + <value>abgelehnt</value> + </entry> <entry> <key>Deadline</key> <value>Frist</value> @@ -987,6 +1246,10 @@ <key>We received data from</key> <value>Wir haben Daten erhalten von</value> </entry> + <entry> + <key>Allowed</key> + <value>Erlaubt</value> + </entry> <entry> <key>${SALESPROJECT_MEMBER}</key> <value>Projektteam</value> @@ -999,6 +1262,14 @@ <key>Export letter for selection</key> <value>Brief für Auswahl exportieren</value> </entry> + <entry> + <key>your offer \“%0\“ was %1 by \“%2\“</key> + <value>Die Freigabe Ihres Angebots \“%0\“ wurde durch \“%2\“ %1</value> + </entry> + <entry> + <key>Approval denied</key> + <value>Freigabe abgelehnt</value> + </entry> <entry> <key>External Datasource</key> <value>Externe Datenquelle</value> @@ -1007,6 +1278,14 @@ <key>Steps</key> <value>Stufen</value> </entry> + <entry> + <key>All of the chosen records are already in the campaignstep</key> + <value>Alle ausgewählten Datensätze sind schon in der Kampagnenstufe.</value> + </entry> + <entry> + <key>offer denied</key> + <value>Angebot abgelehnt</value> + </entry> <entry> <key>Days inactive</key> <value>Tage inaktiv</value> @@ -1015,6 +1294,10 @@ <key>Active</key> <value>Aktiv</value> </entry> + <entry> + <key>approve/deny (2nd approval)</key> + <value>Freigeben/Ablehnen (2. Freigabe)</value> + </entry> <entry> <key>Medium</key> <value>Medium</value> @@ -1099,6 +1382,10 @@ <key>Contact type</key> <value>Kontaktart</value> </entry> + <entry> + <key>Start advertising material workflow</key> + <value>Werbemittel Workflow starten</value> + </entry> <entry> <key>Footer</key> <value>Fußtext</value> @@ -1324,6 +1611,10 @@ <key>ended (done)</key> <value>abgeschlossen (erledigt)</value> </entry> + <entry> + <key>Interest</key> + <value>Interesse</value> + </entry> <entry> <key>Document Template</key> <value>Dokumentvorlage</value> @@ -1501,8 +1792,8 @@ <value>Service</value> </entry> <entry> - <key>Advertising material</key> - <value>Werbemittel</value> + <key>Advertising</key> + <value>Werbung</value> </entry> <entry> <key>Healthcare</key> @@ -1544,6 +1835,10 @@ <key>Conditions</key> <value>Konditionen</value> </entry> + <entry> + <key>Received Bulk Mail</key> + <value>Empfangene Serienmail</value> + </entry> <entry> <key>Standard</key> <value>Standard</value> @@ -1644,6 +1939,10 @@ <key>Postponed</key> <value>Vertagt</value> </entry> + <entry> + <key>approve/deny</key> + <value>Freigeben/Ablehnen</value> + </entry> <entry> <key>Aborted</key> <value>Abgebrochen</value> @@ -1695,6 +1994,10 @@ <entry> <key>50 %</key> </entry> + <entry> + <key>check offer again</key> + <value>Freigabe erneut anfordern</value> + </entry> <entry> <key>Header</key> <value>Kopftext</value> @@ -1711,6 +2014,10 @@ <key>Checked</key> <value>Geprüft</value> </entry> + <entry> + <key>Save</key> + <value>Speichern</value> + </entry> <entry> <key>Sent</key> <value>Versendet</value> @@ -2171,6 +2478,10 @@ <key>Social</key> <value>Sozial</value> </entry> + <entry> + <key>Campaign participation</key> + <value>Kampagnenteilnahme</value> + </entry> <entry> <key>Facebook Feed</key> <value>Facebook Feed</value> @@ -2351,6 +2662,10 @@ <key>subject</key> <value>Betreff</value> </entry> + <entry> + <key>Mobile</key> + <value>Handy</value> + </entry> <entry> <key>Document templates</key> <value>Dokumentvorlagen</value> @@ -2512,7 +2827,7 @@ <value>Montserrat</value> </entry> <entry> - <key>Further informations</key> + <key>Further information</key> <value>Weitere Informationen</value> </entry> <entry> @@ -2903,6 +3218,10 @@ <key>Taiwan</key> <value>Taiwan</value> </entry> + <entry> + <key>Clicks</key> + <value>Klicks</value> + </entry> <entry> <key>Central African Republic</key> <value>Zentralafrikanische Republik</value> @@ -3035,6 +3354,10 @@ <key>It lists all areas that the user has to take care of.</key> <value>Es werden alle Gebiete aufgelistet, die der Benutzer betreuen muss.</value> </entry> + <entry> + <key>Device Type</key> + <value>Geräteart</value> + </entry> <entry> <key>Company_size</key> <value>Unternehmen_Größe</value> @@ -3343,6 +3666,10 @@ <key>Iceland</key> <value>Island</value> </entry> + <entry> + <key>Test Run Actions</key> + <value>Testversand Aktionen</value> + </entry> <entry> <key>Oman</key> <value>Oman</value> @@ -3611,6 +3938,10 @@ <key>Euro</key> <value>Euro</value> </entry> + <entry> + <key>executives</key> + <value>Geschäftsführung</value> + </entry> <entry> <key>Product_GUI</key> <value>Produkt_GUI</value> @@ -3853,6 +4184,10 @@ <key>Qatar</key> <value>Katar</value> </entry> + <entry> + <key>delivery</key> + <value>Übergabe</value> + </entry> <entry> <key>Slovakia</key> <value>Slowakei</value> @@ -4047,6 +4382,14 @@ <entry> <key>25%</key> </entry> + <entry> + <key>Second Approval</key> + <value>2. Freigabe</value> + </entry> + <entry> + <key>Sales forecast</key> + <value>Umsatzprognose</value> + </entry> <entry> <key>50%</key> </entry> @@ -4657,7 +5000,7 @@ </entry> <entry> <key>Locked</key> - <value>Gelocked</value> + <value>Gesperrt </value> </entry> <entry> <key>Timetracking Id</key> @@ -5031,6 +5374,10 @@ <key>Please check if the Salesproject has all necessary information</key> <value>Bitte überprüfen Sie ob das Vertriebsprojekt über alle nötigen Informationen verfügt</value> </entry> + <entry> + <key>Bulkmail Device Types</key> + <value>Serienmail Gerätearten</value> + </entry> <entry> <key>Min. Stock</key> <value>Min. Bestand</value> @@ -5974,6 +6321,10 @@ <key>Away travel</key> <value>Fernreisen</value> </entry> + <entry> + <key>Unchanged plan values</key> + <value>Unveränderte Planwerte</value> + </entry> <entry> <key>Partial calculation</key> <value>Teilberechnung</value> @@ -6094,6 +6445,10 @@ <key>Spare part</key> <value>Ersatzteil</value> </entry> + <entry> + <key>Workflow already started</key> + <value>Workflow bereits gestartet</value> + </entry> <entry> <key>Sailing</key> <value>Segeln</value> @@ -6618,6 +6973,14 @@ <key>one file imported</key> <value>eine Datei importiert</value> </entry> + <entry> + <key>offer approved</key> + <value>Angebot freigegeben</value> + </entry> + <entry> + <key>approved</key> + <value>freigegeben</value> + </entry> <entry> <key>(or drop files here)</key> <value>(oder Dateien per Drag and Drop einfügen)</value> @@ -7229,6 +7592,10 @@ <key>Offer exists</key> <value>Angebot existiert</value> </entry> + <entry> + <key>Fixed</key> + <value>Fixiert</value> + </entry> <entry> <key>Salesproject member Id</key> <value>VertriebsprojektsteilnehmerId</value> @@ -7257,6 +7624,10 @@ <key>Ignore series</key> <value>Serie ignorieren</value> </entry> + <entry> + <key>Change status</key> + <value>Status wechseln</value> + </entry> <entry> <key>Organisation name</key> <value>Firmenname</value> @@ -7364,6 +7735,10 @@ <key>Source duplicate</key> <value>Stammdublette</value> </entry> + <entry> + <key>Placeholders must be unique</key> + <value>Platzhalter müssen eindeutig sein</value> + </entry> <entry> <key>Person duplicates</key> <value>Personendublettencluster</value> @@ -7420,6 +7795,10 @@ <key>Import Data</key> <value>Import Daten</value> </entry> + <entry> + <key>via mail</key> + <value>per Email</value> + </entry> <entry> <key>Standard mail</key> <value>Standard E-Mailadresse</value> @@ -7914,6 +8293,10 @@ <entry> <key>SqlBuilder: pValue has to be a jdito variable which returns something different than null. (use *IfSet functions if you need optional conditions which are just ignored if value is null or undefined)</key> </entry> + <entry> + <key>Communication Settings</key> + <value>Werbeeinstellungen</value> + </entry> <entry> <key>SqlBuilder: invalid value-type for pCondition</key> </entry> @@ -8559,6 +8942,10 @@ Bitte Datumseingabe prüfen</value> <key>Create notification</key> <value>benachrichtigung erstellen</value> </entry> + <entry> + <key>Marketing Dashboard</key> + <value>Marketingdashboard</value> + </entry> <entry> <key>Set attribute</key> <value>Eigenschaft setzen</value> @@ -8599,6 +8986,10 @@ Bitte Datumseingabe prüfen</value> <key>The status of the order was changed to \"sent\".</key> <value>Der Status des Belegs wurde auf \"versendet\" gesetzt.</value> </entry> + <entry> + <key>Placeholder</key> + <value>Platzhalter</value> + </entry> <entry> <key>Yearly</key> <value>jährlich</value> @@ -8716,6 +9107,10 @@ Bitte Datumseingabe prüfen</value> <key>add new User Permission</key> <value>neue Userberechtigung hinzufügen</value> </entry> + <entry> + <key>show all offers with first approval</key> + <value>Alle Angebote mit 1. Freigabe anzeigen</value> + </entry> <entry> <key>Create new Visitreport</key> <value>Besuchsbericht erstellen</value> @@ -8728,6 +9123,10 @@ Bitte Datumseingabe prüfen</value> <key>Create new Visitplanentry</key> <value>Besuchseintrag erstellen</value> </entry> + <entry> + <key>Followed up</key> + <value>Nachgefasst</value> + </entry> <entry> <key>Open route</key> <value>Route öffnen</value> @@ -9051,6 +9450,10 @@ Bitte Datumseingabe prüfen</value> <key>Unseen</key> <value>Neu</value> </entry> + <entry> + <key>show all offers with second approval</key> + <value>Alle Angebote mit 2. Freigabe anzeigen</value> + </entry> <entry> <key>To Delete</key> <value>Für Löschung vorgesehen</value> @@ -9067,6 +9470,10 @@ Bitte Datumseingabe prüfen</value> <key>Create salesproject</key> <value>Vertriebsprojekt erstellen</value> </entry> + <entry> + <key>First Approval</key> + <value>1. Freigabe</value> + </entry> <entry> <key> number of connections</key> <value>Anzahl Verknüpfungen</value> @@ -9391,6 +9798,10 @@ Bitte Datumseingabe prüfen</value> <key>Create model</key> <value>Modell erstellen</value> </entry> + <entry> + <key>Subscribed</key> + <value>Abonniert</value> + </entry> <entry> <key>Recipients after adding</key> <value>Empfänger nach dem hinzufügen</value> @@ -9586,6 +9997,10 @@ Bitte Datumseingabe prüfen</value> <key>Password must contain letters</key> <value>Passwort muss Buchstaben enhalten</value> </entry> + <entry> + <key>Bulkmail Key Figures</key> + <value>Serienmail Kennzahlen</value> + </entry> <entry> <key>${DISPLAY_AND_OPEN_ONE_HIT}</key> <value>Ein Ergebnis wurde gefunden und kann geöffnet werden.</value> @@ -9634,6 +10049,10 @@ Bitte Datumseingabe prüfen</value> <key>Longitude</key> <value>Längengad</value> </entry> + <entry> + <key>Actual amount</key> + <value>Ist Betrag</value> + </entry> <entry> <key>Refresh</key> <value>Refresh</value> @@ -9663,12 +10082,12 @@ Bitte Datumseingabe prüfen</value> <value>Klassifizierungen neuberechnen</value> </entry> <entry> - <key>Starts the serverprocess manually, which will recalculate all (potentially) outdated classifications. Use this after changes to the configuration of classifications.</key> - <value>Startet den Serverprozess Manuell. Berechnet alle (potenziell) veralteten Klassifizierungen. Benutze dies nach Änderungen an den Klassifizierungseinstellungen.</value> + <key>Starts the server process manually, which will recalculate all (potentially) outdated classifications. This process should be executed after changes to the classification configuration.</key> + <value>Startet den Serverprozess manuell, wodurch alle (möglicherweise) veralteten Klassifizierungen neu berechnet werden. Dieser Prozess sollte nach Änderungen an der Klassifizierungskonfiguration ausgeführt werden.</value> </entry> <entry> - <key>Starts the serverprocess manually, which will recalculate all classifications from scratch. Only do this after e.g importing data from elsewhere where the outdated flag couldn't been set correctly. Since this can take some time.</key> - <value>Startet den Serverprozess Manuell. Berechnet alle Klassifizierungen neu. Benutze dies nur nach z.B dem Importieren von Daten von ausserhalb des Systems bei denen der outdated flag nciht richtig gesetzt wurde, da dieser Durchlauf länger dauen kann</value> + <key>Starts the server process manually, which will recalculate all classifications from scratch. This process should only be executed after importing data from elsewhere, where the outdated flag couldn't be set correctly, since this can take some time.</key> + <value>Startet den Serverprozess manuell, wodurch alle Klassifizierungen von Grund auf neu berechnet werden. Dieser Vorgang sollte nur ausgeführt werden, nachdem externe Daten importiert wurden, an denen der outdated flag nicht richtig gesetzt werden konnte, da dies einige Zeit dauern kann.</value> </entry> <entry> <key>Are you sure you want to recalculate all classifications using the current classificationgradings? This can take some time, since ALL classifications will get freshly calculated and updated if needed.</key> @@ -9690,14 +10109,26 @@ Bitte Datumseingabe prüfen</value> <key>Keep in Mind that changes to the Value with the greatest score directly affect the Classification Gradings of the Classification!</key> <value>Änderungen an dem Wert mit der höchsten Punktzahl beeinflußen die Klassifizierungsbewertungen der Klassifizierung!</value> </entry> + <entry> + <key>Remove Test Recipient</key> + <value>Testempfänger entfernen</value> + </entry> <entry> <key>Hint</key> <value>Hinweis</value> </entry> + <entry> + <key>Test Recipients</key> + <value>Test Empfänger</value> + </entry> <entry> <key>Parent Filter</key> <value>Übergeordneter Filter</value> </entry> + <entry> + <key>Link Type</key> + <value>Linkart</value> + </entry> <entry> <key>Filter information</key> <value>Informationen Filtern</value> @@ -10029,6 +10460,10 @@ Bitte Datumseingabe prüfen</value> <key>entity</key> <value>Entität</value> </entry> + <entry> + <key>A communication setting for this channel already exists!</key> + <value>Für diesen Kanal gibt es bereits eine Werbeeinstellung!</value> + </entry> <entry> <key>Zeigt wie viele Vertriebsprojekte in den einzelnen Vertriebsphasen sind. </key> </entry> @@ -10092,6 +10527,10 @@ Bitte Datumseingabe prüfen</value> <key>#login</key> <value>Login Token</value> </entry> + <entry> + <key>Forecast weighted</key> + <value>Prognose gewichtet</value> + </entry> <entry> <key>Rechnungsbetrag</key> </entry> @@ -10147,6 +10586,10 @@ Bitte Datumseingabe prüfen</value> <entry> <key>Channel Name</key> </entry> + <entry> + <key>Planning/Forecast/Turnover</key> + <value>Planung/Prognose/Umsatz</value> + </entry> <entry> <key>Sales Project Phases</key> </entry> @@ -10159,6 +10602,7 @@ Bitte Datumseingabe prüfen</value> </entry> <entry> <key>Channel</key> + <value>Kanal</value> </entry> <entry> <key>Import from Teams</key> @@ -10246,6 +10690,7 @@ Bitte Datumseingabe prüfen</value> </entry> <entry> <key>Employee count</key> + <value>Mitarbeiteranzahl</value> </entry> <entry> <key>Toggles the status of selected discussion between open and closed</key> @@ -10298,6 +10743,14 @@ Bitte Datumseingabe prüfen</value> <key>Max Points</key> <value>Maximale Punktzahl</value> </entry> + <entry> + <key>Don't use for test run</key> + <value>Bei Testversand nicht verwenden</value> + </entry> + <entry> + <key>Test Run</key> + <value>Testlauf</value> + </entry> <entry> <key>Are you sure you want to reload all classifications using the current classificationgradings?</key> <value>Bist du dir sicher, dass du alle Klassifizierungen anhand der konfigurierten Bewertungen neuberechnen willst?</value> @@ -10439,6 +10892,7 @@ Bitte Datumseingabe prüfen</value> </entry> <entry> <key>Percent</key> + <value>Prozent</value> </entry> <entry> <key>Prev</key> @@ -10492,6 +10946,10 @@ Bitte Datumseingabe prüfen</value> <key>Area Manager</key> <value>Gebietsleiter</value> </entry> + <entry> + <key>Unique Clicks</key> + <value>Einzigartige Klicks</value> + </entry> <entry> <key>Field Service</key> <value>Außendienst</value> @@ -10731,6 +11189,14 @@ Bitte Datumseingabe prüfen</value> <entry> <key>Calendar week</key> </entry> + <entry> + <key>Duplicaterow rebuild</key> + <value>Dubletten neu berechnet</value> + </entry> + <entry> + <key>The duplicate row corrosponding to %0 has been rebuild</key> + <value>Die Dupletten des %0 filters wurden neu berechnet</value> + </entry> <entry> <key>HTML Editor</key> </entry> @@ -10738,6 +11204,9 @@ Bitte Datumseingabe prüfen</value> <key>Participant is already participating</key> <value>Teilnehmer nimmt bereits teil.</value> </entry> + <entry> + <key>On site</key> + </entry> <entry> <key>incl. Dependencies</key> <value>incl. Abhänigkeiten</value> @@ -10748,10 +11217,6 @@ Bitte Datumseingabe prüfen</value> </entry> <entry> <key>Traits have already been defined for this salesproject phase.</key> - <value>Für diese Vertriebsprojektphase wurden schon Merkmale festgelegt.</value> - </entry> - <entry> - <key>On site</key> </entry> <entry> <key>Vacation</key> @@ -10759,11 +11224,6 @@ Bitte Datumseingabe prüfen</value> </entry> <entry> <key>Price could not be determined</key> - <value>Preis konnte nicht ermittelt werden</value> - </entry> - <entry> - <key>Buying center and internal project team</key> - <value>Buyingcenter und internes Projektteam</value> </entry> <entry> <key>Feasibility</key> @@ -10789,6 +11249,442 @@ Bitte Datumseingabe prüfen</value> <key>Internal responsible</key> <value>Intern: Gebietsverantwortlich</value> </entry> + <entry> + <key>${IGNORE_DUPLICATE}</key> + <value>Datensatz ist keine Dublette</value> + </entry> + <entry> + <key>${UNIGNORE_DUPLICATE}</key> + <value>Datensatz ist eine Dublette</value> + </entry> + <entry> + <key>Rebuild selected entries</key> + <value>Ausgewählte Einträge neu aufbauen</value> + </entry> + <entry> + <key>Rebuild all duplicates from the selected scanners</key> + <value>Ausgewählte Einträge neu aufbauen</value> + </entry> + <entry> + <key>View duplicates</key> + <value>Dubletten anzeigen</value> + </entry> + <entry> + <key>View all duplicates from this scanner</key> + <value>Alle Duplikate dieses Scanners anzeigen</value> + </entry> + <entry> + <key>Ignored</key> + <value>Ignoriert</value> + </entry> + <entry> + <key>Invalid attribute count</key> + <value>Unzulässige Attributanzahl</value> + </entry> + <entry> + <key>Set not completed</key> + <value>Nicht erledigt setzen</value> + </entry> + <entry> + <key>There already exists a %0 price with the same type of pricelist, quantity and currency in the defined range.</key> + <value>Es gibt bereits einen %0 Preis mit der selben Preisliste, Menge und Einheit im festgelegten Bereich.</value> + </entry> + <entry> + <key>change DSGVO Relevance</key> + <value>ändere DSGVO-Relevanz</value> + </entry> + <entry> + <key>No customer since creation > 3 years</key> + <value>Kein Kundenkontakt seit Erzeugung > 3 Jahre</value> + </entry> + <entry> + <key>No valid sales contract</key> + <value>Kein Kaufvertrag vorhanden</value> + </entry> + <entry> + <key>Count Usage</key> + <value>Anzahl der Verwendungen</value> + </entry> + <entry> + <key>Marked for deletion</key> + <value>Markiert zum Löschen</value> + </entry> + <entry> + <key>Add Manual Delete Flag</key> + <value>Füge manuelles Löschkennzeichen hinzu</value> + </entry> + <entry> + <key>DSGVO Configuration</key> + <value>DSGVO Konfiguration</value> + </entry> + <entry> + <key>Privacy Notice</key> + <value>Datenschutzerklärung</value> + </entry> + <entry> + <key>Mark to Delete</key> + <value>Markieren zum Löschen</value> + </entry> + <entry> + <key>area manager</key> + <value>Bereichsleiter</value> + </entry> + <entry> + <key>Is an active employee</key> + <value>Ist ein aktiver Mitarbeiter</value> + </entry> + <entry> + <key>Open Contacts</key> + <value>Öffne Kontakte</value> + </entry> + <entry> + <key>anonymize Persons</key> + <value>Anonymisieren der Personen</value> + </entry> + <entry> + <key>DSGVO</key> + </entry> + <entry> + <key>is DSGVO Relevant</key> + <value>Ist DSGVO Relevant</value> + </entry> + <entry> + <key>Manuel set</key> + <value>Manuel gesetz</value> + </entry> + <entry> + <key>Mark all to delete</key> + <value>Markiere alle zum Löschen</value> + </entry> + <entry> + <key>Mark selection to delete</key> + <value>Markiere selektierte zum Löschen</value> + </entry> + <entry> + <key>consent pending</key> + <value>Zustimmung austehend</value> + </entry> + <entry> + <key>Manually set</key> + <value>Manuell gesetzt</value> + </entry> + <entry> + <key>Delete Delay in Days</key> + <value>Löschverzögerung in Tagen</value> + </entry> + <entry> + <key>Do you want to delete the flags of the already maked Persons?</key> + <value>Möchtest du die bereits gesetzten Markierungen löschen?</value> + </entry> + <entry> + <key>Do you really want to anonymize all marked persons?</key> + <value>Möchtest wirklich alle zur Löschung markierten Personen anonymisieren?</value> + </entry> + <entry> + <key>FILE MISSING</key> + <value>DATEI FEHLT</value> + </entry> + <entry> + <key>${SALESPROJECT_PROSPECT}</key> + <value>Prospect</value> + </entry> + <entry> + <key>${SALESPROJECT_LEAD}</key> + <value>Lead</value> + </entry> + <entry> + <key>${SALESPROJECT_CONTACT}</key> + <value>Contact</value> + </entry> + <entry> + <key>Competitions/Competitor</key> + <value>Mitbewerber/Wettbewerber</value> + </entry> + <entry> + <key>Turnover, Forecast, Planning</key> + </entry> + <entry> + <key>Buying center and internal project team</key> + <value>Buying center und internes Projektteam</value> + </entry> + <entry> + <key>Starts the serverprocess manually, which will recalculate all (potentially) outdated classifications. Use this after changes to the configuration of classifications.</key> + </entry> + <entry> + <key>Starts the serverprocess manually, which will recalculate all classifications from scratch. Only do this after e.g importing data from elsewhere where the outdated flag couldn't been set correctly. Since this can take some time.</key> + </entry> + <entry> + <key>Done by</key> + <value>Erledigt von</value> + </entry> + <entry> + <key>Done on</key> + <value>Erledigt am</value> + </entry> + <entry> + <key>Source / origin of the generation of contacts</key> + <value>Quelle / Herkunft der Kontaktgenerierung</value> + </entry> + <entry> + <key>Prioritization based on segmentation parameters</key> + <value>Priorisierung basierend auf Segmentierungsparametern</value> + </entry> + <entry> + <key>First customer conversation</key> + <value>Erstes Kundengespräch</value> + </entry> + <entry> + <key>Project team</key> + <value>Projektteam</value> + </entry> + <entry> + <key>Further customer meetings</key> + <value>Weitere Kundengespräche</value> + </entry> + <entry> + <key>Code</key> + </entry> + <entry> + <key>advanced training</key> + </entry> + <entry> + <key>Migrate Probabilities</key> + </entry> + <entry> + <key>Add Manuel Delete Flag</key> + </entry> + <entry> + <key>Location of the Event</key> + </entry> + <entry> + <key>Event Planer</key> + </entry> + <entry> + <key>Integer</key> + </entry> + <entry> + <key>Auto probability</key> + <value>Automatische Wahrscheinlichkeit</value> + </entry> + <entry> + <key>Post office box number</key> + <value>Postfachnummer</value> + </entry> + <entry> + <key>Business Card Language</key> + <value>Visitenkarten Sprache</value> + </entry> + <entry> + <key>Object type 1</key> + <value>Objekttyp 1</value> + </entry> + <entry> + <key>Object type 2</key> + <value>Objekttyp 2</value> + </entry> + <entry> + <key>[TEST] Importer</key> + </entry> + <entry> + <key>Weblink</key> + </entry> + <entry> + <key>Covid Information</key> + </entry> + <entry> + <key>Document actions</key> + </entry> + <entry> + <key>Click</key> + </entry> + <entry> + <key>Linkmanagement</key> + </entry> + <entry> + <key>[TEST] Calendar_lib</key> + </entry> + <entry> + <key>Redirect</key> + </entry> + <entry> + <key>Maillog</key> + </entry> + <entry> + <key>Maillogs</key> + </entry> + <entry> + <key>Url</key> + </entry> + <entry> + <key>[TEST] Util_lib</key> + </entry> + <entry> + <key>Daily Cases</key> + </entry> + <entry> + <key>Is an active Employee</key> + </entry> + <entry> + <key>Weblinks</key> + </entry> + <entry> + <key>Browser</key> + </entry> + <entry> + <key>Global Cases </key> + </entry> + <entry> + <key>District: Name</key> + <value>Gebiet: Name</value> + </entry> + <entry> + <key>District: Number</key> + <value>Gebiet: Nummer</value> + </entry> + <entry> + <key>Add selected workflow</key> + <value>Ausgewählten Workflow hinzufügen</value> + </entry> + <entry> + <key>Profiling</key> + </entry> + <entry> + <key>Add all</key> + <value>Alle hinzufügen</value> + </entry> + <entry> + <key>Standard workflow</key> + <value>Standard Workflow</value> + </entry> + <entry> + <key>Standard workflows</key> + <value>Standard Workflows</value> + </entry> + <entry> + <key>Global</key> + </entry> + <entry> + <key>Bounce (Soft)</key> + </entry> + <entry> + <key>Test1</key> + </entry> + <entry> + <key>Bounce (Hard)</key> + </entry> + <entry> + <key>Smart TV</key> + </entry> + <entry> + <key>Desktop</key> + </entry> + <entry> + <key>Download selected workflow</key> + <value>Ausgewählten Workflow herunterladen</value> + </entry> + <entry> + <key>Send workflow signal</key> + </entry> + <entry> + <key>Tablet</key> + </entry> + <entry> + <key>Blacklist</key> + </entry> + <entry> + <key>SubTest1</key> + </entry> + <entry> + <key>Exclude existing workflows</key> + <value>Nur nicht vorhandene Workflows</value> + </entry> + <entry> + <key>Open Mosaico</key> + <value>Mosaico öffnen</value> + </entry> + <entry> + <key>per post</key> + </entry> + <entry> + <key>per mail</key> + </entry> + <entry> + <key>Send digital Advertisingmaterials & complete Workflow Task</key> + </entry> + <entry> + <key>Advertising materials</key> + <value>Werbemittel</value> + </entry> + <entry> + <key>Advertisingmaterial</key> + </entry> + <entry> + <key>Advertising count</key> + </entry> + <entry> + <key>Show Classification</key> + <value>Klassifizierung anzeigen</value> + </entry> + <entry> + <key>Industry of Organisation</key> + <value>Branche der Firma</value> + </entry> + <entry> + <key>within the last year</key> + <value>Innerh. des letzten Jahres</value> + </entry> + <entry> + <key>within the last six Months</key> + <value>Innerh. der letzten sechs Monate</value> + </entry> + <entry> + <key>within the last Month</key> + <value>Innerh. des letzten Monats</value> + </entry> + <entry> + <key>within the next Month</key> + <value>Innerh. des nächsten Monats</value> + </entry> + <entry> + <key>within the next six Months</key> + <value>Innerh. der nächsten sechs Monate</value> + </entry> + <entry> + <key>within the next year</key> + <value>Innerh. des nächsten Jahres</value> + </entry> + <entry> + <key>only use simple filters</key> + <value>nur einfache Filter benutzen</value> + </entry> + <entry> + <key>only filter using the specified indicatorfield</key> + <value>nur mit dem festgelegten Kenngrößenfeld filtern</value> + </entry> + <entry> + <key>please only filter using 'equal'</key> + <value>bitte nur mit 'ist gleich' filtern</value> + </entry> + <entry> + <key>Total of Forecasts</key> + <value>Summe der Forecasts</value> + </entry> + <entry> + <key>District: Number</key> + </entry> + <entry> + <key>from Percent</key> + </entry> + <entry> + <key>District: Name</key> + </entry> + <entry> + <key>Remove recipients with advertising ban</key> + </entry> + <entry> + <key>wrong configuration for '%0'</key> + <value>falsche Konfiguration für '%0'</value> + </entry> </keyValueMap> <font name="Dialog" style="0" size="11" /> </language> diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod index bd409fc49c98727cb2474505aa5ed41cd131d72e..c954de3194af7713fc48ad7388ecb494df59e850 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -622,7 +622,7 @@ <key>Timetracking</key> </entry> <entry> - <key>Further informations</key> + <key>Further information</key> </entry> <entry> <key>Social</key> @@ -8190,6 +8190,9 @@ <entry> <key>Add to offer</key> </entry> + <entry> + <key>On Site</key> + </entry> <entry> <key>Participant is already participating</key> </entry> @@ -8203,38 +8206,125 @@ <key>Traits have already been defined for this salesproject phase.</key> </entry> <entry> - <key>On Site</key> + <key>New child product</key> </entry> <entry> - <key>New child product</key> + <key>Vacation</key> + </entry> + <entry> + <key>Price could not be determined</key> + </entry> + <entry> + <key>Channel type</key> </entry> <entry> <key>Communication: Link</key> </entry> + <entry> + <key>Allowed</key> + </entry> <entry> <key>Communication: Phone</key> </entry> + <entry> + <key>Rejected</key> + </entry> + <entry> + <key>Communication Settings</key> + </entry> + <entry> + <key>Advertising</key> + </entry> <entry> <key>Communication: Mail</key> </entry> <entry> - <key>Vacation</key> + <key>Test Recipient</key> </entry> <entry> - <key>Price could not be determined</key> + <key>Remove Test Recipient</key> </entry> <entry> - <key>Volume(€)</key> + <key>Set Test Recipient</key> </entry> <entry> - <key>Value is too small, the minimum is %0</key> + <key>Test Run Actions</key> </entry> <entry> - <key>Invalid value</key> + <key>Test Recipients</key> </entry> <entry> <key>Object not found</key> </entry> + <entry> + <key>Use for test run</key> + </entry> + <entry> + <key>Don't use for test run</key> + </entry> + <entry> + <key>Interest</key> + </entry> + <entry> + <key>Subscribed</key> + </entry> + <entry> + <key>Not subscribed</key> + </entry> + <entry> + <key>Test Run</key> + </entry> + <entry> + <key>Placeholder</key> + </entry> + <entry> + <key>Link Type</key> + </entry> + <entry> + <key>Clicks</key> + </entry> + <entry> + <key>Device Type</key> + </entry> + <entry> + <key>Mobile</key> + </entry> + <entry> + <key>Console</key> + </entry> + <entry> + <key>IP Address</key> + </entry> + <entry> + <key>Operating System</key> + </entry> + <entry> + <key>Date Clicked</key> + </entry> + <entry> + <key>Send Date</key> + </entry> + <entry> + <key>Filter can't be empty</key> + </entry> + <entry> + <key>Opening Date</key> + </entry> + <entry> + <key>Recipient filter</key> + </entry> + <entry> + <key>Url must be unique</key> + </entry> + <entry> + <key>Volume(€)</key> + </entry> + <entry> + <key>Value is too small, the minimum is %0</key> + </entry> + <entry> + <key>Invalid value</key> + </entry> <entry> <key>Value is too big, the maximum is %0</key> </entry> @@ -8247,6 +8337,662 @@ <entry> <key>Value must be an integer</key> </entry> + <entry> + <key>Buyer</key> + </entry> + <entry> + <key>Internal responsible</key> + </entry> + <entry> + <key>Initiator</key> + </entry> + <entry> + <key>Internal Sales</key> + </entry> + <entry> + <key>Influencer</key> + </entry> + <entry> + <key>Set not completed</key> + </entry> + <entry> + <key>Add planning to organisations</key> + </entry> + <entry> + <key>Planning</key> + </entry> + <entry> + <key>Create planning</key> + </entry> + <entry> + <key>The combination of organisation, product group and year already exists.</key> + </entry> + <entry> + <key>Change responsible</key> + </entry> + <entry> + <key>Plannings</key> + </entry> + <entry> + <key>Save</key> + </entry> + <entry> + <key>%0 status was/were changed</key> + </entry> + <entry> + <key>Change status</key> + </entry> + <entry> + <key>%0 out of %1 records were changed to \"%2\".\n %3 record/s could not be updated.</key> + </entry> + <entry> + <key>%0 responsilbe/s was/were changed</key> + </entry> + <entry> + <key>Already existing</key> + </entry> + <entry> + <key>Forecast weighted</key> + </entry> + <entry> + <key>Turnover, Forecast, Planning</key> + </entry> + <entry> + <key>Unchanged plan values</key> + </entry> + <entry> + <key>New created plan values</key> + </entry> + <entry> + <key>Fixed</key> + </entry> + <entry> + <key>Sales forecast</key> + </entry> + <entry> + <key>Planning/Forecast/Turnover</key> + </entry> + <entry> + <key>Organisation Zip</key> + </entry> + <entry> + <key>Organisation City</key> + </entry> + <entry> + <key>Organisation Classification</key> + </entry> + <entry> + <key>Organisation District</key> + </entry> + <entry> + <key>Organisation Type</key> + </entry> + <entry> + <key>Organisation Language</key> + </entry> + <entry> + <key>Organisation Region</key> + </entry> + <entry> + <key>Organisation Address</key> + </entry> + <entry> + <key>Organisation Country</key> + </entry> + <entry> + <key>Organisation State</key> + </entry> + <entry> + <key>Shows the global Covid Cases in a Table</key> + </entry> + <entry> + <key>Global Cases Table</key> + </entry> + <entry> + <key>Global Cases</key> + </entry> + <entry> + <key>New Cases</key> + </entry> + <entry> + <key>Shows the new daily Covid Cases</key> + </entry> + <entry> + <key>${SALESPROJECT_PROSPECT}</key> + <value>Prospect</value> + </entry> + <entry> + <key>${SALESPROJECT_LEAD}</key> + <value>Lead</value> + </entry> + <entry> + <key>${SALESPROJECT_CONTACT}</key> + <value>Contact</value> + </entry> + <entry> + <key>Starts the server process manually, which will recalculate all (potentially) outdated classifications. This process should be executed after changes to the classification configuration.</key> + </entry> + <entry> + <key>Title (translated)</key> + </entry> + <entry> + <key>Starts the server process manually, which will recalculate all classifications from scratch. This process should only be executed after importing data from elsewhere, where the outdated flag couldn't be set correctly, since this can take some time.</key> + </entry> + <entry> + <key>There already exists a %0 price with the same type of pricelist, quantity and currency in the defined range.</key> + </entry> + <entry> + <key>Competitions/Competitor</key> + </entry> + <entry> + <key>Invalid attribute count</key> + </entry> + <entry> + <key>Redirect needs a full Url with http/https</key> + </entry> + <entry> + <key>${IGNORE_DUPLICATE}</key> + <value>Record is not a duplicate</value> + </entry> + <entry> + <key>${UNIGNORE_DUPLICATE}</key> + <value>Record is a duplicate</value> + </entry> + <entry> + <key>View all duplicates from this scanner</key> + </entry> + <entry> + <key>Rebuild all duplicates from the selected scanners</key> + </entry> + <entry> + <key>View duplicates</key> + </entry> + <entry> + <key>Rebuild selected entries</key> + </entry> + <entry> + <key>Ignored</key> + </entry> + <entry> + <key>Not enough room in campaignstep</key> + </entry> + <entry> + <key>Location of the Event</key> + </entry> + <entry> + <key>Migrate Probabilities</key> + </entry> + <entry> + <key>change DSGVO Relevance</key> + </entry> + <entry> + <key>No customer since creation > 3 years</key> + </entry> + <entry> + <key>advanced training</key> + </entry> + <entry> + <key>No valid sales contract</key> + </entry> + <entry> + <key>Count Usage</key> + </entry> + <entry> + <key>Marked for deletion</key> + </entry> + <entry> + <key>Add Manuel Delete Flag</key> + </entry> + <entry> + <key>DSGVO Configuration</key> + </entry> + <entry> + <key>Privacy Notice</key> + </entry> + <entry> + <key>Code</key> + </entry> + <entry> + <key>Mark to Delete</key> + </entry> + <entry> + <key>Is an active employee</key> + </entry> + <entry> + <key>Open Contacts</key> + </entry> + <entry> + <key>Integer</key> + </entry> + <entry> + <key>anonymize Persons</key> + </entry> + <entry> + <key>DSGVO</key> + </entry> + <entry> + <key>Event Planer</key> + </entry> + <entry> + <key>is DSGVO Relevant</key> + </entry> + <entry> + <key>Manuel set</key> + </entry> + <entry> + <key>consent pending</key> + </entry> + <entry> + <key>Mark selection to delete</key> + </entry> + <entry> + <key>Mark all to delete</key> + </entry> + <entry> + <key>Manually set</key> + </entry> + <entry> + <key>Add Manual Delete Flag</key> + </entry> + <entry> + <key>Delete Delay in Days</key> + </entry> + <entry> + <key>Do you want to delete the flags of the already maked Persons?</key> + </entry> + <entry> + <key>Do you really want to anonymize all marked persons?</key> + </entry> + <entry> + <key>FILE MISSING</key> + </entry> + <entry> + <key>All of the chosen records are already in the campaign</key> + </entry> + <entry> + <key>The duplicate row corrosponding to %0 has been rebuild</key> + </entry> + <entry> + <key>All of the chosen records are already in the campaignstep</key> + </entry> + <entry> + <key>Duplicaterow rebuild</key> + </entry> + <entry> + <key>Placeholders must be unique</key> + </entry> + <entry> + <key>Auto probability</key> + </entry> + <entry> + <key>Done by</key> + </entry> + <entry> + <key>Done on</key> + </entry> + <entry> + <key>First customer conversation</key> + </entry> + <entry> + <key>Further customer meetings</key> + </entry> + <entry> + <key>Post office box number</key> + </entry> + <entry> + <key>Project team</key> + </entry> + <entry> + <key>Prioritization based on segmentation parameters</key> + </entry> + <entry> + <key>Source / origin of the generation of contacts</key> + </entry> + <entry> + <key>Object type 1</key> + </entry> + <entry> + <key>Object type 2</key> + </entry> + <entry> + <key>A communication setting for this channel already exists!</key> + </entry> + <entry> + <key>This setting is overridden by the setting '%0'</key> + </entry> + <entry> + <key>Business Card Language</key> + </entry> + <entry> + <key>No advertising</key> + </entry> + <entry> + <key>Approval started</key> + </entry> + <entry> + <key>approved</key> + </entry> + <entry> + <key>executives</key> + </entry> + <entry> + <key>approve/deny (2nd approval)</key> + </entry> + <entry> + <key>approve/deny</key> + </entry> + <entry> + <key>offer denied</key> + </entry> + <entry> + <key>check offer again</key> + </entry> + <entry> + <key>your offer \“%0\“ was %1 by \“%2\“</key> + </entry> + <entry> + <key>check offer</key> + </entry> + <entry> + <key>area manager</key> + </entry> + <entry> + <key>denied</key> + </entry> + <entry> + <key>offer approved</key> + </entry> + <entry> + <key>First Approval</key> + </entry> + <entry> + <key>show all offers with second approval</key> + </entry> + <entry> + <key>Second Approval</key> + </entry> + <entry> + <key>Approval denied</key> + </entry> + <entry> + <key>show all offers with first approval</key> + </entry> + <entry> + <key>[TEST] Importer</key> + </entry> + <entry> + <key>Weblink</key> + </entry> + <entry> + <key>Covid Information</key> + </entry> + <entry> + <key>Document actions</key> + </entry> + <entry> + <key>Click</key> + </entry> + <entry> + <key>Linkmanagement</key> + </entry> + <entry> + <key>[TEST] Calendar_lib</key> + </entry> + <entry> + <key>Redirect</key> + </entry> + <entry> + <key>Maillog</key> + </entry> + <entry> + <key>Maillogs</key> + </entry> + <entry> + <key>Url</key> + </entry> + <entry> + <key>[TEST] Util_lib</key> + </entry> + <entry> + <key>Daily Cases</key> + </entry> + <entry> + <key>Is an active Employee</key> + </entry> + <entry> + <key>Weblinks</key> + </entry> + <entry> + <key>Browser</key> + </entry> + <entry> + <key>Global Cases </key> + </entry> + <entry> + <key>Attributes of attribute group \"%0\" have to be used at least %1.</key> + </entry> + <entry> + <key>Attributes of attribute group \"%0\" can't be used more than %1.</key> + </entry> + <entry> + <key>Add selected workflow</key> + </entry> + <entry> + <key>Profiling</key> + </entry> + <entry> + <key>Add all</key> + </entry> + <entry> + <key>Standard workflow</key> + </entry> + <entry> + <key>Standard workflows</key> + </entry> + <entry> + <key>Global</key> + </entry> + <entry> + <key>Bounce (Soft)</key> + </entry> + <entry> + <key>Test1</key> + </entry> + <entry> + <key>Bounce (Hard)</key> + </entry> + <entry> + <key>Smart TV</key> + </entry> + <entry> + <key>Desktop</key> + </entry> + <entry> + <key>Download selected workflow</key> + </entry> + <entry> + <key>Send workflow signal</key> + </entry> + <entry> + <key>Tablet</key> + </entry> + <entry> + <key>Blacklist</key> + </entry> + <entry> + <key>SubTest1</key> + </entry> + <entry> + <key>Exclude existing workflows</key> + </entry> + <entry> + <key>Target Amount</key> + </entry> + <entry> + <key>delivery</key> + </entry> + <entry> + <key>Advertising count</key> + </entry> + <entry> + <key>Advertising received</key> + </entry> + <entry> + <key>Actual Amount</key> + </entry> + <entry> + <key>Advertising Shipment</key> + </entry> + <entry> + <key>Start Advertising Workflow</key> + </entry> + <entry> + <key>Workflow already started</key> + </entry> + <entry> + <key>Send digital Advertising materials & complete Workflow Task</key> + </entry> + <entry> + <key>Followed up</key> + </entry> + <entry> + <key>Advertisin gmaterial</key> + </entry> + <entry> + <key>Advertisingsmaterial</key> + </entry> + <entry> + <key>Advertisingitems</key> + </entry> + <entry> + <key>Advertisingitem</key> + </entry> + <entry> + <key>via post</key> + </entry> + <entry> + <key>via mail</key> + </entry> + <entry> + <key>Send digital Advertisingmaterials & complete Workflow Task</key> + </entry> + <entry> + <key>per post</key> + </entry> + <entry> + <key>Advertisingmaterial</key> + </entry> + <entry> + <key>per mail</key> + </entry> + <entry> + <key>Advertising materials</key> + </entry> + <entry> + <key>Advertising material count</key> + </entry> + <entry> + <key>Interest (subscribed)</key> + </entry> + <entry> + <key>My Bulkmails</key> + </entry> + <entry> + <key>Bulkmail Key Figures</key> + </entry> + <entry> + <key>Openers</key> + </entry> + <entry> + <key>Marketing Dashboard</key> + </entry> + <entry> + <key>Unsubscribes</key> + </entry> + <entry> + <key>Unique Clicks</key> + </entry> + <entry> + <key>Received</key> + </entry> + <entry> + <key>Bulkmail Device Types</key> + </entry> + <entry> + <key>Shows device types used by bulkmail recipients</key> + </entry> + <entry> + <key>Bounces</key> + </entry> + <entry> + <key>Bulk Mail Key Figures</key> + </entry> + <entry> + <key>Opener</key> + </entry> + <entry> + <key>Number of clicks</key> + </entry> + <entry> + <key>Opener</key> + </entry> + <entry> + <key>Number of openers</key> + </entry> + <entry> + <key>Open Mosaico</key> + </entry> + <entry> + <key>Show Classification</key> + </entry> + <entry> + <key>District: Number</key> + </entry> + <entry> + <key>Industry of Organisation</key> + </entry> + <entry> + <key>District: Name</key> + </entry> + <entry> + <key>within the last six Months</key> + </entry> + <entry> + <key>within the next year</key> + </entry> + <entry> + <key>within the last Month</key> + </entry> + <entry> + <key>within the next Month</key> + </entry> + <entry> + <key>within the last year</key> + </entry> + <entry> + <key>within the next six Months</key> + </entry> + <entry> + <key>from Percent</key> + </entry> + <entry> + <key>Total of Forecasts</key> + </entry> + <entry> + <key>Communication Setting: %0</key> + </entry> + <entry> + <key>Campaign participation</key> + </entry> + <entry> + <key>Remove recipients with communication rejection</key> + </entry> + <entry> + <key>Chosen record is already in the campaign</key> + </entry> + <entry> + <key>Received Bulk Mail</key> + </entry> </keyValueMap> <font name="Dialog" style="0" size="11" /> </language> diff --git a/neonContext/Activity/Activity.aod b/neonContext/Activity/Activity.aod index 996107066d1fab5788faf44d301bc207895a864c..d37b0fdff120d3f210416d91adcfbe55446eb037 100644 --- a/neonContext/Activity/Activity.aod +++ b/neonContext/Activity/Activity.aod @@ -45,5 +45,15 @@ <name>f1e3f5e0-1002-4a68-9114-0389c0d7d4d1</name> <view>ActivityAnalyses_view</view> </neonViewReference> + <neonViewReference> + <name>90a403ad-675e-4451-9469-9737da372f92</name> + </neonViewReference> + <neonViewReference> + <name>bd646a45-5e47-4d89-aa62-3c213beda7b7</name> + </neonViewReference> + <neonViewReference> + <name>7e84a9f7-03b0-4da7-88ce-fda1280d44ce</name> + <view>ActivityAdvertising_view</view> + </neonViewReference> </references> </neonContext> diff --git a/neonContext/Advertising/Advertising.aod b/neonContext/Advertising/Advertising.aod new file mode 100644 index 0000000000000000000000000000000000000000..72511e21226ca6f40d3d6d5de4df3b1655b06f64 --- /dev/null +++ b/neonContext/Advertising/Advertising.aod @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1"> + <name>Advertising</name> + <title>Advertising material</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <mainView>AdvertisingMain_view</mainView> + <filterView>AdvertisingFilter_view</filterView> + <editView>AdvertisingEdit_view</editView> + <previewView>AdvertisingPreview_view</previewView> + <entity>Advertising_entity</entity> + <references> + <neonViewReference> + <name>c8fccf71-5805-45ca-bc8a-f78e37049217</name> + <view>AdvertisingEdit_view</view> + </neonViewReference> + <neonViewReference> + <name>503aaaf8-a226-4d69-9dee-d286c28ab6d3</name> + <view>AdvertisingFilter_view</view> + </neonViewReference> + <neonViewReference> + <name>5f486ca2-a9b6-4a13-93b0-59663e93776f</name> + <view>AdvertisingPreview_view</view> + </neonViewReference> + <neonViewReference> + <name>7d17d65a-30c9-4041-ac9a-ee60f1ae6c58</name> + <view>AdvertisingMain_view</view> + </neonViewReference> + <neonViewReference> + <name>ebb1f862-1b3d-46c0-ad8b-f06a1c14954d</name> + </neonViewReference> + <neonViewReference> + <name>980e7357-9728-4511-bd0a-3624320118e7</name> + <view>AdvertisingDetail_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonContext/AdvertisingItem/AdvertisingItem.aod b/neonContext/AdvertisingItem/AdvertisingItem.aod new file mode 100644 index 0000000000000000000000000000000000000000..b550260050866e09e812a984d57f5afa7e155a04 --- /dev/null +++ b/neonContext/AdvertisingItem/AdvertisingItem.aod @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1"> + <name>AdvertisingItem</name> + <title>Advertising item</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterView>AdvertisingItemFilter_view</filterView> + <editView>AdvertisingItemEdit_view</editView> + <previewView>AdvertisingItemPreview_view</previewView> + <entity>AdvertisingItem_entity</entity> + <references> + <neonViewReference> + <name>03ebbae0-0f94-41b2-ae92-d5e1bb54a715</name> + <view>AdvertisingItemEdit_view</view> + </neonViewReference> + <neonViewReference> + <name>af7ddf8c-3e2b-4740-bfef-b8c81d2f0f64</name> + </neonViewReference> + <neonViewReference> + <name>ec8a27af-0d20-41e8-925d-45c2f1bdfa54</name> + <view>AdvertisingItemPreview_view</view> + </neonViewReference> + <neonViewReference> + <name>27c97161-8929-4f5d-a8af-e7f4f56ae22b</name> + </neonViewReference> + <neonViewReference> + <name>a2fe9312-f4b7-421a-ac6d-19a07033d9bd</name> + <view>AdvertisingItemFilter_view</view> + </neonViewReference> + <neonViewReference> + <name>9cfaa623-167b-4309-b677-0b595c4f8034</name> + <view>AdvertisingItemSmallFilter_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonContext/Appointment/Appointment.aod b/neonContext/Appointment/Appointment.aod index 7bd2dabf7a6632779c11b0ca1de249b01382625e..7663253b4c7f6f14fbd7def51f014bb6fdddd7d3 100644 --- a/neonContext/Appointment/Appointment.aod +++ b/neonContext/Appointment/Appointment.aod @@ -23,9 +23,6 @@ <name>2a5e05b2-3f12-43b4-a3f4-3c31dbe0dace</name> <view>AppointmentFilter_view</view> </neonViewReference> - <neonViewReference> - <name>de97b676-6504-4edc-96ba-77ff8483a3a0</name> - </neonViewReference> <neonViewReference> <name>2f707344-d5ef-4abc-99d9-b6eec3318ae5</name> <view>AppointmentCheckUp_view</view> diff --git a/neonContext/Attribute/Attribute.aod b/neonContext/Attribute/Attribute.aod index 46d59cc597f0e66fc980eb493a14384ea1434195..749cae00feb54558e374c68bcbe98aa78a8c1877 100644 --- a/neonContext/Attribute/Attribute.aod +++ b/neonContext/Attribute/Attribute.aod @@ -38,8 +38,5 @@ <name>1cf7d11d-d593-4518-b7aa-aca1a9a2fb8a</name> <view>AttributeList_view</view> </neonViewReference> - <neonViewReference> - <name>ba95c103-7e26-404d-868b-ed47521bb3bd</name> - </neonViewReference> </references> </neonContext> diff --git a/neonContext/BulkMail/BulkMail.aod b/neonContext/BulkMail/BulkMail.aod index f87a16ce6022f8b215dccefdc34161255afcdc2d..2fa25f28a45c6747c6a28da2d488bca01c8ac0da 100644 --- a/neonContext/BulkMail/BulkMail.aod +++ b/neonContext/BulkMail/BulkMail.aod @@ -7,6 +7,7 @@ <filterView>BulkMailFilter_view</filterView> <editView>BulkMailEdit_view</editView> <previewView>BulkMailPreview_view</previewView> + <lookupView>BulkMailLookup_view</lookupView> <entity>BulkMail_entity</entity> <references> <neonViewReference> @@ -29,5 +30,21 @@ <name>6b057fb0-94ac-4bca-88b2-c97fdfcf9d6e</name> <view>BulkMailContent_view</view> </neonViewReference> + <neonViewReference> + <name>9bedd7f4-86ff-432c-b8e2-2ccd14f48990</name> + <view>BulkMailLookup_view</view> + </neonViewReference> + <neonViewReference> + <name>a6ced4c7-c03f-4355-ad9c-488f79591e91</name> + <view>BulkMailOverview_view</view> + </neonViewReference> + <neonViewReference> + <name>47190485-8304-412b-862b-029a3fd68e68</name> + <view>BulkMailOverviewTop_view</view> + </neonViewReference> + <neonViewReference> + <name>d526172e-d65f-46bf-b9de-4d45c2946144</name> + <view>BulkMailOverviewBottom_view</view> + </neonViewReference> </references> </neonContext> diff --git a/neonContext/BulkMailAnalysis/BulkMailAnalysis.aod b/neonContext/BulkMailAnalysis/BulkMailAnalysis.aod new file mode 100644 index 0000000000000000000000000000000000000000..8d2a0064076e5a0e50a5225d9cb6889d69654458 --- /dev/null +++ b/neonContext/BulkMailAnalysis/BulkMailAnalysis.aod @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1"> + <name>BulkMailAnalysis</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <entity>BulkMailAnalysis_entity</entity> + <references> + <neonViewReference> + <name>6513e9ec-0f08-4787-898a-91ad7c50253e</name> + <view>BulkMailAnalysisScoreCard_view</view> + </neonViewReference> + <neonViewReference> + <name>2bdd2e2e-9399-4b4a-a123-2b7a255b9bc0</name> + <view>BulkMailAnalysisDeviceTypeChart_view</view> + </neonViewReference> + <neonViewReference> + <name>5705a355-c092-417e-89ab-8899fd8c82c7</name> + </neonViewReference> + </references> +</neonContext> diff --git a/neonContext/DuplicateScannerResultFieldConfig/DuplicateScannerResultFieldConfig.aod b/neonContext/BulkMailAnalysisBounceChart/BulkMailAnalysisBounceChart.aod similarity index 63% rename from neonContext/DuplicateScannerResultFieldConfig/DuplicateScannerResultFieldConfig.aod rename to neonContext/BulkMailAnalysisBounceChart/BulkMailAnalysisBounceChart.aod index 79d97363fbb75d25de88168f1dbd76713df82073..505eb33571e55c7d994af0650b602836c83afeb5 100644 --- a/neonContext/DuplicateScannerResultFieldConfig/DuplicateScannerResultFieldConfig.aod +++ b/neonContext/BulkMailAnalysisBounceChart/BulkMailAnalysisBounceChart.aod @@ -1,12 +1,12 @@ <?xml version="1.0" encoding="UTF-8"?> <neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1"> - <name>DuplicateScannerResultFieldConfig</name> + <name>BulkMailAnalysisBounceChart</name> <majorModelMode>DISTRIBUTED</majorModelMode> - <entity>DuplicateScannerResultFieldConfig_entity</entity> + <entity>BulkMailAnalysisBounceChart_entity</entity> <references> <neonViewReference> - <name>4bab12e9-c4c3-450f-bfcf-8ecbec1f994c</name> - <view>DuplicateScannerResultFieldConfigEdit_view</view> + <name>34518b0d-f7ef-4834-abc2-538e800833e6</name> + <view>BulkMailAnalysisBounceChart_view</view> </neonViewReference> </references> </neonContext> diff --git a/neonContext/BulkMailAnalysisOpeningHourChart/BulkMailAnalysisOpeningHourChart.aod b/neonContext/BulkMailAnalysisOpeningHourChart/BulkMailAnalysisOpeningHourChart.aod new file mode 100644 index 0000000000000000000000000000000000000000..1aa23fa7699c406c1215aff2dd65002880c80ec9 --- /dev/null +++ b/neonContext/BulkMailAnalysisOpeningHourChart/BulkMailAnalysisOpeningHourChart.aod @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1"> + <name>BulkMailAnalysisOpeningHourChart</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <entity>BulkMailAnalysisOpeningHourChart_entity</entity> + <references> + <neonViewReference> + <name>41286619-75fb-43a8-b293-0a1c4d5d47f6</name> + <view>BulkMailAnalysisOpeningHourChart_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonContext/BulkMailAnalysisStatusFunnelChart/BulkMailAnalysisStatusFunnelChart.aod b/neonContext/BulkMailAnalysisStatusFunnelChart/BulkMailAnalysisStatusFunnelChart.aod new file mode 100644 index 0000000000000000000000000000000000000000..253ac2ca8ae440e9e719df203487dfe832642b92 --- /dev/null +++ b/neonContext/BulkMailAnalysisStatusFunnelChart/BulkMailAnalysisStatusFunnelChart.aod @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1"> + <name>BulkMailAnalysisStatusFunnelChart</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <entity>BulkMailAnalysisStatusFunnelChart_entity</entity> + <references> + <neonViewReference> + <name>a0dfc680-e935-40cb-972d-fa8b758d2346</name> + <view>BulkMailAnalysisStatusFunnelChart_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonContext/BulkMailTestRecipient/BulkMailTestRecipient.aod b/neonContext/BulkMailTestRecipient/BulkMailTestRecipient.aod new file mode 100644 index 0000000000000000000000000000000000000000..ce4cb549d1ea6ba64af772bdddc3e2014979f585 --- /dev/null +++ b/neonContext/BulkMailTestRecipient/BulkMailTestRecipient.aod @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1"> + <name>BulkMailTestRecipient</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterView>BulkMailTestRecipientFilter_view</filterView> + <editView>BulkMailTestRecipientEdit_view</editView> + <entity>BulkMailTestRecipient_entity</entity> + <references> + <neonViewReference> + <name>eb1567ec-e5d3-4442-9fe3-7b456ba13ffe</name> + <view>BulkMailTestRecipientFilter_view</view> + </neonViewReference> + <neonViewReference> + <name>b089fff4-d9b3-483d-871a-c59fcb1597ae</name> + <view>BulkMailTestRecipientEdit_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonContext/Classification/Classification.aod b/neonContext/Classification/Classification.aod index 07bc14712048df8b6962b9852069175b5954d472..30512179e47677f2a733d6c63920e9b5f64baec8 100644 --- a/neonContext/Classification/Classification.aod +++ b/neonContext/Classification/Classification.aod @@ -4,7 +4,6 @@ <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/neonContext/Classification/documentation.adoc</documentation> <filterView>ClassificationTree_view</filterView> - <previewView>ClassificationPreview_view</previewView> <entity>Classification_entity</entity> <references> <neonViewReference> @@ -13,7 +12,6 @@ </neonViewReference> <neonViewReference> <name>50c0d5c5-c84f-452d-9f77-41b82ac0319f</name> - <view>ClassificationPreview_view</view> </neonViewReference> </references> </neonContext> diff --git a/neonContext/CommunicationChannel/CommunicationChannel.aod b/neonContext/CommunicationChannel/CommunicationChannel.aod new file mode 100644 index 0000000000000000000000000000000000000000..e99ae10c9b630c39e05497cd0613d5cced5c936e --- /dev/null +++ b/neonContext/CommunicationChannel/CommunicationChannel.aod @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1"> + <name>CommunicationChannel</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <entity>CommunicationChannel_entity</entity> +</neonContext> diff --git a/neonContext/CommunicationSettings/CommunicationSettings.aod b/neonContext/CommunicationSettings/CommunicationSettings.aod new file mode 100644 index 0000000000000000000000000000000000000000..99a89c8a6a4179e404a34149b1696e6879188f46 --- /dev/null +++ b/neonContext/CommunicationSettings/CommunicationSettings.aod @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1"> + <name>CommunicationSettings</name> + <title>Communication Settings</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterView>CommunicationSettingsFilter_view</filterView> + <editView>CommunicationSettingsEdit_view</editView> + <previewView>CommunicationSettingsPreview_view</previewView> + <entity>CommunicationSettings_entity</entity> + <references> + <neonViewReference> + <name>53b6570c-1a3f-4b82-9d00-5eeeb7e69f3e</name> + <view>CommunicationSettingsEdit_view</view> + </neonViewReference> + <neonViewReference> + <name>4c8e9037-7f69-4b9e-aa4c-b13d6dfca6a0</name> + <view>CommunicationSettingsFilter_view</view> + </neonViewReference> + <neonViewReference> + <name>f3831e2a-ab26-4708-88a3-17211f06ca75</name> + <view>CommunicationSettingsPreview_view</view> + </neonViewReference> + <neonViewReference> + <name>05b83302-c56b-4c03-a18f-8d78a93a27b1</name> + <view>CommunicationSettingsDrawer_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonContext/DSGVO/DSGVO.aod b/neonContext/DSGVO/DSGVO.aod index 1a7b678b320f344c420a269147b4cc947cfa577c..a493e487ba2ac91d82948d94c807c811bc717860 100644 --- a/neonContext/DSGVO/DSGVO.aod +++ b/neonContext/DSGVO/DSGVO.aod @@ -1,6 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1"> <name>DSGVO</name> + <title>Data Privacy</title> <majorModelMode>DISTRIBUTED</majorModelMode> <filterView>DSGVOFilter_view</filterView> <editView>DSGVOEdit_view</editView> diff --git a/neonContext/DSGVOConfiguration/DSGVOConfiguration.aod b/neonContext/DSGVOConfiguration/DSGVOConfiguration.aod new file mode 100644 index 0000000000000000000000000000000000000000..d91e9c10ee71d6e952db08356878cd5dbd1b6a73 --- /dev/null +++ b/neonContext/DSGVOConfiguration/DSGVOConfiguration.aod @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1"> + <name>DSGVOConfiguration</name> + <title>DSGVO Configuration</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterView>DSGVOConfigurationFilter_view</filterView> + <editView>DSGVOConfigurationEdit_view</editView> + <previewView>DSGVOConfigurationPreview_view</previewView> + <entity>DSGVOConfiguration_entity</entity> + <references> + <neonViewReference> + <name>69adadd7-b1a3-4b25-bc72-807dc9bcdd15</name> + <view>DSGVOConfigurationEdit_view</view> + </neonViewReference> + <neonViewReference> + <name>98b0a458-ff6b-472f-a403-c99d6389da0f</name> + <view>DSGVOConfigurationFilter_view</view> + </neonViewReference> + <neonViewReference> + <name>824363d9-9924-404d-922f-c6cf447412d7</name> + <view>DSGVOConfigurationPreview_view</view> + </neonViewReference> + <neonViewReference> + <name>09c76322-225f-46cd-a3eb-48b56d6c661c</name> + <view>DSGVOConfigurationFilterFooter_view</view> + </neonViewReference> + <neonViewReference> + <name>ea7e56f5-e6f4-4c7c-872c-3ed6f0e5bf24</name> + <view>DSGVOConfigurationFilterHeader_view</view> + </neonViewReference> + <neonViewReference> + <name>ed051f3e-c8b3-4561-940f-cd54eeb91dd3</name> + <view>DSGVOConfigurationFilterFooter_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonContext/DSGVOConfigurationAttribute/DSGVOConfigurationAttribute.aod b/neonContext/DSGVOConfigurationAttribute/DSGVOConfigurationAttribute.aod new file mode 100644 index 0000000000000000000000000000000000000000..9c6dc17b905012355c5e6d4f3e813980322811c5 --- /dev/null +++ b/neonContext/DSGVOConfigurationAttribute/DSGVOConfigurationAttribute.aod @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1"> + <name>DSGVOConfigurationAttribute</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterView>DSGVOConfigurationAttributeFilter_view</filterView> + <entity>DSGVOConfigurationAttribute_entity</entity> + <references> + <neonViewReference> + <name>984a036f-e75e-481e-8393-7c3e737d2d99</name> + <view>DSGVOConfigurationAttributeFilter_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonContext/DSGVODeleteFlag/DSGVODeleteFlag.aod b/neonContext/DSGVODeleteFlag/DSGVODeleteFlag.aod new file mode 100644 index 0000000000000000000000000000000000000000..7797e1cfba519a1ea8dd0d860aafee00cf18ce15 --- /dev/null +++ b/neonContext/DSGVODeleteFlag/DSGVODeleteFlag.aod @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1"> + <name>DSGVODeleteFlag</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterView>DSGVODeleteFlagFilter_view</filterView> + <editView>DSGVODeleteFlagEdit_view</editView> + <previewView>DSGVODeleteFlagPreview_view</previewView> + <entity>DSGVODeleteFlag_entity</entity> + <references> + <neonViewReference> + <name>37d7c5ce-aa82-4b72-ad9c-e35ef9d07c24</name> + <view>DSGVODeleteFlagEdit_view</view> + </neonViewReference> + <neonViewReference> + <name>835e41b0-4d84-4f7e-a07c-e706d1558449</name> + <view>DSGVODeleteFlagFilter_view</view> + </neonViewReference> + <neonViewReference> + <name>60ccc758-e155-433b-abf6-e5e3d144ef7c</name> + <view>DSGVODeleteFlagPreview_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonContext/Document/Document.aod b/neonContext/Document/Document.aod index 625b588c0d26638db8e8001004ea6d6d8a12f3c1..cfb02a7f2b32b641b632905df49b01ef560bd62c 100644 --- a/neonContext/Document/Document.aod +++ b/neonContext/Document/Document.aod @@ -37,8 +37,5 @@ <name>434ed60c-8219-4ef5-b795-6d72b9ae48c9</name> <view>DocumentWithIdFilter_view</view> </neonViewReference> - <neonViewReference> - <name>0dfe06a2-7a32-40b4-bac7-3b408956deba</name> - </neonViewReference> </references> </neonContext> diff --git a/neonContext/DuplicateOrganisation/DuplicateOrganisation.aod b/neonContext/DuplicateOrganisation/DuplicateOrganisation.aod new file mode 100644 index 0000000000000000000000000000000000000000..d3cfec52aa9ea9b895eec795511a40b216c40de5 --- /dev/null +++ b/neonContext/DuplicateOrganisation/DuplicateOrganisation.aod @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1"> + <name>DuplicateOrganisation</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <previewView>DuplicateOrganisationPreview_view</previewView> + <entity>DuplicateOrganisation_entity</entity> + <references> + <neonViewReference> + <name>c62620c2-33e3-4b76-bd76-0c1be1d516eb</name> + <view>DuplicateOrganisationFilter_view</view> + </neonViewReference> + <neonViewReference> + <name>512ef5c4-dc95-4ef1-81e0-d45479249c2e</name> + <view>DuplicateOrganisationEdit_view</view> + </neonViewReference> + <neonViewReference> + <name>2e59d859-6b5f-4bb5-a47b-1225164140ed</name> + <view>DuplicateOrganisationPreview_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonContext/DuplicatePerson/DuplicatePerson.aod b/neonContext/DuplicatePerson/DuplicatePerson.aod new file mode 100644 index 0000000000000000000000000000000000000000..a30cb53a7df1f4e8fd274399a08d9911a870e3c4 --- /dev/null +++ b/neonContext/DuplicatePerson/DuplicatePerson.aod @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1"> + <name>DuplicatePerson</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <previewView>DuplicatePersonPreview_view</previewView> + <entity>DuplicatePerson_entity</entity> + <references> + <neonViewReference> + <name>930c8a65-e92e-4222-9ca7-cbc663ebf274</name> + <view>DuplicatePersonFilter_view</view> + </neonViewReference> + <neonViewReference> + <name>f54e544a-2279-41ec-a7b3-44e11989a736</name> + <view>DuplicatePersonEdit_view</view> + </neonViewReference> + <neonViewReference> + <name>596cd813-22e1-4ba6-96d5-fefefbb800cf</name> + <view>DuplicatePersonPreview_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonContext/Duplicates/Duplicates.aod b/neonContext/Duplicates/Duplicates.aod deleted file mode 100644 index 5de0f3a1913c9bb49aecba2c8ea9998e23ad1faf..0000000000000000000000000000000000000000 --- a/neonContext/Duplicates/Duplicates.aod +++ /dev/null @@ -1,50 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1"> - <name>Duplicates</name> - <title>Duplicates</title> - <majorModelMode>DISTRIBUTED</majorModelMode> - <filterView>DuplicatesOverview_view</filterView> - <entity>Duplicates_entity</entity> - <references> - <neonViewReference> - <name>d8994f4c-3abf-4ff1-8bdb-f12e527df655</name> - <view>PersonDuplicatesFilter_view</view> - </neonViewReference> - <neonViewReference> - <name>de287a3b-1d6a-435c-b65e-d833c1751edf</name> - <view>DuplicatesOverview_view</view> - </neonViewReference> - <neonViewReference> - <name>5bdeb931-4e69-4520-bbc9-94fb17679331</name> - <view>PersonDublicatesTab_view</view> - </neonViewReference> - <neonViewReference> - <name>70cb2e96-5bc1-46cb-982f-b27db5d143d2</name> - <view>PersonClusterMain_view</view> - </neonViewReference> - <neonViewReference> - <name>7cdb6ca7-e99d-4eb6-897a-0953157bf62f</name> - <view>DuplicatesUnrelatedCluster_view</view> - </neonViewReference> - <neonViewReference> - <name>4b9a1a26-e14f-4246-b474-8bfb3e3a95b0</name> - <view>OrganisationDuplicatesTab_view</view> - </neonViewReference> - <neonViewReference> - <name>f9b46eab-7417-4f61-b7cd-dc772c04ddc0</name> - <view>OrganisationDuplicatesFilter_view</view> - </neonViewReference> - <neonViewReference> - <name>d68a425a-037a-4725-8dc1-b0afac277bdd</name> - <view>OrganisationUnrelatedDuplicates_view</view> - </neonViewReference> - <neonViewReference> - <name>4c1fc406-1c83-4fb6-9059-e45ff5c80756</name> - <view>OrganisationClusterMain_view</view> - </neonViewReference> - <neonViewReference> - <name>2400acfd-50e4-472d-b69c-368b9d25b6c6</name> - <view>PersonClusterPreview_view</view> - </neonViewReference> - </references> -</neonContext> diff --git a/neonContext/EmailData/EmailData.aod b/neonContext/EmailData/EmailData.aod new file mode 100644 index 0000000000000000000000000000000000000000..83bc40e8e1498416b5b1f5b473f4b162129ed65d --- /dev/null +++ b/neonContext/EmailData/EmailData.aod @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1"> + <name>EmailData</name> + <title>Email</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterView>EmailDataFilter_view</filterView> + <entity>EmailData_entity</entity> + <references> + <neonViewReference> + <name>57ad7ee8-5d7e-480b-bdf4-d6b5fcdc21be</name> + <view>EmailDataFilter_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonContext/EmailFilterHandling/EmailFilterHandling.aod b/neonContext/EmailFilterHandling/EmailFilterHandling.aod new file mode 100644 index 0000000000000000000000000000000000000000..5dd14c418c15279d2fcb2df5060d8cd81d502603 --- /dev/null +++ b/neonContext/EmailFilterHandling/EmailFilterHandling.aod @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1"> + <name>EmailFilterHandling</name> + <title>Email Filter</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterView>EmailFilterHandlingFilter_view</filterView> + <editView>EmailFilterHandlingEdit_view</editView> + <previewView>EmailFilterHandlingPreview_view</previewView> + <entity>EmailFilterHandling_entity</entity> + <references> + <neonViewReference> + <name>fe942952-42b7-4e41-813d-535250e14171</name> + <view>EmailFilterHandlingFilter_view</view> + </neonViewReference> + <neonViewReference> + <name>a4f2bee1-43bd-444e-9547-b16dd57afc49</name> + <view>EmailFilterHandlingEdit_view</view> + </neonViewReference> + <neonViewReference> + <name>81ae0070-4e8a-4720-9330-8aa2efd08d6c</name> + <view>EmailFilterHandlingPreview_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonContext/Interest/Interest.aod b/neonContext/Interest/Interest.aod new file mode 100644 index 0000000000000000000000000000000000000000..c78d21f7bfe50ee99dd70d41e648e30ca88bcac8 --- /dev/null +++ b/neonContext/Interest/Interest.aod @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1"> + <name>Interest</name> + <title>Interest</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterView>InterestFilter_view</filterView> + <editView>InterestEdit_view</editView> + <lookupView>InterestLookup_view</lookupView> + <entity>Interest_entity</entity> + <references> + <neonViewReference> + <name>835eeffb-73df-41fa-b1c3-9c659c9eeda6</name> + <view>InterestFilter_view</view> + </neonViewReference> + <neonViewReference> + <name>c00312db-318a-45c6-a523-b668ef75a5f9</name> + <view>InterestEdit_view</view> + </neonViewReference> + <neonViewReference> + <name>f394f1c7-99d2-4bd9-8daa-502f444c7dff</name> + <view>InterestLookup_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonContext/InterestLink/InterestLink.aod b/neonContext/InterestLink/InterestLink.aod new file mode 100644 index 0000000000000000000000000000000000000000..c89728b86c92c119d00905163c5c583d320abfbe --- /dev/null +++ b/neonContext/InterestLink/InterestLink.aod @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1"> + <name>InterestLink</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterView>InterestLinkFilter_view</filterView> + <editView>InterestLinkEdit_view</editView> + <entity>InterestLink_entity</entity> + <references> + <neonViewReference> + <name>2a433681-9aec-403e-8bb7-29462265a4a9</name> + <view>InterestLinkEdit_view</view> + </neonViewReference> + <neonViewReference> + <name>fb9f1140-7b69-4c45-94e0-c76fbb0d0318</name> + <view>InterestLinkFilter_view</view> + </neonViewReference> + <neonViewReference> + <name>efdc5b84-9554-4760-a944-fad63f714ce1</name> + <view>InterestLinkDrawer_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonContext/MailLog/MailLog.aod b/neonContext/MailLog/MailLog.aod new file mode 100644 index 0000000000000000000000000000000000000000..64c6bca732e03ed2731704a43d2238e5421301b3 --- /dev/null +++ b/neonContext/MailLog/MailLog.aod @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1"> + <name>MailLog</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterView>MailLogFilter_view</filterView> + <entity>MailLog_entity</entity> + <references> + <neonViewReference> + <name>01787395-2369-42d2-ac0d-0062071df25e</name> + <view>MailLogFilter_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonContext/Observation/Observation.aod b/neonContext/Observation/Observation.aod new file mode 100644 index 0000000000000000000000000000000000000000..aeab7d749b7e799c4c22e6d58f55bbc73c5be06c --- /dev/null +++ b/neonContext/Observation/Observation.aod @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1"> + <name>Observation</name> + <title>Observation</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <icon>VAADIN:EYE</icon> + <filterView>ObservationFilter_view</filterView> + <editView>ObservationEdit_view</editView> + <previewView>ObservationPreview_view</previewView> + <entity>Observation_entity</entity> + <references> + <neonViewReference> + <name>081e645d-ede7-4987-891c-725e2300c7a0</name> + <view>ObservationFilter_view</view> + </neonViewReference> + <neonViewReference> + <name>381da87e-006b-4fd6-b2b2-18e53d675928</name> + <view>ObservationEdit_view</view> + </neonViewReference> + <neonViewReference> + <name>8e1417a2-f172-451f-9e76-81b852abcaa1</name> + <view>ObservationPreview_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonContext/Offer/Offer.aod b/neonContext/Offer/Offer.aod index 271bdfa9b499295cc511d6c1a464eb8afb50a3fd..9d43127e980ab775283fd2fe4e2c0367104611e2 100644 --- a/neonContext/Offer/Offer.aod +++ b/neonContext/Offer/Offer.aod @@ -47,5 +47,8 @@ <webserviceReference> <name>277d4493-9a49-4e68-b00c-29d3d0e0b9d2</name> </webserviceReference> + <neonViewReference> + <name>e664da63-c1c7-4def-ba7b-037cd8da6994</name> + </neonViewReference> </references> </neonContext> diff --git a/neonContext/Orderitem/Orderitem.aod b/neonContext/Orderitem/Orderitem.aod index 7f83b02e3c96c59afcef3fcd95509ab6950e035e..7317e72be684374f98fb8797603cf4d6a3ec1819 100644 --- a/neonContext/Orderitem/Orderitem.aod +++ b/neonContext/Orderitem/Orderitem.aod @@ -4,6 +4,7 @@ <majorModelMode>DISTRIBUTED</majorModelMode> <filterView>OrderitemFilter_view</filterView> <editView>OrderitemEdit_view</editView> + <previewView>OrderitemPreview_view</previewView> <entity>Orderitem_entity</entity> <references> <neonViewReference> diff --git a/neonContext/Organisation/Organisation.aod b/neonContext/Organisation/Organisation.aod index 87f1786ecea40ec5b4903385bde15598fa3f9489..fccd99b2964f1c91e161f5579d611ee0a11f2785 100644 --- a/neonContext/Organisation/Organisation.aod +++ b/neonContext/Organisation/Organisation.aod @@ -49,7 +49,7 @@ </neonViewReference> <neonViewReference> <name>c72caf13-37cf-4af9-811d-832f43801369</name> - <view>OrganisationAttributeRestriction_view</view> + <view>OrganisationAttribute_view</view> </neonViewReference> <neonViewReference> <name>ade0ed85-260d-4da5-bf4c-f838cfdcc693</name> @@ -67,5 +67,13 @@ <name>0b052872-d6b4-41ac-ad0b-580575893e1b</name> <view>OrganisationLesserNoiseTable_view</view> </neonViewReference> + <neonViewReference> + <name>d9091127-4ad7-46bb-ba5f-988aa84c52b5</name> + <view>OrganisationPlanningTurnoverChart_view</view> + </neonViewReference> + <neonViewReference> + <name>a6132e66-81b6-4350-a398-0d9d9c1bbafd</name> + <view>OrganisationMarketing_view</view> + </neonViewReference> </references> </neonContext> diff --git a/neonContext/OrganisationsMultiEdit/OrganisationsMultiEdit.aod b/neonContext/OrganisationsMultiEdit/OrganisationsMultiEdit.aod new file mode 100644 index 0000000000000000000000000000000000000000..6861aac96fd603b6795210ea41fa7369f4a70cb0 --- /dev/null +++ b/neonContext/OrganisationsMultiEdit/OrganisationsMultiEdit.aod @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1"> + <name>OrganisationsMultiEdit</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <entity>OrganisationsMultiEdit_entity</entity> + <references> + <neonViewReference> + <name>c42551af-ccfd-4a13-a795-8acbf4fac82e</name> + <view>OrganisationsMultiEdit_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonContext/Person/Person.aod b/neonContext/Person/Person.aod index 5a9b1ecbe90107c4e484b01a2a7755d85faa8284..89ed9017e376a5826a9972eef836ac0da2fe8194 100644 --- a/neonContext/Person/Person.aod +++ b/neonContext/Person/Person.aod @@ -49,7 +49,7 @@ </neonViewReference> <neonViewReference> <name>296af7da-1994-49a3-a26f-903f29609fae</name> - <view>PersonAttributeRestriction_view</view> + <view>PersonAttribute_view</view> </neonViewReference> <neonViewReference> <name>dd102d90-0af3-4956-95f5-0175c50de3f4</name> @@ -60,8 +60,16 @@ <view>PersonMultiEditQuickEntry_view</view> </neonViewReference> <neonViewReference> - <name>2a6c44be-53e2-469e-84b3-615841bd4430</name> - <view>PersonDuplicateEditview_view</view> + <name>627518cc-15b0-4f0d-b6f3-ec06172e7c4e</name> + <view>PersonMarketing_view</view> + </neonViewReference> + <neonViewReference> + <name>be0bb97f-88e6-4a54-820c-7aee284a917a</name> + <view>PersonDSGVO_view</view> + </neonViewReference> + <neonViewReference> + <name>dc6b609b-7e28-4f76-b7f3-6fd8696b9b7d</name> + <view>PersonFilterOverlay_view</view> </neonViewReference> </references> </neonContext> diff --git a/neonContext/Planning/Planning.aod b/neonContext/Planning/Planning.aod new file mode 100644 index 0000000000000000000000000000000000000000..bdaf234b370b9669e5d3ee8c32b81090c05ca3e8 --- /dev/null +++ b/neonContext/Planning/Planning.aod @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1"> + <name>Planning</name> + <title>Planning</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <icon>VAADIN:MONEY</icon> + <filterView>PlanningFilter_view</filterView> + <editView>PlanningEdit_view</editView> + <lookupView>PlanningFilter_view</lookupView> + <entity>Planning_entity</entity> + <references> + <neonViewReference> + <name>6751a02c-2614-41aa-bb69-c471184b77be</name> + <view>PlanningFilter_view</view> + </neonViewReference> + <neonViewReference> + <name>360005f9-0f0a-41dc-b7c8-3f8b2e947d98</name> + <view>PlanningEdit_view</view> + </neonViewReference> + <neonViewReference> + <name>e12da517-cd75-4665-a4cd-c9a2643dc0c1</name> + <view>PlanningOrganisationFilter_view</view> + </neonViewReference> + <neonViewReference> + <name>d7be79c9-fc8b-4b3a-98ee-2c2b93766bbb</name> + <view>PlanningMultiEditOverlay_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonContext/PlanningAddToOrganisations/PlanningAddToOrganisations.aod b/neonContext/PlanningAddToOrganisations/PlanningAddToOrganisations.aod new file mode 100644 index 0000000000000000000000000000000000000000..8b02af1a9e8b8e991e4b17c72042323d156e1f64 --- /dev/null +++ b/neonContext/PlanningAddToOrganisations/PlanningAddToOrganisations.aod @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1"> + <name>PlanningAddToOrganisations</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterView>PlanningAddToOrganisations_view</filterView> + <editView>PlanningAddToOrganisations_view</editView> + <entity>PlanningAddToOrganisations_entity</entity> + <references> + <neonViewReference> + <name>0583b894-7d37-41af-923d-1e25c41b375b</name> + <view>PlanningAddToOrganisations_view</view> + </neonViewReference> + <neonViewReference> + <name>97d65606-07b2-4597-bff0-02353b1b77a3</name> + <view>PlanningAddToOrganisationOverlay_view</view> + </neonViewReference> + <neonViewReference> + <name>956879d0-f8ea-480d-b5c2-aa01cd35b331</name> + <view>PlanningAddToOrganisationsExistingPlannings_view</view> + </neonViewReference> + <neonViewReference> + <name>7dd047c4-f672-4eeb-b0de-6a80b4014ee6</name> + <view>PlanningAddToOrganisationsNewPlannings_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonContext/DuplicatesUnrelated/DuplicatesUnrelated.aod b/neonContext/PlanningChangeStatusAndResponsible/PlanningChangeStatusAndResponsible.aod similarity index 58% rename from neonContext/DuplicatesUnrelated/DuplicatesUnrelated.aod rename to neonContext/PlanningChangeStatusAndResponsible/PlanningChangeStatusAndResponsible.aod index 56bf4fd8574682d13f54fd2c5628fde361465b46..3e7cb8a0d19a3ff6bf077bc94f7d7ccf186794df 100644 --- a/neonContext/DuplicatesUnrelated/DuplicatesUnrelated.aod +++ b/neonContext/PlanningChangeStatusAndResponsible/PlanningChangeStatusAndResponsible.aod @@ -1,16 +1,16 @@ <?xml version="1.0" encoding="UTF-8"?> <neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1"> - <name>DuplicatesUnrelated</name> + <name>PlanningChangeStatusAndResponsible</name> <majorModelMode>DISTRIBUTED</majorModelMode> - <entity>DuplicatesUnrelated_entity</entity> + <entity>PlanningChangeStatusAndResponsible_entity</entity> <references> <neonViewReference> - <name>0b5cbd31-cfa1-4ee8-8bd2-b4772ac95953</name> - <view>DuplicatesUnrelatedPersonFilter_view</view> + <name>aded48b1-7b16-4ef8-a7b8-0679846d888f</name> + <view>PlanningChangeStatus_view</view> </neonViewReference> <neonViewReference> - <name>433a665e-63ac-4281-8f7c-08603362daf7</name> - <view>DuplicatesUnrelatedOrganisationFilter_view</view> + <name>519a7687-db30-4f6b-83f3-f228e96ef19a</name> + <view>PlanningChangeResponsible_view</view> </neonViewReference> </references> </neonContext> diff --git a/neonContext/Product/Product.aod b/neonContext/Product/Product.aod index 4a1a49078e0a59b2fd6643f45972170c2e52f505..8b72cfd15111180f32759058af5695b27cc97382 100644 --- a/neonContext/Product/Product.aod +++ b/neonContext/Product/Product.aod @@ -35,5 +35,8 @@ <name>8088a294-78dd-4f7b-8bd3-add1b9fe3d90</name> <view>ProductDescritption_view</view> </neonViewReference> + <neonViewReference> + <name>6ddd9a60-2705-47c3-8f32-3131e3cfcc4b</name> + </neonViewReference> </references> </neonContext> diff --git a/neonContext/StandardWorkflow/StandardWorkflow.aod b/neonContext/StandardWorkflow/StandardWorkflow.aod new file mode 100644 index 0000000000000000000000000000000000000000..a59793aafb3cd0b2bb6245527ea24996281e76c3 --- /dev/null +++ b/neonContext/StandardWorkflow/StandardWorkflow.aod @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1"> + <name>StandardWorkflow</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterView>StandardWorkflowFilter_view</filterView> + <lookupView>StandardWorkflowFilter_view</lookupView> + <entity>StandardWorkflow_entity</entity> + <references> + <neonViewReference> + <name>a30bfbf9-5e2a-4f9e-85b4-23763c228cb7</name> + <view>StandardWorkflowFilter_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonContext/Turnover/Turnover.aod b/neonContext/Turnover/Turnover.aod index 1973598c84fcc7f4092662bd6f72493b54047005..b1da34ccaf6098ce619d7dc851f91219b4710972 100644 --- a/neonContext/Turnover/Turnover.aod +++ b/neonContext/Turnover/Turnover.aod @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="UTF-8"?> <neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1"> <name>Turnover</name> - <title>Turnover</title> + <title>Sales forecast</title> <majorModelMode>DISTRIBUTED</majorModelMode> - <filterView>TurnoverChart_view</filterView> + <filterView>TurnoverDynamicMultiDataChart_view</filterView> <entity>Turnover_entity</entity> <references> <neonViewReference> @@ -18,5 +18,9 @@ <name>29a44f69-d9a5-4916-8242-4ba470506d92</name> <view>TurnoverChartForcastDrawer_view</view> </neonViewReference> + <neonViewReference> + <name>d54348be-db01-4f89-ad3f-99ef35fa7e32</name> + <view>TurnoverDynamicMultiDataChart_view</view> + </neonViewReference> </references> </neonContext> diff --git a/neonContext/Weblink/Weblink.aod b/neonContext/Weblink/Weblink.aod new file mode 100644 index 0000000000000000000000000000000000000000..375a57a0ff63f17d071da1cf91e73a09bcc5fc4b --- /dev/null +++ b/neonContext/Weblink/Weblink.aod @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1"> + <name>Weblink</name> + <title>Linkmanagement</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <icon>NEON:FILTER</icon> + <mainView>WeblinkMain_view</mainView> + <filterView>WeblinkFilter_view</filterView> + <editView>WeblinkEdit_view</editView> + <previewView>WeblinkPreview_view</previewView> + <entity>Weblink_entity</entity> + <references> + <neonViewReference> + <name>1214292b-2504-4f83-97ba-507074a92342</name> + <view>WeblinkFilter_view</view> + </neonViewReference> + <neonViewReference> + <name>26c15847-68bf-4ae1-80c6-bf4aebe02d3c</name> + <view>WeblinkEdit_view</view> + </neonViewReference> + <neonViewReference> + <name>f5fd5e04-74a1-4c25-8237-9d6dcdc801f5</name> + <view>WeblinkMain_view</view> + </neonViewReference> + <neonViewReference> + <name>466496bf-b703-4e94-be8c-33100a5516c6</name> + <view>WeblinkPreview_view</view> + </neonViewReference> + <neonViewReference> + <name>e1de7061-bc31-4dfb-bc5e-2e75db1c52ea</name> + <view>WeblinkDrawer_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonContext/WeblinkClick/WeblinkClick.aod b/neonContext/WeblinkClick/WeblinkClick.aod new file mode 100644 index 0000000000000000000000000000000000000000..06f55183587ce936ca90e2d452ecaf69070be639 --- /dev/null +++ b/neonContext/WeblinkClick/WeblinkClick.aod @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1"> + <name>WeblinkClick</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterView>WeblinkClickFilter_view</filterView> + <entity>WeblinkClick_entity</entity> + <references> + <neonViewReference> + <name>27fd3309-5cb7-4e27-85e3-68ce4ad2e60e</name> + <view>WeblinkClickFilter_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonContext/WeblinkTag/WeblinkTag.aod b/neonContext/WeblinkTag/WeblinkTag.aod new file mode 100644 index 0000000000000000000000000000000000000000..e34c5dcd3b26f1b05ad2d77d1c1fa4ec2ed41986 --- /dev/null +++ b/neonContext/WeblinkTag/WeblinkTag.aod @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1"> + <name>WeblinkTag</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterView>WeblinkTagFilter_view</filterView> + <editView>WeblinkTagEdit_view</editView> + <entity>WeblinkTag_entity</entity> + <references> + <neonViewReference> + <name>c4a7ba88-dd7e-4471-ae17-450602216475</name> + <view>WeblinkTagFilter_view</view> + </neonViewReference> + <neonViewReference> + <name>51e9185c-cd69-483e-b618-fbb27cf8912b</name> + <view>WeblinkTagEdit_view</view> + </neonViewReference> + <neonViewReference> + <name>77247264-cea7-4fb3-8f94-d172213faac8</name> + <view>WeblinkTagMultiEdit_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonContext/WorkflowDefinitionStore/WorkflowDefinitionStore.aod b/neonContext/WorkflowDefinitionStore/WorkflowDefinitionStore.aod new file mode 100644 index 0000000000000000000000000000000000000000..83c77e78145347fcbd904dd64745ab7591b406d8 --- /dev/null +++ b/neonContext/WorkflowDefinitionStore/WorkflowDefinitionStore.aod @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonContext xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.1" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonContext/1.1.1"> + <name>WorkflowDefinitionStore</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <entity>WorkflowDefinitionStore_entity</entity> + <references> + <neonViewReference> + <name>3a038eee-9187-4d47-bd63-f6396c915627</name> + <view>WorkflowDefinitionStore_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonDashboard/Marketingdashboard/Marketingdashboard.aod b/neonDashboard/Marketingdashboard/Marketingdashboard.aod new file mode 100644 index 0000000000000000000000000000000000000000..441fb62f8ded6e57523d5ffef6b62237faf1ad12 --- /dev/null +++ b/neonDashboard/Marketingdashboard/Marketingdashboard.aod @@ -0,0 +1,74 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonDashboard xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonDashboard/1.1.0"> + <name>Marketingdashboard</name> + <title>Marketing Dashboard</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <icon>VAADIN:CHART_GRID</icon> + <dashboardType>PUBLIC</dashboardType> + <editRoles> + <element>INTERNAL_ADMINISTRATOR</element> + <element>INTERNAL_DASHBOARDSTOREADMIN</element> + </editRoles> + <defaultDashlets> + <neonDashlet> + <name>BulkMailKeyFiguresDashlet</name> + <viewName>BulkMailAnalysisScoreCard_view</viewName> + <configName>bulkMailKeyFigures</configName> + <uiConfiguration> + <name>uiConfiguration</name> + <xPos v="0" /> + <yPos v="0" /> + <colspan v="2" /> + <rowspan v="5" /> + </uiConfiguration> + </neonDashlet> + <neonDashlet> + <name>MyCampaignsDashlet</name> + <viewName>CampaignFilter_view</viewName> + <configName>CurrentUsersOwnedCampaigns</configName> + <uiConfiguration> + <name>uiConfiguration</name> + <xPos v="2" /> + <yPos v="5" /> + <colspan v="1" /> + <rowspan v="5" /> + </uiConfiguration> + </neonDashlet> + <neonDashlet> + <name>CampaignCostChartDashlet</name> + <viewName>CampaignCostChart_view</viewName> + <configName>CampaignCostsChart</configName> + <uiConfiguration> + <name>uiConfiguration</name> + <xPos v="1" /> + <yPos v="5" /> + <colspan v="1" /> + <rowspan v="5" /> + </uiConfiguration> + </neonDashlet> + <neonDashlet> + <name>MyBulkmailsDashlet</name> + <viewName>BulkMailFilter_view</viewName> + <configName>CurrentUserOwnedBulkmails</configName> + <uiConfiguration> + <name>uiConfiguration</name> + <xPos v="0" /> + <yPos v="5" /> + <colspan v="1" /> + <rowspan v="5" /> + </uiConfiguration> + </neonDashlet> + <neonDashlet> + <name>DeviceTypePieChartDashlet</name> + <viewName>BulkMailAnalysisDeviceTypeChart_view</viewName> + <configName>deviceTypePieChart</configName> + <uiConfiguration> + <name>uiConfiguration</name> + <xPos v="2" /> + <yPos v="0" /> + <colspan v="1" /> + <rowspan v="5" /> + </uiConfiguration> + </neonDashlet> + </defaultDashlets> +</neonDashboard> diff --git a/neonView/ActivityAdvertising_view/ActivityAdvertising_view.aod b/neonView/ActivityAdvertising_view/ActivityAdvertising_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..768596a4c9a6df67fa3c9887823c060d65b8c4e2 --- /dev/null +++ b/neonView/ActivityAdvertising_view/ActivityAdvertising_view.aod @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>ActivityAdvertising_view</name> + <title>Advertising material</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <boxLayout> + <name>layout</name> + </boxLayout> + </layout> + <children> + <neonViewReference> + <name>2f70a528-fea9-45d7-abbd-cb48fd767472</name> + <entityField>AdvertisingInformationConsumer</entityField> + <view>AdvertisingDetail_view</view> + </neonViewReference> + <neonViewReference> + <name>37878950-daf5-4d4b-98d9-6d44743bc2c4</name> + <entityField>AdvertisingItems</entityField> + <view>AdvertisingItemFilter_view</view> + </neonViewReference> + </children> +</neonView> diff --git a/neonView/ActivityEdit_view/ActivityEdit_view.aod b/neonView/ActivityEdit_view/ActivityEdit_view.aod index 1ad3a620d03322bd972f6de059140bf7db579c56..2fff9dfbe23cab9ca0ca9361d39ebc0810988dd3 100644 --- a/neonView/ActivityEdit_view/ActivityEdit_view.aod +++ b/neonView/ActivityEdit_view/ActivityEdit_view.aod @@ -40,6 +40,10 @@ <name>91514e62-f4f7-4eb7-84c0-8d94adbb3408</name> <entityField>RESPONSIBLE</entityField> </entityFieldLink> + <entityFieldLink> + <name>1b33cc1c-a935-4b55-ac88-68d62debe8dc</name> + <entityField>hasAdvertising</entityField> + </entityFieldLink> </fields> </genericViewTemplate> <neonViewReference> diff --git a/neonView/ActivityMain_view/ActivityMain_view.aod b/neonView/ActivityMain_view/ActivityMain_view.aod index 19b722bfa2bdadd100254525a78a28432f7e9619..b2d178249281f7e171499d047499dea540086297 100644 --- a/neonView/ActivityMain_view/ActivityMain_view.aod +++ b/neonView/ActivityMain_view/ActivityMain_view.aod @@ -39,5 +39,10 @@ <entityField>LogHistories</entityField> <view>LogHistoryFilter_view</view> </neonViewReference> + <neonViewReference> + <name>82705fc4-32ea-42de-ae34-df00dbd4b159</name> + <entityField>#ENTITY</entityField> + <view>ActivityAdvertising_view</view> + </neonViewReference> </children> </neonView> diff --git a/neonView/AddressList_view/AddressList_view.aod b/neonView/AddressList_view/AddressList_view.aod index a3e85b279b9f2af3724d5715227deef394c7d30b..958e360b918be4adfd0039d155c421afaba6ce31 100644 --- a/neonView/AddressList_view/AddressList_view.aod +++ b/neonView/AddressList_view/AddressList_view.aod @@ -30,26 +30,14 @@ <entityField>AddressSearch</entityField> <fullWidth v="true" /> </neonTitledListTableColumn> - <neonTitledListTableColumn> - <name>e809ff52-e8f7-443a-bf34-7e36daa2de42</name> - <entityField>Zip_ws</entityField> - </neonTitledListTableColumn> <neonTitledListTableColumn> <name>0336ea99-c4a1-4f39-b5aa-a520a7dcbaab</name> <entityField>ZIP</entityField> </neonTitledListTableColumn> - <neonTitledListTableColumn> - <name>69734ec3-b7a6-4efd-8dab-5059975fab70</name> - <entityField>City_ws</entityField> - </neonTitledListTableColumn> <neonTitledListTableColumn> <name>12727b21-0359-4430-a9c2-54eb48e2e864</name> <entityField>CITY</entityField> </neonTitledListTableColumn> - <neonTitledListTableColumn> - <name>2e48e6ac-a524-49e7-ad71-a29f1dd68891</name> - <entityField>Address_ws</entityField> - </neonTitledListTableColumn> <neonTitledListTableColumn> <name>4e5e6a4f-f43e-4861-a912-fb05e576f960</name> <entityField>ADDRESS</entityField> diff --git a/neonView/AddressOrgMultiEdit_view/AddressOrgMultiEdit_view.aod b/neonView/AddressOrgMultiEdit_view/AddressOrgMultiEdit_view.aod index fa53f54f1ac663b38d09708b2c4623a61b52e579..b695b472b64100af3ec60d14bcad255ec0a9c2a2 100644 --- a/neonView/AddressOrgMultiEdit_view/AddressOrgMultiEdit_view.aod +++ b/neonView/AddressOrgMultiEdit_view/AddressOrgMultiEdit_view.aod @@ -13,6 +13,11 @@ <entityField>#ENTITY</entityField> <title>Company address</title> <columns> + <neonGenericMultipleTableColumn> + <name>00300f6f-ac45-4daa-9693-6452da972403</name> + <entityField>AddressSearch</entityField> + <fullWidth v="true" /> + </neonGenericMultipleTableColumn> <neonGenericMultipleTableColumn> <name>2aebe24e-875a-4c57-8461-16da46d6f080</name> <entityField>ADDR_TYPE</entityField> @@ -21,31 +26,14 @@ <name>435f10b8-b6ef-4187-bffc-fc6104a6130c</name> <entityField>COUNTRY</entityField> </neonGenericMultipleTableColumn> - <neonGenericMultipleTableColumn> - <name>00300f6f-ac45-4daa-9693-6452da972403</name> - <entityField>AddressSearch</entityField> - <fullWidth v="true" /> - </neonGenericMultipleTableColumn> - <neonGenericMultipleTableColumn> - <name>b9379fcc-3212-488b-8f90-cade09c00f3c</name> - <entityField>Zip_ws</entityField> - </neonGenericMultipleTableColumn> <neonGenericMultipleTableColumn> <name>c1372a93-cf83-4c55-90e6-3b6b352abebf</name> <entityField>ZIP</entityField> </neonGenericMultipleTableColumn> - <neonGenericMultipleTableColumn> - <name>5a0d723a-8531-4330-957b-11a1be9d7eab</name> - <entityField>City_ws</entityField> - </neonGenericMultipleTableColumn> <neonGenericMultipleTableColumn> <name>2e7ba632-36ad-4852-bcca-d75bcf3f7de1</name> <entityField>CITY</entityField> </neonGenericMultipleTableColumn> - <neonGenericMultipleTableColumn> - <name>2c104842-2ca1-408d-81d6-e998c0a562f2</name> - <entityField>Address_ws</entityField> - </neonGenericMultipleTableColumn> <neonGenericMultipleTableColumn> <name>ac71d5eb-7ce7-41a0-91aa-5594f2238788</name> <entityField>ADDRESS</entityField> diff --git a/neonView/AddressValidationLookup_view/AddressValidationLookup_view.aod b/neonView/AddressValidationLookup_view/AddressValidationLookup_view.aod index c64330a9cbedcdbde366b59227d1f108f5dc59a4..3b1f25f260265936ee3eaaac6e78db933928e7a0 100644 --- a/neonView/AddressValidationLookup_view/AddressValidationLookup_view.aod +++ b/neonView/AddressValidationLookup_view/AddressValidationLookup_view.aod @@ -12,6 +12,14 @@ <name>DataTable</name> <entityField>#ENTITY</entityField> <columns> + <neonTableColumn> + <name>7ec03f39-6acd-40ea-9912-9e60e092615b</name> + <entityField>BUILDINGNO</entityField> + </neonTableColumn> + <neonTableColumn> + <name>a272c3cb-7bbf-41a4-9490-884c2f449b40</name> + <entityField>STREET_AND_BUILDINGNO</entityField> + </neonTableColumn> <neonTableColumn> <name>a8787cc8-57a2-4cd5-903e-da14924a9052</name> <entityField>ZIP</entityField> @@ -20,22 +28,18 @@ <name>fb715731-9162-405e-b2e2-6c20921f026f</name> <entityField>CITY</entityField> </neonTableColumn> - <neonTableColumn> - <name>05bb9d3b-0e90-4a1a-bfe8-03b7dab6ed01</name> - <entityField>REGION</entityField> - </neonTableColumn> <neonTableColumn> <name>22779be5-4111-49c2-8821-0ec02cca40bb</name> <entityField>STATE</entityField> </neonTableColumn> - <neonTableColumn> - <name>a272c3cb-7bbf-41a4-9490-884c2f449b40</name> - <entityField>STREET_AND_BUILDINGNO</entityField> - </neonTableColumn> <neonTableColumn> <name>d32d92bf-db7d-443f-b911-6731ea89cf3b</name> <entityField>COUNTRY</entityField> </neonTableColumn> + <neonTableColumn> + <name>05bb9d3b-0e90-4a1a-bfe8-03b7dab6ed01</name> + <entityField>REGION</entityField> + </neonTableColumn> </columns> </tableViewTemplate> </children> diff --git a/neonView/AdressMultiEdit_view/AdressMultiEdit_view.aod b/neonView/AdressMultiEdit_view/AdressMultiEdit_view.aod index 3bcfaf74c4c37ba27867f7ac478647fc9572131c..d7483c3512b2643d2a10ba13dec98459f41bc73a 100644 --- a/neonView/AdressMultiEdit_view/AdressMultiEdit_view.aod +++ b/neonView/AdressMultiEdit_view/AdressMultiEdit_view.aod @@ -12,6 +12,11 @@ <name>MultipleEdit</name> <entityField>#ENTITY</entityField> <columns> + <neonGenericMultipleTableColumn> + <name>00300f6f-ac45-4daa-9693-6452da972403</name> + <entityField>AddressSearch</entityField> + <fullWidth v="true" /> + </neonGenericMultipleTableColumn> <neonGenericMultipleTableColumn> <name>2aebe24e-875a-4c57-8461-16da46d6f080</name> <entityField>ADDR_TYPE</entityField> @@ -20,31 +25,14 @@ <name>435f10b8-b6ef-4187-bffc-fc6104a6130c</name> <entityField>COUNTRY</entityField> </neonGenericMultipleTableColumn> - <neonGenericMultipleTableColumn> - <name>00300f6f-ac45-4daa-9693-6452da972403</name> - <entityField>AddressSearch</entityField> - <fullWidth v="true" /> - </neonGenericMultipleTableColumn> - <neonGenericMultipleTableColumn> - <name>b9379fcc-3212-488b-8f90-cade09c00f3c</name> - <entityField>Zip_ws</entityField> - </neonGenericMultipleTableColumn> <neonGenericMultipleTableColumn> <name>c1372a93-cf83-4c55-90e6-3b6b352abebf</name> <entityField>ZIP</entityField> </neonGenericMultipleTableColumn> - <neonGenericMultipleTableColumn> - <name>5a0d723a-8531-4330-957b-11a1be9d7eab</name> - <entityField>City_ws</entityField> - </neonGenericMultipleTableColumn> <neonGenericMultipleTableColumn> <name>2e7ba632-36ad-4852-bcca-d75bcf3f7de1</name> <entityField>CITY</entityField> </neonGenericMultipleTableColumn> - <neonGenericMultipleTableColumn> - <name>2c104842-2ca1-408d-81d6-e998c0a562f2</name> - <entityField>Address_ws</entityField> - </neonGenericMultipleTableColumn> <neonGenericMultipleTableColumn> <name>ac71d5eb-7ce7-41a0-91aa-5594f2238788</name> <entityField>ADDRESS</entityField> diff --git a/neonView/AdvertisingDetail_view/AdvertisingDetail_view.aod b/neonView/AdvertisingDetail_view/AdvertisingDetail_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..2591c4e320178b2f55ddfd43da5081746d32dd7c --- /dev/null +++ b/neonView/AdvertisingDetail_view/AdvertisingDetail_view.aod @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>AdvertisingDetail_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <size>SMALL</size> + <layout> + <boxLayout> + <name>layout</name> + <autoHeight v="true" /> + </boxLayout> + </layout> + <children> + <genericViewTemplate> + <name>generic</name> + <showDrawer v="true" /> + <fields> + <entityFieldLink> + <name>d44add6c-2c60-485b-8bbc-9ebe494f9e23</name> + <entityField>DATE_NEW</entityField> + </entityFieldLink> + <entityFieldLink> + <name>77ffab00-8dd3-457b-a6a4-bf13c58d8cdc</name> + <entityField>CONTACT_ID</entityField> + </entityFieldLink> + <entityFieldLink> + <name>3e7b85d4-40cf-4eae-9f99-3de73eb152f9</name> + <entityField>RESPONSIBLE_ID</entityField> + </entityFieldLink> + <entityFieldLink> + <name>9b2f9842-2a24-4c8c-b1ce-8b7a0158fa62</name> + <entityField>STATUS</entityField> + </entityFieldLink> + <entityFieldLink> + <name>b04b5d8b-82af-465d-89f8-d02568d6e254</name> + <entityField>CURRENCY</entityField> + </entityFieldLink> + </fields> + </genericViewTemplate> + </children> +</neonView> diff --git a/neonView/AdvertisingEdit_view/AdvertisingEdit_view.aod b/neonView/AdvertisingEdit_view/AdvertisingEdit_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..84e7e192d8408db9e6ce3a6a40e0853286288770 --- /dev/null +++ b/neonView/AdvertisingEdit_view/AdvertisingEdit_view.aod @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>AdvertisingEdit_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <size>SMALL</size> + <layout> + <boxLayout> + <name>layout</name> + <direction>VERTICAL</direction> + <autoHeight v="true" /> + </boxLayout> + </layout> + <children> + <genericViewTemplate> + <name>Generic</name> + <editMode v="true" /> + <showDrawer v="true" /> + <fields> + <entityFieldLink> + <name>43034939-1881-46e9-a58d-605210c54f96</name> + <entityField>DATE_NEW</entityField> + </entityFieldLink> + <entityFieldLink> + <name>fbfc6aa5-a1fb-49af-bd4c-3b9e68564997</name> + <entityField>CONTACT_ID</entityField> + </entityFieldLink> + <entityFieldLink> + <name>42b451be-3a89-4a3c-be9f-ccc5247b7bd2</name> + <entityField>RESPONSIBLE_ID</entityField> + </entityFieldLink> + <entityFieldLink> + <name>f67d038b-920c-4d8c-bd2c-ebf45891aa03</name> + <entityField>STATUS</entityField> + </entityFieldLink> + <entityFieldLink> + <name>7cc60069-433a-496d-8c59-e59756f15402</name> + <entityField>CURRENCY</entityField> + </entityFieldLink> + </fields> + </genericViewTemplate> + </children> +</neonView> diff --git a/neonView/AdvertisingFilter_view/AdvertisingFilter_view.aod b/neonView/AdvertisingFilter_view/AdvertisingFilter_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..957936fd83b77f2cf900ac1c9067ae732900c11a --- /dev/null +++ b/neonView/AdvertisingFilter_view/AdvertisingFilter_view.aod @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>AdvertisingFilter_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterable v="true" /> + <layout> + <groupLayout> + <name>layout</name> + </groupLayout> + </layout> + <children> + <tableViewTemplate> + <name>Table</name> + <columns> + <neonTableColumn> + <name>b8971987-29bb-48dc-b9fc-075a63ef0b4e</name> + <entityField>STATUS</entityField> + </neonTableColumn> + <neonTableColumn> + <name>9b8b2291-918e-4aee-8887-7d26283b6a2d</name> + <entityField>DATE_NEW</entityField> + </neonTableColumn> + <neonTableColumn> + <name>443c7524-58db-4b18-b0a5-938df42d4fdf</name> + <entityField>CONTACT_ID</entityField> + </neonTableColumn> + <neonTableColumn> + <name>6f0e0a32-5fcf-4194-b314-0013f65ec2d6</name> + <entityField>ROW_ID</entityField> + </neonTableColumn> + <neonTableColumn> + <name>fa9fa2a6-4240-49dc-a516-cbbd6abd29a6</name> + <entityField>CURRENCY</entityField> + </neonTableColumn> + </columns> + </tableViewTemplate> + </children> +</neonView> diff --git a/neonView/AdvertisingItemEdit_view/AdvertisingItemEdit_view.aod b/neonView/AdvertisingItemEdit_view/AdvertisingItemEdit_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..29926466fa195f7edd5ea6f7bcbe4067b554a19d --- /dev/null +++ b/neonView/AdvertisingItemEdit_view/AdvertisingItemEdit_view.aod @@ -0,0 +1,55 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>AdvertisingItemEdit_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <size>SMALL</size> + <layout> + <boxLayout> + <name>layout</name> + </boxLayout> + </layout> + <children> + <genericViewTemplate> + <name>Generic</name> + <editMode v="true" /> + <fields> + <entityFieldLink> + <name>76f8b5c4-cb3a-4c5f-809d-1c639a2f1153</name> + <entityField>ITEMPOSITION</entityField> + </entityFieldLink> + <entityFieldLink> + <name>f78e7640-dd5e-40f5-b6e5-b52030c2c6fd</name> + <entityField>DELIVERY</entityField> + </entityFieldLink> + <entityFieldLink> + <name>ab7a8a06-da03-4651-8d3e-d52b7fd3e6fa</name> + <entityField>PRODUCT_ID</entityField> + </entityFieldLink> + <entityFieldLink> + <name>cd06598f-1469-4513-a233-c95eafb26ca2</name> + <entityField>QUANTITY</entityField> + </entityFieldLink> + <entityFieldLink> + <name>477b087c-6a34-4e2c-8c21-71c7e0c52f04</name> + <entityField>PRICE</entityField> + </entityFieldLink> + <entityFieldLink> + <name>1c812246-f844-4827-bbb9-001642fa4a5d</name> + <entityField>FREE</entityField> + </entityFieldLink> + <entityFieldLink> + <name>f7ecb1cf-5365-45fa-9c45-fd5cbfed0e60</name> + <entityField>ACTUALAMOUNT</entityField> + </entityFieldLink> + <entityFieldLink> + <name>733e1d22-af01-4a21-8626-d7280feabab9</name> + <entityField>TARGETAMOUNT</entityField> + </entityFieldLink> + <entityFieldLink> + <name>7d066a98-85e8-43d3-ade7-ce7346f9e843</name> + <entityField>INFO</entityField> + </entityFieldLink> + </fields> + </genericViewTemplate> + </children> +</neonView> diff --git a/neonView/AdvertisingItemFilter_view/AdvertisingItemFilter_view.aod b/neonView/AdvertisingItemFilter_view/AdvertisingItemFilter_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..91ab8d80c299db89e49f2482eb5e3d9e13c6dc81 --- /dev/null +++ b/neonView/AdvertisingItemFilter_view/AdvertisingItemFilter_view.aod @@ -0,0 +1,61 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>AdvertisingItemFilter_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <groupLayout> + <name>layout</name> + </groupLayout> + </layout> + <children> + <tableViewTemplate> + <name>table</name> + <columns> + <neonTableColumn> + <name>a7894166-f880-477a-afd5-58fd982cdb5f</name> + <entityField>ITEMPOSITION</entityField> + </neonTableColumn> + <neonTableColumn> + <name>d7ec0548-09ef-4efe-ad26-6c08a07b8b7c</name> + <entityField>PRODUCT_ID</entityField> + </neonTableColumn> + <neonTableColumn> + <name>bb6b0978-e6f0-4b50-8557-4ce2e81a18fa</name> + <entityField>QUANTITY</entityField> + </neonTableColumn> + <neonTableColumn> + <name>99b85de0-5e84-4f76-8c48-96951e617287</name> + <entityField>UNIT</entityField> + </neonTableColumn> + <neonTableColumn> + <name>c2b808bf-8b0e-4670-8828-b6896bbe872c</name> + <entityField>PRICE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>2bf92b34-9519-496e-8511-bfa23f22db67</name> + <entityField>FREE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>a78fbed8-ebdc-4f56-9563-0dae4e2ad26e</name> + <entityField>TARGETAMOUNT</entityField> + </neonTableColumn> + <neonTableColumn> + <name>8ad44ae5-47e8-4437-a6f5-88d1c9fbe61f</name> + <entityField>ACTUALAMOUNT</entityField> + </neonTableColumn> + <neonTableColumn> + <name>e53a6f55-c4d4-49df-8785-55fa8ee8a657</name> + <entityField>DELIVERY</entityField> + </neonTableColumn> + <neonTableColumn> + <name>5f359ff4-06c6-4d6d-bf10-2f8dbf1fbb01</name> + <entityField>SENT</entityField> + </neonTableColumn> + <neonTableColumn> + <name>007e2ca8-d7c8-4f9e-891f-a53f3d0e6b5a</name> + <entityField>INFO</entityField> + </neonTableColumn> + </columns> + </tableViewTemplate> + </children> +</neonView> diff --git a/neonView/AdvertisingItemPreview_view/AdvertisingItemPreview_view.aod b/neonView/AdvertisingItemPreview_view/AdvertisingItemPreview_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..53aa6c2d7ea7d73dc16710a4b13a59bed6f5d9dd --- /dev/null +++ b/neonView/AdvertisingItemPreview_view/AdvertisingItemPreview_view.aod @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>AdvertisingItemPreview_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <headerFooterLayout> + <name>layout</name> + </headerFooterLayout> + </layout> + <children> + <genericViewTemplate> + <name>Generic</name> + <fields> + <entityFieldLink> + <name>d89630d6-d28e-4506-b31b-56a03cbcf4f2</name> + <entityField>ITEMPOSITION</entityField> + </entityFieldLink> + <entityFieldLink> + <name>dbd78774-ce7c-45e2-8035-2e353eae2857</name> + <entityField>ContactId</entityField> + </entityFieldLink> + <entityFieldLink> + <name>697c7664-460d-4a08-b91f-3a83f23fbd24</name> + <entityField>PRODUCT_ID</entityField> + </entityFieldLink> + <entityFieldLink> + <name>e7e4464b-3e07-4562-ba09-a87bc2fe26ad</name> + <entityField>QUANTITY</entityField> + </entityFieldLink> + <entityFieldLink> + <name>aa3453f1-7828-47e8-bc5f-e142b1c950ad</name> + <entityField>PRICE</entityField> + </entityFieldLink> + <entityFieldLink> + <name>6d86c1c9-8ac3-40dc-ab18-e4ed7e9e166c</name> + <entityField>FREE</entityField> + </entityFieldLink> + <entityFieldLink> + <name>603bc968-ae45-4337-a622-173fa3b47012</name> + <entityField>TARGETAMOUNT</entityField> + </entityFieldLink> + <entityFieldLink> + <name>8d096f27-2ece-41a1-8988-662d9e4cd125</name> + <entityField>ACTUALAMOUNT</entityField> + </entityFieldLink> + <entityFieldLink> + <name>da8ef39a-31e6-49fe-bd24-52eb0d1f7d37</name> + <entityField>DELIVERY</entityField> + </entityFieldLink> + <entityFieldLink> + <name>990dd064-6457-4dc7-a606-86830ad36727</name> + <entityField>INFO</entityField> + </entityFieldLink> + </fields> + </genericViewTemplate> + </children> +</neonView> diff --git a/neonView/DuplicatesUnrelatedOrganisationFilter_view/DuplicatesUnrelatedOrganisationFilter_view.aod b/neonView/AdvertisingItemSmallFilter_view/AdvertisingItemSmallFilter_view.aod similarity index 52% rename from neonView/DuplicatesUnrelatedOrganisationFilter_view/DuplicatesUnrelatedOrganisationFilter_view.aod rename to neonView/AdvertisingItemSmallFilter_view/AdvertisingItemSmallFilter_view.aod index 03a42bc169f8edf17595f673f799194149d4eb81..392578f715fb82a3e8f2b7ae0c1dc8e8c876a13b 100644 --- a/neonView/DuplicatesUnrelatedOrganisationFilter_view/DuplicatesUnrelatedOrganisationFilter_view.aod +++ b/neonView/AdvertisingItemSmallFilter_view/AdvertisingItemSmallFilter_view.aod @@ -1,7 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> - <name>DuplicatesUnrelatedOrganisationFilter_view</name> + <name>AdvertisingItemSmallFilter_view</name> <majorModelMode>DISTRIBUTED</majorModelMode> + <size>SMALL</size> <layout> <boxLayout> <name>layout</name> @@ -9,20 +10,19 @@ </layout> <children> <tableViewTemplate> - <name>UnrelatedOrganisations</name> - <hideContentSearch v="true" /> - <entityField>#ENTITY</entityField> - <isCreatable v="false" /> - <isEditable v="false" /> - <title>Unrelated organisation duplicates</title> + <name>Table</name> <columns> <neonTableColumn> - <name>04681f8d-b941-4a66-be50-6ac08d6f52a4</name> - <entityField>SourceDuplicateDescription</entityField> + <name>4f14ad89-679c-43c5-bf2d-9a7050a84b4c</name> + <entityField>PRODUCT_ID</entityField> </neonTableColumn> <neonTableColumn> - <name>b293ed18-ebf5-474e-8ec2-851a3562b4d5</name> - <entityField>UnrelatedDuplicateDescription</entityField> + <name>9cc62b40-e77e-46d9-b44f-9f0ee42d7116</name> + <entityField>STATUS</entityField> + </neonTableColumn> + <neonTableColumn> + <name>a54cbe2d-b6d4-42b9-9998-48a92b157147</name> + <entityField>DELIVERY</entityField> </neonTableColumn> </columns> </tableViewTemplate> diff --git a/neonView/AdvertisingMain_view/AdvertisingMain_view.aod b/neonView/AdvertisingMain_view/AdvertisingMain_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..7e906290caf698ece025f7a40577be957803fe1a --- /dev/null +++ b/neonView/AdvertisingMain_view/AdvertisingMain_view.aod @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>AdvertisingMain_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <masterSlaveLayout> + <name>layout</name> + <master>666210c4-5eaa-4d1b-9973-0774f77cc643</master> + </masterSlaveLayout> + </layout> + <children> + <neonViewReference> + <name>8e7b4166-c363-4dbf-9a2f-97d60ec4dd84</name> + <entityField>AdvertisingItemsConsumer</entityField> + <view>AdvertisingItemFilter_view</view> + </neonViewReference> + <neonViewReference> + <name>666210c4-5eaa-4d1b-9973-0774f77cc643</name> + <entityField>#ENTITY</entityField> + <view>AdvertisingPreview_view</view> + </neonViewReference> + </children> +</neonView> diff --git a/neonView/AdvertisingPreview_view/AdvertisingPreview_view.aod b/neonView/AdvertisingPreview_view/AdvertisingPreview_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..466eea0c9e2c2f646feb47bcbd47f0fe33633544 --- /dev/null +++ b/neonView/AdvertisingPreview_view/AdvertisingPreview_view.aod @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>AdvertisingPreview_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <headerFooterLayout> + <name>layout</name> + <header>Card</header> + </headerFooterLayout> + </layout> + <children> + <cardViewTemplate> + <name>Card</name> + <iconField>#ICON</iconField> + <titleField>STATUS</titleField> + <subtitleField>CONTACT_ID</subtitleField> + <descriptionField>RESPONSIBLE_ID</descriptionField> + <favoriteAction1>startWorkflow</favoriteAction1> + <favoriteAction2>newMail</favoriteAction2> + <isEditable v="true" /> + <informationField>DATE_NEW</informationField> + </cardViewTemplate> + <genericViewTemplate> + <name>Generic</name> + <fields> + <entityFieldLink> + <name>8cd0f253-85c7-494e-8eb1-cd5deb4fac30</name> + <entityField>ROW_ID</entityField> + </entityFieldLink> + <entityFieldLink> + <name>805029e1-0980-4cc0-bc31-db2edb934da1</name> + <entityField>countItems</entityField> + </entityFieldLink> + <entityFieldLink> + <name>88ae7bf6-00ef-4c73-9be5-7e562243c537</name> + <entityField>CURRENCY</entityField> + </entityFieldLink> + </fields> + </genericViewTemplate> + </children> +</neonView> diff --git a/neonView/AdvertisingTestEdit_view/AdvertisingTestEdit_view.aod b/neonView/AdvertisingTestEdit_view/AdvertisingTestEdit_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..f959c261c1e2565c446652967632725ecdb92abc --- /dev/null +++ b/neonView/AdvertisingTestEdit_view/AdvertisingTestEdit_view.aod @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>AdvertisingTestEdit_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <size>SMALL</size> + <layout> + <boxLayout> + <name>layout</name> + </boxLayout> + </layout> + <children> + <genericViewTemplate> + <name>generic</name> + <hideEmptyFields v="false" /> + <fields> + <entityFieldLink> + <name>20f249cd-946b-4be6-8e08-61aa5ba14081</name> + </entityFieldLink> + <entityFieldLink> + <name>89e1f432-32bd-4dd7-af8a-12db57e4ae77</name> + </entityFieldLink> + <entityFieldLink> + <name>be36cae9-7dba-4686-8624-3a0d64064112</name> + </entityFieldLink> + </fields> + </genericViewTemplate> + </children> +</neonView> diff --git a/neonView/BulkMailAddRecipientsEdit_view/BulkMailAddRecipientsEdit_view.aod b/neonView/BulkMailAddRecipientsEdit_view/BulkMailAddRecipientsEdit_view.aod index 4ecfda58d231870c07359fe28fb481de5cd1d367..383d48350eeac31dfdf62f5bdadfc99b7cca79be 100644 --- a/neonView/BulkMailAddRecipientsEdit_view/BulkMailAddRecipientsEdit_view.aod +++ b/neonView/BulkMailAddRecipientsEdit_view/BulkMailAddRecipientsEdit_view.aod @@ -18,11 +18,11 @@ <fields> <entityFieldLink> <name>1b9e38a5-e921-48f7-ba04-71b758fa9ed3</name> - <entityField>currentRecipients</entityField> + <entityField>currentRecipientCount</entityField> </entityFieldLink> <entityFieldLink> <name>4578042c-9210-4dc4-870f-298a390aebd8</name> - <entityField>futureRecipients</entityField> + <entityField>futureRecipientCount</entityField> </entityFieldLink> </fields> </scoreCardViewTemplate> diff --git a/neonView/BulkMailAnalysisBounceChart_view/BulkMailAnalysisBounceChart_view.aod b/neonView/BulkMailAnalysisBounceChart_view/BulkMailAnalysisBounceChart_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..2208b61a19d7313c99b292e5ff9cd58f40e16834 --- /dev/null +++ b/neonView/BulkMailAnalysisBounceChart_view/BulkMailAnalysisBounceChart_view.aod @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>BulkMailAnalysisBounceChart_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <noneLayout> + <name>layout</name> + </noneLayout> + </layout> + <children> + <singleDataChartViewTemplate> + <name>pieChart</name> + <chartType>PIE</chartType> + <xAxis>description</xAxis> + <yAxis>count</yAxis> + </singleDataChartViewTemplate> + </children> +</neonView> diff --git a/neonView/BulkMailAnalysisDeviceTypeChart_view/BulkMailAnalysisDeviceTypeChart_view.aod b/neonView/BulkMailAnalysisDeviceTypeChart_view/BulkMailAnalysisDeviceTypeChart_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..870422df4767619bedb31d77c2d8e055c8306cfb --- /dev/null +++ b/neonView/BulkMailAnalysisDeviceTypeChart_view/BulkMailAnalysisDeviceTypeChart_view.aod @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>BulkMailAnalysisDeviceTypeChart_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <dashletConfigurations> + <neonDashletConfiguration> + <name>deviceTypePieChart</name> + <title>Bulkmail Device Types</title> + <description>Shows device types used by bulkmail recipients</description> + <fragment>BulkMailAnalysis/filter</fragment> + <singleton v="true" /> + <storeRoles> + <element>PROJECT_Marketing</element> + </storeRoles> + <icon>NEON:GROUP_APPOINTMENT</icon> + <categories> + <neonDashletCategory> + <name>marketing</name> + <title>Marketing</title> + </neonDashletCategory> + </categories> + </neonDashletConfiguration> + </dashletConfigurations> + <layout> + <noneLayout> + <name>layout</name> + </noneLayout> + </layout> + <children> + <singleDataChartViewTemplate> + <name>SingleDataChart</name> + <chartType>PIE</chartType> + <xAxis>deviceType</xAxis> + <yAxis>deviceTypeAmount</yAxis> + </singleDataChartViewTemplate> + </children> +</neonView> diff --git a/neonView/BulkMailAnalysisDynamicMultiDataChart_view/BulkMailAnalysisDynamicMultiDataChart_view.aod b/neonView/BulkMailAnalysisDynamicMultiDataChart_view/BulkMailAnalysisDynamicMultiDataChart_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..856abaeea53ac7ac2b4d3a5faf3bacb85d834450 --- /dev/null +++ b/neonView/BulkMailAnalysisDynamicMultiDataChart_view/BulkMailAnalysisDynamicMultiDataChart_view.aod @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>BulkMailAnalysisDynamicMultiDataChart_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <noneLayout> + <name>layout</name> + </noneLayout> + </layout> + <children> + <dynamicMultiDataChartViewTemplate> + <name>dynamicMultiDataChart</name> + <defaultGroupFields> + <element>year</element> + </defaultGroupFields> + <columns> + <neonDynamicMultiDataChartColumn> + <name>c612bd68-b0a9-4517-bd77-4b643c8cc8d8</name> + </neonDynamicMultiDataChartColumn> + <neonDynamicMultiDataChartColumn> + <name>90eb7fd9-e79a-47af-9951-a2ade5353a5a</name> + </neonDynamicMultiDataChartColumn> + </columns> + </dynamicMultiDataChartViewTemplate> + </children> +</neonView> diff --git a/neonView/BulkMailAnalysisOpeningHourChart_view/BulkMailAnalysisOpeningHourChart_view.aod b/neonView/BulkMailAnalysisOpeningHourChart_view/BulkMailAnalysisOpeningHourChart_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..79c30eaefee6e8cd18cc1de7cbdf6777aa7ca05e --- /dev/null +++ b/neonView/BulkMailAnalysisOpeningHourChart_view/BulkMailAnalysisOpeningHourChart_view.aod @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>BulkMailAnalysisOpeningHourChart_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <boxLayout> + <name>layout</name> + </boxLayout> + </layout> + <children> + <multiDataChartViewTemplate> + <name>MultiDataChart</name> + <chartType>AREA</chartType> + <xAxis>X</xAxis> + <yAxis>Y</yAxis> + <categoryField>CATEGORY</categoryField> + </multiDataChartViewTemplate> + </children> +</neonView> diff --git a/neonView/BulkMailAnalysisScoreCard_view/BulkMailAnalysisScoreCard_view.aod b/neonView/BulkMailAnalysisScoreCard_view/BulkMailAnalysisScoreCard_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..650ea5b83a91a0131459a877fadf7cd46230aa5c --- /dev/null +++ b/neonView/BulkMailAnalysisScoreCard_view/BulkMailAnalysisScoreCard_view.aod @@ -0,0 +1,61 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>BulkMailAnalysisScoreCard_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterable v="true" /> + <dashletConfigurations> + <neonDashletConfiguration> + <name>bulkMailKeyFigures</name> + <title>Bulkmail Key Figures</title> + <description>Bulk Mail Key Figures</description> + <fragment>BulkMailAnalysis/full</fragment> + <singleton v="true" /> + <storeRoles> + <element>PROJECT_Marketing</element> + </storeRoles> + <icon>VAADIN:GRID_BIG</icon> + <categories> + <neonDashletCategory> + <name>marketing</name> + <title>Marketing</title> + </neonDashletCategory> + </categories> + </neonDashletConfiguration> + </dashletConfigurations> + <layout> + <boxLayout> + <name>layout</name> + </boxLayout> + </layout> + <children> + <scoreCardViewTemplate> + <name>scoreCard</name> + <fields> + <entityFieldLink> + <name>d07101f9-dd9a-4f92-a809-8e7e6113bdd6</name> + <entityField>deliveryRate</entityField> + </entityFieldLink> + <entityFieldLink> + <name>25e31bb3-dec9-42f7-8251-6d683c5ecbe3</name> + <entityField>bounceRate</entityField> + </entityFieldLink> + <entityFieldLink> + <name>aba17bf1-d25e-4bee-8660-abe82ba88e88</name> + <entityField>openerRate</entityField> + </entityFieldLink> + <entityFieldLink> + <name>f9bd5a18-0f63-4947-a584-861aa8b91f24</name> + <entityField>uniqueClickRate</entityField> + </entityFieldLink> + <entityFieldLink> + <name>e2d36853-5367-4d2e-a4e1-1c13d1a4b05d</name> + <entityField>clickRate</entityField> + </entityFieldLink> + <entityFieldLink> + <name>486deff9-3c49-4983-8752-b846050c4cf0</name> + <entityField>unsubscribeRate</entityField> + </entityFieldLink> + </fields> + </scoreCardViewTemplate> + </children> +</neonView> diff --git a/neonView/BulkMailAnalysisStatusFunnelChart_view/BulkMailAnalysisStatusFunnelChart_view.aod b/neonView/BulkMailAnalysisStatusFunnelChart_view/BulkMailAnalysisStatusFunnelChart_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..d500fb68ea1345d919f588c5640485681cb02982 --- /dev/null +++ b/neonView/BulkMailAnalysisStatusFunnelChart_view/BulkMailAnalysisStatusFunnelChart_view.aod @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>BulkMailAnalysisStatusFunnelChart_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <noneLayout> + <name>layout</name> + </noneLayout> + </layout> + <children> + <singleDataChartViewTemplate> + <name>statusFunnel</name> + <chartType>FUNNEL</chartType> + <xAxis>statusDescription</xAxis> + <yAxis>statusCount</yAxis> + </singleDataChartViewTemplate> + </children> +</neonView> diff --git a/neonView/BulkMailEdit_view/BulkMailEdit_view.aod b/neonView/BulkMailEdit_view/BulkMailEdit_view.aod index 2dbb4bea8358d3d2e1ea6f9ba29c0cc39c26e39d..49b8defd14b80e356566a1c09caf696272d0c5ca 100644 --- a/neonView/BulkMailEdit_view/BulkMailEdit_view.aod +++ b/neonView/BulkMailEdit_view/BulkMailEdit_view.aod @@ -76,6 +76,14 @@ <name>06f08869-5a81-41cb-8c7e-51be6a7041a7</name> <entityField>DESCRIPTION</entityField> </entityFieldLink> + <entityFieldLink> + <name>548de09e-4e29-443f-a676-725120be47c8</name> + <entityField>EMPLOYEE_CONTACT_ID</entityField> + </entityFieldLink> + <entityFieldLink> + <name>1891cd3a-34a5-4c7d-9e35-635640476c63</name> + <entityField>INTEREST_ID</entityField> + </entityFieldLink> </fields> </genericViewTemplate> <genericViewTemplate> diff --git a/neonView/BulkMailFilter_view/BulkMailFilter_view.aod b/neonView/BulkMailFilter_view/BulkMailFilter_view.aod index b8e876f95b28c5fc9ba8d93f6a171f09cd9add87..236b5f911b1fa5e028ac277da32adccd104a4160 100644 --- a/neonView/BulkMailFilter_view/BulkMailFilter_view.aod +++ b/neonView/BulkMailFilter_view/BulkMailFilter_view.aod @@ -3,6 +3,30 @@ <name>BulkMailFilter_view</name> <majorModelMode>DISTRIBUTED</majorModelMode> <filterable v="true" /> + <dashletConfigurations> + <neonDashletConfiguration> + <name>CurrentUserOwnedBulkmails</name> + <title>My Bulkmails</title> + <description>Show my bulkmails</description> + <fragment>bulkmail/filter</fragment> + <singleton v="true" /> + <storeRoles> + <element>PROJECT_Marketing</element> + </storeRoles> + <categories> + <neonDashletCategory> + <name>marketing</name> + <title>Marketing</title> + </neonDashletCategory> + </categories> + <parameters> + <neonDashletParameter> + <name>ShowOnlyCurrentUsersBulkmails_param</name> + <value>true</value> + </neonDashletParameter> + </parameters> + </neonDashletConfiguration> + </dashletConfigurations> <layout> <boxLayout> <name>layout</name> diff --git a/neonView/BulkMailLookup_view/BulkMailLookup_view.aod b/neonView/BulkMailLookup_view/BulkMailLookup_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..692f84cd89e9e41980c923544a85124a243f50de --- /dev/null +++ b/neonView/BulkMailLookup_view/BulkMailLookup_view.aod @@ -0,0 +1,37 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>BulkMailLookup_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <boxLayout> + <name>layout</name> + </boxLayout> + </layout> + <children> + <tableViewTemplate> + <name>Table</name> + <columns> + <neonTableColumn> + <name>b7351c02-5be4-4dd5-a5c2-802b47005015</name> + <entityField>ICON</entityField> + </neonTableColumn> + <neonTableColumn> + <name>9eed19a1-b7a9-4e67-a36c-c80dcbb2b94c</name> + <entityField>NAME</entityField> + </neonTableColumn> + <neonTableColumn> + <name>d098798c-c05c-4445-95f7-f1d4bbcb0878</name> + <entityField>SUBJECT</entityField> + </neonTableColumn> + <neonTableColumn> + <name>33d6ca40-ad13-4584-834f-35a08c01e339</name> + <entityField>STATUS</entityField> + </neonTableColumn> + <neonTableColumn> + <name>f657749a-31c2-43d6-90ae-663c3462b4b1</name> + <entityField>DESCRIPTION</entityField> + </neonTableColumn> + </columns> + </tableViewTemplate> + </children> +</neonView> diff --git a/neonView/BulkMailMain_view/BulkMailMain_view.aod b/neonView/BulkMailMain_view/BulkMailMain_view.aod index 5b05276c93901121cfd9cd663f1961454d76b4c2..f61ce7711775bb207d6550a34a03ae62b373f096 100644 --- a/neonView/BulkMailMain_view/BulkMailMain_view.aod +++ b/neonView/BulkMailMain_view/BulkMailMain_view.aod @@ -10,20 +10,40 @@ </layout> <children> <neonViewReference> - <name>8be4ed02-1c54-41d0-9bba-3b785346a550</name> - <entityField>Recipients</entityField> - <view>BulkMailRecipientFilter_view</view> + <name>71bd7ba3-cd7c-4a72-9f29-fdecdfce1789</name> + <entityField>BulkMailOverViewViews</entityField> + <view>BulkMailOverview_view</view> </neonViewReference> <neonViewReference> <name>3222ace8-c6d6-4dab-ada1-1f50b983e7e7</name> <entityField>#ENTITY</entityField> <view>BulkMailContent_view</view> </neonViewReference> + <neonViewReference> + <name>8be4ed02-1c54-41d0-9bba-3b785346a550</name> + <entityField>Recipients</entityField> + <view>BulkMailRecipientFilter_view</view> + </neonViewReference> + <neonViewReference> + <name>f78d044a-6246-49c0-a72c-03f54fc90fd2</name> + <entityField>BulkMailTestRecipients</entityField> + <view>BulkMailTestRecipientFilter_view</view> + </neonViewReference> <neonViewReference> <name>9e1e1137-f0a8-45d5-8b91-6e36411be6f1</name> <entityField>Activities</entityField> <view>ActivityFilter_view</view> </neonViewReference> + <neonViewReference> + <name>cd8c44c9-209b-464c-a2e0-ce15720ab22e</name> + <entityField>MailLogs</entityField> + <view>MailLogFilter_view</view> + </neonViewReference> + <neonViewReference> + <name>bd3876a9-492e-4e2e-bcca-e86455475dca</name> + <entityField>Clicks</entityField> + <view>WeblinkClickFilter_view</view> + </neonViewReference> <neonViewReference> <name>49eb2dd2-0df9-4b58-bdae-f941200be8d9</name> <entityField>LogHistories</entityField> diff --git a/neonView/OrganisationClusterMain_view/OrganisationClusterMain_view.aod b/neonView/BulkMailOverviewBottom_view/BulkMailOverviewBottom_view.aod similarity index 60% rename from neonView/OrganisationClusterMain_view/OrganisationClusterMain_view.aod rename to neonView/BulkMailOverviewBottom_view/BulkMailOverviewBottom_view.aod index 72d99cac595e86b488e878b16d1a700b90746e48..cd84008aaff32ab7c9460393667d183183557440 100644 --- a/neonView/OrganisationClusterMain_view/OrganisationClusterMain_view.aod +++ b/neonView/BulkMailOverviewBottom_view/BulkMailOverviewBottom_view.aod @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> - <name>OrganisationClusterMain_view</name> + <name>BulkMailOverviewBottom_view</name> <majorModelMode>DISTRIBUTED</majorModelMode> <layout> <boxLayout> @@ -10,14 +10,14 @@ </layout> <children> <neonViewReference> - <name>b25f94bf-9316-4438-be78-b8cf596440b3</name> - <entityField>DuplicateOrganisationsConsumer</entityField> - <view>OrganisationFilter_view</view> + <name>46b376c3-78ac-4ce4-98b4-f79f65b45b86</name> + <entityField>OpeningHourChart</entityField> + <view>BulkMailAnalysisOpeningHourChart_view</view> </neonViewReference> <neonViewReference> - <name>5589bb81-171d-417b-a1b2-975144109d55</name> - <entityField>#ENTITY</entityField> - <view>DuplicatesUnrelatedCluster_view</view> + <name>0c6750e2-5e2c-4aaa-aafc-18f13b750a62</name> + <entityField>DeviceTypeChart</entityField> + <view>BulkMailAnalysisDeviceTypeChart_view</view> </neonViewReference> </children> </neonView> diff --git a/neonView/OrganisationDuplicatesTab_view/OrganisationDuplicatesTab_view.aod b/neonView/BulkMailOverviewTop_view/BulkMailOverviewTop_view.aod similarity index 57% rename from neonView/OrganisationDuplicatesTab_view/OrganisationDuplicatesTab_view.aod rename to neonView/BulkMailOverviewTop_view/BulkMailOverviewTop_view.aod index ed86c8059d4920b5576f13406c5d4d4f86597b71..a204f7f9f97bc8fe8b544da12926002c4ae46433 100644 --- a/neonView/OrganisationDuplicatesTab_view/OrganisationDuplicatesTab_view.aod +++ b/neonView/BulkMailOverviewTop_view/BulkMailOverviewTop_view.aod @@ -1,7 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> - <name>OrganisationDuplicatesTab_view</name> - <title>Organisation duplicates</title> + <name>BulkMailOverviewTop_view</name> <majorModelMode>DISTRIBUTED</majorModelMode> <layout> <boxLayout> @@ -11,14 +10,14 @@ </layout> <children> <neonViewReference> - <name>8b4ab951-afb3-4fac-915b-89226ab2f849</name> - <entityField>SelfOrganisationDuplicatesConsumer</entityField> - <view>OrganisationDuplicatesFilter_view</view> + <name>7f6d7977-bd3d-44a8-ad58-8b543d23c8c9</name> + <entityField>BulkmailStatusFunnel</entityField> + <view>BulkMailAnalysisStatusFunnelChart_view</view> </neonViewReference> <neonViewReference> - <name>d1e2ba4a-a5d6-4bba-a646-5918490e43a4</name> - <entityField>#ENTITY</entityField> - <view>OrganisationUnrelatedDuplicates_view</view> + <name>050f2223-806d-4c76-803a-1cd5a830678b</name> + <entityField>BulkMailBounceChart</entityField> + <view>BulkMailAnalysisBounceChart_view</view> </neonViewReference> </children> </neonView> diff --git a/neonView/PersonClusterMain_view/PersonClusterMain_view.aod b/neonView/BulkMailOverview_view/BulkMailOverview_view.aod similarity index 62% rename from neonView/PersonClusterMain_view/PersonClusterMain_view.aod rename to neonView/BulkMailOverview_view/BulkMailOverview_view.aod index dcbd9badb6fe40452c89f4d4f54cef06fb5a0938..c84830332d57b8194850e1edf79533cef759b341 100644 --- a/neonView/PersonClusterMain_view/PersonClusterMain_view.aod +++ b/neonView/BulkMailOverview_view/BulkMailOverview_view.aod @@ -1,23 +1,23 @@ <?xml version="1.0" encoding="UTF-8"?> <neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> - <name>PersonClusterMain_view</name> + <name>BulkMailOverview_view</name> + <title>Overview</title> <majorModelMode>DISTRIBUTED</majorModelMode> <layout> <boxLayout> <name>layout</name> - <direction>HORIZONTAL</direction> </boxLayout> </layout> <children> <neonViewReference> - <name>ff307d1c-9de7-4842-a697-05e783eca14b</name> - <entityField>DuplicatePersonsConsumer</entityField> - <view>PersonFilter_view</view> + <name>077160ff-f8d8-46e3-b9bb-2cf69b7ff8e3</name> + <entityField>#ENTITY</entityField> + <view>BulkMailOverviewTop_view</view> </neonViewReference> <neonViewReference> - <name>0df195b2-9074-4734-b6df-be3bbf47050a</name> + <name>160d6889-0526-4c10-97bc-dab0187bf6d4</name> <entityField>#ENTITY</entityField> - <view>DuplicatesUnrelatedCluster_view</view> + <view>BulkMailOverviewBottom_view</view> </neonViewReference> </children> </neonView> diff --git a/neonView/BulkMailPreview_view/BulkMailPreview_view.aod b/neonView/BulkMailPreview_view/BulkMailPreview_view.aod index 48b1894a84256da8c10d96df4dbb7aea0e9957ab..c370e94bca36b6dd069c08826ea00c7afafcd129 100644 --- a/neonView/BulkMailPreview_view/BulkMailPreview_view.aod +++ b/neonView/BulkMailPreview_view/BulkMailPreview_view.aod @@ -6,6 +6,7 @@ <headerFooterLayout> <name>layout</name> <header>Card</header> + <footer>ScoreCard</footer> </headerFooterLayout> </layout> <children> @@ -35,6 +36,10 @@ <name>28c1e091-0fea-4324-8fb8-1893388354b7</name> <entityField>STATUS</entityField> </entityFieldLink> + <entityFieldLink> + <name>d588824d-1c21-483f-98eb-900f3e9722bd</name> + <entityField>DATE_TO_SEND</entityField> + </entityFieldLink> <entityFieldLink> <name>edbeea4d-019f-4661-b0d7-c07468e747cc</name> <entityField>DOCUMENTTEMPLATE_ID</entityField> @@ -51,21 +56,13 @@ <name>65546b24-3f6d-4639-b144-491ff5c478c1</name> <entityField>USE_TEMPLATE_ATTACHMENTS</entityField> </entityFieldLink> - </fields> - </genericViewTemplate> - <genericViewTemplate> - <name>Testing</name> - <showDrawer v="true" /> - <drawerCaption>Testing</drawerCaption> - <entityField>#ENTITY</entityField> - <fields> <entityFieldLink> - <name>ea406803-6189-4de0-aa41-f09f7e1b2336</name> - <entityField>TESTING_CONTACT_ID</entityField> + <name>8f811e5a-0477-4ba8-8f6e-fbb390833459</name> + <entityField>EMPLOYEE_CONTACT_ID</entityField> </entityFieldLink> <entityFieldLink> - <name>f8963199-c89b-48e5-a92c-8f655c05acab</name> - <entityField>TESTING_EMAIL_ADDRESS</entityField> + <name>9f3df668-6741-4faf-9afc-a0d761db990a</name> + <entityField>INTEREST_ID</entityField> </entityFieldLink> </fields> </genericViewTemplate> @@ -74,5 +71,22 @@ <entityField>RecipientStatusChart</entityField> <view>BulkMailStatusChart_view</view> </neonViewReference> + <scoreCardViewTemplate> + <name>ScoreCard</name> + <fields> + <entityFieldLink> + <name>7b07de5c-98c8-41fe-85f4-aa17d1736d32</name> + <entityField>recipientCount</entityField> + </entityFieldLink> + <entityFieldLink> + <name>969434d1-44af-421a-b365-1243f5556a61</name> + <entityField>deliveredMailCount</entityField> + </entityFieldLink> + <entityFieldLink> + <name>37ae366c-7492-4d67-a32f-8c799c84c06b</name> + <entityField>bounceCount</entityField> + </entityFieldLink> + </fields> + </scoreCardViewTemplate> </children> </neonView> diff --git a/neonView/BulkMailRecipientFilter_view/BulkMailRecipientFilter_view.aod b/neonView/BulkMailRecipientFilter_view/BulkMailRecipientFilter_view.aod index 9727da8fb78f8ff1ba6abd6414ffe00bbf0a4ffd..1c3f60390d9cd42ef65a9d017b1d81125bc9043a 100644 --- a/neonView/BulkMailRecipientFilter_view/BulkMailRecipientFilter_view.aod +++ b/neonView/BulkMailRecipientFilter_view/BulkMailRecipientFilter_view.aod @@ -11,10 +11,11 @@ <children> <tableViewTemplate> <name>Table</name> - <inlineEdit v="true" /> + <inlineEdit v="false" /> <autoNewRow v="true" /> <entityField>#ENTITY</entityField> <favoriteActionGroup1>recipientActions</favoriteActionGroup1> + <favoriteActionGroup2>testRunActions</favoriteActionGroup2> <columns> <neonTableColumn> <name>eadd8b00-f4a8-4634-bcc7-9bd5c6dbc876</name> @@ -28,6 +29,10 @@ <name>953dbc49-ae13-4328-b0f1-6ed3b5f6fb7b</name> <entityField>EMAIL_ADDRESS</entityField> </neonTableColumn> + <neonTableColumn> + <name>f7a64961-afcb-45ab-bb8d-6b3097363463</name> + <entityField>IS_TEST_RECIPIENT</entityField> + </neonTableColumn> <neonTableColumn> <name>f311e8da-4139-48bd-a792-6df572dce7ad</name> <entityField>STATUS</entityField> @@ -55,6 +60,10 @@ <name>8b75c1fc-71ce-4b38-aa51-81ee8a42564b</name> <entityField>EMAIL_ADDRESS</entityField> </neonTreeTableColumn> + <neonTreeTableColumn> + <name>2364fe2e-8056-4531-b999-407ca57157fe</name> + <entityField>IS_TEST_RECIPIENT</entityField> + </neonTreeTableColumn> <neonTreeTableColumn> <name>c904c6c0-b2e8-4192-a952-d4f1f6612dee</name> <entityField>STATUS</entityField> diff --git a/neonView/BulkMailScoreCard_view/BulkMailScoreCard_view.aod b/neonView/BulkMailScoreCard_view/BulkMailScoreCard_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..44e48038bca5bae6fd24a5e820677ae8add21c8f --- /dev/null +++ b/neonView/BulkMailScoreCard_view/BulkMailScoreCard_view.aod @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>BulkMailScoreCard_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <noneLayout> + <name>layout</name> + </noneLayout> + </layout> + <children> + <scoreCardViewTemplate> + <name>Keyfigures</name> + </scoreCardViewTemplate> + </children> +</neonView> diff --git a/neonView/BulkMailTestRecipientEdit_view/BulkMailTestRecipientEdit_view.aod b/neonView/BulkMailTestRecipientEdit_view/BulkMailTestRecipientEdit_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..f028be39b7b53ccd1acc65ad427b0322eeb80065 --- /dev/null +++ b/neonView/BulkMailTestRecipientEdit_view/BulkMailTestRecipientEdit_view.aod @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>BulkMailTestRecipientEdit_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <size>SMALL</size> + <layout> + <boxLayout> + <name>layout</name> + </boxLayout> + </layout> + <children> + <genericViewTemplate> + <name>Generic</name> + <editMode v="true" /> + <fields> + <entityFieldLink> + <name>16077d02-29d9-4acb-9728-7799011d1955</name> + <entityField>CONTACT_ID</entityField> + </entityFieldLink> + <entityFieldLink> + <name>23bf7ac8-dd52-4964-bf20-6d9955dc8908</name> + <entityField>EMAIL_ADDRESS</entityField> + </entityFieldLink> + </fields> + </genericViewTemplate> + </children> +</neonView> diff --git a/neonView/BulkMailTestRecipientFilter_view/BulkMailTestRecipientFilter_view.aod b/neonView/BulkMailTestRecipientFilter_view/BulkMailTestRecipientFilter_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..2ba06b22052fac7cda118e4c798f78ae1ae69c1a --- /dev/null +++ b/neonView/BulkMailTestRecipientFilter_view/BulkMailTestRecipientFilter_view.aod @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>BulkMailTestRecipientFilter_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <noneLayout> + <name>layout</name> + </noneLayout> + </layout> + <children> + <tableViewTemplate> + <name>table</name> + <columns> + <neonTableColumn> + <name>d085feb9-5bbb-444a-84f4-a03746e6b015</name> + <entityField>CONTACT_ID</entityField> + </neonTableColumn> + <neonTableColumn> + <name>1e307d8a-3f70-4f34-8e84-27f0e8ec89f4</name> + <entityField>EMAIL_ADDRESS</entityField> + </neonTableColumn> + </columns> + </tableViewTemplate> + </children> +</neonView> diff --git a/neonView/CampaignPreview_view/CampaignPreview_view.aod b/neonView/CampaignPreview_view/CampaignPreview_view.aod index ef0a7a7e691db737d2cb6c7c0315a71e86b02833..3c9d7772da5fa4bda0aacd3dc5bd40975f57e20c 100644 --- a/neonView/CampaignPreview_view/CampaignPreview_view.aod +++ b/neonView/CampaignPreview_view/CampaignPreview_view.aod @@ -89,7 +89,7 @@ <genericViewTemplate> <name>Description</name> <showDrawer v="true" /> - <drawerCaption>Further informations</drawerCaption> + <drawerCaption>Further information</drawerCaption> <hideEmptyFields v="false" /> <entityField>#ENTITY</entityField> <title>Description</title> diff --git a/neonView/CampaignStepFilter_view/CampaignStepFilter_view.aod b/neonView/CampaignStepFilter_view/CampaignStepFilter_view.aod index 84f150264f430b4cac557a8e95af70fb5c04cacf..6f7b3669c89ad85f11a5129cb3be62cfe35d9a1c 100644 --- a/neonView/CampaignStepFilter_view/CampaignStepFilter_view.aod +++ b/neonView/CampaignStepFilter_view/CampaignStepFilter_view.aod @@ -15,6 +15,7 @@ <name>StepsTable</name> <autoNewRow v="false" /> <entityField>#ENTITY</entityField> + <favoriteActionGroup1>group</favoriteActionGroup1> <isEditable v="true" /> <columns> <neonTableColumn> @@ -62,6 +63,7 @@ <treeTableViewTemplate> <name>Treetable</name> <entityField>#ENTITY</entityField> + <favoriteActionGroup1>group</favoriteActionGroup1> <columns> <neonTreeTableColumn> <name>2246fe5a-d4ed-454a-9007-6c1716ad2a1e</name> diff --git a/neonView/ChecklistEntryValueList_view/ChecklistEntryValueList_view.aod b/neonView/ChecklistEntryValueList_view/ChecklistEntryValueList_view.aod index 05829b4051870bcd2759ca41cbd9c0ccd1f1178d..3d6b1fee4f11118b2d5245a248b5b5831c745e79 100644 --- a/neonView/ChecklistEntryValueList_view/ChecklistEntryValueList_view.aod +++ b/neonView/ChecklistEntryValueList_view/ChecklistEntryValueList_view.aod @@ -30,6 +30,14 @@ <name>56a78ef9-dcef-4d1c-b30d-5c89f38611ec</name> <entityField>CHECKLISTENTRY_ID</entityField> </neonTableColumn> + <neonTableColumn> + <name>c3cf3919-e3ab-4595-9408-de061dc81883</name> + <entityField>DONEUSER</entityField> + </neonTableColumn> + <neonTableColumn> + <name>ca57e40c-cf83-4c6c-91f9-4395f6eb1141</name> + <entityField>DONEDATE</entityField> + </neonTableColumn> </columns> </tableViewTemplate> </children> diff --git a/neonView/ClassificationAdminEdit_view/ClassificationAdminEdit_view.aod b/neonView/ClassificationAdminEdit_view/ClassificationAdminEdit_view.aod index 84950dabeabac46c65057266f1e87f9c5139a901..9a437afea6c159960b042acf5d95f5d049b1928c 100644 --- a/neonView/ClassificationAdminEdit_view/ClassificationAdminEdit_view.aod +++ b/neonView/ClassificationAdminEdit_view/ClassificationAdminEdit_view.aod @@ -39,8 +39,12 @@ <entityField>CLASSIFICATIONTYPEID</entityField> </entityFieldLink> <entityFieldLink> - <name>91f2555e-214c-44f0-8798-029b94be9c00</name> - <entityField>CLASSIFICATIONTYPEIDDISPLAYVALUE</entityField> + <name>b7dbdcec-d9bd-4b5c-8163-66761108e6b3</name> + <entityField>FIELD</entityField> + </entityFieldLink> + <entityFieldLink> + <name>a28ab6ff-0ccf-487a-8482-2c2da67c2adc</name> + <entityField>FIELDTYPE</entityField> </entityFieldLink> <entityFieldLink> <name>274fd441-b0c3-48c2-8b4e-d4cace69946c</name> @@ -50,6 +54,10 @@ <name>1d35951d-1661-4a5d-93bc-323f11f35667</name> <entityField>classificationTypeFilter</entityField> </entityFieldLink> + <entityFieldLink> + <name>e352d6cc-ccc6-4431-9958-5b67db9ef88b</name> + <entityField>INDICATORTYPE</entityField> + </entityFieldLink> </fields> </genericViewTemplate> </children> diff --git a/neonView/ClassificationAdminFilter_view/ClassificationAdminFilter_view.aod b/neonView/ClassificationAdminFilter_view/ClassificationAdminFilter_view.aod index 14e2c433280ce0e447e3d8a838828b9d41be7b2b..e454baf2c5cfef94342236c0962cf419348277ca 100644 --- a/neonView/ClassificationAdminFilter_view/ClassificationAdminFilter_view.aod +++ b/neonView/ClassificationAdminFilter_view/ClassificationAdminFilter_view.aod @@ -21,6 +21,10 @@ <name>2e04e92e-9af8-46a6-9845-8bf822cd05f3</name> <entityField>#CONTENTTITLE</entityField> </neonTreeTableColumn> + <neonTreeTableColumn> + <name>96bdf771-6457-447d-847b-0365b105ed8c</name> + <entityField>FIELD</entityField> + </neonTreeTableColumn> <neonTreeTableColumn> <name>0d27f1ef-91e3-44fd-9514-e666ac10748e</name> <entityField>SCOREPOINTS</entityField> diff --git a/neonView/ClassificationPreview_view/ClassificationPreview_view.aod b/neonView/ClassificationPreview_view/ClassificationPreview_view.aod deleted file mode 100644 index f97be47068ba298e6853e008a2b91615f34701f2..0000000000000000000000000000000000000000 --- a/neonView/ClassificationPreview_view/ClassificationPreview_view.aod +++ /dev/null @@ -1,47 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> - <name>ClassificationPreview_view</name> - <majorModelMode>DISTRIBUTED</majorModelMode> - <isOverlay v="false" /> - <overlayOrientation>PORTRAIT</overlayOrientation> - <layout> - <boxLayout> - <name>layout</name> - <autoHeight v="true" /> - </boxLayout> - </layout> - <children> - <genericViewTemplate> - <name>classification</name> - <showDrawer v="true" /> - <fixedDrawer v="true" /> - <hideLabels v="false" /> - <hideEmptyFields v="false" /> - <entityField>#ENTITY</entityField> - <fields> - <entityFieldLink> - <name>7e79491f-5891-4fd7-b6e1-1045865f36f6</name> - <entityField>CLASSIFICATIONTYPEID</entityField> - </entityFieldLink> - <entityFieldLink> - <name>dfdbc6f4-4859-495b-96e7-0853bdbc611f</name> - <entityField>VALUE</entityField> - </entityFieldLink> - </fields> - </genericViewTemplate> - <genericViewTemplate> - <name>info</name> - <showDrawer v="true" /> - <fixedDrawer v="true" /> - <entityField>#ENTITY</entityField> - <isEditable v="false" /> - <title></title> - <fields> - <entityFieldLink> - <name>2d1fae5e-1b2b-4e29-9bcb-646db9fd9653</name> - <entityField>Info</entityField> - </entityFieldLink> - </fields> - </genericViewTemplate> - </children> -</neonView> diff --git a/neonView/ClassificationScoreMultipleEdit_view/ClassificationScoreMultipleEdit_view.aod b/neonView/ClassificationScoreMultipleEdit_view/ClassificationScoreMultipleEdit_view.aod index ca2ae66ae11f424e21abb8c839b9122ef792978e..f0cb233d7aec7cbfe515560375b974039f3af1ac 100644 --- a/neonView/ClassificationScoreMultipleEdit_view/ClassificationScoreMultipleEdit_view.aod +++ b/neonView/ClassificationScoreMultipleEdit_view/ClassificationScoreMultipleEdit_view.aod @@ -10,10 +10,30 @@ <children> <titledListViewTemplate> <name>scores</name> - <titleField>TITLE</titleField> + <titleField>displayValueForTitleField</titleField> + <titleFieldFullWidth v="true" /> <autoNewRow v="true" /> <entityField>#ENTITY</entityField> <columns> + <neonTitledListTableColumn> + <name>82492094-bb4d-4f6f-81f2-79c2c9aba665</name> + <entityField>FIELDVALUE</entityField> + </neonTitledListTableColumn> + <neonTitledListTableColumn> + <name>7d3e0eac-8725-4eda-bdca-4db6030eb2d1</name> + <entityField>INDICATORTEXT</entityField> + <fullWidth v="true" /> + </neonTitledListTableColumn> + <neonTitledListTableColumn> + <name>66dc3147-2ea0-4e60-b987-54e878714698</name> + <entityField>INDICATORINTEGER</entityField> + <fullWidth v="true" /> + </neonTitledListTableColumn> + <neonTitledListTableColumn> + <name>7c66e805-cdbf-44c0-ae8d-d4bd2a017b14</name> + <entityField>INDICATORNUMBER</entityField> + <fullWidth v="true" /> + </neonTitledListTableColumn> <neonTitledListTableColumn> <name>8c04eb99-5721-49ff-8db1-90461e11e55e</name> <entityField>SCOREPERCENT</entityField> diff --git a/neonView/ClassificationTree_view/ClassificationTree_view.aod b/neonView/ClassificationTree_view/ClassificationTree_view.aod index 6607bad05945f397d4c55ebef9a1d8c545ea0680..d625b2e6f38c1e8366d8ff4d2915454077991571 100644 --- a/neonView/ClassificationTree_view/ClassificationTree_view.aod +++ b/neonView/ClassificationTree_view/ClassificationTree_view.aod @@ -2,6 +2,7 @@ <neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> <name>ClassificationTree_view</name> <majorModelMode>DISTRIBUTED</majorModelMode> + <isOverlay v="true" /> <layout> <groupLayout> <name>layout</name> @@ -12,22 +13,27 @@ <name>ClassificationTreeTable</name> <showChildrenCount v="false" /> <entityField>#ENTITY</entityField> - <favoriteActionGroup1>fitlerviewActionGroup</favoriteActionGroup1> - <linkedColumns /> <defaultGroupFields> <element>CLASSIFICATIONGROUP</element> </defaultGroupFields> + <isCreatable v="false" /> + <isDeletable v="false" /> + <isEditable v="false" /> <columns> <neonTreeTableColumn> <name>5541a641-81c8-46d4-a5c9-e32a8edb8f80</name> + <entityField>UID</entityField> + </neonTreeTableColumn> + <neonTreeTableColumn> + <name>6ce4567b-d3fb-4be1-9557-46e0f24108d0</name> <entityField>CLASSIFICATIONTYPEID</entityField> </neonTreeTableColumn> <neonTreeTableColumn> - <name>9a62baa4-71cf-4b9d-8cd6-883b233a9b84</name> + <name>42b5b2fd-5325-4340-b374-d8b12c851717</name> <entityField>VALUE</entityField> </neonTreeTableColumn> <neonTreeTableColumn> - <name>6ce4567b-d3fb-4be1-9557-46e0f24108d0</name> + <name>5bd197c6-9690-4eb8-9db5-5052c45d5d2a</name> <entityField>SCOREPOINTS</entityField> </neonTreeTableColumn> </columns> diff --git a/neonView/ClassificationTypePreview_View/ClassificationTypePreview_View.aod b/neonView/ClassificationTypePreview_View/ClassificationTypePreview_View.aod index e2b699ea8ff8cbca49f7577670d556ba43e43959..6d8252d4e02589356d278e3b4966df13f230ea23 100644 --- a/neonView/ClassificationTypePreview_View/ClassificationTypePreview_View.aod +++ b/neonView/ClassificationTypePreview_View/ClassificationTypePreview_View.aod @@ -42,9 +42,5 @@ <entityField>ClassificationScores</entityField> <view>ClassificationScoreMultipleEdit_view</view> </neonViewReference> - <actionsViewTemplate> - <name>action</name> - <entityField>#ENTITY</entityField> - </actionsViewTemplate> </children> </neonView> diff --git a/neonView/CommunicationSettingsDrawer_view/CommunicationSettingsDrawer_view.aod b/neonView/CommunicationSettingsDrawer_view/CommunicationSettingsDrawer_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..e3d426b3f4f88373e8cf99ea5016a6dad171d37c --- /dev/null +++ b/neonView/CommunicationSettingsDrawer_view/CommunicationSettingsDrawer_view.aod @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>CommunicationSettingsDrawer_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <drawerLayout> + <name>layout</name> + <layoutCaption>Communication Settings</layoutCaption> + <fixedDrawer v="true" /> + </drawerLayout> + </layout> + <children> + <neonViewReference> + <name>c39e99e6-589c-4991-8c24-c55210744a87</name> + <entityField>#ENTITY</entityField> + <view>CommunicationSettingsFilter_view</view> + </neonViewReference> + </children> +</neonView> diff --git a/neonView/CommunicationSettingsEdit_view/CommunicationSettingsEdit_view.aod b/neonView/CommunicationSettingsEdit_view/CommunicationSettingsEdit_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..e617c0d1ac520aa028fd4fd381e784548e7e1e4a --- /dev/null +++ b/neonView/CommunicationSettingsEdit_view/CommunicationSettingsEdit_view.aod @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>CommunicationSettingsEdit_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <size>SMALL</size> + <layout> + <boxLayout> + <name>layout</name> + </boxLayout> + </layout> + <children> + <genericViewTemplate> + <name>CommunicationData</name> + <editMode v="true" /> + <fields> + <entityFieldLink> + <name>1d8b8e9b-2efc-4892-9d9a-ecc78874fd67</name> + <entityField>CHANNEL_TYPE</entityField> + </entityFieldLink> + <entityFieldLink> + <name>41399ea7-2607-492d-898e-85a74bcad694</name> + <entityField>MEDIUM</entityField> + </entityFieldLink> + <entityFieldLink> + <name>d9e0801b-824c-4576-b998-73d9a05ab73e</name> + <entityField>CHANNEL_ID</entityField> + </entityFieldLink> + <entityFieldLink> + <name>160baaf0-8e0f-472c-8127-8309f69399ff</name> + <entityField>STATUS</entityField> + </entityFieldLink> + <entityFieldLink> + <name>6d34768e-ea37-426b-b1e0-242b0a245c1c</name> + <entityField>INFO</entityField> + </entityFieldLink> + </fields> + </genericViewTemplate> + </children> +</neonView> diff --git a/neonView/CommunicationSettingsFilter_view/CommunicationSettingsFilter_view.aod b/neonView/CommunicationSettingsFilter_view/CommunicationSettingsFilter_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..969334026b5760bd6ccbec315ed7a2033b94f752 --- /dev/null +++ b/neonView/CommunicationSettingsFilter_view/CommunicationSettingsFilter_view.aod @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>CommunicationSettingsFilter_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterable v="true" /> + <layout> + <groupLayout> + <name>layout</name> + </groupLayout> + </layout> + <children> + <treeTableViewTemplate> + <name>TreeTable</name> + <columns> + <neonTreeTableColumn> + <name>1e698c64-ce5c-46d1-8c90-290d5ea187c7</name> + <entityField>ICON</entityField> + </neonTreeTableColumn> + <neonTreeTableColumn> + <name>5738f47a-57cd-4e6a-a017-1a5ab80581ac</name> + <entityField>CHANNEL_TYPE</entityField> + </neonTreeTableColumn> + <neonTreeTableColumn> + <name>a0eb5938-dad6-4d5c-b6f3-47cac8c720f8</name> + <entityField>CHANNEL_ID</entityField> + </neonTreeTableColumn> + <neonTreeTableColumn> + <name>70b811c4-c78a-43c1-91d3-f0d168a6d81e</name> + <entityField>MEDIUM</entityField> + </neonTreeTableColumn> + <neonTreeTableColumn> + <name>85b13242-8fb1-4528-8ea9-9ed2fe02fc77</name> + <entityField>STATUS</entityField> + </neonTreeTableColumn> + <neonTreeTableColumn> + <name>14c8c930-01ad-4142-bad9-456666317435</name> + <entityField>INFO</entityField> + </neonTreeTableColumn> + </columns> + </treeTableViewTemplate> + </children> +</neonView> diff --git a/neonView/CommunicationSettingsPreview_view/CommunicationSettingsPreview_view.aod b/neonView/CommunicationSettingsPreview_view/CommunicationSettingsPreview_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..80f84884292be22e8b9ac4ff85599d312047f574 --- /dev/null +++ b/neonView/CommunicationSettingsPreview_view/CommunicationSettingsPreview_view.aod @@ -0,0 +1,56 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>CommunicationSettingsPreview_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <headerFooterLayout> + <name>layout</name> + <header>Card</header> + </headerFooterLayout> + </layout> + <children> + <cardViewTemplate> + <name>Card</name> + <iconField>ICON</iconField> + <titleField>#CONTENTTITLE</titleField> + <subtitleField>STATUS</subtitleField> + <isEditable v="false" /> + <informationField>overrideInfo</informationField> + </cardViewTemplate> + <genericViewTemplate> + <name>Infos</name> + <showDrawer v="true" /> + <drawerCaption>Details</drawerCaption> + <fields> + <entityFieldLink> + <name>82483a97-4ffb-4e48-8791-477e193aa648</name> + <entityField>CHANNEL_TYPE</entityField> + </entityFieldLink> + <entityFieldLink> + <name>f2be357b-a772-4d10-bdff-7e6c94dc9d33</name> + <entityField>MEDIUM</entityField> + </entityFieldLink> + <entityFieldLink> + <name>1bc8d44c-a8a3-4858-a1e7-c49b49fec9a4</name> + <entityField>CHANNEL_ID</entityField> + </entityFieldLink> + <entityFieldLink> + <name>04a5a72f-864c-420a-8e77-274083bcfe47</name> + <entityField>STATUS</entityField> + </entityFieldLink> + <entityFieldLink> + <name>8a96457a-c8bd-4a06-ace2-e8b7163f3983</name> + <entityField>INFO</entityField> + </entityFieldLink> + <entityFieldLink> + <name>b077ec37-4e6a-417d-945f-b1b870dd72bb</name> + <entityField>DATE_NEW</entityField> + </entityFieldLink> + <entityFieldLink> + <name>8d38a5ea-3905-44ba-8d12-8095e840e830</name> + <entityField>DATE_EDIT</entityField> + </entityFieldLink> + </fields> + </genericViewTemplate> + </children> +</neonView> diff --git a/neonView/DSGVOConfigurationAttributeFilter_view/DSGVOConfigurationAttributeFilter_view.aod b/neonView/DSGVOConfigurationAttributeFilter_view/DSGVOConfigurationAttributeFilter_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..6c6822333640d901714a27697603c97235558ea0 --- /dev/null +++ b/neonView/DSGVOConfigurationAttributeFilter_view/DSGVOConfigurationAttributeFilter_view.aod @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>DSGVOConfigurationAttributeFilter_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterable v="false" /> + <layout> + <boxLayout> + <name>layout</name> + </boxLayout> + </layout> + <children> + <treeTableViewTemplate> + <name>TreeTable</name> + <parentField>ATTRIBUTE_PARENT_ID</parentField> + <showChildrenCount v="false" /> + <expandRootItems v="false" /> + <favoriteActionGroup1>FilterActions</favoriteActionGroup1> + <isCreatable v="false" /> + <isDeletable v="false" /> + <isEditable v="false" /> + <columns> + <neonTreeTableColumn> + <name>7ffa35a6-5264-4354-9ee4-ad20ffc81a53</name> + <entityField>ATTRIBUTE_NAME</entityField> + </neonTreeTableColumn> + <neonTreeTableColumn> + <name>9d92f64a-45e6-402b-99c6-f113147271f9</name> + <entityField>isDSGVORelevant</entityField> + </neonTreeTableColumn> + </columns> + </treeTableViewTemplate> + </children> +</neonView> diff --git a/neonView/DSGVOConfigurationEdit_view/DSGVOConfigurationEdit_view.aod b/neonView/DSGVOConfigurationEdit_view/DSGVOConfigurationEdit_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..e72917c6ffeb57b73799f1af990f36de8d50af1c --- /dev/null +++ b/neonView/DSGVOConfigurationEdit_view/DSGVOConfigurationEdit_view.aod @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>DSGVOConfigurationEdit_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <size>SMALL</size> + <layout> + <boxLayout> + <name>layout</name> + </boxLayout> + </layout> + <children> + <genericViewTemplate> + <name>Generic</name> + <editMode v="true" /> + <fields> + <entityFieldLink> + <name>ed3081a0-0b3b-4541-bb83-b721d9f61fb8</name> + <entityField>REASON</entityField> + </entityFieldLink> + <entityFieldLink> + <name>e2df9d14-8d26-4d5e-84d8-b8ba216a6a61</name> + <entityField>FILTER</entityField> + </entityFieldLink> + </fields> + </genericViewTemplate> + <actionsViewTemplate> + <name>Actions</name> + <actions> + <element>OpenContacts</element> + </actions> + </actionsViewTemplate> + </children> +</neonView> diff --git a/neonView/DSGVOConfigurationFilterFooter_view/DSGVOConfigurationFilterFooter_view.aod b/neonView/DSGVOConfigurationFilterFooter_view/DSGVOConfigurationFilterFooter_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..a9b323bda1837edb023e33d5587aa4593f4d70e6 --- /dev/null +++ b/neonView/DSGVOConfigurationFilterFooter_view/DSGVOConfigurationFilterFooter_view.aod @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>DSGVOConfigurationFilterFooter_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <boxLayout> + <name>layout</name> + <direction>HORIZONTAL</direction> + </boxLayout> + </layout> + <children> + <tableViewTemplate> + <name>Table</name> + <favoriteActionGroup1>FilterConfigActions</favoriteActionGroup1> + <columns> + <neonTableColumn> + <name>d3efb473-4159-4652-b88b-b15142a3be9c</name> + <entityField>REASON</entityField> + </neonTableColumn> + <neonTableColumn> + <name>d772b779-faef-44c5-93b6-f092298759c3</name> + <entityField>COUNT_USAGE</entityField> + </neonTableColumn> + </columns> + </tableViewTemplate> + <neonViewReference> + <name>f77ed99c-f893-4cd6-8879-545ff353b77f</name> + <entityField>DSGVOConfigurationAttributes</entityField> + <view>DSGVOConfigurationAttributeFilter_view</view> + </neonViewReference> + </children> +</neonView> diff --git a/neonView/DSGVOConfigurationFilterHeader_view/DSGVOConfigurationFilterHeader_view.aod b/neonView/DSGVOConfigurationFilterHeader_view/DSGVOConfigurationFilterHeader_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..9d164a33b5a40ab5b727d28b4294463364ad0d34 --- /dev/null +++ b/neonView/DSGVOConfigurationFilterHeader_view/DSGVOConfigurationFilterHeader_view.aod @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>DSGVOConfigurationFilterHeader_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <boxLayout> + <name>layout</name> + <autoHeight v="true" /> + </boxLayout> + </layout> + <children> + <genericViewTemplate> + <name>Generic</name> + <isEditable v="false" /> + <fields> + <entityFieldLink> + <name>1eb5807a-f82a-419b-bd7b-a020b7a6e778</name> + <entityField>alreadyMarked</entityField> + </entityFieldLink> + </fields> + </genericViewTemplate> + </children> +</neonView> diff --git a/neonView/DSGVOConfigurationFilter_view/DSGVOConfigurationFilter_view.aod b/neonView/DSGVOConfigurationFilter_view/DSGVOConfigurationFilter_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..fbc0eaaec35ceee30f300fa6b1a91334ab514cff --- /dev/null +++ b/neonView/DSGVOConfigurationFilter_view/DSGVOConfigurationFilter_view.aod @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>DSGVOConfigurationFilter_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterable v="true" /> + <layout> + <headerFooterLayout> + <name>layout</name> + <header>2706fe93-0710-4d75-8cbb-c128676e66c5</header> + </headerFooterLayout> + </layout> + <children> + <neonViewReference> + <name>2706fe93-0710-4d75-8cbb-c128676e66c5</name> + <entityField>#ENTITY</entityField> + <view>DSGVOConfigurationFilterHeader_view</view> + </neonViewReference> + <neonViewReference> + <name>1fff34b8-e5d3-4829-be06-dd87f1177408</name> + <entityField>#ENTITY</entityField> + <view>DSGVOConfigurationFilterFooter_view</view> + </neonViewReference> + </children> +</neonView> diff --git a/neonView/DSGVOConfigurationPreview_view/DSGVOConfigurationPreview_view.aod b/neonView/DSGVOConfigurationPreview_view/DSGVOConfigurationPreview_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..3752f87ff7336894643e83734358cfc4b8b7a5b8 --- /dev/null +++ b/neonView/DSGVOConfigurationPreview_view/DSGVOConfigurationPreview_view.aod @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>DSGVOConfigurationPreview_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <headerFooterLayout> + <name>layout</name> + <header>Card</header> + </headerFooterLayout> + </layout> + <children> + <cardViewTemplate> + <name>Card</name> + <titleField>REASON</titleField> + <subtitleField>FILTER</subtitleField> + <isEditable v="false" /> + </cardViewTemplate> + <genericViewTemplate> + <name>Generic</name> + <fields> + <entityFieldLink> + <name>290fa7cf-773e-4c06-9aaf-769946caa491</name> + <entityField>COUNT_USAGE</entityField> + </entityFieldLink> + </fields> + </genericViewTemplate> + <actionsViewTemplate> + <name>Actions</name> + <actions> + <element>OpenContacts</element> + </actions> + </actionsViewTemplate> + </children> +</neonView> diff --git a/neonView/DSGVODeleteFlagEdit_view/DSGVODeleteFlagEdit_view.aod b/neonView/DSGVODeleteFlagEdit_view/DSGVODeleteFlagEdit_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..8961be2d4881343e15b4a3c5dd4366fc0541067d --- /dev/null +++ b/neonView/DSGVODeleteFlagEdit_view/DSGVODeleteFlagEdit_view.aod @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>DSGVODeleteFlagEdit_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <size>SMALL</size> + <layout> + <boxLayout> + <name>layout</name> + </boxLayout> + </layout> + <children> + <genericViewTemplate> + <name>Generic</name> + <editMode v="true" /> + <fields> + <entityFieldLink> + <name>27a65e8e-9812-43aa-b261-6dfc0e9344a1</name> + <entityField>REASON</entityField> + </entityFieldLink> + </fields> + </genericViewTemplate> + </children> +</neonView> diff --git a/neonView/DuplicatesUnrelatedPersonFilter_view/DuplicatesUnrelatedPersonFilter_view.aod b/neonView/DSGVODeleteFlagFilter_view/DSGVODeleteFlagFilter_view.aod similarity index 56% rename from neonView/DuplicatesUnrelatedPersonFilter_view/DuplicatesUnrelatedPersonFilter_view.aod rename to neonView/DSGVODeleteFlagFilter_view/DSGVODeleteFlagFilter_view.aod index 173666ab5f8a8ffb5ded2760fd5da08851e2e209..a15dc8d1a8cdc87c016dc495c92cc38c0f74b3ce 100644 --- a/neonView/DuplicatesUnrelatedPersonFilter_view/DuplicatesUnrelatedPersonFilter_view.aod +++ b/neonView/DSGVODeleteFlagFilter_view/DSGVODeleteFlagFilter_view.aod @@ -1,28 +1,27 @@ <?xml version="1.0" encoding="UTF-8"?> <neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> - <name>DuplicatesUnrelatedPersonFilter_view</name> + <name>DSGVODeleteFlagFilter_view</name> <majorModelMode>DISTRIBUTED</majorModelMode> + <filterable v="true" /> <layout> - <boxLayout> + <groupLayout> <name>layout</name> - </boxLayout> + </groupLayout> </layout> <children> <tableViewTemplate> - <name>UnrelatedPersons</name> - <hideContentSearch v="true" /> - <entityField>#ENTITY</entityField> + <name>DSGVODeleteFlagFilterTable</name> + <favoriteActionGroup1>FilterActions</favoriteActionGroup1> <isCreatable v="false" /> <isEditable v="false" /> - <title>Unrelated person duplicates</title> <columns> <neonTableColumn> - <name>734re984-6a0b-4126-ab49-452e2b54f76d</name> - <entityField>SourceDuplicateDescription</entityField> + <name>786d40dd-9d7c-47b6-ad82-0130f8c5b5c0</name> + <entityField>REASON</entityField> </neonTableColumn> <neonTableColumn> - <name>8615259b-de5b-378u-945d-2ff934ae1b8c</name> - <entityField>UnrelatedDuplicateDescription</entityField> + <name>68b05f9f-d50f-4fe8-89ec-fe1347008417</name> + <entityField>DATE_NEW</entityField> </neonTableColumn> </columns> </tableViewTemplate> diff --git a/neonView/DSGVODeleteFlagPreview_view/DSGVODeleteFlagPreview_view.aod b/neonView/DSGVODeleteFlagPreview_view/DSGVODeleteFlagPreview_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..74eb6ae512ad38543b7900323c429ac09dfbe64d --- /dev/null +++ b/neonView/DSGVODeleteFlagPreview_view/DSGVODeleteFlagPreview_view.aod @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>DSGVODeleteFlagPreview_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <headerFooterLayout> + <name>layout</name> + <footer>DSGVODeleteFlagPreviewScoreCard</footer> + </headerFooterLayout> + </layout> + <children> + <genericViewTemplate> + <name>DSGVODeleteFlagPreviewGeneric</name> + <fields> + <entityFieldLink> + <name>5c923ee0-ad34-494a-9f12-b5c1ca431088</name> + <entityField>REASON</entityField> + </entityFieldLink> + </fields> + </genericViewTemplate> + <scoreCardViewTemplate> + <name>DSGVODeleteFlagPreviewScoreCard</name> + <fields> + <entityFieldLink> + <name>9ff8e5f5-1244-4349-aadf-8cbd3d37cc97</name> + <entityField>USER_NEW</entityField> + </entityFieldLink> + <entityFieldLink> + <name>3ea79def-4411-41a5-a04d-dcbbcba459ca</name> + <entityField>DATE_NEW</entityField> + </entityFieldLink> + </fields> + </scoreCardViewTemplate> + </children> +</neonView> diff --git a/neonView/DSGVOEdit_view/DSGVOEdit_view.aod b/neonView/DSGVOEdit_view/DSGVOEdit_view.aod index 7b92fa16742092c9b43a0776dcd615180e220712..16f0ff1823b2f599005139241c3443663e5f6a0c 100644 --- a/neonView/DSGVOEdit_view/DSGVOEdit_view.aod +++ b/neonView/DSGVOEdit_view/DSGVOEdit_view.aod @@ -35,6 +35,10 @@ <name>605ab093-46de-4da2-a155-c86b02206553</name> <entityField>APPLY_CHANGE_FOR_ALL_CONTROL</entityField> </entityFieldLink> + <entityFieldLink> + <name>8a0c0387-8340-4710-8082-e66ebc47b626</name> + <entityField>bindata</entityField> + </entityFieldLink> </fields> </genericViewTemplate> </children> diff --git a/neonView/DSGVOPreview_view/DSGVOPreview_view.aod b/neonView/DSGVOPreview_view/DSGVOPreview_view.aod index ff1974aa153cc55a605adae8c55d1bb06c99425d..36360ea06ba72c05f495eacfce5771d2ff6a82d9 100644 --- a/neonView/DSGVOPreview_view/DSGVOPreview_view.aod +++ b/neonView/DSGVOPreview_view/DSGVOPreview_view.aod @@ -38,6 +38,10 @@ <name>6cd8795a-9779-4a7d-9aaf-7da580424742</name> <entityField>APPLY_CHANGE_FOR_ALL_CONTROL</entityField> </entityFieldLink> + <entityFieldLink> + <name>12b07679-f932-44cc-baaf-5d595b7a4b6a</name> + <entityField>bindata</entityField> + </entityFieldLink> </fields> </genericViewTemplate> </children> diff --git a/neonView/DistrictPreview_view/DistrictPreview_view.aod b/neonView/DistrictPreview_view/DistrictPreview_view.aod index 52d71fd47468c7d403fb32b0118ee2c9d1c10124..94a09880f39b0770ddeb988e888edc32c85c167a 100644 --- a/neonView/DistrictPreview_view/DistrictPreview_view.aod +++ b/neonView/DistrictPreview_view/DistrictPreview_view.aod @@ -21,11 +21,11 @@ <genericViewTemplate> <name>furtherInfosGenericViewTemplate</name> <showDrawer v="true" /> - <drawerCaption>Further informations</drawerCaption> + <drawerCaption>Further information</drawerCaption> <fixedDrawer v="false" /> <hideEmptyFields v="true" /> <entityField>#ENTITY</entityField> - <title>Further informations</title> + <title>Further information</title> <fields> <entityFieldLink> <name>f1c69329-5a9f-456f-b37d-1ca1b0e4943c</name> diff --git a/neonView/DocumentPreview_view/DocumentPreview_view.aod b/neonView/DocumentPreview_view/DocumentPreview_view.aod index 6b6f308e9ebaae2973e710b1ddc7d4cb4e09dca3..76321f01204e4a8dd2466979e1f2e61475d917aa 100644 --- a/neonView/DocumentPreview_view/DocumentPreview_view.aod +++ b/neonView/DocumentPreview_view/DocumentPreview_view.aod @@ -15,6 +15,7 @@ <subtitleField>TYPE</subtitleField> <descriptionField>SIZE</descriptionField> <favoriteAction1>downloadSingleFileAction</favoriteAction1> + <favoriteAction2>openSingleFileAction</favoriteAction2> <entityField>#ENTITY</entityField> </cardViewTemplate> <genericViewTemplate> diff --git a/neonView/PersonDuplicateEditview_view/PersonDuplicateEditview_view.aod b/neonView/DuplicateOrganisationEdit_view/DuplicateOrganisationEdit_view.aod similarity index 55% rename from neonView/PersonDuplicateEditview_view/PersonDuplicateEditview_view.aod rename to neonView/DuplicateOrganisationEdit_view/DuplicateOrganisationEdit_view.aod index b331c5900d3b446f8632159bd837bb4968b85ef4..a2d93541e4f43880901a1cf4e3caad407d2b8ea1 100644 --- a/neonView/PersonDuplicateEditview_view/PersonDuplicateEditview_view.aod +++ b/neonView/DuplicateOrganisationEdit_view/DuplicateOrganisationEdit_view.aod @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> - <name>PersonDuplicateEditview_view</name> + <name>DuplicateOrganisationEdit_view</name> <majorModelMode>DISTRIBUTED</majorModelMode> <layout> <noneLayout> @@ -9,38 +9,38 @@ </layout> <children> <tableViewTemplate> - <name>PersonDuplicateEditview_Table</name> + <name>table</name> <hideActions v="true" /> - <hideContentSearch v="true" /> - <iconField></iconField> - <entityField>#ENTITY</entityField> - <linkedColumns /> - <fixedFilterFields /> - <hideHeader v="true" /> - <title>Duplicates</title> + <isCreatable v="false" /> + <isDeletable v="false" /> + <isEditable v="false" /> <columns> <neonTableColumn> - <name>7e5410c5-ee05-4a5a-b168-8015d2d05834</name> - <entityField>#IMAGE</entityField> + <name>7cb9aa93-5aa1-4f52-a2a0-32723919af08</name> + <entityField>ORGNAME</entityField> </neonTableColumn> <neonTableColumn> - <name>ef22c1b8-1025-41b6-bb0b-99fe053e9ef9</name> - <entityField>FIRSTNAME</entityField> + <name>683fa228-8853-4def-b904-c10222136aec</name> + <entityField>STATUS</entityField> </neonTableColumn> <neonTableColumn> - <name>abfe3ce4-4fcc-4d61-93ec-156bd97ace3b</name> - <entityField>LASTNAME</entityField> + <name>bb6ddf6b-aa09-4b5b-814a-ae5ebf08a48a</name> + <entityField>CUSTOMERCODE</entityField> </neonTableColumn> <neonTableColumn> - <name>17d892a8-69fb-4bca-9629-d92ae80c72f8</name> - <entityField>STANDARD_PHONE_COMMUNICATION</entityField> + <name>a1630a4a-9989-4e9b-bb39-03a8432aef3f</name> + <entityField>TYPE</entityField> </neonTableColumn> <neonTableColumn> - <name>12006c11-e833-4ce1-9645-fdec0a8b6088</name> + <name>6295ed5c-35a8-4238-921e-65e29141883f</name> <entityField>STANDARD_EMAIL_COMMUNICATION</entityField> </neonTableColumn> <neonTableColumn> - <name>0231907e-8ae0-4f99-af1c-1bcb2f57bdb8</name> + <name>d6716d9e-19b7-4d2f-b7a9-61d0e3ef3ac5</name> + <entityField>STANDARD_PHONE_COMMUNICATION</entityField> + </neonTableColumn> + <neonTableColumn> + <name>334a97a3-cad3-4ac5-b670-de7d587e2781</name> <entityField>STANDARD_ADDRESS</entityField> </neonTableColumn> </columns> diff --git a/neonView/DuplicateOrganisationFilter_view/DuplicateOrganisationFilter_view.aod b/neonView/DuplicateOrganisationFilter_view/DuplicateOrganisationFilter_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..2e4b88985d02932f1eb78ced263ceb82b88c2adf --- /dev/null +++ b/neonView/DuplicateOrganisationFilter_view/DuplicateOrganisationFilter_view.aod @@ -0,0 +1,58 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>DuplicateOrganisationFilter_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterable v="true" /> + <layout> + <groupLayout> + <name>layout</name> + </groupLayout> + </layout> + <children> + <tableViewTemplate> + <name>table</name> + <favoriteActionGroup1>filterActions</favoriteActionGroup1> + <isCreatable v="false" /> + <isDeletable v="false" /> + <isEditable v="false" /> + <columns> + <neonTableColumn> + <name>04253f56-c764-46a9-8795-6b7c58d9352b</name> + <entityField>PICTURE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>fc700556-7829-42be-b824-83d29e7dddf3</name> + <entityField>DUPLICATE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>6e753d4c-4f6a-4fbf-8af0-b76aa4ff8e76</name> + <entityField>ORGNAME</entityField> + </neonTableColumn> + <neonTableColumn> + <name>1368091a-0a65-4df6-b0fc-34031925e2bf</name> + <entityField>STATUS</entityField> + </neonTableColumn> + <neonTableColumn> + <name>d407d879-3f44-4656-a4bc-0149adcfec5e</name> + <entityField>CUSTOMERCODE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>166bdb5d-a822-4915-99aa-2ff1adca1bc9</name> + <entityField>TYPE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>4edfc696-78b0-4abd-8d03-39c02d0116da</name> + <entityField>STANDARD_PHONE_COMMUNICATION</entityField> + </neonTableColumn> + <neonTableColumn> + <name>e7fb62b8-4d76-46cc-bf84-00230d2e6e56</name> + <entityField>STANDARD_EMAIL_COMMUNICATION</entityField> + </neonTableColumn> + <neonTableColumn> + <name>93bc9275-aea3-436d-ab86-fd400a790538</name> + <entityField>STANDARD_ADDRESS</entityField> + </neonTableColumn> + </columns> + </tableViewTemplate> + </children> +</neonView> diff --git a/neonView/DuplicateOrganisationPreview_view/DuplicateOrganisationPreview_view.aod b/neonView/DuplicateOrganisationPreview_view/DuplicateOrganisationPreview_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..29f3a38fc42c1f47d2d21233941b8677b77ddfe7 --- /dev/null +++ b/neonView/DuplicateOrganisationPreview_view/DuplicateOrganisationPreview_view.aod @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>DuplicateOrganisationPreview_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <noneLayout> + <name>layout</name> + </noneLayout> + </layout> +</neonView> diff --git a/neonView/DuplicatePersonEdit_view/DuplicatePersonEdit_view.aod b/neonView/DuplicatePersonEdit_view/DuplicatePersonEdit_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..99e36d549f4ddd5e255077197ed28f53825b0c57 --- /dev/null +++ b/neonView/DuplicatePersonEdit_view/DuplicatePersonEdit_view.aod @@ -0,0 +1,61 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>DuplicatePersonEdit_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <noneLayout> + <name>layout</name> + </noneLayout> + </layout> + <children> + <tableViewTemplate> + <name>table</name> + <hideActions v="true" /> + <isCreatable v="false" /> + <isDeletable v="false" /> + <isEditable v="false" /> + <columns> + <neonTableColumn> + <name>fe9c534a-ba99-4805-996f-e76a6e77396e</name> + <entityField>LETTERSALUTATION</entityField> + </neonTableColumn> + <neonTableColumn> + <name>f8235c5b-6d13-4fd4-8522-96e38abaad1e</name> + <entityField>TITLE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>7b89e8a4-e9da-4d89-86cf-d35db86cf53c</name> + <entityField>FIRSTNAME</entityField> + </neonTableColumn> + <neonTableColumn> + <name>2b255370-1cd5-472f-8417-bde8c9f5743a</name> + <entityField>MIDDLENAME</entityField> + </neonTableColumn> + <neonTableColumn> + <name>a5188dac-9c63-44de-bb36-cb40689376c2</name> + <entityField>LASTNAME</entityField> + </neonTableColumn> + <neonTableColumn> + <name>7f0abf2a-5411-425e-8be8-16c57d19ba12</name> + <entityField>STATUS</entityField> + </neonTableColumn> + <neonTableColumn> + <name>55cdd3d2-548a-4a7f-9590-14413d0a6f34</name> + <entityField>ORGANISATION_ID</entityField> + </neonTableColumn> + <neonTableColumn> + <name>305716b3-d99b-4fea-8f8a-a71b9dbeeacd</name> + <entityField>STANDARD_EMAIL_COMMUNICATION</entityField> + </neonTableColumn> + <neonTableColumn> + <name>446a5dea-a93f-4b1e-9b51-b8a00990972d</name> + <entityField>STANDARD_PHONE_COMMUNICATION</entityField> + </neonTableColumn> + <neonTableColumn> + <name>1fedd9be-6492-4e89-ae8e-03bc212078e1</name> + <entityField>STANDARD_ADDRESS</entityField> + </neonTableColumn> + </columns> + </tableViewTemplate> + </children> +</neonView> diff --git a/neonView/DuplicatePersonFilter_view/DuplicatePersonFilter_view.aod b/neonView/DuplicatePersonFilter_view/DuplicatePersonFilter_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..c1f6405a3cc09e5a8eda9af6abb92dcce3fa1f06 --- /dev/null +++ b/neonView/DuplicatePersonFilter_view/DuplicatePersonFilter_view.aod @@ -0,0 +1,70 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>DuplicatePersonFilter_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterable v="true" /> + <layout> + <groupLayout> + <name>layout</name> + </groupLayout> + </layout> + <children> + <tableViewTemplate> + <name>table</name> + <favoriteActionGroup1>filterActions</favoriteActionGroup1> + <isCreatable v="false" /> + <isDeletable v="false" /> + <isEditable v="false" /> + <columns> + <neonTableColumn> + <name>c89d9927-c3f1-4e0c-b7fa-20d5e031f8b7</name> + <entityField>PICTURE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>c68a371e-0baa-4e6c-baee-424ca4f1d258</name> + <entityField>DUPLICATE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>42fb67ab-6bc9-4a02-9dad-10f54d9fe242</name> + <entityField>LETTERSALUTATION</entityField> + </neonTableColumn> + <neonTableColumn> + <name>59aa16e6-f599-4aff-8314-6b1a2c8cfd67</name> + <entityField>TITLE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>3fdd6165-1a1b-4521-a23f-631e5f88beb1</name> + <entityField>FIRSTNAME</entityField> + </neonTableColumn> + <neonTableColumn> + <name>a76bc050-eccd-4d2a-9190-2d994fcea7e3</name> + <entityField>MIDDLENAME</entityField> + </neonTableColumn> + <neonTableColumn> + <name>381ba7a3-1591-40a2-8837-0516db984bb7</name> + <entityField>LASTNAME</entityField> + </neonTableColumn> + <neonTableColumn> + <name>6b828d7c-7b3c-490f-98a1-41520dec0773</name> + <entityField>STATUS</entityField> + </neonTableColumn> + <neonTableColumn> + <name>47c28842-59ab-4f9c-9239-3fda9c6171e0</name> + <entityField>ORGANISATION_ID</entityField> + </neonTableColumn> + <neonTableColumn> + <name>68b9211a-b4e7-4b7b-b110-9d76d7e14bb2</name> + <entityField>STANDARD_PHONE_COMMUNICATION</entityField> + </neonTableColumn> + <neonTableColumn> + <name>7a3fd399-0e19-4399-8df1-4f8d521b6729</name> + <entityField>STANDARD_EMAIL_COMMUNICATION</entityField> + </neonTableColumn> + <neonTableColumn> + <name>f54a6069-994c-4c77-b462-dc449e42ef49</name> + <entityField>STANDARD_ADDRESS</entityField> + </neonTableColumn> + </columns> + </tableViewTemplate> + </children> +</neonView> diff --git a/neonView/DuplicatePersonPreview_view/DuplicatePersonPreview_view.aod b/neonView/DuplicatePersonPreview_view/DuplicatePersonPreview_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..bd812680650a1960d3848cc068685b565b20f281 --- /dev/null +++ b/neonView/DuplicatePersonPreview_view/DuplicatePersonPreview_view.aod @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>DuplicatePersonPreview_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <noneLayout> + <name>layout</name> + </noneLayout> + </layout> +</neonView> diff --git a/neonView/DuplicateScannerFilter_view/DuplicateScannerFilter_view.aod b/neonView/DuplicateScannerFilter_view/DuplicateScannerFilter_view.aod index 5a99ae0226ac05f614f190c54732bedc624b4a5c..0a9b1256cbdc2176dacc927a459bcf2e66d599fb 100644 --- a/neonView/DuplicateScannerFilter_view/DuplicateScannerFilter_view.aod +++ b/neonView/DuplicateScannerFilter_view/DuplicateScannerFilter_view.aod @@ -11,6 +11,7 @@ <tableViewTemplate> <name>Filters</name> <entityField>#ENTITY</entityField> + <favoriteActionGroup1>FilterActions</favoriteActionGroup1> <isCreatable v="false" /> <isDeletable v="false" /> <isEditable v="true" /> @@ -23,11 +24,16 @@ <name>8615259b-de5b-493a-9c9d-2ff934ae1b8c</name> <entityField>ENTITY_TO_SCAN_NAME</entityField> </neonTableColumn> + <neonTableColumn> + <name>5ae7793f-353c-45ed-995e-5153216a3661</name> + <entityField>DUPLICATECOUNT</entityField> + </neonTableColumn> </columns> </tableViewTemplate> <treeTableViewTemplate> <name>Treetable</name> <entityField>#ENTITY</entityField> + <favoriteActionGroup1>FilterActions</favoriteActionGroup1> <isCreatable v="false" /> <isDeletable v="false" /> <columns> @@ -39,6 +45,10 @@ <name>6730d89f-4190-4767-b3a0-a63231477ed4</name> <entityField>ENTITY_TO_SCAN_NAME</entityField> </neonTreeTableColumn> + <neonTreeTableColumn> + <name>8cd35bc9-2954-4dca-b67b-083d3a27c45c</name> + <entityField>DUPLICATECOUNT</entityField> + </neonTreeTableColumn> </columns> </treeTableViewTemplate> </children> diff --git a/neonView/DuplicateScannerPreview_view/DuplicateScannerPreview_view.aod b/neonView/DuplicateScannerPreview_view/DuplicateScannerPreview_view.aod index 75c33f74429cbf649d0353217f044074c7a56a4a..bbb07db7e29b4b566072c7ca947047641f527f92 100644 --- a/neonView/DuplicateScannerPreview_view/DuplicateScannerPreview_view.aod +++ b/neonView/DuplicateScannerPreview_view/DuplicateScannerPreview_view.aod @@ -22,10 +22,6 @@ <name>b3ce81d4-bbf5-49ec-8a7a-38119ef6973f</name> <entityField>ENTITY_TO_SCAN_NAME</entityField> </entityFieldLink> - <entityFieldLink> - <name>ba6cde5d-7661-4662-9e92-dca40b597015</name> - <entityField>EXTERNAL_SERVICE_USAGE_ALLOWED</entityField> - </entityFieldLink> <entityFieldLink> <name>51bf489d-7536-4fc5-a187-8f2610b35b3d</name> <entityField>ID_FIELD_NAME</entityField> diff --git a/neonView/DuplicatesOverview_view/DuplicatesOverview_view.aod b/neonView/DuplicatesOverview_view/DuplicatesOverview_view.aod index ad0436323ab2c0829d978e2bf86c24b0766597ab..e7f6cadf9d25dabbe2ee05bb144c190b8ee90a8b 100644 --- a/neonView/DuplicatesOverview_view/DuplicatesOverview_view.aod +++ b/neonView/DuplicatesOverview_view/DuplicatesOverview_view.aod @@ -11,12 +11,10 @@ <neonViewReference> <name>b3164f16-fa7e-42b0-829f-88553add7c08</name> <entityField>#ENTITY</entityField> - <view>PersonDublicatesTab_view</view> </neonViewReference> <neonViewReference> <name>8e19d057-58da-4db8-8119-ecf070af86ab</name> <entityField>#ENTITY</entityField> - <view>OrganisationDuplicatesTab_view</view> </neonViewReference> </children> </neonView> diff --git a/neonView/EmailDataFilter_view/EmailDataFilter_view.aod b/neonView/EmailDataFilter_view/EmailDataFilter_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..92e180e38bb06cf5f890ee9477eefd3f0e8fae5b --- /dev/null +++ b/neonView/EmailDataFilter_view/EmailDataFilter_view.aod @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>EmailDataFilter_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterable v="true" /> + <layout> + <groupLayout> + <name>layout</name> + </groupLayout> + </layout> + <children> + <tableViewTemplate> + <name>Table</name> + <columns> + <neonTableColumn> + <name>7f43c0be-c067-4168-99f0-6720a1c720b6</name> + <entityField>SUBJECT</entityField> + </neonTableColumn> + </columns> + </tableViewTemplate> + </children> +</neonView> diff --git a/neonView/EmailFilterHandlingEdit_view/EmailFilterHandlingEdit_view.aod b/neonView/EmailFilterHandlingEdit_view/EmailFilterHandlingEdit_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..3d9009271e37ce15a6335858abf80842d438d3be --- /dev/null +++ b/neonView/EmailFilterHandlingEdit_view/EmailFilterHandlingEdit_view.aod @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>EmailFilterHandlingEdit_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <size>SMALL</size> + <layout> + <boxLayout> + <name>layout</name> + </boxLayout> + </layout> + <children> + <genericViewTemplate> + <name>Generic</name> + <editMode v="true" /> + <entityField>#ENTITY</entityField> + <fields> + <entityFieldLink> + <name>7ae05d76-6489-4dae-a27c-207a3fc5a0cf</name> + <entityField>TITLE</entityField> + </entityFieldLink> + <entityFieldLink> + <name>2de28e53-cad3-4715-929e-ecb3fcf3709d</name> + <entityField>FILTER_TYPE</entityField> + </entityFieldLink> + <entityFieldLink> + <name>a8ee537f-4436-40da-a5aa-72dc586a8006</name> + <entityField>FILTER</entityField> + </entityFieldLink> + <entityFieldLink> + <name>a8984a83-498b-4fe0-8b6e-c6dcabcfe1a6</name> + <entityField>WORKFLOWDEFINITION_KEY</entityField> + </entityFieldLink> + <entityFieldLink> + <name>98aeb782-804f-4581-ae89-6d5b78389257</name> + <entityField>DESCRIPTION</entityField> + </entityFieldLink> + </fields> + </genericViewTemplate> + </children> +</neonView> diff --git a/neonView/EmailFilterHandlingFilter_view/EmailFilterHandlingFilter_view.aod b/neonView/EmailFilterHandlingFilter_view/EmailFilterHandlingFilter_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..307b0c8ccd1079e250b282ac6e02ef2e8a365449 --- /dev/null +++ b/neonView/EmailFilterHandlingFilter_view/EmailFilterHandlingFilter_view.aod @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>EmailFilterHandlingFilter_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterable v="true" /> + <layout> + <groupLayout> + <name>layout</name> + </groupLayout> + </layout> + <children> + <tableViewTemplate> + <name>Table</name> + <entityField>#ENTITY</entityField> + <linkedColumns> + <element>TITLE</element> + </linkedColumns> + <columns> + <neonTableColumn> + <name>5aa4af27-89ff-4188-9abb-8f26dfc78900</name> + <entityField>TITLE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>9f23688c-26e4-494c-9637-f2641a792339</name> + <entityField>FILTER_TYPE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>6638b293-f15e-4d33-a9d9-1628e185ac0f</name> + <entityField>WORKFLOWDEFINITION_KEY</entityField> + </neonTableColumn> + <neonTableColumn> + <name>d6946a1f-ef87-4834-b895-87f8b6372dfe</name> + <entityField>DESCRIPTION</entityField> + </neonTableColumn> + </columns> + </tableViewTemplate> + </children> +</neonView> diff --git a/neonView/EmailFilterHandlingPreview_view/EmailFilterHandlingPreview_view.aod b/neonView/EmailFilterHandlingPreview_view/EmailFilterHandlingPreview_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..cd1dc162ddf476a1e3b38f7844d4ee2d10c5bb1b --- /dev/null +++ b/neonView/EmailFilterHandlingPreview_view/EmailFilterHandlingPreview_view.aod @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>EmailFilterHandlingPreview_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <headerFooterLayout> + <name>layout</name> + <header>Card</header> + </headerFooterLayout> + </layout> + <children> + <cardViewTemplate> + <name>Card</name> + <titleField>TITLE</titleField> + <subtitleField>FILTER_TYPE</subtitleField> + </cardViewTemplate> + </children> +</neonView> diff --git a/neonView/InterestEdit_view/InterestEdit_view.aod b/neonView/InterestEdit_view/InterestEdit_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..5906d838178ac3079e96c62304368fb513ebcc93 --- /dev/null +++ b/neonView/InterestEdit_view/InterestEdit_view.aod @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>InterestEdit_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <size>SMALL</size> + <layout> + <boxLayout> + <name>layout</name> + </boxLayout> + </layout> + <children> + <genericViewTemplate> + <name>Generic</name> + <editMode v="true" /> + <fields> + <entityFieldLink> + <name>64509785-fd15-4d04-8c58-346011ae894b</name> + <entityField>TITLE</entityField> + </entityFieldLink> + <entityFieldLink> + <name>bb5c4849-ce7c-4a71-ab43-03c7c5a6481b</name> + <entityField>DESCRIPTION</entityField> + </entityFieldLink> + <entityFieldLink> + <name>896cab23-b7e0-477f-83d9-0c470a5c01e5</name> + <entityField>IS_DEFAULT</entityField> + </entityFieldLink> + <entityFieldLink> + <name>00313338-1e50-406e-aa1b-ff52372dee50</name> + <entityField>STATUS</entityField> + </entityFieldLink> + </fields> + </genericViewTemplate> + </children> +</neonView> diff --git a/neonView/InterestFilter_view/InterestFilter_view.aod b/neonView/InterestFilter_view/InterestFilter_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..93622b68cd8b1ea51eb20e82170d1c8d6de3f856 --- /dev/null +++ b/neonView/InterestFilter_view/InterestFilter_view.aod @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>InterestFilter_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterable v="true" /> + <layout> + <groupLayout> + <name>layout</name> + </groupLayout> + </layout> + <children> + <tableViewTemplate> + <name>Table</name> + <columns> + <neonTableColumn> + <name>9300597d-e775-4f6e-908c-cdf5bcfa98e8</name> + <entityField>TITLE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>c8451bde-7bff-481d-979a-608685f4ab6d</name> + <entityField>DESCRIPTION</entityField> + </neonTableColumn> + <neonTableColumn> + <name>2b7f4c6d-cc9b-4dbe-b7ce-d475145d96da</name> + <entityField>IS_DEFAULT</entityField> + </neonTableColumn> + <neonTableColumn> + <name>6a3fac1b-d701-41eb-acda-6c4a89ddf78f</name> + <entityField>STATUS</entityField> + </neonTableColumn> + </columns> + </tableViewTemplate> + </children> +</neonView> diff --git a/neonView/InterestLinkDrawer_view/InterestLinkDrawer_view.aod b/neonView/InterestLinkDrawer_view/InterestLinkDrawer_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..2226453c25dc93f383de2e67774fbcbaa467df98 --- /dev/null +++ b/neonView/InterestLinkDrawer_view/InterestLinkDrawer_view.aod @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>InterestLinkDrawer_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <drawerLayout> + <name>layout</name> + <layoutCaption>Interests</layoutCaption> + <fixedDrawer v="true" /> + </drawerLayout> + </layout> + <children> + <neonViewReference> + <name>2f09a6f1-40bd-459e-bde1-c3b89999c65d</name> + <entityField>#ENTITY</entityField> + <view>InterestLinkFilter_view</view> + </neonViewReference> + </children> +</neonView> diff --git a/neonView/InterestLinkEdit_view/InterestLinkEdit_view.aod b/neonView/InterestLinkEdit_view/InterestLinkEdit_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..2e46bceb989a709ac0942ba03c5ecef484dcbe86 --- /dev/null +++ b/neonView/InterestLinkEdit_view/InterestLinkEdit_view.aod @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>InterestLinkEdit_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <size>SMALL</size> + <layout> + <boxLayout> + <name>layout</name> + </boxLayout> + </layout> + <children> + <genericViewTemplate> + <name>Generic</name> + <editMode v="true" /> + <fields> + <entityFieldLink> + <name>a9156ed7-cb2e-4b0d-874d-c41fdae16388</name> + <entityField>INTEREST_ID</entityField> + </entityFieldLink> + <entityFieldLink> + <name>24378d86-4805-49d6-bc9d-464bf7af0c70</name> + <entityField>STATUS</entityField> + </entityFieldLink> + </fields> + </genericViewTemplate> + </children> +</neonView> diff --git a/neonView/InterestLinkFilter_view/InterestLinkFilter_view.aod b/neonView/InterestLinkFilter_view/InterestLinkFilter_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..162387862cf00ad881b94050fbe3b34dd41e313d --- /dev/null +++ b/neonView/InterestLinkFilter_view/InterestLinkFilter_view.aod @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>InterestLinkFilter_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterable v="true" /> + <layout> + <groupLayout> + <name>layout</name> + </groupLayout> + </layout> + <children> + <tableViewTemplate> + <name>Table</name> + <columns> + <neonTableColumn> + <name>261f0387-dd00-486d-add4-56d0c64be583</name> + <entityField>INTEREST_ID</entityField> + </neonTableColumn> + <neonTableColumn> + <name>b464ab35-1749-46c6-ac30-bb65040fe4a7</name> + <entityField>DESCRIPTION</entityField> + </neonTableColumn> + <neonTableColumn> + <name>ef3ef573-0e98-441c-8232-63e7df3b5b9c</name> + <entityField>STATUS</entityField> + </neonTableColumn> + </columns> + </tableViewTemplate> + </children> +</neonView> diff --git a/neonView/InterestLookup_view/InterestLookup_view.aod b/neonView/InterestLookup_view/InterestLookup_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..cdca5093c70d98789700d3af0008cf2623640e76 --- /dev/null +++ b/neonView/InterestLookup_view/InterestLookup_view.aod @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>InterestLookup_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <boxLayout> + <name>layout</name> + </boxLayout> + </layout> + <children> + <tableViewTemplate> + <name>Table</name> + <columns> + <neonTableColumn> + <name>1849514e-f5fe-4a4e-bf65-21d6db40676f</name> + <entityField>TITLE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>785af202-f94d-48e9-b75f-cae6d128dcae</name> + <entityField>DESCRIPTION</entityField> + </neonTableColumn> + </columns> + </tableViewTemplate> + </children> +</neonView> diff --git a/neonView/KeywordEntryFilter_view/KeywordEntryFilter_view.aod b/neonView/KeywordEntryFilter_view/KeywordEntryFilter_view.aod index efd8bf78f7c8605f00de542b3b0eddc416218d00..cd94859acb44e7dab7270bf26ae412f7611608c8 100644 --- a/neonView/KeywordEntryFilter_view/KeywordEntryFilter_view.aod +++ b/neonView/KeywordEntryFilter_view/KeywordEntryFilter_view.aod @@ -31,6 +31,10 @@ <name>aa5612b4-997e-4f0f-8fb1-91e18e32051d</name> <entityField>TITLE</entityField> </neonTreeTableColumn> + <neonTreeTableColumn> + <name>e56e22ec-258f-4438-85a9-940cffd2a3ec</name> + <entityField>TITLE_TRANSLATED</entityField> + </neonTreeTableColumn> <neonTreeTableColumn> <name>eea7891c-81bd-4c1b-9d9b-fd81c6bc49b2</name> <entityField>ISACTIVE</entityField> @@ -65,6 +69,10 @@ <name>42d1d488-8739-4101-9aee-087dcc34d51a</name> <entityField>TITLE</entityField> </neonTableColumn> + <neonTableColumn> + <name>92e1fe00-be4a-47fe-8d85-27576942bde3</name> + <entityField>TITLE_TRANSLATED</entityField> + </neonTableColumn> <neonTableColumn> <name>f4241fa3-907e-4542-b01d-6efa95ac4d0f</name> <entityField>ISACTIVE</entityField> diff --git a/neonView/LinktMain_view/WeblinkMain_view.aod b/neonView/LinktMain_view/WeblinkMain_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..b98b9afa1ebb1078885de5ed53d03889b85032d2 --- /dev/null +++ b/neonView/LinktMain_view/WeblinkMain_view.aod @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>WeblinkMain_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <masterSlaveLayout> + <name>layout</name> + <master>a9bd300d-4c93-4d04-b6bc-ca007a834a51</master> + </masterSlaveLayout> + </layout> + <children> + <neonViewReference> + <name>a9bd300d-4c93-4d04-b6bc-ca007a834a51</name> + <entityField>#ENTITY</entityField> + <view>WeblinkPreview_view</view> + </neonViewReference> + <neonViewReference> + <name>4318f521-5462-4767-bd9b-6966cf2e4734</name> + <entityField>#ENTITY</entityField> + <view>WeblinkDrawer_view</view> + </neonViewReference> + <neonViewReference> + <name>303de4e6-03de-419d-9875-42e10b912a1f</name> + <entityField>Clicks</entityField> + <view>WeblinkClickFilter_view</view> + </neonViewReference> + </children> +</neonView> diff --git a/neonView/MailLogFilter_view/MailLogFilter_view.aod b/neonView/MailLogFilter_view/MailLogFilter_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..1bf071b561b14d3ee3d61aae946a6e414152ce0b --- /dev/null +++ b/neonView/MailLogFilter_view/MailLogFilter_view.aod @@ -0,0 +1,85 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>MailLogFilter_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterable v="true" /> + <layout> + <groupLayout> + <name>layout</name> + </groupLayout> + </layout> + <children> + <tableViewTemplate> + <name>table</name> + <favoriteActionGroup1>RecipientActions</favoriteActionGroup1> + <columns> + <neonTableColumn> + <name>5459efc9-2de2-4e33-b1bf-3418830b8014</name> + <entityField>CONTACT_ID</entityField> + </neonTableColumn> + <neonTableColumn> + <name>315e09a6-dcd3-4fbc-b254-131a3df10c91</name> + <entityField>MAILING_SUBJECT</entityField> + </neonTableColumn> + <neonTableColumn> + <name>b6fec338-e4c6-42cb-871c-2a30fb16cbbf</name> + <entityField>SENDER_EMAIL</entityField> + </neonTableColumn> + <neonTableColumn> + <name>e0501a66-e6c5-4d7d-b0d5-bd246d110e0a</name> + <entityField>RECIPIENT_EMAIL</entityField> + </neonTableColumn> + <neonTableColumn> + <name>34f08aa2-082f-481e-9f19-ffb47413cf6e</name> + <entityField>TESTRUN</entityField> + </neonTableColumn> + <neonTableColumn> + <name>489298fa-f805-437d-9a7f-e8acfb645e91</name> + <entityField>STATUS</entityField> + </neonTableColumn> + <neonTableColumn> + <name>2f5bd92d-61a1-4c45-99bf-ef6230541768</name> + <entityField>DATE_SEND</entityField> + </neonTableColumn> + <neonTableColumn> + <name>83d29954-ca19-4df1-8022-59e785f24eb5</name> + <entityField>DATE_OPENED</entityField> + </neonTableColumn> + </columns> + </tableViewTemplate> + <treeTableViewTemplate> + <name>treetable</name> + <favoriteActionGroup1>RecipientActions</favoriteActionGroup1> + <columns> + <neonTreeTableColumn> + <name>58aebe6f-fe09-4136-acb5-0cc485914787</name> + <entityField>CONTACT_ID</entityField> + </neonTreeTableColumn> + <neonTreeTableColumn> + <name>2fadf61d-456e-421e-8111-fafde3e5564b</name> + <entityField>MAILING_SUBJECT</entityField> + </neonTreeTableColumn> + <neonTreeTableColumn> + <name>7f13e3db-2dae-4dd4-9c80-9707a0224a35</name> + <entityField>SENDER_EMAIL</entityField> + </neonTreeTableColumn> + <neonTreeTableColumn> + <name>eee473cf-add3-4880-bc7b-87c605a35977</name> + <entityField>RECIPIENT_EMAIL</entityField> + </neonTreeTableColumn> + <neonTreeTableColumn> + <name>81fdca37-2cc6-4a2e-81c3-760d6197ac87</name> + <entityField>TESTRUN</entityField> + </neonTreeTableColumn> + <neonTreeTableColumn> + <name>82cef432-64fc-4cc5-90a0-e449f2e1a19f</name> + <entityField>STATUS</entityField> + </neonTreeTableColumn> + <neonTreeTableColumn> + <name>50f91fec-b9ac-44cf-885a-c2f59fe028b7</name> + <entityField>DATE_SEND</entityField> + </neonTreeTableColumn> + </columns> + </treeTableViewTemplate> + </children> +</neonView> diff --git a/neonView/MemberFilter_view/MemberFilter_view.aod b/neonView/MemberFilter_view/MemberFilter_view.aod index 87b04dc9cc12b236f1e3d574fddec941125e0d63..52aed59f96eaef6f02026543abece55c8d686cf1 100644 --- a/neonView/MemberFilter_view/MemberFilter_view.aod +++ b/neonView/MemberFilter_view/MemberFilter_view.aod @@ -45,6 +45,10 @@ <name>c23f4e8b-87a1-4535-b2d1-f6c97d6bfe0b</name> <entityField>POSITION</entityField> </neonTableColumn> + <neonTableColumn> + <name>fe949666-5fe7-42ef-acf1-748ed336682d</name> + <entityField>PERSON_ATTR_LOYALTY</entityField> + </neonTableColumn> <neonTableColumn> <name>bea82980-0639-405a-ab3f-92e45f97090e</name> <entityField>MEMBERROLE</entityField> @@ -87,6 +91,10 @@ <name>87770e60-967b-4411-9eb3-0397fda4663e</name> <entityField>POSITION</entityField> </neonTreeTableColumn> + <neonTreeTableColumn> + <name>6ff9f7d4-e619-4d3b-afa2-279dc0817bfc</name> + <entityField>PERSON_ATTR_LOYALTY</entityField> + </neonTreeTableColumn> <neonTreeTableColumn> <name>2dc17972-2e5a-424a-b069-2b8f04b35f6c</name> <entityField>MEMBERROLE</entityField> diff --git a/neonView/ObservationEdit_view/ObservationEdit_view.aod b/neonView/ObservationEdit_view/ObservationEdit_view.aod index 4540877e882f98774d37d42d786452ae592fe8d9..01b240c0985dfd09e6e6198a126c55c2c87e5ecd 100644 --- a/neonView/ObservationEdit_view/ObservationEdit_view.aod +++ b/neonView/ObservationEdit_view/ObservationEdit_view.aod @@ -46,7 +46,7 @@ <entityField>TRIGGEREVENTDELETE</entityField> </entityFieldLink> <entityFieldLink> - <name>aa93c341-578b-4da9-8ee8-2b3d9ea9e1ca</name> + <name>ac899215-4356-4034-b263-d40807f0b0f1</name> <entityField>includeDependencies</entityField> </entityFieldLink> <entityFieldLink> diff --git a/neonView/OfferFilter_view/OfferFilter_view.aod b/neonView/OfferFilter_view/OfferFilter_view.aod index f0ca240b047361acd9f1b322a2e49f72560369f2..c92b2a4e556897e4650ea9c461118db38af63997 100644 --- a/neonView/OfferFilter_view/OfferFilter_view.aod +++ b/neonView/OfferFilter_view/OfferFilter_view.aod @@ -42,6 +42,53 @@ </neonDashletCategory> </categories> </neonDashletConfiguration> + <neonDashletConfiguration> + <name>FirstApprovalDashlet</name> + <title>First Approval</title> + <description>show all offers with first approval</description> + <fragment>Offer/filter</fragment> + <singleton v="true" /> + <storeRoles> + <element>PROJECT_Inspector1</element> + <element>PROJECT_Inspector2</element> + </storeRoles> + <icon>VAADIN:CLIPBOARD_CHECK</icon> + <categories> + <neonDashletCategory> + <name>sales</name> + <title>Sales</title> + </neonDashletCategory> + </categories> + <parameters> + <neonDashletParameter> + <name>Approval_param</name> + <value>1</value> + </neonDashletParameter> + </parameters> + </neonDashletConfiguration> + <neonDashletConfiguration> + <name>SecondApprovalDashlet</name> + <title>Second Approval</title> + <description>show all offers with second approval</description> + <fragment>Offer/filter</fragment> + <singleton v="true" /> + <storeRoles> + <element>PROJECT_Inspector2</element> + </storeRoles> + <icon>VAADIN:CLIPBOARD_CHECK</icon> + <categories> + <neonDashletCategory> + <name>sales</name> + <title>Sales</title> + </neonDashletCategory> + </categories> + <parameters> + <neonDashletParameter> + <name>Approval_param</name> + <value>2</value> + </neonDashletParameter> + </parameters> + </neonDashletConfiguration> </dashletConfigurations> <layout> <groupLayout> diff --git a/neonView/OfferPreview_view/OfferPreview_view.aod b/neonView/OfferPreview_view/OfferPreview_view.aod index 4639d6ac8a2101e9384797f8f97ab17527e9bdbf..3351f58318296f98404e708ff528eb9d976268e4 100644 --- a/neonView/OfferPreview_view/OfferPreview_view.aod +++ b/neonView/OfferPreview_view/OfferPreview_view.aod @@ -88,7 +88,7 @@ <genericViewTemplate> <name>Info</name> <showDrawer v="true" /> - <drawerCaption>Further informations</drawerCaption> + <drawerCaption>Further information</drawerCaption> <entityField>#ENTITY</entityField> <fields> <entityFieldLink> diff --git a/neonView/OfferitemEdit_view/OfferitemEdit_view.aod b/neonView/OfferitemEdit_view/OfferitemEdit_view.aod index 0c19ce2dd173c2aeb2d075a287a54929bbc00f36..401e099fe0312e7b34c72860317857920b544d57 100644 --- a/neonView/OfferitemEdit_view/OfferitemEdit_view.aod +++ b/neonView/OfferitemEdit_view/OfferitemEdit_view.aod @@ -40,6 +40,10 @@ <name>2b635ddb-d52c-4063-af11-aea8eeee151b</name> <entityField>PRICE</entityField> </entityFieldLink> + <entityFieldLink> + <name>fa6d99df-4f30-4737-8064-28eb5c88f17f</name> + <entityField>currency</entityField> + </entityFieldLink> <entityFieldLink> <name>4f339738-6358-463e-b941-3b2693ab115a</name> <entityField>DISCOUNT</entityField> diff --git a/neonView/OrderAddress_view/OrderAddress_view.aod b/neonView/OrderAddress_view/OrderAddress_view.aod index 59f34face384bd1a03421c4a7924c884311e403f..a49935c63044f5b543027e4e6c77245f932eb294 100644 --- a/neonView/OrderAddress_view/OrderAddress_view.aod +++ b/neonView/OrderAddress_view/OrderAddress_view.aod @@ -16,7 +16,7 @@ <name>PaymentAddress</name> <editMode v="false" /> <showDrawer v="true" /> - <drawerCaption>Payment Address</drawerCaption> + <drawerCaption>Payment address</drawerCaption> <fixedDrawer v="true" /> <entityField>#ENTITY</entityField> <fields> @@ -34,7 +34,7 @@ <name>DeliveryAddress</name> <editMode v="false" /> <showDrawer v="true" /> - <drawerCaption>Delivery Address</drawerCaption> + <drawerCaption>Delivery address</drawerCaption> <fixedDrawer v="true" /> <entityField>#ENTITY</entityField> <fields> diff --git a/neonView/OrderMain_view/OrderMain_view.aod b/neonView/OrderMain_view/OrderMain_view.aod index 470461ecaeb0bffd66f046ebf529633ddcb672e3..2a6dc63dcb6624bd3c2fbb0516a9b77dd0d61482 100644 --- a/neonView/OrderMain_view/OrderMain_view.aod +++ b/neonView/OrderMain_view/OrderMain_view.aod @@ -25,9 +25,9 @@ <view>OrderCondition_view</view> </neonViewReference> <neonViewReference> - <name>07e7374d-8d52-4677-bbf3-dedd9c1d6ab1</name> - <entityField>Products</entityField> - <view>ProductFilter_view</view> + <name>07e7374d-8d52-4677-bbf3-dedd9c1d6ab1</name> + <entityField>Products</entityField> + <view>ProductFilter_view</view> </neonViewReference> <neonViewReference> <name>1e0af6a9-9bb6-47b5-944b-636d21ac74d2</name> diff --git a/neonView/OrderitemEdit_view/OrderitemEdit_view.aod b/neonView/OrderitemEdit_view/OrderitemEdit_view.aod index 8149fa636066fe7f47e27e290d848834dcc53e1c..bc85773ca902dda4352de7775535c2477f566e8a 100644 --- a/neonView/OrderitemEdit_view/OrderitemEdit_view.aod +++ b/neonView/OrderitemEdit_view/OrderitemEdit_view.aod @@ -39,6 +39,10 @@ <name>f7bd09a0-ed27-4989-940e-e3baac4c3c80</name> <entityField>PRICE</entityField> </entityFieldLink> + <entityFieldLink> + <name>f4e3ecc2-6303-493b-aa5a-5d6b974ae9da</name> + <entityField>currency</entityField> + </entityFieldLink> <entityFieldLink> <name>2b38de6e-85de-479c-99fd-27ff0d2e1c33</name> <entityField>DISCOUNT</entityField> diff --git a/neonView/OrganisationAttributeRestriction_view/OrganisationAttributeRestriction_view.aod b/neonView/OrganisationAttribute_view/OrganisationAttribute_view.aod similarity index 71% rename from neonView/OrganisationAttributeRestriction_view/OrganisationAttributeRestriction_view.aod rename to neonView/OrganisationAttribute_view/OrganisationAttribute_view.aod index 946e4932d34ce254e98376daadff0d7bae98bd40..a067a31a6b563296a7663bd567aba9a5d64ddfa5 100644 --- a/neonView/OrganisationAttributeRestriction_view/OrganisationAttributeRestriction_view.aod +++ b/neonView/OrganisationAttribute_view/OrganisationAttribute_view.aod @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> - <name>OrganisationAttributeRestriction_view</name> + <name>OrganisationAttribute_view</name> <title>Attributes</title> <majorModelMode>DISTRIBUTED</majorModelMode> <layout> @@ -14,10 +14,5 @@ <entityField>AttributeTree</entityField> <view>AttributeRelationTree_view</view> </neonViewReference> - <neonViewReference> - <name>2c260627-f087-4240-8a6d-e7aa25bbe812</name> - <entityField>CommRestrictions</entityField> - <view>CommRestrictionDrawer_view</view> - </neonViewReference> </children> </neonView> diff --git a/neonView/OrganisationDuplicatesFilter_view/OrganisationDuplicatesFilter_view.aod b/neonView/OrganisationDuplicatesFilter_view/OrganisationDuplicatesFilter_view.aod deleted file mode 100644 index c950c689201ccb9ecaf23a58f879058711e6c866..0000000000000000000000000000000000000000 --- a/neonView/OrganisationDuplicatesFilter_view/OrganisationDuplicatesFilter_view.aod +++ /dev/null @@ -1,32 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> - <name>OrganisationDuplicatesFilter_view</name> - <majorModelMode>DISTRIBUTED</majorModelMode> - <layout> - <boxLayout> - <name>layout</name> - </boxLayout> - </layout> - <children> - <tableViewTemplate> - <name>OrganisationDuplicatesTable</name> - <hideContentSearch v="true" /> - <entityField>#ENTITY</entityField> - <favoriteActionGroup1>OrganisationOpenClusterDetailActionGroup</favoriteActionGroup1> - <favoriteActionGroup2>DuplicateClusterActionGroup</favoriteActionGroup2> - <isCreatable v="false" /> - <isDeletable v="false" /> - <isEditable v="false" /> - <columns> - <neonTableColumn> - <name>ebe8d904-449c-49bd-915c-5b4fee894bc2</name> - <entityField>CLUSTER_DESCRIPTION</entityField> - </neonTableColumn> - <neonTableColumn> - <name>48db4335-6bdb-4a6a-809e-f9c371733f85</name> - <entityField>COUNT_DUPLICATES_IN_CLUSTER</entityField> - </neonTableColumn> - </columns> - </tableViewTemplate> - </children> -</neonView> diff --git a/neonView/OrganisationEdit_view/OrganisationEdit_view.aod b/neonView/OrganisationEdit_view/OrganisationEdit_view.aod index cf3a70c9a59119e3e829b6fe0acdc0b53b1a0d10..0e6500095ffe50942035ec4db7acb782dde76106 100644 --- a/neonView/OrganisationEdit_view/OrganisationEdit_view.aod +++ b/neonView/OrganisationEdit_view/OrganisationEdit_view.aod @@ -12,9 +12,9 @@ </layout> <children> <neonViewReference> - <name>f2fa0351-15af-4d1c-b7dd-0e42d9c7889f</name> - <entityField>SelfDuplicatesUncached</entityField> - <view>OrganisationNoNoiseTable_view</view> + <name>933cd72c-fd3a-4b91-aad6-8e129d6233e5</name> + <entityField>Duplicates</entityField> + <view>DuplicateOrganisationEdit_view</view> </neonViewReference> <genericViewTemplate> <name>Edit</name> diff --git a/neonView/OrganisationFilter_view/OrganisationFilter_view.aod b/neonView/OrganisationFilter_view/OrganisationFilter_view.aod index d0a3e39a2851e9ba458d22537779ff15dd1e7454..75d8254a1e1995cd430b2e0a4f8b50a1120a49b0 100644 --- a/neonView/OrganisationFilter_view/OrganisationFilter_view.aod +++ b/neonView/OrganisationFilter_view/OrganisationFilter_view.aod @@ -53,7 +53,6 @@ <entityField>#ENTITY</entityField> <favoriteActionGroup1>observeActionGroup</favoriteActionGroup1> <favoriteActionGroup2>filterViewActionGroup</favoriteActionGroup2> - <favoriteActionGroup3>DuplicateActions</favoriteActionGroup3> <linkedColumns> <element>NAME</element> </linkedColumns> @@ -102,7 +101,6 @@ <entityField>#ENTITY</entityField> <favoriteActionGroup1>observeActionGroup</favoriteActionGroup1> <favoriteActionGroup2>filterViewActionGroup</favoriteActionGroup2> - <favoriteActionGroup3>DuplicateActions</favoriteActionGroup3> <linkedColumns> <element>NAME</element> </linkedColumns> diff --git a/neonView/OrganisationMain_view/OrganisationMain_view.aod b/neonView/OrganisationMain_view/OrganisationMain_view.aod index 53376c617bb547c3fcc917315abe17927716bd90..fcdacbfe67c053e54e513221e2785378d0071689 100644 --- a/neonView/OrganisationMain_view/OrganisationMain_view.aod +++ b/neonView/OrganisationMain_view/OrganisationMain_view.aod @@ -40,11 +40,6 @@ <entityField>ObjectTrees</entityField> <view>ObjectTreeFilter_view</view> </neonViewReference> - <neonViewReference> - <name>0b618d7e-61e0-42f3-ad0b-176afb9f6da4</name> - <entityField>Classifications</entityField> - <view>ClassificationTree_view</view> - </neonViewReference> <neonViewReference> <name>45c0f486-e7df-48ac-a201-661ac07f5fed</name> <entityField>#ENTITY</entityField> @@ -53,7 +48,7 @@ <neonViewReference> <name>486b4999-ac17-4560-9ce0-0f20a0028d02</name> <entityField>#ENTITY</entityField> - <view>OrganisationAttributeRestriction_view</view> + <view>OrganisationAttribute_view</view> </neonViewReference> <neonViewReference> <name>c2b37e4d-3b5e-4e23-8b7c-6da02b27ffc0</name> @@ -65,15 +60,25 @@ <entityField>Documents</entityField> <view>DocumentFilter_view</view> </neonViewReference> + <neonViewReference> + <name>b6e7ad76-511f-46c4-b47c-b2e56825331b</name> + <entityField>#ENTITY</entityField> + <view>OrganisationPlanningTurnoverChart_view</view> + </neonViewReference> <neonViewReference> <name>0686ad7e-8dc7-4b10-9df2-bf066ae3a310</name> <entityField>LogHistories</entityField> <view>LogHistoryFilter_view</view> </neonViewReference> <neonViewReference> - <name>cbac7602-9eba-4e5d-8617-3d0b33e55ca1</name> - <entityField>SelfDuplicatesUncached</entityField> - <view>OrganisationFilter_view</view> + <name>a5ab96e5-927c-4db3-b7ed-f0c0aadcb89b</name> + <entityField>Duplicates</entityField> + <view>DuplicateOrganisationFilter_view</view> + </neonViewReference> + <neonViewReference> + <name>56eb7d7d-23e9-4ab8-8a77-d0a6d997d710</name> + <entityField>#ENTITY</entityField> + <view>OrganisationMarketing_view</view> </neonViewReference> </children> </neonView> diff --git a/neonView/OrganisationUnrelatedDuplicates_view/OrganisationUnrelatedDuplicates_view.aod b/neonView/OrganisationMarketing_view/OrganisationMarketing_view.aod similarity index 65% rename from neonView/OrganisationUnrelatedDuplicates_view/OrganisationUnrelatedDuplicates_view.aod rename to neonView/OrganisationMarketing_view/OrganisationMarketing_view.aod index 0b23c809aafd9bedf13995b9049e1be41c8a6ea2..d5ae1fe81a3ad82703c2abab6ee94419de2f591c 100644 --- a/neonView/OrganisationUnrelatedDuplicates_view/OrganisationUnrelatedDuplicates_view.aod +++ b/neonView/OrganisationMarketing_view/OrganisationMarketing_view.aod @@ -1,6 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> - <name>OrganisationUnrelatedDuplicates_view</name> + <name>OrganisationMarketing_view</name> + <title>Advertising</title> <majorModelMode>DISTRIBUTED</majorModelMode> <layout> <boxLayout> @@ -9,9 +10,9 @@ </layout> <children> <neonViewReference> - <name>edc0822d-4388-4e3d-93d7-2e46e32f5742</name> - <entityField>DuplicatesUnrelatedOrganisationConsumer</entityField> - <view>DuplicatesUnrelatedOrganisationFilter_view</view> + <name>0561b125-ac76-4ee1-829c-8fd954204f7d</name> + <entityField>ContactCommunicationSettings</entityField> + <view>CommunicationSettingsFilter_view</view> </neonViewReference> </children> </neonView> diff --git a/neonView/OrganisationPlanningTurnoverChart_view/OrganisationPlanningTurnoverChart_view.aod b/neonView/OrganisationPlanningTurnoverChart_view/OrganisationPlanningTurnoverChart_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..a506d247ca30f7379f96bba44cdf5f858459578e --- /dev/null +++ b/neonView/OrganisationPlanningTurnoverChart_view/OrganisationPlanningTurnoverChart_view.aod @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>OrganisationPlanningTurnoverChart_view</name> + <title>Planning</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <boxLayout> + <name>layout</name> + </boxLayout> + </layout> + <children> + <neonViewReference> + <name>b830d3cf-fffc-408d-89c1-5e4219311045</name> + <entityField>Plannings</entityField> + <view>PlanningOrganisationFilter_view</view> + </neonViewReference> + <neonViewReference> + <name>95d12cd1-8b3d-42b0-b9b3-363a9599e555</name> + <entityField>Turnovers</entityField> + <view>TurnoverDynamicMultiDataChart_view</view> + </neonViewReference> + </children> +</neonView> diff --git a/neonView/OrganisationPreview_view/OrganisationPreview_view.aod b/neonView/OrganisationPreview_view/OrganisationPreview_view.aod index 5a88bf523389fae38dd3fa5da6cc4c61cc7fd319..4571168f48f820671bd2b96d8c1cc220f37e208a 100644 --- a/neonView/OrganisationPreview_view/OrganisationPreview_view.aod +++ b/neonView/OrganisationPreview_view/OrganisationPreview_view.aod @@ -67,7 +67,7 @@ <genericViewTemplate> <name>Info</name> <showDrawer v="true" /> - <drawerCaption>Further informations</drawerCaption> + <drawerCaption>Further information</drawerCaption> <entityField>#ENTITY</entityField> <fields> <entityFieldLink> diff --git a/neonView/OrganisationsMultiEdit_view/OrganisationsMultiEdit_view.aod b/neonView/OrganisationsMultiEdit_view/OrganisationsMultiEdit_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..e016aea0aa032a71a7cb5a8ec54ac4ecad9ca5fc --- /dev/null +++ b/neonView/OrganisationsMultiEdit_view/OrganisationsMultiEdit_view.aod @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>OrganisationsMultiEdit_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <noneLayout> + <name>layout</name> + </noneLayout> + </layout> + <children> + <genericMultipleViewTemplate> + <name>GenericMultiple</name> + <columns> + <neonGenericMultipleTableColumn> + <name>210f77fd-4b41-4efc-87c0-b5ab7720648b</name> + <entityField>CONTACT_ID</entityField> + <fullWidth v="true" /> + </neonGenericMultipleTableColumn> + </columns> + </genericMultipleViewTemplate> + </children> +</neonView> diff --git a/neonView/PersonAttributeRestriction_view/PersonAttributeRestriction_view.aod b/neonView/PersonAttribute_view/PersonAttribute_view.aod similarity index 72% rename from neonView/PersonAttributeRestriction_view/PersonAttributeRestriction_view.aod rename to neonView/PersonAttribute_view/PersonAttribute_view.aod index 5202135ce5090b7acdd0b2be53d567ff3c881579..47eb14656cfdd90bc2dfd75730344ac1777d7210 100644 --- a/neonView/PersonAttributeRestriction_view/PersonAttributeRestriction_view.aod +++ b/neonView/PersonAttribute_view/PersonAttribute_view.aod @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> - <name>PersonAttributeRestriction_view</name> + <name>PersonAttribute_view</name> <title>Attributes</title> <majorModelMode>DISTRIBUTED</majorModelMode> <layout> @@ -14,10 +14,5 @@ <entityField>AttributeTree</entityField> <view>AttributeRelationTree_view</view> </neonViewReference> - <neonViewReference> - <name>38199f7b-af85-4576-a6ee-3add0e6761aa</name> - <entityField>CommRestrictions</entityField> - <view>CommRestrictionDrawer_view</view> - </neonViewReference> </children> </neonView> diff --git a/neonView/PersonDSGVO_view/PersonDSGVO_view.aod b/neonView/PersonDSGVO_view/PersonDSGVO_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..f6032747a6b2fd054d15c3eec3567dd90377566e --- /dev/null +++ b/neonView/PersonDSGVO_view/PersonDSGVO_view.aod @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>PersonDSGVO_view</name> + <title>Data Privacy</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterable v="false" /> + <layout> + <boxLayout> + <name>layout</name> + <direction>VERTICAL</direction> + </boxLayout> + </layout> + <children> + <neonViewReference> + <name>54d1f4d3-52f9-4820-a8b8-41a609f3b613</name> + <entityField>DSGVOEntries</entityField> + <view>DSGVOFilter_view</view> + </neonViewReference> + <neonViewReference> + <name>73496b8c-9361-4839-9ed7-f18e98993369</name> + <entityField>DSGVODeleteFlags</entityField> + <view>DSGVODeleteFlagFilter_view</view> + </neonViewReference> + </children> +</neonView> diff --git a/neonView/PersonDublicatesTab_view/PersonDublicatesTab_view.aod b/neonView/PersonDublicatesTab_view/PersonDublicatesTab_view.aod deleted file mode 100644 index c11bc1396a663aa39b2f17a1b691d239ddbd79c6..0000000000000000000000000000000000000000 --- a/neonView/PersonDublicatesTab_view/PersonDublicatesTab_view.aod +++ /dev/null @@ -1,24 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> - <name>PersonDublicatesTab_view</name> - <title>Person duplicates</title> - <majorModelMode>DISTRIBUTED</majorModelMode> - <layout> - <boxLayout> - <name>layout</name> - <direction>HORIZONTAL</direction> - </boxLayout> - </layout> - <children> - <neonViewReference> - <name>c82a1ae2-9f8f-4149-8bac-5621136d779b</name> - <entityField>SelfPersonDuplicatesConsumer</entityField> - <view>PersonDuplicatesFilter_view</view> - </neonViewReference> - <neonViewReference> - <name>2aee29fb-9844-4e3a-a284-a04dadf9eadc</name> - <entityField>DuplicatesUnrelatedPersonConsumer</entityField> - <view>DuplicatesUnrelatedPersonFilter_view</view> - </neonViewReference> - </children> -</neonView> diff --git a/neonView/PersonDuplicatesFilter_view/PersonDuplicatesFilter_view.aod b/neonView/PersonDuplicatesFilter_view/PersonDuplicatesFilter_view.aod deleted file mode 100644 index 0e95f05f72286d568edddded65e4cd0d21031823..0000000000000000000000000000000000000000 --- a/neonView/PersonDuplicatesFilter_view/PersonDuplicatesFilter_view.aod +++ /dev/null @@ -1,48 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> - <name>PersonDuplicatesFilter_view</name> - <majorModelMode>DISTRIBUTED</majorModelMode> - <layout> - <groupLayout> - <name>layout</name> - </groupLayout> - </layout> - <children> - <tableViewTemplate> - <name>PersonDuplicatesTable</name> - <hideContentSearch v="true" /> - <entityField>#ENTITY</entityField> - <favoriteActionGroup1>PersonOpenClusterDetailActionGroup</favoriteActionGroup1> - <isCreatable v="false" /> - <isDeletable v="false" /> - <isEditable v="false" /> - <isSaveable v="false" /> - <linkedFrame></linkedFrame> - <columns> - <neonTableColumn> - <name>7508e984-6a0b-4126-ab49-452e2b54f76d</name> - <entityField>CLUSTER_DESCRIPTION</entityField> - </neonTableColumn> - <neonTableColumn> - <name>8615259b-de5b-493a-945d-2ff934ae1b8c</name> - <entityField>COUNT_DUPLICATES_IN_CLUSTER</entityField> - </neonTableColumn> - </columns> - </tableViewTemplate> - <treeTableViewTemplate> - <name>Treetable</name> - <entityField>#ENTITY</entityField> - <favoriteActionGroup1>PersonOpenClusterDetailActionGroup</favoriteActionGroup1> - <columns> - <neonTreeTableColumn> - <name>060c69aa-242a-4141-acd1-b82a76d99521</name> - <entityField>CLUSTER_DESCRIPTION</entityField> - </neonTreeTableColumn> - <neonTreeTableColumn> - <name>67458881-0d45-406e-a362-852711b09bd1</name> - <entityField>COUNT_DUPLICATES_IN_CLUSTER</entityField> - </neonTreeTableColumn> - </columns> - </treeTableViewTemplate> - </children> -</neonView> diff --git a/neonView/PersonEdit_view/PersonEdit_view.aod b/neonView/PersonEdit_view/PersonEdit_view.aod index 1cc1577de9b2c4f38ee39b97d8e14d70a9d74921..27586ee38b4febc4820c68577184586052e44464 100644 --- a/neonView/PersonEdit_view/PersonEdit_view.aod +++ b/neonView/PersonEdit_view/PersonEdit_view.aod @@ -12,9 +12,9 @@ </layout> <children> <neonViewReference> - <name>589e5a82-e923-4b70-a983-5e104d2beb2b</name> - <entityField>SelfDuplicatesUncached</entityField> - <view>PersonDuplicateEditview_view</view> + <name>a6b55bfc-7b0c-4020-a78d-18ee9a1d2b26</name> + <entityField>Duplicates</entityField> + <view>DuplicatePersonEdit_view</view> </neonViewReference> <genericViewTemplate> <name>Edit</name> diff --git a/neonView/PersonFilterOverlay_view/PersonFilterOverlay_view.aod b/neonView/PersonFilterOverlay_view/PersonFilterOverlay_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..d9c42e27f8752d4180930f5d194eb04da08a0c30 --- /dev/null +++ b/neonView/PersonFilterOverlay_view/PersonFilterOverlay_view.aod @@ -0,0 +1,19 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>PersonFilterOverlay_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterable v="false" /> + <isOverlay v="true" /> + <layout> + <noneLayout> + <name>layout</name> + </noneLayout> + </layout> + <children> + <neonViewReference> + <name>e4a045d7-32ca-495e-9e8e-c3ac71d7c100</name> + <entityField>#ENTITY</entityField> + <view>PersonFilter_view</view> + </neonViewReference> + </children> +</neonView> diff --git a/neonView/PersonFilter_view/PersonFilter_view.aod b/neonView/PersonFilter_view/PersonFilter_view.aod index c892033123ccd327c4dc49c13432e724b95843bf..2471b831c6a88a31be023611935956b63665d5e6 100644 --- a/neonView/PersonFilter_view/PersonFilter_view.aod +++ b/neonView/PersonFilter_view/PersonFilter_view.aod @@ -57,7 +57,6 @@ <entityField>#ENTITY</entityField> <favoriteActionGroup1>observeActionGroup</favoriteActionGroup1> <favoriteActionGroup2>filterViewActionGroup</favoriteActionGroup2> - <favoriteActionGroup3>DuplicateActions</favoriteActionGroup3> <linkedColumns> <element>FIRSTNAME</element> <element>LASTNAME</element> @@ -107,7 +106,6 @@ <entityField>#ENTITY</entityField> <favoriteActionGroup1>observeActionGroup</favoriteActionGroup1> <favoriteActionGroup2>filterViewActionGroup</favoriteActionGroup2> - <favoriteActionGroup3>DuplicateActions</favoriteActionGroup3> <linkedColumns> <element>FIRSTNAME</element> <element>LASTNAME</element> diff --git a/neonView/PersonMain_view/PersonMain_view.aod b/neonView/PersonMain_view/PersonMain_view.aod index 5f2dc5ffa83f910d3b29a2c446453b47ac6d361e..b0263fcdcc8754e14b64166966be4616d897d44a 100644 --- a/neonView/PersonMain_view/PersonMain_view.aod +++ b/neonView/PersonMain_view/PersonMain_view.aod @@ -42,12 +42,7 @@ <neonViewReference> <name>0470a456-1132-4802-ba69-4a1b562b8f14</name> <entityField>#ENTITY</entityField> - <view>PersonAttributeRestriction_view</view> - </neonViewReference> - <neonViewReference> - <name>19a5f9ed-228d-4352-9e82-e7aa690648e9</name> - <entityField>DistrictResponsibles</entityField> - <view>DistrictResponsibleList_view</view> + <view>PersonAttribute_view</view> </neonViewReference> <neonViewReference> <name>4b50b784-484f-4cdf-a705-4c356da763fa</name> @@ -55,19 +50,24 @@ <view>DocumentFilter_view</view> </neonViewReference> <neonViewReference> - <name>5754fc3a-c81c-42ba-90ea-2859b10bb391</name> - <entityField>LogHistories</entityField> - <view>LogHistoryFilter_view</view> + <name>82f19c55-fa96-43de-9f26-46069b28db31</name> + <entityField>#ENTITY</entityField> + <view>PersonMarketing_view</view> </neonViewReference> <neonViewReference> - <name>fb1dd01e-a3ad-4708-b6a0-d273cbb0b50f</name> - <entityField>DSGVOEntries</entityField> - <view>DSGVOFilter_view</view> + <name>f0895c2a-5517-4c7b-80ed-147e4078603d</name> + <entityField>#ENTITY</entityField> + <view>PersonDSGVO_view</view> + </neonViewReference> + <neonViewReference> + <name>24ea8bc9-7ed0-4bed-a984-b1a9f3815c7c</name> + <entityField>Duplicates</entityField> + <view>DuplicatePersonFilter_view</view> </neonViewReference> <neonViewReference> - <name>d128a678-b1c0-49d0-a74c-7860d3a85247</name> - <entityField>SelfDuplicatesUncached</entityField> - <view>PersonFilter_view</view> + <name>5754fc3a-c81c-42ba-90ea-2859b10bb391</name> + <entityField>LogHistories</entityField> + <view>LogHistoryFilter_view</view> </neonViewReference> </children> </neonView> diff --git a/neonView/PersonClusterPreview_view/PersonClusterPreview_view.aod b/neonView/PersonMarketing_view/PersonMarketing_view.aod similarity index 57% rename from neonView/PersonClusterPreview_view/PersonClusterPreview_view.aod rename to neonView/PersonMarketing_view/PersonMarketing_view.aod index 69ab192629f5b172f18bc89eaccf2b384fdfb3bb..da7de6d071af1cc10158498f3b23a1aa3740507c 100644 --- a/neonView/PersonClusterPreview_view/PersonClusterPreview_view.aod +++ b/neonView/PersonMarketing_view/PersonMarketing_view.aod @@ -1,6 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> - <name>PersonClusterPreview_view</name> + <name>PersonMarketing_view</name> + <title>Advertising</title> <majorModelMode>DISTRIBUTED</majorModelMode> <layout> <boxLayout> @@ -9,14 +10,14 @@ </layout> <children> <neonViewReference> - <name>156ebee5-6b13-462f-b956-0470f27a174b</name> - <entityField>DuplicatePersonsConsumer</entityField> - <view>PersonLookup_view</view> + <name>dfdbd5b2-eb37-436f-8256-e7ba55eba1dc</name> + <entityField>ContactCommunicationSettings</entityField> + <view>CommunicationSettingsDrawer_view</view> </neonViewReference> <neonViewReference> - <name>d8afce27-436c-42f0-a326-98bf6539b7bd</name> - <entityField>DuplicatesUnrelatedPersonConsumer</entityField> - <view>DuplicatesUnrelatedPersonFilter_view</view> + <name>d3ca9779-515c-4361-b8d6-4b13d6a1155d</name> + <entityField>InterestLinks</entityField> + <view>InterestLinkDrawer_view</view> </neonViewReference> </children> </neonView> diff --git a/neonView/PersonPreview_view/PersonPreview_view.aod b/neonView/PersonPreview_view/PersonPreview_view.aod index 78a6c4a8a2280c3450d220b5a7cd3754ba39a40e..4fc418c06b14e94360809ac488822e59cda4b6c8 100644 --- a/neonView/PersonPreview_view/PersonPreview_view.aod +++ b/neonView/PersonPreview_view/PersonPreview_view.aod @@ -49,7 +49,7 @@ <genericViewTemplate> <name>Info</name> <showDrawer v="true" /> - <drawerCaption>Further informations</drawerCaption> + <drawerCaption>Further information</drawerCaption> <fixedDrawer v="false" /> <hideEmptyFields v="true" /> <entityField>#ENTITY</entityField> diff --git a/neonView/PlanningAddToOrganisationOverlay_view/PlanningAddToOrganisationOverlay_view.aod b/neonView/PlanningAddToOrganisationOverlay_view/PlanningAddToOrganisationOverlay_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..1f4b1f97ea7e2c576a537733d1d1b057df0946e2 --- /dev/null +++ b/neonView/PlanningAddToOrganisationOverlay_view/PlanningAddToOrganisationOverlay_view.aod @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>PlanningAddToOrganisationOverlay_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <isOverlay v="true" /> + <layout> + <boxLayout> + <name>layout</name> + </boxLayout> + </layout> + <children> + <neonViewReference> + <name>26e207f5-f69c-4ec3-8b29-7baae3476542</name> + <entityField>#ENTITY</entityField> + <view>PlanningAddToOrganisationsNewPlannings_view</view> + </neonViewReference> + <genericViewTemplate> + <name>Generic</name> + </genericViewTemplate> + <neonViewReference> + <name>9a9578d0-d925-4f9a-94a8-c7b8b50c1fa7</name> + <entityField>#ENTITY</entityField> + <view>PlanningAddToOrganisationsExistingPlannings_view</view> + </neonViewReference> + </children> +</neonView> diff --git a/neonView/PlanningAddToOrganisationsExistingPlannings_view/PlanningAddToOrganisationsExistingPlannings_view.aod b/neonView/PlanningAddToOrganisationsExistingPlannings_view/PlanningAddToOrganisationsExistingPlannings_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..0d5eba2523f50a1925ab0f802c8ce3427bd00de4 --- /dev/null +++ b/neonView/PlanningAddToOrganisationsExistingPlannings_view/PlanningAddToOrganisationsExistingPlannings_view.aod @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>PlanningAddToOrganisationsExistingPlannings_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <drawerLayout> + <name>layout</name> + <layoutCaption>Unchanged plan values</layoutCaption> + </drawerLayout> + </layout> + <children> + <neonViewReference> + <name>50a592ce-97ca-4f59-be35-5ba47a246b6f</name> + <entityField>PlanningsAlreadyExists</entityField> + <view>PlanningMultiEditOverlay_view</view> + </neonViewReference> + </children> +</neonView> diff --git a/neonView/PlanningAddToOrganisationsNewPlannings_view/PlanningAddToOrganisationsNewPlannings_view.aod b/neonView/PlanningAddToOrganisationsNewPlannings_view/PlanningAddToOrganisationsNewPlannings_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..173de0924d9336e7a796523180a631bbb8a8447d --- /dev/null +++ b/neonView/PlanningAddToOrganisationsNewPlannings_view/PlanningAddToOrganisationsNewPlannings_view.aod @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>PlanningAddToOrganisationsNewPlannings_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <drawerLayout> + <name>layout</name> + <layoutCaption>New created plan values</layoutCaption> + </drawerLayout> + </layout> + <children> + <neonViewReference> + <name>8c27b321-68ce-4979-9185-4f7472883ba2</name> + <entityField>PlanningsNew</entityField> + <view>PlanningMultiEditOverlay_view</view> + </neonViewReference> + </children> +</neonView> diff --git a/neonView/PlanningAddToOrganisations_view/PlanningAddToOrganisations_view.aod b/neonView/PlanningAddToOrganisations_view/PlanningAddToOrganisations_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..af062e3c59220fa5fd5c579745875db1d2897502 --- /dev/null +++ b/neonView/PlanningAddToOrganisations_view/PlanningAddToOrganisations_view.aod @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>PlanningAddToOrganisations_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <size>SMALL</size> + <isOverlay v="false" /> + <overlayOrientation>PORTRAIT</overlayOrientation> + <layout> + <boxLayout> + <name>layout</name> + </boxLayout> + </layout> + <children> + <genericViewTemplate> + <name>Generic</name> + <editMode v="true" /> + <fields> + <entityFieldLink> + <name>5e4b29ff-2a7a-4558-aa64-903372c10bfc</name> + <entityField>VOLUME</entityField> + </entityFieldLink> + <entityFieldLink> + <name>ee165810-35e2-4238-9080-bd7a476ab9d5</name> + <entityField>YEAR</entityField> + </entityFieldLink> + <entityFieldLink> + <name>602e99fd-ee67-4609-a5cd-f6c82e48a6c0</name> + <entityField>STATUS</entityField> + </entityFieldLink> + <entityFieldLink> + <name>04c59ecc-9bdc-4ab8-bd10-3a559f680f3f</name> + <entityField>RESPONSIBLE_CONTACT_ID</entityField> + </entityFieldLink> + <entityFieldLink> + <name>3842c2c8-cbb1-4506-bbc2-1c05e898791f</name> + <entityField>GROUPCODE</entityField> + </entityFieldLink> + </fields> + </genericViewTemplate> + <neonViewReference> + <name>d2a119e0-5b04-44b0-bc10-23ff56b3a27d</name> + <entityField>Organisations</entityField> + <view>OrganisationsMultiEdit_view</view> + </neonViewReference> + </children> +</neonView> diff --git a/neonView/PlanningChangeResponsible_view/PlanningChangeResponsible_view.aod b/neonView/PlanningChangeResponsible_view/PlanningChangeResponsible_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..de3b597b0c2372a583613a506fb5c42aded1730e --- /dev/null +++ b/neonView/PlanningChangeResponsible_view/PlanningChangeResponsible_view.aod @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>PlanningChangeResponsible_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <size>SMALL</size> + <layout> + <noneLayout> + <name>layout</name> + </noneLayout> + </layout> + <children> + <genericViewTemplate> + <name>Generic</name> + <editMode v="true" /> + <fields> + <entityFieldLink> + <name>008e9611-1f57-45c8-ab1c-ce4c161aad2d</name> + <entityField>RESPONSIBLE</entityField> + </entityFieldLink> + </fields> + </genericViewTemplate> + </children> +</neonView> diff --git a/neonView/PlanningChangeStatus_view/PlanningChangeStatus_view.aod b/neonView/PlanningChangeStatus_view/PlanningChangeStatus_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..3b962389e8ec2d5e5b9f68e38ed5c55d955c0758 --- /dev/null +++ b/neonView/PlanningChangeStatus_view/PlanningChangeStatus_view.aod @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>PlanningChangeStatus_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <size>SMALL</size> + <layout> + <noneLayout> + <name>layout</name> + </noneLayout> + </layout> + <children> + <genericViewTemplate> + <name>Generic</name> + <editMode v="true" /> + <fields> + <entityFieldLink> + <name>dc185280-5c42-4c69-904c-6c5a2a7efec8</name> + <entityField>STATUS</entityField> + </entityFieldLink> + </fields> + </genericViewTemplate> + </children> +</neonView> diff --git a/neonView/PlanningEdit_view/PlanningEdit_view.aod b/neonView/PlanningEdit_view/PlanningEdit_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..aef83d5201b8e5036cc3f27c7af4893c9df1f1e2 --- /dev/null +++ b/neonView/PlanningEdit_view/PlanningEdit_view.aod @@ -0,0 +1,47 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>PlanningEdit_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <size>SMALL</size> + <layout> + <boxLayout> + <name>layout</name> + </boxLayout> + </layout> + <children> + <genericViewTemplate> + <name>Generic</name> + <editMode v="true" /> + <fields> + <entityFieldLink> + <name>ea73371d-a0d9-46e3-bc59-aa03d2cab163</name> + <entityField>CONTACT_ID</entityField> + </entityFieldLink> + <entityFieldLink> + <name>a3206d87-1d66-42b8-b1b9-608533eb6f98</name> + <entityField>VOLUME</entityField> + </entityFieldLink> + <entityFieldLink> + <name>89ec3f79-b840-434f-8059-1ccfacbaa518</name> + <entityField>YEAR_DATETIME</entityField> + </entityFieldLink> + <entityFieldLink> + <name>4142072e-10f3-4868-8b5e-8199d851680d</name> + <entityField>STATUS</entityField> + </entityFieldLink> + <entityFieldLink> + <name>8ce415e3-e810-4567-bc9e-d367f50af474</name> + <entityField>RESPONSIBLE_CONTACT_ID</entityField> + </entityFieldLink> + <entityFieldLink> + <name>76d5f780-ff48-4872-a450-a05d0853bcee</name> + <entityField>GROUPCODE</entityField> + </entityFieldLink> + <entityFieldLink> + <name>9fb31b2e-363a-431a-8126-5c23a4b6c452</name> + <entityField>INFO</entityField> + </entityFieldLink> + </fields> + </genericViewTemplate> + </children> +</neonView> diff --git a/neonView/PlanningFilter_view/PlanningFilter_view.aod b/neonView/PlanningFilter_view/PlanningFilter_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..93e3ba9a59aed53b4e78fa48b2fecd3ff94338e4 --- /dev/null +++ b/neonView/PlanningFilter_view/PlanningFilter_view.aod @@ -0,0 +1,132 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>PlanningFilter_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterable v="true" /> + <layout> + <groupLayout> + <name>layout</name> + </groupLayout> + </layout> + <children> + <tableViewTemplate> + <name>Table</name> + <favoriteActionGroup1>FilterViewActions</favoriteActionGroup1> + <columns> + <neonTableColumn> + <name>2024c784-29c3-498b-80b3-f2e378f25773</name> + <entityField>CONTACT_ID</entityField> + </neonTableColumn> + <neonTableColumn> + <name>2e953e44-4bc5-4faa-9f4b-24067e547948</name> + <entityField>GROUPCODE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>e4291f04-8c2b-4098-a50e-596c8475307d</name> + <entityField>FORECAST_YEAR</entityField> + </neonTableColumn> + <neonTableColumn> + <name>5151f716-d93d-4131-a19e-9935cd7ef6a4</name> + <entityField>VOLUME</entityField> + </neonTableColumn> + <neonTableColumn> + <name>befc56f1-8681-4f08-8d94-e1971de8e7c3</name> + <entityField>STATUS</entityField> + </neonTableColumn> + <neonTableColumn> + <name>21f5c228-b2eb-4e66-8112-5814b32d1fba</name> + <entityField>INFO</entityField> + </neonTableColumn> + <neonTableColumn> + <name>4a354a6b-87c9-4cf5-89e1-c5eb99aa2c07</name> + <entityField>RESPONSIBLE_CONTACT_ID</entityField> + </neonTableColumn> + </columns> + </tableViewTemplate> + <treeTableViewTemplate> + <name>TreeTable</name> + <favoriteActionGroup1>FilterViewActions</favoriteActionGroup1> + <columns> + <neonTreeTableColumn> + <name>9664cd27-0bd3-48e1-bc4e-b80e8ce52c64</name> + <entityField>CONTACT_ID</entityField> + </neonTreeTableColumn> + <neonTreeTableColumn> + <name>cf434d69-e808-474d-b14a-7cf1f71858e3</name> + <entityField>GROUPCODE</entityField> + </neonTreeTableColumn> + <neonTreeTableColumn> + <name>e43c6e75-4dc6-4506-b34f-146dc5762633</name> + <entityField>FORECAST_YEAR</entityField> + </neonTreeTableColumn> + <neonTreeTableColumn> + <name>ba9ed9ef-1492-4a56-a8fa-ec1ce58c95c9</name> + <entityField>VOLUME</entityField> + </neonTreeTableColumn> + <neonTreeTableColumn> + <name>2a65c747-1624-4c58-8a17-1d60c79826ac</name> + <entityField>STATUS</entityField> + </neonTreeTableColumn> + <neonTreeTableColumn> + <name>804e6425-30b1-47a0-8851-730e72af3937</name> + <entityField>INFO</entityField> + </neonTreeTableColumn> + <neonTreeTableColumn> + <name>b58a1b6d-8824-4122-a616-42dcb5a50fef</name> + <entityField>RESPONSIBLE_CONTACT_ID</entityField> + </neonTreeTableColumn> + </columns> + </treeTableViewTemplate> + <multiEditTableViewTemplate> + <name>MultiEditTable</name> + <editableColumns> + <element>VOLUME</element> + </editableColumns> + <favoriteActionGroup1>FilterViewActions</favoriteActionGroup1> + <columns> + <neonTableColumn> + <name>9dc22f85-20d3-4891-810e-74570c1faf80</name> + <entityField>FORECAST_YEAR</entityField> + </neonTableColumn> + <neonTableColumn> + <name>bb541f09-5a3c-4905-a73e-4a94b8dd4aba</name> + <entityField>CONTACT_ID</entityField> + </neonTableColumn> + <neonTableColumn> + <name>93f37300-6859-4860-a246-e0f282377b54</name> + <entityField>GROUPCODE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>54abb536-db50-49c6-b70a-41779a66b977</name> + <entityField>VOLUME</entityField> + </neonTableColumn> + <neonTableColumn> + <name>8996ce6a-582c-4caa-9515-9615561e4d1a</name> + <entityField>STATUS</entityField> + </neonTableColumn> + <neonTableColumn> + <name>9dbb7180-33a7-4d3e-b750-93ee3234fde7</name> + <entityField>INFO</entityField> + </neonTableColumn> + <neonTableColumn> + <name>0215f710-cac1-474b-9ecf-418c6877076d</name> + <entityField>RESPONSIBLE_CONTACT_ID</entityField> + </neonTableColumn> + </columns> + <editRendererMapping> + <rendererMappingEntry> + <name>476f5047-9632-4b02-a018-9a8465340f26</name> + <fieldName>VOLUME</fieldName> + <renderer>numberPlus1000</renderer> + </rendererMappingEntry> + </editRendererMapping> + <viewRendererMapping> + <rendererMappingEntry> + <name>a681d707-affa-4ca9-ad41-28b9dce029c6</name> + <fieldName>STATUS</fieldName> + <renderer>badge</renderer> + </rendererMappingEntry> + </viewRendererMapping> + </multiEditTableViewTemplate> + </children> +</neonView> diff --git a/neonView/PlanningMultiEditOverlay_view/PlanningMultiEditOverlay_view.aod b/neonView/PlanningMultiEditOverlay_view/PlanningMultiEditOverlay_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..e190fa525c288644ad81925452f92cdf6353e12e --- /dev/null +++ b/neonView/PlanningMultiEditOverlay_view/PlanningMultiEditOverlay_view.aod @@ -0,0 +1,67 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>PlanningMultiEditOverlay_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <isOverlay v="false" /> + <layout> + <noneLayout> + <name>layout</name> + </noneLayout> + </layout> + <children> + <multiEditTableViewTemplate> + <name>MultiEditTable</name> + <editableColumns> + <element>VOLUME</element> + </editableColumns> + <hideHeader v="false" /> + <isCreatable v="false" /> + <isDeletable v="false" /> + <isEditable v="false" /> + <columns> + <neonTableColumn> + <name>bb541f09-5a3c-4905-a73e-4a94b8dd4aba</name> + <entityField>CONTACT_ID</entityField> + </neonTableColumn> + <neonTableColumn> + <name>93f37300-6859-4860-a246-e0f282377b54</name> + <entityField>GROUPCODE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>9dc22f85-20d3-4891-810e-74570c1faf80</name> + <entityField>FORECAST_YEAR</entityField> + </neonTableColumn> + <neonTableColumn> + <name>54abb536-db50-49c6-b70a-41779a66b977</name> + <entityField>VOLUME</entityField> + </neonTableColumn> + <neonTableColumn> + <name>8996ce6a-582c-4caa-9515-9615561e4d1a</name> + <entityField>STATUS</entityField> + </neonTableColumn> + <neonTableColumn> + <name>9dbb7180-33a7-4d3e-b750-93ee3234fde7</name> + <entityField>INFO</entityField> + </neonTableColumn> + <neonTableColumn> + <name>0215f710-cac1-474b-9ecf-418c6877076d</name> + <entityField>RESPONSIBLE_CONTACT_ID</entityField> + </neonTableColumn> + </columns> + <editRendererMapping> + <rendererMappingEntry> + <name>d0c0badc-a365-41fc-bb18-493e3c8340d9</name> + <fieldName>VOLUME</fieldName> + <renderer>numberPlus1000</renderer> + </rendererMappingEntry> + </editRendererMapping> + <viewRendererMapping> + <rendererMappingEntry> + <name>a681d707-affa-4ca9-ad41-28b9dce029c6</name> + <fieldName>STATUS</fieldName> + <renderer>badge</renderer> + </rendererMappingEntry> + </viewRendererMapping> + </multiEditTableViewTemplate> + </children> +</neonView> diff --git a/neonView/PlanningOrganisationFilter_view/PlanningOrganisationFilter_view.aod b/neonView/PlanningOrganisationFilter_view/PlanningOrganisationFilter_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..ed4339a63e0f6aea64875454565d42f8c3f56cfb --- /dev/null +++ b/neonView/PlanningOrganisationFilter_view/PlanningOrganisationFilter_view.aod @@ -0,0 +1,132 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>PlanningOrganisationFilter_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterable v="true" /> + <layout> + <groupLayout> + <name>layout</name> + </groupLayout> + </layout> + <children> + <multiEditTableViewTemplate> + <name>MultiEditTable</name> + <editableColumns> + <element>VOLUME</element> + </editableColumns> + <favoriteActionGroup1>FilterViewActions</favoriteActionGroup1> + <columns> + <neonTableColumn> + <name>9dc22f85-20d3-4891-810e-74570c1faf80</name> + <entityField>FORECAST_YEAR</entityField> + </neonTableColumn> + <neonTableColumn> + <name>bb541f09-5a3c-4905-a73e-4a94b8dd4aba</name> + <entityField>CONTACT_ID</entityField> + </neonTableColumn> + <neonTableColumn> + <name>93f37300-6859-4860-a246-e0f282377b54</name> + <entityField>GROUPCODE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>54abb536-db50-49c6-b70a-41779a66b977</name> + <entityField>VOLUME</entityField> + </neonTableColumn> + <neonTableColumn> + <name>8996ce6a-582c-4caa-9515-9615561e4d1a</name> + <entityField>STATUS</entityField> + </neonTableColumn> + <neonTableColumn> + <name>9dbb7180-33a7-4d3e-b750-93ee3234fde7</name> + <entityField>INFO</entityField> + </neonTableColumn> + <neonTableColumn> + <name>0215f710-cac1-474b-9ecf-418c6877076d</name> + <entityField>RESPONSIBLE_CONTACT_ID</entityField> + </neonTableColumn> + </columns> + <editRendererMapping> + <rendererMappingEntry> + <name>2d22888b-24f1-42b4-9573-1a294a342dc4</name> + <fieldName>VOLUME</fieldName> + <renderer>numberPlus1000</renderer> + </rendererMappingEntry> + </editRendererMapping> + <viewRendererMapping> + <rendererMappingEntry> + <name>a681d707-affa-4ca9-ad41-28b9dce029c6</name> + <fieldName>STATUS</fieldName> + <renderer>badge</renderer> + </rendererMappingEntry> + </viewRendererMapping> + </multiEditTableViewTemplate> + <tableViewTemplate> + <name>Table</name> + <favoriteActionGroup1>FilterViewActions</favoriteActionGroup1> + <columns> + <neonTableColumn> + <name>2024c784-29c3-498b-80b3-f2e378f25773</name> + <entityField>CONTACT_ID</entityField> + </neonTableColumn> + <neonTableColumn> + <name>2e953e44-4bc5-4faa-9f4b-24067e547948</name> + <entityField>GROUPCODE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>e4291f04-8c2b-4098-a50e-596c8475307d</name> + <entityField>FORECAST_YEAR</entityField> + </neonTableColumn> + <neonTableColumn> + <name>5151f716-d93d-4131-a19e-9935cd7ef6a4</name> + <entityField>VOLUME</entityField> + </neonTableColumn> + <neonTableColumn> + <name>befc56f1-8681-4f08-8d94-e1971de8e7c3</name> + <entityField>STATUS</entityField> + </neonTableColumn> + <neonTableColumn> + <name>21f5c228-b2eb-4e66-8112-5814b32d1fba</name> + <entityField>INFO</entityField> + </neonTableColumn> + <neonTableColumn> + <name>4a354a6b-87c9-4cf5-89e1-c5eb99aa2c07</name> + <entityField>RESPONSIBLE_CONTACT_ID</entityField> + </neonTableColumn> + </columns> + </tableViewTemplate> + <treeTableViewTemplate> + <name>TreeTable</name> + <favoriteActionGroup1>FilterViewActions</favoriteActionGroup1> + <columns> + <neonTreeTableColumn> + <name>9664cd27-0bd3-48e1-bc4e-b80e8ce52c64</name> + <entityField>CONTACT_ID</entityField> + </neonTreeTableColumn> + <neonTreeTableColumn> + <name>cf434d69-e808-474d-b14a-7cf1f71858e3</name> + <entityField>GROUPCODE</entityField> + </neonTreeTableColumn> + <neonTreeTableColumn> + <name>e43c6e75-4dc6-4506-b34f-146dc5762633</name> + <entityField>FORECAST_YEAR</entityField> + </neonTreeTableColumn> + <neonTreeTableColumn> + <name>ba9ed9ef-1492-4a56-a8fa-ec1ce58c95c9</name> + <entityField>VOLUME</entityField> + </neonTreeTableColumn> + <neonTreeTableColumn> + <name>2a65c747-1624-4c58-8a17-1d60c79826ac</name> + <entityField>STATUS</entityField> + </neonTreeTableColumn> + <neonTreeTableColumn> + <name>804e6425-30b1-47a0-8851-730e72af3937</name> + <entityField>INFO</entityField> + </neonTreeTableColumn> + <neonTreeTableColumn> + <name>b58a1b6d-8824-4122-a616-42dcb5a50fef</name> + <entityField>RESPONSIBLE_CONTACT_ID</entityField> + </neonTreeTableColumn> + </columns> + </treeTableViewTemplate> + </children> +</neonView> diff --git a/neonView/PrivatePersonPreview_view/PrivatePersonPreview_view.aod b/neonView/PrivatePersonPreview_view/PrivatePersonPreview_view.aod index de138a43230619b9bbe0a97b0ac1273b8f1602f5..9abc84a67646427c25f1f89422bad0f96351fa63 100644 --- a/neonView/PrivatePersonPreview_view/PrivatePersonPreview_view.aod +++ b/neonView/PrivatePersonPreview_view/PrivatePersonPreview_view.aod @@ -10,7 +10,7 @@ <children> <neonViewReference> <name>4c340a9c-252c-4708-9206-31ca98c06593</name> - <entityField>Persons</entityField> + <entityField>RecipientPerson</entityField> <view>ContactTitledList_view</view> </neonViewReference> </children> diff --git a/neonView/Prod2prodFilter_view/Prod2prodFilter_view.aod b/neonView/Prod2prodFilter_view/Prod2prodFilter_view.aod index 8c93d1744c178359d45cef74f341f0c98eca70c8..c009ab9b93b68c970edc4ed546fa70443de9a91b 100644 --- a/neonView/Prod2prodFilter_view/Prod2prodFilter_view.aod +++ b/neonView/Prod2prodFilter_view/Prod2prodFilter_view.aod @@ -11,8 +11,7 @@ <children> <treeTableViewTemplate> <name>PartlistTree</name> - <parentField>DEST_ID</parentField> - <entityField>#ENTITY</entityField> + <parentField>PARENT_ID</parentField> <favoriteActionGroup1>alter</favoriteActionGroup1> <devices> <element>MOBILE</element> @@ -97,6 +96,13 @@ <entityField>currentSalesPrice</entityField> </neonTableColumn> </columns> + <editRendererMapping> + <rendererMappingEntry> + <name>84b72e32-9a2a-4bf3-a87c-44f47f6c10d2</name> + <fieldName>QUANTITY</fieldName> + <renderer>numberInput</renderer> + </rendererMappingEntry> + </editRendererMapping> </multiEditTableViewTemplate> </children> </neonView> diff --git a/neonView/ProductEdit_view/ProductEdit_view.aod b/neonView/ProductEdit_view/ProductEdit_view.aod index a651ea4b7c30d26ad8b6476ca61849cd7cdf0bfd..0fa3800f177aab75f448048bf03cc306ba1f967b 100644 --- a/neonView/ProductEdit_view/ProductEdit_view.aod +++ b/neonView/ProductEdit_view/ProductEdit_view.aod @@ -37,6 +37,10 @@ <name>49b07dd2-1ee1-4b80-88a7-daf4879848d2</name> <entityField>STATUS</entityField> </entityFieldLink> + <entityFieldLink> + <name>5929cd3b-f1bc-46e2-9432-4bdfda2eacbb</name> + <entityField>DIGITAL</entityField> + </entityFieldLink> <entityFieldLink> <name>a068f12a-ed45-4997-9e94-c865ccffee2a</name> <entityField>UNIT</entityField> diff --git a/neonView/ProductMain_view/ProductMain_view.aod b/neonView/ProductMain_view/ProductMain_view.aod index 861b85ac39a6409f4ba8f423b3b844909373c7ab..ef39735d8175cab955b0be9e0f0b896e84475d1b 100644 --- a/neonView/ProductMain_view/ProductMain_view.aod +++ b/neonView/ProductMain_view/ProductMain_view.aod @@ -15,14 +15,14 @@ <view>ProductPreview_view</view> </neonViewReference> <neonViewReference> - <name>41887933-bb9a-48ce-818d-1db815021a36</name> - <entityField>Activities</entityField> - <view>ActivityFilter_view</view> + <name>11c4c5a0-27fa-4748-a6c6-3a667d2f3d8f</name> + <entityField>Productprices</entityField> + <view>ProductpriceForProductFilter_view</view> </neonViewReference> <neonViewReference> - <name>754b4efe-3ea7-42de-8e35-c85c3a0b4abf</name> - <entityField>Tasks</entityField> - <view>TaskFilter_view</view> + <name>7f416115-ff89-45ca-be10-ed568cac266c</name> + <entityField>ProductLinks</entityField> + <view>Prod2prodFilter_view</view> </neonViewReference> <neonViewReference> <name>7a475d46-0ce9-4fd3-ab5b-c5c625a4a3fa</name> @@ -30,14 +30,19 @@ <view>ProductDescritption_view</view> </neonViewReference> <neonViewReference> - <name>7f416115-ff89-45ca-be10-ed568cac266c</name> - <entityField>ProductLinks</entityField> - <view>Prod2prodFilter_view</view> + <name>6ee1258f-b571-45c1-b833-f292361b5a04</name> + <entityField>AttributeTree</entityField> + <view>AttributeRelationTree_view</view> </neonViewReference> <neonViewReference> - <name>11c4c5a0-27fa-4748-a6c6-3a667d2f3d8f</name> - <entityField>Productprices</entityField> - <view>ProductpriceForProductFilter_view</view> + <name>41887933-bb9a-48ce-818d-1db815021a36</name> + <entityField>Activities</entityField> + <view>ActivityFilter_view</view> + </neonViewReference> + <neonViewReference> + <name>754b4efe-3ea7-42de-8e35-c85c3a0b4abf</name> + <entityField>Tasks</entityField> + <view>TaskFilter_view</view> </neonViewReference> <neonViewReference> <name>616f7cc3-93e7-41ee-8d38-027dd3d4b299</name> @@ -45,9 +50,9 @@ <view>DocumentFilter_view</view> </neonViewReference> <neonViewReference> - <name>6ee1258f-b571-45c1-b833-f292361b5a04</name> - <entityField>AttributeTree</entityField> - <view>AttributeRelationTree_view</view> + <name>e058bcaa-8f1e-4b64-a6a9-a67be12a7fce</name> + <entityField>DigitalAdvertisingDocuments</entityField> + <view>DocumentFilter_view</view> </neonViewReference> <neonViewReference> <name>0faf6a9e-b1f3-452d-b7fd-d0c9e3fc25f8</name> diff --git a/neonView/ProductPreview_view/ProductPreview_view.aod b/neonView/ProductPreview_view/ProductPreview_view.aod index 2117c52998bdb57ddfc55fff4e0fb5475a7c70a2..687114627beba86d1f6095264fdc8806152aa1cf 100644 --- a/neonView/ProductPreview_view/ProductPreview_view.aod +++ b/neonView/ProductPreview_view/ProductPreview_view.aod @@ -57,10 +57,18 @@ <name>abef7fe5-88f6-44fe-af91-38487eb9b750</name> <entityField>ADVERTISING</entityField> </entityFieldLink> + <entityFieldLink> + <name>1bedf6a6-0251-4be7-b61c-a7da9ca711e2</name> + <entityField>DIGITAL</entityField> + </entityFieldLink> <entityFieldLink> <name>ba604dc5-06b2-44f2-a9b3-c4c3adb9f8f8</name> <entityField>MINSTOCK</entityField> </entityFieldLink> + <entityFieldLink> + <name>9909a3f7-48a0-45dd-adb0-06062789ae62</name> + <entityField>COUNT</entityField> + </entityFieldLink> </fields> </genericViewTemplate> <genericViewTemplate> diff --git a/neonView/QuickEntryEdit_view/QuickEntryEdit_view.aod b/neonView/QuickEntryEdit_view/QuickEntryEdit_view.aod index 63d495112b0504008b1ca9e4693ce557a6b0f9b1..c9ef652c01ba859d7b894e61ed588d9d7a91279e 100644 --- a/neonView/QuickEntryEdit_view/QuickEntryEdit_view.aod +++ b/neonView/QuickEntryEdit_view/QuickEntryEdit_view.aod @@ -21,6 +21,10 @@ <editMode v="true" /> <entityField>#ENTITY</entityField> <fields> + <entityFieldLink> + <name>635e909b-a5f8-4afe-b16f-ad9ff0ffba03</name> + <entityField>businessCardLanguage</entityField> + </entityFieldLink> <entityFieldLink> <name>8ed8f12d-2a91-4009-8868-55a0c11880ff</name> <entityField>leadQuickAcquisition</entityField> diff --git a/neonView/RoleChildrenList_view/RoleChildrenList_view.aod b/neonView/RoleChildrenList_view/RoleChildrenList_view.aod index 777f1a116a0ca5eb73734e06ba80cd3a65aca974..df1d51b6c126c9e8853e51bb74271e53020189a9 100644 --- a/neonView/RoleChildrenList_view/RoleChildrenList_view.aod +++ b/neonView/RoleChildrenList_view/RoleChildrenList_view.aod @@ -14,8 +14,8 @@ <titleFieldFullWidth v="true" /> <entityField>#ENTITY</entityField> <isDeletable v="true" /> - <isEditable v="true" /> <isCreatable v="true" /> + <isEditable v="true" /> </titledListViewTemplate> </children> </neonView> diff --git a/neonView/SalesprojectFurtherInfo_view/SalesprojectFurtherInfo_view.aod b/neonView/SalesprojectFurtherInfo_view/SalesprojectFurtherInfo_view.aod index b9df7b607f8a933c220f41853777515c3230e682..f5d5ef6702a4b9e691eaab17486c611318c1c609 100644 --- a/neonView/SalesprojectFurtherInfo_view/SalesprojectFurtherInfo_view.aod +++ b/neonView/SalesprojectFurtherInfo_view/SalesprojectFurtherInfo_view.aod @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> <name>SalesprojectFurtherInfo_view</name> - <title>Further informations</title> + <title>Further information</title> <majorModelMode>DISTRIBUTED</majorModelMode> <layout> <boxLayout> diff --git a/neonView/SalesprojectMain_view/SalesprojectMain_view.aod b/neonView/SalesprojectMain_view/SalesprojectMain_view.aod index 43368c01548b156b25d2389c85c30878e3a071c1..c13e9fc067ad27e402e95027e86e82583a244e9e 100644 --- a/neonView/SalesprojectMain_view/SalesprojectMain_view.aod +++ b/neonView/SalesprojectMain_view/SalesprojectMain_view.aod @@ -9,6 +9,11 @@ </masterSlaveLayout> </layout> <children> + <neonViewReference> + <name>eaee3a77-a3d8-4f0c-969a-da232b0c9537</name> + <entityField>#ENTITY</entityField> + <view>SalesprojectPreview_view</view> + </neonViewReference> <neonViewReference> <name>673a34c7-5781-4c72-b0c8-944f1e5de9c6</name> <entityField>#ENTITY</entityField> @@ -19,16 +24,6 @@ <element>DESKTOP</element> </devices> </neonViewReference> - <neonViewReference> - <name>d4daa13e-bf57-45e4-af43-d58c04f113f5</name> - <entityField>#ENTITY</entityField> - <view>SalesprojectActivity_view</view> - </neonViewReference> - <neonViewReference> - <name>7ac103ea-1131-41e0-85ce-e7d2fc86dfd8</name> - <entityField>Attributes</entityField> - <view>AttributeRelationTree_view</view> - </neonViewReference> <neonViewReference> <name>d0c1344f-c143-43b4-9c44-f823fb525eff</name> <entityField>Classifications</entityField> @@ -49,6 +44,16 @@ <entityField>#ENTITY</entityField> <view>SalesprojectFurtherInfo_view</view> </neonViewReference> + <neonViewReference> + <name>107b20e3-6326-498a-968b-ac09257981fc</name> + <entityField>AttributeTree</entityField> + <view>AttributeRelationTree_view</view> + </neonViewReference> + <neonViewReference> + <name>d4daa13e-bf57-45e4-af43-d58c04f113f5</name> + <entityField>#ENTITY</entityField> + <view>SalesprojectActivity_view</view> + </neonViewReference> <neonViewReference> <name>a5043042-e889-4a9e-9e69-bf727e35bddf</name> <entityField>Tasks</entityField> @@ -64,10 +69,5 @@ <entityField>LogHistories</entityField> <view>LogHistoryFilter_view</view> </neonViewReference> - <neonViewReference> - <name>eaee3a77-a3d8-4f0c-969a-da232b0c9537</name> - <entityField>#ENTITY</entityField> - <view>SalesprojectPreview_view</view> - </neonViewReference> </children> </neonView> diff --git a/neonView/SalesprojectMilestoneInfo_view/SalesprojectMilestoneInfo_view.aod b/neonView/SalesprojectMilestoneInfo_view/SalesprojectMilestoneInfo_view.aod index 965ca73b487c64db86d0d42be802d619a6b1041e..0fe777d742fb9efff898ee891b27270c5b5e7ddd 100644 --- a/neonView/SalesprojectMilestoneInfo_view/SalesprojectMilestoneInfo_view.aod +++ b/neonView/SalesprojectMilestoneInfo_view/SalesprojectMilestoneInfo_view.aod @@ -12,8 +12,8 @@ <ganttViewTemplate> <name>MilestoneGantt</name> <uidField>SALESPROJECT_MILESTONEID</uidField> - <titleField>valueLongName</titleField> - <descriptionField>valueLongName</descriptionField> + <titleField>MILESTONEVALUE</titleField> + <descriptionField>MILESTONEVALUE</descriptionField> <beginDateField>DATE_START</beginDateField> <endDateField>dateEndGantt</endDateField> <predecessorIdField>PARENT_ID</predecessorIdField> diff --git a/neonView/SalesprojectOfferForecast_view/SalesprojectOfferForecast_view.aod b/neonView/SalesprojectOfferForecast_view/SalesprojectOfferForecast_view.aod index 6d39b58450421b59183f1a9945e59d49b3830270..46035190b079baa6b2cc1f04a2b47664cc649587 100644 --- a/neonView/SalesprojectOfferForecast_view/SalesprojectOfferForecast_view.aod +++ b/neonView/SalesprojectOfferForecast_view/SalesprojectOfferForecast_view.aod @@ -17,9 +17,9 @@ <view>ForecastFilter_view</view> </neonViewReference> <neonViewReference> - <name>ca2581ac-0987-4fa4-a45a-c33ea4cd61e1</name> - <entityField>SalesprojectForecastCharts</entityField> - <view>TurnoverChartForecast_view</view> + <name>aeb63483-3e44-4fcb-885d-48c6d7d193ac</name> + <entityField>Turnovers</entityField> + <view>TurnoverDynamicMultiDataChart_view</view> </neonViewReference> </children> </neonView> diff --git a/neonView/SalesprojectPhaseDefinitionEdit_view/SalesprojectPhaseDefinitionEdit_view.aod b/neonView/SalesprojectPhaseDefinitionEdit_view/SalesprojectPhaseDefinitionEdit_view.aod index eae1779df434052cfd229767a2055813e6527285..b51922e319bb2f0901196ed947958d46772b43d1 100644 --- a/neonView/SalesprojectPhaseDefinitionEdit_view/SalesprojectPhaseDefinitionEdit_view.aod +++ b/neonView/SalesprojectPhaseDefinitionEdit_view/SalesprojectPhaseDefinitionEdit_view.aod @@ -21,6 +21,10 @@ <name>f0aa8dd0-2cc1-4634-9509-db8b511e602d</name> <entityField>DESCRIPTION</entityField> </entityFieldLink> + <entityFieldLink> + <name>b5e973f9-854e-4ddc-b980-2fac447cb292</name> + <entityField>AUTOPROBABILITY</entityField> + </entityFieldLink> </fields> </genericViewTemplate> <neonViewReference> diff --git a/neonView/SalesprojectPhaseDefinitionPreview_view/SalesprojectPhaseDefinitionPreview_view.aod b/neonView/SalesprojectPhaseDefinitionPreview_view/SalesprojectPhaseDefinitionPreview_view.aod index a2fe192db764301468d9b71198c550cc677cf3de..d25d74cf44d19ccc4ae7db5988db9bcb0ea9b5e8 100644 --- a/neonView/SalesprojectPhaseDefinitionPreview_view/SalesprojectPhaseDefinitionPreview_view.aod +++ b/neonView/SalesprojectPhaseDefinitionPreview_view/SalesprojectPhaseDefinitionPreview_view.aod @@ -14,9 +14,19 @@ <name>cardViewTemplate</name> <iconField>#ICON</iconField> <titleField>PHASE</titleField> - <subtitleField>SalesprojectPhaseFullname</subtitleField> <entityField>#ENTITY</entityField> </cardViewTemplate> + <genericViewTemplate> + <name>Generic</name> + <showDrawer v="true" /> + <drawerCaption>Info</drawerCaption> + <fields> + <entityFieldLink> + <name>d12a93ac-5c83-4b79-8cb9-4a2852bb3082</name> + <entityField>AUTOPROBABILITY</entityField> + </entityFieldLink> + </fields> + </genericViewTemplate> <neonViewReference> <name>786e8ccd-b846-4968-8b6c-9e8cf13ba63c</name> <entityField>ChecklistEntries</entityField> diff --git a/neonView/SalesprojectScoreCard_view/SalesprojectScoreCard_view.aod b/neonView/SalesprojectScoreCard_view/SalesprojectScoreCard_view.aod index 6ab33f8dae76b440a0e06de971c0cb3e01e275cc..73440be89f0f0da0add22c6c1dc51542be009400 100644 --- a/neonView/SalesprojectScoreCard_view/SalesprojectScoreCard_view.aod +++ b/neonView/SalesprojectScoreCard_view/SalesprojectScoreCard_view.aod @@ -31,17 +31,27 @@ <scoreCardViewTemplate> <name>KeyFigures</name> <fieldActions> + <element>openPlanning</element> <element>openForecast</element> + <element>openForecastWeighted</element> <element>openTurnover</element> <element>openSalesprojects</element> <element>sentOffers</element> </fieldActions> <entityField>#ENTITY</entityField> <fields> + <entityFieldLink> + <name>0c68c50c-bb6b-4450-a53e-2bbfbb4ee8b5</name> + <entityField>OVERALL_PLANNING</entityField> + </entityFieldLink> <entityFieldLink> <name>3377fe1b-1f29-4c49-88c8-7a1b1ee6d0ce</name> <entityField>OVERALL_FORECAST</entityField> </entityFieldLink> + <entityFieldLink> + <name>5d85e400-1d16-4ec0-977a-ddd76eac4ed9</name> + <entityField>OVERALL_FORECAST_weighted</entityField> + </entityFieldLink> <entityFieldLink> <name>44449f24-ed9d-4053-8202-db4b43032067</name> <entityField>OVERALL_TURNOVER</entityField> diff --git a/neonView/StandardWorkflowFilter_view/StandardWorkflowFilter_view.aod b/neonView/StandardWorkflowFilter_view/StandardWorkflowFilter_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..7104b53b647f57c84e47a10b4877a9a9b3675b6a --- /dev/null +++ b/neonView/StandardWorkflowFilter_view/StandardWorkflowFilter_view.aod @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>StandardWorkflowFilter_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <boxLayout> + <name>layout</name> + </boxLayout> + </layout> + <children> + <tilesViewTemplate> + <name>Tiles</name> + <iconField>DIAGRAM</iconField> + <titleField>NAME</titleField> + <subtitleField>PROCESSKEY</subtitleField> + <descriptionField>DESCRIPTION</descriptionField> + <isDeletable v="false" /> + <isEditable v="false" /> + </tilesViewTemplate> + </children> +</neonView> diff --git a/neonView/TurnoverDynamicMultiDataChart_view/TurnoverDynamicMultiDataChart_view.aod b/neonView/TurnoverDynamicMultiDataChart_view/TurnoverDynamicMultiDataChart_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..37ac78294393862d6fd6f9c34c58c58d16ab3077 --- /dev/null +++ b/neonView/TurnoverDynamicMultiDataChart_view/TurnoverDynamicMultiDataChart_view.aod @@ -0,0 +1,208 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>TurnoverDynamicMultiDataChart_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterable v="true" /> + <layout> + <groupLayout> + <name>layout</name> + </groupLayout> + </layout> + <children> + <dynamicMultiDataChartViewTemplate> + <name>ColumnChart</name> + <chartType>COLUMN</chartType> + <yAxisLabel>Volume</yAxisLabel> + <defaultGroupFields> + <element>TURNOVER_YEAR</element> + </defaultGroupFields> + <maxDBRow v="1000" /> + <columns> + <neonDynamicMultiDataChartColumn> + <name>7709c61e-76a5-482a-b2e6-c29ff74c9bf0</name> + <entityField>PLANNING_VOLUME</entityField> + <aggregateEntityField>PlanningVolume_aggregate</aggregateEntityField> + </neonDynamicMultiDataChartColumn> + <neonDynamicMultiDataChartColumn> + <name>04e3d31a-b4ca-404a-b308-eaa01abd2a99</name> + <entityField>FORECAST_VOLUME</entityField> + <aggregateEntityField>ForecastVolume_aggregate</aggregateEntityField> + </neonDynamicMultiDataChartColumn> + <neonDynamicMultiDataChartColumn> + <name>71bfb28b-0eb7-418f-b700-534a631bdad4</name> + <entityField>FORECAST_VOLUME_weighted</entityField> + <aggregateEntityField>ForecastVolumeWeighted_aggregate</aggregateEntityField> + </neonDynamicMultiDataChartColumn> + <neonDynamicMultiDataChartColumn> + <name>9a3b65fd-5bd3-41a2-9cc6-8dca5acb3367</name> + <entityField>TURNOVER_VOLUME</entityField> + <aggregateEntityField>TurnoverVolume_aggregate</aggregateEntityField> + </neonDynamicMultiDataChartColumn> + </columns> + </dynamicMultiDataChartViewTemplate> + <dynamicMultiDataChartViewTemplate> + <name>LineChart</name> + <chartType>LINE</chartType> + <yAxisLabel>Volume</yAxisLabel> + <defaultGroupFields> + <element>TURNOVER_YEAR</element> + </defaultGroupFields> + <maxDBRow v="1000" /> + <columns> + <neonDynamicMultiDataChartColumn> + <name>72f5cc43-cec3-4718-94cd-99f587607293</name> + <entityField>PLANNING_VOLUME</entityField> + <aggregateEntityField>PlanningVolume_aggregate</aggregateEntityField> + </neonDynamicMultiDataChartColumn> + <neonDynamicMultiDataChartColumn> + <name>d4437b51-9e40-4fa7-94bc-28f2ea59e966</name> + <entityField>FORECAST_VOLUME</entityField> + <aggregateEntityField>ForecastVolume_aggregate</aggregateEntityField> + </neonDynamicMultiDataChartColumn> + <neonDynamicMultiDataChartColumn> + <name>71bfb28b-0eb7-418f-b700-534a631bdad4</name> + <entityField>FORECAST_VOLUME_weighted</entityField> + <aggregateEntityField>ForecastVolumeWeighted_aggregate</aggregateEntityField> + </neonDynamicMultiDataChartColumn> + <neonDynamicMultiDataChartColumn> + <name>41eba6de-a6a4-4ee2-a0c6-d38ee57e5188</name> + <entityField>TURNOVER_VOLUME</entityField> + <aggregateEntityField>TurnoverVolume_aggregate</aggregateEntityField> + </neonDynamicMultiDataChartColumn> + </columns> + </dynamicMultiDataChartViewTemplate> + <dynamicMultiDataChartViewTemplate> + <name>AreaChart</name> + <chartType>AREA</chartType> + <yAxisLabel>Volume</yAxisLabel> + <defaultGroupFields> + <element>TURNOVER_YEAR</element> + </defaultGroupFields> + <maxDBRow v="1000" /> + <columns> + <neonDynamicMultiDataChartColumn> + <name>1585e8fd-b76f-44b9-9d44-27a639570140</name> + <entityField>PLANNING_VOLUME</entityField> + <aggregateEntityField>PlanningVolume_aggregate</aggregateEntityField> + </neonDynamicMultiDataChartColumn> + <neonDynamicMultiDataChartColumn> + <name>ea8a897f-a2ae-4c92-bb91-0b0e9f65614c</name> + <entityField>FORECAST_VOLUME</entityField> + <aggregateEntityField>ForecastVolume_aggregate</aggregateEntityField> + </neonDynamicMultiDataChartColumn> + <neonDynamicMultiDataChartColumn> + <name>71bfb28b-0eb7-418f-b700-534a631bdad4</name> + <entityField>FORECAST_VOLUME_weighted</entityField> + <aggregateEntityField>ForecastVolumeWeighted_aggregate</aggregateEntityField> + </neonDynamicMultiDataChartColumn> + <neonDynamicMultiDataChartColumn> + <name>ad2f7c63-e91e-4aeb-ad18-6c46a1550826</name> + <entityField>TURNOVER_VOLUME</entityField> + <aggregateEntityField>TurnoverVolume_aggregate</aggregateEntityField> + </neonDynamicMultiDataChartColumn> + </columns> + </dynamicMultiDataChartViewTemplate> + <dynamicMultiDataChartViewTemplate> + <name>BarChart</name> + <chartType>BAR</chartType> + <yAxisLabel>Volume</yAxisLabel> + <defaultGroupFields> + <element>TURNOVER_YEAR</element> + </defaultGroupFields> + <maxDBRow v="1000" /> + <columns> + <neonDynamicMultiDataChartColumn> + <name>7f45aa1c-cd85-42f6-86fb-7507be02f77b</name> + <entityField>PLANNING_VOLUME</entityField> + <aggregateEntityField>PlanningVolume_aggregate</aggregateEntityField> + </neonDynamicMultiDataChartColumn> + <neonDynamicMultiDataChartColumn> + <name>65847c02-460d-45dd-b8b4-d4cd957bba73</name> + <entityField>FORECAST_VOLUME</entityField> + <aggregateEntityField>ForecastVolume_aggregate</aggregateEntityField> + </neonDynamicMultiDataChartColumn> + <neonDynamicMultiDataChartColumn> + <name>71bfb28b-0eb7-418f-b700-534a631bdad4</name> + <entityField>FORECAST_VOLUME_weighted</entityField> + <aggregateEntityField>ForecastVolumeWeighted_aggregate</aggregateEntityField> + </neonDynamicMultiDataChartColumn> + <neonDynamicMultiDataChartColumn> + <name>7ad4c50f-8f47-43a0-8791-3eb778c0d6fd</name> + <entityField>TURNOVER_VOLUME</entityField> + <aggregateEntityField>TurnoverVolume_aggregate</aggregateEntityField> + </neonDynamicMultiDataChartColumn> + </columns> + </dynamicMultiDataChartViewTemplate> + <dynamicMultiDataChartViewTemplate> + <name>SplineChart</name> + <chartType>SPLINE</chartType> + <yAxisLabel>Volume</yAxisLabel> + <defaultGroupFields> + <element>TURNOVER_YEAR</element> + </defaultGroupFields> + <maxDBRow v="1000" /> + <columns> + <neonDynamicMultiDataChartColumn> + <name>913e241e-382d-46dd-9aa8-944603e0b3ce</name> + <entityField>PLANNING_VOLUME</entityField> + <aggregateEntityField>PlanningVolume_aggregate</aggregateEntityField> + </neonDynamicMultiDataChartColumn> + <neonDynamicMultiDataChartColumn> + <name>03c8beba-08c8-4395-bf10-a8068f7f580b</name> + <entityField>FORECAST_VOLUME</entityField> + <aggregateEntityField>ForecastVolume_aggregate</aggregateEntityField> + </neonDynamicMultiDataChartColumn> + <neonDynamicMultiDataChartColumn> + <name>71bfb28b-0eb7-418f-b700-534a631bdad4</name> + <entityField>FORECAST_VOLUME_weighted</entityField> + <aggregateEntityField>ForecastVolumeWeighted_aggregate</aggregateEntityField> + </neonDynamicMultiDataChartColumn> + <neonDynamicMultiDataChartColumn> + <name>18d8478b-4e5e-4c4c-86f4-0f0ea16cc423</name> + <entityField>TURNOVER_VOLUME</entityField> + <aggregateEntityField>TurnoverVolume_aggregate</aggregateEntityField> + </neonDynamicMultiDataChartColumn> + </columns> + </dynamicMultiDataChartViewTemplate> + <treeTableViewTemplate> + <name>TreeTable</name> + <showChildrenCount v="false" /> + <defaultGroupFields> + <element>TURNOVER_YEAR</element> + </defaultGroupFields> + <isCreatable v="false" /> + <isDeletable v="false" /> + <isEditable v="false" /> + <columns> + <neonTreeTableColumn> + <name>a4f9a077-a90a-483b-af60-f8768f5f44b7</name> + <entityField>GroupField</entityField> + </neonTreeTableColumn> + <neonTreeTableColumn> + <name>177d07d7-cf46-410a-b9d4-840ca24a0623</name> + <entityField>PLANNING_VOLUME</entityField> + <aggregateEntityField>PlanningVolume_aggregate</aggregateEntityField> + </neonTreeTableColumn> + <neonTreeTableColumn> + <name>b18fd75b-b15e-4752-a6d8-60f068ccf0fe</name> + <entityField>FORECAST_VOLUME</entityField> + <aggregateEntityField>ForecastVolume_aggregate</aggregateEntityField> + </neonTreeTableColumn> + <neonTreeTableColumn> + <name>b4f0d966-e1cb-4b03-99cc-057f7a525b46</name> + <entityField>FORECAST_VOLUME_weighted</entityField> + <aggregateEntityField>ForecastVolumeWeighted_aggregate</aggregateEntityField> + </neonTreeTableColumn> + <neonTreeTableColumn> + <name>ed226e68-be2a-45d8-9c00-072f97a79dc3</name> + <entityField>TURNOVER_VOLUME</entityField> + <aggregateEntityField>TurnoverVolume_aggregate</aggregateEntityField> + </neonTreeTableColumn> + <neonTreeTableColumn> + <name>54f705d0-ecf6-4408-b962-835df01fb245</name> + <entityField>emptyField</entityField> + </neonTreeTableColumn> + </columns> + </treeTableViewTemplate> + </children> +</neonView> diff --git a/neonView/WeblinkClickFilter_view/WeblinkClickFilter_view.aod b/neonView/WeblinkClickFilter_view/WeblinkClickFilter_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..7874f86a6efcc25a59becd71d6b9f6daf8db1598 --- /dev/null +++ b/neonView/WeblinkClickFilter_view/WeblinkClickFilter_view.aod @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>WeblinkClickFilter_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterable v="true" /> + <layout> + <groupLayout> + <name>layout</name> + </groupLayout> + </layout> + <children> + <tableViewTemplate> + <name>table</name> + <columns> + <neonTableColumn> + <name>49a61a9f-2f93-4f97-8829-1297327be796</name> + <entityField>URL</entityField> + </neonTableColumn> + <neonTableColumn> + <name>7651e2ad-a70b-43aa-892d-20bae6d745ff</name> + <entityField>CONTACT_ID</entityField> + </neonTableColumn> + <neonTableColumn> + <name>b0052499-74c5-4ed8-aa99-7905b1686b1c</name> + <entityField>DATE_OPENED</entityField> + </neonTableColumn> + <neonTableColumn> + <name>8a018eda-e3c4-4284-aa61-92df079869cf</name> + <entityField>DEVICE_TYPE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>d484312d-23e9-4b72-83f8-c449fc546117</name> + <entityField>BROWSER</entityField> + </neonTableColumn> + <neonTableColumn> + <name>5dbbd7c3-dffe-4a98-9efa-de9b88ed5da2</name> + <entityField>OPERATING_SYSTEM</entityField> + </neonTableColumn> + <neonTableColumn> + <name>65a6fa62-e067-46a1-8996-7f8706f1c8f2</name> + <entityField>IP_ADDRESS</entityField> + </neonTableColumn> + </columns> + </tableViewTemplate> + </children> +</neonView> diff --git a/neonView/DuplicatesUnrelatedCluster_view/DuplicatesUnrelatedCluster_view.aod b/neonView/WeblinkDrawer_view/WeblinkDrawer_view.aod similarity index 67% rename from neonView/DuplicatesUnrelatedCluster_view/DuplicatesUnrelatedCluster_view.aod rename to neonView/WeblinkDrawer_view/WeblinkDrawer_view.aod index 670b2c939dc7b4c793999bf90f30c9503d4c0052..249c15450831cfc2f25af3ec3415d45ce96a4545 100644 --- a/neonView/DuplicatesUnrelatedCluster_view/DuplicatesUnrelatedCluster_view.aod +++ b/neonView/WeblinkDrawer_view/WeblinkDrawer_view.aod @@ -1,6 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> - <name>DuplicatesUnrelatedCluster_view</name> + <name>WeblinkDrawer_view</name> + <title>Further information</title> <majorModelMode>DISTRIBUTED</majorModelMode> <layout> <boxLayout> @@ -9,9 +10,9 @@ </layout> <children> <neonViewReference> - <name>484990d0-890b-48b8-8618-6f0fab367138</name> - <entityField>DuplicatesUnrelatedPersonConsumer</entityField> - <view>DuplicatesUnrelatedPersonFilter_view</view> + <name>92f84737-e546-4f97-842b-38f3a210e294</name> + <entityField>WebtrackingTags</entityField> + <view>WeblinkTagFilter_view</view> </neonViewReference> </children> </neonView> diff --git a/neonView/WeblinkEdit_view/WeblinkEdit_view.aod b/neonView/WeblinkEdit_view/WeblinkEdit_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..5c1ae63aadc924030a8f5fd4aa8f9262c82d100c --- /dev/null +++ b/neonView/WeblinkEdit_view/WeblinkEdit_view.aod @@ -0,0 +1,58 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>WeblinkEdit_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <size>NORMAL</size> + <layout> + <headerFooterLayout> + <name>layout</name> + <header>generic</header> + </headerFooterLayout> + </layout> + <children> + <genericViewTemplate> + <name>generic</name> + <editMode v="true" /> + <entityField>#ENTITY</entityField> + <fields> + <entityFieldLink> + <name>0c59b8f2-6f20-4842-a209-ab14e258093a</name> + <entityField>URL</entityField> + </entityFieldLink> + <entityFieldLink> + <name>70c52c3f-7e0b-4069-b56f-e0769f911efa</name> + <entityField>LINKTYPE</entityField> + </entityFieldLink> + <entityFieldLink> + <name>836aafd9-a8c3-4a7c-9b2c-260ec8bbee45</name> + <entityField>SCORE</entityField> + </entityFieldLink> + <entityFieldLink> + <name>4313c2fb-3551-4c66-81c9-ad950c44a105</name> + <entityField>PLACEHOLDER</entityField> + </entityFieldLink> + <entityFieldLink> + <name>2b22fb4a-5e7e-48ee-b6d1-3ee4381fb419</name> + <entityField>ISREDIRECT</entityField> + </entityFieldLink> + <entityFieldLink> + <name>65495a4d-dccf-42ba-bba4-af15b9ad06aa</name> + <entityField>ACTION_TYPE</entityField> + </entityFieldLink> + <entityFieldLink> + <name>90ab2682-bc2d-4989-ab7b-b47045a3cbf3</name> + <entityField>WORKFLOWPROCESSDEFINITION_KEY</entityField> + </entityFieldLink> + <entityFieldLink> + <name>8a33e22d-c607-4a56-8384-668cc225225d</name> + <entityField>WORKFLOWSIGNAL_NAME</entityField> + </entityFieldLink> + </fields> + </genericViewTemplate> + <neonViewReference> + <name>0f6d1fc5-fbd9-443e-84a3-ffba18c3443a</name> + <entityField>WebtrackingTags</entityField> + <view>WeblinkTagMultiEdit_view</view> + </neonViewReference> + </children> +</neonView> diff --git a/neonView/WeblinkFilter_view/WeblinkFilter_view.aod b/neonView/WeblinkFilter_view/WeblinkFilter_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..193c98458b43c941831350eb9a879ce306574caa --- /dev/null +++ b/neonView/WeblinkFilter_view/WeblinkFilter_view.aod @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>WeblinkFilter_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterable v="true" /> + <layout> + <noneLayout> + <name>layout</name> + </noneLayout> + </layout> + <children> + <tableViewTemplate> + <name>table</name> + <hideContentSearch v="false" /> + <entityField>#ENTITY</entityField> + <columns> + <neonTableColumn> + <name>ece26f14-59f5-44ac-8d2c-2d032fa4a668</name> + <entityField>URL</entityField> + </neonTableColumn> + <neonTableColumn> + <name>fae5a83e-e00f-436f-a908-66c41e5f720d</name> + <entityField>LINKTYPE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>d87cdb53-bbc2-499f-8b2d-9c464162a969</name> + <entityField>SCORE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>2307e8e1-233f-44b7-94a4-dd0f6ae9257e</name> + <entityField>Tags</entityField> + </neonTableColumn> + </columns> + </tableViewTemplate> + </children> +</neonView> diff --git a/neonView/WeblinkMain_view/WeblinkMain_view.aod b/neonView/WeblinkMain_view/WeblinkMain_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..d768584685d2a8d1d45a3c704c78100ae8174e1a --- /dev/null +++ b/neonView/WeblinkMain_view/WeblinkMain_view.aod @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>WeblinkMain_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <masterSlaveLayout> + <name>layout</name> + <master>883c0abd-232c-4640-88f7-6723b43ae2c3</master> + </masterSlaveLayout> + </layout> + <children> + <neonViewReference> + <name>883c0abd-232c-4640-88f7-6723b43ae2c3</name> + <entityField>#ENTITY</entityField> + <view>WeblinkPreview_view</view> + </neonViewReference> + <neonViewReference> + <name>cc02a283-26ae-4076-8b64-7c03c23f5350</name> + <entityField>#ENTITY</entityField> + <view>WeblinkDrawer_view</view> + </neonViewReference> + <neonViewReference> + <name>efe46f0a-d3e9-4ae0-9626-8829acbfb027</name> + <entityField>Clicks</entityField> + <view>WeblinkClickFilter_view</view> + </neonViewReference> + </children> +</neonView> diff --git a/neonView/WeblinkPreview_view/WeblinkPreview_view.aod b/neonView/WeblinkPreview_view/WeblinkPreview_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..3feb2f988f85f1ebd50a9621e7d02e05393d0275 --- /dev/null +++ b/neonView/WeblinkPreview_view/WeblinkPreview_view.aod @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>WeblinkPreview_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <headerFooterLayout> + <name>layout</name> + <header>card</header> + </headerFooterLayout> + </layout> + <children> + <cardViewTemplate> + <name>card</name> + <iconField>LINKTYPE_ICON</iconField> + <titleField>URL</titleField> + <subtitleField>LINKTYPE</subtitleField> + <descriptionField>SCORE</descriptionField> + <entityField>#ENTITY</entityField> + </cardViewTemplate> + <genericViewTemplate> + <name>generic</name> + <fields> + <entityFieldLink> + <name>611eb710-9f52-4826-a40c-282b6ac6daab</name> + <entityField>Tags</entityField> + </entityFieldLink> + <entityFieldLink> + <name>92bb0227-5418-4a61-a7cd-eccc8def83f9</name> + <entityField>PLACEHOLDER</entityField> + </entityFieldLink> + <entityFieldLink> + <name>840b0f8d-763f-402d-b318-6317402a7c6c</name> + <entityField>ISREDIRECT</entityField> + </entityFieldLink> + <entityFieldLink> + <name>a807f6b9-252c-4545-a2c9-266c64012097</name> + <entityField>WORKFLOWPROCESSDEFINITION_KEY</entityField> + </entityFieldLink> + </fields> + </genericViewTemplate> + </children> +</neonView> diff --git a/neonView/WeblinkTagEdit_view/WeblinkTagEdit_view.aod b/neonView/WeblinkTagEdit_view/WeblinkTagEdit_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..3e2e9c2e96657b325c47036ddbd380ab470307ed --- /dev/null +++ b/neonView/WeblinkTagEdit_view/WeblinkTagEdit_view.aod @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>WeblinkTagEdit_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <size>SMALL</size> + <layout> + <boxLayout> + <name>layout</name> + </boxLayout> + </layout> + <children> + <genericViewTemplate> + <name>generic</name> + <editMode v="true" /> + <entityField>#ENTITY</entityField> + <fields> + <entityFieldLink> + <name>4b955db8-013d-47b6-878e-8b1b6fbeb1a7</name> + <entityField>TAG</entityField> + </entityFieldLink> + </fields> + </genericViewTemplate> + </children> +</neonView> diff --git a/neonView/WeblinkTagFilter_view/WeblinkTagFilter_view.aod b/neonView/WeblinkTagFilter_view/WeblinkTagFilter_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..ab82dd3c04f352a34fed3414ec0b4a9c792cd944 --- /dev/null +++ b/neonView/WeblinkTagFilter_view/WeblinkTagFilter_view.aod @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>WeblinkTagFilter_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <noneLayout> + <name>layout</name> + </noneLayout> + </layout> + <children> + <tableViewTemplate> + <name>table</name> + <entityField>#ENTITY</entityField> + <columns> + <neonTableColumn> + <name>f9081075-839a-49d4-b9af-b0fce6ae5a3e</name> + <entityField>TAG</entityField> + </neonTableColumn> + </columns> + </tableViewTemplate> + </children> +</neonView> diff --git a/neonView/DuplicateScannerResultFieldConfigEdit_view/DuplicateScannerResultFieldConfigEdit_view.aod b/neonView/WeblinkTagMultiEdit_view/WeblinkTagMultiEdit_view.aod similarity index 65% rename from neonView/DuplicateScannerResultFieldConfigEdit_view/DuplicateScannerResultFieldConfigEdit_view.aod rename to neonView/WeblinkTagMultiEdit_view/WeblinkTagMultiEdit_view.aod index 9798328f4161f04c56cd02f48166a9dce167306c..e70d8e9017c181cd25580eff0f0624bb765d78f2 100644 --- a/neonView/DuplicateScannerResultFieldConfigEdit_view/DuplicateScannerResultFieldConfigEdit_view.aod +++ b/neonView/WeblinkTagMultiEdit_view/WeblinkTagMultiEdit_view.aod @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> - <name>DuplicateScannerResultFieldConfigEdit_view</name> + <name>WeblinkTagMultiEdit_view</name> <majorModelMode>DISTRIBUTED</majorModelMode> <layout> <boxLayout> @@ -9,14 +9,12 @@ </layout> <children> <genericMultipleViewTemplate> - <name>ResultFieldsConfig</name> - <autoNewRow v="true" /> - <entityField>#ENTITY</entityField> - <title>Result fields</title> + <name>genericMultiple</name> <columns> <neonGenericMultipleTableColumn> - <name>e330572c-aa47-4c52-a760-3e8765ce3dd0</name> - <entityField>ENTITY_FIELD_NAME</entityField> + <name>6053ac7f-0c00-415b-9c40-32fd6b783792</name> + <entityField>TAG</entityField> + <fullWidth v="true" /> </neonGenericMultipleTableColumn> </columns> </genericMultipleViewTemplate> diff --git a/neonView/WorkflowDefinitionPreview_view/WorkflowDefinitionPreview_view.aod b/neonView/WorkflowDefinitionPreview_view/WorkflowDefinitionPreview_view.aod index dbfa4e647449c5685275d81025071b046e1c39b1..a4b57a0b6981388d5b892dc05b0f5691bc341de8 100644 --- a/neonView/WorkflowDefinitionPreview_view/WorkflowDefinitionPreview_view.aod +++ b/neonView/WorkflowDefinitionPreview_view/WorkflowDefinitionPreview_view.aod @@ -27,7 +27,7 @@ <genericViewTemplate> <name>Generic</name> <showDrawer v="true" /> - <drawerCaption>Further informations</drawerCaption> + <drawerCaption>Further information</drawerCaption> <entityField>#ENTITY</entityField> <fields> <entityFieldLink> diff --git a/neonView/WorkflowDefinitionStore_view/WorkflowDefinitionStore_view.aod b/neonView/WorkflowDefinitionStore_view/WorkflowDefinitionStore_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..6e10496aa1c6398931a86e0e06489a88f6776e8a --- /dev/null +++ b/neonView/WorkflowDefinitionStore_view/WorkflowDefinitionStore_view.aod @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="UTF-8"?> +<neonView xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.1.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/neonView/1.1.8"> + <name>WorkflowDefinitionStore_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <size>SMALL</size> + <isOverlay v="true" /> + <layout> + <headerFooterLayout> + <name>layout</name> + <header>Options</header> + <footer>Actions</footer> + </headerFooterLayout> + </layout> + <children> + <lookupViewTemplate> + <name>WorkflowLookup</name> + <consumerField>selectedWorkflows</consumerField> + <consumerPresentationMode>EMBEDDED</consumerPresentationMode> + </lookupViewTemplate> + <actionsViewTemplate> + <name>Actions</name> + <actions> + <element>deploySelectedWorkflow</element> + <element>downloadSelectedWorkflow</element> + <element>deployAllWorkflows</element> + </actions> + </actionsViewTemplate> + <genericViewTemplate> + <name>Options</name> + <editMode v="true" /> + <fields> + <entityFieldLink> + <name>6f24b365-e339-4c32-9cf6-1cb7cbef1571</name> + <entityField>excludeExisting</entityField> + </entityFieldLink> + </fields> + </genericViewTemplate> + </children> +</neonView> diff --git a/neonView/WorkflowInstancePreview_view/WorkflowInstancePreview_view.aod b/neonView/WorkflowInstancePreview_view/WorkflowInstancePreview_view.aod index 3761673b2eead53ecb922b270f152c4de817fe90..53456e1587b144660e846b109985e9efc5841bd0 100644 --- a/neonView/WorkflowInstancePreview_view/WorkflowInstancePreview_view.aod +++ b/neonView/WorkflowInstancePreview_view/WorkflowInstancePreview_view.aod @@ -19,7 +19,7 @@ <genericViewTemplate> <name>Generic</name> <showDrawer v="true" /> - <drawerCaption>Further informations</drawerCaption> + <drawerCaption>Further information</drawerCaption> <entityField>#ENTITY</entityField> <fields> <entityFieldLink> diff --git a/neonView/WorkflowTaskPreview_view/WorkflowTaskPreview_view.aod b/neonView/WorkflowTaskPreview_view/WorkflowTaskPreview_view.aod index 460c6ea0cbedbdc082eaf60c35e07a7b24e255c5..03d374ecd3b5d6877738f690a111d86044b69fc7 100644 --- a/neonView/WorkflowTaskPreview_view/WorkflowTaskPreview_view.aod +++ b/neonView/WorkflowTaskPreview_view/WorkflowTaskPreview_view.aod @@ -22,7 +22,7 @@ <genericViewTemplate> <name>Generic</name> <showDrawer v="true" /> - <drawerCaption>Further informations</drawerCaption> + <drawerCaption>Further information</drawerCaption> <entityField>#ENTITY</entityField> <fields> <entityFieldLink> diff --git a/others/AngebotFreigeben.bpmn20.xml b/others/AngebotFreigeben.bpmn20.xml new file mode 100644 index 0000000000000000000000000000000000000000..c19a1a663b14640f1d8d403e40caa43fc78fdb57 --- /dev/null +++ b/others/AngebotFreigeben.bpmn20.xml @@ -0,0 +1,315 @@ +<?xml version="1.0" encoding="UTF-8"?> +<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.flowable.org/processdef"> + <process id="approveOffer" name="AngebotFreigeben" isExecutable="true"> + <startEvent id="startEvent1" flowable:formFieldValidation="true"></startEvent> + <userTask id="sid-7EE94F7E-20DC-49DF-A751-7EC30166393B" name="Angebot freigeben" flowable:candidateGroups="PROJECT_Pruefer1,PROJECT_Pruefer2" flowable:formFieldValidation="true"> + <extensionElements> + <flowable:formProperty id="approval" name="Angebot freigegeben?" type="boolean" variable="inspector1approval" required="true"></flowable:formProperty> + <flowable:formProperty id="reason" name="Begründung der Ablehnung" type="string" variable="reason" visibilityExpression="${currentValues.approval == false}"></flowable:formProperty> + <flowable:formProperty id="inspector2needed" name="2. Freigabe nötig?" type="boolean" expression="#{true}" variable="inspector2needed" visibilityExpression="${currentValues.approval == true}"></flowable:formProperty> + <modeler:group-info-name-PROJECT_Pruefer1 xmlns:modeler="http://flowable.org/modeler"><![CDATA[VT BL]]></modeler:group-info-name-PROJECT_Pruefer1> + <modeler:group-info-name-PROJECT_Pruefer2 xmlns:modeler="http://flowable.org/modeler"><![CDATA[GF/Leiter Vertrieb]]></modeler:group-info-name-PROJECT_Pruefer2> + <modeler:activiti-idm-candidate-group xmlns:modeler="http://flowable.org/modeler"><![CDATA[true]]></modeler:activiti-idm-candidate-group> + <modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler"><![CDATA[false]]></modeler:initiator-can-complete> + </extensionElements> + </userTask> + <exclusiveGateway id="sid-4D2A9C2D-5D5B-4D4E-8FD1-FBB630DF8295"></exclusiveGateway> + <sequenceFlow id="sid-24CE050E-5CA0-4410-9359-EAAA687200E3" sourceRef="sid-7EE94F7E-20DC-49DF-A751-7EC30166393B" targetRef="sid-4D2A9C2D-5D5B-4D4E-8FD1-FBB630DF8295"></sequenceFlow> + <serviceTask id="sid-8090E0D9-B068-4596-A6C6-8768C5803456" name="Angebot abgelehnt" flowable:class="de.adito.aditoweb.server.neon.workflow.WorkflowServiceTask"> + <extensionElements> + <flowable:field name="jditoProcess"> + <flowable:string><![CDATA[CreateOfferDeniedActivity_workflowService]]></flowable:string> + </flowable:field> + <flowable:field name="taskVariables"> + <flowable:string><![CDATA[{"firstOrSecond":{"value":"1"}}]]></flowable:string> + </flowable:field> + </extensionElements> + </serviceTask> + <serviceTask id="sid-0DD45B2D-BF99-42FD-85E5-0991CBF13780" name="Angebot freigegeben" flowable:class="de.adito.aditoweb.server.neon.workflow.WorkflowServiceTask"> + <extensionElements> + <flowable:field name="jditoProcess"> + <flowable:string><![CDATA[CreateOfferApprovedActivity_workflowService]]></flowable:string> + </flowable:field> + <flowable:field name="taskVariables"> + <flowable:string><![CDATA[{"description":{"value":""}}]]></flowable:string> + </flowable:field> + </extensionElements> + </serviceTask> + <userTask id="approvalTask2" name="Angebot freigeben (2. Freigabe)" flowable:candidateGroups="PROJECT_Pruefer2" flowable:formFieldValidation="true"> + <extensionElements> + <flowable:formProperty id="approval2" name="Angebot freigegeben?" type="boolean" variable="approval2" required="true"></flowable:formProperty> + <flowable:formProperty id="reason2" name="Begründung der Ablehnung" type="string" variable="reason2" visibilityExpression="${currentValues.approval2 == false}"></flowable:formProperty> + <modeler:group-info-name-PROJECT_Pruefer2 xmlns:modeler="http://flowable.org/modeler"><![CDATA[GF/Leiter Vertrieb]]></modeler:group-info-name-PROJECT_Pruefer2> + <modeler:activiti-idm-candidate-group xmlns:modeler="http://flowable.org/modeler"><![CDATA[true]]></modeler:activiti-idm-candidate-group> + <modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler"><![CDATA[false]]></modeler:initiator-can-complete> + </extensionElements> + </userTask> + <serviceTask id="sid-BEB99CF9-21AB-422C-B5BA-C8F933C4A458" name="Angebot freigegeben (Zweite Freigabe erforderlich)" flowable:class="de.adito.aditoweb.server.neon.workflow.WorkflowServiceTask"> + <extensionElements> + <flowable:field name="jditoProcess"> + <flowable:string><![CDATA[CreateOfferApprovedActivity_workflowService]]></flowable:string> + </flowable:field> + <flowable:field name="taskVariables"> + <flowable:string><![CDATA[{"description":{"value":"Zweite Freigabe erforderlich"},"approval":{"value":2}}]]></flowable:string> + </flowable:field> + </extensionElements> + </serviceTask> + <exclusiveGateway id="sid-2C59B75E-D7BA-415A-8AA4-96DF9D54560A"></exclusiveGateway> + <serviceTask id="sid-323AD77E-874D-4856-8E22-825D25989EE2" name="Angebot freigegeben" flowable:class="de.adito.aditoweb.server.neon.workflow.WorkflowServiceTask"> + <extensionElements> + <flowable:field name="jditoProcess"> + <flowable:string><![CDATA[CreateOfferApprovedActivity_workflowService]]></flowable:string> + </flowable:field> + <flowable:field name="taskVariables"> + <flowable:string><![CDATA[{"description":{"value":""}}]]></flowable:string> + </flowable:field> + </extensionElements> + </serviceTask> + <serviceTask id="sid-EAE0F188-EA97-4818-B99D-70259F2307B0" name="Angebot abgelehnt" flowable:class="de.adito.aditoweb.server.neon.workflow.WorkflowServiceTask"> + <extensionElements> + <flowable:field name="jditoProcess"> + <flowable:string><![CDATA[CreateOfferDeniedActivity_workflowService]]></flowable:string> + </flowable:field> + <flowable:field name="taskVariables"> + <flowable:string><![CDATA[{"firstOrSecond":{"value":"2"}}]]></flowable:string> + </flowable:field> + </extensionElements> + </serviceTask> + <sequenceFlow id="sid-8A3C7A28-71DD-47C8-9521-803C72A803E9" sourceRef="sid-4D2A9C2D-5D5B-4D4E-8FD1-FBB630DF8295" targetRef="sid-BEB99CF9-21AB-422C-B5BA-C8F933C4A458"> + <conditionExpression xsi:type="tFormalExpression"><![CDATA[${inspector1approval == true && inspector2needed == true}]]></conditionExpression> + </sequenceFlow> + <serviceTask id="sid-0ADBAADA-F257-4C7F-9AC1-9565AD03DEB7" name="Status ändern" flowable:class="de.adito.aditoweb.server.neon.workflow.WorkflowServiceTask"> + <extensionElements> + <flowable:field name="jditoProcess"> + <flowable:string><![CDATA[UpdateOfferStatus_workflowService]]></flowable:string> + </flowable:field> + <flowable:field name="taskVariables"> + <flowable:string><![CDATA[{"status":{"value":"OFFERSTATTOCHECK"},"time":{"value":1}}]]></flowable:string> + </flowable:field> + </extensionElements> + </serviceTask> + <sequenceFlow id="sid-095E3C78-BB9A-4E49-944B-16F7ABA8F097" sourceRef="sid-0ADBAADA-F257-4C7F-9AC1-9565AD03DEB7" targetRef="sid-7EE94F7E-20DC-49DF-A751-7EC30166393B"></sequenceFlow> + <serviceTask id="sid-93501888-538B-4BAE-8AE6-711A3FECA4FE" name="Status zu 'Freigabe abgelehnt' ändern" flowable:class="de.adito.aditoweb.server.neon.workflow.WorkflowServiceTask"> + <extensionElements> + <flowable:field name="jditoProcess"> + <flowable:string><![CDATA[UpdateOfferStatus_workflowService]]></flowable:string> + </flowable:field> + <flowable:field name="taskVariables"> + <flowable:string><![CDATA[{"status":{"value":"OFFERSTATDENIED"}}]]></flowable:string> + </flowable:field> + </extensionElements> + </serviceTask> + <endEvent id="sid-90F027C6-9870-40C1-8BCF-A96A25F76AF5"></endEvent> + <sequenceFlow id="sid-8142B71B-3DC1-4099-9F3A-F0DB9D0E59E3" sourceRef="sid-93501888-538B-4BAE-8AE6-711A3FECA4FE" targetRef="sid-90F027C6-9870-40C1-8BCF-A96A25F76AF5"></sequenceFlow> + <serviceTask id="sid-C4B0ADE8-A005-4AC8-8E47-1E223E2050F0" name="Status zu 'Freigegeben' ändern" flowable:class="de.adito.aditoweb.server.neon.workflow.WorkflowServiceTask"> + <extensionElements> + <flowable:field name="jditoProcess"> + <flowable:string><![CDATA[UpdateOfferStatus_workflowService]]></flowable:string> + </flowable:field> + <flowable:field name="taskVariables"> + <flowable:string><![CDATA[{"status":{"value":"OFFERSTATAPPROVED"}}]]></flowable:string> + </flowable:field> + </extensionElements> + </serviceTask> + <endEvent id="sid-3B123F1B-D924-4EE3-99E7-B91E776A0F69"></endEvent> + <sequenceFlow id="sid-7133F014-E561-45C5-99A2-EF6398DA3E49" sourceRef="sid-C4B0ADE8-A005-4AC8-8E47-1E223E2050F0" targetRef="sid-3B123F1B-D924-4EE3-99E7-B91E776A0F69"></sequenceFlow> + <sequenceFlow id="sid-BC4E1929-6C63-42F3-8086-A671EAA09D2E" sourceRef="sid-BEB99CF9-21AB-422C-B5BA-C8F933C4A458" targetRef="approvalTask2"></sequenceFlow> + <sequenceFlow id="sid-E529BD6B-1A6A-44AF-A487-5B47D641D22D" sourceRef="approvalTask2" targetRef="sid-2C59B75E-D7BA-415A-8AA4-96DF9D54560A"></sequenceFlow> + <sequenceFlow id="sid-57A915C4-CDCE-4D1F-AFEF-B61495262C8C" sourceRef="startEvent1" targetRef="sid-0ADBAADA-F257-4C7F-9AC1-9565AD03DEB7"></sequenceFlow> + <sequenceFlow id="sid-F53A65E8-181B-44FD-BCA3-38F530D6C717" sourceRef="sid-2C59B75E-D7BA-415A-8AA4-96DF9D54560A" targetRef="sid-323AD77E-874D-4856-8E22-825D25989EE2"> + <conditionExpression xsi:type="tFormalExpression"><![CDATA[${approval2 == true}]]></conditionExpression> + </sequenceFlow> + <sequenceFlow id="sid-4A941651-157C-4676-BA3D-ECF897AF0FCD" sourceRef="sid-2C59B75E-D7BA-415A-8AA4-96DF9D54560A" targetRef="sid-EAE0F188-EA97-4818-B99D-70259F2307B0"> + <conditionExpression xsi:type="tFormalExpression"><![CDATA[${approval2 == false}]]></conditionExpression> + </sequenceFlow> + <sequenceFlow id="sid-41EB3FF5-F96D-49CE-8813-5B36FA4392BB" sourceRef="sid-4D2A9C2D-5D5B-4D4E-8FD1-FBB630DF8295" targetRef="sid-0DD45B2D-BF99-42FD-85E5-0991CBF13780"> + <conditionExpression xsi:type="tFormalExpression"><![CDATA[${inspector1approval == true && inspector2needed == false}]]></conditionExpression> + </sequenceFlow> + <sequenceFlow id="sid-422FE8C4-DC10-467D-A400-EA087E865F74" sourceRef="sid-4D2A9C2D-5D5B-4D4E-8FD1-FBB630DF8295" targetRef="sid-8090E0D9-B068-4596-A6C6-8768C5803456"> + <conditionExpression xsi:type="tFormalExpression"><![CDATA[${inspector1approval == false}]]></conditionExpression> + </sequenceFlow> + <serviceTask id="sid-309E736B-EF85-4334-965B-DB8974B26011" name="Angebot abgelehnt (Benachrichtigung)" flowable:class="de.adito.aditoweb.server.neon.workflow.WorkflowServiceTask"> + <extensionElements> + <flowable:field name="jditoProcess"> + <flowable:string><![CDATA[CreateOfferNotification_workflowService]]></flowable:string> + </flowable:field> + </extensionElements> + </serviceTask> + <serviceTask id="sid-64F6F0E9-85B8-43C7-84A8-F29A4C31D81F" name="Angebot freigegeben (Benachrichtigung)" flowable:class="de.adito.aditoweb.server.neon.workflow.WorkflowServiceTask"> + <extensionElements> + <flowable:field name="jditoProcess"> + <flowable:string><![CDATA[CreateOfferApprovedNotification_workflowService]]></flowable:string> + </flowable:field> + </extensionElements> + </serviceTask> + <serviceTask id="sid-C375332E-BD9B-44E5-8498-61736B7E806C" name="Angebot freigegeben (Benachrichtigung)" flowable:class="de.adito.aditoweb.server.neon.workflow.WorkflowServiceTask"> + <extensionElements> + <flowable:field name="jditoProcess"> + <flowable:string><![CDATA[CreateOfferApprovedNotification_workflowService]]></flowable:string> + </flowable:field> + </extensionElements> + </serviceTask> + <serviceTask id="sid-13EC2DCF-F704-4F8F-A333-5C18C78B231F" name="Angebot abgelehnt (Benachrichtigung)" flowable:class="de.adito.aditoweb.server.neon.workflow.WorkflowServiceTask"> + <extensionElements> + <flowable:field name="jditoProcess"> + <flowable:string><![CDATA[CreateOfferNotification_workflowService]]></flowable:string> + </flowable:field> + </extensionElements> + </serviceTask> + <sequenceFlow id="sid-12B876BD-B89E-4E27-84F4-2A3E9D33AE36" sourceRef="sid-EAE0F188-EA97-4818-B99D-70259F2307B0" targetRef="sid-13EC2DCF-F704-4F8F-A333-5C18C78B231F"></sequenceFlow> + <sequenceFlow id="sid-DA26ED45-18EB-4C4E-A087-63F5FF8FBC80" sourceRef="sid-323AD77E-874D-4856-8E22-825D25989EE2" targetRef="sid-C375332E-BD9B-44E5-8498-61736B7E806C"></sequenceFlow> + <sequenceFlow id="sid-830D5DD8-CA32-4A5C-929C-86DBFD5CF289" sourceRef="sid-0DD45B2D-BF99-42FD-85E5-0991CBF13780" targetRef="sid-64F6F0E9-85B8-43C7-84A8-F29A4C31D81F"></sequenceFlow> + <sequenceFlow id="sid-E6F2BF23-4ACB-4426-BB61-AEA55BA6691E" sourceRef="sid-8090E0D9-B068-4596-A6C6-8768C5803456" targetRef="sid-309E736B-EF85-4334-965B-DB8974B26011"></sequenceFlow> + <sequenceFlow id="sid-4CB7BA5A-CD2E-4C92-A18B-A9AA73EFAE30" sourceRef="sid-309E736B-EF85-4334-965B-DB8974B26011" targetRef="sid-93501888-538B-4BAE-8AE6-711A3FECA4FE"></sequenceFlow> + <sequenceFlow id="sid-F9ABC3A1-CC1C-4884-A1DE-E8807C0AEB39" sourceRef="sid-64F6F0E9-85B8-43C7-84A8-F29A4C31D81F" targetRef="sid-C4B0ADE8-A005-4AC8-8E47-1E223E2050F0"></sequenceFlow> + <sequenceFlow id="sid-891A4694-41D0-4F9B-9D91-5C51520C308C" sourceRef="sid-13EC2DCF-F704-4F8F-A333-5C18C78B231F" targetRef="sid-93501888-538B-4BAE-8AE6-711A3FECA4FE"></sequenceFlow> + <sequenceFlow id="sid-73E245F8-F8AC-4EFC-A339-7B3716A67C0D" sourceRef="sid-C375332E-BD9B-44E5-8498-61736B7E806C" targetRef="sid-C4B0ADE8-A005-4AC8-8E47-1E223E2050F0"></sequenceFlow> + </process> + <bpmndi:BPMNDiagram id="BPMNDiagram_approveOffer"> + <bpmndi:BPMNPlane bpmnElement="approveOffer" id="BPMNPlane_approveOffer"> + <bpmndi:BPMNShape bpmnElement="startEvent1" id="BPMNShape_startEvent1"> + <omgdc:Bounds height="30.0" width="30.0" x="30.0" y="408.8636382847777"></omgdc:Bounds> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape bpmnElement="sid-7EE94F7E-20DC-49DF-A751-7EC30166393B" id="BPMNShape_sid-7EE94F7E-20DC-49DF-A751-7EC30166393B"> + <omgdc:Bounds height="80.0" width="100.0" x="255.0" y="383.8636382847777"></omgdc:Bounds> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape bpmnElement="sid-4D2A9C2D-5D5B-4D4E-8FD1-FBB630DF8295" id="BPMNShape_sid-4D2A9C2D-5D5B-4D4E-8FD1-FBB630DF8295"> + <omgdc:Bounds height="40.0" width="40.0" x="420.0" y="403.8636382847777"></omgdc:Bounds> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape bpmnElement="sid-8090E0D9-B068-4596-A6C6-8768C5803456" id="BPMNShape_sid-8090E0D9-B068-4596-A6C6-8768C5803456"> + <omgdc:Bounds height="80.0" width="100.0" x="510.0" y="210.0"></omgdc:Bounds> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape bpmnElement="sid-0DD45B2D-BF99-42FD-85E5-0991CBF13780" id="BPMNShape_sid-0DD45B2D-BF99-42FD-85E5-0991CBF13780"> + <omgdc:Bounds height="80.0" width="100.0" x="510.0" y="383.8636382847777"></omgdc:Bounds> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape bpmnElement="approvalTask2" id="BPMNShape_approvalTask2"> + <omgdc:Bounds height="80.0" width="100.0" x="255.0" y="664.0"></omgdc:Bounds> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape bpmnElement="sid-BEB99CF9-21AB-422C-B5BA-C8F933C4A458" id="BPMNShape_sid-BEB99CF9-21AB-422C-B5BA-C8F933C4A458"> + <omgdc:Bounds height="80.0" width="99.99999999999997" x="101.42750037460016" y="664.0"></omgdc:Bounds> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape bpmnElement="sid-2C59B75E-D7BA-415A-8AA4-96DF9D54560A" id="BPMNShape_sid-2C59B75E-D7BA-415A-8AA4-96DF9D54560A"> + <omgdc:Bounds height="40.0" width="40.0" x="420.0" y="684.0"></omgdc:Bounds> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape bpmnElement="sid-323AD77E-874D-4856-8E22-825D25989EE2" id="BPMNShape_sid-323AD77E-874D-4856-8E22-825D25989EE2"> + <omgdc:Bounds height="80.0" width="100.0" x="510.0" y="664.0"></omgdc:Bounds> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape bpmnElement="sid-EAE0F188-EA97-4818-B99D-70259F2307B0" id="BPMNShape_sid-EAE0F188-EA97-4818-B99D-70259F2307B0"> + <omgdc:Bounds height="80.0" width="100.0" x="510.0" y="825.0"></omgdc:Bounds> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape bpmnElement="sid-0ADBAADA-F257-4C7F-9AC1-9565AD03DEB7" id="BPMNShape_sid-0ADBAADA-F257-4C7F-9AC1-9565AD03DEB7"> + <omgdc:Bounds height="80.0" width="100.0" x="105.0" y="383.8636382847777"></omgdc:Bounds> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape bpmnElement="sid-93501888-538B-4BAE-8AE6-711A3FECA4FE" id="BPMNShape_sid-93501888-538B-4BAE-8AE6-711A3FECA4FE"> + <omgdc:Bounds height="80.0" width="100.0" x="930.0" y="525.0"></omgdc:Bounds> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape bpmnElement="sid-90F027C6-9870-40C1-8BCF-A96A25F76AF5" id="BPMNShape_sid-90F027C6-9870-40C1-8BCF-A96A25F76AF5"> + <omgdc:Bounds height="28.0" width="28.0" x="1065.0" y="551.0"></omgdc:Bounds> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape bpmnElement="sid-C4B0ADE8-A005-4AC8-8E47-1E223E2050F0" id="BPMNShape_sid-C4B0ADE8-A005-4AC8-8E47-1E223E2050F0"> + <omgdc:Bounds height="80.0" width="100.0" x="690.0" y="525.0"></omgdc:Bounds> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape bpmnElement="sid-3B123F1B-D924-4EE3-99E7-B91E776A0F69" id="BPMNShape_sid-3B123F1B-D924-4EE3-99E7-B91E776A0F69"> + <omgdc:Bounds height="28.0" width="28.0" x="825.0" y="551.0"></omgdc:Bounds> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape bpmnElement="sid-309E736B-EF85-4334-965B-DB8974B26011" id="BPMNShape_sid-309E736B-EF85-4334-965B-DB8974B26011"> + <omgdc:Bounds height="80.0" width="100.0" x="690.0" y="209.0"></omgdc:Bounds> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape bpmnElement="sid-64F6F0E9-85B8-43C7-84A8-F29A4C31D81F" id="BPMNShape_sid-64F6F0E9-85B8-43C7-84A8-F29A4C31D81F"> + <omgdc:Bounds height="80.0" width="100.0" x="690.0" y="383.8636382847777"></omgdc:Bounds> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape bpmnElement="sid-C375332E-BD9B-44E5-8498-61736B7E806C" id="BPMNShape_sid-C375332E-BD9B-44E5-8498-61736B7E806C"> + <omgdc:Bounds height="80.0" width="100.0" x="690.0" y="664.0"></omgdc:Bounds> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape bpmnElement="sid-13EC2DCF-F704-4F8F-A333-5C18C78B231F" id="BPMNShape_sid-13EC2DCF-F704-4F8F-A333-5C18C78B231F"> + <omgdc:Bounds height="80.0" width="100.0" x="690.0" y="825.0"></omgdc:Bounds> + </bpmndi:BPMNShape> + <bpmndi:BPMNEdge bpmnElement="sid-891A4694-41D0-4F9B-9D91-5C51520C308C" id="BPMNEdge_sid-891A4694-41D0-4F9B-9D91-5C51520C308C"> + <omgdi:waypoint x="789.9499999999999" y="865.0"></omgdi:waypoint> + <omgdi:waypoint x="980.0" y="865.0"></omgdi:waypoint> + <omgdi:waypoint x="980.0" y="604.9499999999999"></omgdi:waypoint> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge bpmnElement="sid-4CB7BA5A-CD2E-4C92-A18B-A9AA73EFAE30" id="BPMNEdge_sid-4CB7BA5A-CD2E-4C92-A18B-A9AA73EFAE30"> + <omgdi:waypoint x="789.9499999999477" y="249.0"></omgdi:waypoint> + <omgdi:waypoint x="980.0" y="249.0"></omgdi:waypoint> + <omgdi:waypoint x="980.0" y="525.0"></omgdi:waypoint> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge bpmnElement="sid-57A915C4-CDCE-4D1F-AFEF-B61495262C8C" id="BPMNEdge_sid-57A915C4-CDCE-4D1F-AFEF-B61495262C8C"> + <omgdi:waypoint x="59.9499984899576" y="423.8636382847777"></omgdi:waypoint> + <omgdi:waypoint x="105.0" y="423.8636382847777"></omgdi:waypoint> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge bpmnElement="sid-41EB3FF5-F96D-49CE-8813-5B36FA4392BB" id="BPMNEdge_sid-41EB3FF5-F96D-49CE-8813-5B36FA4392BB"> + <omgdi:waypoint x="459.941694421308" y="423.8636382847777"></omgdi:waypoint> + <omgdi:waypoint x="509.9999999999096" y="423.8636382847777"></omgdi:waypoint> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge bpmnElement="sid-8142B71B-3DC1-4099-9F3A-F0DB9D0E59E3" id="BPMNEdge_sid-8142B71B-3DC1-4099-9F3A-F0DB9D0E59E3"> + <omgdi:waypoint x="1029.9499999998811" y="565.0"></omgdi:waypoint> + <omgdi:waypoint x="1065.0" y="565.0"></omgdi:waypoint> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge bpmnElement="sid-E529BD6B-1A6A-44AF-A487-5B47D641D22D" id="BPMNEdge_sid-E529BD6B-1A6A-44AF-A487-5B47D641D22D"> + <omgdi:waypoint x="354.9499999999327" y="704.0"></omgdi:waypoint> + <omgdi:waypoint x="420.0" y="704.0"></omgdi:waypoint> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge bpmnElement="sid-73E245F8-F8AC-4EFC-A339-7B3716A67C0D" id="BPMNEdge_sid-73E245F8-F8AC-4EFC-A339-7B3716A67C0D"> + <omgdi:waypoint x="740.0" y="664.0"></omgdi:waypoint> + <omgdi:waypoint x="740.0" y="604.9499999999999"></omgdi:waypoint> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge bpmnElement="sid-422FE8C4-DC10-467D-A400-EA087E865F74" id="BPMNEdge_sid-422FE8C4-DC10-467D-A400-EA087E865F74"> + <omgdi:waypoint x="440.0" y="403.8636382847777"></omgdi:waypoint> + <omgdi:waypoint x="440.0" y="250.0"></omgdi:waypoint> + <omgdi:waypoint x="509.9999999999779" y="250.0"></omgdi:waypoint> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge bpmnElement="sid-DA26ED45-18EB-4C4E-A087-63F5FF8FBC80" id="BPMNEdge_sid-DA26ED45-18EB-4C4E-A087-63F5FF8FBC80"> + <omgdi:waypoint x="609.9499999999998" y="704.0"></omgdi:waypoint> + <omgdi:waypoint x="690.0" y="704.0"></omgdi:waypoint> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge bpmnElement="sid-830D5DD8-CA32-4A5C-929C-86DBFD5CF289" id="BPMNEdge_sid-830D5DD8-CA32-4A5C-929C-86DBFD5CF289"> + <omgdi:waypoint x="609.9499999999431" y="423.8636382847777"></omgdi:waypoint> + <omgdi:waypoint x="689.9999999996652" y="423.8636382847777"></omgdi:waypoint> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge bpmnElement="sid-7133F014-E561-45C5-99A2-EF6398DA3E49" id="BPMNEdge_sid-7133F014-E561-45C5-99A2-EF6398DA3E49"> + <omgdi:waypoint x="789.9499999998811" y="565.0"></omgdi:waypoint> + <omgdi:waypoint x="825.0" y="565.0"></omgdi:waypoint> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge bpmnElement="sid-F9ABC3A1-CC1C-4884-A1DE-E8807C0AEB39" id="BPMNEdge_sid-F9ABC3A1-CC1C-4884-A1DE-E8807C0AEB39"> + <omgdi:waypoint x="740.0" y="463.81363828477777"></omgdi:waypoint> + <omgdi:waypoint x="740.0" y="525.0"></omgdi:waypoint> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge bpmnElement="sid-8A3C7A28-71DD-47C8-9521-803C72A803E9" id="BPMNEdge_sid-8A3C7A28-71DD-47C8-9521-803C72A803E9"> + <omgdi:waypoint x="440.0" y="443.8012062654454"></omgdi:waypoint> + <omgdi:waypoint x="440.0" y="504.0"></omgdi:waypoint> + <omgdi:waypoint x="151.0" y="504.0"></omgdi:waypoint> + <omgdi:waypoint x="151.3420002996801" y="664.0"></omgdi:waypoint> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge bpmnElement="sid-F53A65E8-181B-44FD-BCA3-38F530D6C717" id="BPMNEdge_sid-F53A65E8-181B-44FD-BCA3-38F530D6C717"> + <omgdi:waypoint x="459.9416944213154" y="704.0"></omgdi:waypoint> + <omgdi:waypoint x="510.0" y="704.0"></omgdi:waypoint> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge bpmnElement="sid-095E3C78-BB9A-4E49-944B-16F7ABA8F097" id="BPMNEdge_sid-095E3C78-BB9A-4E49-944B-16F7ABA8F097"> + <omgdi:waypoint x="204.95" y="423.8636382847777"></omgdi:waypoint> + <omgdi:waypoint x="255.0" y="423.8636382847777"></omgdi:waypoint> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge bpmnElement="sid-4A941651-157C-4676-BA3D-ECF897AF0FCD" id="BPMNEdge_sid-4A941651-157C-4676-BA3D-ECF897AF0FCD"> + <omgdi:waypoint x="440.0" y="723.9438081936685"></omgdi:waypoint> + <omgdi:waypoint x="440.0" y="865.0"></omgdi:waypoint> + <omgdi:waypoint x="509.9999999998528" y="865.0"></omgdi:waypoint> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge bpmnElement="sid-24CE050E-5CA0-4410-9359-EAAA687200E3" id="BPMNEdge_sid-24CE050E-5CA0-4410-9359-EAAA687200E3"> + <omgdi:waypoint x="354.94999999972237" y="423.8636382847777"></omgdi:waypoint> + <omgdi:waypoint x="420.0" y="423.8636382847777"></omgdi:waypoint> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge bpmnElement="sid-BC4E1929-6C63-42F3-8086-A671EAA09D2E" id="BPMNEdge_sid-BC4E1929-6C63-42F3-8086-A671EAA09D2E"> + <omgdi:waypoint x="201.37750037447097" y="704.0"></omgdi:waypoint> + <omgdi:waypoint x="255.0" y="704.0"></omgdi:waypoint> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge bpmnElement="sid-E6F2BF23-4ACB-4426-BB61-AEA55BA6691E" id="BPMNEdge_sid-E6F2BF23-4ACB-4426-BB61-AEA55BA6691E"> + <omgdi:waypoint x="609.9499999999981" y="249.72222222222223"></omgdi:waypoint> + <omgdi:waypoint x="690.0" y="249.2775"></omgdi:waypoint> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge bpmnElement="sid-12B876BD-B89E-4E27-84F4-2A3E9D33AE36" id="BPMNEdge_sid-12B876BD-B89E-4E27-84F4-2A3E9D33AE36"> + <omgdi:waypoint x="609.9499999999998" y="865.0"></omgdi:waypoint> + <omgdi:waypoint x="690.0" y="865.0"></omgdi:waypoint> + </bpmndi:BPMNEdge> + </bpmndi:BPMNPlane> + </bpmndi:BPMNDiagram> +</definitions> \ No newline at end of file diff --git a/others/Workflows/AdvertisingShipment.bpmn20.xml b/others/Workflows/AdvertisingShipment.bpmn20.xml new file mode 100644 index 0000000000000000000000000000000000000000..260461ae913e6fbad7d7a8b31580ff889210ca26 --- /dev/null +++ b/others/Workflows/AdvertisingShipment.bpmn20.xml @@ -0,0 +1,208 @@ +<?xml version="1.0" encoding="UTF-8"?> +<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.flowable.org/processdef"> + <signal id="mailSignal" name="mailSignal" flowable:scope="processInstance"></signal> + <process id="AdvertisingShipment" name="AdvertisingShipment" isExecutable="true"> + <documentation>Workflow for handling Advertisingmaterials</documentation> + <startEvent id="startEvent1" flowable:formFieldValidation="true"></startEvent> + <exclusiveGateway id="sid-ADD3DA2A-E320-4E07-9D04-73D8A9625D1E"></exclusiveGateway> + <userTask id="sid-3EB74D83-9BE8-427C-A5E8-72D906429892" name="Test Post Versand" flowable:candidateGroups="PROJECT_OfficeStaff,PROJECT_Marketing" flowable:formFieldValidation="true"> + <extensionElements> + <modeler:group-info-name-PROJECT_OfficeStaff xmlns:modeler="http://flowable.org/modeler"><![CDATA[Office staff]]></modeler:group-info-name-PROJECT_OfficeStaff> + <modeler:group-info-name-PROJECT_Marketing xmlns:modeler="http://flowable.org/modeler"><![CDATA[Marketing]]></modeler:group-info-name-PROJECT_Marketing> + <modeler:activiti-idm-candidate-group xmlns:modeler="http://flowable.org/modeler"><![CDATA[true]]></modeler:activiti-idm-candidate-group> + <modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler"><![CDATA[false]]></modeler:initiator-can-complete> + </extensionElements> + </userTask> + <sequenceFlow id="sid-ACF9E71A-09F3-4CCE-9B2D-02FD5A9CF2CF" sourceRef="startEvent1" targetRef="sid-ADD3DA2A-E320-4E07-9D04-73D8A9625D1E"></sequenceFlow> + <userTask id="sid-828D69F8-74EE-44F3-9C04-FB6CC917E567" name="Follow Up" flowable:assignee="_____USER_bcdfb521-c7d0-4ef1-8916-78e7d3232046" flowable:formFieldValidation="true"> + <extensionElements> + <modeler:activiti-idm-assignee xmlns:modeler="http://flowable.org/modeler"><![CDATA[true]]></modeler:activiti-idm-assignee> + <modeler:assignee-info-email xmlns:modeler="http://flowable.org/modeler"><![CDATA[Admin@domain.local]]></modeler:assignee-info-email> + <modeler:assignee-info-firstname xmlns:modeler="http://flowable.org/modeler"><![CDATA[Tim]]></modeler:assignee-info-firstname> + <modeler:assignee-info-lastname xmlns:modeler="http://flowable.org/modeler"><![CDATA[Admin]]></modeler:assignee-info-lastname> + <modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler"><![CDATA[false]]></modeler:initiator-can-complete> + </extensionElements> + </userTask> + <endEvent id="sid-785C1C38-7475-4F78-805D-F6CFCED544C9"></endEvent> + <userTask id="sid-1308BC22-CE93-4ECD-95A8-E009C8FA2505" name="Werbemittel Mail Versenden" flowable:candidateGroups="PROJECT_FieldStaff,PROJECT_Workflow" flowable:formFieldValidation="true"> + <extensionElements> + <modeler:group-info-name-PROJECT_FieldStaff xmlns:modeler="http://flowable.org/modeler"><![CDATA[Field staff]]></modeler:group-info-name-PROJECT_FieldStaff> + <modeler:group-info-name-PROJECT_Workflow xmlns:modeler="http://flowable.org/modeler"><![CDATA[Workflow management]]></modeler:group-info-name-PROJECT_Workflow> + <modeler:activiti-idm-candidate-group xmlns:modeler="http://flowable.org/modeler"><![CDATA[true]]></modeler:activiti-idm-candidate-group> + <modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler"><![CDATA[false]]></modeler:initiator-can-complete> + </extensionElements> + </userTask> + <sequenceFlow id="sid-D040582B-7687-4B57-BEFC-CA715F8B5320" sourceRef="sid-ADD3DA2A-E320-4E07-9D04-73D8A9625D1E" targetRef="sid-1308BC22-CE93-4ECD-95A8-E009C8FA2505"> + <conditionExpression xsi:type="tFormalExpression"><![CDATA[${delivery == "ADVERTDELIVERYMAIL"}]]></conditionExpression> + </sequenceFlow> + <exclusiveGateway id="sid-19E20AD1-1CD1-4BDD-976D-7E24FDC06CD7"></exclusiveGateway> + <intermediateCatchEvent id="sid-27DD0029-0D40-4FC1-B8D3-5DD98F3895B3"> + <timerEventDefinition> + <timeDuration>PT5M</timeDuration> + </timerEventDefinition> + </intermediateCatchEvent> + <serviceTask id="sid-7FF5D2A6-32A1-4D4F-85DD-04CDCC41A043" name="Update AdvItems (digital)" flowable:class="de.adito.aditoweb.server.neon.workflow.WorkflowServiceTask"> + <extensionElements> + <flowable:field name="jditoProcess"> + <flowable:string><![CDATA[UpdateAdvertisingItem_workflowService]]></flowable:string> + </flowable:field> + <flowable:field name="taskVariables"> + <flowable:string><![CDATA[{"handover":{"value":"ADVERTDELIVERYMAIL"}}]]></flowable:string> + </flowable:field> + </extensionElements> + </serviceTask> + <sequenceFlow id="sid-032157AE-7941-48B8-A886-9FEB30AC103C" sourceRef="sid-7FF5D2A6-32A1-4D4F-85DD-04CDCC41A043" targetRef="sid-27DD0029-0D40-4FC1-B8D3-5DD98F3895B3"> + <conditionExpression xsi:type="tFormalExpression"><![CDATA[${mailSent == "true"}]]></conditionExpression> + </sequenceFlow> + <serviceTask id="sid-8F3780E2-4684-42D5-B9FC-8DF72F5752B6" name="Update AdvItems (post)" flowable:class="de.adito.aditoweb.server.neon.workflow.WorkflowServiceTask"> + <extensionElements> + <flowable:field name="jditoProcess"> + <flowable:string><![CDATA[UpdateAdvertisingItem_workflowService]]></flowable:string> + </flowable:field> + <flowable:field name="taskVariables"> + <flowable:string><![CDATA[{"handover":{"value":"ADVERTDELIVERYPOST"}}]]></flowable:string> + </flowable:field> + </extensionElements> + </serviceTask> + <sequenceFlow id="sid-E33EEC6E-65E0-4D53-914C-28621F88A1B1" sourceRef="sid-8F3780E2-4684-42D5-B9FC-8DF72F5752B6" targetRef="sid-27DD0029-0D40-4FC1-B8D3-5DD98F3895B3"></sequenceFlow> + <sequenceFlow id="sid-0F0ACC93-ABA5-420F-B9AB-A70624485D1F" sourceRef="sid-3EB74D83-9BE8-427C-A5E8-72D906429892" targetRef="sid-8F3780E2-4684-42D5-B9FC-8DF72F5752B6"></sequenceFlow> + <serviceTask id="sid-322126ED-DB94-482C-9844-46E138CE57B3" name="Update AdvItems (personal)" flowable:class="de.adito.aditoweb.server.neon.workflow.WorkflowServiceTask"> + <extensionElements> + <flowable:field name="jditoProcess"> + <flowable:string><![CDATA[UpdateAdvertisingItem_workflowService]]></flowable:string> + </flowable:field> + <flowable:field name="taskVariables"> + <flowable:string><![CDATA[{"handover":{"value":"ADVERTDELIVERYPERSONAL"}}]]></flowable:string> + </flowable:field> + </extensionElements> + </serviceTask> + <sequenceFlow id="sid-7EEACFAD-C663-4B33-AC19-B72B0EFA534F" sourceRef="sid-322126ED-DB94-482C-9844-46E138CE57B3" targetRef="sid-27DD0029-0D40-4FC1-B8D3-5DD98F3895B3"> + <conditionExpression xsi:type="tFormalExpression"><![CDATA[${delivery == "ADVERTDELIVERYPERSONAL"}]]></conditionExpression> + </sequenceFlow> + <sequenceFlow id="sid-BBCE9B58-7F5C-401E-BAF2-5AB084059E13" sourceRef="sid-27DD0029-0D40-4FC1-B8D3-5DD98F3895B3" targetRef="sid-828D69F8-74EE-44F3-9C04-FB6CC917E567"></sequenceFlow> + <serviceTask id="sid-88DF8BDF-BE38-4CED-941B-1D300F4ED1F6" name="Update Advertising (followed up)" flowable:class="de.adito.aditoweb.server.neon.workflow.WorkflowServiceTask"> + <extensionElements> + <flowable:field name="jditoProcess"> + <flowable:string><![CDATA[UpdateAdvertising_workflowService]]></flowable:string> + </flowable:field> + </extensionElements> + </serviceTask> + <sequenceFlow id="sid-AC135DE4-9506-4A07-A6CC-F32496A0C33B" sourceRef="sid-828D69F8-74EE-44F3-9C04-FB6CC917E567" targetRef="sid-88DF8BDF-BE38-4CED-941B-1D300F4ED1F6"></sequenceFlow> + <sequenceFlow id="sid-A53578EC-C5BE-41A3-A1B1-5BCC872ABB61" sourceRef="sid-88DF8BDF-BE38-4CED-941B-1D300F4ED1F6" targetRef="sid-785C1C38-7475-4F78-805D-F6CFCED544C9"></sequenceFlow> + <sequenceFlow id="sid-B60244D3-19F0-4BC8-997F-804DBC2850F9" sourceRef="sid-1308BC22-CE93-4ECD-95A8-E009C8FA2505" targetRef="sid-19E20AD1-1CD1-4BDD-976D-7E24FDC06CD7"></sequenceFlow> + <sequenceFlow id="sid-37DBC43E-EB3D-4A5D-BD94-0A5959C9E981" sourceRef="sid-19E20AD1-1CD1-4BDD-976D-7E24FDC06CD7" targetRef="sid-1308BC22-CE93-4ECD-95A8-E009C8FA2505"> + <conditionExpression xsi:type="tFormalExpression"><![CDATA[${mailSent == "false"}]]></conditionExpression> + </sequenceFlow> + <sequenceFlow id="sid-61505F8C-85D1-40BB-A46B-BB9C3ED22463" sourceRef="sid-19E20AD1-1CD1-4BDD-976D-7E24FDC06CD7" targetRef="sid-7FF5D2A6-32A1-4D4F-85DD-04CDCC41A043"> + <conditionExpression xsi:type="tFormalExpression"><![CDATA[${mailSent == "true"}]]></conditionExpression> + </sequenceFlow> + <sequenceFlow id="sid-DCF3C9E3-11F6-41DC-BC1E-01398DE3996C" sourceRef="sid-ADD3DA2A-E320-4E07-9D04-73D8A9625D1E" targetRef="sid-3EB74D83-9BE8-427C-A5E8-72D906429892"> + <conditionExpression xsi:type="tFormalExpression"><![CDATA[${delivery == "ADVERTDELIVERYPOST"}]]></conditionExpression> + </sequenceFlow> + <sequenceFlow id="sid-05094B76-74A3-4155-83FE-5865FF706582" sourceRef="sid-ADD3DA2A-E320-4E07-9D04-73D8A9625D1E" targetRef="sid-322126ED-DB94-482C-9844-46E138CE57B3"> + <conditionExpression xsi:type="tFormalExpression"><![CDATA[${delivery == "ADVERTDELIVERYPERSONAL"}]]></conditionExpression> + </sequenceFlow> + </process> + <bpmndi:BPMNDiagram id="BPMNDiagram_AdvertisingShipment"> + <bpmndi:BPMNPlane bpmnElement="AdvertisingShipment" id="BPMNPlane_AdvertisingShipment"> + <bpmndi:BPMNShape bpmnElement="startEvent1" id="BPMNShape_startEvent1"> + <omgdc:Bounds height="30.0" width="30.0" x="90.0" y="450.0"></omgdc:Bounds> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape bpmnElement="sid-ADD3DA2A-E320-4E07-9D04-73D8A9625D1E" id="BPMNShape_sid-ADD3DA2A-E320-4E07-9D04-73D8A9625D1E"> + <omgdc:Bounds height="40.0" width="40.0" x="180.0" y="445.0"></omgdc:Bounds> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape bpmnElement="sid-3EB74D83-9BE8-427C-A5E8-72D906429892" id="BPMNShape_sid-3EB74D83-9BE8-427C-A5E8-72D906429892"> + <omgdc:Bounds height="80.0" width="100.0" x="345.0" y="425.0"></omgdc:Bounds> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape bpmnElement="sid-828D69F8-74EE-44F3-9C04-FB6CC917E567" id="BPMNShape_sid-828D69F8-74EE-44F3-9C04-FB6CC917E567"> + <omgdc:Bounds height="80.0" width="100.0" x="960.0" y="423.0"></omgdc:Bounds> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape bpmnElement="sid-785C1C38-7475-4F78-805D-F6CFCED544C9" id="BPMNShape_sid-785C1C38-7475-4F78-805D-F6CFCED544C9"> + <omgdc:Bounds height="28.0" width="28.0" x="1275.0" y="449.0"></omgdc:Bounds> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape bpmnElement="sid-1308BC22-CE93-4ECD-95A8-E009C8FA2505" id="BPMNShape_sid-1308BC22-CE93-4ECD-95A8-E009C8FA2505"> + <omgdc:Bounds height="80.0" width="100.0" x="345.0" y="615.0"></omgdc:Bounds> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape bpmnElement="sid-19E20AD1-1CD1-4BDD-976D-7E24FDC06CD7" id="BPMNShape_sid-19E20AD1-1CD1-4BDD-976D-7E24FDC06CD7"> + <omgdc:Bounds height="40.0" width="40.0" x="513.25" y="635.0"></omgdc:Bounds> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape bpmnElement="sid-27DD0029-0D40-4FC1-B8D3-5DD98F3895B3" id="BPMNShape_sid-27DD0029-0D40-4FC1-B8D3-5DD98F3895B3"> + <omgdc:Bounds height="31.0" width="31.0" x="840.0" y="447.5"></omgdc:Bounds> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape bpmnElement="sid-7FF5D2A6-32A1-4D4F-85DD-04CDCC41A043" id="BPMNShape_sid-7FF5D2A6-32A1-4D4F-85DD-04CDCC41A043"> + <omgdc:Bounds height="80.0" width="100.0" x="645.0" y="615.0"></omgdc:Bounds> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape bpmnElement="sid-8F3780E2-4684-42D5-B9FC-8DF72F5752B6" id="BPMNShape_sid-8F3780E2-4684-42D5-B9FC-8DF72F5752B6"> + <omgdc:Bounds height="80.0" width="100.0" x="645.0" y="423.0"></omgdc:Bounds> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape bpmnElement="sid-322126ED-DB94-482C-9844-46E138CE57B3" id="BPMNShape_sid-322126ED-DB94-482C-9844-46E138CE57B3"> + <omgdc:Bounds height="80.0" width="100.0" x="645.0" y="315.0"></omgdc:Bounds> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape bpmnElement="sid-88DF8BDF-BE38-4CED-941B-1D300F4ED1F6" id="BPMNShape_sid-88DF8BDF-BE38-4CED-941B-1D300F4ED1F6"> + <omgdc:Bounds height="80.0" width="100.0" x="1110.0" y="421.0"></omgdc:Bounds> + </bpmndi:BPMNShape> + <bpmndi:BPMNEdge bpmnElement="sid-7EEACFAD-C663-4B33-AC19-B72B0EFA534F" id="BPMNEdge_sid-7EEACFAD-C663-4B33-AC19-B72B0EFA534F"> + <omgdi:waypoint x="744.9499999999999" y="353.4375"></omgdi:waypoint> + <omgdi:waypoint x="855.0" y="350.0"></omgdi:waypoint> + <omgdi:waypoint x="855.4311769508477" y="447.5000220635932"></omgdi:waypoint> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge bpmnElement="sid-A53578EC-C5BE-41A3-A1B1-5BCC872ABB61" id="BPMNEdge_sid-A53578EC-C5BE-41A3-A1B1-5BCC872ABB61"> + <omgdi:waypoint x="1209.949999999999" y="461.77441860465115"></omgdi:waypoint> + <omgdi:waypoint x="1275.0010490401473" y="462.78297129004164"></omgdi:waypoint> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge bpmnElement="sid-E33EEC6E-65E0-4D53-914C-28621F88A1B1" id="BPMNEdge_sid-E33EEC6E-65E0-4D53-914C-28621F88A1B1"> + <omgdi:waypoint x="744.9499999999999" y="463.0"></omgdi:waypoint> + <omgdi:waypoint x="840.0" y="463.0"></omgdi:waypoint> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge bpmnElement="sid-032157AE-7941-48B8-A886-9FEB30AC103C" id="BPMNEdge_sid-032157AE-7941-48B8-A886-9FEB30AC103C"> + <omgdi:waypoint x="744.9499999995348" y="655.0"></omgdi:waypoint> + <omgdi:waypoint x="855.0" y="655.0"></omgdi:waypoint> + <omgdi:waypoint x="855.4596355506259" y="478.4499487256213"></omgdi:waypoint> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge bpmnElement="sid-AC135DE4-9506-4A07-A6CC-F32496A0C33B" id="BPMNEdge_sid-AC135DE4-9506-4A07-A6CC-F32496A0C33B"> + <omgdi:waypoint x="1059.9499999999955" y="462.3333333333334"></omgdi:waypoint> + <omgdi:waypoint x="1109.99999999999" y="461.66600000000005"></omgdi:waypoint> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge bpmnElement="sid-05094B76-74A3-4155-83FE-5865FF706582" id="BPMNEdge_sid-05094B76-74A3-4155-83FE-5865FF706582"> + <omgdi:waypoint x="200.0" y="445.0"></omgdi:waypoint> + <omgdi:waypoint x="200.0" y="355.0"></omgdi:waypoint> + <omgdi:waypoint x="644.9999999997491" y="355.0"></omgdi:waypoint> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge bpmnElement="sid-BBCE9B58-7F5C-401E-BAF2-5AB084059E13" id="BPMNEdge_sid-BBCE9B58-7F5C-401E-BAF2-5AB084059E13"> + <omgdi:waypoint x="870.9499992086663" y="463.0"></omgdi:waypoint> + <omgdi:waypoint x="959.9999999998549" y="463.0"></omgdi:waypoint> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge bpmnElement="sid-37DBC43E-EB3D-4A5D-BD94-0A5959C9E981" id="BPMNEdge_sid-37DBC43E-EB3D-4A5D-BD94-0A5959C9E981"> + <omgdi:waypoint x="533.1817406143344" y="674.8819112627986"></omgdi:waypoint> + <omgdi:waypoint x="533.0" y="728.0"></omgdi:waypoint> + <omgdi:waypoint x="395.0" y="728.0"></omgdi:waypoint> + <omgdi:waypoint x="395.0" y="694.9499999999999"></omgdi:waypoint> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge bpmnElement="sid-B60244D3-19F0-4BC8-997F-804DBC2850F9" id="BPMNEdge_sid-B60244D3-19F0-4BC8-997F-804DBC2850F9"> + <omgdi:waypoint x="444.94999999969986" y="655.0"></omgdi:waypoint> + <omgdi:waypoint x="513.25" y="655.0"></omgdi:waypoint> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge bpmnElement="sid-0F0ACC93-ABA5-420F-B9AB-A70624485D1F" id="BPMNEdge_sid-0F0ACC93-ABA5-420F-B9AB-A70624485D1F"> + <omgdi:waypoint x="444.9499999999955" y="464.6666666666667"></omgdi:waypoint> + <omgdi:waypoint x="644.9999999999894" y="463.333"></omgdi:waypoint> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge bpmnElement="sid-ACF9E71A-09F3-4CCE-9B2D-02FD5A9CF2CF" id="BPMNEdge_sid-ACF9E71A-09F3-4CCE-9B2D-02FD5A9CF2CF"> + <omgdi:waypoint x="119.94999797575196" y="465.0"></omgdi:waypoint> + <omgdi:waypoint x="180.0" y="465.0"></omgdi:waypoint> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge bpmnElement="sid-61505F8C-85D1-40BB-A46B-BB9C3ED22463" id="BPMNEdge_sid-61505F8C-85D1-40BB-A46B-BB9C3ED22463"> + <omgdi:waypoint x="553.1938368860054" y="655.0"></omgdi:waypoint> + <omgdi:waypoint x="645.0" y="655.0"></omgdi:waypoint> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge bpmnElement="sid-DCF3C9E3-11F6-41DC-BC1E-01398DE3996C" id="BPMNEdge_sid-DCF3C9E3-11F6-41DC-BC1E-01398DE3996C"> + <omgdi:waypoint x="219.9448872373142" y="465.0"></omgdi:waypoint> + <omgdi:waypoint x="345.0" y="465.0"></omgdi:waypoint> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge bpmnElement="sid-D040582B-7687-4B57-BEFC-CA715F8B5320" id="BPMNEdge_sid-D040582B-7687-4B57-BEFC-CA715F8B5320"> + <omgdi:waypoint x="200.0" y="484.94475276170436"></omgdi:waypoint> + <omgdi:waypoint x="200.0" y="655.0"></omgdi:waypoint> + <omgdi:waypoint x="345.0" y="655.0"></omgdi:waypoint> + </bpmndi:BPMNEdge> + </bpmndi:BPMNPlane> + </bpmndi:BPMNDiagram> +</definitions> \ No newline at end of file diff --git a/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod b/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod index 0325b162d02a5c5d22160558bbd184f4a8c34b51..e448ae00cc779a493efa301c40ea398e30caaa46 100644 --- a/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod +++ b/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<preferences xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="3.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/preferences/3.2.2"> +<preferences xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="3.2.3" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/preferences/3.2.3"> <name>_____PREFERENCES_PROJECT</name> <majorModelMode>DISTRIBUTED</majorModelMode> <customized /> @@ -65,14 +65,17 @@ <customBooleanProperty> <name>abbyy.ocr.isEnabled</name> <description>Whether the webservice abbyy ocr, is useable or not.</description> + <property v="true" /> </customBooleanProperty> <customStringProperty> <name>abbyy.ocr.appId</name> <description>The application id for the webservice abbyy ocr.</description> + <property>6aab7125-01a9-4423-8509-4f7aedd4479f</property> </customStringProperty> <customPasswordProperty> <name>abbyy.ocr.password</name> <description>The password for the webservice abbyy ocr.</description> + <property>GMEl6Ue3fBgiKh0+4PKmxAmm</property> </customPasswordProperty> <customPasswordProperty> <name>sigparser.apiKey</name> @@ -90,6 +93,11 @@ <name>geo.maptiler.apikey</name> <description>An API Key for using Maptiler functions. For example for the MapViewTemplate.</description> </customStringProperty> + <customIntegerProperty> + <name>bulkmail.dateToSendPassedAfter</name> + <description>Number of hours after which a planned Bulkmail no longer gets send</description> + <property v="24" /> + </customIntegerProperty> </customConfigProperties> <customProperties> <customBooleanProperty> @@ -101,45 +109,18 @@ <name>dsgvo.active</name> <property v="true" /> </customBooleanProperty> - <customDurationProperty> - <name>dsgvo.deletionTimeDays</name> - <description>Time elapses after delete flag is set until the db entry is automatically deleted</description> - </customDurationProperty> - <customDurationProperty> - <name>dsgvo.deletionTimeMonths</name> - <description>When no history entry exists within that duration to today a delete flag is set</description> - </customDurationProperty> <customBooleanProperty> <name>nominatim.enable</name> <property v="true" /> </customBooleanProperty> <customStringProperty> <name>nominatim.url</name> - <property>https://nom.adito.de/search.php</property> + <property>https://nom.adito.cloud/search.php</property> </customStringProperty> <customStringProperty> <name>nominatim.user</name> <property>aditouser</property> </customStringProperty> - <customIntegerProperty> - <name>duplicates.dataBlockSize</name> - <property v="5000" /> - </customIntegerProperty> - <customBooleanProperty> - <name>workflow.leadExample</name> - <description></description> - <property v="false" /> - </customBooleanProperty> - <customStringProperty> - <name>workflow.modelerUrl</name> - <description></description> - <property>http://localhost:8082/flowable-modeler/</property> - </customStringProperty> - <customBooleanProperty> - <name>ai.salesprojectProbability</name> - <description></description> - <property v="false" /> - </customBooleanProperty> <customPasswordProperty> <name>nominatim.pw</name> <description></description> @@ -149,6 +130,15 @@ <name>nominatim.resultLimit</name> <description>Amount of rows returned by the address search. Default is 10, maximum is 50.</description> </customIntegerProperty> + <customJDitoProperty> + <name>nominatim.filterKeys</name> + <description></description> + <property>%aditoprj%/preferences/_____PREFERENCES_PROJECT/customproperties/nominatim.filterkeys/property.js</property> + </customJDitoProperty> + <customIntegerProperty> + <name>duplicates.dataBlockSize</name> + <property v="5000" /> + </customIntegerProperty> <customBooleanProperty> <name>AD.active</name> <description></description> @@ -185,7 +175,7 @@ <customBooleanProperty> <name>observation.isEnabled</name> <description>Whether the observations are enabled or not</description> - <property v="false" /> + <property v="true" /> </customBooleanProperty> <customBooleanProperty> <name>observation.isMultiselectionEnabled</name> @@ -197,5 +187,20 @@ <description>Default VAT in percent</description> <property>19</property> </customStringProperty> + <customBooleanProperty> + <name>ai.salesprojectProbability</name> + <description></description> + <property v="false" /> + </customBooleanProperty> + <customStringProperty> + <name>bulkmail.fileStorage</name> + <description>Save Location for send Mails. Path is relative to Serverpath</description> + <property>/bulkMailFiles/</property> + </customStringProperty> + <customStringProperty> + <name>mosaico.url</name> + <description>Url of the Mosaico Email Editor</description> + <property></property> + </customStringProperty> </customProperties> </preferences> diff --git a/preferences/_____PREFERENCES_PROJECT/customproperties/nominatim.filterkeys/property.js b/preferences/_____PREFERENCES_PROJECT/customproperties/nominatim.filterkeys/property.js new file mode 100644 index 0000000000000000000000000000000000000000..c0996e08813e781b3c7b2c49541a139438d278a1 --- /dev/null +++ b/preferences/_____PREFERENCES_PROJECT/customproperties/nominatim.filterkeys/property.js @@ -0,0 +1 @@ +["building", "office", "townhall"] \ No newline at end of file diff --git a/process/Advertising_lib/Advertising_lib.aod b/process/Advertising_lib/Advertising_lib.aod new file mode 100644 index 0000000000000000000000000000000000000000..471b2f7e22ab831b7b80379b103b06c8dd8ebe38 --- /dev/null +++ b/process/Advertising_lib/Advertising_lib.aod @@ -0,0 +1,14 @@ +<?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.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> + <name>Advertising_lib</name> + <title>Advertising_lib</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <process>%aditoprj%/process/Advertising_lib/process.js</process> + <loginTypeId> + <element>internal.default</element> + </loginTypeId> + <alias>Data_alias</alias> + <variants> + <element>LIBRARY</element> + </variants> +</process> diff --git a/process/Advertising_lib/process.js b/process/Advertising_lib/process.js new file mode 100644 index 0000000000000000000000000000000000000000..31a0c1579894e69bf501d0efd82743fd8e73f609 --- /dev/null +++ b/process/Advertising_lib/process.js @@ -0,0 +1,225 @@ +import("Contact_lib"); +import("system.logging"); +import("system.translate"); +import("Entity_lib"); +import("Product_lib"); +import("AttributeRegistry_basic"); +import("system.db"); +import("system.neon"); +import("system.vars"); +import("KeywordRegistry_basic"); +import("Util_lib"); +import("Employee_lib"); +import("Sql_lib"); + +/* + * Functions for working with Advertisings + * + * @class + */ +function AdvertisingUtils() {} + + +/* + * Builds the structure for advertisings and its items + * Inserts the structure of Advertisings into the database + * An advertising is always linked to one specific contact + * + * @param {String} pRowId - rowId of the context param e.g Activity -> ActivityId + * @param {String} pContext - contextname to which the Advertising flow is linked to e.g Activity + * @param {Array} pContactIds Array with possible linkable Contacts + * + * @return {void} + */ +AdvertisingUtils.insertAdvertising = function(pRowId, pContext, pContactIds) +{ + //we can only preset the contactID when exactly one Id is passed + var contactId = (pContactIds.length == 1) ? pContactIds : ""; + + var advObj = { + "ROW_ID" : pRowId, + "OBJECT_TYPE" : pContext, + "CONTACT_ID" : contactId, + "RESPONSIBLE_ID" : EmployeeUtils.getCurrentContactId(), + "CURRENCY" : $KeywordRegistry.currency$eur(), + "STATUS" : $KeywordRegistry.advertisingStatus$Open(), + "DATE_NEW": vars.get("$sys.date") + } + + new SqlBuilder().insertFields(advObj, "ADVERTISING", "ADVERTISINGID", "ADVERTISINGID"); +} + +/* + * checks if the passed rowId is linked to an Advertising + * + * @param {String} pRowId - e.g activityId + * + * @return {Boolean} + */ +AdvertisingUtils.hasAdvertising = function(pRowId) +{ + var sql = new SqlBuilder() + .select("ADVERTISING.ADVERTISINGID") + .from("ADVERTISING") + .where(); + + if(pRowId) + { + sql.andIfSet("ADVERTISING.ROW_ID", pRowId); + } + + return Utils.toBoolean(sql.cell()); +} + +/* + * gets the next available item position for the passed AdvertisingId + * + * @param {String} pAdvertisingId - Id of the Advertising (uId) + * + * @return {int} item position + */ +AdvertisingUtils.getNextItemPos = function (pAdvertisingId) +{ + var itemPos = 1; + if(pAdvertisingId) + { + var itemPosStr = newSelect("max(ADVERTISINGITEM.ITEMPOSITION)") + .from("ADVERTISINGITEM") + .where("ADVERTISINGITEM.ADVERTISING_ID", pAdvertisingId) + .cell(); + + if(itemPosStr) + { + itemPos = parseInt(itemPosStr, 10); + itemPos++; + } + } + return itemPos; +} +/* +* checks if the advertising is editable, currently it's editable when it's not sent and not followed up +* +* @param {String} pStatus - the current Status of an advertising +* +* @return {Boolean} true if editable else false + */ +AdvertisingUtils.isEditable = function(pStatus) +{ + return pStatus != $KeywordRegistry.advertisingStatus$followedUp() && pStatus != $KeywordRegistry.advertisingStatus$Sent(); +} + +/* + * checks if a product is a digital advertising material + * + * @param {String} pProductId - uId of a product + * + * @return {Boolean} true when it is a digital advertising material otherwise false + */ +AdvertisingUtils.isDigitalAdvertisingProduct = function (pProductId) +{ + return Utils.toBoolean(newSelect("PRODUCT.DIGITAL") + .from("PRODUCT") + .where("PRODUCT.PRODUCTID", pProductId) + .and("PRODUCT.ADVERTISING", "Y") + .cell() + ); +} + +/* + * returns the condition for the filterextension Condition located in Person + * + * @return {String} additional where condition + */ +AdvertisingUtils.getAdvertisingFilterExtensionCondition = function() +{ + var filterCond = vars.get("$local.condition"); + var columnPlaceholder = vars.get("$local.columnPlaceholder"); + + var condition = StringUtils.replaceAll(filterCond, columnPlaceholder, "ADVERTISING.DATE_NEW"); + + var cond = new SqlBuilder().where("CONTACT.CONTACTID", + newSelect("ADVERTISING.CONTACT_ID").from("ADVERTISING").where(condition), SqlBuilder.IN()).toString(); + + return cond; +} + +/* + * gets the Title for a Pricefield with the current currency + * + * @param {String} pTitle current <b>translated</b> Title which should be extended + * @param {String} pCurrency - currency e.g 'EUR' / 'USD' + * + * @return {String} concatinated Title e.g 'Price in EUR' + */ +AdvertisingUtils.getPriceTitleWithCurrency = function(pTitle, pCurrency) +{ + var ret = pTitle; + + if(pCurrency) + { + ret += " "; + ret += translate.text("in") + " " + pCurrency; + } + + return ret; +} + +/* + * gets Advertising relevant details for the passed productId + * + * @param {String} pProductId - id of the product for which the detail should be loaded + * @param {String} pAdvertisingId - AdvertisingId + * @param {String} pQuantity - the quantity of the product, needed to identify the pricelist + * + * @return {Object} Object with productdetails + */ +AdvertisingUtils.getProductObject = function(pProductId, pAdvertisingId, pQuantity) +{ + var productId = pProductId; + var advertisingId = pAdvertisingId; + var quantity = pQuantity; + + var productDetails = {}; + + if(productId) + { + var advInfo = newSelect("ADVERTISING.CURRENCY, ADVERTISING.CONTACT_ID") + .from("ADVERTISING") + .where("ADVERTISING.ADVERTISINGID", advertisingId) + .arrayRow(); + + var curr = (advInfo[0]) ? advInfo[0] : ""; + var contactid = (advInfo[1]) ? advInfo[1] : ""; + var orgContactId = contactid; + + if(ContactUtils.getContactTypeByContactId(orgContactId) == 3) + { + orgContactId = newSelect("CONTACT.CONTACTID") + .from("CONTACT") + .where("CONTACT.PERSON_ID is null") + .and("CONTACT.ORGANISATION_ID", newSelect("CONTACT.ORGANISATION_ID") + .from("CONTACT") + .where("CONTACT.CONTACTID", orgContactId).cell()) + .cell(); + } + var pricelist = new AttributeRelationQuery(orgContactId, $AttributeRegistry.pricelist()).getSingleAttributeValue() || ""; + + var PriceListFilter = { + currency: curr, + quantity: quantity, + relationId: orgContactId, + priceList: pricelist + }; + + var productInfoSubSql = newSelect("DESCRIPTION") + .from("DESCRIPTIONTRANSLATION") + .whereIfSet("DESCRIPTIONTRANSLATION.OBJECT_ROWID", productId) + .and("DESCRIPTIONTRANSLATION.OBJECT_TYPE", "Product") + .toString(); + + productDetails = ProductUtils.getProductDetails(productId, PriceListFilter, + [["info", "(" + productInfoSubSql + ")"] + ]); + } + return productDetails; +} \ No newline at end of file diff --git a/process/AttributeFilter_lib/process.js b/process/AttributeFilter_lib/process.js index 0e9a44920eed7e6875ee71fec0b1f268187ee71d..eebe63683c593ed8588e5a0ad2891c947b1d9de0 100644 --- a/process/AttributeFilter_lib/process.js +++ b/process/AttributeFilter_lib/process.js @@ -138,12 +138,15 @@ AttributeFilterExtensionMaker.getFilterFields = function(pObjectType) /** * fetches attributes that are filterable and transforms them into filter fields for the current context * + * @param {String} pAlternativeContext If anoter context instead of the current context should be used, the context can be specified with this parameter. + * * @see AttributeFilterExtensionMaker.getFilterFields for more details * @static */ -AttributeFilterExtensionMaker.makeFilterFields = function() +AttributeFilterExtensionMaker.makeFilterFields = function(pAlternativeContext) { - var objectType = ContextUtils.getCurrentContextId(); + var objectType = pAlternativeContext || ContextUtils.getCurrentContextId(); + var res = AttributeFilterExtensionMaker.getFilterFields(objectType); return res; }; @@ -257,12 +260,15 @@ AttributeFilterExtensionMaker.getFilterCondition = function(pObjectType, pFilter /** * Builds a Sql-condition for a attribute filter extension set. This allows to filter for attributes within a db-table * + * @param {String} pAlternativeColumn If anoter column instead of the UID of the table should be used, the column can be specified with this parameter. + * @param {String} pAlternativeContext If anoter context instead of the current context should be used, the context can be specified with this parameter. + * * @see AttributeFilterExtensionMaker.getFilterCondition for more details * @static */ -AttributeFilterExtensionMaker.makeFilterConditionSql = function() +AttributeFilterExtensionMaker.makeFilterConditionSql = function(pAlternativeColumn, pAlternativeContext) { - var objectType = ContextUtils.getCurrentContextId(); + var objectType = pAlternativeContext || ContextUtils.getCurrentContextId(); var filterName = vars.get("$local.name"); var filterCond = vars.get("$local.condition"); var filterRawValue = vars.get("$local.rawvalue"); @@ -270,7 +276,7 @@ AttributeFilterExtensionMaker.makeFilterConditionSql = function() var uidInfo = EntityUtils.parseUidColumn(vars.get("$sys.uidcolumn")); var columnPlaceholder = vars.get("$local.columnPlaceholder"); var res = AttributeFilterExtensionMaker.getFilterCondition(objectType, filterName, filterCond, filterRawValue, filterOpratorName, - uidInfo.table, uidInfo.column, columnPlaceholder); + uidInfo.table, pAlternativeColumn || uidInfo.column, columnPlaceholder); return res; }; diff --git a/process/AttributeRegistry_basic/process.js b/process/AttributeRegistry_basic/process.js index 0d5b68b1c70a1889289312420d1b8902818b0866..030f4c7baaf7e322a0cfd21f278075aa736f6fd0 100644 --- a/process/AttributeRegistry_basic/process.js +++ b/process/AttributeRegistry_basic/process.js @@ -19,6 +19,7 @@ $AttributeRegistry.departments = function(){return "87d4ff5b-0ab6-4534-be26-76c6 $AttributeRegistry.salesprojectType = function(){return "fd3963bc-8e60-411a-9911-b97eb73e5cf7";}; $AttributeRegistry.responsibleADsupervisor = function(){return "c0b26482-c0aa-413d-a9c3-f44c56bd04a9";}; $AttributeRegistry.industry = function(){return "7e9927a4-41e4-426f-bddd-c3e9ee3b093e";}; +$AttributeRegistry.loyalty = function(){return "e73ed929-8631-46de-b28f-eb1423abb808";}; $AttributeRegistry.visitPlanFrequency = function(){return "547b8b9d-88ba-4590-9e01-34d2a58116cc";}; $AttributeRegistry.visitPlanFrequency$monthly = function(){return "8c100817-1d2b-4fc7-8fdd-fd0370e19385";}; @@ -26,3 +27,5 @@ $AttributeRegistry.visitPlanFrequency$semiannually = function(){return "46d87ef7 $AttributeRegistry.visitPlanFrequency$quarterly = function(){return "22722783-aa87-418f-9686-9b97c0639cae";}; $AttributeRegistry.visitPlanFrequency$yearly = function(){return "a9575350-c1e7-4f96-b0ed-a8f52cc8b123";}; $AttributeRegistry.visitPlanPointOfContact = function(){return "7d78320a-31c6-4c24-992a-a583f47caeb5";}; + +$AttributeRegistry.digitalAdvertisingMaterial = function(){return "5a596342-679a-4c55-b368-fad0bd817aa0";}; \ No newline at end of file diff --git a/process/Attribute_lib/process.js b/process/Attribute_lib/process.js index b6f4f0380639ea5cce991ad0f9fc62065b3c8cf5..319191882def4f20d269f98c871bb2398869bfaa 100644 --- a/process/Attribute_lib/process.js +++ b/process/Attribute_lib/process.js @@ -43,7 +43,8 @@ AttributeUtil.getPossibleUsageContexts = function() "DocumentTemplate", "SupportTicket", "Leadimport", - "ImportField" + "ImportField", + "DSGVO" ]; } @@ -77,6 +78,40 @@ AttributeUtil.getPossibleAttributes = function (pObjectType, pIncludeGroups, pFi if (pAttributeCount) { + // get parents of already linked attributes + var parentAttributes = AttributeUtil.getAllParents(Object.keys(pAttributeCount)); + + // get max usage from attribute parents + var parentAttributesMaxCount = []; + + if (parentAttributes.length > 0) + { + // retrieve all max counts of the parent attributes + parentAttributesMaxCount = newSelect("AB_ATTRIBUTEID, MAX_COUNT") + .from("AB_ATTRIBUTEUSAGE") + .join("AB_ATTRIBUTE", "AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID = AB_ATTRIBUTE.AB_ATTRIBUTEID") + .where("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID", parentAttributes, SqlBuilder.IN()) + .and("AB_ATTRIBUTEUSAGE.OBJECT_TYPE", pObjectType) + .table(); + } + + // count how many children of each parent are already linked + var parentChildUsageCount = {}; + parentAttributes.forEach(function(attr) { parentChildUsageCount[attr] = (parentChildUsageCount[attr] || 0) + 1; }); + + // if actual usage >= max usage exclude parent and its children + for each (let parentAttr in parentAttributesMaxCount) + { + if (parentAttr[1] && parentChildUsageCount[parentAttr[0]] >= parentAttr[1]) + { + // exclude this parent and its children + attrSelect.and(newWhere() + .and("AB_ATTRIBUTE.AB_ATTRIBUTEID", parentAttr[0], SqlBuilder.NOT_EQUAL()) + .and("AB_ATTRIBUTE.AB_ATTRIBUTEID", AttributeUtil.getAllChildren(parentAttr[0]), SqlBuilder.NOT_IN()) + ); + } + } + for (let attributeId in pAttributeCount) { attrSelect.and(newWhere() @@ -335,6 +370,37 @@ AttributeUtil.getAllChildren = function (pAttributeIds) return childIds; } +/** + * Returns the ids of all superordinate attributes of an attribute. + * + * @param {String|Array} pAttributeIds <p> + * The id(s) of the attribute(s).<br> + * @return {String[]} <p> + * Array with the ids of every superordinate attribute.<br> + */ +AttributeUtil.getAllParents = function (pAttributeIds) +{ + var parentIds = []; + if (typeof(pAttributeIds) == "string") + pAttributeIds = [pAttributeIds]; + + while (pAttributeIds.length > 0) + { + pAttributeIds = newSelect("ATTRIBUTE_PARENT_ID") + .from("AB_ATTRIBUTE") + .where("AB_ATTRIBUTE.AB_ATTRIBUTEID", pAttributeIds, SqlBuilder.IN()) + .arrayColumn(); + + if (pAttributeIds.length > 0) + parentIds = parentIds.concat(pAttributeIds); + } + + // remove empty array elements + parentIds = parentIds.filter(function (id) { return id != null && id != '' }); + + return parentIds; +} + /** * Checks if an attribute has attribute relations. * @@ -692,8 +758,18 @@ AttributeRelationUtils.validateAttributeCount = function (pRowId, pObjectType, p this[row.AB_ATTRIBUTE_ID] = (this[row.AB_ATTRIBUTE_ID] || 0) + 1; }, countObj); } + if (changedRows) //append the new rows (if they are added by default but not filled with a value) + { + changedRows.forEach(function (row) + { + if(!row.DATE_NEW && !row.USER_NEW) + { + this[row.AB_ATTRIBUTE_ID] = (this[row.AB_ATTRIBUTE_ID] || 0) + 1; + } + }, countObj); + } - var possibleAttributes = AttributeUtil.getPossibleAttributes(pObjectType, undefined, pFilteredAttributeIds); + var possibleAttributes = AttributeUtil.getPossibleAttributes(pObjectType, undefined, pFilteredAttributeIds) || []; var minMaxCounts = []; if (possibleAttributes.length > 0) @@ -707,7 +783,58 @@ AttributeRelationUtils.validateAttributeCount = function (pRowId, pObjectType, p //retrieve all min/max counts of the possible attributes minMaxCounts = minMaxCountsSelect.table(); } + + // attribute ids of current attribute changes (client) and attributerelations (database) + var currentAttributes = []; + for (let attribute in countObj) if (countObj[attribute] > 0) currentAttributes.push(attribute); + + // get all parent attributes of current attributes + var currentParentAttributes = AttributeUtil.getAllParents(currentAttributes); + + // get all possible parent attributes + var possibleParentAttributes = newSelect("distinct ATTRIBUTE_PARENT_ID") + .from("AB_ATTRIBUTE") + .whereIfSet("AB_ATTRIBUTE.AB_ATTRIBUTEID", possibleAttributes, SqlBuilder.IN()) + .arrayColumn(true); + // remove empty elements + possibleParentAttributes = possibleParentAttributes.filter(function (el) { return el != null && el != ""; }); + + // count current usages of parent attributes + var countParentObj = {}; + currentParentAttributes.forEach(function(parentAttribute) { countParentObj[parentAttribute] = (countParentObj[parentAttribute] || 0) + 1; }); + + // add missing possible parent attributes with usage of 0 to countParentObj + var addAttr; + for each (let possibleParent in possibleParentAttributes) + { + addAttr = true; + for (let countParent in countParentObj) + { + if (possibleParent == countParent) + { + addAttr = false; + break; + } + } + + if (addAttr) countParentObj[possibleParent] = 0; + } + + var minMaxParentCounts = []; + + if (possibleParentAttributes.length > 0) + { + var minMaxParentCountsSelect = newSelect("AB_ATTRIBUTEID, ATTRIBUTE_NAME, MIN_COUNT, MAX_COUNT") + .from("AB_ATTRIBUTEUSAGE") + .join("AB_ATTRIBUTE", "AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID = AB_ATTRIBUTE.AB_ATTRIBUTEID") + .where("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID", possibleParentAttributes, SqlBuilder.IN()) + .and("AB_ATTRIBUTEUSAGE.OBJECT_TYPE", pObjectType); + + // retrieve all min/max counts of parent attributes + minMaxParentCounts = minMaxParentCountsSelect.table(); + } + var validationMessage = []; minMaxCounts.forEach(function ([attributeId, name, minCount, maxCount]) { @@ -719,6 +846,16 @@ AttributeRelationUtils.validateAttributeCount = function (pRowId, pObjectType, p validationMessage.push(translate.withArguments("Attribute \"%0\" can't be used more than %1.", [name, _getTranslatedCount(maxCount)])); }, countObj); + minMaxParentCounts.forEach(function ([attributeId, name, minCount, maxCount]) + { + let count = this[attributeId] || 0; + //compares the actual usage with the min and max count and generates a message if the usage is too low or too high + if (count < minCount) + validationMessage.push(translate.withArguments("Attributes of attribute group \"%0\" have to be used at least %1.", [name, _getTranslatedCount(minCount)])); + if (maxCount && count > maxCount) + validationMessage.push(translate.withArguments("Attributes of attribute group \"%0\" can't be used more than %1.", [name, _getTranslatedCount(maxCount)])); + }, countParentObj); + return validationMessage.join("\n"); //returns the correct count expression by choosing either singular (1 time) or plural (2 times) @@ -798,6 +935,7 @@ AttributeRelationUtils.countAttributeRelations = function (pRowId, pObjectType, return countObj; } + /*********************************************************************************************************************/ @@ -2050,4 +2188,4 @@ AttributeRelation.prototype.deleteAttribute = function (pOmitValidation) newWhere("AB_ATTRIBUTERELATION.AB_ATTRIBUTERELATIONID", this.attributeRelationId) .deleteData(); return true; -} \ No newline at end of file +} diff --git a/process/Binary_lib/process.js b/process/Binary_lib/process.js index a1a13b0307be55f2056f24961b76f93f1f89f338..64a4248d912b75af1cc439a0229441112876ad7c 100644 --- a/process/Binary_lib/process.js +++ b/process/Binary_lib/process.js @@ -3,6 +3,51 @@ import("system.vars"); import("system.db"); import("Sql_lib"); +/** + * A static utility class for binarys using database binary functions. + * It provides methods to handle multiple binary data.<br> + * <p> + * <b><u>Do not create an instance of this!</u></b> + * @class + */ +function BinaryUtils() {} + +/** + * Copies the binaries + * + * @param {String} pSourceAssignmentTable <p> + * The source table from which the binary data will fetched.<br> + * (e.g.: ASYS_BINARIES).<br> + * @param {String} pSourceAssignmentRowId <p> + * The source row id.<br> + * (e.g.: UUID of the record)<br> + * @param {String} pTargetAssignmentTable <p> + * The target table from which the binary data will fetched.<br> + * (e.g.: ASYS_BINARIES).<br> + * @param {String} pTargetAssignmentRowId <p> + * The target row id.<br> + * (e.g.: UUID of the record)<br> + * @param {String} pAssignmentName <p> + * The name of the assignment/container name.<br> + * (e.g.: DOCUMENT)<br> + * @param {String} pAlias=SqlUtils.getBinariesAlias() <p> + * The database alias.<br> + * (e.g.: _____SYSTEMALIAS) + */ +BinaryUtils.copyBinaries = function(pSourceAssignmentTable, pSourceAssignmentRowId, pTargetAssignmentTable, pTargetAssignmentRowId, pAssignmentName, pAlias) +{ + pAlias = pAlias || SqlUtils.getBinariesAlias(); + var binMetadata = db.getBinaryMetadata(pSourceAssignmentTable, pAssignmentName, pSourceAssignmentRowId, false, pAlias); + var binContents = db.getBinaryContents(binMetadata.map(function(curr){return curr.id}), pAlias); + for(var i = 0; i < binMetadata.length; i++) + { + db.insertBinary( + pTargetAssignmentTable, pAssignmentName, pTargetAssignmentRowId, "", binContents[i], + binMetadata[i].filename, binMetadata[i].description, binMetadata[i].keyword, pAlias + ); + } +} + /** * A static utility class for binarys using database binary functions. * It provides methods to ensure that only one binary for a AssignmentTable, AssignmentName and AssignmentRowId exist.<br> diff --git a/process/BulkmailAnalysis_lib/BulkmailAnalysis_lib.aod b/process/BulkmailAnalysis_lib/BulkmailAnalysis_lib.aod new file mode 100644 index 0000000000000000000000000000000000000000..122d3f74001a5615d5322426a12b9f69c7789b11 --- /dev/null +++ b/process/BulkmailAnalysis_lib/BulkmailAnalysis_lib.aod @@ -0,0 +1,9 @@ +<?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.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> + <name>BulkmailAnalysis_lib</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <process>%aditoprj%/process/BulkmailAnalysis_lib/process.js</process> + <variants> + <element>LIBRARY</element> + </variants> +</process> diff --git a/process/BulkmailAnalysis_lib/process.js b/process/BulkmailAnalysis_lib/process.js new file mode 100644 index 0000000000000000000000000000000000000000..6c3fbf2597e4a9f73bc6ff7c964467032c0a8a26 --- /dev/null +++ b/process/BulkmailAnalysis_lib/process.js @@ -0,0 +1,127 @@ +import("KeywordRegistry_basic"); +import("Sql_lib"); + +/** + *Object for building a BulkMailAnalysisSql + */ +function BulkMailAnalysisSql () +{ + this._selects = null + this._bulkMailIdField = null + this._bulkMailId = null + this._includeTestMails = false; +} +/** + *Filters the BulkMailAnalysis to only include results from one bulkmail when used as subselect + * + *@param {String} [pBulkMailIdField] the field of the bulkmailid + * + *@return {BulkMailAnalysisSql} current object + */ +BulkMailAnalysisSql.prototype.bulkMailIdField = function (pBulkMailIdField) +{ + this._bulkMailIdField = pBulkMailIdField; + this._bulkMailId = null; + return this; +} + +/** + *Filters the BulkMailAnalysis to only include results from one bulkmail + * + *@param {String} [pBulkMailId] the id of the bulkmail + * + *@return {BulkMailAnalysisSql} current object + */ +BulkMailAnalysisSql.prototype.bulkMailId = function (pBulkMailId) +{ + this._bulkMailIdField = null; + this._bulkMailId = pBulkMailId; + return this; +} + + +/** + *if called the BulkMailAnalysisSql will include testmails + * + *@return {BulkMailAnalysisSql} current object + */ +BulkMailAnalysisSql.prototype.includeTestMails = function () +{ + this._includeTestMails = true; + return this; +} + + +/** + *sets the selects for the BulkMailAnalysisSql + * + *@param [] pSelectTypes Array of BulkMailAnalysisSql.countSelects enum + * + *@return {BulkMailAnalysisSql} current object + */ +BulkMailAnalysisSql.prototype.setSelects = function (pSelectTypes) +{ + this._selects = pSelectTypes; + return this; +} +/** + *Builds the select for the bulkmailanalysissql with the settings configured before + * + * @return {SqlBuilder} SqlBuilder object with the full sql select + */ +BulkMailAnalysisSql.prototype.buildSelect = function() +{ + var sql = new SqlBuilder() + .from("MAIL_RUN") + .join("MAIL_LOG","MAIL_LOG.MAIL_RUN_ID = MAIL_RUN.MAIL_RUNID") + .leftJoin("WEBLINK_CLICK",newWhere("MAIL_LOG.MAIL_LOGID = WEBLINK_CLICK.MAIL_LOG_ID") + .and("WEBLINK_CLICK.WEBLINK_ID" + ,newSelect("WEBLINK.WEBLINKID") + .from("WEBLINK") + .where("WEBLINK.PLACEHOLDER","pixel") + ,SqlBuilder.NOT_EQUAL()) + ) + .where("MAIL_RUN.OBJECT_TYPE","bulkmail"); + + if (this._selects) + { + sql.select(this._selects); + } + + if(!this._includeTestMails) + { + sql.and("MAIL_RUN.TESTRUN","0"); + } + + if(this._bulkMailId) + { + sql.and("MAIL_RUN.OBJECT_ROWID",this._bulkMailId) + } + else if(this._bulkMailIdField) + { + sql.and("MAIL_RUN.OBJECT_ROWID = "+this._bulkMailIdField) + } + + return sql +} + + + +/* + * Defines the subselects used for the bulkmailanalysiscounts + * + * @enum {String} + */ +BulkMailAnalysisSql.countSelects = +{ + CLICKCOUNT:"count(distinct WEBLINK_CLICK.WEBLINK_CLICKID)", + UNIQUECLICKCOUNT:"count(distinct WEBLINK_CLICK.MAIL_LOG_ID)", + OPENERCOUNT:"count(distinct MAIL_LOG.OPENER_LINK_CLICK_ID)", + //todo: Keywordregistry verwenden wenn bounces mit drin sind. + BOUNCECOUNT:"count (distinct case when MAIL_LOG.STATUS in ('EMAILBOUNCED_HARD','EMAILBOUNCED_SOFT') then MAIL_LOG.MAIL_LOGID else null end)", + SOFTBOUNCECOUNT:"count (distinct case when MAIL_LOG.STATUS ='EMAILBOUNCED_SOFT' then MAIL_LOG.MAIL_LOGID else null end)", + HARDBOUNCECOUNT:"count (distinct case when MAIL_LOG.STATUS ='EMAILBOUNCED_HARD' then MAIL_LOG.MAIL_LOGID else null end)", + SENDCOUNT:"count (distinct MAIL_LOG.MAIL_LOGID)", + RECEIVEDCOUNT:"count (distinct case when MAIL_LOG.STATUS='"+$KeywordRegistry.bulkMailRecipientStatus$sent()+"' then MAIL_LOG.MAIL_LOGID else null end)", + UNSUBSCRIBECOUNT:"count (distinct case when WEBLINK_CLICK.WEBLINK_ID = (select WEBLINKID from WEBLINK where WEBLINK.PLACEHOLDER ='rejectEmail') then WEBLINK_CLICK.MAIL_LOG_ID else null end)" +} \ No newline at end of file diff --git a/process/Bulkmail_lib/process.js b/process/Bulkmail_lib/process.js index 92940b61ef2b4badfb3a3188dd049ed3415ef80e..47d89a46ea5ec55ba9f3d56712e2e5c37be4bed6 100644 --- a/process/Bulkmail_lib/process.js +++ b/process/Bulkmail_lib/process.js @@ -1,3 +1,8 @@ +import("system.logging"); +import("system.entities"); +import("MarketingCondition_lib"); +import("system.fileIO"); +import("system.project"); import("Util_lib"); import("system.translate"); import("ActivityTask_lib"); @@ -16,6 +21,9 @@ import("Email_lib"); import("system.process"); import("system.notification"); import("Document_lib"); +import("system.db"); +import("system.workflow"); +import("system.logging"); /** * Functions for bulk mails. @@ -27,14 +35,14 @@ function BulkMailUtils () {} * * @param {String} pBulkMailId <p> * Id of the bulk mail.<br> - * @param {Array} pTestRecipients (optional) <p> - * Overwrite the recipients (e.g. for testing).<br> + * @param {Bool} pTestRun (optional) <p> + * True indicates a Testrun<br> * @param {String} pUser=currentUser (optional) <p> * User that will get the notification, <br> * if null (not undefined!), no notification<br> * will be created.<br> */ -BulkMailUtils.sendBulkMailOnServer = function (pBulkMailId, pTestRecipients, pUser) +BulkMailUtils.sendBulkMailOnServer = function (pBulkMailId, pTestRun, pUser) { if (pUser === undefined) pUser = EmployeeUtils.getCurrentUserId(); @@ -43,10 +51,10 @@ BulkMailUtils.sendBulkMailOnServer = function (pBulkMailId, pTestRecipients, pUs .setName("sendBulkMail_serverProcess") .setLocalVariables({ bulkMailId : pBulkMailId, - testRecipients : JSON.stringify(pTestRecipients), + testRun : pTestRun, user : pUser || "" }) - .setUser(pUser) + .setUser(pUser||"mailbridge") process.startAsync(processConfig); } @@ -56,69 +64,140 @@ BulkMailUtils.sendBulkMailOnServer = function (pBulkMailId, pTestRecipients, pUs * * @param {String} pBulkMailId <p> * Id of the bulk mail.<br> - * @param {Array} pTestRecipients (optional) <p> - * Overwrite the recipients (e.g. for testing)<br> + * @param {Bool} pIsTestRun (optional) <p> + * True indicates a Testrun<br> * @return {Object} <p> * Count of sucessful and failed mails.<br> */ -BulkMailUtils.sendBulkMail = function (pBulkMailId, pTestRecipients) +BulkMailUtils.sendBulkMail = function (pBulkMailId, pIsTestRun) { + if (pIsTestRun == undefined) + { + pIsTestRun = false; + } + var [templateId, subject, emailSender, createActivity, bulkMailName, useTemplateAttachments] = - newSelect("DOCUMENTTEMPLATE_ID, SUBJECT, SENDER, CREATEACTIVITIES, NAME, USE_TEMPLATE_ATTACHMENTS") + newSelect("DOCUMENTTEMPLATE_ID, SUBJECT, SENDER_EMAIL_ADDRESS, CREATEACTIVITIES, NAME, USE_TEMPLATE_ATTACHMENTS") .from("BULKMAIL") .where("BULKMAIL.BULKMAILID", pBulkMailId) .arrayRow(); - useTemplateAttachments = useTemplateAttachments == "1"; + useTemplateAttachments = Utils.toBoolean(useTemplateAttachments); var template = BulkMailUtils.getBulkMailTemplate(pBulkMailId, templateId, true, useTemplateAttachments); - var recipientData; - if (pTestRecipients) - { - recipientData = pTestRecipients.map(function (row) - { - return ["", row[0], row[1], "", ""]; - }); - } - else + var testRecipientData; + + var recipientLoadConfig = entities.createConfigForLoadingRows() + .fields(["BULKMAILRECIPIENTID", "CONTACT_ID", "EMAIL_ADDRESS", "PERSON_ID", "ORGANISATION_ID"]) + .entity("BulkmailRecipient_entity") + .provider("RecipientsToBeMailed") + .addParameter("BulkMailId_param", pBulkMailId) + .addParameter("IsTestMail_param", pIsTestRun); + + recipientData = entities.getRows(recipientLoadConfig); + + if (pIsTestRun) { - recipientData = newSelect("BULKMAILRECIPIENTID, BULKMAILRECIPIENT.CONTACT_ID, BULKMAILRECIPIENT.EMAIL_ADDRESS, PERSON_ID, ORGANISATION_ID") - .from("CONTACT") - .join("BULKMAILRECIPIENT", "BULKMAILRECIPIENT.CONTACT_ID = CONTACT.CONTACTID") - .where("BULKMAILRECIPIENT.BULKMAIL_ID", pBulkMailId) - .and("BULKMAILRECIPIENT.STATUS", $KeywordRegistry.bulkMailRecipientStatus$sent(), SqlBuilder.NOT_EQUAL()) - .and(ContactUtils.getCommRestrictionCondition($KeywordRegistry.communicationMediumCampaign$mail(), true)) + testRecipientData = newSelect("BULKMAILTESTRECIPIENT.CONTACT_ID, BULKMAILTESTRECIPIENT.EMAIL_ADDRESS") + .from("BULKMAILTESTRECIPIENT") + .where("BULKMAILTESTRECIPIENT.BULKMAIL_ID", pBulkMailId) .table(); } - var contactIds = recipientData.map(function (e) {return e[1];}); + var mailrunId = util.getNewUUID(); + + new SqlBuilder() + .tableName("MAIL_RUN") + .insertFields({ + "MAIL_RUNID": mailrunId, + "OBJECT_ROWID": pBulkMailId, + "OBJECT_TYPE": "Bulkmail", + "DATE_RUN_START": vars.get("$sys.date"), + "STATUS": $KeywordRegistry.bulkMailStatus$beingSent(), + "TESTRUN": pIsTestRun ? 1 : 0 + }); + + var mailLogIds = new Map(); + var contactIds = recipientData.map(function (recipient) + { + var contactId = recipient["CONTACT_ID"]; + mailLogIds.set(contactId, util.getNewUUID()); + return contactId; + }); + + var baseUrl = vars.get("$sys.origin") + "/services/rest/redirect_rest?"; + var linkPlaceholders = newSelect(["PLACEHOLDER", "WEBLINKID", "URL", "ISREDIRECT"]) + .from("WEBLINK") + .table() + .map(function ([placeholder, weblinkId, url, isRedirect]) + { + if (Utils.toBoolean(isRedirect)) + { + var linkFn = function (pContactId) + { + return baseUrl + "link=" + weblinkId + "&log=" + mailLogIds.get(pContactId); + } + return new Placeholder(placeholder, Placeholder.types.CALLBACKFUNCTION, linkFn); + } + return new Placeholder(placeholder, Placeholder.types.FIXEDVALUE, url); + }); + + var webviewFn = function(pContactId) + { + return vars.get("$sys.origin")+"/services/rest/webview_rest?" + "log=" + mailLogIds.get(pContactId); + } + var webviewPlaceholder = new Placeholder("webview", Placeholder.types.CALLBACKFUNCTION, webviewFn); + + var additionalPlaceholders = [webviewPlaceholder].concat(linkPlaceholders); + var successIds = []; var failedIds = []; var sentDate = vars.get("$sys.date"); - var mails = template.getReplacedEmailsByContactIds(contactIds); + var mails = template.getReplacedEmailsByContactIds(contactIds, additionalPlaceholders); var subjectTemplate = new DocumentTemplate(subject, DocumentTemplate.types.PLAIN); var subjects = subjectTemplate.getReplacedContentByContactIds(contactIds); var bulkMailLink = [["BulkMail", pBulkMailId]]; var activitySubject = translate.withArguments("Bulk mail \"%0\" sent", [bulkMailName]); - - for (let i = 0, l = recipientData.length; i < l; i++) + if (!pIsTestRun) { - let isSuccess = false; - let contactId = recipientData[i][1]; - let email = mails[contactId]; - if (email !== undefined && recipientData[i][2]) + recipientData.forEach(function (recipient) { - email.toRecipients = [recipientData[i][2]]; - email.sender = emailSender; - email.subject = subjects[contactId]; + let isSuccess = false; + let recipientId = recipient["BULKMAILRECIPIENTID"]; + let contactId = recipient["CONTACT_ID"]; + let emailAddress = recipient["EMAIL_ADDRESS"]; + let personId = recipient["PERSON_ID"]; + let organisationId = recipient["ORGANISATION_ID"]; + let email = mails[contactId]; + let mailLogId = mailLogIds.get(contactId); + if (email !== undefined && emailAddress) + { + email.toRecipients = [emailAddress]; + email.sender = emailSender; + email.subject = subjects[contactId]; - isSuccess = email.send(); - } - if (recipientData[i][0]) //set the recipient status to 'sent' or 'failed' - { - Array.prototype.push.call(isSuccess ? successIds : failedIds, recipientData[i][0]); + BulkMailUtils.storeEmlFile(pBulkMailId, mailrunId, mailLogId,email.getEML()); + isSuccess = email.send(); + } + + //set the recipient status to 'sent' or 'failed' + new SqlBuilder() + .tableName("MAIL_LOG") + .insertFields({ + "MAIL_LOGID": mailLogId, + "MAIL_RUN_ID": mailrunId, + "CONTACT_ID": contactId, + "STATUS": isSuccess ? $KeywordRegistry.bulkMailRecipientStatus$sent() : $KeywordRegistry.bulkMailRecipientStatus$failed(), + "SENDER_EMAIL": emailSender, + "RECIPIENT_EMAIL": emailAddress, + "MAILING_SUBJECT": subjects[contactId], + "DATE_SEND": vars.get("$sys.date") + }); + + //TODO: Klären was von alter Logik noch bleiben soll. Status macht nur Sinn wenn jede Bulkmail nur einmal gesendet wird. Bleiben Activitys? + Array.prototype.push.call(isSuccess ? successIds : failedIds, recipientId); if (isSuccess && createActivity == "1") { let activityData = { @@ -127,23 +206,84 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pTestRecipients) subject : activitySubject, content : email.body }; - let contactLink = [[ContactUtils.getContextByPersOrg(recipientData[i][3], recipientData[i][4]), recipientData[i][1]]]; + let contactLink = [[ContactUtils.getContextByPersOrg(personId, organisationId), contactId]]; ActivityUtils.insertNewActivity(activityData, bulkMailLink.concat(contactLink)); } - } + }); + + newWhereIfSet("BULKMAILRECIPIENT.BULKMAILRECIPIENTID", successIds, SqlBuilder.IN()) + .updateFields({ + "STATUS": $KeywordRegistry.bulkMailRecipientStatus$sent(), + "SENTDATE": sentDate + }); + + newWhereIfSet("BULKMAILRECIPIENT.BULKMAILRECIPIENTID", failedIds, SqlBuilder.IN()) + .updateFields({ + "STATUS": $KeywordRegistry.bulkMailRecipientStatus$failed(), + "SENTDATE": sentDate + }); + + newWhere("MAIL_RUN.MAIL_RUNID", mailrunId) + .updateFields({ + "STATUS": $KeywordRegistry.bulkMailStatus$sent(), + "DATE_RUN_FINISHED": vars.get("$sys.date") + }); + + newWhere("BULKMAIL.BULKMAILID", pBulkMailId) + .updateFields({ + "STATUS": $KeywordRegistry.bulkMailStatus$sent() + }); } - - newWhereIfSet("BULKMAILRECIPIENT.BULKMAILRECIPIENTID", successIds, SqlBuilder.IN()) - .updateData(true, "BULKMAILRECIPIENT", ["STATUS", "SENTDATE"], null, [$KeywordRegistry.bulkMailRecipientStatus$sent(), sentDate]); - - - newWhereIfSet("BULKMAILRECIPIENT.BULKMAILRECIPIENTID", failedIds, SqlBuilder.IN()) - .updateData(true, "BULKMAILRECIPIENT", ["STATUS", "SENTDATE"], null, [$KeywordRegistry.bulkMailRecipientStatus$failed(), sentDate]); - - if (!pTestRecipients) //if its just a test run, don't set the status to sent + else { - newWhere("BULKMAIL.BULKMAILID", pBulkMailId) - .updateData(true, "BULKMAIL", ["STATUS"], null, [$KeywordRegistry.bulkMailStatus$sent()]); + for (let i = 0, l = recipientData.length; i < l; i++) + { + + let isSuccess = false; + let contactId = recipientData[i]["CONTACT_ID"]; + let email = mails[contactId]; + let currentMailLogId = mailLogIds.get(contactId); + + if (email !== undefined) + { + email.sender = emailSender; + email.subject = "Test: "+subjects[contactId]; + for (let j =0; j<testRecipientData.length;j++) + { + if(testRecipientData[j][1]) + { + email.toRecipients = [testRecipientData[j][1]]; + let nextMailLogId = util.getNewUUID(); + email.body = StringUtils.replaceAll(email.body,currentMailLogId,nextMailLogId); + currentMailLogId = nextMailLogId; + isSuccess = email.send(); + + Array.prototype.push.call(isSuccess ? successIds : failedIds, recipientData[i]["BULKMAILRECIPIENTID"]); + + if (testRecipientData[j][0]) + { + new SqlBuilder() + .tableName("MAIL_LOG") + .insertFields({ + "MAIL_LOGID":nextMailLogId, + "MAIL_RUN_ID":mailrunId, + "CONTACT_ID":testRecipientData[j][0], + "STATUS":(isSuccess ?$KeywordRegistry.bulkMailRecipientStatus$sent(): $KeywordRegistry.bulkMailRecipientStatus$failed()), + "SENDER_EMAIL":emailSender, + "RECIPIENT_EMAIL":testRecipientData[j][1], + "MAILING_SUBJECT":email.subject, + "DATE_SEND":vars.get("$sys.date") + }); + this.storeEmlFile(pBulkMailId, mailrunId, nextMailLogId,email.getEML()); + } + } + } + + } + } + newWhere("MAIL_RUN.MAIL_RUNID",mailrunId) + .updateData(true,"MAIL_RUN",["STATUS","DATE_RUN_FINISHED"],null,[$KeywordRegistry.bulkMailStatus$sent(),vars.get("$sys.date")]); + } return { @@ -183,10 +323,13 @@ BulkMailUtils.removeCommRestrictionRecipients = function (pBulkMailId) { var recipientIds = newSelect("BULKMAILRECIPIENTID") .from("BULKMAILRECIPIENT") - .join("CONTACT", newWhere() - .and("BULKMAILRECIPIENT.CONTACT_ID = CONTACT.CONTACTID") - .and(ContactUtils.getCommRestrictionCondition($KeywordRegistry.communicationMediumCampaign$mail()))) + .join("CONTACT", "BULKMAILRECIPIENT.CONTACT_ID = CONTACT.CONTACTID") .where("BULKMAILRECIPIENT.BULKMAIL_ID", pBulkMailId) + .and(new CommunicationSettingsCondition() + .emails("BULKMAILRECIPIENT.EMAIL_ADDRESS") + .rejected() + .existSettings() + .buildCondition()) .arrayColumn(); newWhereIfSet("BULKMAILRECIPIENT.BULKMAILRECIPIENTID", recipientIds, SqlBuilder.IN()) @@ -321,7 +464,11 @@ BulkMailUtils.filterNewRecipients = function (pBulkMailId, pContactIds) .and("BULKMAILRECIPIENT.BULKMAIL_ID", pBulkMailId) , SqlBuilder.NOT_EXISTS()) // check if there's a commrestriction - .and(ContactUtils.getCommRestrictionCondition($KeywordRegistry.communicationMediumCampaign$mail(), true)) + .and(new CommunicationSettingsCondition() + .emails(CommUtil.getStandardSubSqlMail()) + .rejected() + .existNoSettings() + .buildCondition()) .arrayColumn(); } @@ -399,6 +546,153 @@ BulkMailUtils.copy = function(pBulkMailId) }; neon.openContext("BulkMail", null, null, neon.OPERATINGSTATE_NEW, params); } +/* + *Stores the Eml file for a bulkmailrecipient in the Filesystem + * + * @param {String} pBulkMailId <p> + * The id of the bulk mail.<br> + * @param {String} pMailRunId <p> + * The id of the bulk mail run.<br> + * @param {String} pMailLogId <p> + * The id of the corresponding mail log entry.<br> + * @param {String} pFile + **/ +BulkMailUtils.storeEmlFile = function (pBulkMailId, pMailRunId, pMailLogId, pFile) +{ + var locationoption = project.getPreferenceValue("bulkmail.fileStorage", "/bulkMailFiles/"); + var path = vars.get("$sys.serverdata") + locationoption + pBulkMailId + "/" + pMailRunId + "/"; + var filename = pMailLogId + ".eml" + var fullPath = path + filename; + fileIO.storeData(fullPath, pFile, util.DATA_BINARY, false); +} + +/* + *Loads the Eml file for a bulkmailrecipient from the Filesystem + * + * @param {String} pBulkMailId <p> + * The id of the bulk mail.<br> + * @param {String} pMailRunId <p> + * The id of the bulk mail run.<br> + * @param {String} pMailLogId <p> + * The id of the corresponding mail log entry.<br> + * @return {String} <p> + * The file as base64 String<br> + **/ +BulkMailUtils.getEmlFile = function(pBulkMailId,pMailRunId, pMailLogId) +{ + var locationoption = project.getPreferenceValue("bulkmail.fileStorage","/bulkMailFiles/"); + var path = vars.get("$sys.serverdata")+locationoption +pBulkMailId+"/"+pMailRunId+"/"; + var filename = pMailLogId+".eml" + var fullPath = path + filename; + return (fileIO.getData(fullPath,util.DATA_BINARY)); +} + +/* + *Gets the redirecturl for a link in a bulkmail + * + * @param {String} pLinkId <p> + * The id of the link.<br> + * + * @return {String} <p> + * The url<br> + **/ +BulkMailUtils.getRedirectLink = function(pLinkId) +{ + if (pLinkId) + { + return newSelect("WEBLINK.URL").from("WEBLINK").where("WEBLINK.WEBLINKID", pLinkId).cell(); + } + return null; +} +/* + *Inserts the Redirect into the link_click table. + * + *If its the first Click the Id gets put as opener in mail_log + * + * @param {String} pMailLogId (required)<p> + * The id of the mail log.<br> + * @param {String} pIpAddress <p> + * the ip address of the client.<br> + * @param {String} pLinkId <p> + * The id of link.<br> + * @param {String} pBrowsername <p> + * The browser that was used to open the link.<br> + * @param {String} pOperatingSystemName <p> + * The Operating System that was used to open the link.<br> + * @param {String} pDeviceType <p> + * The device type that was used to open the link.<br> + **/ + +BulkMailUtils.insertClick = function (pMailLogId,pIpAddress,pLinkId,pBrowsername,pOperatingSystemName,pDeviceType) +{ + if (!pMailLogId || !pLinkId) + { + return; + } + + var linkClickId = util.getNewUUID(); + new SqlBuilder() + .tableName("WEBLINK_CLICK") + .insertFields({ + "WEBLINK_CLICKID": linkClickId, + "WEBLINK_ID": pLinkId, + "DEVICE_TYPE": pDeviceType || "desktop", + "OPERATING_SYSTEM": pOperatingSystemName, + "BROWSER": pBrowsername, + "IP_ADDRESS": pIpAddress, + "MAIL_LOG_ID": pMailLogId, + "DATE_OPENED": vars.get("$sys.date") + }); + + newWhere("MAIL_LOG.MAIL_LOGID", pMailLogId) + .and("MAIL_LOG.OPENER_LINK_CLICK_ID is null") + .updateFields({"OPENER_LINK_CLICK_ID": linkClickId}); +} + +/* Gets the Ip Address out of the http header + * + * @param {Object} pHttpHeader the http header object + * + * @return {String} the original ip address of the recipient + **/ + +BulkMailUtils.getIpAddressFromHeader = function(pHttpHeader) +{ + return pHttpHeader["X-forwarded-for"].split(",")[0]; +} + +BulkMailUtils.startBulkmailWorkFlow = function(pMailLogId, pLinkId) +{ + if (!pMailLogId || !pLinkId) + { + return + } + var [linkActionType, workflowKey, signalName] = newSelect(["ACTION_TYPE", "WORKFLOWPROCESSDEFINITION_KEY", "WORKFLOWSIGNAL_NAME"]) + .from("WEBLINK") + .where("WEBLINK.WEBLINKID", pLinkId) + .arrayRow(); + + var contactId = newSelect("CONTACT_ID") + .from("MAIL_LOG") + .where("MAIL_LOG.MAIL_LOGID", pMailLogId) + .cell(); + + var processVariables = { + "mailLogId": pMailLogId, + "linkId": pLinkId, + "contactId": contactId + }; + if (linkActionType == $KeywordRegistry.weblinkActionType$startWorkflow() && workflowKey) + { + workflow.startProcessByKey(workflowKey, processVariables); + } + else if (linkActionType == $KeywordRegistry.weblinkActionType$sendWorkflowSignal() && signalName) + { + workflow.signalEventReceived(signalName, processVariables); + } +} + + function SerialLetterUtils () {} @@ -490,7 +784,11 @@ SerialLetterUtils.buildSerialLetter = function (pSerialLetterId, pRecipientIds) .from("LETTERRECIPIENT") .join("CONTACT", newWhere("LETTERRECIPIENT.CONTACT_ID = CONTACT.CONTACTID")) .where("LETTERRECIPIENT.SERIALLETTER_ID", pSerialLetterId) - .andIfSet(ContactUtils.getCommRestrictionCondition($KeywordRegistry.communicationMediumCampaign$letter(), true)); + .andIfSet(new CommunicationSettingsCondition() + .postalAddress("LETTERRECIPIENT.ADDRESS_ID") + .rejected() + .existNoSettings() + .buildCondition()); if (pRecipientIds && pRecipientIds.length > 0) contactIdsSelect.and("LETTERRECIPIENT.LETTERRECIPIENTID", pRecipientIds, SqlBuilder.IN()); @@ -615,6 +913,10 @@ SerialLetterUtils.filterNewRecipients = function (pSerialLetterId, pContactIds) .and("LETTERRECIPIENT.SERIALLETTER_ID", pSerialLetterId) , SqlBuilder.NOT_EXISTS()) // check if there's a commrestriction - .and(ContactUtils.getCommRestrictionCondition($KeywordRegistry.communicationMediumCampaign$mail(), true)) + .and(new CommunicationSettingsCondition() + .postalAddress("CONTACT.ADDRESS_ID") + .rejected() + .existNoSettings() + .buildCondition()) .arrayColumn(); } diff --git a/process/Calendar_lib/process.js b/process/Calendar_lib/process.js index 011abeda5e09ad5f87ce7ae23984617217e0dafc..3cdfaf1fda77b38667b3ccafa185831d664cc8eb 100644 --- a/process/Calendar_lib/process.js +++ b/process/Calendar_lib/process.js @@ -1,660 +1,658 @@ -import("system.translate"); -import("system.datetime"); -import("system.neon"); -import("system.calendars"); -import("system.vars"); -import("system.db"); -import("system.swing"); -import("system.eMath"); -import("system.logging"); -import("system.tools"); -import("system.text"); -import("system.question"); -import("system.SQLTYPES"); -import("system.result"); -import("system.util"); -import("system.entities"); -import("Util_lib"); -import("Sql_lib"); - - -/** - * Functions for the calendar. - * <p> - * <b><u>Do not create an instance of this!</u></b> - * @class - */ -function CalendarUtil(){} - - -/* - * Creates and opens an new task object (with link). - * - * @param {String} pSummary (optional) <p> - * The summary.<br> - * @param {String} pDescription (optional) <p> - * The description.<br> - * @param {Boolean} pWithLink (optional) Case if its true, then an a shortcut to $image.frametable will created.<br> - * @param {String[][]} pWithLink (optional) <p> - * The required informations:<br> - * <ul> - * <li>pWithLink[0]: Name of the frame.</li> - * <li>pWithLink[1]: Id of the shown record.</li> - * <li>pWithLink[2]: Linking title.</li> - * @param {String} pUser (optional) <p> - * The user (login).<br> - * @param {[]} pAffectedUsers (optional) <p> - * The affected users. (login)<br> - * @param {date} pStart (optional) <p> - * Start of the task.<br> - * @param {date} pDuration (optional) <p> - * Duration of the task.<br> - * @param {integer} pCategory (optional) <p> - * calendars.CATEGORIES , encoded(String) (e.g.: text.encodeMS(["Service"])) - * @param {String} pStatus (optional) <p> - * Status of the appointment. (calendars.STATUS_TENTATIVE, <br> - * calendars.STATUS_CONFIRMED, calendars.STATUS_CANCELLED)<br> - * @param {Array{[]} pComps4Refresh (optional) <p> - * The component which will be updated.<br> - * - * @return {void} - */ -CalendarUtil.newTodo = function(pSummary, pDescription, pWithLink, pUser, pAffectedUsers, pStart, pDuration, pCategory, pStatus, pComps4Refresh) -{ - var todo = CalendarUtil.createEntry( calendars.VTODO, pSummary, pDescription, pWithLink, pUser, pAffectedUsers, pStart, pDuration, pCategory, pStatus ); - var prompts = []; - prompts["comp4refresh"] = []; - - if (pComps4Refresh == undefined) - pComps4Refresh = ["$comp.Aufgabe", "$comp.tbl_Aufgabe"]; - - for (var i = 0; i < pComps4Refresh.length; i++) - { - if ( vars.exists(pComps4Refresh[i])) prompts["comp4refresh"].push(pComps4Refresh[i]); - } - if(vars.getString("$sys.scope") == "vaadin") - neon.openCalendarEntry([todo], null, neon.OPERATINGSTATE_NEW, null) - else - { - if (vars.exists("$sys.currentwindow")) - prompts["window"] = vars.getString("$sys.currentwindow"); - if (vars.exists("$sys.currentimage")) - prompts["image"] = vars.getString("$sys.currentimage"); - - swing.openCalendarEntry([todo], null, false, prompts); - } -} - - -/** - * Finds the effective calendarId of an user in the same <br> - * attribute order like the ADITO core, which is:<br> - * <p> - * exchangeEmail -> calendarID -> email<br> - * <p> - * <b><u>DO NOT CHANGE THIS ORDER!</u></b> - * - * @param {String} pUser <p> - * To check. - * @return <p> - * Effective calendar id.<br> - */ -CalendarUtil.getEffectiveCalendarIdFromUser = function(pUser) -{ - var userParams = pUser["params"]; - - var resolvedCurrentUser; - var exchangeEmail = userParams["exchangeEMail"]; - var calendarId = userParams["calendarID"]; - var email = userParams["email"]; - - if(exchangeEmail) - return exchangeEmail; - else if(calendarId) - return calendarId; - else if(email) - return email; - else - return ""; -} - - -/* - * Creates and opens an new appointment object (with link). - * - * @param {String} pSummary (optional) <p> - * The summary.<br> - * @param {String} pDescription (optional) <p> - * The description.<br> - * @param {Boolean} pWithLink (optional) <p> - * True sets an link to $image.frametable<br> - * @param {String[][]} pWithLink (optional) Description:<br> - * <ul> - * <li>pWithLink[0]: Name of the frame</li> - * <li>pWithLink[1]: Id of the shown record</li> - * <li>pWithLink[2]: linking title</li> - * </ul> - * @param {String} pUser (optional) <p> - * The user (login). - * @param {[]} pAffectedUsers (optional) <p> - * The affected users (login). - * @param {Date} pStart (optional) <p> - * Begin of the task.<br> - * @param {Date} pDuration (optional) <p> - * Duration.<br> - * @param {Number} pCategory (optional) <p> - * calendars.CATEGORIES , encoded(String) (z.B.: text.encodeMS(["Service"])).<br> - * @param {String} pStatus (optional) <p> - * Status of the appointment:<br> - * <ul> - * <li>calendars.STATUS_TENTATIVE</li> - * <li>calendars.STATUS_CONFIRMED</li> - * <li>calendars.STATUS_CANCELLED</li> - * </ul> - * @param {Array{[]} pComps4Refresh (optional) <p> - * The component which will be updated.<br> - * @param {Array{[]} pWorklistId (optional) <p> - * The worklist id.<br> - * - * @return {void} - */ -CalendarUtil.newEvent = function( pSummary, pDescription, pWithLink, pUser, pAffectedUsers, pStart, pDuration, pCategory, pStatus, pComps4Refresh, pWorklistId) -{ - var event = CalendarUtil.createEntry( calendars.VEVENT, pSummary, pDescription, pWithLink, pUser, pAffectedUsers, pStart, pDuration, pCategory, pStatus ); - - var prompts = []; - prompts["comp4refresh"] = []; - if (pComps4Refresh == undefined) - pComps4Refresh = ["$comp.Aufgabe", "$comp.tbl_Termine"]; - for (let i = 0; i < pComps4Refresh.length; i++) - { - if ( vars.exists(pComps4Refresh[i])) prompts["comp4refresh"].push(pComps4Refresh[i]); - } - - if(vars.getString("$sys.scope") == "vaadin") - neon.openCalendarEntry([event],"", neon.OPERATINGSTATE_NEW, null) - else - { - prompts["window"] = vars.getString("$sys.currentwindow"); - prompts["image"] = vars.getString("$sys.currentimage"); - if (pWorklistId != undefined) - prompts["worklistId"] = pWorklistId; - swing.openCalendarEntry([event], null, false, prompts); - } -} - - -/* - * Creates an new appointment entry. - * - * @param {String} pSummary (optional) <p> - * The summary/title of the appointment. - * @param {String} pDescription (optional) <p> - * The appointment description. - * @param {String} pLinks (optional) <p> - * The links as objects <u>(key: "OBJECT_ID" & "OBJECT_TYPE")</u> in an array. - * @param {String} pOwner (optional) <p> - * The calendar-user (username) which will be specified as entry-owner. - * @param {String[]} pAffectedUsers (optional) <p> - * The affected users (username). - * @param {Date} pStart (optional) <p> - * The start of the appointment. - * @param {Date} pEnd (optional) <p> - * The end of the appointment. - * @param {String[]} pCategories (optional) <p> - * The categories of the appointment, the default ones are:<br> - * <ul> - * <li>Meeting</li> - * <li>Organisation</li> - * <li>OutOfOffice</li> - * <li>Vacation</li> - * </ul> - * @param {String} pStatus (optional) <p> - * Status of the appointment:<br> - * <ul> - * <li>calendars.STATUS_TENTATIVE</li> - * <li>calendars.STATUS_CONFIRMED</li> - * <li>calendars.STATUS_CANCELLED</li> - * </ul> - * @param {Date} pReminder (optional) <p> - * Date of the reminder for the appointment. - * @param {String[]} pExternalAttendees (optional) <p> - * External attendees. - * @param {String} pLocation (optional) <p> - * The location of the appointment. - * @param {Boolean} pIsAllDay (optional) <p> - * Whether if it is an all-day appointment or not. - * @param {String} pClassification (optional) <p> - * The classification of the appointment:<br> - * <ul> - * <li>calendars.CLASSIFICATION_PUBLIC</li> - * <li>calendars.CLASSIFICATION_PRIVATE</li> - * </ul> - * @return {String} <p> - * The uuid of the newly created appointment.<br> - */ -CalendarUtil.newSilentEvent = function(pSummary, pDescription, pLinks, pOwner, pAffectedUsers, pStart, pEnd, pCategories, pStatus, - pReminder, pExternalAttendees, pLocation, pIsAllDay, pClassification) -{ - var event = CalendarUtil.createEntry(pSummary, pDescription, pLinks, pOwner, pAffectedUsers, pStart, pEnd, pCategories, pStatus, pReminder, - pExternalAttendees, pLocation, pIsAllDay, pClassification); - - var ids = calendars.insert([event], calendars.GROUP_SINGLE); - - if(pLinks) - { - var conf; - - pLinks.forEach(function(pLink){ - conf = entities.createConfigForAddingRows().entity("AppointmentLink_entity").fieldValues({ - "APPOINTMENT_ID" : ids[0], - "OBJECTID" : pLink["OBJECT_ID"], - "OBJECTTYPE" : pLink["OBJECT_TYPE"] - }); - - entities.createRow(conf); - }); - } - - return id[0]; -} - -/* - * Creates an new appointment object, which is responsible for holding the data<br> - * till it's used to insert with: calendars.insert (e.g.: in Appointment_entity). - * - * @param {String} pSummary (optional) <p> - * The summary/title of the appointment. - * @param {String} pDescription (optional) <p> - * The description of the appointment. - * @param {Object[]} pLinks (optional) <p> - * The links as objects <u>(key: "OBJECT_ID" & "OBJECT_TYPE")</u> in an array. - * @param {String} pOwner (optional) <p> - * The calendar-user (username) which will be specified as entry-owner. - * @param {String[]} pAffectedUsers (optional) <p> - * The affected users (usernames), which will be added to the appointment. - * @param {Date} pStart (optional) <p> - * Start of the appointment. - * @param {Date} pEnd (optional) <p> - * Duration of the appointment. - * @param {String[]} pCategories (optional) <p> - * The categories of the appointment, the default ones are:<br> - * <ul> - * <li>Meeting</li> - * <li>Organisation</li> - * <li>OutOfOffice</li> - * <li>Vacation</li> - * </ul> - * @param {String} pStatus (optional) Status of the appointment:<br> - * <ul> - * <li>calendars.STATUS_TENTATIVE</li> - * <li>calendars.STATUS_CONFIRMED</li> - * <li>calendars.STATUS_CANCELLED</li> - * </ul> - * @param {Date} pReminder (optional) <p> - * Date of reminder. - * @param {String[]} pExternalAttendees (optional) <p> - * External attendes (e-mail addresses). - * @param {String} pLocation (optional) <p> - * The locations of the appointment. - * @param {Boolean} pIsAllDay (optional) <p> - * Whether if it is an all-day appointment or not. - * @param {String} pClassification (optional) <p> - * The classification of the appointment: - * <ul> - * <li>calendars.CLASSIFICATION_PUBLIC</li> - * <li>calendars.CLASSIFICATION_PRIVATE</li> - * </ul> - * @return {Object} - */ -CalendarUtil.createEntry = function(pSummary, pDescription, pLinks, pOwner, pAffectedUsers, pStart, pEnd, pCategories, pStatus, - pReminder, pExternalAttendees, pLocation, pIsAllDay, pClassification) -{ - var entry = {}; - - entry[calendars.TYPE] = calendars.VEVENT; // hardcoded, cause only other option would be calendars.VTODO for an task - // since tasks are handled via. Task_entity there is no need for the calendars.VTODO option. - - if (!pDescription) - { - if(vars.getString("$sys.scope") == "vaadin") - { - pDescription = neon.getImageContent(vars.getString("$sys.currententityname")); - } - else - { - pDescription = swing.getImageContent(); //todo: check whether it's necessary or not. #1047482 - } - } - - if (!pOwner) - { - pOwner = vars.getString("$sys.user"); - } - - if (!pStart) - { - entry[calendars.DTSTART] = Date.now(); - } - else - { - entry[calendars.DTSTART] = pStart.getTime(); - } - - if (!pEnd) - { - let tempStartdate = entry[calendars.DTSTART]; - entry[calendars.DTEND] = tempStartdate.setHours(tempStartdate.getHours()+1); - } - else - { - entry[calendars.DTEND] = pEnd.getTime().toString(); - } - - if (!pCategories || pCategories == []) - { - pCategories = ""; - } - else - { - for (i = 0; i < pCategories.length; i++) - { - pCategories[i] = translate.text(pCategories[i]); - } - - pCategories = text.encodeMS(pCategories); - } - - if ((pAffectedUsers == null || pAffectedUsers == undefined) && (pExternalAttendees == null || pExternalAttendees == undefined)) - { - entry[calendars.AFFECTEDUSERS] = ""; - } - else - { - var affectedUsers = []; - - if(pAffectedUsers && pAffectedUsers != []) - { - affectedUsers = calendars.getCalendarUsers(pAffectedUsers); - } - - if(pExternalAttendees && pExternalAttendees != []) - { - for(let i = 0; i < pExternalAttendees.length; i++) - { - affectedUsers.push("; mailto:" + pExternalAttendees[i] + "; CN:" + pExternalAttendees[i] + "; ") - } - } - - entry[calendars.AFFECTEDUSERS] = text.encodeMS(affectedUsers); - } - - if (!pStatus) - { - pStatus = calendars.STATUS_CONFIRMED; - } - - if(!pReminder) - { - entry[calendars.HASREMINDER] = "true"; - entry[calendars.REMINDER_DURATION] = pReminder.getTime().toString(); - } - else - { - entry[calendars.HASREMINDER] = "false"; - } - - if(pLinks) - { - entry["LINKS"] = pLinks; - } - - entry[calendars.USER] = calendars.getCalendarUser(pOwner); - entry[calendars.DESCRIPTION] = pDescription; - entry[calendars.SUMMARY] = pSummary || ""; - entry[calendars.STATUS] = CalendarUtil.mapCalendarStatus(pStatus, calendars.getBackendType()); - entry[calendars.CLASSIFICATION] = pClassification || calendars.CLASSIFICATION_PUBLIC; - entry[calendars.CATEGORIES] = pCategories; - entry[calendars.TRANSPARENCY] = "OPAQUE"; - entry[calendars.LOCATION] = pLocation || ""; - entry["X-ADITO-ISALLDAYEVENT"] = pIsAllDay ? "TRUE" : "FALSE"; - entry[calendars.DTSTART] = entry[calendars.DTSTART].toString(); - - return entry; -} - -/* - * Add an condition.<br> - * - * @param {[]} pConditions <p> - * The condition.<br> - * @param {Integer} pIndex <p> - * Index of the condition.<br> - * @param {Object} pValues <p> - * The values.<br> - * @return {void} - */ -CalendarUtil.addEntryCondition = function(pConditions, pIndex, pValues) -{ - var params = ["TYPE", "START", "END", "USER", "STATUS", "UID"]; - - for (var i = 0; i < params.length; i++) - if (pValues[params[i]] != undefined) pConditions[params[i] + "_" + pIndex] = pValues[params[i]]; -} - -/* - * Returns the date without the time.<br> - * - * @param {String} datetimeIn <p> - * Datetime.<br> - * @return {Date} <p> - * The desired date.<br> - */ -CalendarUtil.getDate = function(datetimeIn) -{ - if ( datetimeIn != "") - return datetime.clearTime(datetimeIn); - else return ""; -} - -/* - * Resets the event filter.<br> - * - * @return {Object} - */ -CalendarUtil.reset_filterEvent = function() -{ - var today = CalendarUtil.getDate(vars.getString("$sys.date")); - - return pFilter = { - user: vars.getString("$sys.user"), - datefrom: String(today), //nur die Termine ab heute anzeigen, - //die von vor einer Woche sind uninteressant - dateto: String(eMath.addInt(eMath.addInt(today, datetime.ONE_WEEK) - ,datetime.ONE_DAY - datetime.ONE_MINUTE)), - category: "", - tentative: "true", - confirmed: "true", - cancelled: "", - free: "true" - }; -} - -/* - * Gibt den richtigen Status zum Prüfen je nach Backend zurück - * Returns the matching status, to the corresponding backend. - * - * - * @param {String} pStatus req die konstante für den zu prüfenden status, - * z.B. calendars.STATUS_INPROCESS - * - * @param {String} pCalendarType req die konstante für den typen des Termin- oder Aufgabenbackends, - * z.B. calendars.BACKEND_DB - * - * @return {String} Konstanten für den Kalender (Backend-Typen), gibt es den status im backend nicht - * wird null geliefert - */ -CalendarUtil.mapCalendarStatus = function(pStatus, pCalendarType) -{ - switch (pCalendarType) - { - //case calendars.BACKEND_EXCHANGE: - case calendars.BACKEND_EXCHANGEWS: - if (pStatus == calendars.STATUS_CONFIRMED) - return calendars.STATUS_BUSY; - else - return pStatus; - default: - if (pStatus == calendars.STATUS_OOF)//nur bei exchange - return null; - else - return pStatus; - } -} - -/** - * Returns the "real" calendar system/backend type<br> - * (e.g.: BackendType & SyncBackendType) - * - * @param {Number} pScope <p> - * The needed scope:<br> - * <ul> - * <li>calendars.VEVENT</li> - * <li>calendars.VTODO</li> - * </ul> - * @return {Number} <p> - * The backend type (e.g.: calendars.BACKEND_*).<br> - */ -CalendarUtil.getCalendarSystemType = function(pScope) -{ - // Check sync backend type - if (calendars.getSyncBackendType() != calendars.BACKEND_NONE && calendars.getSyncBackendType() != 3) - { - var scope = calendars.getSyncBackendTypeScope(); - if (scope.length == 1 && scope[0] == pScope) // Scope.length = 1 -> VEVENT *OR* VTODO - return calendars.getSyncBackendType(); - else if (scope.length == 2) // Scope.length = 2 -> Both - return calendars.getSyncBackendType(); - // Scope.length = 0 -> Nothing selected -> Skip this block - } - - // Fallback to backend type (event) - if (calendars.getBackendType() != calendars.BACKEND_NONE && pScope === calendars.VEVENT) - return calendars.getBackendType(); - - // Second fallback to backend type (todo) - if (calendars.getBackendTypeTasks() != calendars.BACKEND_NONE && pScope === calendars.VTODO) - return calendars.getBackendTypeTasks(); - - // Everything is none - return calendars.BACKEND_NONE; -} - -CalendarUtil.buildEntriesFromUids = function(appointmentUids) -{ - var entryArray = new Array(appointmentUids.length); - - for(var i = 0; i < appointmentUids.length; i++) - { - var hasPermission = true; - - if(vars.get("$param.ErrorOnPermissionDenied") == "false" || vars.getString("$param.LinkedAppointmentsFromDashlet_param")) - hasPermission = hasUserPermissionForReadingEntry(getEntryOwnerCn(appointmentUids[i])); - - if(hasPermission) - entryArray[i] = CalendarUtil.buildEntry(calendars.getEntry(appointmentUids[i], null, null), null); - } - - //filter out all null - var filteredEntryArray = entryArray.filter(function (el) { - return el != null; - }); - - return filteredEntryArray; -} - - -CalendarUtil.countEntriesFromUids = function(appointmentUids) -{ - return CalendarUtil.buildEntriesFromUids(appointmentUids).length; -} - -CalendarUtil.buildEntry = function (pEntry, pMasterentry) -{ - var uid = pEntry[calendars.ID]; - var summary = pEntry[calendars.SUMMARY]; - var attendees = pEntry[calendars.AFFECTEDUSERS]; - var startdate = pEntry[calendars.DTSTART]; - var enddate = pEntry[calendars.DTEND]; - var links = pEntry[calendars.LINKS]; - var description = pEntry[calendars.DESCRIPTION]; - if(pEntry[calendars.ORGANIZER2] != undefined) - var organizer = pEntry[calendars.ORGANIZER2]["paramvalue"]; - if(pEntry[calendars.USER2] != undefined) - var owner = JSON.stringify(pEntry[calendars.USER2]); - var status = pEntry[calendars.STATUS]; - var location = pEntry[calendars.LOCATION]; - var reminder = pEntry[calendars.REMINDER_DURATION]; - var remindercheck = pEntry[calendars.HASREMINDER] - var classification = pEntry[calendars.CLASSIFICATION]; - var transparency = pEntry[calendars.TRANSPARENCY]; - var categories = pEntry[calendars.CATEGORIES]; - var isAllDay = pEntry["X-ADITO-ISALLDAYEVENT"] != null ? pEntry["X-ADITO-ISALLDAYEVENT"] : "FALSE"; - - var masterBegin = pMasterentry != null ? pMasterentry[calendars.DTSTART] : null - var masterEnd = pMasterentry != null ? pMasterentry[calendars.DTEND] : null - - // Recurrence - var recurrenceID = pEntry[calendars.RECURRENCEID]; - var rrule = null; - if (pMasterentry != null) { // Entry is a recurrence exception, therefore get rrule from master - rrule = pMasterentry[calendars.RRULE] != null ? pMasterentry[calendars.RRULE][0] : null; - } else { - rrule = pEntry[calendars.RRULE] != null ? pEntry[calendars.RRULE][0] : null; - } - - return [ - uid, - attendees.length, - startdate, - enddate, - summary, - organizer, - owner, - attendees, - status, - description, - location, - '', - isAllDay, - classification, - transparency, - categories, - reminder, - remindercheck, - rrule, - recurrenceID, - null, - masterBegin, - masterEnd, - null - ]; -} - - -function hasUserPermissionForReadingEntry(calUserCn) -{ - return calendars.hasPermission(calUserCn, calendars.VEVENT, "READ"); -} - -function getEntryOwnerCn(appointmentUid) -{ - - var owner = newSelect("ASYS_CALENDARBACKEND.OWNER", "_____SYSTEMALIAS") - .from("ASYS_CALENDARBACKEND") - .whereIfSet("ASYS_CALENDARBACKEND.ELEMENTUID", appointmentUid) - .cell(true); - - var ownerArr = text.decodeMS(owner); - return ownerArr[1].split(":")[1]; +import("system.translate"); +import("system.datetime"); +import("system.neon"); +import("system.calendars"); +import("system.vars"); +import("system.db"); +import("system.swing"); +import("system.eMath"); +import("system.logging"); +import("system.tools"); +import("system.text"); +import("system.question"); +import("system.SQLTYPES"); +import("system.result"); +import("system.util"); +import("system.entities"); +import("Util_lib"); +import("Sql_lib"); + + +/** + * Functions for the calendar. + * <p> + * <b><u>Do not create an instance of this!</u></b> + * @class + */ +function CalendarUtil(){} + + +/* + * Creates and opens an new task object (with link). + * + * @param {String} pSummary (optional) <p> + * The summary.<br> + * @param {String} pDescription (optional) <p> + * The description.<br> + * @param {Boolean} pWithLink (optional) Case if its true, then an a shortcut to $image.frametable will created.<br> + * @param {String[][]} pWithLink (optional) <p> + * The required information:<br> + * <ul> + * <li>pWithLink[0]: Name of the frame.</li> + * <li>pWithLink[1]: Id of the shown record.</li> + * <li>pWithLink[2]: Linking title.</li> + * @param {String} pUser (optional) <p> + * The user (login).<br> + * @param {[]} pAffectedUsers (optional) <p> + * The affected users. (login)<br> + * @param {date} pStart (optional) <p> + * Start of the task.<br> + * @param {date} pDuration (optional) <p> + * Duration of the task.<br> + * @param {integer} pCategory (optional) <p> + * calendars.CATEGORIES , encoded(String) (e.g.: text.encodeMS(["Service"])) + * @param {String} pStatus (optional) <p> + * Status of the appointment. (calendars.STATUS_TENTATIVE, <br> + * calendars.STATUS_CONFIRMED, calendars.STATUS_CANCELLED)<br> + * @param {Array{[]} pComps4Refresh (optional) <p> + * The component which will be updated.<br> + * + * @return {void} + */ +CalendarUtil.newTodo = function(pSummary, pDescription, pWithLink, pUser, pAffectedUsers, pStart, pDuration, pCategory, pStatus, pComps4Refresh) +{ + var todo = CalendarUtil.createEntry( calendars.VTODO, pSummary, pDescription, pWithLink, pUser, pAffectedUsers, pStart, pDuration, pCategory, pStatus ); + var prompts = []; + prompts["comp4refresh"] = []; + + if (pComps4Refresh == undefined) + pComps4Refresh = ["$comp.Aufgabe", "$comp.tbl_Aufgabe"]; + + for (var i = 0; i < pComps4Refresh.length; i++) + { + if ( vars.exists(pComps4Refresh[i])) prompts["comp4refresh"].push(pComps4Refresh[i]); + } + if(vars.getString("$sys.scope") == "vaadin") + neon.openCalendarEntry([todo], null, neon.OPERATINGSTATE_NEW, null) + else + { + if (vars.exists("$sys.currentwindow")) + prompts["window"] = vars.getString("$sys.currentwindow"); + if (vars.exists("$sys.currentimage")) + prompts["image"] = vars.getString("$sys.currentimage"); + + swing.openCalendarEntry([todo], null, false, prompts); + } +} + + +/** + * Finds the effective calendarId of an user in the same <br> + * attribute order like the ADITO core, which is:<br> + * <p> + * exchangeEmail -> calendarID -> email<br> + * <p> + * <b><u>DO NOT CHANGE THIS ORDER!</u></b> + * + * @param {String} pUser <p> + * To check. + * @return <p> + * Effective calendar id.<br> + */ +CalendarUtil.getEffectiveCalendarIdFromUser = function(pUser) +{ + var userParams = pUser["params"]; + + var resolvedCurrentUser; + var exchangeEmail = userParams["exchangeEMail"]; + var calendarId = userParams["calendarID"]; + var email = userParams["email"]; + + if(exchangeEmail) + return exchangeEmail; + else if(calendarId) + return calendarId; + else if(email) + return email; + else + return ""; +} + + +/* + * Creates and opens an new appointment object (with link). + * + * @param {String} pSummary (optional) <p> + * The summary.<br> + * @param {String} pDescription (optional) <p> + * The description.<br> + * @param {Boolean} pWithLink (optional) <p> + * True sets an link to $image.frametable<br> + * @param {String[][]} pWithLink (optional) Description:<br> + * <ul> + * <li>pWithLink[0]: Name of the frame</li> + * <li>pWithLink[1]: Id of the shown record</li> + * <li>pWithLink[2]: linking title</li> + * </ul> + * @param {String} pUser (optional) <p> + * The user (login). + * @param {[]} pAffectedUsers (optional) <p> + * The affected users (login). + * @param {Date} pStart (optional) <p> + * Begin of the task.<br> + * @param {Date} pDuration (optional) <p> + * Duration.<br> + * @param {Number} pCategory (optional) <p> + * calendars.CATEGORIES , encoded(String) (z.B.: text.encodeMS(["Service"])).<br> + * @param {String} pStatus (optional) <p> + * Status of the appointment:<br> + * <ul> + * <li>calendars.STATUS_TENTATIVE</li> + * <li>calendars.STATUS_CONFIRMED</li> + * <li>calendars.STATUS_CANCELLED</li> + * </ul> + * @param {Array{[]} pComps4Refresh (optional) <p> + * The component which will be updated.<br> + * @param {Array{[]} pWorklistId (optional) <p> + * The worklist id.<br> + * + * @return {void} + */ +CalendarUtil.newEvent = function( pSummary, pDescription, pWithLink, pUser, pAffectedUsers, pStart, pDuration, pCategory, pStatus, pComps4Refresh, pWorklistId) +{ + var event = CalendarUtil.createEntry( calendars.VEVENT, pSummary, pDescription, pWithLink, pUser, pAffectedUsers, pStart, pDuration, pCategory, pStatus ); + + var prompts = []; + prompts["comp4refresh"] = []; + if (pComps4Refresh == undefined) + pComps4Refresh = ["$comp.Aufgabe", "$comp.tbl_Termine"]; + for (let i = 0; i < pComps4Refresh.length; i++) + { + if ( vars.exists(pComps4Refresh[i])) prompts["comp4refresh"].push(pComps4Refresh[i]); + } + + if(vars.getString("$sys.scope") == "vaadin") + neon.openCalendarEntry([event],"", neon.OPERATINGSTATE_NEW, null) + else + { + prompts["window"] = vars.getString("$sys.currentwindow"); + prompts["image"] = vars.getString("$sys.currentimage"); + if (pWorklistId != undefined) + prompts["worklistId"] = pWorklistId; + swing.openCalendarEntry([event], null, false, prompts); + } +} + + +/* + * Creates an new appointment entry. + * + * @param {String} pSummary (optional) <p> + * The summary/title of the appointment. + * @param {String} pDescription (optional) <p> + * The appointment description. + * @param {String} pLinks (optional) <p> + * The links as objects <u>(key: "OBJECT_ID" & "OBJECT_TYPE")</u> in an array. + * @param {String} pOwner (optional) <p> + * The calendar-user (username) which will be specified as entry-owner. + * @param {String[]} pAffectedUsers (optional) <p> + * The affected users (username). + * @param {Date} pStart (optional) <p> + * The start of the appointment. + * @param {Date} pEnd (optional) <p> + * The end of the appointment. + * @param {String[]} pCategories (optional) <p> + * The categories of the appointment, the default ones are:<br> + * <ul> + * <li>Meeting</li> + * <li>Organisation</li> + * <li>OutOfOffice</li> + * <li>Vacation</li> + * </ul> + * @param {String} pStatus (optional) <p> + * Status of the appointment:<br> + * <ul> + * <li>calendars.STATUS_TENTATIVE</li> + * <li>calendars.STATUS_CONFIRMED</li> + * <li>calendars.STATUS_CANCELLED</li> + * </ul> + * @param {Date} pReminder (optional) <p> + * Date of the reminder for the appointment. + * @param {String[]} pExternalAttendees (optional) <p> + * External attendees. + * @param {String} pLocation (optional) <p> + * The location of the appointment. + * @param {Boolean} pIsAllDay (optional) <p> + * Whether if it is an all-day appointment or not. + * @param {String} pClassification (optional) <p> + * The classification of the appointment:<br> + * <ul> + * <li>calendars.CLASSIFICATION_PUBLIC</li> + * <li>calendars.CLASSIFICATION_PRIVATE</li> + * </ul> + * @return {void} + */ +CalendarUtil.newSilentEvent = function(pSummary, pDescription, pLinks, pOwner, pAffectedUsers, pStart, pEnd, pCategories, pStatus, + pReminder, pExternalAttendees, pLocation, pIsAllDay, pClassification) +{ + var event = CalendarUtil.createEntry(pSummary, pDescription, pLinks, pOwner, pAffectedUsers, pStart, pEnd, pCategories, pStatus, pReminder, + pExternalAttendees, pLocation, pIsAllDay, pClassification); + + var ids = calendars.insert([event], calendars.GROUP_SINGLE); + + if(pLinks) + { + var conf; + + pLinks.forEach(function(pLink){ + conf = entities.createConfigForAddingRows().entity("AppointmentLink_entity").fieldValues({ + "APPOINTMENT_ID" : ids[0], + "OBJECTID" : pLink["OBJECT_ID"], + "OBJECTTYPE" : pLink["OBJECT_TYPE"] + }); + + entities.createRow(conf); + }); + } +} + +/* + * Creates an new appointment object, which is responsible for holding the data<br> + * till it's used to insert with: calendars.insert (e.g.: in Appointment_entity). + * + * @param {String} pSummary (optional) <p> + * The summary/title of the appointment. + * @param {String} pDescription (optional) <p> + * The description of the appointment. + * @param {Object[]} pLinks (optional) <p> + * The links as objects <u>(key: "OBJECT_ID" & "OBJECT_TYPE")</u> in an array. + * @param {String} pOwner (optional) <p> + * The calendar-user (username) which will be specified as entry-owner. + * @param {String[]} pAffectedUsers (optional) <p> + * The affected users (usernames), which will be added to the appointment. + * @param {Date} pStart (optional) <p> + * Start of the appointment. + * @param {Date} pEnd (optional) <p> + * Duration of the appointment. + * @param {String[]} pCategories (optional) <p> + * The categories of the appointment, the default ones are:<br> + * <ul> + * <li>Meeting</li> + * <li>Organisation</li> + * <li>OutOfOffice</li> + * <li>Vacation</li> + * </ul> + * @param {String} pStatus (optional) Status of the appointment:<br> + * <ul> + * <li>calendars.STATUS_TENTATIVE</li> + * <li>calendars.STATUS_CONFIRMED</li> + * <li>calendars.STATUS_CANCELLED</li> + * </ul> + * @param {Date} pReminder (optional) <p> + * Date of reminder. + * @param {String[]} pExternalAttendees (optional) <p> + * External attendes (e-mail addresses). + * @param {String} pLocation (optional) <p> + * The locations of the appointment. + * @param {Boolean} pIsAllDay (optional) <p> + * Whether if it is an all-day appointment or not. + * @param {String} pClassification (optional) <p> + * The classification of the appointment: + * <ul> + * <li>calendars.CLASSIFICATION_PUBLIC</li> + * <li>calendars.CLASSIFICATION_PRIVATE</li> + * </ul> + * @return {Object} + */ +CalendarUtil.createEntry = function(pSummary, pDescription, pLinks, pOwner, pAffectedUsers, pStart, pEnd, pCategories, pStatus, + pReminder, pExternalAttendees, pLocation, pIsAllDay, pClassification) +{ + var entry = {}; + + entry[calendars.TYPE] = calendars.VEVENT; // hardcoded, cause only other option would be calendars.VTODO for an task + // since tasks are handled via. Task_entity there is no need for the calendars.VTODO option. + + if (!pDescription) + { + if(vars.getString("$sys.scope") == "vaadin") + { + pDescription = neon.getImageContent(vars.getString("$sys.currententityname")); + } + else + { + pDescription = swing.getImageContent(); //todo: check whether it's necessary or not. #1047482 + } + } + + if (!pOwner) + { + pOwner = vars.getString("$sys.user"); + } + + if (!pStart) + { + entry[calendars.DTSTART] = Date.now(); + } + else + { + entry[calendars.DTSTART] = pStart.getTime(); + } + + if (!pEnd) + { + let tempStartdate = entry[calendars.DTSTART]; + entry[calendars.DTEND] = tempStartdate + datetime.ONE_HOUR; + } + else + { + entry[calendars.DTEND] = pEnd.getTime().toString(); + } + + if (!pCategories || pCategories == []) + { + pCategories = ""; + } + else + { + for (i = 0; i < pCategories.length; i++) + { + pCategories[i] = translate.text(pCategories[i]); + } + + pCategories = text.encodeMS(pCategories); + } + + if ((pAffectedUsers == null || pAffectedUsers == undefined) && (pExternalAttendees == null || pExternalAttendees == undefined)) + { + entry[calendars.AFFECTEDUSERS] = ""; + } + else + { + var affectedUsers = []; + affectedUsers.push(calendars.getCalendarUser(vars.get("$sys.user"))); + + if(pAffectedUsers && pAffectedUsers != []) + { + affectedUsers = calendars.getCalendarUsers(pAffectedUsers); + } + + if(pExternalAttendees && pExternalAttendees != []) + { + for(let i = 0; i < pExternalAttendees.length; i++) + { + affectedUsers.push("; mailto:" + pExternalAttendees[i] + "; CN:" + pExternalAttendees[i] + "; ") + } + } + + entry[calendars.AFFECTEDUSERS] = text.encodeMS(affectedUsers); + } + + if (!pStatus) + { + pStatus = calendars.STATUS_CONFIRMED; + } + + if(pReminder) + { + entry[calendars.HASREMINDER] = "true"; + entry[calendars.REMINDER_DURATION] = pReminder.getTime().toString(); + } + else + { + entry[calendars.HASREMINDER] = "false"; + } + + if(pLinks) + { + entry["LINKS"] = pLinks; + } + + entry[calendars.USER] = calendars.getCalendarUser(pOwner); + entry[calendars.DESCRIPTION] = pDescription; + entry[calendars.SUMMARY] = pSummary || ""; + entry[calendars.STATUS] = CalendarUtil.mapCalendarStatus(pStatus, calendars.getBackendType()); + entry[calendars.CLASSIFICATION] = pClassification || calendars.CLASSIFICATION_PUBLIC; + entry[calendars.CATEGORIES] = pCategories; + entry[calendars.TRANSPARENCY] = "OPAQUE"; + entry[calendars.LOCATION] = pLocation || ""; + entry["X-ADITO-ISALLDAYEVENT"] = pIsAllDay ? "TRUE" : "FALSE"; + entry[calendars.DTSTART] = entry[calendars.DTSTART].toString(); + + return entry; +} + +/* + * Add an condition.<br> + * + * @param {[]} pConditions <p> + * The condition.<br> + * @param {Integer} pIndex <p> + * Index of the condition.<br> + * @param {Object} pValues <p> + * The values.<br> + * @return {void} + */ +CalendarUtil.addEntryCondition = function(pConditions, pIndex, pValues) +{ + var params = ["TYPE", "START", "END", "USER", "STATUS", "UID"]; + + for (var i = 0; i < params.length; i++) + if (pValues[params[i]] != undefined) pConditions[params[i] + "_" + pIndex] = pValues[params[i]]; +} + +/* + * Returns the date without the time.<br> + * + * @param {String} datetimeIn <p> + * Datetime.<br> + * @return {Date} <p> + * The desired date.<br> + */ +CalendarUtil.getDate = function(datetimeIn) +{ + if ( datetimeIn != "") + return datetime.clearTime(datetimeIn); + else return ""; +} + +/* + * Resets the event filter.<br> + * + * @return {Object} + */ +CalendarUtil.reset_filterEvent = function() +{ + var today = CalendarUtil.getDate(vars.getString("$sys.date")); + + return pFilter = { + user: vars.getString("$sys.user"), + datefrom: String(today), //nur die Termine ab heute anzeigen, + //die von vor einer Woche sind uninteressant + dateto: String(eMath.addInt(eMath.addInt(today, datetime.ONE_WEEK) + ,datetime.ONE_DAY - datetime.ONE_MINUTE)), + category: "", + tentative: "true", + confirmed: "true", + cancelled: "", + free: "true" + }; +} + +/* + * Gibt den richtigen Status zum Prüfen je nach Backend zurück + * Returns the matching status, to the corresponding backend. + * + * + * @param {String} pStatus req die konstante für den zu prüfenden status, + * z.B. calendars.STATUS_INPROCESS + * + * @param {String} pCalendarType req die konstante für den typen des Termin- oder Aufgabenbackends, + * z.B. calendars.BACKEND_DB + * + * @return {String} Konstanten für den Kalender (Backend-Typen), gibt es den status im backend nicht + * wird null geliefert + */ +CalendarUtil.mapCalendarStatus = function(pStatus, pCalendarType) +{ + switch (pCalendarType) + { + //case calendars.BACKEND_EXCHANGE: + case calendars.BACKEND_EXCHANGEWS: + if (pStatus == calendars.STATUS_CONFIRMED) + return calendars.STATUS_BUSY; + else + return pStatus; + default: + if (pStatus == calendars.STATUS_OOF)//nur bei exchange + return null; + else + return pStatus; + } +} + +/** + * Returns the "real" calendar system/backend type<br> + * (e.g.: BackendType & SyncBackendType) + * + * @param {Number} pScope <p> + * The needed scope:<br> + * <ul> + * <li>calendars.VEVENT</li> + * <li>calendars.VTODO</li> + * </ul> + * @return {Number} <p> + * The backend type (e.g.: calendars.BACKEND_*).<br> + */ +CalendarUtil.getCalendarSystemType = function(pScope) +{ + // Check sync backend type + if (calendars.getSyncBackendType() != calendars.BACKEND_NONE && calendars.getSyncBackendType() != 3) + { + var scope = calendars.getSyncBackendTypeScope(); + if (scope.length == 1 && scope[0] == pScope) // Scope.length = 1 -> VEVENT *OR* VTODO + return calendars.getSyncBackendType(); + else if (scope.length == 2) // Scope.length = 2 -> Both + return calendars.getSyncBackendType(); + // Scope.length = 0 -> Nothing selected -> Skip this block + } + + // Fallback to backend type (event) + if (calendars.getBackendType() != calendars.BACKEND_NONE && pScope === calendars.VEVENT) + return calendars.getBackendType(); + + // Second fallback to backend type (todo) + if (calendars.getBackendTypeTasks() != calendars.BACKEND_NONE && pScope === calendars.VTODO) + return calendars.getBackendTypeTasks(); + + // Everything is none + return calendars.BACKEND_NONE; +} + +CalendarUtil.buildEntriesFromUids = function(appointmentUids) +{ + var entryArray = new Array(appointmentUids.length); + + for(var i = 0; i < appointmentUids.length; i++) + { + var hasPermission = true; + + if(vars.get("$param.ErrorOnPermissionDenied") == "false" || vars.getString("$param.LinkedAppointmentsFromDashlet_param")) + hasPermission = hasUserPermissionForReadingEntry(getEntryOwnerCn(appointmentUids[i])); + + if(hasPermission) + entryArray[i] = CalendarUtil.buildEntry(calendars.getEntry(appointmentUids[i], null, null), null); + } + + //filter out all null + var filteredEntryArray = entryArray.filter(function (el) { + return el != null; + }); + + return filteredEntryArray; +} + + +CalendarUtil.countEntriesFromUids = function(appointmentUids) +{ + return CalendarUtil.buildEntriesFromUids(appointmentUids).length; +} + +CalendarUtil.buildEntry = function (pEntry, pMasterentry) +{ + var uid = pEntry[calendars.ID]; + var summary = pEntry[calendars.SUMMARY]; + var attendees = pEntry[calendars.AFFECTEDUSERS]; + var startdate = pEntry[calendars.DTSTART]; + var enddate = pEntry[calendars.DTEND]; + var links = pEntry[calendars.LINKS]; + var description = pEntry[calendars.DESCRIPTION]; + if(pEntry[calendars.ORGANIZER2] != undefined) + var organizer = pEntry[calendars.ORGANIZER2]["paramvalue"]; + if(pEntry[calendars.USER2] != undefined) + var owner = JSON.stringify(pEntry[calendars.USER2]); + var status = pEntry[calendars.STATUS]; + var location = pEntry[calendars.LOCATION]; + var reminder = pEntry[calendars.REMINDER_DURATION]; + var remindercheck = pEntry[calendars.HASREMINDER] + var classification = pEntry[calendars.CLASSIFICATION]; + var transparency = pEntry[calendars.TRANSPARENCY]; + var categories = pEntry[calendars.CATEGORIES]; + var isAllDay = pEntry["X-ADITO-ISALLDAYEVENT"] != null ? pEntry["X-ADITO-ISALLDAYEVENT"] : "FALSE"; + + var masterBegin = pMasterentry != null ? pMasterentry[calendars.DTSTART] : null + var masterEnd = pMasterentry != null ? pMasterentry[calendars.DTEND] : null + + // Recurrence + var recurrenceID = pEntry[calendars.RECURRENCEID]; + var rrule = null; + if (pMasterentry != null) { // Entry is a recurrence exception, therefore get rrule from master + rrule = pMasterentry[calendars.RRULE] != null ? pMasterentry[calendars.RRULE][0] : null; + } else { + rrule = pEntry[calendars.RRULE] != null ? pEntry[calendars.RRULE][0] : null; + } + + return [ + uid, + attendees.length, + startdate, + enddate, + summary, + organizer, + owner, + attendees, + status, + description, + location, + '', + isAllDay, + classification, + transparency, + categories, + reminder, + remindercheck, + rrule, + recurrenceID, + null, + masterBegin, + masterEnd, + null + ]; +} + + +function hasUserPermissionForReadingEntry(calUserCn) +{ + return calendars.hasPermission(calUserCn, calendars.VEVENT, "READ"); +} + +function getEntryOwnerCn(appointmentUid) +{ + + var owner = newSelect("ASYS_CALENDARBACKEND.OWNER", "_____SYSTEMALIAS") + .from("ASYS_CALENDARBACKEND") + .whereIfSet("ASYS_CALENDARBACKEND.ELEMENTUID", appointmentUid) + .cell(true); + + var ownerArr = text.decodeMS(owner); + return ownerArr[1].split(":")[1]; } \ No newline at end of file diff --git a/process/Campaign_lib/process.js b/process/Campaign_lib/process.js index 7606f5621de2acaf083d346df68143384f7d297b..808c85d412e2b8ed1c67f82693493b11d95cbc1b 100644 --- a/process/Campaign_lib/process.js +++ b/process/Campaign_lib/process.js @@ -512,6 +512,27 @@ CampaignUtils.GetContactIdsNotInCampaignByRowIds = function(pCampaignId, pPartic .arrayColumn(); } + +/** + * Returns the contact ids which aren't in the given campaignstep.<br> + * + * @param {String} pCampaignStepId <p> + * The id of the campaignstep.<br> + * @param {String[]} pParticipantRowIds <p> + * The participant ids (campaignparticipantids).<br> + * @return {String[]} <p> + * The contact ids which arent in the<br> + * given campaignstep.<br> + */ +CampaignUtils.GetContactIdsNotInCampaignStepByRowIds = function(pCampaignStepId, pParticipantRowIds) +{ + return newSelect("CAMPAIGNPARTICIPANT.CONTACT_ID") + .from("CAMPAIGNPARTICIPANT") + .where("CAMPAIGNPARTICIPANT.CAMPAIGNPARTICIPANTID", pParticipantRowIds, SqlBuilder.IN()) + .and("CAMPAIGNPARTICIPANT.CAMPAIGNSTEP_ID",pCampaignStepId,SqlBuilder.NOT_EQUAL()) + .arrayColumn(); +} + /** * Returns the contact ids which arent in the campaign<br> * with the given campaign id.<br> @@ -537,7 +558,7 @@ CampaignUtils.GetContactIdsNotInCampaignByCondition = function(pCampaignId, pCon .from("CONTACT"); if (origin == "Person") - query.leftJoin("PERSON", "CONTACT.PERSON_ID = PERSON.PERSONID"); + query.join("PERSON", "CONTACT.PERSON_ID = PERSON.PERSONID"); query.join("ORGANISATION", "ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID") .leftJoin("ADDRESS", "ADDRESS.ADDRESSID = CONTACT.ADDRESS_ID") @@ -556,6 +577,41 @@ CampaignUtils.GetContactIdsNotInCampaignByCondition = function(pCampaignId, pCon return query.arrayColumn(); } +/** + * Returns the contact ids which arent in a different campaignstep of the same campaign<br> + * with the given campaign id.<br> + * + * @param {String} pCampaignStepId <p> + * The id of the campaignstep.<br> + * @param {String} pCampaignId <p> + * The id of the campaign.<br> + * @param {String} pCondition (optional) <p> + * An condition which is used to limit the search contact results.<br> + * @return {String[]} <p> + * The contact ids that arent in the campaignstep.<br> + */ +CampaignUtils.GetContactIdsNotInCampaignStepByCondition = function(pCampaignStepId,pCampaignId, pCondition) +{ + + var subselect = newSelect("CAMPAIGNPARTICIPANT.CONTACT_ID") + .from("CAMPAIGNPARTICIPANT") + .where("CAMPAIGNPARTICIPANT.CAMPAIGNSTEP_ID", pCampaignStepId); + + var query = newSelect("CONTACT.CONTACTID") + .from("CONTACT") + .join("ORGANISATION", "ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID") + .join("CAMPAIGNPARTICIPANT","CAMPAIGNPARTICIPANT.CONTACT_ID = CONTACT.CONTACTID") + .leftJoin("ADDRESS", "ADDRESS.ADDRESSID = CONTACT.ADDRESS_ID") + .where("CAMPAIGNPARTICIPANT.CAMPAIGN_ID",pCampaignId ) + .and("CAMPAIGNPARTICIPANT.CAMPAIGNSTEP_ID",pCampaignStepId,SqlBuilder.NOT_EQUAL()); + + + if(pCondition != "") + query.and(pCondition); + + return query.arrayColumn(); +} + /** * Returns the contact ids which are in the campaign,<br> * with the given campaign id.<br> @@ -758,4 +814,54 @@ CampaignUtils.getResolvedCampaignStepSqlpPart = function(pCampaignId){ var res = SqlUtils.getResolvingCaseWhen(campaignSteps, "CAMPAIGNSTEP.CAMPAIGNSTEPID"); return SqlUtils.translateStatementWithQuotes(res); +} + +/* + * Swaps the Sorting of a campaignstep with the one above it + * + * @param {String} pCampaignStepId CampaignStepId of the step that should be moved up + */ +CampaignUtils.moveStepUp = function(pCampaignStepId){ + var sorting; + var campaignId; + + [campaignId,sorting] = newSelect(["CAMPAIGNSTEP.CAMPAIGN_ID","CAMPAIGNSTEP.SORTING"]) + .from("CAMPAIGNSTEP") + .where("CAMPAIGNSTEP.CAMPAIGNSTEPID",pCampaignStepId) + .arrayRow(); + + sorting = parseInt(sorting); + + + newWhere("CAMPAIGNSTEP.CAMPAIGN_ID",campaignId) + .and("CAMPAIGNSTEP.SORTING",sorting-1) + .updateFields({"SORTING":sorting}); + + newWhere("CAMPAIGNSTEP.CAMPAIGNSTEPID",pCampaignStepId) + .updateFields({"SORTING":sorting-1}); +} + +/* + * Swaps the Sorting of a campaignstep with the one below it + * + * @param {String} pCampaignStepId CampaignStepId of the step that should be moved down + */ +CampaignUtils.moveStepDown = function(pCampaignStepId){ + var sorting; + var campaignId; + + [campaignId,sorting] = newSelect(["CAMPAIGNSTEP.CAMPAIGN_ID","CAMPAIGNSTEP.SORTING"]) + .from("CAMPAIGNSTEP") + .where("CAMPAIGNSTEP.CAMPAIGNSTEPID",pCampaignStepId) + .arrayRow(); + + sorting = parseInt(sorting); + + + newWhere("CAMPAIGNSTEP.CAMPAIGN_ID",campaignId) + .and("CAMPAIGNSTEP.SORTING",sorting+1) + .updateFields({"SORTING":sorting}); + + newWhere("CAMPAIGNSTEP.CAMPAIGNSTEPID",pCampaignStepId) + .updateFields({"SORTING":sorting+1}); } \ No newline at end of file diff --git a/process/ChecklistEntryRegistry_basic/process.js b/process/ChecklistEntryRegistry_basic/process.js index 6c0844894e10196c30f9f3ea2dddedcf782f65be..53e11df9ba9dcffa0cd8c09539a158ec71f5c090 100644 --- a/process/ChecklistEntryRegistry_basic/process.js +++ b/process/ChecklistEntryRegistry_basic/process.js @@ -1,5 +1,5 @@ +import("Attribute_lib"); import("Keyword_lib"); -import("system.logging"); import("system.eMath"); import("system.datetime"); import("system.translate"); @@ -214,17 +214,21 @@ $ChecklistEntryRegistry.salesprojectRoleIntDist = function(){ return{ title: translate.text("Project team: \"Internal distribution\""), verifierFn: function(pSalesprojectId){ - var spRows = $ChecklistEntryRegistry._getRows(pSalesprojectId, "Salesproject_entity", ["SALESPROJECTID", "MST_TEAM_ID", "PROJECTCODE"], null, "NoPhaseRequirementLoading"); - var memberRows = $ChecklistEntryRegistry._getRows(null, "Member_entity", ["MEMBERROLE"], [["EnableMSTeams_param", spRows[0]["MST_TEAM_ID"]], ["ObjectRowId_param", spRows[0]["SALESPROJECTID"]]], "WithDistrictResponsibles"); + var memberRows = $ChecklistEntryRegistry._getRows(null, "Member_entity", ["MEMBERROLE"], [["EnableMSTeams_param", spRows[0]["MST_TEAM_ID"]], + ["ObjectRowId_param", spRows[0]["SALESPROJECTID"]]], "WithDistrictResponsibles"); + var roles = ["MEMROLEINTSALES", "MEMROLEINTRESPONSIBLE"]; + for (let i = 0; i < memberRows.length; i++) { - if(memberRows[i]["MEMBERROLE"] == $KeywordRegistry.memberRoleIntenDistrib()) + var role = memberRows[i]["MEMBERROLE"]; + var index = roles.indexOf(role); + if (index !== -1) { - return true; + roles.splice(index, 1); } } - return false; + return roles.length == 0; } }; } @@ -407,3 +411,116 @@ $ChecklistEntryRegistry.salesprojectContractExists = function(){ } }; } + +/* + * Checks whether the project team roles: + * Initiator, Decition Maker, Influencer, User, Buyer + * are filled for the given salesproject. + */ +$ChecklistEntryRegistry.salesprojectRoleProjectteam = function(){ + return{ + title: translate.text("Project team"), + verifierFn: function(pSalesprojectId){ + var spRows = $ChecklistEntryRegistry._getRows(pSalesprojectId, "Salesproject_entity", ["SALESPROJECTID", "MST_TEAM_ID", "PROJECTCODE"], null, "NoPhaseRequirementLoading"); + var memberRows = $ChecklistEntryRegistry._getRows(null, "Member_entity", ["MEMBERROLE"], [["EnableMSTeams_param", spRows[0]["MST_TEAM_ID"]], + ["ObjectRowId_param", spRows[0]["SALESPROJECTID"]]], "WithDistrictResponsibles"); + var roles = ["MEMROLEINITIATOR", "MEMROLEDECISIONMAKER", "MEMROLEADVISE", "MEMROLEUSER", "MEMROLEEXSALEMANAG"]; + var halfLength = Math.floor(roles.length / 2); + + for (let i = 0; i < memberRows.length; i++) + { + var role = memberRows[i]["MEMBERROLE"]; + var index = roles.indexOf(role); + if (index !== -1) + { + roles.splice(index, 1); + } + } + return roles.length <= halfLength; + } + }; +} + +/* + * Further customer discussions + * (= activity for the category visit, telephone or online meeting has been created) + */ +$ChecklistEntryRegistry.salesprojectFurtherCustomerMeetings = function(){ + return{ + title: translate.text("Further customer meetings"), + verifierFn: function(pSalesprojectId){ + var activityCount = newSelect("count(*)").from("ACTIVITYLINK") + .join("ACTIVITY", newWhere("ACTIVITY.ACTIVITYID = ACTIVITYLINK.ACTIVITY_ID")) + .where("ACTIVITYLINK.OBJECT_TYPE", "Salesproject") + .and("ACTIVITYLINK.OBJECT_ROWID", pSalesprojectId) + .and("ACTIVITY.CATEGORY", [ + $KeywordRegistry.activityCategory$visit(), + $KeywordRegistry.activityCategory$phone(), + $KeywordRegistry.activityCategory$onlineMeeting() + ], SqlBuilder.IN()).cell(); + return parseInt(activityCount) > 0; + } + }; +} + +/* + * Prioritization based on segmentation parameters + * (Explanation: there are 4 segmentation parameters in the standard: + * Industry, company size, country, feasibility assessment. + * These 4 parameters prioritize the project as A, B, C, D project. In the lead phase, + * the segmentation must be supplemented by the feasibility the result is the segmentation A, B, C, D). + */ +$ChecklistEntryRegistry.salesprojectSegmentPrio = function(){ + return{ + title: translate.text("Prioritization based on segmentation parameters"), + verifierFn: function(pSalesprojectId){ + var classificStr = newSelect("CLASSIFICATIONVALUE") + .from("CLASSIFICATIONSTORAGE") + .where("CLASSIFICATIONSTORAGE.OBJECT_TYPE", "Salesproject") + .and("CLASSIFICATIONSTORAGE.OBJECT_ROWID", pSalesprojectId).cell() || "-"; + return classificStr.indexOf("-") === -1; + } + }; +} + +/** + * First customer conversation: Activity for personal contact created + * (= activity for the category visit, telephone or online meeting is created) + */ +$ChecklistEntryRegistry.salesprojectFirstCustConv = function(){ + return{ + title: translate.text("First customer conversation"), + verifierFn: function(pSalesprojectId){ + var activitiesSubSql = newSelect("ACTIVITY.ACTIVITYID").from("ACTIVITYLINK") + .join("ACTIVITY", newWhere("ACTIVITY.ACTIVITYID = ACTIVITYLINK.ACTIVITY_ID")) + .where("ACTIVITYLINK.OBJECT_TYPE", "Salesproject") + .and("ACTIVITYLINK.OBJECT_ROWID", pSalesprojectId) + .and("ACTIVITY.CATEGORY", [ + $KeywordRegistry.activityCategory$visit(), + $KeywordRegistry.activityCategory$phone(), + $KeywordRegistry.activityCategory$onlineMeeting() + ], SqlBuilder.IN()); + + var activityCount = newSelect("count(*)").from("ACTIVITYLINK") + .where("ACTIVITYLINK.ACTIVITY_ID", activitiesSubSql, SqlBuilder.IN()); + return parseInt(activityCount.cell()) > 0; + } + }; +} + +/** + * Automatic: Source / origin of the generation of contacts is known + * and stored as a property for a new sales project (e.g. website, recommendation, etc.) + */ +$ChecklistEntryRegistry.salesprojectContactsGenerationSource = function(){ + return{ + title: translate.text("Source / origin of the generation of contacts"), + verifierFn: function(pSalesprojectId){ + return new AttributeRelationQuery( + pSalesprojectId, + "d0ae40d2-1a7f-45f6-bb0c-20ce6ae7efe2", + "Salesproject" + ).getAttributeCount() > 0; + } + }; +} diff --git a/process/ClassificationComplexIndicatorRegistry_basic/ClassificationComplexIndicatorRegistry_basic.aod b/process/ClassificationComplexIndicatorRegistry_basic/ClassificationComplexIndicatorRegistry_basic.aod new file mode 100644 index 0000000000000000000000000000000000000000..05d0390e092ba8c9eec82b6700dc1bf25d157468 --- /dev/null +++ b/process/ClassificationComplexIndicatorRegistry_basic/ClassificationComplexIndicatorRegistry_basic.aod @@ -0,0 +1,10 @@ +<?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.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> + <name>ClassificationComplexIndicatorRegistry_basic</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <process>%aditoprj%/process/ClassificationComplexIndicatorRegistry_basic/process.js</process> + <alias>Data_alias</alias> + <variants> + <element>LIBRARY</element> + </variants> +</process> diff --git a/process/ClassificationComplexIndicatorRegistry_basic/process.js b/process/ClassificationComplexIndicatorRegistry_basic/process.js new file mode 100644 index 0000000000000000000000000000000000000000..67ab0b2771fdfcb292ebdeb57644b3c10d3538ae --- /dev/null +++ b/process/ClassificationComplexIndicatorRegistry_basic/process.js @@ -0,0 +1,314 @@ +import("AttributeRegistry_basic"); +import("Classification_lib"); +import("Contact_lib"); +import("Sql_lib"); +import("system.datetime"); +import("system.eMath"); +import("system.translate"); +import("system.vars"); + +/** + * Provides a central place where all complex classificationIndications are defined. + * <p> + * All defined entries has to return a object of type "ClassificationIndicatior". + * <p> + * This object has the following attributes: + * <p> + * <u><b><i>name</i></u></b>: The name e.g: "forecastSum" -> has to be unique, so we can clearly identificate them and get a specific indicator using it's name + * <p> + * <u><b><i>title</i></u></b>: The translated title e.g: translate.text("Total of Forecasts") -> used for displaying in the client + * <p> + * <u><b><i>getValueFn</i></u></b>: This attribute is a function, that expects the objectType and the objectId and returns the value for said object (used in classificationUpdate to get the value for said organisation for example) + * <p> + * <u><b><i>type</i></u></b>: Field type, see also $ClassificationFieldTypes (different handling depending on the field type) + * <p> + * <u><b><i>getPossibileValuesFn</i></u></b>: This attribute is a function, that returns the possible values and their displayValues in an twodimensional array (as needed in a dropDownProcess) + * of the indicator (but only for indicators of the dropdown type, and not for numbers, since those work differently) + * <p> + * <u><b><i>objectType</i></u></b>: The object Type + * <p> + * <u><b><i>getActualDateValueFn</i></u></b>: This attribute is a function, for the date indicators that expects a keyValue of a date and returns the actual date (e.g: "inOneYear" returns "1651622400000" + * <p> + * + * @class + * + * @example + * $ClassificationComplexIndicatorRegistry.forecastSum() + */ +function $ClassificationComplexIndicatorRegistry(){} + +/* + * Total of forecasts: get's the best forecasts of each product and sums them up + * <p>type: $ClassificationFieldTypes.NUMBER() + */ +$ClassificationComplexIndicatorRegistry.forecastSum = function(){ + return{ + name: "forecastSum", + title: translate.text("Total of Forecasts"), + getValueFn: function(pObjectType, pObjectId){ + var bestForecasts = newSelect("max(FORECAST.VOLUME)") + .from("FORECAST") + .where("FORECAST.OBJECT_TYPE", pObjectType) + .and("FORECAST.OBJECT_ROWID", pObjectId) + .groupBy("FORECAST.GROUPCODE") + .arrayColumn(); + var forecastSum = 0; + bestForecasts.forEach(function(forecast) + { + forecastSum += forecast; + }) + return forecastSum; + }, + type: $ClassificationFieldTypes.NUMBER(), + getDisplayValueFn: function(pValue) + { + return pValue; + }, + objectType: "Salesproject" + }; +}; + +/* + * Industry of the the Organisation the salesproject belongs to. + * <p>type: $ClassificationFieldTypes.DROPDOWN() + */ +$ClassificationComplexIndicatorRegistry.salesprojOrgIndustry = function(){ + return{ + name: "salesprojOrgIndustry", + title: translate.text("Industry of Organisation"), + getValueFn: function(pObjectType, pObjectId){ + return newSelect("AB_ATTRIBUTERELATION.ID_VALUE") + .from("AB_ATTRIBUTERELATION") + .where("AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID", $AttributeRegistry.industry()) + .and("AB_ATTRIBUTERELATION.OBJECT_ROWID", ContactUtils.getOrganisationContactId(newSelect("SALESPROJECT.CONTACT_ID") + .from("SALESPROJECT") + .where("SALESPROJECT.SALESPROJECTID", pObjectId).cell())) + .arrayRow(); + }, + getPossibileValuesFn: function() + { + return valueArray = ClassificationComplexIndicatorRegistryUtils.getAttributesByParentId($AttributeRegistry.industry()); + }, + type: $ClassificationFieldTypes.DROPDOWN(), + getDisplayValueFn: function(pValue) + { + return translate.text(newSelect("AB_ATTRIBUTE.ATTRIBUTE_NAME") + .from("AB_ATTRIBUTE") + .where("AB_ATTRIBUTE.AB_ATTRIBUTEID", pValue) + .cell()); + }, + objectType: "Salesproject" + + }; +}; + +/* + * Startdate of the salesproject. + * <p>type: $ClassificationFieldTypes.DATE(), + */ +$ClassificationComplexIndicatorRegistry.salesprojectStart = function(){ + return{ + name: "salesprojectStart", + title: translate.text("Project start"), + getValueFn: function(pObjectType, pObjectId){ + return newSelect("SALESPROJECT.STARTDATE") + .from("SALESPROJECT") + .where("SALESPROJECT.SALESPROJECTID", pObjectId) + .cell(); + }, + getPossibileValuesFn: function() + { + return ClassificationComplexIndicatorRegistryUtils.defaultDateStartValueArray(); + }, + type: $ClassificationFieldTypes.DATE(), + getDisplayValueFn: function(pValue) + { + var displayValueObject = ClassificationComplexIndicatorRegistryUtils.defaultDateDisplayObject(ClassificationComplexIndicatorRegistryUtils.defaultDateValueObject()); + var val = displayValueObject != undefined && displayValueObject[pValue] != undefined ? displayValueObject[pValue] : "-"; + return val; + }, + getActualDateValueFn: function(pValue) + { + var defaultDateValue = ClassificationComplexIndicatorRegistryUtils.defaultDateValueObject(); + var val = defaultDateValue[pValue] != undefined + && defaultDateValue[pValue][0] != undefined + ? defaultDateValue[pValue][0] : "-"; + return val; + }, + objectType: "Salesproject" + + }; +}; + +function ClassificationComplexIndicatorRegistryUtils(){} + +/* + * Returns a array of all existing complex indicators <br> + * <p> + * Used in a dropDownProcess for example to provide a + * selection of all possible complex indicators. + * Returns a array of all existing complex indicators <br> + * <p> + * @param {String} pObjectType <p/> the object type you want the complex indicators for + * + * @return {Array[][]} [[key, displayValue]] Array <br/> + */ +ClassificationComplexIndicatorRegistryUtils.getComplexIndicatorArray = function(pObjectType){ + var rawList = Object.keys($ClassificationComplexIndicatorRegistry); + var complexIndicatorArray = []; + + rawList.forEach(function(pEntry){ + if ($ClassificationComplexIndicatorRegistry[pEntry]()["objectType"] == pObjectType) + { + complexIndicatorArray.push([$ClassificationComplexIndicatorRegistry[pEntry]()["name"], $ClassificationComplexIndicatorRegistry[pEntry]()["title"]]); + } + }); + + return complexIndicatorArray; +}; + +/* + * Returns the value array the parsed complex indicator <br> + * <p> + * Used in a dropDownProcess for example to provide a + * selection of all possible complex indicators. + * + * @param {String} pName <p/> name attribute of the complexIndicator you want the value array for + * + * @return {Array[][]} [[key, displayValue]] Array <br/> + */ +ClassificationComplexIndicatorRegistryUtils.getComplexIndicatorValueArray = function(pName) +{ + var rawList = Object.keys($ClassificationComplexIndicatorRegistry); + var complexIndicatorValueArray = [[],[]]; + + rawList.forEach(function(pEntry){ + if ($ClassificationComplexIndicatorRegistry[pEntry]()["name"] == pName) + { + complexIndicatorValueArray = $ClassificationComplexIndicatorRegistry[pEntry]().getPossibileValuesFn(); + } + }); + + return complexIndicatorValueArray; +}; + +/* + * Complex Dates work using a dropDown with timespans so the user can't just specify any date as an value.<br> + * <p> + * This is an example of how this could look like (used for $ClassificationComplexIndicatorRegistry.salesprojectStart) + * <p> + * @return {Object{Array[][]}} Object with keys ("oneYearAgo") with their actual value ("1651622400000") and the displayValue (translate.text("within the last year")) in an two dimensional Array<br/> + */ +ClassificationComplexIndicatorRegistryUtils.defaultDateValueObject = function() +{ + var today = vars.get("$sys.today"); + var lastMonth = eMath.subInt(today, datetime.ONE_WEEK * 4); + var sixMonthsAgo = eMath.subInt(today, datetime.ONE_WEEK * 4 * 6); + var oneYearAgo = eMath.subInt(today, datetime.ONE_WEEK * 4 * 12); + var nextMonth = eMath.addInt(today, datetime.ONE_WEEK * 4); + var inSixMonths = eMath.addInt(today, datetime.ONE_WEEK * 4 * 6); + var inOneYear = eMath.addInt(today, datetime.ONE_WEEK * 4 * 12); + + var resObject = {}; + resObject["oneYearAgo"] = []; + resObject["oneYearAgo"].push(oneYearAgo, translate.text("within the last year")); + resObject["sixMonthsAgo"] = []; + resObject["sixMonthsAgo"].push(sixMonthsAgo, translate.text("within the last six Months")); + resObject["lastMonth"] = []; + resObject["lastMonth"].push(lastMonth, translate.text("within the last Month")); + resObject["nextMonth"] = []; + resObject["nextMonth"].push(nextMonth, translate.text("within the next Month")); + resObject["inSixMonths"] = []; + resObject["inSixMonths"].push(inSixMonths, translate.text("within the next six Months")); + resObject["inOneYear"] = []; + resObject["inOneYear"].push(inOneYear, translate.text("within the next year")); + + return resObject; +}; + +/* + * Returns the possible values and their displayValues in an Object. + * <p> + * Watchout, because the key is using the actual Value ("1651622400000") and not the placeholder ("oneYearAgo"). + * (So the keys are changing everyday!) + * <br> + * <p> + * For more information see also ClassificationComplexIndicatorRegistryUtils.defaultDateValueObject + * <p> + * + * @param {Array} pValueObject <p/> object with key ("oneYearAgo") and two dimensional array with actual value("1651622400000") + * and displayvalue(translate.text("within the last year")) e.g: ClassificationComplexIndicatorRegistryUtils.defaultDateValueObject() + * + * @return {Array[][]} [[key, displayValue]] Array <br/> + */ +ClassificationComplexIndicatorRegistryUtils.defaultDateDisplayObject = function(pValueObject) +{ + var valueObject = pValueObject; + var displayValueObject = {}; + for(let key in valueObject) + { + displayValueObject[valueObject[key][0]] = valueObject[key][1]; + } + + return displayValueObject; +}; + +/* + * Returns the possible values and their displayValues in an twodimensional array. + * <p> + * Watchout, because the keyValue is the actual Value ("1651622400000") and not the placeholder ("oneYearAgo"). + * (So don't use it in an dropDownProcess, since the keys are changing everyday!) + * <br> + * <p> + * For more information see also ClassificationComplexIndicatorRegistryUtils.defaultDateValueObject + * <p> + * @return {Array[][]} [[key, displayValue]] Array <br/> + */ +ClassificationComplexIndicatorRegistryUtils.defaultDateStartValueArray = function() +{ + var valueObject = ClassificationComplexIndicatorRegistryUtils.defaultDateValueObject(); + var resArray = []; + for(var key in valueObject) + { + resArray.push([key, valueObject[key][1]]); + } + return resArray; +}; + +/* + * Translates the parsed attribute Array. + * <br> + * + * @param {Array} pAttributeArray <p/> the attribute array + * + * @return {Array} pAttributeArray but with translated displayValues<br/> + */ +ClassificationComplexIndicatorRegistryUtils.translateAttributeArray = function(pAttributeArray) +{ + let attributeArray = pAttributeArray; + for (let i = 0; i < attributeArray.length; i++) + { + attributeArray[i][1] = translate.text(attributeArray[i][1]); + } + return attributeArray; +}; + +/* + * Get's all attributes of by their parent Id + * <br> + * + * @param {Array} pParentId <p/> the attribute parent id + * + * @return {Array} pAttributeArray but with translated displayValues<br/> + */ +ClassificationComplexIndicatorRegistryUtils.getAttributesByParentId = function(pParentId) +{ + let attributeArray = newSelect("AB_ATTRIBUTE.AB_ATTRIBUTEID, AB_ATTRIBUTE.ATTRIBUTE_NAME") + .from("AB_ATTRIBUTE") + .where("AB_ATTRIBUTE.ATTRIBUTE_PARENT_ID", pParentId) + .and("AB_ATTRIBUTE.ATTRIBUTE_ACTIVE", 1) + .table(); + + attributeArray = ClassificationComplexIndicatorRegistryUtils.translateAttributeArray(attributeArray); + return attributeArray; +}; \ No newline at end of file diff --git a/process/ClassificationFilter_lib/process.js b/process/ClassificationFilter_lib/process.js index d99652fcf5c671b48ff348ea8cc7b6d9c9a1a7bc..b8f9200553dbaf817b3245ae3cd884102e43724e 100644 --- a/process/ClassificationFilter_lib/process.js +++ b/process/ClassificationFilter_lib/process.js @@ -1,158 +1,11 @@ import("Context_lib"); -import("Classification_lib"); import("Entity_lib"); import("Sql_lib"); import("system.entities"); -import("system.SQLTYPES"); -import("system.translate"); import("system.util"); import("system.vars"); import("Util_lib"); -/** - * Methods used for the classification type filter extension set - * Do not create an instance of this! - * - * @class - */ -function ClassificationTypeFilterUtils() {} - -/** - * fetches classificationtypes and transforms them into filter fields - * <br/> - * <br/> - * Important: - * <br/> - * Any changes to the name of the filterFields does also have to be changed in the filterTreeExcludeFieldsProcess of the filterField of the classificationAdmin_entity - * - * @param {String} pObjectType <p/> contextId of the context whoes classification types are used for providing the filter fields - * - * @return {String} <p/> field-definitions (array of objects) that are ready to use for a filterExtensionSet in a stringified form - * <br/> The object within the array contains the following properties: - * <ul> - * <li>name - classificationtypeid (UUID of the classificationtype)</li> - * <li>title - "classification: " + string of the classificationtype translated (for the end user)</li> - * <li>contentType - string of the neon-contentType (TEXT)</li> - * <li>hasDropDownValues - boolean if possible values have to be calculated or not (always true atm)</li> - * </ul> - * @static - */ -ClassificationTypeFilterUtils.getFilterFields = function(pObjectType) -{ - var res = []; - var scoreTypes = newSelect("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID, CLASSIFICATIONTYPE.SCORETYPE, CLASSIFICATIONGROUP.TITLE") - .from("CLASSIFICATIONTYPE") - .join("CLASSIFICATIONGROUP", "CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID = CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID") - .where("CLASSIFICATIONTYPE.OBJECT_TYPE", pObjectType) - .orderBy("CLASSIFICATIONTYPE.SCORETYPE asc") - .table(); - - var titleField = SqlUtils.translateStatementWithQuotes(ClassificationTypeFilterUtils.getTranslationSql()); - for (let i = 0; i < scoreTypes.length; i++) - { - res.push({ - name: scoreTypes[i][0], - title: translate.text(scoreTypes[i][2])+ ": " + translate.text(scoreTypes[i][1]), - contentType: "TEXT", - hasDropDownValues: true, - isGroupable: true, // These Fields are also able to be grouped - groupedRecordField: "CLASSIFICATION.VALUE", // The DB-field that is being grouped by (see also groupQueryProcess) - titleRecordField: titleField // The displayname (see also groupQueryProcess) - }); - } - - return JSON.stringify(res); -} - -/** - * fetches classificationscores that are filterable and transforms them into filter fields for the current context - * - * @see ClassificationTypeFilterUtils.getFilterFields for more details - * @static - */ -ClassificationTypeFilterUtils.makeFilterFields = function() -{ -var filter = JSON.parse(vars.getString("$local.filter")); - -var classificationTypeId = filter.name; - -var classificationValue = newSelect("CLASSIFICATIONSCORE.CLASSIFICATIONSCOREID, CLASSIFICATIONSCORE.TITLE") - .from("CLASSIFICATIONSCORE") - .where("CLASSIFICATIONSCORE.CLASSIFICATIONTYPE_ID", classificationTypeId) - .orderBy("CLASSIFICATIONSCORE.TITLE") - .table(); - - -for (let i = 0; i < classificationValue.length; i++) - classificationValue[i][1] = translate.text(classificationValue[i][1]) - -return classificationValue; -} - -/** - * Builds a Sql-condition for a classification filter extension set. This allows to filter for classificationtypes within a db-table - * - * @see ClassificationTypeFilterUtils.getFilterCondition for more details - * @static - */ -ClassificationTypeFilterUtils.makeFilterConditionSql = function() -{ - var filterCond = vars.get("$local.condition"); - var uidInfo = EntityUtils.parseUidColumn(vars.get("$sys.uidcolumn")); - var columnPlaceholder = vars.get("$local.columnPlaceholder"); - var res = ClassificationTypeFilterUtils.getFilterCondition(filterCond, uidInfo.table, uidInfo.column, columnPlaceholder); - - return res; -} - -/** - * Builds a Sql-condition that may be used in a filter extension set and allows to filter for classificationtypes within a db-table - * - * @param {String} pCondition <p/> a SQL-condition like it is given in the "$local.condition"-variable in filter extension sets - * @param {String} pIdTableName <p/> name of the db-table where the data shall be filtered - * @param {String} pIdColumnName <p/> name of the primarykey-column of the table that was given via pIdTablename - * @param {String} pColumnPlaceholder <p/> name of the placeholder where the columnname should be like it is given in the - * "$local.columnPlaceholder"-variable in filter extension sets - * - * @return {SqlBuilder} <p/> a SqlBuilder-condition that contains a sub-select and may be used for filtering data - * @static - */ -ClassificationTypeFilterUtils.getFilterCondition = function(pCondition, pIdTableName, pIdColumnName, pColumnPlaceholder) -{ - var resSql; - - var condition = StringUtils.replaceAll(pCondition, pColumnPlaceholder, "CLASSIFICATION.VALUE"); - - //a SqlBuilder.IN() in a newWhere is not used here since the subselect can contain a placeholder - //(the variable condition) that would break the function - resSql = pIdTableName + "." + pIdColumnName + " in (" + newSelect(pIdTableName + "." + pIdColumnName) - .from(pIdTableName) - .leftJoin("CLASSIFICATION", newWhere("CLASSIFICATION.OBJECT_ROWID = " + pIdTableName + "." + pIdColumnName)) - .where(condition) + ")"; - - return resSql; -}; - -/** -* gets all titletranslations of the classification scores -* -* -* @return {String} a SQL-expression (case-when-statement) that resolves the KEYID into the title -> as preparedSatement-elements -*/ -ClassificationTypeFilterUtils.getTranslationSql = function() -{ - - var config = entities.createConfigForLoadingRows().entity("ClassificationScore_entity") - .fields(["CLASSIFICATIONSCOREID", "translatedTitle"]); - - - var rows = entities.getRows(config); - var res = SqlUtils.getResolvingCaseWhenFromObject(rows, "CLASSIFICATIONSCOREID", "translatedTitle", "VALUE"); - return res; -} - - - /** * Procides static methods for en- or decoding classification group filter names * ClassifcationGroupFilter names are shared over several processes and contain therefore various information @@ -270,10 +123,12 @@ ClassificationGroupFilterUtils.getFilterFields = function(pObjectType) }); return JSON.stringify(res); }; - -ClassificationGroupFilterUtils.makeFilterFields = function() +/* +*@param {String} pAlternativeContext If anoter context instead of the current context should be used, the context can be specified with this parameter. +*/ +ClassificationGroupFilterUtils.makeFilterFields = function(pAlternativeContext) { - var objectType = ContextUtils.getCurrentContextId(); + var objectType = pAlternativeContext || ContextUtils.getCurrentContextId(); var res = ClassificationGroupFilterUtils.getFilterFields(objectType); return res; }; @@ -339,8 +194,10 @@ ClassificationGroupFilterUtils.getFilterCondition = function(pObjectType, pFilte //"or" needed since we want to filter both the ones that have no classification for said classificationgroup ("-") //and the ones that have null as the value (since not all datasets have a CLASSIFICATIONSTORAGE dataset) the same way // since both don't have an classification for that group - if(pOperatorName == "IS NULL") + if (pOperatorName == "IS NULL") + { condition += " OR " + decodedFilterName.representingSqlExpression +"='-'" ; + } return condition; }; @@ -434,11 +291,15 @@ ClassificationGroupFilterUtils.getDefaultGroupQuery = function(pIdTableName, pId { var condition = pCondition.trim(); if (condition) + { stmt.where(condition); + } } if (pOrder) + { stmt.orderBy(pOrder); + } stmt.groupBy(pGroupedColumns); return stmt; diff --git a/process/ClassificationIndicatorFieldRegistry_basic/ClassificationIndicatorFieldRegistry_basic.aod b/process/ClassificationIndicatorFieldRegistry_basic/ClassificationIndicatorFieldRegistry_basic.aod new file mode 100644 index 0000000000000000000000000000000000000000..daaa98ed0f3ff0b3703802ea2d422a5b56eabbb6 --- /dev/null +++ b/process/ClassificationIndicatorFieldRegistry_basic/ClassificationIndicatorFieldRegistry_basic.aod @@ -0,0 +1,10 @@ +<?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.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> + <name>ClassificationIndicatorFieldRegistry_basic</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <process>%aditoprj%/process/ClassificationIndicatorFieldRegistry_basic/process.js</process> + <alias>Data_alias</alias> + <variants> + <element>LIBRARY</element> + </variants> +</process> diff --git a/process/ClassificationIndicatorFieldRegistry_basic/process.js b/process/ClassificationIndicatorFieldRegistry_basic/process.js new file mode 100644 index 0000000000000000000000000000000000000000..24d723a08394171c10996e4928200bc830e301a9 --- /dev/null +++ b/process/ClassificationIndicatorFieldRegistry_basic/process.js @@ -0,0 +1,68 @@ +import("Context_lib"); +import("system.project"); +import("system.translate"); + +/** + * Provides a central place where all classificationIndicatiorFields are defined. + * <p> + * Currently there is no option to gett all the dropdown and number fields of an entity so we have to define them by hand. + * Feel free to change this once it becomes possible! + * <p> + * @class + * + */ +function $ClassificationIndicatorRegistry(){} + +/** + * Returns the entity dropdown fields of pObjectType + * <p/> + * @param {Object} pObjectType <p/> object type we want the fields for + * + * @return {Array} Array with array of [[value], [displayvalue]] (like in a dropdownproess) + */ +$ClassificationIndicatorRegistry.getEntityDropDownFields = function(pObjectType) +{ + let res = []; + let entity = ContextUtils.getEntity(pObjectType); + if (pObjectType == "Organisation") + { + res = [ + ["STATUS", project.getEntityStructure(entity)["fields"]["STATUS"]["title"]], + ["TYPE", project.getEntityStructure(entity)["fields"]["TYPE"]["title"]] + ]; + } + else if (pObjectType == "Salesproject") + { + res = [ + ["CONTACT_ID", project.getEntityStructure(entity)["fields"]["CONTACT_ID"]["title"]], + ["PHASE", project.getEntityStructure(entity)["fields"]["PHASE"]["title"]], + ["STATUS", project.getEntityStructure(entity)["fields"]["STATUS"]["title"]] + ]; + + } + return res; +}; + +/** + * Returns the entity number fields of pObjectType + * <p/> + * @param {Object} pObjectType <p/> object type we want the fields for + * + * @return {Array} Array with array of [[value], [displayvalue]] (like in a dropdownproess) + */ +$ClassificationIndicatorRegistry.getEntityNumberFields = function (pObjectType) +{ + let res = []; + if (pObjectType == "Organisation") + { + res = []; + } + else if (pObjectType == "Salesproject") + { + res = [ + ["PROBABILITY", translate.text("Probability")],//number + ["VOLUME", translate.text("Volume")]//number]; + ]; + } + return res; +} \ No newline at end of file diff --git a/process/ClassificationUpdate_lib/ClassificationUpdate_lib.aod b/process/ClassificationUpdate_lib/ClassificationUpdate_lib.aod new file mode 100644 index 0000000000000000000000000000000000000000..b288b713658fef5046085f038e4f7481e42d6747 --- /dev/null +++ b/process/ClassificationUpdate_lib/ClassificationUpdate_lib.aod @@ -0,0 +1,10 @@ +<?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.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> + <name>ClassificationUpdate_lib</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <process>%aditoprj%/process/ClassificationUpdate_lib/process.js</process> + <alias>Data_alias</alias> + <variants> + <element>LIBRARY</element> + </variants> +</process> diff --git a/process/ClassificationUpdate_lib/process.js b/process/ClassificationUpdate_lib/process.js new file mode 100644 index 0000000000000000000000000000000000000000..e12e2235ffba962340b03a0121e80b799a13b593 --- /dev/null +++ b/process/ClassificationUpdate_lib/process.js @@ -0,0 +1,1756 @@ +import("AttributeFilter_lib"); +import("ClassificationComplexIndicatorRegistry_basic"); +import("ClassificationIndicatorFieldRegistry_basic"); +import("Classification_lib"); +import("Context_lib"); +import("JditoFilter_lib"); +import("Organisation_lib"); +import("Sql_lib"); +import("Util_lib"); +import("system.db"); +import("system.eMath"); +import("system.entities"); +import("system.logging"); +import("system.translate"); +import("system.util"); + +/** + * Methods to manage classifications.<br> + * <b>Do not create an instance of this!</b> + * + * @class + */ +function ClassificationUpdateUtils() {} + +/** + * Refresh function that get's used by the updateClassifications_serverProcess and the openClassificationOverView Actions at Organisation and Salesproject.<br> + * There are three ways to run this: only recalculating the outdated data (and updating if needed), only for a specific object and returning it's classification (and updating it's stored classification) or recalculating ALL the classifications (and updating if needed).<br> + * ClassificationTypes are being flagged as Outdated accordingly, everytime someone configures something in ClassificationAdmin.<br> + * The classificationStorageDatasets are being flagged as outdated as soon as you update anything regarding the corresponding object or insert/update + * anything with a dependency set to said object.<br> + * + * Calling this function without any params leads to it updating only for the datasets that have been flagged as outdated. + * <p> + * First it checks whether outdated classificationStorages and outdated classificationTypes exist + * and always updates the classificationStorages first before updating the for the outdated classificationTypes. + * + * -In the classificationStorage runtrough it calculates the complete classification for every outdated classificationStorage, entirely + * from scratch and updates the classificationStorage + * -In the classificationType runtrough it also updates the classificationStorage dataset, but this time + * -for every object of said objectType + * -only recalculates the flagged ones and relies on the already stored values of the not flagged classificationTypes if they are from another classificationGroup + * <p> + * When recalculateAll_param is set to true: now the outdated flag is being ignored and all classificationtypes as outdated (only one runtrough needed) + * <p> + * When pSingleRefreshRowId we only update said object and return the achieved classifications (the stored classificationStorage string is also being updated if needed) + * + * @param {Boolean}[pRefreshAll] <p> + * Whether or not to recalculate and refresh all classifications<br> + * + * @param {String}[pSingleRefreshRowId] <p> + * object row id of the dataset you want the classification for (also returns the + * classification as formatted Object for Classification_entity jDito contentprocess)<br> + * + * @param {String}[pObjectType] <p> + * The Object type of the object row id. (Mandatory if pSingleRefreshRowId is set!)<br> + * This is normally just the Context name<br> + * + * @return {Object} <p> + * If pSingleRefreshRowId is set: Formatted Object to return to Classification_entity jDito + * contentprocess to show the achieved classifications (the stored classificationStorage string + * is also being updated if needed)<br> + * Else: Output in log how many Datasets have and have not been updated. + */ +ClassificationUtils.executeUpdating = function(pRefreshAll, pSingleRefreshRowId, pObjectType) +{ + var outputInfo = "updateClassifications_serverProcess output is:\n";//information how much data has been modified + var singleRefreshRowId = false; + var recalculateAll = false; + var objectType_param; + + if (pSingleRefreshRowId) + { + singleRefreshRowId = pSingleRefreshRowId; + objectType_param = pObjectType; + } + else if (pRefreshAll) + { + recalculateAll = pRefreshAll; + } + + var buildClassificationObjects = ClassificationUpdateHelper._buildClassificationFilterObjects(recalculateAll, singleRefreshRowId); + var stopper = false; + var buildOutdatedStoredClassificationObjects = ClassificationUpdateHelper._buildOutdatedStoredClassificationObject(recalculateAll, singleRefreshRowId, pObjectType); + + if (buildOutdatedStoredClassificationObjects && buildOutdatedStoredClassificationObjects["objectTypes"] + && buildOutdatedStoredClassificationObjects["objectTypes"].length > 0) + { + while(buildOutdatedStoredClassificationObjects["objectTypes"].length > 0 && !stopper) + { + if (singleRefreshRowId) + { + stopper = true; + } + var returnAfterUpdate = ClassificationUpdateHelper._updateOutdatedDatasets(null, buildOutdatedStoredClassificationObjects, singleRefreshRowId, outputInfo);//run updating for this set of Datasets + if(returnAfterUpdate && returnAfterUpdate["outputInfo"]) + { + outputInfo = returnAfterUpdate["outputInfo"]; + } + if (buildOutdatedStoredClassificationObjects["objectTypes"].length > 0 && !stopper) + { + buildOutdatedStoredClassificationObjects = ClassificationUpdateHelper._buildOutdatedStoredClassificationObject(recalculateAll, singleRefreshRowId, objectType_param); + } + } + + } + if (buildClassificationObjects["objectTypesThatNeedUpdate"] && buildClassificationObjects["objectTypesThatNeedUpdate"].length > 0 && !singleRefreshRowId) + { + var update = ClassificationUpdateHelper._updateOutdatedDatasets(buildClassificationObjects, null, null, outputInfo);//run updating for this set of Datasets + outputInfo = update["outputInfo"]; + } + else if(!returnAfterUpdate || !returnAfterUpdate["outputInfo"]) + { + outputInfo = outputInfo + "No Data has been updated, everything already up-to-date"; + } + + if (returnAfterUpdate && !returnAfterUpdate["outputInfo"]) + { + return ClassificationUpdateHelper._formatOutputForDisplayingValues(returnAfterUpdate, singleRefreshRowId); + } + logging.log(outputInfo); //return outputInformation in log instead of returning + + return null; +}; + +/** +* Throws an error if one of the values is configured the wrong way (more than one children, wrong condition or even wrong filterfield)<p><br> +* +* @param {Object}pClassificationType <p> +* classificationType as built as from pIndicatorObj<br> +* +* @param {Boolean}[pIsAttribute] <p> +* Whether or not it's an attribute<br> +* +*/ +ClassificationUtils.validateUserSetValues = function(pClassificationType, pIsAttribute) +{ + var errorMessage = ""; + if(pClassificationType["fieldType"] == $ClassificationFieldTypes.DROPDOWN()) + { + for (var filterValue in pClassificationType["values"]) + { + var parsedFilter = JSON.parse(filterValue); + if(parsedFilter["filter"]["childs"].length != 1) + { + errorMessage += translate.withArguments("wrong configuration for '%0'", [pClassificationType["field"]]) + " " + translate.text("only use simple filters") +"\n"; + } + else if((!pIsAttribute && parsedFilter["filter"]["childs"][0]["name"] != pClassificationType["field"]) || (pIsAttribute && !parsedFilter["filter"]["childs"][0]["name"].includes(pClassificationType["field"]))) + { + errorMessage += translate.withArguments("wrong configuration for '%0'", [pClassificationType["field"]]) + " " + translate.text("only filter using the specified indicatorfield") +"\n"; + } + else if(parsedFilter["filter"]["childs"][0]["operator"] != "EQUAL") + { + errorMessage += translate.withArguments("wrong configuration for '%0'", [pClassificationType["field"]]) + " " + translate.text("please only filter using 'equal'") +"\n"; + } + } + } + if(errorMessage != "") + { + throw errorMessage; + } +} + + +function ClassificationUpdateHelper() {} + +/** +* Searches for pClassificationTypeId in pIndicatorObj and returns it's object<p><br> +* +* @param {Object}pClassificationTypeId <p> +* condition of which classificationtypes to update<br> +* +* @param {Object}pIndicatorObj <p> +* return of buildindicatorObj()[objectType].<br> +* +* +* @return {Object} <p> (empty Strings and Objects if not found) +* {"classificationGroupId": classificationGroupId +* , "fieldType": fieldType +* , "field": field +* , "maxPercent": maxPercent +* , "points": points +* , "values": {value: pointsForValue}}<br> +*/ +ClassificationUpdateHelper._searchIndicatorObj = function(pClassificationTypeId, pIndicatorObj) +{ + for(var typeKind in pIndicatorObj) + { + for(var classificationTypeId in pIndicatorObj[typeKind]) + { + if (pClassificationTypeId == classificationTypeId) + { + if (typeKind != $ClassificationIndicatorTypes.ATTRIBUTE()) + { + return pIndicatorObj[typeKind][classificationTypeId]; + } + else + { + pIndicatorObj[typeKind][classificationTypeId]["field"] = newSelect("ATTRIBUTE_NAME") + .from("AB_ATTRIBUTE") + .where("AB_ATTRIBUTE.AB_ATTRIBUTEID", AttributeSearchNameCoder.decode(pIndicatorObj[typeKind][classificationTypeId]["field"])["id"]).cell(); + return pIndicatorObj[typeKind][classificationTypeId]; + } + } + } + } + return {"classificationGroupId": "" + , "fieldType": "" + , "field": "" + , "maxPercent": "" + , "points": "" + , "values": {}}; +}; + +/** +* Formats the output in an TwoDimensional array for Classification_entity and returns it (stringified!)<p><br> +* +* @param {Object}pReturn <p> +* return of ClassificationUpdateHelper._updateOutdatedDatasets()<br> +* +* @param {Object}pUid <p> +* objectRowId we want to show the classifications for<br> +* +* +* @return {String} <p> stringified contentProcessArray<br> +*/ +ClassificationUpdateHelper._formatOutputForDisplayingValues = function(pReturn, pUid) +{ + var indicatorObj = pReturn["indicatorObj"]; + var achievedScoresObject = pReturn["achievedScoresObject"][pUid]; + var orderedGroups = pReturn["orderedGroups"]; + var classificationString = pReturn["newGradingString"]; + var groupNameObj = {}; + var contentProcessArray = []; + var groupNames = newSelect("CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID, CLASSIFICATIONGROUP.TITLE") + .from("CLASSIFICATIONGROUP") + .table(); + for (let i = 0; i < groupNames.length; i++) + { + groupNameObj[groupNames[i][0]] = ""; + groupNameObj[groupNames[i][0]] = groupNames[i][1]; + } + var groupResultObj = {}; + for (var group in orderedGroups) + { + var groupId = orderedGroups[group]["0"]; + groupResultObj[groupId] = {}; + groupResultObj[groupId]["points"] = 0; + groupResultObj[groupId]["maxPoints"] = 0; + contentProcessArray.push([util.getNewUUID(), groupId, translate.text(groupNameObj[groupId]), "", "", "", "", ""]); + for (var typeId in achievedScoresObject[groupId]) + { + var typeInfo = ClassificationUpdateHelper._searchIndicatorObj(typeId, indicatorObj); + + if (achievedScoresObject[groupId][typeId]["key"] || achievedScoresObject[groupId][typeId]["key"] == "0") + { + contentProcessArray.push([util.getNewUUID(), groupId, "", typeId, achievedScoresObject[groupId][typeId]["fieldDisplay"], achievedScoresObject[groupId][typeId]["key"] + , achievedScoresObject[groupId][typeId]["value"], achievedScoresObject[groupId][typeId]["points"] + "/" + achievedScoresObject[groupId][typeId]["maxPoints"] + " " + translate.text("Points")]); + groupResultObj[groupId]["points"] = eMath.addInt(parseInt(groupResultObj[groupId]["points"]), parseInt(achievedScoresObject[groupId][typeId]["points"])); + groupResultObj[groupId]["maxPoints"] = eMath.addInt(parseInt(groupResultObj[groupId]["maxPoints"]), parseInt(achievedScoresObject[groupId][typeId]["maxPoints"])); + } + else + { + contentProcessArray.push([util.getNewUUID(), groupId, "", typeId, achievedScoresObject[groupId][typeId]["fieldDisplay"], "-" + , "-", "0" + "/" + typeInfo["points"] * typeInfo["maxPercent"] / 100 + " " + translate.text("Points")]); + groupResultObj[groupId]["points"] = eMath.addInt(parseInt(groupResultObj[groupId]["points"]), parseInt(0)); + groupResultObj[groupId]["maxPoints"] = eMath.addInt(parseInt(groupResultObj[groupId]["maxPoints"]), parseInt(typeInfo["points"] * typeInfo["maxPercent"] / 100)); + } + } + } + var position = 0; + for (let i = 0; i < contentProcessArray.length; i++) + { + if (contentProcessArray[i][2] && contentProcessArray[i][2] != "") + { + contentProcessArray[i][2] = ClassificationUtils.formatDisplaySummaryForGroup(groupResultObj[contentProcessArray[i][1]]["points"], groupResultObj[contentProcessArray[i][1]]["maxPoints"], contentProcessArray[i][2], classificationString.substring(position, position + 1)) + position++; + } + } + + return JSON.stringify(contentProcessArray); +}; + +/** +* Helper function, this get's used in ClassificationUpdateHelper._handleEntityFields, ClassificationUpdateHelper._handleAttributes an ClassificationUpdateHelper._handleComplex to get the correct value of the numbervalue<p><br> +* +* @param {Array}pAttributeValues <p> +* All values this object has for this attribute<br> +* +* @param {Object}pClassificationType <p> +* as returned by buildindicatorObj()<br> +* +* @param {Object}pColumns <p> +* columns of the objectType<br> +* +* @param {Object}pRows <p> +* rows of the dataset<br> +* +* @param {String}pValue <p> +* the valeu depending on the indicatortype<br> +* +* @param {boolean}pIsDate <p> +* true if date, since we handle those a little different<br> +* +* @return {Object} <p>{"key": 0 +* , "percent": 0 +* , "value": "-"} <- if none, else the actual values; +*/ +ClassificationUpdateHelper._getCorrectNumberValue = function(pAttributeValues, pClassificationType, pColumns, pRows, pValue, pIsDate) +{ + var storedValues; + if (pAttributeValues == undefined)//this record doesn't have a value for that attribute + { + storedValues = "ignoreThis"; + } + else if (pAttributeValues)//atleast one value exists for this attribute + { + storedValues = pAttributeValues; + } + else if (pColumns)//fieldValue -> get from pRows + { + storedValues = [pRows[pColumns.indexOf(pClassificationType["field"], 0)]]; + } + else + { + storedValues = [pValue]; + } + var achievedPercent = {}; + achievedPercent = {"key": 0 + , "percent": 0 + , "value": "-"}; + + if (pIsDate) + { + var orderedObject = {}; + Object.keys(pClassificationType["values"]) + .sort() + .forEach(function(v, i) { + orderedObject[v] = pClassificationType["values"][v]; + }); + pClassificationType["values"] = orderedObject; + } + + for(var value in pClassificationType["values"]) + { + if (storedValues != "ignoreThis") + { + for (var val in storedValues) + { + if (parseInt(storedValues[val]) >= parseInt(value) && parseInt(storedValues[val]) > parseInt(achievedPercent["key"])) + { + + achievedPercent = {}; + achievedPercent["key"] = value; + achievedPercent["value"] = storedValues[val]; + achievedPercent["percent"] = pClassificationType["values"][value]; + } + } + } + } + + return{"key": achievedPercent["key"] + , "value": achievedPercent["value"] + , "maxPoints": pClassificationType["maxPercent"]/100*pClassificationType["points"] + , "points": achievedPercent["percent"]/100*pClassificationType["points"] + }; +}; + +/** +* Builds the updateStatments.<p><br> +* +* @param {Object}pAchievedScores <p> +* AchievedScoresObject built by handlEntityFields(), handleAttributes() and handleComplex()<br> +* +* @param {Object}pGradingObject <p> +* gradingObject as returned by ClassificationUpdateHelper._buildGradingObject()<br> +* +* @param {Object}pOrderedGroups <p> +* classificationGroups in the correct order (so we can update at the correct positions)<br> +* +* @param {Object}pCurrentValue <p> +* current classificationStorage string<br> +* +* @param {String}pRowId <p> +* row Id of the current dataset<br> +* +* @param {boolean}pRowType <p> +* true if date, since we handle those a little different<br> +* +* @param {boolean}pUpdateStatements <p> +* the updateStatements we already have, we simply add ours to those<br> +* +* @param {String}pOutputInformation <p> +* we pass the outputinformation trough so we can add to the string<br> +* +* @return {Object} <p>{"updateStatements": updateStatements +* , "outputInformation": outputInformation +* , "newGradingString": newGradingString}; +*/ +ClassificationUpdateHelper._buildUpdateClassificationValueStatements = function(pAchievedScores, pGradingObject, pOrderedGroups, pCurrentValue, pRowId, pRowType, pUpdateStatements, pOutputInformation) +{ + var pointsPerGroupObj = {}; + var newGradingString = pCurrentValue; + for(var position in pOrderedGroups) + { + var groupId = pOrderedGroups[position][0]; + for(var type in pAchievedScores[groupId]) + { + if (pAchievedScores[groupId][type]["points"] || pAchievedScores[groupId][type]["points"] == 0) + { + if (!pointsPerGroupObj.hasOwnProperty(groupId)) + { + pointsPerGroupObj[groupId] = {}; + pointsPerGroupObj[groupId]["points"] = 0; + pointsPerGroupObj[groupId]["maxPoints"] = 0; + } + pointsPerGroupObj[groupId]["points"] = eMath.addInt(parseInt(pointsPerGroupObj[groupId]["points"]), parseInt(pAchievedScores[groupId][type]["points"])); + pointsPerGroupObj[groupId]["maxPoints"] = eMath.addInt(parseInt(pointsPerGroupObj[groupId]["maxPoints"]), parseInt(pAchievedScores[groupId][type]["maxPoints"])); + } + } + if (pointsPerGroupObj && pointsPerGroupObj[groupId]) + { + newGradingString = StringUtils.replaceAt(newGradingString, position, ClassificationUtils.getGradingFromObject(pGradingObject, groupId, pointsPerGroupObj[groupId]["points"], pointsPerGroupObj[groupId]["maxPoints"])); + } + } + + if (pCurrentValue != newGradingString) + { + pUpdateStatements.push(["CLASSIFICATIONSTORAGE", ["CLASSIFICATIONVALUE", "OUTDATED"], null, [newGradingString, "0"], newWhere("CLASSIFICATIONSTORAGE.OBJECT_ROWID", pRowId).build()]); + pOutputInformation[pRowType].updatedElements += 1; + } + else + { + pUpdateStatements.push(["CLASSIFICATIONSTORAGE", ["OUTDATED"], null, ["0"], newWhere("CLASSIFICATIONSTORAGE.OBJECT_ROWID", pRowId).build()]); + pOutputInformation[pRowType].nonChangedElements++; + } + + return {"updateStatements": pUpdateStatements + , "outputInformation": pOutputInformation + , "newGradingString": newGradingString}; +}; + +/** +* Builds the updateStatments.<p><br> +* +* @param {Array}pRowIds <p> +* rowIds of datasets<br> +* +* @param {String}pCurrentObjectType <p> +* current Object Type we want the attributeObject for<br> +* +* @return {Object} <p>attributeObj[objectRowId][encodedName] = [values];; +*/ +ClassificationUpdateHelper._buildAttributeObject = function(pRowIds, pCurrentObjectType) +{ + var idColumn = pCurrentObjectType.toUpperCase() + "ID"; + if (pCurrentObjectType == "Organisation") + { + idColumn = "CONTACTID"; + } + var attributeObj = {}; + if (pRowIds && pRowIds.length > 0) + { + var objectRowIds = []; + for (let i = 0; i < pRowIds.length; i++) + { + objectRowIds.push(pRowIds[i][idColumn]); + } + + //select attributevalues for the objectRowIds + var attributeArray = newSelect(["AB_ATTRIBUTERELATION.OBJECT_ROWID", "AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID", "AB_ATTRIBUTERELATION.AB_ATTRIBUTERELATIONID", + SqlBuilder.caseWhen(newWhere("AB_ATTRIBUTERELATION.CHAR_VALUE is not null")) + .then("AB_ATTRIBUTERELATION.CHAR_VALUE") + .elseValue(SqlBuilder.caseWhen(newWhere("AB_ATTRIBUTERELATION.ID_VALUE is not null")) + .then("AB_ATTRIBUTERELATION.ID_VALUE") + .elseValue("null") + .toString()) + .toString() + ,SqlBuilder.caseWhen(newWhere("AB_ATTRIBUTERELATION.INT_VALUE is not null")) + .then("AB_ATTRIBUTERELATION.INT_VALUE") + .elseValue(SqlBuilder.caseWhen(newWhere("AB_ATTRIBUTERELATION.NUMBER_VALUE is not null")) + .then("AB_ATTRIBUTERELATION.NUMBER_VALUE") + .elseValue("null") + .toString()) + .toString() + , "AB_ATTRIBUTE.ATTRIBUTE_TYPE"]) + .from("AB_ATTRIBUTERELATION") + .join("AB_ATTRIBUTE", "AB_ATTRIBUTE_ID = AB_ATTRIBUTEID") + .where("AB_ATTRIBUTERELATION.OBJECT_ROWID", objectRowIds, SqlBuilder.IN()) + .table(); + + + + var helperObject = {}; + let objectRowId, attributeId, attributeRelationId, value, numericValue, attributeType; + //assign them to attributeObj for easier access + for (let element in attributeArray) + { + [objectRowId, attributeId, attributeRelationId, value, numericValue, attributeType] = attributeArray[element]; + var encodedName = AttributeSearchNameCoder.encode(attributeId, attributeType); + + if (!helperObject.hasOwnProperty(objectRowId)) + { + attributeObj[objectRowId] = {}; + helperObject[objectRowId] = ""; + + } + if (!helperObject.hasOwnProperty(objectRowId + encodedName)) + { + attributeObj[objectRowId][encodedName] = []; //same logic as before + helperObject[objectRowId + encodedName] = ""; + } + if (!helperObject.hasOwnProperty(attributeRelationId)) //objectRowId + { + let valueToPush = value && value != "" ? value : numericValue; + attributeObj[objectRowId][encodedName].push(valueToPush); + + helperObject[attributeRelationId] = ""; + } + } + } + return attributeObj; +}; + +//helper Function for better code-readability +ClassificationUpdateHelper._processObjectValuesBatchFn = function(pBatchData, pIndicatorObj, pAchievedScoresObject, pGradingObject, pOrderedGroups, pCurrentObjectType, pOutputInformation, pFieldDisplayObject, pFilteredRecsObj, pClassificationTypesNoFilterObj) +{ + var achievedScoresObject = pAchievedScoresObject; + var attributeObj = ClassificationUpdateHelper._buildAttributeObject(pBatchData, pCurrentObjectType);//call for every "page" + var updateStatements = []; + + var idColumn = pCurrentObjectType.toUpperCase() + "ID" + if (pCurrentObjectType == "Organisation") + { + idColumn = "CONTACTID"; + } + //logic from above applies here aswell + for (let ii = 0; ii < pBatchData.length; ii++) + { + var currentDataset = pBatchData[ii]; + if (currentDataset["CLASSIFICATIONVALUE"] && currentDataset["CLASSIFICATIONVALUE"] != "") + { + var columns = []; + var values = []; + + for (var property in currentDataset) + { + if (!currentDataset.hasOwnProperty(property)) + { + continue; + } + columns.push(property); + values.push(currentDataset[property]); + } + + achievedScoresObject = ClassificationUpdateHelper._handleEntityFields(pIndicatorObj[$ClassificationIndicatorTypes.ENTITYFIELD()], values, columns, currentDataset[idColumn], achievedScoresObject, pFieldDisplayObject[pCurrentObjectType], pFilteredRecsObj, pClassificationTypesNoFilterObj, pCurrentObjectType); + achievedScoresObject = ClassificationUpdateHelper._handleAttributes(pIndicatorObj[$ClassificationIndicatorTypes.ATTRIBUTE()], attributeObj, currentDataset[idColumn], achievedScoresObject, pFieldDisplayObject[pCurrentObjectType], pFilteredRecsObj, pClassificationTypesNoFilterObj, pCurrentObjectType); + achievedScoresObject = ClassificationUpdateHelper._handleComplex(pIndicatorObj[$ClassificationIndicatorTypes.COMPLEX()], pCurrentObjectType, currentDataset[idColumn], achievedScoresObject, pFieldDisplayObject[pCurrentObjectType], pFilteredRecsObj, pClassificationTypesNoFilterObj); + + var buildUpdateClassificationValueStatements = ClassificationUpdateHelper._buildUpdateClassificationValueStatements(achievedScoresObject[currentDataset[idColumn]], pGradingObject, pOrderedGroups, currentDataset["CLASSIFICATIONVALUE"], currentDataset[idColumn], pCurrentObjectType, updateStatements, pOutputInformation); + updateStatements = buildUpdateClassificationValueStatements["updateStatements"]; + pOutputInformation = buildUpdateClassificationValueStatements["outputInformation"]; + + } + } + db.execute(updateStatements); + var gradingString = buildUpdateClassificationValueStatements != undefined ? buildUpdateClassificationValueStatements["newGradingString"] : ""; + return {"achievedScoresObject": achievedScoresObject + , "outputInformation": pOutputInformation + , "newGradingString": gradingString}; +}; + + +/** +* Get's the entityfields of pCurrentObjectType by using ClassificationUtils.getEntityFields(), adds the uid column to it and returns it as array<p><br> +* +* @param {Array}pCurrentObjectType <p> +* Object type you want the fields for<br> +* +* @return {Array} <p>fields; +*/ +ClassificationUpdateHelper._getEntityFields = function(pCurrentObjectType) +{ + var fieldArray = []; + var entityFields = ClassificationUtils.getEntityFields(pCurrentObjectType); + for(var field in entityFields) + { + fieldArray.push(entityFields[field][0]); + } + fieldArray.push("CLASSIFICATIONVALUE"); + if (pCurrentObjectType == "Organisation") + { + fieldArray.push("CONTACTID"); + } + else + { + fieldArray.push(pCurrentObjectType.toUpperCase() + "ID"); + } + + + return fieldArray; +}; + +/** + * handles the complex indicators so you can add them to achievedScoresObject <p><br> + * + * @param {Object}pClassificationTypes <p> + * as returned by buildindicatorObj()<br> + * + * @param {String}pObject <p> + * current Object Type<br> + * + * @param {String}pUid <p> + * current Object uid<br> + * + * @param {Object}pAchievedScoresObject <p> + * achievedScoresObj we add ours to this<br> + * + * @param {Array[[][]]}pFieldDisplayObject <p> + * twodimensional array with value and key so we can get the displayValues<br> + * + * @param {Object}pFilteredRecsObj <p> + * as returned by ClassificationUpdateHelper._buildFilteredRecsObject()<br> + * + * @param {Object}pClassificationTypesNoFilterObj <p> + * as built by ClassificationUpdateHelper._buildFilterAndNoFilterObj()<br> + * + * @return {Object} <p>pAchievedScoresObject; + */ + ClassificationUpdateHelper._handleComplex = function(pClassificationTypes, pObject, pUid, pAchievedScoresObject, pFieldDisplayObject, pFilteredRecsObj, pClassificationTypesNoFilterObj) + { + for(var type in pClassificationTypes) + { + if(ClassificationUpdateHelper._isRelevant(type, pUid, pClassificationTypes[type]["filter"], pFilteredRecsObj, pClassificationTypesNoFilterObj, pObject)) + { + var achievedValueArray = $ClassificationComplexIndicatorRegistry[pClassificationTypes[type]["field"]]().getValueFn(pObject, pUid); + + for (var valueScore in pClassificationTypes[type]["values"]) + { + if (!pAchievedScoresObject.hasOwnProperty(pUid)) + { + pAchievedScoresObject[pUid] = {}; + } + if (!pAchievedScoresObject[pUid].hasOwnProperty(pClassificationTypes[type]["classificationGroupId"])) + { + pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]] = {}; + } + + if (!pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]].hasOwnProperty(type)) + { + pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type] = {}; + pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["key"] = "-"; + pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["value"] = "-"; + pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["maxPoints"] = pClassificationTypes[type]["maxPercent"] / 100 * pClassificationTypes[type]["points"]; + pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["points"] = 0; + pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["fieldDisplay"] = ClassificationUtils.getFieldDisplayValue(pFieldDisplayObject, pClassificationTypes[type]["field"]); + } + + for (var value in achievedValueArray) + { + if (pClassificationTypes[type]["fieldType"] == $ClassificationFieldTypes.NUMBER() || pClassificationTypes[type]["fieldType"] == $ClassificationFieldTypes.INTEGER() + || pClassificationTypes[type]["fieldType"] == $ClassificationFieldTypes.DATE()) + { + var numberValue; + if (pClassificationTypes[type]["fieldType"] == $ClassificationFieldTypes.DATE()) + { + numberValue = ClassificationUpdateHelper._getCorrectNumberValue(false, pClassificationTypes[type], false, null, parseInt(achievedValueArray), true); + } + else + { + numberValue = ClassificationUpdateHelper._getCorrectNumberValue(false, pClassificationTypes[type], false, null, parseInt(achievedValueArray)); + } + + pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["key"] = numberValue["key"]; + if (pClassificationTypes[type]["fieldType"] == $ClassificationFieldTypes.DATE()) + { + pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["value"] = $ClassificationComplexIndicatorRegistry[pClassificationTypes[type]["field"]]().getDisplayValueFn(numberValue["key"].toString()); + } + else + { + pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["value"] = numberValue["value"]; + } + pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["maxPoints"] = numberValue["maxPoints"]; + pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["points"] = numberValue["points"]; + } + else + { + if (achievedValueArray[value] == valueScore) + { + pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["maxPoints"] = pClassificationTypes[type]["maxPercent"] / 100 * pClassificationTypes[type]["points"]; + //replace if the value is greater than the one we already have + if (parseInt(pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["points"]) < parseInt(pClassificationTypes[type]["values"][valueScore])*parseInt(pClassificationTypes[type]["points"]) / 100) + { + pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["points"] = parseInt(pClassificationTypes[type]["values"][valueScore]) * parseInt(pClassificationTypes[type]["points"]) / 100; + pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["key"] = valueScore; + pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["value"] = $ClassificationComplexIndicatorRegistry[pClassificationTypes[type]["field"]]().getDisplayValueFn(valueScore); + + } + } + } + } + } + } + } + return pAchievedScoresObject; + }; + +/** +* handles the attribute indicators so you can add them to achievedScoresObject <p><br> +* +* @param {Object}pClassificationTypes <p> +* as returned by buildindicatorObj()<br> +* +* @param {Object}attributeObj <p> +* as returned by ClassificationUpdateHelper._buildAttributeObject()<br> +* +* @param {String}pUid <p> +* current Object uid<br> +* +* @param {Object}pAchievedScoresObject <p> +* achievedScoresObj we add ours to this<br> +* +* @param {Array[[][]]}pFieldDisplayObject <p> +* twodimensional array with value and key so we can get the displayValues<br> +* +* @param {Object}pFilteredRecsObj <p> +* as returned by ClassificationUpdateHelper._buildFilteredRecsObject()<br> +* +* @param {Object}pClassificationTypesNoFilterObj <p> +* as built by ClassificationUpdateHelper._buildFilterAndNoFilterObj()<br> +* +* @param {String}pCurrentObjectType <p> +* current Object Type<br> +* +* @return {Object} <p>pAchievedScoresObject; +*/ +ClassificationUpdateHelper._handleAttributes = function(pClassificationTypes, attributeObj, pUid, pAchievedScoresObject, pFieldDisplayObject, pFilteredRecsObj, pClassificationTypesNoFilterObj, pCurrentObjectType) +{ + var classificationTypes = pClassificationTypes; + var currentAttributes = attributeObj[pUid]; + + for(var type in classificationTypes) + { + if(ClassificationUpdateHelper._isRelevant(type, pUid, pClassificationTypes[type]["filter"], pFilteredRecsObj, pClassificationTypesNoFilterObj, pCurrentObjectType)) + { + ClassificationUtils.validateUserSetValues(classificationTypes[type], true); + if (!pAchievedScoresObject.hasOwnProperty(pUid)) + { + pAchievedScoresObject[pUid] = {}; + } + if (!pAchievedScoresObject[pUid].hasOwnProperty(classificationTypes[type]["classificationGroupId"])) + { + pAchievedScoresObject[pUid][classificationTypes[type]["classificationGroupId"]] = {}; + } + if (!pAchievedScoresObject[pUid][classificationTypes[type]["classificationGroupId"]].hasOwnProperty(type)) + { + pAchievedScoresObject[pUid][classificationTypes[type]["classificationGroupId"]][type] = {}; + pAchievedScoresObject[pUid][classificationTypes[type]["classificationGroupId"]][type]["points"] = 0; + pAchievedScoresObject[pUid][classificationTypes[type]["classificationGroupId"]][type]["key"] = "-"; + pAchievedScoresObject[pUid][classificationTypes[type]["classificationGroupId"]][type]["value"] = "-"; + pAchievedScoresObject[pUid][classificationTypes[type]["classificationGroupId"]][type]["maxPoints"] = classificationTypes[type]["maxPercent"] / 100 * classificationTypes[type]["points"]; + pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["fieldDisplay"] = ClassificationUtils.getFieldDisplayValue(pFieldDisplayObject, pClassificationTypes[type]["field"]); + } + + for (var filter in classificationTypes[type]["values"]) + { + for (var attribute in currentAttributes) + { + if (classificationTypes[type]["fieldType"] == $ClassificationFieldTypes.NUMBER() || classificationTypes[type]["fieldType"] == $ClassificationFieldTypes.INTEGER()) + { + var numberValue = ClassificationUpdateHelper._getCorrectNumberValue(currentAttributes[classificationTypes[type]["field"]], pClassificationTypes[type]); + + pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type] = {}; + pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["key"] = numberValue["key"]; + pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["value"] = numberValue["value"]; + pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["maxPoints"] = numberValue["maxPoints"]; + pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["points"] = numberValue["points"]; + pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["fieldDisplay"] = ClassificationUtils.getFieldDisplayValue(pFieldDisplayObject, pClassificationTypes[type]["field"]); + } + else + { + var currentValue = JSON.parse(filter)["filter"]["childs"][0]["key"]; + for (var attributeValue in currentAttributes[attribute]) + { + if (currentAttributes[attribute][attributeValue] == currentValue) + { + pAchievedScoresObject[pUid][classificationTypes[type]["classificationGroupId"]][type] = {}; + pAchievedScoresObject[pUid][classificationTypes[type]["classificationGroupId"]][type]["points"] = classificationTypes[type]["values"][filter]*classificationTypes[type]["points"] / 100; + pAchievedScoresObject[pUid][classificationTypes[type]["classificationGroupId"]][type]["key"] = JSON.parse(filter)["filter"]["childs"]["0"]["key"]; + pAchievedScoresObject[pUid][classificationTypes[type]["classificationGroupId"]][type]["value"] = JSON.parse(filter)["filter"]["childs"]["0"]["value"]; + pAchievedScoresObject[pUid][classificationTypes[type]["classificationGroupId"]][type]["maxPoints"] = classificationTypes[type]["maxPercent"] / 100 * classificationTypes[type]["points"]; + pAchievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["fieldDisplay"] = ClassificationUtils.getFieldDisplayValue(pFieldDisplayObject, pClassificationTypes[type]["field"]); + + //replace if the value is greater than the one we already have + if (parseInt(pAchievedScoresObject[pUid][classificationTypes[type]["classificationGroupId"]][type]["points"]) < parseInt(classificationTypes[type]["values"][filter])*parseInt(classificationTypes[type]["points"]) / 100) + { + pAchievedScoresObject[pUid][classificationTypes[type]["classificationGroupId"]][type]["points"] = parseInt(classificationTypes[type]["values"][filter])*parseInt(classificationTypes[type]["points"]) / 100; + pAchievedScoresObject[pUid][classificationTypes[type]["classificationGroupId"]][type]["key"] = JSON.parse(filter)["filter"]["childs"]["0"]["key"]; + pAchievedScoresObject[pUid][classificationTypes[type]["classificationGroupId"]][type]["value"] = JSON.parse(filter)["filter"]["childs"]["0"]["value"]; + } + } + } + } + } + } + } + } + return pAchievedScoresObject; +}; + +/** + * handles the entityfield indicators so you can add them to achievedScoresObject <p><br> + * + * @param {Object}pClassificationTypes <p> + * as returned by buildindicatorObj()<br> + * + * @param {Object}pColumns <p> + * columns of the objectType<br> + * + * @param {Object}pRows <p> + * rows of the dataset<br> + * + * @param {String}pUid <p> + * current Object uid<br> + * + * @param {Object}pAchievedScoresObject <p> + * achievedScoresObj we add ours to this<br> + * + * @param {Array[[][]]}pFieldDisplayObject <p> + * twodimensional array with value and key so we can get the displayValues<br> + * + * @param {Object}pFilteredRecsObj <p> + * as returned by ClassificationUpdateHelper._buildFilteredRecsObject()<br> + * + * @param {Object}pClassificationTypesNoFilterObj <p> + * as built by ClassificationUpdateHelper._buildFilterAndNoFilterObj()<br> + * + * @param {String}pCurrentObjectType <p> + * current Object Type<br> + * + * @return {Object} <p>pAchievedScoresObject; + */ + ClassificationUpdateHelper._handleEntityFields = function(pClassificationTypes, pRows, pColumns, pUid, pAchievedScoresObject, pFieldDisplayObject, pFilteredRecsObj, pClassificationTypesNoFilterObj, pCurrentObjectType) + { + var achievedScoresObject = pAchievedScoresObject; + var helperObject = {}; + for (var type in pClassificationTypes) + { + if(ClassificationUpdateHelper._isRelevant(type, pUid, pClassificationTypes[type]["filter"], pFilteredRecsObj, pClassificationTypesNoFilterObj, pCurrentObjectType)) + { + var valueSet = false; + ClassificationUtils.validateUserSetValues(pClassificationTypes[type]); + for (var filter in pClassificationTypes[type]["values"]) + { + if (!valueSet) + { + if (!helperObject.hasOwnProperty(pUid)) + { + helperObject[pUid] = {}; + achievedScoresObject[pUid] = {}; + } + if (!helperObject.hasOwnProperty(pUid + pClassificationTypes[type]["classificationGroupId"])) + { + helperObject[pUid + pClassificationTypes[type]["classificationGroupId"]] = {}; + achievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]] = {}; + } + if (!helperObject.hasOwnProperty(pUid + type)) + { + helperObject[pUid + type] = {}; + achievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type] = 0; + } + if (pClassificationTypes[type]["fieldType"] == $ClassificationFieldTypes.NUMBER() || pClassificationTypes[type]["fieldType"] == $ClassificationFieldTypes.INTEGER()) + { + var numberValue = ClassificationUpdateHelper._getCorrectNumberValue(false, pClassificationTypes[type], pColumns, pRows); + achievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type] = {}; + achievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["key"] = numberValue["key"]; + achievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["value"] = numberValue["value"]; + achievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["maxPoints"] = numberValue["maxPoints"]; + achievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["points"] = numberValue["points"]; + achievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["fieldDisplay"] = ClassificationUtils.getFieldDisplayValue(pFieldDisplayObject, pClassificationTypes[type]["field"]); + } + else + { + if(achievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["fieldDisplay"] == undefined) + { + achievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type] = {}; + achievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["fieldDisplay"] = ClassificationUtils.getFieldDisplayValue(pFieldDisplayObject, pClassificationTypes[type]["field"]); + } + + var filterValue = JditoFilterUtils.filterRecords(pColumns, [pRows], JSON.parse(filter).filter); + if (filterValue.length > 0) + { + achievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["key"] = JSON.parse(filter)["filter"]["childs"]["0"]["key"]; + achievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["value"] = JSON.parse(filter)["filter"]["childs"]["0"]["value"]; + achievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["maxPoints"] = pClassificationTypes[type]["maxPercent"] / 100 * pClassificationTypes[type]["points"]; + achievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["points"] = 0; + achievedScoresObject[pUid][pClassificationTypes[type]["classificationGroupId"]][type]["points"] = parseInt(pClassificationTypes[type]["values"][filter]) * parseInt(pClassificationTypes[type]["points"]) / 100; + valueSet = true; + } + } + } + } + } + } + return achievedScoresObject; + }; + +/** +* builds the indicatorObject, which stores all the classificationTypes we need with all their information like value, displayvalue, indicatortype, fieldType, maxpoints, max percents and their possible values and their percent <p><br> +* +* +* @param {Object}pCurrentObjectType <p> +* Object Type (needed, altough we have the object table, since organisation as example uses contact as it's table<br> +* +* @return {Object} <p>indicatorObj[indicatorType][typeId] = {"classificationGroupId": classificationGroupId +* , "fieldType": fieldType +* , "field": field +* , "maxPercent": maxPercent +* , "points": points +* , "filter": filter +* , "values": {value: percent} +*/ +ClassificationUpdateHelper._buildindicatorObj = function(pCurrentObjectType) +{ + var currentObjectType = pCurrentObjectType; + var indicatorObj = {}; + var helperObj2 = {}; + indicatorObj[$ClassificationIndicatorTypes.ENTITYFIELD()] = {}; + indicatorObj[$ClassificationIndicatorTypes.ATTRIBUTE()] = {}; + indicatorObj[$ClassificationIndicatorTypes.COMPLEX()] = {}; + + + var classificationTypeScorePoints = newSelect("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID, CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID, CLASSIFICATIONSCORE.CLASSIFICATIONSCOREID\n\ + , CASE WHEN CLASSIFICATIONSCORE.INDICATORTEXT is not null THEN CLASSIFICATIONSCORE.INDICATORTEXT ELSE \n\ + CASE WHEN CLASSIFICATIONSCORE.INDICATORNUMBER is not null THEN CLASSIFICATIONSCORE.INDICATORNUMBER ELSE \n\ + CASE WHEN CLASSIFICATIONSCORE.INDICATORINTEGER is not null THEN CLASSIFICATIONSCORE.INDICATORINTEGER ELSE \n\ + CASE WHEN CLASSIFICATIONSCORE.FIELDVALUE is not null THEN CLASSIFICATIONSCORE.FIELDVALUE ELSE null \n\ + end\n\ + end\n\ + end\n\ + END\n\ + , CLASSIFICATIONTYPE.SCOREPOINTS, CLASSIFICATIONTYPE.FIELD, CLASSIFICATIONTYPE.FIELDTYPE \n\ + , CLASSIFICATIONTYPE.INDICATORTYPE, CLASSIFICATIONSCORE.SCOREPERCENT, CLASSIFICATIONTYPE.SCOREPOINTS, CLASSIFICATIONTYPE.FILTER") + .from("CLASSIFICATIONSCORE") + .join("CLASSIFICATIONTYPE", "CLASSIFICATIONSCORE.CLASSIFICATIONTYPE_ID = CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID") + .where("CLASSIFICATIONTYPE.OBJECT_TYPE", currentObjectType) + .orderBy("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID, CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID") + .table(); + for (let i = 0; i < classificationTypeScorePoints.length; i++) + { + var typeId = classificationTypeScorePoints[i][1]; + + if (classificationTypeScorePoints[i][7] && classificationTypeScorePoints[i][6] != "") + { + if (!helperObj2.hasOwnProperty(typeId)) + { + indicatorObj[classificationTypeScorePoints[i][7]][typeId] = {"classificationGroupId": classificationTypeScorePoints[i][0] + , "fieldType": classificationTypeScorePoints[i][6] + , "field": classificationTypeScorePoints[i][5] + , "maxPercent": classificationTypeScorePoints[i][8] + , "points": classificationTypeScorePoints[i][9] + , "filter": classificationTypeScorePoints[i][10] + , "values": {} + }; + helperObj2[typeId] = ""; + } + + if (classificationTypeScorePoints[i][7] == $ClassificationIndicatorTypes.COMPLEX() && classificationTypeScorePoints[i][6] == $ClassificationFieldTypes.DATE()) // we don't use the actual value as the key for the dates, since they change daily + { + indicatorObj[classificationTypeScorePoints[i][7]][typeId]["values"][$ClassificationComplexIndicatorRegistry[classificationTypeScorePoints[i][5]]().getActualDateValueFn(classificationTypeScorePoints[i][3].toString())] = classificationTypeScorePoints[i][8]; + } + else + { + indicatorObj[classificationTypeScorePoints[i][7]][typeId]["values"][classificationTypeScorePoints[i][3]] = classificationTypeScorePoints[i][8]; + } + if (parseFloat(indicatorObj[classificationTypeScorePoints[i][7]][typeId]["maxPercent"]) < parseFloat(classificationTypeScorePoints[i][8])) + { + indicatorObj[classificationTypeScorePoints[i][7]][typeId]["maxPercent"] = classificationTypeScorePoints[i][8]; + } + } + } + return indicatorObj; +}; + +/** + * Builds filteredRecsObj Object which stores all the included Datasets to the specific filter. + * (loops trough classificationTypesFilterObj and uses either entites.getRow or an select for every different filter) + */ +ClassificationUpdateHelper._buildFilteredRecsObject = function(pClassificationTypesFilterObj, pCurrentObjectType, pFilterFields) +{ + var currentObjectType = pCurrentObjectType; + var filteredRecsObj = {}; //reset for every objectType + var executeGetRows = true; //reset for every objectTyp + + for (var index in pClassificationTypesFilterObj[currentObjectType]) + { + for (var indexIndex in pClassificationTypesFilterObj[currentObjectType][index]) + { + var unparsedFilter = pClassificationTypesFilterObj[currentObjectType][index][indexIndex]; + var filter = JSON.parse(unparsedFilter).filter; + //filteredRecsObj uses the filter as the key -> if multiple indicators use the exact same filtercondition we only have to get these rows once + if (filteredRecsObj[pClassificationTypesFilterObj[currentObjectType][index][indexIndex]] == undefined) + { + if (filter["childs"]["0"] != undefined) // ignore empty filters + { + //no "." in the name means its a field of the entity itself: use entities.getRow and JditoFilterUtils.filterRecords + //to check whether or not the Filter excludes this row + if (!filter["childs"]["0"]["name"].includes(".")) + { + if (executeGetRows) //only do this once for every object type, since the rows don't change depending on the filter + { + var loadConfig = entities.createConfigForLoadingRows() + .entity(ContextUtils.getEntity(currentObjectType)) + .fields(pFilterFields); + + var rows = entities.getRows(loadConfig); + var value; + var filterableRows = []; + for (let ii = 0; ii < rows.length; ii++) { + filterableRows[ii] = pFilterFields.map(function (field) + { + value = null; + if (field in rows[ii]) + { + value = rows[ii][field]; + } + return value; + }); + } + executeGetRows = false; + } + //filter gets used after using entities.getRow and not in the loadconfig, since we can have multiple filters + //and don't want to do entities.getRow for every single one + filteredRecsObj[unparsedFilter] = JditoFilterUtils.filterRecords(pFilterFields, filterableRows, filter); + } + else //else: currently a count is made whith the filtercondition as the where clause --> poor performance + { + if (currentObjectType == "Organisation") + { + filteredRecsObj[unparsedFilter] = newSelect("CONTACT.CONTACTID") + .from("ORGANISATION") + .join("CONTACT", "ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID and CONTACT.PERSON_ID is null") + .leftJoin("ADDRESS", "ADDRESS.ADDRESSID = CONTACT.ADDRESS_ID") + .leftJoin("CLASSIFICATIONSTORAGE", "CLASSIFICATIONSTORAGE.OBJECT_ROWID = CONTACT.CONTACTID") + .where(db.toFilterCondition(JSON.stringify(filter), "Organisation_entity")) + .and("ORGANISATION.ORGANISATIONID", OrgUtils.getPrivateOrganisationId(), SqlBuilder.NOT_EQUAL()) + .table(); + } + else if (currentObjectType == "Salesproject") + { + filteredRecsObj[unparsedFilter] = newSelect("SALESPROJECT.SALESPROJECTID") + .from("SALESPROJECT") + .leftJoin("CONTACT", "SALESPROJECT.CONTACT_ID = CONTACT.CONTACTID") + .leftJoin("ORGANISATION", "CONTACT.ORGANISATION_ID = ORGANISATION.ORGANISATIONID") + .leftJoin("CLASSIFICATIONSTORAGE", "CLASSIFICATIONSTORAGE.OBJECT_ROWID = SALESPROJECT.SALESPROJECTID") + .where(db.toFilterCondition(JSON.stringify(filter), "Salesproject_entity")) + .table(); + } + } + } + } + } + } + return filteredRecsObj; +}; + +/** +* Get's scoreArray and builds scoreObject, classificationTypesFilterObj and classificationTypesNoFilterObj and returns them in an object with their name as key<p><br> +* +* @param {SqlBuilderCondition}pCorrectCondition <p> +* condition of which classificationt storage datasets to get<br> +* +* @return {Object}gradingObject <p> +* gradingObject[objectType][classificationGroupId][classificationTypeId] = [minPercent, classificationGrading];<br> +*/ +ClassificationUpdateHelper._buildGradingObject = function(pCorrectCondition) +{ + //All the gradings of the classification groups that have either 1: atleast one classificationType with the outdated flag or 2: have classificationtypes + //of the objectTypes that we need for updating for the outdated classificationStorage (depends on the condition, see above) + var gradingArray = newSelect("CLASSIFICATIONTYPE.OBJECT_TYPE, CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID, \n\ + CLASSIFICATIONGRADING.CLASSIFICATIONGRADINGID, CLASSIFICATIONGRADING.MINPERCENT, CLASSIFICATIONGRADING.GRADING") + .from("CLASSIFICATIONGROUP") + .join("CLASSIFICATIONTYPE", "CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID = CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID") + .where(pCorrectCondition) + .join("CLASSIFICATIONGRADING", "CLASSIFICATIONGRADING.CLASSIFICATIONGROUP_ID = CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID") + .orderBy("CLASSIFICATIONTYPE.OBJECT_TYPE, CLASSIFICATIONGROUP.TITLE, CLASSIFICATIONGROUP.SORTING, \n\ + CLASSIFICATIONTYPE.SCORETYPE, CLASSIFICATIONGRADING.MINPERCENT asc") + .table(); + + let gradingObject = {}; + let helperObject = {}; //resets the helper object + + let objectType, classificationGroupId, classificationTypeId, minPercent, classificationGrading; + //logic from above applies here aswell + for (let element in gradingArray) + { + [objectType, classificationGroupId, classificationTypeId, minPercent, classificationGrading] = gradingArray[element]; + if (!helperObject.hasOwnProperty(objectType)) //objectType + { + gradingObject[objectType] = {}; + helperObject[objectType] = ""; + } + if (!helperObject.hasOwnProperty(classificationGroupId)) //classificationGroup + { + gradingObject[objectType][classificationGroupId] = {}; + helperObject[classificationGroupId] = ""; + } + if (!helperObject.hasOwnProperty(classificationTypeId)) //classificationGrading + { + gradingObject[objectType][classificationGroupId][classificationTypeId] = [minPercent, classificationGrading]; //minPercent + helperObject[classificationTypeId] = ""; + } + } + return gradingObject; +}; + +/** +* Get's scoreArray and builds scoreObject, classificationTypesFilterObj and classificationTypesNoFilterObj and returns them in an object with their name as key<p><br> +* +* @param {Object}pCorrectCondition <p> +* condition of which classificationtypes to update<br> +* +* @param {Object}[pOutdatedStoredClassificationObjects] <p> +* return of ClassificationUpdateHelper._buildOutdatedStoredClassificationObject().<br> +* +* +* @return {Object} <p> +* If pSingleRefreshRowId is set: +* {"scoreObject": object +* , "scoreArray": array +* , "classificationTypesFilterObj": object +* , "classificationTypesNoFilterObj": object}<br> +*/ +ClassificationUpdateHelper._buildFilterAndNoFilterObj = function(pCorrectCondition, pOutdatedStoredClassificationObjects) +{ + let classificationTypesFilterObj = {}; + let classificationTypesNoFilterObj = {}; + //All the possible scores of 1: the outdated classification types or 2: of all the classificationtypes of the outdated classificationStorages + let scoreArray = newSelect("CLASSIFICATIONTYPE.OBJECT_TYPE, CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID, CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID, \n\ + CLASSIFICATIONSCORE.CLASSIFICATIONSCOREID, CLASSIFICATIONSCORE.SCOREPERCENT/100, CLASSIFICATIONTYPE.FILTER") + .from("CLASSIFICATIONGROUP") + .join("CLASSIFICATIONTYPE", "CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID = CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID") + .join("CLASSIFICATIONSCORE", "CLASSIFICATIONSCORE.CLASSIFICATIONTYPE_ID = CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID") + .where(pCorrectCondition) + .orderBy("CLASSIFICATIONTYPE.OBJECT_TYPE, CLASSIFICATIONGROUP.TITLE, CLASSIFICATIONGROUP.SORTING, CLASSIFICATIONTYPE.SCORETYPE, CLASSIFICATIONSCORE.SORT") + .table(); + var helperObject = {}; + var objectTypes = []; + let objectType, classificationGroupId, classificationTypeId, classificationScoreId, classificationScore, classificationTypeFilter; + //build scoreObject out of scoreArray + for (let element in scoreArray) + { + [objectType, classificationGroupId, classificationTypeId, classificationScoreId, classificationScore, classificationTypeFilter] = scoreArray[element]; + if (!helperObject.hasOwnProperty(objectType)) //objectType + { + helperObject[objectType] = ""; + if (!pOutdatedStoredClassificationObjects) + { + objectTypes.push(objectType); //also push all the objectTypes in an Array for later (the updating happens one objectType at a time) + } + + if (classificationTypesFilterObj[objectType] == undefined) + { + classificationTypesFilterObj[objectType] = {}; //initializing for later use + } + if (classificationTypesNoFilterObj[objectType] == undefined) + { + classificationTypesNoFilterObj[objectType] = {}; //initializing for later use + } + } + if (!helperObject.hasOwnProperty(classificationGroupId)) //classificationGroup + { + helperObject[classificationGroupId] = ""; + + if (classificationTypesFilterObj[objectType][classificationGroupId] == undefined) + { + classificationTypesFilterObj[objectType][classificationGroupId] = {}; //initializing + } + if (classificationTypesNoFilterObj[objectType][classificationGroupId] == undefined) + { + classificationTypesNoFilterObj[objectType][classificationGroupId] = {}; //initializing + } + } + if (!helperObject.hasOwnProperty(classificationTypeId)) //classificationType + { + helperObject[classificationTypeId] = ""; + + if (classificationTypeFilter == "" || classificationTypeFilter == JditoFilterUtils.getEmptyFilter(ContextUtils.getEntity(objectType))) //also push all the indicators that have a filter set into classificationTypesFilterObj + { + if (classificationTypesNoFilterObj[objectType][classificationGroupId][classificationTypeId] == undefined) + { + classificationTypesNoFilterObj[objectType][classificationGroupId][classificationTypeId] = classificationTypeFilter; + } + } + else //and the ones without a filter into classificationTypesNoFilterObj + { + if (classificationTypesFilterObj[objectType][classificationGroupId][classificationTypeId] == undefined) + { + classificationTypesFilterObj[objectType][classificationGroupId][classificationTypeId] = classificationTypeFilter; + } + } + } + } + return {"classificationTypesFilterObj": classificationTypesFilterObj + , "classificationTypesNoFilterObj": classificationTypesNoFilterObj}; +}; + +/** + * Builds and returns the following Objects/Arrays and retuns them in an Object with their names as keys: <p> + * classificationTypesFilterObj: object, <p> + * classificationTypesNoFilterObj: object, <p> + * objectTypesThatNeedUpdate: array, <p> + * groupsThatNeedUpdate: array, <p><br> + * + * @param {Boolean}[pRecalculateAll] <p> + * If set: handles all the classificationTypes as outdated -> returns all groups, objectTypes and classificationTypes<br> + * + * @param {Boolean}[pSingleRefreshRowId] <p> + * object row id of the dataset you want the classification for.<br> + * If set: returns null for all the objects. We don't need any classificationTypes, instead we are getting the classification + * using "ClassificationUpdateHelper._buildOutdatedStoredClassificationObject" as outdated so we are already updating it's + * classificationStorage dataset) + * + * + * @return {Object} <p> + * {classificationTypesFilterObj: object, <p> + * classificationTypesNoFilterObj: object, <p> + * objectTypesThatNeedUpdate: array, <p> + * groupsThatNeedUpdate: array, } + */ +ClassificationUpdateHelper._buildClassificationFilterObjects = function(pRecalculateAll, pSingleRefreshRowId) +{ + let outdatedGroupsAndObjectTypes; + if (pSingleRefreshRowId) + { + return {"classificationTypesFilterObj": null + ,"classificationTypesNoFilterObj": null + ,"objectTypesThatNeedUpdate": null + , "groupsThatNeedUpdate": null}; + } + else if (pRecalculateAll) + { + outdatedGroupsAndObjectTypes = newSelect("CLASSIFICATIONTYPE.OBJECT_TYPE, CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID, CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID, CLASSIFICATIONTYPE.FILTER, CLASSIFICATIONTYPE.FIELD, CLASSIFICATIONTYPE.FIELDTYPE, CLASSIFICATIONTYPE.INDICATORTYPE") + .from("CLASSIFICATIONTYPE") + .table(); + } + else //all classificationgroups and their objectType that have atleast one classificationtype with the outdated flag set + { + outdatedGroupsAndObjectTypes = newSelect("CLASSIFICATIONTYPE.OBJECT_TYPE, CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID, CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID, CLASSIFICATIONTYPE.FILTER, CLASSIFICATIONTYPE.FIELD, CLASSIFICATIONTYPE.FIELDTYPE, CLASSIFICATIONTYPE.INDICATORTYPE") + .from("CLASSIFICATIONTYPE") + .where("CLASSIFICATIONTYPE.OUTDATED", 1) + .table(); + } + + let objectTypesThatNeedUpdate = []; + let outdatedClassificationTypeObj = {}; + let classificationTypesFilterObj = {}; + let classificationTypesNoFilterObj = {}; + let groupsThatNeedUpdate = []; + var helperObject = {}; + let objectType, classificationGroupId, classificationTypeId, classificationTypeFilter, classificationTypeField, classificationTypeFieldType, classificationTypeIndicatorType; + for (let element in outdatedGroupsAndObjectTypes) + { + [objectType, classificationGroupId, classificationTypeId, classificationTypeFilter, classificationTypeField, classificationTypeFieldType, classificationTypeIndicatorType] = outdatedGroupsAndObjectTypes[element]; + if (!helperObject.hasOwnProperty(objectType)) //objectType + { + outdatedClassificationTypeObj[objectType] = {}; //puts objectType in classificationStorageObject and already initializes the object that later get's filled with the groups and their types + objectTypesThatNeedUpdate.push(objectType); + + classificationTypesFilterObj[objectType] = {}; //initializing for later use + classificationTypesNoFilterObj[objectType] = {}; //initializing for later use + + helperObject[objectType] = ""; + + } + if (!helperObject.hasOwnProperty(classificationGroupId)) //objectRowId + { + outdatedClassificationTypeObj[objectType][classificationGroupId] = {}; //same logic as before + groupsThatNeedUpdate.push(classificationGroupId); + + classificationTypesFilterObj[objectType][classificationGroupId] = {}; //initializing + classificationTypesNoFilterObj[objectType][classificationGroupId] = {}; //initializing + + helperObject[classificationGroupId] = ""; + } + if (!helperObject.hasOwnProperty(classificationTypeId)) //objectRowId + { + outdatedClassificationTypeObj[objectType][classificationGroupId][classificationTypeId] = {"classificationTypeFilter": classificationTypeFilter}; //same logic as before + + if (classificationTypeFilter == "" || classificationTypeFilter == JditoFilterUtils.getEmptyFilter(ContextUtils.getEntity(objectType))) //also push all the indicators that have no filter set into classificationTypesNoFilterObj + { + classificationTypesNoFilterObj[objectType][classificationGroupId][classificationTypeId] = {}; + classificationTypesNoFilterObj[objectType][classificationGroupId][classificationTypeId] = {"classificationTypeFilter": classificationTypeFilter + , "classificationTypeField": classificationTypeField + , "classificationTypeFieldType": classificationTypeFieldType + , "classificationTypeIndicatorType": classificationTypeIndicatorType}; + } + else //and the ones with a filter into classificationTypesFilterObj + { + classificationTypesFilterObj[objectType][classificationGroupId][classificationTypeId] = {}; + classificationTypesFilterObj[objectType][classificationGroupId][classificationTypeId] = {"classificationTypeFilter": classificationTypeFilter + , "classificationTypeField": classificationTypeField + , "classificationTypeFieldType": classificationTypeFieldType + , "classificationTypeIndicatorType": classificationTypeIndicatorType}; + } + + helperObject[classificationTypeId] = ""; + } + } + return {"classificationTypesFilterObj": classificationTypesFilterObj + ,"classificationTypesNoFilterObj": classificationTypesNoFilterObj + ,"objectTypesThatNeedUpdate": objectTypesThatNeedUpdate + , "groupsThatNeedUpdate": groupsThatNeedUpdate}; +}; + +/** + * Builds and returns the following Objects/Arrays and retuns them in an Object with their names as keys: <p> + * objectRowIdArray: array of ObjectRowIds <p> + * objectTypes: array of objectTypes<p> + * doneSelecting: boolean used to know when to stop (This function is used in a loop because it's only selecting a set amount of data (paging)<p><br> + * + * @param {Boolean}[pRecalculateAll] <p> + * If set: returns null for all the objects (instead we are getting all the classificationtypes + * using "ClassificationUpdateHelper._buildClassificationFilterObjects" as outdated so we are already updating all the + * classificationStorage datasets that exist)<br> + * + * @param {Boolean}[pSingleRefreshRowId] <p> + * object row id of the dataset you want the classification for.<br> + * If set: returns the object but with only it's object in there.<br> + * + * @param {Boolean}[pObjectType] <p> + * The Object type of the object row id. (Mandatory if pSingleRefreshRowId is set!)<br> + * This is normally just the Context name<br> + * + * @return {Object} <p> + * {objectRowIdArray: array, <p> + * objectTypes: array, <p> + * doneSelecting: boolean} + */ +ClassificationUpdateHelper._buildOutdatedStoredClassificationObject = function(pRecalculateAll, pSingleRefreshRowId, pObjectType) +{ + var doneSelecting = false; + if (pRecalculateAll) + { + return {"objectRowIdArray": null + , "objectTypes": null + , "doneSelecting": false}; + } + else + { + var outdatedStoredClassifications = []; + var objectTypes = []; + var objectRowIdArray = []; + + if (pSingleRefreshRowId) + { + outdatedStoredClassifications = newSelect("CLASSIFICATIONSTORAGE.OBJECT_TYPE, CLASSIFICATIONSTORAGE.OBJECT_ROWID") + .from("CLASSIFICATIONSTORAGE") + .where("CLASSIFICATIONSTORAGE.OBJECT_ROWID", pSingleRefreshRowId) + .orderBy("CLASSIFICATIONSTORAGE.OBJECT_TYPE, CLASSIFICATIONSTORAGE.OBJECT_ROWID") + .table(); + + if (outdatedStoredClassifications.length == 0) //insert the classificationString if none exists + { + let amountOfGroups = newSelect("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID") + .from("CLASSIFICATIONTYPE") + .where("CLASSIFICATIONTYPE.OBJECT_TYPE", pObjectType) + .groupBy("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID").arrayColumn().length; + var newString = ""; + for (let i = 0; i < amountOfGroups; i++) + { + newString = newString + "-"; + } + outdatedStoredClassifications = [[pObjectType, pSingleRefreshRowId]]; + db.insertData("CLASSIFICATIONSTORAGE", ["CLASSIFICATIONSTORAGEID" + , "CLASSIFICATIONVALUE" + , "OBJECT_ROWID" + , "OBJECT_TYPE" + , "OUTDATED" + ], null, [util.getNewUUID() + , newString + , pSingleRefreshRowId + , pObjectType + , 1 + ]); + } + + } + else + { + outdatedStoredClassifications = newSelect("CLASSIFICATIONSTORAGE.OBJECT_TYPE, CLASSIFICATIONSTORAGE.OBJECT_ROWID") + .from("CLASSIFICATIONSTORAGE") + .where("CLASSIFICATIONSTORAGE.OUTDATED", 1) + .pageSize(400) + .orderBy("CLASSIFICATIONSTORAGE.OBJECT_TYPE, CLASSIFICATIONSTORAGE.OBJECT_ROWID") + .nextTablePage(); + } + + if (outdatedStoredClassifications.length != 5) + { + doneSelecting = true; + } + + let helperObject = {}; + if (outdatedStoredClassifications) + { + let objectType, objectRowId; + //build objectTypes out of outdatedStoredClassifications + for (let element in outdatedStoredClassifications) + { + [objectType, objectRowId] = outdatedStoredClassifications[element]; + if (!helperObject.hasOwnProperty(objectType)) //objectType + { + helperObject[objectType] = ""; + objectTypes.push(objectType); //also push all the objectTypes in an Array for later (the updating happens one objectType at a time) + + } + if (!helperObject.hasOwnProperty(objectRowId)) //objectRowId + { + helperObject[objectRowId] = ""; + objectRowIdArray.push(objectRowId); //also push all the objectTypes in an Array for later + } + } + } + return {"objectRowIdArray": objectRowIdArray + , "objectTypes": objectTypes + , "doneSelecting": doneSelecting}; + } +}; + + +/** +* Adds pTableName to every column in pColumnArray (with a dot "." inbetween the tablename and the columnname)<p><br> +* +* @param {Array}pColumnArray <p> +* Array of columns<br> +* +* @param {String}pTableName <p> +* Name of the table you want to add<br> +* +* @return {Array} <p> +* pColumnArray with the added tablename for each element<br> +*/ +ClassificationUpdateHelper._addTablenameToColumns = function(pColumnArray, pTableName) +{ + let columnArray = Utils.clone(pColumnArray); + for (let i = 0; i < columnArray.length; i++) + { + columnArray[i] = pTableName + "." + columnArray[i]; + } + + return columnArray; +}; + +/** + * Checks whether or not the classificationType is relevant for the current dataset, + * (loops trough filteredRecsObj to check whether or not the filter excluded the dataset) + * returns true/false + * +* @param {Object}pUid <p> +* Uid of the dataset (needed, because pClassificationTypesFilter uses the objectUids<br> +* +* @param {String}pFilter <p> +* filter of the classification type dataset<br> +* +* @param {Object}pClassificationTypesFilter <p> +* Object with the filter as key and the uids of the included datasets as values. As built by ClassificationUpdateHelper._buildFilteredRecsObject()<br> +* +* +* @return {Boolean} <p> +* If relevant: true, else: false<br> +* +*/ +ClassificationUpdateHelper._isRelevantFilter = function(pUid, pFilter, pClassificationTypesFilter) +{ + var include = false; + var recs = pClassificationTypesFilter[pFilter]; + if (recs != undefined) + { + include = recs.some(function (rec) {return rec[0] == pUid}); + } + return include; +} + +/** + * Checks whether or not the classificationType is relevant for the current dataset + * (looping trough pClassificationTypesNoFilter if it's included there: no filter is set and it's relevant, + * othwerwises uses ClassificationUpdateHelper.ClassificationUpdateHelper._isRelevantFilter() to check whether or not it get's excluded by the set filter) + * returns true/false +* @param {Object}pTypeId <p> +* classification type id whose relevance is being checked<br> +* +* @param {Object}pUid <p> +* Uid of the dataset (needed, because pClassificationTypesFilter uses the objectUids<br> +* +* @param {String}pFilter <p> +* filter of the classification type dataset<br> +* +* @param {Object}pClassificationTypesFilter <p> +* Object with the filter as key and the uids of the included datasets as values. As built by ClassificationUpdateHelper._buildFilteredRecsObject()<br> +* +* @param {Object}pClassificationTypesNoFilter <p> +* Object with objectType, classificationgroup and it's classificationType Ids underneath. As built by ClassificationUpdateHelper._buildFilterAndNoFilterObj()<br> +* +* @param {String}pCurrentObjectType <p> +* object type (e.g: Organisation)<br> +* +* @return {Boolean} <p> +* If relevant: true, else: false<br> +* +*/ +ClassificationUpdateHelper._isRelevant = function(pTypeId, pUid, pFilter, pClassificationTypesFilter, pClassificationTypesNoFilter, pCurrentObjectType) +{ + var include = false; + + if (pFilter == "" || pFilter == undefined) + { + for (var groupId in pClassificationTypesNoFilter[pCurrentObjectType]) + { + for (var typeId in pClassificationTypesNoFilter[pCurrentObjectType][groupId]) + { + if (typeId == pTypeId) + { + include = true; + break; + } + } + } + } + else + { + include = ClassificationUpdateHelper._isRelevantFilter(pUid, pFilter, pClassificationTypesFilter); + } + return include; +}; + +/** +* Calculates the classifications for the parsed Object and updates them if needed.<p><br> +* +* @param {Object}[pClassificationObjects] <p> +* return of ClassificationUpdateHelper._buildClassificationFilterObjects()<br> +* +* @param {Object}[pOutdatedStoredClassificationObjects] <p> +* return of ClassificationUpdateHelper._buildOutdatedStoredClassificationObject().<br> +* +* @param {String}[pSingleRefreshRowId] <p> +* object row id of the dataset you want the classification for.<br> +* +* @param {String}[pOutputInfo] <p> +* The output Info as string, so we can concat the new on onto it.<br> +* +* +* @return {Object} <p> +* If pSingleRefreshRowId is set: +* {"achievedScoresObject": object +* , "indicatorObj": object +* , "orderedGroups": array +* , "newGradingString": String}<br> +* else: +* {"outputInfo": object} +* +*/ +ClassificationUpdateHelper._updateOutdatedDatasets = function(pClassificationObjects, pOutdatedStoredClassificationObjects, pSingleRefreshRowId, pOutputInfo) +{ + var correctCondition; + var objectTypes = []; + if (pClassificationObjects) //if the param exists: assign values accordingly + { + var classificationTypesFilterObj = pClassificationObjects["classificationTypesFilterObj"]; + var classificationTypesNoFilterObj = pClassificationObjects["classificationTypesNoFilterObj"]; + var objectTypesThatNeedUpdate = pClassificationObjects["objectTypesThatNeedUpdate"]; + var groupsThatNeedUpdate = pClassificationObjects["groupsThatNeedUpdate"]; + + objectTypes = objectTypesThatNeedUpdate; + + + correctCondition = newWhere("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID", groupsThatNeedUpdate, SqlBuilder.IN());//and set condition accordingly + } + else if (pOutdatedStoredClassificationObjects) //if the param exists: assign values accordingly + { + var objectRowIdArray = pOutdatedStoredClassificationObjects["objectRowIdArray"]; + objectTypes = pOutdatedStoredClassificationObjects["objectTypes"]; + correctCondition = newWhere("CLASSIFICATIONTYPE.OBJECT_TYPE", objectTypes, SqlBuilder.IN());//and set condition accordingly + } + + var filterObjects = ClassificationUpdateHelper._buildFilterAndNoFilterObj(correctCondition, pOutdatedStoredClassificationObjects); + + classificationTypesNoFilterObj = filterObjects["classificationTypesNoFilterObj"]; + classificationTypesFilterObj = filterObjects["classificationTypesFilterObj"]; + + if (!pOutdatedStoredClassificationObjects) + { + correctCondition = newWhere("CLASSIFICATIONTYPE.OBJECT_TYPE", objectTypesThatNeedUpdate, SqlBuilder.IN()); + } + + var gradingObject = ClassificationUpdateHelper._buildGradingObject(correctCondition); + + if (!pOutdatedStoredClassificationObjects) //Important to do this after ClassificationUpdateHelper._buildGradingObject! + { + correctCondition = newWhere("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID", groupsThatNeedUpdate, SqlBuilder.IN()); + } + + var outputInformation = {}; + var fieldDisplayObject = {}; + + for (var currentObjectType in objectTypes) //update for each objectType + { + var isOrganisation = false; + var currentObjectTable; + var currentObjectColumn; + if (objectTypes[currentObjectType] == "Organisation") + { + currentObjectTable = "CONTACT"; + currentObjectColumn = "CONTACT.CONTACTID"; + isOrganisation = true; + } + else + { + currentObjectTable = objectTypes[currentObjectType]; + currentObjectColumn = objectTypes[currentObjectType] + "." + objectTypes[currentObjectType] +"ID"; + } + + outputInformation[objectTypes[currentObjectType]] = { + updatedElements: 0, + nonChangedElements: 0 + }; + + var filterFields = []; + if (isOrganisation) + { + filterFields = ["CONTACTID", "CUSTOMERCODE", "INFO", "LANGUAGE", "NAME", "STANDARD_CITY", "STANDARD_EMAIL_COMMUNICATION", "STANDARD_PHONE_COMMUNICATION", "STATUS", "TYPE"]; + } + else if (currentObjectTable == "Salesproject") + { + filterFields = ["SALESPROJECTID", "CONTACT_ID", "ENDDATE", "INFO", "PHASE", "PROBABILITY", "PROJECTCODE", "PROJECTTITLE", "REASONS", "STARTDATE", "STATUS", "VOLUME"]; + } + else + { + throw new Error("updateClassifications_serverProcess: objectType doesn't exist or is not implemented correctly, contact an administrator."); + } + + //get an two dimensional array with all the values and displayvalues and store it in fieldDisplayObject with the objectType as key: + //e.g: {"Organisation":[["STATUS","Status"],["TYPE","Typ"],["eyJpZCI6IjU0N2I4YjlkLTg4YmEtNDU5MC05ZTAxLTM0ZDJhNTgxMTZjYyIsInR5cGUiOiJDT01CTyJ9","Besuchsplanung / Besuchsfrequenz"]...]} + fieldDisplayObject[objectTypes[currentObjectType]] = ClassificationUtils.getEntityFields(objectTypes[currentObjectType]) + .concat(ClassificationUtils.getEntityAttributesArray(ClassificationUtils.getEntityAttributes(objectTypes[currentObjectType]))) + .concat(ClassificationComplexIndicatorRegistryUtils.getComplexIndicatorArray(objectTypes[currentObjectType])); + + //private function for code readability (get's called once for every objectType) + var filteredRecsObj = ClassificationUpdateHelper._buildFilteredRecsObject(classificationTypesFilterObj, objectTypes[currentObjectType], filterFields); + + + //all groups of the objectType in the correct order, needed later to also add the "-" gradings if no classificationType has been set under that group + orderedGroups = newSelect("distinct CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID, CLASSIFICATIONGROUP.SORTING") + .from("CLASSIFICATIONGROUP") + .join("CLASSIFICATIONTYPE", "CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID = CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID") + .where("CLASSIFICATIONTYPE.OBJECT_TYPE", objectTypes[currentObjectType]) + .orderBy("CLASSIFICATIONGROUP.SORTING") + .table(); + + if (pSingleRefreshRowId) + { + correctCondition = newWhere(currentObjectColumn, pSingleRefreshRowId); + } + else if (pOutdatedStoredClassificationObjects) + { + correctCondition = newWhere(currentObjectColumn, objectRowIdArray, SqlBuilder.IN()); + } + else + { + correctCondition = newWhere("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID", groupsThatNeedUpdate, SqlBuilder.IN()); + } + + //get Columns + var objectColumns = db.getColumns(String.toUpperCase(objectTypes[currentObjectType]), db.getCurrentAlias()); + //add tablename + var objectColumnsWithTablename = ClassificationUpdateHelper._addTablenameToColumns(objectColumns, String.toUpperCase(objectTypes[currentObjectType])); + + if (isOrganisation) + { + //get Columns + var contactColumns = db.getColumns(String.toUpperCase("CONTACT"), db.getCurrentAlias()); + //add tablename + objectColumnsWithTablename = objectColumnsWithTablename.concat(ClassificationUpdateHelper._addTablenameToColumns(contactColumns, "CONTACT")); + } + + var indicatorObj = ClassificationUpdateHelper._buildindicatorObj(objectTypes[currentObjectType]); + + var startRow = 0; + var stop = false; + var entityFields = ClassificationUpdateHelper._getEntityFields(objectTypes[currentObjectType]); + + var orderedGroups = newSelect("distinct CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID, CLASSIFICATIONGROUP.SORTING") + .from("CLASSIFICATIONGROUP") + .join("CLASSIFICATIONTYPE", "CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID = CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID") + .where("CLASSIFICATIONTYPE.OBJECT_TYPE", objectTypes[currentObjectType]) + .orderBy("CLASSIFICATIONGROUP.SORTING") + .table(); + + var achievedScoresObject = {}; + var pagingSize = 400;//in variable so there is only one place to edit + //page entities.getRows instead of getting all at once + while(!stop) + { + var objectValuesLoadConfig = entities.createConfigForLoadingRows() + .fields(entityFields) + .ignorePermissions(true) + .entity(ContextUtils.getEntity(objectTypes[currentObjectType])); + if (objectRowIdArray && !pSingleRefreshRowId)//objectRowIdArray is already paged + { + objectValuesLoadConfig = objectValuesLoadConfig.uids(objectRowIdArray); + stop = true; + } + else + { + objectValuesLoadConfig = objectValuesLoadConfig + .startrow(startRow) + .count(pagingSize); + + if (pSingleRefreshRowId) + { + objectValuesLoadConfig = objectValuesLoadConfig.uid(pSingleRefreshRowId); + } + } + var rows = entities.getRows(objectValuesLoadConfig); + + if (rows.length == pagingSize) + { + startRow = eMath.addInt(startRow, pagingSize); + } + else + { + stop = true; + } + //helper Function for better code-readability + var processValues = ClassificationUpdateHelper._processObjectValuesBatchFn(rows, indicatorObj, achievedScoresObject, gradingObject[objectTypes[currentObjectType]], orderedGroups, objectTypes[currentObjectType], outputInformation, fieldDisplayObject, filteredRecsObj, classificationTypesNoFilterObj); + achievedScoresObject = processValues["achievedScoresObject"]; + outputInformation = processValues["outputInformation"]; + + if (pSingleRefreshRowId) + { + return {"achievedScoresObject": achievedScoresObject + , "indicatorObj": indicatorObj + , "orderedGroups": orderedGroups + , "newGradingString": processValues["newGradingString"]}; + } + } + } + + var outputInfo = pOutputInfo + JSON.stringify(outputInformation) + "\n"; + + if (groupsThatNeedUpdate) + { + var cond = newWhere("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID", groupsThatNeedUpdate, SqlBuilder.IN()); + cond.updateData(true, "CLASSIFICATIONTYPE", ["OUTDATED"], null, [0]); + } + return {"outputInfo": outputInfo}; +}; \ No newline at end of file diff --git a/process/Classification_lib/process.js b/process/Classification_lib/process.js index 25419ec3b80a5f2d41f83626ad8c6d50cfb1d8cf..db81046fd76e0b880f2b589d5e09f7790f10bef2 100644 --- a/process/Classification_lib/process.js +++ b/process/Classification_lib/process.js @@ -1,14 +1,14 @@ +import("ClassificationIndicatorFieldRegistry_basic"); +import("AttributeFilter_lib"); +import("Attribute_lib"); import("Dependency_lib"); +import("Sql_lib"); +import("system.db"); +import("system.neon"); import("system.text"); import("system.translate"); -import("system.result"); -import("system.entities"); -import("system.eMath"); import("system.util"); import("system.vars"); -import("system.db"); -import("Sql_lib"); -import("Util_lib"); /** * Methods to manage classifications.<br> @@ -20,25 +20,23 @@ function ClassificationUtils() {} /** * Formats the summary title for one specific group <br/> - * This is done by + * e.g: "1. Target Group: 45/120 points = B" + * so: groupName: achievedPoints/possibleMaxPoints points = gradingChar * * @param {Number|String} pAchievedScore <p/>Current score that is reached for a group, e.g. 45 - * @param {Number|String} pbestPossibleScore <p/>Current score that is reached for a group, e.g. 45 - * @param {String} pGroupId <p/>UID of the classification group where the display value is determined. <br/> - * This is used for determing the maximum value of the group and the resulting - * classificaiton value (for example: "B") + * @param {Number|String} pBestPossibleScore <p/>Current score that is reached for a group, e.g. 45 * @param {String} pGroupName <p/>Name of the group that was passed as ID. This is used as display value and will not be translated, * you have to pass this value already translated to the target locale. <br/> * The reason for not loading this value based on the groupId is: better performance optimization * @param {Number|String} pGrading <p/>Current score that is reached for a group, e.g. 45 * @return {String} <p/>formated and translated title, e.g.: "1. Target Group: 45/120 points = B" */ -ClassificationUtils.formatDisplaySummaryForGroup = function(pAchievedScore, pbestPossibleScore, pGroupId, pGroupName, pGrading) +ClassificationUtils.formatDisplaySummaryForGroup = function(pAchievedScore, pBestPossibleScore, pGroupName, pGrading) { pCurrentScore = text.formatDouble(pAchievedScore, "#"); - pbestPossibleScore = text.formatDouble(pbestPossibleScore, "#"); - var res = translate.withArguments("%0: %1/%2 points = %3", [pGroupName, pAchievedScore, pbestPossibleScore, pGrading]); + pBestPossibleScore = text.formatDouble(pBestPossibleScore, "#"); + var res = translate.withArguments("%0: %1/%2 points = %3", [pGroupName, pAchievedScore, pBestPossibleScore, pGrading]); return res; }; @@ -108,8 +106,10 @@ ClassificationUtils.getGradingTableByGroupId = function(pClassificationGroupId) for (let i = 0; i < gradingTable.length; i++) { - if(gradingObject[classificationGroupId] == undefined) + if (gradingObject[classificationGroupId] == undefined) + { gradingObject[classificationGroupId] = []; + } gradingObject[classificationGroupId].push([gradingTable[i][1], gradingTable[i][2]]); } @@ -169,7 +169,7 @@ ClassificationUtils.getClassificationType = function(pClassificationScoreId) ClassificationUtils.getGradingFromObject = function(pGradingObject, pGroupId, pScore, pMaxPossibleScore) { var gradingObject = pGradingObject; - if(gradingObject == null) + if (gradingObject == null) { gradingObject = ClassificationUtils.getGradingTableByGroupId(pGroupId); } @@ -179,7 +179,7 @@ ClassificationUtils.getGradingFromObject = function(pGradingObject, pGroupId, pS var grading = "-"; for (var index in gradingObject[groupId]) { - if(Number(scorePercent) >= Number(gradingObject[groupId][index][0]) && scorePercent != 0) + if (Number(scorePercent) >= Number(gradingObject[groupId][index][0]) && scorePercent != 0) { grading = gradingObject[groupId][index][1]; } @@ -187,78 +187,8 @@ ClassificationUtils.getGradingFromObject = function(pGradingObject, pGroupId, pS return grading; } - -/** - * decodes a string that was encoded with AttributeSearchNameCoder.encode - * - * - * @param {String} pEncodedString <p/> string that shall be decoded; the origin of the name has to be a filter-object - * - * @return {Object} <p/> an object that contains all keys and values that have been encoded with AttributeSearchNameCoder.encode - * @static - */ -ClassificationUtils.decode = function (pEncodedString) -{ - var value = pEncodedString; - if(value == undefined) - res = $ClassificationRecordCategories.CLASSIFICATION_OBJECT_TYPE; - else if(value.charAt(0) != ";" && value.charAt(value.length) != ";") - res = $ClassificationRecordCategories.CLASSIFICATION_CLASSIFICATION_GROUP(); - else - { - var decodedIdvalues = text.decodeMS(value); - if(decodedIdvalues[0].charAt(0) != ";" && decodedIdvalues[0].charAt(decodedIdvalues[0].length) != ";") - res = $ClassificationRecordCategories.CLASSIFICATION_CLASSIFICATION_TYPE(); - } - if(res) - result.string(res); - return res -}; - -/** - * gets the translated Info text for the ClassificationtypePreview - * - * @return {String} <p/> the translated InfoText - * @static - */ -ClassificationUtils.getTranslatedInfo = function () -{ -return translate.text("Keep in Mind that changes to the Value with the greatest score directly affect the Classification Gradings of the Classification!"); -}; - -/** - * Gets all the ClassificationTypeIds of the specified group - * - * - * @param {String} pClassificationGroupId <p/> The groupId of the group you want the classificationTypes of - * @param {String} pExcludeClassificationTypeID (optional) <p/> Array of ClassificatioNTypeId you don't want to get back - * @param {Boolean} pOnlyUptoDate (optional) <p/> if true = condition get's added to only return the types where outdated != 1 - * - * @return {Object} <p/> an object that contains all keys and values that have been encoded with AttributeSearchNameCoder.encode - * @static - */ -ClassificationUtils.getClassificationTypesOfGroup = function (pClassificationGroupId, pExcludeClassificationTypeID, pOnlyUptoDate) -{ - var classificationTypesOfOldGroup = newSelect("CLASSIFICATIONTYPEID") - .from("CLASSIFICATIONTYPE") - .where("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID", pClassificationGroupId) - - if (pExcludeClassificationTypeID != null) - { - classificationTypesOfOldGroup = classificationTypesOfOldGroup - .and("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", pExcludeClassificationTypeID, SqlBuilder.NOT_EQUAL()) - } - if (pOnlyUptoDate) - { - classificationTypesOfOldGroup = classificationTypesOfOldGroup - .and("CLASSIFICATIONTYPE.OUTDATED", 1, SqlBuilder.NOT_EQUAL()) - } - - return classificationTypesOfOldGroup.arrayColumn(); -}; - /** - * This function get's used in the workflowExtention_serverProcess. + * This function is used in the workflowExtention_serverProcess. * It checks whether or not the change has any influence on stored classificationStorage datasets * by checking if the entity itself is classificationRelevant or the entity has an relation with an classificationRelevant entity * <p/> @@ -279,17 +209,17 @@ ClassificationUtils.setClassificationStorageDatasetsOutdated = function (pTarget var classificationStorageIds = []; var entityName = pEntityName; - if(entityName == "Organisation_entity" || entityName == "Salesproject_entity") + if (entityName == "Organisation_entity" || entityName == "Salesproject_entity") { relevantForClassification = true; classificationStorageIds.push(pTargetIds); } - if(Dependency.getDependency(entityName).includes("Organisation_entity")) + if (Dependency.getDependency(entityName).includes("Organisation_entity")) { relevantForClassification = true; classificationStorageIds.push(Dependency.mapping()[entityName]["Organisation_entity"].getUIDsfn(pRowData, pChangedRows)); } - if(Dependency.getDependency(entityName).includes("Salesproject_entity")) + if (Dependency.getDependency(entityName).includes("Salesproject_entity")) { relevantForClassification = true; classificationStorageIds.push(Dependency.mapping()[entityName]["Salesproject_entity"].getUIDsfn(pRowData, pChangedRows)); @@ -299,7 +229,7 @@ ClassificationUtils.setClassificationStorageDatasetsOutdated = function (pTarget //empty arrays occur when e.g. inserting something that doesn't have any classificationStorageIds even though it is classificationrelevant for (let i = 0; i < classificationStorageIds.length; i++) { - if(classificationStorageIds[i][0] == undefined) + if (classificationStorageIds[i][0] == undefined) { classificationStorageIds.splice(i, 1); i--; @@ -307,9 +237,9 @@ ClassificationUtils.setClassificationStorageDatasetsOutdated = function (pTarget } //set outdated flag for the classificationStorage datasets - if(relevantForClassification && classificationStorageIds.length > 0) // also check for the classificationStorageIds.length since it could be empty + if (relevantForClassification && classificationStorageIds.length > 0) // also check for the classificationStorageIds.length since it could be empty { - for (i = 0; i < classificationStorageIds.length; i++) + for (let i = 0; i < classificationStorageIds.length; i++) { var cond = newWhere("CLASSIFICATIONSTORAGE.OBJECT_ROWID", classificationStorageIds[i], SqlBuilder.IN()); cond.updateData(true, "CLASSIFICATIONSTORAGE", ["OUTDATED"], null, [1]); @@ -317,9 +247,135 @@ ClassificationUtils.setClassificationStorageDatasetsOutdated = function (pTarget } }; +/** + * This function is used in the FIELD.dropDownProcess in ClassificationAdmin. + * Concats and reruns the entityfields specified in $ClassificationIndicatorRegistry.getEntityNumberFields(), $ClassificationIndicatorRegistry.getEntityDropDownFields() + * <p/> + * @param {Object} pObjectType <p/> object type we want the fields for + * + * @return {Array} Array with array of [[value], [displayvalue]] (like in a dropdownproess) + */ +ClassificationUtils.getEntityFields = function (pObjectType) +{ + var entityNumberFields = $ClassificationIndicatorRegistry.getEntityNumberFields(pObjectType); + var entityDropDownFields = $ClassificationIndicatorRegistry.getEntityDropDownFields(pObjectType); + var res = entityNumberFields.concat(entityDropDownFields); + + return res; +}; +/** + * Returns the entity dropdown fields of pObjectType + * <p/> + * @param {Array[][]} pFields <p/> two dimensional Array with key and displayvalue + * @param {String} pKey <p/> key we want the displayvalue for + * + * @return {String} displayvalue, empty string if pKey isn't included in pFields + */ +ClassificationUtils.getFieldDisplayValue = function (pFields, pKey) +{ + for (let i = 0; i < pFields.length; i++) + { + if (pFields[i][0] == pKey) + { + return pFields[i][1]; + } + } + return ""; +} + +/** + * Returns the attribute dropdown, number and integer fields of pObjectType using AttributeFilterExtensionMaker.makeFilterFields(pObjectType) and checking for their contentType + * <p/> + * @param {Object} pObjectType <p/> object type we want the Attributes for + * + * @return {Array} Array with Objects for each attribute (see also AttributeFilterExtensionMaker.makeFilterFields()) + */ +ClassificationUtils.getEntityAttributes = function (pObjectType) +{ + let attributeFields = JSON.parse(AttributeFilterExtensionMaker.makeFilterFields(pObjectType)); + for (i = 0; i < attributeFields.length; i++) + { + if (!(attributeFields[i]["contentType"] == AttributeTypes.TEXT() && attributeFields[i]["hasDropDownValues"] === true) + && !(attributeFields[i]["contentType"] == AttributeTypes.BOOLEAN()) + && !(attributeFields[i]["contentType"] == AttributeTypes.COMBO()) + && !(attributeFields[i]["contentType"] == AttributeTypes.KEYWORD()) + && !(attributeFields[i]["contentType"] == AttributeTypes.NUMBER()) + && !(attributeFields[i]["contentType"] == AttributeTypes.INTEGER())) + { + attributeFields.splice(i, 1); + i--; + } + } + return attributeFields; +}; +/** + * This function is used in the FIELD.dropDownProcess in ClassificationAdmin. + * Turns the object array that ClassificationUtils.getEntityAttributes() returns into a useable twodimensional Array + * <p/> + * @param {Object} pAttributeFilterFields <p/> object you get from ClassificationUtils.getEntityAttributes() + * + * @return {Array} Array with array of [[value], [displayvalue]] (like in a dropdownproess) + */ +ClassificationUtils.getEntityAttributesArray = function (pAttributeFilterFields) +{ + var attributeFields = pAttributeFilterFields; + var resArray = []; + for (i = 0; i < attributeFields.length; i++) + { + resArray.push([attributeFields[i]["name"], attributeFields[i]["title"]]); + } + + return resArray; +}; + +/** + * This function is used in the stateprocess of multiple fields of classificationScore_entity + * We check if the pFieldTypes includes the one we have in pClassificationTypeInfo and set the recordstate according to the current pRecordState + * <p/> + * @param {String} pRecordState <p/> the record state as in the $sys.recordState-variable; e.g. neon.OPERATINGSTATE_NEW + * + * @param {Array} pFieldTypes <p/> the field types + * + * @param {Object} pClassificationTypeInfo <p/> classification type info (object with field, fieldType and IndicatorType) (JSON.parse(vars.getString("$param.ClassificationTypeInfo_param"))) + * + * @param {Array} [pIndicatorTypes] <p/> the indicator types (see also $ClassificationIndicatorTypes) + * + * @param {Object} [pFilterValue] <p/> filter value (only needed for displayValueForTitleField) + * + * @return {String} resulting recordState<br/> + */ +ClassificationUtils.getClassificationScoreStateProcess = function (pRecordState, pFieldTypes, pClassificationTypeInfo, pIndicatorTypes, pFilterValue) +{ + var state = neon.COMPONENTSTATE_INVISIBLE; + if (!pFieldTypes)//special case for displayValueForTitleField + { + state = neon.COMPONENTSTATE_INVISIBLE; + if (pRecordState == neon.OPERATINGSTATE_VIEW + || ((pRecordState == neon.OPERATINGSTATE_NEW || pRecordState == neon.OPERATINGSTATE_EDIT) + && pFilterValue && JSON.parse(filterValue)["filter"]["childs"].length > 0)) + { + state = neon.COMPONENTSTATE_READONLY; + } + return state; + } + + var fieldType = pClassificationTypeInfo["fieldType"]; + var indicatorType = pClassificationTypeInfo["indicatorType"]; + + if (pRecordState == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) + { + if (pFieldTypes.includes(fieldType) && (!pIndicatorTypes || pIndicatorTypes.length == 0 || pIndicatorTypes.includes(indicatorType))) + { + state = neon.COMPONENTSTATE_EDITABLE; + } + } + + return state; +}; + /*this is right now (2020-08-15) the only way to get something like a constant with - a prober name - autocomplete support within the ADITO Designer @@ -333,4 +389,15 @@ $ClassificationRecordCategories.CLASSIFICATION_GROUP_EXISTS = functio $ClassificationRecordCategories.CLASSIFICATION_GROUP_DOESNT_EXIST = function(){return "ClassificationGroupDoesntExist"}; function $ClassificationPlaceholder(){} -$ClassificationPlaceholder.TOPSECRETPLACEHOLDER = function(){return "T0PS3CR3TPL4CEH0LD3R"}; \ No newline at end of file +$ClassificationPlaceholder.TOPSECRETPLACEHOLDER = function(){return "T0PS3CR3TPL4CEH0LD3R"}; + +function $ClassificationFieldTypes(){} +$ClassificationFieldTypes.NUMBER = function(){return "number"}; +$ClassificationFieldTypes.INTEGER = function(){return "integer"}; +$ClassificationFieldTypes.DROPDOWN = function(){return "dropDown"}; +$ClassificationFieldTypes.DATE = function(){return "date"}; + +function $ClassificationIndicatorTypes(){} +$ClassificationIndicatorTypes.ENTITYFIELD = function(){return "entityField"}; +$ClassificationIndicatorTypes.ATTRIBUTE = function(){return "attribute"}; +$ClassificationIndicatorTypes.COMPLEX = function(){return "complex"}; \ No newline at end of file diff --git a/process/CommunicationBlacklist_lib/CommunicationBlacklist_lib.aod b/process/CommunicationBlacklist_lib/CommunicationBlacklist_lib.aod new file mode 100644 index 0000000000000000000000000000000000000000..0a0b5c2cea2a75642d4b94f0c6a013a57fa3831a --- /dev/null +++ b/process/CommunicationBlacklist_lib/CommunicationBlacklist_lib.aod @@ -0,0 +1,10 @@ +<?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.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> + <name>CommunicationBlacklist_lib</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <process>%aditoprj%/process/CommunicationBlacklist_lib/process.js</process> + <alias>Data_alias</alias> + <variants> + <element>LIBRARY</element> + </variants> +</process> diff --git a/process/CommunicationBlacklist_lib/process.js b/process/CommunicationBlacklist_lib/process.js new file mode 100644 index 0000000000000000000000000000000000000000..238bf50b48bba7de016b8b7af07cfbe35367e94c --- /dev/null +++ b/process/CommunicationBlacklist_lib/process.js @@ -0,0 +1,45 @@ +import("Util_lib"); +import("Sql_lib"); +import("system.vars"); + + +function CommunicationBlacklist () +{ + this.filter = null; +} + +/** + * @return {CommunicationBlacklist} + */ +CommunicationBlacklist.getMailRecipientBlacklist = function () +{ + var filters = newSelect("FILTER") + .from("EMAIL_FILTER_HANDLING") + .where("COMMUNICATIONBLACKLIST.BLACKLIST_TYPE", $KeywordRegistry.communicationBlacklistType$emailRecipientFilter()) + .table(); + + var filterMappingFn = function ([blacklistFilter]) + { + blacklistFilter = JSON.parse(blacklistFilter); + if (!blacklistFilter.filter || blacklistFilter.entity != "BulkMailRecipient_entity" || Utils.isNullOrEmpty(blacklistFilter.filter.childs)) + return null; + + return blacklistFilter.filter; + }; + + var blacklist = new CommunicationBlacklist(); + blacklist.filter = { + type: "group", + operator: "AND", + childs: filters.map(filterMappingFn).filter(Utils.isObject) + }; + return blacklist; +} + +CommunicationBlacklist.prototype.getCondition = function () +{ + return new FilterSqlTranslator() + .filter(this.filter) + .table("BULKMAILRECIPIENT") + .getSqlCondition(); +} \ No newline at end of file diff --git a/process/Contact_lib/process.js b/process/Contact_lib/process.js index 3df661040ea43b3347bd1afb180f11d5f2bd0c04..4d6ad17a8dbaa9240b0223a3791db0c510a18df0 100644 --- a/process/Contact_lib/process.js +++ b/process/Contact_lib/process.js @@ -1,4 +1,5 @@ import("KeywordRegistry_basic"); +import("MarketingCondition_lib"); import("Keyword_lib"); import("system.datetime"); import("system.translate"); @@ -179,8 +180,15 @@ ContactUtils.getContactType = function(pContactId, pPersonId, pOrganisationId) */ ContactUtils.isOrganisation = function(pContactId, pPersonId, pOrganisationId) { - var contactType = ContactUtils.getContactType(pContactId, pPersonId, pOrganisationId); - + var contactType; + if(pContactId) + { + contactType = ContactUtils.getContactTypeByContactId(pContactId); + } + else + { + contactType = ContactUtils.getContactTypeByPersOrg(pPersonId, pOrganisationId); + } return contactType == 1; } @@ -199,8 +207,15 @@ ContactUtils.isOrganisation = function(pContactId, pPersonId, pOrganisationId) */ ContactUtils.isPrivatePerson = function(pContactId, pPersonId, pOrganisationId) { - var contactType = ContactUtils.getContactType(pContactId, pPersonId, pOrganisationId); - + var contactType; + if(pContactId) + { + contactType = ContactUtils.getContactTypeByContactId(pContactId); + } + else + { + contactType = ContactUtils.getContactTypeByPersOrg(pPersonId, pOrganisationId); + } return contactType == 2; } @@ -219,8 +234,15 @@ ContactUtils.isPrivatePerson = function(pContactId, pPersonId, pOrganisationId) */ ContactUtils.isPersonOfOrganisation = function(pContactId, pPersonId, pOrganisationId) { - var contactType = ContactUtils.getContactType(pContactId, pPersonId, pOrganisationId); - + var contactType; + if(pContactId) + { + contactType = ContactUtils.getContactTypeByContactId(pContactId); + } + else + { + contactType = ContactUtils.getContactTypeByPersOrg(pPersonId, pOrganisationId); + } return contactType == 3; } @@ -536,21 +558,22 @@ ContactUtils.getDefaultAddressId = function(pContactId) * @param {String|Number} [pStartDate=current date] date to check against the start date of the commrestriction * * @return {SqlBuilder} the condition + * + * @deprecated use CommunicationSettingsCondition */ ContactUtils.getCommRestrictionCondition = function (pMedium, pNoRestriction, pStartDate) { - if (!pStartDate && pStartDate !== 0) - pStartDate = datetime.date(); var existsQuery = new SqlBuilder() - .select("COMMRESTRICTIONID") - .from("COMMRESTRICTION") - .whereIfSet("COMMRESTRICTION.MEDIUM", pMedium) - .and("COMMRESTRICTION.STARTDATE", pStartDate, SqlBuilder.LESS_OR_EQUAL()) + .select("COMMUNICATIONSETTINGSID") + .from("COMMUNICATIONSETTINGS") + .where(newWhereIfSet("COMMUNICATIONSETTINGS.MEDIUM", pMedium) + .or("COMMUNICATIONSETTINGS.CHANNEL_TYPE", $KeywordRegistry.communicationChannelType$global())) + .and("COMMUNICATIONSETTINGS.STATUS", $KeywordRegistry.communicationSettingStatus$rejected()) .and(newWhere() // check contactid - .or("COMMRESTRICTION.CONTACT_ID = CONTACT.CONTACTID") + .or("COMMUNICATIONSETTINGS.CONTACT_ID = CONTACT.CONTACTID") // or the contact id of the organisation - .or("COMMRESTRICTION.CONTACT_ID", newSelect("orgContact.CONTACTID") + .or("COMMUNICATIONSETTINGS.CONTACT_ID", newSelect("orgContact.CONTACTID") .from("CONTACT anyContact") .join("CONTACT orgContact", newWhere("anyContact.ORGANISATION_ID = orgContact.ORGANISATION_ID") .and("orgContact.PERSON_ID is null") @@ -567,49 +590,64 @@ ContactUtils.getCommRestrictionCondition = function (pMedium, pNoRestriction, pS * * @param {String} pContactId contact id * @param {String} pMedium medium to check - * @param {String|Number} [pStartDate=current date] the start date of the commrestriction * * @return {Boolean} true, if the contact has a commrestriction, otherwise false */ -ContactUtils.hasCommRestriction = function(pContactId, pMedium, pStartDate) +ContactUtils.hasCommRestriction = function (pContactId, pMedium) { + var commSettingsCond = new CommunicationSettingsCondition(); + if (pMedium == $KeywordRegistry.communicationMediumCampaign$letter()) + { + commSettingsCond.address(); + } + else + { + commSettingsCond.medium(pMedium); + } + return newSelect("CONTACTID") .from("CONTACT") .where("CONTACT.CONTACTID", pContactId) - .and(ContactUtils.getCommRestrictionCondition(pMedium, false, pStartDate)) + .and(commSettingsCond.rejected().existSettings().buildCondition()) .cell() != ""; } /** - * returns a sql subselect which concatenates all commrestriction displayvalues (translated). - * The select needs the CONTACT.CONTACTID column. + * Generates a summary of communication settings with status 'rejected'. * - * @return {String} the resulting subselect + * @param {String} pContactId contactId of the contact for the communication settings + * @return {String} description of all rejected communication channels */ -ContactUtils.getActiveCommRestrictionsSubselect = function() +ContactUtils.getCommunicationRejectionSummary = function (pContactId) { - var mediumList = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.communicationMediumCampaign(), "COMMRESTRICTION.MEDIUM"); - var mask = new SqlMaskingUtils() + var mediumTitleSql = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.communicationMediumCampaign(), "COMMUNICATIONSETTINGS.MEDIUM"); + var communicationRejections = newSelect(["CHANNEL_TYPE", "MEDIUM", mediumTitleSql]) + .from("COMMUNICATIONSETTINGS") + .where("COMMUNICATIONSETTINGS.CONTACT_ID", pContactId) + .and("COMMUNICATIONSETTINGS.CHANNEL_TYPE", $KeywordRegistry.communicationChannelType$profiling(), SqlBuilder.NOT_EQUAL()) + .and("COMMUNICATIONSETTINGS.STATUS", $KeywordRegistry.communicationSettingStatus$rejected()) + .orderBy(mediumTitleSql) + .table(); - var orgContactSubselect = newSelect("orgContact.CONTACTID") - .from("CONTACT anyContact") - .join("CONTACT orgContact", newWhere("anyContact.ORGANISATION_ID = orgContact.ORGANISATION_ID") - .and("orgContact.PERSON_ID IS NULL")) - .where("anyContact.CONTACTID = CONTACT.CONTACTID") - - var group = mask.getGroupConcat("DISTINCT "+mediumList, "', '"); - var subselect = "''"; - if(group) + if (communicationRejections.length > 0) { - var res = newSelect(group).from("COMMRESTRICTION") - .where("COMMRESTRICTION.CONTACT_ID = CONTACT.CONTACTID") - - var subres = newSelect(group).from("COMMRESTRICTION") - .where("COMMRESTRICTION.CONTACT_ID in ( "+orgContactSubselect.toString()+")") - - subselect = mask.concatWithSeparator(["("+res.toString()+")", "("+subres.toString()+")"], ", ", false); + var mediumTitles = []; + var hasGlobalRejection = communicationRejections.some(function ([channelType, medium, mediumTitle]) + { + if (channelType == $KeywordRegistry.communicationChannelType$address()) + { + mediumTitle = KeywordUtils.getViewValue($KeywordRegistry.communicationMediumCampaign(), $KeywordRegistry.communicationMediumCampaign$letter()); + } + mediumTitles.push(mediumTitle); + return channelType == $KeywordRegistry.communicationChannelType$global(); + }); + if (hasGlobalRejection) + { + return translate.text("No advertising"); + } + return translate.text("No advertising by") + " " + mediumTitles.join(", ") } - return subselect; + return ""; } /** diff --git a/process/CreateOfferApprovedActivity_workflowService/CreateOfferApprovedActivity_workflowService.aod b/process/CreateOfferApprovedActivity_workflowService/CreateOfferApprovedActivity_workflowService.aod new file mode 100644 index 0000000000000000000000000000000000000000..7e7f4e23c7de128b586de4d4de097d15f3c6e29b --- /dev/null +++ b/process/CreateOfferApprovedActivity_workflowService/CreateOfferApprovedActivity_workflowService.aod @@ -0,0 +1,11 @@ +<?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.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> + <name>CreateOfferApprovedActivity_workflowService</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <process>%aditoprj%/process/CreateOfferApprovedActivity_workflowService/process.js</process> + <alias>Data_alias</alias> + <serviceTaskParameterProcess>%aditoprj%/process/CreateOfferApprovedActivity_workflowService/serviceTaskParameterProcess.js</serviceTaskParameterProcess> + <variants> + <element>WORKFLOW</element> + </variants> +</process> diff --git a/process/CreateOfferApprovedActivity_workflowService/process.js b/process/CreateOfferApprovedActivity_workflowService/process.js new file mode 100644 index 0000000000000000000000000000000000000000..cdb5ca147a9f794f8c7c88c041656c44e327fe02 --- /dev/null +++ b/process/CreateOfferApprovedActivity_workflowService/process.js @@ -0,0 +1,24 @@ +import("system.translate"); +import("ActivityTask_lib"); +import("system.datetime"); +import("KeywordRegistry_basic"); +import("Sql_lib"); +import("system.vars"); + +var variables = JSON.parse(vars.get("$local.value")); +var user = newSelect("OFFER.ACTIONUSER").from("OFFER").where("OFFER.OFFERID", variables.targetId).cell(); + +var activityData = { + directionKeywordId : $KeywordRegistry.activityDirection$internal(), + categoryKeywordId : $KeywordRegistry.activityCategory$approval(), + entrydate : datetime.date(), + content : variables.description, + subject : "Angebot freigegeben", //translation doesn't work + userNew : vars.get("$sys.user"), + responsibleContactId: user +}; + +var links = [[variables.targetContext, variables.targetId]]; +var activity = ActivityUtils.insertNewActivity(activityData, links); + +newWhere("OFFER.OFFERID", variables.targetId).updateFields({"APPROVAL" : variables.approval}); \ No newline at end of file diff --git a/process/CreateOfferApprovedActivity_workflowService/serviceTaskParameterProcess.js b/process/CreateOfferApprovedActivity_workflowService/serviceTaskParameterProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..273a35fba1767fd61e0ad8b618bbb13ac313a1c2 --- /dev/null +++ b/process/CreateOfferApprovedActivity_workflowService/serviceTaskParameterProcess.js @@ -0,0 +1,7 @@ +import("system.result"); +import("Workflow_lib"); + +result.object([ + new WorkflowServiceTaskParameter("description", "Beschreibung", WorkflowServiceTaskParameter.STRING()), + new WorkflowServiceTaskParameter("approval", "Freigabe", WorkflowServiceTaskParameter.NUMBER()) +]); \ No newline at end of file diff --git a/process/CreateOfferApprovedNotification/CreateOfferApprovedNotification_workflowService.aod b/process/CreateOfferApprovedNotification/CreateOfferApprovedNotification_workflowService.aod new file mode 100644 index 0000000000000000000000000000000000000000..256a186b59b40680cbdff00a3dd61f4c6404d461 --- /dev/null +++ b/process/CreateOfferApprovedNotification/CreateOfferApprovedNotification_workflowService.aod @@ -0,0 +1,10 @@ +<?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.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> + <name>CreateOfferApprovedNotification_workflowService</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <process>%aditoprj%/process/CreateOfferApprovedNotification_workflowService/process.js</process> + <alias>Data_alias</alias> + <variants> + <element>WORKFLOW</element> + </variants> +</process> diff --git a/process/CreateOfferApprovedNotification_workflowService/process.js b/process/CreateOfferApprovedNotification_workflowService/process.js new file mode 100644 index 0000000000000000000000000000000000000000..de4c733c1fadf92c1487ec55bb5d717e0ce24986 --- /dev/null +++ b/process/CreateOfferApprovedNotification_workflowService/process.js @@ -0,0 +1,35 @@ +import("Keyword_lib"); +import("system.translate"); +import("Contact_lib"); +import("Sql_lib"); +import("system.tools"); +import("KeywordRegistry_basic"); +import("system.text"); +import("system.vars"); +import("system.notification"); + +var variables = JSON.parse(vars.get("$local.value")); +var userNewId = tools.getUserByAttribute([tools.TITLE], variables.userNew, tools.PROFILE_FULL)[tools.NAME]; + +var offerData = newSelect([ + "OFFER.ACTIONUSER", + "concat(OFFER.OFFERCODE, '-', OFFER.VERSNR)", + "OFFER.STATUS" +]).from("OFFER") +.where("OFFER.OFFERID", variables.targetId) +.arrayRow(); +var offername = offerData[1] + " | " + KeywordUtils.getViewValue($KeywordRegistry.offerStatus(), offerData[2]); +var user = ContactUtils.getTitleByContactId(offerData[0]); + +var config = notification.createConfig() + .notificationType("WorkflowNotification") + .caption("Angebot freigegeben") //translation doesn't work + .description("Die Freigabe Ihres Angebots \"" + offername + "\" wurde durch \"" + user + "\" freigegeben") //translation doesn't work + .addUsersWithIds([userNewId]) + .forcedPriority(notification.PRIO_NORMAL) + .linkInfo(text.encodeMS([variables.targetContext, variables.targetId])) + .daysToLive(1); + +notification.addNotificationWith(config); + +newWhere("OFFER.OFFERID", variables.targetId).updateFields({"ACTIONUSER": ""}); \ No newline at end of file diff --git a/process/CreateOfferDeniedActivity_workflowService/CreateOfferDeniedActivity_workflowService.aod b/process/CreateOfferDeniedActivity_workflowService/CreateOfferDeniedActivity_workflowService.aod new file mode 100644 index 0000000000000000000000000000000000000000..520a97340754148f184c20c770dc01f1d2e41b1b --- /dev/null +++ b/process/CreateOfferDeniedActivity_workflowService/CreateOfferDeniedActivity_workflowService.aod @@ -0,0 +1,11 @@ +<?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.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> + <name>CreateOfferDeniedActivity_workflowService</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <process>%aditoprj%/process/CreateOfferDeniedActivity_workflowService/process.js</process> + <alias>Data_alias</alias> + <serviceTaskParameterProcess>%aditoprj%/process/CreateOfferDeniedActivity_workflowService/serviceTaskParameterProcess.js</serviceTaskParameterProcess> + <variants> + <element>WORKFLOW</element> + </variants> +</process> diff --git a/process/CreateOfferDeniedActivity_workflowService/process.js b/process/CreateOfferDeniedActivity_workflowService/process.js new file mode 100644 index 0000000000000000000000000000000000000000..1caa7274d44e71bf1b51ce52e852503ff62aab01 --- /dev/null +++ b/process/CreateOfferDeniedActivity_workflowService/process.js @@ -0,0 +1,74 @@ +import("system.translate"); +import("system.entities"); +import("system.tools"); +import("system.workflow"); +import("ActivityTask_lib"); +import("KeywordRegistry_basic"); +import("system.datetime"); +import("Sql_lib"); +import("system.vars"); + +var variables = JSON.parse(vars.get("$local.value")); + +newWhere("OFFER.OFFERID", variables.targetId).updateFields({"APPROVAL" : 0}); + +var user = newSelect("OFFER.ACTIONUSER").from("OFFER").where("OFFER.OFFERID", variables.targetId).cell(); +var today = datetime.date(); +var subject = "Angebot abgelehnt"; //translation doesn't work +var reason; + +if (variables.firstOrSecond == "1") { + reason = variables.reason; +} else { + reason = variables.reason2; +} + +var activityData = { + directionKeywordId : $KeywordRegistry.activityDirection$internal(), + categoryKeywordId : $KeywordRegistry.activityCategory$approval(), + entrydate : today, + content : reason, + subject : subject, + userNew : vars.get("$sys.user"), + responsibleContactId: user +}; + +var links = [[variables.targetContext, variables.targetId]]; +var activity = ActivityUtils.insertNewActivity(activityData, links); + +var loadConfig = workflow.createConfigForLoadingTasks(); +loadConfig.processInstanceId(vars.get("$local.uid")); +var tasks = JSON.parse(workflow.getTasks(loadConfig)); + +var requestor; + +tasks.forEach(function (task){ + requestor = tools.getUserByAttribute(tools.NAME, task.assignee, tools.PROFILE_FULL)[tools.PARAMS][tools.CONTACTID]; +}); + +var configLink = entities.createConfigForAddingRows(); +configLink.entity("TaskLink_entity"); +configLink.fieldValues({ + "OBJECT_TYPE": variables.targetContext, + "OBJECT_ROWID": variables.targetId +}); + +var userNewContactId = tools.getUserByAttribute([tools.TITLE], variables.userNew, tools.PROFILE_FULL)[tools.PARAMS][tools.CONTACTID]; + +var config = entities.createConfigForAddingRows(); +config.entity("Task_entity"); +config.fieldValues({ + "SUBJECT": subject, + "REQUESTOR_CONTACT_ID": requestor, + "EDITOR_CONTACT_ID": userNewContactId, + "TYPE": $KeywordRegistry.taskType$task(), + "STATUS": $KeywordRegistry.taskStatus$assigned(), + "PRIORITY": $KeywordRegistry.taskPriority$low(), + "DESCRIPTION": reason, + "START_DATE": today, + "PROGRESS": $KeywordRegistry.taskProgress$0(), + "Links": configLink +}); +config.user("Admin"); + +entities.createRow(config); \ No newline at end of file diff --git a/process/CreateOfferDeniedActivity_workflowService/serviceTaskParameterProcess.js b/process/CreateOfferDeniedActivity_workflowService/serviceTaskParameterProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..76f283b6e21fd8adb7becd165b3b397ada1641bb --- /dev/null +++ b/process/CreateOfferDeniedActivity_workflowService/serviceTaskParameterProcess.js @@ -0,0 +1,17 @@ +import("Workflow_lib"); +import("system.result"); + +var items = [ + { + id: "1", + name: "Erste Begründung" + }, + { + id: "2", + name: "Zweite Begründung" + } +] + +result.object([ + new WorkflowServiceTaskParameter("firstOrSecond", "Erste oder Zweite Begründung", WorkflowServiceTaskParameter.ENUM(), items) +]); diff --git a/process/CreateOfferNotification_workflowService/CreateOfferNotification_workflowService.aod b/process/CreateOfferNotification_workflowService/CreateOfferNotification_workflowService.aod new file mode 100644 index 0000000000000000000000000000000000000000..d2860a2a5f199e0878d9b20866b39bb683a6dd61 --- /dev/null +++ b/process/CreateOfferNotification_workflowService/CreateOfferNotification_workflowService.aod @@ -0,0 +1,10 @@ +<?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.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> + <name>CreateOfferNotification_workflowService</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <process>%aditoprj%/process/CreateOfferNotification_workflowService/process.js</process> + <alias>Data_alias</alias> + <variants> + <element>WORKFLOW</element> + </variants> +</process> diff --git a/process/CreateOfferNotification_workflowService/process.js b/process/CreateOfferNotification_workflowService/process.js new file mode 100644 index 0000000000000000000000000000000000000000..d6a3583a95aac54f9870dd524d9cf72e74a60480 --- /dev/null +++ b/process/CreateOfferNotification_workflowService/process.js @@ -0,0 +1,32 @@ +import("Keyword_lib"); +import("system.translate"); +import("Contact_lib"); +import("Sql_lib"); +import("system.tools"); +import("KeywordRegistry_basic"); +import("system.text"); +import("system.vars"); +import("system.notification"); + +var variables = JSON.parse(vars.get("$local.value")); +var userNewId = tools.getUserByAttribute([tools.TITLE], variables.userNew, tools.PROFILE_FULL)[tools.NAME]; + +var offerData = newSelect([ + "OFFER.ACTIONUSER", + "concat(OFFER.OFFERCODE, '-', OFFER.VERSNR)" +]).from("OFFER") +.where("OFFER.OFFERID", variables.targetId) +.arrayRow(); +var offername = offerData[1]; +var user = ContactUtils.getTitleByContactId(offerData[0]); + +var config = notification.createConfig() + .notificationType("WorkflowNotification") + .caption("Angebot abgelehnt") //translation doesn't work + .description("Die Freigabe Ihres Angebots \"" + offername + "\" wurde durch \"" + user + "\" abgelehnt") //translation doesn't work + .addUsersWithIds([userNewId]) + .forcedPriority(notification.PRIO_NORMAL) + .linkInfo(text.encodeMS([variables.targetContext, variables.targetId])) + .daysToLive(1); + +notification.addNotificationWith(config); \ No newline at end of file diff --git a/process/DSGVOAnonymize_serverProcess/DSGVOAnonymize_serverProcess.aod b/process/DSGVOAnonymize_serverProcess/DSGVOAnonymize_serverProcess.aod new file mode 100644 index 0000000000000000000000000000000000000000..0469b8849190b5290f93637119386f35f63cb99e --- /dev/null +++ b/process/DSGVOAnonymize_serverProcess/DSGVOAnonymize_serverProcess.aod @@ -0,0 +1,10 @@ +<?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.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> + <name>DSGVOAnonymize_serverProcess</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <process>%aditoprj%/process/DSGVOAnonymize_serverProcess/process.js</process> + <alias>Data_alias</alias> + <variants> + <element>EXECUTABLE</element> + </variants> +</process> diff --git a/process/DSGVOAnonymize_serverProcess/process.js b/process/DSGVOAnonymize_serverProcess/process.js new file mode 100644 index 0000000000000000000000000000000000000000..221517b85f56be78e1b67e270f4a1b8a75188f45 --- /dev/null +++ b/process/DSGVOAnonymize_serverProcess/process.js @@ -0,0 +1,219 @@ +import("system.SQLTYPES"); +import("system.logging"); +import("Sql_lib"); +import("system.datetime"); +import("system.db"); +import("KeywordRegistry_basic"); +import("Keyword_lib"); + +/* +Notice: The commented Code can be used for some Customers who don't want to delete all Activities of a Person. Only those who no longer have a Link. +*/ + +var contactIds = [[]]; +var personIds = [[]]; +var loghistoryTabelsContact = ["CONTACT", "COMMUNICATION", "ADDRESS", "AB_ATTRIBUTERELATION"]; +var loghistoryTabelsPerson = ["PERSON"]; +var loghistoryTabelsActivity = ["ACTIVITY", "AB_ATTRIBUTERELATION"]; +var today = datetime.date(); +var anonymizeString = "*****"; +var user = "System"; +var delayDays = parseInt(new KeywordAttribute($KeywordRegistry.dsgvoConfiguration(), "Delete Delay in Days", "7") + .getValue($KeywordRegistry.dsgvoConfiguration$config())); +var statements = []; +var statementsAudit = []; +var statementsSys = []; +var indexIdsArray = 0; +var splitLength = 1000; + +var setFlagDate = today - datetime.ONE_DAY * delayDays; + +logging.log("start anonymization"); + +let contacts = newSelect(["CONTACT.CONTACTID", "CONTACT.PERSON_ID"]) +.from("CONTACT") +.join("DSGVODELETEFLAG","CONTACT.CONTACTID = DSGVODELETEFLAG.CONTACT_ID") +.where("CONTACT.STATUS", $KeywordRegistry.contactStatus$markToDelete()) +.and("DSGVODELETEFLAG.DATE_NEW",setFlagDate,SqlBuilder.LESS_OR_EQUAL()) +.groupBy(["CONTACT.CONTACTID", "CONTACT.PERSON_ID"]) +.table(true, db.DB_EOF, 600000); + +logging.log(contacts.length + " persons to anonymize"); + +if (contacts.length > 0) +{ + contacts.forEach(function([pContactId, pPersonId]) + { + if (contactIds[indexIdsArray].length == splitLength) + { + contactIds.push([]); + personIds.push([]); + indexIdsArray++; + } + contactIds[indexIdsArray].push(pContactId); + personIds[indexIdsArray].push(pPersonId); + + let collapsedActivityIds = []; + let activityIds = newSelect(["ACTIVITYLINK.ACTIVITY_ID"]) + .from("ACTIVITYLINK") + .where("ACTIVITYLINK.OBJECT_ROWID", pContactId) + .and("ACTIVITYLINK.OBJECT_TYPE", "Person") + /*.and( + newSelect("count(*)") + .from("ACTIVITYLINK", "AL") + .where("AL.ACTIVITY_ID = ACTIVITYLINK.ACTIVITY_ID"), 1, SqlBuilder.EQUAL(), SQLTYPES.INTEGER)*/ + .arrayColumn(); + + do { + collapsedActivityIds.push(activityIds.splice(0, splitLength)); + } while (activityIds.length > 0) + + collapsedActivityIds.forEach(function (pActivityIds) + { + if (pActivityIds.length > 0) + { + // ------------------------------------------------------------------------------------------------------------------------ + // DELETE: ACTIVITYLINK, ACTIVITY and all relations + + statements.push(newWhere("ACTIVITYLINK.ACTIVITY_ID", pActivityIds, SqlBuilder.IN()) + /*.or(newWhere("ACTIVITYLINK.OBJECT_ROWID", pContactId) + .and("ACTIVITYLINK.OBJECT_TYPE", "Person"))*/ + .buildDeleteStatement(true, "ACTIVITYLINK")); + + statements.push(newWhere("ACTIVITY.ACTIVITYID", pActivityIds, SqlBuilder.IN()) + .buildDeleteStatement(true, "ACTIVITY")); + + statementsSys.push(new SqlBuilder(SqlUtils.getBinariesAlias()) + .where("ASYS_BINARIES.ROW_ID", pActivityIds, SqlBuilder.IN(), null) + .buildDeleteStatement(true, "ASYS_BINARIES")); + + statements.push(newWhere("AB_ATTRIBUTERELATION.OBJECT_ROWID", pActivityIds, SqlBuilder.IN()) + .buildDeleteStatement(true, "AB_ATTRIBUTERELATION")); + + statements.push(newWhere("AB_LOGHISTORY.TABLENAMEID", pActivityIds, SqlBuilder.IN()) + .and("AB_LOGHISTORY.TABLENAME", loghistoryTabelsActivity, SqlBuilder.IN()) + .buildDeleteStatement(true, "AB_LOGHISTORY")); + } + }); + + let collapsedTaskIds = []; + let taskIds = newSelect(["TASKLINK.TASK_ID"]) + .from("TASKLINK") + .where("TASKLINK.OBJECT_ROWID", pContactId) + .and("TASKLINK.OBJECT_TYPE", "Person") + /*.and( + newSelect("count(*)") + .from("TASKLINK", "TL") + .where("TL.TASK_ID = TASKLINK.TASK_ID"), 1, SqlBuilder.EQUAL(), SQLTYPES.INTEGER)*/ + .arrayColumn(); + + do { + collapsedTaskIds.push(taskIds.splice(0, splitLength)); + } while (taskIds.length > 0) + + collapsedTaskIds.forEach(function (pTaskIds) + { + if (pTaskIds.length > 0) + { + // ------------------------------------------------------------------------------------------------------------------------ + // DELETE: TASKLINK, TASK and all relations + + statements.push(newWhere("TASKLINK.TASK_ID", pTaskIds, SqlBuilder.IN()) + /*.or(newWhere("TASKLINK.OBJECT_ROWID", pContactId) + .and("TASKLINK.OBJECT_TYPE", "Person"))*/ + .buildDeleteStatement(true, "TASKLINK")); + + statements.push(newWhere("TASK.TASKID", pTaskIds, SqlBuilder.IN()) + .buildDeleteStatement(true, "TASK")); + + statementsSys.push(new SqlBuilder(SqlUtils.getBinariesAlias()) + .where("ASYS_BINARIES.ROW_ID", pTaskIds, SqlBuilder.IN(), null) + .buildDeleteStatement(true, "ASYS_BINARIES")); + + statements.push(newWhere("AB_LOGHISTORY.TABLENAMEID", pTaskIds, SqlBuilder.IN()) + .and("AB_LOGHISTORY.TABLENAME", "TASK", SqlBuilder.EQUAL()) + .buildDeleteStatement(true, "AB_LOGHISTORY")); + } + }); + + + // ------------------------------------------------------------------------------------------------------------------------ + // Insert: AB_LOGHISTORY + + statements.push(new SqlBuilder() + .buildInsertStatement({ + "USER_NEW" : user, + "DATE_NEW" : today, + "DESCRIPTION" : "Kontakt anonymisiert.", + "LOGTYPE": "U" , + "TABLENAME" : "DSGVO", + "TABLENAMEID" : pContactId + }, "AB_LOGHISTORY", "AB_LOGHISTORYID")); + }); + + for (let index = 0; index <= indexIdsArray; index++) + { + let tempContactIds = contactIds[index]; + let tempPersonIds = personIds[index]; + + // ------------------------------------------------------------------------------------------------------------------------ + // Update: CONTACT, PERSON + + statementsAudit.push(newWhere("CONTACT.CONTACTID", tempContactIds, SqlBuilder.IN()) + .buildUpdateStatement({ + "USER_EDIT" : user, + "DATE_EDIT" : today, + "ADDRESS_ID" : null, + "STATUS" : $KeywordRegistry.contactStatus$inactive() + }, "CONTACT")); + + statements.push(newWhere("PERSON.PERSONID", tempPersonIds, SqlBuilder.IN()) + .buildUpdateStatement({ + "USER_EDIT" : user, + "DATE_EDIT" : today, + "FIRSTNAME" : anonymizeString, + "LASTNAME": anonymizeString + }, "PERSON")); + + // ------------------------------------------------------------------------------------------------------------------------ + // DELETE: ADDRESS, ASYS_BINARIES, COMMUNICATION, AB_ATTRIBUTERELATION, AB_LOGHISTORY, AB_OBJECTRELATION, AB_APPOINTMENTLINK + + statements.push(newWhere("ADDRESS.CONTACT_ID", tempContactIds, SqlBuilder.IN()) + .buildDeleteStatement(true, "ADDRESS")); + + statements.push(newWhere("COMMUNICATION.CONTACT_ID", tempContactIds, SqlBuilder.IN()) + .buildDeleteStatement(true, "COMMUNICATION")); + + statements.push(newWhere("AB_ATTRIBUTERELATION.OBJECT_ROWID", tempContactIds, SqlBuilder.IN()) + .buildDeleteStatement(true, "AB_ATTRIBUTERELATION")); + + statementsSys.push(new SqlBuilder(SqlUtils.getBinariesAlias()) + .where("ASYS_BINARIES.ROW_ID", tempContactIds, SqlBuilder.IN(), null) + .buildDeleteStatement(true, "ASYS_BINARIES")); + + statements.push(newWhere("AB_OBJECTRELATION.OBJECT1_ROWID", tempContactIds, SqlBuilder.IN()) + .or("AB_OBJECTRELATION.OBJECT2_ROWID", tempContactIds, SqlBuilder.IN()) + .buildDeleteStatement(true, "AB_OBJECTRELATION")); + + statements.push(newWhere("AB_OBJECTRELATION.OBJECT1_ROWID", tempPersonIds, SqlBuilder.IN()) + .or("AB_OBJECTRELATION.OBJECT2_ROWID", tempPersonIds, SqlBuilder.IN()) + .buildDeleteStatement(true, "AB_OBJECTRELATION")); + + statements.push(newWhere("AB_APPOINTMENTLINK.OBJECT_ROWID", tempContactIds, SqlBuilder.IN()) + .or("AB_APPOINTMENTLINK.OBJECT_ROWID", tempPersonIds, SqlBuilder.IN()) + .buildDeleteStatement(true, "AB_APPOINTMENTLINK")); + + statements.push(newWhere( + newWhere("AB_LOGHISTORY.TABLENAMEID", tempContactIds, SqlBuilder.IN()) + .and("AB_LOGHISTORY.TABLENAME", loghistoryTabelsContact, SqlBuilder.IN())) + .or(newWhere("AB_LOGHISTORY.TABLENAMEID", tempPersonIds, SqlBuilder.IN()) + .and("AB_LOGHISTORY.TABLENAME", loghistoryTabelsPerson, SqlBuilder.IN())) + .buildDeleteStatement(true, "AB_LOGHISTORY")); + } + + db.execute(statements, "Data_alias_noAudit", 10000000); + db.execute(statementsAudit, "Data_alias", 10000000); + db.execute(statementsSys, SqlUtils.getBinariesAlias(), 10000000); +} + +logging.log("end anonymization"); \ No newline at end of file diff --git a/process/DSGVOSetDeleteFlags_serverProcess/DSGVOSetDeleteFlags_serverProcess.aod b/process/DSGVOSetDeleteFlags_serverProcess/DSGVOSetDeleteFlags_serverProcess.aod new file mode 100644 index 0000000000000000000000000000000000000000..767a329542f6a14ad4248ae4623fb1cff2340d46 --- /dev/null +++ b/process/DSGVOSetDeleteFlags_serverProcess/DSGVOSetDeleteFlags_serverProcess.aod @@ -0,0 +1,11 @@ +<?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.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> + <name>DSGVOSetDeleteFlags_serverProcess</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <process>%aditoprj%/process/DSGVOSetDeleteFlags_serverProcess/process.js</process> + <restrictedRoles /> + <alias>Data_alias</alias> + <variants> + <element>EXECUTABLE</element> + </variants> +</process> diff --git a/process/DSGVOSetDeleteFlags_serverProcess/process.js b/process/DSGVOSetDeleteFlags_serverProcess/process.js new file mode 100644 index 0000000000000000000000000000000000000000..5f21ca346a912979b2b49f04157ac62430c7e29b --- /dev/null +++ b/process/DSGVOSetDeleteFlags_serverProcess/process.js @@ -0,0 +1,140 @@ +import("system.db"); +import("system.neon"); +import("KeywordRegistry_basic"); +import("system.vars"); +import("system.util"); +import("system.entities"); +import("Sql_lib"); +import("system.tools"); +import("system.SQLTYPES"); +import("Util_lib"); + +let selection = JSON.parse(vars.get("$local.tableSelection")); +var statements = []; + +if (vars.get("$local.deleteFlags") == "true") +{ + let reasons = newSelect(["DSGVOCONFIGURATION.REASON"]) + .from("DSGVOCONFIGURATION") + .whereIfSet("DSGVOCONFIGURATION.DSGVOCONFIGURATIONID", selection, SqlBuilder.IN()) + .arrayColumn(); + + newWhereIfSet("CONTACT.STATUS", $KeywordRegistry.contactStatus$markToDelete()) + .and("CONTACT.CONTACTID", + newSelect("DSGVODELETEFLAG.CONTACT_ID") + .from("DSGVODELETEFLAG") + .where("DSGVODELETEFLAG.REASON", $KeywordRegistry.dsgvoReason$manuel(), SqlBuilder.NOT_EQUAL()) + .andIfSet("DSGVODELETEFLAG.REASON", reasons, SqlBuilder.IN()), + SqlBuilder.IN()) + .updateData(true, "CONTACT", ["STATUS"], null, [$KeywordRegistry.contactStatus$active()]); + + newWhereIfSet("DSGVODELETEFLAG.REASON", $KeywordRegistry.dsgvoReason$manuel(), SqlBuilder.NOT_EQUAL()) + .andIfSet("DSGVODELETEFLAG.REASON", reasons, SqlBuilder.IN()) + .deleteData(true, "DSGVODELETEFLAG"); +} + +let contactIdsToMark = [[]]; +var contactIdsToMarkIndex = 0; + +let configIndexes = { + "FILTER" : 0, + "REASON" : 1 +} + +let configurations = newSelect(["DSGVOCONFIGURATION.FILTER", "DSGVOCONFIGURATION.REASON"]) +.from("DSGVOCONFIGURATION") +.whereIfSet("DSGVOCONFIGURATION.DSGVOCONFIGURATIONID", selection, SqlBuilder.IN()) +.table(); + +configurations.forEach(_getTheObjectsToTheFilter); + +contactIdsToMark.forEach(function (pContactIds) +{ + if (!Utils.isNullOrEmpty(pContactIds)) + { + statements.push(newWhereIfSet("CONTACT.CONTACTID", pContactIds, SqlBuilder.IN()) + .buildUpdateStatement({ + "STATUS" : $KeywordRegistry.contactStatus$markToDelete() + }, "CONTACT")); + } +}); + + +db.execute(statements, "Data_alias", 10000000); + +function _getTheObjectsToTheFilter (pConfig) +{ + let excludedContactId = new Set(); + let filter = JSON.parse(pConfig[configIndexes.FILTER]); + + var config = entities.createConfigForLoadingRows() + .entity("Person_entity") + .ignorePermissions(true) + .filter(JSON.stringify(filter.filter)) + .fields(["#UID"]); + + let contactsToMark = [[]] + let index = 0; + + entities.getRows(config).forEach(function(e) + { + if (contactsToMark[index].length == 1000) + { + contactsToMark.push([]); + index++; + } + contactsToMark[index].push(e["#UID"]); + }); + + contactsToMark.forEach(function (pContactIds) + { + if (!Utils.isNullOrEmpty(pContactIds)) + { + pContactIds = newSelect("CONTACT.CONTACTID") + .from("CONTACT") + .where( + newSelect("COUNT(*)") + .from("CONTACT", "C") + .where("C.PERSON_ID = CONTACT.PERSON_ID"), 1, SqlBuilder.EQUAL(), SQLTYPES.INTEGER) + .and( + newSelect("COUNT(*)") + .from("DSGVODELETEFLAG") + .where("DSGVODELETEFLAG.REASON", pConfig[configIndexes.REASON]) + .and("DSGVODELETEFLAG.CONTACT_ID = CONTACT.CONTACTID"), 0, SqlBuilder.EQUAL(), SQLTYPES.INTEGER) + .and("CONTACT.CONTACTID", pContactIds, SqlBuilder.IN()) + .arrayColumn(); + + var users = tools.getUsersByAttribute(tools.CONTACTID, pContactIds, tools.PROFILE_DEFAULT); + users.forEach(function (user){ + excludedContactId.add(user[tools.PARAMS][tools.CONTACTID]) + }); + + pContactIds.forEach(_insertDeleteFlags,{ + "reason": pConfig[configIndexes.REASON], + "excludedContactId": excludedContactId + }); + } + }); +} + +function _insertDeleteFlags (pContactId) +{ + if (!this.excludedContactId.has(pContactId)) + { + statements.push(new SqlBuilder().buildInsertStatement({ + "DSGVODELETEFLAGID": util.getNewUUID(), + "REASON": this.reason, + "CONTACT_ID" : pContactId, + "USER_NEW": vars.get("$sys.user"), + "DATE_NEW": vars.get("$sys.date") + }, "DSGVODELETEFLAG")); + + if (contactIdsToMark[contactIdsToMarkIndex].length == 1000) + { + contactIdsToMark.push([]); + contactIdsToMarkIndex++; + } + + contactIdsToMark[contactIdsToMarkIndex].push(pContactId); + } +} \ No newline at end of file diff --git a/process/DataPrivacy_lib/process.js b/process/DataPrivacy_lib/process.js index 4eeff329bdde5132e17ae5e101d8aff4e52f7303..dcfac3298e2b9c78e09d15c9434ba08b6d391028 100644 --- a/process/DataPrivacy_lib/process.js +++ b/process/DataPrivacy_lib/process.js @@ -76,10 +76,11 @@ DataPrivacyType.get = function(pKey) TYPE_BIRTH: new DataPrivacyType("TYPE_BIRTH", _getBirthday, true), TYPE_ADDRESS: new DataPrivacyType("TYPE_ADDRESS", _getAddress), TYPE_COMM: new DataPrivacyType("TYPE_COMM", _getCommunication), - TYPE_ATTR: new DataPrivacyType("TYPE_ATTR", _getAttribute) - // Picture also? - // Gender also? - // Orgs of the person also? + TYPE_ATTR: new DataPrivacyType("TYPE_ATTR", _getAttribute), + TYPE_PRIVACY_NOTICE: new DataPrivacyType("TYPE_PRIVACY_NOTICE", _getDSGVODocument) + // Picture also? + // Gender also? + // Orgs of the person also? } if (pKey) @@ -105,10 +106,10 @@ DataPrivacyType.get = function(pKey) pContactId = pContactIdSaved; var entityConfig = entities.createConfigForLoadingRows() - .entity("Person_entity") - .provider("Contact") - .uid(pContactId) - .fields(pFields); + .entity("Person_entity") + .provider("Contact") + .uid(pContactId) + .fields(pFields); return entities.getRow(entityConfig); } @@ -119,7 +120,7 @@ DataPrivacyType.get = function(pKey) * - The second param is the Id of the corresponding dataset. * It is the ID saved in the DSGVO-table and is the ID returned by the these helper fuctions. * (see Return below) - * Can be undefined, if all dataPrivacy Informations are fetched. + * Can be undefined, if all dataPrivacy Information are fetched. * * Return: * the callbacks should return an array of objects: @@ -199,8 +200,8 @@ DataPrivacyType.get = function(pKey) { // TODO: update and fix Address_lib and use it (and remove format-functions in PostalAddress_lib) var entityConfig = entities.createConfigForLoadingRows() - .entity("Address_entity") - .fields(["ADDRESSID", "ADDRESS", "ADDRESSADDITION", "ADDRIDENTIFIER", "BUILDINGNO", "ZIP", "CITY", "COUNTRY", "DISTRICT", "PROVINCE"]); + .entity("Address_entity") + .fields(["ADDRESSID", "ADDRESS", "ADDRESSADDITION", "ADDRIDENTIFIER", "BUILDINGNO", "ZIP", "CITY", "COUNTRY", "DISTRICT", "PROVINCE"]); if (pAddressId) { @@ -209,7 +210,7 @@ DataPrivacyType.get = function(pKey) else { entityConfig.provider("ContactAddresses") - .addParameter("ContactId_param", pContactId); + .addParameter("ContactId_param", pContactId); } @@ -236,8 +237,8 @@ DataPrivacyType.get = function(pKey) function _getCommunication(pContactId, pCommunicationId) { var entityConfig = entities.createConfigForLoadingRows() - .entity("Communication_entity") - .fields(["COMMUNICATIONID", "ADDR"]); + .entity("Communication_entity") + .fields(["COMMUNICATIONID", "ADDR"]); if (pCommunicationId) { @@ -246,7 +247,7 @@ DataPrivacyType.get = function(pKey) else { entityConfig.provider("AllCommunications") - .addParameter("ContactId_param", pContactId); + .addParameter("ContactId_param", pContactId); } return entities.getRows(entityConfig).map(function(pComm) @@ -272,10 +273,10 @@ DataPrivacyType.get = function(pKey) if (pContactId) { var attributeQuery = new AttributeRelationQuery() - .objectRowId(pContactId) - .objectType("Person") - .includeDisplayValue() - .includeFullAttributeName(); + .objectRowId(pContactId) + .objectType("Person") + .includeDisplayValue() + .includeFullAttributeName(); if (pAttributeId) attributeQuery.attributeId(pAttributeId); @@ -289,8 +290,44 @@ DataPrivacyType.get = function(pKey) value: pAttr.fullAttributeName + ": " + pAttr.displayValue, id: pAttr.attributeId } + }) + .filter(function (pAttr) + { + return newSelect("COUNT(*)") + .from("AB_ATTRIBUTEUSAGE") + .where("AB_ATTRIBUTEUSAGE.OBJECT_TYPE", "DSGVO") + .and("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID", pAttr.id).cell() != "0" }); } + + /** + * Callback function to get the + * + * @param {String} pContactId + * @param {String} [pContactIdSaved=undefined] + * + * @return {Object[]} + */ + function _getDSGVODocument(pContactId, pContactIdSaved) + { + // Todo Format or set content dsgvotypepAssignmentRowId + var count = db.getBinaryCount("CONTACT", "DOCUMENT", pContactIdSaved || pContactId, SqlUtils.getBinariesAlias(), "PRIVACY_NOTICE") + + if (count > 0) + { + return [{ + value: translate.text("consent"), + id: pContactId + }]; + } + else + { + return [{ + value: translate.text("consent pending"), + id: pContactId + }]; + } + } } /** @@ -312,22 +349,22 @@ function DataPrivacyUtils() {} DataPrivacyUtils.getDSGVO = function(pContactId, pFilterCond) { return newSelect("DSGVOID," + // 0 - "CONTACT_ID," + // 1 - "DSGVOTYPE," + // 2 - "ROW_ID," + // 3 - "''," + // 4 - dummy for value - "STATUORITYSOURCE," + // 5 - "PURPOSE," + // 6 - "VALID_TO," + // 7 - "DATE_NEW," + // 8 - "DATE_EDIT," + // 9 - "USER_NEW," + // 10 - "USER_EDIT, " + // 11 - KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.dsgvoType(), "DSGVOTYPE")) // 12 - dsgvotype-displayvalue) - .from("DSGVO") - .where("DSGVO.CONTACT_ID", pContactId) - .andIfSet(pFilterCond) - .table(); + "CONTACT_ID," + // 1 + "DSGVOTYPE," + // 2 + "ROW_ID," + // 3 + "''," + // 4 - dummy for value + "STATUORITYSOURCE," + // 5 + "PURPOSE," + // 6 + "VALID_TO," + // 7 + "DATE_NEW," + // 8 + "DATE_EDIT," + // 9 + "USER_NEW," + // 10 + "USER_EDIT, " + // 11 + KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.dsgvoType(), "DSGVOTYPE")) // 12 - dsgvotype-displayvalue) + .from("DSGVO") + .where("DSGVO.CONTACT_ID", pContactId) + .andIfSet(pFilterCond) + .table(); } /** @@ -390,9 +427,9 @@ DataPrivacyUtils.collectAll = function(pContactId, pFilterCond) var newId = util.getNewUUID(); // insert inserts.push(["DSGVO", - ["DSGVOID", "USER_NEW", "DATE_NEW", "DSGVOTYPE", "ROW_ID", "CONTACT_ID"], - null, - [newId, currentUser, now, dsgvotype.key, pRow.id, pContactId]]); + ["DSGVOID", "USER_NEW", "DATE_NEW", "DSGVOTYPE", "ROW_ID", "CONTACT_ID"], + null, + [newId, currentUser, now, dsgvotype.key, pRow.id, pContactId]]); // and also insert it in the return data to avoid selecting from DSGVO again returnDSGVOData.push([ @@ -409,7 +446,7 @@ DataPrivacyUtils.collectAll = function(pContactId, pFilterCond) currentUser, // "USER_NEW," + // 10 "", // "USER_EDIT " // 11 KeywordUtils.getViewValue($KeywordRegistry.dsgvoType(), dsgvotype.key), // 12 - ]) + ]) } }); } @@ -436,7 +473,7 @@ DataPrivacyUtils.collectAll = function(pContactId, pFilterCond) } /** - * Notify the user to update the data privacy informations. + * Notify the user to update the data privacy information. * It is only displayed if it is a Person. * * @param {String} [pContactId] contactId that is used to vertify whether the contact is a person-contact (-> showmessage) @@ -448,20 +485,26 @@ DataPrivacyUtils.collectAll = function(pContactId, pFilterCond) DataPrivacyUtils.notifyNeedDataPrivacyUpdate = function(pContactId, pShowMessage) { if (pShowMessage == "false" || pShowMessage === false) + { return; + } + var isActive = JSON.parse(project.getPreferenceValue("custom.dsgvo.active", "true")); if (!isActive) - return; + { + return; + } - if (pContactId == undefined || ContactUtils.getContactTypeByContactId(pContactId) > 1) { // if person + if (Utils.toBoolean(vars.get("$sys.isclient")) && (pContactId == undefined || ContactUtils.getContactTypeByContactId(pContactId) > 1))// if person + { // TODO: jump to DataPrivacy-Tab of contact question.showMessage(translate.text("Your changes may have an impact on the data privacy information (GDPR).\n Please update these."), question.INFORMATION, translate.text("Update data privacy information")); } } /** - * Check if all data also contains the DSGVO-Informations + * Check if all data also contains the DSGVO-Information * * Note: this function requires that all pFields in the DSGVO table are updated (via DataPrivacyUtils.collectAll()) * Otherwise there may be fields in DSGVO which do not exist anymore in the person or some are missing. @@ -472,13 +515,13 @@ DataPrivacyUtils.notifyNeedDataPrivacyUpdate = function(pContactId, pShowMessage DataPrivacyUtils.checkAllFilled = function(pContactId) { var countNotFilled = newSelect("count(*)") - .from("DSGVO") - .where("DSGVO.CONTACT_ID", pContactId) - .and(newWhere() - .or("STATUORITYSOURCE is null") - .or("PURPOSE is null") - .or("VALID_TO is null")) - .cell(); + .from("DSGVO") + .where("DSGVO.CONTACT_ID", pContactId) + .and(newWhere() + .or("STATUORITYSOURCE is null") + .or("PURPOSE is null") + .or("VALID_TO is null")) + .cell(); return countNotFilled == "0"; } @@ -497,20 +540,20 @@ DataPrivacyUtils.dataForExport = function(pContactId, pLocale) var fields = ["DSGVOTYPE", "VALUE", "STATUORITYSOURCE", "PURPOSE", "VALID_TO"]; var config = entities.createConfigForLoadingRows() - .entity(entity) - .provider("DSGVOEntries") - .addParameter("ContactId_param", pContactId) - .fields(fields) + .entity(entity) + .provider("DSGVOEntries") + .addParameter("ContactId_param", pContactId) + .fields(fields) return [fields, entities.getRows(config).map(function(pRow) { var dsgvotype = DataPrivacyType.get(pRow.DSGVOTYPE); var newRow = [ - KeywordUtils.getViewValue($KeywordRegistry.dsgvoType(), pRow.DSGVOTYPE, pLocale), - (dsgvotype.formatAsDate ? datetime.toDate(pRow.VALUE, translate.text("dd.MM.yyyy", pLocale), "UTC") : pRow.VALUE), - KeywordUtils.getViewValue($KeywordRegistry.dsgvoStatuoritysource(), pRow.STATUORITYSOURCE, pLocale), - KeywordUtils.getViewValue($KeywordRegistry.dsgvoPurpose(), pRow.PURPOSE, pLocale), - datetime.toDate(pRow.VALID_TO, translate.text("dd.MM.yyyy", pLocale), "UTC"), + KeywordUtils.getViewValue($KeywordRegistry.dsgvoType(), pRow.DSGVOTYPE, pLocale), + (dsgvotype.formatAsDate ? datetime.toDate(pRow.VALUE, translate.text("dd.MM.yyyy", pLocale), "UTC") : pRow.VALUE), + KeywordUtils.getViewValue($KeywordRegistry.dsgvoStatuoritysource(), pRow.STATUORITYSOURCE, pLocale), + KeywordUtils.getViewValue($KeywordRegistry.dsgvoPurpose(), pRow.PURPOSE, pLocale), + datetime.toDate(pRow.VALID_TO, translate.text("dd.MM.yyyy", pLocale), "UTC"), ]; return newRow; @@ -533,7 +576,7 @@ DataPrivacyUtils.downloadCSV = function(pContactId, pLocale) var csvTable = text.toCSV(data, "\r\n", ";", '"'); - neon.download(util.encodeBase64String(csvTable), "data_pricacy.csv"); + neon.download(util.encodeBase64String(csvTable), "data_privacy.csv"); } /** @@ -587,9 +630,9 @@ DataPrivacyUtils.buildReport = function (pContactId, pReportName, pDSGVOInfo, pL { // load recipient // TODO: evtl. put this load entity into lib and use it in all display value processes var recipientConfig = entities.createConfigForLoadingRows() - .entity("AnyContact_entity") - .uid(pDSGVOInfo.recipient) - .fields(["#CONTENTTITLE"]) + .entity("AnyContact_entity") + .uid(pDSGVOInfo.recipient) + .fields(["#CONTENTTITLE"]) pDSGVOInfo.recipient = entities.getRow(recipientConfig)["#CONTENTTITLE"]; @@ -600,7 +643,7 @@ DataPrivacyUtils.buildReport = function (pContactId, pReportName, pDSGVOInfo, pL pDSGVOInfo.garantees = KeywordUtils.getViewValue($KeywordRegistry.dsgvoGuarantee(), pDSGVOInfo.garantees, pLocale), transmission += "\n" + translate.text("The transfer of data to recipients located in a third country is based on the following guarantees:", pLocale) - + "\n" + pDSGVOInfo.garantees; + + "\n" + pDSGVOInfo.garantees; } } @@ -610,9 +653,9 @@ DataPrivacyUtils.buildReport = function (pContactId, pReportName, pDSGVOInfo, pL { // load recipient // TODO: evtl. put this load entity into lib and use it in all display value processes var datasourceConfig = entities.createConfigForLoadingRows() - .entity("AnyContact_entity") - .uid(pDSGVOInfo.datasource) - .fields(["#CONTENTTITLE"]) + .entity("AnyContact_entity") + .uid(pDSGVOInfo.datasource) + .fields(["#CONTENTTITLE"]) pDSGVOInfo.datasource = entities.getRow(datasourceConfig)["#CONTENTTITLE"]; @@ -627,16 +670,16 @@ DataPrivacyUtils.buildReport = function (pContactId, pReportName, pDSGVOInfo, pL { deadline = translate.withArguments("As stated in our letter of %0, we have made use of the possibility to extend the deadline to three months due to %1.", [datetime.toDate(pDSGVOInfo.deadlineDate, translate.text("dd.MM.yyyy", pLocale)), - (pDSGVOInfo.deadline == $KeywordRegistry.dsgvoDeadline$complex() ? translate.text("the high complexity of your application", pLocale) + (pDSGVOInfo.deadline == $KeywordRegistry.dsgvoDeadline$complex() ? translate.text("the high complexity of your application", pLocale) : - (pDSGVOInfo.deadline == $KeywordRegistry.dsgvoDeadline$count() ? translate.text("the number of your applications", pLocale) : "")) + (pDSGVOInfo.deadline == $KeywordRegistry.dsgvoDeadline$count() ? translate.text("the number of your applications", pLocale) : "")) ], pLocale) } var saveTill = datetime.toDate(newSelect("max(VALID_TO)") - .from("DSGVO") - .where("DSGVO.CONTACT_ID", pContactId) - .cell()); + .from("DSGVO") + .where("DSGVO.CONTACT_ID", pContactId) + .cell()); saveTill = translate.text("We save your data until ", pLocale) + saveTill + "."; var addrObject = new AddrObject(pContactId); @@ -648,8 +691,8 @@ DataPrivacyUtils.buildReport = function (pContactId, pReportName, pDSGVOInfo, pL if (fakeDataProtectionOfficerAddr.indexOf("Err.") != -1) { - fakeDataProtectionOfficerAddr = -"Herr Max Mustermann\n\ + fakeDataProtectionOfficerAddr = + "Herr Max Mustermann\n\ Musterstr. 3\n\ 12345 Musterstadt\n\ Muster-Datenschutzberatung"; diff --git a/process/RebuildDuplicatesCache_serverProcess/RebuildDuplicatesCache_serverProcess.aod b/process/DataTimeshift/DataTimeshift.aod similarity index 72% rename from process/RebuildDuplicatesCache_serverProcess/RebuildDuplicatesCache_serverProcess.aod rename to process/DataTimeshift/DataTimeshift.aod index 078550c7200171ccff2e26f2515a616016da481a..7ed0045dd276e0ad179caaaedc82a3a87cae0d4d 100644 --- a/process/RebuildDuplicatesCache_serverProcess/RebuildDuplicatesCache_serverProcess.aod +++ b/process/DataTimeshift/DataTimeshift.aod @@ -1,8 +1,8 @@ <?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.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> - <name>RebuildDuplicatesCache_serverProcess</name> + <name>DataTimeshift</name> <majorModelMode>DISTRIBUTED</majorModelMode> - <process>%aditoprj%/process/RebuildDuplicatesCache_serverProcess/process.js</process> + <process>%aditoprj%/process/DataTimeshift/process.js</process> <variants> <element>EXECUTABLE</element> </variants> diff --git a/process/DataTimeshift/process.js b/process/DataTimeshift/process.js new file mode 100644 index 0000000000000000000000000000000000000000..c5cc7fd57ef0d3edc1b43c538cb108dfcd4e4135 --- /dev/null +++ b/process/DataTimeshift/process.js @@ -0,0 +1,135 @@ +import("system.logging"); +import("system.text"); +import("system.vars"); +import("system.eMath"); +import("Employee_lib"); +import("PermissionCalendar_lib"); +import("system.tools"); +import("system.calendars"); +import("Sql_lib"); +import("system.datetime"); +import("system.db"); +import("system.project"); +import("DataTimeshift_lib"); + +var userTitle = vars.get("$sys.user"); +//only allow the timeshifting-service user to perform this because the process_audit checks the origin of a change +//=> a no-audit alias is not required +if (userTitle != TimeShiftUtils.getTimeShiftingServiceUserTitle()) + throw new Error("[dataTimeshifting_serverProcess]Wrong user started the process. Given user: \"" + userTitle + "\"" + + " but required user is \"" + TimeShiftUtils.getTimeShiftingServiceUserTitle() + "\""); + +//the reference timestamp (=the time when the last time shifting has been performed) is stored in the service users params +var user = tools.getUser(userTitle, tools.PROFILE_FULL); +var referenceTimestamp = user[tools.PARAMS]["timeshiftReferenceTimestamp"]; +if (!referenceTimestamp) + throw new Error("[dataTimeshifting_serverProcess]The given timeshiftReferenceTimestamp paran is empty." + + "Tried to receive the param from user: \"" + userTitle + "\""); + +referenceTimestamp = datetime.toLong(referenceTimestamp, "yyyy-MM-dd'T'HH:mm:ssZ", "UTC"); +var now = datetime.date(); +var timeshiftingTime = eMath.subInt(now, referenceTimestamp); +_getCommonTableShifter().timeshift(timeshiftingTime); + +_getBinariesShifter().timeshift(timeshiftingTime); + + +//calendars are different and need a custom treatment, since the calendars.***-methods are used +var calendarShifter = _getCalendarShifter(); +if (calendarShifter) //is null when calendarbackend != DB +{ + calendarShifter.timeshift(timeshiftingTime); +} +//Initial reference point is: "2020-09-16T00:00:00+0000"; +user[tools.PARAMS]["timeshiftReferenceTimestamp"] = datetime.toDate(now, "yyyy-MM-dd'T'HH:mm:ssZ", "UTC"); +tools.updateUser(user); +/** + * Creates a TimeShifter object for the "Data_alias"-alias and returns the object. + * ASYS_*** tables are skipped as well as the liquibase-tables "DATABASECHANGELOG" and "DATABASECHANGELOGLOCK" + */ +function _getCommonTableShifter() +{ + var alias = "Data_alias"; + var timeshifter = new TimeShifter(alias); + + var excludedTables = ["DATABASECHANGELOG", "DATABASECHANGELOGLOCK"]; + var tables = db.getTables(alias); + var tablesToShift = timeshifter.getTablesToShift(); + tables.forEach(function (tableName){ + if (!tableName.startsWith("ASYS_") && !excludedTables.includes(tableName)) + tablesToShift.add(tableName); + }); + timeshifter.setTablesToShift( tablesToShift); + timeshifter.getTablesToShift().forEach(function(table){ str_log+= "\n"+table; }); + return timeshifter; +} + +/** + * Creates a TimeShifter object for the ASYS_BINARIES and returns that object. + */ +function _getBinariesShifter() +{ + var alias = SqlUtils.getBinariesAlias(); + var timeshifter = new TimeShifter(alias); + timeshifter.getTablesToShift().add("ASYS_BINARIES"); + return timeshifter; +} + +/** + * Creates a TimeShifter object for calendar events and returns it. + * This will only work if the calendar-event backend is database and appopriate grants are set. + */ +function _getCalendarShifter() +{ + var backendType = calendars.getBackendType(); + if (backendType == calendars.BACKEND_DB) + { + var alias = project.getInstanceConfigValue("calendarAlias", null); + //calendars set grant to everyone here + var timeshifter = new TimeShifter(alias); + timeshifter.getTablesToShift().add("ASYS_CALENDARBACKEND"); + timeshifter.getCustomTreatments().set("ASYS_CALENDARBACKEND", function(pTimeDiff){ + var entryQuery = newSelect("ASYS_CALENDARBACKEND.ELEMENTUID, min(ASYS_CALENDARBACKEND.OWNER)", alias) + .from("ASYS_CALENDARBACKEND") + .where("ASYS_CALENDARBACKEND.ENTRYTYPE", calendars.VEVENT) + .and("ASYS_CALENDARBACKEND.CLASSIFICATION", 0) + .and("VCOMPONENT not like '%CATEGORIES:Feiertag%'") + .groupBy("ASYS_CALENDARBACKEND.ELEMENTUID"); + + entryQuery.pageSize(500); + entryQuery.forEachPage(function(pEntries){ + for (var i = 0, l = pEntries.length; i < l; i++) + { + var entry = calendars.getEntry(pEntries[i][0], null, _getTitleCalenderUser(pEntries[i][1]), calendars.VEVENT); + entry[calendars.DTSTART] = String(eMath.addInt(entry[calendars.DTSTART], pTimeDiff)); + entry[calendars.DTEND] = String(eMath.addInt(entry[calendars.DTEND], pTimeDiff)); + calendars.update([entry]); + } + }); + }); + return timeshifter; + } + return null; +} + +/** + * Parses a calendarUser in calendaruser-form (e.g.: "; mailo: hans.mueller@mailing.de;" and returns the adito login name + */ +function _getTitleCalenderUser(pCalendarUser) +{ + var data = text.decodeMS(pCalendarUser) + for ( var i = 0; i < data.length; i++ ) + { + //if login changes we have to check calendarid + if ( data[i].substr(0, "mailto:".length).toUpperCase() == "MAILTO:" ) + { + var user = tools.getUserByAttribute(tools.CALENDARID, [data[i].substr("mailto:".length)]); + if (user != null ) + return user[tools.TITLE]; + } + + if ( data[i].substr(0, 3).toUpperCase() == "CN:" ) + return data[i].substr(3); + } + return ""; +} diff --git a/process/DataTimeshift_lib/DataTimeshift_lib.aod b/process/DataTimeshift_lib/DataTimeshift_lib.aod new file mode 100644 index 0000000000000000000000000000000000000000..29d178a8bea08b0a1ab2c9461d3855298bb2191a --- /dev/null +++ b/process/DataTimeshift_lib/DataTimeshift_lib.aod @@ -0,0 +1,10 @@ +<?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.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> + <name>DataTimeshift_lib</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <process>%aditoprj%/process/DataTimeshift_lib/process.js</process> + <alias>Data_alias</alias> + <variants> + <element>LIBRARY</element> + </variants> +</process> diff --git a/process/DataTimeshift_lib/process.js b/process/DataTimeshift_lib/process.js new file mode 100644 index 0000000000000000000000000000000000000000..1d32d542790c81bfe06eb1d566515d334192659f --- /dev/null +++ b/process/DataTimeshift_lib/process.js @@ -0,0 +1,176 @@ +import("Util_lib"); +import("Sql_lib"); +import("system.translate"); +import("system.SQLTYPES"); +import("system.logging"); +import("system.tools"); +import("system.calendars"); +import("system.datetime"); +import("system.eMath"); +import("system.db"); +import("system.project"); +import("DatabaseSupplier_lib"); +import("Supplier_lib"); + +/** + * Object for helping to shift DATE/TIMESTAMP-databasefields of an alias. + * @param {String} pAlias <p/>database alias for the shifting transactions. Data will be read from this alias and written into this alias + * @throws Error when no alias is provided + */ +function TimeShifter(pAlias) +{ + if (pAlias === undefined) + throw new Error("[TimeShifter.constructor]No alias is defined, but it is required"); + this._alias = pAlias; + this._tablesToUpdate = new Set(); + this._customTreatments = new Map(); + + this._defaulTreatmentFunc = function(pDifferenceMillis, pTablename, pPrimaryKeySupplier, pColumnsSupplier, pColumnTypeSupplier) { + var columnNames = pColumnsSupplier.get(); + var columnTypes = pColumnTypeSupplier.get(); + var pkField = pPrimaryKeySupplier.get(); + var alias = this.getAlias(); + + if (!pkField)//we cannot update if there is no primary key field + return; + + var dateCols = []; + var dateColTypes = []; + for (var i = 0, l = columnNames.length; i < l; i++) + { + if (columnTypes[i] == SQLTYPES.TIMESTAMP || columnTypes[i] == SQLTYPES.DATE) + { + dateCols.push(columnNames[i]); + dateColTypes.push(columnTypes[i]); + } + } + if (dateCols.length == 0) + return; + + var queryFields = [pkField].concat(dateCols); + var dataQuery = newSelect(queryFields, this.getAlias()) + .from(pTablename) + //some databases need a sorting for correct paging + .orderBy(pkField); + + dataQuery.pageSize(500); + dataQuery.forEachPage(function (pData){ + if (pData.length == 0) + return; + var updateStatements = []; + for (var i = 0, l = pData.length; i < l; i++) + { + var vals = pData[i].slice(1);//first values is always the primary key + //reduce the array to an object where the key is the columnname and the value is the target value for the update + vals = vals.reduce(function(pUpdateObject, pValueToAdd, pIndex){ + //empty timestamp should be ignored + if (pValueToAdd == "") + return pUpdateObject; + var column = dateCols[pIndex]; + pUpdateObject[column] = eMath.addInt(pValueToAdd, pDifferenceMillis); + return pUpdateObject; + }, {}); + //if a field is empty it is not added so it can happen that the object is empty when there are no date fields filled + if ( !Utils.isEmpty( vals)) + { + updateStatements.push( + newWhere([pTablename, pkField], pData[i][0], null, null, alias) + .buildUpdateStatement(vals, pTablename) + ); + } + } + if (updateStatements.length > 0) + db.updates(updateStatements, alias); + },null, null, this); + }; +} + +/** + * + * @return {String} returns the alias that is set for the TimeShifter-object + */ +TimeShifter.prototype.getAlias = function(){ + + return this._alias; +}; + +/** + * + * @return {Set} <p/>returns a Set where the tables that shall be shiftet can be added + * + * @example + * var exampleShifter = new TimeShifter("example_dbalias"); + * exampleShifter.getTablesToShift().add("EXAMPLE_TABLE"); + */ +TimeShifter.prototype.getTablesToShift = function(){ + return this._tablesToUpdate; +}; +TimeShifter.prototype.setTablesToShift = function( pTablesToUpdate){ + this._tablesToUpdate = pTablesToUpdate; +} + +/** + * + * @return {Map} <p/>returns a Map where the key is the tablename and the value is a callback function that performs the shifting with the following + * params: + * <ul> + * <li>{String} timeDiff - the difference in milliseconds where the shift has to be performed</li> + * <li>{String} tableName - name of the table that is shifted</li> + * <li>{CachedSupplierWrapper} pkSupplier - a cached "PrimaryKeyNameSupplier" to retrieve the primary key name of the table</li> + * <li>{CachedSupplierWrapper} columnSupplier - a cached "ColumnSupplier" to retrieve all columns of the table</li> + * <li>{CachedSupplierWrapper} columnTypesSupplier - a cached "ColumnTypesSupplier" to retrieve all columntypes of the table</li> + * </ul> + * <p/>You can access the TimeShifter-object via the "this" reference + * + * @example + * var exampleShifter = new TimeShifter("example_dbalias"); + * exampleShifter.getTablesToShift().add("EXAMPLE_TABLE"); + * exampleShifter.getCustomTreatments().set("EXAMPLE_TABLE", function(pTimeDiff, pTable, pPkSupplier, pColumnSupplier, pColumnTypeSupplier){ + *     var primaryKeyField = pPkSupplier.get(); + *     //code for shifting ...... + * ); + */ +TimeShifter.prototype.getCustomTreatments = function(){ + return this._customTreatments; +}; + +/** + * After configurating the TimeShifter object the data can be shiftet with the timeshift-function. + * + * @param {String|Number} pOffsetInMillis <p/>The amount of milliseconds for shifting the data, if this is e.g. one day (86400000) every date + * will be shiftet one day in the future + */ +TimeShifter.prototype.timeshift = function (pOffsetInMillis) +{ + var timeDiff = pOffsetInMillis; + this.getTablesToShift().forEach(function (tableName) { + var pkSupplier = new CachedSupplierWrapper(new PrimaryKeyNameSupplier(this.getAlias(), tableName)); + var columnSupplier = new CachedSupplierWrapper(new ColumnSupplier(this.getAlias(), tableName)); + var columnTypesSupplier = new CachedSupplierWrapper(new ColumnTypesSupplier(this.getAlias(), tableName, columnSupplier)); + if (this.getCustomTreatments().has(tableName)) + { + var customTreamentFunc = this.getCustomTreatments().get(tableName); + //assertions + customTreamentFunc.call(this, timeDiff, tableName, pkSupplier, columnSupplier, columnTypesSupplier); + } + else + { + this._defaulTreatmentFunc.call(this, timeDiff, tableName, pkSupplier, columnSupplier, columnTypesSupplier); + } + }, this); + this.setTablesToShift( new Set()) +}; + +/** + * Provides static utility functions for shifting timestamp database ifelds + * Don't instanciate TimeShiftUtils. + */ +function TimeShiftUtils(){} + +/** + * + * @return Title of the user that is used for timeshifting-actions + */ +TimeShiftUtils.getTimeShiftingServiceUserTitle = function (){ + return "timeshiftService"; +} \ No newline at end of file diff --git a/process/DatabaseSupplier_lib/DatabaseSupplier_lib.aod b/process/DatabaseSupplier_lib/DatabaseSupplier_lib.aod new file mode 100644 index 0000000000000000000000000000000000000000..a9d5d7e631bdc6d495e63f3015ea0e1664e36bb1 --- /dev/null +++ b/process/DatabaseSupplier_lib/DatabaseSupplier_lib.aod @@ -0,0 +1,9 @@ +<?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.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> + <name>DatabaseSupplier_lib</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <process>%aditoprj%/process/DatabaseSupplier_lib/process.js</process> + <variants> + <element>LIBRARY</element> + </variants> +</process> diff --git a/process/DatabaseSupplier_lib/process.js b/process/DatabaseSupplier_lib/process.js new file mode 100644 index 0000000000000000000000000000000000000000..f9052970b6bdb27a83ab515c8dc7a2bb67c0434f --- /dev/null +++ b/process/DatabaseSupplier_lib/process.js @@ -0,0 +1,77 @@ +import("system.logging"); +import("system.db"); +import("system.project"); + + +/* + * Database supplier lib, supplies a unified object structure for loading table definitions + */ +function AbstractDbTableBasedSupplier(pAlias, pTable) +{ + this._alias = pAlias; + this._table = pTable; +} + +AbstractDbTableBasedSupplier.prototype.get = function() +{ + throw new Error("[AbstractDbTableBasedSupplier.get]Not implemented because it is abstract."); +}; + + +//Supplier for pks +function PrimaryKeyNameSupplier(pAlias, pTable) +{ + AbstractDbTableBasedSupplier.call(this, pAlias, pTable); +} +PrimaryKeyNameSupplier.prototype = Object.create(AbstractDbTableBasedSupplier.prototype); +PrimaryKeyNameSupplier.prototype.constructor = AbstractDbTableBasedSupplier; + +//uses alias definitions to return the primary key name for pTable defined in the constructor +PrimaryKeyNameSupplier.prototype.get = function() +{ + if (!this.hasOwnProperty(this._resultCache)) + { + var struct = project.getAliasDefinitionStructure(this._alias, this._table); + var tableStruct = struct.tables[ this._table.toUpperCase()]; + if (tableStruct == undefined){ + this._resultCache = ""; + logging.log( this._table +"'s alias definition could not be found, primary key could not be established"); + }else + this._resultCache = tableStruct.idColumn || ""; + + } + return this._resultCache; +}; + +//Supplier for column names +function ColumnSupplier(pAlias, pTable) +{ + AbstractDbTableBasedSupplier.call(this, pAlias, pTable); +} +ColumnSupplier.prototype = Object.create(AbstractDbTableBasedSupplier.prototype); +ColumnSupplier.prototype.constructor = AbstractDbTableBasedSupplier; + +//returns all column names of a table pTable defined in the constructor +ColumnSupplier.prototype.get = function() +{ + var columns = db.getColumns(this._table, this._alias); + return columns; +}; + + +//Supplier for column types +function ColumnTypesSupplier(pAlias, pTable, pColumnSupplier) +{ + AbstractDbTableBasedSupplier.call(this, pAlias, pTable); + this._columnSuppier = pColumnSupplier; +} +ColumnTypesSupplier.prototype = Object.create(AbstractDbTableBasedSupplier.prototype); +ColumnTypesSupplier.prototype.constructor = AbstractDbTableBasedSupplier; + +//returns column types for all columns of table pTable defined in the constructor +ColumnTypesSupplier.prototype.get = function() +{ + var columns = this._columnSuppier.get(); + var columnTypes = db.getColumnTypes(this._table, columns, this._alias); + return columnTypes; +}; \ No newline at end of file diff --git a/process/Date_lib/process.js b/process/Date_lib/process.js index bb454d912a881007811c2ddc2badc19bfd5612fd..faab5091a0ed1e47aeb1ae0e103d14fb3e746c38 100644 --- a/process/Date_lib/process.js +++ b/process/Date_lib/process.js @@ -95,7 +95,7 @@ DateUtils.getDayDifference = function (pPastDate, pCurrentDate) if (pCurrentDate == null) pCurrentDate = datetime.date(); var millisecDiff = Math.abs(pCurrentDate - pPastDate); - var dayDiff = Math.floor(millisecDiff / datetime.ONE_DAY); + var dayDiff = Math.round(millisecDiff / datetime.ONE_DAY); return dayDiff; } diff --git a/process/Dependency_lib/process.js b/process/Dependency_lib/process.js index 76b94543fc436be99897773a884b33279c618644..488e2f54086286b280071c73f1a6c6c9cff1dffa 100644 --- a/process/Dependency_lib/process.js +++ b/process/Dependency_lib/process.js @@ -75,7 +75,7 @@ Dependency.defaultFunctionForRelation = function (pRelationTable, pRelationField return newSelect(pRelationTable + "." + (pSourceField || "OBJECT_ROWID")) .from(pRelationTable) - .groupBy(pRelationTable + "." + pSourceField || "OBJECT_ROWID") + .groupBy(pRelationTable + "." + (pSourceField || "OBJECT_ROWID")) .whereIfSet(pRelationTable + "." + pRelationField, relationFieldValue) .andIfSet(pRelationTable + ".OBJECT_TYPE", pContext) .arrayColumn(); @@ -133,7 +133,8 @@ Dependency.mapping = function () "Person_entity": { "Activity_entity" : { "options" : { - "isObservable" : true + "isObservable" : true, + "isOwnNotified" : true }, "getUIDsfn" : Dependency.defaultFunctionForRelation("ACTIVITYLINK", "OBJECT_ROWID", "CONTACTID", "Person", "CONTACT", "ACTIVITY_ID") }, @@ -338,7 +339,8 @@ Dependency.mapping = function () "Activity_entity" : { "Person_entity" : { "options" : { - "isObservable" : true + "isObservable" : true, + "isOwnNotified" : true }, "getUIDsfn" : Dependency.defaultFunctionForRelation("ACTIVITYLINK", "ACTIVITY_ID", "ACTIVITYID", "Person", "ACTIVITY") }, @@ -718,7 +720,7 @@ Dependency.mapping = function () "options" : { "isObservable" : true }, - "getUIDsfn" : Dependency.defaultFunctionForField("LEAD.LEADIMPORT_ID") + "getUIDsfn" : Dependency.defaultFunctionForField("LEADS.LEADIMPORT_ID") } } }; diff --git a/process/DocumentTemplate_lib/process.js b/process/DocumentTemplate_lib/process.js index 5fef12bb28f9133080c716a9f542a528103792ec..99be3eedc81c09ad7456d7c39c77ff230301b0c9 100644 --- a/process/DocumentTemplate_lib/process.js +++ b/process/DocumentTemplate_lib/process.js @@ -65,10 +65,23 @@ DocumentTemplate.prototype.toString = function (pWithSubtemplates) if (this._stringCache[stringCachePosition] == null) { var content = pWithSubtemplates && this._subtemplateResolvedContent || this.content; - if (this.type == DocumentTemplate.types.PLAIN) - this._stringCache[stringCachePosition] = content; - else - this._stringCache[stringCachePosition] = text.parseDocument(content); + switch(this.type) + { + case DocumentTemplate.types.EML: //intended fallthrough + if(this.options.onlyBody) + { + var email = Email.fromRFC(content); + content = util.encodeBase64String(email.body); + } + case DocumentTemplate.types.HTML: + this._stringCache[stringCachePosition] = util.decodeBase64String(content); + break; + case DocumentTemplate.types.PLAIN: + this._stringCache[stringCachePosition] = content; + break; + default: + this._stringCache[stringCachePosition] = text.parseDocument(content); + } } return this._stringCache[stringCachePosition]; } @@ -425,7 +438,9 @@ DocumentTemplate.prototype.getReplacedContent = function (pReplacements) case DocumentTemplate.types.HTML: // replaces ä, ö, ü, ... with html escape signs for (let i in pReplacements) + { pReplacements[i] = text.text2html(pReplacements[i], false); + } case DocumentTemplate.types.TXT: let decodedContent = util.decodeBase64String(content); let encodedContent = this._replaceText(decodedContent, pReplacements); diff --git a/process/Document_lib/process.js b/process/Document_lib/process.js index 6085c3f5eec1ff9f9c1954bfd29b490188c27751..bf9a2ba925aded0949cd372c045c5c343e44673f 100644 --- a/process/Document_lib/process.js +++ b/process/Document_lib/process.js @@ -1,3 +1,4 @@ +import("Context_lib"); import("system.util"); import("system.translate"); import("system.result"); @@ -5,6 +6,7 @@ import("system.db"); import("system.vars"); import("system.neon"); import("Sql_lib"); +import("MimeType_lib"); /** * Provides static methods for managing documents. @@ -33,7 +35,9 @@ DocumentUtil.downloadSelectedDocuments = function(pAssignmentName) { // check if multiplie Files are selected. // files get packed into a zip archive before downloading if(binaryContents.length > 1) { - var fileNames = rows.map(function(value) { return value["NAME"]; }); + var fileNames = rows.map(function(value) { + return value["NAME"]; + }); neon.downloadToZip(translate.text("Files") + ".zip", binaryContents, fileNames); } else if(pAssignmentName == "ERRORLOG") @@ -43,6 +47,52 @@ DocumentUtil.downloadSelectedDocuments = function(pAssignmentName) { } } +/** + * Utility function to open a selected document. + * Selected document will be checked with $sys.selectionRows + * Document will be opened with neon.open + * @param {String} pAssignmentName (optional) the name of the assignment, used to modify the filename + * + */ +DocumentUtil.openSelectedDocument = function(pAssignmentName) +{ + var alias = SqlUtils.getBinariesAlias(); + + if(vars.exists("$sys.selectionRows") && vars.getString("$sys.selectionRows")) + { + var rows = vars.get("$sys.selectionRows"); + var uids = vars.get("$sys.selection"); + var binaryContents = db.getBinaryContents(uids, alias); + + if(binaryContents.length == 1) + { + if(pAssignmentName == "ERRORLOG") + neon.openFile(binaryContents[0], rows[0]["NAME"] + ".txt", rows[0]["TYPE"], false); + else + neon.openFile(binaryContents[0], rows[0]["NAME"], rows[0]["TYPE"], false); + } + } +} + +/** + * Checks if the mimetype can be opened. + */ +DocumentUtil.canOpenSelectedDocument = function() +{ + if(vars.exists("$sys.selectionRows") && vars.getString("$sys.selectionRows")) + { + var rows = vars.get("$sys.selectionRows"); + var uids = vars.get("$sys.selection"); + + if(uids.length == 1) + { + return MimeTypes.canOpenMimeTypeInBrowser(rows[0]["TYPE"]); + } + } + + return false; +} + /** * Utility function to delete the current/opened Document. */ @@ -54,6 +104,23 @@ DocumentUtil.deleteCurrentDocument = function() { } } +/** + * Utility function to delete all Uploaded Images of the current Context and uid. + * + * @param {String} pAssignmentName the name of the field of the HTML component + "_IMAGE_UPLOAD" + */ +DocumentUtil.deleteAllUploadedImages = function(pAssignmentName) { + // If the bin data is saved by the html-component, the tablename is the name of the entity! + var binMetadata = db.getBinaryMetadata(ContextUtils.getEntity(ContextUtils.getCurrentContextId()), pAssignmentName, vars.get("$sys.uid"), false, SqlUtils.getBinariesAlias()); + + + binMetadata.forEach(function(pMeta) + { //delete the connected binData + db.deleteBinary(pMeta.id, SqlUtils.getBinariesAlias()); + }); + +} + /** * Utility function to retrieve the filename from an uploadcomponent value. * The value of an uploadcomponent contains filename + filedata separated by diff --git a/process/DocxTemplater_lib/process.js b/process/DocxTemplater_lib/process.js index 8306c0421438b2cdc1e8f38940979b25bb0ba41e..9fecd012b74882f6e972df34ea7fbc7156eb5b34 100644 --- a/process/DocxTemplater_lib/process.js +++ b/process/DocxTemplater_lib/process.js @@ -2869,7 +2869,7 @@ ZipEntry.prototype = { reader.skip(localExtraFieldsLength); if (this.compressedSize == -1 || this.uncompressedSize == -1) { - throw new Error("Bug or corrupted zip : didn't get enough informations from the central directory " + "(compressedSize == -1 || uncompressedSize == -1)"); + throw new Error("Bug or corrupted zip : didn't get enough information from the central directory " + "(compressedSize == -1 || uncompressedSize == -1)"); } compression = utils.findCompression(this.compressionMethod); diff --git a/process/DuplicateMerge_lib/DuplicateMerge_lib.aod b/process/DuplicateMerge_lib/DuplicateMerge_lib.aod new file mode 100644 index 0000000000000000000000000000000000000000..0b31b47adabb6dffb053cbabace4bf0ce4f1b723 --- /dev/null +++ b/process/DuplicateMerge_lib/DuplicateMerge_lib.aod @@ -0,0 +1,10 @@ +<?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.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> + <name>DuplicateMerge_lib</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <documentation>%aditoprj%/process/DuplicateMerge_lib/documentation.adoc</documentation> + <process>%aditoprj%/process/DuplicateMerge_lib/process.js</process> + <variants> + <element>LIBRARY</element> + </variants> +</process> diff --git a/process/DuplicateMerge_lib/documentation.adoc b/process/DuplicateMerge_lib/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..09fc1f75573d8c685829f051d4731e2285eaf3ed --- /dev/null +++ b/process/DuplicateMerge_lib/documentation.adoc @@ -0,0 +1,5 @@ += DuplicateMerge_lib + +Provides functionalities for merging 2 datasets. Currently implemented for Person and Organisation. + +This lib is, among other things, able to create activities for the merge and to update the duplicates for the merged datasets. diff --git a/process/DuplicateMerge_lib/process.js b/process/DuplicateMerge_lib/process.js new file mode 100644 index 0000000000000000000000000000000000000000..5b83ce3f225e20ebee0e6ca40ff7bc859dea99b3 --- /dev/null +++ b/process/DuplicateMerge_lib/process.js @@ -0,0 +1,368 @@ +import("Communication_lib"); +import("Sql_lib"); +import("system.db"); +import("ActivityTask_lib"); +import("KeywordRegistry_basic"); +import("system.translate"); +import("DuplicateScanner_lib"); + +/** + * Methods for duplicate merging. + * Do not create an instance of this! + * + * @class + */ +function DuplicateMergeUtils() {} + +/* + * + * Merges the source person into the target person. + * This + * - replaces the source's with the target's contactid in a predefined set of tables. + * - resets the standard communications of the source contact and keeps the ones of the target. + * - updates participants of campaigns and removes obsolet ones(which would be duplicates) + * - deletes the source person and contact + * - deletes the duplicate record, if one exists + * - deletes all unrelated-duplicate-relations containing the source contact id + * + * @param {String} pSourceContactId The contact to be integrated into another + * @param {String} pTargetContactId The contact in which the source gets integrated + * @returns {Boolean} if the merge was sucessful + */ +DuplicateMergeUtils.mergePerson = function(pSourceContactId, pTargetContactId) +{ + var sourcePersonId = newSelect("PERSON_ID") + .from("CONTACT") + .where("CONTACT.CONTACTID", pSourceContactId) + .cell(); + var targetPersonId = newSelect("PERSON_ID") + .from("CONTACT") + .where("CONTACT.CONTACTID", pTargetContactId) + .cell(); + + DuplicateMergeUtils._deleteUniqueAttributes(pSourceContactId, pTargetContactId); + var isLinkedDataUpdated = DuplicateMergeUtils._migrateLinkedContactData(pSourceContactId, pTargetContactId); + var isParticipantsUpdated = DuplicateMergeUtils._migrateParticipantsToNewContact("CAMPAIGNPARTICIPANT", "CONTACT_ID", "CAMPAIGN_ID", + pSourceContactId, pTargetContactId); + DuplicateMergeUtils._updateOtherContacts(pSourceContactId, sourcePersonId, targetPersonId); + + var deleteStatements = []; + if (sourcePersonId != targetPersonId) + { + deleteStatements.push(newWhere("PERSON.PERSONID", sourcePersonId).buildDeleteStatement()); + } + + deleteStatements.push(newWhere("CONTACT.CONTACTID", pSourceContactId).buildDeleteStatement()); + deleteStatements = deleteStatements.concat(DuplicateMergeUtils._buildDeleteCachedUnrelatedDuplicateQuery(pSourceContactId)); + + //update binary + var metaData = db.getBinaryMetadata("CONTACT", "DOCUMENT", pSourceContactId, true, SqlUtils.getBinariesAlias()); + metaData.forEach(function (binaryMetaData) + { + db.updateBinaryAssignment(binaryMetaData.id, "CONTACT", "DOCUMENT", pTargetContactId, SqlUtils.getBinariesAlias()); + }); + var deletedRows = db.deletes(deleteStatements) + + DuplicateScannerUtils.deleteHasDuplicateEntries("Person_entity", [pSourceContactId, pTargetContactId]); + var dupIds = DuplicateScannerUtils.getDuplicateIdsByEntityScanner("Person_entity", pTargetContactId); + if(dupIds.length > 0) + { + DuplicateScannerUtils.insertHasDuplicateEntry("Person_entity", pTargetContactId, dupIds.length); + } + + return isLinkedDataUpdated || isParticipantsUpdated || deletedRows > 0; +} + +DuplicateMergeUtils.mergeOrganisation = function(pSourceContactId, pTargetContactId) +{ + var sourceOrganisationId = newSelect("ORGANISATION_ID") + .from("CONTACT") + .where("CONTACT.CONTACTID", pSourceContactId) + .cell(); + + var targetOrganisationId = newSelect("ORGANISATION_ID") + .from("CONTACT") + .where("CONTACT.CONTACTID", pTargetContactId) + .cell(); + + DuplicateMergeUtils._deleteUniqueAttributes(pSourceContactId, pTargetContactId); + DuplicateMergeUtils._migrateLinkedContactData(pSourceContactId, pTargetContactId); + DuplicateMergeUtils._migrateParticipantsToNewContact("CAMPAIGNPARTICIPANT", "CONTACT_ID", "CAMPAIGN_ID", + pSourceContactId, pTargetContactId); + DuplicateMergeUtils._migratePersonsToNewOrganisation(sourceOrganisationId, targetOrganisationId); + + var deleteStatements = []; + deleteStatements.push(newWhere("CONTACT.CONTACTID", pSourceContactId).buildDeleteStatement()); + deleteStatements = deleteStatements.concat(DuplicateMergeUtils._buildDeleteOrganisationAndContactQuery(sourceOrganisationId, pSourceContactId)); + deleteStatements = deleteStatements.concat(DuplicateMergeUtils._buildDeleteCachedUnrelatedDuplicateQuery(pSourceContactId)); + + //update binary + var metaData = db.getBinaryMetadata("CONTACT", "DOCUMENT", pSourceContactId, true, SqlUtils.getBinariesAlias()); + metaData.forEach(function (binaryMetaData) + { + db.updateBinaryAssignment(binaryMetaData.id, "CONTACT", "DOCUMENT", pTargetContactId, SqlUtils.getBinariesAlias()); + }); + var deletedRows = db.deletes(deleteStatements) + + DuplicateScannerUtils.deleteHasDuplicateEntries("Organisation_entity", [pSourceContactId, pTargetContactId]); + var dupIds = DuplicateScannerUtils.getDuplicateIdsByEntityScanner("Organisation_entity", pTargetContactId); + if(dupIds.length > 0) + { + DuplicateScannerUtils.insertHasDuplicateEntry("Organisation_entity", pTargetContactId, dupIds.length); + } + + return deletedRows >= 2; +} + +DuplicateMergeUtils.createMergeSuccessActivity = function(pSourceContactId, pTargetContactId, pCurrentContactId, pContext) +{ + var activityDataForInsert = { + subject: translate.withArguments("A %0 record has been merged", [pContext]), + content: translate.withArguments("%0 with ID \"%1\" has been integrated into the %0 with the ID \"%2\"", [pContext, pSourceContactId, pTargetContactId]), + //categoryKeywordId: $KeywordRegistry.ac + directionKeywordId: $KeywordRegistry.activityDirection$internal(), + responsibleContactId: pCurrentContactId + }; + var activityLinks = [[pContext, pTargetContactId]]; + + return ActivityUtils.insertNewActivity(activityDataForInsert, activityLinks, null, db.getCurrentAlias()); +} + +/* + * Persons get reassigned to new organisation + * + * @returns {Boolean} If records have been updated + */ +DuplicateMergeUtils._migratePersonsToNewOrganisation = function (pSourceOrganisationId, pTargetOrganisationId) +{ + var updateCount = newWhereIfSet(["CONTACT", "ORGANISATION_ID"], pSourceOrganisationId) + .and("PERSON_ID is not null") + .updateFields(new Map().set("ORGANISATION_ID", pTargetOrganisationId), "CONTACT"); + + var deleteCount = newWhere(["CONTACT", "ORGANISATION_ID"], pSourceOrganisationId) + .and("PERSON_ID is not null") + .deleteData(); + return updateCount > 0 || deleteCount > 0; +} + +/* + * Person and organisations keep the max_count = 1 attribute of the target and the one from the source is deleted + * + * @returns {Boolean} If records have been deleted + */ +DuplicateMergeUtils._deleteUniqueAttributes = function (pSourceContactId, pTargetContactId) +{ + var targetAttrUnique = newSelect("AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID") + .from("AB_ATTRIBUTERELATION") + .join("AB_ATTRIBUTEUSAGE on AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID = AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID") + .where("AB_ATTRIBUTEUSAGE.MAX_COUNT = 1") + .and("AB_ATTRIBUTERELATION.OBJECT_ROWID", pTargetContactId) + .table(); + var deleteCount = 0; + + targetAttrUnique.forEach(function(attribute){ + deleteCount += newWhereIfSet("AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID", attribute) + .and("AB_ATTRIBUTERELATION.OBJECT_ROWID", pSourceContactId) + .deleteData(); + }); + + return deleteCount > 0; +} + +DuplicateMergeUtils._migrateLinkedContactData = function (pSourceContactId, pTargetContactId) +{ + var updateStatements = new Map(); + var currentAlias = db.getCurrentAlias(); + + var setStandardsStatements = []; + var [standardPhone, standardMail, standardAddressId] = newSelect([ + "(" + CommUtil.getStandardSubSqlPhone() + ")", + "(" + CommUtil.getStandardSubSqlMail() + ")", + "CONTACT.ADDRESS_ID" + ]) + .from("CONTACT") + .where("CONTACT.CONTACTID", pTargetContactId) + .arrayRow(); + + //if the targetContact already has a standard phone comm, set the comm from the sourceContact as not standard + if (standardPhone) + { + setStandardsStatements.push( + newWhere("COMMUNICATION.CONTACT_ID", pSourceContactId) + .and("COMMUNICATION.MEDIUM_ID", CommUtil.getMediumIdsByCategory("PHONE"), SqlBuilder.IN()) + .buildUpdateStatement({"ISSTANDARD" : "0"}) + ); + } + if (standardMail) + { + setStandardsStatements.push( + newWhere("COMMUNICATION.CONTACT_ID", pSourceContactId) + .and("COMMUNICATION.MEDIUM_ID", CommUtil.getMediumIdsByCategory("EMAIL"), SqlBuilder.IN()) + .buildUpdateStatement({"ISSTANDARD" : "0"}) + ); + } + //set the standardaddress of the sourceContact as standard of the targetContact if it doesn't have one set yet + if(!standardAddressId) + { + var sourceStandard = newSelect("CONTACT.ADDRESS_ID") + .from("CONTACT") + .where("CONTACT.CONTACTID", pSourceContactId) + .cell(); + setStandardsStatements.push(newWhere("CONTACT.CONTACTID", pTargetContactId).buildUpdateStatement({"ADDRESS_ID": sourceStandard})); + } + + updateStatements.set(currentAlias, setStandardsStatements); + + DuplicateMergeUtils._getLinkedTableInfos(pTargetContactId).forEach(function ([tableName, columnName, additionalCondition, dbAlias]) + { + if (!dbAlias) + { + dbAlias = currentAlias; + } + + if (!updateStatements.has(dbAlias)) + { + updateStatements.set(dbAlias, []); + } + var statements = updateStatements.get(dbAlias); + + var updateValues = {}; + updateValues[columnName] = pTargetContactId; + + var updateCondition = new SqlBuilder(dbAlias).where([tableName, columnName], pSourceContactId).andIfSet(additionalCondition); + + //push must be used here to keep the reference + statements.push(updateCondition.buildUpdateStatement(updateValues, tableName)); + }); + + var totalChanges = 0; + + updateStatements.forEach(function (statements, alias) + { + totalChanges += db.updates(statements, alias); + }); + + totalChanges += newWhere("COMMUNICATION.CONTACT_ID", pSourceContactId).deleteData(); //delete leftover communications from the source contact + totalChanges += new AttributeRelationQuery(pSourceContactId).deleteAllAttributes(); //delete leftover attributes + + return totalChanges > 0; +} + +/* + * All records with contactId = sourceContactId get updated, which are not assigned to the same "group" as the targetContactId. + * This is because otherwise there would now be in total two "participants" in the same "group" as opposed to one before. + * Also if they already are in the same "group" those records shouldn't be updated because it would lead to the same outcome. + * + * @returns {Boolean} If records have been updated + */ +DuplicateMergeUtils._migrateParticipantsToNewContact = function (pTableName, pContactIdColumn, pAssignableIdColumn, pSourceContactId, pTargetContactId) +{ + var excludedIds = newSelect(pAssignableIdColumn) + .from(pTableName) + .where([pTableName, pContactIdColumn], pTargetContactId) + .arrayColumn(); + + var updateCount = newWhereIfSet([pTableName, pAssignableIdColumn], excludedIds, SqlBuilder.NOT_IN()) + .and([pTableName, pContactIdColumn], pSourceContactId) + .updateFields(new Map().set(pContactIdColumn, pTargetContactId), pTableName); + + var deleteCount = newWhere([pTableName, pContactIdColumn], pSourceContactId) + .tableName(pTableName) + .deleteData(); + + return updateCount > 0 || deleteCount > 0; +} + +/* + * Update other contacts from the source + * + * @returns {Boolean} If records have been updated + */ +DuplicateMergeUtils._updateOtherContacts = function (pSourceContactId, sourcePersonId, targetPersonId) +{ + var otherContacts = newSelect("PERSON.PERSONID") + .from("PERSON") + .join("CONTACT", "CONTACT.PERSON_ID = PERSON.PERSONID") + .where("PERSON.PERSONID", sourcePersonId) + .and("CONTACT.CONTACTID", pSourceContactId, SqlBuilder.NOT_EQUAL()) + .table(); + var updateCount = 0; + + otherContacts.forEach(function(person){ + updateCount += newWhere("CONTACT.PERSON_ID", person) + .updateFields({"PERSON_ID" : targetPersonId}, "CONTACT"); + }); + + return updateCount > 0; +} + +DuplicateMergeUtils._buildDeleteCachedUnrelatedDuplicateQuery = function(pSourceContactId) +{ + return [ + newWhere("UNRELATEDDUPLICATES.SOURCEDUPLICATEID", pSourceContactId).buildDeleteStatement(), + newWhere("UNRELATEDDUPLICATES.UNRELATEDDUPLICATEID", pSourceContactId).buildDeleteStatement() + ]; +} + +DuplicateMergeUtils._buildDeleteOrganisationAndContactQuery = function(pSourceOrganisationId, pSourceContactId) +{ + return [ + newWhere("ORGANISATION.ORGANISATIONID", pSourceOrganisationId).buildDeleteStatement(), + newWhere("CONTACT.CONTACTID", pSourceContactId).buildDeleteStatement() + ]; +} + +/* + * Contains all Tables and their fields which may contain the contact id to be replaced for the data alias + * + * @returns {String[[]]} Array in the format [TableName, ContactIdColumnName, AdditionalCondition, alias] + */ +DuplicateMergeUtils._getLinkedTableInfos = function(pTargetContactId) +{ + //don't use communications that the target already has + var targetComms = newSelect("COMMUNICATION.ADDR") + .from("COMMUNICATION") + .where("COMMUNICATION.CONTACT_ID", pTargetContactId) + .arrayColumn(); + + var communicationDedupCondition = targetComms.length > 0 + ? newWhere("COMMUNICATION.ADDR", targetComms, SqlBuilder.NOT_IN()) + : ""; + + return[ + ["AB_APPOINTMENTLINK", "OBJECT_ROWID"], + ["AB_CTILOG", "CONTACT_ID"], + ["AB_OBJECTRELATION", "AB_OBJECTRELATIONID"], + ["AB_OBJECTRELATION", "OBJECT1_ROWID"], + ["AB_OBJECTRELATION", "OBJECT2_ROWID"], + ["AB_LOGHISTORY", "TABLENAMEID"], + ["ADDRESS", "CONTACT_ID"], + ["BULKMAILRECIPIENT", "CONTACT_ID"], + ["BULKMAIL", "TESTING_CONTACT_ID"], + ["CAMPAIGN", "EMPLOYEE_CONTACT_ID"], + ["CAMPAIGNSTEP", "EMPLOYEE_CONTACT_ID"], + ["COMMRESTRICTION", "CONTACT_ID"], + ["COMMRESTRICTION", "EMPLOYEE_INVOLVED"], + ["COMMUNICATION", "CONTACT_ID", communicationDedupCondition], + ["COMPETITION", "CONTACT_ID"], + ["CONTRACT", "CONTACT_ID"], + ["LETTERRECIPIENT", "CONTACT_ID"], + ["OBJECTMEMBER", "CONTACT_ID"], + ["OFFER", "CONTACT_ID"], + ["PRODUCT", "CONTACT_ID"], + ["PRODUCTPRICE", "CONTACT_ID"], + ["SALESORDER", "CONTACT_ID"], + ["SALESPROJECT", "CONTACT_ID"], + ["TASK", "REQUESTOR_CONTACT_ID"], + ["TASK", "EDITOR_CONTACT_ID"], + ["TASKLINK", "OBJECT_ROWID"], + ["ACTIVITY", "RESPONSIBLE"], + ["DSGVO", "CONTACT_ID"], + ["DSGVOINFO", "CONTACT_ID"], + ["TIMETRACKING", "CONTACT_ID"], + ["ACTIVITYLINK", "OBJECT_ROWID"], + ["AB_ATTRIBUTERELATION", "OBJECT_ROWID"], + + ["ASYS_CALENDARLINK", "DBID", "", SqlUtils.getSystemAlias()] + ]; +} diff --git a/process/DuplicateScanner_lib/DuplicateScanner_lib.aod b/process/DuplicateScanner_lib/DuplicateScanner_lib.aod index 6b45659f204354af0a6d1a39a810a6f008eda16c..bf45bdb540e198dcf9464c358b2a43245ab27921 100644 --- a/process/DuplicateScanner_lib/DuplicateScanner_lib.aod +++ b/process/DuplicateScanner_lib/DuplicateScanner_lib.aod @@ -2,6 +2,7 @@ <process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> <name>DuplicateScanner_lib</name> <majorModelMode>DISTRIBUTED</majorModelMode> + <documentation>%aditoprj%/process/DuplicateScanner_lib/documentation.adoc</documentation> <process>%aditoprj%/process/DuplicateScanner_lib/process.js</process> <alias>Data_alias</alias> <variants> diff --git a/process/DuplicateScanner_lib/documentation.adoc b/process/DuplicateScanner_lib/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..d824334d2f7be4a57046b2f8efb7730bbb17115e --- /dev/null +++ b/process/DuplicateScanner_lib/documentation.adoc @@ -0,0 +1,15 @@ += DuplicateScanner_lib + +Provides a utility function for reading scan patterns (getScannerByEntity). + +Provides functions to create duplicate filterExtensions (getDuplicateConditionalListSql). + +Provides functions to manage ignored duplicates (filterIgnored, updateIgnored). + +Provides functions to search for ignored duplicates. +The base function is DuplicateScannerUtils.getDuplicateIds. The other helper functions are + DuplicateScannerUtils.getDuplicateIdsByEntityScanner and DuplicateScannerUtils.getDuplicateIdsByEntityObj. + both call the base function but simplify the call for the 2 usecases: + +* get all duplicateids of a dataset by entity and uid: getDuplicateIdsByEntityScanner +* get all duplicateids of a dataset based on the entity and the variable (if the dataset has not been saved yet). diff --git a/process/DuplicateScanner_lib/process.js b/process/DuplicateScanner_lib/process.js index e26053edc6cb753291a842212cbfcef324124799..be805bc2aecc3323fb0e536f545da25e8d2b5762 100644 --- a/process/DuplicateScanner_lib/process.js +++ b/process/DuplicateScanner_lib/process.js @@ -1,20 +1,12 @@ import("system.project"); -import("ActivityTask_lib"); -import("KeywordRegistry_basic"); -import("system.translate"); -import("system.datetime"); -import("JditoFilter_lib"); -import("system.process"); import("system.util"); import("system.vars"); -import("system.net"); -import("system.logging"); import("system.db"); import("system.entities"); import("Sql_lib"); import("system.indexsearch"); -import("Communication_lib"); -import("Attribute_lib"); +import("IndexSearch_lib"); +import("system.process"); /** * Methods for duplicate scanning. @@ -24,1356 +16,250 @@ import("Attribute_lib"); */ function DuplicateScannerUtils() {} -/* - * Loads all prefilters for a scanner in the form of arrays in an array. - * Single filter record: [FILTER_CONDITION, COUNT_CHARACTERS_TO_USE, MAX_RESULTS_THRESHOLD] - * - * @param {String} pFilterName Name of the filter - * @param {String} pTargetEntity Entity which has been configured - * @returns {String[[]]} Array of arrays containing the configured values - */ -DuplicateScannerUtils.loadFilters = function(pFilterName, pTargetEntity) -{ - let query = newSelect("FILTER_CONDITION, COUNT_CHARACTERS_TO_USE, MAX_RESULTS_THRESHOLD") - .from("DUPLICATESCANNERPREFILTERCONFIG") - .join("DUPLICATESCANNER", "DUPLICATESCANNER.ID = DUPLICATESCANNERPREFILTERCONFIG.DUPLICATESCANNER_ID") - .where("DUPLICATESCANNER.FILTER_NAME", pFilterName) - .and("DUPLICATESCANNER.ENTITY_TO_SCAN_NAME", pTargetEntity); - - return query.table(); -} - -/* - * Deletes the cached duplicate for the given id. - * If there would only remain one item in the cluster after deletion, the whole cluster including the duplicate gets deleted. - * In this case, all records marked as unrelated duplicate will be deleted aswell. - * - * @param {String} pDuplicateId Id of the duplicate to delete - */ -DuplicateScannerUtils.deleteCachedDuplicate = function(pDuplicateId) -{ - var [countDuplicatesInClusterWithoutParameterId, clusterId] = newSelect("count(ID), CLUSTERID") - .from("DUPLICATECLUSTERS") - .where("DUPLICATECLUSTERS.CLUSTERID", newSelect("CLUSTERID") - .from("DUPLICATECLUSTERS") - .where("DUPLICATECLUSTERS.DUPLICATEID", pDuplicateId).build(), - SqlBuilder.IN()) - .and("DUPLICATECLUSTERS.DUPLICATEID", pDuplicateId, SqlBuilder.NOT_EQUAL()) - .groupBy("CLUSTERID") - .arrayRow(); - - //If only one duplicate would be remaining, - //the whole cluster has to be deleted because there are no more duplicates. - //Otherwise delete just the single duplicate. The parameterized duplicate has been excluded via sql - //therefore check for smaller/equals 1 - if(countDuplicatesInClusterWithoutParameterId <= 1) - { - newWhere("DUPLICATECLUSTERS.CLUSTERID", clusterId).deleteData(); - newWhere("UNRELATEDDUPLICATES.CLUSTERID", clusterId).deleteData(); - } - else - { - newWhereIfSet("DUPLICATECLUSTERS.DUPLICATEID", pDuplicateId).deleteData(); - - //Delete all records where this duplicateId is mentioned - DuplicateScannerUtils.deleteAllUnrelatedDuplicateRelations(pDuplicateId); - } -} - -/* - * Deletes all Clusters for the given target Entity. - * No records markes as unrelated duplicate are being deleted. - * - * @param {String} pTargetEntity Entity which has been configured - * @return Count of deleted rows - */ -DuplicateScannerUtils.deleteClustersByTargetEntity = function(pTargetEntity) -{ - return newWhereIfSet("DUPLICATECLUSTERS.TARGET_ENTITY", pTargetEntity).deleteData(); -} - -/* - * Updates the duplicate relations markes as unrelated for the given target entity. - * All ClusterIds get updated with the new values if the same combination of duplicateIds - * still exists in the DUPLICATECLUSTERS table. - * - * Afterwards, all records which contain a nonexistend clusterId are being deleted - * - * @param {String} pTargetEntity Name of Entity whose duplicates should be updated +/** + * Returns an sql condition which returns a list of duplicate ids. + * The count is checked using pCount and pOperator. + * This function can be used for FilterExtensions + * + * @param {string[]} pEntities target entities + * @param {number} pCount value of count (will be applied to the operator) + * @param {string} pOperator the operator in sql notation e.g.: # = ? + * @param {boolean} pSubtractIgnored if set the ignored duplicates will be subtracted + * + * @returns {SqlBuilder} subselect selecting the duplicate ids */ -DuplicateScannerUtils.refreshUnrelatedDuplicateRelations = function(pTargetEntity) +DuplicateScannerUtils.getDuplicateConditionalListSql = function(pEntities, pCount, pOperator, pSubtractIgnored) { - /* - * Update all records with the current valid clusterId where the same duplicateId combination exists - */ - let clusterIdChanges = newSelect("dc1.CLUSTERID, ud.CLUSTERID") - .from("UNRELATEDDUPLICATES", "ud") - .join("DUPLICATECLUSTERS", "dc1.DUPLICATEID = ud.SOURCEDUPLICATEID", "dc1") - .join("DUPLICATECLUSTERS", "dc2.DUPLICATEID = ud.UNRELATEDDUPLICATEID", "dc2") - .where(["DUPLICATECLUSTERS", "TARGET_ENTITY", "dc1"], pTargetEntity) - .table(); - - let updateStatements = clusterIdChanges.map(function ([newClusterId, oldClusterId]) - { - return newWhere("UNRELATEDDUPLICATES.CLUSTERID", oldClusterId).buildUpdateStatement({ - "CLUSTERID": newClusterId - }, "UNRELATEDDUPLICATES"); - }); + var subselect = newSelect("count(*)").from("UNRELATEDDUPLICATES") + .where("UNRELATEDDUPLICATES.DUPLICATETYPE = HASDUPLICATE.OBJECT_TYPE") + .and("UNRELATEDDUPLICATES.SOURCEDUPLICATEID = HASDUPLICATE.OBJECT_ROWID"); - db.updates(updateStatements); - - /* - * All unrelated duplicate ids that still exist in a cluster, have been updated with the new cluster id. - * All records with a nonexistend clusterid can now be deleted because they haven't been detected as a duplicate any more. - */ - newWhere("UNRELATEDDUPLICATES.CLUSTERID", newSelect("dc1.CLUSTERID").from("DUPLICATECLUSTERS", "dc1"), SqlBuilder.NOT_IN()) - .deleteData(); -} - -/* - * Creates a relation between two duplicates which means they are unrelated. - * They will not appear in each others duplicate tab any more. - * To remove this relation use DuplicateScannerUtils.deleteUnrelatedDuplicateRelation - * - * @param {String} pSourceContactId Id of first duplicate - * @param {String} pUnrelatedContactId Id of second duplicate - * @param {String} pClusterId Id of the cluster in which the duplicates are aggregated - * @returns {String} Number of Records inserted - */ -DuplicateScannerUtils.createUnrelatedDuplicateRelation = function(pSourceContactId, pUnrelatedContactId, pClusterId) -{ - return new SqlBuilder().insertFields({ - "UNRELATEDDUPLICATEID": pUnrelatedContactId, - "SOURCEDUPLICATEID": pSourceContactId, - "CLUSTERID": pClusterId - }, "UNRELATEDDUPLICATES", "ID"); -} - -/* - * Gets the cluster id in which the given duplicate id exists - * - * @param {String} pDuplicateId whose cluster id should be searched - * @returns {String} Cluster id - */ -DuplicateScannerUtils.getClusterId = function(pDuplicateId) -{ - return newSelect("CLUSTERID") - .from("DUPLICATECLUSTERS") - .where("DUPLICATECLUSTERS.DUPLICATEID", pDuplicateId) - .cell(); -} - -/* - * Deletes the "unrelated" relation between two duplicates - * - * @param {String} pSourceDuplicateId Id of the source duplicate - * @param {String} pUnrelatedDuplicateId Id of the source duplicate - * @returns {String} Number of records deleted - */ -DuplicateScannerUtils.deleteUnrelatedDuplicateRelation = function(pSourceDuplicateId, pUnrelatedDuplicateId) -{ - return newWhere("UNRELATEDDUPLICATES.SOURCEDUPLICATEID", pSourceDuplicateId) - .and("UNRELATEDDUPLICATES.UNRELATEDDUPLICATEID", pUnrelatedDuplicateId) - .deleteData(); -} - -/* - * Deletes all relations to a duplicate id wether the id is the source or the unrelated duplicate in the relation - * - * @param {String} pDuplicateId Duplicate id whose "unrelated" relations are to delete - * @returns {String} Number of records deleted - */ -DuplicateScannerUtils.deleteAllUnrelatedDuplicateRelations = function(pDuplicateId) -{ - DuplicateScannerUtils.deleteUnrelatedDuplicateRelation(pDuplicateId, pDuplicateId); + var countSql = pSubtractIgnored ? "(HASDUPLICATE.DUPLICATECOUNT - (" + subselect.toString() + "))" : "(HASDUPLICATE.DUPLICATECOUNT)"; + return newSelect("HASDUPLICATE.OBJECT_ROWID").from("HASDUPLICATE") + .where("HASDUPLICATE.OBJECT_TYPE", pEntities, SqlBuilder.IN()) + .and(pOperator.replace("#", countSql).replace("?", pCount)); } -/* - * Loads all other duplicates from the cluster in which the parameterized duplicate is located - * - * @param {String} pDuplicateId - * @returns {String[]} Array of duplicate ids - */ -DuplicateScannerUtils.getCachedDuplicatesForDuplicateId = function(pDuplicateId) -{ - return newSelect("DUPLICATEID") - .from("DUPLICATECLUSTERS") - .where("DUPLICATECLUSTERS.CLUSTERID", newSelect("CLUSTERID") - .from("DUPLICATECLUSTERS") - .where("DUPLICATECLUSTERS.DUPLICATEID", pDuplicateId), - SqlBuilder.IN()) - .and("DUPLICATECLUSTERS.DUPLICATEID", pDuplicateId, SqlBuilder.NOT_EQUAL()) - .and("DUPLICATECLUSTERS.DUPLICATEID", newSelect("UNRELATEDDUPLICATEID") - .from("UNRELATEDDUPLICATES") - .where("UNRELATEDDUPLICATES.SOURCEDUPLICATEID", pDuplicateId), - SqlBuilder.NOT_IN()) - .and("DUPLICATECLUSTERS.DUPLICATEID", newSelect("SOURCEDUPLICATEID") - .from("UNRELATEDDUPLICATES") - .where("UNRELATEDDUPLICATES.UNRELATEDDUPLICATEID", pDuplicateId), - SqlBuilder.NOT_IN()) - .arrayColumn(); -} - -/* - * Returns all duplicate ids which haven't been marked as unrelated for the given cluster id. - * - * @param {String} pClusterId The clusters id - * @return {String[]} Array of duplicate ids excluding those marked as unrelated - */ -DuplicateScannerUtils.getCachedDuplicatesForClusterId = function(pClusterId) -{ - return newSelect("DUPLICATEID") - .from("DUPLICATECLUSTERS") - .where("DUPLICATECLUSTERS.DUPLICATEID", newSelect("UNRELATEDDUPLICATEID").from("UNRELATEDDUPLICATES"), - SqlBuilder.NOT_IN()) - .and("DUPLICATECLUSTERS.CLUSTERID", pClusterId) - .arrayColumn(); -} - -/* - * Recreates the cached duplicate clusters based on the configured pattern. <br /> - * The old clusters have to be deleted manually beforehand or by using "deleteClustersByTargetEntity".<br /> - * If there have already been ignored relations between duplicate records, it's advised to call "refreshUnrelatedDuplicateRelations" after the recreation of the duplicates cache.<br /> - * Please check the documentation of the params on how to get the infos required.<br /> - * <br /> - * If the usage of an external webservice has been activated, the search will be executed beforehand and the results will then be given to the pFormatValuesConsumeWebserviceCallback via parameter.<br /> - * To access the values it is advised to run thru the parameter like an array and access its value by key which is the index field name. The entity<br /> - * field names can be converted using DuplicateScannerUtils.translateEntityToIndexFields. For further infos see the example section below.<br /> - * <br /> - * Attention!<br /> - * If it is configured to use the external webservice callback the values have to be in the same format as they are in the parameter of the callback.<br /> - * <br /> - * @param {String} pFilterName Name of the filter to use - * @param {String} pTargetEntity The target entity which has been assigned to the filters configuration - * @param {String} pRecordsBlockSize The values which are checked get loaded in blocks. - * @param {String} pFormatValuesConsumeWebserviceCallback Null if no external service is used otherwise a function with one parameter. - * @return {Int} Count of duplicate clusters created - * - * @example - * var filterName = "PersonDuplicates"; - * var targetEntity = "Person_entity"; - * var recordBlockSize = DuplicateScannerUtils.getBlockSize(); - * - * let formatToJsonAndCallWsCallback = function(pPossibleDuplicatesRay) - * { - * let indexResultFields = DuplicateScannerUtils.TranslateEntityToIndexFields(targetEntity, resultFields) - * - * //Run thru every duplicate result an read out the resultfields - * for (let i = 0; i < pPossibleDuplicatesRay.length; i++) - * { - * for (let b = 0; b < resultFields.length; b++) - * { - * let entityFieldName = resultFields[b]; - * let indexFieldName = indexResultFields[entityFieldName]; - * //format values - * } - * } - * //call webservice - * //reformat results to same structure as before - * return pPossibleDuplicatesRay; - * }; - * - * DuplicateScannerUtils.DeleteDuplicateClustersByTargetEntity(targetEntity); - * - * DuplicateScannerUtils.rebuildDuplicatesCache(filterName, targetEntity, pRecordsBlockSize, formatToJsonAndCallWsCallback); - * - * DuplicateScannerUtils.RefreshUnrelatedDuplicateRelations(targetEntity); +/** + * Ignores duplicates corrosponding to the type, the source, and the duplicate ids + * + * @param {string} pDuplicateType the duplicate type e.g.: Organisation_entity + * @param {string} pSourceDuplicateId the source duplicate id + * @param {string[]} pUnrelatedDuplicateIds the target duplicate ids + * @param {boolean} pIgnore weather the duplicate should be ignored or unignored */ -DuplicateScannerUtils.rebuildDuplicatesCache = function(pFilterName, pTargetEntity, - pRecordsBlockSize, pFormatValuesConsumeWebserviceCallback) +DuplicateScannerUtils.updateIgnored = function(pDuplicateType, pSourceDuplicateId, pUnrelatedDuplicateIds, pIgnore) { - let useExternalWebservice = _DuplicateScannerUtils._isUseExternalWebservice(pFilterName, pTargetEntity); - let resultFields = DuplicateScannerUtils.getResultFields(filterName, targetEntity); - - let indexPattern = _DuplicateScannerUtils._loadIndexPattern(pFilterName, pTargetEntity); - let entityFieldConfigs = _DuplicateScannerUtils._loadEntityFieldConfigsFromPattern(indexPattern); - let entityIdField = _DuplicateScannerUtils._loadEntityIdField(pFilterName, pTargetEntity); + newWhere("UNRELATEDDUPLICATES.SOURCEDUPLICATEID", pSourceDuplicateId) + .and("UNRELATEDDUPLICATES.UNRELATEDDUPLICATEID", pUnrelatedDuplicateIds, SqlBuilder.IN()) + .deleteData(); - let alreadyIdentifiedIds = []; + var TABLE_NAME = "UNRELATEDDUPLICATES"; + var COLUMN_NAMES = ["ID", "DUPLICATETYPE", "SOURCEDUPLICATEID", "UNRELATEDDUPLICATEID"]; + var COLUMN_TYPES = db.getColumnTypes(TABLE_NAME, COLUMN_NAMES); - let entityFields = _DuplicateScannerUtils._loadEntityFieldsFromFieldConfigs(entityFieldConfigs); - - entityFields.push(entityIdField); - - let targetRecords = DuplicateScannerUtils.getEntityRecords(pTargetEntity, entityFields, 0, pRecordsBlockSize); - - let currentRecordIndex = pRecordsBlockSize; - while(targetRecords.length > 0) + var statements = []; + pUnrelatedDuplicateIds.forEach(function(currId) { - - foundDuplicateIds = DuplicateScannerUtils.scanRecords(pTargetEntity, targetRecords, - entityFieldConfigs, resultFields, useExternalWebservice, - pFormatValuesConsumeWebserviceCallback, alreadyIdentifiedIds, indexPattern, entityIdField); - - if (foundDuplicateIds) - alreadyIdentifiedIds = alreadyIdentifiedIds.concat(foundDuplicateIds); - - if(targetRecords.length < pRecordsBlockSize) - { - break; - } - targetRecords = DuplicateScannerUtils.getEntityRecords(pTargetEntity, entityFields, - currentRecordIndex, pRecordsBlockSize); - - currentRecordIndex += pRecordsBlockSize; - } -} - -DuplicateScannerUtils.scanRecords = function(pTargetEntity, pTargetRecordsData, - pEntityFieldConfigs, pResultFields, pUseExternalWebservice, pFormatValuesConsumeWebserviceCallback, pAlreadyIdentifiedIds, pIndexPattern, pEntityIdField) -{ - let foundDuplicateIds = []; - - //If the contact id loading query has no results, stop. - //No ids should be deleted if an error has been made in this query. - if(pTargetRecordsData.length <= 0) - return foundDuplicateIds; - - //First it gets checked if the current id has already been identified. If that's the case it'll continue with the next. - //Otherwise an object gets build in the form of ["FilterFieldName" = "FilterFieldValueFromQuery"] with which a scan for possible duplicates get's started - var duplicatesToInsertQueries = []; - for (let b = 0; b < pTargetRecordsData.length; b++) + var columnValues = [util.getNewUUID(), pDuplicateType, pSourceDuplicateId, currId]; + statements.push([TABLE_NAME, COLUMN_NAMES, COLUMN_TYPES, columnValues]); + }); + if(pIgnore) { - let entityFieldValuesRay = DuplicateScannerUtils.buildEntityFieldConfigs(pEntityFieldConfigs, pTargetRecordsData[b]); - - //The first field in this Array must always be the configured id field. This is ensured using onValidation-logic - let idValue = pTargetRecordsData[b][pEntityIdField]; - - //If the current Id has already been identified, continue - if(pAlreadyIdentifiedIds.indexOf(pTargetRecordsData[b][pEntityIdField]) > -1) - { - continue; - } - - let foundDuplicates = _DuplicateScannerUtils._scanForDuplicates(pTargetEntity, - entityFieldValuesRay, pResultFields, idValue, pFormatValuesConsumeWebserviceCallback, pUseExternalWebservice, pIndexPattern) - - if(foundDuplicates == null || foundDuplicates.length == 0) - { - continue; - } - //Insert all found duplicate ids into an cache array because those ids don't have to be checked again lateron. - for (let i = 0; i < foundDuplicates.length; i++) - { - let localId = foundDuplicates[i][indexsearch.FIELD_ID]; - foundDuplicateIds.push(localId); - } - - pAlreadyIdentifiedIds = pAlreadyIdentifiedIds.concat(foundDuplicateIds); - - //The duplicates list contains only the found duplicates to the original id, therefore it get's added manually - foundDuplicateIds.push(pTargetRecordsData[b][pEntityIdField]); - - let insertQueriesRay = _DuplicateScannerUtils._createInsertDuplicatesClusterQuery(foundDuplicateIds, pTargetEntity) - duplicatesToInsertQueries = duplicatesToInsertQueries.concat(insertQueriesRay); - foundDuplicateIds = []; + db.inserts(statements); } - db.inserts(duplicatesToInsertQueries, db.getCurrentAlias(), 10 * datetime.ONE_MINUTE); - return foundDuplicateIds; } -/* - * Searches for a cluster which contains the duplicates specified by the parameterized array. <br /> - * The contents of the cluster have to be identical, if no fitting cluster could be found an empty string is returned. +/** + * Removes ignored duplicates from an array of duplicate ids * - * @param {String} pNewRecordId The id of the record which was used to scan for duplicates - * @param {String[]} pDuplicateIds Duplicate ids used to search for a cluster containing them - * @param {String} pTargetEntity Entity which has been configured - * @returns {String} A clusterid if a matching cluster has been found, otherwise "" - */ -DuplicateScannerUtils.cacheNewScanResults = function(pNewRecordId, pDuplicateIds, pTargetEntity) -{ - let duplicateIds = []; - //Run thru every duplicate result and read out the id. - //Do it now to have a simple array on all usages lateron. - for (let i = 0; i < pDuplicateIds.length; i++) - { - let duplicateContactId = pDuplicateIds[i][indexsearch.FIELD_ID]; - duplicateIds.push(duplicateContactId); - } - - let clusterId = DuplicateScannerUtils.getClusterWithIdenticalDuplicates(duplicateIds); - - //If no cluster has beend found, create a new one with all found duplicateIds, - //otherwise add the id to the existing cluster - let idRayToInsert = []; - if(clusterId == undefined || clusterId == null || clusterId == "") - { - idRayToInsert = duplicateIds; - idRayToInsert.push(pNewRecordId); - } - else - idRayToInsert.push(pNewRecordId); - - insertQueriesRay = _DuplicateScannerUtils._createInsertDuplicatesClusterQuery(idRayToInsert, pTargetEntity, clusterId) - - return db.inserts(insertQueriesRay); -} - -/* - * Searches for a cluster which contains the duplicates specified by the parameterized array. <br /> - * The contents of the cluster have to be identical, if no fitting cluster could be found an empty string is returned. + * @param {string} pTargetEntity the target entity e.g.: Organisation_entity + * @param {string} pTargetUid the source duplicate id + * @param {string} pIdArray the array of duplicate ids * - * @param {String[]} pDuplicateIds Duplicate ids which should be in the same cluster - * @returns {String} Id of the cluster which contains all given duplicate ids or "" + * @returns {string[]} the filtered duplicate ids */ -DuplicateScannerUtils.getClusterWithIdenticalDuplicates = function(pDuplicateIds) +DuplicateScannerUtils.filterIgnored = function(pTargetEntity, pTargetUid, pIdArray) { - let RESULT_NO_CLUSTER_FOUND = ""; - - if(pDuplicateIds.length < 1) - return RESULT_NO_CLUSTER_FOUND; - - let clusterIdSelect = newSelect("distinct CLUSTERID") - .from("DUPLICATECLUSTERS") - .where(); - - for (let i = 0; i < pDuplicateIds.length; i++) + if(pIdArray.length == 0) { - clusterIdSelect.and("DUPLICATECLUSTERS.CLUSTERID", newSelect("CLUSTERID").from("DUPLICATECLUSTERS").where("DUPLICATECLUSTERS.DUPLICATEID", pDuplicateIds[i]), - SqlBuilder.IN()); + return pIdArray; } - - let foundClusterId = clusterIdSelect.cell(); - - if(foundClusterId == null || foundClusterId == "") - return RESULT_NO_CLUSTER_FOUND; - - let duplicatesInCluster = newSelect("DUPLICATEID") - .from("DUPLICATECLUSTERS") - .where("DUPLICATECLUSTERS.CLUSTERID", foundClusterId) - .arrayColumn(); - - /* - * A cluster has been searched which contains all duplicate ids as specified via parameter. - * There's the possibility that this cluster contains even more duplicates than specified via the parameter. - * In this case, the cluster and the parameterized duplicateids are not identical - * which means a new cluster has to be created. - */ - if(pDuplicateIds.length != duplicatesInCluster.length) - return RESULT_NO_CLUSTER_FOUND; - else - return foundClusterId; + var ignoreTable = newSelect(["UNRELATEDDUPLICATES.UNRELATEDDUPLICATEID"]) + .from("UNRELATEDDUPLICATES") + .where("UNRELATEDDUPLICATES.DUPLICATETYPE", pTargetEntity) + .and("UNRELATEDDUPLICATES.SOURCEDUPLICATEID", pTargetUid) + .and("UNRELATEDDUPLICATES.UNRELATEDDUPLICATEID", pIdArray, SqlBuilder.IN()) + .arrayColumn(); + return pIdArray.filter(function(curr) { + return !ignoreTable.includes(curr); + }); } -DuplicateScannerUtils.getEntityRecords = function(pTargetEntity, pEntityFields, pStartRow, pCountRecordsToLoad) -{ - let getRowsConfig = entities.createConfigForLoadingRows() - .entity(pTargetEntity) - .fields(pEntityFields) - .count(pCountRecordsToLoad) - .startrow(pStartRow); - return entities.getRows(getRowsConfig); -} -/* - * Loads the configured resultfields as array - * - * @param {String} pFilterName Name of the filter - * @param {String} pTargetEntity Entity which has been configured - * @returns {String[]} Resultfields as array +/** + * Deletes duplicates corrosponding to the given type and ids + * + * @param {string} pObjectType the duplicate type e.g.: Organisation_entity + * @param {string[]} pObjectRowIds the duplicate ids e.g. some organisation ids */ -DuplicateScannerUtils.getResultFields = function(pFilterName, pTargetEntity) +DuplicateScannerUtils.deleteHasDuplicateEntries = function(pObjectType, pObjectRowIds) { - return newSelect("dsrfc.ENTITY_FIELD_NAME") - .from("DUPLICATESCANNERRESULTFIELDCONFIG dsrfc") - .join("DUPLICATESCANNER", "DUPLICATESCANNER.ID = dsrfc.DUPLICATESCANNER_ID") - .where("DUPLICATESCANNER.FILTER_NAME", pFilterName) - .and("DUPLICATESCANNER.ENTITY_TO_SCAN_NAME", pTargetEntity) - .arrayColumn(); + newWhere("HASDUPLICATE.OBJECT_TYPE", pObjectType) + .and("HASDUPLICATE.OBJECT_ROWID", pObjectRowIds, SqlBuilder.IN()) + .deleteData(); } -/* - * Scans for duplicates based on the configured pattern and the selected id field<br /> - * All values to the used placeholders have to be present in "pValuesToCheck"<br /> - * First all placeholders in the pattern will be replaced with their respective values. - * Then, the pattern is extended wo exclude the record on which the search is based on. - *<br /> - * If the usage of an external webservice has been activated, the result will then be given to the pFormatValuesConsumeWebserviceCallback via parameter.<br /> - * To access the values it is advised to run thru the parameter like an array and access its value by key which is the index field name. The entity - * field names can be converted using DuplicateScannerUtils.translateEntityToIndexFields - * <br /> - * <br /> - * Attention!<br /> - * If it's a single scanForDuplicates call it doesn't matter what the callback returns because after the callback, no more modifications follow before - * returning the data.<br /> - * If it's inside the RebuildCache the values have to be in the same format as the parameter - * - * @param {String} pFilterName Name of the filter - * @param {String} pTargetEntity Respective target entity - * @param {{"key", "value"}} pValuesToCheck An object with key value pairs which hold the name of the entity field as key and it's value as value. See the example "valuesToCheck" - * @param {function} pFormatValuesConsumeWebserviceCallback Null if no external service is used otherwise a function with one parameter. - * If the function is called is based on the configuration of the current scanner - * @returns {[["key", "value"]]} Array of Key-Value-Pairs based on the configured resultfields, if an external webservices was used - * the structure is defined by the parameterized function "pFormatValuesConsumeWebserviceCallback" - * - * @example - * var filterName = "PersonDuplicates"; - * let targetEntity = "Person_entity"; - * let valuesToCheck = {}; - * var entityModel = project.getEntityStructure(targetEntity); +/** + * Manually inserts a duplicate entry by the given type, id and count * - * //Read the values of all available entity fields and write the fieldname/value combination - * //as key/value pairs into an object. This is used to trigger the scan for duplicates - * let fieldValue = ""; - * let entityFields = []; - * for (fieldname in entityModel.fields) - * { - * field = entityModel.fields[fieldname]; - * if(field.fieldType == project.ENTITYFIELDTYPE_FIELD) - * { - * fieldValue = vars.get("$field." + field.name); - * - * if(fieldValue != null && fieldValue != "") - * { - * valuesToCheck[field.name] = fieldValue; - * } - * } - * } - * - * let formatToJsonAndCallWsCallback = function(pPossibleDuplicatesRay) - * { - * let indexResultFields = DuplicateScannerUtils.TranslateEntityToIndexFields(targetEntity, resultFields) - * - * //Run thru every duplicate result an read out the resultfields - * for (let i = 0; i < pPossibleDuplicatesRay.length; i++) - * { - * for (let b = 0; b < resultFields.length; b++) - * { - * let entityFieldName = resultFields[b]; - * let indexFieldName = indexResultFields[entityFieldName]; - * //format values - * } - * } - * //call webservice - * //reformat results to same structure as before - * return pPossibleDuplicatesRay; - * }; - * - * //The result values can be accessed as seen above in "formatToJsonAndCallWsCallback" - * DuplicateScannerUtils.ScanForDuplicates(filterName, targetEntity, valuesToCheck, - * formatToJsonAndCallWsCallback); + * @param {string} pObjectType the type e.g.: Organisation_entity + * @param {string} pObjectRowId the id e.g. a organisation id + * @param {number} pCount the count / how many duplicates are there */ -DuplicateScannerUtils.scanForDuplicates = function(pFilterName, pTargetEntity, pValuesToCheck, pFormatValuesConsumeWebserviceCallback) +DuplicateScannerUtils.insertHasDuplicateEntry = function(pObjectType, pObjectRowId, pCount) { - let useExternalWebservice = _DuplicateScannerUtils._isUseExternalWebservice(pFilterName, pTargetEntity); - let resultFields = DuplicateScannerUtils.getResultFields(pFilterName, pTargetEntity); - - let indexPattern = _DuplicateScannerUtils._loadIndexPattern(pFilterName, pTargetEntity); - let entityFieldConfigs = _DuplicateScannerUtils._loadEntityFieldConfigsFromPattern(indexPattern); - let entityIdField = _DuplicateScannerUtils._loadEntityIdField(pFilterName, pTargetEntity); - - let entityFieldConfigValuesRay = DuplicateScannerUtils.buildEntityFieldConfigs(entityFieldConfigs, pValuesToCheck); - - //The first field in this Array must always be the configured id field. - let idValue = pValuesToCheck[entityIdField]; - - return _DuplicateScannerUtils._scanForDuplicates(pTargetEntity, - entityFieldConfigValuesRay, resultFields, idValue, - pFormatValuesConsumeWebserviceCallback, useExternalWebservice, indexPattern) + var COLUMNS = [ + "HASDUPLICATEID", + "OBJECT_TYPE", "OBJECT_ROWID", + "DUPLICATECOUNT" + ]; + var COLUMN_TYPES = db.getColumnTypes("HASDUPLICATE", COLUMNS); + var values = [ + util.getNewUUID(), + pObjectType, pObjectRowId, + pCount.toFixed(0) + ]; + db.insertData("HASDUPLICATE", COLUMNS, COLUMN_TYPES, values); } -/* - * Executes a indexsearch.lookupIndexField for eacht entity field in the parameterized array - * and returns it as Map. - * - * @param {String} pEntityName ...Name of the entity - * @param {String[]} pEntityFields Array of the entities Fields to translate to index fields - * @returns Map-like object where (key = entity field) and (value = index field) - * - * @example - * let entityResultFields = ["LASTNAME"]; - * let entityIndexFields = DuplicateScannerUtils.translateEntityToIndexFields("Person_entity", entityResultFields); - * +/** + * Updates HasDuplicate by entity (used in onInser and onUpdate) + * + * @param {string} pTargetEntity the target entity e.g.: Organisation_entity */ -DuplicateScannerUtils.translateEntityToIndexFields = function(pEntityName, pEntityFields) +DuplicateScannerUtils.updateHasDuplicateEntry = function(pTargetEntity) { - let entityIndexFields = {}; - for (let i = 0; i < pEntityFields.length; i++) - { - let entityFieldName = pEntityFields[i]; + var scanner = DuplicateScannerUtils.getScannerByEntity(pTargetEntity); + var indexsearchFilter = IndexsearchFilterUtils.fromFilter(scanner.filter); - //todo remove if api has been fixed - if(entityFieldName.startsWith(pEntityName)) - entityFieldName = entityFieldName.replace(pEntityName + ".", ""); - - let indexField = indexsearch.lookupIndexField(pEntityName, entityFieldName); - entityIndexFields[pEntityFields[i]] = indexField; - } - return entityIndexFields; -} + var fields = indexsearchFilter.getFields(); + fields.add(scanner.idField); + fields = Array.from(fields); -/* - * - * Merges the source person into the target person. - * This - * - replaces the source's with the target's contactid in a predefined set of tables. - * - resets the standard communications of the source contact and keeps the ones of the target. - * - updates participants of campaigns and removes obsolet ones(which would be duplicates) - * - deletes the source person and contact - * - deletes the duplicate record, if one exists - * - deletes all unrelated-duplicate-relations containing the source contact id - * - * @param {String} pSourceContactId The contact to be integrated into another - * @param {String} pTargetContactId The contact in which the source gets integrated - * @returns {Boolean} if the merge was sucessful - */ -DuplicateScannerUtils.mergePerson = function(pSourceContactId, pTargetContactId) -{ - var sourcePersonId = newSelect("PERSON_ID") - .from("CONTACT") - .where("CONTACT.CONTACTID", pSourceContactId) - .cell(); - var targetPersonId = newSelect("PERSON_ID") - .from("CONTACT") - .where("CONTACT.CONTACTID", pTargetContactId) - .cell(); - - _DuplicateScannerUtils._deleteUniqueAttributes(pSourceContactId, pTargetContactId); - var isLinkedDataUpdated = _DuplicateScannerUtils._migrateLinkedContactData(pSourceContactId, pTargetContactId); - var isParticipantsUpdated = _DuplicateScannerUtils._migrateParticipantsToNewContact("CAMPAIGNPARTICIPANT", "CONTACT_ID", "CAMPAIGN_ID", - pSourceContactId, pTargetContactId); - _DuplicateScannerUtils._updateOtherContacts(pSourceContactId, sourcePersonId, targetPersonId); - - var deleteStatements = []; - if (sourcePersonId != targetPersonId) - deleteStatements.push(newWhere("PERSON.PERSONID", sourcePersonId).buildDeleteStatement()); - - deleteStatements.push(newWhere("CONTACT.CONTACTID", pSourceContactId).buildDeleteStatement()); - deleteStatements = deleteStatements.concat(_DuplicateScannerUtils._buildDeleteCachedUnrelatedDuplicateQuery(pSourceContactId)); - - //update binary - var metaData = db.getBinaryMetadata("CONTACT", "DOCUMENT", pSourceContactId, true, SqlUtils.getBinariesAlias()); - metaData.forEach(function (binaryMetaData) + var entityObj = {}; + fields.forEach(function(field) { - db.updateBinaryAssignment(binaryMetaData.id, "CONTACT", "DOCUMENT", pTargetContactId, SqlUtils.getBinariesAlias()); + entityObj[field] = vars.get("$field." + field); }); - var deletedRows = db.deletes(deleteStatements) - - DuplicateScannerUtils.deleteCachedDuplicate(pSourceContactId); - - return isLinkedDataUpdated || isParticipantsUpdated || deletedRows > 0; -} - -DuplicateScannerUtils.createMergeSuccessActivity = function(pSourceContactId, pTargetContactId, pCurrentContactId, pContext) -{ - var activityDataForInsert = { - subject: translate.withArguments("A %0 record has been merged", [pContext]), - content: translate.withArguments("%0 with ID \"%1\" has been integrated into the %0 with the ID \"%2\"", [pContext, pSourceContactId, pTargetContactId]), - //categoryKeywordId: $KeywordRegistry.ac - directionKeywordId: $KeywordRegistry.activityDirection$internal(), - responsibleContactId: pCurrentContactId - }; - var activityLinks = [[pContext, pTargetContactId]]; - - return ActivityUtils.insertNewActivity(activityDataForInsert, activityLinks, null, db.getCurrentAlias()); -} - -DuplicateScannerUtils.mergeOrganisation = function(pSourceContactId, pTargetContactId) -{ - var sourceOrganisationId = newSelect("ORGANISATION_ID") - .from("CONTACT") - .where("CONTACT.CONTACTID", pSourceContactId) - .cell(); - - var targetOrganisationId = newSelect("ORGANISATION_ID") - .from("CONTACT") - .where("CONTACT.CONTACTID", pTargetContactId) - .cell(); + var selfId = entityObj[scanner.idField]; - _DuplicateScannerUtils._deleteUniqueAttributes(pSourceContactId, pTargetContactId); - _DuplicateScannerUtils._migrateLinkedContactData(pSourceContactId, pTargetContactId); - _DuplicateScannerUtils._migrateParticipantsToNewContact("CAMPAIGNPARTICIPANT", "CONTACT_ID", "CAMPAIGN_ID", - pSourceContactId, pTargetContactId); - _DuplicateScannerUtils._migratePersonsToNewOrganisation(sourceOrganisationId, targetOrganisationId); + var indexPattern = indexsearchFilter.buildQuery(entityObj); + var ids = DuplicateScannerUtils.getDuplicateIds(pTargetEntity, indexPattern, selfId); - var deleteStatements = []; - deleteStatements.push(newWhere("CONTACT.CONTACTID", pSourceContactId).buildDeleteStatement()); - deleteStatements = deleteStatements.concat(_DuplicateScannerUtils._buildDeleteOrganisationAndContactQuery(sourceOrganisationId, pSourceContactId)); - deleteStatements = deleteStatements.concat(_DuplicateScannerUtils._buildDeleteCachedUnrelatedDuplicateQuery(pSourceContactId)); - - //update binary - var metaData = db.getBinaryMetadata("CONTACT", "DOCUMENT", pSourceContactId, true, SqlUtils.getBinariesAlias()); - metaData.forEach(function (binaryMetaData) + DuplicateScannerUtils.deleteHasDuplicateEntries(pTargetEntity, [selfId]); + if(ids.length > 0) { - db.updateBinaryAssignment(binaryMetaData.id, "CONTACT", "DOCUMENT", pTargetContactId, SqlUtils.getBinariesAlias()); - }); - var deletedRows = db.deletes(deleteStatements) - - DuplicateScannerUtils.deleteCachedDuplicate(pSourceContactId); - - return deletedRows >= 2; -} - -/* - * Creates an array of arrays containing the entity field config paired with it's value. - * - * @param {[]} pDuplicateFieldsConfig An Array with the configured fields in the form of [ENTITY_FIELD, IS_ID, USE_FOR_SEARCH]. @see LoadDuplicateIndexFieldsConfiguration() - * @param {{"key", "value"}} pTargetRecordData One record containing the values for the configured fields. It's in the format of {"key(=EntityFieldName", "Value"} - * @return {[[]]} An array of arrays containing the entity field config an its value. ["{entityfield: FIRSTNAME}", "PETER"]] - * @example - * pDuplicateFieldsConfig - * ["CONTACTID", true, false] - * ["FIRSTNAME", false, true] - * - * pTargetRecordData - * ["d786045c-8b21-4f22-b6d9-72be9f61c04d", "PETER"] - * - * => ["{entityfield: FIRSTNAME}", "PETER"]] - */ -DuplicateScannerUtils.buildEntityFieldConfigs = function(pDuplicateFieldsConfig, pTargetRecordData) -{ - let INDEX_CONFIG_ENTITY_FIELD = 0; - let entityFieldConfigValuesRay = []; - /* - * Based on the parameterized filter field names and the values loaded via the query, - * an array which contains records in the style of ["FilterFieldName", "FilterFieldValueFromQuery"] gets created. - * This is mandatory to run the scan for this record. - */ - for (let i = 0; i < pDuplicateFieldsConfig.length; i++) - { - let fieldConfig = JSON.parse("{" + pDuplicateFieldsConfig[i] + "}"); - let entityField = fieldConfig.entityfield; - let entityFieldValue = pTargetRecordData[entityField]; - if(entityFieldValue == null) - entityFieldValue = ""; - else - entityFieldValue = indexsearch.escapeString(entityFieldValue).trim(); - - let exclude = fieldConfig.exclude; - if (exclude) - { - exclude.forEach(function (excludeValue) - { - entityFieldValue = " " + entityFieldValue + " "; - entityFieldValue = entityFieldValue.replace(new RegExp( " " + excludeValue + " ", "gi"), ""); - }); - } - - let valuelength = fieldConfig.length; - if ( valuelength ) - entityFieldValue = entityFieldValue.substr(0, parseInt(valuelength)) + "*"; - - let empty = fieldConfig.empty; - if ( !empty && entityFieldValue == "") - entityFieldValue = "*"; - - entityFieldValue = entityFieldValue.trim(); - entityFieldConfigValuesRay.push([pDuplicateFieldsConfig[i], entityFieldValue]); + DuplicateScannerUtils.insertHasDuplicateEntry(pTargetEntity, selfId, ids.length); } - return entityFieldConfigValuesRay.length > 0 ? entityFieldConfigValuesRay : [["", ""]]; -} - -DuplicateScannerUtils.getBlockSize = function() -{ - return project.getPreferenceValue("custom.duplicates.dataBlockSize", "5000"); -} - -DuplicateScannerUtils.getEntityFieldsFromConfig = function(pFilterName, pTargetEntity) -{ - let indexPattern = _DuplicateScannerUtils._loadIndexPattern(pFilterName, pTargetEntity); - if(indexPattern == null || indexPattern == "") - return []; - let fieldConfigs = _DuplicateScannerUtils._loadEntityFieldConfigsFromPattern(indexPattern); - if(fieldConfigs == null || fieldConfigs.length < 1) - return []; - let entityFields = _DuplicateScannerUtils._loadEntityFieldsFromFieldConfigs(fieldConfigs); - let entityIdField = _DuplicateScannerUtils._loadEntityIdField(pFilterName, pTargetEntity); - entityFields.push(entityIdField); - return entityFields; } /** - * Loads the configured entity fields required for the given duplicate scanner. + * Returns a DuplicateScanner object by the given entity name + * + * @param {string} pTargetEntity a entity name e.g.: Organisation_entity * - * @param {String} pFilterName the name of the scanner - * @param {String} pTargetEntity the target entity - * @return {Object} an object with two properties: - * <ul> - * <li>entityFields: array of entity fields</li> - * <li>entityIdField: the id field name as string</li> - * </ul> + * @returns {object} the scanner object */ -DuplicateScannerUtils.getEntityFieldObjectFromConfig = function (pFilterName, pTargetEntity) +DuplicateScannerUtils.getScannerByEntity = function(pTargetEntity) { - var indexPattern = _DuplicateScannerUtils._loadIndexPattern(pFilterName, pTargetEntity); - if (!indexPattern) - return null; - var fieldConfigs = _DuplicateScannerUtils._loadEntityFieldConfigsFromPattern(indexPattern); - if (fieldConfigs == null || fieldConfigs.length === 0) - return null; - + var duplicateScanner = newSelect([ + "DUPLICATESCANNER.ID_FIELD_NAME", + "DUPLICATESCANNER.SCAN_PATTERN" + ]) + .from("DUPLICATESCANNER") + .where("DUPLICATESCANNER.ENTITY_TO_SCAN_NAME", pTargetEntity).arrayRow(); + var filterObj = JSON.parse(duplicateScanner[1]).filter; return { - entityFields : _DuplicateScannerUtils._loadEntityFieldsFromFieldConfigs(fieldConfigs), - entityIdField : _DuplicateScannerUtils._loadEntityIdField(pFilterName, pTargetEntity) + idField: duplicateScanner[0], + filter: filterObj }; } -DuplicateScannerUtils.getUnrelatedRelationsForDuplicate = function(pDuplicateId) -{ - let unrelatedIds = []; - let duplicateIds = newSelect("SOURCEDUPLICATEID, UNRELATEDDUPLICATEID") - .from("UNRELATEDDUPLICATES") - .where("UNRELATEDDUPLICATES.SOURCEDUPLICATEID", pDuplicateId) - .or("UNRELATEDDUPLICATES.UNRELATEDDUPLICATEID", pDuplicateId) - .table(); - let sourceDuplicateId = ""; - let unrelatedDuplicateId = ""; - for (let i = 0; i < duplicateIds.length; i++) - { - sourceDuplicateId = duplicateIds[i][0]; - unrelatedDuplicateId = duplicateIds[i][1]; - - if(sourceDuplicateId != null && sourceDuplicateId != "" && sourceDuplicateId != pDuplicateId) - { - unrelatedIds.push(sourceDuplicateId); - } - else if(unrelatedDuplicateId != null && unrelatedDuplicateId != "" && unrelatedDuplicateId != pDuplicateId) - { - unrelatedIds.push(unrelatedDuplicateId); - } - } - return unrelatedIds; -} - -function _DuplicateScannerUtils() {} - -_DuplicateScannerUtils._loadEntityFieldsFromFieldConfigs = function(pEntityFieldConfigs) -{ - let fieldNames = []; - for (let i = 0; i < pEntityFieldConfigs.length; i++) - { - let fieldConfig = JSON.parse("{" + pEntityFieldConfigs[i] + "}"); - let entityField = fieldConfig.entityfield; - fieldNames.push(entityField); - } - return fieldNames; -} - -/* - * Gets the Pattern for the scanner - * A pattern usually contains placeholders in the style of "{entityFieldName]" +/** + * Calls the index search and returns the found duplicate ids * - * @param {String} pScannerName Name of the filter to use - * @param {String} pTargetEntity The target entity which has been assigned to the filters configuration - * @returns {String} Scan pattern as string - */ -_DuplicateScannerUtils._loadIndexPattern = function(pScannerName, pTargetEntity) -{ - let scanPattern = _DuplicateScannerUtils._filterToScanPattern( newSelect("SCAN_PATTERN") - .from("DUPLICATESCANNER") - .where("DUPLICATESCANNER.FILTER_NAME", pScannerName) - .and("DUPLICATESCANNER.ENTITY_TO_SCAN_NAME", pTargetEntity) - .cell()); - scanPattern = scanPattern.trim(); - return scanPattern; -} - - -_DuplicateScannerUtils._filterToScanPattern = function(filterString) { - if (filterString == "") - return ""; - try - { - var filter = JSON.parse(filterString); - } - catch (err) - { - return ""; - } - return _DuplicateScannerUtils._filterChildsToScanPattern(filter.filter.childs, filter.filter.operator); -} - -_DuplicateScannerUtils._filterChildsToScanPattern = function(childs, operator) { - let group = ""; - for (let i = 0; i < childs.length; i++) { - if (group != ""){ - group = group + " " + operator+ " "; - } - if (childs[i].type == "row"){ - group = group + _DuplicateScannerUtils._filterChildsRowToScanPattern(childs[i].name, childs[i].operator, childs[i].value); - } else if (childs[i].type == "group") { - group = group + "(" + _DuplicateScannerUtils._filterChildsToScanPattern(childs[i].childs, childs[i].operator) + ")"; - } - } - return group; -} - -_DuplicateScannerUtils._filterChildsRowToScanPattern = function (name, operator, value) { - let row = ""; - row = row + name.toLowerCase() + ':({"entityfield":"' + name + '"'; - switch (operator){ - case "NOT_EQUAL": - case "CONTAINSNOT": - row = row + ', "exclude":' + value; - case "ISNOTNULL": - row = row + ', "empty":' + false; - } - row = row + '})'; - return row; -} - -_DuplicateScannerUtils._loadEntityFieldConfigsFromPattern = function(indexPattern) -{ - return indexPattern.match(/[^{}]+(?=\})/g); -} - -_DuplicateScannerUtils._replacePlaceholderForValuesInPattern = function(pIndexPattern, pEntityFieldValueRays) -{ - let INDEX_ENTITY_FIELD_NAME = 0; - let INDEX_ENTITY_FIELD_VALUE = 1; - - let placeholder = ""; - let fieldValue = ""; - for (let i = 0; i < pEntityFieldValueRays.length; i++) - { - placeholder = "{" + pEntityFieldValueRays[i][INDEX_ENTITY_FIELD_NAME] + "}"; - fieldValue = pEntityFieldValueRays[i][INDEX_ENTITY_FIELD_VALUE]; - pIndexPattern = pIndexPattern.replace(placeholder, fieldValue); - } - return pIndexPattern; -} - -_DuplicateScannerUtils._loadEntityIdField = function(pFilterName, pTargetEntity) -{ - return newSelect("ID_FIELD_NAME") - .from("DUPLICATESCANNER") - .where("DUPLICATESCANNER.FILTER_NAME", pFilterName) - .and("DUPLICATESCANNER.ENTITY_TO_SCAN_NAME", pTargetEntity) - .cell(); -} - -/* - * @see DuplicateScannerUtils.scanForDuplicates for the documentation - */ -_DuplicateScannerUtils._scanForDuplicates = function(pTargetEntity, pEntityFieldConfigValuesRay, -pResultFields, pRecordIdValueToIgnore, pFormatValuesConsumeWebserviceCallback, pUseExternalWebservice, pIndexPattern) -{ - //No filterfields/indexpattern => No indexsearch - if(pEntityFieldConfigValuesRay.length < 1 || pIndexPattern == null || pIndexPattern == "") - return null; - - let possibleDuplicates = []; - let ignoreSourceRecordPattern = _DuplicateScannerUtils._getIgnoreSourceRecordPattern(pRecordIdValueToIgnore); - - let indexPatternWithValues = _DuplicateScannerUtils._replacePlaceholderForValuesInPattern(pIndexPattern, pEntityFieldConfigValuesRay); - - possibleDuplicates = _DuplicateScannerUtils._callIndexSearch(pTargetEntity, indexPatternWithValues, ignoreSourceRecordPattern, pResultFields, 100); - - if(possibleDuplicates == null) - return null; - - possibleDuplicates = possibleDuplicates[indexsearch.HITS]; - - if(pUseExternalWebservice && pFormatValuesConsumeWebserviceCallback != null) - possibleDuplicates = pFormatValuesConsumeWebserviceCallback.apply(this, [possibleDuplicates]); - - return possibleDuplicates; -} - -/* - * Returns a bool which say wether or not an external service should be used - * - * @param {String} pFilterName Name of the filter - * @param {String} pTargetEntity Entity which has been configured - * @returns {Bool} True = use, False = no use - */ -_DuplicateScannerUtils._isUseExternalWebservice = function(pFilterName, pTargetEntity) -{ - let isUseWebservice = newSelect("EXTERNAL_SERVICE_USAGE_ALLOWED") - .from("DUPLICATESCANNER") - .where("DUPLICATESCANNER.FILTER_NAME", pFilterName) - .and("DUPLICATESCANNER.ENTITY_TO_SCAN_NAME", pTargetEntity) - .cell(); - return isUseWebservice != 0; -} - -/* - * Runs the indexsearch based on the given parameters. - * If the "pEntityFieldValueRays" is empty, no search will be executed. + * @param {string} pTargetEntity search for duplicate in this entity e.g.: Organisation_entity + * @param {string} pIndexPattern the index pattern as string + * @param {string=} pSelfId optionally the own id (this will be excluded) * - * @param {String} pTargetEntity Entity which has been configured - * @param {String} pIndexPatternWithValues The pattern used to search. Has to contain the values already. - * @param {String} pIdFilter The filter pattern used to exclude the current record from the result. - * @param {String} pResultFields The result field config. Use "DuplicateScannerUtils.getResultFields" - * @param {String} pResultSetRows todo - * @returns {[["key", "value"]] || null} Array of Key-Value-Pairs based on the configured pResultFields, if no pattern exists null + * @returns {string[]} the duplicate ids */ -_DuplicateScannerUtils._callIndexSearch = function(pTargetEntity, pIndexPatternWithValues, pIdFilter, pResultFields, pResultSetRows) +DuplicateScannerUtils.getDuplicateIds = function(pTargetEntity, pIndexPattern, pSelfId) { - //logging.log(pIndexPatternWithValues) - //The indexPattern can't be null because it is required to run the search. - if(pIndexPatternWithValues == null || pIndexPatternWithValues == "") - return null; let indexQuery = indexsearch.createIndexQuery() - .setPattern(pIndexPatternWithValues) - .setEntities([pTargetEntity]) -// .addFilter(pIdFilter); - // .setDefaultOperator(indexsearch.OPERATOR_AND) - //.addSearchFields("Person_entity.FIRSTNAME", "Person_entity.LASTNAME", "Person_entity.CONTACTID") - //.setRows(pResultSetRows); - if(pIdFilter && pIdFilter.length > 0) - indexQuery.addFilter(pIdFilter); - - indexQuery = _DuplicateScannerUtils._setResultFields(indexQuery, pResultFields); - return indexsearch.searchIndex(indexQuery); -} - -/* - * Sets each field of the given array as resultfield on the given query. - * Supports indexsearch internal fields aswell - * (indexsearch.FIELD_ID, indexsearch.FIELD_TITLE, indexsearch.FIELD_TYPE, indexsearch.FIELD_DESCRIPTION) - * - * @param {IndexQuery} pIndexQuery An indexquery created with "indexsearch.createIndexQuery()" - * @param {String[]} pResultFields The result field config. Use "DuplicateScannerUtils.getResultFields" - * @returns {IndexQuery} IndexQuery with the resultfields set - */ -_DuplicateScannerUtils._setResultFields = function(pIndexQuery, pResultFields) -{ - let resultIndexFields = []; - let resultFields = []; - for (let i = 0; i < pResultFields.length; i++) + .setPattern(pIndexPattern) + .setEntities([pTargetEntity]); + if(pSelfId) { - if(pResultFields[i] == indexsearch.FIELD_ID - || pResultFields[i] == indexsearch.FIELD_TITLE - || pResultFields[i] == indexsearch.FIELD_TYPE - || pResultFields[i] == indexsearch.FIELD_DESCRIPTION) - { - resultIndexFields.push(pResultFields[i]); - } - else - resultFields.push(pResultFields[i]); + // creates -_local_id_:"<pSelfId>" + var optFilter = indexsearch.buildPattern(indexsearch.createPatternConfig().minus( + indexsearch.createPhraseTerm(pSelfId) + .setIndexField(indexsearch.FIELD_ID) + )); + indexQuery = indexQuery.addFilter(optFilter); } - if(resultIndexFields.length > 0) - pIndexQuery = pIndexQuery.addResultIndexFields(resultIndexFields); - - if(resultFields.length > 0) + var indexResult = indexsearch.searchIndex(indexQuery); + indexResult = indexResult[indexsearch.HITS]; + if(indexResult === null || indexResult.length === 0) { - pIndexQuery = pIndexQuery.addResultFields(resultFields); + return []; } - return pIndexQuery; -} - -/* - * Creates the queries to insert new duplicates into a new cluster based on the pDuplicatesRay - * - * @param {String[]} pDuplicatesRay Array of duplicate ids - * @param {String} pTargetEntity Entity which has been configured - * @returns {String[]} Array of insert queries - */ -_DuplicateScannerUtils._createInsertDuplicatesClusterQuery = function (pDuplicatesRay, pTargetEntity) -{ - return _DuplicateScannerUtils._createInsertDuplicatesClusterQuery(pDuplicatesRay, pTargetEntity, util.getNewUUID()); -} - -/* - * Creates the queries to insert new duplicates into a new cluster based on the pDuplicatesRay - * - * @param {String[]} pDuplicatesRay Array of duplicate ids - * @param {String} pTargetEntity Entity which has been configured - * @param {String} pClusterId Clusters id to which the duplicates are in relation - * @returns {String[]} Array of insert queries - */ -_DuplicateScannerUtils._createInsertDuplicatesClusterQuery = function (pDuplicatesRay, pTargetEntity, pClusterId) -{ - let duplicatesToInsertQueries = []; - let cols = ["ID", "CLUSTERID", "DUPLICATEID", "TARGET_ENTITY"]; - if (!pClusterId) - pClusterId = util.getNewUUID(); - - for (let i = 0; i < pDuplicatesRay.length; i++) + var duplicateIds = []; + indexResult.forEach(function(curr) { - let newId = util.getNewUUID(); - let valuesToInsert = [newId, pClusterId, pDuplicatesRay[i], pTargetEntity]; - - duplicatesToInsertQueries.push(["DUPLICATECLUSTERS", cols, null, valuesToInsert]); - } - return duplicatesToInsertQueries; -} - -/* - * Deletes all clusters - * - * @returns {String} Count of records deleted - */ -_DuplicateScannerUtils._deleteDuplicateClusters = function () -{ - return db.deleteData("DUPLICATECLUSTERS"); -} - -/* - * All records with contactId = sourceContactId get updated, which are not assigned to the same "group" as the targetContactId. - * This is because otherwise there would now be in total two "participants" in the same "group" as opposed to one before. - * Also if they already are in the same "group" those records shouldn't be updated because it would lead to the same outcome. - * - * @returns {Boolean} If records have been updated - */ -_DuplicateScannerUtils._migrateParticipantsToNewContact = function (pTableName, pContactIdColumn, pAssignableIdColumn, pSourceContactId, pTargetContactId) -{ - var excludedIds = newSelect(pAssignableIdColumn) - .from(pTableName) - .where([pTableName, pContactIdColumn], pTargetContactId) - .arrayColumn(); - - var updateCount = newWhereIfSet([pTableName, pAssignableIdColumn], excludedIds, SqlBuilder.NOT_IN()) - .and([pTableName, pContactIdColumn], pSourceContactId) - .updateFields(new Map().set(pContactIdColumn, pTargetContactId), pTableName); - - var deleteCount = newWhere([pTableName, pContactIdColumn], pSourceContactId) - .tableName(pTableName) - .deleteData(); - - return updateCount > 0 || deleteCount > 0; -} - -_DuplicateScannerUtils._buildDeleteOrganisationAndContactQuery = function(pSourceOrganisationId, pSourceContactId) -{ - return [ - newWhere("ORGANISATION.ORGANISATIONID", pSourceOrganisationId).buildDeleteStatement(), - newWhere("CONTACT.CONTACTID", pSourceContactId).buildDeleteStatement() - ]; -} - -_DuplicateScannerUtils._buildDeleteCachedUnrelatedDuplicateQuery = function(pSourceContactId) -{ - return [ - newWhere("UNRELATEDDUPLICATES.SOURCEDUPLICATEID", pSourceContactId).buildDeleteStatement(), - newWhere("UNRELATEDDUPLICATES.UNRELATEDDUPLICATEID", pSourceContactId).buildDeleteStatement() - ]; -} - -/* - * Creates a filter pattern which excludes results with the provided id from the search. - * - * @param {String} pRecordIdValueToIgnore The id value to exclude from the result. - * @returns {String} Filter pattern which excludes hits with the given id (index) from the result. - */ -_DuplicateScannerUtils._getIgnoreSourceRecordPattern = function(pRecordIdValueToIgnore) -{ - // creates -_local_id_:"<pRecordIdValueToIgnore>" - if(pRecordIdValueToIgnore && pRecordIdValueToIgnore.length > 0) - return indexsearch.buildPattern(indexsearch.createPatternConfig().minus( - indexsearch.createPhraseTerm(pRecordIdValueToIgnore) - .setIndexField(indexsearch.FIELD_ID) - )); - return null; -} - -_DuplicateScannerUtils._migrateLinkedContactData = function (pSourceContactId, pTargetContactId) -{ - var updateStatements = new Map(); - var currentAlias = db.getCurrentAlias(); - - var setStandardsStatements = []; - var [standardPhone, standardMail, standardAddressId] = newSelect([ - "(" + CommUtil.getStandardSubSqlPhone() + ")", - "(" + CommUtil.getStandardSubSqlMail() + ")", - "CONTACT.ADDRESS_ID" - ]) - .from("CONTACT") - .where("CONTACT.CONTACTID", pTargetContactId) - .arrayRow(); - - //if the targetContact already has a standard phone comm, set the comm from the sourceContact as not standard - if (standardPhone) - { - setStandardsStatements.push( - newWhere("COMMUNICATION.CONTACT_ID", pSourceContactId) - .and("COMMUNICATION.MEDIUM_ID", CommUtil.getMediumIdsByCategory("PHONE"), SqlBuilder.IN()) - .buildUpdateStatement({"ISSTANDARD" : "0"}) - ); - } - if (standardMail) - { - setStandardsStatements.push( - newWhere("COMMUNICATION.CONTACT_ID", pSourceContactId) - .and("COMMUNICATION.MEDIUM_ID", CommUtil.getMediumIdsByCategory("EMAIL"), SqlBuilder.IN()) - .buildUpdateStatement({"ISSTANDARD" : "0"}) - ); - } - //set the standardaddress of the sourceContact as standard of the targetContact if it doesn't have one set yet - if(!standardAddressId) - { - var sourceStandard = newSelect("CONTACT.ADDRESS_ID") - .from("CONTACT") - .where("CONTACT.CONTACTID", pSourceContactId) - .cell(); - setStandardsStatements.push(newWhere("CONTACT.CONTACTID", pTargetContactId).buildUpdateStatement({"ADDRESS_ID": sourceStandard})); - } - - updateStatements.set(currentAlias, setStandardsStatements); - - _DuplicateScannerUtils._getLinkedTableInfos(pTargetContactId).forEach(function ([tableName, columnName, additionalCondition, dbAlias]) - { - if (!dbAlias) - dbAlias = currentAlias; - - if (!updateStatements.has(dbAlias)) - updateStatements.set(dbAlias, []); - var statements = updateStatements.get(dbAlias); - - var updateValues = {}; - updateValues[columnName] = pTargetContactId; - - var updateCondition = new SqlBuilder(dbAlias).where([tableName, columnName], pSourceContactId).andIfSet(additionalCondition); - - //push must be used here to keep the reference - statements.push(updateCondition.buildUpdateStatement(updateValues, tableName)); + duplicateIds.push(curr[indexsearch.FIELD_ID]); }); - - var totalChanges = 0; - - updateStatements.forEach(function (statements, alias) - { - totalChanges += db.updates(statements, alias); - }); - - totalChanges += newWhere("COMMUNICATION.CONTACT_ID", pSourceContactId).deleteData(); //delete leftover communications from the source contact - totalChanges += new AttributeRelationQuery(pSourceContactId).deleteAllAttributes(); //delete leftover attributes - - return totalChanges > 0; -} - -/* - * Contains all Tables and their fields which may contain the contact id to be replaced for the data alias - * - * @returns {String[[]]} Array in the format [TableName, ContactIdColumnName, AdditionalCondition, alias] - */ -_DuplicateScannerUtils._getLinkedTableInfos = function(pTargetContactId) -{ - //don't use communications that the target already has - var targetComms = newSelect("COMMUNICATION.ADDR") - .from("COMMUNICATION") - .where("COMMUNICATION.CONTACT_ID", pTargetContactId) - .arrayColumn(); - - var communicationDedupCondition = targetComms.length > 0 - ? newWhere("COMMUNICATION.ADDR", targetComms, SqlBuilder.NOT_IN()) - : ""; - - return[ - ["AB_APPOINTMENTLINK", "OBJECT_ROWID"], - ["AB_CTILOG", "CONTACT_ID"], - ["AB_OBJECTRELATION", "AB_OBJECTRELATIONID"], - ["AB_OBJECTRELATION", "OBJECT1_ROWID"], - ["AB_OBJECTRELATION", "OBJECT2_ROWID"], - ["AB_LOGHISTORY", "TABLENAMEID"], - ["ADDRESS", "CONTACT_ID"], - ["BULKMAILRECIPIENT", "CONTACT_ID"], - ["BULKMAIL", "TESTING_CONTACT_ID"], - ["CAMPAIGN", "EMPLOYEE_CONTACT_ID"], - ["CAMPAIGNSTEP", "EMPLOYEE_CONTACT_ID"], - ["COMMRESTRICTION", "CONTACT_ID"], - ["COMMRESTRICTION", "EMPLOYEE_INVOLVED"], - ["COMMUNICATION", "CONTACT_ID", communicationDedupCondition], - ["COMPETITION", "CONTACT_ID"], - ["CONTRACT", "CONTACT_ID"], - ["LETTERRECIPIENT", "CONTACT_ID"], - ["OBJECTMEMBER", "CONTACT_ID"], - ["OFFER", "CONTACT_ID"], - ["PRODUCT", "CONTACT_ID"], - ["PRODUCTPRICE", "CONTACT_ID"], - ["SALESORDER", "CONTACT_ID"], - ["SALESPROJECT", "CONTACT_ID"], - ["TASK", "REQUESTOR_CONTACT_ID"], - ["TASK", "EDITOR_CONTACT_ID"], - ["TASKLINK", "OBJECT_ROWID"], - ["ACTIVITY", "RESPONSIBLE"], - ["DSGVO", "CONTACT_ID"], - ["DSGVOINFO", "CONTACT_ID"], - ["TIMETRACKING", "CONTACT_ID"], - ["ACTIVITYLINK", "OBJECT_ROWID"], - ["AB_ATTRIBUTERELATION", "OBJECT_ROWID"], - - ["ASYS_CALENDARLINK", "DBID", "", SqlUtils.getSystemAlias()] - ]; -} - - -/* - * Returns wether or not a value should be substring'd - * - * @return true if pCountCharsOfValueToUse is a number, greater than 0 and smaller than the values length - */ -_DuplicateScannerUtils._isValueLongerThanCharsToUse = function(pValueLength, pCountCharsOfValueToUse) -{ - return !isNaN(pCountCharsOfValueToUse) - && pCountCharsOfValueToUse > 0 - && pValueLength > pCountCharsOfValueToUse; -} - -/* - * Returns wether or not the parameter isnt null and a number or not - * - * @param {String} pCountCharsOfValueToUse Hopefully a number - * @returns {String} True if parameter isnt null and a number, False if it's null or no number - */ -_DuplicateScannerUtils._isNotNullAndANumber = function(pCountCharsOfValueToUse) -{ - return pCountCharsOfValueToUse != null && !isNaN(pCountCharsOfValueToUse); + return duplicateIds; } -/* - * Persons get reassigned to new organisation - * - * @returns {Boolean} If records have been updated +/** + * Does the same as getDuplicateIds but takes in a scanner (by entity) instead of an indexPattern + * + * @param {string} pTargetEntity the entity name used to get the Scanner + * @param {string} pTargetUid all variables will be loaded by this id + * + * @returns {string[]} the duplicate ids */ -_DuplicateScannerUtils._migratePersonsToNewOrganisation = function (pSourceOrganisationId, pTargetOrganisationId) +DuplicateScannerUtils.getDuplicateIdsByEntityScanner = function(pTargetEntity, pTargetUid) { - var updateCount = newWhereIfSet(["CONTACT", "ORGANISATION_ID"], pSourceOrganisationId) - .and("PERSON_ID is not null") - .updateFields(new Map().set("ORGANISATION_ID", pTargetOrganisationId), "CONTACT"); - - var deleteCount = newWhere(["CONTACT", "ORGANISATION_ID"], pSourceOrganisationId) - .and("PERSON_ID is not null") - .deleteData(); - return updateCount > 0 || deleteCount > 0; -} + var scanner = DuplicateScannerUtils.getScannerByEntity(pTargetEntity); + var indexsearchFilter = IndexsearchFilterUtils.fromFilter(scanner.filter); -/* - * Person and organisations keep the max_count = 1 attribute of the target and the one from the source is deleted - * - * @returns {Boolean} If records have been deleted - */ -_DuplicateScannerUtils._deleteUniqueAttributes = function (pSourceContactId, pTargetContactId) -{ - var targetAttrUnique = newSelect("AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID") - .from("AB_ATTRIBUTERELATION") - .join("AB_ATTRIBUTEUSAGE on AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID = AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID") - .where("AB_ATTRIBUTEUSAGE.MAX_COUNT = 1") - .and("AB_ATTRIBUTERELATION.OBJECT_ROWID", pTargetContactId) - .table(); - var deleteCount = 0; + var targetLoadConfig = entities.createConfigForLoadingRows() + .entity(pTargetEntity) + .uid(pTargetUid) // Array.from because getFields returns a Set + .fields(Array.from(indexsearchFilter.getFields())); + var targetRow = entities.getRow(targetLoadConfig); - targetAttrUnique.forEach(function(attribute){ - deleteCount += newWhereIfSet("AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID", attribute) - .and("AB_ATTRIBUTERELATION.OBJECT_ROWID", pSourceContactId) - .deleteData(); - }); - - return deleteCount > 0; + var indexPattern = indexsearchFilter.buildQuery(targetRow); + return DuplicateScannerUtils.getDuplicateIds(pTargetEntity, indexPattern, pTargetUid); } -/* - * Update other contacts from the source - * - * @returns {Boolean} If records have been updated +/** + * Does the same as getDuplicateIdsByEntityScanner + * but the variables are directly passed in as an argument + * + * @param {string} pTargetEntity the entity name used to get the Scanner + * @param {object} pEntityObj the variables (should include all variables needed to build the indexPattern) + * + * @returns {string[]} the duplicate ids */ - _DuplicateScannerUtils._updateOtherContacts = function (pSourceContactId, sourcePersonId, targetPersonId) +DuplicateScannerUtils.getDuplicateIdsByEntityObj = function(pTargetEntity, pEntityObj) { - var otherContacts = newSelect("PERSON.PERSONID") - .from("PERSON") - .join("CONTACT", "CONTACT.PERSON_ID = PERSON.PERSONID") - .where("PERSON.PERSONID", sourcePersonId) - .and("CONTACT.CONTACTID", pSourceContactId, SqlBuilder.NOT_EQUAL()) - .table(); - var updateCount = 0; - - otherContacts.forEach(function(person){ - updateCount += newWhere("CONTACT.PERSON_ID", person) - .updateFields({"PERSON_ID" : targetPersonId}, "CONTACT"); - }); - - return updateCount > 0; -} \ No newline at end of file + var scanner = DuplicateScannerUtils.getScannerByEntity(pTargetEntity); + var indexsearchFilter = IndexsearchFilterUtils.fromFilter(scanner.filter); + var indexPattern = indexsearchFilter.buildQuery(pEntityObj); + return DuplicateScannerUtils.getDuplicateIds(pTargetEntity, indexPattern, pEntityObj[scanner.idField]); +} diff --git a/process/EmailFilterHandling_lib/EmailFilterHandling_lib.aod b/process/EmailFilterHandling_lib/EmailFilterHandling_lib.aod new file mode 100644 index 0000000000000000000000000000000000000000..8c117f64a178efe97b2157ff000aae96ebaf4325 --- /dev/null +++ b/process/EmailFilterHandling_lib/EmailFilterHandling_lib.aod @@ -0,0 +1,10 @@ +<?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.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> + <name>EmailFilterHandling_lib</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <process>%aditoprj%/process/EmailFilterHandling_lib/process.js</process> + <alias>Data_alias</alias> + <variants> + <element>LIBRARY</element> + </variants> +</process> diff --git a/process/EmailFilterHandling_lib/process.js b/process/EmailFilterHandling_lib/process.js new file mode 100644 index 0000000000000000000000000000000000000000..15db9b516dc61fe98c6918b331de7ae2b361d875 --- /dev/null +++ b/process/EmailFilterHandling_lib/process.js @@ -0,0 +1,113 @@ +import("system.workflow"); +import("system.util"); +import("KeywordRegistry_basic"); +import("JditoFilter_lib"); +import("Sql_lib"); +import("system.mail"); + +/** + * The IncomingEmailFilterProcessor contains multiple email filters that can be evaluated. + */ +function IncomingEmailFilterProcessor () +{ + this.emailFilters = []; +} + +IncomingEmailFilterProcessor.prototype.loadFilters = function () +{ + var bounceFilters = newSelect(["TITLE", "FILTER_TYPE", "FILTER", "WORKFLOWDEFINITION_KEY"]) + .from("EMAIL_FILTER_HANDLING") + .where("EMAIL_FILTER_HANDLING.ISACTIVE", "1") + .and(newWhere("EMAIL_FILTER.FILTER_TYPE", $KeywordRegistry.emailFilterType$bounceSoft()) + .or("EMAIL_FILTER.FILTER_TYPE", $KeywordRegistry.emailFilterType$bounceHard())) + .orderBy("PRIORITY asc") + .table(); + + this.emailFilters = bounceFilters.map(function ([title, type, filterJson, workflowKey]) + { + return new IncomingEmailFilter(title, type, filterJson, workflowKey); + }); +} + +/** + * Runs all email filters on the given email + */ +IncomingEmailFilterProcessor.prototype.process = function (pEmail) +{ + this.emailFilters.forEach(function (emailFilter) + { + if (emailFilter.checkEmail(pEmail)) + { + emailFilter.startWorkflow(); + } + }); +} + +/** + * Object representing a single email filter that can check an email and execute a workflow. + */ +function IncomingEmailFilter (pTitle, pType, pFilterJson, pWorkflowKey) +{ + this.title = pTitle; + this.type = pType; + this.filter = new JditoFilter() + .filterJSON(pFilterJson) + .fieldOrder(["SENDER", "SUBJECT", "BODY_PLAIN", "BODY_REGEX", "ATTACHMENTCOUNT"]) + .addSpecialCheckFn("BODY_REGEX", function (rowValue, filterValue, operator) + { + var regExParts = filterValue.match(new RegExp('^/(.*?)/([gimy]*)$')); + var regEx; + if (regExParts) + regEx = new RegExp(regExParts[1], regExParts[2]); + else + regEx = new RegExp(filterValue); + return regEx.test(rowValue); + }, this); + this.workflowKey = pWorkflowKey; + this.isFallthrough = pIsFallthrough; +} + +/** + * Checks if the filter does apply to the given email. + * + * @param {Object} pEmail email object + * @return {Boolean} true, if the filter applies + */ +IncomingEmailFilter.prototype.checkEmail = function (pEmail) +{ + var sender = pEmail[mail.MAIL_SENDER]; + var subject = pEmail[mail.MAIL_SUBJECT]; + var body = pEmail[mail.MAIL_TEXT]; + var attachmentCount = pEmail[mail.MAIL_ATTACHMENTCOUNT]; + var emailRecord = [sender, subject, body, body, attachmentCount]; + + return this.filter.checkRecord(emailRecord); +} + +/** + * Inserts an entry into the MAIL_LOG table to protocol the received email. + * + * @param {Object} pEmail email object + * @return {String} mail_logId of the created row + */ +IncomingEmailFilter.prototype.writeMailLog = function (pEmail) +{ + new SqlBuilder.insertFields({ + "MAIL_LOGID": util.getNewUUID() + }, pTableName); +} + +/** + * Starts the workflow that has been defined for the email filter. + */ +IncomingEmailFilter.prototype.startWorkflow = function () +{ + if (this.workflowKey) + { + workflow.startProcessByKey(this.workflowKey, { + + }); + } +} + + diff --git a/process/Email_lib/process.js b/process/Email_lib/process.js index 61787a5d831ae07d315df9530951b04849e2b560..1c2acdb21f9f2c28b2b1f9d2dae3c643d69d4538 100644 --- a/process/Email_lib/process.js +++ b/process/Email_lib/process.js @@ -1,19 +1,20 @@ +import("system.translate"); import("system.question"); -import("Sql_lib"); -import("MimeType_lib"); -import("Document_lib"); import("system.logging"); -import("system.translate"); import("system.text"); -import("system.db"); -import("system.util"); -import("Communication_lib"); -import("DocumentTemplate_lib"); import("system.neon"); import("system.mail"); -import("Bulkmail_lib"); import("system.tools"); +import("system.util"); +import("system.db"); +import("KeywordRegistry_basic"); +import("DocumentTemplate_lib"); +import("Communication_lib"); import("EmailUtil_lib"); +import("Bulkmail_lib"); +import("MimeType_lib"); +import("Document_lib"); +import("Sql_lib"); function EmailWritingUtils () {} @@ -40,15 +41,19 @@ EmailWritingUtils.openMailTemplate = function (pToRecipients, pSenderContactId, if (pToRecipients && typeof(pToRecipients) == "string") pToRecipients = [pToRecipients]; - var email; + var email, retVal, isBinaryExistent; + isBinaryExistent = db.getBinaryCount("DOCUMENTTEMPLATE", "DOCUMENT", pTemplateId, SqlUtils.getBinariesAlias(), null); - if (pTemplateId || (pBindata.bindata != "" && pBindata.bindata != null)) + if ((pTemplateId && isBinaryExistent > 0) || (pBindata.bindata != "" && pBindata.bindata != null)) { email = Email.fromTemplate(pTemplateId, pRecipientContactId, pBindata, pAdditionalPlaceholders); if (!email) email = new Email(); } - else email = new Email(); + else + { + email = new Email(); + } email.setSender(pSenderContactId); @@ -71,9 +76,7 @@ EmailWritingUtils.openMailTemplate = function (pToRecipients, pSenderContactId, email.subject = pSubject; } - var isBinaryExistent = db.getBinaryCount("DOCUMENTTEMPLATE", "DOCUMENT", pTemplateId, SqlUtils.getBinariesAlias(), null); - - return isBinaryExistent > 0 ? email.downloadEML(pEmailFilename) : []; + return email.downloadEML(pEmailFilename); } @@ -89,9 +92,10 @@ EmailWritingUtils.openMailTemplate = function (pToRecipients, pSenderContactId, * @param {String} pEmailFilename optional file name of the email. * @param {String} [pAdditionalPlaceholders] additional placeholders for the email * @param {Array[]} [pUpdateStatements] an array with update statements which will be executed after email is downloaded/sent. - * @param {String} pTypeClassification Documenttemplatetypeclassification + * @param {String} pDocumentTemplateType The document template type (single or serial - <b><u><i>use keyword!</i></u></b>). */ -EmailWritingUtils.openNewMail = function (pToContactId, pToEmailAddress, pComingFrom, pAttachmentArray, pNotificationMsg, pEmailFilename, pAdditionalPlaceholders, pUpdateStatements, pTypeClassification) +EmailWritingUtils.openNewMail = function (pToContactId, pToEmailAddress, pComingFrom, pAttachmentArray, pNotificationMsg, pEmailFilename, + pAdditionalPlaceholders, pUpdateStatements, pDocumentTemplateType) { var params = { "ContactId_param" : pToContactId, @@ -101,7 +105,7 @@ EmailWritingUtils.openNewMail = function (pToContactId, pToEmailAddress, pComing "EmailFilename" : pEmailFilename, "AdditionalPlaceholders_param" : JSON.stringify(pAdditionalPlaceholders), "UpdateStatements_param" : JSON.stringify(pUpdateStatements), - "DocumentTemplateTypeClassification_param" : pTypeClassification + "DocumentTemplateTypeClassification_param" : pDocumentTemplateType }; if (pToEmailAddress) @@ -113,23 +117,25 @@ EmailWritingUtils.openNewMail = function (pToContactId, pToEmailAddress, pComing EmailWritingUtils.getMailbridgeAddress = function () { - return "mailbridge@domain.local"; //TODO: not hardcoded + return tools.getUser("mailbridge", tools.PROFILE_DEFAULT)[tools.PARAMS][tools.EMAIL]; } /** * Opens a view where the email with the report(s) can be downloaded as .eml * and after that it can be sent with e.g. Thunderbird * + * Report have to be a object with these attrs: content (base64 encoded report), contentType (mimeType of the report), filename (complete filename with filending) * @param {String} pRecipient Contact id of the recipient. * @param {String} pComingFrom source from where you started (e.g. "Person", "Organisation") * @param {Array} pReportArray array with reports. * @param {String} pNotificationMsg message which will be shown after the operation is done. * @param {String} pEmailFilename optional file name of the email. * @param {String} [pAdditionalPlaceholders] additional placeholders for the email - * @param {String} [pOfferId] optional needed for the offerEmails, to change the status of the offer - * Report have to be a object with these attrs: content (base64 encoded report), contentType (mimeType of the report), filename (complete filename with filending) + * @param {String} [pUpdateStatements] Opt. update-statements which will be executed, after download process is started. + * @param {String} pDocumentTemplateType The document template type (single or serial - <b><u><i>use keyword!</i></u></b>). */ -EmailWritingUtils.sendReportAsMail = function (pRecipient, pReportArray, pComingFrom, pNotificationMsg, pEmailFilename, pAdditionalPlaceholders, pOfferId) +EmailWritingUtils.sendReportAsMail = function (pRecipient, pReportArray, pComingFrom, pNotificationMsg, pEmailFilename, pAdditionalPlaceholders, + pUpdateStatements, pDocumentTemplateType) { var pRecpientEmail; @@ -141,7 +147,8 @@ EmailWritingUtils.sendReportAsMail = function (pRecipient, pReportArray, pComing pRecpientEmail = null; } - EmailWritingUtils.openNewMail(pRecipient, pRecpientEmail, pComingFrom, pReportArray, pNotificationMsg, pEmailFilename, pAdditionalPlaceholders, pOfferId); + EmailWritingUtils.openNewMail(pRecipient, pRecpientEmail, pComingFrom, pReportArray, pNotificationMsg, pEmailFilename, pAdditionalPlaceholders, + pUpdateStatements, pDocumentTemplateType); } /** @@ -397,7 +404,7 @@ Email.prototype.send = function (pUser) let mailbridgeExists = tools.getUser(mailbridgeTitle); if(mailbridgeExists) - mail.sendMailAs(mailbridgeTitle, mailId) + sentMails = mail.sendMailAs(mailbridgeTitle, mailId) else //check mailbridge user if this error gets thrown question.showMessage(translate.withArguments("Mailbridge failed: user '%0' is unknown, contact an administrator.", [mailbridgeTitle]), question.ERROR, translate.text("Error")); } diff --git a/process/Employee_lib/process.js b/process/Employee_lib/process.js index df1b7707c20e30fab92f0310813fd2a1f88cba02..2cc4dad6f527ad35e895fb83433d76dc19ecef8e 100644 --- a/process/Employee_lib/process.js +++ b/process/Employee_lib/process.js @@ -1,3 +1,4 @@ +import("system.vars"); import("system.tools"); import("system.vars"); import("system.db"); diff --git a/process/Entity_lib/process.js b/process/Entity_lib/process.js index afdfbfaa023b96d119e17ac92fa64920562076db..79d573a823f600868921b8cfd0ea9894109bfd00 100644 --- a/process/Entity_lib/process.js +++ b/process/Entity_lib/process.js @@ -504,10 +504,28 @@ EntityConsumerRowsHelper.prototype.fetchRowsFromConsumer = function (pFields) */ EntityConsumerRowsHelper.prototype.applyConsumerRowChanges = function () { - var insertedRows = vars.get("$field." + this._consumer + ".insertedRows"); - var changedRows = vars.get("$field." + this._consumer + ".changedRows"); - var deletedRows = vars.get("$field." + this._consumer + ".deletedRows"); + var insertedRows = null; + var changedRows = null; + var deletedRows = null; + // As soon as you're in a Lookup, the consumer might not be available. + // Therefore, the existence check for each variable is necessary to prevent an exception. + + if (vars.exists("$field." + this._consumer + ".insertedRows")) + { + insertedRows = vars.get("$field." + this._consumer + ".insertedRows") + } + + if (vars.exists("$field." + this._consumer + ".changedRows")) + { + changedRows = vars.get("$field." + this._consumer + ".changedRows") + } + + if (vars.exists("$field." + this._consumer + ".deletedRows")) + { + deletedRows = vars.get("$field." + this._consumer + ".deletedRows") + } + if (deletedRows && deletedRows.length > 0) this.removeRows(deletedRows); if (changedRows && changedRows.length > 0) diff --git a/process/ImporterMappingFunctions_lib/process.js b/process/ImporterMappingFunctions_lib/process.js index 338833fabbdd9a1a81745c3f57c7542f8cce0c5d..b48f57eb5eea39ce7dfc52dc53e2eb5e3e01d06b 100644 --- a/process/ImporterMappingFunctions_lib/process.js +++ b/process/ImporterMappingFunctions_lib/process.js @@ -529,7 +529,7 @@ function iComm(pObject) { * involvedEmployee (optional): The contact which is responsible for the restriction. * * @name iCommRestriction - * @param {Object} pObject (required): Associative Array with required informations. + * @param {Object} pObject (required): Associative Array with required information. * @return {Boolean} true * */ diff --git a/process/IncomingCallExecutor_lib/process.js b/process/IncomingCallExecutor_lib/process.js index 9f6eb5534de86e24db2b5ecb56b9c0f4e42027c8..5b34a53945b17fcc16296d52da25aa2b33d30530 100644 --- a/process/IncomingCallExecutor_lib/process.js +++ b/process/IncomingCallExecutor_lib/process.js @@ -98,7 +98,7 @@ IncomingCallExecutor.prototype.toString = function() /** * method for processing the callData.privateData - if it has been specified - * Since the tapi privateData supplies additional informations about the call, additional assumptions can be made for questions like: + * Since the tapi privateData supplies additional information about the call, additional assumptions can be made for questions like: * "who is the calling number?", "is the call a connected (=redirected) call?", etc. * * The object will set properties within the callData-member of your object and not return any value. diff --git a/process/IncomingEmailExecutor_lib/process.js b/process/IncomingEmailExecutor_lib/process.js index 18756c30f4dfb3005f0f0d06f5ea3ab27797acde..8a6da2031506da06576c82deadcd7a4162b20577 100644 --- a/process/IncomingEmailExecutor_lib/process.js +++ b/process/IncomingEmailExecutor_lib/process.js @@ -33,9 +33,7 @@ function IncomingEmailExecutor(pMail) var mailRecipientsTo = this.rawMail[mail.RECIPIENT_TO].split(";"); var mailRecipientsCc = this.rawMail[mail.RECIPIENT_CC].split(";"); var mailRecipientsBcc = this.rawMail[mail.RECIPIENT_BCC].split(";"); - this.mailRecipients = mailRecipientsTo.concat(mailRecipientsCc, mailRecipientsBcc).filter(function (elem){ - return elem != "" && elem != null; - }); + this.mailRecipients = mailRecipientsTo.concat(mailRecipientsCc, mailRecipientsBcc).filter(Utils.isNotNullOrEmptyString); this._senderInfo = null; @@ -48,6 +46,13 @@ function IncomingEmailExecutor(pMail) employeeContactId: "", direction: $KeywordRegistry.activityDirection$incoming() }; + + this._emailProcessors = []; +} + +IncomingEmailExecutor.prototype.attachProcessor = function (pEmailProcessor) +{ + this._emailProcessors.push(pEmailProcessor); } IncomingEmailExecutor.prototype.setActivityEmployeeContact = function (pContactId, pLanguageIso3, pSetAsFailback) @@ -153,11 +158,13 @@ IncomingEmailExecutor.prototype.isUnlinkable = function () IncomingEmailExecutor.getContactDataByEmail = function (pMailAddress, pAlias) { var mailAddress = EmailUtils.extractAddress(pMailAddress).toUpperCase(); - return newSelect("CONTACT.CONTACTID, CONTACT.STATUS, CONTACT.PERSON_ID, CONTACT.ISOLANGUAGE", pAlias) - .from("COMMUNICATION") - .join("CONTACT", "COMMUNICATION.CONTACT_ID = CONTACT.CONTACTID") - .where("COMMUNICATION.ADDR", mailAddress, "upper(#) = ?") - .table(); + return mailAddress + ? newSelect("CONTACT.CONTACTID, CONTACT.STATUS, CONTACT.PERSON_ID, CONTACT.ISOLANGUAGE", pAlias) + .from("COMMUNICATION") + .join("CONTACT", "COMMUNICATION.CONTACT_ID = CONTACT.CONTACTID") + .where("COMMUNICATION.ADDR", mailAddress, "upper(#) = ?") + .table() + : []; } IncomingEmailExecutor.prototype.createActivity = function(pAdditionalLinks) @@ -198,10 +205,10 @@ IncomingEmailExecutor.prototype.createActivity = function(pAdditionalLinks) directionKeywordId: this.activityData.direction || this.failbackActivityData.direction }; - if (vars.get("$sys.isclient")){ + if (vars.get("$sys.isclient") == "true"){ activityDataForInsert.responsibleContactId = EmployeeUtils.getCurrentContactId(); } else { - activityDataForInsert.responsibleContactId = this.activityData.employeeContactId || this.failbackActivityData.employeeContactId; + activityDataForInsert.responsibleContactId = this.activityData.employeeContactId ? this.activityData.employeeContactId : this.failbackActivityData.employeeContactId; } var activityLinks = this.activityData.links || this.failbackActivityData.links; @@ -232,9 +239,14 @@ IncomingEmailExecutor.prototype.autoProcess = function(pUnlinkedMailId) unlinkedMailId: pUnlinkedMailId }; } - tempResult.activityId = this.createActivity().activityId; this.deleteUnlinkedMail(pUnlinkedMailId); + + this._emailProcessors.forEach(function (emailProcessor) + { + emailProcessor.process(this.rawMail); + }, this); + return tempResult; } diff --git a/process/IndexSearch_lib/IndexSearch_lib.aod b/process/IndexSearch_lib/IndexSearch_lib.aod index b5a2aacd8c33062115f137291582acd7c0d8a36b..966a62229e274087ad9f4afa9a706cf2a5c2167c 100644 --- a/process/IndexSearch_lib/IndexSearch_lib.aod +++ b/process/IndexSearch_lib/IndexSearch_lib.aod @@ -2,6 +2,7 @@ <process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> <name>IndexSearch_lib</name> <majorModelMode>DISTRIBUTED</majorModelMode> + <documentation>%aditoprj%/process/IndexSearch_lib/documentation.adoc</documentation> <process>%aditoprj%/process/IndexSearch_lib/process.js</process> <variants> <element>LIBRARY</element> diff --git a/process/IndexSearch_lib/documentation.adoc b/process/IndexSearch_lib/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..e1a46041bb3106b86648236d1096747bf963e355 --- /dev/null +++ b/process/IndexSearch_lib/documentation.adoc @@ -0,0 +1,3 @@ += IndexSearch_lib + +Provides functionality to generate a adito-solr indexquery diff --git a/process/IndexSearch_lib/process.js b/process/IndexSearch_lib/process.js index be35ad2cc8c0a24fabe76bd57ba2a64d9ce9b310..0c2635e1955004b54dbe446963080d4b9d9dda21 100644 --- a/process/IndexSearch_lib/process.js +++ b/process/IndexSearch_lib/process.js @@ -1,3 +1,4 @@ +import("system.indexsearch"); import("system.neon"); import("system.text"); @@ -160,4 +161,157 @@ IndexsearchUtils.createAffectedInfoContainer = function(changedIdValue, changedT } }); return res; -} \ No newline at end of file +} + + +/** + * Static utility class for constructing an indexsearch pattern + */ +function IndexsearchFilterUtils() {} + +/** + * Creates an indexsearch pattern from a filter + * + * @param {object} pFilter the filter in json representation + * + * @returns {IndexsearchFilterGroup|IndexsearchFilterRow} the IndexSearchFilter object + */ +IndexsearchFilterUtils.fromFilter = function(pFilter) +{ + if(pFilter["type"] == "group") + { + return IndexsearchFilterGroup.fromFilter(pFilter["childs"], pFilter["operator"]); + } + else if(pFilter["type"] == "row") + { + return IndexsearchFilterRow.fromFilter(pFilter["name"], pFilter["operator"], pFilter["value"]); + } + throw new Error("Unknown filter node type: " + pFilter["type"]); +} + + +/** + * The IndexsearchFilterGroup object represents the a filter group + * and is able to generate the corrosponding indexsearch pattern + * + * @param {(IndexsearchFilterGroup|IndexsearchFilterRow)[]} pChilds the child filterrows/filtergroups + * @param {string} pOperator the operator for the group can either be 'AND' or 'OR' + */ +function IndexsearchFilterGroup(pChilds, pOperator) +{ + this.childs = pChilds; + this.operator = pOperator; +} + +/** + * Returns all fiels as Set witch are required for this filter + * + * @returns {Set<string>} The fields as Set + */ +IndexsearchFilterGroup.prototype.getFields = function() +{ + var fields = new Set(); + for(let i = 0; i < this.childs.length; i++) + { + this.childs[i].getFields().forEach(fields.add, fields); + } + return fields; +} + +/** + * Builds the index pattern and returns it as string + * + * @param {Record<string, string>} pFieldValues the field name value pair + */ +IndexsearchFilterGroup.prototype.buildQuery = function(pFieldValues) +{ + return this.childs.map(function(curr) { return curr.buildQuery(pFieldValues); }) + .filter(function(curr) { return curr != null; }) + .join(" " + this.operator + " "); +} + +/** + * Creates a new IndexsearchFilterGroup object + * + * @param {(IndexsearchFilterGroup|IndexsearchFilterRow)[]} pChilds the child filterrows/filtergroups + * @param {string} pOperator the operator for the group can either be 'AND' or 'OR' + */ +IndexsearchFilterGroup.fromFilter = function(pChilds, pOperator) +{ + return new IndexsearchFilterGroup( + pChilds.map(function(curr) + { + return IndexsearchFilterUtils.fromFilter(curr); + }), + pOperator + ); +} + + +function IndexsearchFilterRow(pName, pEmpty, pExclude) +{ + this.name = pName; + this.empty = pEmpty; + this.exclude = pExclude; +} + +/** + * Returns all fiels as Set witch are required for this filter + * + * @returns {Set<string>} The fields as Set + */ +IndexsearchFilterRow.prototype.getFields = function() +{ + return new Set([this.name]); +} + +/** + * Builds the index pattern and returns it as string + * + * @param {Record<string, string>} pFieldValues the field name value pair + */ +IndexsearchFilterRow.prototype.buildQuery = function(pFieldValues) +{ + var fieldValue = pFieldValues[this.name] ? pFieldValues[this.name] : ""; + if(!this.empty && fieldValue == "") + { + return null; + } + var valueStr = fieldValue; + for(let i = 0; i < this.exclude.length; i++) + { + valueStr = valueStr.replace(new RegExp(this.exclude[i], "gi"), ""); + } + return this.name.toLowerCase() + ':("' + indexsearch.escapeString(valueStr.trim().replace(/\s+/g, "")) + '")'; +} + +/** + * Creates a new IndexsearchFilterGroup object + * + * @param {string} pName the row field name + * @param {string} pOperator the operator for the group can either be 'AND' or 'OR' + * @param {string} pValue the field value + */ +IndexsearchFilterRow.fromFilter = function(pName, pOperator, pValue) +{ + if(pOperator == "NOT_EQUAL" || pOperator == "CONTAINSNOT") + { + let exclude; + try + { + exclude = JSON.parse(pValue); + } + // If the pValue isn't an Object or Array + catch (e if e instanceof SyntaxError) + { + exclude = [pValue]; + } + + return new IndexsearchFilterRow(pName, true, exclude); + } + else if(pOperator == "ISNOTNULL") + { + return new IndexsearchFilterRow(pName, false, []); + } + throw new Error("Unknown filterrow operator: " + pOperator); +} diff --git a/process/KeywordRegistry_basic/process.js b/process/KeywordRegistry_basic/process.js index 6a21f8cc5cb43534a0b56ab98cc8fd27245ff627..5fc995435666ed19b5a5eb716a1b02db218bdd7b 100644 --- a/process/KeywordRegistry_basic/process.js +++ b/process/KeywordRegistry_basic/process.js @@ -42,6 +42,7 @@ $KeywordRegistry.contactStatus = function(){return "ContactStatus";}; $KeywordRegistry.contactStatus$active = function(){return "CONTACTSTATACTIVE";}; $KeywordRegistry.contactStatus$inactive = function(){return "CONTACTSTATINACTIVE";}; $KeywordRegistry.contactStatus$inReview = function(){return "CONTACTSTATREVIEW";}; +$KeywordRegistry.contactStatus$markToDelete = function(){return "CONTACTSTATDELETE";}; $KeywordRegistry.currency = function(){return "Currency";}; $KeywordRegistry.currency$eur = function(){return "EUR";}; @@ -55,6 +56,8 @@ $KeywordRegistry.offerStatus$sent = function(){return "OFFERSTATSENT";}; $KeywordRegistry.offerStatus$won = function(){return "OFFERSTATWON";}; $KeywordRegistry.offerStatus$lost = function(){return "OFFERSTATLOST";}; $KeywordRegistry.offerStatus$toCheck = function(){return "OFFERSTATTOCHECK";}; +$KeywordRegistry.offerStatus$denied = function(){return "OFFERSTATDENIED";}; +$KeywordRegistry.offerStatus$approved = function(){return "OFFERSTATAPPROVED";}; $KeywordRegistry.organisationType = function(){return "OrganisationType";}; $KeywordRegistry.organisationType$manufacturer = function(){return "ORGMANUF";}; @@ -111,6 +114,9 @@ $KeywordRegistry.activityCategory = function(){return "ActivityCategory";}; $KeywordRegistry.activityCategory$mail = function(){return "MAIL";}; $KeywordRegistry.activityCategory$letter = function(){return "LETTER";}; $KeywordRegistry.activityCategory$visit = function(){return "VISIT";}; +$KeywordRegistry.activityCategory$phone = function(){return "PHONE";}; +$KeywordRegistry.activityCategory$onlineMeeting = function(){return "ONLINE-MEETING";}; +$KeywordRegistry.activityCategory$approval = function(){return "APPROVAL";}; $KeywordRegistry.addressType = function(){return "AddressType";}; $KeywordRegistry.addressType$private = function(){return "HOMEADDR";}; @@ -146,6 +152,9 @@ $KeywordRegistry.salesprojectPhase$sal = function(){return "SALPROJPHASESAL"}; $KeywordRegistry.salesprojectPhase$sqo = function(){return "SALPROJPHASESQO"}; $KeywordRegistry.salesprojectPhase$mqc = function(){return "SALPROJPHASEMQC"}; +$KeywordRegistry.probabilitySalesproject = function(){return "ProbabilitySalesproject";}; +$KeywordRegistry.probabilityOffer = function(){return "ProbabilityOffer";}; + $KeywordRegistry.taskPriority = function(){return "TaskPriority";}; $KeywordRegistry.taskPriority$none = function(){return "TASKPRIONONE";}; $KeywordRegistry.taskPriority$low = function(){return "TASKPRIOLOW";}; @@ -198,6 +207,7 @@ $KeywordRegistry.dsgvoStatuoritysource = function(){return "DSGVOStatuoritysourc $KeywordRegistry.dsgvoType = function() {return "DSGVOType";}; $KeywordRegistry.dsgvoType$birth = function(){return "TYPE_BIRTH";}; +$KeywordRegistry.dsgvoType$privacyNotice = function(){return "TYPE_PRIVACY_NOTICE";}; $KeywordRegistry.dsgvoTransmission = function() {return "DSGVOTransmission";}; $KeywordRegistry.dsgvoTransmission$none = function(){return "DSGVONONE";}; @@ -210,6 +220,13 @@ $KeywordRegistry.dsgvoDeadline$complex = function(){return "DSGVODEADLINECOMPLEX $KeywordRegistry.dsgvoDeadline$count = function(){return "DSGVODEADLINECOUNT";}; $KeywordRegistry.dsgvoGuarantee = function() {return "DSGVOGuarantee";}; +$KeywordRegistry.dsgvoConfiguration = function() {return "DSGVOConfiguration";}; +$KeywordRegistry.dsgvoConfiguration$config = function() {return "DSGVO_CONFIGURATION";}; +$KeywordRegistry.dsgvoConfiguration$configId = function() {return "51f106b6-b593-4279-bf39-c8d226ebc607";}; + +$KeywordRegistry.dsgvoReason = function(){ return "DSGVOReason";}; +$KeywordRegistry.dsgvoReason$manuel = function(){ return "607cfce8-1cc3-466e-9a69-4f0c9cf7e391";}; + $KeywordRegistry.textPlaceholder = function(){return "textPlaceholder";}; $KeywordRegistry.communicationMediumCampaign = function(){return "CommunicationMediumCampaign";}; @@ -225,6 +242,8 @@ $KeywordRegistry.bulkMailStatus = function(){return "BulkMailStatus";}; $KeywordRegistry.bulkMailStatus$notSent = function(){return "BULKMAILNOTSENT";}; $KeywordRegistry.bulkMailStatus$beingSent = function(){return "BULKMAILBEINGSENT";}; $KeywordRegistry.bulkMailStatus$sent = function(){return "BULKMAILSENT";}; +$KeywordRegistry.bulkMailStatus$planned = function(){return "BULKMAILPLANNED";}; +$KeywordRegistry.bulkMailStatus$missed = function(){return "BULKMAILMISSED";}; $KeywordRegistry.serialLetterStatus = function(){return "SerialLetterStatus";}; $KeywordRegistry.serialLetterStatus$notSent = function(){return "SERIALLETTERNOTSENT";}; @@ -352,4 +371,60 @@ $KeywordRegistry.notificationPriority$max = function(){ return "MAX";}; $KeywordRegistry.checklistEntryType = function(){return "ChecklistEntryType";} $KeywordRegistry.checklistEntryType$manual = function(){return "MANUAL";} -$KeywordRegistry.checklistEntryType$auto = function(){return "AUTO";} \ No newline at end of file +$KeywordRegistry.checklistEntryType$auto = function(){return "AUTO";} + +$KeywordRegistry.forecastKind = function(){return "ForecastKind";} +$KeywordRegistry.forecastKind$forecast = function(){return "FORECAST";} +$KeywordRegistry.forecastKind$planning = function(){return "PLANNING";} + +$KeywordRegistry.forecastStatus = function(){return "ForecastStatus";} +$KeywordRegistry.forecastStatus$inPlanning = function(){return "IN_PLANNING";} +$KeywordRegistry.forecastStatus$locked = function(){return "LOCKED";} +$KeywordRegistry.forecastStatus$planned = function(){return "PLANNED";} +$KeywordRegistry.checklistEntryType$auto = function(){return "AUTO";} + +$KeywordRegistry.communicationSettingStatus = function(){return "CommunicationSettingStatus";}; +$KeywordRegistry.communicationSettingStatus$pending = function(){return "COMMUNICATION_PENDING";}; +$KeywordRegistry.communicationSettingStatus$allowed = function(){return "COMMUNICATION_ALLOWED";}; +$KeywordRegistry.communicationSettingStatus$rejected = function(){return "COMMUNICATION_REJECTED";}; + +$KeywordRegistry.communicationChannelType = function(){return "CommunicationChannelType";}; +$KeywordRegistry.communicationChannelType$profiling = function(){return "COMMUNICATIONCHANNEL_PROFILING";}; +$KeywordRegistry.communicationChannelType$global = function(){return "COMMUNICATIONCHANNEL_GLOBAL";}; +$KeywordRegistry.communicationChannelType$communication = function(){return "COMMUNICATIONCHANNEL_COMMUNICATION";}; +$KeywordRegistry.communicationChannelType$address = function(){return "COMMUNICATIONCHANNEL_ADDRESS";}; + +$KeywordRegistry.weblinkType = function(){return "WeblinkType";}; +$KeywordRegistry.weblinkType$EMail = function() {return "WEBLINK_EMAIL"}; + +$KeywordRegistry.interestStatus = function(){return "InterestStatus";}; +$KeywordRegistry.interestStatus$active = function(){return "INTEREST_ACTIVE";}; +$KeywordRegistry.interestStatus$inactive = function(){return "INTEREST_INACTIVE";}; + +$KeywordRegistry.interestLinkStatus = function(){return "InterestLinkStatus";}; +$KeywordRegistry.interestLinkStatus$subscribed = function(){return "INTERESTLINK_SUBSCRIBED";}; +$KeywordRegistry.interestLinkStatus$notSubscribed = function(){return "INTERESTLINK_NOTSUBSCRIBED";}; + +$KeywordRegistry.deviceType = function(){return "DeviceType";}; +$KeywordRegistry.deviceType$mobile = function(){return "mobile";}; +$KeywordRegistry.deviceType$desktop = function(){return "desktop";}; +$KeywordRegistry.deviceType$tablet = function(){return "tablet";}; + +$KeywordRegistry.weblinkActionType = function(){return "WeblinkActionType";}; +$KeywordRegistry.weblinkActionType$startWorkflow = function(){return "LINKACTION_STARTWORKFLOW";}; +$KeywordRegistry.weblinkActionType$sendWorkflowSignal = function(){return "LINKACTION_SENDSIGNAL";}; + +$KeywordRegistry.advertisingStatus = function(){return "AdvertisingStatus";}; +$KeywordRegistry.advertisingStatus$Open = function(){return "ADVERTISINGSTATOPEN";}; +$KeywordRegistry.advertisingStatus$Sent = function(){return "ADVERTISINGSTATSENT";}; +$KeywordRegistry.advertisingStatus$followedUp = function(){return "ADVERTISINGFOLLOWEDUP";}; + +$KeywordRegistry.advertisingDelivery = function(){return "AdvertisingDelivery";}; +$KeywordRegistry.advertisingDelivery$personal = function(){return "ADVERTDELIVERYPERSONAL";}; +$KeywordRegistry.advertisingDelivery$post = function(){return "ADVERTDELIVERYPOST";}; +$KeywordRegistry.advertisingDelivery$mail = function(){return "ADVERTDELIVERYMAIL";}; + +$KeywordRegistry.emailFilterType = function(){return "EmailFilterType";}; +$KeywordRegistry.emailFilterType$blacklist = function(){return "EMAIL_FILTER_BLACKLIST";}; +$KeywordRegistry.emailFilterType$bounceSoft = function(){return "EMAIL_FILTER_BOUNCEHARD";}; +$KeywordRegistry.emailFilterType$bounceHard = function(){return "EMAIL_FILTER_BOUNCESOFT";}; \ No newline at end of file diff --git a/process/Keyword_lib/process.js b/process/Keyword_lib/process.js index 3f33564d881f46aa07e062522eb22d7a89dbbea8..4d7f8120f6aea55a909bf5caa13530687fbf07d1 100644 --- a/process/Keyword_lib/process.js +++ b/process/Keyword_lib/process.js @@ -201,16 +201,18 @@ KeywordUtils.getEntryNamesByContainer = function(pContainerName, pLocale) * * @param {String} pContainerName name of the keyword container for filtering * @param {String} [pLocale=locale depending on current client/servercontext] Language-value for translations +* @param {boolean=} pOnlyActive if true only active keywords will be returned * * @return {String[]} 2D-Array in the form of [[id1, translatedTitle1], [idN, translatedTitleN]] */ -KeywordUtils.getEntryNamesAndIdsByContainer = function(pContainerName, pLocale) +KeywordUtils.getEntryNamesAndIdsByContainer = function(pContainerName, pLocale, pOnlyActive) { //TODO: this can be propably removed when the "Salesproject_entity.REASONS.dropDownProcess.js" is replaced by a consumer var list = newSelect("AB_KEYWORD_ENTRY.KEYID, AB_KEYWORD_ENTRY.TITLE") .from("AB_KEYWORD_ENTRY") .join("AB_KEYWORD_CATEGORY", "AB_KEYWORD_ENTRY.AB_KEYWORD_CATEGORY_ID = AB_KEYWORD_CATEGORY.AB_KEYWORD_CATEGORYID") .where("AB_KEYWORD_CATEGORY.NAME", pContainerName) + .andIfSet("AB_KEYWORD_ENTRY.ISACTIVE", pOnlyActive ? "1" : null) .orderBy("AB_KEYWORD_ENTRY.SORTING asc, AB_KEYWORD_ENTRY.TITLE asc") .table(); diff --git a/process/LeadQuickAcquisition_lib/process.js b/process/LeadQuickAcquisition_lib/process.js index efb48f95f7ec27e1ecb289e918929a084d4d148a..80cf36921cd4df63f84f0c659fd5b4cfbfe51c72 100644 --- a/process/LeadQuickAcquisition_lib/process.js +++ b/process/LeadQuickAcquisition_lib/process.js @@ -1,4 +1,3 @@ -import("WsValidation_lib"); import("system.logging"); import("system.project"); import("system.neon"); @@ -10,9 +9,11 @@ import("system.net"); import("system.auth"); import("system.util"); import("system.fileIO"); +import("system.swing"); import("KeywordRegistry_basic"); import("Sql_lib"); import("Email_lib"); +import("Util_lib"); /** * Object for storing the webservice response and @@ -49,9 +50,10 @@ function LeadQuickAcquisition(){} /** * Method which calls the web service and gives the information back as object. * @param pFile the file which will send to the webservice. + * @param pLang The language which will be used to recognize the business card. * @return {Object} the reply from the web service. */ -LeadQuickAcquisition.callWebService = function(pFile) +LeadQuickAcquisition.callWebService = function(pFile, pLang) { var response = new WebserviceResponse(); @@ -63,7 +65,7 @@ LeadQuickAcquisition.callWebService = function(pFile) case "application/pdf": case "image/tiff": case "image/gif": - response = LeadQuickAcquisition.handleBusinessCard(pFile.bindata); + response = LeadQuickAcquisition.handleBusinessCard(pFile.bindata, pLang); break; case "message/rfc822": response = LeadQuickAcquisition.handleMailSig(Email.fromRFC(pFile.bindata)); @@ -80,16 +82,17 @@ LeadQuickAcquisition.callWebService = function(pFile) /** * Method which is especially for handling business cards. * @param pFile the file which will send to the webservice. + * @param pLang The language which will be used to recognize the business card. * @return {Object} the reply from the web service. */ -LeadQuickAcquisition.handleBusinessCard = function(pFile) +LeadQuickAcquisition.handleBusinessCard = function(pFile, pLang) { var isEnabled = LeadQuickAcquisitionBusinessCardUtils.isEnabled(); var response = null; if (isEnabled) { - response = LeadQuickAcquisitionBusinessCardUtils._callWebServiceBusinessCard(pFile); + response = LeadQuickAcquisitionBusinessCardUtils._callWebServiceBusinessCard(pFile, pLang); response = LeadQuickAcquisitionBusinessCardUtils._transformToResponse(response); } @@ -136,32 +139,66 @@ LeadQuickAcquisitionBusinessCardUtils.isEnabled = function() /** * Method which calls the webservice for business card. * @param pFile the file which will send to the webservice. - * @return {Object} the reply from the web service. + * @param pLang The language which will be used to recognize the business card. + * @return {Array} Result array (0: recognized business card, 1: language which was used for recognition). */ -LeadQuickAcquisitionBusinessCardUtils._callWebServiceBusinessCard = function(pFile) +LeadQuickAcquisitionBusinessCardUtils._callWebServiceBusinessCard = function(pFile, pLang) { var appId = project.getInstanceConfigValue("custom.abbyy.ocr.appId", ""); var pwd = project.getInstanceConfigValue("custom.abbyy.ocr.password", ""); - var language = "German"; - - //var reply = '{"Company":"eisner","Email":"mustermann@motyp.de","Address":"Hauptstraße 21 ■12345 Berlin","Web":null,"Phone":null,"Fax":"028 01 83 999 019","Job":"Fliesenverlegemeister","Mobile":"0171 23 456 78","Name":"Max Mustermann"}'; - var reply = plugin.run(null,"de.adito.plugin.OCR.BusinessCardRecognizer", [appId, pwd, pFile ,language])[0]; - - //Error codes are defined in the java plugin. - if (reply == "552") - { - throw new Error("Abbyy ocr plugin has not enough credits!"); - } - else if (reply == "555") - { - throw new Error("The Abbyy ocr plugin request could not be completed!"); - } - else if (reply == "550") + var authConf = auth.createConfigForBasicAuth() + .userName(appId) + .password(pwd); + var conf = net.createConfigForRestWebserviceCall() + .url("https://cloud.ocrsdk.com/processBusinessCard") + .actionType("POST") + .addQueryParameter("language", pLang) + .addQueryParameter("exportFormat", "xml") + .addQueryParameter("xml:WriteFieldComponents", "true") + .requestEntity(pFile); + + var response = util.decodeBase64String(net.callRestWebservice(conf, authConf)); + var responseXml = response.substring(response.indexOf("<response>"), response.length); + var taskId = new XML(responseXml).task.@id; + var getStatus = function(pTaskId){ + conf = net.createConfigForRestWebserviceCall() + .url("https://cloud.ocrsdk.com/getTaskStatus") + .addQueryParameter("taskId", pTaskId); + response = util.decodeBase64String(net.callRestWebservice(conf, authConf)); + responseXml = response.substring(response.indexOf("<response>")); + return [new XML(responseXml).task.@resultUrl, new XML(responseXml).task.@status]; + }; + + if (taskId) { - throw new Error("The Abbyy ocr plugin credentials are wrong!") + var resultUrl = ""; + var taskStatus = getStatus(taskId)[1]; + + while(taskStatus != "Completed" && taskStatus != "ProcessingFailed" && taskStatus != "Deleted" && taskStatus != "NotEnoughCredits") + { + [resultUrl, taskStatus] = getStatus(taskId); + } + + switch(taskStatus.toString()){ + case "Completed": + conf = net.createConfigForRestWebserviceCall() + .url(resultUrl) + .actionType("GET"); + response = util.decodeBase64String(net.callRestWebservice(conf, auth.createConfigForNoAuth())); + response = new XML(response.substring(response.indexOf("<businessCard"), response.indexOf("</document>"))); + break; + case "ProcessingFailed": + throw new Error("Abbyy: Processing of the business card failed!") + break; + case "Deleted": + throw new Error("Abbyy: The requested, recognized business card was deleted.") + break; + case "NotEnoughCredits": + throw new Error("Abbyy: Not enough credits!") + break; + } } - - return reply; + return [response, pLang]; } /** @@ -172,22 +209,32 @@ LeadQuickAcquisitionBusinessCardUtils._callWebServiceBusinessCard = function(pFi LeadQuickAcquisitionBusinessCardUtils._transformToResponse = function(pReply) { var response = new WebserviceResponse(); - var parsedData = JSON.parse(pReply); + var lang = pReply[1]; + pReply = pReply[0]; - if(parsedData.Company) response.companyName = parsedData.Company; - if(parsedData.Email) response.emailAddress = parsedData.Email; - if(parsedData.Web) response.website = parsedData.Web; - if(parsedData.Phone) response.phoneNumber = parsedData.Phone; - if(parsedData.Mobile) response.mobilePhone = parsedData.Mobile; - if(parsedData.Name) - { - response.firstName = parsedData.Name.substring(0, parsedData.Name.indexOf(" ", 0)); - response.lastName = parsedData.Name.substring(parsedData.Name.lastIndexOf(" ", parsedData.Name.indexOf(" ", 0))+1, parsedData.Name.length-1); - } - if (WsValidationUtils.isWsEnabled(WsValidationType.get().TYPE_ADDRESS_NOMINATIM) && parsedData.Address) + logging.log("Abbyy reponse: " + pReply.toString()); + + var getNodesValue = function(pResponse, pType) { - response.address = parsedData.Address; - } + return Utils.isNotNullOrEmptyString(pResponse.field.(@type==pType).value[0]) ? pResponse.field.(@type==pType).value[0].toString() : ""; + }; + + response.companyName = getNodesValue(pReply, "Company"); + response.emailAddress = getNodesValue(pReply, "Email"); + response.website = getNodesValue(pReply, "Web"); + response.phoneNumber = getNodesValue(pReply, "Phone"); + response.mobilePhone = getNodesValue(pReply, "Mobile"); + response.firstName = Utils.isNotNullOrEmptyString(pReply.field.(@type == "Name").fieldComponents.fieldComponent.(@type=="FirstName").value[0]) ? + pReply.field.(@type == "Name").fieldComponents.fieldComponent.(@type=="FirstName").value[0].toString() : ""; + response.lastName = Utils.isNotNullOrEmptyString(pReply.field.(@type == "Name").fieldComponents.fieldComponent.(@type=="LastName").value[0]) ? + pReply.field.(@type == "Name").fieldComponents.fieldComponent.(@type=="LastName").value[0].toString() : ""; + response.address = Utils.isNotNullOrEmptyString(pReply.field.(@type == "Address").fieldComponents.fieldComponent.(@type=="StreetAddress").value[0]) + ? pReply.field.(@type == "Address").fieldComponents.fieldComponent.(@type=="StreetAddress").value[0].toString() + : ""; + response.postalCode = Utils.isNotNullOrEmptyString(pReply.field.(@type == "Address").fieldComponents.fieldComponent.(@type=="ZipCode").value[0]) ? + pReply.field.(@type == "Address").fieldComponents.fieldComponent.(@type=="ZipCode").value[0].toString() : ""; + response.city = Utils.isNotNullOrEmptyString(pReply.field.(@type == "Address").fieldComponents.fieldComponent.(@type=="City").value[0]) ? + pReply.field.(@type == "Address").fieldComponents.fieldComponent.(@type=="City").value[0].toString() : ""; return response; } diff --git a/process/Leadimport_lib/process.js b/process/Leadimport_lib/process.js index d37c1f78ac48bda146e8791629958fe82d076044..9d57e38ddd2d803c9c12ce1660f873eae790895a 100644 --- a/process/Leadimport_lib/process.js +++ b/process/Leadimport_lib/process.js @@ -153,7 +153,7 @@ LeadImportUtils.loadImportFile = function(pBinId, pFieldSep, pFieldLimit, pRecor */ LeadImportUtils.importData = function(pDataFields, pDataTypes, pFieldDef, pFieldValues, pImportDefID, pAttrObject, pSource, pUser, pDate) { - var LeadValues = LeadImportUtils.setValues(pDataFields["LEAD"], pFieldDef, pFieldValues); // set the Lead values + var LeadValues = LeadImportUtils.setValues(pDataFields["LEADS"], pFieldDef, pFieldValues); // set the Lead values var orgid = ""; var persid = ""; @@ -214,7 +214,7 @@ LeadImportUtils.importData = function(pDataFields, pDataTypes, pFieldDef, pField LeadValues["ORGANISATION_ID"] = orgid; LeadValues["PERSON_ID"] = persid; - var leadId = LeadImportUtils.insertTable(pDataFields, pDataTypes ,LeadValues, "LEAD", pUser, pDate);//inserts the LEAD dataset + var leadId = LeadImportUtils.insertTable(pDataFields, pDataTypes ,LeadValues, "LEADS", pUser, pDate);//inserts the LEAD dataset LeadImportUtils.insertLeadAttr(pAttrObject, orgid, persid, LeadValues["DATE_NEW"], pUser, pDate, (orgRet && orgRet.length >= 4 && orgRet[3])); @@ -698,11 +698,6 @@ LeadImportUtils.insertTable = function(pDataFields, pDataTypes, pValues, pTable, TableValues[i] = pValues[Fields[i]]; } - if (db.getDatabaseType(vars.getString("$sys.dbalias")) == db.DBTYPE_MARIADB10) - { - pTable = "`" + pTable + "`"; - } - db.insertData(pTable, Fields, Types, TableValues); return pValues[TableID]; @@ -898,7 +893,7 @@ LeadImportUtils.getEntityFieldsPers = function(pPersDataFields, pContactDataFiel */ LeadImportUtils.scanLeadDups = function(pAllContactData) { - var dupUpdateLeadTable = "LEAD"; + var dupUpdateLeadTable = "LEADS"; var leadID = ""; var toUpdate = []; @@ -918,19 +913,19 @@ LeadImportUtils.scanLeadDups = function(pAllContactData) if (orgObj != undefined && Object.keys(orgObj).length > 0)//checks if there is an ORGANISATIONDUPLICATE { - let scanResultsOrg = DuplicateScannerUtils.scanForDuplicates("OrganisationDuplicates", "Organisation_entity", orgObj, null); - if (scanResultsOrg != null && scanResultsOrg.length > 0) + let scanResultsOrg = DuplicateScannerUtils.getDuplicateIdsByEntityObj("Organisation_entity", orgObj); + if (scanResultsOrg.length > 0) { - let insertCountOrg = DuplicateScannerUtils.cacheNewScanResults(orgObj["CONTACTID"], scanResultsOrg, "Organisation_entity"); + DuplicateScannerUtils.insertHasDuplicateEntry("Organisation_entity", orgObj["CONTACTID"], scanResultsOrg); dupOrg = true; } } if (persObj != undefined && Object.keys(persObj).length > 0)//checks if there is an PERSONDUPLICATE { - let scanResultsPers = DuplicateScannerUtils.scanForDuplicates("PersonDuplicates", "Person_entity", persObj, null); - if (scanResultsPers != null && scanResultsPers.length > 0) + let scanResultsPers = DuplicateScannerUtils.getDuplicateIdsByEntityObj("Person_entity", persObj); + if (scanResultsPers.length > 0) { - let insertCountPers = DuplicateScannerUtils.cacheNewScanResults(persObj["CONTACTID"], scanResultsPers, "Person_entity"); + DuplicateScannerUtils.insertHasDuplicateEntry("Person_entity", persObj["CONTACTID"], scanResultsPers); dupPers = true; } } diff --git a/process/Liquibase_lib/process.js b/process/Liquibase_lib/process.js index dc12de6cc2530f6df82778c8644d4add36b1ad65..733bfa14a3686d5aa328709d8db2f888f4c2233d 100644 --- a/process/Liquibase_lib/process.js +++ b/process/Liquibase_lib/process.js @@ -111,7 +111,7 @@ LiquiUtils.exportTableAsLiquibaseFiles = function(pPath, pTableName, pColumns, p LiquiUtils.getDataXmlFromDB = function(pAuthor, pLobPath, pTableName, pColumns, pCondition, pIncludeClearTableDirective, pAlias, pGenerateChangeSetIdFromArguments, pBlobCallbackFn) { var alias = pAlias || db.getCurrentAlias(); - var dbData = db.table("select " + columns.join(", ") + " from " + pTableName + " " + (pCondition ? "where " + pCondition : ""), alias); + var dbData = db.table("select " + pColumns.join(", ") + " from " + pTableName + " " + (pCondition ? "where " + pCondition : ""), alias); return LiquiUtils.getDataXml(pAuthor, pLobPath, pTableName, pColumns, dbData, pIncludeClearTableDirective, pAlias, pGenerateChangeSetIdFromArguments, pBlobCallbackFn); } diff --git a/process/Location_lib/process.js b/process/Location_lib/process.js index e57ae643c77ee9f3672899b0780fda0626ec4b3e..98a3aba621804153d9911ff1d69466de95863e25 100644 --- a/process/Location_lib/process.js +++ b/process/Location_lib/process.js @@ -1,3 +1,5 @@ +import("Sql_lib"); +import("system.db"); import("system.logging"); import("Address_lib"); import("Util_lib"); @@ -170,12 +172,12 @@ function LocationFinder () { this._minAccuracy = AddressParts.ZIPCODE(); this._accuracyOrder = [ - AddressParts.BUILDINGNO(), - AddressParts.ADDRESS(), - AddressParts.ZIPCODE(), - AddressParts.CITY(), - AddressParts.STATE(), - AddressParts.COUNTRY() + AddressParts.BUILDINGNO(), + AddressParts.ADDRESS(), + AddressParts.ZIPCODE(), + AddressParts.CITY(), + AddressParts.STATE(), + AddressParts.COUNTRY() ]; this._getLocationFn = LocationFinder._getLocationWithNominatim; this._isServiceAvailable = WsValidationUtils.isWsEnabled("TYPE_FULLADDRESS_NOMINATIM"); @@ -254,7 +256,7 @@ LocationFinder.prototype.isEnabled = function () * or the min accuracy has been exceeded (the default min accuracy is zipCode). * * @param {AddressObject} pAddress an object containing the address data - * @return {Object} object with the properties "lat", "lon" and "accuracy", or null if the address could not be found + * @return {Object} object with the properties "lat", "lon", "requestResult" and "accuracy", or null if the address could not be found */ LocationFinder.prototype.getGeoLocation = function (pAddress) { @@ -279,6 +281,7 @@ LocationFinder.prototype.getGeoLocation = function (pAddress) return { lat: location.lat, lon: location.lon, + requestResult: JSON.stringify(location), accuracy: mostAccurateField }; } @@ -286,4 +289,50 @@ LocationFinder.prototype.getGeoLocation = function (pAddress) searchAddress[mostAccurateField] = null; } return null; +} + +/** + * Update LAT, LON and VALIDATION of the given Addresses + * This function is call-by-reference and the errors of the updates will be returned by pMalformedAddressData. + * + * @param {pMalformedAddressData} to collect the errors of the updates + * @param {pAddresses} pAddress an object containing the address data + * + * @return {void} + */ +LocationFinder.PagingFunctionSetLocations = function (pMalformedAddressData, pAddresses) +{ + var locationUpdates = []; + pAddresses.forEach(function ([addressId, address, buildingno, zip, city, country, state, validationResult]) + { + var addressData = new AddressObject(address, buildingno, zip, city, country, state); + try + { + var location = locationSearch.getGeoLocation(addressData); + + if (location) + { + let fields = ["LAT", "LON"]; + let values = [location.lat, location.lon]; + + if (Utils.isNullOrEmpty(validationResult)) + { + fields.push("VALIDATION_RESULT"); + values.push(location.requestResult); + } + + locationUpdates.push(["ADDRESS", fields, null, values, + newWhere("ADDRESS.ADDRESSID", addressId).buildCondition()]); + } + } + catch (pException) + { + pMalformedAddressData.push(addressId); + } + }); + + if (locationUpdates.length > 0) + { + db.updates(locationUpdates); + } } \ No newline at end of file diff --git a/process/Loghistory_lib/process.js b/process/Loghistory_lib/process.js index 48aecff059e4373750874c2fbb5daf68473c9360..e7f2e76a4ced14bd6999b2fa7870c198ea6b3cb7 100644 --- a/process/Loghistory_lib/process.js +++ b/process/Loghistory_lib/process.js @@ -1,3 +1,4 @@ +import("Context_lib"); import("system.vars"); import("system.util"); import("system.logging"); @@ -19,6 +20,12 @@ import("Util_lib"); import("KeywordRegistry_basic"); import("system.entities"); +const AuditSqlActions = { + INSERT: "I", + UPDATE: "U", + DELETE: "D" +}; + /** * object for writing the LogHistory based on audit-changes * this object will be probably only usefull within the "process_audit"-process @@ -160,11 +167,11 @@ LogHistoryExecutor.prototype.generateLogHistory = function (pIdvalue, pExtra) for(let i = 0; i < this.columns.length; i++ ) { - if (this.sqlAction == 'D' || this.sqlAction == 'U') oldvalues[this.columns[i]] = this.oldValues[i]; - if (this.sqlAction == 'I' || this.sqlAction == 'U') newvalues[this.columns[i]] = this.newValues[i]; + if (this.sqlAction == AuditSqlActions.DELETE || this.sqlAction == AuditSqlActions.UPDATE) oldvalues[this.columns[i]] = this.oldValues[i]; + if (this.sqlAction == AuditSqlActions.INSERT || this.sqlAction == AuditSqlActions.UPDATE) newvalues[this.columns[i]] = this.newValues[i]; } - if (this.sqlAction == 'D') newvalues = oldvalues; - if ((this.sqlAction == 'D' || this.sqlAction == 'I') && newvalues[conf.IDs[1]]) + if (this.sqlAction == AuditSqlActions.DELETE) newvalues = oldvalues; + if ((this.sqlAction == AuditSqlActions.DELETE || this.sqlAction == AuditSqlActions.INSERT) && newvalues[conf.IDs[1]]) { pIdvalue = newvalues[conf.IDs[0]]; var data = this._getDataForExtras(newvalues[conf.IDs[1]], newvalues); @@ -173,7 +180,7 @@ LogHistoryExecutor.prototype.generateLogHistory = function (pIdvalue, pExtra) else //this may happen for Attributes of type VOID (=attributes that have no values, compareable to "tags") description.push(conf.Description + " " + data[0]); } - if (this.sqlAction == 'U') + if (this.sqlAction == AuditSqlActions.UPDATE) { var ids = newSelect(conf.IDs).from(this.affectedTable).where([this.affectedTable, this.affectedTable + "ID"], pIdvalue).arrayRow(); pIdvalue = ids[0]; @@ -213,20 +220,20 @@ LogHistoryExecutor.prototype.generateLogHistory = function (pIdvalue, pExtra) if (references[this.columns[i]]) { - if (this.sqlAction == "I") references[this.columns[i]].id = this.newValues[i]; - if (this.sqlAction == "D") references[this.columns[i]].id = this.oldValues[i]; + if (this.sqlAction == AuditSqlActions.INSERT) references[this.columns[i]].id = this.newValues[i]; + if (this.sqlAction == AuditSqlActions.DELETE) references[this.columns[i]].id = this.oldValues[i]; } var logfield = columnStructure[this.columns[i]]; if (logfield && logfield.log) { - if (this.sqlAction != 'I' && this.oldValues[i] != "") + if (this.sqlAction != AuditSqlActions.INSERT && this.oldValues[i] != "") oldvalues[i] = this._getFormattedValue(this.columns[i], logfield, this.oldValues[i]); - if (this.sqlAction != 'D' && this.newValues[i] != "") + if (this.sqlAction != AuditSqlActions.DELETE && this.newValues[i] != "") newvalues[i] = this._getFormattedValue(this.columns[i], logfield, this.newValues[i]); var logfieldTitle = (logfield.title ? translate.text(logfield.title, this.translationLanguage) : translate.text("Value", this.translationLanguage)); - if (this.sqlAction == 'U' && oldvalues[i] != newvalues[i]) + if (this.sqlAction == AuditSqlActions.UPDATE && oldvalues[i] != newvalues[i]) { //TODO: CLOB-check should be done by viewing the structure column type //use .trim() for "[CLOB]" check because in some case the value "[CLOB]\n" my be given @@ -237,14 +244,14 @@ LogHistoryExecutor.prototype.generateLogHistory = function (pIdvalue, pExtra) } //use .trim() for "[CLOB]" check because in some case the value "[CLOB]\n" my be given - if (this.sqlAction == 'I' && newvalues[i] != "" && newvalues[i] != null && newvalues[i].trim() != "[CLOB]") + if (this.sqlAction == AuditSqlActions.INSERT && newvalues[i] != "" && newvalues[i] != null && newvalues[i].trim() != "[CLOB]") description.push(logfieldTitle + ": \"" + newvalues[i] + "\""); //use .trim() for "[CLOB]" check because in some case the value "[CLOB]\n" my be given - if (this.sqlAction == 'D' && oldvalues[i] != "" && oldvalues[i] != null && oldvalues[i].trim() != "[CLOB]") + if (this.sqlAction == AuditSqlActions.DELETE && oldvalues[i] != "" && oldvalues[i] != null && oldvalues[i].trim() != "[CLOB]") description.push(logfieldTitle + ": \"" + oldvalues[i] + "\""); } } - if (this.sqlAction == "U") + if (this.sqlAction == AuditSqlActions.UPDATE) { for (let index in references) references[index].id = newSelect(index).from(this.affectedTable).where([this.affectedTable, primaryKey], this.idValue).cell(); } @@ -252,9 +259,9 @@ LogHistoryExecutor.prototype.generateLogHistory = function (pIdvalue, pExtra) if (description.length > 0) { - if (this.sqlAction == 'I') description = translate.withArguments("%0 added.", [description.join(",\n")], this.translationLanguage); - else if (this.sqlAction == 'U') description = translate.withArguments("%0 modified.", [description.join(",\n")], this.translationLanguage); - else if (this.sqlAction == 'D') description = translate.withArguments("%0 deleted.", [description.join(",\n")], this.translationLanguage); + if (this.sqlAction == AuditSqlActions.INSERT) description = translate.withArguments("%0 added.", [description.join(",\n")], this.translationLanguage); + else if (this.sqlAction == AuditSqlActions.UPDATE) description = translate.withArguments("%0 modified.", [description.join(",\n")], this.translationLanguage); + else if (this.sqlAction == AuditSqlActions.DELETE) description = translate.withArguments("%0 deleted.", [description.join(",\n")], this.translationLanguage); } return [description, pIdvalue, references]; } @@ -343,8 +350,8 @@ LogHistoryExecutor.prototype._getDataForExtras = function(pId, pValues) */ LogHistoryExecutor.prototype._getCalendarDescription = function (pIndex) { - if (this.sqlAction != "D") this.newValues[pIndex] = _getEntry("DESCRIPTION:", this.newValues[pIndex]); - if (this.sqlAction != "I") this.oldValues[pIndex] = _getEntry("DESCRIPTION:", this.oldValues[pIndex]); + if (this.sqlAction != AuditSqlActions.DELETE) this.newValues[pIndex] = _getEntry("DESCRIPTION:", this.newValues[pIndex]); + if (this.sqlAction != AuditSqlActions.INSERT) this.oldValues[pIndex] = _getEntry("DESCRIPTION:", this.oldValues[pIndex]); function _getEntry(pWert, pVcomponent) { diff --git a/process/MarketingCondition_lib/MarketingCondition_lib.aod b/process/MarketingCondition_lib/MarketingCondition_lib.aod new file mode 100644 index 0000000000000000000000000000000000000000..5e55b885b065114498b81f6bb9b0c95e4eafbb67 --- /dev/null +++ b/process/MarketingCondition_lib/MarketingCondition_lib.aod @@ -0,0 +1,10 @@ +<?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.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> + <name>MarketingCondition_lib</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <process>%aditoprj%/process/MarketingCondition_lib/process.js</process> + <alias>Data_alias</alias> + <variants> + <element>LIBRARY</element> + </variants> +</process> diff --git a/process/MarketingCondition_lib/process.js b/process/MarketingCondition_lib/process.js new file mode 100644 index 0000000000000000000000000000000000000000..f6033c7d1a46915e82ac55d20eb36b10b43e6d4c --- /dev/null +++ b/process/MarketingCondition_lib/process.js @@ -0,0 +1,177 @@ +import("Util_lib"); +import("JditoFilter_lib"); +import("system.vars"); +import("Sql_lib"); +import("KeywordRegistry_basic"); + +/** + * Object for building communication settings sql conditions. + */ +function CommunicationSettingsCondition () +{ + this._contactIdSql = "CONTACT.CONTACTID"; + this._contactId = null; + this._channelType = null; + this._medium = null; + this._channelIdSql = null; + this._settingStatus = null; + this._existsOperator = SqlBuilder.EXISTS(); +} + +CommunicationSettingsCondition.prototype.contactIdField = function (pContactIdSql) +{ + this._contactIdSql = pContactIdSql; + this._contactId = null; + return this; +} + +CommunicationSettingsCondition.prototype.contactId = function (pContactId) +{ + this._contactId = pContactId; + this._contactIdSql = null; + return this; +} + +CommunicationSettingsCondition.prototype.existNoSettings = function () +{ + this._existsOperator = SqlBuilder.NOT_EXISTS(); + return this; +} + +CommunicationSettingsCondition.prototype.existSettings = function () +{ + this._existsOperator = SqlBuilder.EXISTS(); + return this; +} + +/** + * Sets the medium and the source of the communication address for filtering the communication settings. + * + * @param {String} pMedium communication medium + * @param {String} pAddressSql sql field or expression for the communication address + * @return {CommunicationSettingsCondition} current object + */ +CommunicationSettingsCondition.prototype.medium = function (pMedium, pAddressSql) +{ + this._channelType = $KeywordRegistry.communicationChannelType$communication(); + this._medium = pMedium; + if (pAddressSql) + this._channelIdSql = "( "+ pAddressSql + " )"; + return this; +} + +/** + * Sets the medium to email and the source of the email address for filtering the communication settings. + * + * @param {String} pAddressSql sql field or expression for the email address + * @return {CommunicationSettingsCondition} current object + */ +CommunicationSettingsCondition.prototype.emails = function (pAddressSql) +{ + return this.medium($KeywordRegistry.communicationMediumCampaign$mail(), pAddressSql); +} + +/** + * Sets the source of the address to filter the communication settings by address. + * + * @param {String} pAddressSql sql field or expression for the address id + * @return {CommunicationSettingsCondition} current object + */ +CommunicationSettingsCondition.prototype.address = function (pAddressSql) +{ + this._channelType = $KeywordRegistry.communicationChannelType$address(); + if (pAddressSql) + { + this._channelIdSql = "( "+ pAddressSql + " )"; + } + return this; +} + +/** + * Only fetch communication settings with the status 'rejected' + * + * @return {CommunicationSettingsCondition} current object + */ +CommunicationSettingsCondition.prototype.rejected = function () +{ + this._settingStatus = $KeywordRegistry.communicationSettingStatus$rejected(); + return this; +} + +/** + * Only fetch communication settings with the status 'allowed' + * + * @return {CommunicationSettingsCondition} current object + */ +CommunicationSettingsCondition.prototype.allowed = function () +{ + this._settingStatus = $KeywordRegistry.communicationSettingStatus$allowed(); + return this; +} + +/** + * Only fetch communication settings with the status 'pending' + * + * @return {CommunicationSettingsCondition} current object + */ +CommunicationSettingsCondition.prototype.pending = function () +{ + this._settingStatus = $KeywordRegistry.communicationSettingStatus$pending(); + return this; +} + +CommunicationSettingsCondition.prototype.status = function (pStatus) +{ + this._settingStatus = pStatus; + return this; +} + +/** + * Builds a sub select for fetching the communication settings with the properies as configured. + * + * @param {String|Array} [pSelectFields=COMMUNICATIONSETTINGSID] columns to select + * @return {SqlBuilder} SqlBuilder object with the full sql select + */ +CommunicationSettingsCondition.prototype.buildSelect = function (pSelectFields) +{ + if (pSelectFields == undefined) + pSelectFields = "COMMUNICATIONSETTINGS.COMMUNICATIONSETTINGSID"; + var sql = newSelect(pSelectFields) + .from("COMMUNICATIONSETTINGS") + .whereIfSet("COMMUNICATIONSETTINGS.STATUS", this._settingStatus); + + if (this._contactIdSql) + { + sql.and("COMMUNICATIONSETTINGS.CONTACT_ID = " + this._contactIdSql) + } + else if (this._contactId) + { + sql.and("COMMUNICATIONSETTINGS.CONTACT_ID", this._contactId); + } + + var channelCondition = newWhere("COMMUNICATIONSETTINGS.CHANNEL_TYPE", $KeywordRegistry.communicationChannelType$global()); + if (this._channelType) + { + var specificChannelCondition = newWhere("COMMUNICATIONSETTINGS.CHANNEL_TYPE", this._channelType) + .andIfSet("COMMUNICATIONSETTINGS.MEDIUM", this._medium); + if (this._channelIdSql) + { + specificChannelCondition.and(newWhere("COMMUNICATIONSETTINGS.CHANNEL_ID = " + this._channelIdSql) + .or("COMMUNICATIONSETTINGS.CHANNEL_ID is null")); + } + channelCondition.or(specificChannelCondition); + } + sql.and(channelCondition); + + return sql; +} + +/** + * Builds a sql condition for fetching only contacts with communication settings that have the configured properties. + * + * @return {SqlBuilder} sql condition + */ +CommunicationSettingsCondition.prototype.buildCondition = function () +{ + return newWhere(null, this.buildSelect(), this._existsOperator); +} diff --git a/process/RebuildAllDuplicateCaches_serverProcess/RebuildAllDuplicateCaches_serverProcess.aod b/process/MarketingCondition_test/MarketingCondition_test.aod similarity index 71% rename from process/RebuildAllDuplicateCaches_serverProcess/RebuildAllDuplicateCaches_serverProcess.aod rename to process/MarketingCondition_test/MarketingCondition_test.aod index 11432054cc7356358ef25e9d7b657ca5973bba2f..e1fabb654e0c28f0747afcbf030302c26d996392 100644 --- a/process/RebuildAllDuplicateCaches_serverProcess/RebuildAllDuplicateCaches_serverProcess.aod +++ b/process/MarketingCondition_test/MarketingCondition_test.aod @@ -1,8 +1,8 @@ <?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.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> - <name>RebuildAllDuplicateCaches_serverProcess</name> + <name>MarketingCondition_test</name> <majorModelMode>DISTRIBUTED</majorModelMode> - <process>%aditoprj%/process/RebuildAllDuplicateCaches_serverProcess/process.js</process> + <process>%aditoprj%/process/MarketingCondition_test/process.js</process> <variants> <element>EXECUTABLE</element> </variants> diff --git a/entity/Prod2prod_entity/entityfields/source_id/valueProcess.js b/process/MarketingCondition_test/process.js similarity index 100% rename from entity/Prod2prod_entity/entityfields/source_id/valueProcess.js rename to process/MarketingCondition_test/process.js diff --git a/process/MimeType_lib/process.js b/process/MimeType_lib/process.js index 6e262c76ea89a5e1c433972f975821589021a792..d5a07f0fc22ef7344f9a92d3b80d48f7c09c7da8 100644 --- a/process/MimeType_lib/process.js +++ b/process/MimeType_lib/process.js @@ -68,4 +68,30 @@ MimeTypes.WEBM = function() {return "video/webm";}; MimeTypes.isXML = function (pMimeType) { return pMimeType == MimeTypes.XML() || pMimeType == MimeTypes.XML_APP(); -} \ No newline at end of file +} + +/** + * tests if the given mime type can open + * + * @param {String} pMimeType mime type + * @return {Boolean} if it can open + */ +MimeTypes.canOpenMimeTypeInBrowser = function (pMimeType) +{ + return ( +// application + pMimeType == MimeTypes.PDF() || + pMimeType == MimeTypes.XML_APP() || + +// text + pMimeType == MimeTypes.TXT() || + pMimeType == MimeTypes.XML() || + +// images + pMimeType == MimeTypes.BMP() || + pMimeType == MimeTypes.GIF() || + pMimeType == MimeTypes.JPEG() || + pMimeType == MimeTypes.PNG() || + pMimeType == MimeTypes.SVG() + ); +} diff --git a/process/Observation_lib/process.js b/process/Observation_lib/process.js index b2e80061c7b805fc9bcbfa405a8790c1bc257f5a..51e6bfcf7ebcccc182274335db9eb08593d52938 100644 --- a/process/Observation_lib/process.js +++ b/process/Observation_lib/process.js @@ -1,3 +1,4 @@ +import("Util_lib"); import("system.neon"); import("KeywordRegistry_basic"); import("system.logging"); @@ -20,23 +21,43 @@ import("system.db"); import("system.favorite"); import("system.neon"); -function Observation(){} +/** + * This class handels the Observations. + * + * @class + */ +function Observation(pVariable, pStoredFilterResults, pStoredObservedFields) +{ + this.callerVariables = pVariable || {}; + this.storedFilterResults = pStoredFilterResults || {}; + this.storedObservedFields = pStoredObservedFields || {}; +} -Observation.OBJECT_TYPE = function () { +Observation.OBJECT_TYPE = function () +{ return "OBJECT_TYPE_Dependency"; } -Observation.OBJECT_IDs = function () { +Observation.OBJECT_IDs = function () +{ return "OBJECT_IDs_Dependency"; } -Observation.PRIO = function () { - return "PRIORITY"; +Observation.PRIO = function () +{ + return "PRIORITY_NOTIFICATION_Observation"; } -Observation.CONTENTTITLE = function () { +Observation.CONTENTTITLE = function () +{ return "OBJECT_CONTENTTITLE"; } -Observation.ENTITY_NAME = function () { +Observation.ENTITY_NAME = function () +{ return "ENTITY_NAME"; } +Observation.RECORDS_SPECIFIC_VALUES = function () +{ + return "RECORDS_SPECIFIC_VALUES"; +} + /** * Thees are the Entities which can be selected in the ObservationFilter_view if you have the rights. */ @@ -68,170 +89,340 @@ Observation.OBSERVABLE_ENTITIES = function () { Observation.parseVariableIfNeed = function(pVariables,pVariable) { if (pVariables[pVariable] && typeof pVariables[pVariable] !== 'object' && pVariables[pVariable] !== null) + { pVariables[pVariable] = JSON.parse(pVariables[pVariable]); + } } /** - * Checks the observations for the specific changed data set and then forwards them to the Observation._notifiyUsers() function. + * Bringing variables into the right format. This fucntion is call by reference. * * @param {Object} [pVariables] the Variables which were set in the Workflow_lib - * @param {String} [pObservationId] the id of the parent observation. This variable is required for the recursion. - * * @return {Void} */ -Observation.checkObservation = function(pVariables, pObservationId) +Observation.parseALLVariable = function(pVariables) { - if (pVariables[WorkflowVariables.TRIGGER()]) + Observation.parseVariableIfNeed(pVariables, WorkflowVariables.CHANGED_ROWS()); + Observation.parseVariableIfNeed(pVariables, WorkflowVariables.CHANGED_ROWS_TYPES()); + Observation.parseVariableIfNeed(pVariables, WorkflowVariables.ROWDATA()); + Observation.parseVariableIfNeed(pVariables, WorkflowVariables.INITIAL_ROWDATA()); + Observation.parseVariableIfNeed(pVariables, WorkflowVariables.FIELDS_TO_LOAD()); + pVariables[Observation.ENTITY_NAME()] = ContextUtils.getEntity(pVariables[WorkflowVariables.TARGET_CONTEXT()]); + + try { - // parse all JSON-Objects - Observation.parseVariableIfNeed(pVariables, WorkflowVariables.CHANGED_ROWS()); - Observation.parseVariableIfNeed(pVariables, WorkflowVariables.CHANGED_ROWS_TYPES()); - Observation.parseVariableIfNeed(pVariables, WorkflowVariables.ROWDATA()); - Observation.parseVariableIfNeed(pVariables, WorkflowVariables.INITIAL_ROWDATA()); - pVariables[Observation.ENTITY_NAME] = ContextUtils.getEntity(pVariables[WorkflowVariables.TARGET_CONTEXT()]); + Observation.parseVariableIfNeed(pVariables, WorkflowVariables.TARGET_ID()); + } + catch (e if e instanceof SyntaxError) + { + let id = pVariables[WorkflowVariables.TARGET_ID()]; + // If in the Variable is only a singel variabel in string format + if (id) + { + pVariables[WorkflowVariables.TARGET_ID()] = [id]; + } + else + { + throw e; + } + } +} + +/** + * Get all Observations + * + * @param {Void} [pTriger] the trigger of the change e.g. "TRIGGEREVENTUPDATE, TRIGGEREVENTDELETE, TRIGGEREVENTINSERT" + * @param {Void} [pTargetIds] the object id of the changed row + * @param {Void} [pTargetContext] the context of the changed row + * @param {Void} [pObservationId] the id of the parend observation + * @return {Array[][]} + */ +Observation.getObservations = function(pTriger, pTargetIds, pTargetContext, pObservationId) +{ + + // get all observations with the ovservers + let observations = newSelect(["OBSERVATION.OBJECT_ID", "OBSERVATION.OBJECT_FILTER" ,"OBSERVATION.OBSERVER", "OBSERVATION.OBJECT_FIELD", "O.OBJECT_TYPE", "OBSERVATION.OBSERVATION_ID", "OBSERVATION.NOTIFICATION_PRIO"]) + .from("OBSERVATION") + .leftJoin("OBSERVATION", "OBSERVATION.OBSERVATION_ID = O.OBSERVATIONID", "O") + .where( + newWhereIfSet("OBSERVATION.OBJECT_ID", pTargetIds, SqlBuilder.IN()) + .or("OBSERVATION.OBJECT_ID IS NULL")) + .and("OBSERVATION.OBJECT_TYPE", pTargetContext); - var observers = {}; - // get all observations with the ovservers - var observations = newSelect(["OBSERVATION.OBJECT_ID", "OBSERVATION.OBJECT_FILTER" ,"OBSERVATION.OBSERVER", "OBSERVATION.OBJECT_FIELD", "O.OBJECT_TYPE", "OBSERVATION.OBSERVATION_ID", "OBSERVATION.NOTIFICATION_PRIO"]) - .from("OBSERVATION") - .leftJoin("OBSERVATION", "OBSERVATION.OBSERVATION_ID = O.OBSERVATIONID", "O") - .where( - newWhere("OBSERVATION.OBJECT_ID", pVariables[WorkflowVariables.TARGET_ID()]) - .or("OBSERVATION.OBJECT_ID IS NULL")) - .and("OBSERVATION.OBJECT_TYPE", pVariables[WorkflowVariables.TARGET_CONTEXT()]); + if (pObservationId) + { + // if the variable is set the parend observation is search for. + observations.andIfSet("OBSERVATION.OBSERVATIONID", pObservationId) + } + else + { + observations.and("OBSERVATION." + pTriger, "1"); + } - if (pObservationId) + return observations.table(); +} + +/** + * Look whether the ids are in the filter object included and the observer has the permissions to see the data sets. + * + * @param {Void} [pUserTitle] the title of the observer + * @param {Void} [pFilterObject] the filterobject with the observer is observing + * @param {Void} [pID] the data row with the observer is observing + * @return {Array} + */ +Observation.prototype.checkFilterAndPermissions = function (pUserTitle, pFilterObject, pID) +{ + let storedIndex = pUserTitle; + let filterResult = {}; + var config = entities.createConfigForLoadingRows(); + + if (pFilterObject) + { + storedIndex += pFilterObject; + storedIndex += this.callerVariables[WorkflowVariables.TARGET_ID()]; + config.filter(JSON.stringify(JSON.parse(pFilterObject).filter)) + .uids(this.callerVariables[WorkflowVariables.TARGET_ID()]); + } + else // if pFilterObject is null this is an id observation. + { + storedIndex += pID; + config.uids([pID]); + } + + // check if the observation has been alredy checkt + if (this.storedFilterResults[storedIndex]) + { + return this.storedFilterResults[storedIndex]; + } + + try + { + config.user(pUserTitle) + .entity(this.callerVariables[Observation.ENTITY_NAME()]) + .fields(["#UID", "#CONTENTTITLE"].concat(this.callerVariables[WorkflowVariables.FIELDS_TO_LOAD()])); + + entities.getRows(config).forEach(function (pRow) { + if (pRow["#UID"] && pRow["#CONTENTTITLE"]) + { + let res; + if (this.callerVariables[WorkflowVariables.FIELDS_TO_LOAD()]) + { + res = [pRow["#CONTENTTITLE"], pRow] + } + else // if dependency check --> FIELDS_TO_LOAD = null + { + res = pRow["#CONTENTTITLE"] + } + filterResult[pRow["#UID"]] = res; + } + }, this); + } + catch (e) + { + // This Catch is needed for the permission exeptions and the recursion + logging.log(e, logging.ERROR); + filterResult = null; + } + + this.storedFilterResults[storedIndex] = filterResult; + return filterResult +} + +/** + * Parse the observed fields of the observer and filter the ones the observer have no rights out + * + * @param {Void} [pObjectFields] the observed fileds in Multi-string (e.g. "; ;+ ;++ ACTIVITY.DIRECTION;++ DIRECTION;++ ;+ Richtung;+ ; ;+ ;++ ACTIVITY.ENTRYDATE;++ ENTRYDATE;++ ;+ Datum;+ ; ;+ ;++ ACTIVITY.INFO;++ INFO;++ ;+ Beschreibung;+ ; ;+ ;++ ACTIVITY.CATEGORY;++ CATEGORY;++ ;+ Kategorie;+ ; ;+ ;++ ACTIVITY.SUBJECT;++ SUBJECT;++ ;+ Betreff;+ ; ;+ ;++ ACTIVITY.RESPONSIBLE;++ RESPONSIBLE;++ ;+ Verantwortlich;+ ; ") + * @param {Void} [pUserTitle] the observer title + * @return {Object} + */ +Observation.prototype.parseAndFilterObjectFields = function (pObjectFields, pUserTitle) +{ + let storedIndex = pObjectFields + pUserTitle; + + if (this.storedObservedFields[storedIndex]) + { + return this.storedObservedFields[storedIndex] + } + + let observeFields = {}; + observeFields[Observation.RECORDS_SPECIFIC_VALUES()] = {}; + text.decodeMS(pObjectFields).forEach(function (observeFiled) { + let field = text.decodeMS(observeFiled); + let fieldNames = text.decodeMS(field[0]); + if (this.callerVariables[WorkflowVariables.CHANGED_ROWS()].indexOf(fieldNames[0]) > -1) { - // if the variable is set the parend observation is search for. - observations.andIfSet("OBSERVATION.OBSERVATIONID", pObservationId) + let displayValueField = "#COLUMNEXP_____" + fieldNames[1] + ".displayValue"; + let observedField = this.callerVariables[WorkflowVariables.ROWDATA()][displayValueField] ? displayValueField : fieldNames[0]; + if (tools.hasPermission(tools.PERMISSION_VIEW, this.callerVariables[Observation.ENTITY_NAME()], fieldNames[1], pUserTitle)) + { + observeFields[observedField] = field[1]; + } } - else + }, this); + + this.storedObservedFields[storedIndex] = observeFields; + return observeFields; +} + +/** + * Chack if the Observation has a Dependenencie and if it has the observation will be checked recursive. + * This function is call by references and the dependent ids and context will saved in the pTempObserver object. + * + * @param {String} [pObserver] the Observer ID + * @param {String} [pDependentContext] the context of the parend observation + * @param {Object} [pTempObserver] the tempObservation of + * @param {String} [pDependentObservationId] the id of the parend observation + * @return {Void} + */ +Observation.prototype._checkDependencies = function (pObserver, pDependentContext, pTempObserver, pDependentObservationId) +{ + let tempOriginalRowdata = JSON.stringify(this.callerVariables[WorkflowVariables.ROWDATA()]); + let targetEntity = ContextUtils.getEntity(this.callerVariables[WorkflowVariables.TARGET_CONTEXT()]); + let dependentEntity = ContextUtils.getEntity(pDependentContext); + + var dependentObject = Dependency.mapping()[targetEntity][dependentEntity]; + + var dependentCheckVars = {} + dependentCheckVars[WorkflowVariables.TRIGGER()] = this.callerVariables[WorkflowVariables.TRIGGER()]; + dependentCheckVars[WorkflowVariables.TARGET_CONTEXT()] = pDependentContext; + dependentCheckVars[WorkflowVariables.EVENT_USER()] = pObserver; + + Object.keys(pTempObserver[pObserver][Observation.RECORDS_SPECIFIC_VALUES()]).forEach(function (pRecordID) { + let specificRecordValues = pTempObserver[pObserver][Observation.RECORDS_SPECIFIC_VALUES()][pRecordID]; + Observation._syncRecordsSpecificValues(specificRecordValues, this.callerVariables[WorkflowVariables.ROWDATA()]); + + var dependentIds = dependentObject.getUIDsfn(this.callerVariables[WorkflowVariables.ROWDATA()], this.callerVariables[WorkflowVariables.INITIAL_ROWDATA()]); + + if (!dependentObject.options.isOwnNotified) + { + specificRecordValues[Observation.OBJECT_TYPE()] = pDependentContext; + } + + dependentCheckVars[WorkflowVariables.TARGET_ID()] = dependentIds; + + var results = new Observation(dependentCheckVars, this.storedFilterResults) + .checkObservation(pDependentObservationId); + + if (results) + { + specificRecordValues[Observation.OBJECT_IDs()] = results; + } + }, this) + this.callerVariables[WorkflowVariables.ROWDATA()] = JSON.parse(tempOriginalRowdata); +} + +/** + * Bring the Fields in the right format. + * + * @param {Array} [pFilterResults] + * @return {Object} + */ +Observation.prototype._formatFieldsToLoad = function (pFilterResults) +{ + let res = {}; + let fieldsToLoad = this.callerVariables[WorkflowVariables.FIELDS_TO_LOAD()] + + if (Array.isArray(fieldsToLoad)) + { + let recordFields = {}; + let pro = project.getRecordContainerModel(this.callerVariables[Observation.ENTITY_NAME()])["recordFieldMappings"]; + for (let index in pro) { - observations.and("OBSERVATION." + pVariables[WorkflowVariables.TRIGGER()], "1"); + fieldName = pro[index].name.split("."); + if (fieldsToLoad.indexOf(fieldName[0]) > -1 || fieldsToLoad.indexOf(pro[index].name) > -1) + { + Object.keys(pFilterResults).forEach(function (pRowID) + { + if (!res[pRowID]) + { + res[pRowID] = {}; + res[pRowID]["#CONTENTTITLE"] = pFilterResults[pRowID][0]; + } + + if (fieldName[1] === "value") + { + res[pRowID][(pro[index].recordfield || pro[index].name)] = pFilterResults[pRowID][1][fieldName[0]]; + } + else + { + res[pRowID]["#COLUMNEXP_____" +fieldName[0] + ".displayValue"] = pFilterResults[pRowID][1][pro[index].name]; + } + }); + } } + } + else + { + Object.keys(pFilterResults).forEach(function (pRowID) + { + if (!res[pRowID]) + { + res[pRowID] = {}; + res[pRowID]["#CONTENTTITLE"] = pFilterResults[pRowID][0]; + } + }); + } + return res; +} + +/** + * Checks the observations for the specific changed data set and then forwards them to the Observation._notifiyUsers() function. + * + * @param {String} [pObservationId] the id of the parent observation. This variable is required for the recursion. + * + * @return {Void} + */ +Observation.prototype.checkObservation = function(pObservationId) +{ + if (this.callerVariables[WorkflowVariables.TRIGGER()]) + { + Observation.parseALLVariable(this.callerVariables); - observations = observations.table(); + var observers = {}; + this.observations = Observation.getObservations( + this.callerVariables[WorkflowVariables.TRIGGER()], + this.callerVariables[WorkflowVariables.TARGET_ID()], + this.callerVariables[WorkflowVariables.TARGET_CONTEXT()], + pObservationId + ); - for (let i = 0; i < observations.length; i++) + for (let i = 0; i < this.observations.length; i++) { var tempObserver = {}; - var observation = observations[i]; + var observation = this.observations[i]; var user = tools.getUserByAttribute(tools.NAME, observation[2], tools.PROFILE_DEFAULT); var filterResult; // exclude the user who made the changes. - if (user && pVariables[WorkflowVariables.EVENT_USER()] !== observation[2]) + if (user)// && pVariables[WorkflowVariables.EVENT_USER()] !== observation[2]) { - var config = entities.createConfigForLoadingRows() - .user(user.title) - .uids([pVariables[WorkflowVariables.TARGET_ID()]]) - .entity(pVariables[Observation.ENTITY_NAME]) - - if (observation[1]) - config.filter(JSON.stringify(JSON.parse(observation[1]).filter)); - - try - { - filterResult = entities.getRows(config.fields(["#CONTENTTITLE"]))[0]["#CONTENTTITLE"]; - } - catch (e) - { - // This Catch is needed for the Permission exeptions and the recursion - logging.log(e); - filterResult = null; - } + filterResult = this.checkFilterAndPermissions(user.title, observation[1], observation[0]); - if (filterResult) + if (filterResult && Object.keys(filterResult).length) { if (pObservationId) { return filterResult; } - var observeFields = {}; - text.decodeMS(observation[3]).forEach(function (observeFiled) { - let field = text.decodeMS(observeFiled); - let fieldNames = text.decodeMS(field[0]); - let displayValueField = "#COLUMNEXP_____" + fieldNames[1] + ".displayValue"; - let observedField = pVariables[WorkflowVariables.ROWDATA()][displayValueField] ? displayValueField : null; - if (tools.hasPermission(tools.PERMISSION_VIEW, pVariables[Observation.ENTITY_NAME], fieldNames[1], user.title)) - { - observeFields[fieldNames[0]] = [field[1], observedField]; - } - }); - - tempObserver[observation[2]] = {}; - - pVariables[WorkflowVariables.CHANGED_ROWS()].forEach(function (recordField) { - if (observeFields[recordField]) - { - if (observeFields[recordField][1]) - { - tempObserver[observation[2]][observeFields[recordField][1]] = observeFields[recordField][0]; - } - else - { - tempObserver[observation[2]][recordField] = observeFields[recordField][0]; - } - } - }); + tempObserver[observation[2]] = this.parseAndFilterObjectFields(observation[3], user.title, filterResult); + tempObserver[observation[2]][Observation.RECORDS_SPECIFIC_VALUES()] = this._formatFieldsToLoad(filterResult); } - else if (pVariables[WorkflowVariables.TRIGGER()] == WorkflowSignalSender.EVENT_DELETE()) + else if (this.callerVariables[WorkflowVariables.TRIGGER()] == WorkflowSignalSender.EVENT_DELETE()) { tempObserver[observation[2]] = {}; } + if (tempObserver[observation[2]]) { tempObserver[observation[2]][Observation.PRIO()] = observation[6]; if (observation[4] && !pObservationId) { - tempObserver[observation[2]][Observation.OBJECT_TYPE()] = observation[4]; - tempObserver[observation[2]][Observation.OBJECT_IDs()] = {}; - - var dependentIds = - Dependency.mapping()[ContextUtils.getEntity(pVariables[WorkflowVariables.TARGET_CONTEXT()])][ContextUtils.getEntity(observation[4])] - .getUIDsfn(pVariables[WorkflowVariables.ROWDATA()], pVariables[WorkflowVariables.INITIAL_ROWDATA()]); - - var dependentCheckVars = {} - dependentCheckVars[WorkflowVariables.TRIGGER()] = pVariables[WorkflowVariables.TRIGGER()]; - dependentCheckVars[WorkflowVariables.TARGET_CONTEXT()] = observation[4]; - dependentCheckVars[WorkflowVariables.EVENT_USER()] = observation[2]; - for (let index = 0; index < dependentIds.length; index++) - { - dependentCheckVars[WorkflowVariables.TARGET_ID()] = dependentIds[index]; - var contentTitle = Observation.checkObservation(dependentCheckVars, observation[5]); - if (contentTitle) // Check Dependent - { - tempObserver[observation[2]][Observation.OBJECT_IDs()][dependentIds[index]] = contentTitle; - } - } + this._checkDependencies(observation[2], observation[4], tempObserver, observation[5]); } } - - if (tempObserver[observation[2]] && (!tempObserver[observation[2]][Observation.OBJECT_IDs()] ||Object.keys(tempObserver[observation[2]][Observation.OBJECT_IDs()]).length > 0)) - { - if (!observers[observation[2]]) - { - observers[observation[2]] = tempObserver[observation[2]]; - } - else - { - if (!observers[observation[2]][Observation.OBJECT_IDs()] || - JSON.stringify(observers[observation[2]][Observation.OBJECT_IDs()]) == JSON.stringify(tempObserver[observation[2]][Observation.OBJECT_IDs()]) && - observers[observation[2]][Observation.OBJECT_TYPE()] == tempObserver[observation[2]][Observation.OBJECT_TYPE()]) - { - Object.keys(tempObserver[observation[2]]).forEach(function (pField) - { - if (!observers[observation[2]][pField] && pVariables[WorkflowVariables.CHANGED_ROWS()].indexOf(pField) > -1) - { - observers[observation[2]][pField] = tempObserver[observation[2]][pField]; - } - }); - } - } - } - tempObserver[observation[2]] = null; + Observation._syncTempObservationAndObservation(tempObserver, observers, observation[2], this.callerVariables[WorkflowVariables.CHANGED_ROWS()]) } } @@ -240,11 +431,75 @@ Observation.checkObservation = function(pVariables, pObservationId) return null; } - Observation._notifiyUsers(pVariables, observers); + Observation._notifiyUsers(this.callerVariables, observers); } return null; } + +/** + * Sync pTempObserver with pObservers + * + * @param {Void} [pTempObserver] + * @param {Void} [pObservers] + * @param {Void} [pObserverUserID] + * @param {Void} [pChangedRows] + * @return {Void} + */ +Observation._syncTempObservationAndObservation = function (pTempObserver, pObservers, pObserverUserID, pChangedRows) +{ + if (pTempObserver[pObserverUserID] && (!Utils.isNullOrEmpty(pTempObserver[pObserverUserID][Observation.OBJECT_IDs()]))) + { + if (!pObservers[pObserverUserID]) + { + pObservers[pObserverUserID] = pTempObserver[pObserverUserID]; + } + else + { + if (Object.keys(pObservers[pObserverUserID][Observation.RECORDS_SPECIFIC_VALUES()]).length > 0) + { + Observation._syncRecordsSpecificValues( + pTempObserver[pObserverUserID][Observation.RECORDS_SPECIFIC_VALUES()], + pObservers[pObserverUserID][Observation.RECORDS_SPECIFIC_VALUES()]); + } + else + { + pObservers[pObserverUserID][Observation.RECORDS_SPECIFIC_VALUES()] = pTempObserver[pObserverUserID][Observation.RECORDS_SPECIFIC_VALUES()]; + } + } + } + pTempObserver[pObserverUserID] = null; +} + +/** + * Copie the content of pTempObject into the pObject. + * This function is call by reference. + * + * @param {Object} [pTempObject] + * @param {Object} [pObject] + * @return {Void} + */ +Observation._syncRecordsSpecificValues = function (pTempObject, pObject) +{ + Object.keys(pTempObject).forEach(function (pID) + { + if(pObject[pID] && typeof pTempObject[pID] === "object") + { + if (pID != Observation.OBJECT_IDs() || pTempObject[Observation.OBJECT_TYPE()] == pObject[Observation.OBJECT_TYPE()]) + { + Observation._syncRecordsSpecificValues(pTempObject[pID], pObject[pID]); + } + } + else + { + if (!pObject[pID] || pID != Observation.OBJECT_TYPE()) + { + pObject[pID] = pTempObject[pID]; + } + } + }); +} + /** * Handle the Notifications for the given Observers and * assembles the individual notification for each user @@ -264,40 +519,46 @@ Observation._notifiyUsers = function (pVariables, pObservers) notificationType : "ObservationNotification" } - observers.forEach(function (pObserver) { - filteredVariables.notificationDescription = beginNotificationDescription; - // If there is a OBJECT_TYPE, this is a dependency observation - if (pObservers[pObserver][Observation.OBJECT_TYPE()]) + observers.forEach(function (pObserver) + { + Object.keys(pObservers[pObserver][Observation.RECORDS_SPECIFIC_VALUES()]).forEach(function (pRecordUID) { - filteredVariables.notificationCaption = pVariables[WorkflowVariables.TRIGGER()]; - var context = pObservers[pObserver][Observation.OBJECT_TYPE()]; + pVariables[WorkflowVariables.TARGET_ID()] = pRecordUID; + let specificRecordValues = pObservers[pObserver][Observation.RECORDS_SPECIFIC_VALUES()][pRecordUID]; + // If there is a OBJECT_TYPE, this is a dependency observation + if (specificRecordValues[Observation.OBJECT_TYPE()]) + { + var context = specificRecordValues[Observation.OBJECT_TYPE()]; - for (var targetId in pObservers[pObserver][Observation.OBJECT_IDs()]) + for (var targetId in specificRecordValues[Observation.OBJECT_IDs()]) + { + filteredVariables.notificationDescription = beginNotificationDescription; + filteredVariables.notificationSubcategory = specificRecordValues[Observation.OBJECT_IDs()][targetId] + Observation._notification( + pVariables, + filteredVariables, + pObservers, + pObserver, + context, + targetId); + } + } + else { - filteredVariables.notificationSubcategory = pObservers[pObserver][Observation.OBJECT_IDs()][targetId] - Observation._notification( - pVariables, - filteredVariables, - pObservers, - pObserver, - context, - targetId); + if (!pObservers[pObserver][Observation.OBJECT_IDs()] || Object.keys(pObservers[pObserver][Observation.OBJECT_IDs()]).length > 0) + { + filteredVariables.notificationDescription = beginNotificationDescription; + Observation._notification( + pVariables, + filteredVariables, + pObservers, + pObserver, + pVariables[WorkflowVariables.TARGET_CONTEXT()], + pVariables[WorkflowVariables.TARGET_ID()]); + } } - } - else - { - filteredVariables.notificationCaption = pVariables[WorkflowVariables.TRIGGER()]; - Observation._notification( - pVariables, - filteredVariables, - pObservers, - pObserver, - pVariables[WorkflowVariables.TARGET_CONTEXT()], - pVariables[WorkflowVariables.TARGET_ID()]); - - } - - }); + }, this); + }, this); } } @@ -314,8 +575,9 @@ Observation._notifiyUsers = function (pVariables, pObservers) */ Observation._notification = function (pVariables, pFilteredVariables, pObservers, pObserver, pContext, pTargetId) { + let spezificRowData = pObservers[pObserver][Observation.RECORDS_SPECIFIC_VALUES()][pVariables[WorkflowVariables.TARGET_ID()]]; pFilteredVariables.notificationPriority = pObservers[pObserver][Observation.PRIO()]; - pFilteredVariables.notificationCaption = pVariables[WorkflowVariables.CONTENTTITLE()]; + pFilteredVariables.notificationCaption = pVariables[WorkflowVariables.CONTENTTITLE()] || spezificRowData["#CONTENTTITLE"]; pFilteredVariables.notificationAffectedUID = pTargetId; pFilteredVariables.notificationAffectedContext = pContext; var isfirstField = true; @@ -335,7 +597,7 @@ Observation._notification = function (pVariables, pFilteredVariables, pObservers pNotification.linkinfo == text.encodeMS([pContext, pTargetId]) && pNotification.type == pFilteredVariables.notificationType && !pNotification.description.endsWith("....there is more data available")) - { + { isfirstField = false; pFilteredVariables.notificationContentId = pNotification.contentid; pFilteredVariables.notificationDescription = pNotification.description; @@ -357,6 +619,8 @@ Observation._notification = function (pVariables, pFilteredVariables, pObservers if (pVariables[WorkflowVariables.CHANGED_ROWS()].indexOf(field) > -1) { var formatedFieldValue = Observation.formatFieldValue(rowData,pVariables[WorkflowVariables.CHANGED_ROWS_TYPES()], field); + formatedFieldValue = formatedFieldValue || Observation.formatFieldValue(spezificRowData, pVariables[WorkflowVariables.CHANGED_ROWS_TYPES()], field); + pFilteredVariables.notificationDescription += " " +(isfirstField ? "" : translate.text("and"))+ " " + pObservers[pObserver][field] + " " + translate.text("was set to") + " \"" + formatedFieldValue + "\""; @@ -393,7 +657,7 @@ Observation._createNotification = function (variables) variables.notificationDescription = variables.notificationDescription.toString(); if (false) // WorkflowUtils.engineIsEnabled() { - checkObservation.signalEventReceived("Observation", variables); + } else { @@ -455,10 +719,13 @@ Observation._createNotification = function (variables) */ Observation.formatFieldValue = function (pRowData, pTypes, pField) { - switch (pTypes[pField]) + var tempFormat = pTypes[pField] ? pTypes[pField].split("::") : [null]; + switch (tempFormat[0]) { case "DATE": return datetime.toDate(pRowData[pField], translate.text("dd.MM.yyyy"), "Europe/Berlin"); + case "DROP_DOWN": + return tempFormat[1]; default : return pRowData[pField] } @@ -525,6 +792,32 @@ Observation.cancelAction = function () } } +/** + * Notify all observer of the given ids of a contxt. + * + * @param {Object} [pVaribles] + * @param {String|Array} [pTargetIds] the target id or a Array with the target ids + * @param {String} [pTargetContext] the target Context + * @return {Void} + * + * @example + * let varsObj = { + * "changedRows": JSON.stringify(["ACTIVITY.INFO"]), + * "fieldsToLoad" : JSON.stringify(["INFO", "ACTIVITYID", "INFO.displayValue"]) + * } + * + * Observation.serialAction(varsObj, vars.get("$sys.selection"), "Activity"); + * + */ +Observation.seriesAction = function (pVaribles, pTargetIds, pTargetContext) +{ + if (pTargetIds && typeof pTargetIds === 'object') + { + pTargetIds = JSON.stringify(pTargetIds) + } + + WorkflowSignalSender.updated(pVaribles ,pTargetIds , pTargetContext); +} /** * Returns the title of the cancel observation action depending on the count of UIDs @@ -616,7 +909,7 @@ Observation.actionState = function (pSelectedUIDs, pIsCancelAction) let isMultiselectionAction = project.getPreferenceValue("custom.observation.isMultiselectionEnabled", "false"); if (isEnabled == "false" || (isMultiselectionAction == "false" && (pSelectedUIDs && pSelectedUIDs.length) && vars.get("$sys.presentationmode") == neon.CONTEXT_PRESENTATIONMODE_FILTER)) - { + { return neon.COMPONENTSTATE_INVISIBLE; } @@ -637,22 +930,24 @@ Observation.actionState = function (pSelectedUIDs, pIsCancelAction) * If filter or entity are not set, they are set to an empty filter and the current entity. * * @param {String} [pEntity] - * @param {Object} [pFilter] + * @param {Object} [pFilterObj] * @return {Object} Object in Format: {"filter": {"type":"group","operator":"AND","childs":[...]}, "entity": "Entity_entity"} */ -Observation.getEntityFilter = function (pEntity, pFilter) +Observation.getEntityFilter = function (pEntity, pFilterObj) { if (!pEntity) pEntity = ContextUtils.getEntity(ContextUtils.getCurrentContextId()); - if (!pFilter) - pFilter = { + if (!pFilterObj) + { + pFilterObj = { "type":"group", "operator":"AND", "childs":[] - } + }; + } return JSON.stringify({ - "filter":pFilter, + "filter":pFilterObj, "entity":pEntity }); } @@ -691,7 +986,8 @@ Observation.getAllPosibleFields = function (pType) if (Dependency.excludedFields()[entity]) excludeFields = excludeFields.concat(Dependency.excludedFields()[entity]); - if (rcm.type == project.RECORDCONTAINERTYPE_DB){ + if (rcm.type == project.RECORDCONTAINERTYPE_DB) + { for (var index in rcm.linkInformation) { var table = rcm.linkInformation[index]; diff --git a/process/Observation_test/Observation_test.aod b/process/Observation_test/Observation_test.aod new file mode 100644 index 0000000000000000000000000000000000000000..528cd6f03ed43cad209371b27cec1d7277c340e2 --- /dev/null +++ b/process/Observation_test/Observation_test.aod @@ -0,0 +1,11 @@ +<?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.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> + <name>Observation_test</name> + <title>[TEST] Observation_lib</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <icon>VAADIN:CHECK_CIRCLE</icon> + <process>%aditoprj%/process/Observation_test/process.js</process> + <variants> + <element>EXECUTABLE</element> + </variants> +</process> diff --git a/process/Observation_test/process.js b/process/Observation_test/process.js new file mode 100644 index 0000000000000000000000000000000000000000..dc44a3b28f52c1240c49410b48fd152e6525d16f --- /dev/null +++ b/process/Observation_test/process.js @@ -0,0 +1,66 @@ +import("Observation_lib"); +import("Sql_lib"); +import("system.result"); +import("system.translate"); +import("system.vars"); +import("Keyword_lib"); +import("UnitTest_lib"); + + +var parseVariableIfNeed = new TestSuite("Observation.parseVariableIfNeed", [ + new Test("", + function(pTester, pDataProvider) { + + let object = { "TEST" :pDataProvider[0]} + Observation.parseVariableIfNeed(object, "TEST"); + var actualValue = object["TEST"]; + + pTester.expectThat(actualValue).equals(pDataProvider[1]).assert(); + }, + function dataProvider(){ + return [ + [JSON.stringify({"NAME" : "HANS"}), {"NAME" : "HANS"}], + [{"NAME" : "HANS"}, {"NAME" : "HANS"}], + [null, null], + [0, 0], + [undefined, undefined], + ["[1,2,3]", [1,2,3]], + [[1,2,3], [1,2,3]] + ]; + } + ) +]); + +var parseVariableIfNeed = new TestSuite("Observation.parseVariableIfNeed", [ + new Test("", + function(pTester, pDataProvider) { + + let object = { "TEST" :pDataProvider[0]} + Observation.parseVariableIfNeed(object, "TEST"); + var actualValue = object["TEST"]; + + pTester.expectThat(actualValue).equals(pDataProvider[1]).assert(); + }, + function dataProvider(){ + + return [ + [JSON.stringify({"NAME" : "HANS"}), {"NAME" : "HANS"}], + [{"NAME" : "HANS"}, {"NAME" : "HANS"}], + [null, null], + ["TESTString", "TESTString"], + [0, 0], + [undefined, undefined], + ["[1,2,3]", [1,2,3]], + [[1,2,3], [1,2,3]] + ]; + } + ) +]); + +var tester = new Tester("Test Observation_lib"); +tester.initCoverage(Observation); +tester.test(parseVariableIfNeed); + +tester.summary(); + +result.object(tester.getResults()); \ No newline at end of file diff --git a/process/OfferOrder_lib/process.js b/process/OfferOrder_lib/process.js index edecfffa185bb9a53bfa1339ff401b086bfe6c73..5831e001131674da8f9c1e7001b0453b994524c9 100644 --- a/process/OfferOrder_lib/process.js +++ b/process/OfferOrder_lib/process.js @@ -117,6 +117,7 @@ ItemUtils.prototype.getNetAndVat = function(pExcludedItemIds) { var orderItems = newSelect(columns) .from(this.tableName + "ITEM") .where(this.tableName + "ITEM." + this.tableName + "_ID", this.offerOrderId) + .and(this.tableName + "ITEM.ASSIGNEDTO is null") .andIfSet(this.tableName + "ITEM." + this.tableName + "ITEMID", pExcludedItemIds, SqlBuilder.NOT_IN()) .table(); @@ -196,6 +197,11 @@ ItemUtils.prototype.roundPrice = function(pPrice) { /** * Inserts parts list of the passed product into database. * + * If pSumUpPrices is set to true the following logic applies: <br> + * If one of the items doesn't have a valid price we calculate it by summing up all the prices of the items directly underneath it + * (only the ones which have takePrice set to true and are not optional.) + * + * * @param {String[]} columns req Array of Item DB Columns * @param {String} productId req UID of root product (selected product) * @param {String} assignedTo opt UID of parent item @@ -204,17 +210,23 @@ ItemUtils.prototype.roundPrice = function(pPrice) { * @param {String[][]} additionalProductInfo additional product info, which has to be copied from the product. (e.g. INFO field is only used by offer) * has to be in the form: [[["identifier1", "DESTINATION-DB-FIELD"], ["identifier2", "PRODUCT-DB-SUBSELECT-OR-FIELD"]], ...] * @param {String} pQuantity opt quantity - * @param {Boolean} pSumUpPrices If true: Prices of items get summed up if no valid price exists - * @return {String[]} Array of inserted ItemIDs + * @param {Boolean} pSumUpPrices opt If true: Prices of items get summed up if no valid price exists + * @param {String} pObjectType opt objectType (e.g: "Order", "Offer") + * @param {String} pObjectRowId opt objectRowId + * @param {String} pTopItemId opt offeritemId/orderItemId of the first item (the one we want to insert the partslist of) + * @param {boolean} pSumUpTopPrice opt whether or not the top price should get a sumUpPrice aswell + * @param {boolean} pReturnPartsListInsteadOfInserting opt if true: doesn't actually inserts the parts list, instead it just returns an object: <br> + * {"topProductInfo": {"price": price, "vat: vat"}, "partsList": [partsListAsArray]} + * + * @return {String[]} Array of inserted ItemIds * * @abstract */ -ItemUtils.prototype.insertPartsList = function(columns, productId, assignedTo, currency, contactId, additionalProductInfo, pQuantity, pSumUpPrices) { +ItemUtils.prototype.insertPartsList = function(columns, productId, assignedTo, currency, contactId, additionalProductInfo, pQuantity, pSumUpPrices, pObjectType, pObjectRowId, pTopItemId, pSumUpTopPrice, pReturnPartsListInsteadOfInserting) { if (additionalProductInfo == undefined) { additionalProductInfo = [] } - var insertedItemIds = []; //save address for this here to call methods in recursive sub function __itemInsertStatement var self = this; @@ -231,7 +243,7 @@ ItemUtils.prototype.insertPartsList = function(columns, productId, assignedTo, c if (contactId == undefined) { contactId = ""; - } + } var rootProdId = productId; if (rootProdId != "") @@ -260,16 +272,23 @@ ItemUtils.prototype.insertPartsList = function(columns, productId, assignedTo, c { __itemInsertStatement(partsList.root, assignedTo, currency, contactId); } + if (statements.length > 0) - db.inserts(statements); + { + if(pSumUpPrices) + { + var topPriceObj = ItemUtils.sumUpPricesWhenInserting(statements, insertedItemIds, treeStructure, productsWithSumUpPrices, priceObject, pQuantity, pObjectType, pObjectRowId, pTopItemId, pSumUpTopPrice, pReturnPartsListInsteadOfInserting); + } + if(pReturnPartsListInsteadOfInserting != true) + { + db.inserts(statements); + } + } } - if(pSumUpPrices == true) + if(pReturnPartsListInsteadOfInserting == true) { - return{"insertedItemIds": insertedItemIds, - "treeStructure": treeStructure, - "productsWithSumUpPrices": productsWithSumUpPrices, - "priceObject": priceObject} + return {"topProductInfo": topPriceObj, "partsList": statements}; } else { @@ -300,17 +319,18 @@ ItemUtils.prototype.insertPartsList = function(columns, productId, assignedTo, c { price = ProductDetails.PriceListToUse.price; vat = ProductDetails.PriceListToUse.vat; - if(pSumUpPrices) + if(pSumUpPrices)//also build priceObject if pSumUpPrices is set to true { priceObject[newid] = {}; priceObject[newid]["price"] = price; priceObject[newid]["vat"] = vat; + priceObject[newid]["quantity"] = P2pObject["quantity"]; } } - else if(pSumUpPrices) + else if(pSumUpPrices)//also build priceObject if pSumUpPrices is set to true { - productsWithSumUpPrices[newid] = ""; + productsWithSumUpPrices[newid] = P2pObject["quantity"]; } } var stop = false; @@ -318,9 +338,9 @@ ItemUtils.prototype.insertPartsList = function(columns, productId, assignedTo, c var amuntOfKeys; var itemAdded; - if(pSumUpPrices) + if(pSumUpPrices)//also build treeStructure if pSumUpPrices is set to true { - treeStructure = _buildTreeStructure(treeStructure, assignedTo, newid); + treeStructure = ItemUtils.buildTreeStructure(treeStructure, assignedTo, newid); } var vals = [newid @@ -331,47 +351,37 @@ ItemUtils.prototype.insertPartsList = function(columns, productId, assignedTo, c , ProductDetails.productName , ProductDetails.unit , price - , vat - , P2pObject.quantity - , P2pObject.optional - , pos - , itemsort] - // add aditional details - .concat(additionalProductInfo.map(function(item) {return ProductDetails[item[1][0]]})); + , vat == null || vat == undefined || vat == "" ? 0 : vat + , P2pObject.quantity]; + + + if(_optionalIsIncluded(columns) == true)//add optional if needed + { + vals = vals.concat(P2pObject.optional) + } + vals = vals.concat([pos, itemsort]); + + // add aditional details + vals = vals.concat(additionalProductInfo.map(function(item) {return ProductDetails[item[1][0]]})); statements.push([table, columns, null, vals]); insertedItemIds.push(newid); __itemInsertStatement(partsList[p2pid], newid, currency, contactId); + } - // helper function to build the tree structure so we can later sum up the prices accordingly - function _buildTreeStructure(treeObj, assignedTo, newid) - { - for (var id in treeObj) + //small helper function for better code read-ability + function _optionalIsIncluded(pColumns) { - if (typeof treeObj[id] == "object" && treeObj[id] !== null && id != assignedTo) - _buildTreeStructure(treeObj[id], assignedTo, newid); - else + for (let i = 0; i < pColumns.length; i++) { - if(id == assignedTo) + if(pColumns[i] == "OPTIONAL") { - if(!treeObj.hasOwnProperty(assignedTo)) - { - treeObj[assignedTo] = {}; - } - treeObj[assignedTo][newid] = {}; - - return treeObj; + return true; } } + return false; } - if(Utils.isEmpty(treeObj)) - { - treeObj[assignedTo] = {}; - treeObj[assignedTo][newid] = {}; - } - return treeObj; - } } } @@ -476,16 +486,53 @@ ItemUtils.prototype.getNextItemPosition = function(assignedTo, tree, ids) { ids = this.ItemIds; var maxPos = ["0"]; - if (assignedTo) { - if (tree[assignedTo].ids.length < 1) { //first item in this level + if (assignedTo) + { + //when using insertPartsList with pReturnPartsListInsteadOfInserting set to true: The tree doesn't have the item yet (so tree[assignedTo] is undefined) + //So we add it ourselves so we can use the tree logic and add the childitems to it + if(tree[assignedTo] == undefined) + { + var lastItem = tree[Object.keys(tree)[Object.keys(tree).length - 1]]; + tree[assignedTo] = {}; + tree[assignedTo]["ids"] = []; + tree[assignedTo]["assignedTo"] = ""; + + var thisItemPos; + var thisItemSort; + //lastItem is undefined if we don't have any item yet -> position and sort are both '1'' + if(lastItem == undefined) + { + thisItemPos = 1; + thisItemSort = 1; + } + else + { + let lastItemPos = lastItem["pos"]; + thisItemPos = eMath.addInt(parseInt(lastItemPos.split(".")[0]), 1);//previous position plus 1 (the position can be something like "7.1.1.1" so we use split to get the "7" + let lastItemSort = lastItem["itemsort"]; + thisItemSort = eMath.addInt(parseInt(lastItemSort), 2);//previous itemsort plus 2 + } + tree[assignedTo]["pos"] = JSON.stringify(thisItemPos); + + tree[assignedTo]["itemsort"] = JSON.stringify(thisItemSort); + this.ItemIds.push(assignedTo) + } + + if (tree[assignedTo].ids.length < 1) //first item in this level + { maxPos = tree[assignedTo].pos.split("."); maxPos = maxPos.concat(["0"]); //next level pos - } else { + } + else + { var childIds = tree[assignedTo].ids; maxPos = tree[childIds[childIds.length-1]].pos.split("."); } - } else { - if (ids.length > 0) { + } + else + { + if (ids.length > 0) + { maxPos[0] = tree[ids[ids.length-1]].pos.split(".")[0]; } } @@ -534,10 +581,11 @@ ItemUtils.prototype.reOrgItems = function() { * @param {String} pProductId <p/> product Id * @param {String} pUid <p/> product Id * @param {String} pEntity <p/> product Id + * @param {Number} pQuantity (optional) <p/> if set the quantity is overwritten * @return {void} * @static */ -ItemUtils.product_IdOnValueChange = function (pProductId, pUid, pEntity) +ItemUtils.product_IdOnValueChange = function (pProductId, pUid, pEntity, pQuantity) { var curr = vars.exists("$param.Currency_param") ? vars.get("$param.Currency_param") : ""; var contactid = vars.exists("$param.ContactId_param") ? vars.get("$param.ContactId_param") : ""; @@ -555,7 +603,7 @@ ItemUtils.product_IdOnValueChange = function (pProductId, pUid, pEntity) var pricelist = new AttributeRelationQuery(orgContactId, $AttributeRegistry.pricelist()).getSingleAttributeValue() || ""; - var PriceListFilter = { currency: curr, quantity: vars.get("$field.QUANTITY"), relationId: contactid, priceList: pricelist }; + var PriceListFilter = { currency: curr, quantity: pQuantity || vars.get("$field.QUANTITY"), relationId: contactid, priceList: pricelist }; //TODO: loading from db until loading from Consumer is possible. @@ -581,5 +629,238 @@ ItemUtils.product_IdOnValueChange = function (pProductId, pUid, pEntity) neon.setFieldValue("$field.PRICE", ProductDetails.PriceListToUse.price); neon.setFieldValue("$field.VAT", ProductDetails.PriceListToUse.vat); } + else + { + neon.setFieldValue("$field.PRICE", ""); + neon.setFieldValue("$field.VAT", 0); + } + } +}; + +/** + * This code is exactly the same for both Offeritem and Orderitem which is why it has it's own Function. <br><br> + * + * The Logic for summing up Prices: <br> + * If a product doesnt have a price: sum up all the prices of the the products directly beneath it that have takePrice set to true and are not optional. <br> + * This means we have to start from bottum up to calculate the prices. + * + * + * @param {Array} pStatements <p/> insertStatements (we modify them if needed so we insert the items with the correct prices instead of updating them later + * @param {Array} pCorrectOrder <p/> the items in the correct Order (top-down), important so we calculate the prices in the correct order + * @param {Object} pTreeStructure <p/> the Treestructure as object tree we got from using ItemUtils.buildTreeStructure() + * @param {Object} pProductsWithSumUpPrices <p/> products with sumupPrices (id as key, quantity as value) + * @param {Object} pPriceObj <p/> products with prices in object with id as key and prices and vat in an array as value + * @param {String} pQuantity <p/> the quantity of out topItem + * @param {String} pObjectType <p/> object type (eg. Offer or Order) + * @param {String} pObjectRowId <p/> object row i + * @param {String} pTopItemId <p/> item id of the topitem + * @param {Boolean} pSumUpTopPrice <p/> whether or not the price of the top item should get summed up aswell + * @param {Boolean} pReturnTopPrice opt <p/> if true: return price and vat as object isntead of updating the row + * @return {void} + * @static + */ +ItemUtils.sumUpPricesWhenInserting = function (pStatements, pCorrectOrder, pTreeStructure, pProductsWithSumUpPrices, pPriceObj, pQuantity, pObjectType, pObjectRowId, pTopItemId, pSumUpTopPrice, pReturnTopPrice) +{ + //private function for better code readability + _handleSumUpPricesOfItems(pCorrectOrder, pTreeStructure, pProductsWithSumUpPrices, pPriceObj, pQuantity, pStatements); + + var price; + var sumUpTopPrice = pSumUpTopPrice; + if(sumUpTopPrice === true) + { + var calcPrice = 0; + var vat = 0; + for(var id in pTreeStructure[pTopItemId]) + { + let price = 0; + if(pPriceObj[id]) + { + price = pPriceObj[id]["price"]*(pPriceObj[id]["quantity"] == undefined ? 1 : pPriceObj[id]["quantity"]); + } + calcPrice = eMath.addDec(price, calcPrice); + if(pPriceObj[id] && pPriceObj[id]["vat"] && pPriceObj[id]["vat"] > 0) + { + vat = pPriceObj[id]["vat"]; + } + } + sumUpTopPrice = calcPrice/pQuantity; + if(pReturnTopPrice) + { + return {"price": sumUpTopPrice, "vat": vat}; + } + var config = entities.createConfigForUpdatingRows() + .uid(pTopItemId) + .fieldValues({ + "PRICE": sumUpTopPrice, + "VAT": vat + }); + if(pObjectType == "Offer") + { + config = config.entity("Offeritem_entity") + .addParameter("IgnoreOnUpdateProcess_param", true) + } + else if(pObjectType == "Order") + { + config = config.entity("Orderitem_entity") + .addParameter("IgnoreOnUpdateProcess_param", true) + } + entities.updateRow(config); + } + return sumUpTopPrice; + + //We want to sum up the prices directly under the current item to calculate the price if we don't have an valid price for them + function _handleSumUpPricesOfItems(pOrder, pTreestruct, pSumUpPrices, pPriceObj, pQuantity, pStatements) + { + + var currentStruc = pTreestruct; + var sumUpPrices = pSumUpPrices; + var quantity = pQuantity; + var order = pOrder; + var summandObject = {}; + var calculatedPrices = {}; + var priceObj = pPriceObj; + for (var i = order.length; i > -1; i--)//we do this backwards because otherwiese we would run into problems when trying to build the sum (we could have items without an price yet) + { + if(sumUpPrices.hasOwnProperty(order[i])) + { + summandObject[order[i]] = ItemUtils.getNode(pTreestruct, order[i], Object.keys(pTreestruct)[0]); + var calcPrice = 0; + var vat = 0; + for (var child in summandObject[order[i]]) + { + var childPrice; + if(pPriceObj[child] != undefined) + { + childPrice = priceObj[child]["price"]*priceObj[child]["quantity"] + } + else if(summandObject[child] != undefined && summandObject[child][child] != undefined) + { + childPrice = priceObj[Object.keys(summandObject[child][child])[0]]["price"]*priceObj[child]["quantity"] + vat = pPriceObj[Object.keys(summandObject[child][child])[0]]["vat"] + } + else + { + childPrice = 0; + vat = 0; + } + calcPrice = eMath.addDec(childPrice, calcPrice); + if(pPriceObj[child] && priceObj[child]["vat"] !== null && priceObj[child]["vat"] !== undefined && priceObj[child]["vat"] > 0) + { + vat = priceObj[child]["vat"]; + } + } + calcPrice = calcPrice/quantity; + calculatedPrices[order[i]] = {}; + calculatedPrices[order[i]]["price"] = calcPrice; + calculatedPrices[order[i]]["vat"] = vat; + priceObj[order[i]] = {}; + priceObj[order[i]]["price"] = calcPrice*sumUpPrices[order[i]]; + priceObj[order[i]]["vat"] = vat; + + + } + } + + var config = entities.createConfigForUpdatingRows(); + + for(var statement in pStatements) + { + if(calculatedPrices[pStatements[statement][3][0]] != undefined)//[3][0] = OfferItemId/SalesOrderItemId + { + pStatements[statement][3][7] = calculatedPrices[pStatements[statement][3][0]]["price"] //price + pStatements[statement][3][8] = calculatedPrices[pStatements[statement][3][0]]["vat"] //vat + } + else + { + if(priceObj[pStatements[statement][3][0]] == undefined) + { + pStatements[statement][3][7] = 0; //price + pStatements[statement][3][8] = 0; //vat + } + else + { + pStatements[statement][3][7] = priceObj[pStatements[statement][3][0]]["price"]; //price + pStatements[statement][3][8] = priceObj[pStatements[statement][3][0]]["vat"]; //vat + } + } + } + } +}; + +/** + * Recursive function to build the tree structure so we can later sum up the prices accordingly (call for every item (top-down)) + * + * @param {Object} pTreeObj <p/> the already existing tree structure (empty object if first time calling this function) + * @param {String} pAssignedTo <p/> id the current one is assigned to + * @param {String} pNewid <p/> current id we want to add to the tree + * + * + * @return {Object} treeStructure with the pNewid added the correct position + * @static + */ +ItemUtils.buildTreeStructure = function (pTreeObj, pAssignedTo, pNewid) +{ + var treeObj = pTreeObj; + var assignedTo = pAssignedTo; + var newid = pNewid; + for (var id in treeObj) + { + if (typeof treeObj[id] == "object" && treeObj[id] !== null && id != assignedTo) + { + ItemUtils.buildTreeStructure(treeObj[id], assignedTo, newid); + } + else + { + if(id == assignedTo) + { + if(!treeObj.hasOwnProperty(assignedTo)) + { + treeObj[assignedTo] = {}; + } + treeObj[assignedTo][newid] = {}; + return treeObj; + } + } + } + if(Utils.isEmpty(treeObj)) + { + treeObj[assignedTo] = {}; + treeObj[assignedTo][newid] = {}; + } + return treeObj; +} + +/** + * Recursive function to return a specific "node" of the tree structure with the specified pName + * + * @param {Object} pObject <p/> the objectTree + * @param {String} pName <p/> the name of the node we want + * @param {String} pCurrName <p/> current node name + * + * + * @return {Object} treeStructure with the pNewid added the correct position + * @static + */ +ItemUtils.getNode = function (pObject, pName, pCurrName){ + if(pCurrName == pName) + { + return pObject; + } + else if (pObject != undefined) + { + let res = null; + for(var obj in pObject) + { + if(res == null) + { + res = ItemUtils.getNode(pObject[obj], pName, obj); + } + else + { + break; + } + } + return res; } -}; \ No newline at end of file + return null; + } \ No newline at end of file diff --git a/process/Offer_lib/process.js b/process/Offer_lib/process.js index 777a0a8412dbc453cc525c1f09ba6bcd7f03aa68..a9561a5068390247ec5b6e0d1b39edf453e8180f 100644 --- a/process/Offer_lib/process.js +++ b/process/Offer_lib/process.js @@ -266,7 +266,7 @@ OfferUtils.buildOfferReport = function (pOfferID, pExclDiscountGroupcodes) item[0], //info item[1], //assignedTo item[3], //itemname - item[4], //optional + parseInt(item[4]) ? translate.text("Yes", language) : translate.text("No", language), //optional item[5], //itemposition item[6], //productcode header, //header @@ -324,7 +324,8 @@ OfferUtils.buildOfferReport = function (pOfferID, pExclDiscountGroupcodes) "InvoiceDiscount": translate.text("Invoice Discount", language), "TotalWithoutVat": translate.text("without Vat", language), "TotalWithVat": translate.text("incl. Vat", language), - "printHeadDiscount": printHeadDiscount ? "1" : "0" + "printHeadDiscount": printHeadDiscount ? "1" : "0", + "Optional": translate.text("Optional", language) }; @@ -557,7 +558,7 @@ OfferItemUtils.prototype.roundPrice = function(pPrice) { /** * For documentation, see class ItemUtils. */ -OfferItemUtils.prototype.insertPartsList = function(pProductId, pAssignedTo, pCurrency, pContactId, pLanguage, pQuantity, pSumUpPrices) { +OfferItemUtils.prototype.insertPartsList = function(pProductId, pAssignedTo, pCurrency, pContactId, pLanguage, pQuantity, pSumUpPrices, pOfferId, pSumUpTopPrice) { this.initItemTree(); var cols = ["OFFERITEMID" @@ -580,7 +581,7 @@ OfferItemUtils.prototype.insertPartsList = function(pProductId, pAssignedTo, pCu .where("DESCRIPTIONTRANSLATION.OBJECT_ROWID = PRODUCT.PRODUCTID") .and("DESCRIPTIONTRANSLATION.OBJECT_TYPE", "Product") .andIfSet("DESCRIPTIONTRANSLATION.LANG", pLanguage) - .toString() + ")"]]], pQuantity, pSumUpPrices]); + .toString() + ")"]]], pQuantity, pSumUpPrices, "Offer", pOfferId, pAssignedTo, pSumUpTopPrice, true]); } @@ -630,16 +631,21 @@ OfferItemUtils.getDiscountedNet = function(pExcludedIs, pOfferId, pDiscount, pEx var vat = 0; var vatExcluded = 0; if(pOfferId){ - var offeritemData = newSelect("QUANTITY, PRICE, DISCOUNT, VAT, OPTIONAL") + var offeritemData = newSelect("QUANTITY, PRICE, DISCOUNT, VAT, OPTIONAL, ITEMPOSITION") .from("OFFERITEM") .where("OFFERITEM.OFFER_ID", pOfferId) .andIfSet("OFFERITEM.GROUPCODEID", pExcludedProductgroups, SqlBuilder.NOT_IN()) .andIfSet("OFFERITEM.OFFERITEMID", pExcludedIs, SqlBuilder.NOT_IN()) + .and("OFFERITEM.ASSIGNEDTO is null") .table(); for (var i = 0; i < offeritemData.length; i++) { - sum = eMath.addDec(sum, ItemUtils.prototype.getItemSum(offeritemData[i][0], offeritemData[i][1], offeritemData[i][2], offeritemData[i][4])); - vat = eMath.addDec(vat, ItemUtils.prototype.getItemVAT(offeritemData[i][0], offeritemData[i][1], offeritemData[i][2], offeritemData[i][3], offeritemData[i][4])); + if(!offeritemData[i][5].toString().includes(".")//only top items + && offeritemData[i][4] == "0")//which are not optional + { + sum = eMath.addDec(sum, eMath.subDec(offeritemData[i][1], offeritemData[i][2])*offeritemData[i][0]); + vat = eMath.addDec(vat, offeritemData[i][3]*eMath.subDec(offeritemData[i][1], offeritemData[i][2])*offeritemData[i][0]/100); + } } sum = eMath.subDec(sum, eMath.divDec(eMath.mulDec(sum, pDiscount), "100")); diff --git a/process/Order_lib/process.js b/process/Order_lib/process.js index fedf40ca93d861e251fd79498aab5579fa5f2b84..8dfe4b4d5e5b23c1659e8cd1a1c096dc0777d8cc 100644 --- a/process/Order_lib/process.js +++ b/process/Order_lib/process.js @@ -703,7 +703,7 @@ OrderItemUtils.prototype.roundPrice = function(pPrice) { /** * For documentation, see class ItemUtils. */ -OrderItemUtils.prototype.insertPartsList = function(pProductId, pAssignedTo, pCurrency, pContactId) { +OrderItemUtils.prototype.insertPartsList = function(pProductId, pAssignedTo, pCurrency, pContactId, pQuantity, pSumUpPrices, pOrderId, pSumUpTopPrice) { this.initItemTree(); var cols = ["SALESORDERITEMID" @@ -719,7 +719,7 @@ OrderItemUtils.prototype.insertPartsList = function(pProductId, pAssignedTo, pCu , "ITEMPOSITION" , "ITEMSORT"]; - return ItemUtils.prototype.insertPartsList.apply(this, [cols, pProductId, pAssignedTo, pCurrency, pContactId]); + return ItemUtils.prototype.insertPartsList.apply(this, [cols, pProductId, pAssignedTo, pCurrency, pContactId, undefined, pQuantity, pSumUpPrices, "Order", pOrderId, pAssignedTo, pSumUpTopPrice, true]); } /** diff --git a/process/Placeholder_lib/process.js b/process/Placeholder_lib/process.js index a162fc7ee5d7514746718d5054fa10f7cb73df71..f9d5255fa6724011b31a58996b059d949c979482 100644 --- a/process/Placeholder_lib/process.js +++ b/process/Placeholder_lib/process.js @@ -4,6 +4,7 @@ import("CustomPlaceholder_lib"); import("Sql_lib"); import("Communication_lib"); import("system.datetime"); +import("KeywordRegistry_basic"); /* Library for document template placeholders. @@ -124,6 +125,21 @@ PlaceholderUtils.getRegexpMatchAll = function () return /\{@(.(?!{@)|(\r?\n))+?@\}/gi; } +/** + * Returns all link Placeholders for Bulkmails + * + */ +PlaceholderUtils.getLinkPlaceholders = function () +{ + var links = newSelect("WEBLINK.PLACEHOLDER, WEBLINK.URL") + .from("WEBLINK") + .where("WEBLINK.LINKTYPE", $KeywordRegistry.weblinkType$EMail()) + .and("WEBLINK.PLACEHOLDER IS NOT NULL") + .table(); + + return links.map(function(a){ return new Placeholder(a[0], Placeholder.types.FIXEDVALUE, a[1])}); +} + /** * object representing a placeholder * diff --git a/process/Product_lib/process.js b/process/Product_lib/process.js index db6b5fe287338675341282aa80d1660560886bec..7b11b0791f68481a509804311acc7b16cb15be5d 100644 --- a/process/Product_lib/process.js +++ b/process/Product_lib/process.js @@ -1,3 +1,7 @@ +import("OfferOrder_lib"); +import("system.neon"); +import("system.eMath"); +import("system.entities"); import("system.util"); import("system.SQLTYPES"); import("system.datetime"); @@ -25,12 +29,13 @@ function ProductUtils() {} * @param {String} pid ProductID * @param {String} buySell possible values: PP, SP * @param {String} [onlyStandard=false] if true, only standard price lists are selected. + * @param {String} pCurrency * * @example productUtils.getCurrentProductPrice(vars.get("$field.PRODUCTID"), "PP") * * @return {Array[]} currently valid product price with currency: [price, "CURRENCY", "VAT"] or [] if no price found */ -ProductUtils.getCurrentProductPrice = function(pid, buySell, onlyStandard) { +ProductUtils.getCurrentProductPrice = function(pid, buySell, onlyStandard, pCurrency) { if (pid != undefined && pid != "" && buySell != undefined && buySell != "") { var today = datetime.clearTime(vars.get("sys.date"), "utc"); @@ -45,6 +50,7 @@ ProductUtils.getCurrentProductPrice = function(pid, buySell, onlyStandard) { actualPriceSelect.and("PRODUCTPRICE.BUYSELL", buySell) .and("PRODUCTPRICE.PRODUCT_ID", pid) + .andIfSet("PRODUCTPRICE.CURRENCY", pCurrency) .and("PRODUCTPRICE.VALID_FROM", today, SqlBuilder.LESS_OR_EQUAL()) .and(newWhere("PRODUCTPRICE.VALID_TO", today, SqlBuilder.GREATER_OR_EQUAL()) .or("PRODUCTPRICE.VALID_TO is null")); @@ -73,7 +79,7 @@ ProductUtils.getCurrentProductPrice = function(pid, buySell, onlyStandard) { ProductUtils.getStockCount = function(pid) { if (pid != undefined && pid != "") { - var sum = newSelect("sum(QUANTITY * case IN_OUT when 0 then -1 else 1)") + var sum = newSelect("sum(QUANTITY * case IN_OUT when 0 then -1 else 1 end)") .from("STOCK") .whereIfSet("STOCK.PRODUCT_ID", pid) .cell(true, "0"); @@ -155,6 +161,17 @@ ProductUtils.getStockCount = function(pid) { ProductUtils.getProductDetails = function(pid, pPriceListFilter, pAdditionalProductInfoSubselects) { var priceListFilter = pPriceListFilter; + var dateFrom; + if(priceListFilter.dateFrom != undefined) + { + dateFrom = priceListFilter.dateFrom; + } + var dateTo; + if(priceListFilter.dateTo != undefined) + { + dateTo = priceListFilter.dateTo; + } + var additionalProductInfoSubselects = pAdditionalProductInfoSubselects; if (additionalProductInfoSubselects == undefined) { @@ -185,19 +202,44 @@ ProductUtils.getProductDetails = function(pid, pPriceListFilter, pAdditionalProd && priceListFilter.currency != undefined && priceListFilter.currency != "" && priceListFilter.quantity != undefined && priceListFilter.quantity != "") { + if(priceListFilter.relationId == undefined) + { + priceListFilter.relationId = ""; + } validPriceLists = true; var colsPricelistValid = ["validPP.PRODUCTPRICEID", "validPP.CONTACT_ID", "validPP.PRICELIST", "validPP.PRICE", "validPP.VAT" , "validPP.VALID_FROM", "validPP.VALID_TO", "validPP.BUYSELL", "validPP.FROMQUANTITY", "validPP.CURRENCY"]; orderBy = orderBy.concat(["validPP.VALID_FROM desc", "validPP.FROMQUANTITY desc"]); cols = cols.concat(colsPricelistValid); + var cond; + if(dateFrom != undefined) + { + var secondCond; + if(dateTo) + { + secondCond = newWhere(["PRODUCTPRICE", "VALID_FROM", "validPP"], dateTo, SqlBuilder.LESS_OR_EQUAL()) + } + else + { + secondCond = newWhere(["PRODUCTPRICE", "VALID_FROM", "validPP"], dateFrom, SqlBuilder.LESS_OR_EQUAL()) + } + cond = newWhere().and(newWhere() + .or(["PRODUCTPRICE", "VALID_TO", "validPP"], dateFrom, SqlBuilder.GREATER_OR_EQUAL()) + .or("validPP.VALID_TO is null")) + .and(secondCond) + } + else + { + cond = newWhere().and(["PRODUCTPRICE", "VALID_FROM", "validPP"], datetime.date().toString(), SqlBuilder.LESS_OR_EQUAL()) + .and(newWhere() + .or(["PRODUCTPRICE", "VALID_TO", "validPP"], datetime.today().toString(), SqlBuilder.GREATER_OR_EQUAL()) + .or("validPP.VALID_TO is null")) + } joins.push(["left", "PRODUCTPRICE", "validPP", newWhere("validPP.PRODUCT_ID = PRODUCTID") .and(["PRODUCTPRICE", "CURRENCY", "validPP"], priceListFilter.currency) - .and(["PRODUCTPRICE", "VALID_FROM", "validPP"], datetime.date().toString(), SqlBuilder.LESS_OR_EQUAL()) - .and(newWhere() - .or(["PRODUCTPRICE", "VALID_TO", "validPP"], datetime.today().toString(), SqlBuilder.GREATER_OR_EQUAL()) - .or("validPP.VALID_TO is null")) + .and(cond) .and(["PRODUCTPRICE", "FROMQUANTITY", "validPP"], priceListFilter.quantity, SqlBuilder.LESS_OR_EQUAL()) .and(newWhere() .or(["PRODUCTPRICE", "CONTACT_ID", "validPP"], priceListFilter.relationId) @@ -243,6 +285,7 @@ ProductUtils.getProductDetails = function(pid, pPriceListFilter, pAdditionalProd countPos++; }, ProductDetails); } + //Pricelist (all) var colIdx = colsProduct.length; if (ProductData[i][colIdx] != "" && ProductDetails.PriceLists[ProductData[i][colIdx]] == undefined) //Pricelist found @@ -287,7 +330,7 @@ ProductUtils.getProductDetails = function(pid, pPriceListFilter, pAdditionalProd //infividual pricelists always have the highest priority, so we loop trough and use the first one we find regardles of the rest for (var indivList in priceLists) { - if(priceLists[indivList]["priceList"] == $KeywordRegistry.productPricelist$specialList()) + if(priceLists[indivList]["priceList"] == "") { return priceLists[indivList]; } @@ -653,4 +696,144 @@ Prod2ProdUtils.prototype._relateParents = function() } } } +} + +/** + * utility functions for productprices + * Do not create an instance of this! + * + * @class + */ +function ProductPriceUtils() {} + +/** + * Used for presetting the price of a product by summing up the valid prices of the partslist of said product + * + * Logic is as followed: <br> + * If a product doesnt have a price: sum up all the prices of the the products directly beneath it that have takePrice set to true and are not optional. <br> + * This means we have to start from bottum up to calculate the prices. + * + * @param {String} pProductId ProductID of the product we want to set the fields for + * @param {String} pVat opt vat + * @param {String} pPriceList opt priceList(-"type") + * @param {String} pBuySell opt possible values: PP, SP + * + * @example productUtils.getCurrentProductPrice(vars.get("$field.PRODUCTID"), "PP") + * + * @return {void} uses neon.setFieldValues({"$field.PRICE": priceObj[oItem]["price"],"$field.VAT": priceObj[oItem]["vat"]}) + */ +ProductUtils.presetPriceAndVat = function(pProductId, pVat, pPriceList, pBuySell) { + + + var vat = pVat; + var productId = pProductId; + var priceList = pPriceList; + var buySell = pBuySell; + var config = entities.createConfigForLoadingRows() + .entity("Prod2prod_entity") + .addParameter("ProductId_param", productId) + .fields(["PROD2PRODID", + "DEST_ID", + "SOURCE_ID", + "QUANTITY", + "OPTIONAL", + "unit", + "TAKEPRICE", + "currentPurchasePrice", + "currentSalesPrice"]); + var products = entities.getRows(config);//source_id = product_id + var treestructure = {}; + var curr = vars.get("$field.CURRENCY"); + var priceObj = {}; + var sumUpPrices = {}; + _handleProducts(products, treestructure, curr, buySell, priceObj, 1, priceList, productId); //build treeStructure and priceObj + var summandObject = {}; + + for (var i = products.length-1; i > -1; i--)//we do this backwards because otherwiese we would run into problems when trying to build the sum (we could have items without an price yet) + { + if(sumUpPrices.hasOwnProperty(products[i]["SOURCE_ID"])) + { + summandObject[products[i]["PROD2PRODID"]] = ItemUtils.getNode(treestructure[productId], products[i]["PROD2PRODID"], Object.keys(treestructure)[0]); + } + } + + + for(var oItem in summandObject) + { + var calcPrice = 0; + var vat = null; + for (var child in summandObject[oItem]) + { + var childPrice; + if(priceObj[child] != undefined) + { + childPrice = priceObj[child]["price"] + } + else if(summandObject[child][child] != undefined) + { + childPrice = priceObj[Object.keys(summandObject[child][child])[0]]["price"] + vat = priceObj[Object.keys(summandObject[child][child])[0]]["vat"] + } + else + { + childPrice = 0; + vat = 0; + } + let quantity = 1; + for (i = 0; i < products.length; i++) + { + if(products[i]["PROD2PRODID"] == oItem) + { + quantity = products[i]["QUANTITY"]; + break; + } + } + + calcPrice = eMath.addDec(childPrice, calcPrice)*quantity; + if(!vat) + { + vat = priceObj[child]["vat"]; + } + } + priceObj[oItem] = {}; + priceObj[oItem]["price"] = calcPrice; + priceObj[oItem]["vat"] = vat; + } + + var price = 0; + for (var item in treestructure[productId]) + { + price += parseInt(priceObj[item]["price"]); + if(vat == null && priceObj[item]["vat"]) + { + vat = parseInt(priceObj[item]["vat"]); + } + } + + neon.setFieldValues({"$field.PRICE": price, "$field.VAT": vat}) + + //private function for better code-readability + function _handleProducts(products, treestructure, curr, buySell, priceObj, pQuantity, pPriceList, pProductId){ + + for(var product in products) + { + var productDetails = ProductUtils.getProductDetails( + products[product]["SOURCE_ID"], + { currency: curr, quantity: pQuantity, relationId: "", priceList: pPriceList}); + + if(!Utils.isEmpty(productDetails["PriceListToUse"])) + { + priceObj[products[product]["PROD2PRODID"]] = {}; + priceObj[products[product]["PROD2PRODID"]]["price"] = productDetails["PriceListToUse"]["price"]*products[product]["QUANTITY"]; + priceObj[products[product]["PROD2PRODID"]]["vat"] = productDetails["PriceListToUse"]["vat"]; + } + else + { + sumUpPrices[products[product]["SOURCE_ID"]] = {}; + } + + var assignedTo = products[product]["DEST_ID"] != "" ? products[product]["DEST_ID"] : pProductId; + treestructure = ItemUtils.buildTreeStructure(treestructure, assignedTo, products[product]["PROD2PRODID"]); + } + } } \ No newline at end of file diff --git a/process/RebuildAllDuplicateCaches_serverProcess/process.js b/process/RebuildAllDuplicateCaches_serverProcess/process.js deleted file mode 100644 index b08a0abf9efa74df1e609510b0cd09d63a06d1bf..0000000000000000000000000000000000000000 --- a/process/RebuildAllDuplicateCaches_serverProcess/process.js +++ /dev/null @@ -1,55 +0,0 @@ -import("system.logging"); -import("DuplicateScanner_lib"); - -/* - * Serverprocess to reload duplicates - * - * Step #1: - * All Clusters for the specified targetEntity are deleted. - * Relations between records marked as unrelated are not deleted at this time - * - * Step #2 - * The duplicates cache gets rebuilt - * - * Step #3: - * All unrelated relations between duplicate ids hold their respective cluster id. - * If the same combination of duplicate ids exists in the duplicate cache after the rebuild, - * it is assumed that those records remain duplicates. - * Therefore the saved clusterId gets refreshed with the newly created clusters id. - * - * Relations between unrelated duplicates are deleted, if no cluster contains the same combination of duplicate ids - */ - -// Build Person duplicate cache - -var filterName = "PersonDuplicates"; -var targetEntity = "Person_entity"; -var recordBlockSize = DuplicateScannerUtils.getBlockSize(); - -logging.log(filterName + ": Delete duplicates -> "); -DuplicateScannerUtils.deleteClustersByTargetEntity(targetEntity); - -logging.log(filterName + ": Recalculate duplicates -> "); -DuplicateScannerUtils.rebuildDuplicatesCache(filterName, targetEntity, recordBlockSize, null); - -logging.log(filterName + ": Refresh unrelated duplicates -> "); -DuplicateScannerUtils.refreshUnrelatedDuplicateRelations(targetEntity); - -logging.log(filterName + ": Done rebuilding "); - - -// Build Organisation duplicate cache - -filterName = "OrganisationDuplicates"; -targetEntity = "Organisation_entity"; - -logging.log(filterName + ": Delete duplicates -> "); -DuplicateScannerUtils.deleteClustersByTargetEntity(targetEntity); - -logging.log(filterName + ": Recalculate duplicates -> "); -DuplicateScannerUtils.rebuildDuplicatesCache(filterName, targetEntity, recordBlockSize, null); - -logging.log(filterName + ": Refresh unrelated duplicates -> "); -DuplicateScannerUtils.refreshUnrelatedDuplicateRelations(targetEntity); - -logging.log(filterName + ": Done rebuilding "); \ No newline at end of file diff --git a/process/RebuildDuplicatesCache_serverProcess/process.js b/process/RebuildDuplicatesCache_serverProcess/process.js deleted file mode 100644 index 1e7f532f75a8b4a36d1c06de9cc4503bf6f74c62..0000000000000000000000000000000000000000 --- a/process/RebuildDuplicatesCache_serverProcess/process.js +++ /dev/null @@ -1,40 +0,0 @@ -import("system.logging"); -import("system.vars"); -import("DuplicateScanner_lib"); - -/* - * Serverprocess to reload duplicates - * - * Step #1: - * All Clusters for the specified targetEntity are deleted. - * Relations between records marked as unrelated are not deleted at this time - * - * Step #2 - * The duplicates cache gets rebuilt - * - * Step #3: - * All unrelated relations between duplicate ids hold their respective cluster id. - * If the same combination of duplicate ids exists in the duplicate cache after the rebuild, - * it is assumed that those records remain duplicates. - * Therefore the saved clusterId gets refreshed with the newly created clusters id. - * - * Relations between unrelated duplicates are deleted, if no cluster contains the same combination of duplicate ids - */ - -// Build Person duplicate cache - -var filterName = vars.get("$local.filterName"); -var targetEntity = vars.get("$local.targetEntity"); -var recordBlockSize = DuplicateScannerUtils.getBlockSize(); - -logging.log(filterName + ": Delete duplicates -> "); -DuplicateScannerUtils.deleteClustersByTargetEntity(targetEntity); - -logging.log(filterName + ": Recalculate duplicates -> "); -DuplicateScannerUtils.rebuildDuplicatesCache(filterName, targetEntity, recordBlockSize, null); - -logging.log(filterName + ": Refresh unrelated duplicates -> "); -DuplicateScannerUtils.refreshUnrelatedDuplicateRelations(targetEntity); - -logging.log(filterName + ": Done rebuilding "); - diff --git a/process/Salesproject_lib/process.js b/process/Salesproject_lib/process.js index 0b58dff6eea514bc1812af026c4d1a0772b811fc..057749c13b05b09b9490f97b010d0bdb36178cb3 100644 --- a/process/Salesproject_lib/process.js +++ b/process/Salesproject_lib/process.js @@ -84,7 +84,9 @@ Salesproject.insertMilestone = function(salesprojectId, type, value, notifyForec */ Salesproject.notifyToUpdateForecast = function() { if (vars.get("$sys.recordstate") != neon.OPERATINGSTATE_NEW) - question.showMessage(translate.text("Please update the ${FORECAST_ENGLISH}."), question.INFORMATION, translate.text("${FORECAST_ENGLISH}")); + { + // TODO: workflows + } } /** diff --git a/process/SetCommunicationSetting_workflowService/SetCommunicationSetting_workflowService.aod b/process/SetCommunicationSetting_workflowService/SetCommunicationSetting_workflowService.aod new file mode 100644 index 0000000000000000000000000000000000000000..cec630dd26074c0e0a1d1f60e3b07537cf8a2886 --- /dev/null +++ b/process/SetCommunicationSetting_workflowService/SetCommunicationSetting_workflowService.aod @@ -0,0 +1,11 @@ +<?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.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> + <name>SetCommunicationSetting_workflowService</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <process>%aditoprj%/process/SetCommunicationSetting_workflowService/process.js</process> + <alias>Data_alias</alias> + <serviceTaskParameterProcess>%aditoprj%/process/SetCommunicationSetting_workflowService/serviceTaskParameterProcess.js</serviceTaskParameterProcess> + <variants> + <element>WORKFLOW</element> + </variants> +</process> diff --git a/process/SetCommunicationSetting_workflowService/process.js b/process/SetCommunicationSetting_workflowService/process.js new file mode 100644 index 0000000000000000000000000000000000000000..093920c3f81f811076d1b245d37c34bdc764133f --- /dev/null +++ b/process/SetCommunicationSetting_workflowService/process.js @@ -0,0 +1,60 @@ +import("system.util"); +import("Sql_lib"); +import("KeywordRegistry_basic"); +import("system.vars"); + +var variables = JSON.parse(vars.get("$local.value")); +var contactId = variables.contactId || variables.targetId; +var channelType = variables.channelType; +var medium = variables.medium || ""; +var channelId = variables.channelId || ""; +var status = variables.status || $KeywordRegistry.communicationSettingStatus$rejected(); + +var settingsIdSql = newSelect("COMMUNICATIONSETTINGSID") + .from("COMMUNICATIONSETTINGS") + .where("COMMUNICATIONSETTINGS.CONTACT_ID", contactId) + .and("COMMUNICATIONSETTINGS.CHANNEL_TYPE", channelType); + +if (medium) +{ + settingsIdSql.and("COMMUNICATIONSETTINGS.MEDIUM", medium); +} +else +{ + settingsIdSql.and("COMMUNICATIONSETTINGS.MEDIUM is null"); +} +if (channelId) +{ + settingsIdSql.and("COMMUNICATIONSETTINGS.CHANNEL_ID", channelId); +} +else +{ + settingsIdSql.and("COMMUNICATIONSETTINGS.CHANNEL_ID is null"); +} +var settingsId = settingsIdSql.cell(); + +if (settingsId) +{ + newWhere("COMMUNICATIONSETTINGS.COMMUNICATIONSETTINGSID", settingsId) + .updateFields({"STATUS": status}); +} +else +{ + settingsId = util.getNewUUID(); + new SqlBuilder() + .tableName("COMMUNICATIONSETTINGS") + .insertFields({ + "COMMUNICATIONSETTINGSID": settingsId, + "CHANNEL_TYPE": channelType, + "CHANNEL_ID": channelId, + "MEDIUM": medium, + "STATUS": status + }); + new SqlBuilder() + .tableName("COMMUNICATIONLEGALBASE") + .insertFields({ + "COMMUNICATIONLEGALBASEID": util.getNewUUID(), + "COMMUNICATIONSETTINGS_ID": settingsId, + "VERSION": 1 + }); +} \ No newline at end of file diff --git a/process/SetCommunicationSetting_workflowService/serviceTaskParameterProcess.js b/process/SetCommunicationSetting_workflowService/serviceTaskParameterProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..3b4e5b8a16918ac0ef83380957b3b5b2248443b0 --- /dev/null +++ b/process/SetCommunicationSetting_workflowService/serviceTaskParameterProcess.js @@ -0,0 +1,15 @@ +import("KeywordRegistry_basic"); +import("system.result"); +import("KeywordData_lib"); +import("Workflow_lib"); + +result.object([ + new WorkflowServiceTaskParameter("channelType", "Channel type", WorkflowServiceTaskParameter.ENUM(), _getKeywords($KeywordRegistry.communicationChannelType())), + new WorkflowServiceTaskParameter("medium", "Medium", WorkflowServiceTaskParameter.ENUM(), _getKeywords($KeywordRegistry.communicationMediumCampaign())), + new WorkflowServiceTaskParameter("status", "Status", WorkflowServiceTaskParameter.ENUM(), _getKeywords($KeywordRegistry.communicationSettingStatus())) +]); + +function _getKeywords (pContainer) +{ + return KeywordData.getSimpleData(pContainer).map(function (item) {return {id : item[0], name : item[1]};}); +} \ No newline at end of file diff --git a/process/SetInterestLink_workflowService/SetInterestLink_workflowService.aod b/process/SetInterestLink_workflowService/SetInterestLink_workflowService.aod new file mode 100644 index 0000000000000000000000000000000000000000..b86df5e7047ab1a0cc534a1f4dfbad242e2d94a7 --- /dev/null +++ b/process/SetInterestLink_workflowService/SetInterestLink_workflowService.aod @@ -0,0 +1,10 @@ +<?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.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> + <name>SetInterestLink_workflowService</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <process>%aditoprj%/process/SetInterestLink_workflowService/process.js</process> + <alias>Data_alias</alias> + <variants> + <element>WORKFLOW</element> + </variants> +</process> diff --git a/process/SetInterestLink_workflowService/process.js b/process/SetInterestLink_workflowService/process.js new file mode 100644 index 0000000000000000000000000000000000000000..b66a48e570ae73bc4fc57e2bd4a01744826ad76f --- /dev/null +++ b/process/SetInterestLink_workflowService/process.js @@ -0,0 +1,42 @@ +import("KeywordRegistry_basic"); +import("system.vars"); +import("system.util"); +import("Sql_lib"); + +var variables = JSON.parse(vars.get("$local.value")); +var contactId = variables.contactId || variables.targetId; +var interestId = variables.interestId; +if (!interestId && variables.mailLogId) +{ + interestId = newSelect("MAIL_RUN.INTERESTID") + .from("MAIL_LOG") + .join("MAIL_RUN", "MAIL_LOG.MAIL_RUN_ID = MAIL_RUN.MAIL_RUNID") + .where("MAIL_LOG.MAIL_LOGID", variables.mailLogId) + .cell(); +} +var status = variables.status || $KeywordRegistry.interestLinkStatus$notSubscribed(); + +var interestLinkId = new SqlBuilder() + .select("INTERESTLINKID") + .from("INTERESTLINK") + .where("INTERESTLINK.CONTACT_ID", contactId) + .and("INTERESTLINK.INTEREST_ID", interestId) + .and("INTERESTLINK.STATUS", status) + .cell(); + +if (interestLinkId) +{ + newWhere("INTERESTLINK.INTERESTLINKID", interestLinkId) + .updateFields({"STATUS": status}); +} +else +{ + new SqlBuilder() + .tableName("INTERESTLINK") + .insertFields({ + "INTERESTLINKID": util.getNewUUID(), + "INTEREST_ID": interestId, + "CONTACT_ID": contactId, + "STATUS": status + }); +} \ No newline at end of file diff --git a/process/Sql_lib/process.js b/process/Sql_lib/process.js index f3708067a34ad01930d3ade922c9520011e1bb91..2e20ae0d4b062631b3b3b76ba9aa498498258ce5 100644 --- a/process/Sql_lib/process.js +++ b/process/Sql_lib/process.js @@ -1017,6 +1017,22 @@ SqlBuilder.prototype.selectDistinct = function (pFields) return this; } +/** + * Sets the select clause to "select count(...)" + * @param {String} [pField=*] sql column to count, if omitted "count(*)" will be used + * @return {SqlBuilder} current SqlBuilder object + */ +SqlBuilder.prototype.selectCount = function (pField) +{ + if (pField == undefined) + { + pField = "*"; + } + this._select = SqlBuilder._getStatement(pField, "select count(", ")", true, true); + return this; +} + + /** * sets an alias-name which is added at some places if this SqlBuilder is used as subselect (e.g. in .select(), .join(), .from(), ...) * @param {String} pSubselectAlias @@ -1416,7 +1432,7 @@ SqlBuilder.prototype._whereSubquery = function(pSubquery, pMandatory, pCondition if (!pCondition) throw SqlBuilder._ERROR_NO_CONDITION(); - if (subQuery.isFullSelect()) + if (subQuery.isFullSelect() || subQuery.hasCondition()) //can also be only an condition if SqlBuilder.NOT() is used { var preparedObj = subQuery.build(); pAddPreparedConditionCallback(this, this._prepare(undefined, preparedObj, pCondition)); @@ -1688,6 +1704,19 @@ SqlBuilder.prototype._or = function(pFieldOrCond, pValue, pMandatory, pCondition }); } +/** + * Constant-like function which provides a value for pCondition if you need a "not" statement. + * + * @return {String} + * + * @example + * var cond = newWhere(null, someCondition, SqlBuilder.NOT()) + */ +SqlBuilder.NOT = function() +{ + return "not ?"; +} + /** * Constant-like function which provides a value for pCondition if you need a "not in" statement. * @@ -3405,7 +3434,7 @@ SqlMaskingUtils.prototype.min = function (pField) */ SqlMaskingUtils.prototype.cast = function (pField, pTargetDatatype, pTargetLength) { - /* Some informations if you want to add supported databaseTypes or dataTypes: + /* Some information if you want to add supported databaseTypes or dataTypes: * You should consider using the _mapDefaults function-expression (details in the functions doc) * However you shouldn't use the function in a "default"-Block of a switch-case because of the following behaviour: * If a datatype is not supported you just have to NOT specify "sqlDataType" (leave it "undefined") -> an error is then raised @@ -3923,6 +3952,32 @@ SqlMaskingUtils.prototype.yearFromDate = function(pField) } } + +/** + * gets the hour from a timestamp + * + * @param {String} pField timestamp to get the year from + * + * @return {String} sql expression that extracts the hour from a timestamp + */ +SqlMaskingUtils.prototype.hourFromDate = function(pField) +{ + switch (this.dbType) + { + case db.DBTYPE_ORACLE10_CLUSTER: + case db.DBTYPE_ORACLE10_THIN: + case db.DBTYPE_ORACLE10_OCI: + return "to_char(" + pField + ",'HH24')"; + case db.DBTYPE_DERBY10: + case db.DBTYPE_MYSQL4: + case db.DBTYPE_MARIADB10: + return "HOUR(" + pField + ")"; + case db.DBTYPE_SQLSERVER2000: + return "DATEPART(hour, "+ pField + ")"; + case db.DBTYPE_POSTGRESQL8: + return "EXTRACT (HOUR FROM " + pField + ")"; + } +} /** * returns the first field, that is not null or empty * masks the behaviour of coalesce with case when @@ -4468,10 +4523,11 @@ SqlUtils.getResolvingCaseWhenFromObject = function(pKeyValueObject, pUid, pTrans * Will quote all prepared statement values from the given statement. * * @param {PreparedSqlArray} pStatement Same as first paraemter of db.translateStatement. + * @param {String} pAlias The database alias * @param {Callback} pExecutionCallback (PreparedSqlArray) => String A function which must return the final SQL. * @return The SQL, same as the result of db.translateStatement. */ -SqlUtils.translateWithQuotes = function(pStatement, pExecutionCallback) +SqlUtils.translateWithQuotes = function(pStatement, pAlias, pExecutionCallback) { // Validate type of incoming paramter. if (!Array.isArray(pStatement)) @@ -4489,7 +4545,14 @@ SqlUtils.translateWithQuotes = function(pStatement, pExecutionCallback) return pValue; // As the first element represents the value it will be quoted here. - return [db.quote(pValue[0]), pValue[1]]; + if(pAlias) + { + return [db.quote(pValue[0], pAlias), pValue[1]]; + } + else + { + return [db.quote(pValue[0]), pValue[1]]; + } }); return pExecutionCallback([pStatement[0], preparedStatements]); @@ -4504,7 +4567,7 @@ SqlUtils.translateWithQuotes = function(pStatement, pExecutionCallback) */ SqlUtils.translateStatementWithQuotes = function(pStatement, pAlias) { - return SqlUtils.translateWithQuotes(pStatement, function(pValue) + return SqlUtils.translateWithQuotes(pStatement, pAlias, function(pValue) { if (pAlias) return db.translateStatement(pValue, pAlias) @@ -4522,7 +4585,7 @@ SqlUtils.translateStatementWithQuotes = function(pStatement, pAlias) */ SqlUtils.translateConditionWithQuotes = function(pStatement, pAlias) { - return SqlUtils.translateWithQuotes(pStatement, function(pValue) + return SqlUtils.translateWithQuotes(pStatement, pAlias, function(pValue) { if (pAlias) return db.translateCondition(pValue, pAlias) @@ -4628,4 +4691,33 @@ SqlUtils.escapeVars = function (pValue) if (typeof(pValue) == "string" && pValue.charAt(0) == "$") return "$" + pValue; return pValue; -} \ No newline at end of file +} + +SqlUtils.getSqlConditionalOperator = function(pOperator) +{ + switch(parseInt(pOperator)) + { + case 1: + return SqlBuilder.EQUAL(); + case 2: + return SqlBuilder.NOT_EQUAL(); + + case 4: + return SqlBuilder.LESS(); + case 5: + return SqlBuilder.LESS_OR_EQUAL(); + + case 3: + return SqlBuilder.GREATER(); + case 6: + return SqlBuilder.GREATER_OR_EQUAL(); + + case 11: + return "# is not null"; + case 12: + return "# is null"; + + default: + throw new Error("Unsupported operator " + pOperator); + } +} diff --git a/process/Supplier_lib/Supplier_lib.aod b/process/Supplier_lib/Supplier_lib.aod new file mode 100644 index 0000000000000000000000000000000000000000..8bfdde7648b095e1294fd0bbfe5ce5350e216070 --- /dev/null +++ b/process/Supplier_lib/Supplier_lib.aod @@ -0,0 +1,9 @@ +<?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.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> + <name>Supplier_lib</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <process>%aditoprj%/process/Supplier_lib/process.js</process> + <variants> + <element>LIBRARY</element> + </variants> +</process> diff --git a/process/Supplier_lib/process.js b/process/Supplier_lib/process.js new file mode 100644 index 0000000000000000000000000000000000000000..6c4788e9134d91f02afa81d1b2253bd26e7567eb --- /dev/null +++ b/process/Supplier_lib/process.js @@ -0,0 +1,27 @@ +/* + * Wrapper object to cache and load suppliers (see DatabaseSupplier_lib) + * + */ + +function CachedSupplierWrapper(pSupplier) +{ + //todo: assertion + this._supplier = pSupplier; + this._valueLoaded = false; + this._cache = null; +} + +CachedSupplierWrapper.prototype.get = function() +{ + if (!this._valueLoaded) + { + this._cache = this.getSupplier().get(); + this._valueLoaded = true; + } + return this._cache; +}; + +CachedSupplierWrapper.prototype.getSupplier = function () +{ + return this._supplier; +}; \ No newline at end of file diff --git a/process/Turnover_lib/process.js b/process/Turnover_lib/process.js index c2f5c6c9de86aaacfe8646551301282a2b085ce7..cdce5cdbe55f3923c72b41938c758d90a6b7dc32 100644 --- a/process/Turnover_lib/process.js +++ b/process/Turnover_lib/process.js @@ -1,3 +1,11 @@ +import("Attribute_lib"); +import("AttributeFilter_lib"); +import("Util_lib"); +import("system.util"); +import("ClassificationFilter_lib"); +import("system.vars"); +import("system.datetime"); +import("JditoFilter_lib"); import("Sql_lib"); import("system.translate"); import("KeywordRegistry_basic"); @@ -95,7 +103,8 @@ TurnoverUtil.getForecastData = function (pMaxYear, pYearCount, pSalesprojectId) ]) .from("FORECAST") .where("FORECAST.DATE_START", pMaxYear, sqlMask.yearFromDate("#") + " <= ?", SQLTYPES.INTEGER) - .and("FORECAST.DATE_START", minYear, sqlMask.yearFromDate("#") + " >= ?", SQLTYPES.INTEGER); + .and("FORECAST.DATE_START", minYear, sqlMask.yearFromDate("#") + " >= ?", SQLTYPES.INTEGER) + .and("FORECAST.KIND", $KeywordRegistry.forecastKind$forecast()); if (pSalesprojectId) { @@ -103,9 +112,9 @@ TurnoverUtil.getForecastData = function (pMaxYear, pYearCount, pSalesprojectId) .and("FORECAST.OBJECT_ROWID", pSalesprojectId) } - forecastSelect.groupBy([sqlMask.yearFromDate("DATE_START"), sqlMask.monthFromDate("DATE_START"), "GROUPCODE"]) + forecastSelect.groupBy([sqlMask.yearFromDate("DATE_START"), sqlMask.monthFromDate("DATE_START"), "GROUPCODE", "KIND"]) .orderBy("yearNum, monthNum"); - + return forecastSelect.table(); } @@ -129,4 +138,664 @@ TurnoverUtil.getTurnoverAndForecastData = function (pMaxYear, pYearCount, pShowF if (pShowForecast) data = data.concat(TurnoverUtil.getForecastData(pMaxYear, pYearCount, pSalesprojectId)); return data; -} \ No newline at end of file +} + + + + +/** + * + * An TurnoverDynamicChart can be used for the dynamic chart turnover<br> + * <i><u>You have to instanciate it with "new".</u></i> + * <p> + * There are also functions where it is not necessary to instantiate it. + * + * @param {Object} pFilter <p> + * The current filter object. <br> + * @class + */ +function TurnoverDynamicChart(pFilter) { + this.groupMapping = TurnoverDynamicChart.getGroupMapping(); + + this.filterMappingPlanning = TurnoverDynamicChart.getFilterMapping("Planning"); + this.filterMappingForecast = TurnoverDynamicChart.getFilterMapping("Forecast"); + this.filterMappingTurnover = TurnoverDynamicChart.getFilterMapping("Turnover"); + + this.filter = pFilter; + + this.idxPlanning = 0; + this.idxForecast = 1; + this.idxTurnover = 2; + this.groupedField = null; + + var thisYear = parseInt(datetime.toDate(vars.get("$sys.date"), "yyyy", "UTC")); + + this.firstYear = thisYear - 2; + this.lastYear = thisYear + 1; + + +} + +/** + * Returns the planning query. + * + */ +TurnoverDynamicChart.prototype.getPlanningFromSql = function () +{ + var sqlHelper = new SqlMaskingUtils(); + + var select = sqlHelper.concatenate(["FORECAST.FORECASTID", "PLANNING_MONTHID"]) + ", '', '', '', "; + + if(this.groupedField) + { + select = this.groupMapping[this.groupedField]["forGrouping"][this.idxPlanning] + " as uid," + + " (" + this.getGroupFieldDisplayValue(this.idxPlanning) + ") as groupField, "; + } + + select += "FORECAST.VOLUME*PLANNING_MONTH.MONTH_FACTOR/100 as sum_planning, " + + "0 as sum_forecast, 0 as sum_turnover, 0 as sum_forecast_weighted "; + + return newSelect(select) + .from("FORECAST") + .join("PLANNING_MONTH", null, null, "cross") + .leftJoin("CONTACT", "FORECAST.CONTACT_ID = CONTACT.CONTACTID and PERSON_ID is null") + .leftJoin("ORGANISATION", "CONTACT.ORGANISATION_ID = ORGANISATION.ORGANISATIONID") + .leftJoin("ADDRESS", "CONTACT.ADDRESS_ID = ADDRESS.ADDRESSID") + .leftJoin("CLASSIFICATIONSTORAGE", "CLASSIFICATIONSTORAGE.OBJECT_ROWID = CONTACT.CONTACTID") + .where("FORECAST.KIND", $KeywordRegistry.forecastKind$planning()) + .and("FORECAST.FORECAST_YEAR", this.firstYear, SqlBuilder.GREATER_OR_EQUAL()) + .and("FORECAST.FORECAST_YEAR", this.lastYear, SqlBuilder.LESS_OR_EQUAL()); + +} + + +/** + * Returns the forecast query. + * + * @param {Boolean} pIsWeighted <p> + * If the forecast should be weighted the value of the parameter is true.<br> + */ +TurnoverDynamicChart.prototype.getForecastFromSql = function (pIsWeighted) +{ + var sqlHelper = new SqlMaskingUtils(); + + var select = "FORECAST.FORECASTID, '', '', '', "; + + if(this.groupedField) + { + select = this.groupMapping[this.groupedField]["forGrouping"][this.idxForecast] + " as uid, " + + "(" + this.getGroupFieldDisplayValue(this.idxForecast) + ") as groupField,"; + } + var volumeColumns = " 0 as sum_planning, FORECAST.VOLUME" + + " as sum_forecast, 0 as sum_turnover, 0 as sum_forecast_weighted"; + + if(pIsWeighted) + { + if(!this.groupedField) + { + select = sqlHelper.concatenate(["FORECAST.FORECASTID", sqlHelper.cast("SALESPROJECT.PROBABILITY", SQLTYPES.VARCHAR, 3)]) +", '', '', '', " ; + } + + volumeColumns = " 0 as sum_planning, 0 as sum_forecast, 0 as sum_turnover, " + + "(FORECAST.VOLUME/100*SALESPROJECT.PROBABILITY)" + + " as sum_forecast_weighted"; + } + + select += volumeColumns; + + return newSelect(select) + .from("FORECAST") + .join("SALESPROJECT", "OBJECT_TYPE = 'Salesproject' and OBJECT_ROWID = SALESPROJECTID") + .leftJoin("CONTACT", "SALESPROJECT.CONTACT_ID = CONTACT.CONTACTID and PERSON_ID is null") + .leftJoin("ORGANISATION", "CONTACT.ORGANISATION_ID = ORGANISATION.ORGANISATIONID") + .leftJoin("ADDRESS", "CONTACT.ADDRESS_ID = ADDRESS.ADDRESSID") + .leftJoin("CLASSIFICATIONSTORAGE", "CLASSIFICATIONSTORAGE.OBJECT_ROWID = CONTACT.CONTACTID") + .where("FORECAST.KIND", $KeywordRegistry.forecastKind$forecast()) + .and("year(FORECAST.DATE_START) >= " + this.firstYear) + .and("year(FORECAST.DATE_START) <= " + this.lastYear); +} + + +/** + * Returns the turnover query. + * + */ +TurnoverDynamicChart.prototype.getTurnoverFromSql = function () +{ + var sqlHelper = new SqlMaskingUtils(); + + var select = "SALESORDERITEM.SALESORDERITEMID, '', '', '', "; + + if(this.groupedField) + { + select = this.groupMapping[this.groupedField]["forGrouping"][this.idxTurnover] + " as uid, " + + "(" + this.getGroupFieldDisplayValue(this.idxTurnover) + ") as groupField, "; + } + + select += " 0 as sum_planning, 0 as sum_forecast, " + + "((SALESORDERITEM.PRICE * SALESORDERITEM.QUANTITY * (100 - " + sqlHelper.isNull("SALESORDERITEM.DISCOUNT", 0) + + ") / 100) + (SALESORDERITEM.PRICE * SALESORDERITEM.QUANTITY * (100 - " + sqlHelper.isNull("SALESORDERITEM.DISCOUNT", 0) + + ") / 100 * " + sqlHelper.isNull("SALESORDERITEM.VAT", 0) + " / 100)) as sum_turnover" + + ", 0 as sum_forecast_weighted"; + + return newSelect(select) + .from("SALESORDERITEM") + .join("SALESORDER", "SALESORDER.SALESORDERID = SALESORDERITEM.SALESORDER_ID") + .leftJoin("CONTACT", "SALESORDER.CONTACT_ID = CONTACT.CONTACTID and PERSON_ID is null") + .leftJoin("ORGANISATION", "CONTACT.ORGANISATION_ID = ORGANISATION.ORGANISATIONID") + .leftJoin("ADDRESS", "CONTACT.ADDRESS_ID = ADDRESS.ADDRESSID") + .leftJoin("CLASSIFICATIONSTORAGE", "CLASSIFICATIONSTORAGE.OBJECT_ROWID = CONTACT.CONTACTID") + .where("year(SALESORDER.SALESORDERDATE) >= " + this.firstYear) + .and("year(SALESORDER.SALESORDERDATE) <= " + this.lastYear); +} + + +/** + * Returns the display part for the from sqls. + * + * @param {int} pIndexGroupMapping <p> + * The index for the grouping object of the diffrent kinds<br> + */ +TurnoverDynamicChart.prototype.getGroupFieldDisplayValue = function (pIndexGroupMapping) +{ + var compareField = this.groupMapping[this.groupedField]["forGrouping"][pIndexGroupMapping]; + var subSqlDisplay; + + switch(this.groupMapping[this.groupedField]["fieldName"]) + { + case "YEAR": + subSqlDisplay = compareField; + break; + case "MONTH": + subSqlDisplay = "case when " + compareField + " = 1 then '" + translate.text("January") + "' " + + "when " + compareField + " = 2 then '" + translate.text("February") + "' " + + "when " + compareField + " = 3 then '" + translate.text("March") + "' " + + "when " + compareField + " = 4 then '" + translate.text("April") + "' " + + "when " + compareField + " = 5 then '" + translate.text("May") + "' " + + "when " + compareField + " = 6 then '" + translate.text("June") + "' " + + "when " + compareField + " = 7 then '" + translate.text("July") + "' " + + "when " + compareField + " = 8 then '" + translate.text("August") + "' " + + "when " + compareField + " = 9 then '" + translate.text("September") + "' " + + "when " + compareField + " = 10 then '" + translate.text("October") + "' " + + "when " + compareField + " = 11 then '" + translate.text("November") + "' " + + "when " + compareField + " = 12 then '" + translate.text("December") + "' end"; + break; + case "ORGANISATION": + subSqlDisplay = "ORGANISATION.NAME"; + break; + case "GROUPCODE": + subSqlDisplay = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.productGroupcode(), compareField); + break; + } + + return subSqlDisplay; +} + + +/** + * Returns the condition for the from sqls. + * + * @param {String} pKind <p> + * <br> Kind of the diffrent categories + */ +TurnoverDynamicChart.prototype.getFilterCond = function (pKind) +{ + var filterCond; + + switch(pKind) + { + case "Planning": + filterCond = JditoFilterUtils.getSqlCondition(this.filter, "FORECAST", null, this.filterMappingPlanning ); + break; + case "Forecast": + filterCond = JditoFilterUtils.getSqlCondition(this.filter, "FORECAST", null, this.filterMappingForecast); + break; + case "Turnover": + filterCond = JditoFilterUtils.getSqlCondition(this.filter, "SALESORDER", null, this.filterMappingTurnover ); + + break; + } + + return filterCond; +} + + +/** + * Returns the finished sql for the from part. <br> + * The sqls of Planning, Forecast and Turnover are put together with a union and the filters are added. + * + */ +TurnoverDynamicChart.prototype.getFromSql = function () +{ + var planningSql= this.getPlanningFromSql(); + var forecastSql = this.getForecastFromSql(); + var forecastWeightedSql = this.getForecastFromSql(true); + var turnoverSql = this.getTurnoverFromSql(); + + if(this.filter != null && this.filter.childs.length > 0) + { + planningSql.and(this.getFilterCond("Planning")); + forecastSql.and(this.getFilterCond("Forecast")); + forecastWeightedSql.and(this.getFilterCond("Forecast")); + turnoverSql.and(this.getFilterCond("Turnover")); + } + + var fromSql = forecastSql.unionAll(turnoverSql).unionAll(planningSql).unionAll(forecastWeightedSql); + return fromSql; +} + + + +/** + * Returns the group mapping Object. <br> + * Structure of the Object: {GroupedFieldName: <br> + * {"forGrouping": [columnPlanning, columnForecast, columnTurnover], <br> + * "fieldName": generalNameOfGroupedFields <br> + * } <br> + * } <br> + */ +TurnoverDynamicChart.getGroupMapping = function () +{ + return { + "TURNOVER_YEAR": {"forGrouping": ["FORECAST.FORECAST_YEAR", "year(FORECAST.DATE_START)", "year(SALESORDER.SALESORDERDATE)"], + "fieldName": "YEAR"}, + "ORGANISATION_ID" : {"forGrouping": ["FORECAST.CONTACT_ID", "SALESPROJECT.CONTACT_ID", "SALESORDER.CONTACT_ID"], + "fieldName": "ORGANISATION"}, + "#EXTENSION.Month_filter.Month_filter#TEXT" : {"forGrouping": ["PLANNING_MONTH.MONTH_NUMBER", "MONTH(FORECAST.DATE_START)", "MONTH(SALESORDER.SALESORDERDATE)"], + "fieldName": "MONTH"}, + "#EXTENSION.Groupcode_filter.Groupcode_filter#TEXT" : {"forGrouping": ["FORECAST.GROUPCODE", "FORECAST.GROUPCODE", "SALESORDERITEM.GROUPCODEID"], + "fieldName": "GROUPCODE"} + }; +} + +/** + * Returns the filter mapping Object. <br> + * Structure of the Object: {Kind: <br> + * {FilteredFieldName: columnName or function} <br> + * } <br> + * @param {String} pKind <p> + * <br> Kind of the diffrent categories + */ +TurnoverDynamicChart.getFilterMapping = function (pKind) +{ + var filterMapping = { + + "Planning": { + "TURNOVER_YEAR" : function (pValue, pOperator) { + return TurnoverDynamicChart.dateCond(pValue, pOperator, "FORECAST.FORECAST_YEAR"); + }, + "#EXTENSION.Month_filter.Month_filter#TEXT" : function (pValue, pOperator) { + return TurnoverDynamicChart.dateCond(pValue, pOperator, "PLANNING_MONTH.MONTH_NUMBER"); + }, + "ORGANISATION_ID" : "FORECAST.CONTACT_ID", + "#EXTENSION.Groupcode_filter.Groupcode_filter#TEXT" : "FORECAST.GROUPCODE", + "#EXTENSION.Salesproject_filter.Salesproject_filter#TEXT" : function (pValue, pOperator) { + + return TurnoverDynamicChart.planningSalesprojectCond(pValue, pOperator); + } + + }, + "Forecast" : { + "TURNOVER_YEAR" : function (pValue, pOperator) { + return TurnoverDynamicChart.dateCond(pValue, pOperator, "YEAR(FORECAST.DATE_START)"); + }, + "#EXTENSION.Month_filter.Month_filter#TEXT" : function (pValue, pOperator) { + return TurnoverDynamicChart.dateCond(pValue, pOperator, "MONTH(FORECAST.DATE_START)"); + }, + "ORGANISATION_ID" :"SALESPROJECT.CONTACT_ID", + "#EXTENSION.Groupcode_filter.Groupcode_filter#TEXT" : "FORECAST.GROUPCODE", + "#EXTENSION.Salesproject_filter.Salesproject_filter#TEXT" : "SALESPROJECT.SALESPROJECTID" + }, + "Turnover" : { + "TURNOVER_YEAR" : function (pValue, pOperator) { + return TurnoverDynamicChart.dateCond(pValue, pOperator, "YEAR(SALESORDER.SALESORDERDATE)"); + }, + "#EXTENSION.Month_filter.Month_filter#TEXT" : function (pValue, pOperator) { + return TurnoverDynamicChart.dateCond(pValue, pOperator, "MONTH(SALESORDER.SALESORDERDATE)"); + }, + "ORGANISATION_ID" : "SALESORDER.CONTACT_ID", + "#EXTENSION.Groupcode_filter.Groupcode_filter#TEXT" : "SALESORDERITEM.GROUPCODEID", + "#EXTENSION.Salesproject_filter.Salesproject_filter#TEXT" : "SALESORDER.OBJECT_ROWID" + } + }; + + for(var key in filterMapping) + { + filterMapping[key]["#EXTENSION.DistrictName_filter.DistrictName_filter#TEXT"] + = function (pValue, pOperator) { + var districtFilter = newSelect("DISTRICT_FILTER").from("DISTRICT") + .where("DISTRICT.DISTRICT_NAME", pValue).cell(); + if(!districtFilter) + { + return "0=1"; + } + var filterJson = JSON.stringify(JSON.parse(districtFilter).filter); + return db.toFilterCondition(filterJson, "Organisation_entity"); + }; + filterMapping[key]["#EXTENSION.DistrictDistrictnumber_filter.DistrictDistrictnumber_filter#NUMBER"] + = function (pValue, pOperator) { + var districtFilter = newSelect("DISTRICT_FILTER").from("DISTRICT") + .where("DISTRICT.DISTRICT_NUMBER", pValue).cell(); + if(!districtFilter) + { + return "0=1"; + } + var filterJson = JSON.stringify(JSON.parse(districtFilter).filter); + return db.toFilterCondition(filterJson, "Organisation_entity"); + }; + } + + filterMapping = TurnoverDynamicChart.addOrganisationFiltersToFilterMapping(filterMapping); + filterMapping = TurnoverDynamicChart.addClassificationGroupFilterToFilterMapping(filterMapping); + filterMapping = TurnoverDynamicChart.addClassificationTypeFilterToFilterMapping(filterMapping); + filterMapping = TurnoverDynamicChart.addAttributeFilterToFilterMapping(filterMapping); + + return filterMapping[pKind]; +} + + +/** + * Adds the organisation filter extensions to the filter object and returns the complete object. <br> + * + * @param {Object} pMapping <p> + * <br> The filter mapping object + */ +TurnoverDynamicChart.addOrganisationFiltersToFilterMapping = function (pMapping) +{ + var orgFilters = [["#EXTENSION.OrgCountry_filter.OrgCountry_filter#TEXT", "ADDRESS.COUNTRY"], + ["#EXTENSION.OrgAddress_filter.OrgAddress_filter#TEXT", "ADDRESS.ADDRESS"], + ["#EXTENSION.OrgDistrict_filter.OrgDistrict_filter#TEXT", "ADDRESS.DISTRICT"], + ["#EXTENSION.OrgState_filter.OrgState_filter#TEXT", "ADDRESS.STATE"], + ["#EXTENSION.OrgZip_filter.OrgZip_filter#TEXT", "ADDRESS.ZIP"], + [ "#EXTENSION.OrgCity_filter.OrgCity_filter#TEXT", "ADDRESS.CITY"], + [ "#EXTENSION.OrgRegion_filter.OrgRegion_filter#TEXT", "ADDRESS.REGION"], + [ "#EXTENSION.OrgType_filter.OrgType_filter#TEXT", "ORGANISATION.KIND"], + [ "#EXTENSION.OrgClassification_filter.OrgClassification_filter#TEXT", "CLASSIFICATIONSTORAGE.CLASSIFICATIONVALUE"], + [ "#EXTENSION.OrgLanguage_filter.OrgLanguage_filter#TEXT", "CONTACT.ISOLANGUAGE"]]; + + orgFilters.forEach(function([filterFieldName, dbFilterColumn]) + { + pMapping.Planning[filterFieldName] = dbFilterColumn; + pMapping.Forecast[filterFieldName] = dbFilterColumn; + pMapping.Turnover[filterFieldName] = dbFilterColumn; + }); + + return pMapping; + +} + + +/** + * Adds the classification group filter extension to the filter object and returns the complete object. <br> + * + * @param {Object} pMapping <p> + * <br> The filter mapping object + */ +TurnoverDynamicChart.addClassificationGroupFilterToFilterMapping = function (pMapping) +{ + + var fields = JSON.parse(ClassificationGroupFilterUtils.makeFilterFields("Organisation")); // gets all possible classification group for filtering + var classificationTable = "CLASSIFICATIONSTORAGE"; + + fields.forEach(function(classificationField) + { + let decodedFilterName = ClassificationGroupFilterNameCoder.decode(classificationField["name"]); //decode the base 64 string to its original form to receive the sql expression of the classification + let sqlCondExpression = decodedFilterName["representingSqlExpression"]; + let filterFieldName = "#EXTENSION.ClassificationGroup_filter." + classificationField.name + "#TEXT"; + + pMapping.Planning[filterFieldName] = function (pValue, pOperator) { + return TurnoverDynamicChart.classificationCond(pValue, pOperator, "FORECAST.CONTACT_ID", sqlCondExpression, classificationTable); + }; + pMapping.Forecast[filterFieldName] = function (pValue, pOperator) { + return TurnoverDynamicChart.classificationCond(pValue, pOperator, "SALESPROJECT.CONTACT_ID", sqlCondExpression, classificationTable); + }; + pMapping.Turnover[filterFieldName] = function (pValue, pOperator) { + return TurnoverDynamicChart.classificationCond(pValue, pOperator, "SALESORDER.CONTACT_ID", sqlCondExpression, classificationTable); + }; + }); + return pMapping; + +} + + +/** + * Adds the classification type filter extensions to the filter object and returns the complete object. <br> + * + * @param {Object} pMapping <p> + * <br> The filter mapping object + */ +TurnoverDynamicChart.addClassificationTypeFilterToFilterMapping = function (pMapping) +{ + + var fields = JSON.parse(ClassificationTypeFilterUtils.getFilterFields("Organisation")); // gets all possible classification types for filtering + var classificationTable = "CLASSIFICATION"; + var compareField = "CLASSIFICATION.VALUE"; + + fields.forEach(function(classificationField) + { + let filterName = classificationField["name"]; + let filterFieldName = "#EXTENSION.ClassificationType_filter." + filterName + "#TEXT"; + + pMapping.Planning[filterFieldName] = function (pValue, pOperator) { + return TurnoverDynamicChart.classificationCond(pValue, pOperator, "FORECAST.CONTACT_ID", compareField, classificationTable); + }; + pMapping.Forecast[filterFieldName] = function (pValue, pOperator) { + return TurnoverDynamicChart.classificationCond(pValue, pOperator, "SALESPROJECT.CONTACT_ID", compareField, classificationTable); + }; + pMapping.Turnover[filterFieldName] = function (pValue, pOperator) { + return TurnoverDynamicChart.classificationCond(pValue, pOperator, "SALESORDER.CONTACT_ID", compareField, classificationTable); + }; + }); + return pMapping; + +} + + +/** + * Adds the attribute filter extensions to the filter object and returns the complete object. <br> + * + * @param {Object} pMapping <p> + * <br> The filter mapping object + */ +TurnoverDynamicChart.addAttributeFilterToFilterMapping = function (pMapping) +{ + var fields = JSON.parse(AttributeFilterExtensionMaker.makeFilterFields("Organisation")); // gets all possible attributes for filtering + + fields.forEach(function(attributeField) + { + let attributeId = JSON.parse(util.decodeBase64String(attributeField.name))["id"]; //decode the base 64 string to its original form to receive the id of the attribute + let type = AttributeUtil.getAttributeType(attributeId); + let valueField = AttributeTypeUtil.getDatabaseField(type); + + pMapping.Planning["#EXTENSION.OrgAttribute_filter." + attributeField.name + "#TEXT"] = function (pValue, pOperator) { + return TurnoverDynamicChart.attributeCond(pValue, pOperator, "FORECAST.CONTACT_ID", attributeId, valueField); + }; + pMapping.Forecast["#EXTENSION.OrgAttribute_filter." + attributeField.name + "#TEXT"] = function (pValue, pOperator) { + return TurnoverDynamicChart.attributeCond(pValue, pOperator, "SALESPROJECT.CONTACT_ID", attributeId, valueField); + }; + pMapping.Turnover["#EXTENSION.OrgAttribute_filter." + attributeField.name + "#TEXT"] = function (pValue, pOperator) { + return TurnoverDynamicChart.attributeCond(pValue, pOperator, "SALESORDER.CONTACT_ID", attributeId, valueField); + }; + }); + + return pMapping; + +} + + +/** + * Returns the cond for Date Columns. + * + * @param {String} pValue <p> + * <br> The value of the chosen filter + * @param {String} pOperator <p> + * <br> The operator of the chosen filter + * @param {String} pColumn <p> + * <br> The column with which the value is compared + */ +TurnoverDynamicChart.dateCond = function (pValue, pOperator, pColumn) { + + var cond = TurnoverDynamicChart.getCondition(pValue, pOperator, pColumn); + + if(Array.isArray(cond)) + { + cond = cond[0]; + cond = cond.replace(new RegExp("#", "g"), pColumn); + cond = cond.replace("?", pValue); + } + + return cond; + +} + +/** + * Returns the cond for classification. + * + * @param {String} pValue <p> + * <br> The value of the chosen filter + * @param {String} pOperator <p> + * <br> The operator of the chosen filter + * @param {String} pContactIdColumn <p> + * <br> The contact id column with which the subselect is compared + * @param {String} pCompareField <p> + * <br> The column name with which the value is compared + * @param {String} pClassificationTable <p> + * <br> The classification table used in the subselect + */ +TurnoverDynamicChart.classificationCond = function (pValue, pOperator, pContactIdColumn, pCompareField, pClassificationTable) { + + var cond = TurnoverDynamicChart.getCondition(pValue, pOperator, pCompareField); + if(Array.isArray(cond)) + { + cond = cond[0]; + cond = cond.replace(new RegExp("#", "g"), " UPPER(" + pCompareField + ")"); + cond = cond.replace("?", " UPPER('" + pValue + "')"); + } + + var resSql = newSelect("CONTACTID") + .from("CONTACT") + .join(pClassificationTable, pClassificationTable + ".OBJECT_ROWID = CONTACT.CONTACTID") + .where(cond); + + var finishedCond = newWhere(pContactIdColumn, resSql, SqlBuilder.IN()); + + return finishedCond; + +} + + +/** + * Returns the cond for Attributes. + * + * @param {String} pValue <p> + * <br> The value of the chosen filter + * @param {String} pOperator <p> + * <br> The operator of the chosen filter + * @param {String} pContactIdColumn <p> + * <br> The contact id column with which the subselect is compared + * @param {String} pAttributeId <p> + * <br> The attribute id of the chosen filter + * @param {String} pValueField <p> + * <br> The column name with which the value is compared + */ +TurnoverDynamicChart.attributeCond = function (pValue, pOperator, pContactIdColumn, pAttributeId, pValueField) { + + let sqlCond = pContactIdColumn; + let subsqlAttributes = newSelect("OBJECT_ROWID") + .from("AB_ATTRIBUTERELATION") + .where("AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID", pAttributeId) + .and("AB_ATTRIBUTERELATION.OBJECT_TYPE", "Organisation"); + + if (pOperator == "ISNULL") + { + sqlCond += " not in (" + subsqlAttributes.toString() + ")"; + } + else if (pOperator == "ISNOTNULL") + { + sqlCond += " in (" + subsqlAttributes.toString() + ")"; + } + else if ( pOperator == "NOT_EQUAL") + { + sqlCond += " not in (" + subsqlAttributes.and("AB_ATTRIBUTERELATION." + pValueField, pValue).toString() + ")"; + } + else if (pOperator == "EQUAL") + { + sqlCond += " in (" + subsqlAttributes.and("AB_ATTRIBUTERELATION." + pValueField, pValue).toString() + ")"; + } + + return sqlCond; + +} + + +/** + * Returns the cond for the planning salesproject filter + * + * @param {String} pValue <p> + * <br> The value of the chosen filter + * @param {String} pOperator <p> + * <br> The operator of the chosen filter + */ +TurnoverDynamicChart.planningSalesprojectCond = function (pValue, pOperator) { + + var contactId = newSelect("CONTACT_ID").from("SALESPROJECT").where("SALESPROJECT.SALESPROJECTID", pValue).cell(); + var compareField = "FORECAST.CONTACT_ID"; + var cond = TurnoverDynamicChart.getCondition(pValue, pOperator, contactId); + if(Array.isArray(cond)) + { + cond = cond[0]; + cond = cond.replace(new RegExp("#", "g"), " UPPER(" + compareField + ")"); + cond = cond.replace("?", " UPPER('" + contactId + "')"); + } + + return cond; + +} + + +/** + * returns [condition, value with wildcards] depending on the operator. + * + * @param {String} pValue <p> + * <br> The value to be compared + * @param {String} pOperator <p> + * <br> The compare operator + * @param {String} pField <p> + * <br> The name of the field to be compared + */ +TurnoverDynamicChart.getCondition = function (pValue, pOperator, pField) +{ + switch (pOperator) + { + case "CONTAINS": + return [SqlBuilder.LIKE(), "%" + pValue + "%"]; + case "CONTAINSNOT": + return [SqlBuilder.NOT_LIKE(), "%" + pValue + "%"]; + case "STARTSWITH": + return [SqlBuilder.LIKE(), pValue + "%"]; + case "ENDSWITH": + return [SqlBuilder.LIKE(), "%" + pValue]; + case "EQUAL": + return [SqlBuilder.EQUAL(), pValue]; + case "NOT_EQUAL": + return [SqlBuilder.NOT_EQUAL(), pValue]; + case "LESS": + return [SqlBuilder.LESS(), pValue]; + case "LESS_OR_EQUAL": + return [SqlBuilder.LESS_OR_EQUAL(), pValue]; + case "GREATER": + return [SqlBuilder.GREATER(), pValue]; + case "GREATER_OR_EQUAL": + return [SqlBuilder.GREATER_OR_EQUAL(), pValue]; + case "ISNULL": + return pField + " is null"; + case "ISNOTNULL": + return pField + " is not null"; + case "TIMEFRAME_EQUAL": + case "TIMEFRAME_COMING": + case "TIMEFRAME_PAST": + var [start, end] = datetime.resolveRelativeDateExpression(pValue); + return newWhere(pField, start, SqlBuilder.GREATER_OR_EQUAL()) + .and(pField, end, SqlBuilder.LESS_OR_EQUAL()); + } +} diff --git a/process/UpdateAdvertisingItem_workflowService/UpdateAdvertisingItem_workflowService.aod b/process/UpdateAdvertisingItem_workflowService/UpdateAdvertisingItem_workflowService.aod new file mode 100644 index 0000000000000000000000000000000000000000..c637a2b20963b8a42b6a454788a7a618857e666d --- /dev/null +++ b/process/UpdateAdvertisingItem_workflowService/UpdateAdvertisingItem_workflowService.aod @@ -0,0 +1,13 @@ +<?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.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> + <name>UpdateAdvertisingItem_workflowService</name> + <title>Update AdvertisingItem</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <documentation>%aditoprj%/process/UpdateAdvertisingItem_workflowService/documentation.adoc</documentation> + <process>%aditoprj%/process/UpdateAdvertisingItem_workflowService/process.js</process> + <alias>Data_alias</alias> + <serviceTaskParameterProcess>%aditoprj%/process/UpdateAdvertisingItem_workflowService/serviceTaskParameterProcess.js</serviceTaskParameterProcess> + <variants> + <element>WORKFLOW</element> + </variants> +</process> diff --git a/process/UpdateAdvertisingItem_workflowService/documentation.adoc b/process/UpdateAdvertisingItem_workflowService/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..350cba290489c9f0c62d1a90224887400187faf5 --- /dev/null +++ b/process/UpdateAdvertisingItem_workflowService/documentation.adoc @@ -0,0 +1,5 @@ += UpdateAdvertisingItem_workflowService +Sets the sent status for multiple AdvertisingItems depending on their handover type. +There can be 2 handover types for which an update should be executed +- digital +- mail (post) \ No newline at end of file diff --git a/process/UpdateAdvertisingItem_workflowService/process.js b/process/UpdateAdvertisingItem_workflowService/process.js new file mode 100644 index 0000000000000000000000000000000000000000..5d279eb5865fc7bd8ae84308a6aa1006deebc9f4 --- /dev/null +++ b/process/UpdateAdvertisingItem_workflowService/process.js @@ -0,0 +1,11 @@ +import("Sql_lib"); +import("system.vars"); + +var variables = JSON.parse(vars.get("$local.value")); + +if (variables.targetContext && variables.targetContext == "Advertising" && variables.targetId) +{ + newWhere("ADVERTISINGITEM.ADVERTISING_ID", variables.targetId).and("ADVERTISINGITEM.DELIVERY", variables.handover).updateFields({ + "SENT": '1' + }); +} \ No newline at end of file diff --git a/process/UpdateAdvertisingItem_workflowService/serviceTaskParameterProcess.js b/process/UpdateAdvertisingItem_workflowService/serviceTaskParameterProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..1f2ee0ebfa5198bf78a7c6dd0fe665d54790447d --- /dev/null +++ b/process/UpdateAdvertisingItem_workflowService/serviceTaskParameterProcess.js @@ -0,0 +1,13 @@ +import("KeywordData_lib"); +import("KeywordRegistry_basic"); +import("Workflow_lib"); +import("system.result"); + +result.object([ + new WorkflowServiceTaskParameter("handover", "Handover", WorkflowServiceTaskParameter.ENUM(), _getKeywords($KeywordRegistry.advertisingDelivery())) +]); + +function _getKeywords (pContainer) +{ + return KeywordData.getSimpleData(pContainer).map(function (item) {return {id : item[0], name : item[1]};}); +} \ No newline at end of file diff --git a/process/UpdateAdvertising_workflowService/UpdateAdvertising_workflowService.aod b/process/UpdateAdvertising_workflowService/UpdateAdvertising_workflowService.aod new file mode 100644 index 0000000000000000000000000000000000000000..a96e358a7ebc6945113d1b6b50f151dee3605b37 --- /dev/null +++ b/process/UpdateAdvertising_workflowService/UpdateAdvertising_workflowService.aod @@ -0,0 +1,12 @@ +<?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.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> + <name>UpdateAdvertising_workflowService</name> + <title>Update Advertising</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <documentation>%aditoprj%/process/UpdateAdvertising_workflowService/documentation.adoc</documentation> + <process>%aditoprj%/process/UpdateAdvertising_workflowService/process.js</process> + <alias>Data_alias</alias> + <variants> + <element>WORKFLOW</element> + </variants> +</process> diff --git a/process/UpdateAdvertising_workflowService/documentation.adoc b/process/UpdateAdvertising_workflowService/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..2610297a18359c456771b4e3c9adc687794c6a0e --- /dev/null +++ b/process/UpdateAdvertising_workflowService/documentation.adoc @@ -0,0 +1,2 @@ +=UpdateAdvertising_workflowService +Updates the status of an Advertising when only one workflow instance is left and the 'follow up' task is set to done \ No newline at end of file diff --git a/process/UpdateAdvertising_workflowService/process.js b/process/UpdateAdvertising_workflowService/process.js new file mode 100644 index 0000000000000000000000000000000000000000..e4b676612a4dbde625b80794c0e693ff24b8333d --- /dev/null +++ b/process/UpdateAdvertising_workflowService/process.js @@ -0,0 +1,26 @@ +import("system.workflow"); +import("KeywordRegistry_basic"); +import("system.vars"); +import("Sql_lib"); + +var variables = JSON.parse(vars.get("$local.value")); + +//we have to ensure that we update only when one instance is left, then a Advertising is 'followed UP' +var workflowVariables = { + "targetContext": variables.targetContext, + "targetId": variables.targetId +}; + +var conf = workflow.createConfigForLoadingProcessInstances().processDefinitionKey("AdvertisingShipment").variables(workflowVariables); +var instance = JSON.parse(workflow.getProcessInstances(conf)); + +if(instance.length == 1) +{ + if (variables.targetContext && variables.targetContext == "Advertising" && variables.targetId) + { + newWhere("ADVERTISING.ADVERTISINGID", variables.targetId).updateFields({ + + "STATUS": $KeywordRegistry.advertisingStatus$followedUp() + }); + } +} \ No newline at end of file diff --git a/process/UpdateOfferStatus_workflowService/UpdateOfferStatus_workflowService.aod b/process/UpdateOfferStatus_workflowService/UpdateOfferStatus_workflowService.aod new file mode 100644 index 0000000000000000000000000000000000000000..45d94d6c135da2b0f7fcec01bc61501c7e85b870 --- /dev/null +++ b/process/UpdateOfferStatus_workflowService/UpdateOfferStatus_workflowService.aod @@ -0,0 +1,11 @@ +<?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.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> + <name>UpdateOfferStatus_workflowService</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <process>%aditoprj%/process/UpdateOfferStatus_workflowService/process.js</process> + <alias>Data_alias</alias> + <serviceTaskParameterProcess>%aditoprj%/process/UpdateOfferStatus_workflowService/serviceTaskParameterProcess.js</serviceTaskParameterProcess> + <variants> + <element>WORKFLOW</element> + </variants> +</process> diff --git a/process/UpdateOfferStatus_workflowService/process.js b/process/UpdateOfferStatus_workflowService/process.js new file mode 100644 index 0000000000000000000000000000000000000000..18596c5690f54cd1842676b8622c3f9d3bb9e86e --- /dev/null +++ b/process/UpdateOfferStatus_workflowService/process.js @@ -0,0 +1,8 @@ +import("system.result"); +import("system.datetime"); +import("Sql_lib"); +import("system.vars"); + +var variables = JSON.parse(vars.get("$local.value")); + +newWhere("OFFER.OFFERID", variables.targetId).updateFields({"STATUS" : variables.status, "APPROVAL" : variables.time}); \ No newline at end of file diff --git a/process/UpdateOfferStatus_workflowService/serviceTaskParameterProcess.js b/process/UpdateOfferStatus_workflowService/serviceTaskParameterProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..5fe0b0f9a0f60dbaeecaeed91e9bec097610ba5c --- /dev/null +++ b/process/UpdateOfferStatus_workflowService/serviceTaskParameterProcess.js @@ -0,0 +1,14 @@ +import("KeywordData_lib"); +import("KeywordRegistry_basic"); +import("Workflow_lib"); +import("system.result"); + +result.object([ + new WorkflowServiceTaskParameter("status", "Status", WorkflowServiceTaskParameter.ENUM(), _getKeywords($KeywordRegistry.offerStatus())), + new WorkflowServiceTaskParameter("time", "Time", WorkflowServiceTaskParameter.NUMBER()) +]); + +function _getKeywords (pContainer) +{ + return KeywordData.getSimpleData(pContainer).map(function (item) {return {id : item[0], name : item[1]};}); +} \ No newline at end of file diff --git a/process/UserAgentParser_lib/UserAgentParser_lib.aod b/process/UserAgentParser_lib/UserAgentParser_lib.aod new file mode 100644 index 0000000000000000000000000000000000000000..3af7739cd1371f4f262239bef668c0e0d982084a --- /dev/null +++ b/process/UserAgentParser_lib/UserAgentParser_lib.aod @@ -0,0 +1,9 @@ +<?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.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> + <name>UserAgentParser_lib</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <process>%aditoprj%/process/UserAgentParser_lib/process.js</process> + <variants> + <element>LIBRARY</element> + </variants> +</process> diff --git a/process/UserAgentParser_lib/process.js b/process/UserAgentParser_lib/process.js new file mode 100644 index 0000000000000000000000000000000000000000..c65f44d00d5c83eee785dab469f6593ac3861262 --- /dev/null +++ b/process/UserAgentParser_lib/process.js @@ -0,0 +1,852 @@ +/*!@license + * UAParser.js v0.7.26 + * Lightweight JavaScript-based User-Agent string parser + * https://github.com/faisalman/ua-parser-js + * + * Copyright © 2012-2021 Faisal Salman <f@faisalman.com> + * Licensed under MIT License + */ + + + +////////////// +// Constants +///////////// + + +var LIBVERSION = '0.7.26', +EMPTY = '', +UNKNOWN = '?', +FUNC_TYPE = 'function', +UNDEF_TYPE = 'undefined', +OBJ_TYPE = 'object', +STR_TYPE = 'string', +MAJOR = 'major', // deprecated +MODEL = 'model', +NAME = 'name', +TYPE = 'type', +VENDOR = 'vendor', +VERSION = 'version', +ARCHITECTURE= 'architecture', +CONSOLE = 'console', +MOBILE = 'mobile', +TABLET = 'tablet', +SMARTTV = 'smarttv', +WEARABLE = 'wearable', +EMBEDDED = 'embedded', +UA_MAX_LENGTH = 255; + + +/////////// +// Helper +////////// + + +var UserAgentParser_util = { + extend : function (regexes, extensions) { + var mergedRegexes = {}; + for (var i in regexes) { + if (extensions[i] && extensions[i].length % 2 === 0) { + mergedRegexes[i] = extensions[i].concat(regexes[i]); + } else { + mergedRegexes[i] = regexes[i]; + } + } + return mergedRegexes; + }, + has : function (str1, str2) { + return typeof str1 === STR_TYPE ? str2.toLowerCase().indexOf(str1.toLowerCase()) !== -1 : false; + }, + lowerize : function (str) { + return str.toLowerCase(); + }, + major : function (version) { + return typeof(version) === STR_TYPE ? version.replace(/[^\d\.]/g,'').split(".")[0] : undefined; + }, + trim : function (str, len) { + str = str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); + return typeof(len) === UNDEF_TYPE ? str : str.substring(0, UA_MAX_LENGTH); + } +}; + + +/////////////// +// Map helper +////////////// + + +var mapper = { + + rgx : function (ua, arrays) { + + var i = 0, j, k, p, q, matches, match; + + // loop through all regexes maps + while (i < arrays.length && !matches) { + + var regex = arrays[i], // even sequence (0,2,4,..) + props = arrays[i + 1]; // odd sequence (1,3,5,..) + j = k = 0; + + // try matching uastring with regexes + while (j < regex.length && !matches) { + + matches = regex[j++].exec(ua); + + if (!!matches) { + for (p = 0; p < props.length; p++) { + match = matches[++k]; + q = props[p]; + // check if given property is actually array + if (typeof q === OBJ_TYPE && q.length > 0) { + if (q.length == 2) { + if (typeof q[1] == FUNC_TYPE) { + // assign modified match + this[q[0]] = q[1].call(this, match); + } else { + // assign given value, ignore regex match + this[q[0]] = q[1]; + } + } else if (q.length == 3) { + // check whether function or regex + if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) { + // call function (usually string mapper) + this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined; + } else { + // sanitize match using given regex + this[q[0]] = match ? match.replace(q[1], q[2]) : undefined; + } + } else if (q.length == 4) { + this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined; + } + } else { + this[q] = match ? match : undefined; + } + } + } + } + i += 2; + } + }, + + str : function (str, map) { + + for (var i in map) { + // check if array + if (typeof map[i] === OBJ_TYPE && map[i].length > 0) { + for (var j = 0; j < map[i].length; j++) { + if (UserAgentParser_util.has(map[i][j], str)) { + return (i === UNKNOWN) ? undefined : i; + } + } + } else if (UserAgentParser_util.has(map[i], str)) { + return (i === UNKNOWN) ? undefined : i; + } + } + return str; + } +}; + + +/////////////// +// String map +////////////// + + +var maps = { + + browser : { + // Safari < 3.0 + oldSafari : { + version : { + '1.0' : '/8', + '1.2' : '/1', + '1.3' : '/3', + '2.0' : '/412', + '2.0.2' : '/416', + '2.0.3' : '/417', + '2.0.4' : '/419', + '?' : '/' + } + }, + oldEdge : { + version : { + '0.1' : '12.', + '21' : '13.', + '31' : '14.', + '39' : '15.', + '41' : '16.', + '42' : '17.', + '44' : '18.' + } + } + }, + + os : { + windows : { + version : { + 'ME' : '4.90', + 'NT 3.11' : 'NT3.51', + 'NT 4.0' : 'NT4.0', + '2000' : 'NT 5.0', + 'XP' : ['NT 5.1', 'NT 5.2'], + 'Vista' : 'NT 6.0', + '7' : 'NT 6.1', + '8' : 'NT 6.2', + '8.1' : 'NT 6.3', + '10' : ['NT 6.4', 'NT 10.0'], + 'RT' : 'ARM' + } + } + } +}; + + +////////////// +// Regex map +///////////// + + +var regexes = { + + browser : [[ + + /\b(?:crmo|crios)\/([\w\.]+)/i // Chrome for Android/iOS + ], [VERSION, [NAME, 'Chrome']], [ + /(?:edgios|edga|edg)\/([\w\.]+)/i // Microsoft Edge + ], [VERSION, [NAME, 'Edge']], [ + /edge\/([\w\.]+)/i // Old Edge (Trident) + ], [[VERSION, mapper.str, maps.browser.oldEdge.version], [NAME, 'Edge']], [ + + // Presto based + /(opera\smini)\/([\w\.-]+)/i, // Opera Mini + /(opera\s[mobiletab]{3,6})\b.+version\/([\w\.-]+)/i, // Opera Mobi/Tablet + /(opera).+version\/([\w\.]+)/i, // Opera > 9.80 + /(opera)[\/\s]+([\w\.]+)/i // Opera < 9.80 + ], [NAME, VERSION], [ + /opios[\/\s]+([\w\.]+)/i // Opera mini on iphone >= 8.0 + ], [VERSION, [NAME, 'Opera Mini']], [ + /\sopr\/([\w\.]+)/i // Opera Webkit + ], [VERSION, [NAME, 'Opera']], [ + + // Mixed + /(kindle)\/([\w\.]+)/i, // Kindle + /(lunascape|maxthon|netfront|jasmine|blazer|instagram)[\/\s]?([\w\.]*)/i, // Lunascape/Maxthon/Netfront/Jasmine/Blazer/Instagram + // Trident based + /(avant\s|iemobile|slim)(?:browser)?[\/\s]?([\w\.]*)/i, // Avant/IEMobile/SlimBrowser + /(ba?idubrowser)[\/\s]?([\w\.]+)/i, // Baidu Browser + /(?:ms|\()(ie)\s([\w\.]+)/i, // Internet Explorer + + // Webkit/KHTML based + /(chromium|flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon)\/([\w\.-]+)/i, + // Chromium/Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon + /(rekonq|puffin|brave|whale|qqbrowserlite|qq)\/([\w\.]+)/i, // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ + /(weibo)__([\d\.]+)/i // Weibo + ], [NAME, VERSION], [ + /(?:[\s\/]uc?\s?browser|(?:juc.+)ucweb)[\/\s]?([\w\.]+)/i // UCBrowser + ], [VERSION, [NAME, 'UCBrowser']], [ + /(?:windowswechat)?\sqbcore\/([\w\.]+)\b.*(?:windowswechat)?/i // WeChat Desktop for Windows Built-in Browser + ], [VERSION, [NAME, 'WeChat(Win) Desktop']], [ + /micromessenger\/([\w\.]+)/i // WeChat + ], [VERSION, [NAME, 'WeChat']], [ + /konqueror\/([\w\.]+)/i // Konqueror + ], [VERSION, [NAME, 'Konqueror']], [ + /trident.+rv[:\s]([\w\.]{1,9})\b.+like\sgecko/i // IE11 + ], [VERSION, [NAME, 'IE']], [ + /yabrowser\/([\w\.]+)/i // Yandex + ], [VERSION, [NAME, 'Yandex']], [ + /(avast|avg)\/([\w\.]+)/i // Avast/AVG Secure Browser + ], [[NAME, /(.+)/, '$1 Secure Browser'], VERSION], [ + /focus\/([\w\.]+)/i // Firefox Focus + ], [VERSION, [NAME, 'Firefox Focus']], [ + /opt\/([\w\.]+)/i // Opera Touch + ], [VERSION, [NAME, 'Opera Touch']], [ + /coc_coc_browser\/([\w\.]+)/i // Coc Coc Browser + ], [VERSION, [NAME, 'Coc Coc']], [ + /dolfin\/([\w\.]+)/i // Dolphin + ], [VERSION, [NAME, 'Dolphin']], [ + /coast\/([\w\.]+)/i // Opera Coast + ], [VERSION, [NAME, 'Opera Coast']], + [/xiaomi\/miuibrowser\/([\w\.]+)/i // MIUI Browser + ], [VERSION, [NAME, 'MIUI Browser']], [ + /fxios\/([\w\.-]+)/i // Firefox for iOS + ], [VERSION, [NAME, 'Firefox']], [ + /(qihu|qhbrowser|qihoobrowser|360browser)/i // 360 + ], [[NAME, '360 Browser']], [ + /(oculus|samsung|sailfish)browser\/([\w\.]+)/i + ], [[NAME, /(.+)/, '$1 Browser'], VERSION], [ // Oculus/Samsung/Sailfish Browser + /(comodo_dragon)\/([\w\.]+)/i // Comodo Dragon + ], [[NAME, /_/g, ' '], VERSION], [ + /m?(qqbrowser|baiduboxapp|2345Explorer)[\/\s]?([\w\.]+)/i // QQBrowser/Baidu App/2345 Browser + ], [NAME, VERSION], [ + /(MetaSr)[\/\s]?([\w\.]+)/i, // SouGouBrowser + /(LBBROWSER)/i // LieBao Browser + ], [NAME], [ + + // WebView + /;fbav\/([\w\.]+);/i // Facebook App for iOS & Android with version + ], [VERSION, [NAME, 'Facebook']], [ + /FBAN\/FBIOS|FB_IAB\/FB4A/i // Facebook App for iOS & Android without version + ], [[NAME, 'Facebook']], [ + /\s(electron)\/([\w\.]+)\ssafari/i, // Electron-based App + /safari\s(line)\/([\w\.]+)/i, // Line App for iOS + /\b(line)\/([\w\.]+)\/iab/i // Line App for Android + ], [NAME, VERSION], [ + /\bgsa\/([\w\.]+)\s.*safari\//i // Google Search Appliance on iOS + ], [VERSION, [NAME, 'GSA']], [ + + /headlesschrome(?:\/([\w\.]+)|\s)/i // Chrome Headless + ], [VERSION, [NAME, 'Chrome Headless']], [ + + /\swv\).+(chrome)\/([\w\.]+)/i // Chrome WebView + ], [[NAME, 'Chrome WebView'], VERSION], [ + + /droid.+\sversion\/([\w\.]+)\b.+(?:mobile\ssafari|safari)/i // Android Browser + ], [VERSION, [NAME, 'Android Browser']], [ + + /(chrome|omniweb|arora|[tizenoka]{5}\s?browser)\/v?([\w\.]+)/i // Chrome/OmniWeb/Arora/Tizen/Nokia + ], [NAME, VERSION], [ + + /version\/([\w\.]+)\s.*mobile\/\w+\s(safari)/i // Mobile Safari + ], [VERSION, [NAME, 'Mobile Safari']], [ + /version\/([\w\.]+)\s.*(mobile\s?safari|safari)/i // Safari & Safari Mobile + ], [VERSION, NAME], [ + /webkit.+?(mobile\s?safari|safari)(\/[\w\.]+)/i // Safari < 3.0 + ], [NAME, [VERSION, mapper.str, maps.browser.oldSafari.version]], [ + + /(webkit|khtml)\/([\w\.]+)/i + ], [NAME, VERSION], [ + + // Gecko based + /(navigator|netscape)\/([\w\.-]+)/i // Netscape + ], [[NAME, 'Netscape'], VERSION], [ + /(swiftfox)/i, // Swiftfox + /(icedragon|iceweasel|camino|chimera|fennec|maemo\sbrowser|minimo|conkeror)[\/\s]?([\w\.\+]+)/i, + // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror + /(firefox|seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\/([\w\.-]+)$/i, + // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix + /(firefox)\/([\w\.]+)\s[\w\s\-]+\/[\w\.]+$/i, // Other Firefox-based + /(mozilla)\/([\w\.]+)\s.+rv\:.+gecko\/\d+/i, // Mozilla + + // Other + /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir)[\/\s]?([\w\.]+)/i, + // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir + /(links)\s\(([\w\.]+)/i, // Links + /(gobrowser)\/?([\w\.]*)/i, // GoBrowser + /(ice\s?browser)\/v?([\w\._]+)/i, // ICE Browser + /(mosaic)[\/\s]([\w\.]+)/i // Mosaic + ], [NAME, VERSION] + ], + + cpu : [[ + + /(?:(amd|x(?:(?:86|64)[_-])?|wow|win)64)[;\)]/i // AMD64 (x64) + ], [[ARCHITECTURE, 'amd64']], [ + + /(ia32(?=;))/i // IA32 (quicktime) + ], [[ARCHITECTURE, UserAgentParser_util.lowerize]], [ + + /((?:i[346]|x)86)[;\)]/i // IA32 (x86) + ], [[ARCHITECTURE, 'ia32']], [ + + /\b(aarch64|armv?8e?l?)\b/i // ARM64 + ], [[ARCHITECTURE, 'arm64']], [ + + /\b(arm(?:v[67])?ht?n?[fl]p?)\b/i // ARMHF + ], [[ARCHITECTURE, 'armhf']], [ + + // PocketPC mistakenly identified as PowerPC + /windows\s(ce|mobile);\sppc;/i + ], [[ARCHITECTURE, 'arm']], [ + + /((?:ppc|powerpc)(?:64)?)(?:\smac|;|\))/i // PowerPC + ], [[ARCHITECTURE, /ower/, '', UserAgentParser_util.lowerize]], [ + + /(sun4\w)[;\)]/i // SPARC + ], [[ARCHITECTURE, 'sparc']], [ + + /((?:avr32|ia64(?=;))|68k(?=\))|\barm(?:64|(?=v(?:[1-7]|[5-7]1)l?|;|eabi))|(?=atmel\s)avr|(?:irix|mips|sparc)(?:64)?\b|pa-risc)/i + // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC + ], [[ARCHITECTURE, UserAgentParser_util.lowerize]] + ], + + device : [[ + + ////////////////////// + // MOBILES & TABLETS + ///////////////////// + + // Samsung + /\b(sch-i[89]0\d|shw-m380s|sm-p(?:605|610|587)|sm-t\w+|gt-p\d{4}|gt-n\d+|sgh-t8[56]9|nexus\s10)/i, + ], [MODEL, [VENDOR, 'Samsung'], [TYPE, TABLET]], [ + /(s[cgp]h-\w+|gt-\w+|galaxy\snexus|sm-\w[\w\d]+)/i, + /\ssamsung[\s-]([\w-]+)/i, + /sec-(sgh\w+)/i + ], [MODEL, [VENDOR, 'Samsung'], [TYPE, MOBILE]], [ + + // Apple + /\((ip(?:hone|od)[\s\w]*);/i // iPod/iPhone + ], [MODEL, [VENDOR, 'Apple'], [TYPE, MOBILE]], [ + /\((ipad);[\w\s\),;-]+(apple)/i // iPad + ], [MODEL, VENDOR, [TYPE, TABLET]], [ + /applecoremedia\/[\w\.]+\s\((ipad)/i + ], [MODEL, [VENDOR, 'Apple'], [TYPE, TABLET]], [ + + // Huawei + /d\/huawei([\w\s-]+)[;\)]/i, + /\b(nexus\s6p|vog-[at]?l\d\d|ane-[at]?l[x\d]\d|eml-a?l\d\da?|lya-[at]?l\d[\dc]|clt-a?l\d\di?|ele-l\d\d)/i, + /\b(\w{2,4}-[atu][ln][01259][019])[;\)\s]/i + ], [MODEL, [VENDOR, 'Huawei'], [TYPE, MOBILE]], [ + /\b(bah2?-a?[lw]\d{2})/i // Huawei MediaPad + ], [MODEL, [VENDOR, 'Huawei'], [TYPE, TABLET]], [ + + // Xiaomi + /\b(poco[\s\w]+)(?:\sbuild|\))/i, // Xiaomi POCO + /\b;\s(\w+)\s+build\/hm\1/i, // Xiaomi Hongmi 'numeric' models + /\b(hm[\s\-_]?note?[\s_]?(?:\d\w)?)\sbuild/i, // Xiaomi Hongmi + /\b(redmi[\s\-_]?(?:note|k)?[\w\s_]+)(?:\sbuild|\))/i, // Xiaomi Redmi + /\b(mi[\s\-_]?(?:a\d|one|one[\s_]plus|note lte)?[\s_]?(?:\d?\w?)[\s_]?(?:plus)?)\sbuild/i // Xiaomi Mi + ], [[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, MOBILE]], [ + /\b(mi[\s\-_]?(?:pad)(?:[\w\s_]+))(?:\sbuild|\))/i // Mi Pad tablets + ],[[MODEL, /_/g, ' '], [VENDOR, 'Xiaomi'], [TYPE, TABLET]], [ + + // OPPO + /;\s(\w+)\sbuild.+\soppo/i, + /\s(cph[12]\d{3}|p(?:af|c[al]|d\w|e[ar])[mt]\d0|x9007)\b/i + ], [MODEL, [VENDOR, 'OPPO'], [TYPE, MOBILE]], [ + + // Vivo + /\svivo\s(\w+)(?:\sbuild|\))/i, + /\s(v[12]\d{3}\w?[at])(?:\sbuild|;)/i + ], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [ + + // Realme + /\s(rmx[12]\d{3})(?:\sbuild|;)/i + ], [MODEL, [VENDOR, 'Realme'], [TYPE, MOBILE]], [ + + // Motorola + /\s(milestone|droid(?:[2-4x]|\s(?:bionic|x2|pro|razr))?:?(\s4g)?)\b[\w\s]+build\//i, + /\smot[\s-](\w*)/i, + /(moto[\s\w\(\)]+(?=\sbuild|\)))/i, + /(xt\d{3,4})\sbuild\//i, + /(nexus\s6)/i + ], [MODEL, [VENDOR, 'Motorola'], [TYPE, MOBILE]], [ + /\s(mz60\d|xoom[\s2]{0,2})\sbuild\//i + ], [MODEL, [VENDOR, 'Motorola'], [TYPE, TABLET]], [ + + // LG + /((?=lg)?[vl]k\-?\d{3})\s+build|\s3\.[\s\w;-]{10}lg?-([06cv9]{3,4})/i + ], [MODEL, [VENDOR, 'LG'], [TYPE, TABLET]], [ + /(nexus\s[45])/i, + /lg[e;\s\/-]+((?!browser|netcast)\w+)/i, + /\blg(\-?[\d\w]+)\s+build/i + ], [MODEL, [VENDOR, 'LG'], [TYPE, MOBILE]], [ + + // Lenovo + /(ideatab[\w\-\s]+)/i, + /lenovo\s?(s(?:5000|6000)(?:[\w-]+)|tab(?:[\s\w]+)|[\w-]+)/i // Lenovo tablets + ], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [ + + // Nokia + /(?:maemo|nokia).*(n900|lumia\s\d+)/i, + /nokia[\s_-]?([\w\.-]*)/i + ], [MODEL, [VENDOR, 'Nokia'], [TYPE, MOBILE]], [ + + // Google + /droid.+;\s(pixel\sc)[\s)]/i // Google Pixel C + ], [MODEL, [VENDOR, 'Google'], [TYPE, TABLET]], [ + /droid.+;\s(pixel[\s\daxl]{0,6})(?:\sbuild|\))/i // Google Pixel + ], [MODEL, [VENDOR, 'Google'], [TYPE, MOBILE]], [ + + // Sony + /droid.+\s([c-g]\d{4}|so[-l]\w+|xq-a\w[4-7][12])(?=\sbuild\/|\).+chrome\/(?![1-6]{0,1}\d\.))/i + ], [MODEL, [VENDOR, 'Sony'], [TYPE, MOBILE]], [ + /sony\stablet\s[ps]\sbuild\//i, + /(?:sony)?sgp\w+(?:\sbuild\/|\))/i + ], [[MODEL, 'Xperia Tablet'], [VENDOR, 'Sony'], [TYPE, TABLET]], [ + + // OnePlus + /\s(kb2005|in20[12]5|be20[12][59])\b/i, + /\ba000(1)\s+build/i, // OnePlus + /\boneplus\s(a\d{4})[\s)]/i + ], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [ + + // Amazon + /(alexa)webm/i, + /(kf[a-z]+)(\sbuild\/|\)).+silk\//i // Kindle Fire HD + ], [MODEL, [VENDOR, 'Amazon'], [TYPE, TABLET]], [ + /(sd|kf)[0349hijorstuw]+(\sbuild\/|\)).+silk\//i // Fire Phone + ], [[MODEL, 'Fire Phone'], [VENDOR, 'Amazon'], [TYPE, MOBILE]], [ + + // BlackBerry + /\((playbook);[\w\s\),;-]+(rim)/i // BlackBerry PlayBook + ], [MODEL, VENDOR, [TYPE, TABLET]], [ + /\(bb10;\s(\w+)/i // BlackBerry 10 + ], [MODEL, [VENDOR, 'BlackBerry'], [TYPE, MOBILE]], [ + + // Asus + /\b(transfo[prime\s]{4,10}\s\w+|eeepc|slider\s\w+|nexus\s7|padfone|p00c)/i + ], [MODEL, [VENDOR, 'ASUS'], [TYPE, TABLET]], [ + /\s(z[es]6[027][01][km][ls]|zenfone\s\d\w?)\b/i + ], [MODEL, [VENDOR, 'ASUS'], [TYPE, MOBILE]], [ + + // HTC + /(nexus\s9)/i // HTC Nexus 9 + ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [ + /(htc)[;_\s-]{1,2}([\w\s]+(?=\)|\sbuild)|\w+)/i, // HTC + + // ZTE + /(zte)-(\w*)/i, + /(alcatel|geeksphone|nexian|panasonic|(?=;\s)sony)[_\s-]?([\w-]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony + ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [ + + // Acer + /droid[x\d\.\s;]+\s([ab][1-7]\-?[0178a]\d\d?)/i + ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [ + + // Meizu + /droid.+;\s(m[1-5]\snote)\sbuild/i, + /\bmz-([\w-]{2,})/i + ], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [ + + // MIXED + /(blackberry)[\s-]?(\w+)/i, // BlackBerry + /(blackberry|benq|palm(?=\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[\s_-]?([\w-]*)/i, + // BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron + /(hp)\s([\w\s]+\w)/i, // HP iPAQ + /(asus)-?(\w+)/i, // Asus + /(microsoft);\s(lumia[\s\w]+)/i, // Microsoft Lumia + /(lenovo)[_\s-]?([\w-]+)/i, // Lenovo + /linux;.+(jolla);/i, // Jolla + /droid.+;\s(oppo)\s?([\w\s]+)\sbuild/i // OPPO + ], [VENDOR, MODEL, [TYPE, MOBILE]], [ + + /(archos)\s(gamepad2?)/i, // Archos + /(hp).+(touchpad)/i, // HP TouchPad + /(hp).+(tablet)/i, // HP Tablet + /(kindle)\/([\w\.]+)/i, // Kindle + /\s(nook)[\w\s]+build\/(\w+)/i, // Nook + /(dell)\s(strea[kpr\s\d]*[\dko])/i, // Dell Streak + /[;\/]\s?(le[\s\-]+pan)[\s\-]+(\w{1,9})\sbuild/i, // Le Pan Tablets + /[;\/]\s?(trinity)[\-\s]*(t\d{3})\sbuild/i, // Trinity Tablets + /\b(gigaset)[\s\-]+(q\w{1,9})\sbuild/i, // Gigaset Tablets + /\b(vodafone)\s([\w\s]+)(?:\)|\sbuild)/i // Vodafone + ], [VENDOR, MODEL, [TYPE, TABLET]], [ + + /\s(surface\sduo)\s/i // Surface Duo + ], [MODEL, [VENDOR, 'Microsoft'], [TYPE, TABLET]], [ + /\s(u304aa)\sbuild/i // AT&T + ], [MODEL, [VENDOR, 'AT&T'], [TYPE, MOBILE]], [ + /sie-(\w*)/i // Siemens + ], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [ + /[;\/]\s?(rct\w+)\sbuild/i // RCA Tablets + ], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [ + /[;\/\s](venue[\d\s]{2,7})\sbuild/i // Dell Venue Tablets + ], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [ + /[;\/]\s?(q(?:mv|ta)\w+)\sbuild/i // Verizon Tablet + ], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [ + /[;\/]\s(?:barnes[&\s]+noble\s|bn[rt])([\w\s\+]*)\sbuild/i // Barnes & Noble Tablet + ], [MODEL, [VENDOR, 'Barnes & Noble'], [TYPE, TABLET]], [ + /[;\/]\s(tm\d{3}\w+)\sbuild/i + ], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [ + /;\s(k88)\sbuild/i // ZTE K Series Tablet + ], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [ + /;\s(nx\d{3}j)\sbuild/i // ZTE Nubia + ], [MODEL, [VENDOR, 'ZTE'], [TYPE, MOBILE]], [ + /[;\/]\s?(gen\d{3})\sbuild.*49h/i // Swiss GEN Mobile + ], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [ + /[;\/]\s?(zur\d{3})\sbuild/i // Swiss ZUR Tablet + ], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [ + /[;\/]\s?((zeki)?tb.*\b)\sbuild/i // Zeki Tablets + ], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [ + /[;\/]\s([yr]\d{2})\sbuild/i, + /[;\/]\s(dragon[\-\s]+touch\s|dt)(\w{5})\sbuild/i // Dragon Touch Tablet + ], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [ + /[;\/]\s?(ns-?\w{0,9})\sbuild/i // Insignia Tablets + ], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [ + /[;\/]\s?((nxa|Next)-?\w{0,9})\sbuild/i // NextBook Tablets + ], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [ + /[;\/]\s?(xtreme\_)?(v(1[045]|2[015]|[3469]0|7[05]))\sbuild/i + ], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [ // Voice Xtreme Phones + /[;\/]\s?(lvtel\-)?(v1[12])\sbuild/i // LvTel Phones + ], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [ + /;\s(ph-1)\s/i + ], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [ // Essential PH-1 + /[;\/]\s?(v(100md|700na|7011|917g).*\b)\sbuild/i // Envizen Tablets + ], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [ + /[;\/]\s?(trio[\s\w\-\.]+)\sbuild/i // MachSpeed Tablets + ], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [ + /[;\/]\s?tu_(1491)\sbuild/i // Rotor Tablets + ], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]], [ + /(shield[\w\s]+)\sbuild/i // Nvidia Shield Tablets + ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, TABLET]], [ + /(sprint)\s(\w+)/i // Sprint Phones + ], [VENDOR, MODEL, [TYPE, MOBILE]], [ + /(kin\.[onetw]{3})/i // Microsoft Kin + ], [[MODEL, /\./g, ' '], [VENDOR, 'Microsoft'], [TYPE, MOBILE]], [ + /droid\s[\d\.]+;\s(cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\)/i // Zebra + ], [MODEL, [VENDOR, 'Zebra'], [TYPE, TABLET]], [ + /droid\s[\d\.]+;\s(ec30|ps20|tc[2-8]\d[kx])\)/i + ], [MODEL, [VENDOR, 'Zebra'], [TYPE, MOBILE]], [ + + /////////////////// + // CONSOLES + /////////////////// + + /\s(ouya)\s/i, // Ouya + /(nintendo)\s([wids3utch]+)/i // Nintendo + ], [VENDOR, MODEL, [TYPE, CONSOLE]], [ + /droid.+;\s(shield)\sbuild/i // Nvidia + ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [ + /(playstation\s[345portablevi]+)/i // Playstation + ], [MODEL, [VENDOR, 'Sony'], [TYPE, CONSOLE]], [ + /[\s\(;](xbox(?:\sone)?(?!;\sxbox))[\s\);]/i // Microsoft Xbox + ], [MODEL, [VENDOR, 'Microsoft'], [TYPE, CONSOLE]], [ + + /////////////////// + // SMARTTVS + /////////////////// + + /smart-tv.+(samsung)/i // Samsung + ], [VENDOR, [TYPE, SMARTTV], MODEL], [ + /hbbtv.+maple;(\d+)/i + ], [[MODEL, /^/, 'SmartTV'], [VENDOR, 'Samsung'], [TYPE, SMARTTV]], [ + /linux;\snetcast.+smarttv/i, // LG SmartTV + /lg\snetcast\.tv-201\d/i + ], [[VENDOR, 'LG'], MODEL, [TYPE, SMARTTV]], [ + /(apple)\s?tv/i // Apple TV + ], [VENDOR, [MODEL, 'Apple TV'], [TYPE, SMARTTV]], [ + /crkey/i // Google Chromecast + ], [[MODEL, 'Chromecast'], [VENDOR, 'Google'], [TYPE, SMARTTV]], [ + /droid.+aft([\w])(\sbuild\/|\))/i // Fire TV + ], [MODEL, [VENDOR, 'Amazon'], [TYPE, SMARTTV]], [ + /\(dtv[\);].+(aquos)/i // Sharp + ], [MODEL, [VENDOR, 'Sharp'], [TYPE, SMARTTV]], [ + /hbbtv\/\d+\.\d+\.\d+\s+\([\w\s]*;\s*(\w[^;]*);([^;]*)/i // HbbTV devices + ], [[VENDOR, UserAgentParser_util.trim], [MODEL, UserAgentParser_util.trim], [TYPE, SMARTTV]], [ + /[\s\/\(](android\s|smart[-\s]?|opera\s)tv[;\)\s]/i // SmartTV from Unidentified Vendors + ], [[TYPE, SMARTTV]], [ + + /////////////////// + // WEARABLES + /////////////////// + + /((pebble))app\/[\d\.]+\s/i // Pebble + ], [VENDOR, MODEL, [TYPE, WEARABLE]], [ + /droid.+;\s(glass)\s\d/i // Google Glass + ], [MODEL, [VENDOR, 'Google'], [TYPE, WEARABLE]], [ + /droid\s[\d\.]+;\s(wt63?0{2,3})\)/i + ], [MODEL, [VENDOR, 'Zebra'], [TYPE, WEARABLE]], [ + + //////////////////// + // MIXED (GENERIC) + /////////////////// + + /droid .+?; ([^;]+?)(?: build|\) applewebkit).+? mobile safari/i // Android Phones from Unidentified Vendors + ], [MODEL, [TYPE, MOBILE]], [ + /droid .+?;\s([^;]+?)(?: build|\) applewebkit).+?(?! mobile) safari/i // Android Tablets from Unidentified Vendors + ], [MODEL, [TYPE, TABLET]], [ + /\s(tablet|tab)[;\/]/i, // Unidentifiable Tablet + /\s(mobile)(?:[;\/]|\ssafari)/i // Unidentifiable Mobile + ], [[TYPE, UserAgentParser_util.lowerize]], [ + /(android[\w\.\s\-]{0,9});.+build/i // Generic Android Device + ], [MODEL, [VENDOR, 'Generic']], [ + /(phone)/i + ], [[TYPE, MOBILE]] + ], + + engine : [[ + + /windows.+\sedge\/([\w\.]+)/i // EdgeHTML + ], [VERSION, [NAME, 'EdgeHTML']], [ + + /webkit\/537\.36.+chrome\/(?!27)([\w\.]+)/i // Blink + ], [VERSION, [NAME, 'Blink']], [ + + /(presto)\/([\w\.]+)/i, // Presto + /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\/([\w\.]+)/i, + // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna + /(khtml|tasman|links)[\/\s]\(?([\w\.]+)/i, // KHTML/Tasman/Links + /(icab)[\/\s]([23]\.[\d\.]+)/i // iCab + ], [NAME, VERSION], [ + + /rv\:([\w\.]{1,9})\b.+(gecko)/i // Gecko + ], [VERSION, NAME] + ], + + os : [[ + + // Windows + /microsoft\s(windows)\s(vista|xp)/i // Windows (iTunes) + ], [NAME, VERSION], [ + /(windows)\snt\s6\.2;\s(arm)/i, // Windows RT + /(windows\sphone(?:\sos)*)[\s\/]?([\d\.\s\w]*)/i, // Windows Phone + /(windows\smobile|windows)[\s\/]?([ntce\d\.\s]+\w)(?!.+xbox)/i + ], [NAME, [VERSION, mapper.str, maps.os.windows.version]], [ + /(win(?=3|9|n)|win\s9x\s)([nt\d\.]+)/i + ], [[NAME, 'Windows'], [VERSION, mapper.str, maps.os.windows.version]], [ + + // iOS/macOS + /ip[honead]{2,4}\b(?:.*os\s([\w]+)\slike\smac|;\sopera)/i, // iOS + /cfnetwork\/.+darwin/i + ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [ + /(mac\sos\sx)\s?([\w\s\.]*)/i, + /(macintosh|mac(?=_powerpc)\s)(?!.+haiku)/i // Mac OS + ], [[NAME, 'Mac OS'], [VERSION, /_/g, '.']], [ + + // Mobile OSes + /(android|webos|palm\sos|qnx|bada|rim\stablet\sos|meego|sailfish|contiki)[\/\s-]?([\w\.]*)/i, + // Android/WebOS/Palm/QNX/Bada/RIM/MeeGo/Contiki/Sailfish OS + /(blackberry)\w*\/([\w\.]*)/i, // Blackberry + /(tizen|kaios)[\/\s]([\w\.]+)/i // Tizen/KaiOS + ], [NAME, VERSION], [ + /\(bb(10);/i // BlackBerry 10 + ], [VERSION, [NAME, 'BlackBerry']], [ + /(?:symbian\s?os|symbos|s60(?=;)|series60)[\/\s-]?([\w\.]*)/i // Symbian + ], [VERSION, [NAME, 'Symbian']], [ + /\((series40);/i // Series 40 + ], [NAME], [ + /mozilla.+\(mobile;.+gecko.+firefox/i // Firefox OS + ], [[NAME, 'Firefox OS']], [ + /\b(?:hp)?wos(?:browser)?\/([\w\.]+)/i // WebOS + ], [VERSION, [NAME, 'webOS']], [ + + // Google Chromecast + /crkey\/([\d\.]+)/i // Google Chromecast + ], [VERSION, [NAME, 'Chromecast']], [ + + // Console + /(nintendo|playstation)\s([wids345portablevuch]+)/i, // Nintendo/Playstation + /(xbox);\s+xbox\s([^\);]+)/i, // Microsoft Xbox (360, One, X, S, Series X, Series S) + + // GNU/Linux based + /(mint)[\/\s\(\)]?(\w*)/i, // Mint + /(mageia|vectorlinux)[;\s]/i, // Mageia/VectorLinux + /(joli|[kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?=\slinux)|slackware|fedora|mandriva|centos|pclinuxos|redhat|zenwalk|linpus|raspbian)(?:\sgnu\/linux)?(?:\slinux)?[\/\s-]?(?!chrom|package)([\w\.-]*)/i, + // Joli/Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware + // Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus + /(hurd|linux)\s?([\w\.]*)/i, // Hurd/Linux + /(gnu)\s?([\w\.]*)/i // GNU + ], [NAME, VERSION], [ + + /(cros)\s[\w]+\s([\w\.]+\w)/i // Chromium OS + ], [[NAME, 'Chromium OS'], VERSION],[ + + // Solaris + /(sunos)\s?([\w\.\d]*)/i // Solaris + ], [[NAME, 'Solaris'], VERSION], [ + + // BSD based + /\s([frentopc-]{0,4}bsd|dragonfly)\s?(?!amd|[ix346]{1,2}86)([\w\.]*)/i // FreeBSD/NetBSD/OpenBSD/PC-BSD/DragonFly + ], [NAME, VERSION],[ + + /(haiku)\s(\w+)/i // Haiku + ], [NAME, VERSION],[ + + // Other + /((?:open)?solaris)[\/\s-]?([\w\.]*)/i, // Solaris + /(aix)\s((\d)(?=\.|\)|\s)[\w\.])*/i, // AIX + /(plan\s9|minix|beos|os\/2|amigaos|morphos|risc\sos|openvms|fuchsia)/i, + // Plan9/Minix/BeOS/OS2/AmigaOS/MorphOS/RISCOS/OpenVMS/Fuchsia + /(unix)\s?([\w\.]*)/i // UNIX + ], [NAME, VERSION] + ] +}; + +/*Slightly Modified Version of https://github.com/faisalman/ua-parser-js + *(removed all the window code used in browsers, renamed util) + * + *Constructor for an UserAgentParser to get Information about used device/os/browser + * + *@param {String} ua The User Agent part of the http header + * + *@param {object} extensions Optional Parameter for your own custom detections. + * Example: + * var myOwnListOfBrowsers = [ + * [/(mybrowser)\/([\w\.]+)/i], [UAParser.BROWSER.NAME, UAParser.BROWSER.VERSION] + * ]; + * var UserAgentParser = new UAParser(ua,myOwnListOfBrowsers); + * + * for further Information look at the git repository + **/ +var UAParser = function (ua, extensions) { + + if (typeof ua === 'object') { + extensions = ua; + ua = undefined; + } + + if (!(this instanceof UAParser)) { + return new UAParser(ua, extensions).getResult(); + } + + var _ua = ua || EMPTY; + var _rgxmap = extensions ? UserAgentParser_util.extend(regexes, extensions) : regexes; + + this.getBrowser = function () { + var _browser = { + name: undefined, + version: undefined + }; + mapper.rgx.call(_browser, _ua, _rgxmap.browser); + _browser.major = UserAgentParser_util.major(_browser.version); // deprecated + return _browser; + }; + this.getCPU = function () { + var _cpu = { + architecture: undefined + }; + mapper.rgx.call(_cpu, _ua, _rgxmap.cpu); + return _cpu; + }; + this.getDevice = function () { + var _device = { + vendor: undefined, + model: undefined, + type: undefined + }; + mapper.rgx.call(_device, _ua, _rgxmap.device); + return _device; + }; + this.getEngine = function () { + var _engine = { + name: undefined, + version: undefined + }; + mapper.rgx.call(_engine, _ua, _rgxmap.engine); + return _engine; + }; + this.getOS = function () { + var _os = { + name: undefined, + version: undefined + }; + mapper.rgx.call(_os, _ua, _rgxmap.os); + return _os; + }; + this.getResult = function () { + return { + ua : this.getUA(), + browser : this.getBrowser(), + engine : this.getEngine(), + os : this.getOS(), + device : this.getDevice(), + cpu : this.getCPU() + }; + }; + this.getUA = function () { + return _ua; + }; + this.setUA = function (ua) { + _ua = ua.length > UA_MAX_LENGTH ? UserAgentParser_util.trim(ua, UA_MAX_LENGTH) : ua; + return this; + }; + this.setUA(_ua); + return this; +}; + + + + + + diff --git a/process/Workflow_lib/process.js b/process/Workflow_lib/process.js index e645f7a4aa67bdb71c03361840943f8e9ebfff2a..8431bc717a07dbb425a59b2e8e9bc4f0a041ec8b 100644 --- a/process/Workflow_lib/process.js +++ b/process/Workflow_lib/process.js @@ -74,7 +74,8 @@ WorkflowUtils.getPossibleTargetContexts = function () "Person", "Offer", "Salesproject", - "MarketingWorkflowLauncher" + "MarketingWorkflowLauncher", + "AdvertisingItem", ]; } @@ -93,7 +94,15 @@ WorkflowUtils.engineIsEnabled = function () */ WorkflowUtils.getModelerUrl = function (pModelId, pIsEditor) { - var modelerUrl = project.getPreferenceValue("custom.workflow.modelerUrl", "").replace(/\/$/, ""); + var modelerAliasName = project.getInstanceConfigValue("workflowModelerAlias", "") || "WorkflowModeler"; + if (!modelerAliasName) + return ""; + + var modelerProperties = project.getAliasModel(modelerAliasName)[project.ALIAS_PROPERTIES]; + if (!modelerProperties.modelerUrl) + return ""; + + var modelerUrl = modelerProperties.modelerUrl.replace(/\/$/, ""); if (pModelId) { if (pIsEditor) @@ -104,6 +113,34 @@ WorkflowUtils.getModelerUrl = function (pModelId, pIsEditor) return modelerUrl; } +/** + * Gets the WorkflowTask ID by by comparing the given instance ID + * with the ID in the variable 'targetId' + * + * @param {String} pTargetId the instance id which the workflow is started from + * @param {String} pTargetContext the context which the workflow is started from + * + * @return {String} returns the taskId + */ +WorkflowUtils.getTaskId = function (pTargetId, pTargetContext) +{ + var res = ""; + var loadConfig = workflow.createConfigForLoadingTask(); + loadConfig.variables({ + targetId: pTargetId.toString(), + targetContext: pTargetContext.toString() + }); + + var task = JSON.parse(workflow.getTask(loadConfig)); + + if (task) + { + res = task.id; + } + + return res; +} + /** * provides functions for working with workflow signals */ @@ -179,11 +216,11 @@ WorkflowSignalSender.deleted = function (pVariables, pTargetId, pTargetContext) */ WorkflowSignalSender.eventHappened = function (pEvent, pTargetId, pTargetContext, pVariables) { - let temp = {}; - temp[ WorkflowVariables.TARGET_CONTEXT()] = pTargetContext; - temp[WorkflowVariables.TARGET_ID()] = pTargetId; - temp[WorkflowVariables.TRIGGER()] = pEvent; - let variables = WorkflowVariables.getAllVariablesValue(temp); + pVariables = pVariables || {}; + pVariables[WorkflowVariables.TARGET_CONTEXT()] = pVariables[WorkflowVariables.TARGET_CONTEXT()] || pTargetContext; + pVariables[WorkflowVariables.TARGET_ID()] = pVariables[WorkflowVariables.TARGET_ID()] || pTargetId; + pVariables[WorkflowVariables.TRIGGER()] = pVariables[WorkflowVariables.TRIGGER()] || pEvent; + let variables = WorkflowVariables.getAllVariablesValue(pVariables); var processConfig = process.createStartAsyncConfig().setName("workflowExtension_serverProcess") .setLocalVariables({"variablesWorkflow" : JSON.stringify(variables)}) @@ -198,7 +235,7 @@ WorkflowSignalSender.eventHappened = function (pEvent, pTargetId, pTargetContext { if (_checkCondition(signal.entity, variables[WorkflowVariables.TARGET_ID()], signal.condition)) { - var filteredVariables = pVariables || {}; + var filteredVariables = pVariables; // TODO: Evtl machts keinen Sinn mehr. signal.variables.forEach(function (varName) { filteredVariables[varName] = variables[varName]; @@ -236,7 +273,8 @@ WorkflowSignalSender.eventHappened = function (pEvent, pTargetId, pTargetContext */ WorkflowSignalSender.getSignalConfig = function (pContext, pEvent) { - var signals = newSelect("SIGNAL_NAME, TRIGGER_EVENT, OBJECT_CONDITION, OBJECT_TYPE, VARIABLES", db.getCurrentAlias()) + //Data_alias explicitly because this can be called from a system alias context + var signals = newSelect("SIGNAL_NAME, TRIGGER_EVENT, OBJECT_CONDITION, OBJECT_TYPE, VARIABLES", "Data_alias") .from("WORKFLOWSIGNAL") .whereIfSet("WORKFLOWSIGNAL.OBJECT_TYPE", pContext) .andIfSet("WORKFLOWSIGNAL.TRIGGER_EVENT", pEvent) @@ -296,6 +334,22 @@ WorkflowVariables.TARGET_CONTEXT.getDefaultValue = function () return ContextUtils.getCurrentContextId(); } +/** + * Returns the variable name for the fileds to load + */ +WorkflowVariables.FIELDS_TO_LOAD = function () +{ + return "fieldsToLoad"; +} + +/** + * Returns the default value for the fileds to load + */ +WorkflowVariables.FIELDS_TO_LOAD.getDefaultValue = function () +{ + return JSON.stringify([]); +} + /** * Returns the variable name for the rowdata */ @@ -309,7 +363,7 @@ WorkflowVariables.ROWDATA = function () */ WorkflowVariables.ROWDATA.getDefaultValue = function () { - return JSON.stringify(vars.get("$local.rowdata")); + return JSON.stringify(( vars.exists("$local.rowdata") ? vars.get("$local.rowdata"): {})); } /** @@ -325,7 +379,7 @@ WorkflowVariables.INITIAL_ROWDATA = function () */ WorkflowVariables.INITIAL_ROWDATA.getDefaultValue = function () { - return JSON.stringify(vars.get("$local.initialRowdata")); + return JSON.stringify(( vars.exists("$local.initialRowdata") ? vars.get("$local.initialRowdata"): {})); } /** @@ -341,7 +395,7 @@ WorkflowVariables.CHANGED_ROWS = function () */ WorkflowVariables.CHANGED_ROWS.getDefaultValue = function () { - return JSON.stringify(vars.get("$local.changed")); + return JSON.stringify(( vars.exists("$local.changed") ? vars.get("$local.changed"): [])); } /** @@ -357,19 +411,37 @@ WorkflowVariables.CHANGED_ROWS_TYPES = function () */ WorkflowVariables.CHANGED_ROWS_TYPES.getDefaultValue = function () { - let isDBrc = project.getRecordContainerModel(ContextUtils.getEntity(ContextUtils.getCurrentContextId())).type == project.RECORDCONTAINERTYPE_DB; - let types = {} - vars.get("$local.changed").forEach(function(pField) { + let types = {}; + if (vars.exists("$local.changed")) + { + let isDBrc = project.getRecordContainerModel(ContextUtils.getEntity(ContextUtils.getCurrentContextId())).type == project.RECORDCONTAINERTYPE_DB; + + vars.get("$local.changed").forEach(function(pField) { let splitedField = pField.split("."); let fieldName; - if (isDBrc) { + if (isDBrc) + { fieldName = splitedField[1] - } else { + } + else + { fieldName = splitedField[0] } + if (splitedField[1] != "displayValue" && vars.exists("$property." + fieldName + ".contentType") ) - types[pField] = vars.get("$property." + fieldName + ".contentType"); + { + let contentType = vars.get("$property." + fieldName + ".contentType").trim(); + types[pField] = contentType; + } + + if (splitedField[1] != "displayValue" && vars.exists("$field." + fieldName + ".displayValue") && vars.get("$field." + fieldName + ".displayValue") ) + { + types[pField] = "DROP_DOWN" + "::" + vars.get("$field." + fieldName + ".displayValue").trim(); + } + }); + } + return JSON.stringify(types); } @@ -434,7 +506,7 @@ WorkflowVariables.CONTENTTITLE = function () */ WorkflowVariables.CONTENTTITLE.getDefaultValue = function () { - return vars.get("$field.#CONTENTTITLE"); + return vars.exists("$local.rowdata") ? vars.get("$field.#CONTENTTITLE") : null; } /** @@ -467,7 +539,8 @@ WorkflowVariables.getAllVariables = function () "TARGET_CONTEXT", "TARGET_ID", "TRIGGER", - "CONTENTTITLE" + "CONTENTTITLE", + "FIELDS_TO_LOAD" ] } diff --git a/process/WsValidation_lib/process.js b/process/WsValidation_lib/process.js index 817a2a184157b1aee566ee630eb564f8e8a6afeb..44b4967131ae1df5d50990907d5cf3cb7328150c 100644 --- a/process/WsValidation_lib/process.js +++ b/process/WsValidation_lib/process.js @@ -78,58 +78,65 @@ WsValidationType.get = function(pKey) } } - function _processNominatimAddressLookup(pWsResult, pValue) - { - if (pWsResult != null) + function _processNominatimAddressLookup(pWsResult, pValue) { - return pWsResult.map(function(pPlaceData) + let filterKeys = JSON.parse(project.getPreferenceValue("custom.nominatim.filterKeys", "[]")); + + let filteredResults = []; + if (pWsResult != null) { - if (pPlaceData.address == undefined) - pPlaceData.address = {}; + pWsResult.forEach(function(pPlaceData) + { + if (Utils.isEmpty(filterKeys) || filterKeys.indexOf(pPlaceData.osm_type) > -1 || filterKeys.indexOf(pPlaceData.type) > -1 || filterKeys.indexOf(pPlaceData["class"]) > -1) + { + if (pPlaceData.address == undefined) + pPlaceData.address = {}; - var city = pPlaceData.address.town - || pPlaceData.address.city - || pPlaceData.address.village - || pPlaceData.address.hamlet; + var city = pPlaceData.address.town + || pPlaceData.address.city + || pPlaceData.address.village + || pPlaceData.address.hamlet; - var cityext = pPlaceData.address.suburb - || pPlaceData.address.city_district; + var cityext = pPlaceData.address.suburb + || pPlaceData.address.city_district; - var road = pPlaceData.address.road - || pPlaceData.address.street - || pPlaceData.address.path - || pPlaceData.address.address27; + var road = pPlaceData.address.road + || pPlaceData.address.street + || pPlaceData.address.path + || pPlaceData.address.address27; - return { - placeId: pPlaceData.place_id, - value: pValue, - displayName: pPlaceData.display_name, - zipCode: pPlaceData.address.postcode, - city: city, - cityExt: cityext, - country: pPlaceData.address.country_code.toUpperCase(), //4 - state: pPlaceData.address.state, - road: road, //8 - buildingNo: pPlaceData.address.house_number, - lat: pPlaceData.lat, - lon: pPlaceData.lon - }; - }); - } + filteredResults.push({ + placeId: pPlaceData.place_id, + value: pValue, + displayName: pPlaceData.display_name, + zipCode: pPlaceData.address.postcode, + city: city, + cityExt: cityext, + country: pPlaceData.address.country_code.toUpperCase(), //4 + state: pPlaceData.address.state, + road: road, //8 + buildingNo: pPlaceData.address.house_number, + lat: pPlaceData.lat, + lon: pPlaceData.lon + }); + } + + }); + } - return []; - } + return filteredResults; + } - function _processNominatimAddressLocation (pWsResult) - { - if (pWsResult == null || pWsResult.length === 0) - return null; + function _processNominatimAddressLocation (pWsResult, pValue) + { + pWsResult = _processNominatimAddressLookup(pWsResult, pValue); + if (Utils.isNullOrEmpty(pWsResult)) + { + return null; + } - return { - lat: pWsResult[0].lat, - lon: pWsResult[0].lon - }; - } + return pWsResult[0]; + } /** * request using a custom webservice @@ -278,6 +285,7 @@ WsValidationType.get = function(pKey) if (!Utils.isNullOrEmpty(pParameters)) { var nominatimRequest = new NominatimRequest(url) + .includeAddressDetails() .setResultLimit(1) .setParameters(pParameters); @@ -361,7 +369,8 @@ WsValidationUtils.setAddressFields = function(pJSON) //"$field.DISTRICT": data.district, not needed currently "$field.STATE": data.state, "$field.ADDRESS": data.road, - "$field.BUILDINGNO": data.buildingNo + "$field.BUILDINGNO": data.buildingNo, + "$field.VALIDATION_RESULT": JSON.stringify(data) } for (let field in toSet) @@ -383,8 +392,10 @@ WsValidationUtils.setAddressFields = function(pJSON) WsValidationUtils.valueFromJSON = function(pJSON) { var data = WsValidationUtils.parseJSONArray(pJSON); - if (data == null) + if (Utils.isNullOrEmpty(data) || Utils.isNullOrEmpty(data.value)) + { return null; + } return data.value; } diff --git a/process/_test_clientProcess/process.js b/process/_test_clientProcess/process.js index bae4f5fd7b722780627c1828db7848183aab8a82..71527d050596b3dfc9fc477f7858cf39803e970d 100644 --- a/process/_test_clientProcess/process.js +++ b/process/_test_clientProcess/process.js @@ -1 +1 @@ -throw new Error("proccess not defined"); \ No newline at end of file +throw new Error("process not defined"); \ No newline at end of file diff --git a/process/blobHandler/process.js b/process/blobHandler/process.js index 210e350aff3c2cd0a5b0ce4e8a95b31f54b76171..6092c676875883a3f54019b98a27bca2c61f86da 100644 --- a/process/blobHandler/process.js +++ b/process/blobHandler/process.js @@ -5,6 +5,12 @@ import("system.util"); import("system.fileIO"); import("system.vars"); +/* + * This process is used in order to process binary data. + * It contains functions to create, delete, update and read binary data from the file system. + * This process uses the id of the dataset as filename. + */ + var path = vars.get("$sys.serverdata") + "/binaryfiles/" var operation = null; @@ -31,21 +37,47 @@ if (operation) operation(path, vars.get("$local.idvalue")); } +/* + * Create a file at the given path with the given pathname. + * + * @param path the path where the file is to be created + * @param filename the name under which the file is created, this can for example be a UID + */ function createBlob (path, filename) { _writeBlob(path + filename ) } +/* + * Delete a file at the given path with the given pathname. + * + * @param path the path where the file is located + * @param filename the name of the file to delete + */ function deleteBlob (path, filename) { fileIO.remove(path + filename ); } +/* + * Update a file at the given path with the given pathname. + * + * @param path the path where the file is to be updated/overwritten + * @param filename the name of the file that is to be overwritten + */ function updateBlob (path, filename) { _writeBlob(path + filename ); } +/* + * Read a file from the given path with the given pathname. + * If the file is not found in the specified location, the function tries to read it from the database (table ASYS_BINARIES). + * This is useful if at one point the storage method for files is changed from DATABASE to SCRIPT. + * + * @param path the path where the file is located + * @param filename the name of the file + */ function readBlob (path, filename) { var fullPath = path + filename; @@ -66,6 +98,12 @@ function readBlob (path, filename) } } +/* + * Stores a file at the given path. + * The path has to include the filename. + * + * @param fullPath the path where the file is stored concatenated with the filename, e.g. '/files/adito/c6fcb4ad-7280-4f3c-ad98-2a749510c21a' + */ function _writeBlob (fullPath) { fileIO.storeData(fullPath, vars.get("$local.data"), util.DATA_BINARY, false); diff --git a/process/emailWrite/documentation.adoc b/process/emailWrite/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..b26f9b3ea57c4c9a78c4454ecfde1186b0ecba81 --- /dev/null +++ b/process/emailWrite/documentation.adoc @@ -0,0 +1,18 @@ += emailWrite process + +This process is called from the ADITO platform, in order to handle mouseclicks +on email addresses in the client. If the originating Entity is +"Communication_entity", the EmailEdit_view will be opened, in order to enable +the user to write a new email. In all other cases, the "mailto:" URL will be +opened, which in turn opens the standard email client of the user's device. + + +Variables of this process are: +- entity +- context +- address +- value +- uid + +[NOTE] +There exists an equivalent for CTI calls, named ctiCall. \ No newline at end of file diff --git a/process/emailWrite/emailWrite.aod b/process/emailWrite/emailWrite.aod index a752349818c0a8632c76c4167a1e9ed84af7cf51..008853153ce35a66a7aeb06750af00b6fdf20c4c 100644 --- a/process/emailWrite/emailWrite.aod +++ b/process/emailWrite/emailWrite.aod @@ -2,6 +2,7 @@ <process xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> <name>emailWrite</name> <majorModelMode>DISTRIBUTED</majorModelMode> + <documentation>%aditoprj%/process/emailWrite/documentation.adoc</documentation> <process>%aditoprj%/process/emailWrite/process.js</process> <alias>Data_alias</alias> </process> diff --git a/process/getDocxDocument_serverProcess/process.js b/process/getDocxDocument_serverProcess/process.js index 80f0a37b65861c40c52c05451875f6f38e69de94..c56290433052687b29a30d4b7c172a492624ced9 100644 --- a/process/getDocxDocument_serverProcess/process.js +++ b/process/getDocxDocument_serverProcess/process.js @@ -2873,7 +2873,7 @@ ZipEntry.prototype = { reader.skip(localExtraFieldsLength); if (this.compressedSize == -1 || this.uncompressedSize == -1) { - throw new Error("Bug or corrupted zip : didn't get enough informations from the central directory " + "(compressedSize == -1 || uncompressedSize == -1)"); + throw new Error("Bug or corrupted zip : didn't get enough information from the central directory " + "(compressedSize == -1 || uncompressedSize == -1)"); } compression = utils.findCompression(this.compressionMethod); diff --git a/process/importLead_serverProcess/process.js b/process/importLead_serverProcess/process.js index 96f94dc8f09a1f7b2b868f99015e839e65025b46..83f67fedf898de6bd2696b89f68846af6e87eb36 100644 --- a/process/importLead_serverProcess/process.js +++ b/process/importLead_serverProcess/process.js @@ -45,7 +45,7 @@ var FieldDef = LeadImportUtils.addArray(ImportFieldDef, new Array(DataFieldCount FieldDef.push(new Array(DataFieldCount++, "DATE_NEW", "")); // für Tabellen Felder und Typen ermitteln -var DataTables = new Array("ORGANISATION", "PERSON", "CONTACT", "ADDRESS", "LEAD", "COMMUNICATION", "AB_ATTRIBUTERELATION"); +var DataTables = new Array("ORGANISATION", "PERSON", "CONTACT", "ADDRESS", "LEADS", "COMMUNICATION", "AB_ATTRIBUTERELATION"); var DataFields = LeadImportUtils.getDataFields(DataTables); var DataTypes = LeadImportUtils.getDataTypes(DataFields, DataTables); diff --git a/process/migrateCommRestrictions_serverProcess/migrateCommRestrictions_serverProcess.aod b/process/migrateCommRestrictions_serverProcess/migrateCommRestrictions_serverProcess.aod new file mode 100644 index 0000000000000000000000000000000000000000..ffeb39660ea71de1d49bb46a084a7bee4038577c --- /dev/null +++ b/process/migrateCommRestrictions_serverProcess/migrateCommRestrictions_serverProcess.aod @@ -0,0 +1,10 @@ +<?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.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> + <name>migrateCommRestrictions_serverProcess</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <process>%aditoprj%/process/migrateCommRestrictions_serverProcess/process.js</process> + <alias>Data_alias</alias> + <variants> + <element>EXECUTABLE</element> + </variants> +</process> diff --git a/process/migrateCommRestrictions_serverProcess/process.js b/process/migrateCommRestrictions_serverProcess/process.js new file mode 100644 index 0000000000000000000000000000000000000000..72a92e98c7c882e4a872c48c73528867143db281 --- /dev/null +++ b/process/migrateCommRestrictions_serverProcess/process.js @@ -0,0 +1,88 @@ +import("system.vars"); +import("KeywordRegistry_basic"); +import("system.util"); +import("system.logging"); +import("system.db"); +import("Sql_lib"); + +var loggingLevels = { + SILENT: 0, + DEFAULT: 1, + DEBUG: 2 +}; +var parameters = { + startRow: 0, + pageSize: 400, + deleteCommRestrictions: false, + keepOldUids: true, + loggingLevel: loggingLevels.DEFAULT +}; + +_log("CommRestriction migration to CommunicationSettings started. Configured parameters: \n" + JSON.stringify(parameters, null, " ")); + +var commRestrictionCount = Number(newSelect("count(*)").from("COMMRESTRICTION").cell()); + +_log("CommRestriction count: " + commRestrictionCount); + +if (commRestrictionCount > 0) +{ + var commRestrictionSql = newSelect(["COMMRESTRICTIONID", "CONTACT_ID", "EMPLOYEE_INVOLVED", "MEDIUM", "REASON", "STARTDATE"]) + .from("COMMRESTRICTION") + .startRow(parameters.startRow) + .pageSize(parameters.pageSize) + + var commSettingsBuilder = new SqlBuilder().tableName("COMMUNICATIONSETTINGS"); + var commLegalBaseBuilder = new SqlBuilder().tableName("COMMUNICATIONLEGALBASE"); + + var currentDate = vars.get("$sys.date"); + + commRestrictionSql.forEachPage(function (commRestrictions) + { + var insertStatements = []; + var deleteStatements = []; + commRestrictions.forEach(function ([commRestrictionId, contactId, employeeInvolved, medium, reason, startDate]) + { + var communicationSettingsId = parameters.keepOldUids ? commRestrictionId : util.getNewUUID(); + var commSettingsInsert = commSettingsBuilder.buildInsertStatement({ + "COMMUNICATIONSETTINGSID": communicationSettingsId, + "CONTACT_ID": contactId, + "CHANNEL_TYPE": $KeywordRegistry.communicationChannelType$communication(), + "CHANNEL_ID": "", + "MEDIUM": medium, + "STATUS": $KeywordRegistry.communicationSettingStatus$rejected(), + "DATE_NEW": currentDate, + "USER_NEW": "Admin" + }); + + var commLegalBaseInsert = commLegalBaseBuilder.buildInsertStatement({ + "COMMUNICATIONLEGALBASEID": util.getNewUUID(), + "COMMUNICATIONSETTINGS_ID": communicationSettingsId, + "DATE_NEW": currentDate, + "USER_NEW": "Admin", + "VERSION": 1, + "INFO": reason + }); + + insertStatements.push(commSettingsInsert, commLegalBaseInsert); + + if (parameters.deleteCommRestrictions) + { + var commRestrictionDelete = newWhere("COMMRESTRICTION.COMMRESTRICTIONID").buildDeleteStatement(); + deleteStatements.push(commRestrictionDelete); + } + }); + + db.inserts(insertStatements); + if (deleteStatements.length !== 0) + db.deletes(deleteStatements); + }); +} + + +function _log (pMessage, pMinLogLevel) +{ + if (pMinLogLevel === null || pMinLogLevel === undefined) + pMinLogLevel = 1; + if (parameters.loggingLevel >= pMinLogLevel) + logging.log(pMessage); +} \ No newline at end of file diff --git a/process/migrateKeywordContainers/migrateKeywordContainers.aod b/process/migrateKeywordContainers/migrateKeywordContainers.aod index f75e9611757d2a319020405c1cce43b848c87471..94eb478fa064c3d010204d5bf657b597053c37e9 100644 --- a/process/migrateKeywordContainers/migrateKeywordContainers.aod +++ b/process/migrateKeywordContainers/migrateKeywordContainers.aod @@ -5,7 +5,6 @@ <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/process/migrateKeywordContainers/documentation.adoc</documentation> <process>%aditoprj%/process/migrateKeywordContainers/process.js</process> - <publishAsWebservice v="true" /> <alias>Data_alias</alias> <variants> <element>EXECUTABLE</element> diff --git a/process/rebuildDuplicates_serverProcess/documentation.adoc b/process/rebuildDuplicates_serverProcess/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..b76ecd14518c25f95453633cb10473be8d112b8a --- /dev/null +++ b/process/rebuildDuplicates_serverProcess/documentation.adoc @@ -0,0 +1,12 @@ += rebuildDuplicate_serverProcess + +== Overview +Manages the asynchronous server-side recalculation of all duplicates of an entity. +This process should only be necessary initially and possibly during data imports. + +== Technical Details +Currently the process is called in the rebuild action of the DuplicateScanner_entity. + +The batchsize of the process (how many data sets should be loaded at once) +can be determined by the preference custom.duplicates.dataBlockSize. +The default value is 5000. diff --git a/process/rebuildDuplicates_serverProcess/process.js b/process/rebuildDuplicates_serverProcess/process.js new file mode 100644 index 0000000000000000000000000000000000000000..14369cff4552605e18c828601491e101ceced696 --- /dev/null +++ b/process/rebuildDuplicates_serverProcess/process.js @@ -0,0 +1,74 @@ +import("Sql_lib"); +import("system.db"); +import("system.entities"); +import("system.project"); +import("system.util"); +import("system.logging"); +import("system.notification"); +import("system.translate"); +import("system.vars"); +import("IndexSearch_lib"); +import("DuplicateScanner_lib"); + +var pFilterName = vars.get("$local.filterName"); +var pTargetEntity = vars.get("$local.targetEntity"); +var pTargetIdField = vars.get("$local.targetIdField"); +var pFilter = JSON.parse(vars.get("$local.filter")); + +newWhere("HASDUPLICATE.OBJECT_TYPE", pTargetEntity).deleteData(); +var indexsearchFilter = IndexsearchFilterUtils.fromFilter(pFilter); + +var TABLE_NAME = "HASDUPLICATE"; +var COLUMNS = [ + "HASDUPLICATEID", + "OBJECT_TYPE", "OBJECT_ROWID", + "DUPLICATECOUNT" +]; +var COLUMN_TYPES = db.getColumnTypes(TABLE_NAME, COLUMNS); + +var batchSize = parseInt(project.getPreferenceValue("custom.duplicates.dataBlockSize", "5000")); +var batchPos = 0; +while(true) +{ + var inserts = []; + + var entityFields = indexsearchFilter.getFields(); + entityFields.add(pTargetIdField); + var entityRowsConfig = entities.createConfigForLoadingRows() + .entity(pTargetEntity) + .fields(Array.from(entityFields)) + .startrow(batchPos).count(batchSize); + var entityRows = entities.getRows(entityRowsConfig); + + entityRows.forEach(function(entityRow) + { + var currEntityRowId = entityRow[pTargetIdField]; + var indexPattern = indexsearchFilter.buildQuery(entityRow); + var duplicates = DuplicateScannerUtils.getDuplicateIds(pTargetEntity, indexPattern, currEntityRowId); + + if(duplicates.length > 0) + { + var values = [ + util.getNewUUID(), + pTargetEntity, currEntityRowId, + duplicates.length.toFixed(0) + ]; + inserts.push([TABLE_NAME, COLUMNS, COLUMN_TYPES, values]); + } + }); + + db.inserts(inserts); + if(entityRows.length < batchSize) + { + break; + } + batchPos += batchSize; +} + +notification.addNotificationWith(notification.createConfig() +.addUserWithId(vars.get("$sys.user")) +.notificationType("_____SYSTEM_NOTIFICATION_MESSAGE") +.caption(translate.text("Duplicaterow rebuild")) +.description(translate.withArguments("The duplicate row corrosponding to %0 has been rebuild", [pFilterName]))); + +logging.log(pFilterName + " has been rebuild"); diff --git a/process/rebuildDuplicates_serverProcess/rebuildDuplicates_serverProcess.aod b/process/rebuildDuplicates_serverProcess/rebuildDuplicates_serverProcess.aod new file mode 100644 index 0000000000000000000000000000000000000000..e28fee4a9b23675f047ec8759a20a6991495b3ed --- /dev/null +++ b/process/rebuildDuplicates_serverProcess/rebuildDuplicates_serverProcess.aod @@ -0,0 +1,14 @@ +<?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.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> + <name>rebuildDuplicates_serverProcess</name> + <description>ATTENTION! +This process can only be executed within the client. +The action (Rebuild selected entries) can be found in the administration context "Duplicate Configuration".</description> + <majorModelMode>DISTRIBUTED</majorModelMode> + <documentation>%aditoprj%/process/rebuildDuplicates_serverProcess/documentation.adoc</documentation> + <process>%aditoprj%/process/rebuildDuplicates_serverProcess/process.js</process> + <alias>Data_alias</alias> + <variants> + <element>EXECUTABLE</element> + </variants> +</process> diff --git a/process/redirect_rest/process.js b/process/redirect_rest/process.js index fe542e60083ebae56bacd14f02bff8b8a81a2787..966602c69e89e8fd07b6ad2720051bab9b351240 100644 --- a/process/redirect_rest/process.js +++ b/process/redirect_rest/process.js @@ -1,18 +1,28 @@ +import("system.logging"); import("Workflow_lib"); import("Util_lib"); import("system.util"); +import("Bulkmail_lib"); +import("UserAgentParser_lib"); function restget (pRequest) { var request = JSON.parse(pRequest); - var action = WorkflowLinkActions.parseAction(request.query.act); - - action.run(); + var linkId = request.query.link; + var mailLogId = request.query.log; + var ipAddress = BulkMailUtils.getIpAddressFromHeader(request.header); + var redirectLink = BulkMailUtils.getRedirectLink(linkId); + var UserAgentObject = new UAParser(request.header["User-agent"]).getResult(); + + BulkMailUtils.insertClick(mailLogId, ipAddress, linkId, UserAgentObject.browser.name, UserAgentObject.os.name, UserAgentObject.device.type); + + BulkMailUtils.startBulkmailWorkFlow(mailLogId, linkId); - if (action.redirectLink) + if (redirectLink) { request.response.httpStatusCode = 302; //found, redirect - request.response.header.Location = action.redirectLink; + + request.response.header.Location = redirectLink; } else { diff --git a/process/redirect_rest/redirect_rest.aod b/process/redirect_rest/redirect_rest.aod index bda233f7990cbcde49e43a759006b8fd964fc26d..83abc318c0a0b898ae6e89367bb5979eb934e886 100644 --- a/process/redirect_rest/redirect_rest.aod +++ b/process/redirect_rest/redirect_rest.aod @@ -8,6 +8,7 @@ <loginTypeId> <element>internal.none</element> </loginTypeId> + <alias>Data_alias</alias> <variants> <element>EXECUTABLE</element> </variants> diff --git a/process/sendBulkMail_serverProcess/process.js b/process/sendBulkMail_serverProcess/process.js index 7ed237beffbb5978141a82b08c745385a1f21bee..2d1640fa68ab2917ef4214f904130eb54e8405a3 100644 --- a/process/sendBulkMail_serverProcess/process.js +++ b/process/sendBulkMail_serverProcess/process.js @@ -1,27 +1,28 @@ -import("system.datetime"); -import("Sql_lib"); -import("system.db"); -import("system.util"); -import("system.translate"); -import("Bulkmail_lib"); -import("system.vars"); -import("system.notification"); - -var startTime = datetime.date(); -var bulkMailId = vars.get("$local.bulkMailId"); -var user = vars.get("$local.user"); -var testRecipients = JSON.parse(vars.get("$local.testRecipients")); -var res = BulkMailUtils.sendBulkMail(bulkMailId, testRecipients); - -if (user && !testRecipients) -{ - var mailName = newSelect("NAME") - .from("BULKMAIL") - .whereIfSet("BULKMAIL.BULKMAILID", bulkMailId) - .cell(true); - - var message = translate.withArguments("Bulk mail \"%0\" was sent!", [mailName]); - var description = translate.withArguments("%0 mails sent sucessfully, %1 mails failed. Process took %2 s.", - [res.sucessful, res.failed, Math.round((datetime.date() - startTime) / datetime.ONE_SECOND)]); - notification.addNotification(util.getNewUUID(), null, null, null, "BulkMailSent", null, notification.PRIO_NORMAL, 2, notification.STATE_UNSEEN, [user], message, description); +import("system.datetime"); +import("Sql_lib"); +import("system.db"); +import("system.util"); +import("system.translate"); +import("Bulkmail_lib"); +import("system.vars"); +import("system.notification"); + +var startTime = datetime.date(); +var bulkMailId = vars.get("$local.bulkMailId"); +var user = vars.get("$local.user"); +var testRun= vars.get("$local.testRun"); +var res = BulkMailUtils.sendBulkMail(bulkMailId, testRun); + +if (user && !testRun) +{ + var mailName = newSelect("NAME") + .from("BULKMAIL") + .whereIfSet("BULKMAIL.BULKMAILID", bulkMailId) + .cell(true); + + var message = translate.withArguments("Bulk mail \"%0\" was sent!", [mailName]); + var description = translate.withArguments("%0 mails sent sucessfully, %1 mails failed. Process took %2 s.", + [res.sucessful, res.failed, Math.round((datetime.date() - startTime) / datetime.ONE_SECOND)]); + notification.addNotification(util.getNewUUID(), null, null, null, "BulkMailSent", notification.PRIO_NORMAL, 2, notification.STATE_UNSEEN, [user], message, description); + } \ No newline at end of file diff --git a/process/sendBulkMail_serverProcess/sendBulkMail_serverProcess.aod b/process/sendBulkMail_serverProcess/sendBulkMail_serverProcess.aod index 8357bb2adf8a19f802111fd90d3c734932f8b2e6..1bc41ce6e81cc65bfe988a74c1e7193aceea0c2d 100644 --- a/process/sendBulkMail_serverProcess/sendBulkMail_serverProcess.aod +++ b/process/sendBulkMail_serverProcess/sendBulkMail_serverProcess.aod @@ -4,6 +4,7 @@ <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/process/sendBulkMail_serverProcess/documentation.adoc</documentation> <process>%aditoprj%/process/sendBulkMail_serverProcess/process.js</process> + <alias>Data_alias</alias> <variants> <element>EXECUTABLE</element> <element>LIBRARY</element> diff --git a/process/sendPlannedBulkmails_serverProcess/process.js b/process/sendPlannedBulkmails_serverProcess/process.js new file mode 100644 index 0000000000000000000000000000000000000000..3f74ac7a527a49ae1dbe7fc416e40edf21e2aecd --- /dev/null +++ b/process/sendPlannedBulkmails_serverProcess/process.js @@ -0,0 +1,30 @@ +import("system.logging"); +import("Bulkmail_lib"); +import("system.project"); +import("system.datetime"); +import("Sql_lib"); +import("KeywordRegistry_basic"); +import("system.eMath"); +import("system.SQLTYPES"); + +var dateToSendPassedAfter = project.getInstanceConfigValue("bulkmail.dateToSendPassedAfter" , 24); + +//send all Bulkmails which are currently planned and not already missed. +var bulkMailData = newSelect("BULKMAIL.BULKMAILID") + .from("BULKMAIL") + .where("BULKMAIL.STATUS",$KeywordRegistry.bulkMailStatus$planned()) + .and("BULKMAIL.DATE_TO_SEND", datetime.date(), SqlBuilder.LESS_OR_EQUAL()) + .and("BULKMAIL.DATE_TO_SEND",eMath.subInt(datetime.date(), eMath.mulInt(dateToSendPassedAfter, datetime.ONE_HOUR)), SqlBuilder.GREATER()) + .arrayColumn(); +for (let i = 0; i < bulkMailData.length; i++) +{ + newWhere("BULKMAIL.BULKMAILID", bulkMailData[i]) + .updateFields({"STATUS" : $KeywordRegistry.bulkMailStatus$beingSent()}); + + BulkMailUtils.sendBulkMailOnServer(bulkMailData[i],null,null); +} + +//set all missed bulkmails to status missed +newWhere("BULKMAIL.STATUS", $KeywordRegistry.bulkMailStatus$planned()) + .and("BULKMAIL.DATE_TO_SEND", eMath.subInt(datetime.date(), eMath.mulInt(dateToSendPassedAfter, datetime.ONE_HOUR)), SqlBuilder.LESS_OR_EQUAL()) + .updateFields({"STATUS": $KeywordRegistry.bulkMailStatus$missed()}); \ No newline at end of file diff --git a/process/sendPlannedBulkmails_serverProcess/sendPlannedBulkmails_serverProcess.aod b/process/sendPlannedBulkmails_serverProcess/sendPlannedBulkmails_serverProcess.aod new file mode 100644 index 0000000000000000000000000000000000000000..d34bf50903e06d4090817909b7175259f518a660 --- /dev/null +++ b/process/sendPlannedBulkmails_serverProcess/sendPlannedBulkmails_serverProcess.aod @@ -0,0 +1,10 @@ +<?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.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> + <name>sendPlannedBulkmails_serverProcess</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <process>%aditoprj%/process/sendPlannedBulkmails_serverProcess/process.js</process> + <alias>Data_alias</alias> + <variants> + <element>EXECUTABLE</element> + </variants> +</process> diff --git a/process/setMissingAddressLocations_serverProcess/process.js b/process/setMissingAddressLocations_serverProcess/process.js index 38efd070554dc6d17d40bef2e82496faa433ad38..dd23bc7aee2d64270cceb925d597125531d9493e 100644 --- a/process/setMissingAddressLocations_serverProcess/process.js +++ b/process/setMissingAddressLocations_serverProcess/process.js @@ -1,31 +1,30 @@ +import("system.logging"); +import("Util_lib"); import("system.db"); import("Sql_lib"); import("Address_lib"); import("Location_lib"); var locationSearch = new LocationFinder(); +var malformedAddressData = []; if (locationSearch.isEnabled()) { - newSelect("ADDRESSID, ADDRESS, BUILDINGNO, ZIP, CITY, COUNTRY, PROVINCE") + newSelect("ADDRESSID, ADDRESS, BUILDINGNO, ZIP, CITY, COUNTRY, PROVINCE, VALIDATION_RESULT") .from("ADDRESS") .where("ADDRESS.LAT is null") .or("ADDRESS.LON is null") .pageSize(400) - .forEachPage(function (addresses) + .forEachPage(function (pAddresses) { + LocationFinder.PagingFunctionSetLocations(malformedAddressData, pAddresses); + }); + if (Utils.isNotNullOrEmptyString(malformedAddressData)) + { + errMsg = "updateAllAddressLocations_serverProcess: Something went wrong, during updating address locations, with the following uids: "; + malformedAddressData.forEach(function(pMalformedData) { - var locationUpdates = []; - addresses.forEach(function ([addressId, address, buildingno, zip, city, country, state]) - { - var addressData = new AddressObject(address, buildingno, zip, city, country, state); - var location = locationSearch.getGeoLocation(addressData); - if (location) - { - locationUpdates.push(["ADDRESS", ["LAT", "LON"], null, [location.lat, location.lon], - newWhere("ADDRESS.ADDRESSID", addressId).buildCondition()]); - } - }); - if (locationUpdates.length > 0) - db.updates(locationUpdates); + errMsg += pMalformedData + "\n"; }); + logging.log(errMsg); + } } \ No newline at end of file diff --git a/process/updateAllAddressLocations_serverProcess/process.js b/process/updateAllAddressLocations_serverProcess/process.js index 5341f47ddfb539cbd4af47400db6a154cb50ea2a..9f53d5000b32b93a7ce9c1dcbcff480755b7dc50 100644 --- a/process/updateAllAddressLocations_serverProcess/process.js +++ b/process/updateAllAddressLocations_serverProcess/process.js @@ -1,29 +1,28 @@ import("system.db"); +import("system.logging"); import("Sql_lib"); import("Address_lib"); import("Location_lib"); +import("Util_lib"); var locationSearch = new LocationFinder(); +var malformedAddressData = []; if (locationSearch.isEnabled()) { - newSelect("ADDRESSID, ADDRESS, BUILDINGNO, ZIP, CITY, COUNTRY, PROVINCE") + newSelect("ADDRESSID, ADDRESS, BUILDINGNO, ZIP, CITY, COUNTRY, PROVINCE, VALIDATION_RESULT") .from("ADDRESS") .pageSize(400) - .forEachPage(function (addresses) + .forEachPage(function (pAddresses) { + LocationFinder.PagingFunctionSetLocations(malformedAddressData, pAddresses); + }); + if (!Utils.isNullOrEmpty(malformedAddressData)) + { + errMsg = "updateAllAddressLocations_serverProcess: Something went wrong, during updating address locations, with the following uids: "; + malformedAddressData.forEach(function(pMalformedData) { - var locationUpdates = []; - addresses.forEach(function ([addressId, address, buildingno, zip, city, country, state]) - { - var addressData = new AddressObject(address, buildingno, zip, city, country, state); - var location = locationSearch.getGeoLocation(addressData); - if (location) - { - locationUpdates.push(["ADDRESS", ["LAT", "LON"], null, [location.lat, location.lon], - newWhere("ADDRESS.ADDRESSID", addressId).buildCondition()]); - } - }); - if (locationUpdates.length > 0) - db.updates(locationUpdates); + errMsg += pMalformedData + "\n"; }); + logging.log(errMsg); + } } \ No newline at end of file diff --git a/process/updateClassifications_serverProcess/documentation.adoc b/process/updateClassifications_serverProcess/documentation.adoc index fd053e82fca0a65c6687ffaf4ee013100dc5fcad..67d5c667ce67aa86e74466822229273c7865d8b2 100644 --- a/process/updateClassifications_serverProcess/documentation.adoc +++ b/process/updateClassifications_serverProcess/documentation.adoc @@ -1,8 +1,10 @@ = updateClassifications_serverProcess -For updating the values of CLASSIFICATIONSTORAGE and the persistent data stored in CLASSIFICATION. +see also(ClassificationUtils.executeUpdating) + +For updating the values of CLASSIFICATIONSTORAGE. Should probably run in intervals (like once a week) to update all outdated data, -but the user can also start it manually via an action at the Classification Admin Context. +but the user can also start it manually via two actions at the Classification Admin Context. We are storing the strings of the achieved classifications (e.g. "ACD") in ClassificationStorage. Every time we change something for of an classification relevant object (which has an ClassificationStorage dataset) or an linked object with an @@ -13,10 +15,12 @@ The classificationType datasets also have an outdated flag get set for changes i This Process now updates both of these: First it checks whether outdated classificationStorages and outdated classificationTypes exist -and always updates the classificationStorages first before updating the for the classificationTypes. +and always updates the classificationStorages first before updating the for the outdated classificationTypes. -In the classificationStorage runtrough it calculates the complete classification for every outdated classificationStorage, entirely - from scratch (and inserts "new" relevant ones), and updates both the classificationStorage dataset aswell as the classification datasets --In the classificationType runtrough it also updates both the classificationStorage dataset aswell as the classification datasets but + from scratch and updates the classificationStorage +-In the classificationType runtrough it also updates the classificationStorage dataset -for every object of said object_type - -only recalculates the flagged ones and relies on the already stored values of the not flagged classificationTypes (and inserts "new" relevant ones) \ No newline at end of file + -only recalculates the flagged ones and relies on the already stored values of the not flagged classificationTypes if they are from another classificationGroup + +There is also another action that starts this process with the recalculateAll_param set to true: now the outdated flag is being ignored and all classificationtypes as outdated (only one runtrough needed) diff --git a/process/updateClassifications_serverProcess/process.js b/process/updateClassifications_serverProcess/process.js index 5777f187a61715e11b00e6f4e3edc2e14cd7fa1b..237a3c92b9ee0454a3744247f209f5b192ae2275 100644 --- a/process/updateClassifications_serverProcess/process.js +++ b/process/updateClassifications_serverProcess/process.js @@ -1,947 +1,17 @@ +import("ClassificationUpdate_lib"); import("system.vars"); -import("Context_lib"); -import("system.util"); -import("Util_lib"); -import("JditoFilter_lib"); -import("system.entities"); -import("system.logging"); -import("Classification_lib"); -import("Sql_lib"); -import("Organisation_lib"); -import("system.db"); -import("system.eMath"); -var outputInformation = {};//information how much data has been modified -var outputInfo = "updateClassifications_serverProcess output is:\n"; - -var helperObject = {}; //used to check whether or not the data has already been added -//object to store all the gradings of the classification groups that have either 1: atleast one classificationType with the outdated flag or -//2: have classificationtypes of the object_types that we need for updating for the outdated classificationStorage -var gradingObject = {}; -var scoreObject = {}; //object to store all the classificationScores (with the same logic as above) -var classificationTypesFilterObj = {}; //object to store all the classificationTypes with filters (logic from above) -var classificationTypesNoFilterObj = {}; //object to store all the classificationTypes without filters (logic from above) -var bestPossibleScoresObj = {}; //object to store all the best possible scores of classificationTypes (logic from above) -var bestPossibleScoresGroupObj = {}; //object to store all the best possible scores of classificationGroups of datasets (logic from above) -var achievedScoresObj = {}; //object to store all the achieved classificationscores of the classificationgroups (logic from above) (achievedScoresObj[objId][groupId][Score, Grade]) -var achievedScoresTypeObj = {}; //object to store all the achieved classifications (logic from above) (achievedScoresTypeObj[objId][groupId][classificationTypeId][int]) -var staticClassificationsObject = {}; //object to store all the classificationTypes none of the classificationtypes has the outdated flag set (onlyn eeded when storedClassificationFlag == 0, see below) -var classificationStorageObject = {}; //object to store the classificationstorageStrings (e.g: "ACD") -var groupObject = {}; //groupObject is another helper object to store all the groupIds -var outdatedClassificationTypeObj = {};//object to store all outdated classificationtypes (need so we can add empty persisted data later -var alreadyUpdatedTypesObj = {}; -var storedClassificationValues = {}; - -//arrays mainly used for filling the objects -var objectTypes = []; -var orderedGroups = []; -var bestPossibleScoresArray = []; -var classificationStorageArray = []; -var groupsThatNeedUpdate = []; -var outdatedGroupsAndObjectTypes = []; -var gradingArray = []; -var scoreArray = []; -var objectTypesThatNeedUpdate = []; -var outdatedStoredClassifications = []; -var objectRowIdArray = []; -var objectsThatWillBeUpdated = []; - -var object_type, classificationGroupId, classificationTypeId, classificationScoreId, classificationScore, classificationGradingId, score, cond, -classificationGradingMaxScore, classificationGrading, chainedGrading, currentObjectColumn, currentObjectTable, isOrganisation, bestValue, minPercent, -idsWithoutStoredClassification, classificationScorePercent, classificationScoreSaved, classificationScoreTitle, i, ii, iii, deleteCond, count, -achievedScoresStmt, position, bestPossibleScoreStmt, storedClassificationFlag, deleted, uid; -var table = "CLASSIFICATIONSTORAGE"; -var column = ["CLASSIFICATIONVALUE"]; -var runUpdating = 0; var singleRefresh = false; var recalculateAll = false; +var objectType_param; if(vars.exists("$local.refreshSingleRecord_param") && vars.get("$local.refreshSingleRecord_param")) { singleRefresh = vars.get("$local.refreshSingleRecord_param"); + objectType_param = vars.get("$local.ObjectType_param"); } else if(vars.exists("$local.recalculateAll_param") && vars.get("$local.recalculateAll_param")) { recalculateAll = vars.get("$local.recalculateAll_param"); } - - -if(singleRefresh) -{ - outdatedGroupsAndObjectTypes = newSelect("CLASSIFICATIONTYPE.OBJECT_TYPE, CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID, CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID, CLASSIFICATIONTYPE.FILTER") - .from("CLASSIFICATIONTYPE") - .where("CLASSIFICATIONTYPE.OBJECT_TYPE", vars.get("$local.ObjectType_param")) - .table(); -} -else if(recalculateAll) -{ - outdatedGroupsAndObjectTypes = newSelect("CLASSIFICATIONTYPE.OBJECT_TYPE, CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID, CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID, CLASSIFICATIONTYPE.FILTER") - .from("CLASSIFICATIONTYPE") - .table(); -} -else //all classificationgroups and their object_type that have atleast one classificationtype with the outdated flag set -{ - outdatedGroupsAndObjectTypes = newSelect("CLASSIFICATIONTYPE.OBJECT_TYPE, CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID, CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID, CLASSIFICATIONTYPE.FILTER") - .from("CLASSIFICATIONTYPE") - .where("CLASSIFICATIONTYPE.OUTDATED", 1) - .table(); -} - -objectTypesThatNeedUpdate = []; -for (i = 0; i < outdatedGroupsAndObjectTypes.length; i++) -{ - [object_type, classificationGroupId, classificationTypeId, classificationTypeFilter] = outdatedGroupsAndObjectTypes[i]; - - if(!helperObject.hasOwnProperty(object_type)) //objectType - { - outdatedClassificationTypeObj[object_type] = {}; //puts objectType in classificationStorageObject and already initializes the object that later get's filled with the groups and their types - objectTypesThatNeedUpdate.push(object_type) - - classificationTypesFilterObj[object_type] = {}; //initializing for later use - classificationTypesNoFilterObj[object_type] = {}; //initializing for later use - - helperObject[object_type] = ""; - - } - if(!helperObject.hasOwnProperty(classificationGroupId)) //objectRowId - { - outdatedClassificationTypeObj[object_type][classificationGroupId] = {}; //same logic as before - groupsThatNeedUpdate.push(classificationGroupId) - - classificationTypesFilterObj[object_type][classificationGroupId] = {}; //initializing - classificationTypesNoFilterObj[object_type][classificationGroupId] = {}; //initializing - - helperObject[classificationGroupId] = ""; - } - if(!helperObject.hasOwnProperty(classificationTypeId)) //objectRowId - { - outdatedClassificationTypeObj[object_type][classificationGroupId][classificationTypeId] = {"classificationTypeFilter": classificationTypeFilter}; //same logic as before - - if(classificationTypeFilter == "" || classificationTypeFilter == JditoFilterUtils.getEmptyFilter(ContextUtils.getEntity(object_type))) //also push all the indicators that have a filter set into classificationTypesFilterObj - classificationTypesNoFilterObj[object_type][classificationGroupId][classificationTypeId] = classificationTypeFilter; - else //and the ones without a filter into classificationTypesNoFilterObj - classificationTypesFilterObj[object_type][classificationGroupId][classificationTypeId] = classificationTypeFilter; - - helperObject[classificationTypeId] = ""; - } -} -if(!singleRefresh) -{ - if(recalculateAll) - { - outdatedStoredClassifications = newSelect("CLASSIFICATION.OBJECT_TYPE, CLASSIFICATION.OBJECT_ROWID\n\ - ,"+ SqlBuilder.caseWhen(newWhere("CLASSIFICATIONSTORAGE.CLASSIFICATIONSTORAGEID is null")) - .then("''") - .elseValue("CLASSIFICATIONSTORAGE.CLASSIFICATIONSTORAGEID") - .toString()+ "\n\ - ,"+ SqlBuilder.caseWhen(newWhere("CLASSIFICATIONSTORAGE.CLASSIFICATIONVALUE is null")) - .then("''") - .elseValue("CLASSIFICATIONSTORAGE.CLASSIFICATIONVALUE") - .toString()+ - ", CLASSIFICATION.CLASSIFICATIONTYPE_ID, CLASSIFICATION.VALUE, CLASSIFICATION.SCOREPOINTS") - .from("CLASSIFICATION") - .leftJoin("CLASSIFICATIONSTORAGE", "CLASSIFICATIONSTORAGE.OBJECT_ROWID = CLASSIFICATION.OBJECT_ROWID") - .orderBy("CLASSIFICATION.OBJECT_TYPE, CLASSIFICATION.OBJECT_ROWID") - .table(); - } - else - { - //object_type, object_rowId, classificationstorageId and the classificationstring (e.g. "ACB") of the classificationStorage datasets that habe the outdated flag set - outdatedStoredClassifications = newSelect("CLASSIFICATIONSTORAGE.OBJECT_TYPE, CLASSIFICATIONSTORAGE.OBJECT_ROWID, \n\ - CLASSIFICATIONSTORAGE.CLASSIFICATIONSTORAGEID, CLASSIFICATIONSTORAGE.CLASSIFICATIONVALUE") - .from("CLASSIFICATIONSTORAGE") - .where("CLASSIFICATIONSTORAGE.OUTDATED", 1) - .orderBy("OBJECT_TYPE") - .table(); - } - - var storedClassificationStorageValues = {}; - if(recalculateAll) - { - let storedValuesArray = newSelect("CLASSIFICATIONSTORAGE.OBJECT_ROWID") - .from("CLASSIFICATIONSTORAGE") - .arrayColumn(); - storedValuesArray.map(function(objRowId){ - storedClassificationStorageValues[objRowId] = ""; - }); - } - - helperObject = {}; - if(outdatedStoredClassifications) - { - //build classificationStorageObject out of outdatedStoredClassifications - for (i = 0; i < outdatedStoredClassifications.length; i++) - { - for (ii = 0; ii < outdatedStoredClassifications[i].length; ii++) - { - [object_type, object_rowId, classificationStorageId, classificationScore, classificationTypeId, classificationValue, classificationScorePoints] = outdatedStoredClassifications[i]; - - if(!helperObject.hasOwnProperty(object_type)) //objectType - { - classificationStorageObject[object_type] = {}; //puts objectType in classificationStorageObject and already initializes the object that later get's filled with the groups and their types - helperObject[object_type] = ""; - objectTypes.push(object_type); //also push all the objectTypes in an Array for later (the updating happens one objectType at a time) - if(recalculateAll) - { - storedClassificationValues[object_type] = {}; - } - - } - if(!helperObject.hasOwnProperty(object_rowId)) //objectRowId - { - classificationStorageObject[object_type][object_rowId] = [classificationStorageId, classificationScore]; //same logic as before - helperObject[object_rowId] = ""; - objectRowIdArray.push(object_rowId); //also push all the objectTypes in an Array for later - if(recalculateAll) - { - storedClassificationValues[object_type][object_rowId] = {"classificationTypeId": classificationTypeId, "classificationValue": classificationValue, "classificationScorePoints":classificationScorePoints}; - if(!storedClassificationStorageValues.hasOwnProperty(object_rowId))//if the dataset doesn't have an classificationStorage dataset but does have classification datasets -> insert it here - { - db.insertData("CLASSIFICATIONSTORAGE", ["CLASSIFICATIONSTORAGEID", "CLASSIFICATIONVALUE", "OBJECT_ROWID", "OBJECT_TYPE", "OUTDATED"], null, [util.getNewUUID(), "-", object_rowId, object_type, 1]) - } - } - } - } - } - } -} - -if(outdatedStoredClassifications.length > 0 && !recalculateAll) -{ storedClassificationFlag = true; //this variable can easily be checked to see what we are updating - runUpdating++; -} - -if(groupsThatNeedUpdate.length > 0) -{ - runUpdating++; -} - -//if runUpdating == 0: noting has to be updated -//if runUpdating > 0: run the updating this often (possible values: 1 or 2 -> either only for the classificationStorage that's outdated, -// or only the classificationgroups with atleast one outdated classificationType or both)) -// --> we always start with the updating for the outdated classificationStorage datasets by using the storedClassificationFlag as way of -// checking what we are updating (the flag get's set to true if we have atleast one outdated classificationStorage (see above) and to false after the first loop) -for (xyz = 0; xyz < runUpdating; xyz++) -{ - if(!storedClassificationFlag) //flag = false: we are not updating classificationStorage -> different condition needed (this logic get's used a lot) - { - objectTypes = []; - staticClassificationTypes = newSelect("CLASSIFICATION.OBJECT_TYPE, CLASSIFICATION.OBJECT_ROWID, CLASSIFICATION.CLASSIFICATIONTYPE_ID, CLASSIFICATION.SCOREPOINTS") - .from("CLASSIFICATION") - .join("CLASSIFICATIONTYPE", "CLASSIFICATION.CLASSIFICATIONTYPE_ID = CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID") - .where("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID", groupsThatNeedUpdate, SqlBuilder.NOT_IN()) - .table(); - correctCondition = newWhere("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID", groupsThatNeedUpdate, SqlBuilder.IN()) - } - else - { - correctCondition = newWhere("CLASSIFICATIONTYPE.OBJECT_TYPE", objectTypes, SqlBuilder.IN()) - } - //All the possible scores of 1: the outdated classification types or 2: of all the classificationtypes of the outdated classificationStorages - scoreArray = newSelect("CLASSIFICATIONTYPE.OBJECT_TYPE, CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID, CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID, \n\ - CLASSIFICATIONSCORE.CLASSIFICATIONSCOREID, CLASSIFICATIONSCORE.SCOREPERCENT/100, CLASSIFICATIONTYPE.FILTER") - .from("CLASSIFICATIONGROUP") - .join("CLASSIFICATIONTYPE", "CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID = CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID") - .join("CLASSIFICATIONSCORE", "CLASSIFICATIONSCORE.CLASSIFICATIONTYPE_ID = CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID") - .where(correctCondition) - .orderBy("CLASSIFICATIONTYPE.OBJECT_TYPE, CLASSIFICATIONGROUP.TITLE, CLASSIFICATIONGROUP.SORTING, CLASSIFICATIONTYPE.SCORETYPE, CLASSIFICATIONSCORE.SORT") - .table(); - helperObject = {}; - //build scoreObject out of scoreArray and also build classificationTypesFilterObj and classificationTypesNoFilterObj - for (i = 0; i < scoreArray.length; i++) - { - for (ii = 0; ii < scoreArray[i].length; ii++) - { - [object_type, classificationGroupId, classificationTypeId, classificationScoreId, classificationScore] = scoreArray[i]; - - if(!helperObject.hasOwnProperty(object_type)) //objectType - { - scoreObject[object_type] = {}; //puts objectType in scoreObject and already initializes the object that later get's filled with the groups and their types - helperObject[object_type] = ""; - if(!storedClassificationFlag) - objectTypes.push(object_type); //also push all the objectTypes in an Array for later (the updating happens one objectType at a time) - - if(classificationTypesFilterObj[object_type] == undefined) - classificationTypesFilterObj[object_type] = {}; //initializing for later use - if(classificationTypesNoFilterObj[object_type] == undefined) - classificationTypesNoFilterObj[object_type] = {}; //initializing for later use - } - if(!helperObject.hasOwnProperty(classificationGroupId)) //classificationGroup - { - scoreObject[object_type][classificationGroupId] = {}; //same logic as before - helperObject[classificationGroupId] = ""; - - if(classificationTypesFilterObj[object_type][classificationGroupId] == undefined) - classificationTypesFilterObj[object_type][classificationGroupId] = {}; //initializing - if(classificationTypesNoFilterObj[object_type][classificationGroupId] == undefined) - classificationTypesNoFilterObj[object_type][classificationGroupId] = {}; //initializing - } - if(!helperObject.hasOwnProperty(classificationTypeId)) //classificationType - { - scoreObject[object_type][classificationGroupId][classificationTypeId] = {}; //same logic as before - helperObject[classificationTypeId] = ""; - if(scoreArray[i][5] == "" || scoreArray[i][5] == JditoFilterUtils.getEmptyFilter(ContextUtils.getEntity(object_type))) //also push all the indicators that have a filter set into classificationTypesFilterObj - { - if(classificationTypesNoFilterObj[object_type][classificationGroupId][classificationTypeId] == undefined) - classificationTypesNoFilterObj[object_type][classificationGroupId][classificationTypeId] = scoreArray[i][5]; - } - else //and the ones without a filter into classificationTypesNoFilterObj - { - if(classificationTypesFilterObj[object_type][classificationGroupId][classificationTypeId] == undefined) - classificationTypesFilterObj[object_type][classificationGroupId][classificationTypeId] = scoreArray[i][5]; - } - } - if(!helperObject.hasOwnProperty(scoreArray[i][3])) //classificationScore - { - scoreObject[object_type][classificationGroupId][classificationTypeId][scoreArray[i][3]] = scoreArray[i][4]; //score - helperObject[scoreArray[i][3]] = ""; - } - } - } - if(!storedClassificationFlag) // we already habe the classificationStorageObject if we are updating for the outdated classificationStorage - { - let condIfSingle; - if(vars.exists("$local.ObjectRowid_param") && vars.get("$local.ObjectRowid_param")) - { - condIfSingle = newWhere("CLASSIFICATIONSTORAGE.OBJECT_ROWID", vars.get("$local.ObjectRowid_param")); - } - classificationStorageArray = newSelect("OBJECT_TYPE, OBJECT_ROWID, CLASSIFICATIONSTORAGEID, CLASSIFICATIONVALUE") - .from("CLASSIFICATIONSTORAGE") - .whereIfSet(condIfSingle) - .orderBy("OBJECT_TYPE") - .table(); - helperObject = {}; //resets the helper object - for (i = 0; i < classificationStorageArray.length; i++) - { - for (ii = 0; ii < classificationStorageArray[i].length; ii++) - { - [object_type, object_rowId, classificationStorageId, classificationValue] = classificationStorageArray[i]; - - if(!helperObject.hasOwnProperty(object_type)) //objectType - { - classificationStorageObject[object_type] = []; //same logic as before - helperObject[object_type] = ""; - } - if(!helperObject.hasOwnProperty(object_rowId)) //objectType - { - classificationStorageObject[object_type][object_rowId] = []; //same logic as before - helperObject[object_rowId] = ""; - } - if(!helperObject.hasOwnProperty(object_rowId + classificationStorageId)) //objectRowId - { - classificationStorageObject[object_type][object_rowId] = [classificationStorageId, classificationValue]; //same logic as before - helperObject[object_rowId + classificationStorageId] = ""; - } - - } - } - } - if(!storedClassificationFlag) //we don't have any static classifications if we are updating for the outdated classificationStorage - { - staticClassificationsArray = newSelect("CLASSIFICATION.OBJECT_TYPE, CLASSIFICATION.OBJECT_ROWID, CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID, \n\ - CLASSIFICATION.CLASSIFICATIONTYPE_ID, CLASSIFICATION.SCOREPOINTS") - .from("CLASSIFICATION") - .join("CLASSIFICATIONTYPE", "CLASSIFICATION.CLASSIFICATIONTYPE_ID = CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID") - .where("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID", groupsThatNeedUpdate, SqlBuilder.NOT_IN()) - .orderBy("CLASSIFICATION.OBJECT_TYPE, CLASSIFICATION.OBJECT_ROWID, CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID") - .table(); - - helperObject = {}; //resets the helper object - //build staticClassificationsObject out of scoreArray and also build classificationTypesFilterObj - for (i = 0; i < staticClassificationsArray.length; i++) - { - for (ii = 0; ii < staticClassificationsArray[i].length; ii++) - { - [object_type, object_rowId, classificationGroupId, classificationTypeId, classificationScorePoints] = staticClassificationsArray[i]; - - if(!helperObject.hasOwnProperty(object_type)) //objectType - { - staticClassificationsObject[object_type] = {}; //same logic as before - helperObject[object_type] = ""; - } - if(!helperObject.hasOwnProperty(object_rowId)) //objectRowId - { - staticClassificationsObject[object_type][object_rowId] = {}; //same logic as before - helperObject[object_rowId] = ""; - } - if(!helperObject.hasOwnProperty(object_rowId + classificationGroupId)) //classificationGroupId - { - staticClassificationsObject[object_type][object_rowId][classificationGroupId] = {}; //same logic as before - helperObject[object_rowId + classificationGroupId] = ""; - } - if(!helperObject.hasOwnProperty(object_rowId + classificationTypeId)) //classificationScore - { - if(staticClassificationsObject[object_type][object_rowId][classificationGroupId][classificationTypeId] == undefined) - staticClassificationsObject[object_type][object_rowId][classificationGroupId][classificationTypeId] = classificationScorePoints; - else - staticClassificationsObject[object_type][object_rowId][classificationGroupId][classificationTypeId] = eMath.addInt(Number(staticClassificationsObject[object_type][object_rowId][classificationGroupId][classificationTypeId]), Number(classificationScorePoints)) - helperObject[object_rowId + classificationTypeId] = ""; - } - } - } - } - - if(!storedClassificationFlag) - { - correctCondition = newWhere("CLASSIFICATIONTYPE.OBJECT_TYPE", objectTypesThatNeedUpdate, SqlBuilder.IN()) - } - - //All the gradings of the classification groups that have either 1: atleast one classificationType with the outdated flag or 2: have classificationtypes - //of the object_types that we need for updating for the outdated classificationStorage (depends on the condition, see above) - gradingArray = newSelect("CLASSIFICATIONTYPE.OBJECT_TYPE, CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID, \n\ - CLASSIFICATIONGRADING.CLASSIFICATIONGRADINGID, CLASSIFICATIONGRADING.MINPERCENT, CLASSIFICATIONGRADING.GRADING") - .from("CLASSIFICATIONGROUP") - .join("CLASSIFICATIONTYPE", "CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID = CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID") - .where(correctCondition) - .join("CLASSIFICATIONGRADING", "CLASSIFICATIONGRADING.CLASSIFICATIONGROUP_ID = CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID") - .orderBy("CLASSIFICATIONTYPE.OBJECT_TYPE, CLASSIFICATIONGROUP.TITLE, CLASSIFICATIONGROUP.SORTING, \n\ - CLASSIFICATIONTYPE.SCORETYPE, CLASSIFICATIONGRADING.MINPERCENT asc") - .table(); - - helperObject = {}; //resets the helper object - - //logic from above applies here aswell - for (i = 0; i < gradingArray.length; i++) - { - [object_type, classificationGroupId, classificationTypeId, minPercent, classificationGrading] = gradingArray[i]; - - if(!helperObject.hasOwnProperty(object_type)) //objectType - { - gradingObject[object_type] = {}; - helperObject[object_type] = ""; - } - if(!helperObject.hasOwnProperty(classificationGroupId)) //classificationGroup - { - gradingObject[object_type][classificationGroupId] = {}; - helperObject[classificationGroupId] = ""; - } - if(!helperObject.hasOwnProperty(classificationTypeId)) //classificationGrading - { - gradingObject[object_type][classificationGroupId][classificationTypeId] = [minPercent, classificationGrading]; //minPercent - helperObject[classificationTypeId] = ""; - } - } - - if(!storedClassificationFlag) - { - correctCondition = newWhere("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID", groupsThatNeedUpdate, SqlBuilder.IN()); - } - - bestPossibleScoresArray = newSelect("OBJECT_TYPE, CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID, CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID, \n\ - CLASSIFICATIONTYPE.SCOREPOINTS *(select max(CLASSIFICATIONSCORE.SCOREPERCENT)/100 from CLASSIFICATIONSCORE)") - .from("CLASSIFICATIONTYPE") - .where(correctCondition) - .orderBy("OBJECT_TYPE, CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID") - .table(); - - helperObject = {}; //resets the helper object - - //logic from above applies here aswell - for (i = 0; i < bestPossibleScoresArray.length; i++) - { - [object_type, classificationGroupId, classificationTypeId, bestValue] = bestPossibleScoresArray[i]; - - if(!helperObject.hasOwnProperty(object_type)) //objectType - { - bestPossibleScoresObj[object_type] = {}; - helperObject[object_type] = ""; - } - if(!helperObject.hasOwnProperty(classificationGroupId)) //classificationGroup - { - bestPossibleScoresObj[object_type][classificationGroupId] = {}; - helperObject[classificationGroupId] = ""; - } - if(!helperObject.hasOwnProperty(classificationTypeId)) //classificationType - { - bestPossibleScoresObj[object_type][classificationGroupId][classificationTypeId] = bestValue; //best possible value - helperObject[classificationTypeId] = ""; - } - } - - for (i = 0; i < objectTypes.length; i++) - { - - outputInformation[objectTypes[i]] = { - updatedElements: 0, - nonChangedElements: 0, - checkedElements: 0, - persistentDatasetsUpdated: 0 - }; - } - - for (i = 0; i < objectTypes.length; i++) //update for each object_type - { - isOrganisation = false; - if(objectTypes[i] == "Organisation") - { - currentObjectTable = "CONTACT"; - currentObjectColumn = "CONTACT.CONTACTID"; - isOrganisation = true; - } - else - { - currentObjectTable = objectTypes[i]; - currentObjectColumn = objectTypes[i] + "." + objectTypes[i] +"ID"; - } - - if(isOrganisation) - filterFields = ["CONTACTID", "CUSTOMERCODE", "INFO", "LANGUAGE", "NAME", "STANDARD_CITY", "STANDARD_EMAIL_COMMUNICATION", "STANDARD_PHONE_COMMUNICATION", "STATUS", "TYPE"]; - else if(currentObjectTable == "Salesproject") - filterFields = ["SALESPROJECTID", "CONTACT_ID", "ENDDATE", "INFO", "PHASE", "PROBABILITY", "PROJECTCODE", "PROJECTTITLE", "REASONS", "STARTDATE", "STATUS", "VOLUME"]; - else - throw new Error("updateClassifications_serverProcess: objectType doesn't exist or is not implemented correctly, contact an administrator."); - - //private function for code readability (get's called once for every object_type) - _buildFilteredRecsObject(); - - //this is the "upgrade" part of this process: - //Update all entries with correct classificaiton values - - //all groups of the objectType in the correct order, needed later to also add the "-" gradings if no classificationType has been set under that group - orderedGroups = newSelect("distinct CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID, CLASSIFICATIONGROUP.SORTING") - .from("CLASSIFICATIONGROUP") - .join("CLASSIFICATIONTYPE", "CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID = CLASSIFICATIONGROUP.CLASSIFICATIONGROUPID") - .where("CLASSIFICATIONTYPE.OBJECT_TYPE", objectTypes[i]) - .orderBy("CLASSIFICATIONGROUP.SORTING") - .table(); - - var persistedClassificationObj = {} - //private callback function that processes the achieved scores per object type - function _processAchievedScoresBatchFn(pBatchData, pBatchNum) - { - //logic from above applies here aswell - for (ii = 0; ii < pBatchData.length; ii++) - { - [uid, classificationGroupId, classificationTypeId, classificationScore, classificationScorePercent, classificationScoreSaved, classificationTypeFilter, classificationId, classificationScoreTitle] = pBatchData[ii]; - - if(!helperObject.hasOwnProperty(uid)) //uid - { - achievedScoresObj[uid] = {}; - groupObject[uid] = ""; //groupObject is another helper object to store all the groupIds - achievedScoresTypeObj[uid] = {}; - persistedClassificationObj[uid] = {}; - helperObject[uid] = ""; - } - if(!helperObject.hasOwnProperty(uid + classificationGroupId)) //classificationGroup - { - groupObject[uid] = groupObject[uid].toString() + classificationGroupId.toString() +" "; - achievedScoresObj[uid][classificationGroupId] = {}; - achievedScoresTypeObj[uid][classificationGroupId] = {}; - persistedClassificationObj[uid][classificationGroupId] = {}; - helperObject[uid + classificationGroupId] = ""; - } - if(!helperObject.hasOwnProperty(uid + classificationTypeId)) //classificationType - { - if(_isRelevant()) - { - if(achievedScoresObj[uid][classificationGroupId]["Score"] == undefined) - achievedScoresObj[uid][classificationGroupId]["Score"] = 0; - score = eMath.addDec(parseFloat(achievedScoresObj[uid][classificationGroupId]["Score"]), parseFloat(classificationScore)); - achievedScoresObj[uid][classificationGroupId]["Score"] = score; - achievedScoresObj[uid][classificationGroupId]["Grade"] = ClassificationUtils.getGradingFromObject( - gradingObject[objectTypes[i]], classificationGroupId, score, bestPossibleScoresGroupObj[uid][classificationGroupId]); - - if(parseFloat(classificationScore) != parseFloat(classificationScoreSaved) && classificationScore != undefined) - { - - achievedScoresTypeObj[uid][classificationGroupId][classificationId] = [parseFloat(classificationScore)]; - } - persistedClassificationObj[uid][classificationGroupId][classificationTypeId] = {};//store all classificationtypes that we have for that dataset in persistedClassificationObj - helperObject[uid + classificationTypeId] = ""; - } - else - { - deleteCond = newWhere("CLASSIFICATION.CLASSIFICATIONID", classificationId); - deleteCond.deleteData(true, "CLASSIFICATION"); - outputInformation[objectTypes[i]].persistentDatasetsUpdated++; - - helperObject[uid + classificationTypeId] = ""; - - if(recalculateAll) - { -// if(storedClassificationValues[objectTypes[i]][uid][""]) - } - } - } - } - } - if(singleRefresh) - { - correctCondition = newWhere(currentObjectColumn, vars.get("$local.ObjectRowid_param")); - } - else if(storedClassificationFlag) - { - correctCondition = newWhere(currentObjectColumn, objectRowIdArray, SqlBuilder.IN()); - } - else - { - correctCondition = newWhere("CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID", groupsThatNeedUpdate, SqlBuilder.IN()); - } - - achievedScoresStmt = newSelect(currentObjectColumn + ", CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID, \n\ - CLASSIFICATION.CLASSIFICATIONTYPE_ID, "+ SqlBuilder.caseWhen(newWhere("CLASSIFICATIONSCORE.SCOREPERCENT/100*CLASSIFICATIONTYPE.SCOREPOINTS is null")) - .then("0") - .elseValue("CLASSIFICATIONSCORE.SCOREPERCENT/100*CLASSIFICATIONTYPE.SCOREPOINTS") - .toString()+ ", \n\ - "+SqlBuilder.caseWhen(newWhere("CLASSIFICATIONSCORE.SCOREPERCENT/100 is null")) - .then("0") - .elseValue("CLASSIFICATIONSCORE.SCOREPERCENT/100") - .toString()+", CLASSIFICATION.SCOREPOINTS, CLASSIFICATIONTYPE.FILTER, \n\ - CLASSIFICATION.CLASSIFICATIONID, CLASSIFICATIONSCORE.TITLE") - .from(currentObjectTable) - .join("CLASSIFICATION", "CLASSIFICATION.OBJECT_ROWID = " + currentObjectColumn) - .join("CLASSIFICATIONTYPE", "CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID = CLASSIFICATION.CLASSIFICATIONTYPE_ID") - .leftJoin("CLASSIFICATIONSCORE", "CLASSIFICATION.VALUE = CLASSIFICATIONSCORE.CLASSIFICATIONSCOREID") - .where(correctCondition); - - if(isOrganisation) - achievedScoresStmt.and("CONTACT.PERSON_ID is null"); - - achievedScoresStmt.orderBy(currentObjectColumn + ", CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID, CLASSIFICATIONSCORE.SCOREPERCENT asc"); - - bestPossibleScoreStmt = newSelect(currentObjectColumn + ", CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID, CLASSIFICATION.CLASSIFICATIONTYPE_ID,\n\ - CLASSIFICATIONTYPE.FILTER") - .from(currentObjectTable) - .join("CLASSIFICATION", "CLASSIFICATION.OBJECT_ROWID = " + currentObjectColumn) - .join("CLASSIFICATIONTYPE", "CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID = CLASSIFICATION.CLASSIFICATIONTYPE_ID") - .where(correctCondition); - if(isOrganisation) - bestPossibleScoreStmt.and("CONTACT.PERSON_ID is null"); - - bestPossibleScoreStmt.orderBy(currentObjectColumn + ", CLASSIFICATIONTYPE.CLASSIFICATIONGROUP_ID"); - - bestPossibleScoresGroupObj = {}; - helperObject = {}; - bestPossibleScoreStmt.pageSize(100) - .forEachPage(_buildBestPossibleScoresGroupObjFn); - - achievedScoresTypeObj = {}; - helperObject = {}; - achievedScoresObj = {}; - achievedScoresStmt.pageSize(100) - .forEachPage(_processAchievedScoresBatchFn); - - if(storedClassificationFlag != true) - _insertPersistendClassificationDataIfNeeded(); - //do this after all the data is collected since the achievedScoresStmt returns several records for each rowId. - //If this would be done in the batch function it would result in false classificationstorage-results because not all records for a rowId have been used - for (var row_Id in achievedScoresObj) - { - chainedGrading = classificationStorageObject[objectTypes[i]][row_Id][1]; - - for (var groupId in achievedScoresObj[row_Id]) - { - position = 0; - - for (ii = 0; ii < orderedGroups.length; ii++) { - if (orderedGroups[ii][0] == groupId) - { - position = ii; //current position - break; - } - } - while(chainedGrading.length < position + 1) - { - chainedGrading += "-" - } - if(achievedScoresObj[row_Id][groupId]["Grade"] != undefined) - chainedGrading = StringUtils.replaceAt(chainedGrading, position, achievedScoresObj[row_Id][groupId]["Grade"]); //update the stored classificationString for each dataset - else - { - chainedGrading = StringUtils.replaceAt(chainedGrading, position, "-"); //update the stored classificationString -> remove for irrelevant groups - } - } - - for (ii = 0; iii < orderedGroups.length; ii++) //the empty gradings have been ignored, but should be filled with "-" - { - if(!groupObject[row_Id].toString().includes(orderedGroups[ii][0].toString())) //check which ones aren't included and add "-" for those at correct the position - { - chainedGrading = chainedGrading.substring(0, ii) + "-" + chainedGrading.substring(ii, chainedGrading.length); - } - } - - //update the specified dataset if the already stored ClassificatioNValue differs from the freshly calculated one - cond = newWhere("CLASSIFICATIONSTORAGE.OBJECT_ROWID", row_Id) - .and("CLASSIFICATIONSTORAGE.OBJECT_TYPE", objectTypes[i]) - .and("CLASSIFICATIONSTORAGE.CLASSIFICATIONVALUE", chainedGrading, SqlBuilder.NOT_EQUAL()); - if(new RegExp("^-+$").test(chainedGrading) == true || chainedGrading == "-") - { - count = newWhere("CLASSIFICATIONSTORAGE.OBJECT_ROWID", row_Id).deleteData(true, "CLASSIFICATIONSTORAGE"); - deleted = true; - } - else - { - count = Number(cond.updateData(true, table, column, null, [chainedGrading])); - deleted = false; - } - - outputInformation[objectTypes[i]].checkedElements++; - if(storedClassificationFlag && !deleted) - { - newWhere("CLASSIFICATIONSTORAGE.OBJECT_ROWID", row_Id).updateData(true, "CLASSIFICATIONSTORAGE", ["OUTDATED"], null, [0]) - } - if (count > 0) - { - outputInformation[objectTypes[i]].updatedElements += count; - } - else - { - outputInformation[objectTypes[i]].nonChangedElements++; - } - } - - if(achievedScoresObj.length == 0) - { - _insertPersistendClassificationDataIfNeeded2() - } - - //loop trough achievedScoresTypeObj and update the stored (persistent) data if needed - for (var index in achievedScoresTypeObj) - { - for (var indexII in achievedScoresTypeObj[index]) - { - for (var indexIII in achievedScoresTypeObj[index][indexII]) - { - var scorepoints; - var columns = []; - var values = []; - if(Array.isArray(achievedScoresTypeObj[index][indexII][indexIII])) //if isArray == true: scorepoints have to be updated - { - scorepoints = Number(achievedScoresTypeObj[index][indexII][indexIII][0]); - } - - cond = newWhere("CLASSIFICATION.CLASSIFICATIONID", indexIII); - - if(scorepoints != undefined) - { - columns.push("SCOREPOINTS"); - values.push(scorepoints); - } - cond.updateData(true, "CLASSIFICATION", columns, null, values); - outputInformation[objectTypes[i]].persistentDatasetsUpdated++; - } - } - } - } - - if(!storedClassificationFlag && !singleRefresh) - { for (i = 0; i < scoreArray.length; i++) - { - let cond = newWhere("CLASSIFICATIONTYPE.CLASSIFICATIONTYPEID", scoreArray[i][2]); - cond.updateData(true, "CLASSIFICATIONTYPE", ["OUTDATED"], null, [0]); - } - } - - outputInfo = outputInfo + JSON.stringify(outputInformation) + "\n"; - storedClassificationFlag = false; -} -if(runUpdating == 0) -{ - outputInfo = outputInfo + "No Data has been updated, everything already up-to-date" -} -logging.log(outputInfo); - - -/** - * Builds filteredRecsObj Object which stores all the included Datasets to the specific filter. - * (loops trough classificationTypesFilterObj and uses either entites.getRow or an select for every different filter) - */ -function _buildFilteredRecsObject() -{ - filteredRecsObj = {}; //reset for every objectType - executeGetRows = true; //reset for every objectTyp - - for (var index in classificationTypesFilterObj[objectTypes[i]]) - { - for (var indexIndex in classificationTypesFilterObj[objectTypes[i]][index]) - { - var unparsedFilter = classificationTypesFilterObj[objectTypes[i]][index][indexIndex]; - var filter = JSON.parse(unparsedFilter).filter; - //filteredRecsObj uses the filter as the key -> if multiple indicators use the exact same filtercondition we only have to get these rows once - if(filteredRecsObj[classificationTypesFilterObj[objectTypes[i]][index][indexIndex]] == undefined) - { - if(filter["childs"]["0"] != undefined) // ignore empty filters - { - //no "." in the name means its a field of the entity itself: use entities.getRow and JditoFilterUtils.filterRecords - //to check whether or not the Filter excludes this row - if(!filter["childs"]["0"]["name"].includes(".")) - { - if(executeGetRows) //only do this once for every object type, since the rows don't change depending on the filter - { - var loadConfig = entities.createConfigForLoadingRows() - .entity(ContextUtils.getEntity(objectTypes[i])) - .fields(filterFields); - - var rows = entities.getRows(loadConfig); - var filterableRows = []; - for (ii = 0; ii < rows.length; ii++) { - filterableRows[ii] = filterFields.map(function (field) - { - value = null; - if (field in rows[ii]) - value = rows[ii][field]; - return value; - }); - } - executeGetRows = false; - } - //filter gets used after using entities.getRow and not in the loadconfig, since we can have multiple filters - //and don't want to do entities.getRow for every single one - filteredRecsObj[unparsedFilter] = JditoFilterUtils.filterRecords(filterFields, filterableRows, filter); - } - else //else: currently a count is made whith the filtercondition as the where clause --> poor performance - { - if(objectTypes[i] == "Organisation") - { - filteredRecsObj[unparsedFilter] = newSelect("CONTACT.CONTACTID") - .from("ORGANISATION") - .join("CONTACT", "ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID and CONTACT.PERSON_ID is null") - .leftJoin("ADDRESS", "ADDRESS.ADDRESSID = CONTACT.ADDRESS_ID") - .leftJoin("CLASSIFICATIONSTORAGE", "CLASSIFICATIONSTORAGE.OBJECT_ROWID = CONTACT.CONTACTID") - .where(db.toFilterCondition(JSON.stringify(filter), "Organisation_entity")) - .and("ORGANISATION.ORGANISATIONID", OrgUtils.getPrivateOrganisationId(), SqlBuilder.NOT_EQUAL()) - .table(); - } - else if(objectTypes[i] == "Salesproject") - { - filteredRecsObj[unparsedFilter] = newSelect("SALESPROJECT.SALESPROJECTID") - .from("SALESPROJECT") - .leftJoin("CONTACT", "SALESPROJECT.CONTACT_ID = CONTACT.CONTACTID") - .leftJoin("ORGANISATION", "CONTACT.ORGANISATION_ID = ORGANISATION.ORGANISATIONID") - .leftJoin("CLASSIFICATIONSTORAGE", "CLASSIFICATIONSTORAGE.OBJECT_ROWID = SALESPROJECT.SALESPROJECTID") - .where(db.toFilterCondition(JSON.stringify(filter), "Salesproject_entity")) - .table(); - } - } - } - } - } - } -} - -/** - * Checks whether or not the classificationType is relevant for the current dataset - * (looping trough classificationTypesNoFilterObj if it's included there: no filter is set and it's relevant, - * othwerwises uses _isRelevantFilter() to check whether or not it get's excluded by the set filter) - * returns true/false - */ -function _isRelevant() -{ - var include = false; - - if(classificationTypeFilter == "" || classificationTypeFilter == undefined) - { - for (var index in classificationTypesNoFilterObj[objectTypes[i]]) - { - for (var indexIndex in classificationTypesNoFilterObj[objectTypes[i]][index]) - { - if(classificationTypesNoFilterObj[objectTypes[i]][index][indexIndex] != undefined) - { - include = true; - break; - } - } - } - } - else - { - include = _isRelevantFilter(); - } - return include; -} - -/** - * Checks whether or not the classificationType is relevant for the current dataset, - * (loops trough filteredRecsObj to check whether or not the filter excluded the dataset) - * returns true/false - */ -function _isRelevantFilter() -{ - var include = false; - var recs = filteredRecsObj[classificationTypeFilter]; - if(recs != undefined) - { - include = recs.some(function (rec) {return rec[0] == uid}); - } - return include; -} - - -function _buildBestPossibleScoresGroupObjFn(pBatchData, pBatchNum) -{ - //logic from above applies here aswell - for (ii = 0; ii < pBatchData.length; ii++) - { - [uid, classificationGroupId, classificationTypeId, classificationTypeFilter, classificationScoreTitle, classificationTypeFilter] = pBatchData[ii]; - - if(!helperObject.hasOwnProperty(uid)) //uid - { - bestPossibleScoresGroupObj[uid] = {}; - helperObject[uid] = ""; - } - if(!helperObject.hasOwnProperty(uid + classificationGroupId)) //classificationGroup - { - bestPossibleScoresGroupObj[uid][classificationGroupId] = ""; - helperObject[uid + classificationGroupId] = ""; - } - if(!helperObject.hasOwnProperty(uid + classificationTypeId)) //classificationType - { - if(_isRelevant()) - { - if(bestPossibleScoresGroupObj[uid][classificationGroupId] == "") - bestPossibleScoresGroupObj[uid][classificationGroupId] = 0; - if(bestPossibleScoresObj[objectTypes[i]][classificationGroupId] != undefined && bestPossibleScoresObj[objectTypes[i]][classificationGroupId][classificationTypeId] != undefined) - bestPossibleScoresGroupObj[uid][classificationGroupId] = eMath.addInt(Number(bestPossibleScoresGroupObj[uid][classificationGroupId]), Number(bestPossibleScoresObj[objectTypes[i]][classificationGroupId][classificationTypeId])); - - helperObject[uid + classificationTypeId] = ""; - } - } - } -} - -function _insertPersistendClassificationDataIfNeeded() -{ - var objectsWithClassification; - if(singleRefresh) - { - objectsWithClassification = [vars.get("$local.ObjectRowid_param")]; - } - else - { - objectsWithClassification = newSelect("distinct CLASSIFICATION.OBJECT_ROWID") - .from("CLASSIFICATION") - .where("CLASSIFICATION.OBJECT_TYPE", objectTypes[i]) - .arrayColumn(); - } - for (z = 0; z < objectsWithClassification.length; z++) { - - uid = objectsWithClassification[z]; - var columns = ["CLASSIFICATION.CLASSIFICATIONID" - , "CLASSIFICATION.VALUE" - , "CLASSIFICATION.CLASSIFICATIONTYPE_ID" - , "CLASSIFICATION.OBJECT_TYPE" - , "CLASSIFICATION.OBJECT_ROWID" - , "CLASSIFICATION.SCOREPOINTS" - ]; - - for (var groupId in outdatedClassificationTypeObj[objectTypes[i]]) - { - for (var typeId in outdatedClassificationTypeObj[objectTypes[i]][groupId]) - { - classificationTypeFilter = outdatedClassificationTypeObj[objectTypes[i]][groupId][typeId]["classificationTypeFilter"]; - if(_isRelevant() && (persistedClassificationObj[uid][groupId] == undefined || !persistedClassificationObj[uid][groupId].hasOwnProperty(typeId))) - { - var values = [util.getNewUUID() - , " " - , typeId - , objectTypes[i] - , uid - , "0" - ]; - db.insertData("CLASSIFICATION", columns, null, values); - outputInformation[objectTypes[i]].persistentDatasetsUpdated++; - } - } - } - } -} \ No newline at end of file +ClassificationUtils.executeUpdating(recalculateAll, singleRefresh, objectType_param); \ No newline at end of file diff --git a/process/webview_rest/process.js b/process/webview_rest/process.js new file mode 100644 index 0000000000000000000000000000000000000000..ec9191374d7ca7dccb117faa3c98a3a5784df4a8 --- /dev/null +++ b/process/webview_rest/process.js @@ -0,0 +1,44 @@ +import("Email_lib"); +import("Sql_lib"); +import("Workflow_lib"); +import("Util_lib"); +import("system.util"); +import("Bulkmail_lib"); + +function restget (pRequest) +{ + var request = JSON.parse(pRequest); + var mailLogId = request.query.log; + + + + if (mailLogId) + { + try + { + var BulkMailId,MailRunId; + [BulkMailId,MailRunId] = newSelect(["MAIL_RUN.OBJECT_ROWID","MAIL_RUN.MAIL_RUNID"]) + .from("MAIL_LOG") + .join("MAIL_RUN","MAIL_RUN.MAIL_RUNID = MAIL_LOG.MAIL_RUN_ID") + .where("MAIL_LOG.MAIL_LOGID",mailLogId) + .arrayRow(); + var eml = BulkMailUtils.getEmlFile(BulkMailId, MailRunId, mailLogId); + var email = Email.fromRFC(eml); + + request.response.httpStatusCode = 200; //Ok + request.response.header["Content-Type"] = "text/html"; + request.response.body = email.body; + + } + catch (ex) + { + request.response.httpStatusCode = 404; //not found + } + } + else + { + request.response.httpStatusCode = 400; //bad request + } + + return JSON.stringify(request); +} diff --git a/process/webview_rest/webview_rest.aod b/process/webview_rest/webview_rest.aod new file mode 100644 index 0000000000000000000000000000000000000000..75dd99189132ec8688d146be1f7d80eda100ebfe --- /dev/null +++ b/process/webview_rest/webview_rest.aod @@ -0,0 +1,15 @@ +<?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.2.2" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/process/1.2.2"> + <name>webview_rest</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <process>%aditoprj%/process/webview_rest/process.js</process> + <publishAsWebservice v="true" /> + <style>REST</style> + <loginTypeId> + <element>internal.none</element> + </loginTypeId> + <alias>Data_alias</alias> + <variants> + <element>EXECUTABLE</element> + </variants> +</process> diff --git a/process/workflowExtension_serverProcess/process.js b/process/workflowExtension_serverProcess/process.js index a2fe06d71683692aaf05900c2d878c513b492c4e..4da7b83aaed8ace0f35a9ea7ec7353d7c3697b7f 100644 --- a/process/workflowExtension_serverProcess/process.js +++ b/process/workflowExtension_serverProcess/process.js @@ -13,7 +13,7 @@ var changedRows = JSON.parse(localVariables[WorkflowVariables.CHANGED_ROWS()]); if (project.getPreferenceValue("custom.observation.isEnabled", false) == "true") { - Observation.checkObservation(localVariables); + new Observation(localVariables).checkObservation(); } ClassificationUtils.setClassificationStorageDatasetsOutdated([targetId], entityName, rowData, changedRows); diff --git a/rendererDefinition/numberPlus1000/numberPlus1000.aod b/rendererDefinition/numberPlus1000/numberPlus1000.aod new file mode 100644 index 0000000000000000000000000000000000000000..42ad72cbb27949ddadbc44088be105d02c5329c6 --- /dev/null +++ b/rendererDefinition/numberPlus1000/numberPlus1000.aod @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="UTF-8"?> +<rendererDefinition xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.0.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/rendererDefinition/1.0.0"> + <name>numberPlus1000</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <rendererType>NUMBERFIELD</rendererType> + <rendererConfig> + <numberFieldRendererConfig> + <name>rendererConfig</name> + <numberfieldStep v="1000" /> + </numberFieldRendererConfig> + </rendererConfig> +</rendererDefinition> diff --git a/report/Offer_report/reportData.jrxml b/report/Offer_report/reportData.jrxml index 909a49ae0c633c8db4975aad71b03479e196b122..24951a28ca3413c30c5d27918635f83e8e3e6f1e 100644 --- a/report/Offer_report/reportData.jrxml +++ b/report/Offer_report/reportData.jrxml @@ -1,8 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="report1" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="e7a916c8-3f9a-497d-84bb-3909b15271ea"> - <property name="ireport.zoom" value="1.0"/> - <property name="ireport.x" value="0"/> - <property name="ireport.y" value="0"/> + <property name="ireport.zoom" value="2.1435888100000016"/> + <property name="ireport.x" value="260"/> + <property name="ireport.y" value="395"/> <parameter name="myAddr" class="java.lang.String"/> <parameter name="Pos" class="java.lang.String"/> <parameter name="Articledescription" class="java.lang.String"/> @@ -24,7 +24,7 @@ <parameter name="OfferDeliveryTerm" class="java.lang.String"/> <parameter name="responsible" class="java.lang.String"/> <parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false"> - <defaultValueExpression><![CDATA["C:\\Entwicklung\\0.0\\project\\basic2\\report\\Offer_report\\"]]></defaultValueExpression> + <defaultValueExpression><![CDATA["C:\\entwicklungszweige\\master\\project\\xRM-Basic\\report\\Offer_report\\"]]></defaultValueExpression> </parameter> <parameter name="adito.datasource.subdata" class="java.lang.Object"/> <parameter name="SUMITEMSUM" class="java.lang.Double"/> @@ -37,6 +37,7 @@ <parameter name="TotalWithoutVat" class="java.lang.String"/> <parameter name="TotalWithVat" class="java.lang.String"/> <parameter name="printHeadDiscount" class="java.lang.String"/> + <parameter name="Optional" class="java.lang.String"/> <queryString> <![CDATA[]]> </queryString> @@ -145,7 +146,7 @@ </band> <band height="42"> <staticText> - <reportElement x="358" y="23" width="27" height="15" isRemoveLineWhenBlank="true" uuid="a81f864d-b418-4f1d-9410-2eb7ac8cff60"> + <reportElement x="320" y="23" width="27" height="15" isRemoveLineWhenBlank="true" uuid="a81f864d-b418-4f1d-9410-2eb7ac8cff60"> <printWhenExpression><![CDATA[!$P{printDiscount}.equals("0")]]></printWhenExpression> </reportElement> <textElement textAlignment="Right"> @@ -185,7 +186,7 @@ <textFieldExpression><![CDATA[$P{Unitprice}]]></textFieldExpression> </textField> <textField> - <reportElement x="345" y="11" width="40" height="12" isRemoveLineWhenBlank="true" uuid="91319825-d02b-4a0d-9234-8342b8518c61"> + <reportElement x="307" y="11" width="40" height="12" isRemoveLineWhenBlank="true" uuid="91319825-d02b-4a0d-9234-8342b8518c61"> <printWhenExpression><![CDATA[!$P{printDiscount}.equals("0")]]></printWhenExpression> </reportElement> <textElement textAlignment="Right"> @@ -201,7 +202,7 @@ <textFieldExpression><![CDATA[$P{Pos}]]></textFieldExpression> </textField> <textField> - <reportElement x="279" y="11" width="54" height="12" uuid="3bb98c33-f62c-444f-b706-49d4dd54cf35"/> + <reportElement x="252" y="11" width="54" height="12" uuid="3bb98c33-f62c-444f-b706-49d4dd54cf35"/> <textElement textAlignment="Right"> <font size="8"/> </textElement> @@ -229,7 +230,7 @@ <textFieldExpression><![CDATA[$F{OFFER_CURRENCY}]]></textFieldExpression> </textField> <textField> - <reportElement x="122" y="11" width="156" height="12" uuid="0dbb9e83-463b-45e4-a702-2d1699220383"/> + <reportElement x="122" y="11" width="130" height="12" uuid="0dbb9e83-463b-45e4-a702-2d1699220383"/> <textElement> <font size="8"/> </textElement> @@ -238,6 +239,13 @@ <line> <reportElement x="14" y="6" width="541" height="1" uuid="c19244a8-cbd9-4a8a-b2e4-25e6aa6d730d"/> </line> + <textField> + <reportElement x="349" y="11" width="40" height="12" isRemoveLineWhenBlank="true" uuid="34c76f59-4476-41f7-8326-5bef886cc0da"/> + <textElement textAlignment="Right"> + <font size="8"/> + </textElement> + <textFieldExpression><![CDATA[$P{Optional}]]></textFieldExpression> + </textField> </band> </groupHeader> <groupFooter> @@ -429,14 +437,14 @@ <textFieldExpression><![CDATA[$F{PRODUCT_PRODUCTCODE}]]></textFieldExpression> </textField> <textField> - <reportElement x="122" y="0" width="156" height="15" uuid="b0a5ce7d-8c01-41e5-8a59-bae7ec156590"/> + <reportElement x="122" y="0" width="130" height="15" uuid="b0a5ce7d-8c01-41e5-8a59-bae7ec156590"/> <textElement> <font size="8"/> </textElement> <textFieldExpression><![CDATA[$F{OFFERITEM_ITEMNAME}]]></textFieldExpression> </textField> <textField isStretchWithOverflow="true" pattern=""> - <reportElement x="345" y="0" width="40" height="15" isRemoveLineWhenBlank="true" uuid="dab4d8da-3af4-4d4d-b78d-a2e97b17271a"> + <reportElement x="307" y="0" width="40" height="15" isRemoveLineWhenBlank="true" uuid="dab4d8da-3af4-4d4d-b78d-a2e97b17271a"> <printWhenExpression><![CDATA[!$F{OFFERITEM_DISCOUNT}.equals("0,00") && !$F{OFFERITEM_DISCOUNT}.equals("0.00")]]></printWhenExpression> </reportElement> <textElement textAlignment="Right"> @@ -459,7 +467,7 @@ <textFieldExpression><![CDATA[!$F{OFFERITEM_VAT}.equals(null)? $F{OFFERITEM_VAT} : ""]]></textFieldExpression> </textField> <textField pattern="###0;-###0"> - <reportElement x="282" y="0" width="51" height="15" uuid="bd119f1f-b7f2-4df2-a807-2acbbbc19b74"/> + <reportElement x="255" y="0" width="51" height="15" uuid="bd119f1f-b7f2-4df2-a807-2acbbbc19b74"/> <textElement textAlignment="Right"> <font size="8"/> </textElement> @@ -474,11 +482,18 @@ </textElement> <textFieldExpression><![CDATA[$F{ITEMSUM}]]></textFieldExpression> </textField> + <textField isStretchWithOverflow="true" pattern=""> + <reportElement x="349" y="0" width="40" height="15" isRemoveLineWhenBlank="true" uuid="01e982a3-df8d-4445-83be-d6a61c69d2e9"/> + <textElement textAlignment="Right"> + <font size="8"/> + </textElement> + <textFieldExpression><![CDATA[$F{OFFERITEM_OPTIONAL}]]></textFieldExpression> + </textField> </band> <band height="15"> <printWhenExpression><![CDATA[!$F{OFFERITEM_ASSIGNEDTO}.equals(null) && !$F{OFFERITEM_ASSIGNEDTO}.equals("")]]></printWhenExpression> <textField> - <reportElement x="122" y="0" width="156" height="15" forecolor="#999999" uuid="ae45c708-344e-4a7d-8756-de306f3ec922"/> + <reportElement x="122" y="0" width="130" height="15" forecolor="#999999" uuid="ae45c708-344e-4a7d-8756-de306f3ec922"/> <textElement> <font size="8"/> </textElement> @@ -492,7 +507,7 @@ <textFieldExpression><![CDATA[$F{OFFERITEM_ITEMPOSITION}]]></textFieldExpression> </textField> <textField pattern="###0;-###0"> - <reportElement x="282" y="0" width="51" height="15" forecolor="#999999" uuid="4337f5ec-5d87-403e-a6fd-d7036ae210b5"/> + <reportElement x="255" y="0" width="51" height="15" forecolor="#999999" uuid="4337f5ec-5d87-403e-a6fd-d7036ae210b5"/> <textElement textAlignment="Right"> <font size="8"/> </textElement> @@ -505,6 +520,13 @@ </textElement> <textFieldExpression><![CDATA[$F{PRODUCT_PRODUCTCODE}]]></textFieldExpression> </textField> + <textField isStretchWithOverflow="true" pattern=""> + <reportElement x="349" y="0" width="40" height="15" isRemoveLineWhenBlank="true" forecolor="#999999" uuid="9658ee4e-0c56-4cf0-9db0-5623edd01075"/> + <textElement textAlignment="Right"> + <font size="8"/> + </textElement> + <textFieldExpression><![CDATA[$F{OFFERITEM_OPTIONAL}]]></textFieldExpression> + </textField> </band> <band height="18"> <textField isStretchWithOverflow="true"> diff --git a/role/PROJECT_DSGVO/PROJECT_DSGVO.aod b/role/PROJECT_DSGVO/PROJECT_DSGVO.aod new file mode 100644 index 0000000000000000000000000000000000000000..e2bdeeae878853c7c2182c82731f5e86ea455d75 --- /dev/null +++ b/role/PROJECT_DSGVO/PROJECT_DSGVO.aod @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<role xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/role/1.2.0"> + <name>PROJECT_DSGVO</name> + <title>DSGVO</title> + <majorModelMode>DISTRIBUTED</majorModelMode> +</role> diff --git a/role/PROJECT_Inspector1/PROJECT_Inspector1.aod b/role/PROJECT_Inspector1/PROJECT_Inspector1.aod new file mode 100644 index 0000000000000000000000000000000000000000..73d6e71c56c7abdd837da4750bdcbac3ca60aba1 --- /dev/null +++ b/role/PROJECT_Inspector1/PROJECT_Inspector1.aod @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="UTF-8"?> +<role xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/role/1.2.0"> + <name>PROJECT_Inspector1</name> + <majorModelMode>DISTRIBUTED</majorModelMode> +</role> diff --git a/role/PROJECT_Inspector2/PROJECT_Inspector2.aod b/role/PROJECT_Inspector2/PROJECT_Inspector2.aod new file mode 100644 index 0000000000000000000000000000000000000000..94c0fd7004e65381d1b7bbeb163be127070e87ff --- /dev/null +++ b/role/PROJECT_Inspector2/PROJECT_Inspector2.aod @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<role xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.2.0" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/role/1.2.0"> + <name>PROJECT_Inspector2</name> + <title>executives</title> + <majorModelMode>DISTRIBUTED</majorModelMode> +</role>