From 0c619fb4817e56710bbddeee0fb291fc5f5188e3 Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Fri, 5 Mar 2021 15:12:49 +0100 Subject: [PATCH 001/242] 1075053 CommunicationSettings --- .../CommunicationSettings/changelog.xml | 8 + .../create_communicationLegalBase.xml | 12 ++ .../create_communicationSettings.xml | 20 +++ .../insert_communicationChannel.xml | 53 ++++++ .../insert_communicationSettingsStatus.xml | 43 +++++ .../Data_alias/basic/2021.0.2/changelog.xml | 3 +- .liquibase/Data_alias/changelog.xml | 2 +- aliasDefinition/Data_alias/Data_alias.aod | 104 +++++++++++ .../CommunicationSettings_entity.aod | 165 ++++++++++++++++++ .../containername_param/valueProcess.js | 4 + .../entityfields/contact_id/valueProcess.js | 6 + .../containername_param/valueProcess.js | 4 + .../status/displayValueProcess.js | 6 + .../entityfields/status/valueProcess.js | 7 + .../containername_param/valueProcess.js | 4 + .../recordcontainers/db/conditionProcess.js | 6 + .../channel_type.displayvalue/expression.js | 5 + .../medium_id.displayvalue/expression.js | 5 + .../status.displayvalue/expression.js | 5 + .../KeywordEntry_entity.aod | 18 ++ entity/Person_entity/Person_entity.aod | 14 ++ .../children/contactid_param/valueProcess.js | 4 + .../CommunicationSettings.aod | 28 +++ neonContext/Person/Person.aod | 4 + .../CommunicationSettingsDrawer_view.aod | 19 ++ .../CommunicationSettingsEdit_view.aod | 35 ++++ .../CommunicationSettingsFilter_view.aod | 58 ++++++ .../CommunicationSettingsPreview_view.aod | 16 ++ .../PersonDataPrivacy_view.aod | 23 +++ neonView/PersonMain_view/PersonMain_view.aod | 6 +- process/KeywordRegistry_basic/process.js | 13 +- 31 files changed, 694 insertions(+), 6 deletions(-) create mode 100644 .liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/changelog.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/create_communicationLegalBase.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/create_communicationSettings.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/insert_communicationChannel.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/insert_communicationSettingsStatus.xml create mode 100644 entity/CommunicationSettings_entity/CommunicationSettings_entity.aod create mode 100644 entity/CommunicationSettings_entity/entityfields/channeltypekeyword/children/containername_param/valueProcess.js create mode 100644 entity/CommunicationSettings_entity/entityfields/contact_id/valueProcess.js create mode 100644 entity/CommunicationSettings_entity/entityfields/mediumkeyword/children/containername_param/valueProcess.js create mode 100644 entity/CommunicationSettings_entity/entityfields/status/displayValueProcess.js create mode 100644 entity/CommunicationSettings_entity/entityfields/status/valueProcess.js create mode 100644 entity/CommunicationSettings_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js create mode 100644 entity/CommunicationSettings_entity/recordcontainers/db/conditionProcess.js create mode 100644 entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/channel_type.displayvalue/expression.js create mode 100644 entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/medium_id.displayvalue/expression.js create mode 100644 entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js create mode 100644 entity/Person_entity/entityfields/contactcommunicationsettings/children/contactid_param/valueProcess.js create mode 100644 neonContext/CommunicationSettings/CommunicationSettings.aod create mode 100644 neonView/CommunicationSettingsDrawer_view/CommunicationSettingsDrawer_view.aod create mode 100644 neonView/CommunicationSettingsEdit_view/CommunicationSettingsEdit_view.aod create mode 100644 neonView/CommunicationSettingsFilter_view/CommunicationSettingsFilter_view.aod create mode 100644 neonView/CommunicationSettingsPreview_view/CommunicationSettingsPreview_view.aod create mode 100644 neonView/PersonDataPrivacy_view/PersonDataPrivacy_view.aod diff --git a/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/changelog.xml b/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/changelog.xml new file mode 100644 index 0000000000..148237f02c --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/changelog.xml @@ -0,0 +1,8 @@ +<?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"/> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/create_communicationLegalBase.xml b/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/create_communicationLegalBase.xml new file mode 100644 index 0000000000..c862fea171 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/create_communicationLegalBase.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="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> + </createTable> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/create_communicationSettings.xml b/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/create_communicationSettings.xml new file mode 100644 index 0000000000..76825f50a1 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/create_communicationSettings.xml @@ -0,0 +1,20 @@ +<?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)"/> + <column name="MEDIUM_ID" type="VARCHAR(36)"/> + <column name="CHANNEL_TYPE" type="VARCHAR(36)"/> + <column name="CHANNEL_ID" type="CHAR(36)"/> + <column name="STATUS" type="VARCHAR(36)"/> + </createTable> + <createIndex tableName="COMMUNICATIONSETTINGS" indexName="IDX_COMMSETTINGS_CONTACT_ID"> + <column name="CONTACT_ID"/> + </createIndex> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/insert_communicationChannel.xml b/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/insert_communicationChannel.xml new file mode 100644 index 0000000000..0668e52d0f --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.2/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_MEDIUM"/> + <column name="TITLE" value="Medium"/> + <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.2/CommunicationSettings/insert_communicationSettingsStatus.xml b/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/insert_communicationSettingsStatus.xml new file mode 100644 index 0000000000..b56f705142 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.2/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.2/changelog.xml b/.liquibase/Data_alias/basic/2021.0.2/changelog.xml index ec78d188e0..946720263e 100644 --- a/.liquibase/Data_alias/basic/2021.0.2/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.0.2/changelog.xml @@ -1,5 +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="Event/changelog.xml"/> + <include relativeToChangelogFile="true" file="Event/changelog.xml"/> + <include relativeToChangelogFile="true" file="CommunicationSettings/changelog.xml"/> </databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/changelog.xml b/.liquibase/Data_alias/changelog.xml index 55e9b42b34..195f8df760 100644 --- a/.liquibase/Data_alias/changelog.xml +++ b/.liquibase/Data_alias/changelog.xml @@ -23,5 +23,5 @@ <include relativeToChangelogFile="true" file="basic/2021.0.1/changelog.xml"/> <include relativeToChangelogFile="true" file="basic/2021.0.2/changelog.xml"/> <!--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/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod index c4ab229cfe..82e01fe2f2 100644 --- a/aliasDefinition/Data_alias/Data_alias.aod +++ b/aliasDefinition/Data_alias/Data_alias.aod @@ -18485,6 +18485,110 @@ </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="false" /> + <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="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>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="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="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>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> + </entityFields> + </entityDb> </entities> </entityGroup> </aliasDefDb> diff --git a/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod b/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod new file mode 100644 index 0000000000..4250e186dc --- /dev/null +++ b/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod @@ -0,0 +1,165 @@ +<?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>CommunicationSettings_entity</name> + <title>Communication Settings</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <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> + <dependencies> + <entityDependency> + <name>811c8c4c-20f8-4e20-9ae3-9aa7ae5e1dc0</name> + <entityName>Person_entity</entityName> + <fieldName>ContactCommunicationSettings</fieldName> + <isConsumer v="false" /> + </entityDependency> + </dependencies> + </entityProvider> + <entityField> + <name>COMMUNICATIONSETTINGSID</name> + </entityField> + <entityField> + <name>CONTACT_ID</name> + <title>Contact</title> + <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_ID</name> + <title>Medium</title> + <consumer>MediumKeyword</consumer> + <groupable v="true" /> + </entityField> + <entityField> + <name>CHANNEL_TYPE</name> + <title>Channel type</title> + <consumer>ChannelTypeKeyword</consumer> + <groupable v="true" /> + </entityField> + <entityField> + <name>CHANNEL_ID</name> + <title>Channel</title> + </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> + </children> + </entityConsumer> + </entityFields> + <recordContainers> + <dbRecordContainer> + <name>db</name> + <conditionProcess>%aditoprj%/entity/CommunicationSettings_entity/recordcontainers/db/conditionProcess.js</conditionProcess> + <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_ID.value</name> + <recordfield>COMMUNICATIONSETTINGS.MEDIUM_ID</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> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>MEDIUM_ID.displayValue</name> + <expression>%aditoprj%/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/medium_id.displayvalue/expression.js</expression> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>STATUS.displayValue</name> + <expression>%aditoprj%/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js</expression> + </dbRecordFieldMapping> + </recordFieldMappings> + <linkInformation> + <linkInformation> + <name>7668d332-84d5-48fc-b53b-bbea26a6e6c7</name> + <tableName>COMMUNICATIONSETTINGS</tableName> + <primaryKey>COMMUNICATIONSETTINGSID</primaryKey> + <isUIDTable v="true" /> + <readonly v="false" /> + </linkInformation> + </linkInformation> + </dbRecordContainer> + </recordContainers> +</entity> 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 0000000000..353ea6f4bf --- /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/contact_id/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/contact_id/valueProcess.js new file mode 100644 index 0000000000..d877bfcaca --- /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/mediumkeyword/children/containername_param/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/mediumkeyword/children/containername_param/valueProcess.js new file mode 100644 index 0000000000..9e90f32b11 --- /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.communicationMedium()); \ 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 0000000000..d3ac19b3e9 --- /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 0000000000..bd4556b964 --- /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 0000000000..6e90947849 --- /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/recordcontainers/db/conditionProcess.js b/entity/CommunicationSettings_entity/recordcontainers/db/conditionProcess.js new file mode 100644 index 0000000000..7e2c1224ac --- /dev/null +++ b/entity/CommunicationSettings_entity/recordcontainers/db/conditionProcess.js @@ -0,0 +1,6 @@ +import("system.result"); +import("Sql_lib"); + +var condition = newWhere("COMMUNICATIONSETTINGS.CONTACT_ID", "$param.ContactId_param"); + +result.string(condition.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 0000000000..c2b7346dd8 --- /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_id.displayvalue/expression.js b/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/medium_id.displayvalue/expression.js new file mode 100644 index 0000000000..00b82e4840 --- /dev/null +++ b/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/medium_id.displayvalue/expression.js @@ -0,0 +1,5 @@ +import("KeywordRegistry_basic"); +import("system.result"); +import("Keyword_lib"); + +result.string(KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.communicationMedium(), "COMMUNICATIONSETTINGS.MEDIUM_ID")); \ 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 0000000000..47b4114fc5 --- /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/KeywordEntry_entity/KeywordEntry_entity.aod b/entity/KeywordEntry_entity/KeywordEntry_entity.aod index e5bfe7c1b2..5c3a12e508 100644 --- a/entity/KeywordEntry_entity/KeywordEntry_entity.aod +++ b/entity/KeywordEntry_entity/KeywordEntry_entity.aod @@ -637,6 +637,24 @@ <fieldName>KeywordPhases</fieldName> <isConsumer v="false" /> </entityDependency> + <entityDependency> + <name>f85bfcbc-627a-4746-acc1-e228b56ab122</name> + <entityName>CommunicationSettings_entity</entityName> + <fieldName>StatusKeyword</fieldName> + <isConsumer v="false" /> + </entityDependency> + <entityDependency> + <name>d6fe81c3-fadc-444d-8962-53c64b8ecd33</name> + <entityName>CommunicationSettings_entity</entityName> + <fieldName>MediumKeyword</fieldName> + <isConsumer v="false" /> + </entityDependency> + <entityDependency> + <name>81b5b8f4-74a7-42fe-84d1-05211ddcd221</name> + <entityName>CommunicationSettings_entity</entityName> + <fieldName>ChannelTypeKeyword</fieldName> + <isConsumer v="false" /> + </entityDependency> </dependencies> <children> <entityParameter> diff --git a/entity/Person_entity/Person_entity.aod b/entity/Person_entity/Person_entity.aod index 64bb15fc56..ee53ea6fb9 100644 --- a/entity/Person_entity/Person_entity.aod +++ b/entity/Person_entity/Person_entity.aod @@ -1498,6 +1498,20 @@ <iconId>VAADIN:CURLY_BRACKETS</iconId> <stateProcess>%aditoprj%/entity/Person_entity/entityfields/openadminview/stateProcess.js</stateProcess> </entityActionField> + <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/Person_entity/entityfields/contactcommunicationsettings/children/contactid_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> </entityFields> <recordContainers> <dbRecordContainer> diff --git a/entity/Person_entity/entityfields/contactcommunicationsettings/children/contactid_param/valueProcess.js b/entity/Person_entity/entityfields/contactcommunicationsettings/children/contactid_param/valueProcess.js new file mode 100644 index 0000000000..7b6137b4d1 --- /dev/null +++ b/entity/Person_entity/entityfields/contactcommunicationsettings/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/neonContext/CommunicationSettings/CommunicationSettings.aod b/neonContext/CommunicationSettings/CommunicationSettings.aod new file mode 100644 index 0000000000..99a89c8a6a --- /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/Person/Person.aod b/neonContext/Person/Person.aod index 5a9b1ecbe9..f51ca899d1 100644 --- a/neonContext/Person/Person.aod +++ b/neonContext/Person/Person.aod @@ -63,5 +63,9 @@ <name>2a6c44be-53e2-469e-84b3-615841bd4430</name> <view>PersonDuplicateEditview_view</view> </neonViewReference> + <neonViewReference> + <name>627518cc-15b0-4f0d-b6f3-ec06172e7c4e</name> + <view>PersonDataPrivacy_view</view> + </neonViewReference> </references> </neonContext> diff --git a/neonView/CommunicationSettingsDrawer_view/CommunicationSettingsDrawer_view.aod b/neonView/CommunicationSettingsDrawer_view/CommunicationSettingsDrawer_view.aod new file mode 100644 index 0000000000..e3d426b3f4 --- /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 0000000000..7269b13cb2 --- /dev/null +++ b/neonView/CommunicationSettingsEdit_view/CommunicationSettingsEdit_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>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>d9e0801b-824c-4576-b998-73d9a05ab73e</name> + <entityField>CHANNEL_ID</entityField> + </entityFieldLink> + <entityFieldLink> + <name>41399ea7-2607-492d-898e-85a74bcad694</name> + <entityField>MEDIUM_ID</entityField> + </entityFieldLink> + <entityFieldLink> + <name>160baaf0-8e0f-472c-8127-8309f69399ff</name> + <entityField>STATUS</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 0000000000..7040f9bc4f --- /dev/null +++ b/neonView/CommunicationSettingsFilter_view/CommunicationSettingsFilter_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>CommunicationSettingsFilter_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterable v="true" /> + <layout> + <groupLayout> + <name>layout</name> + </groupLayout> + </layout> + <children> + <multiEditTableViewTemplate> + <name>MultiEdit</name> + <editableColumns> + <element>STATUS</element> + </editableColumns> + <columns> + <neonTableColumn> + <name>1319cf72-6ed3-42ab-a8ff-c3bd98c1662e</name> + <entityField>CHANNEL_TYPE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>4708f2bb-62b2-4720-8328-a1098705e745</name> + <entityField>CHANNEL_ID</entityField> + </neonTableColumn> + <neonTableColumn> + <name>3e178293-a659-40f0-b85a-9821a098880b</name> + <entityField>MEDIUM_ID</entityField> + </neonTableColumn> + <neonTableColumn> + <name>8ecdd553-71ea-4e49-bae6-b15b1095a84f</name> + <entityField>STATUS</entityField> + </neonTableColumn> + </columns> + </multiEditTableViewTemplate> + <treeTableViewTemplate> + <name>TreeTable</name> + <columns> + <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_ID</entityField> + </neonTreeTableColumn> + <neonTreeTableColumn> + <name>85b13242-8fb1-4528-8ea9-9ed2fe02fc77</name> + <entityField>STATUS</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 0000000000..0fde0185b7 --- /dev/null +++ b/neonView/CommunicationSettingsPreview_view/CommunicationSettingsPreview_view.aod @@ -0,0 +1,16 @@ +<?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> + </cardViewTemplate> + </children> +</neonView> diff --git a/neonView/PersonDataPrivacy_view/PersonDataPrivacy_view.aod b/neonView/PersonDataPrivacy_view/PersonDataPrivacy_view.aod new file mode 100644 index 0000000000..e76b2ddeca --- /dev/null +++ b/neonView/PersonDataPrivacy_view/PersonDataPrivacy_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>PersonDataPrivacy_view</name> + <title>Data Privacy</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <boxLayout> + <name>layout</name> + </boxLayout> + </layout> + <children> + <neonViewReference> + <name>dff2495c-99eb-4dbd-a4c7-99c1f297eb36</name> + <entityField>DSGVOEntries</entityField> + <view>DSGVOFilter_view</view> + </neonViewReference> + <neonViewReference> + <name>dfdbd5b2-eb37-436f-8256-e7ba55eba1dc</name> + <entityField>ContactCommunicationSettings</entityField> + <view>CommunicationSettingsDrawer_view</view> + </neonViewReference> + </children> +</neonView> diff --git a/neonView/PersonMain_view/PersonMain_view.aod b/neonView/PersonMain_view/PersonMain_view.aod index 5f2dc5ffa8..fbeb09d4b9 100644 --- a/neonView/PersonMain_view/PersonMain_view.aod +++ b/neonView/PersonMain_view/PersonMain_view.aod @@ -60,9 +60,9 @@ <view>LogHistoryFilter_view</view> </neonViewReference> <neonViewReference> - <name>fb1dd01e-a3ad-4708-b6a0-d273cbb0b50f</name> - <entityField>DSGVOEntries</entityField> - <view>DSGVOFilter_view</view> + <name>82f19c55-fa96-43de-9f26-46069b28db31</name> + <entityField>#ENTITY</entityField> + <view>PersonDataPrivacy_view</view> </neonViewReference> <neonViewReference> <name>d128a678-b1c0-49d0-a74c-7860d3a85247</name> diff --git a/process/KeywordRegistry_basic/process.js b/process/KeywordRegistry_basic/process.js index ed67820926..fad18eea62 100644 --- a/process/KeywordRegistry_basic/process.js +++ b/process/KeywordRegistry_basic/process.js @@ -351,4 +351,15 @@ $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.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$medium = function(){return "COMMUNICATIONCHANNEL_MEDIUM";}; +$KeywordRegistry.communicationChannelType$address = function(){return "COMMUNICATIONCHANNEL_ADDRESS";}; \ No newline at end of file -- GitLab From bfadfc9c789adafe56b4039390a8969003d07ee1 Mon Sep 17 00:00:00 2001 From: "m.groppe" <m.groppe@adito.de> Date: Fri, 5 Mar 2021 18:00:47 +0100 Subject: [PATCH 002/242] =?UTF-8?q?[Projekt:=20xRM-Marketing][TicketNr.:?= =?UTF-8?q?=201075051][=C3=9Cbernahme=20u.=20Erweiterung=20"Weblink"=20aus?= =?UTF-8?q?=20Internem=20Adito]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../LinkManagement/CreateLinkManagement.xml | 19 +++ .../LinkManagement/CreateWebtrackingtags.xml | 18 ++ .../addLinkManagementKeywords.xml | 76 +++++++++ .../2021.0.2/LinkManagement/changelog.xml | 6 + .../Data_alias/basic/2021.0.2/changelog.xml | 1 + .../KeywordEntry_entity.aod | 6 + .../LinkManagement_entity.aod | 156 ++++++++++++++++++ .../contentTitleProcess.js | 4 + .../entityfields/date_new/valueProcess.js | 6 + .../containername_param/valueProcess.js | 2 + .../linkmanagementid/valueProcess.js | 7 + .../entityfields/score/valueProcess.js | 7 + .../entityfields/url/onValidation.js | 11 ++ .../entityfields/url/stateProcess.js | 8 + .../entityfields/urltype_icon/valueProcess.js | 11 ++ .../entityfields/user_new/valueProcess.js | 5 + .../children/webtrackingurl/valueProcess.js | 3 + .../recordcontainers/db/conditionProcess.js | 10 ++ .../recordcontainers/db/orderClauseProcess.js | 5 + .../tags.value/expression.js | 3 + .../urltype.displayvalue/expression.js | 3 + .../WebtrackingTag_entity.aod | 130 +++++++++++++++ .../entityfields/date_edit/valueProcess.js | 7 + .../entityfields/date_new/valueProcess.js | 7 + .../containername_param/valueProcess.js | 2 + .../valueProcess.js | 10 ++ .../entityfields/tag/displayValueProcess.js | 8 + .../entityfields/user_edit/valueProcess.js | 7 + .../entityfields/user_new/valueProcess.js | 7 + .../webtrackingpagelocation/valueProcess.js | 8 + .../webtrackingtagid/valueProcess.js | 8 + .../grantUpdateProcess.js | 6 + entity/WebtrackingTag_entity/onInit.js | 14 ++ .../recordcontainers/db/conditionProcess.js | 12 ++ neonContext/LinkManagement/LinkManagement.aod | 34 ++++ neonContext/WebtrackingTag/WebtrackingTag.aod | 22 +++ .../LinkManagementDrawer_view.aod | 18 ++ .../LinkManagementEdit_view.aod | 38 +++++ .../LinkManagementFilter_view.aod | 36 ++++ .../LinkManagementMain_view.aod | 23 +++ .../LinkManagementPreview_view.aod | 30 ++++ .../WebtrackingTagEdit_view.aod | 24 +++ .../WebtrackingTagFilter_view.aod | 22 +++ .../WebtrackingTagMultiEdit_view.aod | 22 +++ 44 files changed, 862 insertions(+) create mode 100644 .liquibase/Data_alias/basic/2021.0.2/LinkManagement/CreateLinkManagement.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.2/LinkManagement/CreateWebtrackingtags.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.2/LinkManagement/addLinkManagementKeywords.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.2/LinkManagement/changelog.xml create mode 100644 entity/LinkManagement_entity/LinkManagement_entity.aod create mode 100644 entity/LinkManagement_entity/contentTitleProcess.js create mode 100644 entity/LinkManagement_entity/entityfields/date_new/valueProcess.js create mode 100644 entity/LinkManagement_entity/entityfields/keywordurltype/children/containername_param/valueProcess.js create mode 100644 entity/LinkManagement_entity/entityfields/linkmanagementid/valueProcess.js create mode 100644 entity/LinkManagement_entity/entityfields/score/valueProcess.js create mode 100644 entity/LinkManagement_entity/entityfields/url/onValidation.js create mode 100644 entity/LinkManagement_entity/entityfields/url/stateProcess.js create mode 100644 entity/LinkManagement_entity/entityfields/urltype_icon/valueProcess.js create mode 100644 entity/LinkManagement_entity/entityfields/user_new/valueProcess.js create mode 100644 entity/LinkManagement_entity/entityfields/webtrackingtags/children/webtrackingurl/valueProcess.js create mode 100644 entity/LinkManagement_entity/recordcontainers/db/conditionProcess.js create mode 100644 entity/LinkManagement_entity/recordcontainers/db/orderClauseProcess.js create mode 100644 entity/LinkManagement_entity/recordcontainers/db/recordfieldmappings/tags.value/expression.js create mode 100644 entity/LinkManagement_entity/recordcontainers/db/recordfieldmappings/urltype.displayvalue/expression.js create mode 100644 entity/WebtrackingTag_entity/WebtrackingTag_entity.aod create mode 100644 entity/WebtrackingTag_entity/entityfields/date_edit/valueProcess.js create mode 100644 entity/WebtrackingTag_entity/entityfields/date_new/valueProcess.js create mode 100644 entity/WebtrackingTag_entity/entityfields/keywordwebtrackingtag/children/containername_param/valueProcess.js create mode 100644 entity/WebtrackingTag_entity/entityfields/keywordwebtrackingtag/children/excludedkeyidssubquery_param/valueProcess.js create mode 100644 entity/WebtrackingTag_entity/entityfields/tag/displayValueProcess.js create mode 100644 entity/WebtrackingTag_entity/entityfields/user_edit/valueProcess.js create mode 100644 entity/WebtrackingTag_entity/entityfields/user_new/valueProcess.js create mode 100644 entity/WebtrackingTag_entity/entityfields/webtrackingpagelocation/valueProcess.js create mode 100644 entity/WebtrackingTag_entity/entityfields/webtrackingtagid/valueProcess.js create mode 100644 entity/WebtrackingTag_entity/grantUpdateProcess.js create mode 100644 entity/WebtrackingTag_entity/onInit.js create mode 100644 entity/WebtrackingTag_entity/recordcontainers/db/conditionProcess.js create mode 100644 neonContext/LinkManagement/LinkManagement.aod create mode 100644 neonContext/WebtrackingTag/WebtrackingTag.aod create mode 100644 neonView/LinkManagementDrawer_view/LinkManagementDrawer_view.aod create mode 100644 neonView/LinkManagementEdit_view/LinkManagementEdit_view.aod create mode 100644 neonView/LinkManagementFilter_view/LinkManagementFilter_view.aod create mode 100644 neonView/LinkManagementMain_view/LinkManagementMain_view.aod create mode 100644 neonView/LinkManagementPreview_view/LinkManagementPreview_view.aod create mode 100644 neonView/WebtrackingTagEdit_view/WebtrackingTagEdit_view.aod create mode 100644 neonView/WebtrackingTagFilter_view/WebtrackingTagFilter_view.aod create mode 100644 neonView/WebtrackingTagMultiEdit_view/WebtrackingTagMultiEdit_view.aod diff --git a/.liquibase/Data_alias/basic/2021.0.2/LinkManagement/CreateLinkManagement.xml b/.liquibase/Data_alias/basic/2021.0.2/LinkManagement/CreateLinkManagement.xml new file mode 100644 index 0000000000..078ad765e2 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.2/LinkManagement/CreateLinkManagement.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="m.groppe" id="1e4d2e89-646c-479b-97a9-d105878de4ae"> + <createTable tableName="LINKMANAGEMENT"> + <column name="LINKMANAGEMENTID" type="CHAR(36)"> + <constraints primaryKey="true" primaryKeyName="PK_OBSERVATION_OBSERVATIONID"/> + </column> + <column name="URL" type="VARCHAR(512)"/> + <column name="URLTYPE" 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"/> + </createTable> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.2/LinkManagement/CreateWebtrackingtags.xml b/.liquibase/Data_alias/basic/2021.0.2/LinkManagement/CreateWebtrackingtags.xml new file mode 100644 index 0000000000..9ad5f64f3f --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.2/LinkManagement/CreateWebtrackingtags.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="WEBTRACKINGTAGS"> + <column name="WEBTRACKINGTAGSID" type="CHAR(36)"> + <constraints primaryKey="true" primaryKeyName="PK_WEBTRACKINGTAGS_WEBTRACKINGTAGSID"/> + </column> + <column name="WEBTRACKINGPAGELOCATION" type="VARCHAR(512)"/> + <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.2/LinkManagement/addLinkManagementKeywords.xml b/.liquibase/Data_alias/basic/2021.0.2/LinkManagement/addLinkManagementKeywords.xml new file mode 100644 index 0000000000..6dd23b638d --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.2/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="f60cafea-1e4d-4778-b09c-5ae5aaaaa587"> + + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="05eab0ac-3b1f-43ac-95f4-68659d98f569"/> + <column name="NAME" value="WebTrackingTags"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="5adb741d-50f7-4982-a99f-8489f8244d54"/> + <column name="KEYID" value="SALES"/> + <column name="TITLE" value="Sales"/> + <column name="CONTAINER" value="WebTrackingTags"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="05eab0ac-3b1f-43ac-95f4-68659d98f569"/> + <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="a2123f48-1dd2-4ad5-a208-1c010f4168e7"/> + <column name="KEYID" value="MARKETING"/> + <column name="TITLE" value="Marketing"/> + <column name="CONTAINER" value="WebTrackingTags"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="05eab0ac-3b1f-43ac-95f4-68659d98f569"/> + <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="c1283846-824f-47af-bf5c-0b171cb972f8"/> + <column name="KEYID" value="SERVICE"/> + <column name="TITLE" value="Service"/> + <column name="CONTAINER" value="WebTrackingTags"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="05eab0ac-3b1f-43ac-95f4-68659d98f569"/> + <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="69bf8fd0-8f1d-43f2-ba84-1c1e3df3aa7e"/> + <column name="KEYID" value="TRADE"/> + <column name="TITLE" value="Trade"/> + <column name="CONTAINER" value="WebTrackingTags"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="05eab0ac-3b1f-43ac-95f4-68659d98f569"/> + <column name="SORTING" valueNumeric="3"/> + <column name="ISACTIVE" valueNumeric="1"/> + <column name="ISESSENTIAL" valueNumeric="1"/> + </insert> + </changeSet> + + <changeSet id="1abfb39f-4fed-49f4-b691-ae7ddda365ca" author="m.groppe"> + + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="36d8e08d-d4a4-4cf5-b99a-398b89d15bc9"/> + <column name="NAME" value="LinkManagementUrlType"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="9b9b5f6d-fd17-4180-b41c-ec3edbb3ddbe"/> + <column name="KEYID" value="EMAIL"/> + <column name="TITLE" value="E-Mail"/> + <column name="CONTAINER" value="LinkManagementUrlType"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="36d8e08d-d4a4-4cf5-b99a-398b89d15bc9"/> + <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.2/LinkManagement/changelog.xml b/.liquibase/Data_alias/basic/2021.0.2/LinkManagement/changelog.xml new file mode 100644 index 0000000000..d10048e112 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.2/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="CreateLinkManagement.xml" relativeToChangelogFile="true"/> + <include file="CreateWebtrackingtags.xml" relativeToChangelogFile="true"/> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.2/changelog.xml b/.liquibase/Data_alias/basic/2021.0.2/changelog.xml index ec78d188e0..d1646df6c5 100644 --- a/.liquibase/Data_alias/basic/2021.0.2/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.0.2/changelog.xml @@ -2,4 +2,5 @@ <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="Event/changelog.xml"/> +<include relativeToChangelogFile="true" file="LinkManagement/changelog.xml"/> </databaseChangeLog> \ No newline at end of file diff --git a/entity/KeywordEntry_entity/KeywordEntry_entity.aod b/entity/KeywordEntry_entity/KeywordEntry_entity.aod index e5bfe7c1b2..ebf6a659d5 100644 --- a/entity/KeywordEntry_entity/KeywordEntry_entity.aod +++ b/entity/KeywordEntry_entity/KeywordEntry_entity.aod @@ -637,6 +637,12 @@ <fieldName>KeywordPhases</fieldName> <isConsumer v="false" /> </entityDependency> + <entityDependency> + <name>98608b12-9927-4197-adfe-1398a388bcb0</name> + <entityName>WebtrackingTag_entity</entityName> + <fieldName>KeywordWebtrackingTag</fieldName> + <isConsumer v="false" /> + </entityDependency> </dependencies> <children> <entityParameter> diff --git a/entity/LinkManagement_entity/LinkManagement_entity.aod b/entity/LinkManagement_entity/LinkManagement_entity.aod new file mode 100644 index 0000000000..924b6bd101 --- /dev/null +++ b/entity/LinkManagement_entity/LinkManagement_entity.aod @@ -0,0 +1,156 @@ +<?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>LinkManagement_entity</name> + <title>Weblink</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <contentTitleProcess>%aditoprj%/entity/LinkManagement_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/LinkManagement_entity/entityfields/url/stateProcess.js</stateProcess> + <onValidation>%aditoprj%/entity/LinkManagement_entity/entityfields/url/onValidation.js</onValidation> + </entityField> + <entityField> + <name>LINKMANAGEMENTID</name> + <valueProcess>%aditoprj%/entity/LinkManagement_entity/entityfields/linkmanagementid/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>DATE_NEW</name> + <valueProcess>%aditoprj%/entity/LinkManagement_entity/entityfields/date_new/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>USER_NEW</name> + <valueProcess>%aditoprj%/entity/LinkManagement_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>Punktzahl</title> + <contentType>NUMBER</contentType> + <outputFormat>#' Punkte'</outputFormat> + <valueProcess>%aditoprj%/entity/LinkManagement_entity/entityfields/score/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>URLTYPE</name> + <title>Url Typ</title> + <consumer>KeywordUrlType</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>WebtrackingTag_entity</entityName> + <fieldName>Tags</fieldName> + </dependency> + <children> + <entityParameter> + <name>WebtrackingURL</name> + <valueProcess>%aditoprj%/entity/LinkManagement_entity/entityfields/webtrackingtags/children/webtrackingurl/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityConsumer> + <name>KeywordUrlType</name> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/LinkManagement_entity/entityfields/keywordurltype/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityField> + <name>URLTYPE_ICON</name> + <contentType>IMAGE</contentType> + <valueProcess>%aditoprj%/entity/LinkManagement_entity/entityfields/urltype_icon/valueProcess.js</valueProcess> + </entityField> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + </entityFields> + <recordContainers> + <dbRecordContainer> + <name>db</name> + <conditionProcess>%aditoprj%/entity/LinkManagement_entity/recordcontainers/db/conditionProcess.js</conditionProcess> + <orderClauseProcess>%aditoprj%/entity/LinkManagement_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess> + <alias>Data_alias</alias> + <recordFieldMappings> + <dbRecordFieldMapping> + <name>DATE_EDIT.value</name> + <recordfield>LINKMANAGEMENT.DATE_EDIT</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DATE_NEW.value</name> + <recordfield>LINKMANAGEMENT.DATE_NEW</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>LINKMANAGEMENTID.value</name> + <recordfield>LINKMANAGEMENT.LINKMANAGEMENTID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>SCORE.value</name> + <recordfield>LINKMANAGEMENT.SCORE</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>URL.value</name> + <recordfield>LINKMANAGEMENT.URL</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>URLTYPE.value</name> + <recordfield>LINKMANAGEMENT.URLTYPE</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>USER_EDIT.value</name> + <recordfield>LINKMANAGEMENT.USER_EDIT</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>USER_NEW.value</name> + <recordfield>LINKMANAGEMENT.USER_NEW</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>Tags.value</name> + <expression>%aditoprj%/entity/LinkManagement_entity/recordcontainers/db/recordfieldmappings/tags.value/expression.js</expression> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>URLTYPE.displayValue</name> + <expression>%aditoprj%/entity/LinkManagement_entity/recordcontainers/db/recordfieldmappings/urltype.displayvalue/expression.js</expression> + </dbRecordFieldMapping> + </recordFieldMappings> + <linkInformation> + <linkInformation> + <name>e778479c-0a94-4ea7-91dd-e8276cbffb41</name> + <tableName>LINKMANAGEMENT</tableName> + <primaryKey>LINKMANAGEMENTID</primaryKey> + <isUIDTable v="true" /> + <readonly v="false" /> + </linkInformation> + </linkInformation> + </dbRecordContainer> + </recordContainers> +</entity> diff --git a/entity/LinkManagement_entity/contentTitleProcess.js b/entity/LinkManagement_entity/contentTitleProcess.js new file mode 100644 index 0000000000..532ae9cda8 --- /dev/null +++ b/entity/LinkManagement_entity/contentTitleProcess.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("system.result"); + +result.string(vars.get("$field.URL")); \ No newline at end of file diff --git a/entity/LinkManagement_entity/entityfields/date_new/valueProcess.js b/entity/LinkManagement_entity/entityfields/date_new/valueProcess.js new file mode 100644 index 0000000000..83de1a18d6 --- /dev/null +++ b/entity/LinkManagement_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/LinkManagement_entity/entityfields/keywordurltype/children/containername_param/valueProcess.js b/entity/LinkManagement_entity/entityfields/keywordurltype/children/containername_param/valueProcess.js new file mode 100644 index 0000000000..888ead5b70 --- /dev/null +++ b/entity/LinkManagement_entity/entityfields/keywordurltype/children/containername_param/valueProcess.js @@ -0,0 +1,2 @@ +import("system.result"); +result.string("LinkManagementUrlType"); \ No newline at end of file diff --git a/entity/LinkManagement_entity/entityfields/linkmanagementid/valueProcess.js b/entity/LinkManagement_entity/entityfields/linkmanagementid/valueProcess.js new file mode 100644 index 0000000000..10b4a4579d --- /dev/null +++ b/entity/LinkManagement_entity/entityfields/linkmanagementid/valueProcess.js @@ -0,0 +1,7 @@ +import("system.result"); +import("system.neon"); +import("system.vars"); +import("system.util"); + +if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW) + result.string(util.getNewUUID()); \ No newline at end of file diff --git a/entity/LinkManagement_entity/entityfields/score/valueProcess.js b/entity/LinkManagement_entity/entityfields/score/valueProcess.js new file mode 100644 index 0000000000..73553d1782 --- /dev/null +++ b/entity/LinkManagement_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/LinkManagement_entity/entityfields/url/onValidation.js b/entity/LinkManagement_entity/entityfields/url/onValidation.js new file mode 100644 index 0000000000..640c6f4cb8 --- /dev/null +++ b/entity/LinkManagement_entity/entityfields/url/onValidation.js @@ -0,0 +1,11 @@ +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("LINKMANAGEMENT").where("LINKMANAGEMENT.URL", vars.get("$local.value")).cell()) + result.string(translate.text("Die Url muss eindeutig sein!")) +} \ No newline at end of file diff --git a/entity/LinkManagement_entity/entityfields/url/stateProcess.js b/entity/LinkManagement_entity/entityfields/url/stateProcess.js new file mode 100644 index 0000000000..bf56cc956c --- /dev/null +++ b/entity/LinkManagement_entity/entityfields/url/stateProcess.js @@ -0,0 +1,8 @@ +import("system.neon"); +import("system.result"); +import("system.vars"); + +if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW) + result.string(neon.COMPONENTSTATE_EDITABLE) +else + result.string(neon.COMPONENTSTATE_READONLY) \ No newline at end of file diff --git a/entity/LinkManagement_entity/entityfields/urltype_icon/valueProcess.js b/entity/LinkManagement_entity/entityfields/urltype_icon/valueProcess.js new file mode 100644 index 0000000000..ff459e58e9 --- /dev/null +++ b/entity/LinkManagement_entity/entityfields/urltype_icon/valueProcess.js @@ -0,0 +1,11 @@ +import("system.result"); +import("system.vars"); + +var res = "" +if(vars.get("$field.URLTYPE") == 1)//leadforensics + res = "NEON:IMPORT" + +if(vars.get("$field.URLTYPE")=="EMAIL") + res = "VAADIN:MAILBOX" + +result.string(res); \ No newline at end of file diff --git a/entity/LinkManagement_entity/entityfields/user_new/valueProcess.js b/entity/LinkManagement_entity/entityfields/user_new/valueProcess.js new file mode 100644 index 0000000000..b9c2b5e127 --- /dev/null +++ b/entity/LinkManagement_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/LinkManagement_entity/entityfields/webtrackingtags/children/webtrackingurl/valueProcess.js b/entity/LinkManagement_entity/entityfields/webtrackingtags/children/webtrackingurl/valueProcess.js new file mode 100644 index 0000000000..da859efa8c --- /dev/null +++ b/entity/LinkManagement_entity/entityfields/webtrackingtags/children/webtrackingurl/valueProcess.js @@ -0,0 +1,3 @@ +import("system.vars"); +import("system.result"); +result.string(vars.get("$field.URL")); \ No newline at end of file diff --git a/entity/LinkManagement_entity/recordcontainers/db/conditionProcess.js b/entity/LinkManagement_entity/recordcontainers/db/conditionProcess.js new file mode 100644 index 0000000000..8c1d7a1352 --- /dev/null +++ b/entity/LinkManagement_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/LinkManagement_entity/recordcontainers/db/orderClauseProcess.js b/entity/LinkManagement_entity/recordcontainers/db/orderClauseProcess.js new file mode 100644 index 0000000000..bf39eb8458 --- /dev/null +++ b/entity/LinkManagement_entity/recordcontainers/db/orderClauseProcess.js @@ -0,0 +1,5 @@ +import("system.result"); +import("system.db"); +result.object({ + "LINKMANAGEMENT.URL": db.ASCENDING +}); \ No newline at end of file diff --git a/entity/LinkManagement_entity/recordcontainers/db/recordfieldmappings/tags.value/expression.js b/entity/LinkManagement_entity/recordcontainers/db/recordfieldmappings/tags.value/expression.js new file mode 100644 index 0000000000..374f17cc9a --- /dev/null +++ b/entity/LinkManagement_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 WEBTRACKINGTAGS on " ++" KEYID = WEBTRACKINGTAGS.TAG where WEBTRACKINGTAGS.WEBTRACKINGPAGELOCATION = URL and CONTAINER = 'WebTrackingTags')"); \ No newline at end of file diff --git a/entity/LinkManagement_entity/recordcontainers/db/recordfieldmappings/urltype.displayvalue/expression.js b/entity/LinkManagement_entity/recordcontainers/db/recordfieldmappings/urltype.displayvalue/expression.js new file mode 100644 index 0000000000..c0cb7ca686 --- /dev/null +++ b/entity/LinkManagement_entity/recordcontainers/db/recordfieldmappings/urltype.displayvalue/expression.js @@ -0,0 +1,3 @@ +import("system.result"); +import("Keyword_lib"); +result.string(KeywordUtils.getResolvedTitleSqlPart("LinkManagementUrlType", "LINKMANAGEMENT.URLTYPE")); \ No newline at end of file diff --git a/entity/WebtrackingTag_entity/WebtrackingTag_entity.aod b/entity/WebtrackingTag_entity/WebtrackingTag_entity.aod new file mode 100644 index 0000000000..aa349ead05 --- /dev/null +++ b/entity/WebtrackingTag_entity/WebtrackingTag_entity.aod @@ -0,0 +1,130 @@ +<?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>WebtrackingTag_entity</name> + <title>Tag</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <grantUpdate v="false" /> + <grantUpdateProcess>%aditoprj%/entity/WebtrackingTag_entity/grantUpdateProcess.js</grantUpdateProcess> + <onInit>%aditoprj%/entity/WebtrackingTag_entity/onInit.js</onInit> + <titlePlural>Tags</titlePlural> + <recordContainer>db</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + </entityProvider> + <entityConsumer> + <name>KeywordWebtrackingTag</name> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/WebtrackingTag_entity/entityfields/keywordwebtrackingtag/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + <entityParameter> + <name>ExcludedKeyIdsSubquery_param</name> + <valueProcess>%aditoprj%/entity/WebtrackingTag_entity/entityfields/keywordwebtrackingtag/children/excludedkeyidssubquery_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityProvider> + <name>Tags</name> + <dependencies> + <entityDependency> + <name>4677d007-6467-4bc4-80ec-8230ee68d203</name> + <entityName>LinkManagement_entity</entityName> + <fieldName>WebtrackingTags</fieldName> + <isConsumer v="false" /> + </entityDependency> + </dependencies> + </entityProvider> + <entityParameter> + <name>WebtrackingURL</name> + <expose v="true" /> + </entityParameter> + <entityField> + <name>TAG</name> + <title>Tag</title> + <consumer>KeywordWebtrackingTag</consumer> + <displayValueProcess>%aditoprj%/entity/WebtrackingTag_entity/entityfields/tag/displayValueProcess.js</displayValueProcess> + </entityField> + <entityField> + <name>WEBTRACKINGTAGID</name> + <valueProcess>%aditoprj%/entity/WebtrackingTag_entity/entityfields/webtrackingtagid/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>WEBTRACKINGPAGELOCATION</name> + <title>Url</title> + <valueProcess>%aditoprj%/entity/WebtrackingTag_entity/entityfields/webtrackingpagelocation/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>DATE_NEW</name> + <valueProcess>%aditoprj%/entity/WebtrackingTag_entity/entityfields/date_new/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>DATE_EDIT</name> + <valueProcess>%aditoprj%/entity/WebtrackingTag_entity/entityfields/date_edit/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>USER_NEW</name> + <valueProcess>%aditoprj%/entity/WebtrackingTag_entity/entityfields/user_new/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>USER_EDIT</name> + <valueProcess>%aditoprj%/entity/WebtrackingTag_entity/entityfields/user_edit/valueProcess.js</valueProcess> + </entityField> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + </entityFields> + <recordContainers> + <dbRecordContainer> + <name>db</name> + <conditionProcess>%aditoprj%/entity/WebtrackingTag_entity/recordcontainers/db/conditionProcess.js</conditionProcess> + <alias>Data_alias</alias> + <recordFieldMappings> + <dbRecordFieldMapping> + <name>WEBTRACKINGTAGID.value</name> + <recordfield>WEBTRACKINGTAGS.WEBTRACKINGTAGSID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>TAG.value</name> + <recordfield>WEBTRACKINGTAGS.TAG</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>WEBTRACKINGPAGELOCATION.value</name> + <recordfield>WEBTRACKINGTAGS.WEBTRACKINGPAGELOCATION</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DATE_EDIT.value</name> + <recordfield>WEBTRACKINGTAGS.DATE_EDIT</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DATE_NEW.value</name> + <recordfield>WEBTRACKINGTAGS.DATE_NEW</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>USER_EDIT.value</name> + <recordfield>WEBTRACKINGTAGS.USER_EDIT</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>USER_NEW.value</name> + <recordfield>WEBTRACKINGTAGS.USER_NEW</recordfield> + </dbRecordFieldMapping> + </recordFieldMappings> + <linkInformation> + <linkInformation> + <name>1fcf7161-9c1d-44f8-938f-bfcfa98cac30</name> + <tableName>WEBTRACKINGTAGS</tableName> + <primaryKey>WEBTRACKINGTAGSID</primaryKey> + <isUIDTable v="true" /> + <readonly v="false" /> + </linkInformation> + </linkInformation> + </dbRecordContainer> + </recordContainers> +</entity> diff --git a/entity/WebtrackingTag_entity/entityfields/date_edit/valueProcess.js b/entity/WebtrackingTag_entity/entityfields/date_edit/valueProcess.js new file mode 100644 index 0000000000..daf59b91c5 --- /dev/null +++ b/entity/WebtrackingTag_entity/entityfields/date_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.date")); \ No newline at end of file diff --git a/entity/WebtrackingTag_entity/entityfields/date_new/valueProcess.js b/entity/WebtrackingTag_entity/entityfields/date_new/valueProcess.js new file mode 100644 index 0000000000..fe44d4d71b --- /dev/null +++ b/entity/WebtrackingTag_entity/entityfields/date_new/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_NEW) + result.string(vars.get("$sys.date")); \ No newline at end of file diff --git a/entity/WebtrackingTag_entity/entityfields/keywordwebtrackingtag/children/containername_param/valueProcess.js b/entity/WebtrackingTag_entity/entityfields/keywordwebtrackingtag/children/containername_param/valueProcess.js new file mode 100644 index 0000000000..1f593b73c1 --- /dev/null +++ b/entity/WebtrackingTag_entity/entityfields/keywordwebtrackingtag/children/containername_param/valueProcess.js @@ -0,0 +1,2 @@ +import("system.result"); +result.string("WebTrackingTags") \ No newline at end of file diff --git a/entity/WebtrackingTag_entity/entityfields/keywordwebtrackingtag/children/excludedkeyidssubquery_param/valueProcess.js b/entity/WebtrackingTag_entity/entityfields/keywordwebtrackingtag/children/excludedkeyidssubquery_param/valueProcess.js new file mode 100644 index 0000000000..132076e768 --- /dev/null +++ b/entity/WebtrackingTag_entity/entityfields/keywordwebtrackingtag/children/excludedkeyidssubquery_param/valueProcess.js @@ -0,0 +1,10 @@ +import("system.logging"); +import("system.result"); +import("system.vars"); +import("Sql_lib"); + +logging.log(vars.get("$param.WebtrackingURL")); +var res = newSelect("TAG").from("WEBTRACKINGTAGS").where("WEBTRACKINGTAGS.WEBTRACKINGPAGELOCATION", vars.get("$param.WebtrackingURL")).arrayColumn() +logging.log("res "+JSON.stringify(res)); +if(res.length > 0) + result.string("'"+res.join("', '")+"'") \ No newline at end of file diff --git a/entity/WebtrackingTag_entity/entityfields/tag/displayValueProcess.js b/entity/WebtrackingTag_entity/entityfields/tag/displayValueProcess.js new file mode 100644 index 0000000000..d0389abd9d --- /dev/null +++ b/entity/WebtrackingTag_entity/entityfields/tag/displayValueProcess.js @@ -0,0 +1,8 @@ +import("system.logging"); +import("system.vars"); +import("Keyword_lib"); +import("system.result"); + +logging.log(vars.get("$field.TAG")); +logging.log(KeywordUtils.getViewValue('WebTrackingTags', vars.get("$field.TAG"))); +result.string(KeywordUtils.getViewValue('WebTrackingTags', vars.get("$field.TAG"))) \ No newline at end of file diff --git a/entity/WebtrackingTag_entity/entityfields/user_edit/valueProcess.js b/entity/WebtrackingTag_entity/entityfields/user_edit/valueProcess.js new file mode 100644 index 0000000000..3ba15fa737 --- /dev/null +++ b/entity/WebtrackingTag_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/WebtrackingTag_entity/entityfields/user_new/valueProcess.js b/entity/WebtrackingTag_entity/entityfields/user_new/valueProcess.js new file mode 100644 index 0000000000..ee55f943ae --- /dev/null +++ b/entity/WebtrackingTag_entity/entityfields/user_new/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_NEW) + result.string(vars.get("$sys.user")); \ No newline at end of file diff --git a/entity/WebtrackingTag_entity/entityfields/webtrackingpagelocation/valueProcess.js b/entity/WebtrackingTag_entity/entityfields/webtrackingpagelocation/valueProcess.js new file mode 100644 index 0000000000..34581950e3 --- /dev/null +++ b/entity/WebtrackingTag_entity/entityfields/webtrackingpagelocation/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.WebtrackingURL")) \ No newline at end of file diff --git a/entity/WebtrackingTag_entity/entityfields/webtrackingtagid/valueProcess.js b/entity/WebtrackingTag_entity/entityfields/webtrackingtagid/valueProcess.js new file mode 100644 index 0000000000..08b0f362f9 --- /dev/null +++ b/entity/WebtrackingTag_entity/entityfields/webtrackingtagid/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(util.getNewUUID()); \ No newline at end of file diff --git a/entity/WebtrackingTag_entity/grantUpdateProcess.js b/entity/WebtrackingTag_entity/grantUpdateProcess.js new file mode 100644 index 0000000000..017ae16109 --- /dev/null +++ b/entity/WebtrackingTag_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/WebtrackingTag_entity/onInit.js b/entity/WebtrackingTag_entity/onInit.js new file mode 100644 index 0000000000..e271580656 --- /dev/null +++ b/entity/WebtrackingTag_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/WebtrackingTag_entity/recordcontainers/db/conditionProcess.js b/entity/WebtrackingTag_entity/recordcontainers/db/conditionProcess.js new file mode 100644 index 0000000000..6b22aeeae8 --- /dev/null +++ b/entity/WebtrackingTag_entity/recordcontainers/db/conditionProcess.js @@ -0,0 +1,12 @@ +import("system.vars"); +import("Sql_lib"); +import("system.result"); + + + +var cond = newWhere(); + +if(vars.get("$param.WebtrackingURL")) + cond.and("webtrackingtags.WEBTRACKINGPAGELOCATION", vars.get("$param.WebtrackingURL")) + +result.string(cond.toString()) \ No newline at end of file diff --git a/neonContext/LinkManagement/LinkManagement.aod b/neonContext/LinkManagement/LinkManagement.aod new file mode 100644 index 0000000000..c64ca676a9 --- /dev/null +++ b/neonContext/LinkManagement/LinkManagement.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>LinkManagement</name> + <title>Linkmanagement</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <icon>NEON:FILTER</icon> + <mainView>LinkManagementMain_view</mainView> + <filterView>LinkManagementFilter_view</filterView> + <editView>LinkManagementEdit_view</editView> + <previewView>LinkManagementPreview_view</previewView> + <entity>LinkManagement_entity</entity> + <references> + <neonViewReference> + <name>1214292b-2504-4f83-97ba-507074a92342</name> + <view>LinkManagementFilter_view</view> + </neonViewReference> + <neonViewReference> + <name>26c15847-68bf-4ae1-80c6-bf4aebe02d3c</name> + <view>LinkManagementEdit_view</view> + </neonViewReference> + <neonViewReference> + <name>f5fd5e04-74a1-4c25-8237-9d6dcdc801f5</name> + <view>LinkManagementMain_view</view> + </neonViewReference> + <neonViewReference> + <name>466496bf-b703-4e94-be8c-33100a5516c6</name> + <view>LinkManagementPreview_view</view> + </neonViewReference> + <neonViewReference> + <name>e1de7061-bc31-4dfb-bc5e-2e75db1c52ea</name> + <view>LinkManagementDrawer_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonContext/WebtrackingTag/WebtrackingTag.aod b/neonContext/WebtrackingTag/WebtrackingTag.aod new file mode 100644 index 0000000000..8de3d93c78 --- /dev/null +++ b/neonContext/WebtrackingTag/WebtrackingTag.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>WebtrackingTag</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterView>WebtrackingTagFilter_view</filterView> + <editView>WebtrackingTagEdit_view</editView> + <entity>WebtrackingTag_entity</entity> + <references> + <neonViewReference> + <name>c4a7ba88-dd7e-4471-ae17-450602216475</name> + <view>WebtrackingTagFilter_view</view> + </neonViewReference> + <neonViewReference> + <name>51e9185c-cd69-483e-b618-fbb27cf8912b</name> + <view>WebtrackingTagEdit_view</view> + </neonViewReference> + <neonViewReference> + <name>77247264-cea7-4fb3-8f94-d172213faac8</name> + <view>WebtrackingTagMultiEdit_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonView/LinkManagementDrawer_view/LinkManagementDrawer_view.aod b/neonView/LinkManagementDrawer_view/LinkManagementDrawer_view.aod new file mode 100644 index 0000000000..c4f3217047 --- /dev/null +++ b/neonView/LinkManagementDrawer_view/LinkManagementDrawer_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>LinkManagementDrawer_view</name> + <title>Weitere Informationen</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <boxLayout> + <name>layout</name> + </boxLayout> + </layout> + <children> + <neonViewReference> + <name>92f84737-e546-4f97-842b-38f3a210e294</name> + <entityField>WebtrackingTags</entityField> + <view>WebtrackingTagFilter_view</view> + </neonViewReference> + </children> +</neonView> diff --git a/neonView/LinkManagementEdit_view/LinkManagementEdit_view.aod b/neonView/LinkManagementEdit_view/LinkManagementEdit_view.aod new file mode 100644 index 0000000000..ce0c020931 --- /dev/null +++ b/neonView/LinkManagementEdit_view/LinkManagementEdit_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>LinkManagementEdit_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>ed09db8d-2caa-45e6-9c0c-16313164e4f5</name> + <entityField>URLTYPE</entityField> + </entityFieldLink> + <entityFieldLink> + <name>836aafd9-a8c3-4a7c-9b2c-260ec8bbee45</name> + <entityField>SCORE</entityField> + </entityFieldLink> + </fields> + </genericViewTemplate> + <neonViewReference> + <name>0f6d1fc5-fbd9-443e-84a3-ffba18c3443a</name> + <entityField>WebtrackingTags</entityField> + <view>WebtrackingTagMultiEdit_view</view> + </neonViewReference> + </children> +</neonView> diff --git a/neonView/LinkManagementFilter_view/LinkManagementFilter_view.aod b/neonView/LinkManagementFilter_view/LinkManagementFilter_view.aod new file mode 100644 index 0000000000..873cc5fca6 --- /dev/null +++ b/neonView/LinkManagementFilter_view/LinkManagementFilter_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>LinkManagementFilter_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>0047de4c-d8bb-4e1a-b820-24d6f43802a4</name> + <entityField>URLTYPE</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/LinkManagementMain_view/LinkManagementMain_view.aod b/neonView/LinkManagementMain_view/LinkManagementMain_view.aod new file mode 100644 index 0000000000..c6d4150de6 --- /dev/null +++ b/neonView/LinkManagementMain_view/LinkManagementMain_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>LinkManagementMain_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>LinkManagementPreview_view</view> + </neonViewReference> + <neonViewReference> + <name>4318f521-5462-4767-bd9b-6966cf2e4734</name> + <entityField>#ENTITY</entityField> + <view>LinkManagementDrawer_view</view> + </neonViewReference> + </children> +</neonView> diff --git a/neonView/LinkManagementPreview_view/LinkManagementPreview_view.aod b/neonView/LinkManagementPreview_view/LinkManagementPreview_view.aod new file mode 100644 index 0000000000..6ecad9b3c9 --- /dev/null +++ b/neonView/LinkManagementPreview_view/LinkManagementPreview_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>LinkManagementPreview_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <headerFooterLayout> + <name>layout</name> + <header>card</header> + </headerFooterLayout> + </layout> + <children> + <cardViewTemplate> + <name>card</name> + <iconField>URLTYPE_ICON</iconField> + <titleField>URL</titleField> + <subtitleField>URLTYPE</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> + </fields> + </genericViewTemplate> + </children> +</neonView> diff --git a/neonView/WebtrackingTagEdit_view/WebtrackingTagEdit_view.aod b/neonView/WebtrackingTagEdit_view/WebtrackingTagEdit_view.aod new file mode 100644 index 0000000000..9ef25e3c6b --- /dev/null +++ b/neonView/WebtrackingTagEdit_view/WebtrackingTagEdit_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>WebtrackingTagEdit_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/WebtrackingTagFilter_view/WebtrackingTagFilter_view.aod b/neonView/WebtrackingTagFilter_view/WebtrackingTagFilter_view.aod new file mode 100644 index 0000000000..a3342d33d6 --- /dev/null +++ b/neonView/WebtrackingTagFilter_view/WebtrackingTagFilter_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>WebtrackingTagFilter_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/WebtrackingTagMultiEdit_view/WebtrackingTagMultiEdit_view.aod b/neonView/WebtrackingTagMultiEdit_view/WebtrackingTagMultiEdit_view.aod new file mode 100644 index 0000000000..ffbcb930a3 --- /dev/null +++ b/neonView/WebtrackingTagMultiEdit_view/WebtrackingTagMultiEdit_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>WebtrackingTagMultiEdit_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <boxLayout> + <name>layout</name> + </boxLayout> + </layout> + <children> + <genericMultipleViewTemplate> + <name>genericMultiple</name> + <columns> + <neonGenericMultipleTableColumn> + <name>6053ac7f-0c00-415b-9c40-32fd6b783792</name> + <entityField>TAG</entityField> + <fullWidth v="true" /> + </neonGenericMultipleTableColumn> + </columns> + </genericMultipleViewTemplate> + </children> +</neonView> -- GitLab From c5e8e40571b227c89fadf02d815bcf43f8dd4f29 Mon Sep 17 00:00:00 2001 From: "m.groppe" <m.groppe@adito.de> Date: Mon, 8 Mar 2021 15:26:09 +0100 Subject: [PATCH 003/242] =?UTF-8?q?[Projekt:=20xRM-Marketing][TicketNr.:?= =?UTF-8?q?=201075114][BULKMAIL:=20Erweiterung=20f=C3=BCr=20"geplanter=20V?= =?UTF-8?q?ersand"]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2021.0.2/Bulkmail/AddBulkmailStatus.xml | 27 ++++++++++++++++ .../basic/2021.0.2/Bulkmail/AlterBulkmail.xml | 8 +++++ .../basic/2021.0.2/Bulkmail/changelog.xml | 6 ++++ .../Data_alias/basic/2021.0.2/changelog.xml | 1 + aliasDefinition/Data_alias/Data_alias.aod | 22 ++++++++++--- entity/BulkMail_entity/BulkMail_entity.aod | 12 +++++++ .../entityfields/date_to_send/onValidation.js | 7 +++++ .../entityfields/date_to_send/stateProcess.js | 17 ++++++++++ .../BulkMailPreview_view.aod | 4 +++ .../_____PREFERENCES_PROJECT.aod | 5 +++ process/Bulkmail_lib/process.js | 1 - process/KeywordRegistry_basic/process.js | 2 ++ .../sendBulkMail_serverProcess.aod | 1 + .../process.js | 31 +++++++++++++++++++ .../sendPlannedBulkmails_serverProcess.aod | 10 ++++++ 15 files changed, 149 insertions(+), 5 deletions(-) create mode 100644 .liquibase/Data_alias/basic/2021.0.2/Bulkmail/AddBulkmailStatus.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.2/Bulkmail/AlterBulkmail.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.2/Bulkmail/changelog.xml create mode 100644 entity/BulkMail_entity/entityfields/date_to_send/onValidation.js create mode 100644 entity/BulkMail_entity/entityfields/date_to_send/stateProcess.js create mode 100644 process/sendPlannedBulkmails_serverProcess/process.js create mode 100644 process/sendPlannedBulkmails_serverProcess/sendPlannedBulkmails_serverProcess.aod diff --git a/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/AddBulkmailStatus.xml b/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/AddBulkmailStatus.xml new file mode 100644 index 0000000000..4b54ddabd2 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/AddBulkmailStatus.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 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> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/AlterBulkmail.xml b/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/AlterBulkmail.xml new file mode 100644 index 0000000000..80b392486e --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.2/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="96816f54-3067-470d-b698-dc7ad7685d84"> + <addColumn tableName="BULKMAIL"> + <column name="DATE_TO_SEND" type="DATETIME"/> + </addColumn> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/changelog.xml b/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/changelog.xml new file mode 100644 index 0000000000..c099a3bb64 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/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="AlterBulkmail.xml"/> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.2/changelog.xml b/.liquibase/Data_alias/basic/2021.0.2/changelog.xml index ec78d188e0..8ed4db7b73 100644 --- a/.liquibase/Data_alias/basic/2021.0.2/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.0.2/changelog.xml @@ -2,4 +2,5 @@ <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="Event/changelog.xml"/> +<include relativeToChangelogFile="true" file="Bulkmail/changelog.xml"/> </databaseChangeLog> \ No newline at end of file diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod index c4ab229cfe..c4dc61e05f 100644 --- a/aliasDefinition/Data_alias/Data_alias.aod +++ b/aliasDefinition/Data_alias/Data_alias.aod @@ -10483,8 +10483,8 @@ <name>CREATEACTIVITIES</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" /> @@ -10525,8 +10525,22 @@ <name>USE_TEMPLATE_ATTACHMENTS</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" /> + <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="19" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> diff --git a/entity/BulkMail_entity/BulkMail_entity.aod b/entity/BulkMail_entity/BulkMail_entity.aod index 3b728ee07f..80b5c06e91 100644 --- a/entity/BulkMail_entity/BulkMail_entity.aod +++ b/entity/BulkMail_entity/BulkMail_entity.aod @@ -323,6 +323,14 @@ <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> </entityFields> <recordContainers> <dbRecordContainer> @@ -400,6 +408,10 @@ <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> </recordFieldMappings> <linkInformation> <linkInformation> 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 0000000000..a14234910f --- /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 0000000000..5259e1c081 --- /dev/null +++ b/entity/BulkMail_entity/entityfields/date_to_send/stateProcess.js @@ -0,0 +1,17 @@ +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 +} +if (status == $KeywordRegistry.bulkMailStatus$missed()){ + fieldState = neon.COMPONENTSTATE_READONLY; +} + +result.string(fieldState); \ No newline at end of file diff --git a/neonView/BulkMailPreview_view/BulkMailPreview_view.aod b/neonView/BulkMailPreview_view/BulkMailPreview_view.aod index 48b1894a84..bb7f21000f 100644 --- a/neonView/BulkMailPreview_view/BulkMailPreview_view.aod +++ b/neonView/BulkMailPreview_view/BulkMailPreview_view.aod @@ -35,6 +35,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> diff --git a/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod b/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod index ea1112320a..03e9ed361a 100644 --- a/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod +++ b/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod @@ -90,6 +90,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> diff --git a/process/Bulkmail_lib/process.js b/process/Bulkmail_lib/process.js index 92940b61ef..a6b34091bf 100644 --- a/process/Bulkmail_lib/process.js +++ b/process/Bulkmail_lib/process.js @@ -113,7 +113,6 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pTestRecipients) email.toRecipients = [recipientData[i][2]]; email.sender = emailSender; email.subject = subjects[contactId]; - isSuccess = email.send(); } if (recipientData[i][0]) //set the recipient status to 'sent' or 'failed' diff --git a/process/KeywordRegistry_basic/process.js b/process/KeywordRegistry_basic/process.js index ed67820926..4c40e00039 100644 --- a/process/KeywordRegistry_basic/process.js +++ b/process/KeywordRegistry_basic/process.js @@ -225,6 +225,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";}; diff --git a/process/sendBulkMail_serverProcess/sendBulkMail_serverProcess.aod b/process/sendBulkMail_serverProcess/sendBulkMail_serverProcess.aod index 8357bb2adf..1bc41ce6e8 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 0000000000..5ea9a33d28 --- /dev/null +++ b/process/sendPlannedBulkmails_serverProcess/process.js @@ -0,0 +1,31 @@ +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(); +logging.log(JSON.stringify(bulkMailData)); +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 0000000000..d34bf50903 --- /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> -- GitLab From 472c8429ea4e334fc19695055325932b0a118899 Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Mon, 8 Mar 2021 17:34:15 +0100 Subject: [PATCH 004/242] 1075053 communication settings --- .../create_communicationLegalBase.xml | 18 +++++ .../create_communicationSettings.xml | 24 +++++-- .../insert_commMediumCampaignCategory.xml | 44 ++++++++++++ .../insert_communicationChannel.xml | 4 +- entity/Address_entity/Address_entity.aod | 6 ++ .../AdminViewRow_entity.aod | 3 + .../copyvaluetoclipboard/onActionProcess.js | 6 +- .../recordcontainers/jdito/contentProcess.js | 10 ++- .../CommunicationChannel_entity.aod | 71 +++++++++++++++++++ .../children/contactid_param/valueProcess.js | 4 ++ .../commcategory_param/valueProcess.js | 4 ++ .../children/contactid_param/valueProcess.js | 4 ++ .../targetConsumerProcess.js | 12 ++++ .../CommunicationSettings_entity.aod | 50 +++++++++++++ .../valueProcess.js | 4 ++ .../communicationmedium_param/valueProcess.js | 4 ++ .../children/contactid_param/valueProcess.js | 4 ++ .../entityfields/date_edit/valueProcess.js | 6 ++ .../entityfields/date_new/valueProcess.js | 6 ++ .../entityfields/medium_id/valueProcess.js | 8 +++ .../containername_param/valueProcess.js | 2 +- .../entityfields/user_edit/valueProcess.js | 6 ++ .../entityfields/user_new/valueProcess.js | 6 ++ .../channel_id.displayvalue/expression.js | 18 +++++ .../Communication_entity.aod | 6 ++ .../openadminview/onActionProcess.js | 4 +- .../CommunicationChannel.aod | 6 ++ neonContext/Person/Person.aod | 2 +- process/KeywordRegistry_basic/process.js | 2 +- 29 files changed, 329 insertions(+), 15 deletions(-) create mode 100644 .liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/insert_commMediumCampaignCategory.xml create mode 100644 entity/CommunicationChannel_entity/CommunicationChannel_entity.aod create mode 100644 entity/CommunicationChannel_entity/entityfields/addresses/children/contactid_param/valueProcess.js create mode 100644 entity/CommunicationChannel_entity/entityfields/communications/children/commcategory_param/valueProcess.js create mode 100644 entity/CommunicationChannel_entity/entityfields/communications/children/contactid_param/valueProcess.js create mode 100644 entity/CommunicationChannel_entity/entityfields/contactcommunicationchannels/targetConsumerProcess.js create mode 100644 entity/CommunicationSettings_entity/entityfields/communicationchannels/children/communicationchanneltype_param/valueProcess.js create mode 100644 entity/CommunicationSettings_entity/entityfields/communicationchannels/children/communicationmedium_param/valueProcess.js create mode 100644 entity/CommunicationSettings_entity/entityfields/communicationchannels/children/contactid_param/valueProcess.js create mode 100644 entity/CommunicationSettings_entity/entityfields/date_edit/valueProcess.js create mode 100644 entity/CommunicationSettings_entity/entityfields/date_new/valueProcess.js create mode 100644 entity/CommunicationSettings_entity/entityfields/medium_id/valueProcess.js create mode 100644 entity/CommunicationSettings_entity/entityfields/user_edit/valueProcess.js create mode 100644 entity/CommunicationSettings_entity/entityfields/user_new/valueProcess.js create mode 100644 entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/channel_id.displayvalue/expression.js create mode 100644 neonContext/CommunicationChannel/CommunicationChannel.aod diff --git a/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/create_communicationLegalBase.xml b/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/create_communicationLegalBase.xml index c862fea171..5a33602140 100644 --- a/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/create_communicationLegalBase.xml +++ b/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/create_communicationLegalBase.xml @@ -7,6 +7,24 @@ <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="VARCHAR(50)"> + <constraints nullable="false"/> + </column> + <column name="DATE_EDIT" type="DATETIME"/> + <column name="USER_EDIT" type="VARCHAR(50)"/> </createTable> + <createIndex tableName="COMMUNICATIONLEGALBASE" indexName="IDX_COMMLEGALBASE_SETTINGS_ID"> + <column name="COMMUNICATIONSETTINGS_ID"/> + </createIndex> </changeSet> </databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/create_communicationSettings.xml b/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/create_communicationSettings.xml index 76825f50a1..a44682a7af 100644 --- a/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/create_communicationSettings.xml +++ b/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/create_communicationSettings.xml @@ -7,11 +7,25 @@ <column name="COMMUNICATIONSETTINGSID" type="CHAR(36)"> <constraints nullable="false" primaryKey="true" primaryKeyName="PK_COMMUNICATIONSETTINGSID"/> </column> - <column name="CONTACT_ID" type="CHAR(36)"/> - <column name="MEDIUM_ID" type="VARCHAR(36)"/> - <column name="CHANNEL_TYPE" type="VARCHAR(36)"/> - <column name="CHANNEL_ID" type="CHAR(36)"/> - <column name="STATUS" type="VARCHAR(36)"/> + <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"/> diff --git a/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/insert_commMediumCampaignCategory.xml b/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/insert_commMediumCampaignCategory.xml new file mode 100644 index 0000000000..c938477cbe --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.2/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.2/CommunicationSettings/insert_communicationChannel.xml b/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/insert_communicationChannel.xml index 0668e52d0f..1d9a93f985 100644 --- a/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/insert_communicationChannel.xml +++ b/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/insert_communicationChannel.xml @@ -42,8 +42,8 @@ <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_MEDIUM"/> - <column name="TITLE" value="Medium"/> + <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"/> diff --git a/entity/Address_entity/Address_entity.aod b/entity/Address_entity/Address_entity.aod index 6a673e9aac..320df4d9eb 100644 --- a/entity/Address_entity/Address_entity.aod +++ b/entity/Address_entity/Address_entity.aod @@ -146,6 +146,12 @@ <fieldName>ContactAddresses</fieldName> <isConsumer v="false" /> </entityDependency> + <entityDependency> + <name>03534109-04a7-4deb-b139-5c548aa2fd00</name> + <entityName>CommunicationChannel_entity</entityName> + <fieldName>Addresses</fieldName> + <isConsumer v="false" /> + </entityDependency> </dependencies> <children> <entityParameter> diff --git a/entity/AdminViewRow_entity/AdminViewRow_entity.aod b/entity/AdminViewRow_entity/AdminViewRow_entity.aod index eb56b773ba..3310f1bc7a 100644 --- a/entity/AdminViewRow_entity/AdminViewRow_entity.aod +++ b/entity/AdminViewRow_entity/AdminViewRow_entity.aod @@ -48,6 +48,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 dd853d9ace..2704822e2a 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 1aa381774a..032f17fc80 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/CommunicationChannel_entity/CommunicationChannel_entity.aod b/entity/CommunicationChannel_entity/CommunicationChannel_entity.aod new file mode 100644 index 0000000000..1ad20c2a04 --- /dev/null +++ b/entity/CommunicationChannel_entity/CommunicationChannel_entity.aod @@ -0,0 +1,71 @@ +<?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>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> + <dependencies> + <entityDependency> + <name>a1ac784e-a932-48a5-9aa5-285f8c9ad483</name> + <entityName>CommunicationSettings_entity</entityName> + <fieldName>CommunicationChannels</fieldName> + <isConsumer v="false" /> + </entityDependency> + </dependencies> + </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 0000000000..2f392d5c2e --- /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 0000000000..e133f1284c --- /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.CommunicationMedium_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 0000000000..2f392d5c2e --- /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 0000000000..87fa13898f --- /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 index 4250e186dc..fa3367b69c 100644 --- a/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod +++ b/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod @@ -27,9 +27,26 @@ <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> + <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/date_new/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>DATE_EDIT</name> + <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> @@ -46,16 +63,19 @@ <title>Medium</title> <consumer>MediumKeyword</consumer> <groupable v="true" /> + <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/medium_id/valueProcess.js</valueProcess> </entityField> <entityField> <name>CHANNEL_TYPE</name> <title>Channel type</title> <consumer>ChannelTypeKeyword</consumer> <groupable v="true" /> + <mandatory v="true" /> </entityField> <entityField> <name>CHANNEL_ID</name> <title>Channel</title> + <consumer>CommunicationChannels</consumer> </entityField> <entityConsumer> <name>StatusKeyword</name> @@ -104,6 +124,32 @@ </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/communicationmedium_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityField> + <name>ICON</name> + <contentType>IMAGE</contentType> + </entityField> </entityFields> <recordContainers> <dbRecordContainer> @@ -150,6 +196,10 @@ <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> </recordFieldMappings> <linkInformation> <linkInformation> 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 0000000000..fc362f395e --- /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/communicationmedium_param/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/communicationchannels/children/communicationmedium_param/valueProcess.js new file mode 100644 index 0000000000..74bf93573e --- /dev/null +++ b/entity/CommunicationSettings_entity/entityfields/communicationchannels/children/communicationmedium_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("system.result"); + +result.string(vars.get("$field.MEDIUM_ID")); \ 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 0000000000..ef0d5bcac5 --- /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/CommunicationSettings_entity/entityfields/date_edit/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/date_edit/valueProcess.js new file mode 100644 index 0000000000..2194ba21bc --- /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_new/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/date_new/valueProcess.js new file mode 100644 index 0000000000..1dbb1c3887 --- /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/medium_id/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/medium_id/valueProcess.js new file mode 100644 index 0000000000..4cc3b352b4 --- /dev/null +++ b/entity/CommunicationSettings_entity/entityfields/medium_id/valueProcess.js @@ -0,0 +1,8 @@ +import("KeywordRegistry_basic"); +import("system.vars"); + +if (vars.get("$field.CHANNEL_TYPE") == $KeywordRegistry.communicationChannelType$communication() + && !vars.get("$this.value") && vars.get("$field.CHANNEL_ID")) +{ + +} \ 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 index 9e90f32b11..a7553cb4bb 100644 --- a/entity/CommunicationSettings_entity/entityfields/mediumkeyword/children/containername_param/valueProcess.js +++ b/entity/CommunicationSettings_entity/entityfields/mediumkeyword/children/containername_param/valueProcess.js @@ -1,4 +1,4 @@ import("system.result"); import("KeywordRegistry_basic"); -result.string($KeywordRegistry.communicationMedium()); \ No newline at end of file +result.string($KeywordRegistry.communicationMediumCampaign()); \ 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 0000000000..47a3dbd120 --- /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_new/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/user_new/valueProcess.js new file mode 100644 index 0000000000..8d9eb72f00 --- /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/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 0000000000..aff37a959f --- /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/Communication_entity/Communication_entity.aod b/entity/Communication_entity/Communication_entity.aod index 31f48ebaa3..d050640791 100644 --- a/entity/Communication_entity/Communication_entity.aod +++ b/entity/Communication_entity/Communication_entity.aod @@ -90,6 +90,12 @@ Usually this is used for filtering COMMUNICATION-entries by a specified contact <fieldName>Communications</fieldName> <isConsumer v="false" /> </entityDependency> + <entityDependency> + <name>8266f568-f15d-42c5-8ba3-5254fed7fd99</name> + <entityName>CommunicationChannel_entity</entityName> + <fieldName>Communications</fieldName> + <isConsumer v="false" /> + </entityDependency> </dependencies> <children> <entityParameter> diff --git a/entity/KeywordEntry_entity/entityfields/openadminview/onActionProcess.js b/entity/KeywordEntry_entity/entityfields/openadminview/onActionProcess.js index d564b4d76f..e788315779 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/neonContext/CommunicationChannel/CommunicationChannel.aod b/neonContext/CommunicationChannel/CommunicationChannel.aod new file mode 100644 index 0000000000..e99ae10c9b --- /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/Person/Person.aod b/neonContext/Person/Person.aod index f51ca899d1..1e80db9a3c 100644 --- a/neonContext/Person/Person.aod +++ b/neonContext/Person/Person.aod @@ -65,7 +65,7 @@ </neonViewReference> <neonViewReference> <name>627518cc-15b0-4f0d-b6f3-ec06172e7c4e</name> - <view>PersonDataPrivacy_view</view> + <view>PersonMarketing_view</view> </neonViewReference> </references> </neonContext> diff --git a/process/KeywordRegistry_basic/process.js b/process/KeywordRegistry_basic/process.js index fad18eea62..6fef3d6765 100644 --- a/process/KeywordRegistry_basic/process.js +++ b/process/KeywordRegistry_basic/process.js @@ -361,5 +361,5 @@ $KeywordRegistry.communicationSettingStatus$rejected = function(){return "COMMUN $KeywordRegistry.communicationChannelType = function(){return "CommunicationChannelType";}; $KeywordRegistry.communicationChannelType$profiling = function(){return "COMMUNICATIONCHANNEL_PROFILING";}; $KeywordRegistry.communicationChannelType$global = function(){return "COMMUNICATIONCHANNEL_GLOBAL";}; -$KeywordRegistry.communicationChannelType$medium = function(){return "COMMUNICATIONCHANNEL_MEDIUM";}; +$KeywordRegistry.communicationChannelType$communication = function(){return "COMMUNICATIONCHANNEL_MEDIUM";}; $KeywordRegistry.communicationChannelType$address = function(){return "COMMUNICATIONCHANNEL_ADDRESS";}; \ No newline at end of file -- GitLab From bb55f1068bcb909b966460e86a90593553a03b0b Mon Sep 17 00:00:00 2001 From: "m.groppe" <m.groppe@adito.de> Date: Tue, 9 Mar 2021 12:05:00 +0100 Subject: [PATCH 005/242] =?UTF-8?q?[Projekt:=20xRM-Marketing][TicketNr.:?= =?UTF-8?q?=201075051][=C3=9Cbernahme=20u.=20Erweiterung=20"Weblink"=20aus?= =?UTF-8?q?=20Internem=20Adito]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...reateLinkManagement.xml => CreateLink.xml} | 8 +- ...Webtrackingtags.xml => CreateLinktags.xml} | 8 +- .../addLinkManagementKeywords.xml | 42 +-- aliasDefinition/Data_alias/Data_alias.aod | 250 ++++++++++++++++++ .../KeywordEntry_entity.aod | 13 +- .../containername_param/valueProcess.js | 2 - .../tags.value/expression.js | 3 - .../urltype.displayvalue/expression.js | 3 - .../LinkTag_entity.aod} | 92 +++---- .../entityfields/date_edit/valueProcess.js | 0 .../entityfields/date_new/valueProcess.js | 0 .../containername_param/valueProcess.js | 2 + .../entityfields/link_id}/valueProcess.js | 2 +- .../entityfields/linktagid}/valueProcess.js | 0 .../entityfields/tag/displayValueProcess.js | 8 + .../entityfields/user_edit/valueProcess.js | 0 .../entityfields/user_new/valueProcess.js | 0 .../grantUpdateProcess.js | 0 .../onInit.js | 0 .../recordcontainers/db/conditionProcess.js | 5 + .../Link_entity.aod} | 88 +++--- .../contentTitleProcess.js | 0 .../entityfields/date_new/valueProcess.js | 0 .../containername_param/valueProcess.js | 2 + .../entityfields/linkid}/valueProcess.js | 0 .../linktype_icon}/valueProcess.js | 4 +- .../entityfields/score/valueProcess.js | 0 .../entityfields/url/onValidation.js | 2 +- .../entityfields/url/stateProcess.js | 0 .../entityfields/user_new/valueProcess.js | 0 .../children/webtrackingurl/valueProcess.js | 2 +- .../recordcontainers/db/conditionProcess.js | 0 .../recordcontainers/db/orderClauseProcess.js | 2 +- .../tags.value/expression.js | 3 + .../urltype.displayvalue/expression.js | 3 + .../containername_param/valueProcess.js | 2 - .../valueProcess.js | 10 - .../entityfields/tag/displayValueProcess.js | 8 - .../recordcontainers/db/conditionProcess.js | 12 - .../LinkManagement.aod => Link/Link.aod} | 22 +- .../LinkTag.aod} | 14 +- .../LinkDrawer_view.aod} | 4 +- .../LinkEdit_view.aod} | 8 +- .../LinkFilter_view.aod} | 6 +- .../LinkPreview_view.aod} | 6 +- .../LinkTagEdit_view.aod} | 2 +- .../LinkTagFilter_view.aod} | 2 +- .../LinkTagMultiEdit_view.aod} | 2 +- .../LinktMain_view.aod} | 6 +- 49 files changed, 444 insertions(+), 204 deletions(-) rename .liquibase/Data_alias/basic/2021.0.2/LinkManagement/{CreateLinkManagement.xml => CreateLink.xml} (81%) rename .liquibase/Data_alias/basic/2021.0.2/LinkManagement/{CreateWebtrackingtags.xml => CreateLinktags.xml} (78%) delete mode 100644 entity/LinkManagement_entity/entityfields/keywordurltype/children/containername_param/valueProcess.js delete mode 100644 entity/LinkManagement_entity/recordcontainers/db/recordfieldmappings/tags.value/expression.js delete mode 100644 entity/LinkManagement_entity/recordcontainers/db/recordfieldmappings/urltype.displayvalue/expression.js rename entity/{WebtrackingTag_entity/WebtrackingTag_entity.aod => LinkTag_entity/LinkTag_entity.aod} (52%) rename entity/{WebtrackingTag_entity => LinkTag_entity}/entityfields/date_edit/valueProcess.js (100%) rename entity/{WebtrackingTag_entity => LinkTag_entity}/entityfields/date_new/valueProcess.js (100%) create mode 100644 entity/LinkTag_entity/entityfields/keywordlinktags/children/containername_param/valueProcess.js rename entity/{WebtrackingTag_entity/entityfields/webtrackingpagelocation => LinkTag_entity/entityfields/link_id}/valueProcess.js (78%) rename entity/{WebtrackingTag_entity/entityfields/webtrackingtagid => LinkTag_entity/entityfields/linktagid}/valueProcess.js (100%) create mode 100644 entity/LinkTag_entity/entityfields/tag/displayValueProcess.js rename entity/{WebtrackingTag_entity => LinkTag_entity}/entityfields/user_edit/valueProcess.js (100%) rename entity/{WebtrackingTag_entity => LinkTag_entity}/entityfields/user_new/valueProcess.js (100%) rename entity/{WebtrackingTag_entity => LinkTag_entity}/grantUpdateProcess.js (100%) rename entity/{WebtrackingTag_entity => LinkTag_entity}/onInit.js (100%) create mode 100644 entity/LinkTag_entity/recordcontainers/db/conditionProcess.js rename entity/{LinkManagement_entity/LinkManagement_entity.aod => Link_entity/Link_entity.aod} (55%) rename entity/{LinkManagement_entity => Link_entity}/contentTitleProcess.js (100%) rename entity/{LinkManagement_entity => Link_entity}/entityfields/date_new/valueProcess.js (100%) create mode 100644 entity/Link_entity/entityfields/keywordlinktype/children/containername_param/valueProcess.js rename entity/{LinkManagement_entity/entityfields/linkmanagementid => Link_entity/entityfields/linkid}/valueProcess.js (100%) rename entity/{LinkManagement_entity/entityfields/urltype_icon => Link_entity/entityfields/linktype_icon}/valueProcess.js (59%) rename entity/{LinkManagement_entity => Link_entity}/entityfields/score/valueProcess.js (100%) rename entity/{LinkManagement_entity => Link_entity}/entityfields/url/onValidation.js (72%) rename entity/{LinkManagement_entity => Link_entity}/entityfields/url/stateProcess.js (100%) rename entity/{LinkManagement_entity => Link_entity}/entityfields/user_new/valueProcess.js (100%) rename entity/{LinkManagement_entity => Link_entity}/entityfields/webtrackingtags/children/webtrackingurl/valueProcess.js (53%) rename entity/{LinkManagement_entity => Link_entity}/recordcontainers/db/conditionProcess.js (100%) rename entity/{LinkManagement_entity => Link_entity}/recordcontainers/db/orderClauseProcess.js (62%) create mode 100644 entity/Link_entity/recordcontainers/db/recordfieldmappings/tags.value/expression.js create mode 100644 entity/Link_entity/recordcontainers/db/recordfieldmappings/urltype.displayvalue/expression.js delete mode 100644 entity/WebtrackingTag_entity/entityfields/keywordwebtrackingtag/children/containername_param/valueProcess.js delete mode 100644 entity/WebtrackingTag_entity/entityfields/keywordwebtrackingtag/children/excludedkeyidssubquery_param/valueProcess.js delete mode 100644 entity/WebtrackingTag_entity/entityfields/tag/displayValueProcess.js delete mode 100644 entity/WebtrackingTag_entity/recordcontainers/db/conditionProcess.js rename neonContext/{LinkManagement/LinkManagement.aod => Link/Link.aod} (65%) rename neonContext/{WebtrackingTag/WebtrackingTag.aod => LinkTag/LinkTag.aod} (68%) rename neonView/{LinkManagementDrawer_view/LinkManagementDrawer_view.aod => LinkDrawer_view/LinkDrawer_view.aod} (87%) rename neonView/{LinkManagementEdit_view/LinkManagementEdit_view.aod => LinkEdit_view/LinkEdit_view.aod} (86%) rename neonView/{LinkManagementFilter_view/LinkManagementFilter_view.aod => LinkFilter_view/LinkFilter_view.aod} (88%) rename neonView/{LinkManagementPreview_view/LinkManagementPreview_view.aod => LinkPreview_view/LinkPreview_view.aod} (87%) rename neonView/{WebtrackingTagEdit_view/WebtrackingTagEdit_view.aod => LinkTagEdit_view/LinkTagEdit_view.aod} (95%) rename neonView/{WebtrackingTagFilter_view/WebtrackingTagFilter_view.aod => LinkTagFilter_view/LinkTagFilter_view.aod} (94%) rename neonView/{WebtrackingTagMultiEdit_view/WebtrackingTagMultiEdit_view.aod => LinkTagMultiEdit_view/LinkTagMultiEdit_view.aod} (94%) rename neonView/{LinkManagementMain_view/LinkManagementMain_view.aod => LinktMain_view/LinktMain_view.aod} (85%) diff --git a/.liquibase/Data_alias/basic/2021.0.2/LinkManagement/CreateLinkManagement.xml b/.liquibase/Data_alias/basic/2021.0.2/LinkManagement/CreateLink.xml similarity index 81% rename from .liquibase/Data_alias/basic/2021.0.2/LinkManagement/CreateLinkManagement.xml rename to .liquibase/Data_alias/basic/2021.0.2/LinkManagement/CreateLink.xml index 078ad765e2..95de8ed7f9 100644 --- a/.liquibase/Data_alias/basic/2021.0.2/LinkManagement/CreateLinkManagement.xml +++ b/.liquibase/Data_alias/basic/2021.0.2/LinkManagement/CreateLink.xml @@ -3,12 +3,12 @@ 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="LINKMANAGEMENT"> - <column name="LINKMANAGEMENTID" type="CHAR(36)"> - <constraints primaryKey="true" primaryKeyName="PK_OBSERVATION_OBSERVATIONID"/> + <createTable tableName="LINK"> + <column name="LINKID" type="CHAR(36)"> + <constraints primaryKey="true" primaryKeyName="PK_LINK_LINKID"/> </column> <column name="URL" type="VARCHAR(512)"/> - <column name="URLTYPE" type="VARCHAR(50)"/> + <column name="LINKTYPE" type="VARCHAR(50)"/> <column name="SCORE" type = "INTEGER"/> <column name="USER_NEW" type="NVARCHAR(50)"/> <column name="DATE_NEW" type="DATETIME"/> diff --git a/.liquibase/Data_alias/basic/2021.0.2/LinkManagement/CreateWebtrackingtags.xml b/.liquibase/Data_alias/basic/2021.0.2/LinkManagement/CreateLinktags.xml similarity index 78% rename from .liquibase/Data_alias/basic/2021.0.2/LinkManagement/CreateWebtrackingtags.xml rename to .liquibase/Data_alias/basic/2021.0.2/LinkManagement/CreateLinktags.xml index 9ad5f64f3f..bf2eeca7fa 100644 --- a/.liquibase/Data_alias/basic/2021.0.2/LinkManagement/CreateWebtrackingtags.xml +++ b/.liquibase/Data_alias/basic/2021.0.2/LinkManagement/CreateLinktags.xml @@ -3,11 +3,11 @@ 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="WEBTRACKINGTAGS"> - <column name="WEBTRACKINGTAGSID" type="CHAR(36)"> - <constraints primaryKey="true" primaryKeyName="PK_WEBTRACKINGTAGS_WEBTRACKINGTAGSID"/> + <createTable tableName="LINKTAG"> + <column name="LINKTAGID" type="CHAR(36)"> + <constraints primaryKey="true" primaryKeyName="PK_LINKTAG_LINKTAGID"/> </column> - <column name="WEBTRACKINGPAGELOCATION" type="VARCHAR(512)"/> + <column name="LINK_ID" type="char(36)"/> <column name="TAG" type="VARCHAR(100)" /> <column name="USER_NEW" type="NVARCHAR(50)" /> <column name="DATE_NEW" type="DATETIME" /> diff --git a/.liquibase/Data_alias/basic/2021.0.2/LinkManagement/addLinkManagementKeywords.xml b/.liquibase/Data_alias/basic/2021.0.2/LinkManagement/addLinkManagementKeywords.xml index 6dd23b638d..bca80257d2 100644 --- a/.liquibase/Data_alias/basic/2021.0.2/LinkManagement/addLinkManagementKeywords.xml +++ b/.liquibase/Data_alias/basic/2021.0.2/LinkManagement/addLinkManagementKeywords.xml @@ -2,72 +2,72 @@ <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="f60cafea-1e4d-4778-b09c-5ae5aaaaa587"> + <changeSet author="m.groppe" id="04500816-ee95-4a7c-acbb-0b97e2cfcb0d"> <insert tableName="AB_KEYWORD_CATEGORY"> - <column name="AB_KEYWORD_CATEGORYID" value="05eab0ac-3b1f-43ac-95f4-68659d98f569"/> - <column name="NAME" value="WebTrackingTags"/> + <column name="AB_KEYWORD_CATEGORYID" value="6511a68f-f776-4995-816b-1db011e9e6af"/> + <column name="NAME" value="LinkTags"/> <column name="SORTINGBY" valueNumeric="0"/> <column name="SORTINGDIRECTION" value="ASC"/> </insert> <insert tableName="AB_KEYWORD_ENTRY"> - <column name="AB_KEYWORD_ENTRYID" value="5adb741d-50f7-4982-a99f-8489f8244d54"/> + <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="WebTrackingTags"/> - <column name="AB_KEYWORD_CATEGORY_ID" value="05eab0ac-3b1f-43ac-95f4-68659d98f569"/> + <column name="CONTAINER" value="LinkTags"/> + <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="a2123f48-1dd2-4ad5-a208-1c010f4168e7"/> + <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="WebTrackingTags"/> - <column name="AB_KEYWORD_CATEGORY_ID" value="05eab0ac-3b1f-43ac-95f4-68659d98f569"/> + <column name="CONTAINER" value="LinkTags"/> + <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="c1283846-824f-47af-bf5c-0b171cb972f8"/> + <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="WebTrackingTags"/> - <column name="AB_KEYWORD_CATEGORY_ID" value="05eab0ac-3b1f-43ac-95f4-68659d98f569"/> + <column name="CONTAINER" value="LinkTags"/> + <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="69bf8fd0-8f1d-43f2-ba84-1c1e3df3aa7e"/> + <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="WebTrackingTags"/> - <column name="AB_KEYWORD_CATEGORY_ID" value="05eab0ac-3b1f-43ac-95f4-68659d98f569"/> + <column name="CONTAINER" value="LinkTags"/> + <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="1abfb39f-4fed-49f4-b691-ae7ddda365ca" author="m.groppe"> + <changeSet id="83cea193-681f-4dde-9bb6-c0d8ed7b0d72" author="m.groppe"> <insert tableName="AB_KEYWORD_CATEGORY"> - <column name="AB_KEYWORD_CATEGORYID" value="36d8e08d-d4a4-4cf5-b99a-398b89d15bc9"/> - <column name="NAME" value="LinkManagementUrlType"/> + <column name="AB_KEYWORD_CATEGORYID" value="c2034fe5-6157-4fb2-b774-4aaeda302b15"/> + <column name="NAME" value="LinkType"/> <column name="SORTINGBY" valueNumeric="0"/> <column name="SORTINGDIRECTION" value="ASC"/> </insert> <insert tableName="AB_KEYWORD_ENTRY"> - <column name="AB_KEYWORD_ENTRYID" value="9b9b5f6d-fd17-4180-b41c-ec3edbb3ddbe"/> + <column name="AB_KEYWORD_ENTRYID" value="126953bc-1219-43d7-a0a0-f2e0631e062f"/> <column name="KEYID" value="EMAIL"/> <column name="TITLE" value="E-Mail"/> - <column name="CONTAINER" value="LinkManagementUrlType"/> - <column name="AB_KEYWORD_CATEGORY_ID" value="36d8e08d-d4a4-4cf5-b99a-398b89d15bc9"/> + <column name="CONTAINER" value="LinkType"/> + <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"/> diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod index c4ab229cfe..314e098c9c 100644 --- a/aliasDefinition/Data_alias/Data_alias.aod +++ b/aliasDefinition/Data_alias/Data_alias.aod @@ -18485,6 +18485,256 @@ </entityFieldDb> </entityFields> </entityDb> + <entityDb> + <name>LINK</name> + <dbName></dbName> + <idColumn>LINKID</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>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>LINKID</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> + </entityFields> + </entityDb> + <entityDb> + <name>LINKTAG</name> + <dbName></dbName> + <idColumn>LINKTAGID</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>LINK_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>LINKTAGID</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> </entities> </entityGroup> </aliasDefDb> diff --git a/entity/KeywordEntry_entity/KeywordEntry_entity.aod b/entity/KeywordEntry_entity/KeywordEntry_entity.aod index ebf6a659d5..ab933fe780 100644 --- a/entity/KeywordEntry_entity/KeywordEntry_entity.aod +++ b/entity/KeywordEntry_entity/KeywordEntry_entity.aod @@ -640,7 +640,18 @@ <entityDependency> <name>98608b12-9927-4197-adfe-1398a388bcb0</name> <entityName>WebtrackingTag_entity</entityName> - <fieldName>KeywordWebtrackingTag</fieldName> + <isConsumer v="false" /> + </entityDependency> + <entityDependency> + <name>8cfca9b8-3128-4e31-bb77-358d500c4b9a</name> + <entityName>Link_entity</entityName> + <fieldName>KeywordLinkType</fieldName> + <isConsumer v="false" /> + </entityDependency> + <entityDependency> + <name>7a7e6cc4-3e5b-4a2b-8ed9-1e84436cac15</name> + <entityName>LinkTag_entity</entityName> + <fieldName>KeywordLinkTags</fieldName> <isConsumer v="false" /> </entityDependency> </dependencies> diff --git a/entity/LinkManagement_entity/entityfields/keywordurltype/children/containername_param/valueProcess.js b/entity/LinkManagement_entity/entityfields/keywordurltype/children/containername_param/valueProcess.js deleted file mode 100644 index 888ead5b70..0000000000 --- a/entity/LinkManagement_entity/entityfields/keywordurltype/children/containername_param/valueProcess.js +++ /dev/null @@ -1,2 +0,0 @@ -import("system.result"); -result.string("LinkManagementUrlType"); \ No newline at end of file diff --git a/entity/LinkManagement_entity/recordcontainers/db/recordfieldmappings/tags.value/expression.js b/entity/LinkManagement_entity/recordcontainers/db/recordfieldmappings/tags.value/expression.js deleted file mode 100644 index 374f17cc9a..0000000000 --- a/entity/LinkManagement_entity/recordcontainers/db/recordfieldmappings/tags.value/expression.js +++ /dev/null @@ -1,3 +0,0 @@ -import("system.result"); -result.string("(SELECT GROUP_CONCAT(CONCAT(' ', TITLE)) from ab_keyword_entry join WEBTRACKINGTAGS on " -+" KEYID = WEBTRACKINGTAGS.TAG where WEBTRACKINGTAGS.WEBTRACKINGPAGELOCATION = URL and CONTAINER = 'WebTrackingTags')"); \ No newline at end of file diff --git a/entity/LinkManagement_entity/recordcontainers/db/recordfieldmappings/urltype.displayvalue/expression.js b/entity/LinkManagement_entity/recordcontainers/db/recordfieldmappings/urltype.displayvalue/expression.js deleted file mode 100644 index c0cb7ca686..0000000000 --- a/entity/LinkManagement_entity/recordcontainers/db/recordfieldmappings/urltype.displayvalue/expression.js +++ /dev/null @@ -1,3 +0,0 @@ -import("system.result"); -import("Keyword_lib"); -result.string(KeywordUtils.getResolvedTitleSqlPart("LinkManagementUrlType", "LINKMANAGEMENT.URLTYPE")); \ No newline at end of file diff --git a/entity/WebtrackingTag_entity/WebtrackingTag_entity.aod b/entity/LinkTag_entity/LinkTag_entity.aod similarity index 52% rename from entity/WebtrackingTag_entity/WebtrackingTag_entity.aod rename to entity/LinkTag_entity/LinkTag_entity.aod index aa349ead05..ad214e7733 100644 --- a/entity/WebtrackingTag_entity/WebtrackingTag_entity.aod +++ b/entity/LinkTag_entity/LinkTag_entity.aod @@ -1,126 +1,122 @@ <?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>WebtrackingTag_entity</name> + <name>LinkTag_entity</name> <title>Tag</title> <majorModelMode>DISTRIBUTED</majorModelMode> <grantUpdate v="false" /> - <grantUpdateProcess>%aditoprj%/entity/WebtrackingTag_entity/grantUpdateProcess.js</grantUpdateProcess> - <onInit>%aditoprj%/entity/WebtrackingTag_entity/onInit.js</onInit> + <grantUpdateProcess>%aditoprj%/entity/LinkTag_entity/grantUpdateProcess.js</grantUpdateProcess> + <onInit>%aditoprj%/entity/LinkTag_entity/onInit.js</onInit> <titlePlural>Tags</titlePlural> <recordContainer>db</recordContainer> <entityFields> <entityProvider> <name>#PROVIDER</name> </entityProvider> - <entityConsumer> - <name>KeywordWebtrackingTag</name> - <dependency> - <name>dependency</name> - <entityName>KeywordEntry_entity</entityName> - <fieldName>SpecificContainerKeywords</fieldName> - </dependency> - <children> - <entityParameter> - <name>ContainerName_param</name> - <valueProcess>%aditoprj%/entity/WebtrackingTag_entity/entityfields/keywordwebtrackingtag/children/containername_param/valueProcess.js</valueProcess> - </entityParameter> - <entityParameter> - <name>ExcludedKeyIdsSubquery_param</name> - <valueProcess>%aditoprj%/entity/WebtrackingTag_entity/entityfields/keywordwebtrackingtag/children/excludedkeyidssubquery_param/valueProcess.js</valueProcess> - </entityParameter> - </children> - </entityConsumer> <entityProvider> <name>Tags</name> <dependencies> <entityDependency> <name>4677d007-6467-4bc4-80ec-8230ee68d203</name> - <entityName>LinkManagement_entity</entityName> + <entityName>Link_entity</entityName> <fieldName>WebtrackingTags</fieldName> <isConsumer v="false" /> </entityDependency> </dependencies> </entityProvider> <entityParameter> - <name>WebtrackingURL</name> + <name>LinkId_param</name> <expose v="true" /> </entityParameter> <entityField> <name>TAG</name> <title>Tag</title> - <consumer>KeywordWebtrackingTag</consumer> - <displayValueProcess>%aditoprj%/entity/WebtrackingTag_entity/entityfields/tag/displayValueProcess.js</displayValueProcess> + <consumer>KeywordLinkTags</consumer> + <displayValueProcess>%aditoprj%/entity/LinkTag_entity/entityfields/tag/displayValueProcess.js</displayValueProcess> </entityField> <entityField> - <name>WEBTRACKINGTAGID</name> - <valueProcess>%aditoprj%/entity/WebtrackingTag_entity/entityfields/webtrackingtagid/valueProcess.js</valueProcess> + <name>LINKTAGID</name> + <valueProcess>%aditoprj%/entity/LinkTag_entity/entityfields/linktagid/valueProcess.js</valueProcess> </entityField> <entityField> - <name>WEBTRACKINGPAGELOCATION</name> + <name>LINK_ID</name> <title>Url</title> - <valueProcess>%aditoprj%/entity/WebtrackingTag_entity/entityfields/webtrackingpagelocation/valueProcess.js</valueProcess> + <valueProcess>%aditoprj%/entity/LinkTag_entity/entityfields/link_id/valueProcess.js</valueProcess> </entityField> <entityField> <name>DATE_NEW</name> - <valueProcess>%aditoprj%/entity/WebtrackingTag_entity/entityfields/date_new/valueProcess.js</valueProcess> + <valueProcess>%aditoprj%/entity/LinkTag_entity/entityfields/date_new/valueProcess.js</valueProcess> </entityField> <entityField> <name>DATE_EDIT</name> - <valueProcess>%aditoprj%/entity/WebtrackingTag_entity/entityfields/date_edit/valueProcess.js</valueProcess> + <valueProcess>%aditoprj%/entity/LinkTag_entity/entityfields/date_edit/valueProcess.js</valueProcess> </entityField> <entityField> <name>USER_NEW</name> - <valueProcess>%aditoprj%/entity/WebtrackingTag_entity/entityfields/user_new/valueProcess.js</valueProcess> + <valueProcess>%aditoprj%/entity/LinkTag_entity/entityfields/user_new/valueProcess.js</valueProcess> </entityField> <entityField> <name>USER_EDIT</name> - <valueProcess>%aditoprj%/entity/WebtrackingTag_entity/entityfields/user_edit/valueProcess.js</valueProcess> + <valueProcess>%aditoprj%/entity/LinkTag_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/LinkTag_entity/entityfields/keywordlinktags/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> </entityFields> <recordContainers> <dbRecordContainer> <name>db</name> - <conditionProcess>%aditoprj%/entity/WebtrackingTag_entity/recordcontainers/db/conditionProcess.js</conditionProcess> + <conditionProcess>%aditoprj%/entity/LinkTag_entity/recordcontainers/db/conditionProcess.js</conditionProcess> <alias>Data_alias</alias> <recordFieldMappings> - <dbRecordFieldMapping> - <name>WEBTRACKINGTAGID.value</name> - <recordfield>WEBTRACKINGTAGS.WEBTRACKINGTAGSID</recordfield> - </dbRecordFieldMapping> <dbRecordFieldMapping> <name>TAG.value</name> - <recordfield>WEBTRACKINGTAGS.TAG</recordfield> + <recordfield>LINKTAG.TAG</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> - <name>WEBTRACKINGPAGELOCATION.value</name> - <recordfield>WEBTRACKINGTAGS.WEBTRACKINGPAGELOCATION</recordfield> + <name>LINK_ID.value</name> + <recordfield>LINKTAG.LINK_ID</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>DATE_EDIT.value</name> - <recordfield>WEBTRACKINGTAGS.DATE_EDIT</recordfield> + <recordfield>LINKTAG.DATE_EDIT</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>DATE_NEW.value</name> - <recordfield>WEBTRACKINGTAGS.DATE_NEW</recordfield> + <recordfield>LINKTAG.DATE_NEW</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>USER_EDIT.value</name> - <recordfield>WEBTRACKINGTAGS.USER_EDIT</recordfield> + <recordfield>LINKTAG.USER_EDIT</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>USER_NEW.value</name> - <recordfield>WEBTRACKINGTAGS.USER_NEW</recordfield> + <recordfield>LINKTAG.USER_NEW</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>LINKTAGID.value</name> + <recordfield>LINKTAG.LINKTAGID</recordfield> </dbRecordFieldMapping> </recordFieldMappings> <linkInformation> <linkInformation> - <name>1fcf7161-9c1d-44f8-938f-bfcfa98cac30</name> - <tableName>WEBTRACKINGTAGS</tableName> - <primaryKey>WEBTRACKINGTAGSID</primaryKey> + <name>25e82f4e-e187-4e73-a10d-5c04d6356341</name> + <tableName>LINKTAG</tableName> + <primaryKey>LINKTAGID</primaryKey> <isUIDTable v="true" /> <readonly v="false" /> </linkInformation> diff --git a/entity/WebtrackingTag_entity/entityfields/date_edit/valueProcess.js b/entity/LinkTag_entity/entityfields/date_edit/valueProcess.js similarity index 100% rename from entity/WebtrackingTag_entity/entityfields/date_edit/valueProcess.js rename to entity/LinkTag_entity/entityfields/date_edit/valueProcess.js diff --git a/entity/WebtrackingTag_entity/entityfields/date_new/valueProcess.js b/entity/LinkTag_entity/entityfields/date_new/valueProcess.js similarity index 100% rename from entity/WebtrackingTag_entity/entityfields/date_new/valueProcess.js rename to entity/LinkTag_entity/entityfields/date_new/valueProcess.js diff --git a/entity/LinkTag_entity/entityfields/keywordlinktags/children/containername_param/valueProcess.js b/entity/LinkTag_entity/entityfields/keywordlinktags/children/containername_param/valueProcess.js new file mode 100644 index 0000000000..99b326480d --- /dev/null +++ b/entity/LinkTag_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/WebtrackingTag_entity/entityfields/webtrackingpagelocation/valueProcess.js b/entity/LinkTag_entity/entityfields/link_id/valueProcess.js similarity index 78% rename from entity/WebtrackingTag_entity/entityfields/webtrackingpagelocation/valueProcess.js rename to entity/LinkTag_entity/entityfields/link_id/valueProcess.js index 34581950e3..255a9f02f7 100644 --- a/entity/WebtrackingTag_entity/entityfields/webtrackingpagelocation/valueProcess.js +++ b/entity/LinkTag_entity/entityfields/link_id/valueProcess.js @@ -5,4 +5,4 @@ import("system.neon"); if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) - result.string(vars.get("$param.WebtrackingURL")) \ No newline at end of file + result.string(vars.get("$param.LinkId_param")) \ No newline at end of file diff --git a/entity/WebtrackingTag_entity/entityfields/webtrackingtagid/valueProcess.js b/entity/LinkTag_entity/entityfields/linktagid/valueProcess.js similarity index 100% rename from entity/WebtrackingTag_entity/entityfields/webtrackingtagid/valueProcess.js rename to entity/LinkTag_entity/entityfields/linktagid/valueProcess.js diff --git a/entity/LinkTag_entity/entityfields/tag/displayValueProcess.js b/entity/LinkTag_entity/entityfields/tag/displayValueProcess.js new file mode 100644 index 0000000000..30fe420608 --- /dev/null +++ b/entity/LinkTag_entity/entityfields/tag/displayValueProcess.js @@ -0,0 +1,8 @@ +import("system.logging"); +import("system.vars"); +import("Keyword_lib"); +import("system.result"); + +logging.log(vars.get("$field.TAG")); +logging.log(KeywordUtils.getViewValue('LinkTags', vars.get("$field.TAG"))); +result.string(KeywordUtils.getViewValue('LinkTags', vars.get("$field.TAG"))) \ No newline at end of file diff --git a/entity/WebtrackingTag_entity/entityfields/user_edit/valueProcess.js b/entity/LinkTag_entity/entityfields/user_edit/valueProcess.js similarity index 100% rename from entity/WebtrackingTag_entity/entityfields/user_edit/valueProcess.js rename to entity/LinkTag_entity/entityfields/user_edit/valueProcess.js diff --git a/entity/WebtrackingTag_entity/entityfields/user_new/valueProcess.js b/entity/LinkTag_entity/entityfields/user_new/valueProcess.js similarity index 100% rename from entity/WebtrackingTag_entity/entityfields/user_new/valueProcess.js rename to entity/LinkTag_entity/entityfields/user_new/valueProcess.js diff --git a/entity/WebtrackingTag_entity/grantUpdateProcess.js b/entity/LinkTag_entity/grantUpdateProcess.js similarity index 100% rename from entity/WebtrackingTag_entity/grantUpdateProcess.js rename to entity/LinkTag_entity/grantUpdateProcess.js diff --git a/entity/WebtrackingTag_entity/onInit.js b/entity/LinkTag_entity/onInit.js similarity index 100% rename from entity/WebtrackingTag_entity/onInit.js rename to entity/LinkTag_entity/onInit.js diff --git a/entity/LinkTag_entity/recordcontainers/db/conditionProcess.js b/entity/LinkTag_entity/recordcontainers/db/conditionProcess.js new file mode 100644 index 0000000000..68febae30f --- /dev/null +++ b/entity/LinkTag_entity/recordcontainers/db/conditionProcess.js @@ -0,0 +1,5 @@ +import("system.vars"); +import("Sql_lib"); +import("system.result"); + +result.string(newWhereIfSet("LINKTAG.LINK_ID", vars.get("$param.LinkId_param")).toString()) \ No newline at end of file diff --git a/entity/LinkManagement_entity/LinkManagement_entity.aod b/entity/Link_entity/Link_entity.aod similarity index 55% rename from entity/LinkManagement_entity/LinkManagement_entity.aod rename to entity/Link_entity/Link_entity.aod index 924b6bd101..f077232774 100644 --- a/entity/LinkManagement_entity/LinkManagement_entity.aod +++ b/entity/Link_entity/Link_entity.aod @@ -1,9 +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"> - <name>LinkManagement_entity</name> + <name>Link_entity</name> <title>Weblink</title> <majorModelMode>DISTRIBUTED</majorModelMode> - <contentTitleProcess>%aditoprj%/entity/LinkManagement_entity/contentTitleProcess.js</contentTitleProcess> + <contentTitleProcess>%aditoprj%/entity/Link_entity/contentTitleProcess.js</contentTitleProcess> <iconId>NEON:FILTER</iconId> <titlePlural>Weblinks</titlePlural> <recordContainer>db</recordContainer> @@ -15,20 +15,20 @@ <name>URL</name> <title>Url</title> <mandatory v="true" /> - <stateProcess>%aditoprj%/entity/LinkManagement_entity/entityfields/url/stateProcess.js</stateProcess> - <onValidation>%aditoprj%/entity/LinkManagement_entity/entityfields/url/onValidation.js</onValidation> + <stateProcess>%aditoprj%/entity/Link_entity/entityfields/url/stateProcess.js</stateProcess> + <onValidation>%aditoprj%/entity/Link_entity/entityfields/url/onValidation.js</onValidation> </entityField> <entityField> - <name>LINKMANAGEMENTID</name> - <valueProcess>%aditoprj%/entity/LinkManagement_entity/entityfields/linkmanagementid/valueProcess.js</valueProcess> + <name>LINKID</name> + <valueProcess>%aditoprj%/entity/Link_entity/entityfields/linkid/valueProcess.js</valueProcess> </entityField> <entityField> <name>DATE_NEW</name> - <valueProcess>%aditoprj%/entity/LinkManagement_entity/entityfields/date_new/valueProcess.js</valueProcess> + <valueProcess>%aditoprj%/entity/Link_entity/entityfields/date_new/valueProcess.js</valueProcess> </entityField> <entityField> <name>USER_NEW</name> - <valueProcess>%aditoprj%/entity/LinkManagement_entity/entityfields/user_new/valueProcess.js</valueProcess> + <valueProcess>%aditoprj%/entity/Link_entity/entityfields/user_new/valueProcess.js</valueProcess> </entityField> <entityField> <name>DATE_EDIT</name> @@ -41,12 +41,12 @@ <title>Punktzahl</title> <contentType>NUMBER</contentType> <outputFormat>#' Punkte'</outputFormat> - <valueProcess>%aditoprj%/entity/LinkManagement_entity/entityfields/score/valueProcess.js</valueProcess> + <valueProcess>%aditoprj%/entity/Link_entity/entityfields/score/valueProcess.js</valueProcess> </entityField> <entityField> - <name>URLTYPE</name> - <title>Url Typ</title> - <consumer>KeywordUrlType</consumer> + <name>LINKTYPE</name> + <title>Link Type</title> + <consumer>KeywordLinkType</consumer> <mandatory v="true" /> </entityField> <entityField> @@ -58,18 +58,27 @@ <selectionMode>MULTI</selectionMode> <dependency> <name>dependency</name> - <entityName>WebtrackingTag_entity</entityName> + <entityName>LinkTag_entity</entityName> <fieldName>Tags</fieldName> </dependency> <children> <entityParameter> - <name>WebtrackingURL</name> - <valueProcess>%aditoprj%/entity/LinkManagement_entity/entityfields/webtrackingtags/children/webtrackingurl/valueProcess.js</valueProcess> + <name>LinkId_param</name> + <valueProcess>%aditoprj%/entity/Link_entity/entityfields/webtrackingtags/children/webtrackingurl/valueProcess.js</valueProcess> </entityParameter> </children> </entityConsumer> + <entityField> + <name>LINKTYPE_ICON</name> + <contentType>IMAGE</contentType> + <valueProcess>%aditoprj%/entity/Link_entity/entityfields/linktype_icon/valueProcess.js</valueProcess> + </entityField> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> <entityConsumer> - <name>KeywordUrlType</name> + <name>KeywordLinkType</name> <dependency> <name>dependency</name> <entityName>KeywordEntry_entity</entityName> @@ -78,75 +87,66 @@ <children> <entityParameter> <name>ContainerName_param</name> - <valueProcess>%aditoprj%/entity/LinkManagement_entity/entityfields/keywordurltype/children/containername_param/valueProcess.js</valueProcess> + <valueProcess>%aditoprj%/entity/Link_entity/entityfields/keywordlinktype/children/containername_param/valueProcess.js</valueProcess> </entityParameter> </children> </entityConsumer> - <entityField> - <name>URLTYPE_ICON</name> - <contentType>IMAGE</contentType> - <valueProcess>%aditoprj%/entity/LinkManagement_entity/entityfields/urltype_icon/valueProcess.js</valueProcess> - </entityField> - <entityProvider> - <name>#PROVIDER_AGGREGATES</name> - <useAggregates v="true" /> - </entityProvider> </entityFields> <recordContainers> <dbRecordContainer> <name>db</name> - <conditionProcess>%aditoprj%/entity/LinkManagement_entity/recordcontainers/db/conditionProcess.js</conditionProcess> - <orderClauseProcess>%aditoprj%/entity/LinkManagement_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess> + <conditionProcess>%aditoprj%/entity/Link_entity/recordcontainers/db/conditionProcess.js</conditionProcess> + <orderClauseProcess>%aditoprj%/entity/Link_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess> <alias>Data_alias</alias> <recordFieldMappings> <dbRecordFieldMapping> <name>DATE_EDIT.value</name> - <recordfield>LINKMANAGEMENT.DATE_EDIT</recordfield> + <recordfield>LINK.DATE_EDIT</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>DATE_NEW.value</name> - <recordfield>LINKMANAGEMENT.DATE_NEW</recordfield> + <recordfield>LINK.DATE_NEW</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> - <name>LINKMANAGEMENTID.value</name> - <recordfield>LINKMANAGEMENT.LINKMANAGEMENTID</recordfield> + <name>LINKID.value</name> + <recordfield>LINK.LINKID</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>SCORE.value</name> - <recordfield>LINKMANAGEMENT.SCORE</recordfield> + <recordfield>LINK.SCORE</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>URL.value</name> - <recordfield>LINKMANAGEMENT.URL</recordfield> + <recordfield>LINK.URL</recordfield> <isFilterable v="true" /> </dbRecordFieldMapping> <dbRecordFieldMapping> - <name>URLTYPE.value</name> - <recordfield>LINKMANAGEMENT.URLTYPE</recordfield> + <name>LINKTYPE.value</name> + <recordfield>LINK.LINKTYPE</recordfield> <isFilterable v="true" /> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>USER_EDIT.value</name> - <recordfield>LINKMANAGEMENT.USER_EDIT</recordfield> + <recordfield>LINK.USER_EDIT</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>USER_NEW.value</name> - <recordfield>LINKMANAGEMENT.USER_NEW</recordfield> + <recordfield>LINK.USER_NEW</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>Tags.value</name> - <expression>%aditoprj%/entity/LinkManagement_entity/recordcontainers/db/recordfieldmappings/tags.value/expression.js</expression> + <expression>%aditoprj%/entity/Link_entity/recordcontainers/db/recordfieldmappings/tags.value/expression.js</expression> </dbRecordFieldMapping> <dbRecordFieldMapping> - <name>URLTYPE.displayValue</name> - <expression>%aditoprj%/entity/LinkManagement_entity/recordcontainers/db/recordfieldmappings/urltype.displayvalue/expression.js</expression> + <name>LINKTYPE.displayValue</name> + <expression>%aditoprj%/entity/Link_entity/recordcontainers/db/recordfieldmappings/urltype.displayvalue/expression.js</expression> </dbRecordFieldMapping> </recordFieldMappings> <linkInformation> <linkInformation> - <name>e778479c-0a94-4ea7-91dd-e8276cbffb41</name> - <tableName>LINKMANAGEMENT</tableName> - <primaryKey>LINKMANAGEMENTID</primaryKey> + <name>4f64a314-f1c1-4f56-8b9c-f38e17a7ac74</name> + <tableName>LINK</tableName> + <primaryKey>LINKID</primaryKey> <isUIDTable v="true" /> <readonly v="false" /> </linkInformation> diff --git a/entity/LinkManagement_entity/contentTitleProcess.js b/entity/Link_entity/contentTitleProcess.js similarity index 100% rename from entity/LinkManagement_entity/contentTitleProcess.js rename to entity/Link_entity/contentTitleProcess.js diff --git a/entity/LinkManagement_entity/entityfields/date_new/valueProcess.js b/entity/Link_entity/entityfields/date_new/valueProcess.js similarity index 100% rename from entity/LinkManagement_entity/entityfields/date_new/valueProcess.js rename to entity/Link_entity/entityfields/date_new/valueProcess.js diff --git a/entity/Link_entity/entityfields/keywordlinktype/children/containername_param/valueProcess.js b/entity/Link_entity/entityfields/keywordlinktype/children/containername_param/valueProcess.js new file mode 100644 index 0000000000..a12ad5a803 --- /dev/null +++ b/entity/Link_entity/entityfields/keywordlinktype/children/containername_param/valueProcess.js @@ -0,0 +1,2 @@ +import("system.result"); +result.string("LinkType"); \ No newline at end of file diff --git a/entity/LinkManagement_entity/entityfields/linkmanagementid/valueProcess.js b/entity/Link_entity/entityfields/linkid/valueProcess.js similarity index 100% rename from entity/LinkManagement_entity/entityfields/linkmanagementid/valueProcess.js rename to entity/Link_entity/entityfields/linkid/valueProcess.js diff --git a/entity/LinkManagement_entity/entityfields/urltype_icon/valueProcess.js b/entity/Link_entity/entityfields/linktype_icon/valueProcess.js similarity index 59% rename from entity/LinkManagement_entity/entityfields/urltype_icon/valueProcess.js rename to entity/Link_entity/entityfields/linktype_icon/valueProcess.js index ff459e58e9..2378458ad3 100644 --- a/entity/LinkManagement_entity/entityfields/urltype_icon/valueProcess.js +++ b/entity/Link_entity/entityfields/linktype_icon/valueProcess.js @@ -2,10 +2,10 @@ import("system.result"); import("system.vars"); var res = "" -if(vars.get("$field.URLTYPE") == 1)//leadforensics +if(vars.get("$field.LINKTYPE") == 1)//leadforensics res = "NEON:IMPORT" -if(vars.get("$field.URLTYPE")=="EMAIL") +if(vars.get("$field.LINKTYPE")=="EMAIL") res = "VAADIN:MAILBOX" result.string(res); \ No newline at end of file diff --git a/entity/LinkManagement_entity/entityfields/score/valueProcess.js b/entity/Link_entity/entityfields/score/valueProcess.js similarity index 100% rename from entity/LinkManagement_entity/entityfields/score/valueProcess.js rename to entity/Link_entity/entityfields/score/valueProcess.js diff --git a/entity/LinkManagement_entity/entityfields/url/onValidation.js b/entity/Link_entity/entityfields/url/onValidation.js similarity index 72% rename from entity/LinkManagement_entity/entityfields/url/onValidation.js rename to entity/Link_entity/entityfields/url/onValidation.js index 640c6f4cb8..57a945a4a1 100644 --- a/entity/LinkManagement_entity/entityfields/url/onValidation.js +++ b/entity/Link_entity/entityfields/url/onValidation.js @@ -6,6 +6,6 @@ import("Sql_lib"); if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW && vars.get("$local.value")) { - if(newSelect("URL").from("LINKMANAGEMENT").where("LINKMANAGEMENT.URL", vars.get("$local.value")).cell()) + if(newSelect("URL").from("LINK").where("LINK.URL", vars.get("$local.value")).cell()) result.string(translate.text("Die Url muss eindeutig sein!")) } \ No newline at end of file diff --git a/entity/LinkManagement_entity/entityfields/url/stateProcess.js b/entity/Link_entity/entityfields/url/stateProcess.js similarity index 100% rename from entity/LinkManagement_entity/entityfields/url/stateProcess.js rename to entity/Link_entity/entityfields/url/stateProcess.js diff --git a/entity/LinkManagement_entity/entityfields/user_new/valueProcess.js b/entity/Link_entity/entityfields/user_new/valueProcess.js similarity index 100% rename from entity/LinkManagement_entity/entityfields/user_new/valueProcess.js rename to entity/Link_entity/entityfields/user_new/valueProcess.js diff --git a/entity/LinkManagement_entity/entityfields/webtrackingtags/children/webtrackingurl/valueProcess.js b/entity/Link_entity/entityfields/webtrackingtags/children/webtrackingurl/valueProcess.js similarity index 53% rename from entity/LinkManagement_entity/entityfields/webtrackingtags/children/webtrackingurl/valueProcess.js rename to entity/Link_entity/entityfields/webtrackingtags/children/webtrackingurl/valueProcess.js index da859efa8c..6f028c8c8b 100644 --- a/entity/LinkManagement_entity/entityfields/webtrackingtags/children/webtrackingurl/valueProcess.js +++ b/entity/Link_entity/entityfields/webtrackingtags/children/webtrackingurl/valueProcess.js @@ -1,3 +1,3 @@ import("system.vars"); import("system.result"); -result.string(vars.get("$field.URL")); \ No newline at end of file +result.string(vars.get("$field.LINKID")); \ No newline at end of file diff --git a/entity/LinkManagement_entity/recordcontainers/db/conditionProcess.js b/entity/Link_entity/recordcontainers/db/conditionProcess.js similarity index 100% rename from entity/LinkManagement_entity/recordcontainers/db/conditionProcess.js rename to entity/Link_entity/recordcontainers/db/conditionProcess.js diff --git a/entity/LinkManagement_entity/recordcontainers/db/orderClauseProcess.js b/entity/Link_entity/recordcontainers/db/orderClauseProcess.js similarity index 62% rename from entity/LinkManagement_entity/recordcontainers/db/orderClauseProcess.js rename to entity/Link_entity/recordcontainers/db/orderClauseProcess.js index bf39eb8458..9e8bad4287 100644 --- a/entity/LinkManagement_entity/recordcontainers/db/orderClauseProcess.js +++ b/entity/Link_entity/recordcontainers/db/orderClauseProcess.js @@ -1,5 +1,5 @@ import("system.result"); import("system.db"); result.object({ - "LINKMANAGEMENT.URL": db.ASCENDING + "LINK.URL": db.ASCENDING }); \ No newline at end of file diff --git a/entity/Link_entity/recordcontainers/db/recordfieldmappings/tags.value/expression.js b/entity/Link_entity/recordcontainers/db/recordfieldmappings/tags.value/expression.js new file mode 100644 index 0000000000..31a1b020f2 --- /dev/null +++ b/entity/Link_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 LINKTAG on " ++" KEYID = LINKTAG.TAG join ab_keyword_category on ab_keyword_category_id = ab_keyword_categoryid where LINKTAG.LINK_ID = LINKID and AB_KEYWORD_CATEGORY.NAME = 'LinkTags')"); \ No newline at end of file diff --git a/entity/Link_entity/recordcontainers/db/recordfieldmappings/urltype.displayvalue/expression.js b/entity/Link_entity/recordcontainers/db/recordfieldmappings/urltype.displayvalue/expression.js new file mode 100644 index 0000000000..90e6647b3f --- /dev/null +++ b/entity/Link_entity/recordcontainers/db/recordfieldmappings/urltype.displayvalue/expression.js @@ -0,0 +1,3 @@ +import("system.result"); +import("Keyword_lib"); +result.string(KeywordUtils.getResolvedTitleSqlPart("LinkType", "LINK.LINKTYPE")); \ No newline at end of file diff --git a/entity/WebtrackingTag_entity/entityfields/keywordwebtrackingtag/children/containername_param/valueProcess.js b/entity/WebtrackingTag_entity/entityfields/keywordwebtrackingtag/children/containername_param/valueProcess.js deleted file mode 100644 index 1f593b73c1..0000000000 --- a/entity/WebtrackingTag_entity/entityfields/keywordwebtrackingtag/children/containername_param/valueProcess.js +++ /dev/null @@ -1,2 +0,0 @@ -import("system.result"); -result.string("WebTrackingTags") \ No newline at end of file diff --git a/entity/WebtrackingTag_entity/entityfields/keywordwebtrackingtag/children/excludedkeyidssubquery_param/valueProcess.js b/entity/WebtrackingTag_entity/entityfields/keywordwebtrackingtag/children/excludedkeyidssubquery_param/valueProcess.js deleted file mode 100644 index 132076e768..0000000000 --- a/entity/WebtrackingTag_entity/entityfields/keywordwebtrackingtag/children/excludedkeyidssubquery_param/valueProcess.js +++ /dev/null @@ -1,10 +0,0 @@ -import("system.logging"); -import("system.result"); -import("system.vars"); -import("Sql_lib"); - -logging.log(vars.get("$param.WebtrackingURL")); -var res = newSelect("TAG").from("WEBTRACKINGTAGS").where("WEBTRACKINGTAGS.WEBTRACKINGPAGELOCATION", vars.get("$param.WebtrackingURL")).arrayColumn() -logging.log("res "+JSON.stringify(res)); -if(res.length > 0) - result.string("'"+res.join("', '")+"'") \ No newline at end of file diff --git a/entity/WebtrackingTag_entity/entityfields/tag/displayValueProcess.js b/entity/WebtrackingTag_entity/entityfields/tag/displayValueProcess.js deleted file mode 100644 index d0389abd9d..0000000000 --- a/entity/WebtrackingTag_entity/entityfields/tag/displayValueProcess.js +++ /dev/null @@ -1,8 +0,0 @@ -import("system.logging"); -import("system.vars"); -import("Keyword_lib"); -import("system.result"); - -logging.log(vars.get("$field.TAG")); -logging.log(KeywordUtils.getViewValue('WebTrackingTags', vars.get("$field.TAG"))); -result.string(KeywordUtils.getViewValue('WebTrackingTags', vars.get("$field.TAG"))) \ No newline at end of file diff --git a/entity/WebtrackingTag_entity/recordcontainers/db/conditionProcess.js b/entity/WebtrackingTag_entity/recordcontainers/db/conditionProcess.js deleted file mode 100644 index 6b22aeeae8..0000000000 --- a/entity/WebtrackingTag_entity/recordcontainers/db/conditionProcess.js +++ /dev/null @@ -1,12 +0,0 @@ -import("system.vars"); -import("Sql_lib"); -import("system.result"); - - - -var cond = newWhere(); - -if(vars.get("$param.WebtrackingURL")) - cond.and("webtrackingtags.WEBTRACKINGPAGELOCATION", vars.get("$param.WebtrackingURL")) - -result.string(cond.toString()) \ No newline at end of file diff --git a/neonContext/LinkManagement/LinkManagement.aod b/neonContext/Link/Link.aod similarity index 65% rename from neonContext/LinkManagement/LinkManagement.aod rename to neonContext/Link/Link.aod index c64ca676a9..25e6154c35 100644 --- a/neonContext/LinkManagement/LinkManagement.aod +++ b/neonContext/Link/Link.aod @@ -1,34 +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>LinkManagement</name> + <name>Link</name> <title>Linkmanagement</title> <majorModelMode>DISTRIBUTED</majorModelMode> <icon>NEON:FILTER</icon> - <mainView>LinkManagementMain_view</mainView> - <filterView>LinkManagementFilter_view</filterView> - <editView>LinkManagementEdit_view</editView> - <previewView>LinkManagementPreview_view</previewView> - <entity>LinkManagement_entity</entity> + <mainView>LinktMain_view</mainView> + <filterView>LinkFilter_view</filterView> + <editView>LinkEdit_view</editView> + <previewView>LinkPreview_view</previewView> + <entity>Link_entity</entity> <references> <neonViewReference> <name>1214292b-2504-4f83-97ba-507074a92342</name> - <view>LinkManagementFilter_view</view> + <view>LinkFilter_view</view> </neonViewReference> <neonViewReference> <name>26c15847-68bf-4ae1-80c6-bf4aebe02d3c</name> - <view>LinkManagementEdit_view</view> + <view>LinkEdit_view</view> </neonViewReference> <neonViewReference> <name>f5fd5e04-74a1-4c25-8237-9d6dcdc801f5</name> - <view>LinkManagementMain_view</view> + <view>LinktMain_view</view> </neonViewReference> <neonViewReference> <name>466496bf-b703-4e94-be8c-33100a5516c6</name> - <view>LinkManagementPreview_view</view> + <view>LinkPreview_view</view> </neonViewReference> <neonViewReference> <name>e1de7061-bc31-4dfb-bc5e-2e75db1c52ea</name> - <view>LinkManagementDrawer_view</view> + <view>LinkDrawer_view</view> </neonViewReference> </references> </neonContext> diff --git a/neonContext/WebtrackingTag/WebtrackingTag.aod b/neonContext/LinkTag/LinkTag.aod similarity index 68% rename from neonContext/WebtrackingTag/WebtrackingTag.aod rename to neonContext/LinkTag/LinkTag.aod index 8de3d93c78..3234a45f33 100644 --- a/neonContext/WebtrackingTag/WebtrackingTag.aod +++ b/neonContext/LinkTag/LinkTag.aod @@ -1,22 +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>WebtrackingTag</name> + <name>LinkTag</name> <majorModelMode>DISTRIBUTED</majorModelMode> - <filterView>WebtrackingTagFilter_view</filterView> - <editView>WebtrackingTagEdit_view</editView> - <entity>WebtrackingTag_entity</entity> + <filterView>LinkTagFilter_view</filterView> + <editView>LinkTagEdit_view</editView> + <entity>LinkTag_entity</entity> <references> <neonViewReference> <name>c4a7ba88-dd7e-4471-ae17-450602216475</name> - <view>WebtrackingTagFilter_view</view> + <view>LinkTagFilter_view</view> </neonViewReference> <neonViewReference> <name>51e9185c-cd69-483e-b618-fbb27cf8912b</name> - <view>WebtrackingTagEdit_view</view> + <view>LinkTagEdit_view</view> </neonViewReference> <neonViewReference> <name>77247264-cea7-4fb3-8f94-d172213faac8</name> - <view>WebtrackingTagMultiEdit_view</view> + <view>LinkTagMultiEdit_view</view> </neonViewReference> </references> </neonContext> diff --git a/neonView/LinkManagementDrawer_view/LinkManagementDrawer_view.aod b/neonView/LinkDrawer_view/LinkDrawer_view.aod similarity index 87% rename from neonView/LinkManagementDrawer_view/LinkManagementDrawer_view.aod rename to neonView/LinkDrawer_view/LinkDrawer_view.aod index c4f3217047..ff217947fd 100644 --- a/neonView/LinkManagementDrawer_view/LinkManagementDrawer_view.aod +++ b/neonView/LinkDrawer_view/LinkDrawer_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>LinkManagementDrawer_view</name> + <name>LinkDrawer_view</name> <title>Weitere Informationen</title> <majorModelMode>DISTRIBUTED</majorModelMode> <layout> @@ -12,7 +12,7 @@ <neonViewReference> <name>92f84737-e546-4f97-842b-38f3a210e294</name> <entityField>WebtrackingTags</entityField> - <view>WebtrackingTagFilter_view</view> + <view>LinkTagFilter_view</view> </neonViewReference> </children> </neonView> diff --git a/neonView/LinkManagementEdit_view/LinkManagementEdit_view.aod b/neonView/LinkEdit_view/LinkEdit_view.aod similarity index 86% rename from neonView/LinkManagementEdit_view/LinkManagementEdit_view.aod rename to neonView/LinkEdit_view/LinkEdit_view.aod index ce0c020931..92b9ef67bc 100644 --- a/neonView/LinkManagementEdit_view/LinkManagementEdit_view.aod +++ b/neonView/LinkEdit_view/LinkEdit_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>LinkManagementEdit_view</name> + <name>LinkEdit_view</name> <majorModelMode>DISTRIBUTED</majorModelMode> <size>NORMAL</size> <layout> @@ -20,8 +20,8 @@ <entityField>URL</entityField> </entityFieldLink> <entityFieldLink> - <name>ed09db8d-2caa-45e6-9c0c-16313164e4f5</name> - <entityField>URLTYPE</entityField> + <name>70c52c3f-7e0b-4069-b56f-e0769f911efa</name> + <entityField>LINKTYPE</entityField> </entityFieldLink> <entityFieldLink> <name>836aafd9-a8c3-4a7c-9b2c-260ec8bbee45</name> @@ -32,7 +32,7 @@ <neonViewReference> <name>0f6d1fc5-fbd9-443e-84a3-ffba18c3443a</name> <entityField>WebtrackingTags</entityField> - <view>WebtrackingTagMultiEdit_view</view> + <view>LinkTagMultiEdit_view</view> </neonViewReference> </children> </neonView> diff --git a/neonView/LinkManagementFilter_view/LinkManagementFilter_view.aod b/neonView/LinkFilter_view/LinkFilter_view.aod similarity index 88% rename from neonView/LinkManagementFilter_view/LinkManagementFilter_view.aod rename to neonView/LinkFilter_view/LinkFilter_view.aod index 873cc5fca6..87805032ae 100644 --- a/neonView/LinkManagementFilter_view/LinkManagementFilter_view.aod +++ b/neonView/LinkFilter_view/LinkFilter_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>LinkManagementFilter_view</name> + <name>LinkFilter_view</name> <majorModelMode>DISTRIBUTED</majorModelMode> <filterable v="true" /> <layout> @@ -19,8 +19,8 @@ <entityField>URL</entityField> </neonTableColumn> <neonTableColumn> - <name>0047de4c-d8bb-4e1a-b820-24d6f43802a4</name> - <entityField>URLTYPE</entityField> + <name>fae5a83e-e00f-436f-a908-66c41e5f720d</name> + <entityField>LINKTYPE</entityField> </neonTableColumn> <neonTableColumn> <name>d87cdb53-bbc2-499f-8b2d-9c464162a969</name> diff --git a/neonView/LinkManagementPreview_view/LinkManagementPreview_view.aod b/neonView/LinkPreview_view/LinkPreview_view.aod similarity index 87% rename from neonView/LinkManagementPreview_view/LinkManagementPreview_view.aod rename to neonView/LinkPreview_view/LinkPreview_view.aod index 6ecad9b3c9..ee82135862 100644 --- a/neonView/LinkManagementPreview_view/LinkManagementPreview_view.aod +++ b/neonView/LinkPreview_view/LinkPreview_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>LinkManagementPreview_view</name> + <name>LinkPreview_view</name> <majorModelMode>DISTRIBUTED</majorModelMode> <layout> <headerFooterLayout> @@ -11,9 +11,9 @@ <children> <cardViewTemplate> <name>card</name> - <iconField>URLTYPE_ICON</iconField> + <iconField>LINKTYPE_ICON</iconField> <titleField>URL</titleField> - <subtitleField>URLTYPE</subtitleField> + <subtitleField>LINKTYPE</subtitleField> <descriptionField>SCORE</descriptionField> <entityField>#ENTITY</entityField> </cardViewTemplate> diff --git a/neonView/WebtrackingTagEdit_view/WebtrackingTagEdit_view.aod b/neonView/LinkTagEdit_view/LinkTagEdit_view.aod similarity index 95% rename from neonView/WebtrackingTagEdit_view/WebtrackingTagEdit_view.aod rename to neonView/LinkTagEdit_view/LinkTagEdit_view.aod index 9ef25e3c6b..d2b46782f8 100644 --- a/neonView/WebtrackingTagEdit_view/WebtrackingTagEdit_view.aod +++ b/neonView/LinkTagEdit_view/LinkTagEdit_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>WebtrackingTagEdit_view</name> + <name>LinkTagEdit_view</name> <majorModelMode>DISTRIBUTED</majorModelMode> <size>SMALL</size> <layout> diff --git a/neonView/WebtrackingTagFilter_view/WebtrackingTagFilter_view.aod b/neonView/LinkTagFilter_view/LinkTagFilter_view.aod similarity index 94% rename from neonView/WebtrackingTagFilter_view/WebtrackingTagFilter_view.aod rename to neonView/LinkTagFilter_view/LinkTagFilter_view.aod index a3342d33d6..aa405333e0 100644 --- a/neonView/WebtrackingTagFilter_view/WebtrackingTagFilter_view.aod +++ b/neonView/LinkTagFilter_view/LinkTagFilter_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>WebtrackingTagFilter_view</name> + <name>LinkTagFilter_view</name> <majorModelMode>DISTRIBUTED</majorModelMode> <layout> <noneLayout> diff --git a/neonView/WebtrackingTagMultiEdit_view/WebtrackingTagMultiEdit_view.aod b/neonView/LinkTagMultiEdit_view/LinkTagMultiEdit_view.aod similarity index 94% rename from neonView/WebtrackingTagMultiEdit_view/WebtrackingTagMultiEdit_view.aod rename to neonView/LinkTagMultiEdit_view/LinkTagMultiEdit_view.aod index ffbcb930a3..39f46a033e 100644 --- a/neonView/WebtrackingTagMultiEdit_view/WebtrackingTagMultiEdit_view.aod +++ b/neonView/LinkTagMultiEdit_view/LinkTagMultiEdit_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>WebtrackingTagMultiEdit_view</name> + <name>LinkTagMultiEdit_view</name> <majorModelMode>DISTRIBUTED</majorModelMode> <layout> <boxLayout> diff --git a/neonView/LinkManagementMain_view/LinkManagementMain_view.aod b/neonView/LinktMain_view/LinktMain_view.aod similarity index 85% rename from neonView/LinkManagementMain_view/LinkManagementMain_view.aod rename to neonView/LinktMain_view/LinktMain_view.aod index c6d4150de6..7ec87a63f4 100644 --- a/neonView/LinkManagementMain_view/LinkManagementMain_view.aod +++ b/neonView/LinktMain_view/LinktMain_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>LinkManagementMain_view</name> + <name>LinktMain_view</name> <majorModelMode>DISTRIBUTED</majorModelMode> <layout> <masterSlaveLayout> @@ -12,12 +12,12 @@ <neonViewReference> <name>a9bd300d-4c93-4d04-b6bc-ca007a834a51</name> <entityField>#ENTITY</entityField> - <view>LinkManagementPreview_view</view> + <view>LinkPreview_view</view> </neonViewReference> <neonViewReference> <name>4318f521-5462-4767-bd9b-6966cf2e4734</name> <entityField>#ENTITY</entityField> - <view>LinkManagementDrawer_view</view> + <view>LinkDrawer_view</view> </neonViewReference> </children> </neonView> -- GitLab From 2bffffe7adfec76fbab8914c656e311b8732ecbf Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Tue, 9 Mar 2021 17:06:42 +0100 Subject: [PATCH 006/242] 1075053 communication settings and migration process --- .../CommunicationSettings/changelog.xml | 2 + aliasDefinition/Data_alias/Data_alias.aod | 204 +++++++++++++++++- .../commcategory_param/valueProcess.js | 2 +- .../CommunicationSettings_entity.aod | 101 ++++++++- .../entityfields/channel_id/valueProcess.js | 17 ++ .../communicationmedium_param/valueProcess.js | 10 +- .../communicationsettings_id/valueProcess.js | 6 + .../date_edit_legalbase/valueProcess.js | 6 + .../date_new_legalbase/valueProcess.js | 6 + .../medium/displayValueProcess.js | 6 + .../{medium_id => medium}/valueProcess.js | 0 .../user_edit_legalbase/valueProcess.js | 6 + .../user_new_legalbase/valueProcess.js | 6 + .../entityfields/version/valueProcess.js | 6 + .../recordcontainers/db/fromClauseProcess.js | 15 ++ .../medium_id.displayvalue/expression.js | 2 +- .../CommunicationSettingsEdit_view.aod | 12 +- .../CommunicationSettingsFilter_view.aod | 12 +- .../CommunicationSettingsPreview_view.aod | 1 + neonView/PersonMain_view/PersonMain_view.aod | 7 +- .../PersonMarketing_view.aod} | 9 +- .../migrateCommRestrictions_serverProcess.aod | 10 + .../process.js | 87 ++++++++ 23 files changed, 502 insertions(+), 31 deletions(-) create mode 100644 entity/CommunicationSettings_entity/entityfields/channel_id/valueProcess.js create mode 100644 entity/CommunicationSettings_entity/entityfields/communicationsettings_id/valueProcess.js create mode 100644 entity/CommunicationSettings_entity/entityfields/date_edit_legalbase/valueProcess.js create mode 100644 entity/CommunicationSettings_entity/entityfields/date_new_legalbase/valueProcess.js create mode 100644 entity/CommunicationSettings_entity/entityfields/medium/displayValueProcess.js rename entity/CommunicationSettings_entity/entityfields/{medium_id => medium}/valueProcess.js (100%) create mode 100644 entity/CommunicationSettings_entity/entityfields/user_edit_legalbase/valueProcess.js create mode 100644 entity/CommunicationSettings_entity/entityfields/user_new_legalbase/valueProcess.js create mode 100644 entity/CommunicationSettings_entity/entityfields/version/valueProcess.js create mode 100644 entity/CommunicationSettings_entity/recordcontainers/db/fromClauseProcess.js rename neonView/{PersonDataPrivacy_view/PersonDataPrivacy_view.aod => PersonMarketing_view/PersonMarketing_view.aod} (71%) create mode 100644 process/migrateCommRestrictions_serverProcess/migrateCommRestrictions_serverProcess.aod create mode 100644 process/migrateCommRestrictions_serverProcess/process.js diff --git a/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/changelog.xml b/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/changelog.xml index 148237f02c..985bb74bdd 100644 --- a/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/changelog.xml @@ -5,4 +5,6 @@ <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"/> </databaseChangeLog> \ No newline at end of file diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod index 82e01fe2f2..d9592bc5f5 100644 --- a/aliasDefinition/Data_alias/Data_alias.aod +++ b/aliasDefinition/Data_alias/Data_alias.aod @@ -18510,7 +18510,7 @@ <columnType v="12" /> <size v="36" /> <scale v="0" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -18521,7 +18521,7 @@ <name>CHANNEL_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> + <columnType v="12" /> <size v="36" /> <scale v="0" /> <notNull v="false" /> @@ -18532,13 +18532,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>MEDIUM_ID</name> + <name>CHANNEL_TYPE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> <size v="36" /> <scale v="0" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -18546,7 +18546,35 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CHANNEL_TYPE</name> + <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>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" /> @@ -18560,13 +18588,89 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CONTACT_ID</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>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="false" /> + <notNull v="true" /> <isUnique v="false" /> <index v="true" /> <documentation></documentation> @@ -18574,7 +18678,21 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>COMMUNICATIONSETTINGSID</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>COMMUNICATIONLEGALBASEID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -18587,6 +18705,76 @@ <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="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="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> </entities> diff --git a/entity/CommunicationChannel_entity/entityfields/communications/children/commcategory_param/valueProcess.js b/entity/CommunicationChannel_entity/entityfields/communications/children/commcategory_param/valueProcess.js index e133f1284c..f113cc9898 100644 --- a/entity/CommunicationChannel_entity/entityfields/communications/children/commcategory_param/valueProcess.js +++ b/entity/CommunicationChannel_entity/entityfields/communications/children/commcategory_param/valueProcess.js @@ -1,4 +1,4 @@ import("system.result"); import("system.vars"); -result.string(vars.get("$param.CommunicationMedium_param")); \ No newline at end of file +result.string(vars.get("$param.CommunicationCategory_param")); \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod b/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod index fa3367b69c..f7de2e9087 100644 --- a/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod +++ b/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod @@ -59,11 +59,12 @@ <displayValueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/status/displayValueProcess.js</displayValueProcess> </entityField> <entityField> - <name>MEDIUM_ID</name> + <name>MEDIUM</name> <title>Medium</title> <consumer>MediumKeyword</consumer> <groupable v="true" /> - <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/medium_id/valueProcess.js</valueProcess> + <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/medium/valueProcess.js</valueProcess> + <displayValueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/medium/displayValueProcess.js</displayValueProcess> </entityField> <entityField> <name>CHANNEL_TYPE</name> @@ -76,6 +77,7 @@ <name>CHANNEL_ID</name> <title>Channel</title> <consumer>CommunicationChannels</consumer> + <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/channel_id/valueProcess.js</valueProcess> </entityField> <entityConsumer> <name>StatusKeyword</name> @@ -150,10 +152,42 @@ <name>ICON</name> <contentType>IMAGE</contentType> </entityField> + <entityField> + <name>COMMUNICATIONLEGALBASEID</name> + </entityField> + <entityField> + <name>INFO</name> + <title>Info</title> + </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> </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> <alias>Data_alias</alias> <recordFieldMappings> @@ -175,8 +209,8 @@ <recordfield>COMMUNICATIONSETTINGS.CONTACT_ID</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> - <name>MEDIUM_ID.value</name> - <recordfield>COMMUNICATIONSETTINGS.MEDIUM_ID</recordfield> + <name>MEDIUM.value</name> + <recordfield>COMMUNICATIONSETTINGS.MEDIUM</recordfield> <isFilterable v="true" /> </dbRecordFieldMapping> <dbRecordFieldMapping> @@ -189,7 +223,7 @@ <expression>%aditoprj%/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/channel_type.displayvalue/expression.js</expression> </dbRecordFieldMapping> <dbRecordFieldMapping> - <name>MEDIUM_ID.displayValue</name> + <name>MEDIUM.displayValue</name> <expression>%aditoprj%/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/medium_id.displayvalue/expression.js</expression> </dbRecordFieldMapping> <dbRecordFieldMapping> @@ -200,15 +234,70 @@ <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>7668d332-84d5-48fc-b53b-bbea26a6e6c7</name> + <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> diff --git a/entity/CommunicationSettings_entity/entityfields/channel_id/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/channel_id/valueProcess.js new file mode 100644 index 0000000000..da04d27adc --- /dev/null +++ b/entity/CommunicationSettings_entity/entityfields/channel_id/valueProcess.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/communicationchannels/children/communicationmedium_param/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/communicationchannels/children/communicationmedium_param/valueProcess.js index 74bf93573e..92dc282c45 100644 --- a/entity/CommunicationSettings_entity/entityfields/communicationchannels/children/communicationmedium_param/valueProcess.js +++ b/entity/CommunicationSettings_entity/entityfields/communicationchannels/children/communicationmedium_param/valueProcess.js @@ -1,4 +1,12 @@ import("system.vars"); import("system.result"); +import("Keyword_lib") +import("KeywordRegistry_basic"); -result.string(vars.get("$field.MEDIUM_ID")); \ No newline at end of file +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/communicationsettings_id/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/communicationsettings_id/valueProcess.js new file mode 100644 index 0000000000..1b3c724dc9 --- /dev/null +++ b/entity/CommunicationSettings_entity/entityfields/communicationsettings_id/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("$field.COMMUNICATIONSETTINGSID")); \ 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 0000000000..2194ba21bc --- /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_legalbase/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/date_new_legalbase/valueProcess.js new file mode 100644 index 0000000000..1dbb1c3887 --- /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/medium/displayValueProcess.js b/entity/CommunicationSettings_entity/entityfields/medium/displayValueProcess.js new file mode 100644 index 0000000000..496cea3abe --- /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_id/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/medium/valueProcess.js similarity index 100% rename from entity/CommunicationSettings_entity/entityfields/medium_id/valueProcess.js rename to entity/CommunicationSettings_entity/entityfields/medium/valueProcess.js 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 0000000000..47a3dbd120 --- /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_legalbase/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/user_new_legalbase/valueProcess.js new file mode 100644 index 0000000000..8d9eb72f00 --- /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 0000000000..fd82c76775 --- /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/CommunicationSettings_entity/recordcontainers/db/fromClauseProcess.js b/entity/CommunicationSettings_entity/recordcontainers/db/fromClauseProcess.js new file mode 100644 index 0000000000..d178b505c1 --- /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/recordfieldmappings/medium_id.displayvalue/expression.js b/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/medium_id.displayvalue/expression.js index 00b82e4840..3043ae4b4a 100644 --- a/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/medium_id.displayvalue/expression.js +++ b/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/medium_id.displayvalue/expression.js @@ -2,4 +2,4 @@ import("KeywordRegistry_basic"); import("system.result"); import("Keyword_lib"); -result.string(KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.communicationMedium(), "COMMUNICATIONSETTINGS.MEDIUM_ID")); \ No newline at end of file +result.string(KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.communicationMedium(), "COMMUNICATIONSETTINGS.MEDIUM")); \ No newline at end of file diff --git a/neonView/CommunicationSettingsEdit_view/CommunicationSettingsEdit_view.aod b/neonView/CommunicationSettingsEdit_view/CommunicationSettingsEdit_view.aod index 7269b13cb2..e617c0d1ac 100644 --- a/neonView/CommunicationSettingsEdit_view/CommunicationSettingsEdit_view.aod +++ b/neonView/CommunicationSettingsEdit_view/CommunicationSettingsEdit_view.aod @@ -18,17 +18,21 @@ <entityField>CHANNEL_TYPE</entityField> </entityFieldLink> <entityFieldLink> - <name>d9e0801b-824c-4576-b998-73d9a05ab73e</name> - <entityField>CHANNEL_ID</entityField> + <name>41399ea7-2607-492d-898e-85a74bcad694</name> + <entityField>MEDIUM</entityField> </entityFieldLink> <entityFieldLink> - <name>41399ea7-2607-492d-898e-85a74bcad694</name> - <entityField>MEDIUM_ID</entityField> + <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> diff --git a/neonView/CommunicationSettingsFilter_view/CommunicationSettingsFilter_view.aod b/neonView/CommunicationSettingsFilter_view/CommunicationSettingsFilter_view.aod index 7040f9bc4f..8fa182c295 100644 --- a/neonView/CommunicationSettingsFilter_view/CommunicationSettingsFilter_view.aod +++ b/neonView/CommunicationSettingsFilter_view/CommunicationSettingsFilter_view.aod @@ -25,12 +25,16 @@ </neonTableColumn> <neonTableColumn> <name>3e178293-a659-40f0-b85a-9821a098880b</name> - <entityField>MEDIUM_ID</entityField> + <entityField>MEDIUM</entityField> </neonTableColumn> <neonTableColumn> <name>8ecdd553-71ea-4e49-bae6-b15b1095a84f</name> <entityField>STATUS</entityField> </neonTableColumn> + <neonTableColumn> + <name>93c99f6a-c7b8-4f6d-b9eb-773da28adac8</name> + <entityField>INFO</entityField> + </neonTableColumn> </columns> </multiEditTableViewTemplate> <treeTableViewTemplate> @@ -46,12 +50,16 @@ </neonTreeTableColumn> <neonTreeTableColumn> <name>70b811c4-c78a-43c1-91d3-f0d168a6d81e</name> - <entityField>MEDIUM_ID</entityField> + <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> diff --git a/neonView/CommunicationSettingsPreview_view/CommunicationSettingsPreview_view.aod b/neonView/CommunicationSettingsPreview_view/CommunicationSettingsPreview_view.aod index 0fde0185b7..50ab962c1d 100644 --- a/neonView/CommunicationSettingsPreview_view/CommunicationSettingsPreview_view.aod +++ b/neonView/CommunicationSettingsPreview_view/CommunicationSettingsPreview_view.aod @@ -11,6 +11,7 @@ <children> <cardViewTemplate> <name>Card</name> + <iconField>ICON</iconField> </cardViewTemplate> </children> </neonView> diff --git a/neonView/PersonMain_view/PersonMain_view.aod b/neonView/PersonMain_view/PersonMain_view.aod index fbeb09d4b9..75dd326492 100644 --- a/neonView/PersonMain_view/PersonMain_view.aod +++ b/neonView/PersonMain_view/PersonMain_view.aod @@ -62,12 +62,17 @@ <neonViewReference> <name>82f19c55-fa96-43de-9f26-46069b28db31</name> <entityField>#ENTITY</entityField> - <view>PersonDataPrivacy_view</view> + <view>PersonMarketing_view</view> </neonViewReference> <neonViewReference> <name>d128a678-b1c0-49d0-a74c-7860d3a85247</name> <entityField>SelfDuplicatesUncached</entityField> <view>PersonFilter_view</view> </neonViewReference> + <neonViewReference> + <name>78a658a3-680b-4420-85a2-6e99ccff9f94</name> + <entityField>DSGVOEntries</entityField> + <view>DSGVOFilter_view</view> + </neonViewReference> </children> </neonView> diff --git a/neonView/PersonDataPrivacy_view/PersonDataPrivacy_view.aod b/neonView/PersonMarketing_view/PersonMarketing_view.aod similarity index 71% rename from neonView/PersonDataPrivacy_view/PersonDataPrivacy_view.aod rename to neonView/PersonMarketing_view/PersonMarketing_view.aod index e76b2ddeca..23e99decf8 100644 --- a/neonView/PersonDataPrivacy_view/PersonDataPrivacy_view.aod +++ b/neonView/PersonMarketing_view/PersonMarketing_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>PersonDataPrivacy_view</name> - <title>Data Privacy</title> + <name>PersonMarketing_view</name> + <title>Advertising</title> <majorModelMode>DISTRIBUTED</majorModelMode> <layout> <boxLayout> @@ -9,11 +9,6 @@ </boxLayout> </layout> <children> - <neonViewReference> - <name>dff2495c-99eb-4dbd-a4c7-99c1f297eb36</name> - <entityField>DSGVOEntries</entityField> - <view>DSGVOFilter_view</view> - </neonViewReference> <neonViewReference> <name>dfdbd5b2-eb37-436f-8256-e7ba55eba1dc</name> <entityField>ContactCommunicationSettings</entityField> diff --git a/process/migrateCommRestrictions_serverProcess/migrateCommRestrictions_serverProcess.aod b/process/migrateCommRestrictions_serverProcess/migrateCommRestrictions_serverProcess.aod new file mode 100644 index 0000000000..ffeb39660e --- /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 0000000000..de4fcde0bc --- /dev/null +++ b/process/migrateCommRestrictions_serverProcess/process.js @@ -0,0 +1,87 @@ +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: true, + 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_ID": null, + "MEDIUM_ID": medium, + "STATUS": $KeywordRegistry.communicationSettingStatus$rejected(), + "DATE_NEW": currentDate, + "USER_NEW": "Admin" + }); + + var commLegalBaseInsert = commLegalBaseBuilder.buildInsertStatement({ + "COMMUNICATIONLEGALBASEID": null, + "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 -- GitLab From 03c2521568393b92d3d04b1a865722a5c150f0a2 Mon Sep 17 00:00:00 2001 From: "m.groppe" <m.groppe@adito.de> Date: Wed, 10 Mar 2021 15:50:01 +0100 Subject: [PATCH 007/242] [Projekt: xRM-Marketing][TicketNr.: 1075055][BULKMAIL: Redesign protokollierter Newsletterversand] --- .../basic/2021.0.2/Bulkmail/createMailLog.xml | 19 + .../2021.0.2/Bulkmail/createMailOpener.xml | 13 + .../basic/2021.0.2/Bulkmail/createMailRun.xml | 16 + aliasDefinition/Data_alias/Data_alias.aod | 382 ++++++++++++++++++ .../AnyContact_entity/AnyContact_entity.aod | 6 + entity/BulkMail_entity/BulkMail_entity.aod | 18 + .../objectrowid_param/valueProcess.js | 3 + .../children/objecttype_param/valueProcess.js | 4 + entity/MailLog_entity/MailLog_entity.aod | 221 ++++++++++ .../contact_id/linkedContextProcess.js | 5 + .../children/objecttype_param/valueProcess.js | 4 + .../children/downloademl/onActionProcess.js | 5 + .../recordcontainers/db/conditionProcess.js | 7 + .../recordcontainers/db/fromClauseProcess.js | 3 + .../contact_id.displayvalue/expression.js | 4 + .../status.displayvalue/expression.js | 5 + neonContext/MailLog/MailLog.aod | 13 + .../BulkMailMain_view/BulkMailMain_view.aod | 5 + .../MailLogFilter_view/MailLogFilter_view.aod | 73 ++++ .../_____PREFERENCES_PROJECT.aod | 5 + process/Bulkmail_lib/process.js | 61 ++- 21 files changed, 870 insertions(+), 2 deletions(-) create mode 100644 .liquibase/Data_alias/basic/2021.0.2/Bulkmail/createMailLog.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.2/Bulkmail/createMailOpener.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.2/Bulkmail/createMailRun.xml create mode 100644 entity/BulkMail_entity/entityfields/maillogs/children/objectrowid_param/valueProcess.js create mode 100644 entity/BulkMail_entity/entityfields/maillogs/children/objecttype_param/valueProcess.js create mode 100644 entity/MailLog_entity/MailLog_entity.aod create mode 100644 entity/MailLog_entity/entityfields/contact_id/linkedContextProcess.js create mode 100644 entity/MailLog_entity/entityfields/maillogs/children/objecttype_param/valueProcess.js create mode 100644 entity/MailLog_entity/entityfields/recipientactions/children/downloademl/onActionProcess.js create mode 100644 entity/MailLog_entity/recordcontainers/db/conditionProcess.js create mode 100644 entity/MailLog_entity/recordcontainers/db/fromClauseProcess.js create mode 100644 entity/MailLog_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js create mode 100644 entity/MailLog_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js create mode 100644 neonContext/MailLog/MailLog.aod create mode 100644 neonView/MailLogFilter_view/MailLogFilter_view.aod diff --git a/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/createMailLog.xml b/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/createMailLog.xml new file mode 100644 index 0000000000..2506c39080 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/createMailLog.xml @@ -0,0 +1,19 @@ +<?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(100)"/> + <column name="ERRORMESSAGE" type="TEXT"/> + <column name="MAILTYPE" type="VARCHAR(100)"/> + <column name="SENDER_EMAIL" type="VARCHAR(255)"/> + <column name="RECIPIENT_EMAIL" type="VARCHAR(255)"/> + <column name="MAILING_SUBJECT" type="VARCHAR(100)"/> + <column name="FILEPATH" type="VARCHAR(255)"/> + </createTable> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/createMailOpener.xml b/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/createMailOpener.xml new file mode 100644 index 0000000000..e54c981b09 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/createMailOpener.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="3323c8a8-7a20-4836-b7b1-36b4ec2caf3d"> + <createTable tableName="mail_opener"> + <column name="MAIL_OPENERID" type="CHAR(36)"> + <constraints nullable="false" primaryKey="true"/> + </column> + <column name="IP_ADDRESS" type="VARCHAR(50)"/> + <column name="MAIL_LOG_ID" type="CHAR(36)"/> + <column defaultValueComputed="NULL" name="DATE_OPENED" type="datetime"/> + </createTable> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/createMailRun.xml b/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/createMailRun.xml new file mode 100644 index 0000000000..b398704262 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/createMailRun.xml @@ -0,0 +1,16 @@ +<?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="INTEREST_ID" type="CHAR(36)"/> + <column defaultValueComputed="NULL" name="DATE_RUN_START" type="datetime"/> + <column defaultValueComputed="NULL" name="DATE_RUN_FINISHED" type="datetime"/> + </createTable> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod index abce13e87d..c0a30328ed 100644 --- a/aliasDefinition/Data_alias/Data_alias.aod +++ b/aliasDefinition/Data_alias/Data_alias.aod @@ -18486,6 +18486,388 @@ </entityFieldDb> </entityFields> </entityDb> + <entityDb> + <name>MAIL_OPENER</name> + <dbName></dbName> + <idColumn>MAIL_OPENERID</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_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="false" /> + <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>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> + <entityFieldDb> + <name>MAIL_OPENERID</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="-1" /> + <size v="65535" /> + <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="100" /> + <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>MAILTYPE</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>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>FILEPATH</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>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="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DATE_SEND</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="23" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>BCC_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> + </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="false" /> + <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> + </entityFields> + </entityDb> </entities> </entityGroup> </aliasDefDb> diff --git a/entity/AnyContact_entity/AnyContact_entity.aod b/entity/AnyContact_entity/AnyContact_entity.aod index f5301bfdd0..79b5094c73 100644 --- a/entity/AnyContact_entity/AnyContact_entity.aod +++ b/entity/AnyContact_entity/AnyContact_entity.aod @@ -78,6 +78,12 @@ <fieldName>AnyContacts</fieldName> <isConsumer v="false" /> </entityDependency> + <entityDependency> + <name>b3cf7b34-6ea4-411a-8123-34afd7e10cfc</name> + <entityName>MailLog_entity</entityName> + <fieldName>Contacts</fieldName> + <isConsumer v="false" /> + </entityDependency> </dependencies> </entityProvider> <entityProvider> diff --git a/entity/BulkMail_entity/BulkMail_entity.aod b/entity/BulkMail_entity/BulkMail_entity.aod index 3b728ee07f..47a5168c20 100644 --- a/entity/BulkMail_entity/BulkMail_entity.aod +++ b/entity/BulkMail_entity/BulkMail_entity.aod @@ -323,6 +323,24 @@ <iconId>VAADIN:CURLY_BRACKETS</iconId> <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/openadminview/stateProcess.js</stateProcess> </entityActionField> + <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> </entityFields> <recordContainers> <dbRecordContainer> 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 0000000000..8aa64f3404 --- /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 0000000000..008915f61d --- /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/MailLog_entity/MailLog_entity.aod b/entity/MailLog_entity/MailLog_entity.aod new file mode 100644 index 0000000000..b604213690 --- /dev/null +++ b/entity/MailLog_entity/MailLog_entity.aod @@ -0,0 +1,221 @@ +<?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>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> + <dependencies> + <entityDependency> + <name>f089388e-d3b7-49b5-bcb6-69de2229b1d3</name> + <entityName>BulkMail_entity</entityName> + <fieldName>MailLogs</fieldName> + <isConsumer v="false" /> + </entityDependency> + </dependencies> + <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>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" /> + <isSelectionAction v="true" /> + </entityActionField> + </children> + </entityActionGroup> + <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/MailLog_entity/recordcontainers/db/fromClauseProcess.js</fromClauseProcess> + <conditionProcess>%aditoprj%/entity/MailLog_entity/recordcontainers/db/conditionProcess.js</conditionProcess> + <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> + <recordfield>MAIL_LOG.BCC_EMAIL</recordfield> + </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> + </recordFieldMappings> + <linkInformation> + <linkInformation> + <name>edad8141-91fd-4869-9368-5d4ce3553b12</name> + <tableName>MAIL_LOG</tableName> + <primaryKey>MAIL_LOGID</primaryKey> + <isUIDTable v="true" /> + <readonly v="false" /> + </linkInformation> + <linkInformation> + <name>3ceea898-a14c-478c-8022-d7351210dc2a</name> + <tableName>MAIL_RUN</tableName> + <primaryKey>MAIL_RUNID</primaryKey> + <isUIDTable v="false" /> + <readonly v="true" /> + </linkInformation> + <linkInformation> + <name>e02574d4-abac-4e33-b2b5-12823683ea2e</name> + <tableName>CONTACT</tableName> + <primaryKey>CONTACTID</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 0000000000..2e48676daf --- /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 0000000000..e8b4e72e74 --- /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 0000000000..ec52de0578 --- /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 0000000000..3abd921bd5 --- /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 0000000000..bfd2b1c862 --- /dev/null +++ b/entity/MailLog_entity/recordcontainers/db/fromClauseProcess.js @@ -0,0 +1,3 @@ +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"); \ 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 0000000000..72d1600cff --- /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 0000000000..7ea51e488a --- /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/neonContext/MailLog/MailLog.aod b/neonContext/MailLog/MailLog.aod new file mode 100644 index 0000000000..64c6bca732 --- /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/neonView/BulkMailMain_view/BulkMailMain_view.aod b/neonView/BulkMailMain_view/BulkMailMain_view.aod index 5b05276c93..81cdfe7c50 100644 --- a/neonView/BulkMailMain_view/BulkMailMain_view.aod +++ b/neonView/BulkMailMain_view/BulkMailMain_view.aod @@ -24,6 +24,11 @@ <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>49eb2dd2-0df9-4b58-bdae-f941200be8d9</name> <entityField>LogHistories</entityField> diff --git a/neonView/MailLogFilter_view/MailLogFilter_view.aod b/neonView/MailLogFilter_view/MailLogFilter_view.aod new file mode 100644 index 0000000000..d949db88e1 --- /dev/null +++ b/neonView/MailLogFilter_view/MailLogFilter_view.aod @@ -0,0 +1,73 @@ +<?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>489298fa-f805-437d-9a7f-e8acfb645e91</name> + <entityField>STATUS</entityField> + </neonTableColumn> + <neonTableColumn> + <name>2f5bd92d-61a1-4c45-99bf-ef6230541768</name> + <entityField>DATE_SEND</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>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/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod b/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod index ea1112320a..6e17165139 100644 --- a/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod +++ b/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod @@ -174,5 +174,10 @@ <description>Default VAT in percent</description> <property>19</property> </customStringProperty> + <customStringProperty> + <name>bulkmail.fileStorage</name> + <description>Save Location for send Mails. Path is relative to Serverpath</description> + <property>/bulkMailFiles/</property> + </customStringProperty> </customProperties> </preferences> diff --git a/process/Bulkmail_lib/process.js b/process/Bulkmail_lib/process.js index 92940b61ef..b62138c8e1 100644 --- a/process/Bulkmail_lib/process.js +++ b/process/Bulkmail_lib/process.js @@ -1,3 +1,5 @@ +import("system.fileIO"); +import("system.project"); import("Util_lib"); import("system.translate"); import("ActivityTask_lib"); @@ -16,6 +18,7 @@ import("Email_lib"); import("system.process"); import("system.notification"); import("Document_lib"); +import("system.db"); /** * Functions for bulk mails. @@ -72,7 +75,6 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pTestRecipients) useTemplateAttachments = useTemplateAttachments == "1"; var template = BulkMailUtils.getBulkMailTemplate(pBulkMailId, templateId, true, useTemplateAttachments); - var recipientData; if (pTestRecipients) { @@ -91,6 +93,12 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pTestRecipients) .and(ContactUtils.getCommRestrictionCondition($KeywordRegistry.communicationMediumCampaign$mail(), true)) .table(); } + var mailrunId = util.getNewUUID(); + + if (!pTestRecipients) + db.insertData("MAIL_RUN", ["MAIL_RUNID","OBJECT_ROWID","OBJECT_TYPE","DATE_RUN_START","STATUS"], null, [mailrunId,pBulkMailId,"BULKMAIL",vars.get("$sys.date"),$KeywordRegistry.bulkMailStatus$beingSent()]); + + var contactIds = recipientData.map(function (e) {return e[1];}); var successIds = []; var failedIds = []; @@ -105,19 +113,28 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pTestRecipients) for (let i = 0, l = recipientData.length; i < l; i++) { + let isSuccess = false; let contactId = recipientData[i][1]; let email = mails[contactId]; + let mailLogId = util.getNewUUID(); if (email !== undefined && recipientData[i][2]) { email.toRecipients = [recipientData[i][2]]; email.sender = emailSender; email.subject = subjects[contactId]; - + + + if (!pTestRecipients) + this.storeEmlFile(pBulkMailId, mailrunId, mailLogId,email.getEML()); isSuccess = email.send(); } + if (recipientData[i][0]) //set the recipient status to 'sent' or 'failed' { + + db.insertData("MAIL_LOG", ["MAIL_LOGID","MAIL_RUN_ID","CONTACT_ID","STATUS","SENDER_EMAIL","RECIPIENT_EMAIL","MAILING_SUBJECT","DATE_SEND"], null, [mailLogId,mailrunId,contactId,(isSuccess ?$KeywordRegistry.bulkMailRecipientStatus$sent(): $KeywordRegistry.bulkMailRecipientStatus$failed()),emailSender,recipientData[i][2],subjects[contactId],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, recipientData[i][0]); if (isSuccess && createActivity == "1") { @@ -140,8 +157,12 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pTestRecipients) 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 { + newWhere("MAIL_RUN.MAIL_RUNID",mailrunId) + .updateData(true,"MAIL_RUN",["STATUS","DATE_RUN_FINISHED"],null,[$KeywordRegistry.bulkMailStatus$sent(),vars.get("$sys.date")]); + newWhere("BULKMAIL.BULKMAILID", pBulkMailId) .updateData(true, "BULKMAIL", ["STATUS"], null, [$KeywordRegistry.bulkMailStatus$sent()]); } @@ -399,7 +420,43 @@ 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> + **/ +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)); +} function SerialLetterUtils () {} /** -- GitLab From 65af06c4d1c76ba9efe9c4002a734ef519548d9e Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Fri, 12 Mar 2021 08:20:39 +0100 Subject: [PATCH 008/242] Communication settings --- .../create_communicationLegalBase.xml | 3 ++ .../create_communicationSettings.xml | 6 +++ .../insert_iconsCommChannelType.xml | 38 +++++++++++++++++++ .../CommunicationSettings_entity.aod | 24 +++++++++++- .../contentTitleProcess.js | 4 ++ ...valueProcess.js => displayValueProcess.js} | 0 .../entityfields/channel_id/stateProcess.js | 15 ++++++++ .../entityfields/channel_id/titleProcess.js | 10 +++++ .../channel_type/onValueChange.js | 6 +++ .../entityfields/icon/valueProcess.js | 13 +++++++ .../entityfields/medium/onValueChange.js | 5 +++ .../entityfields/medium/stateProcess.js | 14 +++++++ .../entityfields/medium/valueProcess.js | 8 ---- .../iconIdProcess.js | 4 ++ .../medium_id.displayvalue/expression.js | 2 +- .../CommunicationSettingsFilter_view.aod | 32 ++-------------- .../CommunicationSettingsPreview_view.aod | 38 +++++++++++++++++++ process/Contact_lib/process.js | 27 ++++++------- process/KeywordRegistry_basic/process.js | 2 +- 19 files changed, 198 insertions(+), 53 deletions(-) create mode 100644 .liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/insert_iconsCommChannelType.xml create mode 100644 entity/CommunicationSettings_entity/contentTitleProcess.js rename entity/CommunicationSettings_entity/entityfields/channel_id/{valueProcess.js => displayValueProcess.js} (100%) create mode 100644 entity/CommunicationSettings_entity/entityfields/channel_id/stateProcess.js create mode 100644 entity/CommunicationSettings_entity/entityfields/channel_id/titleProcess.js create mode 100644 entity/CommunicationSettings_entity/entityfields/channel_type/onValueChange.js create mode 100644 entity/CommunicationSettings_entity/entityfields/icon/valueProcess.js create mode 100644 entity/CommunicationSettings_entity/entityfields/medium/onValueChange.js create mode 100644 entity/CommunicationSettings_entity/entityfields/medium/stateProcess.js delete mode 100644 entity/CommunicationSettings_entity/entityfields/medium/valueProcess.js create mode 100644 entity/CommunicationSettings_entity/iconIdProcess.js diff --git a/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/create_communicationLegalBase.xml b/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/create_communicationLegalBase.xml index 5a33602140..a775bd884d 100644 --- a/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/create_communicationLegalBase.xml +++ b/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/create_communicationLegalBase.xml @@ -26,5 +26,8 @@ <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.2/CommunicationSettings/create_communicationSettings.xml b/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/create_communicationSettings.xml index a44682a7af..aefe001ae7 100644 --- a/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/create_communicationSettings.xml +++ b/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/create_communicationSettings.xml @@ -30,5 +30,11 @@ <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.2/CommunicationSettings/insert_iconsCommChannelType.xml b/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/insert_iconsCommChannelType.xml new file mode 100644 index 0000000000..7e4a3495df --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/insert_iconsCommChannelType.xml @@ -0,0 +1,38 @@ +<?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="6f8ade49-21aa-4ac6-8a7f-3ddd1c619d95"> + <insert tableName="AB_KEYWORD_ATTRIBUTE"> + <column name="AB_KEYWORD_ATTRIBUTEID" value="f1841bca-e937-44f6-ba94-0e321e81e960"/> + <column name="AB_KEYWORD_CATEGORY_ID" value=""/> + <column name="CONTAINER" value=""/> + <column name="KIND" value="CHAR_VALUE"/> + <column name="NAME" value="iconApproved"/> + </insert> + <insert tableName="AB_KEYWORD_ATTRIBUTERELATION"> + <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="c497054c-93ff-4436-9cb5-94661fe99a7c"/> + <column name="AB_KEYWORD_ATTRIBUTE_ID" value="f1841bca-e937-44f6-ba94-0e321e81e960"/> + <column name="AB_KEYWORD_ENTRY_ID" value="a395d73b-6780-41d2-9934-70d4f4a021ff"/> + <column name="CHAR_VALUE" value="VAADIN:USER"/> + </insert> + <insert tableName="AB_KEYWORD_ATTRIBUTERELATION"> + <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="c640739d-c38f-456b-9083-f3fedb0ddaaa"/> + <column name="AB_KEYWORD_ATTRIBUTE_ID" value="f1841bca-e937-44f6-ba94-0e321e81e960"/> + <column name="AB_KEYWORD_ENTRY_ID" value="10451ef3-9fee-41f9-88f2-8e3c0b326dab"/> + <column name="CHAR_VALUE" value=""/> + </insert> + <insert tableName="AB_KEYWORD_ATTRIBUTERELATION"> + <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="a8c8208c-b1e7-41ed-9b9d-829912930a1b"/> + <column name="AB_KEYWORD_ATTRIBUTE_ID" value="f1841bca-e937-44f6-ba94-0e321e81e960"/> + <column name="AB_KEYWORD_ENTRY_ID" value="49786329-801b-4adf-b5f9-34234d65111b"/> + <column name="CHAR_VALUE" value=""/> + </insert> + <insert tableName="AB_KEYWORD_ATTRIBUTERELATION"> + <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="c9a818a2-12c1-424b-9f9b-d731eb91d1f6"/> + <column name="AB_KEYWORD_ATTRIBUTE_ID" value="f1841bca-e937-44f6-ba94-0e321e81e960"/> + <column name="AB_KEYWORD_ENTRY_ID" value="b1234ea8-f560-401d-b63a-06497c873fec"/> + <column name="CHAR_VALUE" value=""/> + </insert> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod b/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod index f7de2e9087..09065e34bb 100644 --- a/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod +++ b/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod @@ -3,6 +3,8 @@ <name>CommunicationSettings_entity</name> <title>Communication Settings</title> <majorModelMode>DISTRIBUTED</majorModelMode> + <contentTitleProcess>%aditoprj%/entity/CommunicationSettings_entity/contentTitleProcess.js</contentTitleProcess> + <iconIdProcess>%aditoprj%/entity/CommunicationSettings_entity/iconIdProcess.js</iconIdProcess> <titlePlural>Communication Settings</titlePlural> <recordContainer>db</recordContainer> <entityFields> @@ -37,10 +39,16 @@ </entityField> <entityField> <name>DATE_NEW</name> + <title>Created on</title> + <contentType>DATE</contentType> + <state>READONLY</state> <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> <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/date_edit/valueProcess.js</valueProcess> </entityField> <entityField> @@ -63,8 +71,12 @@ <title>Medium</title> <consumer>MediumKeyword</consumer> <groupable v="true" /> - <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/medium/valueProcess.js</valueProcess> + <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> @@ -72,12 +84,18 @@ <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> - <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/channel_id/valueProcess.js</valueProcess> + <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> @@ -151,6 +169,7 @@ <entityField> <name>ICON</name> <contentType>IMAGE</contentType> + <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/icon/valueProcess.js</valueProcess> </entityField> <entityField> <name>COMMUNICATIONLEGALBASEID</name> @@ -158,6 +177,7 @@ <entityField> <name>INFO</name> <title>Info</title> + <contentType>LONG_TEXT</contentType> </entityField> <entityField> <name>COMMUNICATIONSETTINGS_ID</name> diff --git a/entity/CommunicationSettings_entity/contentTitleProcess.js b/entity/CommunicationSettings_entity/contentTitleProcess.js new file mode 100644 index 0000000000..8d8c473446 --- /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/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/channel_id/displayValueProcess.js similarity index 100% rename from entity/CommunicationSettings_entity/entityfields/channel_id/valueProcess.js rename to entity/CommunicationSettings_entity/entityfields/channel_id/displayValueProcess.js 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 0000000000..9caec77e4d --- /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 0000000000..67d5655055 --- /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 0000000000..a37d392eb3 --- /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/icon/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/icon/valueProcess.js new file mode 100644 index 0000000000..4483d06c91 --- /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/onValueChange.js b/entity/CommunicationSettings_entity/entityfields/medium/onValueChange.js new file mode 100644 index 0000000000..c9d056e37f --- /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 0000000000..58b2b7867a --- /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/medium/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/medium/valueProcess.js deleted file mode 100644 index 4cc3b352b4..0000000000 --- a/entity/CommunicationSettings_entity/entityfields/medium/valueProcess.js +++ /dev/null @@ -1,8 +0,0 @@ -import("KeywordRegistry_basic"); -import("system.vars"); - -if (vars.get("$field.CHANNEL_TYPE") == $KeywordRegistry.communicationChannelType$communication() - && !vars.get("$this.value") && vars.get("$field.CHANNEL_ID")) -{ - -} \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/iconIdProcess.js b/entity/CommunicationSettings_entity/iconIdProcess.js new file mode 100644 index 0000000000..f86b12ac2a --- /dev/null +++ b/entity/CommunicationSettings_entity/iconIdProcess.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("system.result"); + +result.string(vars.get("$field.ICON")); \ No newline at end of file diff --git a/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/medium_id.displayvalue/expression.js b/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/medium_id.displayvalue/expression.js index 3043ae4b4a..531e372f98 100644 --- a/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/medium_id.displayvalue/expression.js +++ b/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/medium_id.displayvalue/expression.js @@ -2,4 +2,4 @@ import("KeywordRegistry_basic"); import("system.result"); import("Keyword_lib"); -result.string(KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.communicationMedium(), "COMMUNICATIONSETTINGS.MEDIUM")); \ No newline at end of file +result.string(KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.communicationMediumCampaign(), "COMMUNICATIONSETTINGS.MEDIUM")); \ No newline at end of file diff --git a/neonView/CommunicationSettingsFilter_view/CommunicationSettingsFilter_view.aod b/neonView/CommunicationSettingsFilter_view/CommunicationSettingsFilter_view.aod index 8fa182c295..969334026b 100644 --- a/neonView/CommunicationSettingsFilter_view/CommunicationSettingsFilter_view.aod +++ b/neonView/CommunicationSettingsFilter_view/CommunicationSettingsFilter_view.aod @@ -9,37 +9,13 @@ </groupLayout> </layout> <children> - <multiEditTableViewTemplate> - <name>MultiEdit</name> - <editableColumns> - <element>STATUS</element> - </editableColumns> - <columns> - <neonTableColumn> - <name>1319cf72-6ed3-42ab-a8ff-c3bd98c1662e</name> - <entityField>CHANNEL_TYPE</entityField> - </neonTableColumn> - <neonTableColumn> - <name>4708f2bb-62b2-4720-8328-a1098705e745</name> - <entityField>CHANNEL_ID</entityField> - </neonTableColumn> - <neonTableColumn> - <name>3e178293-a659-40f0-b85a-9821a098880b</name> - <entityField>MEDIUM</entityField> - </neonTableColumn> - <neonTableColumn> - <name>8ecdd553-71ea-4e49-bae6-b15b1095a84f</name> - <entityField>STATUS</entityField> - </neonTableColumn> - <neonTableColumn> - <name>93c99f6a-c7b8-4f6d-b9eb-773da28adac8</name> - <entityField>INFO</entityField> - </neonTableColumn> - </columns> - </multiEditTableViewTemplate> <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> diff --git a/neonView/CommunicationSettingsPreview_view/CommunicationSettingsPreview_view.aod b/neonView/CommunicationSettingsPreview_view/CommunicationSettingsPreview_view.aod index 50ab962c1d..8551f448c5 100644 --- a/neonView/CommunicationSettingsPreview_view/CommunicationSettingsPreview_view.aod +++ b/neonView/CommunicationSettingsPreview_view/CommunicationSettingsPreview_view.aod @@ -12,6 +12,44 @@ <cardViewTemplate> <name>Card</name> <iconField>ICON</iconField> + <titleField>#CONTENTTITLE</titleField> + <subtitleField>STATUS</subtitleField> + <isEditable v="false" /> </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/process/Contact_lib/process.js b/process/Contact_lib/process.js index 4a59839543..6fd3fb2db0 100644 --- a/process/Contact_lib/process.js +++ b/process/Contact_lib/process.js @@ -479,18 +479,17 @@ ContactUtils.getDefaultAddressId = function(pContactId) */ 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") @@ -528,7 +527,7 @@ ContactUtils.hasCommRestriction = function(pContactId, pMedium, pStartDate) */ ContactUtils.getActiveCommRestrictionsSubselect = function() { - var mediumList = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.communicationMediumCampaign(), "COMMRESTRICTION.MEDIUM"); + var mediumList = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.communicationMediumCampaign(), "COMMUNICATIONSETTINGS.MEDIUM"); var mask = new SqlMaskingUtils() var orgContactSubselect = newSelect("orgContact.CONTACTID") @@ -541,11 +540,13 @@ ContactUtils.getActiveCommRestrictionsSubselect = function() var subselect = "''"; if(group) { - var res = newSelect(group).from("COMMRESTRICTION") - .where("COMMRESTRICTION.CONTACT_ID = CONTACT.CONTACTID") + var res = newSelect(group).from("COMMUNICATIONSETTINGS") + .where("COMMUNICATIONSETTINGS.CONTACT_ID = CONTACT.CONTACTID") + .and("COMMUNICATIONSETTINGS.STATUS", $KeywordRegistry.communicationSettingStatus$rejected()) - var subres = newSelect(group).from("COMMRESTRICTION") - .where("COMMRESTRICTION.CONTACT_ID in ( "+orgContactSubselect.toString()+")") + var subres = newSelect(group).from("COMMUNICATIONSETTINGS") + .where("COMMUNICATIONSETTINGS.CONTACT_ID in ( "+orgContactSubselect.toString()+")") + .and("COMMUNICATIONSETTINGS.STATUS", $KeywordRegistry.communicationSettingStatus$rejected()) subselect = mask.concatWithSeparator(["("+res.toString()+")", "("+subres.toString()+")"], ", ", false); } diff --git a/process/KeywordRegistry_basic/process.js b/process/KeywordRegistry_basic/process.js index 6fef3d6765..50b730068d 100644 --- a/process/KeywordRegistry_basic/process.js +++ b/process/KeywordRegistry_basic/process.js @@ -361,5 +361,5 @@ $KeywordRegistry.communicationSettingStatus$rejected = function(){return "COMMUN $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_MEDIUM";}; +$KeywordRegistry.communicationChannelType$communication = function(){return "COMMUNICATIONCHANNEL_COMMUNICATION";}; $KeywordRegistry.communicationChannelType$address = function(){return "COMMUNICATIONCHANNEL_ADDRESS";}; \ No newline at end of file -- GitLab From 6da59115c039f4895729a48f49b51c4c84346d0d Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Fri, 12 Mar 2021 08:44:49 +0100 Subject: [PATCH 009/242] Communicationsettings migration fix --- entity/Person_entity/Person_entity.aod | 1 + .../_____LANGUAGE_EXTRA.aod | 27 +++++++++++++++++++ .../_____LANGUAGE_de/_____LANGUAGE_de.aod | 24 +++++++++++++++++ .../_____LANGUAGE_en/_____LANGUAGE_en.aod | 6 +++++ .../process.js | 9 ++++--- 5 files changed, 63 insertions(+), 4 deletions(-) diff --git a/entity/Person_entity/Person_entity.aod b/entity/Person_entity/Person_entity.aod index ee53ea6fb9..052fe91fd1 100644 --- a/entity/Person_entity/Person_entity.aod +++ b/entity/Person_entity/Person_entity.aod @@ -1500,6 +1500,7 @@ </entityActionField> <entityConsumer> <name>ContactCommunicationSettings</name> + <refreshParent v="true" /> <dependency> <name>dependency</name> <entityName>CommunicationSettings_entity</entityName> diff --git a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index 8c4aa272cf..40b02d4781 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -8091,6 +8091,33 @@ <entry> <key>Participant is already participating</key> </entry> + <entry> + <key>Event Data</key> + </entry> + <entry> + <key>On Site</key> + </entry> + <entry> + <key>Event Type</key> + </entry> + <entry> + <key>New child product</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> </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 92402864cf..2b7f8b64cb 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -14,6 +14,14 @@ <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>Rejected</key> + <value>Abgelehnt</value> + </entry> + <entry> + <key>Channel type</key> + <value>Kanalart</value> + </entry> <entry> <key>discounted Vat</key> <value>Rbt. Mehrwertssteuer</value> @@ -958,6 +966,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> @@ -2110,6 +2122,10 @@ <entry> <key>#,##0.00</key> </entry> + <entry> + <key>Advertising</key> + <value>Werbung</value> + </entry> <entry> <key>Latin Name</key> <value>Lateinischer Name</value> @@ -7865,6 +7881,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> @@ -10101,6 +10121,7 @@ Bitte Datumseingabe prüfen</value> </entry> <entry> <key>Channel</key> + <value>Kanal</value> </entry> <entry> <key>Import from Teams</key> @@ -10680,6 +10701,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> </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 1f52888b2b..1015ecbd1a 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -8193,6 +8193,12 @@ <entry> <key>Participant is already participating</key> </entry> + <entry> + <key>On Site</key> + </entry> + <entry> + <key>New child product</key> + </entry> </keyValueMap> <font name="Dialog" style="0" size="11" /> </language> diff --git a/process/migrateCommRestrictions_serverProcess/process.js b/process/migrateCommRestrictions_serverProcess/process.js index de4fcde0bc..72a92e98c7 100644 --- a/process/migrateCommRestrictions_serverProcess/process.js +++ b/process/migrateCommRestrictions_serverProcess/process.js @@ -13,7 +13,7 @@ var loggingLevels = { var parameters = { startRow: 0, pageSize: 400, - deleteCommRestrictions: true, + deleteCommRestrictions: false, keepOldUids: true, loggingLevel: loggingLevels.DEFAULT }; @@ -46,15 +46,16 @@ if (commRestrictionCount > 0) var commSettingsInsert = commSettingsBuilder.buildInsertStatement({ "COMMUNICATIONSETTINGSID": communicationSettingsId, "CONTACT_ID": contactId, - "CHANNEL_ID": null, - "MEDIUM_ID": medium, + "CHANNEL_TYPE": $KeywordRegistry.communicationChannelType$communication(), + "CHANNEL_ID": "", + "MEDIUM": medium, "STATUS": $KeywordRegistry.communicationSettingStatus$rejected(), "DATE_NEW": currentDate, "USER_NEW": "Admin" }); var commLegalBaseInsert = commLegalBaseBuilder.buildInsertStatement({ - "COMMUNICATIONLEGALBASEID": null, + "COMMUNICATIONLEGALBASEID": util.getNewUUID(), "COMMUNICATIONSETTINGS_ID": communicationSettingsId, "DATE_NEW": currentDate, "USER_NEW": "Admin", -- GitLab From 3c98bfbb42d4bf3a5ae23638a529e05a8a597a51 Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Tue, 16 Mar 2021 11:03:55 +0100 Subject: [PATCH 010/242] communicationLegalBase liquibase improved --- .../CommunicationSettings/create_communicationLegalBase.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/create_communicationLegalBase.xml b/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/create_communicationLegalBase.xml index a775bd884d..2b488709eb 100644 --- a/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/create_communicationLegalBase.xml +++ b/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/create_communicationLegalBase.xml @@ -17,11 +17,11 @@ <column name="DATE_NEW" type="DATETIME"> <constraints nullable="false"/> </column> - <column name="USER_NEW" type="VARCHAR(50)"> + <column name="USER_NEW" type="NVARCHAR(50)"> <constraints nullable="false"/> </column> <column name="DATE_EDIT" type="DATETIME"/> - <column name="USER_EDIT" type="VARCHAR(50)"/> + <column name="USER_EDIT" type="NVARCHAR(50)"/> </createTable> <createIndex tableName="COMMUNICATIONLEGALBASE" indexName="IDX_COMMLEGALBASE_SETTINGS_ID"> <column name="COMMUNICATIONSETTINGS_ID"/> -- GitLab From cd105374ca469a8588af79391be6d775f6b6523a Mon Sep 17 00:00:00 2001 From: "m.groppe" <m.groppe@adito.de> Date: Tue, 16 Mar 2021 11:50:00 +0100 Subject: [PATCH 011/242] =?UTF-8?q?Liquibase=20fix=20und=20Link=20zu=20sys?= =?UTF-8?q?tem=5Fapplication=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .liquibase/Data_alias/basic/2021.0.2/Bulkmail/changelog.xml | 4 ++++ .../Data_alias/basic/2021.0.2/LinkManagement/changelog.xml | 4 ++-- .../_____SYSTEM_APPLICATION_NEON.aod | 4 ++++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/changelog.xml b/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/changelog.xml index c099a3bb64..147957f5a5 100644 --- a/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/changelog.xml @@ -3,4 +3,8 @@ 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="AlterBulkmail.xml"/> + <include relativeToChangelogFile="true" file="AddBulkmailStatus"/> + <include relativeToChangelogFile="true" file="createMailLog.xml"/> + <include relativeToChangelogFile="true" file="createMailRun.xml"/> + <include relativeToChangelogFile="true" file="createMailOpener.xml"/> </databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.2/LinkManagement/changelog.xml b/.liquibase/Data_alias/basic/2021.0.2/LinkManagement/changelog.xml index d10048e112..7425a6643b 100644 --- a/.liquibase/Data_alias/basic/2021.0.2/LinkManagement/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.0.2/LinkManagement/changelog.xml @@ -1,6 +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="CreateLinkManagement.xml" relativeToChangelogFile="true"/> - <include file="CreateWebtrackingtags.xml" relativeToChangelogFile="true"/> + <include file="CreateLink.xml" relativeToChangelogFile="true"/> + <include file="CreateLinktags.xml" relativeToChangelogFile="true"/> </databaseChangeLog> \ No newline at end of file diff --git a/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod b/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod index 56f31da9f9..e9a0846177 100644 --- a/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod +++ b/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod @@ -192,6 +192,10 @@ <name>DocumentTemplate</name> <kind v="10077" /> </entityNode> + <entityNode> + <name>Link</name> + <kind v="10077" /> + </entityNode> </childNodes> </entityNode> <entityNode> -- GitLab From 8934a5f1a5eb703df085cea1da22a71c8134f82e Mon Sep 17 00:00:00 2001 From: "m.groppe" <m.groppe@adito.de> Date: Tue, 16 Mar 2021 15:42:14 +0100 Subject: [PATCH 012/242] [Projekt: xRM-Marketing][TicketNr.: 1076108][BULKMAIL: Test und Finalisierung geplanter/protokollierter Versand] Fehlerbehebung Mailversand --- .../basic/2021.0.2/Bulkmail/createMailLog.xml | 1 + process/Bulkmail_lib/process.js | 2 +- process/Email_lib/process.js | 2 +- process/sendBulkMail_serverProcess/process.js | 53 ++++++++++--------- .../process.js | 1 - 5 files changed, 30 insertions(+), 29 deletions(-) diff --git a/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/createMailLog.xml b/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/createMailLog.xml index 2506c39080..dcd979f509 100644 --- a/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/createMailLog.xml +++ b/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/createMailLog.xml @@ -13,6 +13,7 @@ <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="FILEPATH" type="VARCHAR(255)"/> </createTable> </changeSet> diff --git a/process/Bulkmail_lib/process.js b/process/Bulkmail_lib/process.js index b62138c8e1..b5dc89b3a3 100644 --- a/process/Bulkmail_lib/process.js +++ b/process/Bulkmail_lib/process.js @@ -49,7 +49,7 @@ BulkMailUtils.sendBulkMailOnServer = function (pBulkMailId, pTestRecipients, pUs testRecipients : JSON.stringify(pTestRecipients), user : pUser || "" }) - .setUser(pUser) + .setUser(pUser||"mailbridge") process.startAsync(processConfig); } diff --git a/process/Email_lib/process.js b/process/Email_lib/process.js index 8f560c533a..00caa4c2fd 100644 --- a/process/Email_lib/process.js +++ b/process/Email_lib/process.js @@ -392,7 +392,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/sendBulkMail_serverProcess/process.js b/process/sendBulkMail_serverProcess/process.js index 7ed237beff..93282080bd 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 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", notification.PRIO_NORMAL, 2, notification.STATE_UNSEEN, [user], message, description); + } \ No newline at end of file diff --git a/process/sendPlannedBulkmails_serverProcess/process.js b/process/sendPlannedBulkmails_serverProcess/process.js index 5ea9a33d28..b3debfd4eb 100644 --- a/process/sendPlannedBulkmails_serverProcess/process.js +++ b/process/sendPlannedBulkmails_serverProcess/process.js @@ -17,7 +17,6 @@ var bulkMailData = newSelect("BULKMAIL.BULKMAILID") .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(); -logging.log(JSON.stringify(bulkMailData)); for (let i = 0; i < bulkMailData.length; i++){ newWhere("BULKMAIL.BULKMAILID", bulkMailData[i]) .updateFields({"STATUS" : $KeywordRegistry.bulkMailStatus$beingSent()}); -- GitLab From 19ceab293f4baa22e19f0e1dae6c11d0ddd2249f Mon Sep 17 00:00:00 2001 From: "a.mayr" <a.mayr@adito.de> Date: Thu, 18 Mar 2021 16:53:23 +0100 Subject: [PATCH 013/242] 1071089 blobHandler JSDoc fehlt --- process/blobHandler/process.js | 38 ++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/process/blobHandler/process.js b/process/blobHandler/process.js index 210e350aff..6092c67687 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); -- GitLab From e06f6975e784dc0ae38b0e6e355257bc271077b8 Mon Sep 17 00:00:00 2001 From: "m.groppe" <m.groppe@adito.de> Date: Mon, 22 Mar 2021 10:23:13 +0100 Subject: [PATCH 014/242] =?UTF-8?q?[Projekt:=20xRM-Marketing][TicketNr.:?= =?UTF-8?q?=201075466][BULKMAIL:=20Redesign=20f=C3=BCr=20=20"Testversand"]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../basic/2021.0.2/Bulkmail/AlterBulkmail.xml | 1 + .../Bulkmail/AlterBulkmailRecipient.xml | 8 + .../basic/2021.0.2/Bulkmail/changelog.xml | 2 + .../Bulkmail/createBulkMailTestRecipient.xml | 13 ++ .../basic/2021.0.2/Bulkmail/createMailRun.xml | 1 + aliasDefinition/Data_alias/Data_alias.aod | 167 ++++++++++++++---- .../AnyContact_entity/AnyContact_entity.aod | 6 + .../recordcontainers/jdito/contentProcess.js | 2 + .../BulkMailRecipient_entity.aod | 28 +++ .../test_recipient/valueProcess.js | 6 + .../removetestrecipient/onActionProcess.js | 9 + .../settestrecipient/onActionProcess.js | 9 + .../BulkMailTestRecipient_entity.aod | 119 +++++++++++++ .../entityfields/bulkmail_id/valueProcess.js | 10 ++ .../contact_id/linkedContextProcess.js | 5 + .../email_address/valueProcess.js | 7 + .../recordcontainers/db/conditionProcess.js | 5 + .../recordcontainers/db/fromClauseProcess.js | 5 + .../contact_id.displayvalue/expression.js | 4 + entity/BulkMail_entity/BulkMail_entity.aod | 17 +- .../children/bulkmailid_param/valueProcess.js | 4 + .../entityfields/testmail/onActionProcess.js | 18 +- entity/MailLog_entity/MailLog_entity.aod | 11 ++ .../recordcontainers/db/orderClauseProcess.js | 4 + .../_____LANGUAGE_EXTRA.aod | 39 +++- .../_____LANGUAGE_de/_____LANGUAGE_de.aod | 33 +++- .../_____LANGUAGE_en/_____LANGUAGE_en.aod | 39 +++- .../BulkMailTestRecipient.aod | 21 +++ .../BulkMailMain_view/BulkMailMain_view.aod | 5 + .../BulkMailPreview_view.aod | 16 -- .../BulkMailRecipientFilter_view.aod | 9 + .../BulkMailTestRecipientEdit_view.aod | 27 +++ .../BulkMailTestRecipientFilter_view.aod | 25 +++ .../MailLogFilter_view/MailLogFilter_view.aod | 8 + process/Bulkmail_lib/process.js | 163 ++++++++++------- process/sendBulkMail_serverProcess/process.js | 6 +- 36 files changed, 719 insertions(+), 133 deletions(-) create mode 100644 .liquibase/Data_alias/basic/2021.0.2/Bulkmail/AlterBulkmailRecipient.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.2/Bulkmail/createBulkMailTestRecipient.xml create mode 100644 entity/BulkMailRecipient_entity/entityfields/test_recipient/valueProcess.js create mode 100644 entity/BulkMailRecipient_entity/entityfields/testrunactions/children/removetestrecipient/onActionProcess.js create mode 100644 entity/BulkMailRecipient_entity/entityfields/testrunactions/children/settestrecipient/onActionProcess.js create mode 100644 entity/BulkMailTestRecipient_entity/BulkMailTestRecipient_entity.aod create mode 100644 entity/BulkMailTestRecipient_entity/entityfields/bulkmail_id/valueProcess.js create mode 100644 entity/BulkMailTestRecipient_entity/entityfields/contact_id/linkedContextProcess.js create mode 100644 entity/BulkMailTestRecipient_entity/entityfields/email_address/valueProcess.js create mode 100644 entity/BulkMailTestRecipient_entity/recordcontainers/db/conditionProcess.js create mode 100644 entity/BulkMailTestRecipient_entity/recordcontainers/db/fromClauseProcess.js create mode 100644 entity/BulkMailTestRecipient_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js create mode 100644 entity/BulkMail_entity/entityfields/bulkmailtestrecipients/children/bulkmailid_param/valueProcess.js create mode 100644 entity/MailLog_entity/recordcontainers/db/orderClauseProcess.js create mode 100644 neonContext/BulkMailTestRecipient/BulkMailTestRecipient.aod create mode 100644 neonView/BulkMailTestRecipientEdit_view/BulkMailTestRecipientEdit_view.aod create mode 100644 neonView/BulkMailTestRecipientFilter_view/BulkMailTestRecipientFilter_view.aod diff --git a/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/AlterBulkmail.xml b/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/AlterBulkmail.xml index 80b392486e..581dfadfd5 100644 --- a/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/AlterBulkmail.xml +++ b/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/AlterBulkmail.xml @@ -4,5 +4,6 @@ <addColumn tableName="BULKMAIL"> <column name="DATE_TO_SEND" type="DATETIME"/> </addColumn> + <renameColumn tableName="BULKMAIL" oldColumnName="SENDER" newColumnName="SENDER_EMAIL_ADDRESS "/> </changeSet> </databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/AlterBulkmailRecipient.xml b/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/AlterBulkmailRecipient.xml new file mode 100644 index 0000000000..b41bb618c6 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/AlterBulkmailRecipient.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="5d43aca9-3344-4b54-981d-73306123e18f"> + <addColumn tableName="BULKMAILRECIPIENT"> + <column name="TEST_RECIPIENT" type="SMALLINT"/> + </addColumn> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/changelog.xml b/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/changelog.xml index 147957f5a5..9e7e286eb6 100644 --- a/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/changelog.xml @@ -7,4 +7,6 @@ <include relativeToChangelogFile="true" file="createMailLog.xml"/> <include relativeToChangelogFile="true" file="createMailRun.xml"/> <include relativeToChangelogFile="true" file="createMailOpener.xml"/> + <include relativeToChangelogFile="true" file="createBulkMailTestRecipient.xml"/> + <include relativeToChangelogFile="true" file="AlterBulkmailRecipient.xml"/> </databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/createBulkMailTestRecipient.xml b/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/createBulkMailTestRecipient.xml new file mode 100644 index 0000000000..da84568e13 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.2/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.2/Bulkmail/createMailRun.xml b/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/createMailRun.xml index b398704262..be6e99e582 100644 --- a/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/createMailRun.xml +++ b/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/createMailRun.xml @@ -8,6 +8,7 @@ <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 defaultValueComputed="NULL" name="DATE_RUN_START" type="datetime"/> <column defaultValueComputed="NULL" name="DATE_RUN_FINISHED" type="datetime"/> diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod index dc134f539f..d940c73fe8 100644 --- a/aliasDefinition/Data_alias/Data_alias.aod +++ b/aliasDefinition/Data_alias/Data_alias.aod @@ -10444,27 +10444,6 @@ </customBooleanProperty> </customProperties> </entityFieldDb> - <entityFieldDb> - <name>SENDER</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>Sender</title> - <description></description> - <customProperties> - <customBooleanProperty> - <name>log</name> - <global v="false" /> - <property v="true" /> - </customBooleanProperty> - </customProperties> - </entityFieldDb> <entityFieldDb> <name>STATUS</name> <dbName></dbName> @@ -10549,6 +10528,34 @@ <title></title> <description></description> </entityFieldDb> + <entityFieldDb> + <name>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> + <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> </entityFields> </entityDb> <entityDb> @@ -10681,6 +10688,20 @@ <title></title> <description></description> </entityFieldDb> + <entityFieldDb> + <name>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> @@ -18998,20 +19019,6 @@ <title></title> <description></description> </entityFieldDb> - <entityFieldDb> - <name>BCC_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> </entityFields> </entityDb> <entityDb> @@ -19130,6 +19137,20 @@ <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> @@ -19424,6 +19445,82 @@ </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> </entities> </entityGroup> </aliasDefDb> diff --git a/entity/AnyContact_entity/AnyContact_entity.aod b/entity/AnyContact_entity/AnyContact_entity.aod index 79b5094c73..ccbe256ca3 100644 --- a/entity/AnyContact_entity/AnyContact_entity.aod +++ b/entity/AnyContact_entity/AnyContact_entity.aod @@ -84,6 +84,12 @@ <fieldName>Contacts</fieldName> <isConsumer v="false" /> </entityDependency> + <entityDependency> + <name>578dbb91-ea76-40ec-9dbd-9acf462ceba7</name> + <entityName>BulkMailTestRecipient_entity</entityName> + <fieldName>Contacts</fieldName> + <isConsumer v="false" /> + </entityDependency> </dependencies> </entityProvider> <entityProvider> diff --git a/entity/Attribute_entity/recordcontainers/jdito/contentProcess.js b/entity/Attribute_entity/recordcontainers/jdito/contentProcess.js index 7e391fd02b..e6eb901856 100644 --- a/entity/Attribute_entity/recordcontainers/jdito/contentProcess.js +++ b/entity/Attribute_entity/recordcontainers/jdito/contentProcess.js @@ -1,3 +1,4 @@ +import("system.logging"); import("Context_lib"); import("system.translate"); import("Util_lib"); @@ -134,6 +135,7 @@ for (let i = 0, l = allNames.length; i < l; i++) var nameCache = {}; var res = _buildAttributeTable(attributes, usages); + logging.log(JSON.stringify(res)); result.object(res); //sorts the records in a way that a tree can be built and adds values diff --git a/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod b/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod index 1d00109008..5cd67de037 100644 --- a/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod +++ b/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod @@ -152,6 +152,30 @@ <name>#PROVIDER_AGGREGATES</name> <useAggregates v="true" /> </entityProvider> + <entityField> + <name>TEST_RECIPIENT</name> + <title>Test</title> + <contentType>BOOLEAN</contentType> + <valueProcess>%aditoprj%/entity/BulkMailRecipient_entity/entityfields/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> </entityFields> <recordContainers> <dbRecordContainer> @@ -224,6 +248,10 @@ <name>PROBLEM.displayValue</name> <expression>%aditoprj%/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/problem.displayvalue/expression.js</expression> </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>TEST_RECIPIENT.value</name> + <recordfield>BULKMAILRECIPIENT.TEST_RECIPIENT</recordfield> + </dbRecordFieldMapping> </recordFieldMappings> <linkInformation> <linkInformation> diff --git a/entity/BulkMailRecipient_entity/entityfields/test_recipient/valueProcess.js b/entity/BulkMailRecipient_entity/entityfields/test_recipient/valueProcess.js new file mode 100644 index 0000000000..a435bfbd63 --- /dev/null +++ b/entity/BulkMailRecipient_entity/entityfields/test_recipient/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(0); \ 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 0000000000..96f7a462b0 --- /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", ["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 0000000000..bdcb19753b --- /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", ["TEST_RECIPIENT"], null, [1]); + +neon.refreshAll(); + \ 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 0000000000..8181a5415a --- /dev/null +++ b/entity/BulkMailTestRecipient_entity/BulkMailTestRecipient_entity.aod @@ -0,0 +1,119 @@ +<?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>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> + <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> + <dependencies> + <entityDependency> + <name>bf4102ef-e33c-4bdc-b62d-844f466f8617</name> + <entityName>BulkMail_entity</entityName> + <fieldName>BulkMailTestRecipients</fieldName> + <isConsumer v="false" /> + </entityDependency> + </dependencies> + </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 0000000000..cea362d78f --- /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 0000000000..2e48676daf --- /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/valueProcess.js b/entity/BulkMailTestRecipient_entity/entityfields/email_address/valueProcess.js new file mode 100644 index 0000000000..c55cc06cb7 --- /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 0000000000..52cfaea96c --- /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 0000000000..b281df21b6 --- /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 0000000000..35781ff56c --- /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/BulkMail_entity/BulkMail_entity.aod b/entity/BulkMail_entity/BulkMail_entity.aod index 543eb8d24f..5f36bbf278 100644 --- a/entity/BulkMail_entity/BulkMail_entity.aod +++ b/entity/BulkMail_entity/BulkMail_entity.aod @@ -55,6 +55,7 @@ </entityField> <entityConsumer> <name>Recipients</name> + <selectionMode>MULTI</selectionMode> <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/recipients/stateProcess.js</stateProcess> <dependency> <name>dependency</name> @@ -349,6 +350,20 @@ </entityParameter> </children> </entityConsumer> + <entityConsumer> + <name>BulkMailTestRecipients</name> + <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> </entityFields> <recordContainers> <dbRecordContainer> @@ -388,7 +403,7 @@ </dbRecordFieldMapping> <dbRecordFieldMapping> <name>SENDER.value</name> - <recordfield>BULKMAIL.SENDER</recordfield> + <recordfield>BULKMAIL.SENDER_EMAIL_ADDRESS</recordfield> <isFilterable v="true" /> <isLookupFilter v="false" /> </dbRecordFieldMapping> 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 0000000000..2a12b8389b --- /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/testmail/onActionProcess.js b/entity/BulkMail_entity/entityfields/testmail/onActionProcess.js index 3845e37453..586f9b6441 100644 --- a/entity/BulkMail_entity/entityfields/testmail/onActionProcess.js +++ b/entity/BulkMail_entity/entityfields/testmail/onActionProcess.js @@ -4,14 +4,16 @@ 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"); +//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") +// }); -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/MailLog_entity/MailLog_entity.aod b/entity/MailLog_entity/MailLog_entity.aod index b604213690..11f79c4f33 100644 --- a/entity/MailLog_entity/MailLog_entity.aod +++ b/entity/MailLog_entity/MailLog_entity.aod @@ -120,12 +120,18 @@ <fieldName>#PROVIDER</fieldName> </dependency> </entityConsumer> + <entityField> + <name>TESTRUN</name> + <title>Test Run</title> + <contentType>BOOLEAN</contentType> + </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> @@ -192,6 +198,11 @@ <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> </recordFieldMappings> <linkInformation> <linkInformation> diff --git a/entity/MailLog_entity/recordcontainers/db/orderClauseProcess.js b/entity/MailLog_entity/recordcontainers/db/orderClauseProcess.js new file mode 100644 index 0000000000..294f3ffbb2 --- /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/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index d35d3c48cf..d05f06fb7e 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -8100,9 +8100,6 @@ <entry> <key>Traits have already been defined for this salesproject phase.</key> </entry> - <entry> - <key>Participant is already participating</key> - </entry> <entry> <key>Event Data</key> </entry> @@ -8130,6 +8127,42 @@ <entry> <key>On site</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> + </entry> + <entry> + <key>Test Recipient</key> + </entry> + <entry> + <key>Remove Test Recipient</key> + </entry> + <entry> + <key>Set Test Recipient</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 4884e4d332..0a37ce21a9 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -10,6 +10,14 @@ <key>Event End</key> <value>Veranstaltungs Ende</value> </entry> + <entry> + <key>Use for test run</key> + <value>Beir Testversand verwenden</value> + </entry> + <entry> + <key>Set Test Recipient</key> + <value>Testempfänger setzen</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> @@ -54,6 +62,10 @@ <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> @@ -3334,6 +3346,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> @@ -8320,6 +8336,7 @@ Bitte Datumseingabe prüfen</value> </entry> <entry> <key>Automatically</key> + <value>Automatisch</value> </entry> <entry> <key>Templatename</key> @@ -9664,10 +9681,18 @@ 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> @@ -10273,6 +10298,10 @@ 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>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> @@ -10725,10 +10754,6 @@ Bitte Datumseingabe prüfen</value> <key>Traits have already been defined for this salesproject phase.</key> <value>Für diese Vertriebsprojektphase wurden schon Merkmale festgelegt.</value> </entry> - <entry> - <key>Automatically</key> - <value>Automatisch</value> - </entry> <entry> <key>On site</key> </entry> diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod index cfb375a5cb..ba0779e245 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -8202,15 +8202,48 @@ <entry> <key>Traits have already been defined for this salesproject phase.</key> </entry> - <entry> - <key>Participant is already participating</key> - </entry> <entry> <key>On Site</key> </entry> <entry> <key>New child product</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> + </entry> + <entry> + <key>Test Recipient</key> + </entry> + <entry> + <key>Remove Test Recipient</key> + </entry> + <entry> + <key>Set Test Recipient</key> + </entry> </keyValueMap> <font name="Dialog" style="0" size="11" /> </language> diff --git a/neonContext/BulkMailTestRecipient/BulkMailTestRecipient.aod b/neonContext/BulkMailTestRecipient/BulkMailTestRecipient.aod new file mode 100644 index 0000000000..5c35bf72c9 --- /dev/null +++ b/neonContext/BulkMailTestRecipient/BulkMailTestRecipient.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>BulkMailTestRecipient</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterView>BulkMailTestRecipientFilter_view</filterView> + <editView>BulkMailTestRecipientEdit_view</editView> + <entity>BulkMailTestRecipient_entity</entity> + <references> + <neonViewReference> + <name>c9330ab3-e805-4dbb-8360-4767a966ae3a</name> + </neonViewReference> + <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/neonView/BulkMailMain_view/BulkMailMain_view.aod b/neonView/BulkMailMain_view/BulkMailMain_view.aod index 81cdfe7c50..f47bc71ab7 100644 --- a/neonView/BulkMailMain_view/BulkMailMain_view.aod +++ b/neonView/BulkMailMain_view/BulkMailMain_view.aod @@ -29,6 +29,11 @@ <entityField>MailLogs</entityField> <view>MailLogFilter_view</view> </neonViewReference> + <neonViewReference> + <name>f78d044a-6246-49c0-a72c-03f54fc90fd2</name> + <entityField>BulkMailTestRecipients</entityField> + <view>BulkMailTestRecipientFilter_view</view> + </neonViewReference> <neonViewReference> <name>49eb2dd2-0df9-4b58-bdae-f941200be8d9</name> <entityField>LogHistories</entityField> diff --git a/neonView/BulkMailPreview_view/BulkMailPreview_view.aod b/neonView/BulkMailPreview_view/BulkMailPreview_view.aod index bb7f21000f..db906f7eb3 100644 --- a/neonView/BulkMailPreview_view/BulkMailPreview_view.aod +++ b/neonView/BulkMailPreview_view/BulkMailPreview_view.aod @@ -57,22 +57,6 @@ </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> - </entityFieldLink> - <entityFieldLink> - <name>f8963199-c89b-48e5-a92c-8f655c05acab</name> - <entityField>TESTING_EMAIL_ADDRESS</entityField> - </entityFieldLink> - </fields> - </genericViewTemplate> <neonViewReference> <name>23ab3cb7-2d15-467d-8bd1-536ddd6262c7</name> <entityField>RecipientStatusChart</entityField> diff --git a/neonView/BulkMailRecipientFilter_view/BulkMailRecipientFilter_view.aod b/neonView/BulkMailRecipientFilter_view/BulkMailRecipientFilter_view.aod index 9727da8fb7..3c9a42908a 100644 --- a/neonView/BulkMailRecipientFilter_view/BulkMailRecipientFilter_view.aod +++ b/neonView/BulkMailRecipientFilter_view/BulkMailRecipientFilter_view.aod @@ -15,6 +15,7 @@ <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>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>TEST_RECIPIENT</entityField> + </neonTreeTableColumn> <neonTreeTableColumn> <name>c904c6c0-b2e8-4192-a952-d4f1f6612dee</name> <entityField>STATUS</entityField> diff --git a/neonView/BulkMailTestRecipientEdit_view/BulkMailTestRecipientEdit_view.aod b/neonView/BulkMailTestRecipientEdit_view/BulkMailTestRecipientEdit_view.aod new file mode 100644 index 0000000000..f028be39b7 --- /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 0000000000..2ba06b2205 --- /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/MailLogFilter_view/MailLogFilter_view.aod b/neonView/MailLogFilter_view/MailLogFilter_view.aod index d949db88e1..9c87d39051 100644 --- a/neonView/MailLogFilter_view/MailLogFilter_view.aod +++ b/neonView/MailLogFilter_view/MailLogFilter_view.aod @@ -29,6 +29,10 @@ <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> @@ -59,6 +63,10 @@ <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> diff --git a/process/Bulkmail_lib/process.js b/process/Bulkmail_lib/process.js index b5dc89b3a3..0dd21a6b16 100644 --- a/process/Bulkmail_lib/process.js +++ b/process/Bulkmail_lib/process.js @@ -30,14 +30,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(); @@ -46,7 +46,7 @@ BulkMailUtils.sendBulkMailOnServer = function (pBulkMailId, pTestRecipients, pUs .setName("sendBulkMail_serverProcess") .setLocalVariables({ bulkMailId : pBulkMailId, - testRecipients : JSON.stringify(pTestRecipients), + testRun : pTestRun, user : pUser || "" }) .setUser(pUser||"mailbridge") @@ -59,15 +59,15 @@ 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} pTestRun (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, pTestRun) { 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(); @@ -76,12 +76,22 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pTestRecipients) var template = BulkMailUtils.getBulkMailTemplate(pBulkMailId, templateId, true, useTemplateAttachments); var recipientData; - if (pTestRecipients) + var testRecipientData; + + if (pTestRun) { - recipientData = pTestRecipients.map(function (row) - { - return ["", row[0], row[1], "", ""]; - }); + 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.TEST_RECIPIENT",1) + .table(); + + testRecipientData = newSelect("BULKMAILTESTRECIPIENT.CONTACT_ID, BULKMAILTESTRECIPIENT.EMAIL_ADDRESS") + .from("BULKMAILTESTRECIPIENT") + .where("BULKMAILTESTRECIPIENT.BULKMAIL_ID",pBulkMailId) + .table(); + } else { @@ -95,8 +105,8 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pTestRecipients) } var mailrunId = util.getNewUUID(); - if (!pTestRecipients) - db.insertData("MAIL_RUN", ["MAIL_RUNID","OBJECT_ROWID","OBJECT_TYPE","DATE_RUN_START","STATUS"], null, [mailrunId,pBulkMailId,"BULKMAIL",vars.get("$sys.date"),$KeywordRegistry.bulkMailStatus$beingSent()]); + + db.insertData("MAIL_RUN", ["MAIL_RUNID","OBJECT_ROWID","OBJECT_TYPE","DATE_RUN_START","STATUS","TESTRUN"], null, [mailrunId,pBulkMailId,"BULKMAIL",vars.get("$sys.date"),$KeywordRegistry.bulkMailStatus$beingSent(),(pTestRun?1:0)]); var contactIds = recipientData.map(function (e) {return e[1];}); @@ -110,62 +120,95 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pTestRecipients) var bulkMailLink = [["BulkMail", pBulkMailId]]; var activitySubject = translate.withArguments("Bulk mail \"%0\" sent", [bulkMailName]); - - for (let i = 0, l = recipientData.length; i < l; i++) - { + if (!pTestRun){ + for (let i = 0, l = recipientData.length; i < l; i++) + + { - let isSuccess = false; - let contactId = recipientData[i][1]; - let email = mails[contactId]; - let mailLogId = util.getNewUUID(); - if (email !== undefined && recipientData[i][2]) - { - email.toRecipients = [recipientData[i][2]]; - email.sender = emailSender; - email.subject = subjects[contactId]; + let isSuccess = false; + let contactId = recipientData[i][1]; + let email = mails[contactId]; + let mailLogId = util.getNewUUID(); + if (email !== undefined && recipientData[i][2]) + { + email.toRecipients = [recipientData[i][2]]; + email.sender = emailSender; + email.subject = subjects[contactId]; - if (!pTestRecipients) - this.storeEmlFile(pBulkMailId, mailrunId, mailLogId,email.getEML()); - isSuccess = email.send(); - } + + this.storeEmlFile(pBulkMailId, mailrunId, mailLogId,email.getEML()); + isSuccess = email.send(); + } - if (recipientData[i][0]) //set the recipient status to 'sent' or 'failed' - { + if (recipientData[i][0]) //set the recipient status to 'sent' or 'failed' + { - db.insertData("MAIL_LOG", ["MAIL_LOGID","MAIL_RUN_ID","CONTACT_ID","STATUS","SENDER_EMAIL","RECIPIENT_EMAIL","MAILING_SUBJECT","DATE_SEND"], null, [mailLogId,mailrunId,contactId,(isSuccess ?$KeywordRegistry.bulkMailRecipientStatus$sent(): $KeywordRegistry.bulkMailRecipientStatus$failed()),emailSender,recipientData[i][2],subjects[contactId],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, recipientData[i][0]); - if (isSuccess && createActivity == "1") - { - let activityData = { - categoryKeywordId : $KeywordRegistry.activityCategory$mail(), - directionKeywordId : $KeywordRegistry.activityDirection$outgoing(), - subject : activitySubject, - content : email.body - }; - let contactLink = [[ContactUtils.getContextByPersOrg(recipientData[i][3], recipientData[i][4]), recipientData[i][1]]]; - ActivityUtils.insertNewActivity(activityData, bulkMailLink.concat(contactLink)); + db.insertData("MAIL_LOG", ["MAIL_LOGID","MAIL_RUN_ID","CONTACT_ID","STATUS","SENDER_EMAIL","RECIPIENT_EMAIL","MAILING_SUBJECT","DATE_SEND"], null, [mailLogId,mailrunId,contactId,(isSuccess ?$KeywordRegistry.bulkMailRecipientStatus$sent(): $KeywordRegistry.bulkMailRecipientStatus$failed()),emailSender,recipientData[i][2],subjects[contactId],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, recipientData[i][0]); + if (isSuccess && createActivity == "1") + { + let activityData = { + categoryKeywordId : $KeywordRegistry.activityCategory$mail(), + directionKeywordId : $KeywordRegistry.activityDirection$outgoing(), + subject : activitySubject, + content : email.body + }; + let contactLink = [[ContactUtils.getContextByPersOrg(recipientData[i][3], recipientData[i][4]), recipientData[i][1]]]; + ActivityUtils.insertNewActivity(activityData, bulkMailLink.concat(contactLink)); + } + } } - } - } - newWhereIfSet("BULKMAILRECIPIENT.BULKMAILRECIPIENTID", successIds, SqlBuilder.IN()) - .updateData(true, "BULKMAILRECIPIENT", ["STATUS", "SENTDATE"], null, [$KeywordRegistry.bulkMailRecipientStatus$sent(), sentDate]); + 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]); + 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 - { - newWhere("MAIL_RUN.MAIL_RUNID",mailrunId) - .updateData(true,"MAIL_RUN",["STATUS","DATE_RUN_FINISHED"],null,[$KeywordRegistry.bulkMailStatus$sent(),vars.get("$sys.date")]); - - newWhere("BULKMAIL.BULKMAILID", pBulkMailId) + newWhere("MAIL_RUN.MAIL_RUNID",mailrunId) + .updateData(true,"MAIL_RUN",["STATUS","DATE_RUN_FINISHED"],null,[$KeywordRegistry.bulkMailStatus$sent(),vars.get("$sys.date")]); + + + newWhere("BULKMAIL.BULKMAILID", pBulkMailId) .updateData(true, "BULKMAIL", ["STATUS"], null, [$KeywordRegistry.bulkMailStatus$sent()]); - } + + }else{ + for (let i = 0, l = recipientData.length; i < l; i++){ + let isSuccess = false; + let contactId = recipientData[i][1]; + let email = mails[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]]; + isSuccess = email.send(); + + Array.prototype.push.call(isSuccess ? successIds : failedIds, recipientData[i][0]); + + if(testRecipientData[j][0]){ + let mailLogId = util.getNewUUID(); + db.insertData("MAIL_LOG", ["MAIL_LOGID","MAIL_RUN_ID","CONTACT_ID","STATUS","SENDER_EMAIL","RECIPIENT_EMAIL","MAILING_SUBJECT","DATE_SEND"], null, [mailLogId,mailrunId,testRecipientData[j][0],(isSuccess ?$KeywordRegistry.bulkMailRecipientStatus$sent(): $KeywordRegistry.bulkMailRecipientStatus$failed()),emailSender,testRecipientData[j][1],email.subject,vars.get("$sys.date")]); + this.storeEmlFile(pBulkMailId, mailrunId, mailLogId,email.getEML()); + } + } + } + + + + + + + } + } + } return { sucessful : successIds.length, diff --git a/process/sendBulkMail_serverProcess/process.js b/process/sendBulkMail_serverProcess/process.js index 93282080bd..2d1640fa68 100644 --- a/process/sendBulkMail_serverProcess/process.js +++ b/process/sendBulkMail_serverProcess/process.js @@ -10,10 +10,10 @@ 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); +var testRun= vars.get("$local.testRun"); +var res = BulkMailUtils.sendBulkMail(bulkMailId, testRun); -if (user && !testRecipients) +if (user && !testRun) { var mailName = newSelect("NAME") .from("BULKMAIL") -- GitLab From 09941badc097acbf3f47b261933d8f28fa960e7b Mon Sep 17 00:00:00 2001 From: "m.groppe" <m.groppe@adito.de> Date: Mon, 22 Mar 2021 12:47:25 +0100 Subject: [PATCH 015/242] [Projekt: xRM-Marketing][TicketNr.: 1075590][LINK: Personalisierung / Ersetzung der LINK-Identifier] --- .../basic/2021.0.2/LinkManagement/CreateLink.xml | 1 + aliasDefinition/Data_alias/Data_alias.aod | 14 ++++++++++++++ entity/Link_entity/Link_entity.aod | 11 +++++++++++ .../placeholder/displayValueProcess.js | 9 +++++++++ .../entityfields/placeholder/onValidation.js | 15 +++++++++++++++ .../entityfields/placeholder/stateProcess.js | 12 ++++++++++++ neonView/LinkEdit_view/LinkEdit_view.aod | 4 ++++ neonView/LinkPreview_view/LinkPreview_view.aod | 4 ++++ process/Bulkmail_lib/process.js | 13 +++++++------ process/DocumentTemplate_lib/process.js | 2 +- process/KeywordRegistry_basic/process.js | 5 ++++- process/Placeholder_lib/process.js | 16 ++++++++++++++++ 12 files changed, 98 insertions(+), 8 deletions(-) create mode 100644 entity/Link_entity/entityfields/placeholder/displayValueProcess.js create mode 100644 entity/Link_entity/entityfields/placeholder/onValidation.js create mode 100644 entity/Link_entity/entityfields/placeholder/stateProcess.js diff --git a/.liquibase/Data_alias/basic/2021.0.2/LinkManagement/CreateLink.xml b/.liquibase/Data_alias/basic/2021.0.2/LinkManagement/CreateLink.xml index 95de8ed7f9..ee8b19525d 100644 --- a/.liquibase/Data_alias/basic/2021.0.2/LinkManagement/CreateLink.xml +++ b/.liquibase/Data_alias/basic/2021.0.2/LinkManagement/CreateLink.xml @@ -9,6 +9,7 @@ </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"/> diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod index d940c73fe8..9316a9d5f3 100644 --- a/aliasDefinition/Data_alias/Data_alias.aod +++ b/aliasDefinition/Data_alias/Data_alias.aod @@ -18651,6 +18651,20 @@ <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> </entityFields> </entityDb> <entityDb> diff --git a/entity/Link_entity/Link_entity.aod b/entity/Link_entity/Link_entity.aod index f077232774..2a32a4d8f2 100644 --- a/entity/Link_entity/Link_entity.aod +++ b/entity/Link_entity/Link_entity.aod @@ -91,6 +91,13 @@ </entityParameter> </children> </entityConsumer> + <entityField> + <name>PLACEHOLDER</name> + <title>Placeholder</title> + <stateProcess>%aditoprj%/entity/Link_entity/entityfields/placeholder/stateProcess.js</stateProcess> + <displayValueProcess>%aditoprj%/entity/Link_entity/entityfields/placeholder/displayValueProcess.js</displayValueProcess> + <onValidation>%aditoprj%/entity/Link_entity/entityfields/placeholder/onValidation.js</onValidation> + </entityField> </entityFields> <recordContainers> <dbRecordContainer> @@ -141,6 +148,10 @@ <name>LINKTYPE.displayValue</name> <expression>%aditoprj%/entity/Link_entity/recordcontainers/db/recordfieldmappings/urltype.displayvalue/expression.js</expression> </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>PLACEHOLDER.value</name> + <recordfield>LINK.PLACEHOLDER</recordfield> + </dbRecordFieldMapping> </recordFieldMappings> <linkInformation> <linkInformation> diff --git a/entity/Link_entity/entityfields/placeholder/displayValueProcess.js b/entity/Link_entity/entityfields/placeholder/displayValueProcess.js new file mode 100644 index 0000000000..c497bcfcca --- /dev/null +++ b/entity/Link_entity/entityfields/placeholder/displayValueProcess.js @@ -0,0 +1,9 @@ +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/Link_entity/entityfields/placeholder/onValidation.js b/entity/Link_entity/entityfields/placeholder/onValidation.js new file mode 100644 index 0000000000..fc499ca653 --- /dev/null +++ b/entity/Link_entity/entityfields/placeholder/onValidation.js @@ -0,0 +1,15 @@ +import("system.result"); +import("system.vars"); +import("Placeholder_lib"); +import("Sql_lib"); + +if (vars.get("$local.value")){ + var LinkPlaceholders = PlaceholderUtils.getPlaceholders().concat(PlaceholderUtils.getLinkPlaceholders()); + + if (LinkPlaceholders.map(function(a){ + return a.placeholderName + }).indexOf(vars.get("$local.value"))!= -1){ + result.string("Placeholders must be unique") + } + +} \ No newline at end of file diff --git a/entity/Link_entity/entityfields/placeholder/stateProcess.js b/entity/Link_entity/entityfields/placeholder/stateProcess.js new file mode 100644 index 0000000000..a4e4097c36 --- /dev/null +++ b/entity/Link_entity/entityfields/placeholder/stateProcess.js @@ -0,0 +1,12 @@ +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.linkType$EMail()){ + res = neon.COMPONENTSTATE_EDITABLE; +} +result.string(res); \ No newline at end of file diff --git a/neonView/LinkEdit_view/LinkEdit_view.aod b/neonView/LinkEdit_view/LinkEdit_view.aod index 92b9ef67bc..85fe373563 100644 --- a/neonView/LinkEdit_view/LinkEdit_view.aod +++ b/neonView/LinkEdit_view/LinkEdit_view.aod @@ -27,6 +27,10 @@ <name>836aafd9-a8c3-4a7c-9b2c-260ec8bbee45</name> <entityField>SCORE</entityField> </entityFieldLink> + <entityFieldLink> + <name>4313c2fb-3551-4c66-81c9-ad950c44a105</name> + <entityField>PLACEHOLDER</entityField> + </entityFieldLink> </fields> </genericViewTemplate> <neonViewReference> diff --git a/neonView/LinkPreview_view/LinkPreview_view.aod b/neonView/LinkPreview_view/LinkPreview_view.aod index ee82135862..b6a5566afb 100644 --- a/neonView/LinkPreview_view/LinkPreview_view.aod +++ b/neonView/LinkPreview_view/LinkPreview_view.aod @@ -24,6 +24,10 @@ <name>611eb710-9f52-4826-a40c-282b6ac6daab</name> <entityField>Tags</entityField> </entityFieldLink> + <entityFieldLink> + <name>92bb0227-5418-4a61-a7cd-eccc8def83f9</name> + <entityField>PLACEHOLDER</entityField> + </entityFieldLink> </fields> </genericViewTemplate> </children> diff --git a/process/Bulkmail_lib/process.js b/process/Bulkmail_lib/process.js index 0dd21a6b16..79427698a5 100644 --- a/process/Bulkmail_lib/process.js +++ b/process/Bulkmail_lib/process.js @@ -177,6 +177,7 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pTestRun) }else{ for (let i = 0, l = recipientData.length; i < l; i++){ + logging.log("here"); let isSuccess = false; let contactId = recipientData[i][1]; let email = mails[contactId]; @@ -184,6 +185,8 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pTestRun) if (email !== undefined) { + logging.log("email not undefined"); + logging.log(JSON.stringify(testRecipientData)); email.sender = emailSender; email.subject = "Test: "+subjects[contactId]; for (let j =0; j<testRecipientData.length;j++){ @@ -200,14 +203,12 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pTestRun) } } } - - - - - - + } } + newWhere("MAIL_RUN.MAIL_RUNID",mailrunId) + .updateData(true,"MAIL_RUN",["STATUS","DATE_RUN_FINISHED"],null,[$KeywordRegistry.bulkMailStatus$sent(),vars.get("$sys.date")]); + } return { diff --git a/process/DocumentTemplate_lib/process.js b/process/DocumentTemplate_lib/process.js index 5fef12bb28..2d2c94f233 100644 --- a/process/DocumentTemplate_lib/process.js +++ b/process/DocumentTemplate_lib/process.js @@ -555,7 +555,7 @@ DocumentTemplate.prototype.getReplacedEmailsByContactIds = function (pContactIds var emailObjects = {}; var isEML = this.type == DocumentTemplate.types.EML; this.setOptions({base64 : isEML}); - var emailContents = this.getReplacedContentByContactIds(pContactIds, pAdditionalPlaceholders); + var emailContents = this.getReplacedContentByContactIds(pContactIds, PlaceholderUtils.getLinkPlaceholders()); for (let contactId in emailContents) { diff --git a/process/KeywordRegistry_basic/process.js b/process/KeywordRegistry_basic/process.js index dc973bea9f..cb1d640fc9 100644 --- a/process/KeywordRegistry_basic/process.js +++ b/process/KeywordRegistry_basic/process.js @@ -365,4 +365,7 @@ $KeywordRegistry.communicationChannelType = function(){return "CommunicationChan $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";}; \ No newline at end of file +$KeywordRegistry.communicationChannelType$address = function(){return "COMMUNICATIONCHANNEL_ADDRESS";}; + +$KeywordRegistry.linkType = function(){return "LINKTYPE";}; +$KeywordRegistry.linkType$EMail = function() {return "EMAIL"}; diff --git a/process/Placeholder_lib/process.js b/process/Placeholder_lib/process.js index a162fc7ee5..9537a85536 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("LINK.PLACEHOLDER,LINK.URL") + .from("LINK") + .where("LINK.LINKTYPE", $KeywordRegistry.linkType$EMail()) + .and("LINK.PLACEHOLDER IS NOT NULL") + .table(); + + return links.map(function(a){ return new Placeholder(a[0], Placeholder.types.FIXEDVALUE, a[1])}); +} + /** * object representing a placeholder * -- GitLab From 9a63d7a9e4bc25948e61c0fa0773f2b8ff6fd131 Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Fri, 26 Mar 2021 16:10:10 +0100 Subject: [PATCH 016/242] Interest_entity implementation --- .../basic/2021.0.2/Interest/changelog.xml | 9 + .../2021.0.2/Interest/create_interest.xml | 16 ++ .../2021.0.2/Interest/create_interestLink.xml | 21 ++ .../Interest/create_interestUnsubscribe.xml | 13 ++ .../insert_interestLinkStatusKeyword.xml | 34 +++ .../Interest/insert_interestStatusKeyword.xml | 33 +++ .../Data_alias/basic/2021.0.2/changelog.xml | 3 +- aliasDefinition/Data_alias/Data_alias.aod | 194 ++++++++++++++++++ .../_____SYSTEM_APPLICATION_NEON.aod | 4 + .../InterestLink_entity.aod | 134 ++++++++++++ .../entityfields/contact_id/valueProcess.js | 6 + .../interest_id/displayValueProcess.js | 5 + .../status/displayValueProcess.js | 6 + .../entityfields/status/valueProcess.js | 7 + .../containername_param/valueProcess.js | 4 + .../recordcontainers/db/conditionProcess.js | 6 + .../recordcontainers/db/fromClauseProcess.js | 8 + .../status.displayvalue/expression.js | 5 + entity/Interest_entity/Interest_entity.aod | 115 +++++++++++ .../contentDescriptionProcess.js | 4 + entity/Interest_entity/contentTitleProcess.js | 4 + .../status/displayValueProcess.js | 6 + .../entityfields/status/valueProcess.js | 7 + .../containername_param/valueProcess.js | 4 + .../status.displayvalue/expression.js | 5 + .../KeywordEntry_entity.aod | 12 ++ entity/Person_entity/Person_entity.aod | 14 ++ .../children/contactid_param/valueProcess.js | 4 + .../_____LANGUAGE_EXTRA.aod | 51 ++--- .../_____LANGUAGE_de/_____LANGUAGE_de.aod | 24 +++ .../_____LANGUAGE_en/_____LANGUAGE_en.aod | 27 ++- .../CommunicationBlacklist.aod | 5 + neonContext/Interest/Interest.aod | 24 +++ neonContext/InterestLink/InterestLink.aod | 22 ++ .../InterestEdit_view/InterestEdit_view.aod | 35 ++++ .../InterestFilter_view.aod | 34 +++ .../InterestLinkDrawer_view.aod | 19 ++ .../InterestLinkEdit_view.aod | 27 +++ .../InterestLinkFilter_view.aod | 30 +++ .../InterestLookup_view.aod | 25 +++ .../PersonMarketing_view.aod | 5 + process/KeywordRegistry_basic/process.js | 8 + .../MarketingCondition_lib.aod | 9 + process/MarketingCondition_lib/process.js | 13 ++ 44 files changed, 997 insertions(+), 44 deletions(-) create mode 100644 .liquibase/Data_alias/basic/2021.0.2/Interest/changelog.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.2/Interest/create_interest.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.2/Interest/create_interestLink.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.2/Interest/create_interestUnsubscribe.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.2/Interest/insert_interestLinkStatusKeyword.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.2/Interest/insert_interestStatusKeyword.xml create mode 100644 entity/InterestLink_entity/InterestLink_entity.aod create mode 100644 entity/InterestLink_entity/entityfields/contact_id/valueProcess.js create mode 100644 entity/InterestLink_entity/entityfields/interest_id/displayValueProcess.js create mode 100644 entity/InterestLink_entity/entityfields/status/displayValueProcess.js create mode 100644 entity/InterestLink_entity/entityfields/status/valueProcess.js create mode 100644 entity/InterestLink_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js create mode 100644 entity/InterestLink_entity/recordcontainers/db/conditionProcess.js create mode 100644 entity/InterestLink_entity/recordcontainers/db/fromClauseProcess.js create mode 100644 entity/InterestLink_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js create mode 100644 entity/Interest_entity/Interest_entity.aod create mode 100644 entity/Interest_entity/contentDescriptionProcess.js create mode 100644 entity/Interest_entity/contentTitleProcess.js create mode 100644 entity/Interest_entity/entityfields/status/displayValueProcess.js create mode 100644 entity/Interest_entity/entityfields/status/valueProcess.js create mode 100644 entity/Interest_entity/entityfields/statuskeyword/children/containername_param/valueProcess.js create mode 100644 entity/Interest_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js create mode 100644 entity/Person_entity/entityfields/interestlinks/children/contactid_param/valueProcess.js create mode 100644 neonContext/CommunicationBlacklist/CommunicationBlacklist.aod create mode 100644 neonContext/Interest/Interest.aod create mode 100644 neonContext/InterestLink/InterestLink.aod create mode 100644 neonView/InterestEdit_view/InterestEdit_view.aod create mode 100644 neonView/InterestFilter_view/InterestFilter_view.aod create mode 100644 neonView/InterestLinkDrawer_view/InterestLinkDrawer_view.aod create mode 100644 neonView/InterestLinkEdit_view/InterestLinkEdit_view.aod create mode 100644 neonView/InterestLinkFilter_view/InterestLinkFilter_view.aod create mode 100644 neonView/InterestLookup_view/InterestLookup_view.aod create mode 100644 process/MarketingCondition_lib/MarketingCondition_lib.aod create mode 100644 process/MarketingCondition_lib/process.js diff --git a/.liquibase/Data_alias/basic/2021.0.2/Interest/changelog.xml b/.liquibase/Data_alias/basic/2021.0.2/Interest/changelog.xml new file mode 100644 index 0000000000..5d964ae108 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.2/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.2/Interest/create_interest.xml b/.liquibase/Data_alias/basic/2021.0.2/Interest/create_interest.xml new file mode 100644 index 0000000000..811ce863da --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.2/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.2/Interest/create_interestLink.xml b/.liquibase/Data_alias/basic/2021.0.2/Interest/create_interestLink.xml new file mode 100644 index 0000000000..38e31408a9 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.2/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.2/Interest/create_interestUnsubscribe.xml b/.liquibase/Data_alias/basic/2021.0.2/Interest/create_interestUnsubscribe.xml new file mode 100644 index 0000000000..63c2dcad95 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.2/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.2/Interest/insert_interestLinkStatusKeyword.xml b/.liquibase/Data_alias/basic/2021.0.2/Interest/insert_interestLinkStatusKeyword.xml new file mode 100644 index 0000000000..8de05d4b75 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.2/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.2/Interest/insert_interestStatusKeyword.xml b/.liquibase/Data_alias/basic/2021.0.2/Interest/insert_interestStatusKeyword.xml new file mode 100644 index 0000000000..28f0b1fb5f --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.2/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.2/changelog.xml b/.liquibase/Data_alias/basic/2021.0.2/changelog.xml index 421fc9b22e..53aa034099 100644 --- a/.liquibase/Data_alias/basic/2021.0.2/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.0.2/changelog.xml @@ -4,8 +4,7 @@ <include relativeToChangelogFile="true" file="Event/changelog.xml"/> <include relativeToChangelogFile="true" file="alter_CompetitionExpandReasonSize.xml"/> <include relativeToChangelogFile="true" file="Checklists/changelog.xml"/> - <include relativeToChangelogFile="true" file="LinkManagement/changelog.xml"/> - <include relativeToChangelogFile="true" file="Bulkmail/changelog.xml"/> <include relativeToChangelogFile="true" file="CommunicationSettings/changelog.xml"/> <include relativeToChangelogFile="true" file="change_SalesprojectMemberRole.xml"/> + <include relativeToChangelogFile="true" file="Interest/changelog.xml"/> </databaseChangeLog> \ No newline at end of file diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod index 9316a9d5f3..70a35bfc8c 100644 --- a/aliasDefinition/Data_alias/Data_alias.aod +++ b/aliasDefinition/Data_alias/Data_alias.aod @@ -19535,6 +19535,200 @@ </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>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="false" /> + <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>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> </entities> </entityGroup> </aliasDefDb> diff --git a/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod b/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod index e9a0846177..7af92c5374 100644 --- a/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod +++ b/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod @@ -196,6 +196,10 @@ <name>Link</name> <kind v="10077" /> </entityNode> + <entityNode> + <name>Interest</name> + <kind v="10077" /> + </entityNode> </childNodes> </entityNode> <entityNode> diff --git a/entity/InterestLink_entity/InterestLink_entity.aod b/entity/InterestLink_entity/InterestLink_entity.aod new file mode 100644 index 0000000000..7f4c396f06 --- /dev/null +++ b/entity/InterestLink_entity/InterestLink_entity.aod @@ -0,0 +1,134 @@ +<?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>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> + <dependencies> + <entityDependency> + <name>97de1501-3646-475b-bf3c-2fec20843ee4</name> + <entityName>Person_entity</entityName> + <fieldName>InterestLinks</fieldName> + <isConsumer v="false" /> + </entityDependency> + </dependencies> + </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 0000000000..d877bfcaca --- /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 0000000000..e2c5bbf915 --- /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 0000000000..99daaad8a4 --- /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 0000000000..544c970722 --- /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 0000000000..e9b1fd0fbd --- /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 0000000000..23abeb0f0c --- /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 0000000000..3f4a87ce8c --- /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 0000000000..4d9a79c193 --- /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 0000000000..02ed4c9511 --- /dev/null +++ b/entity/Interest_entity/Interest_entity.aod @@ -0,0 +1,115 @@ +<?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>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> + <dependencies> + <entityDependency> + <name>a7f69959-a663-4089-828f-71cdc461262b</name> + <entityName>InterestLink_entity</entityName> + <fieldName>Interests</fieldName> + <isConsumer v="false" /> + </entityDependency> + </dependencies> + </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 0000000000..06a46eb638 --- /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/Interest_entity/contentTitleProcess.js b/entity/Interest_entity/contentTitleProcess.js new file mode 100644 index 0000000000..94f61859cc --- /dev/null +++ b/entity/Interest_entity/contentTitleProcess.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("system.result"); + +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 0000000000..ef495661f1 --- /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 0000000000..f7e43680cd --- /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 0000000000..e99e16494c --- /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 0000000000..a1072f1cee --- /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/KeywordEntry_entity/KeywordEntry_entity.aod b/entity/KeywordEntry_entity/KeywordEntry_entity.aod index 03187f4b1e..c2d0201747 100644 --- a/entity/KeywordEntry_entity/KeywordEntry_entity.aod +++ b/entity/KeywordEntry_entity/KeywordEntry_entity.aod @@ -672,6 +672,18 @@ <fieldName>ChannelTypeKeyword</fieldName> <isConsumer v="false" /> </entityDependency> + <entityDependency> + <name>23da94c2-910f-4b89-a92e-0826e00fe293</name> + <entityName>Interest_entity</entityName> + <fieldName>StatusKeyword</fieldName> + <isConsumer v="false" /> + </entityDependency> + <entityDependency> + <name>9afcf60e-4854-45bb-a9f9-924926be7b25</name> + <entityName>InterestLink_entity</entityName> + <fieldName>StatusKeyword</fieldName> + <isConsumer v="false" /> + </entityDependency> </dependencies> <children> <entityParameter> diff --git a/entity/Person_entity/Person_entity.aod b/entity/Person_entity/Person_entity.aod index f2e2c5de6c..1e51360e0a 100644 --- a/entity/Person_entity/Person_entity.aod +++ b/entity/Person_entity/Person_entity.aod @@ -1513,6 +1513,20 @@ </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> </entityFields> <recordContainers> <dbRecordContainer> 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 0000000000..7b6137b4d1 --- /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/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index d9f6cb3b88..9b325dbfaf 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -8100,9 +8100,6 @@ <entry> <key>Traits have already been defined for this salesproject phase.</key> </entry> - <entry> - <key>Participant is already participating</key> - </entry> <entry> <key>Event Data</key> </entry> @@ -8130,48 +8127,18 @@ <entry> <key>On site</key> </entry> - <entry> - <key>Traits have already been defined for this salesproject phase.</key> - </entry> - <entry> - <key>Event Data</key> - </entry> - <entry> - <key>On Site</key> - </entry> - <entry> - <key>Event Type</key> - </entry> - <entry> - <key>New child product</key> - </entry> <entry> <key>Communication: Link</key> </entry> - <entry> - <key>Event Begin</key> - </entry> <entry> <key>Communication: Phone</key> </entry> - <entry> - <key>Event</key> - </entry> - <entry> - <key>other</key> - </entry> <entry> <key>Communication: Mail</key> </entry> <entry> <key>Vacation</key> </entry> - <entry> - <key>Event End</key> - </entry> - <entry> - <key>On site</key> - </entry> <entry> <key>Price could not be determined</key> </entry> @@ -8199,6 +8166,24 @@ <entry> <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> </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 8792425d85..1f7dc06a42 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -14,6 +14,10 @@ <key>Use for test run</key> <value>Beir 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> @@ -1332,6 +1336,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> @@ -9387,6 +9395,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> @@ -10755,6 +10767,18 @@ Bitte Datumseingabe prüfen</value> <key>Add %0 Observations</key> <value>%0 Beobachtungen hinzufügen</value> </entry> + <entry> + <key>Traits have already been defined for this salesproject phase.</key> + </entry> + <entry> + <key>Vacation</key> + </entry> + <entry> + <key>On site</key> + </entry> + <entry> + <key>Price could not be determined</key> + </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 2558737793..9aa9b5b224 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -8208,15 +8208,6 @@ <entry> <key>New child product</key> </entry> - <entry> - <key>Traits have already been defined for this salesproject phase.</key> - </entry> - <entry> - <key>On Site</key> - </entry> - <entry> - <key>New child product</key> - </entry> <entry> <key>Vacation</key> </entry> @@ -8256,6 +8247,24 @@ <entry> <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> </keyValueMap> <font name="Dialog" style="0" size="11" /> </language> diff --git a/neonContext/CommunicationBlacklist/CommunicationBlacklist.aod b/neonContext/CommunicationBlacklist/CommunicationBlacklist.aod new file mode 100644 index 0000000000..e6c6084fa9 --- /dev/null +++ b/neonContext/CommunicationBlacklist/CommunicationBlacklist.aod @@ -0,0 +1,5 @@ +<?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>CommunicationBlacklist</name> + <majorModelMode>DISTRIBUTED</majorModelMode> +</neonContext> diff --git a/neonContext/Interest/Interest.aod b/neonContext/Interest/Interest.aod new file mode 100644 index 0000000000..c78d21f7bf --- /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 0000000000..c89728b86c --- /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/neonView/InterestEdit_view/InterestEdit_view.aod b/neonView/InterestEdit_view/InterestEdit_view.aod new file mode 100644 index 0000000000..5906d83817 --- /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 0000000000..93622b68cd --- /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 0000000000..2226453c25 --- /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 0000000000..2e46bceb98 --- /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 0000000000..162387862c --- /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 0000000000..cdca5093c7 --- /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/PersonMarketing_view/PersonMarketing_view.aod b/neonView/PersonMarketing_view/PersonMarketing_view.aod index 23e99decf8..da7de6d071 100644 --- a/neonView/PersonMarketing_view/PersonMarketing_view.aod +++ b/neonView/PersonMarketing_view/PersonMarketing_view.aod @@ -14,5 +14,10 @@ <entityField>ContactCommunicationSettings</entityField> <view>CommunicationSettingsDrawer_view</view> </neonViewReference> + <neonViewReference> + <name>d3ca9779-515c-4361-b8d6-4b13d6a1155d</name> + <entityField>InterestLinks</entityField> + <view>InterestLinkDrawer_view</view> + </neonViewReference> </children> </neonView> diff --git a/process/KeywordRegistry_basic/process.js b/process/KeywordRegistry_basic/process.js index cb1d640fc9..551fda9451 100644 --- a/process/KeywordRegistry_basic/process.js +++ b/process/KeywordRegistry_basic/process.js @@ -369,3 +369,11 @@ $KeywordRegistry.communicationChannelType$address = function(){return "COMMUNICA $KeywordRegistry.linkType = function(){return "LINKTYPE";}; $KeywordRegistry.linkType$EMail = function() {return "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";}; \ No newline at end of file diff --git a/process/MarketingCondition_lib/MarketingCondition_lib.aod b/process/MarketingCondition_lib/MarketingCondition_lib.aod new file mode 100644 index 0000000000..3644f27fcc --- /dev/null +++ b/process/MarketingCondition_lib/MarketingCondition_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>MarketingCondition_lib</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <process>%aditoprj%/process/MarketingCondition_lib/process.js</process> + <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 0000000000..8e14db2b50 --- /dev/null +++ b/process/MarketingCondition_lib/process.js @@ -0,0 +1,13 @@ + +function MarketingCondition () +{ + +} + +/* required functionality: + * - make communication settings condition + * - make interest condition + * - make blacklist condition + * - make full condition + * - check for single contact + */ \ No newline at end of file -- GitLab From b529fb0300b79f130334f91507f273568f32cc2a Mon Sep 17 00:00:00 2001 From: "m.groppe" <m.groppe@adito.de> Date: Mon, 29 Mar 2021 13:08:32 +0200 Subject: [PATCH 017/242] =?UTF-8?q?=C3=9Cbersetzungen=20nachgepflegt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod | 6 ++++++ language/_____LANGUAGE_de/_____LANGUAGE_de.aod | 14 +++++++++++++- language/_____LANGUAGE_en/_____LANGUAGE_en.aod | 6 ++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index 9b325dbfaf..12c920d14b 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -8184,6 +8184,12 @@ <entry> <key>Interest</key> </entry> + <entry> + <key>Subscribed</key> + </entry> + <entry> + <key>Not subscribed</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 1f7dc06a42..9b4aa94ed2 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -12,7 +12,7 @@ </entry> <entry> <key>Use for test run</key> - <value>Beir Testversand verwenden</value> + <value>Bei Testversand verwenden</value> </entry> <entry> <key>Not subscribed</key> @@ -8611,6 +8611,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> @@ -9714,6 +9718,10 @@ Bitte Datumseingabe prüfen</value> <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> @@ -10319,6 +10327,10 @@ Bitte Datumseingabe prüfen</value> <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> diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod index 9aa9b5b224..c7be186ebe 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -8265,6 +8265,12 @@ <entry> <key>Interest</key> </entry> + <entry> + <key>Subscribed</key> + </entry> + <entry> + <key>Not subscribed</key> + </entry> </keyValueMap> <font name="Dialog" style="0" size="11" /> </language> -- GitLab From 328c73e310f83a0b57b457819f87494f2df97233 Mon Sep 17 00:00:00 2001 From: "p.neub" <p.neub@adito.de> Date: Tue, 30 Mar 2021 08:40:52 +0200 Subject: [PATCH 018/242] =?UTF-8?q?[Projekt:=20xRM-Sales][TicketNr.:=20107?= =?UTF-8?q?5397][Exception=20beim=20Hinzuf=C3=BCgen=20von=202=20Preisliste?= =?UTF-8?q?n=20an=20Firma]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- process/Attribute_lib/process.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/process/Attribute_lib/process.js b/process/Attribute_lib/process.js index b6f4f03806..7d90071560 100644 --- a/process/Attribute_lib/process.js +++ b/process/Attribute_lib/process.js @@ -692,6 +692,16 @@ 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 minMaxCounts = []; -- GitLab From ac08288f7293a173ba125c7b7fe64da693a31499 Mon Sep 17 00:00:00 2001 From: "p.neub" <p.neub@adito.de> Date: Tue, 30 Mar 2021 10:37:50 +0200 Subject: [PATCH 019/242] =?UTF-8?q?[Projekt:=20xRM-Sales][TicketNr.:=20107?= =?UTF-8?q?6051][Seiteneffekt=20zwischen=20Berechtigungen=20und=20SalesPro?= =?UTF-8?q?ject-Member=20f=C3=BChrt=20zu=20Fehler]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../recordcontainers/jdito/contentProcess.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/entity/Member_entity/recordcontainers/jdito/contentProcess.js b/entity/Member_entity/recordcontainers/jdito/contentProcess.js index 85d651ee76..6a0466b6f9 100644 --- a/entity/Member_entity/recordcontainers/jdito/contentProcess.js +++ b/entity/Member_entity/recordcontainers/jdito/contentProcess.js @@ -106,9 +106,16 @@ if (Utils.isNullOrEmpty(idValues) || memberRows.length === 0) .entity("Person_entity") .uids(responsibleUids) .fields(["ORGANISATION_ID", "ORGANISATION_NAME", "CONTACTROLE", "POSITION", - "FIRSTNAME", "LASTNAME", "SALUTATION", "TITLE"]); - - var persRows = entities.getRows(loadingConfPers); + "FIRSTNAME", "LASTNAME", "SALUTATION", "TITLE", "PERSONID", "CONTACTID"]); + var persRowsMap = {}; + entities.getRows(loadingConfPers).forEach(function(item) { + persRowsMap[item["CONTACTID"]] = item; + }); + + var persRows = []; + responsibleUids.forEach(function(uid) { + persRows.push(persRowsMap[uid]); + }); persRows = persRows.map(function(row){ return [row["SALUTATION"], row["TITLE"], row["FIRSTNAME"], row["LASTNAME"], -- GitLab From bd71f1006cd5d607669b8afdaff13e604ce73312 Mon Sep 17 00:00:00 2001 From: "p.neub" <p.neub@adito.de> Date: Wed, 31 Mar 2021 15:03:58 +0200 Subject: [PATCH 020/242] =?UTF-8?q?[Projekt:=20xRM-Sales][TicketNr.:=20107?= =?UTF-8?q?4293][Angebot/Belege=20-=20User=20ohne=20Adminrolle=20d=C3=BCrf?= =?UTF-8?q?en=20Angebote=20oder=20Belege,=20die=20bereits=20versendet=20si?= =?UTF-8?q?nd,=20nicht=20mehr=20bearbeiten=20k=C3=B6nnen]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entity/Offer_entity/grantUpdateProcess.js | 14 +++++++++++++- entity/Order_entity/Order_entity.aod | 1 + entity/Order_entity/grantUpdateProcess.js | 6 ++++++ 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 entity/Order_entity/grantUpdateProcess.js diff --git a/entity/Offer_entity/grantUpdateProcess.js b/entity/Offer_entity/grantUpdateProcess.js index f022059101..dd8ad2ced3 100644 --- a/entity/Offer_entity/grantUpdateProcess.js +++ b/entity/Offer_entity/grantUpdateProcess.js @@ -1,2 +1,14 @@ +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$sent() + && status != $KeywordRegistry.offerStatus$won() + && status != $KeywordRegistry.offerStatus$lost(); + +result.string(editable || tools.hasRole(vars.get("$sys.user"), "INTERNAL_ADMINISTRATOR")); diff --git a/entity/Order_entity/Order_entity.aod b/entity/Order_entity/Order_entity.aod index ea20792d66..090bc46b1a 100644 --- a/entity/Order_entity/Order_entity.aod +++ b/entity/Order_entity/Order_entity.aod @@ -4,6 +4,7 @@ <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> diff --git a/entity/Order_entity/grantUpdateProcess.js b/entity/Order_entity/grantUpdateProcess.js new file mode 100644 index 0000000000..1559507308 --- /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")); -- GitLab From e6f212f18879df6334c25515f2727bfb8bb4e5a4 Mon Sep 17 00:00:00 2001 From: "p.neub" <p.neub@adito.de> Date: Wed, 31 Mar 2021 15:14:50 +0200 Subject: [PATCH 021/242] =?UTF-8?q?[Projekt:=20xRM-Sales][TicketNr.:=20107?= =?UTF-8?q?4277][Fehler=20bei=20Status=20=C3=84nderung=20in=20Angebotserst?= =?UTF-8?q?ellung=20]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entity/Offer_entity/entityfields/status/stateProcess.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/entity/Offer_entity/entityfields/status/stateProcess.js b/entity/Offer_entity/entityfields/status/stateProcess.js index 2f47d5d101..547c00b1f8 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); +} -- GitLab From 7160e6af8363ab9af843a3db53c0aca5c6cf1d98 Mon Sep 17 00:00:00 2001 From: "p.neub" <p.neub@adito.de> Date: Wed, 31 Mar 2021 15:37:03 +0200 Subject: [PATCH 022/242] [Projekt: xRM-Sales][TicketNr.: 1074289][Klassifizierung - Mouseover-Text: umgangssprachliche Formulierung und mit Tippfehler] --- .../ClassificationAdmin_entity.aod | 4 +-- .../_____LANGUAGE_EXTRA.aod | 34 +++++++++++++++++-- .../_____LANGUAGE_de/_____LANGUAGE_de.aod | 8 ++--- .../_____LANGUAGE_en/_____LANGUAGE_en.aod | 34 +++++++++++++++++-- 4 files changed, 70 insertions(+), 10 deletions(-) diff --git a/entity/ClassificationAdmin_entity/ClassificationAdmin_entity.aod b/entity/ClassificationAdmin_entity/ClassificationAdmin_entity.aod index a2ecf6d0ca..b5da465e7f 100644 --- a/entity/ClassificationAdmin_entity/ClassificationAdmin_entity.aod +++ b/entity/ClassificationAdmin_entity/ClassificationAdmin_entity.aod @@ -95,14 +95,14 @@ <title>Recalculate Classifications</title> <onActionProcess>%aditoprj%/entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/updateclassification/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> diff --git a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index a147fbceb5..2ef17513e2 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -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,7 +8071,7 @@ <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> @@ -8166,6 +8166,36 @@ <entry> <key>Value must be an integer</key> </entry> + <entry> + <key>Shows the global Covid Cases in a Table</key> + </entry> + <entry> + <key>Buyer</key> + </entry> + <entry> + <key>Internal responsible</key> + </entry> + <entry> + <key>Global Cases Table</key> + </entry> + <entry> + <key>Global Cases</key> + </entry> + <entry> + <key>Initiator</key> + </entry> + <entry> + <key>New Cases</key> + </entry> + <entry> + <key>Internal Sales</key> + </entry> + <entry> + <key>Influencer</key> + </entry> + <entry> + <key>Shows the new daily Covid Cases</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 e58f48ed81..7e2894f7f2 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -9663,12 +9663,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 used 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> diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod index bd409fc49c..8521e563b4 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -8164,7 +8164,7 @@ <key>Offer exists</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> @@ -8173,7 +8173,7 @@ <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> @@ -8247,6 +8247,36 @@ <entry> <key>Value must be an integer</key> </entry> + <entry> + <key>Shows the global Covid Cases in a Table</key> + </entry> + <entry> + <key>Buyer</key> + </entry> + <entry> + <key>Internal responsible</key> + </entry> + <entry> + <key>Global Cases Table</key> + </entry> + <entry> + <key>Global Cases</key> + </entry> + <entry> + <key>Initiator</key> + </entry> + <entry> + <key>New Cases</key> + </entry> + <entry> + <key>Internal Sales</key> + </entry> + <entry> + <key>Influencer</key> + </entry> + <entry> + <key>Shows the new daily Covid Cases</key> + </entry> </keyValueMap> <font name="Dialog" style="0" size="11" /> </language> -- GitLab From 09796c1b1c564041b966cd2246fbaeac7d51d77b Mon Sep 17 00:00:00 2001 From: "m.groppe" <m.groppe@adito.de> Date: Wed, 31 Mar 2021 17:56:28 +0200 Subject: [PATCH 023/242] [Projekt: xRM-Marketing][TicketNr.: 1077540][LINK: Redirects/Klicklog/Opener] --- .../Bulkmail/AddBulkmailStatus.xml | 0 .../Bulkmail/AlterBulkmail.xml | 0 .../Bulkmail/AlterBulkmailRecipient.xml | 0 .../Bulkmail/addDeviceTypeKeyword.xml | 65 ++ .../Bulkmail/changelog.xml | 2 +- .../Bulkmail/createBulkMailTestRecipient.xml | 0 .../Bulkmail/createLinkClicks.xml} | 12 +- .../Bulkmail/createMailLog.xml | 1 + .../Bulkmail/createMailRun.xml | 0 .../LinkManagement/CreateLink.xml | 1 + .../LinkManagement/CreateLinktags.xml | 0 .../addLinkManagementKeywords.xml | 0 .../LinkManagement/changelog.xml | 0 .../Data_alias/basic/2021.0.3/changelog.xml | 6 + .liquibase/Data_alias/changelog.xml | 1 + aliasDefinition/Data_alias/Data_alias.aod | 188 ++++ .../AnyContact_entity/AnyContact_entity.aod | 6 + entity/BulkMail_entity/BulkMail_entity.aod | 18 + .../objectrowid_param/valueProcess.js | 3 + .../children/objecttype_param/valueProcess.js | 4 + entity/LinkClick_entity/LinkClick_entity.aod | 231 +++++ .../contact_id/linkedContextProcess.js | 7 + .../recordcontainers/db/conditionProcess.js | 8 + .../recordcontainers/db/fromClauseProcess.js | 11 + .../recordcontainers/db/orderClauseProcess.js | 6 + .../contact_id.displayvalue/expression.js | 4 + .../device_type.displayvalue/expression.js | 6 + entity/Link_entity/Link_entity.aod | 14 + .../children/linkid_param/valueProcess.js | 4 + entity/MailLog_entity/MailLog_entity.aod | 25 +- .../recordcontainers/db/fromClauseProcess.js | 3 +- .../_____LANGUAGE_EXTRA.aod | 9 + .../_____LANGUAGE_de/_____LANGUAGE_de.aod | 24 + .../_____LANGUAGE_en/_____LANGUAGE_en.aod | 9 + neonContext/LinkClick/LinkClick.aod | 13 + .../BulkMailMain_view/BulkMailMain_view.aod | 5 + .../LinkClickFilter_view.aod | 46 + neonView/LinktMain_view/LinktMain_view.aod | 5 + .../MailLogFilter_view/MailLogFilter_view.aod | 4 + process/Bulkmail_lib/process.js | 404 +++++---- process/KeywordRegistry_basic/process.js | 4 +- .../UserAgentParser_lib.aod | 9 + process/UserAgentParser_lib/process.js | 852 ++++++++++++++++++ process/redirect_rest/process.js | 23 +- process/redirect_rest/redirect_rest.aod | 1 + 45 files changed, 1861 insertions(+), 173 deletions(-) rename .liquibase/Data_alias/basic/{2021.0.2 => 2021.0.3}/Bulkmail/AddBulkmailStatus.xml (100%) rename .liquibase/Data_alias/basic/{2021.0.2 => 2021.0.3}/Bulkmail/AlterBulkmail.xml (100%) rename .liquibase/Data_alias/basic/{2021.0.2 => 2021.0.3}/Bulkmail/AlterBulkmailRecipient.xml (100%) create mode 100644 .liquibase/Data_alias/basic/2021.0.3/Bulkmail/addDeviceTypeKeyword.xml rename .liquibase/Data_alias/basic/{2021.0.2 => 2021.0.3}/Bulkmail/changelog.xml (90%) rename .liquibase/Data_alias/basic/{2021.0.2 => 2021.0.3}/Bulkmail/createBulkMailTestRecipient.xml (100%) rename .liquibase/Data_alias/basic/{2021.0.2/Bulkmail/createMailOpener.xml => 2021.0.3/Bulkmail/createLinkClicks.xml} (61%) rename .liquibase/Data_alias/basic/{2021.0.2 => 2021.0.3}/Bulkmail/createMailLog.xml (95%) rename .liquibase/Data_alias/basic/{2021.0.2 => 2021.0.3}/Bulkmail/createMailRun.xml (100%) rename .liquibase/Data_alias/basic/{2021.0.2 => 2021.0.3}/LinkManagement/CreateLink.xml (93%) rename .liquibase/Data_alias/basic/{2021.0.2 => 2021.0.3}/LinkManagement/CreateLinktags.xml (100%) rename .liquibase/Data_alias/basic/{2021.0.2 => 2021.0.3}/LinkManagement/addLinkManagementKeywords.xml (100%) rename .liquibase/Data_alias/basic/{2021.0.2 => 2021.0.3}/LinkManagement/changelog.xml (100%) create mode 100644 .liquibase/Data_alias/basic/2021.0.3/changelog.xml create mode 100644 entity/BulkMail_entity/entityfields/clicks/children/objectrowid_param/valueProcess.js create mode 100644 entity/BulkMail_entity/entityfields/clicks/children/objecttype_param/valueProcess.js create mode 100644 entity/LinkClick_entity/LinkClick_entity.aod create mode 100644 entity/LinkClick_entity/entityfields/contact_id/linkedContextProcess.js create mode 100644 entity/LinkClick_entity/recordcontainers/db/conditionProcess.js create mode 100644 entity/LinkClick_entity/recordcontainers/db/fromClauseProcess.js create mode 100644 entity/LinkClick_entity/recordcontainers/db/orderClauseProcess.js create mode 100644 entity/LinkClick_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js create mode 100644 entity/LinkClick_entity/recordcontainers/db/recordfieldmappings/device_type.displayvalue/expression.js create mode 100644 entity/Link_entity/entityfields/clicks/children/linkid_param/valueProcess.js create mode 100644 neonContext/LinkClick/LinkClick.aod create mode 100644 neonView/LinkClickFilter_view/LinkClickFilter_view.aod create mode 100644 process/UserAgentParser_lib/UserAgentParser_lib.aod create mode 100644 process/UserAgentParser_lib/process.js diff --git a/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/AddBulkmailStatus.xml b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/AddBulkmailStatus.xml similarity index 100% rename from .liquibase/Data_alias/basic/2021.0.2/Bulkmail/AddBulkmailStatus.xml rename to .liquibase/Data_alias/basic/2021.0.3/Bulkmail/AddBulkmailStatus.xml diff --git a/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/AlterBulkmail.xml b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/AlterBulkmail.xml similarity index 100% rename from .liquibase/Data_alias/basic/2021.0.2/Bulkmail/AlterBulkmail.xml rename to .liquibase/Data_alias/basic/2021.0.3/Bulkmail/AlterBulkmail.xml diff --git a/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/AlterBulkmailRecipient.xml b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/AlterBulkmailRecipient.xml similarity index 100% rename from .liquibase/Data_alias/basic/2021.0.2/Bulkmail/AlterBulkmailRecipient.xml rename to .liquibase/Data_alias/basic/2021.0.3/Bulkmail/AlterBulkmailRecipient.xml 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 0000000000..2e5fef20dc --- /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.2/Bulkmail/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/changelog.xml similarity index 90% rename from .liquibase/Data_alias/basic/2021.0.2/Bulkmail/changelog.xml rename to .liquibase/Data_alias/basic/2021.0.3/Bulkmail/changelog.xml index 9e7e286eb6..58da09a2dc 100644 --- a/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/changelog.xml @@ -6,7 +6,7 @@ <include relativeToChangelogFile="true" file="AddBulkmailStatus"/> <include relativeToChangelogFile="true" file="createMailLog.xml"/> <include relativeToChangelogFile="true" file="createMailRun.xml"/> - <include relativeToChangelogFile="true" file="createMailOpener.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.2/Bulkmail/createBulkMailTestRecipient.xml b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createBulkMailTestRecipient.xml similarity index 100% rename from .liquibase/Data_alias/basic/2021.0.2/Bulkmail/createBulkMailTestRecipient.xml rename to .liquibase/Data_alias/basic/2021.0.3/Bulkmail/createBulkMailTestRecipient.xml diff --git a/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/createMailOpener.xml b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createLinkClicks.xml similarity index 61% rename from .liquibase/Data_alias/basic/2021.0.2/Bulkmail/createMailOpener.xml rename to .liquibase/Data_alias/basic/2021.0.3/Bulkmail/createLinkClicks.xml index e54c981b09..0fefe44468 100644 --- a/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/createMailOpener.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createLinkClicks.xml @@ -1,13 +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-4.1.xsd"> - <changeSet author="m.groppe" id="3323c8a8-7a20-4836-b7b1-36b4ec2caf3d"> - <createTable tableName="mail_opener"> - <column name="MAIL_OPENERID" type="CHAR(36)"> + <changeSet author="m.groppe" id="e60dc52b-87dc-4f73-80e7-adc5b46d6935"> + <createTable tableName="LINK_CLICK"> + <column name="LINK_CLICKID" type="CHAR(36)"> <constraints nullable="false" primaryKey="true"/> </column> <column name="IP_ADDRESS" type="VARCHAR(50)"/> + <column name="LINK_ID" type="CHAR(36)"/> <column name="MAIL_LOG_ID" type="CHAR(36)"/> - <column defaultValueComputed="NULL" name="DATE_OPENED" type="datetime"/> + <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> </changeSet> </databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/createMailLog.xml b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createMailLog.xml similarity index 95% rename from .liquibase/Data_alias/basic/2021.0.2/Bulkmail/createMailLog.xml rename to .liquibase/Data_alias/basic/2021.0.3/Bulkmail/createMailLog.xml index dcd979f509..be2a3ac4d2 100644 --- a/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/createMailLog.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createMailLog.xml @@ -15,6 +15,7 @@ <column name="MAILING_SUBJECT" type="VARCHAR(100)"/> <column name="DATE_SEND" type ="DATETIME"/> <column name="FILEPATH" type="VARCHAR(255)"/> + <column name="OPENER_LINK_CLICK_ID" type="char(36)"/> </createTable> </changeSet> </databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.2/Bulkmail/createMailRun.xml b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createMailRun.xml similarity index 100% rename from .liquibase/Data_alias/basic/2021.0.2/Bulkmail/createMailRun.xml rename to .liquibase/Data_alias/basic/2021.0.3/Bulkmail/createMailRun.xml diff --git a/.liquibase/Data_alias/basic/2021.0.2/LinkManagement/CreateLink.xml b/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/CreateLink.xml similarity index 93% rename from .liquibase/Data_alias/basic/2021.0.2/LinkManagement/CreateLink.xml rename to .liquibase/Data_alias/basic/2021.0.3/LinkManagement/CreateLink.xml index ee8b19525d..15e2f3340a 100644 --- a/.liquibase/Data_alias/basic/2021.0.2/LinkManagement/CreateLink.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/CreateLink.xml @@ -15,6 +15,7 @@ <column name="DATE_NEW" type="DATETIME"/> <column name="USER_EDIT" type="NVARCHAR(50)"/> <column name="DATE_EDIT" type="DATETIME"/> + <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.2/LinkManagement/CreateLinktags.xml b/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/CreateLinktags.xml similarity index 100% rename from .liquibase/Data_alias/basic/2021.0.2/LinkManagement/CreateLinktags.xml rename to .liquibase/Data_alias/basic/2021.0.3/LinkManagement/CreateLinktags.xml diff --git a/.liquibase/Data_alias/basic/2021.0.2/LinkManagement/addLinkManagementKeywords.xml b/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/addLinkManagementKeywords.xml similarity index 100% rename from .liquibase/Data_alias/basic/2021.0.2/LinkManagement/addLinkManagementKeywords.xml rename to .liquibase/Data_alias/basic/2021.0.3/LinkManagement/addLinkManagementKeywords.xml diff --git a/.liquibase/Data_alias/basic/2021.0.2/LinkManagement/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/changelog.xml similarity index 100% rename from .liquibase/Data_alias/basic/2021.0.2/LinkManagement/changelog.xml rename to .liquibase/Data_alias/basic/2021.0.3/LinkManagement/changelog.xml 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 0000000000..94916616a3 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/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="Bulkmail/changelog.xml"/> + <include relativeToChangelogFile="true" file="LinkManagement/changelog.xml"/> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/changelog.xml b/.liquibase/Data_alias/changelog.xml index 7011168d6c..cbc824888d 100644 --- a/.liquibase/Data_alias/changelog.xml +++ b/.liquibase/Data_alias/changelog.xml @@ -22,6 +22,7 @@ <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"/> <!--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"/> diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod index 70a35bfc8c..e94d98a842 100644 --- a/aliasDefinition/Data_alias/Data_alias.aod +++ b/aliasDefinition/Data_alias/Data_alias.aod @@ -18665,6 +18665,20 @@ <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> @@ -18859,6 +18873,48 @@ <title></title> <description></description> </entityFieldDb> + <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>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> </entityFields> </entityDb> <entityDb> @@ -19729,6 +19785,138 @@ </entityFieldDb> </entityFields> </entityDb> + <entityDb> + <name>LINK_CLICK</name> + <dbName></dbName> + <idColumn>LINK_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>LINK_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="false" /> + <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>LINK_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> </entities> </entityGroup> </aliasDefDb> diff --git a/entity/AnyContact_entity/AnyContact_entity.aod b/entity/AnyContact_entity/AnyContact_entity.aod index ccbe256ca3..d01cbf0e5e 100644 --- a/entity/AnyContact_entity/AnyContact_entity.aod +++ b/entity/AnyContact_entity/AnyContact_entity.aod @@ -90,6 +90,12 @@ <fieldName>Contacts</fieldName> <isConsumer v="false" /> </entityDependency> + <entityDependency> + <name>cb874ee2-e147-4311-bdf1-a94df537bb9e</name> + <entityName>LinkClick_entity</entityName> + <fieldName>Contacts</fieldName> + <isConsumer v="false" /> + </entityDependency> </dependencies> </entityProvider> <entityProvider> diff --git a/entity/BulkMail_entity/BulkMail_entity.aod b/entity/BulkMail_entity/BulkMail_entity.aod index 5f36bbf278..7c014802ec 100644 --- a/entity/BulkMail_entity/BulkMail_entity.aod +++ b/entity/BulkMail_entity/BulkMail_entity.aod @@ -364,6 +364,24 @@ </entityParameter> </children> </entityConsumer> + <entityConsumer> + <name>Clicks</name> + <dependency> + <name>dependency</name> + <entityName>LinkClick_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> </entityFields> <recordContainers> <dbRecordContainer> 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 0000000000..8aa64f3404 --- /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 0000000000..008915f61d --- /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/LinkClick_entity/LinkClick_entity.aod b/entity/LinkClick_entity/LinkClick_entity.aod new file mode 100644 index 0000000000..6988cda6d1 --- /dev/null +++ b/entity/LinkClick_entity/LinkClick_entity.aod @@ -0,0 +1,231 @@ +<?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>LinkClick_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> + <dependencies> + <entityDependency> + <name>cd0eb69c-917b-43ba-b02f-2b05bff34cdd</name> + <entityName>BulkMail_entity</entityName> + <fieldName>Clicks</fieldName> + <isConsumer v="false" /> + </entityDependency> + <entityDependency> + <name>cf3f4f2c-43bb-44c3-9099-95966d05623f</name> + <entityName>Link_entity</entityName> + <fieldName>Clicks</fieldName> + <isConsumer v="false" /> + </entityDependency> + </dependencies> + </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>LINK_CLICKID</name> + </entityField> + <entityField> + <name>LINK_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/LinkClick_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>LinkId_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/LinkClick_entity/recordcontainers/db/fromClauseProcess.js</fromClauseProcess> + <conditionProcess>%aditoprj%/entity/LinkClick_entity/recordcontainers/db/conditionProcess.js</conditionProcess> + <orderClauseProcess>%aditoprj%/entity/LinkClick_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess> + <alias>Data_alias</alias> + <recordFieldMappings> + <dbRecordFieldMapping> + <name>BROWSER.value</name> + <recordfield>LINK_CLICK.BROWSER</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DATE_OPENED.value</name> + <recordfield>LINK_CLICK.DATE_OPENED</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DEVICE_TYPE.value</name> + <recordfield>LINK_CLICK.DEVICE_TYPE</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>IP_ADDRESS.value</name> + <recordfield>LINK_CLICK.IP_ADDRESS</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>LINK_CLICKID.value</name> + <recordfield>LINK_CLICK.LINK_CLICKID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>LINK_ID.value</name> + <recordfield>LINK_CLICK.LINK_ID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>OBJECT_TYPE.value</name> + <recordfield>MAIL_RUN.OBJECT_TYPE</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>OPERATING_SYSTEM.value</name> + <recordfield>LINK_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/LinkClick_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js</expression> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>URL.value</name> + <recordfield>LINK.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/LinkClick_entity/recordcontainers/db/recordfieldmappings/device_type.displayvalue/expression.js</expression> + </dbRecordFieldMapping> + </recordFieldMappings> + <linkInformation> + <linkInformation> + <name>d64f4f8d-4478-456d-a29e-d7e9a2981f0f</name> + <tableName>LINK_CLICK</tableName> + <primaryKey>LINK_CLICKID</primaryKey> + <isUIDTable v="true" /> + <readonly v="false" /> + </linkInformation> + <linkInformation> + <name>bf0b73b1-f99a-482a-aa10-d6cc1cee759d</name> + <tableName>MAIL_LOG</tableName> + <primaryKey>MAIL_LOGID</primaryKey> + <isUIDTable v="false" /> + <readonly v="true" /> + </linkInformation> + <linkInformation> + <name>5f0fd2d6-390b-4614-ab82-a9b1f0306fe9</name> + <tableName>MAIL_RUN</tableName> + <primaryKey>MAIL_RUNID</primaryKey> + <isUIDTable v="false" /> + <readonly v="true" /> + </linkInformation> + <linkInformation> + <name>d4b3c72c-b8c5-4dad-b5aa-718fb1c78f3e</name> + <tableName>LINK</tableName> + <primaryKey>LINKID</primaryKey> + <isUIDTable v="false" /> + <readonly v="true" /> + </linkInformation> + <linkInformation> + <name>34c55cb6-697c-4bc1-b15f-737b4743e6fb</name> + <tableName>CONTACT</tableName> + <primaryKey>CONTACTID</primaryKey> + <isUIDTable v="false" /> + <readonly v="true" /> + </linkInformation> + </linkInformation> + </dbRecordContainer> + </recordContainers> +</entity> diff --git a/entity/LinkClick_entity/entityfields/contact_id/linkedContextProcess.js b/entity/LinkClick_entity/entityfields/contact_id/linkedContextProcess.js new file mode 100644 index 0000000000..95bad24544 --- /dev/null +++ b/entity/LinkClick_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/LinkClick_entity/recordcontainers/db/conditionProcess.js b/entity/LinkClick_entity/recordcontainers/db/conditionProcess.js new file mode 100644 index 0000000000..47e1c6b2ef --- /dev/null +++ b/entity/LinkClick_entity/recordcontainers/db/conditionProcess.js @@ -0,0 +1,8 @@ +import("system.result"); +import("Sql_lib"); + +var cond = newWhereIfSet("LINK_CLICK.LINK_ID", "$param.LinkId_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/LinkClick_entity/recordcontainers/db/fromClauseProcess.js b/entity/LinkClick_entity/recordcontainers/db/fromClauseProcess.js new file mode 100644 index 0000000000..05dc3db634 --- /dev/null +++ b/entity/LinkClick_entity/recordcontainers/db/fromClauseProcess.js @@ -0,0 +1,11 @@ +import("system.result"); +import("Sql_lib"); + +var from = new SqlBuilder() + .from("LINK_CLICK") + .join("MAIL_LOG","MAIL_LOG.MAIL_LOGID = LINK_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("LINK","LINK.LINKID = LINK_CLICK.LINK_ID"); + +result.string(from.toString()); \ No newline at end of file diff --git a/entity/LinkClick_entity/recordcontainers/db/orderClauseProcess.js b/entity/LinkClick_entity/recordcontainers/db/orderClauseProcess.js new file mode 100644 index 0000000000..df83830d32 --- /dev/null +++ b/entity/LinkClick_entity/recordcontainers/db/orderClauseProcess.js @@ -0,0 +1,6 @@ +import("system.db"); +import("system.result"); + +result.object({ + "LINK_CLICK.DATE_OPENED" : db.DESCENDING +}); \ No newline at end of file diff --git a/entity/LinkClick_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js b/entity/LinkClick_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js new file mode 100644 index 0000000000..72d1600cff --- /dev/null +++ b/entity/LinkClick_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/LinkClick_entity/recordcontainers/db/recordfieldmappings/device_type.displayvalue/expression.js b/entity/LinkClick_entity/recordcontainers/db/recordfieldmappings/device_type.displayvalue/expression.js new file mode 100644 index 0000000000..3b14a9b790 --- /dev/null +++ b/entity/LinkClick_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(), "LINK_CLICK.DEVICE_TYPE"); +result.string(sql); diff --git a/entity/Link_entity/Link_entity.aod b/entity/Link_entity/Link_entity.aod index 2a32a4d8f2..1d89e2c2bf 100644 --- a/entity/Link_entity/Link_entity.aod +++ b/entity/Link_entity/Link_entity.aod @@ -98,6 +98,20 @@ <displayValueProcess>%aditoprj%/entity/Link_entity/entityfields/placeholder/displayValueProcess.js</displayValueProcess> <onValidation>%aditoprj%/entity/Link_entity/entityfields/placeholder/onValidation.js</onValidation> </entityField> + <entityConsumer> + <name>Clicks</name> + <dependency> + <name>dependency</name> + <entityName>LinkClick_entity</entityName> + <fieldName>#PROVIDER</fieldName> + </dependency> + <children> + <entityParameter> + <name>LinkId_param</name> + <valueProcess>%aditoprj%/entity/Link_entity/entityfields/clicks/children/linkid_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> </entityFields> <recordContainers> <dbRecordContainer> diff --git a/entity/Link_entity/entityfields/clicks/children/linkid_param/valueProcess.js b/entity/Link_entity/entityfields/clicks/children/linkid_param/valueProcess.js new file mode 100644 index 0000000000..bfece7cf1e --- /dev/null +++ b/entity/Link_entity/entityfields/clicks/children/linkid_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("system.result"); + +result.string(vars.get("$field.LINKID")); \ No newline at end of file diff --git a/entity/MailLog_entity/MailLog_entity.aod b/entity/MailLog_entity/MailLog_entity.aod index 11f79c4f33..a72d503f7b 100644 --- a/entity/MailLog_entity/MailLog_entity.aod +++ b/entity/MailLog_entity/MailLog_entity.aod @@ -95,7 +95,7 @@ </entityProvider> <entityField> <name>DATE_SEND</name> - <title>Date</title> + <title>Send Date</title> <contentType>DATE</contentType> <resolution>MINUTE</resolution> </entityField> @@ -125,6 +125,12 @@ <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> @@ -203,29 +209,40 @@ <recordfield>MAIL_RUN.TESTRUN</recordfield> <isFilterable v="true" /> </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DATE_OPENED.value</name> + <recordfield>LINK_CLICK.DATE_OPENED</recordfield> + </dbRecordFieldMapping> </recordFieldMappings> <linkInformation> <linkInformation> - <name>edad8141-91fd-4869-9368-5d4ce3553b12</name> + <name>6b1b4cc2-cdc1-4c15-a1d7-6b1236332884</name> <tableName>MAIL_LOG</tableName> <primaryKey>MAIL_LOGID</primaryKey> <isUIDTable v="true" /> <readonly v="false" /> </linkInformation> <linkInformation> - <name>3ceea898-a14c-478c-8022-d7351210dc2a</name> + <name>f3319573-943a-40e8-85b7-e01192c55c1d</name> <tableName>MAIL_RUN</tableName> <primaryKey>MAIL_RUNID</primaryKey> <isUIDTable v="false" /> <readonly v="true" /> </linkInformation> <linkInformation> - <name>e02574d4-abac-4e33-b2b5-12823683ea2e</name> + <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>LINK_CLICK</tableName> + <primaryKey>LINK_CLICKID</primaryKey> + <isUIDTable v="false" /> + <readonly v="true" /> + </linkInformation> </linkInformation> </dbRecordContainer> </recordContainers> diff --git a/entity/MailLog_entity/recordcontainers/db/fromClauseProcess.js b/entity/MailLog_entity/recordcontainers/db/fromClauseProcess.js index bfd2b1c862..153f1d252a 100644 --- a/entity/MailLog_entity/recordcontainers/db/fromClauseProcess.js +++ b/entity/MailLog_entity/recordcontainers/db/fromClauseProcess.js @@ -1,3 +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"); \ No newline at end of file + join CONTACT on CONTACT.CONTACTID = MAIL_LOG.CONTACT_ID\n\ + left join LINK_CLICK on LINK_CLICK.LINK_CLICKID = MAIL_LOG.OPENER_LINK_CLICK_ID"); \ No newline at end of file diff --git a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index 12c920d14b..a8f3d64a26 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -8190,6 +8190,15 @@ <entry> <key>Not subscribed</key> </entry> + <entry> + <key>Test Run</key> + </entry> + <entry> + <key>Placeholder</key> + </entry> + <entry> + <key>Link Type</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 9b4aa94ed2..b654041a3c 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -55,6 +55,10 @@ <key>Checklist entries</key> <value>Checklisteneinträge</value> </entry> + <entry> + <key>Operating System</key> + <value>Betriebssystem</value> + </entry> <entry> <key>Project team: \"Project manager\"</key> <value>Projektteam: \"Projektmanager\"</value> @@ -79,6 +83,10 @@ <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> @@ -919,6 +927,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> @@ -2367,6 +2379,10 @@ <key>subject</key> <value>Betreff</value> </entry> + <entry> + <key>Mobile</key> + <value>Handy</value> + </entry> <entry> <key>Document templates</key> <value>Dokumentvorlagen</value> @@ -2919,6 +2935,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> @@ -3051,6 +3071,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> diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod index c7be186ebe..ca45a8c4b7 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -8271,6 +8271,15 @@ <entry> <key>Not subscribed</key> </entry> + <entry> + <key>Test Run</key> + </entry> + <entry> + <key>Placeholder</key> + </entry> + <entry> + <key>Link Type</key> + </entry> </keyValueMap> <font name="Dialog" style="0" size="11" /> </language> diff --git a/neonContext/LinkClick/LinkClick.aod b/neonContext/LinkClick/LinkClick.aod new file mode 100644 index 0000000000..b0a1810501 --- /dev/null +++ b/neonContext/LinkClick/LinkClick.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>LinkClick</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterView>LinkClickFilter_view</filterView> + <entity>LinkClick_entity</entity> + <references> + <neonViewReference> + <name>27fd3309-5cb7-4e27-85e3-68ce4ad2e60e</name> + <view>LinkClickFilter_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonView/BulkMailMain_view/BulkMailMain_view.aod b/neonView/BulkMailMain_view/BulkMailMain_view.aod index f47bc71ab7..86095cc750 100644 --- a/neonView/BulkMailMain_view/BulkMailMain_view.aod +++ b/neonView/BulkMailMain_view/BulkMailMain_view.aod @@ -34,6 +34,11 @@ <entityField>BulkMailTestRecipients</entityField> <view>BulkMailTestRecipientFilter_view</view> </neonViewReference> + <neonViewReference> + <name>bd3876a9-492e-4e2e-bcca-e86455475dca</name> + <entityField>Clicks</entityField> + <view>LinkClickFilter_view</view> + </neonViewReference> <neonViewReference> <name>49eb2dd2-0df9-4b58-bdae-f941200be8d9</name> <entityField>LogHistories</entityField> diff --git a/neonView/LinkClickFilter_view/LinkClickFilter_view.aod b/neonView/LinkClickFilter_view/LinkClickFilter_view.aod new file mode 100644 index 0000000000..5a3ac3d04c --- /dev/null +++ b/neonView/LinkClickFilter_view/LinkClickFilter_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>LinkClickFilter_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/LinktMain_view/LinktMain_view.aod b/neonView/LinktMain_view/LinktMain_view.aod index 7ec87a63f4..677f6043a9 100644 --- a/neonView/LinktMain_view/LinktMain_view.aod +++ b/neonView/LinktMain_view/LinktMain_view.aod @@ -19,5 +19,10 @@ <entityField>#ENTITY</entityField> <view>LinkDrawer_view</view> </neonViewReference> + <neonViewReference> + <name>303de4e6-03de-419d-9875-42e10b912a1f</name> + <entityField>Clicks</entityField> + <view>LinkClickFilter_view</view> + </neonViewReference> </children> </neonView> diff --git a/neonView/MailLogFilter_view/MailLogFilter_view.aod b/neonView/MailLogFilter_view/MailLogFilter_view.aod index 9c87d39051..1bf071b561 100644 --- a/neonView/MailLogFilter_view/MailLogFilter_view.aod +++ b/neonView/MailLogFilter_view/MailLogFilter_view.aod @@ -41,6 +41,10 @@ <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> diff --git a/process/Bulkmail_lib/process.js b/process/Bulkmail_lib/process.js index 79427698a5..df33fd1b0e 100644 --- a/process/Bulkmail_lib/process.js +++ b/process/Bulkmail_lib/process.js @@ -19,6 +19,8 @@ import("system.process"); import("system.notification"); import("Document_lib"); import("system.db"); +import("system.workflow"); +import("system.logging"); /** * Functions for bulk mails. @@ -43,13 +45,13 @@ BulkMailUtils.sendBulkMailOnServer = function (pBulkMailId, pTestRun, pUser) pUser = EmployeeUtils.getCurrentUserId(); var processConfig = process.createStartAsyncConfig() - .setName("sendBulkMail_serverProcess") - .setLocalVariables({ - bulkMailId : pBulkMailId, - testRun : pTestRun, - user : pUser || "" - }) - .setUser(pUser||"mailbridge") + .setName("sendBulkMail_serverProcess") + .setLocalVariables({ + bulkMailId : pBulkMailId, + testRun : pTestRun, + user : pUser || "" + }) + .setUser(pUser||"mailbridge") process.startAsync(processConfig); } @@ -67,10 +69,10 @@ BulkMailUtils.sendBulkMailOnServer = function (pBulkMailId, pTestRun, pUser) BulkMailUtils.sendBulkMail = function (pBulkMailId, pTestRun) { var [templateId, subject, emailSender, createActivity, bulkMailName, useTemplateAttachments] = - newSelect("DOCUMENTTEMPLATE_ID, SUBJECT, SENDER_EMAIL_ADDRESS, CREATEACTIVITIES, NAME, USE_TEMPLATE_ATTACHMENTS") - .from("BULKMAIL") - .where("BULKMAIL.BULKMAILID", pBulkMailId) - .arrayRow(); + newSelect("DOCUMENTTEMPLATE_ID, SUBJECT, SENDER_EMAIL_ADDRESS, CREATEACTIVITIES, NAME, USE_TEMPLATE_ATTACHMENTS") + .from("BULKMAIL") + .where("BULKMAIL.BULKMAILID", pBulkMailId) + .arrayRow(); useTemplateAttachments = useTemplateAttachments == "1"; @@ -81,27 +83,27 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pTestRun) if (pTestRun) { 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.TEST_RECIPIENT",1) - .table(); + .from("CONTACT") + .join("BULKMAILRECIPIENT", "BULKMAILRECIPIENT.CONTACT_ID = CONTACT.CONTACTID") + .where("BULKMAILRECIPIENT.BULKMAIL_ID", pBulkMailId) + .and("BULKMAILRECIPIENT.TEST_RECIPIENT",1) + .table(); testRecipientData = newSelect("BULKMAILTESTRECIPIENT.CONTACT_ID, BULKMAILTESTRECIPIENT.EMAIL_ADDRESS") - .from("BULKMAILTESTRECIPIENT") - .where("BULKMAILTESTRECIPIENT.BULKMAIL_ID",pBulkMailId) - .table(); + .from("BULKMAILTESTRECIPIENT") + .where("BULKMAILTESTRECIPIENT.BULKMAIL_ID",pBulkMailId) + .table(); } else { 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)) - .table(); + .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)) + .table(); } var mailrunId = util.getNewUUID(); @@ -109,7 +111,9 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pTestRun) db.insertData("MAIL_RUN", ["MAIL_RUNID","OBJECT_ROWID","OBJECT_TYPE","DATE_RUN_START","STATUS","TESTRUN"], null, [mailrunId,pBulkMailId,"BULKMAIL",vars.get("$sys.date"),$KeywordRegistry.bulkMailStatus$beingSent(),(pTestRun?1:0)]); - var contactIds = recipientData.map(function (e) {return e[1];}); + var contactIds = recipientData.map(function (e) { + return e[1]; + }); var successIds = []; var failedIds = []; var sentDate = vars.get("$sys.date"); @@ -121,95 +125,92 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pTestRun) var bulkMailLink = [["BulkMail", pBulkMailId]]; var activitySubject = translate.withArguments("Bulk mail \"%0\" sent", [bulkMailName]); if (!pTestRun){ - for (let i = 0, l = recipientData.length; i < l; i++) + for (let i = 0, l = recipientData.length; i < l; i++) - { + { - let isSuccess = false; - let contactId = recipientData[i][1]; - let email = mails[contactId]; - let mailLogId = util.getNewUUID(); - if (email !== undefined && recipientData[i][2]) - { - email.toRecipients = [recipientData[i][2]]; - email.sender = emailSender; - email.subject = subjects[contactId]; + let isSuccess = false; + let contactId = recipientData[i][1]; + let email = mails[contactId]; + let mailLogId = util.getNewUUID(); + if (email !== undefined && recipientData[i][2]) + { + email.toRecipients = [recipientData[i][2]]; + email.sender = emailSender; + email.subject = subjects[contactId]; - this.storeEmlFile(pBulkMailId, mailrunId, mailLogId,email.getEML()); - isSuccess = email.send(); - } + this.storeEmlFile(pBulkMailId, mailrunId, mailLogId,email.getEML()); + isSuccess = email.send(); + } - if (recipientData[i][0]) //set the recipient status to 'sent' or 'failed' - { + if (recipientData[i][0]) //set the recipient status to 'sent' or 'failed' + { - db.insertData("MAIL_LOG", ["MAIL_LOGID","MAIL_RUN_ID","CONTACT_ID","STATUS","SENDER_EMAIL","RECIPIENT_EMAIL","MAILING_SUBJECT","DATE_SEND"], null, [mailLogId,mailrunId,contactId,(isSuccess ?$KeywordRegistry.bulkMailRecipientStatus$sent(): $KeywordRegistry.bulkMailRecipientStatus$failed()),emailSender,recipientData[i][2],subjects[contactId],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, recipientData[i][0]); - if (isSuccess && createActivity == "1") - { - let activityData = { - categoryKeywordId : $KeywordRegistry.activityCategory$mail(), - directionKeywordId : $KeywordRegistry.activityDirection$outgoing(), - subject : activitySubject, - content : email.body - }; - let contactLink = [[ContactUtils.getContextByPersOrg(recipientData[i][3], recipientData[i][4]), recipientData[i][1]]]; - ActivityUtils.insertNewActivity(activityData, bulkMailLink.concat(contactLink)); - } + db.insertData("MAIL_LOG", ["MAIL_LOGID","MAIL_RUN_ID","CONTACT_ID","STATUS","SENDER_EMAIL","RECIPIENT_EMAIL","MAILING_SUBJECT","DATE_SEND"], null, [mailLogId,mailrunId,contactId,(isSuccess ?$KeywordRegistry.bulkMailRecipientStatus$sent(): $KeywordRegistry.bulkMailRecipientStatus$failed()),emailSender,recipientData[i][2],subjects[contactId],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, recipientData[i][0]); + if (isSuccess && createActivity == "1") + { + let activityData = { + categoryKeywordId : $KeywordRegistry.activityCategory$mail(), + directionKeywordId : $KeywordRegistry.activityDirection$outgoing(), + subject : activitySubject, + content : email.body + }; + let contactLink = [[ContactUtils.getContextByPersOrg(recipientData[i][3], recipientData[i][4]), recipientData[i][1]]]; + ActivityUtils.insertNewActivity(activityData, bulkMailLink.concat(contactLink)); } } + } - newWhereIfSet("BULKMAILRECIPIENT.BULKMAILRECIPIENTID", successIds, SqlBuilder.IN()) - .updateData(true, "BULKMAILRECIPIENT", ["STATUS", "SENTDATE"], null, [$KeywordRegistry.bulkMailRecipientStatus$sent(), sentDate]); + 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]); + newWhereIfSet("BULKMAILRECIPIENT.BULKMAILRECIPIENTID", failedIds, SqlBuilder.IN()) + .updateData(true, "BULKMAILRECIPIENT", ["STATUS", "SENTDATE"], null, [$KeywordRegistry.bulkMailRecipientStatus$failed(), sentDate]); - newWhere("MAIL_RUN.MAIL_RUNID",mailrunId) - .updateData(true,"MAIL_RUN",["STATUS","DATE_RUN_FINISHED"],null,[$KeywordRegistry.bulkMailStatus$sent(),vars.get("$sys.date")]); + newWhere("MAIL_RUN.MAIL_RUNID",mailrunId) + .updateData(true,"MAIL_RUN",["STATUS","DATE_RUN_FINISHED"],null,[$KeywordRegistry.bulkMailStatus$sent(),vars.get("$sys.date")]); - newWhere("BULKMAIL.BULKMAILID", pBulkMailId) - .updateData(true, "BULKMAIL", ["STATUS"], null, [$KeywordRegistry.bulkMailStatus$sent()]); + newWhere("BULKMAIL.BULKMAILID", pBulkMailId) + .updateData(true, "BULKMAIL", ["STATUS"], null, [$KeywordRegistry.bulkMailStatus$sent()]); - }else{ - for (let i = 0, l = recipientData.length; i < l; i++){ - logging.log("here"); - let isSuccess = false; - let contactId = recipientData[i][1]; - let email = mails[contactId]; + }else{ + for (let i = 0, l = recipientData.length; i < l; i++){ + let isSuccess = false; + let contactId = recipientData[i][1]; + let email = mails[contactId]; - if (email !== undefined) - { - logging.log("email not undefined"); - logging.log(JSON.stringify(testRecipientData)); - 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]]; - isSuccess = email.send(); + 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]]; + isSuccess = email.send(); - Array.prototype.push.call(isSuccess ? successIds : failedIds, recipientData[i][0]); + Array.prototype.push.call(isSuccess ? successIds : failedIds, recipientData[i][0]); - if(testRecipientData[j][0]){ - let mailLogId = util.getNewUUID(); - db.insertData("MAIL_LOG", ["MAIL_LOGID","MAIL_RUN_ID","CONTACT_ID","STATUS","SENDER_EMAIL","RECIPIENT_EMAIL","MAILING_SUBJECT","DATE_SEND"], null, [mailLogId,mailrunId,testRecipientData[j][0],(isSuccess ?$KeywordRegistry.bulkMailRecipientStatus$sent(): $KeywordRegistry.bulkMailRecipientStatus$failed()),emailSender,testRecipientData[j][1],email.subject,vars.get("$sys.date")]); - this.storeEmlFile(pBulkMailId, mailrunId, mailLogId,email.getEML()); - } + if(testRecipientData[j][0]){ + let mailLogId = util.getNewUUID(); + db.insertData("MAIL_LOG", ["MAIL_LOGID","MAIL_RUN_ID","CONTACT_ID","STATUS","SENDER_EMAIL","RECIPIENT_EMAIL","MAILING_SUBJECT","DATE_SEND"], null, [mailLogId,mailrunId,testRecipientData[j][0],(isSuccess ?$KeywordRegistry.bulkMailRecipientStatus$sent(): $KeywordRegistry.bulkMailRecipientStatus$failed()),emailSender,testRecipientData[j][1],email.subject,vars.get("$sys.date")]); + this.storeEmlFile(pBulkMailId, mailrunId, mailLogId,email.getEML()); } + } } - } } - newWhere("MAIL_RUN.MAIL_RUNID",mailrunId) - .updateData(true,"MAIL_RUN",["STATUS","DATE_RUN_FINISHED"],null,[$KeywordRegistry.bulkMailStatus$sent(),vars.get("$sys.date")]); - } + newWhere("MAIL_RUN.MAIL_RUNID",mailrunId) + .updateData(true,"MAIL_RUN",["STATUS","DATE_RUN_FINISHED"],null,[$KeywordRegistry.bulkMailStatus$sent(),vars.get("$sys.date")]); + + } return { sucessful : successIds.length, @@ -247,15 +248,15 @@ BulkMailUtils.openAddRecipientView = function (pContext, pContactIds, pFilter) 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()))) - .where("BULKMAILRECIPIENT.BULKMAIL_ID", pBulkMailId) - .arrayColumn(); + .from("BULKMAILRECIPIENT") + .join("CONTACT", newWhere() + .and("BULKMAILRECIPIENT.CONTACT_ID = CONTACT.CONTACTID") + .and(ContactUtils.getCommRestrictionCondition($KeywordRegistry.communicationMediumCampaign$mail()))) + .where("BULKMAILRECIPIENT.BULKMAIL_ID", pBulkMailId) + .arrayColumn(); newWhereIfSet("BULKMAILRECIPIENT.BULKMAILRECIPIENTID", recipientIds, SqlBuilder.IN()) - .deleteData(); + .deleteData(); } /** @@ -271,9 +272,9 @@ BulkMailUtils.addRecipients = function (pBulkMailId, pContactIds) if (pContactIds.length > 0) { var contactData = newSelect(["CONTACTID", "(" + CommUtil.getStandardSubSqlMail(newWhere("COMMUNICATION.CONTACT_ID = CONTACTID")) + ")"]) - .from("CONTACT") - .where("CONTACT.CONTACTID", pContactIds, SqlBuilder.IN()) - .table(); + .from("CONTACT") + .where("CONTACT.CONTACTID", pContactIds, SqlBuilder.IN()) + .table(); var sqlBuilder = new SqlBuilder(); @@ -345,11 +346,11 @@ BulkMailUtils.getBulkMailTemplate = function (pBulkMailId, pDocumentTemplateId, BulkMailUtils.isRecipient = function (pBulkMailId, pContactId, pRecipientId) { return newSelect("count(*)") - .from("BULKMAILRECIPIENT") - .where("BULKMAILRECIPIENT.CONTACT_ID", pContactId) - .and("BULKMAILRECIPIENT.BULKMAIL_ID", pBulkMailId) - .andIfSet("BULKMAILRECIPIENT.BULKMAILRECIPIENTID", pRecipientId, SqlBuilder.NOT_EQUAL()) - .cell() != "0"; //TODO: is there a way exists could be used? + .from("BULKMAILRECIPIENT") + .where("BULKMAILRECIPIENT.CONTACT_ID", pContactId) + .and("BULKMAILRECIPIENT.BULKMAIL_ID", pBulkMailId) + .andIfSet("BULKMAILRECIPIENT.BULKMAILRECIPIENTID", pRecipientId, SqlBuilder.NOT_EQUAL()) + .cell() != "0"; //TODO: is there a way exists could be used? } /** @@ -377,17 +378,17 @@ BulkMailUtils.newBulkMail = function (pRecipients) BulkMailUtils.filterNewRecipients = function (pBulkMailId, pContactIds) { return newSelect("CONTACTID") - .from("CONTACT") - .whereIfSet("CONTACT.CONTACTID", pContactIds, SqlBuilder.IN()) - // only add contacts that aren't already recipients - .and(null, newSelect("BULKMAILRECIPIENTID") - .from("BULKMAILRECIPIENT") - .where("BULKMAILRECIPIENT.CONTACT_ID = CONTACT.CONTACTID") - .and("BULKMAILRECIPIENT.BULKMAIL_ID", pBulkMailId) - , SqlBuilder.NOT_EXISTS()) - // check if there's a commrestriction - .and(ContactUtils.getCommRestrictionCondition($KeywordRegistry.communicationMediumCampaign$mail(), true)) - .arrayColumn(); + .from("CONTACT") + .whereIfSet("CONTACT.CONTACTID", pContactIds, SqlBuilder.IN()) + // only add contacts that aren't already recipients + .and(null, newSelect("BULKMAILRECIPIENTID") + .from("BULKMAILRECIPIENT") + .where("BULKMAILRECIPIENT.CONTACT_ID = CONTACT.CONTACTID") + .and("BULKMAILRECIPIENT.BULKMAIL_ID", pBulkMailId) + , SqlBuilder.NOT_EXISTS()) + // check if there's a commrestriction + .and(ContactUtils.getCommRestrictionCondition($KeywordRegistry.communicationMediumCampaign$mail(), true)) + .arrayColumn(); } /** @@ -464,6 +465,7 @@ BulkMailUtils.copy = function(pBulkMailId) }; neon.openContext("BulkMail", null, null, neon.OPERATINGSTATE_NEW, params); } + /* *Stores the Eml file for a bulkmailrecipient in the Filesystem * @@ -501,6 +503,89 @@ BulkMailUtils.getEmlFile = function(pBulkMailId,pMailRunId, pMailLogId){ 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){ + var url ; + if (pLinkId){ + url =newSelect("LINK.URL").from("LINK").where("LINK.LINKID", pLinkId).cell(); + } + return url; +} +/* + *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 link_clickid = util.getNewUUID(); + db.insertData("LINK_CLICK" + , ["LINK_CLICKID","LINK_ID","DEVICE_TYPE","OPERATING_SYSTEM","BROWSER","IP_ADDRESS","MAIL_LOG_ID","DATE_OPENED"] + ,null + , [link_clickid,pLinkId,pDeviceType||"desktop",pOperatingSystemName||"",pBrowsername||"",pIpAddress,pMailLogId,vars.get("$sys.date")] + ); + + + newWhere("MAIL_LOG.MAIL_LOGID", pMailLogId) + .and("MAIL_LOG.OPENER_LINK_CLICK_ID is null") + .updateData(true, "MAIL_LOG", ["MAIL_LOG.OPENER_LINK_CLICK_ID"], null, [link_clickid]); +} + +/*@TODO: Abändern nachdem geklärt ist wie wir IP-Adresse erhalten. Momentan bekommen wir nur Loadbalancer Ip. + * + **/ + +BulkMailUtils.getIpAddressFromHeader = function(pHttpHeader){ + + var ipAddress; + + ipAddress = pHttpHeader["X-forwarded-for"].split(",")[0]; + + return ipAddress; +} + +BulkMailUtils.startBulkmailWorkFlow = function(pMailLogId,pLinkId){ + if (!pMailLogId || !pLinkId) { + return + } + var workFlowKey = newSelect("WORKFLOWPROCESSDEFINITION_KEY").from("LINK").where("LINK.LINKID",pLinkId).cell(); + if (workFlowKey){ + var variables = { + "MAILLOGID": pMailLogId + }; + workflow.startProcessByKey(workFlowKey, variables); + } + +} + + + function SerialLetterUtils () {} /** @@ -514,9 +599,9 @@ function SerialLetterUtils () {} SerialLetterUtils.addRecipients = function (pSerialLetterId, pContactIds) { var columns = [ - "LETTERRECIPIENTID", - "SERIALLETTER_ID", - "CONTACT_ID" + "LETTERRECIPIENTID", + "SERIALLETTER_ID", + "CONTACT_ID" ]; var inserts = []; for (let i = 0, l = pContactIds.length; i < l; i++) @@ -560,13 +645,13 @@ SerialLetterUtils.buildSerialLetterOnServer = function (pSerialLetterId, pRecipi { var user = EmployeeUtils.getCurrentUserId(); var processConfig = process.createStartAsyncConfig() - .setName("buildSerialLetter_serverProcess") - .setLocalVariables({ - "serialLetterId" : pSerialLetterId, - "recipientIds" : JSON.stringify(pRecipientIds), - "user" : user - }) - .setUser(vars.get("$sys.user")); + .setName("buildSerialLetter_serverProcess") + .setLocalVariables({ + "serialLetterId" : pSerialLetterId, + "recipientIds" : JSON.stringify(pRecipientIds), + "user" : user + }) + .setUser(vars.get("$sys.user")); process.startAsync(processConfig); } @@ -582,33 +667,35 @@ SerialLetterUtils.buildSerialLetterOnServer = function (pSerialLetterId, pRecipi SerialLetterUtils.buildSerialLetter = function (pSerialLetterId, pRecipientIds) { var [templateId, title] = newSelect("DOCUMENTTEMPLATE_ID, TITLE") - .from("SERIALLETTER") - .where("SERIALLETTER.SERIALLETTERID", pSerialLetterId) - .arrayRow(true); + .from("SERIALLETTER") + .where("SERIALLETTER.SERIALLETTERID", pSerialLetterId) + .arrayRow(true); var template = SerialLetterUtils.getSerialLetterTemplate(pSerialLetterId, templateId); var contactIdsSelect = newSelect("CONTACT_ID") - .from("LETTERRECIPIENT") - .join("CONTACT", newWhere("LETTERRECIPIENT.CONTACT_ID = CONTACT.CONTACTID")) - .where("LETTERRECIPIENT.SERIALLETTER_ID", pSerialLetterId) - .andIfSet(ContactUtils.getCommRestrictionCondition($KeywordRegistry.communicationMediumCampaign$letter(), true)); + .from("LETTERRECIPIENT") + .join("CONTACT", newWhere("LETTERRECIPIENT.CONTACT_ID = CONTACT.CONTACTID")) + .where("LETTERRECIPIENT.SERIALLETTER_ID", pSerialLetterId) + .andIfSet(ContactUtils.getCommRestrictionCondition($KeywordRegistry.communicationMediumCampaign$letter(), true)); if (pRecipientIds && pRecipientIds.length > 0) contactIdsSelect.and("LETTERRECIPIENT.LETTERRECIPIENTID", pRecipientIds, SqlBuilder.IN()); var contactIds = contactIdsSelect.table(); if(template != null){ - return { - content : template.getSerialLetterByContactIds(contactIds), - filename : template.filename, - title : title - };} - else{ - return{ + return { + content : template.getSerialLetterByContactIds(contactIds), + filename : template.filename, title : title + }; + } - +else{ + return{ + title : title } + +} } /** @@ -627,11 +714,11 @@ SerialLetterUtils.buildSerialLetter = function (pSerialLetterId, pRecipientIds) SerialLetterUtils.isRecipient = function (pSerialLetterId, pContactId, pRecipientId) { return newSelect("count(*)") - .from("LETTERRECIPIENT") - .where("LETTERRECIPIENT.CONTACT_ID", pContactId) - .and("LETTERRECIPIENT.SERIALLETTER_ID", pSerialLetterId) - .andIfSet("LETTERRECIPIENT.LETTERRECIPIENTID", pRecipientId, SqlBuilder.NOT_EQUAL()) - .cell() != "0"; // TODO: is there a way exists could be used? + .from("LETTERRECIPIENT") + .where("LETTERRECIPIENT.CONTACT_ID", pContactId) + .and("LETTERRECIPIENT.SERIALLETTER_ID", pSerialLetterId) + .andIfSet("LETTERRECIPIENT.LETTERRECIPIENTID", pRecipientId, SqlBuilder.NOT_EQUAL()) + .cell() != "0"; // TODO: is there a way exists could be used? } /** @@ -692,7 +779,8 @@ SerialLetterUtils.addParticipantsByCondition = function(pCondition, pSourceTable { var params = { "ContactIds_param" : pCondition, - "comingFrom_param" : pSourceTableName} + "comingFrom_param" : pSourceTableName + } neon.openContext("SerialLetterAddRecipients", "SerialLetterAddRecipientsEdit_view", null, neon.OPERATINGSTATE_VIEW, params); } @@ -707,15 +795,15 @@ SerialLetterUtils.addParticipantsByCondition = function(pCondition, pSourceTable SerialLetterUtils.filterNewRecipients = function (pSerialLetterId, pContactIds) { return newSelect("CONTACTID") - .from("CONTACT") - .whereIfSet("CONTACT.CONTACTID", pContactIds, SqlBuilder.IN()) - // only add contacts that aren't already recipients - .and(null, newSelect("LETTERRECIPIENTID") - .from("LETTERRECIPIENT") - .where("LETTERRECIPIENT.CONTACT_ID = CONTACT.CONTACTID") - .and("LETTERRECIPIENT.SERIALLETTER_ID", pSerialLetterId) - , SqlBuilder.NOT_EXISTS()) - // check if there's a commrestriction - .and(ContactUtils.getCommRestrictionCondition($KeywordRegistry.communicationMediumCampaign$mail(), true)) - .arrayColumn(); + .from("CONTACT") + .whereIfSet("CONTACT.CONTACTID", pContactIds, SqlBuilder.IN()) + // only add contacts that aren't already recipients + .and(null, newSelect("LETTERRECIPIENTID") + .from("LETTERRECIPIENT") + .where("LETTERRECIPIENT.CONTACT_ID = CONTACT.CONTACTID") + .and("LETTERRECIPIENT.SERIALLETTER_ID", pSerialLetterId) + , SqlBuilder.NOT_EXISTS()) + // check if there's a commrestriction + .and(ContactUtils.getCommRestrictionCondition($KeywordRegistry.communicationMediumCampaign$mail(), true)) + .arrayColumn(); } diff --git a/process/KeywordRegistry_basic/process.js b/process/KeywordRegistry_basic/process.js index 551fda9451..db7664a71d 100644 --- a/process/KeywordRegistry_basic/process.js +++ b/process/KeywordRegistry_basic/process.js @@ -376,4 +376,6 @@ $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";}; \ No newline at end of file +$KeywordRegistry.interestLinkStatus$notSubscribed = function(){return "INTERESTLINK_NOTSUBSCRIBED";}; + +$KeywordRegistry.deviceType = function(){return "DeviceType";}; \ 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 0000000000..3af7739cd1 --- /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 0000000000..c65f44d00d --- /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/redirect_rest/process.js b/process/redirect_rest/process.js index fe542e6008..c1e54b29b6 100644 --- a/process/redirect_rest/process.js +++ b/process/redirect_rest/process.js @@ -1,18 +1,33 @@ +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); + 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(ipAddress,mailLogId,linkId,UserAgentObject.browser.name,UserAgentObject.os.name,UserAgentObject.device.type); + + BulkMailUtils.startBulkmailWorkFlow(mailLogId,linkId); + - action.run(); + - 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 bda233f799..83abc318c0 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> -- GitLab From 207327539b66068838e83b6871b487e4cc44a7cf Mon Sep 17 00:00:00 2001 From: "m.groppe" <m.groppe@adito.de> Date: Thu, 1 Apr 2021 10:53:35 +0200 Subject: [PATCH 024/242] [Projekt: xRM-Marketing][TicketNr.: 1075542][LINK: Erweiterung Redirect- und Workflowkennzeichen] [Projekt: xRM-Marketing][TicketNr.: 1077052][BULKMAIL: direkte Zuordnung eines Interessensgebiets] --- .../basic/2021.0.3/Bulkmail/AlterBulkmail.xml | 1 + .../2021.0.3/LinkManagement/CreateLink.xml | 1 + aliasDefinition/Data_alias/Data_alias.aod | 14 +++++++++ entity/BulkMail_entity/BulkMail_entity.aod | 18 +++++++++++ .../interests_id/displayValueProcess.js | 5 ++++ entity/Interest_entity/Interest_entity.aod | 6 ++++ entity/Link_entity/Link_entity.aod | 30 +++++++++++++++++++ .../entityfields/placeholder/onValidation.js | 13 +++++--- .../entityfields/redirect/stateProcess.js | 12 ++++++++ .../entityfields/redirect/valueProcess.js | 8 +++++ .../entityfields/url/onValidation.js | 7 ++++- .../displayValueProcess.js | 5 ++++ .../stateProcess.js | 15 ++++++++++ .../WorkflowDefinition_entity.aod | 6 ++++ .../BulkMailEdit_view/BulkMailEdit_view.aod | 4 +++ .../BulkMailPreview_view.aod | 4 +++ neonView/LinkEdit_view/LinkEdit_view.aod | 8 +++++ .../LinkPreview_view/LinkPreview_view.aod | 8 +++++ 18 files changed, 160 insertions(+), 5 deletions(-) create mode 100644 entity/BulkMail_entity/entityfields/interests_id/displayValueProcess.js create mode 100644 entity/Link_entity/entityfields/redirect/stateProcess.js create mode 100644 entity/Link_entity/entityfields/redirect/valueProcess.js create mode 100644 entity/Link_entity/entityfields/workflowprocessdefinition_key/displayValueProcess.js create mode 100644 entity/Link_entity/entityfields/workflowprocessdefinition_key/stateProcess.js diff --git a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/AlterBulkmail.xml b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/AlterBulkmail.xml index 581dfadfd5..e82543b3b4 100644 --- a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/AlterBulkmail.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/AlterBulkmail.xml @@ -3,6 +3,7 @@ <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 "/> </changeSet> diff --git a/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/CreateLink.xml b/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/CreateLink.xml index 15e2f3340a..6d28b1fbe9 100644 --- a/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/CreateLink.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/CreateLink.xml @@ -15,6 +15,7 @@ <column name="DATE_NEW" type="DATETIME"/> <column name="USER_EDIT" type="NVARCHAR(50)"/> <column name="DATE_EDIT" type="DATETIME"/> + <column name="REDIRECT" type="SMALLINT"/> <column name="WORKFLOWPROCESSDEFINITION_KEY" type="VARCHAR(255)"/> </createTable> </changeSet> diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod index e94d98a842..210be9abd4 100644 --- a/aliasDefinition/Data_alias/Data_alias.aod +++ b/aliasDefinition/Data_alias/Data_alias.aod @@ -18679,6 +18679,20 @@ <title></title> <description></description> </entityFieldDb> + <entityFieldDb> + <name>REDIRECT</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> diff --git a/entity/BulkMail_entity/BulkMail_entity.aod b/entity/BulkMail_entity/BulkMail_entity.aod index 7c014802ec..64ad1c607a 100644 --- a/entity/BulkMail_entity/BulkMail_entity.aod +++ b/entity/BulkMail_entity/BulkMail_entity.aod @@ -382,6 +382,20 @@ </entityParameter> </children> </entityConsumer> + <entityField> + <name>INTEREST_ID</name> + <title>Interest</title> + <consumer>Interests</consumer> + <displayValueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/interests_id/displayValueProcess.js</displayValueProcess> + </entityField> + <entityConsumer> + <name>Interests</name> + <dependency> + <name>dependency</name> + <entityName>Interest_entity</entityName> + <fieldName>#PROVIDER</fieldName> + </dependency> + </entityConsumer> </entityFields> <recordContainers> <dbRecordContainer> @@ -463,6 +477,10 @@ <name>DATE_TO_SEND.value</name> <recordfield>BULKMAIL.DATE_TO_SEND</recordfield> </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>INTEREST_ID.value</name> + <recordfield>BULKMAIL.INTEREST_ID</recordfield> + </dbRecordFieldMapping> </recordFieldMappings> <linkInformation> <linkInformation> diff --git a/entity/BulkMail_entity/entityfields/interests_id/displayValueProcess.js b/entity/BulkMail_entity/entityfields/interests_id/displayValueProcess.js new file mode 100644 index 0000000000..e2c5bbf915 --- /dev/null +++ b/entity/BulkMail_entity/entityfields/interests_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/Interest_entity/Interest_entity.aod b/entity/Interest_entity/Interest_entity.aod index 02ed4c9511..f2485ca1f2 100644 --- a/entity/Interest_entity/Interest_entity.aod +++ b/entity/Interest_entity/Interest_entity.aod @@ -18,6 +18,12 @@ <fieldName>Interests</fieldName> <isConsumer v="false" /> </entityDependency> + <entityDependency> + <name>3b09958b-0175-47fa-9528-2d5570c21162</name> + <entityName>BulkMail_entity</entityName> + <fieldName>Interests</fieldName> + <isConsumer v="false" /> + </entityDependency> </dependencies> </entityProvider> <entityProvider> diff --git a/entity/Link_entity/Link_entity.aod b/entity/Link_entity/Link_entity.aod index 1d89e2c2bf..b44e8481e0 100644 --- a/entity/Link_entity/Link_entity.aod +++ b/entity/Link_entity/Link_entity.aod @@ -112,6 +112,28 @@ </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/Link_entity/entityfields/workflowprocessdefinition_key/stateProcess.js</stateProcess> + <displayValueProcess>%aditoprj%/entity/Link_entity/entityfields/workflowprocessdefinition_key/displayValueProcess.js</displayValueProcess> + </entityField> + <entityField> + <name>REDIRECT</name> + <title>Redirect</title> + <contentType>BOOLEAN</contentType> + <stateProcess>%aditoprj%/entity/Link_entity/entityfields/redirect/stateProcess.js</stateProcess> + <valueProcess>%aditoprj%/entity/Link_entity/entityfields/redirect/valueProcess.js</valueProcess> + </entityField> </entityFields> <recordContainers> <dbRecordContainer> @@ -166,6 +188,14 @@ <name>PLACEHOLDER.value</name> <recordfield>LINK.PLACEHOLDER</recordfield> </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>WORKFLOWPROCESSDEFINITION_KEY.value</name> + <recordfield>LINK.WORKFLOWPROCESSDEFINITION_KEY</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>REDIRECT.value</name> + <recordfield>LINK.REDIRECT</recordfield> + </dbRecordFieldMapping> </recordFieldMappings> <linkInformation> <linkInformation> diff --git a/entity/Link_entity/entityfields/placeholder/onValidation.js b/entity/Link_entity/entityfields/placeholder/onValidation.js index fc499ca653..0da4919b8b 100644 --- a/entity/Link_entity/entityfields/placeholder/onValidation.js +++ b/entity/Link_entity/entityfields/placeholder/onValidation.js @@ -4,11 +4,16 @@ import("Placeholder_lib"); import("Sql_lib"); if (vars.get("$local.value")){ - var LinkPlaceholders = PlaceholderUtils.getPlaceholders().concat(PlaceholderUtils.getLinkPlaceholders()); - - if (LinkPlaceholders.map(function(a){ + var defaultPlaceholders = PlaceholderUtils.getPlaceholders(); + var linkPlaceholders = newSelect("LINK.PLACEHOLDER") + .from("LINK") + .where("LINK.LINKID",vars.get("$field.LINKID"),SqlBuilder.NOT_EQUAL()) + .and("LINK.PLACEHOLDER is not null").arrayColumn(); + + + if (defaultPlaceholders.map(function(a){ return a.placeholderName - }).indexOf(vars.get("$local.value"))!= -1){ + }).indexOf(vars.get("$local.value"))!= -1 || linkPlaceholders.indexOf(vars.get("$local.value"))!= -1){ result.string("Placeholders must be unique") } diff --git a/entity/Link_entity/entityfields/redirect/stateProcess.js b/entity/Link_entity/entityfields/redirect/stateProcess.js new file mode 100644 index 0000000000..20d582c778 --- /dev/null +++ b/entity/Link_entity/entityfields/redirect/stateProcess.js @@ -0,0 +1,12 @@ +import("system.result"); +import("system.vars"); +import("KeywordRegistry_basic"); +import("system.neon"); + +var linktype = vars.get("$field.LINKTYPE"); + +if(linktype == $KeywordRegistry.linkType$EMail()){ + result.string(neon.COMPONENTSTATE_AUTO); +}else{ + result.string(neon.COMPONENTSTATE_INVISIBLE); +} \ No newline at end of file diff --git a/entity/Link_entity/entityfields/redirect/valueProcess.js b/entity/Link_entity/entityfields/redirect/valueProcess.js new file mode 100644 index 0000000000..4e9b28e107 --- /dev/null +++ b/entity/Link_entity/entityfields/redirect/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/Link_entity/entityfields/url/onValidation.js b/entity/Link_entity/entityfields/url/onValidation.js index 57a945a4a1..22aae71223 100644 --- a/entity/Link_entity/entityfields/url/onValidation.js +++ b/entity/Link_entity/entityfields/url/onValidation.js @@ -8,4 +8,9 @@ if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW && vars.get("$loca { if(newSelect("URL").from("LINK").where("LINK.URL", vars.get("$local.value")).cell()) result.string(translate.text("Die Url muss eindeutig sein!")) -} \ No newline at end of file + + if(vars.get("$field.REDIRECT") == "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/Link_entity/entityfields/workflowprocessdefinition_key/displayValueProcess.js b/entity/Link_entity/entityfields/workflowprocessdefinition_key/displayValueProcess.js new file mode 100644 index 0000000000..4172453ca7 --- /dev/null +++ b/entity/Link_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/Link_entity/entityfields/workflowprocessdefinition_key/stateProcess.js b/entity/Link_entity/entityfields/workflowprocessdefinition_key/stateProcess.js new file mode 100644 index 0000000000..451384f5e0 --- /dev/null +++ b/entity/Link_entity/entityfields/workflowprocessdefinition_key/stateProcess.js @@ -0,0 +1,15 @@ +import("system.result"); +import("system.vars"); +import("KeywordRegistry_basic"); +import("system.neon"); + +var linktype = vars.get("$field.LINKTYPE"); +var redirect = vars.get("$field.REDIRECT"); + +if(linktype == $KeywordRegistry.linkType$EMail() && redirect == "1"){ + + result.string(neon.COMPONENTSTATE_AUTO); +}else{ + + result.string(neon.COMPONENTSTATE_INVISIBLE); +} \ No newline at end of file diff --git a/entity/WorkflowDefinition_entity/WorkflowDefinition_entity.aod b/entity/WorkflowDefinition_entity/WorkflowDefinition_entity.aod index 17bfa59403..2e3b5cf4c7 100644 --- a/entity/WorkflowDefinition_entity/WorkflowDefinition_entity.aod +++ b/entity/WorkflowDefinition_entity/WorkflowDefinition_entity.aod @@ -28,6 +28,12 @@ <fieldName>WorkflowDefinitions</fieldName> <isConsumer v="false" /> </entityDependency> + <entityDependency> + <name>349ab9d2-edbb-4571-be14-3fb749bfff50</name> + <entityName>Link_entity</entityName> + <fieldName>WorkflowDefinitions</fieldName> + <isConsumer v="false" /> + </entityDependency> </dependencies> </entityProvider> <entityField> diff --git a/neonView/BulkMailEdit_view/BulkMailEdit_view.aod b/neonView/BulkMailEdit_view/BulkMailEdit_view.aod index 2dbb4bea83..6e234a5ab8 100644 --- a/neonView/BulkMailEdit_view/BulkMailEdit_view.aod +++ b/neonView/BulkMailEdit_view/BulkMailEdit_view.aod @@ -76,6 +76,10 @@ <name>06f08869-5a81-41cb-8c7e-51be6a7041a7</name> <entityField>DESCRIPTION</entityField> </entityFieldLink> + <entityFieldLink> + <name>1891cd3a-34a5-4c7d-9e35-635640476c63</name> + <entityField>INTEREST_ID</entityField> + </entityFieldLink> </fields> </genericViewTemplate> <genericViewTemplate> diff --git a/neonView/BulkMailPreview_view/BulkMailPreview_view.aod b/neonView/BulkMailPreview_view/BulkMailPreview_view.aod index db906f7eb3..3cd10ec5dd 100644 --- a/neonView/BulkMailPreview_view/BulkMailPreview_view.aod +++ b/neonView/BulkMailPreview_view/BulkMailPreview_view.aod @@ -55,6 +55,10 @@ <name>65546b24-3f6d-4639-b144-491ff5c478c1</name> <entityField>USE_TEMPLATE_ATTACHMENTS</entityField> </entityFieldLink> + <entityFieldLink> + <name>9f3df668-6741-4faf-9afc-a0d761db990a</name> + <entityField>INTEREST_ID</entityField> + </entityFieldLink> </fields> </genericViewTemplate> <neonViewReference> diff --git a/neonView/LinkEdit_view/LinkEdit_view.aod b/neonView/LinkEdit_view/LinkEdit_view.aod index 85fe373563..9ee5c3ecaf 100644 --- a/neonView/LinkEdit_view/LinkEdit_view.aod +++ b/neonView/LinkEdit_view/LinkEdit_view.aod @@ -31,6 +31,14 @@ <name>4313c2fb-3551-4c66-81c9-ad950c44a105</name> <entityField>PLACEHOLDER</entityField> </entityFieldLink> + <entityFieldLink> + <name>2b22fb4a-5e7e-48ee-b6d1-3ee4381fb419</name> + <entityField>REDIRECT</entityField> + </entityFieldLink> + <entityFieldLink> + <name>90ab2682-bc2d-4989-ab7b-b47045a3cbf3</name> + <entityField>WORKFLOWPROCESSDEFINITION_KEY</entityField> + </entityFieldLink> </fields> </genericViewTemplate> <neonViewReference> diff --git a/neonView/LinkPreview_view/LinkPreview_view.aod b/neonView/LinkPreview_view/LinkPreview_view.aod index b6a5566afb..5712a77d7f 100644 --- a/neonView/LinkPreview_view/LinkPreview_view.aod +++ b/neonView/LinkPreview_view/LinkPreview_view.aod @@ -28,6 +28,14 @@ <name>92bb0227-5418-4a61-a7cd-eccc8def83f9</name> <entityField>PLACEHOLDER</entityField> </entityFieldLink> + <entityFieldLink> + <name>840b0f8d-763f-402d-b318-6317402a7c6c</name> + <entityField>REDIRECT</entityField> + </entityFieldLink> + <entityFieldLink> + <name>a807f6b9-252c-4545-a2c9-266c64012097</name> + <entityField>WORKFLOWPROCESSDEFINITION_KEY</entityField> + </entityFieldLink> </fields> </genericViewTemplate> </children> -- GitLab From ab5e951107b1f08850ba5abd4ef354d51a7e3067 Mon Sep 17 00:00:00 2001 From: "p.neub" <p.neub@adito.de> Date: Tue, 6 Apr 2021 09:45:32 +0200 Subject: [PATCH 025/242] =?UTF-8?q?[Projekt:=20xRM-Sales][TicketNr.:=20107?= =?UTF-8?q?5968][Preise=20in=20Fremdw=C3=A4hrung=20werden=20nicht=20ins=20?= =?UTF-8?q?Angebot=20=C3=BCbernommen]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entityfields/currency/stateProcess.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/entity/Offer_entity/entityfields/currency/stateProcess.js b/entity/Offer_entity/entityfields/currency/stateProcess.js index 3625a84172..20a5979a75 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); +} -- GitLab From 753e376495db8c697e682d6d7f1178fddc3f90fa Mon Sep 17 00:00:00 2001 From: Simon Leipold <s.leipold@adito.de> Date: Tue, 6 Apr 2021 11:52:12 +0200 Subject: [PATCH 026/242] [Projekt: Entwicklung - Neon][TicketNr.: 1077891][Bedingte Berechtigungen werden in MultiEditTable (NeonNumberField) falsch ausgewertet] --- .../Data_alias/basic/_demoData/generatedData/offeritem.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/offeritem.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/offeritem.xml index 06d2014637..6cc33b720c 100644 --- a/.liquibase/Data_alias/basic/_demoData/generatedData/offeritem.xml +++ b/.liquibase/Data_alias/basic/_demoData/generatedData/offeritem.xml @@ -275,6 +275,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> -- GitLab From cf401a99ffbaf61a96a693259ed61b14a43e1858 Mon Sep 17 00:00:00 2001 From: Pascal Neub <p.neub@adito.de> Date: Tue, 6 Apr 2021 11:55:15 +0000 Subject: [PATCH 027/242] =?UTF-8?q?[Projekt:=20xRM-Sales][TicketNr.:=20107?= =?UTF-8?q?5641][Checklisteneintr=C3=A4ge=20anpassen=20und=20Phasen=20umbe?= =?UTF-8?q?nennen]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../basic/2021.0.3/Checklists/changelog.xml | 10 + ...e_ab_attributeusage_salesprojectorigin.xml | 56 ++++ .../Checklists/update_checklistentry.xml | 53 ++++ .../2021.0.3/Checklists/update_keyword.xml | 190 +++++++++++++ .../2021.0.3/Checklists/update_phase.xml | 99 +++++++ .../Checklists/update_salesproject.xml | 54 ++++ .../Data_alias/basic/2021.0.3/changelog.xml | 6 + .../Data_alias/basic/_demoData/changelog.xml | 1 + .../generatedData/checklistentry.xml | 253 ++++++++++++++++++ .../_demoData/generatedData/salesproject.xml | 10 +- .liquibase/Data_alias/changelog.xml | 1 + .../ChecklistEntryValue_entity.aod | 2 +- .../children/setcompleted/onActionProcess.js | 3 +- .../children/setcompleted/titleProcess.js | 8 + .../entityfields/title/displayValueProcess.js | 9 +- .../SalesprojectMilestone_entity.aod | 4 - .../valuelongname/valueProcess.js | 8 - .../SalesprojectPhaseDefinition_entity.aod | 7 - .../salesprojectphasefullname/valueProcess.js | 36 --- .../_____LANGUAGE_EXTRA.aod | 18 ++ .../_____LANGUAGE_de/_____LANGUAGE_de.aod | 4 + .../_____LANGUAGE_en/_____LANGUAGE_en.aod | 22 +- .../SalesprojectMilestoneInfo_view.aod | 4 +- ...alesprojectPhaseDefinitionPreview_view.aod | 1 - .../ChecklistEntryRegistry_basic/process.js | 116 ++++++++ process/KeywordRegistry_basic/process.js | 2 + 26 files changed, 907 insertions(+), 70 deletions(-) create mode 100644 .liquibase/Data_alias/basic/2021.0.3/Checklists/changelog.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.3/Checklists/update_ab_attributeusage_salesprojectorigin.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.3/Checklists/update_checklistentry.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.3/Checklists/update_keyword.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.3/Checklists/update_phase.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.3/Checklists/update_salesproject.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.3/changelog.xml create mode 100644 .liquibase/Data_alias/basic/_demoData/generatedData/checklistentry.xml create mode 100644 entity/ChecklistEntryValue_entity/entityfields/setchecklistentrycompleted/children/setcompleted/titleProcess.js delete mode 100644 entity/SalesprojectMilestone_entity/entityfields/valuelongname/valueProcess.js delete mode 100644 entity/SalesprojectPhaseDefinition_entity/entityfields/salesprojectphasefullname/valueProcess.js 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 0000000000..577da62148 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/Checklists/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="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"/> +</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 0000000000..e862924805 --- /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 0000000000..384be08ae0 --- /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 0000000000..db309c871c --- /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 0000000000..837a9380da --- /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="d204fc4f-f670-4df6-86ae-8a57a1fce5ae"> + <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="Voraussetzungen 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="Voraussetzungen 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="Voraussetzungen 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="Voraussetzungen 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="Voraussetzungen 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 0000000000..8e16c2d466 --- /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/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/changelog.xml new file mode 100644 index 0000000000..b5e6f62415 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/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="Checklists/changelog.xml"/> +</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 f6d11f67ac..d27f20c3d1 100644 --- a/.liquibase/Data_alias/basic/_demoData/changelog.xml +++ b/.liquibase/Data_alias/basic/_demoData/changelog.xml @@ -14,6 +14,7 @@ <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"/> 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 0000000000..6184351538 --- /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="salesprojectTeamRoles"/> + <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/salesproject.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/salesproject.xml index e974404a48..2f7aec8505 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/changelog.xml b/.liquibase/Data_alias/changelog.xml index c46a164da2..14683de8f2 100644 --- a/.liquibase/Data_alias/changelog.xml +++ b/.liquibase/Data_alias/changelog.xml @@ -22,6 +22,7 @@ <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"/> <!--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"/>--> diff --git a/entity/ChecklistEntryValue_entity/ChecklistEntryValue_entity.aod b/entity/ChecklistEntryValue_entity/ChecklistEntryValue_entity.aod index 307cc1e870..d883abe34f 100644 --- a/entity/ChecklistEntryValue_entity/ChecklistEntryValue_entity.aod +++ b/entity/ChecklistEntryValue_entity/ChecklistEntryValue_entity.aod @@ -93,11 +93,11 @@ <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" /> <iconId>NEON:MQL</iconId> + <titleProcess>%aditoprj%/entity/ChecklistEntryValue_entity/entityfields/setchecklistentrycompleted/children/setcompleted/titleProcess.js</titleProcess> </entityActionField> </children> </entityActionGroup> diff --git a/entity/ChecklistEntryValue_entity/entityfields/setchecklistentrycompleted/children/setcompleted/onActionProcess.js b/entity/ChecklistEntryValue_entity/entityfields/setchecklistentrycompleted/children/setcompleted/onActionProcess.js index 80020200dc..86551188b3 100644 --- a/entity/ChecklistEntryValue_entity/entityfields/setchecklistentrycompleted/children/setcompleted/onActionProcess.js +++ b/entity/ChecklistEntryValue_entity/entityfields/setchecklistentrycompleted/children/setcompleted/onActionProcess.js @@ -3,6 +3,5 @@ import("system.neon"); import("Sql_lib"); newWhere("CHECKLISTENTRYVALUE.CHECKLISTENTRYVALUEID", "$field.CHECKLISTENTRYVALUEID") - .updateFields({"IS_FULFILLED":1}); - + .updateFields({"IS_FULFILLED": parseInt(vars.get("$field.IS_FULFILLED")) > 0 ? 0 : 1}); neon.refresh(); \ No newline at end of file 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 0000000000..7a3fbe0a7a --- /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/ChecklistEntry_entity/entityfields/title/displayValueProcess.js b/entity/ChecklistEntry_entity/entityfields/title/displayValueProcess.js index 8a1672dcd9..13b9519c0c 100644 --- a/entity/ChecklistEntry_entity/entityfields/title/displayValueProcess.js +++ b/entity/ChecklistEntry_entity/entityfields/title/displayValueProcess.js @@ -2,10 +2,15 @@ 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 (vars.get("$field.AUTO") == 1) +{ + result.string($ChecklistEntryRegistry[title]().title); +} +else { result.string(translate.text(title)); -} \ No newline at end of file +} diff --git a/entity/SalesprojectMilestone_entity/SalesprojectMilestone_entity.aod b/entity/SalesprojectMilestone_entity/SalesprojectMilestone_entity.aod index 9b33104d18..e8af3acf65 100644 --- a/entity/SalesprojectMilestone_entity/SalesprojectMilestone_entity.aod +++ b/entity/SalesprojectMilestone_entity/SalesprojectMilestone_entity.aod @@ -139,10 +139,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/valuelongname/valueProcess.js b/entity/SalesprojectMilestone_entity/entityfields/valuelongname/valueProcess.js deleted file mode 100644 index b153ca0c6b..0000000000 --- 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 29cb770c0a..a237428017 100644 --- a/entity/SalesprojectPhaseDefinition_entity/SalesprojectPhaseDefinition_entity.aod +++ b/entity/SalesprojectPhaseDefinition_entity/SalesprojectPhaseDefinition_entity.aod @@ -60,13 +60,6 @@ </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> <dependency> diff --git a/entity/SalesprojectPhaseDefinition_entity/entityfields/salesprojectphasefullname/valueProcess.js b/entity/SalesprojectPhaseDefinition_entity/entityfields/salesprojectphasefullname/valueProcess.js deleted file mode 100644 index 75192dbbe5..0000000000 --- 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/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index 2ef17513e2..eb5f6d8993 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -8166,6 +8166,24 @@ <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>Shows the global Covid Cases in a Table</key> </entry> diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod index 7e2894f7f2..29b9146ab1 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -10789,6 +10789,10 @@ Bitte Datumseingabe prüfen</value> <key>Internal responsible</key> <value>Intern: Gebietsverantwortlich</value> </entry> + <entry> + <key>Set not completed</key> + <value>Nicht erledigt setzen</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 8521e563b4..b1b1256d0c 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -8164,7 +8164,7 @@ <key>Offer exists</key> </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> + <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>Recalculate Classifications</key> @@ -8173,7 +8173,7 @@ <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 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> + <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>EML files can't be edited here. You can download, edit and reupload the template to change the content.</key> @@ -8247,6 +8247,24 @@ <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>Shows the global Covid Cases in a Table</key> </entry> diff --git a/neonView/SalesprojectMilestoneInfo_view/SalesprojectMilestoneInfo_view.aod b/neonView/SalesprojectMilestoneInfo_view/SalesprojectMilestoneInfo_view.aod index 965ca73b48..0fe777d742 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/SalesprojectPhaseDefinitionPreview_view/SalesprojectPhaseDefinitionPreview_view.aod b/neonView/SalesprojectPhaseDefinitionPreview_view/SalesprojectPhaseDefinitionPreview_view.aod index a2fe192db7..25f7dc6572 100644 --- a/neonView/SalesprojectPhaseDefinitionPreview_view/SalesprojectPhaseDefinitionPreview_view.aod +++ b/neonView/SalesprojectPhaseDefinitionPreview_view/SalesprojectPhaseDefinitionPreview_view.aod @@ -14,7 +14,6 @@ <name>cardViewTemplate</name> <iconField>#ICON</iconField> <titleField>PHASE</titleField> - <subtitleField>SalesprojectPhaseFullname</subtitleField> <entityField>#ENTITY</entityField> </cardViewTemplate> <neonViewReference> diff --git a/process/ChecklistEntryRegistry_basic/process.js b/process/ChecklistEntryRegistry_basic/process.js index 6c0844894e..c8cf45cba5 100644 --- a/process/ChecklistEntryRegistry_basic/process.js +++ b/process/ChecklistEntryRegistry_basic/process.js @@ -1,3 +1,4 @@ +import("Attribute_lib"); import("Keyword_lib"); import("system.logging"); import("system.eMath"); @@ -407,3 +408,118 @@ $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"]; + 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 == 0; + } + }; +} + +/* + * 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()) + .and("ACTIVITYLINK.OBJECT_TYPE", ["Person", "PrivatePerson"], 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 parseInt(AttributeRelationUtils.getAttributeSqlBuilder( + ["count(*)"], + pSalesprojectId, + "Salesproject" + ) + .and("AB_ATTRIBUTE.ATTRIBUTE_PARENT_ID", "d0ae40d2-1a7f-45f6-bb0c-20ce6ae7efe2") + .cell() + ) > 0; + } + }; +} diff --git a/process/KeywordRegistry_basic/process.js b/process/KeywordRegistry_basic/process.js index 6a21f8cc5c..c3ec1641de 100644 --- a/process/KeywordRegistry_basic/process.js +++ b/process/KeywordRegistry_basic/process.js @@ -111,6 +111,8 @@ $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.addressType = function(){return "AddressType";}; $KeywordRegistry.addressType$private = function(){return "HOMEADDR";}; -- GitLab From b05c7a3912f9f1715ad42ad0aaa89a4acde6cd28 Mon Sep 17 00:00:00 2001 From: Pascal Neub <p.neub@adito.de> Date: Tue, 6 Apr 2021 13:52:46 +0000 Subject: [PATCH 028/242] =?UTF-8?q?[Projekt:=20xRM-Sales][TicketNr.:=20107?= =?UTF-8?q?6358][Angebotserstellung=20aus=20360=C2=B0=20Ansicht=20nimmt=20?= =?UTF-8?q?zuf=C3=A4lligen=20Kontakt=20zur=20Verkn=C3=BCpfung]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Offer_entity/entityfields/contact_id/stateProcess.js | 9 ++++++--- .../children/objectrowid_param/valueProcess.js | 2 +- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/entity/Offer_entity/entityfields/contact_id/stateProcess.js b/entity/Offer_entity/entityfields/contact_id/stateProcess.js index e64c4d20ac..0dcccb84c7 100644 --- a/entity/Offer_entity/entityfields/contact_id/stateProcess.js +++ b/entity/Offer_entity/entityfields/contact_id/stateProcess.js @@ -3,8 +3,11 @@ import("system.result"); import("system.neon"); import("system.vars"); -if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT || - (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW && vars.exists("$param.ContactId_param") && vars.get("$param.ContactId_param"))) +if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) +{ result.string(neon.COMPONENTSTATE_READONLY); +} else - result.string(OfferUtils.isEditable(vars.get("$field.STATUS")) ? neon.COMPONENTSTATE_AUTO : neon.COMPONENTSTATE_DISABLED); \ No newline at end of file +{ + result.string(OfferUtils.isEditable(vars.get("$field.STATUS")) ? neon.COMPONENTSTATE_AUTO : neon.COMPONENTSTATE_DISABLED); +} 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 3080fcea47..aee05ab473 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,6 @@ import("system.result"); var contactids = newSelect( "CONTACTID" ) .from("CONTACT") .where("CONTACT.ORGANISATION_ID", vars.getString("$field.ORGANISATIONID")) - .arrayColumn(); + .orderBy("CONTACT.PERSON_ID DESC").arrayColumn(); result.string( JSON.stringify(contactids) ); \ No newline at end of file -- GitLab From b0aee067b420d859df8b84f5c80af69bf48d44c7 Mon Sep 17 00:00:00 2001 From: Pascal Neub <p.neub@adito.de> Date: Tue, 6 Apr 2021 13:53:43 +0000 Subject: [PATCH 029/242] =?UTF-8?q?[Projekt:=20xRM-Sales][TicketNr.:=20107?= =?UTF-8?q?7022][Vertriebsprojekt=20Eigenschaften=20k=C3=B6nnen=20mehrfach?= =?UTF-8?q?=20ausgew=C3=A4hlt=20werden.]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entityfields/value/onValidation.js | 13 ++++++++ .../entityfields/value_lookup/onValidation.js | 15 +++++++++- .../_____LANGUAGE_EXTRA.aod | 30 +++++++++++++++++++ .../_____LANGUAGE_de/_____LANGUAGE_de.aod | 4 +++ process/Attribute_lib/process.js | 24 +++++++++++++++ 5 files changed, 85 insertions(+), 1 deletion(-) diff --git a/entity/AttributeRelation_entity/entityfields/value/onValidation.js b/entity/AttributeRelation_entity/entityfields/value/onValidation.js index d2f774193b..81af77d117 100644 --- a/entity/AttributeRelation_entity/entityfields/value/onValidation.js +++ b/entity/AttributeRelation_entity/entityfields/value/onValidation.js @@ -1,12 +1,25 @@ +import("system.translate"); import("Util_lib"); import("system.result"); import("system.vars"); import("Attribute_lib"); +if(vars.get("$field.AB_ATTRIBUTE_ID") && !AttributeRelationUtils.validateSingleCount( + vars.get("$param.ObjectType_param"), + vars.get("$param.ObjectRowId_param"), + vars.get("$field.AB_ATTRIBUTE_ID") +)) { + result.string(translate.text("Invalid attribute count")); +} +else +{ var attributeType = AttributeTypes.get(vars.get("$field.ATTRIBUTE_TYPE")); 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 26590927b2..38d6db89ef 100644 --- a/entity/AttributeRelation_entity/entityfields/value_lookup/onValidation.js +++ b/entity/AttributeRelation_entity/entityfields/value_lookup/onValidation.js @@ -1,12 +1,25 @@ +import("system.translate"); import("Util_lib"); import("system.result"); import("system.vars"); import("Attribute_lib"); +if(vars.get("$field.AB_ATTRIBUTE_ID") && !AttributeRelationUtils.validateSingleCount( + vars.get("$param.ObjectType_param"), + vars.get("$param.ObjectRowId_param"), + vars.get("$field.AB_ATTRIBUTE_ID") +)) { + result.string(translate.text("Invalid attribute count")); +} +else +{ var attributeType = AttributeTypes.get(vars.get("$field.ATTRIBUTE_TYPE")); 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/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index eb5f6d8993..cb3fe32e32 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -8214,6 +8214,36 @@ <entry> <key>Shows the new daily Covid Cases</key> </entry> + <entry> + <key>Shows the global Covid Cases in a Table</key> + </entry> + <entry> + <key>Buyer</key> + </entry> + <entry> + <key>Internal responsible</key> + </entry> + <entry> + <key>Global Cases Table</key> + </entry> + <entry> + <key>Global Cases</key> + </entry> + <entry> + <key>Initiator</key> + </entry> + <entry> + <key>New Cases</key> + </entry> + <entry> + <key>Internal Sales</key> + </entry> + <entry> + <key>Influencer</key> + </entry> + <entry> + <key>Shows the new daily Covid Cases</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 29b9146ab1..cf46e6ae2e 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -10789,6 +10789,10 @@ Bitte Datumseingabe prüfen</value> <key>Internal responsible</key> <value>Intern: Gebietsverantwortlich</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> diff --git a/process/Attribute_lib/process.js b/process/Attribute_lib/process.js index 7d90071560..f7ed889c70 100644 --- a/process/Attribute_lib/process.js +++ b/process/Attribute_lib/process.js @@ -808,6 +808,30 @@ AttributeRelationUtils.countAttributeRelations = function (pRowId, pObjectType, return countObj; } +/** + * Checks weather the passed attribute can be added to the given object using the min and max count. + * + * @param {string} pObjectType the object type + * @param {string} pObjectRowId the id of the object + * @param {string} pAttributeId the attribute witch needs to be validated + * + * @returns {boolean} weather it is valid to add the attribute or not + */ +AttributeRelationUtils.validateSingleCount = function(pObjectType, pObjectRowId, pAttributeId) +{ + var [min, max] = newSelect(["AB_ATTRIBUTEUSAGE.MIN_COUNT", "AB_ATTRIBUTEUSAGE.MAX_COUNT"]) + .from("AB_ATTRIBUTEUSAGE") + .where("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID", pAttributeId) + .and("AB_ATTRIBUTEUSAGE.OBJECT_TYPE", pObjectType).arrayRow(); + var attrCount = AttributeRelationUtils.countAttributeRelations( + pObjectRowId, + pObjectType, + {} + ); + var count = attrCount[vars.get("$field.AB_ATTRIBUTE_ID")] || 0; + return count >= parseInt(min || -Infinity) && count <= parseInt(max || Infinity); +} + /*********************************************************************************************************************/ -- GitLab From 15e213e61b0292398af7963dcdb8247df7da4ed1 Mon Sep 17 00:00:00 2001 From: Benjamin Ulrich <b.ulrich@adito.de> Date: Wed, 7 Apr 2021 06:00:26 +0000 Subject: [PATCH 030/242] =?UTF-8?q?[Projekt:=20xRM-Sales][TicketNr.:=20107?= =?UTF-8?q?5819][Preise=20korrekt=20aus=20St=C3=BCckliste=20berechnen->=20?= =?UTF-8?q?Bei=20Neuanlage=20von=20Angebotsposten,=20Belegposten=20und=20P?= =?UTF-8?q?reislisten]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- aliasDefinition/Data_alias/Data_alias.aod | 4 +- .../entityfields/offercode/onValidation.js | 6 +- entity/Offeritem_entity/Offeritem_entity.aod | 7 +- .../iteminsertstatements/documentation.adoc | 5 + .../entityfields/price/onValidation.js | 9 - .../entityfields/price/valueProcess.js | 0 .../entityfields/product_id/onValueChange.js | 31 +- .../entityfields/quantity/onValueChange.js | 50 ++- .../recordcontainers/db/onDBInsert.js | 168 ++------ .../recordcontainers/db/onDBUpdate.js | 4 +- .../salesordercode/onValidation.js | 6 +- entity/Orderitem_entity/Orderitem_entity.aod | 10 + .../documentation.adoc | 3 + .../iteminsertstatements/documentation.adoc | 5 + .../entityfields/product_id/onValueChange.js | 32 +- .../entityfields/quantity/onValueChange.js | 34 +- .../recordcontainers/db/onDBInsert.js | 18 +- .../recordcontainers/db/onDBUpdate.js | 40 ++ .../Productprice_entity.aod | 2 + .../entityfields/buysell/onValueChange.js | 9 + .../entityfields/pricelist/onValueChange.js | 9 + .../_____LANGUAGE_EXTRA.aod | 39 ++ .../_____LANGUAGE_en/_____LANGUAGE_en.aod | 18 + process/OfferOrder_lib/process.js | 365 +++++++++++++++--- process/Offer_lib/process.js | 5 +- process/Order_lib/process.js | 4 +- process/Product_lib/process.js | 144 +++++++ 27 files changed, 756 insertions(+), 271 deletions(-) create mode 100644 entity/Offeritem_entity/entityfields/iteminsertstatements/documentation.adoc delete mode 100644 entity/Offeritem_entity/entityfields/price/onValidation.js create mode 100644 entity/Offeritem_entity/entityfields/price/valueProcess.js create mode 100644 entity/Orderitem_entity/entityfields/ignoreonupdateprocess_param/documentation.adoc create mode 100644 entity/Orderitem_entity/entityfields/iteminsertstatements/documentation.adoc create mode 100644 entity/Productprice_entity/entityfields/buysell/onValueChange.js create mode 100644 entity/Productprice_entity/entityfields/pricelist/onValueChange.js diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod index bf89272bc7..93574bb06e 100644 --- a/aliasDefinition/Data_alias/Data_alias.aod +++ b/aliasDefinition/Data_alias/Data_alias.aod @@ -10193,8 +10193,8 @@ <name>REASON</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="36" /> + <columnType v="2005" /> + <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> diff --git a/entity/Offer_entity/entityfields/offercode/onValidation.js b/entity/Offer_entity/entityfields/offercode/onValidation.js index 58a3364596..63c69739e9 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/Offeritem_entity/Offeritem_entity.aod b/entity/Offeritem_entity/Offeritem_entity.aod index 002cae927a..4b11ba39e1 100644 --- a/entity/Offeritem_entity/Offeritem_entity.aod +++ b/entity/Offeritem_entity/Offeritem_entity.aod @@ -73,8 +73,9 @@ <contentType>NUMBER</contentType> <outputFormat>#,##0.00</outputFormat> <inputFormat>#,##0.00</inputFormat> + <mandatory v="true" /> + <valueProcess>%aditoprj%/entity/Offeritem_entity/entityfields/price/valueProcess.js</valueProcess> <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> @@ -292,6 +293,10 @@ </entityActionField> </children> </entityActionGroup> + <entityField> + <name>itemInsertStatements</name> + <documentation>%aditoprj%/entity/Offeritem_entity/entityfields/iteminsertstatements/documentation.adoc</documentation> + </entityField> </entityFields> <recordContainers> <dbRecordContainer> diff --git a/entity/Offeritem_entity/entityfields/iteminsertstatements/documentation.adoc b/entity/Offeritem_entity/entityfields/iteminsertstatements/documentation.adoc new file mode 100644 index 0000000000..483999ea30 --- /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/price/onValidation.js b/entity/Offeritem_entity/entityfields/price/onValidation.js deleted file mode 100644 index 20fb049467..0000000000 --- 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/price/valueProcess.js b/entity/Offeritem_entity/entityfields/price/valueProcess.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/entity/Offeritem_entity/entityfields/product_id/onValueChange.js b/entity/Offeritem_entity/entityfields/product_id/onValueChange.js index 0d52517c98..338d9afba7 100644 --- a/entity/Offeritem_entity/entityfields/product_id/onValueChange.js +++ b/entity/Offeritem_entity/entityfields/product_id/onValueChange.js @@ -1,11 +1,34 @@ +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)//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 051fa52ad7..d7b8bf70c3 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"); + ItemUtils.product_IdOnValueChange(pId, uid, entity); + + 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 quantity = vars.get("$local.value"); + + 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 +} \ No newline at end of file diff --git a/entity/Offeritem_entity/recordcontainers/db/onDBInsert.js b/entity/Offeritem_entity/recordcontainers/db/onDBInsert.js index ccbec217a9..7310f91eb3 100644 --- a/entity/Offeritem_entity/recordcontainers/db/onDBInsert.js +++ b/entity/Offeritem_entity/recordcontainers/db/onDBInsert.js @@ -1,172 +1,50 @@ -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 insertStatements = JSON.parse(vars.get("$field.itemInsertStatements"));//insert statements get set by insertPartsList in the onvalueChanges of product_id and quantity + var statements = []; + if(insertStatements) { - 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); + statements = statements.concat(insertStatements); } //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] - }); + insertStatements.push( + newWhere("OFFERITEM.OFFERITEMID", rowdata["OFFERITEM.OFFERITEMID"]).buildUpdateStatement({ + "NET": vals[0], + "VAT": vals[1], + "DISCOUNTED_NET": discountedVals[0], + "DISCOUNTED_VAT": discountedVals[1] + }) + ) } else { - config.fieldValues({ - "NET": vals[0], - "VAT": vals[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) - { - 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; + insertStatements.push( + newWhere("OFFERITEMID", rowdata["OFFERITEM.OFFERITEMID"]) + .buildUpdateStatement({ + "NET": vals[0], + "VAT": vals[1] + }) + ) } - - 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 a3e8e2fb33..a86dd0453e 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/entityfields/salesordercode/onValidation.js b/entity/Order_entity/entityfields/salesordercode/onValidation.js index f3e4881727..7dea3bc9db 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/Orderitem_entity/Orderitem_entity.aod b/entity/Orderitem_entity/Orderitem_entity.aod index 7abed95996..68999920ab 100644 --- a/entity/Orderitem_entity/Orderitem_entity.aod +++ b/entity/Orderitem_entity/Orderitem_entity.aod @@ -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> @@ -272,6 +273,15 @@ </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> </entityFields> <recordContainers> <dbRecordContainer> 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 0000000000..3b7c3bfb85 --- /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 0000000000..483999ea30 --- /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 1996256d80..07ed27e6e2 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)//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 5fbe3952a6..5946e7dffe 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 23d5cc0300..2c949920f2 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 a763dd4a6b..55517585ef 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/Productprice_entity/Productprice_entity.aod b/entity/Productprice_entity/Productprice_entity.aod index db95abf550..d886179ed2 100644 --- a/entity/Productprice_entity/Productprice_entity.aod +++ b/entity/Productprice_entity/Productprice_entity.aod @@ -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> diff --git a/entity/Productprice_entity/entityfields/buysell/onValueChange.js b/entity/Productprice_entity/entityfields/buysell/onValueChange.js new file mode 100644 index 0000000000..b9fbc8bb86 --- /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/pricelist/onValueChange.js b/entity/Productprice_entity/entityfields/pricelist/onValueChange.js new file mode 100644 index 0000000000..190d27786a --- /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/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index cb3fe32e32..a486c667a7 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -8244,6 +8244,45 @@ <entry> <key>Shows the new daily Covid Cases</key> </entry> + <entry> + <key>Event Data</key> + </entry> + <entry> + <key>On Site</key> + </entry> + <entry> + <key>Event Type</key> + </entry> + <entry> + <key>New child product</key> + </entry> + <entry> + <key>Communication: Link</key> + </entry> + <entry> + <key>Event Begin</key> + </entry> + <entry> + <key>Communication: Phone</key> + </entry> + <entry> + <key>Event</key> + </entry> + <entry> + <key>other</key> + </entry> + <entry> + <key>Communication: Mail</key> + </entry> + <entry> + <key>Vacation</key> + </entry> + <entry> + <key>Event End</key> + </entry> + <entry> + <key>On site</key> + </entry> </keyValueMap> <font name="Dialog" style="0" size="11" /> <sqlModels> diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod index b1b1256d0c..c1283cc096 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -8295,6 +8295,24 @@ <entry> <key>Shows the new daily Covid Cases</key> </entry> + <entry> + <key>On Site</key> + </entry> + <entry> + <key>New child product</key> + </entry> + <entry> + <key>Communication: Link</key> + </entry> + <entry> + <key>Communication: Phone</key> + </entry> + <entry> + <key>Communication: Mail</key> + </entry> + <entry> + <key>Vacation</key> + </entry> </keyValueMap> <font name="Dialog" style="0" size="11" /> </language> diff --git a/process/OfferOrder_lib/process.js b/process/OfferOrder_lib/process.js index edecfffa18..656902d655 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,17 @@ 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]["price"] = price*P2pObject["quantity"]; priceObject[newid]["vat"] = vat; } } - 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 +337,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 +350,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 +485,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]; } } @@ -581,5 +627,220 @@ ItemUtils.product_IdOnValueChange = function (pProductId, pUid, pEntity) neon.setFieldValue("$field.PRICE", ProductDetails.PriceListToUse.price); neon.setFieldValue("$field.VAT", ProductDetails.PriceListToUse.vat); } + } +}; + +/** + * 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]) + { + calcPrice = eMath.addDec(pPriceObj[id]["price"], calcPrice); + if(pPriceObj[id]["vat"] !== null && pPriceObj[id]["vat"] !== undefined && 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 = pPriceObj[child]["price"] + } + else if(summandObject[child][child] != undefined) + { + childPrice = pPriceObj[Object.keys(summandObject[child][child])[0]]["price"] + vat = pPriceObj[Object.keys(summandObject[child][child])[0]]["vat"] + } + else + { + childPrice = 0; + vat = 0; + } + calcPrice = eMath.addDec(childPrice, calcPrice); + if(pPriceObj[child]["vat"] !== null && pPriceObj[child]["vat"] !== undefined && pPriceObj[child]["vat"] > 0) + { + vat = pPriceObj[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 + { + 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 777a0a8412..77bcf12693 100644 --- a/process/Offer_lib/process.js +++ b/process/Offer_lib/process.js @@ -557,7 +557,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 +580,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]); } @@ -635,6 +635,7 @@ OfferItemUtils.getDiscountedNet = function(pExcludedIs, pOfferId, pDiscount, pEx .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++) { diff --git a/process/Order_lib/process.js b/process/Order_lib/process.js index fedf40ca93..8dfe4b4d5e 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/Product_lib/process.js b/process/Product_lib/process.js index db6b5fe287..c0a56e6456 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"); @@ -653,4 +657,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"] != "" ? JSON.parse(products[product]["DEST_ID"])[1] : pProductId; + treestructure = ItemUtils.buildTreeStructure(treestructure, assignedTo, products[product]["PROD2PRODID"]); + } + } } \ No newline at end of file -- GitLab From 8de8a34e547db44f7251d85e436ddcc1ad0a7611 Mon Sep 17 00:00:00 2001 From: Jessica Luginger <j.luginger@adito.de> Date: Wed, 7 Apr 2021 08:34:48 +0000 Subject: [PATCH 031/242] Added Entity Planning with Views, ... Serial Action Add Planning to Organisations --- .../Planning/addKeywordForecastKind.xml | 32 + .../Planning/addKeywordForecastStatus.xml | 41 ++ .../basic/2021.0.3/Planning/alterForecast.xml | 15 + .../Planning/alterForecastAddIndizes.xml | 13 + .../Planning/alterForecastDataKind.xml | 12 + .../alterForecastDropObjectRowIdNullable.xml | 16 + .../basic/2021.0.3/Planning/changelog.xml | 11 + .../2021.0.3/Planning/createPlanningMonth.xml | 14 + .../Planning/insertPlanningMonthData.xml | 65 ++ .../Data_alias/basic/2021.0.3/changelog.xml | 1 + .../_demoData/generatedData/forecast.xml | 9 + aliasDefinition/Data_alias/Data_alias.aod | 137 +++- .../_____SYSTEM_APPLICATION_NEON.aod | 4 + entity/Activity_entity/grantDeleteProcess.js | 2 + entity/Employee_entity/Employee_entity.aod | 18 + .../recordcontainers/jdito/contentProcess.js | 2 - .../recordcontainers/db/conditionProcess.js | 2 + .../KeywordEntry_entity.aod | 36 + .../Organisation_entity.aod | 62 ++ .../onActionProcess.js | 17 + .../children/contactid_param/valueProcess.js | 4 + .../children/contactid_param/valueProcess.js | 4 + .../OrganisationsMultiEdit_entity.aod | 55 ++ .../documentation.adoc | 4 + .../contact_id/displayValueProcess.js | 6 + .../recordcontainers/jdito/contentProcess.js | 7 + .../recordcontainers/jdito/onInsert.js | 1 + .../PlanningAddToOrganisations_entity.aod | 158 +++++ .../afterSave.js | 14 + .../afterUiInit.js | 39 ++ .../documentation.adoc | 3 + .../groupcode/displayValueProcess.js | 6 + .../containername_param/valueProcess.js | 5 + .../containername_param/valueProcess.js | 4 + .../planningids_param/valueProcess.js | 9 + .../planningids_param/valueProcess.js | 9 + .../displayValueProcess.js | 5 + .../responsible_contact_id/valueProcess.js | 10 + .../status/displayValueProcess.js | 6 + .../entityfields/status/valueProcess.js | 9 + .../entityfields/volume/titleProcess.js | 4 + .../entityfields/year/valueProcess.js | 8 + .../recordcontainers/jdito/contentProcess.js | 8 + .../recordcontainers/jdito/onInsert.js | 75 ++ ...nningChangeStatusAndResponsible_entity.aod | 75 ++ .../afterSave.js | 13 + .../documentation.adoc | 7 + .../containername_param/valueProcess.js | 4 + .../recordcontainers/jdito/contentProcess.js | 7 + .../recordcontainers/jdito/onInsert.js | 82 +++ entity/Planning_entity/Planning_entity.aod | 305 ++++++++ entity/Planning_entity/documentation.adoc | 4 + .../contact_id/displayValueProcess.js | 6 + .../entityfields/contact_id/stateProcess.js | 8 + .../changeresponsible/onActionProcess.js | 13 + .../children/changestatus/onActionProcess.js | 13 + .../groupcode/displayValueProcess.js | 6 + .../entityfields/groupcode/stateProcess.js | 8 + .../containername_param/valueProcess.js | 5 + .../containername_param/valueProcess.js | 4 + .../containername_param/valueProcess.js | 4 + .../entityfields/kind/valueProcess.js | 9 + .../displayValueProcess.js | 5 + .../responsible_contact_id/stateProcess.js | 8 + .../responsible_contact_id/valueProcess.js | 10 + .../status/displayValueProcess.js | 6 + .../entityfields/status/stateProcess.js | 10 + .../entityfields/status/valueProcess.js | 9 + .../entityfields/volume/titleProcess.js | 4 + .../year_datetime/onValueChange.js | 10 + .../year_datetime/stateProcess.js | 14 + .../year_datetime/valueProcess.js | 17 + entity/Planning_entity/onValidation.js | 37 + .../recordcontainers/db/conditionProcess.js | 11 + .../filterConditionProcess.js | 6 + .../filterFieldsProcess.js | 5 + .../filterValuesProcess.js | 5 + .../contact_id.displayvalue/expression.js | 4 + .../groupcode.displayvalue/expression.js | 5 + .../organisations/filterConditionProcess.js | 13 + .../expression.js | 4 + .../status.displayvalue/expression.js | 5 + .../SalesprojectAnalyses_entity.aod | 20 + .../entityfields/my_forecast/valueProcess.js | 2 + .../openforecast/onActionProcess.js | 5 +- .../openforecastweighted/onActionProcess.js | 4 + .../openplanning/onActionProcess.js | 4 + .../openturnover/onActionProcess.js | 5 +- .../overall_forecast/valueProcess.js | 2 + .../overall_forecast_weighted/titleProcess.js | 6 + .../overall_forecast_weighted/valueProcess.js | 17 + .../overall_planning/titleProcess.js | 6 + .../overall_planning/valueProcess.js | 16 + .../overall_turnover/valueProcess.js | 5 +- .../SalesprojectConversionRate_entity.aod | 8 + .../recordcontainers/jdito/contentProcess.js | 2 +- .../recordcontainers/jdito/rowCountProcess.js | 1 + .../Salesproject_entity.aod | 14 + .../valueProcess.js | 4 + entity/Turnover_entity/Turnover_entity.aod | 283 +++++++- entity/Turnover_entity/documentation.adoc | 41 +- entity/Turnover_entity/initFilterProcess.js | 53 ++ .../recordcontainers/jdito/contentProcess.js | 2 +- .../contentProcess.js | 41 ++ .../filterFieldsProcess.js | 6 + .../filterValuesProcess.js | 6 + .../filterFieldsProcess.js | 6 + .../filterValuesProcess.js | 5 + .../groupcode_filter/filterValuesProcess.js | 12 + .../month_filter/filterValuesProcess.js | 17 + .../filterFieldsProcess.js | 5 + .../filterValuesProcess.js | 5 + .../filterValuesProcess.js | 9 + .../orgcountry_filter/filterValuesProcess.js | 15 + .../orglanguage_filter/filterValuesProcess.js | 15 + .../orgtype_filter/filterValuesProcess.js | 17 + .../filterValuesProcess.js | 13 + .../rowCountProcess.js | 39 ++ .../_____LANGUAGE_EXTRA.aod | 87 +++ .../_____LANGUAGE_de/_____LANGUAGE_de.aod | 114 ++- .../_____LANGUAGE_en/_____LANGUAGE_en.aod | 87 +++ neonContext/Organisation/Organisation.aod | 4 + .../OrganisationsMultiEdit.aod | 12 + neonContext/Planning/Planning.aod | 35 + .../PlanningAddToOrganisations.aod | 26 + .../PlanningChangeStatusAndResponsible.aod | 16 + neonContext/Turnover/Turnover.aod | 8 +- .../OrganisationMain_view.aod | 5 + ...OrganisationPlanningTurnoverChart_view.aod | 23 + .../OrganisationsMultiEdit_view.aod | 22 + .../PlanningAddToOrganisationOverlay_view.aod | 26 + ...dToOrganisationsExistingPlannings_view.aod | 18 + ...ingAddToOrganisationsNewPlannings_view.aod | 18 + .../PlanningAddToOrganisations_view.aod | 46 ++ .../PlanningChangeResponsible_view.aod | 23 + .../PlanningChangeStatus_view.aod | 23 + .../PlanningEdit_view/PlanningEdit_view.aod | 47 ++ .../PlanningFilter_view.aod | 132 ++++ .../PlanningMultiEditOverlay_view.aod | 67 ++ .../PlanningOrganisationFilter_view.aod | 132 ++++ .../SalesprojectOfferForecast_view.aod | 6 +- .../SalesprojectScoreCard_view.aod | 10 + .../TurnoverDynamicMultiDataChart_view.aod | 208 ++++++ process/AttributeFilter_lib/process.js | 16 +- process/ClassificationFilter_lib/process.js | 8 +- process/Employee_lib/process.js | 1 + process/KeywordRegistry_basic/process.js | 11 +- process/Liquibase_lib/process.js | 2 +- process/Turnover_lib/process.js | 651 +++++++++++++++++- .../numberPlus1000/numberPlus1000.aod | 12 + 150 files changed, 4291 insertions(+), 39 deletions(-) create mode 100644 .liquibase/Data_alias/basic/2021.0.3/Planning/addKeywordForecastKind.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.3/Planning/addKeywordForecastStatus.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.3/Planning/alterForecast.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.3/Planning/alterForecastAddIndizes.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.3/Planning/alterForecastDataKind.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.3/Planning/alterForecastDropObjectRowIdNullable.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.3/Planning/changelog.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.3/Planning/createPlanningMonth.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.3/Planning/insertPlanningMonthData.xml create mode 100644 entity/Organisation_entity/entityfields/filterviewactiongroup/children/addplanningtoorganisations/onActionProcess.js create mode 100644 entity/Organisation_entity/entityfields/plannings/children/contactid_param/valueProcess.js create mode 100644 entity/Organisation_entity/entityfields/turnovers/children/contactid_param/valueProcess.js create mode 100644 entity/OrganisationsMultiEdit_entity/OrganisationsMultiEdit_entity.aod create mode 100644 entity/OrganisationsMultiEdit_entity/documentation.adoc create mode 100644 entity/OrganisationsMultiEdit_entity/entityfields/contact_id/displayValueProcess.js create mode 100644 entity/OrganisationsMultiEdit_entity/recordcontainers/jdito/contentProcess.js create mode 100644 entity/OrganisationsMultiEdit_entity/recordcontainers/jdito/onInsert.js create mode 100644 entity/PlanningAddToOrganisations_entity/PlanningAddToOrganisations_entity.aod create mode 100644 entity/PlanningAddToOrganisations_entity/afterSave.js create mode 100644 entity/PlanningAddToOrganisations_entity/afterUiInit.js create mode 100644 entity/PlanningAddToOrganisations_entity/documentation.adoc create mode 100644 entity/PlanningAddToOrganisations_entity/entityfields/groupcode/displayValueProcess.js create mode 100644 entity/PlanningAddToOrganisations_entity/entityfields/keywordgroupcode/children/containername_param/valueProcess.js create mode 100644 entity/PlanningAddToOrganisations_entity/entityfields/keywordstatus/children/containername_param/valueProcess.js create mode 100644 entity/PlanningAddToOrganisations_entity/entityfields/planningsalreadyexists/children/planningids_param/valueProcess.js create mode 100644 entity/PlanningAddToOrganisations_entity/entityfields/planningsnew/children/planningids_param/valueProcess.js create mode 100644 entity/PlanningAddToOrganisations_entity/entityfields/responsible_contact_id/displayValueProcess.js create mode 100644 entity/PlanningAddToOrganisations_entity/entityfields/responsible_contact_id/valueProcess.js create mode 100644 entity/PlanningAddToOrganisations_entity/entityfields/status/displayValueProcess.js create mode 100644 entity/PlanningAddToOrganisations_entity/entityfields/status/valueProcess.js create mode 100644 entity/PlanningAddToOrganisations_entity/entityfields/volume/titleProcess.js create mode 100644 entity/PlanningAddToOrganisations_entity/entityfields/year/valueProcess.js create mode 100644 entity/PlanningAddToOrganisations_entity/recordcontainers/jdito/contentProcess.js create mode 100644 entity/PlanningAddToOrganisations_entity/recordcontainers/jdito/onInsert.js create mode 100644 entity/PlanningChangeStatusAndResponsible_entity/PlanningChangeStatusAndResponsible_entity.aod create mode 100644 entity/PlanningChangeStatusAndResponsible_entity/afterSave.js create mode 100644 entity/PlanningChangeStatusAndResponsible_entity/documentation.adoc create mode 100644 entity/PlanningChangeStatusAndResponsible_entity/entityfields/keywordstatus/children/containername_param/valueProcess.js create mode 100644 entity/PlanningChangeStatusAndResponsible_entity/recordcontainers/jdito/contentProcess.js create mode 100644 entity/PlanningChangeStatusAndResponsible_entity/recordcontainers/jdito/onInsert.js create mode 100644 entity/Planning_entity/Planning_entity.aod create mode 100644 entity/Planning_entity/documentation.adoc create mode 100644 entity/Planning_entity/entityfields/contact_id/displayValueProcess.js create mode 100644 entity/Planning_entity/entityfields/contact_id/stateProcess.js create mode 100644 entity/Planning_entity/entityfields/filterviewactions/children/changeresponsible/onActionProcess.js create mode 100644 entity/Planning_entity/entityfields/filterviewactions/children/changestatus/onActionProcess.js create mode 100644 entity/Planning_entity/entityfields/groupcode/displayValueProcess.js create mode 100644 entity/Planning_entity/entityfields/groupcode/stateProcess.js create mode 100644 entity/Planning_entity/entityfields/keywordgroupcode/children/containername_param/valueProcess.js create mode 100644 entity/Planning_entity/entityfields/keywordkinds/children/containername_param/valueProcess.js create mode 100644 entity/Planning_entity/entityfields/keywordstatus/children/containername_param/valueProcess.js create mode 100644 entity/Planning_entity/entityfields/kind/valueProcess.js create mode 100644 entity/Planning_entity/entityfields/responsible_contact_id/displayValueProcess.js create mode 100644 entity/Planning_entity/entityfields/responsible_contact_id/stateProcess.js create mode 100644 entity/Planning_entity/entityfields/responsible_contact_id/valueProcess.js create mode 100644 entity/Planning_entity/entityfields/status/displayValueProcess.js create mode 100644 entity/Planning_entity/entityfields/status/stateProcess.js create mode 100644 entity/Planning_entity/entityfields/status/valueProcess.js create mode 100644 entity/Planning_entity/entityfields/volume/titleProcess.js create mode 100644 entity/Planning_entity/entityfields/year_datetime/onValueChange.js create mode 100644 entity/Planning_entity/entityfields/year_datetime/stateProcess.js create mode 100644 entity/Planning_entity/entityfields/year_datetime/valueProcess.js create mode 100644 entity/Planning_entity/onValidation.js create mode 100644 entity/Planning_entity/recordcontainers/db/conditionProcess.js create mode 100644 entity/Planning_entity/recordcontainers/db/filterextensions/organisationattributes_filter/filterConditionProcess.js create mode 100644 entity/Planning_entity/recordcontainers/db/filterextensions/organisationattributes_filter/filterFieldsProcess.js create mode 100644 entity/Planning_entity/recordcontainers/db/filterextensions/organisationattributes_filter/filterValuesProcess.js create mode 100644 entity/Planning_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js create mode 100644 entity/Planning_entity/recordcontainers/db/recordfieldmappings/groupcode.displayvalue/expression.js create mode 100644 entity/Planning_entity/recordcontainers/db/recordfieldmappings/organisations/filterConditionProcess.js create mode 100644 entity/Planning_entity/recordcontainers/db/recordfieldmappings/responsible_contact_id.displayvalue/expression.js create mode 100644 entity/Planning_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js create mode 100644 entity/SalesprojectAnalyses_entity/entityfields/openforecastweighted/onActionProcess.js create mode 100644 entity/SalesprojectAnalyses_entity/entityfields/openplanning/onActionProcess.js create mode 100644 entity/SalesprojectAnalyses_entity/entityfields/overall_forecast_weighted/titleProcess.js create mode 100644 entity/SalesprojectAnalyses_entity/entityfields/overall_forecast_weighted/valueProcess.js create mode 100644 entity/SalesprojectAnalyses_entity/entityfields/overall_planning/titleProcess.js create mode 100644 entity/SalesprojectAnalyses_entity/entityfields/overall_planning/valueProcess.js create mode 100644 entity/Salesproject_entity/entityfields/turnovers/children/salesprojectiddynamicchart_param/valueProcess.js create mode 100644 entity/Turnover_entity/initFilterProcess.js create mode 100644 entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/contentProcess.js create mode 100644 entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/classificationgroup_filter/filterFieldsProcess.js create mode 100644 entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/classificationgroup_filter/filterValuesProcess.js create mode 100644 entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/classificationtype_filter/filterFieldsProcess.js create mode 100644 entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/classificationtype_filter/filterValuesProcess.js create mode 100644 entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/groupcode_filter/filterValuesProcess.js create mode 100644 entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/month_filter/filterValuesProcess.js create mode 100644 entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orgattribute_filter/filterFieldsProcess.js create mode 100644 entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orgattribute_filter/filterValuesProcess.js create mode 100644 entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orgclassification_filter/filterValuesProcess.js create mode 100644 entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orgcountry_filter/filterValuesProcess.js create mode 100644 entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orglanguage_filter/filterValuesProcess.js create mode 100644 entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orgtype_filter/filterValuesProcess.js create mode 100644 entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/salesproject_filter/filterValuesProcess.js create mode 100644 entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/rowCountProcess.js create mode 100644 neonContext/OrganisationsMultiEdit/OrganisationsMultiEdit.aod create mode 100644 neonContext/Planning/Planning.aod create mode 100644 neonContext/PlanningAddToOrganisations/PlanningAddToOrganisations.aod create mode 100644 neonContext/PlanningChangeStatusAndResponsible/PlanningChangeStatusAndResponsible.aod create mode 100644 neonView/OrganisationPlanningTurnoverChart_view/OrganisationPlanningTurnoverChart_view.aod create mode 100644 neonView/OrganisationsMultiEdit_view/OrganisationsMultiEdit_view.aod create mode 100644 neonView/PlanningAddToOrganisationOverlay_view/PlanningAddToOrganisationOverlay_view.aod create mode 100644 neonView/PlanningAddToOrganisationsExistingPlannings_view/PlanningAddToOrganisationsExistingPlannings_view.aod create mode 100644 neonView/PlanningAddToOrganisationsNewPlannings_view/PlanningAddToOrganisationsNewPlannings_view.aod create mode 100644 neonView/PlanningAddToOrganisations_view/PlanningAddToOrganisations_view.aod create mode 100644 neonView/PlanningChangeResponsible_view/PlanningChangeResponsible_view.aod create mode 100644 neonView/PlanningChangeStatus_view/PlanningChangeStatus_view.aod create mode 100644 neonView/PlanningEdit_view/PlanningEdit_view.aod create mode 100644 neonView/PlanningFilter_view/PlanningFilter_view.aod create mode 100644 neonView/PlanningMultiEditOverlay_view/PlanningMultiEditOverlay_view.aod create mode 100644 neonView/PlanningOrganisationFilter_view/PlanningOrganisationFilter_view.aod create mode 100644 neonView/TurnoverDynamicMultiDataChart_view/TurnoverDynamicMultiDataChart_view.aod create mode 100644 rendererDefinition/numberPlus1000/numberPlus1000.aod 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 0000000000..c33bd4d89b --- /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 0000000000..a5b05589be --- /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 0000000000..e2b1b78b75 --- /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 0000000000..9917700bca --- /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 0000000000..fb39cdcdd0 --- /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 0000000000..ad7b65d54b --- /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 0000000000..b6afce8a8c --- /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 0000000000..6a785b6819 --- /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 0000000000..cdfc57c433 --- /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/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/changelog.xml index b5e6f62415..4abf91ed48 100644 --- a/.liquibase/Data_alias/basic/2021.0.3/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/changelog.xml @@ -3,4 +3,5 @@ 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="Checklists/changelog.xml"/> + <include relativeToChangelogFile="true" file="Planning/changelog.xml"/> </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 a47c729277..f46b9333db 100644 --- a/.liquibase/Data_alias/basic/_demoData/generatedData/forecast.xml +++ b/.liquibase/Data_alias/basic/_demoData/generatedData/forecast.xml @@ -10,6 +10,7 @@ <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"/> @@ -19,6 +20,7 @@ <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"/> @@ -28,6 +30,7 @@ <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"/> @@ -37,6 +40,7 @@ <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"/> @@ -46,6 +50,7 @@ <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"/> @@ -55,6 +60,7 @@ <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"/> @@ -64,6 +70,7 @@ <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"/> @@ -73,6 +80,7 @@ <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"/> @@ -82,6 +90,7 @@ <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/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod index 93574bb06e..3855966273 100644 --- a/aliasDefinition/Data_alias/Data_alias.aod +++ b/aliasDefinition/Data_alias/Data_alias.aod @@ -5,6 +5,7 @@ <datasourceType v="0" /> <aliasDefinitionSub> <aliasDefDb> + <auditActive v="false" /> <entityGroup> <name>entityGroup</name> <entities> @@ -9966,7 +9967,7 @@ <columnType v="1" /> <size v="36" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="true" /> <documentation></documentation> @@ -10057,7 +10058,77 @@ <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> + <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>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>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>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>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="false" /> <documentation></documentation> @@ -18500,6 +18571,68 @@ </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="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>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> </entities> </entityGroup> </aliasDefDb> diff --git a/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod b/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod index 56f31da9f9..d67029e721 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" /> diff --git a/entity/Activity_entity/grantDeleteProcess.js b/entity/Activity_entity/grantDeleteProcess.js index a704528bc9..929d3d48e9 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/Employee_entity/Employee_entity.aod b/entity/Employee_entity/Employee_entity.aod index bfd8058aad..d5182766d6 100644 --- a/entity/Employee_entity/Employee_entity.aod +++ b/entity/Employee_entity/Employee_entity.aod @@ -297,6 +297,24 @@ <fieldName>Employees</fieldName> <isConsumer v="false" /> </entityDependency> + <entityDependency> + <name>9c38e9ef-6f90-4e57-af45-d82539c57a0e</name> + <entityName>Planning_entity</entityName> + <fieldName>Responsible</fieldName> + <isConsumer v="false" /> + </entityDependency> + <entityDependency> + <name>b49eecba-062b-4658-a3b9-574982536fb1</name> + <entityName>PlanningChangeStatusAndResponsible_entity</entityName> + <fieldName>Responsibles</fieldName> + <isConsumer v="false" /> + </entityDependency> + <entityDependency> + <name>d1736052-573f-4774-b90b-0f8a81083cb6</name> + <entityName>PlanningAddToOrganisations_entity</entityName> + <fieldName>Responsible</fieldName> + <isConsumer v="false" /> + </entityDependency> </dependencies> <children> <entityParameter> diff --git a/entity/Employee_entity/recordcontainers/jdito/contentProcess.js b/entity/Employee_entity/recordcontainers/jdito/contentProcess.js index 8970fd6bd6..5fabbf7273 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/Forecast_entity/recordcontainers/db/conditionProcess.js b/entity/Forecast_entity/recordcontainers/db/conditionProcess.js index 0c0805ca63..8bdcaacb99 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/KeywordEntry_entity/KeywordEntry_entity.aod b/entity/KeywordEntry_entity/KeywordEntry_entity.aod index 44c798ccab..7208b040a3 100644 --- a/entity/KeywordEntry_entity/KeywordEntry_entity.aod +++ b/entity/KeywordEntry_entity/KeywordEntry_entity.aod @@ -637,6 +637,42 @@ <fieldName>KeywordPhases</fieldName> <isConsumer v="false" /> </entityDependency> + <entityDependency> + <name>bf774c79-2902-4fdb-a8d2-8a157294bc27</name> + <entityName>Planning_entity</entityName> + <fieldName>KeywordKinds</fieldName> + <isConsumer v="false" /> + </entityDependency> + <entityDependency> + <name>3a570fef-552b-4d94-b010-33a7ffee7a96</name> + <entityName>Planning_entity</entityName> + <fieldName>KeywordStatus</fieldName> + <isConsumer v="false" /> + </entityDependency> + <entityDependency> + <name>5dc1bb58-75cb-4214-b6f5-065e8de26779</name> + <entityName>Planning_entity</entityName> + <fieldName>KeywordGroupcode</fieldName> + <isConsumer v="false" /> + </entityDependency> + <entityDependency> + <name>49358965-6e83-4279-82a8-babf257c3b5f</name> + <entityName>PlanningAddToOrganisations_entity</entityName> + <fieldName>KeywordStatus</fieldName> + <isConsumer v="false" /> + </entityDependency> + <entityDependency> + <name>f7aa1856-6896-4531-8b15-d3c5504172fb</name> + <entityName>PlanningAddToOrganisations_entity</entityName> + <fieldName>KeywordGroupcode</fieldName> + <isConsumer v="false" /> + </entityDependency> + <entityDependency> + <name>12a0dd2c-57f2-4277-b25c-9f824b82308d</name> + <entityName>PlanningChangeStatusAndResponsible_entity</entityName> + <fieldName>KeywordStatus</fieldName> + <isConsumer v="false" /> + </entityDependency> </dependencies> <children> <entityParameter> diff --git a/entity/Organisation_entity/Organisation_entity.aod b/entity/Organisation_entity/Organisation_entity.aod index a1c9dc5748..b8e0c8e551 100644 --- a/entity/Organisation_entity/Organisation_entity.aod +++ b/entity/Organisation_entity/Organisation_entity.aod @@ -186,6 +186,24 @@ <fieldName>OrganisationConsumer</fieldName> <isConsumer v="false" /> </entityDependency> + <entityDependency> + <name>640a8509-1972-4dc5-980e-68832f1c03c5</name> + <entityName>Planning_entity</entityName> + <fieldName>Organisations</fieldName> + <isConsumer v="false" /> + </entityDependency> + <entityDependency> + <name>3ceb7668-285a-4169-b71a-b64edc206b34</name> + <entityName>OrganisationsMultiEdit_entity</entityName> + <fieldName>Organisations</fieldName> + <isConsumer v="false" /> + </entityDependency> + <entityDependency> + <name>75b4de32-4fd6-4223-80f5-908aeb533577</name> + <entityName>Turnover_entity</entityName> + <fieldName>Organisations</fieldName> + <isConsumer v="false" /> + </entityDependency> </dependencies> <children> <entityParameter> @@ -1475,6 +1493,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" /> + <isSelectionAction v="false" /> + <iconId>VAADIN:MONEY</iconId> + </entityActionField> </children> </entityActionGroup> <entityActionField> @@ -1602,6 +1628,42 @@ <iconId>VAADIN:CURLY_BRACKETS</iconId> <stateProcess>%aditoprj%/entity/Organisation_entity/entityfields/openadminview/stateProcess.js</stateProcess> </entityActionField> + <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> </entityFields> <recordContainers> <dbRecordContainer> 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 0000000000..4015c373ea --- /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/plannings/children/contactid_param/valueProcess.js b/entity/Organisation_entity/entityfields/plannings/children/contactid_param/valueProcess.js new file mode 100644 index 0000000000..7b6137b4d1 --- /dev/null +++ b/entity/Organisation_entity/entityfields/plannings/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/Organisation_entity/entityfields/turnovers/children/contactid_param/valueProcess.js b/entity/Organisation_entity/entityfields/turnovers/children/contactid_param/valueProcess.js new file mode 100644 index 0000000000..7b6137b4d1 --- /dev/null +++ b/entity/Organisation_entity/entityfields/turnovers/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/OrganisationsMultiEdit_entity/OrganisationsMultiEdit_entity.aod b/entity/OrganisationsMultiEdit_entity/OrganisationsMultiEdit_entity.aod new file mode 100644 index 0000000000..e423affb31 --- /dev/null +++ b/entity/OrganisationsMultiEdit_entity/OrganisationsMultiEdit_entity.aod @@ -0,0 +1,55 @@ +<?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>OrganisationsMultiEdit_entity</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <documentation>%aditoprj%/entity/OrganisationsMultiEdit_entity/documentation.adoc</documentation> + <recordContainer>jdito</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + <dependencies> + <entityDependency> + <name>ce007a14-f543-4959-81d6-145590e12a72</name> + <entityName>PlanningAddToOrganisations_entity</entityName> + <fieldName>Organisations</fieldName> + <isConsumer v="false" /> + </entityDependency> + </dependencies> + </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 0000000000..dce629f858 --- /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 0000000000..9d7be1063f --- /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 0000000000..8a8b23ca6e --- /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 0000000000..1b78561c5f --- /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/PlanningAddToOrganisations_entity/PlanningAddToOrganisations_entity.aod b/entity/PlanningAddToOrganisations_entity/PlanningAddToOrganisations_entity.aod new file mode 100644 index 0000000000..c6e7d28790 --- /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.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> + <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 0000000000..559470208c --- /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 0000000000..9d32ea72e6 --- /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 0000000000..a6304142ab --- /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 0000000000..b969a4ff0b --- /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 0000000000..e0b3a6dd6b --- /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 0000000000..87817cdbae --- /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 0000000000..010d78872b --- /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 0000000000..07283d7920 --- /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 0000000000..688c1f5774 --- /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 0000000000..a4c7e25a11 --- /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 0000000000..f25ee6cc31 --- /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 0000000000..ec3ba22fcd --- /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 0000000000..f7b76c3354 --- /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 0000000000..71920b6293 --- /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 0000000000..10ff3a0d5e --- /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 0000000000..e28934ac0d --- /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 0000000000..9810a9260e --- /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.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> + <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 0000000000..87b9d67c89 --- /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 0000000000..7fff46ead5 --- /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 0000000000..87817cdbae --- /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 0000000000..5de89893d6 --- /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 0000000000..4f967df1dc --- /dev/null +++ b/entity/PlanningChangeStatusAndResponsible_entity/recordcontainers/jdito/onInsert.js @@ -0,0 +1,82 @@ +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]; +} + + +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 0000000000..8fb7f8f796 --- /dev/null +++ b/entity/Planning_entity/Planning_entity.aod @@ -0,0 +1,305 @@ +<?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>Planning_entity</name> + <title>Planning</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <documentation>%aditoprj%/entity/Planning_entity/documentation.adoc</documentation> + <icon>VAADIN:MONEY</icon> + <grantUpdate v="true" /> + <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" /> + <titleProcess>%aditoprj%/entity/Planning_entity/entityfields/volume/titleProcess.js</titleProcess> + </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> + <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> + <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> + <dependencies> + <entityDependency> + <name>73fab37a-74bc-452d-a1ec-ea1c53204468</name> + <entityName>Organisation_entity</entityName> + <fieldName>Plannings</fieldName> + <isConsumer v="false" /> + </entityDependency> + <entityDependency> + <name>9ddd5d69-72df-46f7-b42a-f08f08a2c8cd</name> + <entityName>PlanningAddToOrganisations_entity</entityName> + <fieldName>PlanningsAlreadyExists</fieldName> + <isConsumer v="false" /> + </entityDependency> + <entityDependency> + <name>c022c816-85eb-4112-95fe-7cbcab96e128</name> + <entityName>PlanningAddToOrganisations_entity</entityName> + <fieldName>PlanningsNew</fieldName> + <isConsumer v="false" /> + </entityDependency> + </dependencies> + </entityProvider> + <entityParameter> + <name>ContactId_param</name> + <expose v="true" /> + </entityParameter> + <entityField> + <name>STATUS</name> + <title>Status</title> + <consumer>KeywordStatus</consumer> + <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> + <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" /> + <isSelectionAction v="true" /> + <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" /> + <isSelectionAction v="true" /> + <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> + </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> + <dbRecordFieldMapping> + <name>RESPONSIBLE_CONTACT_ID.displayValue</name> + <expression>%aditoprj%/entity/Planning_entity/recordcontainers/db/recordfieldmappings/responsible_contact_id.displayvalue/expression.js</expression> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>CONTACT_ID.displayValue</name> + <expression>%aditoprj%/entity/Planning_entity/recordcontainers/db/recordfieldmappings/contact_id.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 0000000000..29fb921f7f --- /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 0000000000..9d7be1063f --- /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 0000000000..e00d986e70 --- /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/filterviewactions/children/changeresponsible/onActionProcess.js b/entity/Planning_entity/entityfields/filterviewactions/children/changeresponsible/onActionProcess.js new file mode 100644 index 0000000000..dc355adfad --- /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 0000000000..c3e1224d7b --- /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 0000000000..b969a4ff0b --- /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 0000000000..e00d986e70 --- /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 0000000000..e0b3a6dd6b --- /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 0000000000..7dd10c8e07 --- /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 0000000000..87817cdbae --- /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 0000000000..9c3cc5fe07 --- /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 0000000000..688c1f5774 --- /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 0000000000..e00d986e70 --- /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 0000000000..a4c7e25a11 --- /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 0000000000..f25ee6cc31 --- /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 0000000000..ae436c7597 --- /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 0000000000..ec3ba22fcd --- /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/volume/titleProcess.js b/entity/Planning_entity/entityfields/volume/titleProcess.js new file mode 100644 index 0000000000..f7b76c3354 --- /dev/null +++ b/entity/Planning_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/Planning_entity/entityfields/year_datetime/onValueChange.js b/entity/Planning_entity/entityfields/year_datetime/onValueChange.js new file mode 100644 index 0000000000..33c75c30f9 --- /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 0000000000..d5b44033c1 --- /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 0000000000..1f2d4b665b --- /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/onValidation.js b/entity/Planning_entity/onValidation.js new file mode 100644 index 0000000000..047915d05f --- /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 0000000000..7241ab84dc --- /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 0000000000..50f428b461 --- /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 0000000000..105c59dca1 --- /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 0000000000..942b0a0495 --- /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/contact_id.displayvalue/expression.js b/entity/Planning_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js new file mode 100644 index 0000000000..117ecbdfdb --- /dev/null +++ b/entity/Planning_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js @@ -0,0 +1,4 @@ +import("system.result"); +import("Contact_lib"); + +result.string(ContactUtils.getResolvingDisplaySubSql("FORECAST.CONTACT_ID")); \ 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 0000000000..24e9e9e299 --- /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 0000000000..8e208adfb6 --- /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/responsible_contact_id.displayvalue/expression.js b/entity/Planning_entity/recordcontainers/db/recordfieldmappings/responsible_contact_id.displayvalue/expression.js new file mode 100644 index 0000000000..4fbf49a35f --- /dev/null +++ b/entity/Planning_entity/recordcontainers/db/recordfieldmappings/responsible_contact_id.displayvalue/expression.js @@ -0,0 +1,4 @@ +import("system.result"); +import("Contact_lib"); + +result.string(ContactUtils.getResolvingDisplaySubSql("FORECAST.RESPONSIBLE_CONTACT_ID")); \ 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 0000000000..c13a0a906d --- /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/SalesprojectAnalyses_entity/SalesprojectAnalyses_entity.aod b/entity/SalesprojectAnalyses_entity/SalesprojectAnalyses_entity.aod index 153d97d730..1411e096a8 100644 --- a/entity/SalesprojectAnalyses_entity/SalesprojectAnalyses_entity.aod +++ b/entity/SalesprojectAnalyses_entity/SalesprojectAnalyses_entity.aod @@ -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 b42db4e92b..294c23f1c5 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 a4f17e146f..9fefbbb1bd 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 0000000000..9fefbbb1bd --- /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 0000000000..9fefbbb1bd --- /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 b278ec2dce..9fefbbb1bd 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 11bf47828e..6fc6fe3375 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 0000000000..5597a3a863 --- /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 0000000000..feeaefb3bd --- /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 0000000000..10c0846dae --- /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 0000000000..090e683613 --- /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 fb9181d479..9e90122f8d 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 834661f182..cc131683a1 100644 --- a/entity/SalesprojectConversionRate_entity/SalesprojectConversionRate_entity.aod +++ b/entity/SalesprojectConversionRate_entity/SalesprojectConversionRate_entity.aod @@ -10,6 +10,14 @@ <entityFields> <entityProvider> <name>#PROVIDER</name> + <dependencies> + <entityDependency> + <name>34de2519-ae79-4092-9f10-29727239804d</name> + <entityName>Organisation_entity</entityName> + <fieldName>conversionrates</fieldName> + <isConsumer v="false" /> + </entityDependency> + </dependencies> </entityProvider> <entityField> <name>UID</name> diff --git a/entity/SalesprojectConversionRate_entity/recordcontainers/jdito/contentProcess.js b/entity/SalesprojectConversionRate_entity/recordcontainers/jdito/contentProcess.js index d178c9b6a5..d089bda498 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 60aed22275..b118d35605 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/Salesproject_entity/Salesproject_entity.aod b/entity/Salesproject_entity/Salesproject_entity.aod index d567ac3a36..9ec2a63019 100644 --- a/entity/Salesproject_entity/Salesproject_entity.aod +++ b/entity/Salesproject_entity/Salesproject_entity.aod @@ -868,6 +868,20 @@ <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> </entityFields> <recordContainers> <dbRecordContainer> 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 0000000000..2b119ebfa1 --- /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/Turnover_entity/Turnover_entity.aod b/entity/Turnover_entity/Turnover_entity.aod index 5949a1679d..e61b1a3a96 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"> <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,6 +54,7 @@ <entityProvider> <name>FilteredTurnovers</name> <documentation>%aditoprj%/entity/Turnover_entity/entityfields/filteredturnovers/documentation.adoc</documentation> + <recordContainer>jdito</recordContainer> <dependencies> <entityDependency> <name>51106aba-bd82-4ac5-8de6-fc56d53c6117</name> @@ -117,11 +118,125 @@ <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> + <dependencies> + <entityDependency> + <name>d20b815b-0c36-4e7c-b114-9a8bfba77c96</name> + <entityName>Organisation_entity</entityName> + <fieldName>Turnovers</fieldName> + <isConsumer v="false" /> + </entityDependency> + <entityDependency> + <name>341bcc89-313f-43eb-94ef-b9a934fe7f1e</name> + <entityName>Salesproject_entity</entityName> + <fieldName>Turnovers</fieldName> + <isConsumer v="false" /> + </entityDependency> + </dependencies> + <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 +256,167 @@ </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> + <filterExtensionSet> + <name>ClassificationType_filter</name> + <filterFieldsProcess>%aditoprj%/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/classificationtype_filter/filterFieldsProcess.js</filterFieldsProcess> + <filterValuesProcess>%aditoprj%/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/classificationtype_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> + <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> + <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> + </filterExtensions> + </jDitoRecordContainer> </recordContainers> </entity> diff --git a/entity/Turnover_entity/documentation.adoc b/entity/Turnover_entity/documentation.adoc index c369458ae6..4198a9d4a2 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 0000000000..b7905f93be --- /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 fd0e3bd7a6..ad9b4204f6 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 0000000000..80bd839c8e --- /dev/null +++ b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/contentProcess.js @@ -0,0 +1,41 @@ +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.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 0000000000..2a00071eed --- /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/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/classificationgroup_filter/filterValuesProcess.js b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/classificationgroup_filter/filterValuesProcess.js new file mode 100644 index 0000000000..1b8a9b5097 --- /dev/null +++ b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/classificationgroup_filter/filterValuesProcess.js @@ -0,0 +1,6 @@ +import("system.result"); +import("ClassificationFilter_lib"); + +var values = ClassificationGroupFilterUtils.makeFilterValues(); + +result.object(values); \ No newline at end of file diff --git a/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/classificationtype_filter/filterFieldsProcess.js b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/classificationtype_filter/filterFieldsProcess.js new file mode 100644 index 0000000000..973583180e --- /dev/null +++ b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/classificationtype_filter/filterFieldsProcess.js @@ -0,0 +1,6 @@ +import("system.vars"); +import("system.result"); +import("ClassificationFilter_lib"); + +var fields = ClassificationTypeFilterUtils.getFilterFields("Organisation"); +result.string(fields); \ No newline at end of file diff --git a/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/classificationtype_filter/filterValuesProcess.js b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/classificationtype_filter/filterValuesProcess.js new file mode 100644 index 0000000000..488499064a --- /dev/null +++ b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/classificationtype_filter/filterValuesProcess.js @@ -0,0 +1,5 @@ +import("system.result"); +import("ClassificationFilter_lib"); + +var values = ClassificationTypeFilterUtils.makeFilterFields(); +result.object(values); \ No newline at end of file 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 0000000000..e360457231 --- /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 0000000000..8dd51ba80b --- /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 0000000000..105c59dca1 --- /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 0000000000..942b0a0495 --- /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 0000000000..b8ebaf03a4 --- /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 0000000000..0a0ee58183 --- /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/orglanguage_filter/filterValuesProcess.js b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orglanguage_filter/filterValuesProcess.js new file mode 100644 index 0000000000..a8b5a7d0f1 --- /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/orgtype_filter/filterValuesProcess.js b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orgtype_filter/filterValuesProcess.js new file mode 100644 index 0000000000..4742b4b099 --- /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 0000000000..9391c3e568 --- /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 0000000000..4dda5fa2a6 --- /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/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index a486c667a7..52d36bec80 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -8184,6 +8184,93 @@ <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> diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod index cf46e6ae2e..812e95af82 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -10,6 +10,10 @@ <key>Event End</key> <value>Veranstaltungs Ende</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>Value is too big, the maximum is %0</key> <value>Wert ist zu groß, das Maximum ist %0</value> @@ -27,14 +31,54 @@ <value>Objekt nicht gefunden </value> </entry> + <entry> + <key>Change responsible</key> + <value>Verantwortlichen wechseln</value> + </entry> + <entry> + <key>Already existing</key> + <value>Bereits existierende</value> + </entry> <entry> <key>discounted Vat</key> <value>Rbt. Mehrwertssteuer</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>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>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> @@ -43,18 +87,46 @@ <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>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>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> @@ -423,6 +495,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> @@ -439,6 +515,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 +539,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> @@ -1711,6 +1795,10 @@ <key>Checked</key> <value>Geprüft</value> </entry> + <entry> + <key>Save</key> + <value>Speichern</value> + </entry> <entry> <key>Sent</key> <value>Versendet</value> @@ -4047,6 +4135,10 @@ <entry> <key>25%</key> </entry> + <entry> + <key>Sales forecast</key> + <value>Umsatzprognose</value> + </entry> <entry> <key>50%</key> </entry> @@ -4657,7 +4749,7 @@ </entry> <entry> <key>Locked</key> - <value>Gelocked</value> + <value>Gesperrt </value> </entry> <entry> <key>Timetracking Id</key> @@ -5974,6 +6066,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> @@ -7229,6 +7325,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 +7357,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> @@ -10092,6 +10196,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 +10255,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> diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod index c1283cc096..06e91e0b7a 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -8265,6 +8265,93 @@ <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> diff --git a/neonContext/Organisation/Organisation.aod b/neonContext/Organisation/Organisation.aod index 87f1786ece..f3e985e770 100644 --- a/neonContext/Organisation/Organisation.aod +++ b/neonContext/Organisation/Organisation.aod @@ -67,5 +67,9 @@ <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> </references> </neonContext> diff --git a/neonContext/OrganisationsMultiEdit/OrganisationsMultiEdit.aod b/neonContext/OrganisationsMultiEdit/OrganisationsMultiEdit.aod new file mode 100644 index 0000000000..6861aac96f --- /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/Planning/Planning.aod b/neonContext/Planning/Planning.aod new file mode 100644 index 0000000000..387221c361 --- /dev/null +++ b/neonContext/Planning/Planning.aod @@ -0,0 +1,35 @@ +<?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>87ed8e38-7591-404e-b57a-b1268db6a777</name> + </neonViewReference> + <neonViewReference> + <name>1a7e2b28-65ee-4620-88b7-c8f38b69d2c5</name> + </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 0000000000..8b02af1a9e --- /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/PlanningChangeStatusAndResponsible/PlanningChangeStatusAndResponsible.aod b/neonContext/PlanningChangeStatusAndResponsible/PlanningChangeStatusAndResponsible.aod new file mode 100644 index 0000000000..3e7cb8a0d1 --- /dev/null +++ b/neonContext/PlanningChangeStatusAndResponsible/PlanningChangeStatusAndResponsible.aod @@ -0,0 +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>PlanningChangeStatusAndResponsible</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <entity>PlanningChangeStatusAndResponsible_entity</entity> + <references> + <neonViewReference> + <name>aded48b1-7b16-4ef8-a7b8-0679846d888f</name> + <view>PlanningChangeStatus_view</view> + </neonViewReference> + <neonViewReference> + <name>519a7687-db30-4f6b-83f3-f228e96ef19a</name> + <view>PlanningChangeResponsible_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonContext/Turnover/Turnover.aod b/neonContext/Turnover/Turnover.aod index 1973598c84..b1da34ccaf 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/neonView/OrganisationMain_view/OrganisationMain_view.aod b/neonView/OrganisationMain_view/OrganisationMain_view.aod index 53376c617b..67ceac6a5c 100644 --- a/neonView/OrganisationMain_view/OrganisationMain_view.aod +++ b/neonView/OrganisationMain_view/OrganisationMain_view.aod @@ -65,6 +65,11 @@ <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> diff --git a/neonView/OrganisationPlanningTurnoverChart_view/OrganisationPlanningTurnoverChart_view.aod b/neonView/OrganisationPlanningTurnoverChart_view/OrganisationPlanningTurnoverChart_view.aod new file mode 100644 index 0000000000..a506d247ca --- /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/OrganisationsMultiEdit_view/OrganisationsMultiEdit_view.aod b/neonView/OrganisationsMultiEdit_view/OrganisationsMultiEdit_view.aod new file mode 100644 index 0000000000..e016aea0aa --- /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/PlanningAddToOrganisationOverlay_view/PlanningAddToOrganisationOverlay_view.aod b/neonView/PlanningAddToOrganisationOverlay_view/PlanningAddToOrganisationOverlay_view.aod new file mode 100644 index 0000000000..1f4b1f97ea --- /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 0000000000..0d5eba2523 --- /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 0000000000..173de0924d --- /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 0000000000..af062e3c59 --- /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 0000000000..de3b597b0c --- /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 0000000000..3b962389e8 --- /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 0000000000..aef83d5201 --- /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 0000000000..93e3ba9a59 --- /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 0000000000..e190fa525c --- /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 0000000000..ed4339a63e --- /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/SalesprojectOfferForecast_view/SalesprojectOfferForecast_view.aod b/neonView/SalesprojectOfferForecast_view/SalesprojectOfferForecast_view.aod index 6d39b58450..46035190b0 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/SalesprojectScoreCard_view/SalesprojectScoreCard_view.aod b/neonView/SalesprojectScoreCard_view/SalesprojectScoreCard_view.aod index 6ab33f8dae..73440be89f 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/TurnoverDynamicMultiDataChart_view/TurnoverDynamicMultiDataChart_view.aod b/neonView/TurnoverDynamicMultiDataChart_view/TurnoverDynamicMultiDataChart_view.aod new file mode 100644 index 0000000000..37ac782943 --- /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/process/AttributeFilter_lib/process.js b/process/AttributeFilter_lib/process.js index 0e9a44920e..eebe63683c 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/ClassificationFilter_lib/process.js b/process/ClassificationFilter_lib/process.js index d99652fcf5..bf51b65574 100644 --- a/process/ClassificationFilter_lib/process.js +++ b/process/ClassificationFilter_lib/process.js @@ -270,10 +270,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; }; diff --git a/process/Employee_lib/process.js b/process/Employee_lib/process.js index df1b7707c2..2cc4dad6f5 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/KeywordRegistry_basic/process.js b/process/KeywordRegistry_basic/process.js index c3ec1641de..2ae0206e4c 100644 --- a/process/KeywordRegistry_basic/process.js +++ b/process/KeywordRegistry_basic/process.js @@ -354,4 +354,13 @@ $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";} \ No newline at end of file diff --git a/process/Liquibase_lib/process.js b/process/Liquibase_lib/process.js index dc12de6cc2..733bfa14a3 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/Turnover_lib/process.js b/process/Turnover_lib/process.js index c2f5c6c9de..4ce2665e32 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,638 @@ 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 += sqlHelper.cast("FORECAST.VOLUME/100*PLANNING_MONTH.MONTH_FACTOR", SQLTYPES.INTEGER) + " 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, " + sqlHelper.cast("FORECAST.VOLUME", SQLTYPES.INTEGER) + + " 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, " + + sqlHelper.cast("(FORECAST.VOLUME/100*SALESPROJECT.PROBABILITY)", SQLTYPES.INTEGER) + + " 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, " + + sqlHelper.cast("((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))", SQLTYPES.INTEGER) + " 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" + } + }; + + 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/rendererDefinition/numberPlus1000/numberPlus1000.aod b/rendererDefinition/numberPlus1000/numberPlus1000.aod new file mode 100644 index 0000000000..42ad72cbb2 --- /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> -- GitLab From b4143179af00613a75c502dba633ca791611f020 Mon Sep 17 00:00:00 2001 From: "c.manhart" <c.manhart@adito.de> Date: Wed, 7 Apr 2021 11:23:42 +0200 Subject: [PATCH 032/242] =?UTF-8?q?[Projekt:=20xRM-ContactManagement][Tick?= =?UTF-8?q?etNr.:=201078253][Mailbridge=20setzt=20Verantwortlichen=20in=20?= =?UTF-8?q?Aktivit=C3=A4t=20nicht]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- process/IncomingEmailExecutor_lib/process.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/process/IncomingEmailExecutor_lib/process.js b/process/IncomingEmailExecutor_lib/process.js index 18756c30f4..7697b96daa 100644 --- a/process/IncomingEmailExecutor_lib/process.js +++ b/process/IncomingEmailExecutor_lib/process.js @@ -198,10 +198,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; -- GitLab From 76b318faac9559e82155c031554af4b50b604796 Mon Sep 17 00:00:00 2001 From: "b.ulrich" <b.ulrich@adito.de> Date: Wed, 7 Apr 2021 15:36:29 +0200 Subject: [PATCH 033/242] =?UTF-8?q?[Projekt:=20xRM-Sales][TicketNr.:=20107?= =?UTF-8?q?7564][Vorschau=20Belegposten=20nicht=20mehr=20m=C3=B6glich,=20V?= =?UTF-8?q?orschau=20Angebotsposten]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- neonContext/Orderitem/Orderitem.aod | 1 + 1 file changed, 1 insertion(+) diff --git a/neonContext/Orderitem/Orderitem.aod b/neonContext/Orderitem/Orderitem.aod index 7f83b02e3c..7317e72be6 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> -- GitLab From 0c545884667a2ff30e7bba80d3dd9b011f621039 Mon Sep 17 00:00:00 2001 From: Jessica Luginger <j.luginger@adito.de> Date: Thu, 8 Apr 2021 06:17:21 +0000 Subject: [PATCH 034/242] Added Entity Planning with Views, ... Serial Action Add Planning to Organisations --- entity/Planning_entity/Planning_entity.aod | 15 ++++++--------- .../entityfields/volume/titleProcess.js | 4 ---- entity/Planning_entity/grantDeleteProcess.js | 8 ++++++++ entity/Planning_entity/grantUpdateProcess.js | 8 ++++++++ .../contact_id.displayvalue/expression.js | 4 ---- .../expression.js | 4 ---- 6 files changed, 22 insertions(+), 21 deletions(-) delete mode 100644 entity/Planning_entity/entityfields/volume/titleProcess.js create mode 100644 entity/Planning_entity/grantDeleteProcess.js create mode 100644 entity/Planning_entity/grantUpdateProcess.js delete mode 100644 entity/Planning_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js delete mode 100644 entity/Planning_entity/recordcontainers/db/recordfieldmappings/responsible_contact_id.displayvalue/expression.js diff --git a/entity/Planning_entity/Planning_entity.aod b/entity/Planning_entity/Planning_entity.aod index 8fb7f8f796..d398750ab2 100644 --- a/entity/Planning_entity/Planning_entity.aod +++ b/entity/Planning_entity/Planning_entity.aod @@ -6,6 +6,8 @@ <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> @@ -33,7 +35,6 @@ <inputFormat>#,##0.00</inputFormat> <groupable v="true" /> <mandatory v="true" /> - <titleProcess>%aditoprj%/entity/Planning_entity/entityfields/volume/titleProcess.js</titleProcess> </entityField> <entityField> <name>FORECAST_YEAR</name> @@ -50,6 +51,7 @@ <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> @@ -135,6 +137,7 @@ <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> @@ -143,6 +146,7 @@ <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> @@ -264,6 +268,7 @@ <dbRecordFieldMapping> <name>RESPONSIBLE_CONTACT_ID.value</name> <recordfield>FORECAST.RESPONSIBLE_CONTACT_ID</recordfield> + <isFilterable v="true" /> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>STATUS.displayValue</name> @@ -273,14 +278,6 @@ <name>GROUPCODE.displayValue</name> <expression>%aditoprj%/entity/Planning_entity/recordcontainers/db/recordfieldmappings/groupcode.displayvalue/expression.js</expression> </dbRecordFieldMapping> - <dbRecordFieldMapping> - <name>RESPONSIBLE_CONTACT_ID.displayValue</name> - <expression>%aditoprj%/entity/Planning_entity/recordcontainers/db/recordfieldmappings/responsible_contact_id.displayvalue/expression.js</expression> - </dbRecordFieldMapping> - <dbRecordFieldMapping> - <name>CONTACT_ID.displayValue</name> - <expression>%aditoprj%/entity/Planning_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js</expression> - </dbRecordFieldMapping> </recordFieldMappings> <linkInformation> <linkInformation> diff --git a/entity/Planning_entity/entityfields/volume/titleProcess.js b/entity/Planning_entity/entityfields/volume/titleProcess.js deleted file mode 100644 index f7b76c3354..0000000000 --- a/entity/Planning_entity/entityfields/volume/titleProcess.js +++ /dev/null @@ -1,4 +0,0 @@ -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/Planning_entity/grantDeleteProcess.js b/entity/Planning_entity/grantDeleteProcess.js new file mode 100644 index 0000000000..a6ac3b38ec --- /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 0000000000..a6ac3b38ec --- /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/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js b/entity/Planning_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js deleted file mode 100644 index 117ecbdfdb..0000000000 --- a/entity/Planning_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js +++ /dev/null @@ -1,4 +0,0 @@ -import("system.result"); -import("Contact_lib"); - -result.string(ContactUtils.getResolvingDisplaySubSql("FORECAST.CONTACT_ID")); \ No newline at end of file diff --git a/entity/Planning_entity/recordcontainers/db/recordfieldmappings/responsible_contact_id.displayvalue/expression.js b/entity/Planning_entity/recordcontainers/db/recordfieldmappings/responsible_contact_id.displayvalue/expression.js deleted file mode 100644 index 4fbf49a35f..0000000000 --- a/entity/Planning_entity/recordcontainers/db/recordfieldmappings/responsible_contact_id.displayvalue/expression.js +++ /dev/null @@ -1,4 +0,0 @@ -import("system.result"); -import("Contact_lib"); - -result.string(ContactUtils.getResolvingDisplaySubSql("FORECAST.RESPONSIBLE_CONTACT_ID")); \ No newline at end of file -- GitLab From 8dd5ff83382bd6202c17c88ff1cb662158718350 Mon Sep 17 00:00:00 2001 From: "p.neub" <p.neub@adito.de> Date: Thu, 8 Apr 2021 08:42:20 +0200 Subject: [PATCH 035/242] [Projekt: xRM-Sales][TicketNr.: 1077014][Im Angebots PDF werden optionale Posten nicht gekennzeichnet.] --- process/Offer_lib/process.js | 5 +-- report/Offer_report/reportData.jrxml | 48 ++++++++++++++++++++-------- 2 files changed, 38 insertions(+), 15 deletions(-) diff --git a/process/Offer_lib/process.js b/process/Offer_lib/process.js index 777a0a8412..814ea7af98 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) }; diff --git a/report/Offer_report/reportData.jrxml b/report/Offer_report/reportData.jrxml index 909a49ae0c..24951a28ca 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"> -- GitLab From 88a1142c3c5281fabc00eae836c94c6c90dae7b2 Mon Sep 17 00:00:00 2001 From: Simon Leipold <s.leipold@adito.de> Date: Thu, 8 Apr 2021 10:12:42 +0200 Subject: [PATCH 036/242] =?UTF-8?q?[Projekt:=20Entwicklung=20-=20Neon][Tic?= =?UTF-8?q?ketNr.:=201074251][[Schl=C3=BCsselwort-Kategorie]=20Schl=C3=BCs?= =?UTF-8?q?selwort-Kategorie=20l=C3=B6schen=20bringt=20Fehler,=20Schl?= =?UTF-8?q?=C3=BCsselwort-Kategorie=20wird=20nicht=20gel=C3=B6scht]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../recordcontainers/db/onDBDelete.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/entity/KeywordCategory_entity/recordcontainers/db/onDBDelete.js b/entity/KeywordCategory_entity/recordcontainers/db/onDBDelete.js index 9fb896f27e..5d42defb0b 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 -- GitLab From 77097a928ae981d14d5591baab8137dff1435b7c Mon Sep 17 00:00:00 2001 From: "p.neub" <p.neub@adito.de> Date: Thu, 8 Apr 2021 12:12:46 +0200 Subject: [PATCH 037/242] [Projekt: xRM-Sales][TicketNr.: 1078061][Fehlender Kontakt bei Angebotsanalage ] --- .../children/contactids_param/valueProcess.js | 19 ++++++-- .../entityfields/contact_id/stateProcess.js | 9 +--- .../entityfields/contact_id/valueProcess.js | 48 ++++++++++--------- 3 files changed, 42 insertions(+), 34 deletions(-) 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 64ebdd402a..b705ec11cf 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/contact_id/stateProcess.js b/entity/Offer_entity/entityfields/contact_id/stateProcess.js index 0dcccb84c7..e51ff93aff 100644 --- a/entity/Offer_entity/entityfields/contact_id/stateProcess.js +++ b/entity/Offer_entity/entityfields/contact_id/stateProcess.js @@ -3,11 +3,4 @@ import("system.result"); import("system.neon"); import("system.vars"); -if(vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) -{ - result.string(neon.COMPONENTSTATE_READONLY); -} -else -{ - result.string(OfferUtils.isEditable(vars.get("$field.STATUS")) ? neon.COMPONENTSTATE_AUTO : neon.COMPONENTSTATE_DISABLED); -} +result.string(OfferUtils.isEditable(vars.get("$field.STATUS")) ? neon.COMPONENTSTATE_AUTO : neon.COMPONENTSTATE_DISABLED); diff --git a/entity/Offer_entity/entityfields/contact_id/valueProcess.js b/entity/Offer_entity/entityfields/contact_id/valueProcess.js index c50907d05b..c0b04b6695 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); + } +} -- GitLab From 9587f39a4498856e142471126903470636b7a745 Mon Sep 17 00:00:00 2001 From: Christoph Manhart <c.manhart@adito.de> Date: Thu, 8 Apr 2021 12:50:37 +0000 Subject: [PATCH 038/242] =?UTF-8?q?[Projekt:=20Entwicklung=20-=20Neon][Tic?= =?UTF-8?q?ketNr.:=201071706][Schl=C3=BCsselwortliste=20Titel=20=C3=BCbers?= =?UTF-8?q?etzt=20einf=C3=BCgen]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entity/KeywordEntry_entity/KeywordEntry_entity.aod | 2 +- language/_____LANGUAGE_de/_____LANGUAGE_de.aod | 4 ++++ .../KeywordEntryFilter_view/KeywordEntryFilter_view.aod | 8 ++++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/entity/KeywordEntry_entity/KeywordEntry_entity.aod b/entity/KeywordEntry_entity/KeywordEntry_entity.aod index 7208b040a3..995222aa8b 100644 --- a/entity/KeywordEntry_entity/KeywordEntry_entity.aod +++ b/entity/KeywordEntry_entity/KeywordEntry_entity.aod @@ -688,7 +688,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> diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod index 812e95af82..4593fc87b7 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -71,6 +71,10 @@ <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>Title (translated)</key> + <value>Titel (übersetzt)</value> + </entry> <entry> <key>Organisation State</key> <value>Firma Staat</value> diff --git a/neonView/KeywordEntryFilter_view/KeywordEntryFilter_view.aod b/neonView/KeywordEntryFilter_view/KeywordEntryFilter_view.aod index efd8bf78f7..cd94859acb 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> -- GitLab From 1ce1ef8d59e7095013a2c1893c5c2f0c5ecce7a6 Mon Sep 17 00:00:00 2001 From: Benjamin Ulrich <b.ulrich@adito.de> Date: Thu, 8 Apr 2021 13:27:41 +0000 Subject: [PATCH 039/242] =?UTF-8?q?[Projekt:=20xRM-Sales][TicketNr.:=20107?= =?UTF-8?q?7022][Vertriebsprojekt=20Eigenschaften=20k=C3=B6nnen=20mehrfach?= =?UTF-8?q?=20ausgew=C3=A4hlt=20werden.]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AttributeRelation_entity.aod | 1 + .../children/gettree_param/valueProcess.js | 0 .../attributecount_param/valueProcess.js | 4 +++- .../entityfields/value/onValidation.js | 11 --------- .../entityfields/value_lookup/onValidation.js | 11 --------- neonContext/Salesproject/Salesproject.aod | 4 ++++ .../SalesprojectMain_view.aod | 4 ++-- process/Attribute_lib/process.js | 23 ------------------- 8 files changed, 10 insertions(+), 48 deletions(-) create mode 100644 entity/AttributeRelation_entity/entityfields/attributerelations/children/gettree_param/valueProcess.js diff --git a/entity/AttributeRelation_entity/AttributeRelation_entity.aod b/entity/AttributeRelation_entity/AttributeRelation_entity.aod index 05c0bf6f07..040e3dfeae 100644 --- a/entity/AttributeRelation_entity/AttributeRelation_entity.aod +++ b/entity/AttributeRelation_entity/AttributeRelation_entity.aod @@ -250,6 +250,7 @@ <children> <entityParameter> <name>GetTree_param</name> + <valueProcess>%aditoprj%/entity/AttributeRelation_entity/entityfields/attributerelations/children/gettree_param/valueProcess.js</valueProcess> <expose v="false" /> </entityParameter> </children> diff --git a/entity/AttributeRelation_entity/entityfields/attributerelations/children/gettree_param/valueProcess.js b/entity/AttributeRelation_entity/entityfields/attributerelations/children/gettree_param/valueProcess.js new file mode 100644 index 0000000000..e69de29bb2 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 9c0bc23173..0d6de778c4 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 81af77d117..ef3040e486 100644 --- a/entity/AttributeRelation_entity/entityfields/value/onValidation.js +++ b/entity/AttributeRelation_entity/entityfields/value/onValidation.js @@ -1,18 +1,8 @@ -import("system.translate"); import("Util_lib"); import("system.result"); import("system.vars"); import("Attribute_lib"); -if(vars.get("$field.AB_ATTRIBUTE_ID") && !AttributeRelationUtils.validateSingleCount( - vars.get("$param.ObjectType_param"), - vars.get("$param.ObjectRowId_param"), - vars.get("$field.AB_ATTRIBUTE_ID") -)) { - result.string(translate.text("Invalid attribute count")); -} -else -{ var attributeType = AttributeTypes.get(vars.get("$field.ATTRIBUTE_TYPE")); if (attributeType && !attributeType.useLookup) { @@ -21,5 +11,4 @@ if (attributeType && !attributeType.useLookup) { 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 38d6db89ef..f517b44992 100644 --- a/entity/AttributeRelation_entity/entityfields/value_lookup/onValidation.js +++ b/entity/AttributeRelation_entity/entityfields/value_lookup/onValidation.js @@ -1,18 +1,8 @@ -import("system.translate"); import("Util_lib"); import("system.result"); import("system.vars"); import("Attribute_lib"); -if(vars.get("$field.AB_ATTRIBUTE_ID") && !AttributeRelationUtils.validateSingleCount( - vars.get("$param.ObjectType_param"), - vars.get("$param.ObjectRowId_param"), - vars.get("$field.AB_ATTRIBUTE_ID") -)) { - result.string(translate.text("Invalid attribute count")); -} -else -{ var attributeType = AttributeTypes.get(vars.get("$field.ATTRIBUTE_TYPE")); if (attributeType && attributeType.useLookup) { @@ -22,4 +12,3 @@ if (attributeType && attributeType.useLookup) result.string(validationResult); } } -} diff --git a/neonContext/Salesproject/Salesproject.aod b/neonContext/Salesproject/Salesproject.aod index 92def56f1a..9b93a07f22 100644 --- a/neonContext/Salesproject/Salesproject.aod +++ b/neonContext/Salesproject/Salesproject.aod @@ -80,5 +80,9 @@ <name>407d9b32-c379-428b-b1e1-d92a820971fd</name> <view>SalesprojectPreviewMultiple_view</view> </neonViewReference> + <neonViewReference> + <name>c860de14-8ebe-438f-92c3-cba727a15690</name> + <view>SalesprojectAttribute_view</view> + </neonViewReference> </references> </neonContext> diff --git a/neonView/SalesprojectMain_view/SalesprojectMain_view.aod b/neonView/SalesprojectMain_view/SalesprojectMain_view.aod index 43368c0154..95fc6da524 100644 --- a/neonView/SalesprojectMain_view/SalesprojectMain_view.aod +++ b/neonView/SalesprojectMain_view/SalesprojectMain_view.aod @@ -25,8 +25,8 @@ <view>SalesprojectActivity_view</view> </neonViewReference> <neonViewReference> - <name>7ac103ea-1131-41e0-85ce-e7d2fc86dfd8</name> - <entityField>Attributes</entityField> + <name>107b20e3-6326-498a-968b-ac09257981fc</name> + <entityField>AttributeTree</entityField> <view>AttributeRelationTree_view</view> </neonViewReference> <neonViewReference> diff --git a/process/Attribute_lib/process.js b/process/Attribute_lib/process.js index f7ed889c70..98ff92d9eb 100644 --- a/process/Attribute_lib/process.js +++ b/process/Attribute_lib/process.js @@ -808,29 +808,6 @@ AttributeRelationUtils.countAttributeRelations = function (pRowId, pObjectType, return countObj; } -/** - * Checks weather the passed attribute can be added to the given object using the min and max count. - * - * @param {string} pObjectType the object type - * @param {string} pObjectRowId the id of the object - * @param {string} pAttributeId the attribute witch needs to be validated - * - * @returns {boolean} weather it is valid to add the attribute or not - */ -AttributeRelationUtils.validateSingleCount = function(pObjectType, pObjectRowId, pAttributeId) -{ - var [min, max] = newSelect(["AB_ATTRIBUTEUSAGE.MIN_COUNT", "AB_ATTRIBUTEUSAGE.MAX_COUNT"]) - .from("AB_ATTRIBUTEUSAGE") - .where("AB_ATTRIBUTEUSAGE.AB_ATTRIBUTE_ID", pAttributeId) - .and("AB_ATTRIBUTEUSAGE.OBJECT_TYPE", pObjectType).arrayRow(); - var attrCount = AttributeRelationUtils.countAttributeRelations( - pObjectRowId, - pObjectType, - {} - ); - var count = attrCount[vars.get("$field.AB_ATTRIBUTE_ID")] || 0; - return count >= parseInt(min || -Infinity) && count <= parseInt(max || Infinity); -} /*********************************************************************************************************************/ -- GitLab From 0287ae0f0ed41d1497d5a7f45bf575396ada5155 Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Thu, 8 Apr 2021 17:21:56 +0200 Subject: [PATCH 040/242] Marketing contact blacklisting --- .../CommunicationBlacklist/changelog.xml | 7 + .../create_communicationBlacklist.xml | 27 +++ .../insert_blacklistTypeKeyword.xml | 23 +++ .../Data_alias/basic/2021.0.2/changelog.xml | 1 + aliasDefinition/Data_alias/Data_alias.aod | 160 +++++++++++++++ .../_____SYSTEM_APPLICATION_NEON.aod | 4 + .../BulkMailRecipient_entity.aod | 9 + .../filterConditionProcess.js | 0 .../hascommrestriction.value/expression.js | 8 +- .../CommunicationBlacklist_entity.aod | 110 ++++++++++ .../blacklist_filter/stateProcess.js | 12 ++ .../blacklist_filter/valueProcess.js | 9 + .../containername_param/valueProcess.js | 4 + .../onValidation.js | 15 ++ .../KeywordEntry_entity.aod | 6 + .../CommunicationBlacklist.aod | 14 ++ .../CommunicationBlacklistEdit_view.aod | 39 ++++ .../CommunicationBlacklistFilter_view.aod | 34 +++ process/Bulkmail_lib/process.js | 6 +- process/KeywordRegistry_basic/process.js | 5 +- .../MarketingCondition_lib.aod | 1 + process/MarketingCondition_lib/process.js | 194 +++++++++++++++++- .../MarketingCondition_test.aod | 9 + process/MarketingCondition_test/process.js | 0 24 files changed, 691 insertions(+), 6 deletions(-) create mode 100644 .liquibase/Data_alias/basic/2021.0.2/CommunicationBlacklist/changelog.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.2/CommunicationBlacklist/create_communicationBlacklist.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.2/CommunicationBlacklist/insert_blacklistTypeKeyword.xml create mode 100644 entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/emailaddress_filter/filterConditionProcess.js create mode 100644 entity/CommunicationBlacklist_entity/CommunicationBlacklist_entity.aod create mode 100644 entity/CommunicationBlacklist_entity/entityfields/blacklist_filter/stateProcess.js create mode 100644 entity/CommunicationBlacklist_entity/entityfields/blacklist_filter/valueProcess.js create mode 100644 entity/CommunicationBlacklist_entity/entityfields/blacklisttypekeyword/children/containername_param/valueProcess.js create mode 100644 entity/CommunicationBlacklist_entity/onValidation.js create mode 100644 neonView/CommunicationBlacklistEdit_view/CommunicationBlacklistEdit_view.aod create mode 100644 neonView/CommunicationBlacklistFilter_view/CommunicationBlacklistFilter_view.aod create mode 100644 process/MarketingCondition_test/MarketingCondition_test.aod create mode 100644 process/MarketingCondition_test/process.js diff --git a/.liquibase/Data_alias/basic/2021.0.2/CommunicationBlacklist/changelog.xml b/.liquibase/Data_alias/basic/2021.0.2/CommunicationBlacklist/changelog.xml new file mode 100644 index 0000000000..de169ea5bf --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.2/CommunicationBlacklist/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_communicationBlacklist.xml"/> + <include relativeToChangelogFile="true" file="insert_blacklistTypeKeyword.xml"/> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.2/CommunicationBlacklist/create_communicationBlacklist.xml b/.liquibase/Data_alias/basic/2021.0.2/CommunicationBlacklist/create_communicationBlacklist.xml new file mode 100644 index 0000000000..faf00d8192 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.2/CommunicationBlacklist/create_communicationBlacklist.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 author="s.listl" id="9415eb4f-ea93-433c-8a69-1bdb77c6ec87"> + <createTable tableName="COMMUNICATIONBLACKLIST"> + <column name="COMMUNICATIONBLACKLISTID" type="CHAR(36)"> + <constraints nullable="false" primaryKey="true" primaryKeyName="PK_COMMUNICATIONBLACKLISTID"/> + </column> + <column name="BLACKLIST_TYPE" type="VARCHAR(36)"> + <constraints nullable="false"/> + </column> + <column name="BLACKLIST_FILTER" type="NCLOB"/> + <column name="REASON" type="NVARCHAR(500)"/> + <column name="START_DATE" type="DATETIME"/> + <column name="END_DATE" type="DATETIME"/> + <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> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.2/CommunicationBlacklist/insert_blacklistTypeKeyword.xml b/.liquibase/Data_alias/basic/2021.0.2/CommunicationBlacklist/insert_blacklistTypeKeyword.xml new file mode 100644 index 0000000000..c2a6c8057c --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.2/CommunicationBlacklist/insert_blacklistTypeKeyword.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="s.listl" id="89ba3828-288c-4af7-bf98-feccc01ce312"> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="e980999c-0f8e-484b-852b-92d60c38c14f"/> + <column name="NAME" value="CommunicationBlacklistType"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="a1c8d2c6-54c7-4e9d-9792-dd576ac6f43e"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="e980999c-0f8e-484b-852b-92d60c38c14f"/> + <column name="KEYID" value="BLACKLIST_TYPE_EMAILRECIPIENT_FILTER"/> + <column name="TITLE" value="Recipient filter"/> + <column name="CONTAINER" value="CommunicationBlacklistType"/> + <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.2/changelog.xml b/.liquibase/Data_alias/basic/2021.0.2/changelog.xml index 53aa034099..f73015f960 100644 --- a/.liquibase/Data_alias/basic/2021.0.2/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.0.2/changelog.xml @@ -7,4 +7,5 @@ <include relativeToChangelogFile="true" file="CommunicationSettings/changelog.xml"/> <include relativeToChangelogFile="true" file="change_SalesprojectMemberRole.xml"/> <include relativeToChangelogFile="true" file="Interest/changelog.xml"/> + <include relativeToChangelogFile="true" file="CommunicationBlacklist/changelog.xml"/> </databaseChangeLog> \ No newline at end of file diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod index 70a35bfc8c..d2efab6fb2 100644 --- a/aliasDefinition/Data_alias/Data_alias.aod +++ b/aliasDefinition/Data_alias/Data_alias.aod @@ -19729,6 +19729,166 @@ </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="-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>END_DATE</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>START_DATE</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>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> </entities> </entityGroup> </aliasDefDb> diff --git a/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod b/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod index 7af92c5374..5f7436d899 100644 --- a/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod +++ b/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod @@ -200,6 +200,10 @@ <name>Interest</name> <kind v="10077" /> </entityNode> + <entityNode> + <name>CommunicationBlacklist</name> + <kind v="10077" /> + </entityNode> </childNodes> </entityNode> <entityNode> diff --git a/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod b/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod index 5cd67de037..28e7362860 100644 --- a/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod +++ b/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod @@ -239,6 +239,7 @@ <dbRecordFieldMapping> <name>EMAIL_ADDRESS.value</name> <recordfield>BULKMAILRECIPIENT.EMAIL_ADDRESS</recordfield> + <isFilterable v="true" /> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>PROBLEM.value</name> @@ -283,6 +284,14 @@ <readonly v="true" /> </linkInformation> </linkInformation> + <filterExtensions> + <filterExtension> + <name>EmailAddress_filter</name> + <title>Email</title> + <contentType>TEXT</contentType> + <filterConditionProcess>%aditoprj%/entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/emailaddress_filter/filterConditionProcess.js</filterConditionProcess> + </filterExtension> + </filterExtensions> </dbRecordContainer> </recordContainers> </entity> diff --git a/entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/emailaddress_filter/filterConditionProcess.js b/entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/emailaddress_filter/filterConditionProcess.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/hascommrestriction.value/expression.js b/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/hascommrestriction.value/expression.js index 04cd6d4dc9..62e0253b7f 100644 --- a/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/hascommrestriction.value/expression.js +++ b/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/hascommrestriction.value/expression.js @@ -1,9 +1,13 @@ +import("MarketingCondition_lib"); 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"); +var communicationSettingsCondition = new CommunicationSettingsCondition() + .medium($KeywordRegistry.communicationMediumCampaign$mail(), "BULKMAILRECIPIENT.EMAIL_ADDRESS") + .rejected() + .buildNotExistsCondition(); +var sql = SqlBuilder.caseWhen(communicationSettingsCondition).thenString("true").elseString("false"); result.string(sql.toString()); diff --git a/entity/CommunicationBlacklist_entity/CommunicationBlacklist_entity.aod b/entity/CommunicationBlacklist_entity/CommunicationBlacklist_entity.aod new file mode 100644 index 0000000000..58cbbc2265 --- /dev/null +++ b/entity/CommunicationBlacklist_entity/CommunicationBlacklist_entity.aod @@ -0,0 +1,110 @@ +<?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>CommunicationBlacklist_entity</name> + <title>Blacklist</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <onValidation>%aditoprj%/entity/CommunicationBlacklist_entity/onValidation.js</onValidation> + <iconId>VAADIN:BAN</iconId> + <recordContainer>db</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + </entityProvider> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityField> + <name>COMMUNICATIONBLACKLISTID</name> + </entityField> + <entityField> + <name>START_DATE</name> + <title>Start date</title> + <contentType>DATE</contentType> + <resolution>DAY</resolution> + </entityField> + <entityField> + <name>END_DATE</name> + <title>End date</title> + <contentType>DATE</contentType> + <resolution>DAY</resolution> + </entityField> + <entityField> + <name>BLACKLIST_FILTER</name> + <title>Condition</title> + <contentType>FILTER_TREE</contentType> + <stateProcess>%aditoprj%/entity/CommunicationBlacklist_entity/entityfields/blacklist_filter/stateProcess.js</stateProcess> + <valueProcess>%aditoprj%/entity/CommunicationBlacklist_entity/entityfields/blacklist_filter/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>REASON</name> + <title>Reason</title> + <contentType>LONG_TEXT</contentType> + <mandatory v="true" /> + </entityField> + <entityField> + <name>BLACKLIST_TYPE</name> + <title>Type</title> + <consumer>BlacklistTypeKeyword</consumer> + <mandatory v="true" /> + </entityField> + <entityConsumer> + <name>BlacklistTypeKeyword</name> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/CommunicationBlacklist_entity/entityfields/blacklisttypekeyword/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + </entityFields> + <recordContainers> + <dbRecordContainer> + <name>db</name> + <alias>Data_alias</alias> + <recordFieldMappings> + <dbRecordFieldMapping> + <name>BLACKLIST_FILTER.value</name> + <recordfield>COMMUNICATIONBLACKLIST.BLACKLIST_FILTER</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>BLACKLIST_TYPE.value</name> + <recordfield>COMMUNICATIONBLACKLIST.BLACKLIST_TYPE</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>COMMUNICATIONBLACKLISTID.value</name> + <recordfield>COMMUNICATIONBLACKLIST.COMMUNICATIONBLACKLISTID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>END_DATE.value</name> + <recordfield>COMMUNICATIONBLACKLIST.END_DATE</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>REASON.value</name> + <recordfield>COMMUNICATIONBLACKLIST.REASON</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>START_DATE.value</name> + <recordfield>COMMUNICATIONBLACKLIST.START_DATE</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + </recordFieldMappings> + <linkInformation> + <linkInformation> + <name>007ad42a-0a7a-49a9-a71d-917ee3c94aa7</name> + <tableName>COMMUNICATIONBLACKLIST</tableName> + <primaryKey>COMMUNICATIONBLACKLISTID</primaryKey> + <isUIDTable v="true" /> + <readonly v="false" /> + </linkInformation> + </linkInformation> + </dbRecordContainer> + </recordContainers> +</entity> diff --git a/entity/CommunicationBlacklist_entity/entityfields/blacklist_filter/stateProcess.js b/entity/CommunicationBlacklist_entity/entityfields/blacklist_filter/stateProcess.js new file mode 100644 index 0000000000..234a26e982 --- /dev/null +++ b/entity/CommunicationBlacklist_entity/entityfields/blacklist_filter/stateProcess.js @@ -0,0 +1,12 @@ +import("system.result"); +import("KeywordRegistry_basic"); +import("system.vars"); +import("system.neon"); + +var state = neon.COMPONENTSTATE_INVISIBLE; +if (vars.get("$field.BLACKLIST_TYPE") == $KeywordRegistry.communicationBlacklistType$emailRecipientFilter()) +{ + state = neon.COMPONENTSTATE_EDITABLE; +} + +result.string(state); \ No newline at end of file diff --git a/entity/CommunicationBlacklist_entity/entityfields/blacklist_filter/valueProcess.js b/entity/CommunicationBlacklist_entity/entityfields/blacklist_filter/valueProcess.js new file mode 100644 index 0000000000..0bb45e823a --- /dev/null +++ b/entity/CommunicationBlacklist_entity/entityfields/blacklist_filter/valueProcess.js @@ -0,0 +1,9 @@ +import("system.neon"); +import("system.vars"); +import("system.result"); + +if (!vars.get("$this.value") && (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)) +{ + var emptyFilter = {entity: "BulkMailRecipient_entity", filter: {type: "group", operator: "AND", childs: []}}; + result.string(JSON.stringify(emptyFilter)); +} \ No newline at end of file diff --git a/entity/CommunicationBlacklist_entity/entityfields/blacklisttypekeyword/children/containername_param/valueProcess.js b/entity/CommunicationBlacklist_entity/entityfields/blacklisttypekeyword/children/containername_param/valueProcess.js new file mode 100644 index 0000000000..1e28921b3c --- /dev/null +++ b/entity/CommunicationBlacklist_entity/entityfields/blacklisttypekeyword/children/containername_param/valueProcess.js @@ -0,0 +1,4 @@ +import("KeywordRegistry_basic"); +import("system.result"); + +result.string($KeywordRegistry.communicationBlacklistType()); \ No newline at end of file diff --git a/entity/CommunicationBlacklist_entity/onValidation.js b/entity/CommunicationBlacklist_entity/onValidation.js new file mode 100644 index 0000000000..0652d9c0f9 --- /dev/null +++ b/entity/CommunicationBlacklist_entity/onValidation.js @@ -0,0 +1,15 @@ +import("system.translate"); +import("Util_lib"); +import("system.result"); +import("KeywordRegistry_basic"); +import("system.vars"); +import("system.neon"); +import("JditoFilter_lib"); + +if (vars.get("$field.BLACKLIST_TYPE") == $KeywordRegistry.communicationBlacklistType$emailRecipientFilter()) +{ + var filter = Utils.parseJSON(vars.get("$field.BLACKLIST_FILTER")); + filter = new FilterConditionGroup(filter); + if (filter.isEmpty()) + result.string(translate.text("Filter can't be empty")); +} \ No newline at end of file diff --git a/entity/KeywordEntry_entity/KeywordEntry_entity.aod b/entity/KeywordEntry_entity/KeywordEntry_entity.aod index c2d0201747..d7ba8e60fc 100644 --- a/entity/KeywordEntry_entity/KeywordEntry_entity.aod +++ b/entity/KeywordEntry_entity/KeywordEntry_entity.aod @@ -684,6 +684,12 @@ <fieldName>StatusKeyword</fieldName> <isConsumer v="false" /> </entityDependency> + <entityDependency> + <name>a4d04777-82dc-4384-a4a5-c6a4a71e7a65</name> + <entityName>CommunicationBlacklist_entity</entityName> + <fieldName>BlacklistTypeKeyword</fieldName> + <isConsumer v="false" /> + </entityDependency> </dependencies> <children> <entityParameter> diff --git a/neonContext/CommunicationBlacklist/CommunicationBlacklist.aod b/neonContext/CommunicationBlacklist/CommunicationBlacklist.aod index e6c6084fa9..9e69819413 100644 --- a/neonContext/CommunicationBlacklist/CommunicationBlacklist.aod +++ b/neonContext/CommunicationBlacklist/CommunicationBlacklist.aod @@ -1,5 +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>CommunicationBlacklist</name> + <title>Blacklist</title> <majorModelMode>DISTRIBUTED</majorModelMode> + <filterView>CommunicationBlacklistFilter_view</filterView> + <editView>CommunicationBlacklistEdit_view</editView> + <entity>CommunicationBlacklist_entity</entity> + <references> + <neonViewReference> + <name>664796b3-d90b-439d-b960-a1f09e00c99d</name> + <view>CommunicationBlacklistFilter_view</view> + </neonViewReference> + <neonViewReference> + <name>c08fe896-0181-4243-8639-cb96e302d3c8</name> + <view>CommunicationBlacklistEdit_view</view> + </neonViewReference> + </references> </neonContext> diff --git a/neonView/CommunicationBlacklistEdit_view/CommunicationBlacklistEdit_view.aod b/neonView/CommunicationBlacklistEdit_view/CommunicationBlacklistEdit_view.aod new file mode 100644 index 0000000000..7ca289f4bd --- /dev/null +++ b/neonView/CommunicationBlacklistEdit_view/CommunicationBlacklistEdit_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>CommunicationBlacklistEdit_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>5bf6cb8b-20da-4e64-ab86-e654e1f9f6a5</name> + <entityField>BLACKLIST_TYPE</entityField> + </entityFieldLink> + <entityFieldLink> + <name>bad5d056-972e-4d10-b3c7-a25bf6233cb5</name> + <entityField>BLACKLIST_FILTER</entityField> + </entityFieldLink> + <entityFieldLink> + <name>f74c2a6a-1b70-4914-8059-8866a0e5db77</name> + <entityField>START_DATE</entityField> + </entityFieldLink> + <entityFieldLink> + <name>2b2bb0e7-7cdf-42ca-8c0b-89d1d869fa44</name> + <entityField>END_DATE</entityField> + </entityFieldLink> + <entityFieldLink> + <name>947da750-50bd-47bb-af2d-7446b3756482</name> + <entityField>REASON</entityField> + </entityFieldLink> + </fields> + </genericViewTemplate> + </children> +</neonView> diff --git a/neonView/CommunicationBlacklistFilter_view/CommunicationBlacklistFilter_view.aod b/neonView/CommunicationBlacklistFilter_view/CommunicationBlacklistFilter_view.aod new file mode 100644 index 0000000000..232b308af1 --- /dev/null +++ b/neonView/CommunicationBlacklistFilter_view/CommunicationBlacklistFilter_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>CommunicationBlacklistFilter_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterable v="true" /> + <layout> + <groupLayout> + <name>layout</name> + </groupLayout> + </layout> + <children> + <tableViewTemplate> + <name>Table</name> + <columns> + <neonTableColumn> + <name>86497fa4-acda-4041-8cbc-8d11838b4876</name> + <entityField>BLACKLIST_TYPE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>304b2589-aabf-42f6-916f-a69cff5a1b00</name> + <entityField>START_DATE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>fd5077c1-942b-42f0-8f44-80e9c568db44</name> + <entityField>END_DATE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>d7050f91-da78-4ffc-a31c-30985d808473</name> + <entityField>REASON</entityField> + </neonTableColumn> + </columns> + </tableViewTemplate> + </children> +</neonView> diff --git a/process/Bulkmail_lib/process.js b/process/Bulkmail_lib/process.js index 79427698a5..521f14b765 100644 --- a/process/Bulkmail_lib/process.js +++ b/process/Bulkmail_lib/process.js @@ -1,3 +1,4 @@ +import("MarketingCondition_lib"); import("system.fileIO"); import("system.project"); import("Util_lib"); @@ -100,7 +101,10 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pTestRun) .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)) + .and(new CommunicationSettingsCondition() + .emails("BULKMAILRECIPIENT.EMAIL_ADDRESS") + .rejected().existNoSettings() + .buildCondition()) .table(); } var mailrunId = util.getNewUUID(); diff --git a/process/KeywordRegistry_basic/process.js b/process/KeywordRegistry_basic/process.js index 551fda9451..c653469b40 100644 --- a/process/KeywordRegistry_basic/process.js +++ b/process/KeywordRegistry_basic/process.js @@ -376,4 +376,7 @@ $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";}; \ No newline at end of file +$KeywordRegistry.interestLinkStatus$notSubscribed = function(){return "INTERESTLINK_NOTSUBSCRIBED";}; + +$KeywordRegistry.communicationBlacklistType = function(){return "CommunicationBlacklistType";}; +$KeywordRegistry.communicationBlacklistType$emailRecipientFilter = function(){return "BLACKLIST_TYPE_EMAILRECIPIENT_FILTER";}; \ No newline at end of file diff --git a/process/MarketingCondition_lib/MarketingCondition_lib.aod b/process/MarketingCondition_lib/MarketingCondition_lib.aod index 3644f27fcc..5e55b885b0 100644 --- a/process/MarketingCondition_lib/MarketingCondition_lib.aod +++ b/process/MarketingCondition_lib/MarketingCondition_lib.aod @@ -3,6 +3,7 @@ <name>MarketingCondition_lib</name> <majorModelMode>DISTRIBUTED</majorModelMode> <process>%aditoprj%/process/MarketingCondition_lib/process.js</process> + <alias>Data_alias</alias> <variants> <element>LIBRARY</element> </variants> diff --git a/process/MarketingCondition_lib/process.js b/process/MarketingCondition_lib/process.js index 8e14db2b50..297fbb23fc 100644 --- a/process/MarketingCondition_lib/process.js +++ b/process/MarketingCondition_lib/process.js @@ -1,13 +1,203 @@ +import("Util_lib"); +import("system.vars"); +import("Sql_lib"); +import("KeywordRegistry_basic"); -function MarketingCondition () +/** + * Object for building communication settings sql conditions. + */ +function CommunicationSettingsCondition () { + this._contactIdSql = "CONTACT.CONTACTID"; + this._channelType = null; + this._medium = null; + this._channelIdSql = null; + this._settingStatus = null; + this._existsOperator = SqlBuilder.EXISTS(); +} + +CommunicationSettingsCondition.prototype.contactIdField = function (pContactIdSql) +{ + this._contactIdSql = pContactIdSql; + 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(); + 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; +} + +/** + * 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") + .where("COMMUNICATIONSETTINGS.CONTACT_ID = " + this._contactIdSql) + .andIfSet("COMMUNICATIONSETTINGS.STATUS", this._settingStatus); + + 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); +} + + /* required functionality: * - make communication settings condition * - make interest condition * - make blacklist condition * - make full condition * - check for single contact - */ \ No newline at end of file + */ + +function CommunicationBlacklistCondition () +{ + this._contactFilter = null; +} + +CommunicationBlacklistCondition.getContactFilters = function () +{ + var currentDate = vars.get("$sys.date"); + var filters = newSelect("BLACKLIST_FILTER") + .from("COMMUNICATIONBLACKLIST") + .where("COMMUNICATIONBLACKLIST.BLACKLIST_TYPE", $KeywordRegistry.communicationBlacklistType$contactFilter()) + .and(newWhere("COMMUNICATIONBLACKLIST.START_DATE", currentDate, SqlBuilder.GREATER_OR_EQUAL()) + .or("COMMUNICATIONBLACKLIST.START_DATE is null")) + .and(newWhere("COMMUNICATIONBLACKLIST.END_DATE", currentDate, SqlBuilder.LESS_OR_EQUAL())) + .or("COMMUNICATIONBLACKLIST.END_DATE is null") + .table(); + + var filterMappingFn = function ([blacklistFilter]) + { + blacklistFilter = JSON.parse(blacklistFilter); + if (!blacklistFilter.filter || blacklistFilter.entity != "AnyContact" || Utils.isNullOrEmpty(blacklistFilter.filter.childs)) + return null; + + return blacklistFilter.filter; + }; + + return { + type: "group", + operator: "AND", + childs: filters.map(filterMappingFn).filter(Utils.isObject) + }; +} + +CommunicationBlacklistCondition.prototype.contactFilter = function (pFilter) +{ + this._contactFilter = pFilter; + return this; +} + +CommunicationBlacklistCondition.prototype.buildCondition = function () +{ + +} \ No newline at end of file diff --git a/process/MarketingCondition_test/MarketingCondition_test.aod b/process/MarketingCondition_test/MarketingCondition_test.aod new file mode 100644 index 0000000000..e1fabb654e --- /dev/null +++ b/process/MarketingCondition_test/MarketingCondition_test.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>MarketingCondition_test</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <process>%aditoprj%/process/MarketingCondition_test/process.js</process> + <variants> + <element>EXECUTABLE</element> + </variants> +</process> diff --git a/process/MarketingCondition_test/process.js b/process/MarketingCondition_test/process.js new file mode 100644 index 0000000000..e69de29bb2 -- GitLab From b33dc9a5b447f7e77f7efc04c4845d966d58576a Mon Sep 17 00:00:00 2001 From: Jessica Luginger <j.luginger@adito.de> Date: Fri, 9 Apr 2021 04:56:56 +0000 Subject: [PATCH 041/242] Added Entity Planning with Views, ... Serial Action Add Planning to Organisations --- .../recordcontainers/jdito/onInsert.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/entity/PlanningChangeStatusAndResponsible_entity/recordcontainers/jdito/onInsert.js b/entity/PlanningChangeStatusAndResponsible_entity/recordcontainers/jdito/onInsert.js index 4f967df1dc..14addd0dc1 100644 --- a/entity/PlanningChangeStatusAndResponsible_entity/recordcontainers/jdito/onInsert.js +++ b/entity/PlanningChangeStatusAndResponsible_entity/recordcontainers/jdito/onInsert.js @@ -47,9 +47,10 @@ else if(responsible) vals = [responsible]; } - -db.updateData(table, cols, null, vals, newWhere("FORECAST.FORECASTID", planningIds, SqlBuilder.IN()).toString()); - +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."; -- GitLab From 051464c4e1a80982c0531cee60da1925f1ceac24 Mon Sep 17 00:00:00 2001 From: "p.neub" <p.neub@adito.de> Date: Fri, 9 Apr 2021 08:20:52 +0200 Subject: [PATCH 042/242] [Projekt: xRM-Sales][TicketNr.: 1078404][Demodaten Datumsfelder bereinigen] --- .../basic/_demoData/generatedData/forecast.xml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/forecast.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/forecast.xml index f46b9333db..15d1278c9e 100644 --- a/.liquibase/Data_alias/basic/_demoData/generatedData/forecast.xml +++ b/.liquibase/Data_alias/basic/_demoData/generatedData/forecast.xml @@ -5,7 +5,7 @@ <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"/> @@ -15,7 +15,7 @@ <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"/> @@ -25,7 +25,7 @@ <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"/> @@ -35,7 +35,7 @@ <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"/> @@ -45,7 +45,7 @@ <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"/> @@ -55,7 +55,7 @@ <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"/> @@ -65,7 +65,7 @@ <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"/> @@ -75,7 +75,7 @@ <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"/> @@ -85,7 +85,7 @@ <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"/> -- GitLab From f2be0868d105af7c83f1151d7866405780228fdf Mon Sep 17 00:00:00 2001 From: "c.manhart" <c.manhart@adito.de> Date: Fri, 9 Apr 2021 09:52:43 +0200 Subject: [PATCH 043/242] =?UTF-8?q?[Projekt:=20xRM-ContactManagement][Tick?= =?UTF-8?q?etNr.:=201078468][IncomingEmailExecutor=20verkn=C3=BCpft=20beli?= =?UTF-8?q?ebigen=20Kontakt]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- process/IncomingEmailExecutor_lib/process.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/process/IncomingEmailExecutor_lib/process.js b/process/IncomingEmailExecutor_lib/process.js index 18756c30f4..acd4c707cd 100644 --- a/process/IncomingEmailExecutor_lib/process.js +++ b/process/IncomingEmailExecutor_lib/process.js @@ -153,11 +153,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) -- GitLab From a36b28ff4736c30db5b5a7a5b66046ed717ca444 Mon Sep 17 00:00:00 2001 From: "d.tran" <d.tran@adito.de> Date: Fri, 9 Apr 2021 10:22:22 +0200 Subject: [PATCH 044/242] [Projekt: xRM-ContactManagement][TicketNr.: 1074977][Kontakt-Lookup nach Firmennamen filterbar] - Set org name as filterable for lookup. --- entity/Person_entity/Person_entity.aod | 2 ++ 1 file changed, 2 insertions(+) diff --git a/entity/Person_entity/Person_entity.aod b/entity/Person_entity/Person_entity.aod index f294673d39..d848742c1f 100644 --- a/entity/Person_entity/Person_entity.aod +++ b/entity/Person_entity/Person_entity.aod @@ -1635,6 +1635,8 @@ <dbRecordFieldMapping> <name>ORGANISATION_NAME.value</name> <recordfield>ORGANISATION.NAME</recordfield> + <isFilterable v="true" /> + <isLookupFilter v="true" /> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>USER_NEW.value</name> -- GitLab From ef55f7366e826577b269a747ca9d9c2f55fbd807 Mon Sep 17 00:00:00 2001 From: Benjamin Ulrich <b.ulrich@adito.de> Date: Fri, 9 Apr 2021 08:51:03 +0000 Subject: [PATCH 045/242] 1075818 improve price list logic --- .../entityfields/product_id/onValueChange.js | 3 +- entity/Productprice_entity/onValidation.js | 68 +++++++++++++++++++ .../recordcontainers/db/onDBInsert.js | 68 +++++++++++++++---- .../_____LANGUAGE_EXTRA.aod | 42 ++++++++++++ .../_____LANGUAGE_de/_____LANGUAGE_de.aod | 4 ++ .../_____LANGUAGE_en/_____LANGUAGE_en.aod | 21 ++++++ process/Product_lib/process.js | 52 +++++++++++--- 7 files changed, 233 insertions(+), 25 deletions(-) diff --git a/entity/Offeritem_entity/entityfields/product_id/onValueChange.js b/entity/Offeritem_entity/entityfields/product_id/onValueChange.js index 338d9afba7..2dc7f5d987 100644 --- a/entity/Offeritem_entity/entityfields/product_id/onValueChange.js +++ b/entity/Offeritem_entity/entityfields/product_id/onValueChange.js @@ -24,9 +24,10 @@ if(pId != "" && vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) } 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)//only sum-up this price if there is no valid Price + 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/Productprice_entity/onValidation.js b/entity/Productprice_entity/onValidation.js index 2bfd429162..2d96e9b5c1 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,67 @@ 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 priceListFilter = { currency: currency + , quantity: vars.get("$field.FROMQUANTITY") + , priceList: priceList + , buySell: buySell + , dateFrom: validFrom + , dateTo: validTo}; + var ProductDetails = ProductUtils.getProductDetails(productId, priceListFilter); + + var priceListsToPotentiallyReplace = ProductDetails.CurrentValidPriceLists; + var priceListsToReplace1 = []; + var priceListsToReplace2 = []; + + var showMessage = false; + for (var valPriceList in priceListsToPotentiallyReplace) + { + var currPriceList = priceListsToPotentiallyReplace[valPriceList]; + if(currPriceList["priceList"] == priceList && currPriceList["buySell"] == buySell) + { + 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; + } + } + } + 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 5d9ed76f35..62b572aaab 100644 --- a/entity/Productprice_entity/recordcontainers/db/onDBInsert.js +++ b/entity/Productprice_entity/recordcontainers/db/onDBInsert.js @@ -4,28 +4,70 @@ 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 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: vars.get("$field.FROMQUANTITY"), 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.CurrentValidPriceLists; +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) + { + 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/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index 52d36bec80..f8a0d9c47b 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -8370,6 +8370,48 @@ <entry> <key>On site</key> </entry> + <entry> + <key>Event Data</key> + </entry> + <entry> + <key>On Site</key> + </entry> + <entry> + <key>Event Type</key> + </entry> + <entry> + <key>New child product</key> + </entry> + <entry> + <key>Communication: Link</key> + </entry> + <entry> + <key>Event Begin</key> + </entry> + <entry> + <key>Buying center and internal project team</key> + </entry> + <entry> + <key>Communication: Phone</key> + </entry> + <entry> + <key>Event</key> + </entry> + <entry> + <key>other</key> + </entry> + <entry> + <key>Communication: Mail</key> + </entry> + <entry> + <key>Vacation</key> + </entry> + <entry> + <key>Event End</key> + </entry> + <entry> + <key>On site</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 4593fc87b7..6ceb69f4c9 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -10913,6 +10913,10 @@ Bitte Datumseingabe prüfen</value> <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 festgeleten Bereich.</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 06e91e0b7a..cc77285492 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -8400,6 +8400,27 @@ <entry> <key>Vacation</key> </entry> + <entry> + <key>On Site</key> + </entry> + <entry> + <key>New child product</key> + </entry> + <entry> + <key>Communication: Link</key> + </entry> + <entry> + <key>Buying center and internal project team</key> + </entry> + <entry> + <key>Communication: Phone</key> + </entry> + <entry> + <key>Communication: Mail</key> + </entry> + <entry> + <key>Vacation</key> + </entry> </keyValueMap> <font name="Dialog" style="0" size="11" /> </language> diff --git a/process/Product_lib/process.js b/process/Product_lib/process.js index c0a56e6456..cf20a1cf64 100644 --- a/process/Product_lib/process.js +++ b/process/Product_lib/process.js @@ -159,6 +159,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) { @@ -189,19 +200,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) @@ -247,12 +283,6 @@ 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 - { - ProductDetails.PriceLists[ProductData[i][colIdx]] = _getPriceListObject(); - } //Pricelist (currently valid) colIdx = colsProduct.length + colsPricelistAll.length; @@ -291,7 +321,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]; } -- GitLab From 842f9e32d45de3730a5e2c7f45b3874b958a9655 Mon Sep 17 00:00:00 2001 From: "b.ulrich" <b.ulrich@adito.de> Date: Fri, 9 Apr 2021 12:07:32 +0200 Subject: [PATCH 046/242] removed "auditActive v="false"" from data_alias --- aliasDefinition/Data_alias/Data_alias.aod | 1 - 1 file changed, 1 deletion(-) diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod index 3855966273..52da706609 100644 --- a/aliasDefinition/Data_alias/Data_alias.aod +++ b/aliasDefinition/Data_alias/Data_alias.aod @@ -5,7 +5,6 @@ <datasourceType v="0" /> <aliasDefinitionSub> <aliasDefDb> - <auditActive v="false" /> <entityGroup> <name>entityGroup</name> <entities> -- GitLab From 021650df69f6f372670366bb0d3d827ae9ffe6d5 Mon Sep 17 00:00:00 2001 From: Benjamin Ulrich <b.ulrich@adito.de> Date: Fri, 9 Apr 2021 12:27:09 +0000 Subject: [PATCH 047/242] 1070975 fix linked documents grant delete --- .../DistrictResponsible_entity/grantDeleteProcess.js | 1 + entity/District_entity/District_entity.aod | 2 +- entity/District_entity/grantDeleteProcess.js | 12 ++++++++---- entity/LeadLog_entity/LeadLog_entity.aod | 3 ++- entity/LeadLog_entity/grantDeleteProcess.js | 10 ++++++++++ entity/Leadimport_entity/grantDeleteProcess.js | 1 + entity/SupportTicket_entity/SupportTicket_entity.aod | 1 + entity/SupportTicket_entity/grantDeleteProcess.js | 10 ++++++++++ 8 files changed, 34 insertions(+), 6 deletions(-) create mode 100644 entity/LeadLog_entity/grantDeleteProcess.js create mode 100644 entity/SupportTicket_entity/grantDeleteProcess.js diff --git a/entity/DistrictResponsible_entity/grantDeleteProcess.js b/entity/DistrictResponsible_entity/grantDeleteProcess.js index 7039de6df6..164a0d74af 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/District_entity/District_entity.aod b/entity/District_entity/District_entity.aod index 1501adb177..a195aacda5 100644 --- a/entity/District_entity/District_entity.aod +++ b/entity/District_entity/District_entity.aod @@ -5,7 +5,7 @@ <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> diff --git a/entity/District_entity/grantDeleteProcess.js b/entity/District_entity/grantDeleteProcess.js index 74e2983678..2aa49f3be4 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/LeadLog_entity/LeadLog_entity.aod b/entity/LeadLog_entity/LeadLog_entity.aod index 60e321526f..6ebe043221 100644 --- a/entity/LeadLog_entity/LeadLog_entity.aod +++ b/entity/LeadLog_entity/LeadLog_entity.aod @@ -6,7 +6,8 @@ <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> diff --git a/entity/LeadLog_entity/grantDeleteProcess.js b/entity/LeadLog_entity/grantDeleteProcess.js new file mode 100644 index 0000000000..cea08cc1f6 --- /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/Leadimport_entity/grantDeleteProcess.js b/entity/Leadimport_entity/grantDeleteProcess.js index 416fae60cc..673d09de77 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/SupportTicket_entity/SupportTicket_entity.aod b/entity/SupportTicket_entity/SupportTicket_entity.aod index 18411b1b10..a82e8b8219 100644 --- a/entity/SupportTicket_entity/SupportTicket_entity.aod +++ b/entity/SupportTicket_entity/SupportTicket_entity.aod @@ -4,6 +4,7 @@ <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> diff --git a/entity/SupportTicket_entity/grantDeleteProcess.js b/entity/SupportTicket_entity/grantDeleteProcess.js new file mode 100644 index 0000000000..1300a4f0d5 --- /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 -- GitLab From 060a20b7eabee66cf633875bdc28f9495e1d86fa Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Fri, 9 Apr 2021 18:27:28 +0200 Subject: [PATCH 048/242] Communication Blacklist --- .../BulkMailRecipient_entity.aod | 48 +++- .../entityfields/icon/colorProcess.js | 2 +- .../entityfields/icon/valueProcess.js | 2 +- .../valueProcess.js | 3 + .../excludedstatus_param/valueProcess.js | 6 + .../recordcontainers/db/conditionProcess.js | 27 ++- .../filterConditionProcess.js | 0 .../hascommrestriction.value/expression.js | 13 - .../expression.js | 25 ++ process/Bulkmail_lib/process.js | 222 +++++++++++------- process/MarketingCondition_lib/process.js | 24 +- process/Sql_lib/process.js | 16 ++ .../gitLabWebhook_rest/gitLabWebhook_rest.aod | 16 ++ process/gitLabWebhook_rest/process.js | 134 +++++++++++ 14 files changed, 407 insertions(+), 131 deletions(-) create mode 100644 entity/BulkMailRecipient_entity/entityfields/recipientstobemailed/children/excludecommunicationrejecting_param/valueProcess.js create mode 100644 entity/BulkMailRecipient_entity/entityfields/recipientstobemailed/children/excludedstatus_param/valueProcess.js delete mode 100644 entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/emailaddress_filter/filterConditionProcess.js delete mode 100644 entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/hascommrestriction.value/expression.js create mode 100644 entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/hascommunicationrejection.value/expression.js create mode 100644 process/gitLabWebhook_rest/gitLabWebhook_rest.aod create mode 100644 process/gitLabWebhook_rest/process.js diff --git a/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod b/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod index 28e7362860..7f71a31c90 100644 --- a/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod +++ b/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod @@ -108,7 +108,7 @@ <state>READONLY</state> </entityField> <entityField> - <name>HASCOMMRESTRICTION</name> + <name>HASCOMMUNICATIONREJECTION</name> <title>Advertising ban</title> </entityField> <entityActionGroup> @@ -176,6 +176,36 @@ </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" /> + </entityParameter> + </children> + </entityProvider> + <entityParameter> + <name>IsTestMail_param</name> + <expose v="true" /> + </entityParameter> + <entityParameter> + <name>ExcludeBlacklisted_param</name> + </entityParameter> </entityFields> <recordContainers> <dbRecordContainer> @@ -232,10 +262,6 @@ <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> @@ -253,6 +279,10 @@ <name>TEST_RECIPIENT.value</name> <recordfield>BULKMAILRECIPIENT.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> @@ -284,14 +314,6 @@ <readonly v="true" /> </linkInformation> </linkInformation> - <filterExtensions> - <filterExtension> - <name>EmailAddress_filter</name> - <title>Email</title> - <contentType>TEXT</contentType> - <filterConditionProcess>%aditoprj%/entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/emailaddress_filter/filterConditionProcess.js</filterConditionProcess> - </filterExtension> - </filterExtensions> </dbRecordContainer> </recordContainers> </entity> diff --git a/entity/BulkMailRecipient_entity/entityfields/icon/colorProcess.js b/entity/BulkMailRecipient_entity/entityfields/icon/colorProcess.js index f4a5d6a797..32b81b7db3 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 c67e7c5712..711c154ccb 100644 --- a/entity/BulkMailRecipient_entity/entityfields/icon/valueProcess.js +++ b/entity/BulkMailRecipient_entity/entityfields/icon/valueProcess.js @@ -4,7 +4,7 @@ import("Contact_lib"); var type = ContactUtils.getContactTypeByPersOrg(vars.get("$field.PERSON_ID"), vars.get("$field.ORGANISATION_ID")); var icon; -if (vars.get("$field.HASCOMMRESTRICTION") == "true") +if (vars.get("$field.HASCOMMUNICATIONREJECTION") == "true") icon = "VAADIN:BAN"; else if (type == 1) icon = "VAADIN:BUILDING"; 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 0000000000..40effa0178 --- /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 0000000000..ae0c566f40 --- /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/recordcontainers/db/conditionProcess.js b/entity/BulkMailRecipient_entity/recordcontainers/db/conditionProcess.js index 01d4a5dc9c..3c7c8703cb 100644 --- a/entity/BulkMailRecipient_entity/recordcontainers/db/conditionProcess.js +++ b/entity/BulkMailRecipient_entity/recordcontainers/db/conditionProcess.js @@ -1,5 +1,30 @@ +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 excludeBlacklisted = Utils.toBoolean(vars.get("$param.ExcludeBlacklisted_param")); +var excludedStatus = Utils.parseJSON(vars.get("$param.ExcludedStatus_param")); + +var condition = newWhere("BULKMAILRECIPIENT.BULKMAIL_ID", "$param.BulkMailId_param"); +if (excludeWithCommunicationRejection) +{ + condition.and(new CommunicationSettingsCondition() + .medium($KeywordRegistry.communicationMediumCampaign$mail(), "BULKMAILRECIPIENT.EMAIL_ADDRESS") + .rejected() + .buildNotExistsCondition()); +} +if (excludeBlacklisted) +{ + condition.and("not (" + CommunicationBlacklist.getMailRecipientBlacklist().buildCondition() + ")"); +} +if (!Utils.isNullOrEmpty(excludedStatus)) +{ + condition.and("BULKMAILRECIPIENT.STATUS", excludedStatus, SqlBuilder.NOT_IN()); +} + +result.string(condition.toSource()); \ No newline at end of file diff --git a/entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/emailaddress_filter/filterConditionProcess.js b/entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/emailaddress_filter/filterConditionProcess.js deleted file mode 100644 index e69de29bb2..0000000000 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 62e0253b7f..0000000000 --- a/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/hascommrestriction.value/expression.js +++ /dev/null @@ -1,13 +0,0 @@ -import("MarketingCondition_lib"); -import("Sql_lib"); -import("KeywordRegistry_basic"); -import("Contact_lib"); -import("system.db"); -import("system.result"); - -var communicationSettingsCondition = new CommunicationSettingsCondition() - .medium($KeywordRegistry.communicationMediumCampaign$mail(), "BULKMAILRECIPIENT.EMAIL_ADDRESS") - .rejected() - .buildNotExistsCondition(); -var sql = SqlBuilder.caseWhen(communicationSettingsCondition).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 0000000000..cd8b6dfbc3 --- /dev/null +++ b/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/hascommunicationrejection.value/expression.js @@ -0,0 +1,25 @@ +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() + .buildNotExistsCondition(); + sql = SqlBuilder.caseWhen(communicationSettingsCondition).thenString("true").elseString("false").toString(); +} + +result.string(sql); diff --git a/process/Bulkmail_lib/process.js b/process/Bulkmail_lib/process.js index 521f14b765..af690a3e17 100644 --- a/process/Bulkmail_lib/process.js +++ b/process/Bulkmail_lib/process.js @@ -1,3 +1,5 @@ +import("system.logging"); +import("system.entities"); import("MarketingCondition_lib"); import("system.fileIO"); import("system.project"); @@ -19,7 +21,6 @@ import("Email_lib"); import("system.process"); import("system.notification"); import("Document_lib"); -import("system.db"); /** * Functions for bulk mails. @@ -60,13 +61,18 @@ BulkMailUtils.sendBulkMailOnServer = function (pBulkMailId, pTestRun, pUser) * * @param {String} pBulkMailId <p> * Id of the bulk mail.<br> - * @param {Bool} pTestRun (optional) <p> + * @param {Bool} pIsTestRun (optional) <p> * True indicates a Testrun<br> * @return {Object} <p> * Count of sucessful and failed mails.<br> */ -BulkMailUtils.sendBulkMail = function (pBulkMailId, pTestRun) +BulkMailUtils.sendBulkMail = function (pBulkMailId, pIsTestRun) { + if (pIsTestRun == undefined) + { + pIsTestRun = false; + } + var [templateId, subject, emailSender, createActivity, bulkMailName, useTemplateAttachments] = newSelect("DOCUMENTTEMPLATE_ID, SUBJECT, SENDER_EMAIL_ADDRESS, CREATEACTIVITIES, NAME, USE_TEMPLATE_ATTACHMENTS") .from("BULKMAIL") @@ -76,10 +82,18 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pTestRun) useTemplateAttachments = useTemplateAttachments == "1"; var template = BulkMailUtils.getBulkMailTemplate(pBulkMailId, templateId, true, useTemplateAttachments); - var recipientData; var testRecipientData; - if (pTestRun) + 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); + + var recipientData = entities.getRows(recipientLoadConfig); + + if (pIsTestRun) { recipientData = newSelect("BULKMAILRECIPIENTID, BULKMAILRECIPIENT.CONTACT_ID, BULKMAILRECIPIENT.EMAIL_ADDRESS, PERSON_ID, ORGANISATION_ID") .from("CONTACT") @@ -90,7 +104,7 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pTestRun) testRecipientData = newSelect("BULKMAILTESTRECIPIENT.CONTACT_ID, BULKMAILTESTRECIPIENT.EMAIL_ADDRESS") .from("BULKMAILTESTRECIPIENT") - .where("BULKMAILTESTRECIPIENT.BULKMAIL_ID",pBulkMailId) + .where("BULKMAILTESTRECIPIENT.BULKMAIL_ID", pBulkMailId) .table(); } @@ -109,8 +123,16 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pTestRun) } var mailrunId = util.getNewUUID(); - - db.insertData("MAIL_RUN", ["MAIL_RUNID","OBJECT_ROWID","OBJECT_TYPE","DATE_RUN_START","STATUS","TESTRUN"], null, [mailrunId,pBulkMailId,"BULKMAIL",vars.get("$sys.date"),$KeywordRegistry.bulkMailStatus$beingSent(),(pTestRun?1:0)]); + 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 contactIds = recipientData.map(function (e) {return e[1];}); @@ -124,96 +146,116 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pTestRun) var bulkMailLink = [["BulkMail", pBulkMailId]]; var activitySubject = translate.withArguments("Bulk mail \"%0\" sent", [bulkMailName]); - if (!pTestRun){ - for (let i = 0, l = recipientData.length; i < l; i++) + if (!pIsTestRun) + { + recipientData.forEach(function (recipient) + { + 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 = util.getNewUUID(); + if (email !== undefined && emailAddress) { - - let isSuccess = false; - let contactId = recipientData[i][1]; - let email = mails[contactId]; - let mailLogId = util.getNewUUID(); - if (email !== undefined && recipientData[i][2]) - { - email.toRecipients = [recipientData[i][2]]; - email.sender = emailSender; - email.subject = subjects[contactId]; - - - - this.storeEmlFile(pBulkMailId, mailrunId, mailLogId,email.getEML()); - isSuccess = email.send(); - } - - if (recipientData[i][0]) //set the recipient status to 'sent' or 'failed' - { - - db.insertData("MAIL_LOG", ["MAIL_LOGID","MAIL_RUN_ID","CONTACT_ID","STATUS","SENDER_EMAIL","RECIPIENT_EMAIL","MAILING_SUBJECT","DATE_SEND"], null, [mailLogId,mailrunId,contactId,(isSuccess ?$KeywordRegistry.bulkMailRecipientStatus$sent(): $KeywordRegistry.bulkMailRecipientStatus$failed()),emailSender,recipientData[i][2],subjects[contactId],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, recipientData[i][0]); - if (isSuccess && createActivity == "1") - { - let activityData = { - categoryKeywordId : $KeywordRegistry.activityCategory$mail(), - directionKeywordId : $KeywordRegistry.activityDirection$outgoing(), - subject : activitySubject, - content : email.body - }; - let contactLink = [[ContactUtils.getContextByPersOrg(recipientData[i][3], recipientData[i][4]), recipientData[i][1]]]; - ActivityUtils.insertNewActivity(activityData, bulkMailLink.concat(contactLink)); - } - } + email.toRecipients = [emailAddress]; + email.sender = emailSender; + email.subject = subjects[contactId]; + + BulkMailUtils.storeEmlFile(pBulkMailId, mailrunId, mailLogId,email.getEML()); + isSuccess = email.send(); } - - 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]); - - newWhere("MAIL_RUN.MAIL_RUNID",mailrunId) - .updateData(true,"MAIL_RUN",["STATUS","DATE_RUN_FINISHED"],null,[$KeywordRegistry.bulkMailStatus$sent(),vars.get("$sys.date")]); - - - newWhere("BULKMAIL.BULKMAILID", pBulkMailId) - .updateData(true, "BULKMAIL", ["STATUS"], null, [$KeywordRegistry.bulkMailStatus$sent()]); - - }else{ - for (let i = 0, l = recipientData.length; i < l; i++){ - logging.log("here"); - let isSuccess = false; - let contactId = recipientData[i][1]; - let email = mails[contactId]; - + + //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") + }); - if (email !== undefined) - { - logging.log("email not undefined"); - logging.log(JSON.stringify(testRecipientData)); - 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]]; - isSuccess = email.send(); - - Array.prototype.push.call(isSuccess ? successIds : failedIds, recipientData[i][0]); - - if(testRecipientData[j][0]){ - let mailLogId = util.getNewUUID(); - db.insertData("MAIL_LOG", ["MAIL_LOGID","MAIL_RUN_ID","CONTACT_ID","STATUS","SENDER_EMAIL","RECIPIENT_EMAIL","MAILING_SUBJECT","DATE_SEND"], null, [mailLogId,mailrunId,testRecipientData[j][0],(isSuccess ?$KeywordRegistry.bulkMailRecipientStatus$sent(): $KeywordRegistry.bulkMailRecipientStatus$failed()),emailSender,testRecipientData[j][1],email.subject,vars.get("$sys.date")]); - this.storeEmlFile(pBulkMailId, mailrunId, mailLogId,email.getEML()); - } + //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 = { + categoryKeywordId : $KeywordRegistry.activityCategory$mail(), + directionKeywordId : $KeywordRegistry.activityDirection$outgoing(), + subject : activitySubject, + content : email.body + }; + 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() + }); + } + else + { + for (let i = 0, l = recipientData.length; i < l; i++) + { + + let isSuccess = false; + let contactId = recipientData[i][1]; + let email = mails[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]]; + isSuccess = email.send(); + + Array.prototype.push.call(isSuccess ? successIds : failedIds, recipientData[i][0]); + + if (testRecipientData[j][0]) + { + let mailLogId = util.getNewUUID(); + db.insertData("MAIL_LOG", ["MAIL_LOGID","MAIL_RUN_ID","CONTACT_ID","STATUS","SENDER_EMAIL","RECIPIENT_EMAIL","MAILING_SUBJECT","DATE_SEND"], null, [mailLogId,mailrunId,testRecipientData[j][0],(isSuccess ?$KeywordRegistry.bulkMailRecipientStatus$sent(): $KeywordRegistry.bulkMailRecipientStatus$failed()),emailSender,testRecipientData[j][1],email.subject,vars.get("$sys.date")]); + this.storeEmlFile(pBulkMailId, mailrunId, mailLogId,email.getEML()); } - } - - } + } } - newWhere("MAIL_RUN.MAIL_RUNID",mailrunId) - .updateData(true,"MAIL_RUN",["STATUS","DATE_RUN_FINISHED"],null,[$KeywordRegistry.bulkMailStatus$sent(),vars.get("$sys.date")]); + } } + newWhere("MAIL_RUN.MAIL_RUNID",mailrunId) + .updateData(true,"MAIL_RUN",["STATUS","DATE_RUN_FINISHED"],null,[$KeywordRegistry.bulkMailStatus$sent(),vars.get("$sys.date")]); + + } return { sucessful : successIds.length, diff --git a/process/MarketingCondition_lib/process.js b/process/MarketingCondition_lib/process.js index 297fbb23fc..b6dfc6cd6a 100644 --- a/process/MarketingCondition_lib/process.js +++ b/process/MarketingCondition_lib/process.js @@ -1,4 +1,5 @@ import("Util_lib"); +import("JditoFilter_lib"); import("system.vars"); import("Sql_lib"); import("KeywordRegistry_basic"); @@ -158,12 +159,12 @@ CommunicationSettingsCondition.prototype.buildCondition = function () * - check for single contact */ -function CommunicationBlacklistCondition () +function CommunicationBlacklist () { - this._contactFilter = null; + this.filter = null; } -CommunicationBlacklistCondition.getContactFilters = function () +CommunicationBlacklist.getMailRecipientBlacklist = function () { var currentDate = vars.get("$sys.date"); var filters = newSelect("BLACKLIST_FILTER") @@ -184,20 +185,19 @@ CommunicationBlacklistCondition.getContactFilters = function () return blacklistFilter.filter; }; - return { + var blacklist = new CommunicationBlacklist(); + blacklist.filter = { type: "group", operator: "AND", childs: filters.map(filterMappingFn).filter(Utils.isObject) }; -} - -CommunicationBlacklistCondition.prototype.contactFilter = function (pFilter) -{ - this._contactFilter = pFilter; - return this; + return blacklist; } CommunicationBlacklistCondition.prototype.buildCondition = function () { - -} \ No newline at end of file + return new FilterSqlTranslator() + .filter(this.filter) + .table("BULKMAILRECIPIENT") + .getSqlCondition(); +} diff --git a/process/Sql_lib/process.js b/process/Sql_lib/process.js index f3708067a3..df4abe6853 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 diff --git a/process/gitLabWebhook_rest/gitLabWebhook_rest.aod b/process/gitLabWebhook_rest/gitLabWebhook_rest.aod new file mode 100644 index 0000000000..76c89ec8f5 --- /dev/null +++ b/process/gitLabWebhook_rest/gitLabWebhook_rest.aod @@ -0,0 +1,16 @@ +<?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>gitLabWebhook_rest</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <process>%aditoprj%/process/gitLabWebhook_rest/process.js</process> + <publishAsWebservice v="true" /> + <style>REST</style> + <restAcceptedMimeType>application/json</restAcceptedMimeType> + <restDeliveredMimeType>application/json</restDeliveredMimeType> + <loginTypeId> + <element>internal.none</element> + </loginTypeId> + <variants> + <element>EXECUTABLE</element> + </variants> +</process> diff --git a/process/gitLabWebhook_rest/process.js b/process/gitLabWebhook_rest/process.js new file mode 100644 index 0000000000..696a523a0c --- /dev/null +++ b/process/gitLabWebhook_rest/process.js @@ -0,0 +1,134 @@ +import("system.auth"); +import("system.net"); +import("system.util"); +import("system.logging"); + +function restpost (pRequest) +{ + var config = { + active: true, + gitlabToken: "youtube.com/watch?v=dQw4w9WgXcQ", + teamsUrl: "https://aditosoftware.webhook.office.com/webhookb2/85493214-0e4b-4577-8fc4-0e421a2dc196@c7308693-318b-4725-9e59-73b455c6ae05/IncomingWebhook/66a53e7f47c040eda146b372c742169b/70528b00-bbf1-45e2-9925-0cc55ff8951b", + push: { + active: true, + targetBranchRegExp: null + + }, + mergeRequest: { + active: true, + onlyUnassigned: true, + excludeWIP: true, + priorityLabels: ["critical"] + }, + tag: { + active: true + } + }; + + logging.log(pRequest); + var request = JSON.parse(pRequest); + var secretToken = request.header["X-Gitlab-Token"] || request.header["X-gitlab-token"]; + if (secretToken != config.gitlabToken) + { + request.response.httpStatusCode = 403; + return JSON.stringify(request); + } + var body = JSON.parse(util.decodeBase64String(request.body)); + var teamsMessage = _getMessage(body, config); + if (teamsMessage) + { + var authConfig = auth.createConfigForNoAuth(); + var restConfig = net.createConfigForRestWebserviceCall() + .actionType(net.POST) + .url(config.teamsUrl) + .dataTypeSend("application/json") + .dataTypeJDitoSend(util.DATA_TEXT) + .requestEntity(JSON.stringify(teamsMessage)); + logging.log(JSON.stringify(teamsMessage)) + net.callRestWebservice(restConfig, authConfig); + } + + request.response.httpStatusCode = 200; + return JSON.stringify(request); + + function _getMessage (pEvent, pConfig) + { + if (!pConfig.active) + return null; + + var message = { + "@context": "https://schema.org/extensions", + "@type": "MessageCard", + "title": "Merged branch whatever into whatever", + "text": "-link- merged by That Guy", + "sections": [{ + "activityTitle": "420 commits added" + }] + }; + + if (pEvent.object_kind == "push") + return _getPushMessage(pEvent, pConfig.push); + if (pEvent.object_kind == "merge_request") + return _getMergeRequestMessage(pEvent, pConfig.mergeRequest); + if (pEvent.object_kind == "tag_push") + return _getTagMessage(pEvent, pConfig.tag); + + return null; + + function _getPushMessage (pEvent, pConfig) + { + if (!pConfig.active) + return null; + return null; + } + + function _getMergeRequestMessage (pEvent, pConfig) + { + if (!pConfig.active || pEvent.object_attributes.action != "open") + return null; + + var info = pEvent.object_attributes; + var labels = pEvent.labels.map(function (label) + { + return label.title; + }); + var isCritical = pConfig.priorityLabels.some(function (prioLabel) {return labels.includes(prioLabel);}); + var isUnassigned = !pEvent.assignees || pEvent.assignees.length === 0; + var isMessageRequired = isCritical + || ((!pConfig.onlyUnassigned || isUnassigned) + && (!pConfig.excludeWIP || !info.work_in_progress)) + if (!isMessageRequired) + return null; + + var objectTitle = "Merge Request"; + if (isCritical) + objectTitle = "Critical Merge Request"; + else if (isUnassigned) + objectTitle = "Unassigned Merge Request"; + + var title = objectTitle + " opened by " + pEvent.user.name; + var message = { + "@context": "https://schema.org/extensions", + "@type": "MessageCard", + "summary": title, + "sections": [{ + "activityTitle": title + " in <a href=\"" + pEvent.project.web_url + "\">" + pEvent.project.path_with_namespace + "</a>", + "activitySubtitle": "<a href=\"" + info.url + "\">!" + info.iid + "</a> " + info.title + + " | Request to merge " + info.source_branch + " into " + info.target_branch + }] + }; + if (isCritical) + message.themeColor = "F00420"; + + return message; + } + + function _getTagMessage (pEvent, pConfig) + { + if (!pConfig.active) + return null; + return null; + } + } +} + -- GitLab From 8e92d47a6458e7ef0052c2951ea17b68ed1ef897 Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Mon, 12 Apr 2021 08:25:23 +0200 Subject: [PATCH 049/242] Communication settings workflowService --- .../BulkMailRecipient_entity.aod | 1 - .../recordcontainers/db/conditionProcess.js | 30 ++++++++++------ process/Bulkmail_lib/process.js | 28 ++------------- ...etCommunicationSetting_workflowService.aod | 10 ++++++ .../process.js | 8 +++++ .../SetInterestLink_workflowService.aod | 10 ++++++ .../process.js | 34 +++++++++++++++++++ 7 files changed, 84 insertions(+), 37 deletions(-) create mode 100644 process/SetCommunicationSetting_workflowService/SetCommunicationSetting_workflowService.aod create mode 100644 process/SetCommunicationSetting_workflowService/process.js create mode 100644 process/SetInterestLink_workflowService/SetInterestLink_workflowService.aod create mode 100644 process/SetInterestLink_workflowService/process.js diff --git a/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod b/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod index 7f71a31c90..e799fd72fc 100644 --- a/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod +++ b/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod @@ -82,7 +82,6 @@ <entityField> <name>EMAIL_ADDRESS</name> <title>Email</title> - <consumer>EmailAdresses</consumer> <textInputAllowed v="true" /> <valueProcess>%aditoprj%/entity/BulkMailRecipient_entity/entityfields/email_address/valueProcess.js</valueProcess> <displayValueProcess>%aditoprj%/entity/BulkMailRecipient_entity/entityfields/email_address/displayValueProcess.js</displayValueProcess> diff --git a/entity/BulkMailRecipient_entity/recordcontainers/db/conditionProcess.js b/entity/BulkMailRecipient_entity/recordcontainers/db/conditionProcess.js index 3c7c8703cb..7e2155661d 100644 --- a/entity/BulkMailRecipient_entity/recordcontainers/db/conditionProcess.js +++ b/entity/BulkMailRecipient_entity/recordcontainers/db/conditionProcess.js @@ -9,22 +9,30 @@ import("MarketingCondition_lib"); var excludeWithCommunicationRejection = Utils.toBoolean(vars.get("$param.ExcludeCommunicationRejecting_param")); var excludeBlacklisted = Utils.toBoolean(vars.get("$param.ExcludeBlacklisted_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 (excludeWithCommunicationRejection) +if (isTestMail) { - condition.and(new CommunicationSettingsCondition() - .medium($KeywordRegistry.communicationMediumCampaign$mail(), "BULKMAILRECIPIENT.EMAIL_ADDRESS") - .rejected() - .buildNotExistsCondition()); + condition.and("BULKMAILRECIPIENT.TEST_RECIPIENT", 1); } -if (excludeBlacklisted) +else { - condition.and("not (" + CommunicationBlacklist.getMailRecipientBlacklist().buildCondition() + ")"); -} -if (!Utils.isNullOrEmpty(excludedStatus)) -{ - condition.and("BULKMAILRECIPIENT.STATUS", excludedStatus, SqlBuilder.NOT_IN()); + if (excludeWithCommunicationRejection) + { + condition.and(new CommunicationSettingsCondition() + .medium($KeywordRegistry.communicationMediumCampaign$mail(), "BULKMAILRECIPIENT.EMAIL_ADDRESS") + .rejected() + .buildNotExistsCondition()); + } + if (excludeBlacklisted) + { + condition.and("not (" + CommunicationBlacklist.getMailRecipientBlacklist().buildCondition() + ")"); + } + if (!Utils.isNullOrEmpty(excludedStatus)) + { + condition.and("BULKMAILRECIPIENT.STATUS", excludedStatus, SqlBuilder.NOT_IN()); + } } result.string(condition.toSource()); \ No newline at end of file diff --git a/process/Bulkmail_lib/process.js b/process/Bulkmail_lib/process.js index af690a3e17..e2f169b247 100644 --- a/process/Bulkmail_lib/process.js +++ b/process/Bulkmail_lib/process.js @@ -79,7 +79,7 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pIsTestRun) .where("BULKMAIL.BULKMAILID", pBulkMailId) .arrayRow(); - useTemplateAttachments = useTemplateAttachments == "1"; + useTemplateAttachments = Utils.toBoolean(useTemplateAttachments); var template = BulkMailUtils.getBulkMailTemplate(pBulkMailId, templateId, true, useTemplateAttachments); var testRecipientData; @@ -95,31 +95,10 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pIsTestRun) 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.TEST_RECIPIENT",1) - .table(); - testRecipientData = newSelect("BULKMAILTESTRECIPIENT.CONTACT_ID, BULKMAILTESTRECIPIENT.EMAIL_ADDRESS") .from("BULKMAILTESTRECIPIENT") .where("BULKMAILTESTRECIPIENT.BULKMAIL_ID", pBulkMailId) .table(); - - } - else - { - 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(new CommunicationSettingsCondition() - .emails("BULKMAILRECIPIENT.EMAIL_ADDRESS") - .rejected().existNoSettings() - .buildCondition()) - .table(); } var mailrunId = util.getNewUUID(); @@ -135,7 +114,7 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pIsTestRun) }); - var contactIds = recipientData.map(function (e) {return e[1];}); + var contactIds = recipientData.map(function (recipient) {return recipient["CONTACT_ID"];}); var successIds = []; var failedIds = []; var sentDate = vars.get("$sys.date"); @@ -150,7 +129,6 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pIsTestRun) { recipientData.forEach(function (recipient) { - let isSuccess = false; let recipientId = recipient["BULKMAILRECIPIENTID"]; let contactId = recipient["CONTACT_ID"]; @@ -176,7 +154,7 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pIsTestRun) "MAIL_LOGID": mailLogId, "MAIL_RUN_ID": mailrunId, "CONTACT_ID": contactId, - "STATUS": isSuccess ?$KeywordRegistry.bulkMailRecipientStatus$sent(): $KeywordRegistry.bulkMailRecipientStatus$failed(), + "STATUS": isSuccess ? $KeywordRegistry.bulkMailRecipientStatus$sent() : $KeywordRegistry.bulkMailRecipientStatus$failed(), "SENDER_EMAIL": emailSender, "RECIPIENT_EMAIL": emailAddress, "MAILING_SUBJECT": subjects[contactId], diff --git a/process/SetCommunicationSetting_workflowService/SetCommunicationSetting_workflowService.aod b/process/SetCommunicationSetting_workflowService/SetCommunicationSetting_workflowService.aod new file mode 100644 index 0000000000..ded82a9d7a --- /dev/null +++ b/process/SetCommunicationSetting_workflowService/SetCommunicationSetting_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>SetCommunicationSetting_workflowService</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <process>%aditoprj%/process/SetCommunicationSetting_workflowService/process.js</process> + <alias>Data_alias</alias> + <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 0000000000..0af3ff5f17 --- /dev/null +++ b/process/SetCommunicationSetting_workflowService/process.js @@ -0,0 +1,8 @@ +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 channelId = variables.channelId; +var status = variables.status || $KeywordRegistry.communicationSettingStatus$rejected(); \ 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 0000000000..b86df5e704 --- /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 0000000000..5a6447a1a3 --- /dev/null +++ b/process/SetInterestLink_workflowService/process.js @@ -0,0 +1,34 @@ +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; +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 -- GitLab From a7fc442df8277f6cb990a5efc66a659333f4e6c3 Mon Sep 17 00:00:00 2001 From: "m.groppe" <m.groppe@adito.de> Date: Mon, 12 Apr 2021 09:48:42 +0200 Subject: [PATCH 050/242] Indexe erstellt --- .../2021.0.3/Bulkmail/createLinkClicks.xml | 3 +++ .../basic/2021.0.3/Bulkmail/createMailLog.xml | 9 +++++++-- .../basic/2021.0.3/Bulkmail/createMailRun.xml | 5 ++++- .../_____LANGUAGE_EXTRA.aod | 18 ++++++++++++++++++ language/_____LANGUAGE_de/_____LANGUAGE_de.aod | 8 ++++++++ language/_____LANGUAGE_en/_____LANGUAGE_en.aod | 18 ++++++++++++++++++ process/redirect_rest/process.js | 3 +-- 7 files changed, 59 insertions(+), 5 deletions(-) diff --git a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createLinkClicks.xml b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createLinkClicks.xml index 0fefe44468..c2e7315e43 100644 --- a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createLinkClicks.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createLinkClicks.xml @@ -13,5 +13,8 @@ <column name="BROWSER" type="VARCHAR(255)"/> <column name="DATE_OPENED" type="datetime"/> </createTable> + <createIndex tableName="LINK_CLICK" indexName="IDX_LINK_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 index be2a3ac4d2..a1b61bd322 100644 --- a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createMailLog.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createMailLog.xml @@ -1,7 +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-4.1.xsd"> <changeSet author="m.groppe" id="9d8f3580-92c5-423e-b709-09383969ccf0"> - <createTable tableName="mail_log"> + <createTable tableName="MAIL_LOG"> <column name="MAIL_LOGID" type="CHAR(36)"> <constraints nullable="false" primaryKey="true"/> </column> @@ -14,8 +14,13 @@ <column name="RECIPIENT_EMAIL" type="VARCHAR(255)"/> <column name="MAILING_SUBJECT" type="VARCHAR(100)"/> <column name="DATE_SEND" type ="DATETIME"/> - <column name="FILEPATH" type="VARCHAR(255)"/> <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_MAIL_LOG_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 index be6e99e582..d822f108f8 100644 --- a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createMailRun.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createMailRun.xml @@ -1,7 +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-4.1.xsd"> <changeSet author="m.groppe" id="6c910d60-43b1-400b-8e31-e3a1a93155e6"> - <createTable tableName="mail_run"> + <createTable tableName="MAIL_RUN"> <column name="MAIL_RUNID" type="CHAR(36)"> <constraints nullable="false" primaryKey="true"/> </column> @@ -13,5 +13,8 @@ <column defaultValueComputed="NULL" name="DATE_RUN_START" type="datetime"/> <column defaultValueComputed="NULL" name="DATE_RUN_FINISHED" type="datetime"/> </createTable> + <createIndex tableName="LINK_CLICK" indexName="IDX_MAIL_RUN_INTEREST_ID"> + <column name="INTEREST_ID"/> + </createIndex> </changeSet> </databaseChangeLog> \ No newline at end of file diff --git a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index a8f3d64a26..e4c4fe0454 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -8199,6 +8199,24 @@ <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> </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 b654041a3c..8aec588bf7 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -51,6 +51,10 @@ <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>Checklist entries</key> <value>Checklisteneinträge</value> @@ -63,6 +67,10 @@ <key>Project team: \"Project manager\"</key> <value>Projektteam: \"Projektmanager\"</value> </entry> + <entry> + <key>Send Date</key> + <value>Versanddatum</value> + </entry> <entry> <key>Checklist entry</key> <value>Checklisteneintrag</value> diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod index ca45a8c4b7..4c1e0ad81c 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -8280,6 +8280,24 @@ <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> </keyValueMap> <font name="Dialog" style="0" size="11" /> </language> diff --git a/process/redirect_rest/process.js b/process/redirect_rest/process.js index c1e54b29b6..c567e0b992 100644 --- a/process/redirect_rest/process.js +++ b/process/redirect_rest/process.js @@ -13,10 +13,9 @@ function restget (pRequest) 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(ipAddress,mailLogId,linkId,UserAgentObject.browser.name,UserAgentObject.os.name,UserAgentObject.device.type); + BulkMailUtils.insertClick(mailLogId,ipAddress,linkId,UserAgentObject.browser.name,UserAgentObject.os.name,UserAgentObject.device.type); BulkMailUtils.startBulkmailWorkFlow(mailLogId,linkId); -- GitLab From 17b395ac163e79ffd5065c74722cfcfef1f84674 Mon Sep 17 00:00:00 2001 From: "p.neub" <p.neub@adito.de> Date: Mon, 12 Apr 2021 14:54:59 +0200 Subject: [PATCH 051/242] [Projekt: xRM-Sales][TicketNr.: 1074289][Klassifizierung - Mouseover-Text: umgangssprachliche Formulierung und mit Tippfehler] --- language/_____LANGUAGE_de/_____LANGUAGE_de.aod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod index 6ceb69f4c9..87bd4e645b 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -9771,7 +9771,7 @@ Bitte Datumseingabe prüfen</value> <value>Klassifizierungen neuberechnen</value> </entry> <entry> - <key>Starts the server process manually, which will recalculate all (potentially) outdated classifications. This process should be used after changes to the classification configuration.</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> <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> -- GitLab From a72cbac9dfc6731c583ccea1a55ee34ebdac585f Mon Sep 17 00:00:00 2001 From: Pascal Neub <p.neub@adito.de> Date: Tue, 13 Apr 2021 06:05:42 +0000 Subject: [PATCH 052/242] 2021.0 1075641 checklistfix --- .../Checklists/change_phase_translation.xml | 28 +++++++++++++++++++ .../basic/2021.0.3/Checklists/changelog.xml | 1 + .../generatedData/checklistentry.xml | 2 +- .../_____LANGUAGE_EXTRA.aod | 9 ++++++ .../_____LANGUAGE_de/_____LANGUAGE_de.aod | 12 ++++++++ .../_____LANGUAGE_en/_____LANGUAGE_en.aod | 12 ++++++++ .../ChecklistEntryRegistry_basic/process.js | 5 ++-- 7 files changed, 65 insertions(+), 4 deletions(-) create mode 100644 .liquibase/Data_alias/basic/2021.0.3/Checklists/change_phase_translation.xml 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 0000000000..bf63198c48 --- /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="8aa5d8bb-b412-4c88-b27a-a26d89881bf3"/> + </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 index 577da62148..15bb01b42a 100644 --- a/.liquibase/Data_alias/basic/2021.0.3/Checklists/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/Checklists/changelog.xml @@ -7,4 +7,5 @@ <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"/> </databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/checklistentry.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/checklistentry.xml index 6184351538..2920277bd6 100644 --- a/.liquibase/Data_alias/basic/_demoData/generatedData/checklistentry.xml +++ b/.liquibase/Data_alias/basic/_demoData/generatedData/checklistentry.xml @@ -62,7 +62,7 @@ <column name="DATE_EDIT"/> <column name="USER_EDIT"/> <column name="CHECKLISTENTRYID" value="2dc42fbb-4e0b-498f-8032-0c5451bea157"/> - <column name="TITLE" value="salesprojectTeamRoles"/> + <column name="TITLE" value="salesprojectRoleProjectteam"/> <column name="USER_NEW" value="Admin"/> <column name="DATE_NEW"/> </insert> diff --git a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index f8a0d9c47b..7a23534af0 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -8412,6 +8412,15 @@ <entry> <key>On site</key> </entry> + <entry> + <key>${SALESPROJECT_PROSPECT}</key> + </entry> + <entry> + <key>${SALESPROJECT_LEAD}</key> + </entry> + <entry> + <key>${SALESPROJECT_CONTACT}</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 87bd4e645b..a0af84c151 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -10917,6 +10917,18 @@ Bitte Datumseingabe prüfen</value> <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 festgeleten Bereich.</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> </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 cc77285492..bdbd5793b3 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -8421,6 +8421,18 @@ <entry> <key>Vacation</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> </keyValueMap> <font name="Dialog" style="0" size="11" /> </language> diff --git a/process/ChecklistEntryRegistry_basic/process.js b/process/ChecklistEntryRegistry_basic/process.js index c8cf45cba5..50d9385590 100644 --- a/process/ChecklistEntryRegistry_basic/process.js +++ b/process/ChecklistEntryRegistry_basic/process.js @@ -1,6 +1,5 @@ import("Attribute_lib"); import("Keyword_lib"); -import("system.logging"); import("system.eMath"); import("system.datetime"); import("system.translate"); @@ -422,6 +421,7 @@ $ChecklistEntryRegistry.salesprojectRoleProjectteam = function(){ 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"]; + for (let i = 0; i < memberRows.length; i++) { var role = memberRows[i]["MEMBERROLE"]; @@ -497,8 +497,7 @@ $ChecklistEntryRegistry.salesprojectFirstCustConv = function(){ ], SqlBuilder.IN()); var activityCount = newSelect("count(*)").from("ACTIVITYLINK") - .where("ACTIVITYLINK.ACTIVITY_ID", activitiesSubSql, SqlBuilder.IN()) - .and("ACTIVITYLINK.OBJECT_TYPE", ["Person", "PrivatePerson"], SqlBuilder.IN()); + .where("ACTIVITYLINK.ACTIVITY_ID", activitiesSubSql, SqlBuilder.IN()); return parseInt(activityCount.cell()) > 0; } }; -- GitLab From 217b0578a6b8cb63e65ae5b4a8342777799890ef Mon Sep 17 00:00:00 2001 From: "m.sieber" <m.sieber@adito.de> Date: Tue, 13 Apr 2021 11:30:32 +0200 Subject: [PATCH 053/242] =?UTF-8?q?[Projekt:=20Entwicklung=20-=20Neon][Tic?= =?UTF-8?q?ketNr.:=201074970][Anzeigbare=20Dateien=20(Bilder,=20PDFs,=20et?= =?UTF-8?q?c)=20im=20Browser=20=C3=B6ffnen]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entity/Document_entity/Document_entity.aod | 77 ++++++++++++------- .../openfileaction/onActionProcess.js | 4 + .../children/openfileaction/stateProcess.js | 8 ++ .../opensinglefileaction/onActionProcess.js | 4 + .../opensinglefileaction/stateProcess.js | 8 ++ .../DocumentPreview_view.aod | 1 + process/Document_lib/process.js | 50 ++++++++++++ process/MimeType_lib/process.js | 28 ++++++- 8 files changed, 152 insertions(+), 28 deletions(-) create mode 100644 entity/Document_entity/entityfields/document_actions/children/openfileaction/onActionProcess.js create mode 100644 entity/Document_entity/entityfields/document_actions/children/openfileaction/stateProcess.js create mode 100644 entity/Document_entity/entityfields/opensinglefileaction/onActionProcess.js create mode 100644 entity/Document_entity/entityfields/opensinglefileaction/stateProcess.js diff --git a/entity/Document_entity/Document_entity.aod b/entity/Document_entity/Document_entity.aod index db44542e11..9ac3e62ac8 100644 --- a/entity/Document_entity/Document_entity.aod +++ b/entity/Document_entity/Document_entity.aod @@ -68,19 +68,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" /> @@ -136,12 +123,6 @@ <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> @@ -376,6 +357,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" /> + <isSelectionAction v="true" /> + <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" /> + <isSelectionAction v="true" /> + <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> + <isSelectionAction v="false" /> + <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 +421,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 0000000000..b33a4fd30e --- /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 0000000000..ccd5442dd2 --- /dev/null +++ b/entity/Document_entity/entityfields/document_actions/children/openfileaction/stateProcess.js @@ -0,0 +1,8 @@ +import("system.result"); +import("Document_lib"); + +var canOpen = DocumentUtil.canOpenSelectedDocument(); +if(canOpen) + result.string("EDITABLE"); +else + result.string("INVISIBLE"); \ 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 0000000000..b33a4fd30e --- /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 0000000000..ccd5442dd2 --- /dev/null +++ b/entity/Document_entity/entityfields/opensinglefileaction/stateProcess.js @@ -0,0 +1,8 @@ +import("system.result"); +import("Document_lib"); + +var canOpen = DocumentUtil.canOpenSelectedDocument(); +if(canOpen) + result.string("EDITABLE"); +else + result.string("INVISIBLE"); \ No newline at end of file diff --git a/neonView/DocumentPreview_view/DocumentPreview_view.aod b/neonView/DocumentPreview_view/DocumentPreview_view.aod index 6b6f308e9e..76321f0120 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/process/Document_lib/process.js b/process/Document_lib/process.js index 6085c3f5ee..401cc598bc 100644 --- a/process/Document_lib/process.js +++ b/process/Document_lib/process.js @@ -1,3 +1,4 @@ +import("system.logging"); 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. @@ -43,6 +45,54 @@ 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.open(binaryContents[0], rows[0]["NAME"] + ".txt", rows[0]["TYPE"], false); + else + neon.open(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) + { + logging.log("type: " + rows[0]["TYPE"]); + logging.log("re: " + MimeTypes.canOpenMimeTypeInBrowser(rows[0]["TYPE"])); + return MimeTypes.canOpenMimeTypeInBrowser(rows[0]["TYPE"]); + } + } + + return false; +} + /** * Utility function to delete the current/opened Document. */ diff --git a/process/MimeType_lib/process.js b/process/MimeType_lib/process.js index 6e262c76ea..d5a07f0fc2 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() + ); +} -- GitLab From 65e4a4c108cedc1cde7aedea3ab2684da38116f3 Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Tue, 13 Apr 2021 14:41:23 +0200 Subject: [PATCH 054/242] Blacklist bugfixes --- .../CommunicationBlacklist_entity.aod | 20 ++++++++++ .../entityfields/date_new/valueProcess.js | 6 +++ .../entityfields/user_new/valueProcess.js | 6 +++ .../blacklist_type.displayvalue/expression.js | 5 +++ .../_____LANGUAGE_de/_____LANGUAGE_de.aod | 8 ++++ process/MarketingCondition_lib/process.js | 2 +- .../process.js | 37 ++++++++++++++++++- 7 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 entity/CommunicationBlacklist_entity/entityfields/date_new/valueProcess.js create mode 100644 entity/CommunicationBlacklist_entity/entityfields/user_new/valueProcess.js create mode 100644 entity/CommunicationBlacklist_entity/recordcontainers/db/recordfieldmappings/blacklist_type.displayvalue/expression.js diff --git a/entity/CommunicationBlacklist_entity/CommunicationBlacklist_entity.aod b/entity/CommunicationBlacklist_entity/CommunicationBlacklist_entity.aod index 58cbbc2265..0b6d0eedc3 100644 --- a/entity/CommunicationBlacklist_entity/CommunicationBlacklist_entity.aod +++ b/entity/CommunicationBlacklist_entity/CommunicationBlacklist_entity.aod @@ -62,6 +62,14 @@ </entityParameter> </children> </entityConsumer> + <entityField> + <name>DATE_NEW</name> + <valueProcess>%aditoprj%/entity/CommunicationBlacklist_entity/entityfields/date_new/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>USER_NEW</name> + <valueProcess>%aditoprj%/entity/CommunicationBlacklist_entity/entityfields/user_new/valueProcess.js</valueProcess> + </entityField> </entityFields> <recordContainers> <dbRecordContainer> @@ -95,6 +103,18 @@ <recordfield>COMMUNICATIONBLACKLIST.START_DATE</recordfield> <isFilterable v="true" /> </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>USER_NEW.value</name> + <recordfield>COMMUNICATIONBLACKLIST.USER_NEW</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DATE_NEW.value</name> + <recordfield>COMMUNICATIONBLACKLIST.DATE_NEW</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>BLACKLIST_TYPE.displayValue</name> + <expression>%aditoprj%/entity/CommunicationBlacklist_entity/recordcontainers/db/recordfieldmappings/blacklist_type.displayvalue/expression.js</expression> + </dbRecordFieldMapping> </recordFieldMappings> <linkInformation> <linkInformation> diff --git a/entity/CommunicationBlacklist_entity/entityfields/date_new/valueProcess.js b/entity/CommunicationBlacklist_entity/entityfields/date_new/valueProcess.js new file mode 100644 index 0000000000..1dbb1c3887 --- /dev/null +++ b/entity/CommunicationBlacklist_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/CommunicationBlacklist_entity/entityfields/user_new/valueProcess.js b/entity/CommunicationBlacklist_entity/entityfields/user_new/valueProcess.js new file mode 100644 index 0000000000..8d9eb72f00 --- /dev/null +++ b/entity/CommunicationBlacklist_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/CommunicationBlacklist_entity/recordcontainers/db/recordfieldmappings/blacklist_type.displayvalue/expression.js b/entity/CommunicationBlacklist_entity/recordcontainers/db/recordfieldmappings/blacklist_type.displayvalue/expression.js new file mode 100644 index 0000000000..6cf151ddba --- /dev/null +++ b/entity/CommunicationBlacklist_entity/recordcontainers/db/recordfieldmappings/blacklist_type.displayvalue/expression.js @@ -0,0 +1,5 @@ +import("KeywordRegistry_basic"); +import("system.result"); +import("Keyword_lib"); + +result.string(KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.communicationBlacklistType(), "COMMUNICATIONBLACKLIST.BLACKLIST_TYPE")); \ No newline at end of file diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod index fe6b0952f3..cb20815ec4 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -47,6 +47,10 @@ <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>Illegal Parent Operator in buildFilterObj-Function:</key> <value>Übergebener Operator ungültig in Funktion "buildFilterObj"</value> @@ -83,6 +87,10 @@ <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> diff --git a/process/MarketingCondition_lib/process.js b/process/MarketingCondition_lib/process.js index b6dfc6cd6a..bf6b48ce21 100644 --- a/process/MarketingCondition_lib/process.js +++ b/process/MarketingCondition_lib/process.js @@ -194,7 +194,7 @@ CommunicationBlacklist.getMailRecipientBlacklist = function () return blacklist; } -CommunicationBlacklistCondition.prototype.buildCondition = function () +CommunicationBlacklist.prototype.buildCondition = function () { return new FilterSqlTranslator() .filter(this.filter) diff --git a/process/SetCommunicationSetting_workflowService/process.js b/process/SetCommunicationSetting_workflowService/process.js index 0af3ff5f17..8aa215483e 100644 --- a/process/SetCommunicationSetting_workflowService/process.js +++ b/process/SetCommunicationSetting_workflowService/process.js @@ -1,3 +1,5 @@ +import("system.util"); +import("Sql_lib"); import("KeywordRegistry_basic"); import("system.vars"); @@ -5,4 +7,37 @@ var variables = JSON.parse(vars.get("$local.value")); var contactId = variables.contactId || variables.targetId; var channelType = variables.channelType; var channelId = variables.channelId; -var status = variables.status || $KeywordRegistry.communicationSettingStatus$rejected(); \ No newline at end of file +var status = variables.status || $KeywordRegistry.communicationSettingStatus$rejected(); + +var settingsId = newSelect("COMMUNICATIONSETTINGSID") + .from("COMMUNICATIONSETTINGS") + .where("COMMUNICATIONSETTINGS.CONTACT_ID", contactId) + .and("COMMUNICATIONSETTINGS.CHANNEL_TYPE", channelType) + .and("COMMUNICATIONSETTINGS.CHANNEL_ID", channelId) + .cell(); + +if (settingsId) +{ + newWhere("COMMUNICATIONSETTINGS.COMMUNICATIONSETTINGSID") + .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 -- GitLab From c5531b1c3cdd7863fea22f17210ce0e3a3d4600d Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Tue, 13 Apr 2021 14:47:47 +0200 Subject: [PATCH 055/242] Marketing liquibase files moved to 2021.0.3 --- .liquibase/Data_alias/basic/2021.0.2/changelog.xml | 3 --- .../CommunicationBlacklist/changelog.xml | 0 .../CommunicationBlacklist/create_communicationBlacklist.xml | 0 .../CommunicationBlacklist/insert_blacklistTypeKeyword.xml | 0 .../{2021.0.2 => 2021.0.3}/CommunicationSettings/changelog.xml | 0 .../CommunicationSettings/create_communicationLegalBase.xml | 0 .../CommunicationSettings/create_communicationSettings.xml | 0 .../insert_commMediumCampaignCategory.xml | 0 .../CommunicationSettings/insert_communicationChannel.xml | 0 .../insert_communicationSettingsStatus.xml | 0 .../CommunicationSettings/insert_iconsCommChannelType.xml | 0 .../basic/{2021.0.2 => 2021.0.3}/Interest/changelog.xml | 0 .../basic/{2021.0.2 => 2021.0.3}/Interest/create_interest.xml | 0 .../{2021.0.2 => 2021.0.3}/Interest/create_interestLink.xml | 0 .../Interest/create_interestUnsubscribe.xml | 0 .../Interest/insert_interestLinkStatusKeyword.xml | 0 .../Interest/insert_interestStatusKeyword.xml | 0 .liquibase/Data_alias/basic/2021.0.3/changelog.xml | 3 +++ .liquibase/Data_alias/changelog.xml | 2 +- 19 files changed, 4 insertions(+), 4 deletions(-) rename .liquibase/Data_alias/basic/{2021.0.2 => 2021.0.3}/CommunicationBlacklist/changelog.xml (100%) rename .liquibase/Data_alias/basic/{2021.0.2 => 2021.0.3}/CommunicationBlacklist/create_communicationBlacklist.xml (100%) rename .liquibase/Data_alias/basic/{2021.0.2 => 2021.0.3}/CommunicationBlacklist/insert_blacklistTypeKeyword.xml (100%) rename .liquibase/Data_alias/basic/{2021.0.2 => 2021.0.3}/CommunicationSettings/changelog.xml (100%) rename .liquibase/Data_alias/basic/{2021.0.2 => 2021.0.3}/CommunicationSettings/create_communicationLegalBase.xml (100%) rename .liquibase/Data_alias/basic/{2021.0.2 => 2021.0.3}/CommunicationSettings/create_communicationSettings.xml (100%) rename .liquibase/Data_alias/basic/{2021.0.2 => 2021.0.3}/CommunicationSettings/insert_commMediumCampaignCategory.xml (100%) rename .liquibase/Data_alias/basic/{2021.0.2 => 2021.0.3}/CommunicationSettings/insert_communicationChannel.xml (100%) rename .liquibase/Data_alias/basic/{2021.0.2 => 2021.0.3}/CommunicationSettings/insert_communicationSettingsStatus.xml (100%) rename .liquibase/Data_alias/basic/{2021.0.2 => 2021.0.3}/CommunicationSettings/insert_iconsCommChannelType.xml (100%) rename .liquibase/Data_alias/basic/{2021.0.2 => 2021.0.3}/Interest/changelog.xml (100%) rename .liquibase/Data_alias/basic/{2021.0.2 => 2021.0.3}/Interest/create_interest.xml (100%) rename .liquibase/Data_alias/basic/{2021.0.2 => 2021.0.3}/Interest/create_interestLink.xml (100%) rename .liquibase/Data_alias/basic/{2021.0.2 => 2021.0.3}/Interest/create_interestUnsubscribe.xml (100%) rename .liquibase/Data_alias/basic/{2021.0.2 => 2021.0.3}/Interest/insert_interestLinkStatusKeyword.xml (100%) rename .liquibase/Data_alias/basic/{2021.0.2 => 2021.0.3}/Interest/insert_interestStatusKeyword.xml (100%) diff --git a/.liquibase/Data_alias/basic/2021.0.2/changelog.xml b/.liquibase/Data_alias/basic/2021.0.2/changelog.xml index f73015f960..3c134bb12b 100644 --- a/.liquibase/Data_alias/basic/2021.0.2/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.0.2/changelog.xml @@ -4,8 +4,5 @@ <include relativeToChangelogFile="true" file="Event/changelog.xml"/> <include relativeToChangelogFile="true" file="alter_CompetitionExpandReasonSize.xml"/> <include relativeToChangelogFile="true" file="Checklists/changelog.xml"/> - <include relativeToChangelogFile="true" file="CommunicationSettings/changelog.xml"/> <include relativeToChangelogFile="true" file="change_SalesprojectMemberRole.xml"/> - <include relativeToChangelogFile="true" file="Interest/changelog.xml"/> - <include relativeToChangelogFile="true" file="CommunicationBlacklist/changelog.xml"/> </databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.2/CommunicationBlacklist/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/CommunicationBlacklist/changelog.xml similarity index 100% rename from .liquibase/Data_alias/basic/2021.0.2/CommunicationBlacklist/changelog.xml rename to .liquibase/Data_alias/basic/2021.0.3/CommunicationBlacklist/changelog.xml diff --git a/.liquibase/Data_alias/basic/2021.0.2/CommunicationBlacklist/create_communicationBlacklist.xml b/.liquibase/Data_alias/basic/2021.0.3/CommunicationBlacklist/create_communicationBlacklist.xml similarity index 100% rename from .liquibase/Data_alias/basic/2021.0.2/CommunicationBlacklist/create_communicationBlacklist.xml rename to .liquibase/Data_alias/basic/2021.0.3/CommunicationBlacklist/create_communicationBlacklist.xml diff --git a/.liquibase/Data_alias/basic/2021.0.2/CommunicationBlacklist/insert_blacklistTypeKeyword.xml b/.liquibase/Data_alias/basic/2021.0.3/CommunicationBlacklist/insert_blacklistTypeKeyword.xml similarity index 100% rename from .liquibase/Data_alias/basic/2021.0.2/CommunicationBlacklist/insert_blacklistTypeKeyword.xml rename to .liquibase/Data_alias/basic/2021.0.3/CommunicationBlacklist/insert_blacklistTypeKeyword.xml diff --git a/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/changelog.xml similarity index 100% rename from .liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/changelog.xml rename to .liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/changelog.xml diff --git a/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/create_communicationLegalBase.xml b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/create_communicationLegalBase.xml similarity index 100% rename from .liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/create_communicationLegalBase.xml rename to .liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/create_communicationLegalBase.xml diff --git a/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/create_communicationSettings.xml b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/create_communicationSettings.xml similarity index 100% rename from .liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/create_communicationSettings.xml rename to .liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/create_communicationSettings.xml diff --git a/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/insert_commMediumCampaignCategory.xml b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_commMediumCampaignCategory.xml similarity index 100% rename from .liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/insert_commMediumCampaignCategory.xml rename to .liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_commMediumCampaignCategory.xml diff --git a/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/insert_communicationChannel.xml b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_communicationChannel.xml similarity index 100% rename from .liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/insert_communicationChannel.xml rename to .liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_communicationChannel.xml diff --git a/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/insert_communicationSettingsStatus.xml b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_communicationSettingsStatus.xml similarity index 100% rename from .liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/insert_communicationSettingsStatus.xml rename to .liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_communicationSettingsStatus.xml diff --git a/.liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/insert_iconsCommChannelType.xml b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_iconsCommChannelType.xml similarity index 100% rename from .liquibase/Data_alias/basic/2021.0.2/CommunicationSettings/insert_iconsCommChannelType.xml rename to .liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_iconsCommChannelType.xml diff --git a/.liquibase/Data_alias/basic/2021.0.2/Interest/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/Interest/changelog.xml similarity index 100% rename from .liquibase/Data_alias/basic/2021.0.2/Interest/changelog.xml rename to .liquibase/Data_alias/basic/2021.0.3/Interest/changelog.xml diff --git a/.liquibase/Data_alias/basic/2021.0.2/Interest/create_interest.xml b/.liquibase/Data_alias/basic/2021.0.3/Interest/create_interest.xml similarity index 100% rename from .liquibase/Data_alias/basic/2021.0.2/Interest/create_interest.xml rename to .liquibase/Data_alias/basic/2021.0.3/Interest/create_interest.xml diff --git a/.liquibase/Data_alias/basic/2021.0.2/Interest/create_interestLink.xml b/.liquibase/Data_alias/basic/2021.0.3/Interest/create_interestLink.xml similarity index 100% rename from .liquibase/Data_alias/basic/2021.0.2/Interest/create_interestLink.xml rename to .liquibase/Data_alias/basic/2021.0.3/Interest/create_interestLink.xml diff --git a/.liquibase/Data_alias/basic/2021.0.2/Interest/create_interestUnsubscribe.xml b/.liquibase/Data_alias/basic/2021.0.3/Interest/create_interestUnsubscribe.xml similarity index 100% rename from .liquibase/Data_alias/basic/2021.0.2/Interest/create_interestUnsubscribe.xml rename to .liquibase/Data_alias/basic/2021.0.3/Interest/create_interestUnsubscribe.xml diff --git a/.liquibase/Data_alias/basic/2021.0.2/Interest/insert_interestLinkStatusKeyword.xml b/.liquibase/Data_alias/basic/2021.0.3/Interest/insert_interestLinkStatusKeyword.xml similarity index 100% rename from .liquibase/Data_alias/basic/2021.0.2/Interest/insert_interestLinkStatusKeyword.xml rename to .liquibase/Data_alias/basic/2021.0.3/Interest/insert_interestLinkStatusKeyword.xml diff --git a/.liquibase/Data_alias/basic/2021.0.2/Interest/insert_interestStatusKeyword.xml b/.liquibase/Data_alias/basic/2021.0.3/Interest/insert_interestStatusKeyword.xml similarity index 100% rename from .liquibase/Data_alias/basic/2021.0.2/Interest/insert_interestStatusKeyword.xml rename to .liquibase/Data_alias/basic/2021.0.3/Interest/insert_interestStatusKeyword.xml diff --git a/.liquibase/Data_alias/basic/2021.0.3/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/changelog.xml index 94916616a3..54982ebb22 100644 --- a/.liquibase/Data_alias/basic/2021.0.3/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/changelog.xml @@ -3,4 +3,7 @@ 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="CommunicationBlacklist/changelog.xml"/> </databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/changelog.xml b/.liquibase/Data_alias/changelog.xml index cbc824888d..14683de8f2 100644 --- a/.liquibase/Data_alias/changelog.xml +++ b/.liquibase/Data_alias/changelog.xml @@ -25,5 +25,5 @@ <include relativeToChangelogFile="true" file="basic/2021.0.3/changelog.xml"/> <!--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 -- GitLab From 854d05539bd5016e2dfc78be92e583114693f216 Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Tue, 13 Apr 2021 15:08:47 +0200 Subject: [PATCH 056/242] Code formatting corrections --- .../recordcontainers/jdito/contentProcess.js | 2 +- .../entityfields/date_to_send/stateProcess.js | 9 +- .../entityfields/tag/displayValueProcess.js | 5 +- .../placeholder/displayValueProcess.js | 3 +- .../entityfields/placeholder/onValidation.js | 18 ++- .../entityfields/redirect/stateProcess.js | 7 +- .../entityfields/url/onValidation.js | 7 +- .../stateProcess.js | 7 +- process/Bulkmail_lib/process.js | 42 +++--- .../gitLabWebhook_rest/gitLabWebhook_rest.aod | 16 --- process/gitLabWebhook_rest/process.js | 134 ------------------ .../process.js | 18 +-- 12 files changed, 66 insertions(+), 202 deletions(-) delete mode 100644 process/gitLabWebhook_rest/gitLabWebhook_rest.aod delete mode 100644 process/gitLabWebhook_rest/process.js diff --git a/entity/Attribute_entity/recordcontainers/jdito/contentProcess.js b/entity/Attribute_entity/recordcontainers/jdito/contentProcess.js index d299386475..728943d5d1 100644 --- a/entity/Attribute_entity/recordcontainers/jdito/contentProcess.js +++ b/entity/Attribute_entity/recordcontainers/jdito/contentProcess.js @@ -135,7 +135,7 @@ for (let i = 0, l = allNames.length; i < l; i++) var nameCache = {}; var res = _buildAttributeTable(attributes, usages); - logging.log(JSON.stringify(res)); + result.object(res); //sorts the records in a way that a tree can be built and adds values diff --git a/entity/BulkMail_entity/entityfields/date_to_send/stateProcess.js b/entity/BulkMail_entity/entityfields/date_to_send/stateProcess.js index 5259e1c081..12d91284a8 100644 --- a/entity/BulkMail_entity/entityfields/date_to_send/stateProcess.js +++ b/entity/BulkMail_entity/entityfields/date_to_send/stateProcess.js @@ -4,13 +4,14 @@ 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 +if (status == $KeywordRegistry.bulkMailStatus$planned()) +{ + fieldState = neon.COMPONENTSTATE_EDITABLE; } -if (status == $KeywordRegistry.bulkMailStatus$missed()){ +else if (status == $KeywordRegistry.bulkMailStatus$missed()) +{ fieldState = neon.COMPONENTSTATE_READONLY; } diff --git a/entity/LinkTag_entity/entityfields/tag/displayValueProcess.js b/entity/LinkTag_entity/entityfields/tag/displayValueProcess.js index 30fe420608..beebea0916 100644 --- a/entity/LinkTag_entity/entityfields/tag/displayValueProcess.js +++ b/entity/LinkTag_entity/entityfields/tag/displayValueProcess.js @@ -1,8 +1,5 @@ -import("system.logging"); import("system.vars"); import("Keyword_lib"); import("system.result"); -logging.log(vars.get("$field.TAG")); -logging.log(KeywordUtils.getViewValue('LinkTags', vars.get("$field.TAG"))); -result.string(KeywordUtils.getViewValue('LinkTags', vars.get("$field.TAG"))) \ No newline at end of file +result.string(KeywordUtils.getViewValue("LinkTags", vars.get("$field.TAG"))); \ No newline at end of file diff --git a/entity/Link_entity/entityfields/placeholder/displayValueProcess.js b/entity/Link_entity/entityfields/placeholder/displayValueProcess.js index c497bcfcca..f02de4a47a 100644 --- a/entity/Link_entity/entityfields/placeholder/displayValueProcess.js +++ b/entity/Link_entity/entityfields/placeholder/displayValueProcess.js @@ -4,6 +4,7 @@ import("Placeholder_lib"); var placeholder = vars.get("$field.PLACEHOLDER"); -if (placeholder){ +if (placeholder) +{ result.string(PlaceholderUtils.formatPlaceholder(placeholder)); } \ No newline at end of file diff --git a/entity/Link_entity/entityfields/placeholder/onValidation.js b/entity/Link_entity/entityfields/placeholder/onValidation.js index 0da4919b8b..24c6c4421b 100644 --- a/entity/Link_entity/entityfields/placeholder/onValidation.js +++ b/entity/Link_entity/entityfields/placeholder/onValidation.js @@ -3,17 +3,21 @@ import("system.vars"); import("Placeholder_lib"); import("Sql_lib"); -if (vars.get("$local.value")){ +if (vars.get("$local.value")) +{ var defaultPlaceholders = PlaceholderUtils.getPlaceholders(); var linkPlaceholders = newSelect("LINK.PLACEHOLDER") - .from("LINK") - .where("LINK.LINKID",vars.get("$field.LINKID"),SqlBuilder.NOT_EQUAL()) - .and("LINK.PLACEHOLDER is not null").arrayColumn(); + .from("LINK") + .where("LINK.LINKID", vars.get("$field.LINKID"), SqlBuilder.NOT_EQUAL()) + .and("LINK.PLACEHOLDER is not null") + .arrayColumn(); - if (defaultPlaceholders.map(function(a){ - return a.placeholderName - }).indexOf(vars.get("$local.value"))!= -1 || linkPlaceholders.indexOf(vars.get("$local.value"))!= -1){ + if (defaultPlaceholders.map(function(a) + { + return a.placeholderName + }).indexOf(vars.get("$local.value"))!= -1 || linkPlaceholders.indexOf(vars.get("$local.value"))!= -1) + { result.string("Placeholders must be unique") } diff --git a/entity/Link_entity/entityfields/redirect/stateProcess.js b/entity/Link_entity/entityfields/redirect/stateProcess.js index d44e58ad8e..52dfd24468 100644 --- a/entity/Link_entity/entityfields/redirect/stateProcess.js +++ b/entity/Link_entity/entityfields/redirect/stateProcess.js @@ -5,8 +5,11 @@ import("system.neon"); var linktype = vars.get("$field.LINKTYPE"); -if(linktype == $KeywordRegistry.linkType$EMail()){ +if (linktype == $KeywordRegistry.linkType$EMail()) +{ result.string(neon.COMPONENTSTATE_EDITABLE); -}else{ +} +else +{ result.string(neon.COMPONENTSTATE_INVISIBLE); } \ No newline at end of file diff --git a/entity/Link_entity/entityfields/url/onValidation.js b/entity/Link_entity/entityfields/url/onValidation.js index 22aae71223..db3f8d4666 100644 --- a/entity/Link_entity/entityfields/url/onValidation.js +++ b/entity/Link_entity/entityfields/url/onValidation.js @@ -4,12 +4,13 @@ import("system.neon"); import("system.vars"); import("Sql_lib"); -if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW && vars.get("$local.value")) +if (vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW && vars.get("$local.value")) { - if(newSelect("URL").from("LINK").where("LINK.URL", vars.get("$local.value")).cell()) + if (newSelect("URL").from("LINK").where("LINK.URL", vars.get("$local.value")).cell()) result.string(translate.text("Die Url muss eindeutig sein!")) - if(vars.get("$field.REDIRECT") == "1" && !/^(?:http(s)?:\/\/)[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]+$/g.test(vars.get("$local.value"))){ + if (vars.get("$field.REDIRECT") == "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/Link_entity/entityfields/workflowprocessdefinition_key/stateProcess.js b/entity/Link_entity/entityfields/workflowprocessdefinition_key/stateProcess.js index 063de00448..eb561bd323 100644 --- a/entity/Link_entity/entityfields/workflowprocessdefinition_key/stateProcess.js +++ b/entity/Link_entity/entityfields/workflowprocessdefinition_key/stateProcess.js @@ -6,10 +6,13 @@ import("system.neon"); var linktype = vars.get("$field.LINKTYPE"); var redirect = vars.get("$field.REDIRECT"); -if(linktype == $KeywordRegistry.linkType$EMail() && redirect == "1"){ +if (linktype == $KeywordRegistry.linkType$EMail() && redirect == "1") +{ result.string(neon.COMPONENTSTATE_EDITABLE); -}else{ +} +else +{ result.string(neon.COMPONENTSTATE_INVISIBLE); } \ No newline at end of file diff --git a/process/Bulkmail_lib/process.js b/process/Bulkmail_lib/process.js index b42d96038c..ddcca62fba 100644 --- a/process/Bulkmail_lib/process.js +++ b/process/Bulkmail_lib/process.js @@ -95,17 +95,10 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pIsTestRun) .addParameter("BulkMailId_param", pBulkMailId) .addParameter("IsTestMail_param", pIsTestRun); - var recipientData = entities.getRows(recipientLoadConfig); + 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.TEST_RECIPIENT",1) - .table(); - testRecipientData = newSelect("BULKMAILTESTRECIPIENT.CONTACT_ID, BULKMAILTESTRECIPIENT.EMAIL_ADDRESS") .from("BULKMAILTESTRECIPIENT") .where("BULKMAILTESTRECIPIENT.BULKMAIL_ID", pBulkMailId) @@ -223,7 +216,8 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pIsTestRun) { email.sender = emailSender; email.subject = "Test: "+subjects[contactId]; - for (let j =0; j<testRecipientData.length;j++){ + for (let j =0; j<testRecipientData.length;j++) + { if(testRecipientData[j][1]){ email.toRecipients = [testRecipientData[j][1]]; isSuccess = email.send(); @@ -509,7 +503,8 @@ BulkMailUtils.copy = function(pBulkMailId) * @param {String} pMailLogId <p> * The id of the corresponding mail log entry.<br> **/ -BulkMailUtils.storeEmlFile = function(pBulkMailId,pMailRunId, pMailLogId,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" @@ -529,7 +524,8 @@ BulkMailUtils.storeEmlFile = function(pBulkMailId,pMailRunId, pMailLogId,pFile){ * @return {String} <p> * The file as base64 String<br> **/ -BulkMailUtils.getEmlFile = function(pBulkMailId,pMailRunId, pMailLogId){ +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" @@ -546,9 +542,11 @@ BulkMailUtils.getEmlFile = function(pBulkMailId,pMailRunId, pMailLogId){ * @return {String} <p> * The url<br> **/ -BulkMailUtils.getRedirectLink = function(pLinkId){ +BulkMailUtils.getRedirectLink = function(pLinkId) +{ var url ; - if (pLinkId){ + if (pLinkId) + { url =newSelect("LINK.URL").from("LINK").where("LINK.LINKID", pLinkId).cell(); } return url; @@ -572,8 +570,10 @@ BulkMailUtils.getRedirectLink = function(pLinkId){ * The device type that was used to open the link.<br> **/ -BulkMailUtils.insertClick = function(pMailLogId,pIpAddress,pLinkId,pBrowsername,pOperatingSystemName,pDeviceType){ - if (!pMailLogId || !pLinkId) { +BulkMailUtils.insertClick = function(pMailLogId,pIpAddress,pLinkId,pBrowsername,pOperatingSystemName,pDeviceType) +{ + if (!pMailLogId || !pLinkId) + { return } @@ -594,7 +594,8 @@ BulkMailUtils.insertClick = function(pMailLogId,pIpAddress,pLinkId,pBrowsername, * **/ -BulkMailUtils.getIpAddressFromHeader = function(pHttpHeader){ +BulkMailUtils.getIpAddressFromHeader = function(pHttpHeader) +{ var ipAddress; @@ -603,12 +604,15 @@ BulkMailUtils.getIpAddressFromHeader = function(pHttpHeader){ return ipAddress; } -BulkMailUtils.startBulkmailWorkFlow = function(pMailLogId,pLinkId){ - if (!pMailLogId || !pLinkId) { +BulkMailUtils.startBulkmailWorkFlow = function(pMailLogId,pLinkId) +{ + if (!pMailLogId || !pLinkId) + { return } var workFlowKey = newSelect("WORKFLOWPROCESSDEFINITION_KEY").from("LINK").where("LINK.LINKID",pLinkId).cell(); - if (workFlowKey){ + if (workFlowKey) + { var variables = { "MAILLOGID": pMailLogId }; diff --git a/process/gitLabWebhook_rest/gitLabWebhook_rest.aod b/process/gitLabWebhook_rest/gitLabWebhook_rest.aod deleted file mode 100644 index 76c89ec8f5..0000000000 --- a/process/gitLabWebhook_rest/gitLabWebhook_rest.aod +++ /dev/null @@ -1,16 +0,0 @@ -<?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>gitLabWebhook_rest</name> - <majorModelMode>DISTRIBUTED</majorModelMode> - <process>%aditoprj%/process/gitLabWebhook_rest/process.js</process> - <publishAsWebservice v="true" /> - <style>REST</style> - <restAcceptedMimeType>application/json</restAcceptedMimeType> - <restDeliveredMimeType>application/json</restDeliveredMimeType> - <loginTypeId> - <element>internal.none</element> - </loginTypeId> - <variants> - <element>EXECUTABLE</element> - </variants> -</process> diff --git a/process/gitLabWebhook_rest/process.js b/process/gitLabWebhook_rest/process.js deleted file mode 100644 index 696a523a0c..0000000000 --- a/process/gitLabWebhook_rest/process.js +++ /dev/null @@ -1,134 +0,0 @@ -import("system.auth"); -import("system.net"); -import("system.util"); -import("system.logging"); - -function restpost (pRequest) -{ - var config = { - active: true, - gitlabToken: "youtube.com/watch?v=dQw4w9WgXcQ", - teamsUrl: "https://aditosoftware.webhook.office.com/webhookb2/85493214-0e4b-4577-8fc4-0e421a2dc196@c7308693-318b-4725-9e59-73b455c6ae05/IncomingWebhook/66a53e7f47c040eda146b372c742169b/70528b00-bbf1-45e2-9925-0cc55ff8951b", - push: { - active: true, - targetBranchRegExp: null - - }, - mergeRequest: { - active: true, - onlyUnassigned: true, - excludeWIP: true, - priorityLabels: ["critical"] - }, - tag: { - active: true - } - }; - - logging.log(pRequest); - var request = JSON.parse(pRequest); - var secretToken = request.header["X-Gitlab-Token"] || request.header["X-gitlab-token"]; - if (secretToken != config.gitlabToken) - { - request.response.httpStatusCode = 403; - return JSON.stringify(request); - } - var body = JSON.parse(util.decodeBase64String(request.body)); - var teamsMessage = _getMessage(body, config); - if (teamsMessage) - { - var authConfig = auth.createConfigForNoAuth(); - var restConfig = net.createConfigForRestWebserviceCall() - .actionType(net.POST) - .url(config.teamsUrl) - .dataTypeSend("application/json") - .dataTypeJDitoSend(util.DATA_TEXT) - .requestEntity(JSON.stringify(teamsMessage)); - logging.log(JSON.stringify(teamsMessage)) - net.callRestWebservice(restConfig, authConfig); - } - - request.response.httpStatusCode = 200; - return JSON.stringify(request); - - function _getMessage (pEvent, pConfig) - { - if (!pConfig.active) - return null; - - var message = { - "@context": "https://schema.org/extensions", - "@type": "MessageCard", - "title": "Merged branch whatever into whatever", - "text": "-link- merged by That Guy", - "sections": [{ - "activityTitle": "420 commits added" - }] - }; - - if (pEvent.object_kind == "push") - return _getPushMessage(pEvent, pConfig.push); - if (pEvent.object_kind == "merge_request") - return _getMergeRequestMessage(pEvent, pConfig.mergeRequest); - if (pEvent.object_kind == "tag_push") - return _getTagMessage(pEvent, pConfig.tag); - - return null; - - function _getPushMessage (pEvent, pConfig) - { - if (!pConfig.active) - return null; - return null; - } - - function _getMergeRequestMessage (pEvent, pConfig) - { - if (!pConfig.active || pEvent.object_attributes.action != "open") - return null; - - var info = pEvent.object_attributes; - var labels = pEvent.labels.map(function (label) - { - return label.title; - }); - var isCritical = pConfig.priorityLabels.some(function (prioLabel) {return labels.includes(prioLabel);}); - var isUnassigned = !pEvent.assignees || pEvent.assignees.length === 0; - var isMessageRequired = isCritical - || ((!pConfig.onlyUnassigned || isUnassigned) - && (!pConfig.excludeWIP || !info.work_in_progress)) - if (!isMessageRequired) - return null; - - var objectTitle = "Merge Request"; - if (isCritical) - objectTitle = "Critical Merge Request"; - else if (isUnassigned) - objectTitle = "Unassigned Merge Request"; - - var title = objectTitle + " opened by " + pEvent.user.name; - var message = { - "@context": "https://schema.org/extensions", - "@type": "MessageCard", - "summary": title, - "sections": [{ - "activityTitle": title + " in <a href=\"" + pEvent.project.web_url + "\">" + pEvent.project.path_with_namespace + "</a>", - "activitySubtitle": "<a href=\"" + info.url + "\">!" + info.iid + "</a> " + info.title - + " | Request to merge " + info.source_branch + " into " + info.target_branch - }] - }; - if (isCritical) - message.themeColor = "F00420"; - - return message; - } - - function _getTagMessage (pEvent, pConfig) - { - if (!pConfig.active) - return null; - return null; - } - } -} - diff --git a/process/sendPlannedBulkmails_serverProcess/process.js b/process/sendPlannedBulkmails_serverProcess/process.js index b3debfd4eb..33a93d439e 100644 --- a/process/sendPlannedBulkmails_serverProcess/process.js +++ b/process/sendPlannedBulkmails_serverProcess/process.js @@ -9,15 +9,15 @@ 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++){ + .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()}); @@ -26,5 +26,5 @@ for (let i = 0; i < bulkMailData.length; i++){ //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 + .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 -- GitLab From bfe820fe1653434e4d0059ded5267542c916c98b Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Tue, 13 Apr 2021 15:08:47 +0200 Subject: [PATCH 057/242] Code formatting corrections --- process/sendPlannedBulkmails_serverProcess/process.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/process/sendPlannedBulkmails_serverProcess/process.js b/process/sendPlannedBulkmails_serverProcess/process.js index 33a93d439e..3f74ac7a52 100644 --- a/process/sendPlannedBulkmails_serverProcess/process.js +++ b/process/sendPlannedBulkmails_serverProcess/process.js @@ -25,6 +25,6 @@ for (let i = 0; i < bulkMailData.length; i++) } //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 +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 -- GitLab From a03b096cbbb78cceaae755b2b141de32fa145ae5 Mon Sep 17 00:00:00 2001 From: "m.groppe" <m.groppe@adito.de> Date: Tue, 13 Apr 2021 16:14:57 +0200 Subject: [PATCH 058/242] Maintainer Kommentare umgesetzt --- .../entityfields/testmail/onActionProcess.js | 12 ------------ entity/LinkTag_entity/LinkTag_entity.aod | 1 - .../entityfields/linktagid/valueProcess.js | 8 -------- .../entityfields/placeholder/onValidation.js | 6 ++---- .../entityfields/placeholder/stateProcess.js | 3 ++- entity/Link_entity/entityfields/url/onValidation.js | 2 +- language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod | 12 ++++++++++++ language/_____LANGUAGE_de/_____LANGUAGE_de.aod | 8 ++++++++ language/_____LANGUAGE_en/_____LANGUAGE_en.aod | 12 ++++++++++++ 9 files changed, 37 insertions(+), 27 deletions(-) delete mode 100644 entity/LinkTag_entity/entityfields/linktagid/valueProcess.js diff --git a/entity/BulkMail_entity/entityfields/testmail/onActionProcess.js b/entity/BulkMail_entity/entityfields/testmail/onActionProcess.js index 586f9b6441..a77b2d89d4 100644 --- a/entity/BulkMail_entity/entityfields/testmail/onActionProcess.js +++ b/entity/BulkMail_entity/entityfields/testmail/onActionProcess.js @@ -1,18 +1,6 @@ -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/LinkTag_entity/LinkTag_entity.aod b/entity/LinkTag_entity/LinkTag_entity.aod index ad214e7733..6fe8872547 100644 --- a/entity/LinkTag_entity/LinkTag_entity.aod +++ b/entity/LinkTag_entity/LinkTag_entity.aod @@ -35,7 +35,6 @@ </entityField> <entityField> <name>LINKTAGID</name> - <valueProcess>%aditoprj%/entity/LinkTag_entity/entityfields/linktagid/valueProcess.js</valueProcess> </entityField> <entityField> <name>LINK_ID</name> diff --git a/entity/LinkTag_entity/entityfields/linktagid/valueProcess.js b/entity/LinkTag_entity/entityfields/linktagid/valueProcess.js deleted file mode 100644 index 08b0f362f9..0000000000 --- a/entity/LinkTag_entity/entityfields/linktagid/valueProcess.js +++ /dev/null @@ -1,8 +0,0 @@ -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(util.getNewUUID()); \ No newline at end of file diff --git a/entity/Link_entity/entityfields/placeholder/onValidation.js b/entity/Link_entity/entityfields/placeholder/onValidation.js index 24c6c4421b..1c1c14a472 100644 --- a/entity/Link_entity/entityfields/placeholder/onValidation.js +++ b/entity/Link_entity/entityfields/placeholder/onValidation.js @@ -12,11 +12,9 @@ if (vars.get("$local.value")) .and("LINK.PLACEHOLDER is not null") .arrayColumn(); + var defaultPlaceholderNames = defaultPlaceholders.map(function(placeholder){return placeholder.placeholderName}); - if (defaultPlaceholders.map(function(a) - { - return a.placeholderName - }).indexOf(vars.get("$local.value"))!= -1 || linkPlaceholders.indexOf(vars.get("$local.value"))!= -1) + if(defaultPlaceholderNames.includes(vars.get("$local.value")) || linkPlaceholders.includes("$local.value")) { result.string("Placeholders must be unique") } diff --git a/entity/Link_entity/entityfields/placeholder/stateProcess.js b/entity/Link_entity/entityfields/placeholder/stateProcess.js index a4e4097c36..6f8493a6ed 100644 --- a/entity/Link_entity/entityfields/placeholder/stateProcess.js +++ b/entity/Link_entity/entityfields/placeholder/stateProcess.js @@ -6,7 +6,8 @@ import("system.neon"); var linktype = vars.get("$field.LINKTYPE") var res = neon.COMPONENTSTATE_INVISIBLE -if (linktype == $KeywordRegistry.linkType$EMail()){ +if (linktype == $KeywordRegistry.linkType$EMail()) +{ res = neon.COMPONENTSTATE_EDITABLE; } result.string(res); \ No newline at end of file diff --git a/entity/Link_entity/entityfields/url/onValidation.js b/entity/Link_entity/entityfields/url/onValidation.js index db3f8d4666..7aa2aee48d 100644 --- a/entity/Link_entity/entityfields/url/onValidation.js +++ b/entity/Link_entity/entityfields/url/onValidation.js @@ -7,7 +7,7 @@ import("Sql_lib"); if (vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW && vars.get("$local.value")) { if (newSelect("URL").from("LINK").where("LINK.URL", vars.get("$local.value")).cell()) - result.string(translate.text("Die Url muss eindeutig sein!")) + result.string(translate.text("Url must be unique")); if (vars.get("$field.REDIRECT") == "1" && !/^(?:http(s)?:\/\/)[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]+$/g.test(vars.get("$local.value"))) { diff --git a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index 757a9b87c3..b379e7c428 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -8223,6 +8223,18 @@ <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> </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 cb20815ec4..d19f8b68f4 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -10,6 +10,10 @@ <key>Event End</key> <value>Veranstaltungs Ende</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>Use for test run</key> <value>Bei Testversand verwenden</value> @@ -22,6 +26,10 @@ <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> diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod index 318acfbfa8..dba023c30a 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -8304,6 +8304,18 @@ <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> </keyValueMap> <font name="Dialog" style="0" size="11" /> </language> -- GitLab From 3ff97547ed8c397862cd9049a4dd78b279b47633 Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Tue, 13 Apr 2021 18:30:57 +0200 Subject: [PATCH 059/242] 1078771 Workflow_lib set data alias explicitly --- process/Workflow_lib/process.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/process/Workflow_lib/process.js b/process/Workflow_lib/process.js index e645f7a4aa..52634e53c7 100644 --- a/process/Workflow_lib/process.js +++ b/process/Workflow_lib/process.js @@ -236,7 +236,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) -- GitLab From 6c5a9d6ab484049e91c12a19b6800272a653f5e2 Mon Sep 17 00:00:00 2001 From: "m.groppe" <m.groppe@adito.de> Date: Tue, 13 Apr 2021 18:57:58 +0200 Subject: [PATCH 060/242] changed liquibase files and updated alias --- .../Bulkmail/AlterBulkmailRecipient.xml | 2 +- .../basic/2021.0.3/Bulkmail/createMailLog.xml | 7 +- .../2021.0.3/LinkManagement/CreateLink.xml | 2 +- aliasDefinition/Data_alias/Data_alias.aod | 210 ++++-------------- 4 files changed, 44 insertions(+), 177 deletions(-) diff --git a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/AlterBulkmailRecipient.xml b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/AlterBulkmailRecipient.xml index b41bb618c6..ba4cce6650 100644 --- a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/AlterBulkmailRecipient.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/AlterBulkmailRecipient.xml @@ -2,7 +2,7 @@ <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="5d43aca9-3344-4b54-981d-73306123e18f"> <addColumn tableName="BULKMAILRECIPIENT"> - <column name="TEST_RECIPIENT" type="SMALLINT"/> + <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/createMailLog.xml b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createMailLog.xml index a1b61bd322..3e7a43a293 100644 --- a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createMailLog.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createMailLog.xml @@ -7,9 +7,8 @@ </column> <column name="MAIL_RUN_ID" type="CHAR(36)"/> <column name="CONTACT_ID" type="CHAR(36)"/> - <column name="STATUS" type="VARCHAR(100)"/> - <column name="ERRORMESSAGE" type="TEXT"/> - <column name="MAILTYPE" type="VARCHAR(100)"/> + <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)"/> @@ -19,7 +18,7 @@ <createIndex tableName="MAIL_LOG" indexName="IDX_MAIL_LOG_MAIL_RUN_ID"> <column name="MAIL_RUN_ID"/> </createIndex> - <createIndex tableName="MAIL_LOG" indexName="IDX_MAIL_LOG_OPENER_LINK_CLICK_ID"> + <createIndex tableName="MAIL_LOG" indexName="IDX_OPENER_LINK_CLICK_ID"> <column name="OPENER_LINK_CLICK_ID"/> </createIndex> </changeSet> diff --git a/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/CreateLink.xml b/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/CreateLink.xml index 6d28b1fbe9..558aa8bebb 100644 --- a/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/CreateLink.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/CreateLink.xml @@ -15,7 +15,7 @@ <column name="DATE_NEW" type="DATETIME"/> <column name="USER_EDIT" type="NVARCHAR(50)"/> <column name="DATE_EDIT" type="DATETIME"/> - <column name="REDIRECT" type="SMALLINT"/> + <column name="ISREDIRECT" type="TINYINT"/> <column name="WORKFLOWPROCESSDEFINITION_KEY" type="VARCHAR(255)"/> </createTable> </changeSet> diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod index 2eccacb1e9..70ec719c34 100644 --- a/aliasDefinition/Data_alias/Data_alias.aod +++ b/aliasDefinition/Data_alias/Data_alias.aod @@ -10529,11 +10529,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>TEST_RECIPIENT</name> + <name>SENDER_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" /> @@ -10543,11 +10543,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>SENDER_EMAIL_ADDRESS</name> + <name>INTEREST_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" /> + <documentation></documentation> + <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" /> @@ -18680,11 +18694,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>REDIRECT</name> + <name>ISREDIRECT</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" /> @@ -18813,124 +18827,6 @@ </entityFieldDb> </entityFields> </entityDb> - <entityDb> - <name>MAIL_OPENER</name> - <dbName></dbName> - <idColumn>MAIL_OPENERID</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_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="false" /> - <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>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> - <entityFieldDb> - <name>MAIL_OPENERID</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>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>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> - </entityFields> - </entityDb> <entityDb> <name>MAIL_LOG</name> <dbName></dbName> @@ -18954,7 +18850,7 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="-1" /> - <size v="65535" /> + <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -18982,7 +18878,7 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="100" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -19005,20 +18901,6 @@ <title></title> <description></description> </entityFieldDb> - <entityFieldDb> - <name>MAILTYPE</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>RECIPIENT_EMAIL</name> <dbName></dbName> @@ -19103,6 +18985,20 @@ <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="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> </entityFields> </entityDb> <entityDb> @@ -19713,34 +19609,6 @@ <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="false" /> - <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>DESCRIPTION</name> <dbName></dbName> -- GitLab From f34176044cb9ea9540b075d338e29af769da71e7 Mon Sep 17 00:00:00 2001 From: "m.groppe" <m.groppe@adito.de> Date: Tue, 13 Apr 2021 19:20:30 +0200 Subject: [PATCH 061/242] fixed bug in liquibase script --- .liquibase/Data_alias/basic/2021.0.3/Bulkmail/AlterBulkmail.xml | 2 +- .liquibase/Data_alias/basic/2021.0.3/Bulkmail/changelog.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/AlterBulkmail.xml b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/AlterBulkmail.xml index e82543b3b4..ebacbeeb5e 100644 --- a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/AlterBulkmail.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/AlterBulkmail.xml @@ -5,6 +5,6 @@ <column name="DATE_TO_SEND" type="DATETIME"/> <column name="INTEREST_ID" type="char(36)"/> </addColumn> - <renameColumn tableName="BULKMAIL" oldColumnName="SENDER" newColumnName="SENDER_EMAIL_ADDRESS "/> + <renameColumn tableName="BULKMAIL" oldColumnName="SENDER" newColumnName="SENDER_EMAIL_ADDRESS" columnDataType ="varchar(50)"/> </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 index 58da09a2dc..8820b875d7 100644 --- a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/changelog.xml @@ -8,5 +8,5 @@ <include relativeToChangelogFile="true" file="createMailRun.xml"/> <include relativeToChangelogFile="true" file="createBulkMailTestRecipient.xml"/> <include relativeToChangelogFile="true" file="AlterBulkmailRecipient.xml"/> - <<include relativeToChangelogFile="true" file="addDeviceTypeKeyword.xml"/> + <include relativeToChangelogFile="true" file="addDeviceTypeKeyword.xml"/> </databaseChangeLog> \ No newline at end of file -- GitLab From 8fec6fd1b6552d76f397f4a233c2cb2ae293c568 Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Wed, 14 Apr 2021 19:48:50 +0200 Subject: [PATCH 062/242] BulkMailRecipient blacklist condition --- .../BulkMailRecipient_entity.aod | 11 ++++++- .../entityfields/icon/valueProcess.js | 4 ++- .../recordcontainers/db/conditionProcess.js | 5 +-- .../filterConditionProcess.js | 31 +++++++++++++++++++ .../blacklist_filter/filterValuesProcess.js | 8 +++++ .../expression.js | 3 +- .../status.displayvalue/expression.js | 22 +++++++++++-- process/MarketingCondition_lib/process.js | 7 +++-- process/Sql_lib/process.js | 13 ++++++++ 9 files changed, 95 insertions(+), 9 deletions(-) create mode 100644 entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/blacklist_filter/filterConditionProcess.js create mode 100644 entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/blacklist_filter/filterValuesProcess.js diff --git a/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod b/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod index e799fd72fc..c0c3cc4d7e 100644 --- a/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod +++ b/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod @@ -276,7 +276,6 @@ </dbRecordFieldMapping> <dbRecordFieldMapping> <name>TEST_RECIPIENT.value</name> - <recordfield>BULKMAILRECIPIENT.TEST_RECIPIENT</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>HASCOMMUNICATIONREJECTION.value</name> @@ -313,6 +312,16 @@ <readonly v="true" /> </linkInformation> </linkInformation> + <filterExtensions> + <filterExtension> + <name>Blacklist_filter</name> + <title>Blacklist</title> + <contentType>BOOLEAN</contentType> + <filterValuesProcess>%aditoprj%/entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/blacklist_filter/filterValuesProcess.js</filterValuesProcess> + <filterConditionProcess>%aditoprj%/entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/blacklist_filter/filterConditionProcess.js</filterConditionProcess> + <filtertype>BASIC</filtertype> + </filterExtension> + </filterExtensions> </dbRecordContainer> </recordContainers> </entity> diff --git a/entity/BulkMailRecipient_entity/entityfields/icon/valueProcess.js b/entity/BulkMailRecipient_entity/entityfields/icon/valueProcess.js index 711c154ccb..9c601f430b 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.HASCOMMUNICATIONREJECTION") == "true") +if (hasCommunicationRejection) icon = "VAADIN:BAN"; else if (type == 1) icon = "VAADIN:BUILDING"; diff --git a/entity/BulkMailRecipient_entity/recordcontainers/db/conditionProcess.js b/entity/BulkMailRecipient_entity/recordcontainers/db/conditionProcess.js index 7e2155661d..d827605409 100644 --- a/entity/BulkMailRecipient_entity/recordcontainers/db/conditionProcess.js +++ b/entity/BulkMailRecipient_entity/recordcontainers/db/conditionProcess.js @@ -23,7 +23,8 @@ else condition.and(new CommunicationSettingsCondition() .medium($KeywordRegistry.communicationMediumCampaign$mail(), "BULKMAILRECIPIENT.EMAIL_ADDRESS") .rejected() - .buildNotExistsCondition()); + .existNoSettings() + .getCondition()); } if (excludeBlacklisted) { @@ -35,4 +36,4 @@ else } } -result.string(condition.toSource()); \ No newline at end of file +result.string(condition.toString()); \ No newline at end of file diff --git a/entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/blacklist_filter/filterConditionProcess.js b/entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/blacklist_filter/filterConditionProcess.js new file mode 100644 index 0000000000..b966471bf7 --- /dev/null +++ b/entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/blacklist_filter/filterConditionProcess.js @@ -0,0 +1,31 @@ +import("Sql_lib"); +import("system.result"); +import("Util_lib"); +import("system.vars"); +import("MarketingCondition_lib"); + +var operator = vars.get("$local.operator2").trim(); +var fetchBlacklisted = Utils.toBoolean(vars.get("$local.rawvalue")); +var condition = newWhere(); + +if (operator == "<>") +{ + fetchBlacklisted = !fetchBlacklisted; + operator = "="; +} +if (operator == "=") +{ + var blacklistCondition = CommunicationBlacklist.getMailRecipientBlacklist().getCondition(); + if (fetchBlacklisted && blacklistCondition.isSet()) + condition.and(blacklistCondition); + else if (fetchBlacklisted) + condition.noResult(); + else + condition.andIfSet(null, blacklistCondition, SqlBuilder.NOT()); +} +else +{ + condition.noResult(); +} + +result.string(condition.toString("1=1")); \ No newline at end of file diff --git a/entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/blacklist_filter/filterValuesProcess.js b/entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/blacklist_filter/filterValuesProcess.js new file mode 100644 index 0000000000..25006aba8d --- /dev/null +++ b/entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/blacklist_filter/filterValuesProcess.js @@ -0,0 +1,8 @@ +import("system.translate"); +import("system.result"); +import("system.translate"); + +result.object([ + ["true", translate.text("Yes")], + ["false", translate.text("No")] +]); \ No newline at end of file diff --git a/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/hascommunicationrejection.value/expression.js b/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/hascommunicationrejection.value/expression.js index cd8b6dfbc3..7517b5a5de 100644 --- a/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/hascommunicationrejection.value/expression.js +++ b/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/hascommunicationrejection.value/expression.js @@ -18,7 +18,8 @@ else var communicationSettingsCondition = new CommunicationSettingsCondition() .medium($KeywordRegistry.communicationMediumCampaign$mail(), "BULKMAILRECIPIENT.EMAIL_ADDRESS") .rejected() - .buildNotExistsCondition(); + .existSettings() + .buildCondition(); sql = SqlBuilder.caseWhen(communicationSettingsCondition).thenString("true").elseString("false").toString(); } 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 49b6fefd59..2b9b21b9b7 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/process/MarketingCondition_lib/process.js b/process/MarketingCondition_lib/process.js index bf6b48ce21..96460e1df1 100644 --- a/process/MarketingCondition_lib/process.js +++ b/process/MarketingCondition_lib/process.js @@ -164,12 +164,15 @@ function CommunicationBlacklist () this.filter = null; } +/** + * @return {CommunicationBlacklist} + */ CommunicationBlacklist.getMailRecipientBlacklist = function () { var currentDate = vars.get("$sys.date"); var filters = newSelect("BLACKLIST_FILTER") .from("COMMUNICATIONBLACKLIST") - .where("COMMUNICATIONBLACKLIST.BLACKLIST_TYPE", $KeywordRegistry.communicationBlacklistType$contactFilter()) + .where("COMMUNICATIONBLACKLIST.BLACKLIST_TYPE", $KeywordRegistry.communicationBlacklistType$emailRecipientFilter()) .and(newWhere("COMMUNICATIONBLACKLIST.START_DATE", currentDate, SqlBuilder.GREATER_OR_EQUAL()) .or("COMMUNICATIONBLACKLIST.START_DATE is null")) .and(newWhere("COMMUNICATIONBLACKLIST.END_DATE", currentDate, SqlBuilder.LESS_OR_EQUAL())) @@ -194,7 +197,7 @@ CommunicationBlacklist.getMailRecipientBlacklist = function () return blacklist; } -CommunicationBlacklist.prototype.buildCondition = function () +CommunicationBlacklist.prototype.getCondition = function () { return new FilterSqlTranslator() .filter(this.filter) diff --git a/process/Sql_lib/process.js b/process/Sql_lib/process.js index df4abe6853..9de5af51fa 100644 --- a/process/Sql_lib/process.js +++ b/process/Sql_lib/process.js @@ -1704,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. * -- GitLab From 7706a9fd02d7f100f389b6f7554b735099c0aa8f Mon Sep 17 00:00:00 2001 From: "p.neub" <p.neub@adito.de> Date: Thu, 15 Apr 2021 08:21:03 +0200 Subject: [PATCH 063/242] [Projekt: xRM-Sales][TicketNr.: 1078675][Vertriebsprognose - neue Prognose werden beim Speichern nicht in der Datenbank abgelegt] --- entity/Forecast_entity/Forecast_entity.aod | 8 ++++++++ entity/Forecast_entity/entityfields/kind/valueProcess.js | 9 +++++++++ 2 files changed, 17 insertions(+) create mode 100644 entity/Forecast_entity/entityfields/kind/valueProcess.js diff --git a/entity/Forecast_entity/Forecast_entity.aod b/entity/Forecast_entity/Forecast_entity.aod index d8b6f1c7fe..9182cdc2c8 100644 --- a/entity/Forecast_entity/Forecast_entity.aod +++ b/entity/Forecast_entity/Forecast_entity.aod @@ -126,6 +126,10 @@ <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> @@ -173,6 +177,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 0000000000..0c435ef9c8 --- /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()); +} + -- GitLab From 1507eaa30ac4554399494297559ec6581e555195 Mon Sep 17 00:00:00 2001 From: "p.neub" <p.neub@adito.de> Date: Thu, 15 Apr 2021 08:34:08 +0200 Subject: [PATCH 064/242] salesprojectphase kwid fix --- .../basic/2021.0.3/Checklists/change_phase_translation.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 index bf63198c48..a9c905e314 100644 --- 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 @@ -7,7 +7,7 @@ <column name="TITLE" value="${SALESPROJECT_PROSPECT}"/> <where>AB_KEYWORD_ENTRYID = ?</where> <whereParams> - <param value="8aa5d8bb-b412-4c88-b27a-a26d89881bf3"/> + <param value="5729d9c0-3884-4cd4-b6e0-009718913914"/> </whereParams> </update> <update tableName="AB_KEYWORD_ENTRY"> -- GitLab From 89f23e70086699e3dd975190e3b81ecc36567447 Mon Sep 17 00:00:00 2001 From: Pascal Neub <p.neub@adito.de> Date: Thu, 15 Apr 2021 06:41:33 +0000 Subject: [PATCH 065/242] [Projekt: xRM-Sales][TicketNr.: 1032621][Vertriebsprojekt - Fehlende Suchkategorien in der erweiterten Suche] --- entity/Salesproject_entity/Salesproject_entity.aod | 2 +- language/_____LANGUAGE_de/_____LANGUAGE_de.aod | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/entity/Salesproject_entity/Salesproject_entity.aod b/entity/Salesproject_entity/Salesproject_entity.aod index 9ec2a63019..c55710d2e8 100644 --- a/entity/Salesproject_entity/Salesproject_entity.aod +++ b/entity/Salesproject_entity/Salesproject_entity.aod @@ -1120,7 +1120,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/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod index a0af84c151..e452e77063 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -10929,6 +10929,10 @@ Bitte Datumseingabe prüfen</value> <key>${SALESPROJECT_CONTACT}</key> <value>Contact</value> </entry> + <entry> + <key>Competitions/Competitor</key> + <value>Mitbewerber/Wettbewerber</value> + </entry> </keyValueMap> <font name="Dialog" style="0" size="11" /> </language> -- GitLab From 09dc15837c515c67a6f34e4947da826b76650c34 Mon Sep 17 00:00:00 2001 From: "p.neub" <p.neub@adito.de> Date: Thu, 15 Apr 2021 11:04:24 +0200 Subject: [PATCH 066/242] [Projekt: xRM-Sales][TicketNr.: 1078647]["Objekt nicht gefunden" bei Eigenschaft Herkunft VT Projekt] --- .../basic/2021.0.3/alter_origin_attribute.xml | 21 +++++++++++++++++++ .../Data_alias/basic/2021.0.3/changelog.xml | 1 + 2 files changed, 22 insertions(+) create mode 100644 .liquibase/Data_alias/basic/2021.0.3/alter_origin_attribute.xml 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 0000000000..dc6eb66e96 --- /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 index 4abf91ed48..9844df260f 100644 --- a/.liquibase/Data_alias/basic/2021.0.3/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/changelog.xml @@ -4,4 +4,5 @@ xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> <include relativeToChangelogFile="true" file="Checklists/changelog.xml"/> <include relativeToChangelogFile="true" file="Planning/changelog.xml"/> + <include relativeToChangelogFile="true" file="alter_origin_attribute.xml"/> </databaseChangeLog> \ No newline at end of file -- GitLab From cf2abda6f617b495e3f311729972f820a544bc83 Mon Sep 17 00:00:00 2001 From: "p.neub" <p.neub@adito.de> Date: Thu, 15 Apr 2021 11:24:33 +0200 Subject: [PATCH 067/242] [Projekt: xRM-Sales][TicketNr.: 1078360][Pop-Up bzgl. Forecast entfernen!] --- process/Salesproject_lib/process.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/process/Salesproject_lib/process.js b/process/Salesproject_lib/process.js index 0b58dff6ee..057749c13b 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 + } } /** -- GitLab From ee7cdcbed76874b0a60c4feae090262bcaf1cc87 Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Thu, 15 Apr 2021 12:01:21 +0200 Subject: [PATCH 068/242] [Projekt: xRM-ContactManagement][TicketNr.: 1077138][Firma/Kontakt - neuer Termin Fehlermeldung] - Fixed permuted if-statement. --- .../Appointment_entity/Appointment_entity.aod | 1 + entity/Appointment_entity/afterUiInit.js | 2 +- .../recordcontainers/jdito/contentProcess.js | 4 ++-- .../recordcontainers/jdito/onInsert.js | 22 +++++-------------- .../Organisation_entity.aod | 1 + entity/Person_entity/Person_entity.aod | 1 + .../newappointment/onActionProcess.js | 14 +++++------- .../children/newappointment/stateProcess.js | 11 +++++++--- process/Calendar_lib/process.js | 10 ++++----- 9 files changed, 29 insertions(+), 37 deletions(-) diff --git a/entity/Appointment_entity/Appointment_entity.aod b/entity/Appointment_entity/Appointment_entity.aod index d615ac8db0..ebfd0f83c6 100644 --- a/entity/Appointment_entity/Appointment_entity.aod +++ b/entity/Appointment_entity/Appointment_entity.aod @@ -270,6 +270,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 84f0515ebf..d1a3fedb12 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 709bfac8d0..a2b8753c1c 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 21d79d0f9f..548745a3cf 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/Organisation_entity/Organisation_entity.aod b/entity/Organisation_entity/Organisation_entity.aod index a1c9dc5748..7cfd3efefd 100644 --- a/entity/Organisation_entity/Organisation_entity.aod +++ b/entity/Organisation_entity/Organisation_entity.aod @@ -1418,6 +1418,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> diff --git a/entity/Person_entity/Person_entity.aod b/entity/Person_entity/Person_entity.aod index f294673d39..d318ebbdde 100644 --- a/entity/Person_entity/Person_entity.aod +++ b/entity/Person_entity/Person_entity.aod @@ -1453,6 +1453,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> diff --git a/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newappointment/onActionProcess.js b/entity/VisitPlanEntry_entity/entityfields/entityactiongroup/children/newappointment/onActionProcess.js index b760e1613d..6de5e67211 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 3f986eb99c..181e70bbec 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/process/Calendar_lib/process.js b/process/Calendar_lib/process.js index 011abeda5e..de9bc373d0 100644 --- a/process/Calendar_lib/process.js +++ b/process/Calendar_lib/process.js @@ -230,8 +230,7 @@ CalendarUtil.newEvent = function( pSummary, pDescription, pWithLink, pUser, pAff * <li>calendars.CLASSIFICATION_PUBLIC</li> * <li>calendars.CLASSIFICATION_PRIVATE</li> * </ul> - * @return {String} <p> - * The uuid of the newly created appointment.<br> + * @return {void} */ CalendarUtil.newSilentEvent = function(pSummary, pDescription, pLinks, pOwner, pAffectedUsers, pStart, pEnd, pCategories, pStatus, pReminder, pExternalAttendees, pLocation, pIsAllDay, pClassification) @@ -255,8 +254,6 @@ CalendarUtil.newSilentEvent = function(pSummary, pDescription, pLinks, pOwner, p entities.createRow(conf); }); } - - return id[0]; } /* @@ -344,7 +341,7 @@ CalendarUtil.createEntry = function(pSummary, pDescription, pLinks, pOwner, pAff if (!pEnd) { let tempStartdate = entry[calendars.DTSTART]; - entry[calendars.DTEND] = tempStartdate.setHours(tempStartdate.getHours()+1); + entry[calendars.DTEND] = tempStartdate + datetime.ONE_HOUR; } else { @@ -372,6 +369,7 @@ CalendarUtil.createEntry = function(pSummary, pDescription, pLinks, pOwner, pAff else { var affectedUsers = []; + affectedUsers.push(calendars.getCalendarUser(vars.get("$sys.user"))); if(pAffectedUsers && pAffectedUsers != []) { @@ -394,7 +392,7 @@ CalendarUtil.createEntry = function(pSummary, pDescription, pLinks, pOwner, pAff pStatus = calendars.STATUS_CONFIRMED; } - if(!pReminder) + if(pReminder) { entry[calendars.HASREMINDER] = "true"; entry[calendars.REMINDER_DURATION] = pReminder.getTime().toString(); -- GitLab From 96a72b7262b55d51d2b85136946143d9455a19ce Mon Sep 17 00:00:00 2001 From: "p.neub" <p.neub@adito.de> Date: Thu, 15 Apr 2021 12:12:03 +0200 Subject: [PATCH 069/242] =?UTF-8?q?[Projekt:=20xRM-Sales][TicketNr.:=20107?= =?UTF-8?q?8598][360=C2=B0=20Angebote=20Beschreibung=20wird=20nicht=20korr?= =?UTF-8?q?ekt=20bef=C3=BCllt]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entity/Offer_entity/contentDescriptionProcess.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/entity/Offer_entity/contentDescriptionProcess.js b/entity/Offer_entity/contentDescriptionProcess.js index f1afab18db..57c6fc7fc6 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 -- GitLab From 0fbedf55db93a0c918d0fee1811d83e1f09196ab Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Thu, 15 Apr 2021 14:57:56 +0200 Subject: [PATCH 070/242] CommunicationBlacklist bugfix --- aliasDefinition/Data_alias/Data_alias.aod | 24 ++++--------------- .../BulkMailRecipient_entity.aod | 7 +++--- .../valueProcess.js | 0 .../filterConditionProcess.js | 9 +++---- .../onValidation.js | 7 ++++++ .../BulkMailRecipientFilter_view.aod | 4 ++-- process/MarketingCondition_lib/process.js | 2 +- process/Sql_lib/process.js | 2 +- 8 files changed, 25 insertions(+), 30 deletions(-) rename entity/BulkMailRecipient_entity/entityfields/{test_recipient => is_test_recipient}/valueProcess.js (100%) diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod index 70ec719c34..9740e88e4a 100644 --- a/aliasDefinition/Data_alias/Data_alias.aod +++ b/aliasDefinition/Data_alias/Data_alias.aod @@ -10556,20 +10556,6 @@ <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> @@ -10665,8 +10651,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" /> @@ -10703,11 +10689,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>TEST_RECIPIENT</name> + <name>IS_TEST_RECIPIENT</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" /> diff --git a/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod b/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod index c0c3cc4d7e..337022169f 100644 --- a/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod +++ b/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod @@ -152,10 +152,10 @@ <useAggregates v="true" /> </entityProvider> <entityField> - <name>TEST_RECIPIENT</name> + <name>IS_TEST_RECIPIENT</name> <title>Test</title> <contentType>BOOLEAN</contentType> - <valueProcess>%aditoprj%/entity/BulkMailRecipient_entity/entityfields/test_recipient/valueProcess.js</valueProcess> + <valueProcess>%aditoprj%/entity/BulkMailRecipient_entity/entityfields/is_test_recipient/valueProcess.js</valueProcess> </entityField> <entityActionGroup> <name>testRunActions</name> @@ -275,7 +275,8 @@ <expression>%aditoprj%/entity/BulkMailRecipient_entity/recordcontainers/db/recordfieldmappings/problem.displayvalue/expression.js</expression> </dbRecordFieldMapping> <dbRecordFieldMapping> - <name>TEST_RECIPIENT.value</name> + <name>IS_TEST_RECIPIENT.value</name> + <recordfield>BULKMAILRECIPIENT.IS_TEST_RECIPIENT</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>HASCOMMUNICATIONREJECTION.value</name> diff --git a/entity/BulkMailRecipient_entity/entityfields/test_recipient/valueProcess.js b/entity/BulkMailRecipient_entity/entityfields/is_test_recipient/valueProcess.js similarity index 100% rename from entity/BulkMailRecipient_entity/entityfields/test_recipient/valueProcess.js rename to entity/BulkMailRecipient_entity/entityfields/is_test_recipient/valueProcess.js diff --git a/entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/blacklist_filter/filterConditionProcess.js b/entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/blacklist_filter/filterConditionProcess.js index b966471bf7..a075e56fb7 100644 --- a/entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/blacklist_filter/filterConditionProcess.js +++ b/entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/blacklist_filter/filterConditionProcess.js @@ -1,3 +1,4 @@ +import("system.logging"); import("Sql_lib"); import("system.result"); import("Util_lib"); @@ -16,16 +17,16 @@ if (operator == "<>") if (operator == "=") { var blacklistCondition = CommunicationBlacklist.getMailRecipientBlacklist().getCondition(); - if (fetchBlacklisted && blacklistCondition.isSet()) + if (fetchBlacklisted && blacklistCondition.hasCondition()) condition.and(blacklistCondition); else if (fetchBlacklisted) condition.noResult(); - else - condition.andIfSet(null, blacklistCondition, SqlBuilder.NOT()); + else if (blacklistCondition.hasCondition()) + condition.and(null, blacklistCondition, SqlBuilder.NOT()); } else { condition.noResult(); } - +logging.log(condition.toString()) result.string(condition.toString("1=1")); \ No newline at end of file diff --git a/entity/CommunicationBlacklist_entity/onValidation.js b/entity/CommunicationBlacklist_entity/onValidation.js index 0652d9c0f9..9093361ce3 100644 --- a/entity/CommunicationBlacklist_entity/onValidation.js +++ b/entity/CommunicationBlacklist_entity/onValidation.js @@ -12,4 +12,11 @@ if (vars.get("$field.BLACKLIST_TYPE") == $KeywordRegistry.communicationBlacklist filter = new FilterConditionGroup(filter); if (filter.isEmpty()) result.string(translate.text("Filter can't be empty")); + else + { + var includesBlacklistFilter = filter.find(function (row) + { + logging. + }); + } } \ No newline at end of file diff --git a/neonView/BulkMailRecipientFilter_view/BulkMailRecipientFilter_view.aod b/neonView/BulkMailRecipientFilter_view/BulkMailRecipientFilter_view.aod index 3c9a42908a..1638eaab61 100644 --- a/neonView/BulkMailRecipientFilter_view/BulkMailRecipientFilter_view.aod +++ b/neonView/BulkMailRecipientFilter_view/BulkMailRecipientFilter_view.aod @@ -31,7 +31,7 @@ </neonTableColumn> <neonTableColumn> <name>f7a64961-afcb-45ab-bb8d-6b3097363463</name> - <entityField>TEST_RECIPIENT</entityField> + <entityField>IS_TEST_RECIPIENT</entityField> </neonTableColumn> <neonTableColumn> <name>f311e8da-4139-48bd-a792-6df572dce7ad</name> @@ -62,7 +62,7 @@ </neonTreeTableColumn> <neonTreeTableColumn> <name>2364fe2e-8056-4531-b999-407ca57157fe</name> - <entityField>TEST_RECIPIENT</entityField> + <entityField>IS_TEST_RECIPIENT</entityField> </neonTreeTableColumn> <neonTreeTableColumn> <name>c904c6c0-b2e8-4192-a952-d4f1f6612dee</name> diff --git a/process/MarketingCondition_lib/process.js b/process/MarketingCondition_lib/process.js index 96460e1df1..2053acd67b 100644 --- a/process/MarketingCondition_lib/process.js +++ b/process/MarketingCondition_lib/process.js @@ -182,7 +182,7 @@ CommunicationBlacklist.getMailRecipientBlacklist = function () var filterMappingFn = function ([blacklistFilter]) { blacklistFilter = JSON.parse(blacklistFilter); - if (!blacklistFilter.filter || blacklistFilter.entity != "AnyContact" || Utils.isNullOrEmpty(blacklistFilter.filter.childs)) + if (!blacklistFilter.filter || blacklistFilter.entity != "BulkMailRecipient_entity" || Utils.isNullOrEmpty(blacklistFilter.filter.childs)) return null; return blacklistFilter.filter; diff --git a/process/Sql_lib/process.js b/process/Sql_lib/process.js index 9de5af51fa..119068f4ad 100644 --- a/process/Sql_lib/process.js +++ b/process/Sql_lib/process.js @@ -1432,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)); -- GitLab From 616145d3591dea65fddb41256907c6b82e109fd6 Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Thu, 15 Apr 2021 15:22:18 +0200 Subject: [PATCH 071/242] logging removed --- .../blacklist_filter/filterConditionProcess.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/blacklist_filter/filterConditionProcess.js b/entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/blacklist_filter/filterConditionProcess.js index a075e56fb7..35124c1297 100644 --- a/entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/blacklist_filter/filterConditionProcess.js +++ b/entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/blacklist_filter/filterConditionProcess.js @@ -1,4 +1,3 @@ -import("system.logging"); import("Sql_lib"); import("system.result"); import("Util_lib"); @@ -28,5 +27,5 @@ else { condition.noResult(); } -logging.log(condition.toString()) + result.string(condition.toString("1=1")); \ No newline at end of file -- GitLab From 9317d3ae4f7c316006c9794c59b80356e163f4a4 Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Thu, 15 Apr 2021 16:14:07 +0200 Subject: [PATCH 072/242] CommunicationBlacklist onValidation corrected --- entity/CommunicationBlacklist_entity/onValidation.js | 7 ------- 1 file changed, 7 deletions(-) diff --git a/entity/CommunicationBlacklist_entity/onValidation.js b/entity/CommunicationBlacklist_entity/onValidation.js index 9093361ce3..0652d9c0f9 100644 --- a/entity/CommunicationBlacklist_entity/onValidation.js +++ b/entity/CommunicationBlacklist_entity/onValidation.js @@ -12,11 +12,4 @@ if (vars.get("$field.BLACKLIST_TYPE") == $KeywordRegistry.communicationBlacklist filter = new FilterConditionGroup(filter); if (filter.isEmpty()) result.string(translate.text("Filter can't be empty")); - else - { - var includesBlacklistFilter = filter.find(function (row) - { - logging. - }); - } } \ No newline at end of file -- GitLab From b3784e576e48f43034fc6e4b196833d441e0fe6f Mon Sep 17 00:00:00 2001 From: "m.groppe" <m.groppe@adito.de> Date: Wed, 14 Apr 2021 19:28:39 +0200 Subject: [PATCH 073/242] fixed renamed columns in code --- .../children/removetestrecipient/onActionProcess.js | 2 +- .../children/settestrecipient/onActionProcess.js | 2 +- .../recordcontainers/db/conditionProcess.js | 2 +- entity/Link_entity/Link_entity.aod | 11 +++++------ .../{redirect => isredirect}/stateProcess.js | 0 .../{redirect => isredirect}/valueProcess.js | 0 .../Link_entity/entityfields/linkid/valueProcess.js | 7 ------- entity/Link_entity/entityfields/url/onValidation.js | 3 +-- .../workflowprocessdefinition_key/stateProcess.js | 2 +- neonView/LinkEdit_view/LinkEdit_view.aod | 2 +- neonView/LinkPreview_view/LinkPreview_view.aod | 2 +- 11 files changed, 12 insertions(+), 21 deletions(-) rename entity/Link_entity/entityfields/{redirect => isredirect}/stateProcess.js (100%) rename entity/Link_entity/entityfields/{redirect => isredirect}/valueProcess.js (100%) delete mode 100644 entity/Link_entity/entityfields/linkid/valueProcess.js diff --git a/entity/BulkMailRecipient_entity/entityfields/testrunactions/children/removetestrecipient/onActionProcess.js b/entity/BulkMailRecipient_entity/entityfields/testrunactions/children/removetestrecipient/onActionProcess.js index 96f7a462b0..b19f093933 100644 --- a/entity/BulkMailRecipient_entity/entityfields/testrunactions/children/removetestrecipient/onActionProcess.js +++ b/entity/BulkMailRecipient_entity/entityfields/testrunactions/children/removetestrecipient/onActionProcess.js @@ -3,7 +3,7 @@ import("system.vars"); import("system.neon"); newWhereIfSet("BULKMAILRECIPIENT.BULKMAILRECIPIENTID", vars.get("$sys.selection"), SqlBuilder.IN()) - .updateData(true, "BULKMAILRECIPIENT", ["TEST_RECIPIENT"], null, [0]); + .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 index bdcb19753b..69f831c2f7 100644 --- a/entity/BulkMailRecipient_entity/entityfields/testrunactions/children/settestrecipient/onActionProcess.js +++ b/entity/BulkMailRecipient_entity/entityfields/testrunactions/children/settestrecipient/onActionProcess.js @@ -3,7 +3,7 @@ import("system.vars"); import("system.neon"); newWhereIfSet("BULKMAILRECIPIENT.BULKMAILRECIPIENTID", vars.get("$sys.selection"), SqlBuilder.IN()) - .updateData(true, "BULKMAILRECIPIENT", ["TEST_RECIPIENT"], null, [1]); + .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 d827605409..da5905dd40 100644 --- a/entity/BulkMailRecipient_entity/recordcontainers/db/conditionProcess.js +++ b/entity/BulkMailRecipient_entity/recordcontainers/db/conditionProcess.js @@ -14,7 +14,7 @@ var isTestMail = Utils.toBoolean(vars.get("$param.IsTestMail_param")); var condition = newWhere("BULKMAILRECIPIENT.BULKMAIL_ID", "$param.BulkMailId_param"); if (isTestMail) { - condition.and("BULKMAILRECIPIENT.TEST_RECIPIENT", 1); + condition.and("BULKMAILRECIPIENT.IS_TEST_RECIPIENT", 1); } else { diff --git a/entity/Link_entity/Link_entity.aod b/entity/Link_entity/Link_entity.aod index b44e8481e0..0c37357fc5 100644 --- a/entity/Link_entity/Link_entity.aod +++ b/entity/Link_entity/Link_entity.aod @@ -20,7 +20,6 @@ </entityField> <entityField> <name>LINKID</name> - <valueProcess>%aditoprj%/entity/Link_entity/entityfields/linkid/valueProcess.js</valueProcess> </entityField> <entityField> <name>DATE_NEW</name> @@ -128,11 +127,11 @@ <displayValueProcess>%aditoprj%/entity/Link_entity/entityfields/workflowprocessdefinition_key/displayValueProcess.js</displayValueProcess> </entityField> <entityField> - <name>REDIRECT</name> + <name>ISREDIRECT</name> <title>Redirect</title> <contentType>BOOLEAN</contentType> - <stateProcess>%aditoprj%/entity/Link_entity/entityfields/redirect/stateProcess.js</stateProcess> - <valueProcess>%aditoprj%/entity/Link_entity/entityfields/redirect/valueProcess.js</valueProcess> + <stateProcess>%aditoprj%/entity/Link_entity/entityfields/isredirect/stateProcess.js</stateProcess> + <valueProcess>%aditoprj%/entity/Link_entity/entityfields/isredirect/valueProcess.js</valueProcess> </entityField> </entityFields> <recordContainers> @@ -193,8 +192,8 @@ <recordfield>LINK.WORKFLOWPROCESSDEFINITION_KEY</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> - <name>REDIRECT.value</name> - <recordfield>LINK.REDIRECT</recordfield> + <name>ISREDIRECT.value</name> + <recordfield>LINK.ISREDIRECT</recordfield> </dbRecordFieldMapping> </recordFieldMappings> <linkInformation> diff --git a/entity/Link_entity/entityfields/redirect/stateProcess.js b/entity/Link_entity/entityfields/isredirect/stateProcess.js similarity index 100% rename from entity/Link_entity/entityfields/redirect/stateProcess.js rename to entity/Link_entity/entityfields/isredirect/stateProcess.js diff --git a/entity/Link_entity/entityfields/redirect/valueProcess.js b/entity/Link_entity/entityfields/isredirect/valueProcess.js similarity index 100% rename from entity/Link_entity/entityfields/redirect/valueProcess.js rename to entity/Link_entity/entityfields/isredirect/valueProcess.js diff --git a/entity/Link_entity/entityfields/linkid/valueProcess.js b/entity/Link_entity/entityfields/linkid/valueProcess.js deleted file mode 100644 index 10b4a4579d..0000000000 --- a/entity/Link_entity/entityfields/linkid/valueProcess.js +++ /dev/null @@ -1,7 +0,0 @@ -import("system.result"); -import("system.neon"); -import("system.vars"); -import("system.util"); - -if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW) - result.string(util.getNewUUID()); \ No newline at end of file diff --git a/entity/Link_entity/entityfields/url/onValidation.js b/entity/Link_entity/entityfields/url/onValidation.js index 7aa2aee48d..b793c34df7 100644 --- a/entity/Link_entity/entityfields/url/onValidation.js +++ b/entity/Link_entity/entityfields/url/onValidation.js @@ -9,9 +9,8 @@ if (vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW && vars.get("$loc if (newSelect("URL").from("LINK").where("LINK.URL", vars.get("$local.value")).cell()) result.string(translate.text("Url must be unique")); - if (vars.get("$field.REDIRECT") == "1" && !/^(?:http(s)?:\/\/)[\w.-]+(?:\.[\w\.-]+)+[\w\-\._~:/?#[\]@!\$&'\(\)\*\+,;=.]+$/g.test(vars.get("$local.value"))) + 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/Link_entity/entityfields/workflowprocessdefinition_key/stateProcess.js b/entity/Link_entity/entityfields/workflowprocessdefinition_key/stateProcess.js index eb561bd323..1fff908258 100644 --- a/entity/Link_entity/entityfields/workflowprocessdefinition_key/stateProcess.js +++ b/entity/Link_entity/entityfields/workflowprocessdefinition_key/stateProcess.js @@ -4,7 +4,7 @@ import("KeywordRegistry_basic"); import("system.neon"); var linktype = vars.get("$field.LINKTYPE"); -var redirect = vars.get("$field.REDIRECT"); +var redirect = vars.get("$field.ISREDIRECT"); if (linktype == $KeywordRegistry.linkType$EMail() && redirect == "1") { diff --git a/neonView/LinkEdit_view/LinkEdit_view.aod b/neonView/LinkEdit_view/LinkEdit_view.aod index 9ee5c3ecaf..d579126cf9 100644 --- a/neonView/LinkEdit_view/LinkEdit_view.aod +++ b/neonView/LinkEdit_view/LinkEdit_view.aod @@ -33,7 +33,7 @@ </entityFieldLink> <entityFieldLink> <name>2b22fb4a-5e7e-48ee-b6d1-3ee4381fb419</name> - <entityField>REDIRECT</entityField> + <entityField>ISREDIRECT</entityField> </entityFieldLink> <entityFieldLink> <name>90ab2682-bc2d-4989-ab7b-b47045a3cbf3</name> diff --git a/neonView/LinkPreview_view/LinkPreview_view.aod b/neonView/LinkPreview_view/LinkPreview_view.aod index 5712a77d7f..d665692929 100644 --- a/neonView/LinkPreview_view/LinkPreview_view.aod +++ b/neonView/LinkPreview_view/LinkPreview_view.aod @@ -30,7 +30,7 @@ </entityFieldLink> <entityFieldLink> <name>840b0f8d-763f-402d-b318-6317402a7c6c</name> - <entityField>REDIRECT</entityField> + <entityField>ISREDIRECT</entityField> </entityFieldLink> <entityFieldLink> <name>a807f6b9-252c-4545-a2c9-266c64012097</name> -- GitLab From 0d6c29d797b856d9a1f209e9d872bf8040b979a9 Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Fri, 16 Apr 2021 10:02:53 +0200 Subject: [PATCH 074/242] Liquibase files fix --- .liquibase/Data_alias/basic/2021.0.3/Bulkmail/changelog.xml | 1 + .liquibase/Data_alias/basic/2021.0.3/Bulkmail/createMailRun.xml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/changelog.xml index 8820b875d7..2453f645af 100644 --- a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/changelog.xml @@ -2,6 +2,7 @@ <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"/> <include relativeToChangelogFile="true" file="createMailLog.xml"/> diff --git a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createMailRun.xml b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createMailRun.xml index d822f108f8..e3e49d203c 100644 --- a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createMailRun.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createMailRun.xml @@ -13,7 +13,7 @@ <column defaultValueComputed="NULL" name="DATE_RUN_START" type="datetime"/> <column defaultValueComputed="NULL" name="DATE_RUN_FINISHED" type="datetime"/> </createTable> - <createIndex tableName="LINK_CLICK" indexName="IDX_MAIL_RUN_INTEREST_ID"> + <createIndex tableName="MAIL_RUN" indexName="IDX_MAIL_RUN_INTEREST_ID"> <column name="INTEREST_ID"/> </createIndex> </changeSet> -- GitLab From 5b4b3293e49aa96e5dfa9840af90719257f58543 Mon Sep 17 00:00:00 2001 From: "c.wimmer" <c.wimmer@cwimmer-nb.aditosoftware.local> Date: Fri, 16 Apr 2021 10:53:34 +0200 Subject: [PATCH 075/242] [Projekt: xRM-Sales][TicketNr.: 1072524][[Besuch vor Ort] Firma - neuer Besuchsplan - inaktive Kontakte werden angezeigt] --- entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod | 3 +-- .../children/onlyshowcontactids_param/valueProcess.js | 3 +++ .../persons/children/orgid_param/valueProcess.js | 9 --------- 3 files changed, 4 insertions(+), 11 deletions(-) delete mode 100644 entity/VisitPlanEntry_entity/entityfields/persons/children/orgid_param/valueProcess.js diff --git a/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod b/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod index acc3d4d6af..5cbdd8c359 100644 --- a/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod +++ b/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod @@ -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> 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 a11c9601fe..0dcb7912c8 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 c6e583e8bd..0000000000 --- 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 -- GitLab From 87f7bd7720dcb59448d4f3913298fadafcc88b41 Mon Sep 17 00:00:00 2001 From: "m.groppe" <m.groppe@adito.de> Date: Fri, 16 Apr 2021 13:58:45 +0200 Subject: [PATCH 076/242] demodata fix --- .../Data_alias/basic/_demoData/generatedData/bulkmail.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/bulkmail.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/bulkmail.xml index b3142a2cae..d124f793b4 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"/> -- GitLab From d39e1f1fbc2a6636a0df21802dedc68e254377e9 Mon Sep 17 00:00:00 2001 From: "p.neub" <p.neub@adito.de> Date: Fri, 16 Apr 2021 14:24:04 +0200 Subject: [PATCH 077/242] [Projekt: xRM-Sales][TicketNr.: 1078637][Logging anpassen] --- aliasDefinition/Data_alias/Data_alias.aod | 62 ++++++++++++++++++- .../children/tablenames_param/valueProcess.js | 2 +- 2 files changed, 62 insertions(+), 2 deletions(-) diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod index 52da706609..5b4f5ef6cb 100644 --- a/aliasDefinition/Data_alias/Data_alias.aod +++ b/aliasDefinition/Data_alias/Data_alias.aod @@ -9952,7 +9952,7 @@ <description></description> <auditSyncConfig> <name>auditSyncConfig</name> - <auditMode v="0" /> + <auditMode v="2" /> <syncActive v="false" /> <syncComplete v="true" /> <syncDirection v="1" /> @@ -9972,6 +9972,13 @@ <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 +10000,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,6 +10040,13 @@ <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> @@ -10049,6 +10075,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> @@ -10091,6 +10124,13 @@ <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> @@ -10105,6 +10145,13 @@ <documentation></documentation> <title></title> <description></description> + <customProperties> + <customBooleanProperty> + <name>log</name> + <global v="false" /> + <property v="true" /> + </customBooleanProperty> + </customProperties> </entityFieldDb> <entityFieldDb> <name>STATUS</name> @@ -10119,6 +10166,13 @@ <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> @@ -10133,6 +10187,12 @@ <documentation></documentation> <title></title> <description></description> + <customProperties> + <customBooleanProperty> + <name>log</name> + <global v="false" /> + </customBooleanProperty> + </customProperties> </entityFieldDb> </entityFields> </entityDb> 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 97523412f9..b8fbd1a1da 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 -- GitLab From e7d8d87379f65471ec3276df6cfcd69da7b8ba1c Mon Sep 17 00:00:00 2001 From: "b.ulrich" <b.ulrich@adito.de> Date: Fri, 16 Apr 2021 17:26:27 +0200 Subject: [PATCH 078/242] [Projekt: xRM-Sales][TicketNr.: 1079248][Angebotspreis Bug] --- .../recordcontainers/db/onDBInsert.js | 31 +++++++------------ process/Offer_lib/process.js | 10 ++++-- 2 files changed, 18 insertions(+), 23 deletions(-) diff --git a/entity/Offeritem_entity/recordcontainers/db/onDBInsert.js b/entity/Offeritem_entity/recordcontainers/db/onDBInsert.js index 7310f91eb3..e78ed8f9e2 100644 --- a/entity/Offeritem_entity/recordcontainers/db/onDBInsert.js +++ b/entity/Offeritem_entity/recordcontainers/db/onDBInsert.js @@ -16,34 +16,25 @@ if(oid != "") var insertStatements = JSON.parse(vars.get("$field.itemInsertStatements"));//insert statements get set by insertPartsList in the onvalueChanges of product_id and quantity var statements = []; - if(insertStatements) - { - statements = statements.concat(insertStatements); - } //update offer price var vals = oiUtils.getNetAndVat(); var discountedVals = OfferItemUtils.getDiscountedNet(null, oid, discount); if(discountedVals) { - insertStatements.push( - newWhere("OFFERITEM.OFFERITEMID", rowdata["OFFERITEM.OFFERITEMID"]).buildUpdateStatement({ - "NET": vals[0], - "VAT": vals[1], - "DISCOUNTED_NET": discountedVals[0], - "DISCOUNTED_VAT": discountedVals[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] + }) + ) } - else + + if(insertStatements) { - insertStatements.push( - newWhere("OFFERITEMID", rowdata["OFFERITEM.OFFERITEMID"]) - .buildUpdateStatement({ - "NET": vals[0], - "VAT": vals[1] - }) - ) + statements = statements.concat(insertStatements); } db.execute(statements, "Data_alias", 10000000); diff --git a/process/Offer_lib/process.js b/process/Offer_lib/process.js index 1fb67604ae..a9561a5068 100644 --- a/process/Offer_lib/process.js +++ b/process/Offer_lib/process.js @@ -631,7 +631,7 @@ 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()) @@ -640,8 +640,12 @@ OfferItemUtils.getDiscountedNet = function(pExcludedIs, pOfferId, pDiscount, pEx .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")); -- GitLab From f92e1a789f30bd1c385b89f3a88e6fe67c020911 Mon Sep 17 00:00:00 2001 From: "p.neub" <p.neub@adito.de> Date: Mon, 19 Apr 2021 14:56:54 +0200 Subject: [PATCH 079/242] multiedittable renderer product part --- neonView/Prod2prodFilter_view/Prod2prodFilter_view.aod | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/neonView/Prod2prodFilter_view/Prod2prodFilter_view.aod b/neonView/Prod2prodFilter_view/Prod2prodFilter_view.aod index 8c93d1744c..7df0d8ad40 100644 --- a/neonView/Prod2prodFilter_view/Prod2prodFilter_view.aod +++ b/neonView/Prod2prodFilter_view/Prod2prodFilter_view.aod @@ -97,6 +97,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> -- GitLab From c8263f58c7b00b0060bdf7b7008bae0022ccc03a Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Mon, 19 Apr 2021 16:33:24 +0000 Subject: [PATCH 080/242] Renamed Link to Weblink --- .../2021.0.3/Bulkmail/createLinkClicks.xml | 10 +-- .../basic/2021.0.3/Bulkmail/createMailRun.xml | 4 +- .../{CreateLink.xml => CreateWeblink.xml} | 6 +- ...eateLinktags.xml => CreateWeblinktags.xml} | 8 +- .../addLinkManagementKeywords.xml | 16 ++-- .../2021.0.3/LinkManagement/changelog.xml | 4 +- aliasDefinition/Data_alias/Data_alias.aod | 48 +++++------ .../_____SYSTEM_APPLICATION_NEON.aod | 2 +- .../AnyContact_entity/AnyContact_entity.aod | 2 +- entity/BulkMail_entity/BulkMail_entity.aod | 2 +- .../KeywordEntry_entity.aod | 4 +- .../recordcontainers/db/conditionProcess.js | 5 -- .../containername_param/valueProcess.js | 2 - .../tags.value/expression.js | 3 - .../urltype.displayvalue/expression.js | 3 - .../recordcontainers/db/fromClauseProcess.js | 2 +- .../WeblinkClick_entity.aod} | 64 +++++++------- .../contact_id/linkedContextProcess.js | 0 .../recordcontainers/db/conditionProcess.js | 2 +- .../recordcontainers/db/fromClauseProcess.js | 6 +- .../recordcontainers/db/orderClauseProcess.js | 2 +- .../contact_id.displayvalue/expression.js | 0 .../device_type.displayvalue/expression.js | 2 +- .../WeblinkTag_entity.aod} | 54 ++++++------ .../entityfields/date_edit/valueProcess.js | 0 .../entityfields/date_new/valueProcess.js | 0 .../containername_param/valueProcess.js | 0 .../entityfields/tag/displayValueProcess.js | 0 .../entityfields/user_edit/valueProcess.js | 0 .../entityfields/user_new/valueProcess.js | 0 .../entityfields/weblink_id}/valueProcess.js | 2 +- .../grantUpdateProcess.js | 0 .../onInit.js | 0 .../recordcontainers/db/conditionProcess.js | 5 ++ .../Weblink_entity.aod} | 84 +++++++++---------- .../contentTitleProcess.js | 0 .../children/linkid_param/valueProcess.js | 2 +- .../entityfields/date_new/valueProcess.js | 0 .../entityfields/isredirect/stateProcess.js | 2 +- .../entityfields/isredirect/valueProcess.js | 0 .../containername_param/valueProcess.js | 4 + .../linktype_icon/valueProcess.js | 0 .../placeholder/displayValueProcess.js | 0 .../entityfields/placeholder/onValidation.js | 8 +- .../entityfields/placeholder/stateProcess.js | 2 +- .../entityfields/score/valueProcess.js | 0 .../entityfields/url/onValidation.js | 2 +- .../entityfields/url/stateProcess.js | 0 .../entityfields/user_new/valueProcess.js | 0 .../children/webtrackingurl/valueProcess.js | 2 +- .../displayValueProcess.js | 0 .../stateProcess.js | 2 +- .../recordcontainers/db/conditionProcess.js | 0 .../recordcontainers/db/orderClauseProcess.js | 2 +- .../linktype.displayvalue/expression.js | 0 .../tags.value/expression.js | 3 + .../urltype.displayvalue/expression.js | 5 ++ .../WorkflowDefinition_entity.aod | 2 +- .../{Link/Link.aod => Weblink/Weblink.aod} | 22 ++--- .../WeblinkClick.aod} | 8 +- .../LinkTag.aod => WeblinkTag/WeblinkTag.aod} | 14 ++-- .../BulkMailMain_view/BulkMailMain_view.aod | 2 +- ...inktMain_view.aod => WeblinkMain_view.aod} | 8 +- .../WeblinkClickFilter_view.aod} | 2 +- .../WeblinkDrawer_view.aod} | 4 +- .../WeblinkEdit_view.aod} | 4 +- .../WeblinkFilter_view.aod} | 2 +- .../WeblinkPreview_view.aod} | 2 +- .../WeblinkTagEdit_view.aod} | 2 +- .../WeblinkTagFilter_view.aod} | 2 +- .../WeblinkTagMultiEdit_view.aod} | 2 +- process/Bulkmail_lib/process.js | 42 +++++----- process/KeywordRegistry_basic/process.js | 4 +- process/Placeholder_lib/process.js | 8 +- .../migrateKeywordContainers.aod | 1 - process/redirect_rest/process.js | 8 +- 76 files changed, 260 insertions(+), 255 deletions(-) rename .liquibase/Data_alias/basic/2021.0.3/LinkManagement/{CreateLink.xml => CreateWeblink.xml} (90%) rename .liquibase/Data_alias/basic/2021.0.3/LinkManagement/{CreateLinktags.xml => CreateWeblinktags.xml} (81%) delete mode 100644 entity/LinkTag_entity/recordcontainers/db/conditionProcess.js delete mode 100644 entity/Link_entity/entityfields/keywordlinktype/children/containername_param/valueProcess.js delete mode 100644 entity/Link_entity/recordcontainers/db/recordfieldmappings/tags.value/expression.js delete mode 100644 entity/Link_entity/recordcontainers/db/recordfieldmappings/urltype.displayvalue/expression.js rename entity/{LinkClick_entity/LinkClick_entity.aod => WeblinkClick_entity/WeblinkClick_entity.aod} (73%) rename entity/{LinkClick_entity => WeblinkClick_entity}/entityfields/contact_id/linkedContextProcess.js (100%) rename entity/{LinkClick_entity => WeblinkClick_entity}/recordcontainers/db/conditionProcess.js (75%) rename entity/{LinkClick_entity => WeblinkClick_entity}/recordcontainers/db/fromClauseProcess.js (58%) rename entity/{LinkClick_entity => WeblinkClick_entity}/recordcontainers/db/orderClauseProcess.js (57%) rename entity/{LinkClick_entity => WeblinkClick_entity}/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js (100%) rename entity/{LinkClick_entity => WeblinkClick_entity}/recordcontainers/db/recordfieldmappings/device_type.displayvalue/expression.js (79%) rename entity/{LinkTag_entity/LinkTag_entity.aod => WeblinkTag_entity/WeblinkTag_entity.aod} (60%) rename entity/{LinkTag_entity => WeblinkTag_entity}/entityfields/date_edit/valueProcess.js (100%) rename entity/{LinkTag_entity => WeblinkTag_entity}/entityfields/date_new/valueProcess.js (100%) rename entity/{LinkTag_entity => WeblinkTag_entity}/entityfields/keywordlinktags/children/containername_param/valueProcess.js (100%) rename entity/{LinkTag_entity => WeblinkTag_entity}/entityfields/tag/displayValueProcess.js (100%) rename entity/{LinkTag_entity => WeblinkTag_entity}/entityfields/user_edit/valueProcess.js (100%) rename entity/{LinkTag_entity => WeblinkTag_entity}/entityfields/user_new/valueProcess.js (100%) rename entity/{LinkTag_entity/entityfields/link_id => WeblinkTag_entity/entityfields/weblink_id}/valueProcess.js (78%) rename entity/{LinkTag_entity => WeblinkTag_entity}/grantUpdateProcess.js (100%) rename entity/{LinkTag_entity => WeblinkTag_entity}/onInit.js (100%) create mode 100644 entity/WeblinkTag_entity/recordcontainers/db/conditionProcess.js rename entity/{Link_entity/Link_entity.aod => Weblink_entity/Weblink_entity.aod} (58%) rename entity/{Link_entity => Weblink_entity}/contentTitleProcess.js (100%) rename entity/{Link_entity => Weblink_entity}/entityfields/clicks/children/linkid_param/valueProcess.js (52%) rename entity/{Link_entity => Weblink_entity}/entityfields/date_new/valueProcess.js (100%) rename entity/{Link_entity => Weblink_entity}/entityfields/isredirect/stateProcess.js (82%) rename entity/{Link_entity => Weblink_entity}/entityfields/isredirect/valueProcess.js (100%) create mode 100644 entity/Weblink_entity/entityfields/keywordlinktype/children/containername_param/valueProcess.js rename entity/{Link_entity => Weblink_entity}/entityfields/linktype_icon/valueProcess.js (100%) rename entity/{Link_entity => Weblink_entity}/entityfields/placeholder/displayValueProcess.js (100%) rename entity/{Link_entity => Weblink_entity}/entityfields/placeholder/onValidation.js (70%) rename entity/{Link_entity => Weblink_entity}/entityfields/placeholder/stateProcess.js (82%) rename entity/{Link_entity => Weblink_entity}/entityfields/score/valueProcess.js (100%) rename entity/{Link_entity => Weblink_entity}/entityfields/url/onValidation.js (84%) rename entity/{Link_entity => Weblink_entity}/entityfields/url/stateProcess.js (100%) rename entity/{Link_entity => Weblink_entity}/entityfields/user_new/valueProcess.js (100%) rename entity/{Link_entity => Weblink_entity}/entityfields/webtrackingtags/children/webtrackingurl/valueProcess.js (52%) rename entity/{Link_entity => Weblink_entity}/entityfields/workflowprocessdefinition_key/displayValueProcess.js (100%) rename entity/{Link_entity => Weblink_entity}/entityfields/workflowprocessdefinition_key/stateProcess.js (80%) rename entity/{Link_entity => Weblink_entity}/recordcontainers/db/conditionProcess.js (100%) rename entity/{Link_entity => Weblink_entity}/recordcontainers/db/orderClauseProcess.js (67%) create mode 100644 entity/Weblink_entity/recordcontainers/db/recordfieldmappings/linktype.displayvalue/expression.js create mode 100644 entity/Weblink_entity/recordcontainers/db/recordfieldmappings/tags.value/expression.js create mode 100644 entity/Weblink_entity/recordcontainers/db/recordfieldmappings/urltype.displayvalue/expression.js rename neonContext/{Link/Link.aod => Weblink/Weblink.aod} (69%) rename neonContext/{LinkClick/LinkClick.aod => WeblinkClick/WeblinkClick.aod} (73%) rename neonContext/{LinkTag/LinkTag.aod => WeblinkTag/WeblinkTag.aod} (70%) rename neonView/LinktMain_view/{LinktMain_view.aod => WeblinkMain_view.aod} (85%) rename neonView/{LinkClickFilter_view/LinkClickFilter_view.aod => WeblinkClickFilter_view/WeblinkClickFilter_view.aod} (97%) rename neonView/{LinkDrawer_view/LinkDrawer_view.aod => WeblinkDrawer_view/WeblinkDrawer_view.aod} (89%) rename neonView/{LinkEdit_view/LinkEdit_view.aod => WeblinkEdit_view/WeblinkEdit_view.aod} (95%) rename neonView/{LinkFilter_view/LinkFilter_view.aod => WeblinkFilter_view/WeblinkFilter_view.aod} (97%) rename neonView/{LinkPreview_view/LinkPreview_view.aod => WeblinkPreview_view/WeblinkPreview_view.aod} (97%) rename neonView/{LinkTagEdit_view/LinkTagEdit_view.aod => WeblinkTagEdit_view/WeblinkTagEdit_view.aod} (95%) rename neonView/{LinkTagFilter_view/LinkTagFilter_view.aod => WeblinkTagFilter_view/WeblinkTagFilter_view.aod} (95%) rename neonView/{LinkTagMultiEdit_view/LinkTagMultiEdit_view.aod => WeblinkTagMultiEdit_view/WeblinkTagMultiEdit_view.aod} (95%) diff --git a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createLinkClicks.xml b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createLinkClicks.xml index c2e7315e43..be5283ebc3 100644 --- a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createLinkClicks.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createLinkClicks.xml @@ -1,19 +1,19 @@ <?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="LINK_CLICK"> - <column name="LINK_CLICKID" type="CHAR(36)"> - <constraints nullable="false" primaryKey="true"/> + <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="LINK_ID" type="CHAR(36)"/> + <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="LINK_CLICK" indexName="IDX_LINK_CLICK_MAIL_LOG_ID"> + <createIndex tableName="WEBLINK_CLICK" indexName="IDX_WEBLINK_CLICK_MAIL_LOG_ID"> <column name="MAIL_LOG_ID"/> </createIndex> </changeSet> diff --git a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createMailRun.xml b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createMailRun.xml index e3e49d203c..7ac6729001 100644 --- a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createMailRun.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/createMailRun.xml @@ -10,8 +10,8 @@ <column name="STATUS" type="VARCHAR(100)"/> <column name="TESTRUN" type= "smallint"/> <column name="INTEREST_ID" type="CHAR(36)"/> - <column defaultValueComputed="NULL" name="DATE_RUN_START" type="datetime"/> - <column defaultValueComputed="NULL" name="DATE_RUN_FINISHED" type="datetime"/> + <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"/> diff --git a/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/CreateLink.xml b/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/CreateWeblink.xml similarity index 90% rename from .liquibase/Data_alias/basic/2021.0.3/LinkManagement/CreateLink.xml rename to .liquibase/Data_alias/basic/2021.0.3/LinkManagement/CreateWeblink.xml index 558aa8bebb..7561299704 100644 --- a/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/CreateLink.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/CreateWeblink.xml @@ -3,9 +3,9 @@ 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="LINK"> - <column name="LINKID" type="CHAR(36)"> - <constraints primaryKey="true" primaryKeyName="PK_LINK_LINKID"/> + <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)"/> diff --git a/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/CreateLinktags.xml b/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/CreateWeblinktags.xml similarity index 81% rename from .liquibase/Data_alias/basic/2021.0.3/LinkManagement/CreateLinktags.xml rename to .liquibase/Data_alias/basic/2021.0.3/LinkManagement/CreateWeblinktags.xml index bf2eeca7fa..69df405c04 100644 --- a/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/CreateLinktags.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/CreateWeblinktags.xml @@ -3,11 +3,11 @@ 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="LINKTAG"> - <column name="LINKTAGID" type="CHAR(36)"> - <constraints primaryKey="true" primaryKeyName="PK_LINKTAG_LINKTAGID"/> + <createTable tableName="WEBLINKTAG"> + <column name="WEBLINKTAGID" type="CHAR(36)"> + <constraints primaryKey="true" primaryKeyName="PK_WEBLINKTAG_WEBLINKTAGID"/> </column> - <column name="LINK_ID" type="char(36)"/> + <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" /> diff --git a/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/addLinkManagementKeywords.xml b/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/addLinkManagementKeywords.xml index bca80257d2..4bf9b7e018 100644 --- a/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/addLinkManagementKeywords.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/addLinkManagementKeywords.xml @@ -6,7 +6,7 @@ <insert tableName="AB_KEYWORD_CATEGORY"> <column name="AB_KEYWORD_CATEGORYID" value="6511a68f-f776-4995-816b-1db011e9e6af"/> - <column name="NAME" value="LinkTags"/> + <column name="NAME" value="WeblinkTags"/> <column name="SORTINGBY" valueNumeric="0"/> <column name="SORTINGDIRECTION" value="ASC"/> </insert> @@ -15,7 +15,7 @@ <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="LinkTags"/> + <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"/> @@ -25,7 +25,7 @@ <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="LinkTags"/> + <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"/> @@ -35,7 +35,7 @@ <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="LinkTags"/> + <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"/> @@ -45,7 +45,7 @@ <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="LinkTags"/> + <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"/> @@ -57,16 +57,16 @@ <insert tableName="AB_KEYWORD_CATEGORY"> <column name="AB_KEYWORD_CATEGORYID" value="c2034fe5-6157-4fb2-b774-4aaeda302b15"/> - <column name="NAME" value="LinkType"/> + <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="EMAIL"/> + <column name="KEYID" value="WEBLINK_EMAIL"/> <column name="TITLE" value="E-Mail"/> - <column name="CONTAINER" value="LinkType"/> + <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"/> diff --git a/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/changelog.xml index 7425a6643b..4c8697f98d 100644 --- a/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/LinkManagement/changelog.xml @@ -1,6 +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="CreateLink.xml" relativeToChangelogFile="true"/> - <include file="CreateLinktags.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/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod index 1283294a7e..8b751faf53 100644 --- a/aliasDefinition/Data_alias/Data_alias.aod +++ b/aliasDefinition/Data_alias/Data_alias.aod @@ -18666,9 +18666,9 @@ </entityFields> </entityDb> <entityDb> - <name>LINK</name> + <name>WEBLINK</name> <dbName></dbName> - <idColumn>LINKID</idColumn> + <idColumn>WEBLINKID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -18702,8 +18702,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="19" /> - <scale v="0" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -18730,8 +18730,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="19" /> - <scale v="0" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -18754,7 +18754,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>LINKID</name> + <name>WEBLINKID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -18827,8 +18827,8 @@ <name>ISREDIRECT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="-6" /> - <size v="3" /> + <columnType v="5" /> + <size v="5" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -18840,9 +18840,9 @@ </entityFields> </entityDb> <entityDb> - <name>LINKTAG</name> + <name>WEBLINKTAG</name> <dbName></dbName> - <idColumn>LINKTAGID</idColumn> + <idColumn>WEBLINKTAGID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -18862,8 +18862,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="19" /> - <scale v="0" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -18872,7 +18872,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>LINK_ID</name> + <name>WEBLINK_ID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> @@ -18890,8 +18890,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="19" /> - <scale v="0" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -18928,7 +18928,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>LINKTAGID</name> + <name>WEBLINKTAGID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -19790,7 +19790,7 @@ <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> @@ -19798,9 +19798,9 @@ </entityFields> </entityDb> <entityDb> - <name>LINK_CLICK</name> + <name>WEBLINK_CLICK</name> <dbName></dbName> - <idColumn>LINK_CLICKID</idColumn> + <idColumn>WEBLINK_CLICKID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -19844,7 +19844,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>LINK_CLICKID</name> + <name>WEBLINK_CLICKID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -19886,7 +19886,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>LINK_ID</name> + <name>WEBLINK_ID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> @@ -19918,8 +19918,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="19" /> - <scale v="0" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> diff --git a/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod b/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod index b50744da04..1a320de850 100644 --- a/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod +++ b/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod @@ -197,7 +197,7 @@ <kind v="10077" /> </entityNode> <entityNode> - <name>Link</name> + <name>Weblink</name> <kind v="10077" /> </entityNode> <entityNode> diff --git a/entity/AnyContact_entity/AnyContact_entity.aod b/entity/AnyContact_entity/AnyContact_entity.aod index d01cbf0e5e..f074dfa8dc 100644 --- a/entity/AnyContact_entity/AnyContact_entity.aod +++ b/entity/AnyContact_entity/AnyContact_entity.aod @@ -92,7 +92,7 @@ </entityDependency> <entityDependency> <name>cb874ee2-e147-4311-bdf1-a94df537bb9e</name> - <entityName>LinkClick_entity</entityName> + <entityName>WeblinkClick_entity</entityName> <fieldName>Contacts</fieldName> <isConsumer v="false" /> </entityDependency> diff --git a/entity/BulkMail_entity/BulkMail_entity.aod b/entity/BulkMail_entity/BulkMail_entity.aod index 64ad1c607a..ea3b4e8985 100644 --- a/entity/BulkMail_entity/BulkMail_entity.aod +++ b/entity/BulkMail_entity/BulkMail_entity.aod @@ -368,7 +368,7 @@ <name>Clicks</name> <dependency> <name>dependency</name> - <entityName>LinkClick_entity</entityName> + <entityName>WeblinkClick_entity</entityName> <fieldName>#PROVIDER</fieldName> </dependency> <children> diff --git a/entity/KeywordEntry_entity/KeywordEntry_entity.aod b/entity/KeywordEntry_entity/KeywordEntry_entity.aod index 9b2992466f..39bcb0a458 100644 --- a/entity/KeywordEntry_entity/KeywordEntry_entity.aod +++ b/entity/KeywordEntry_entity/KeywordEntry_entity.aod @@ -644,13 +644,13 @@ </entityDependency> <entityDependency> <name>8cfca9b8-3128-4e31-bb77-358d500c4b9a</name> - <entityName>Link_entity</entityName> + <entityName>Weblink_entity</entityName> <fieldName>KeywordLinkType</fieldName> <isConsumer v="false" /> </entityDependency> <entityDependency> <name>7a7e6cc4-3e5b-4a2b-8ed9-1e84436cac15</name> - <entityName>LinkTag_entity</entityName> + <entityName>WeblinkTag_entity</entityName> <fieldName>KeywordLinkTags</fieldName> <isConsumer v="false" /> </entityDependency> diff --git a/entity/LinkTag_entity/recordcontainers/db/conditionProcess.js b/entity/LinkTag_entity/recordcontainers/db/conditionProcess.js deleted file mode 100644 index 68febae30f..0000000000 --- a/entity/LinkTag_entity/recordcontainers/db/conditionProcess.js +++ /dev/null @@ -1,5 +0,0 @@ -import("system.vars"); -import("Sql_lib"); -import("system.result"); - -result.string(newWhereIfSet("LINKTAG.LINK_ID", vars.get("$param.LinkId_param")).toString()) \ No newline at end of file diff --git a/entity/Link_entity/entityfields/keywordlinktype/children/containername_param/valueProcess.js b/entity/Link_entity/entityfields/keywordlinktype/children/containername_param/valueProcess.js deleted file mode 100644 index a12ad5a803..0000000000 --- a/entity/Link_entity/entityfields/keywordlinktype/children/containername_param/valueProcess.js +++ /dev/null @@ -1,2 +0,0 @@ -import("system.result"); -result.string("LinkType"); \ No newline at end of file diff --git a/entity/Link_entity/recordcontainers/db/recordfieldmappings/tags.value/expression.js b/entity/Link_entity/recordcontainers/db/recordfieldmappings/tags.value/expression.js deleted file mode 100644 index 31a1b020f2..0000000000 --- a/entity/Link_entity/recordcontainers/db/recordfieldmappings/tags.value/expression.js +++ /dev/null @@ -1,3 +0,0 @@ -import("system.result"); -result.string("(SELECT GROUP_CONCAT(CONCAT(' ', TITLE)) from ab_keyword_entry join LINKTAG on " -+" KEYID = LINKTAG.TAG join ab_keyword_category on ab_keyword_category_id = ab_keyword_categoryid where LINKTAG.LINK_ID = LINKID and AB_KEYWORD_CATEGORY.NAME = 'LinkTags')"); \ No newline at end of file diff --git a/entity/Link_entity/recordcontainers/db/recordfieldmappings/urltype.displayvalue/expression.js b/entity/Link_entity/recordcontainers/db/recordfieldmappings/urltype.displayvalue/expression.js deleted file mode 100644 index 90e6647b3f..0000000000 --- a/entity/Link_entity/recordcontainers/db/recordfieldmappings/urltype.displayvalue/expression.js +++ /dev/null @@ -1,3 +0,0 @@ -import("system.result"); -import("Keyword_lib"); -result.string(KeywordUtils.getResolvedTitleSqlPart("LinkType", "LINK.LINKTYPE")); \ No newline at end of file diff --git a/entity/MailLog_entity/recordcontainers/db/fromClauseProcess.js b/entity/MailLog_entity/recordcontainers/db/fromClauseProcess.js index 153f1d252a..5403f0c7ee 100644 --- a/entity/MailLog_entity/recordcontainers/db/fromClauseProcess.js +++ b/entity/MailLog_entity/recordcontainers/db/fromClauseProcess.js @@ -1,4 +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 LINK_CLICK on LINK_CLICK.LINK_CLICKID = MAIL_LOG.OPENER_LINK_CLICK_ID"); \ No newline at end of file + 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/LinkClick_entity/LinkClick_entity.aod b/entity/WeblinkClick_entity/WeblinkClick_entity.aod similarity index 73% rename from entity/LinkClick_entity/LinkClick_entity.aod rename to entity/WeblinkClick_entity/WeblinkClick_entity.aod index 6988cda6d1..bd2d19c05b 100644 --- a/entity/LinkClick_entity/LinkClick_entity.aod +++ b/entity/WeblinkClick_entity/WeblinkClick_entity.aod @@ -1,6 +1,6 @@ <?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>LinkClick_entity</name> + <name>WeblinkClick_entity</name> <title>Click</title> <majorModelMode>DISTRIBUTED</majorModelMode> <grantCreate v="false" /> @@ -24,6 +24,12 @@ <fieldName>Clicks</fieldName> <isConsumer v="false" /> </entityDependency> + <entityDependency> + <name>2a2baa00-d7c3-4e88-a4e1-553a81b4ac77</name> + <entityName>Weblink_entity</entityName> + <fieldName>Clicks</fieldName> + <isConsumer v="false" /> + </entityDependency> </dependencies> </entityProvider> <entityField> @@ -48,10 +54,10 @@ <mandatory v="true" /> </entityField> <entityField> - <name>LINK_CLICKID</name> + <name>WEBLINK_CLICKID</name> </entityField> <entityField> - <name>LINK_ID</name> + <name>WEBLINK_ID</name> <mandatory v="true" /> </entityField> <entityField> @@ -67,7 +73,7 @@ <name>CONTACT_ID</name> <title>Contact</title> <consumer>Contacts</consumer> - <linkedContextProcess>%aditoprj%/entity/LinkClick_entity/entityfields/contact_id/linkedContextProcess.js</linkedContextProcess> + <linkedContextProcess>%aditoprj%/entity/WeblinkClick_entity/entityfields/contact_id/linkedContextProcess.js</linkedContextProcess> <mandatory v="true" /> </entityField> <entityField> @@ -88,7 +94,7 @@ <title>Url</title> </entityField> <entityParameter> - <name>LinkId_param</name> + <name>WeblinkId_param</name> <expose v="true" /> </entityParameter> <entityParameter> @@ -117,34 +123,34 @@ <recordContainers> <dbRecordContainer> <name>db</name> - <fromClauseProcess>%aditoprj%/entity/LinkClick_entity/recordcontainers/db/fromClauseProcess.js</fromClauseProcess> - <conditionProcess>%aditoprj%/entity/LinkClick_entity/recordcontainers/db/conditionProcess.js</conditionProcess> - <orderClauseProcess>%aditoprj%/entity/LinkClick_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess> + <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>LINK_CLICK.BROWSER</recordfield> + <recordfield>WEBLINK_CLICK.BROWSER</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>DATE_OPENED.value</name> - <recordfield>LINK_CLICK.DATE_OPENED</recordfield> + <recordfield>WEBLINK_CLICK.DATE_OPENED</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>DEVICE_TYPE.value</name> - <recordfield>LINK_CLICK.DEVICE_TYPE</recordfield> + <recordfield>WEBLINK_CLICK.DEVICE_TYPE</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>IP_ADDRESS.value</name> - <recordfield>LINK_CLICK.IP_ADDRESS</recordfield> + <recordfield>WEBLINK_CLICK.IP_ADDRESS</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> - <name>LINK_CLICKID.value</name> - <recordfield>LINK_CLICK.LINK_CLICKID</recordfield> + <name>WEBLINK_CLICKID.value</name> + <recordfield>WEBLINK_CLICK.WEBLINK_CLICKID</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> - <name>LINK_ID.value</name> - <recordfield>LINK_CLICK.LINK_ID</recordfield> + <name>WEBLINK_ID.value</name> + <recordfield>WEBLINK_CLICK.WEBLINK_ID</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>OBJECT_TYPE.value</name> @@ -152,7 +158,7 @@ </dbRecordFieldMapping> <dbRecordFieldMapping> <name>OPERATING_SYSTEM.value</name> - <recordfield>LINK_CLICK.OPERATING_SYSTEM</recordfield> + <recordfield>WEBLINK_CLICK.OPERATING_SYSTEM</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>CONTACT_ID.value</name> @@ -170,11 +176,11 @@ </dbRecordFieldMapping> <dbRecordFieldMapping> <name>CONTACT_ID.displayValue</name> - <expression>%aditoprj%/entity/LinkClick_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js</expression> + <expression>%aditoprj%/entity/WeblinkClick_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js</expression> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>URL.value</name> - <recordfield>LINK.URL</recordfield> + <recordfield>WEBLINK.URL</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>PERSON_ID.value</name> @@ -186,40 +192,40 @@ </dbRecordFieldMapping> <dbRecordFieldMapping> <name>DEVICE_TYPE.displayValue</name> - <expression>%aditoprj%/entity/LinkClick_entity/recordcontainers/db/recordfieldmappings/device_type.displayvalue/expression.js</expression> + <expression>%aditoprj%/entity/WeblinkClick_entity/recordcontainers/db/recordfieldmappings/device_type.displayvalue/expression.js</expression> </dbRecordFieldMapping> </recordFieldMappings> <linkInformation> <linkInformation> - <name>d64f4f8d-4478-456d-a29e-d7e9a2981f0f</name> - <tableName>LINK_CLICK</tableName> - <primaryKey>LINK_CLICKID</primaryKey> + <name>bec597d4-29cb-48b4-9d26-d98b57a2bea2</name> + <tableName>WEBLINK_CLICK</tableName> + <primaryKey>WEBLINK_CLICKID</primaryKey> <isUIDTable v="true" /> <readonly v="false" /> </linkInformation> <linkInformation> - <name>bf0b73b1-f99a-482a-aa10-d6cc1cee759d</name> + <name>fd8737aa-96fa-4831-98eb-6dd9082ff023</name> <tableName>MAIL_LOG</tableName> <primaryKey>MAIL_LOGID</primaryKey> <isUIDTable v="false" /> <readonly v="true" /> </linkInformation> <linkInformation> - <name>5f0fd2d6-390b-4614-ab82-a9b1f0306fe9</name> + <name>5d47ca65-a3b5-4cdf-97d7-3336a3601d2a</name> <tableName>MAIL_RUN</tableName> <primaryKey>MAIL_RUNID</primaryKey> <isUIDTable v="false" /> <readonly v="true" /> </linkInformation> <linkInformation> - <name>d4b3c72c-b8c5-4dad-b5aa-718fb1c78f3e</name> - <tableName>LINK</tableName> - <primaryKey>LINKID</primaryKey> + <name>a3b88623-2fe7-4d05-b13b-b3bbaad6a2f3</name> + <tableName>WEBLINK</tableName> + <primaryKey>WEBLINKID</primaryKey> <isUIDTable v="false" /> <readonly v="true" /> </linkInformation> <linkInformation> - <name>34c55cb6-697c-4bc1-b15f-737b4743e6fb</name> + <name>5e8806a6-a5b6-4fb8-9672-6db23c9706a5</name> <tableName>CONTACT</tableName> <primaryKey>CONTACTID</primaryKey> <isUIDTable v="false" /> diff --git a/entity/LinkClick_entity/entityfields/contact_id/linkedContextProcess.js b/entity/WeblinkClick_entity/entityfields/contact_id/linkedContextProcess.js similarity index 100% rename from entity/LinkClick_entity/entityfields/contact_id/linkedContextProcess.js rename to entity/WeblinkClick_entity/entityfields/contact_id/linkedContextProcess.js diff --git a/entity/LinkClick_entity/recordcontainers/db/conditionProcess.js b/entity/WeblinkClick_entity/recordcontainers/db/conditionProcess.js similarity index 75% rename from entity/LinkClick_entity/recordcontainers/db/conditionProcess.js rename to entity/WeblinkClick_entity/recordcontainers/db/conditionProcess.js index 47e1c6b2ef..12cab1c713 100644 --- a/entity/LinkClick_entity/recordcontainers/db/conditionProcess.js +++ b/entity/WeblinkClick_entity/recordcontainers/db/conditionProcess.js @@ -1,7 +1,7 @@ import("system.result"); import("Sql_lib"); -var cond = newWhereIfSet("LINK_CLICK.LINK_ID", "$param.LinkId_param") +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"); diff --git a/entity/LinkClick_entity/recordcontainers/db/fromClauseProcess.js b/entity/WeblinkClick_entity/recordcontainers/db/fromClauseProcess.js similarity index 58% rename from entity/LinkClick_entity/recordcontainers/db/fromClauseProcess.js rename to entity/WeblinkClick_entity/recordcontainers/db/fromClauseProcess.js index 05dc3db634..44b1758c89 100644 --- a/entity/LinkClick_entity/recordcontainers/db/fromClauseProcess.js +++ b/entity/WeblinkClick_entity/recordcontainers/db/fromClauseProcess.js @@ -2,10 +2,10 @@ import("system.result"); import("Sql_lib"); var from = new SqlBuilder() - .from("LINK_CLICK") - .join("MAIL_LOG","MAIL_LOG.MAIL_LOGID = LINK_CLICK.MAIL_LOG_ID") + .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("LINK","LINK.LINKID = LINK_CLICK.LINK_ID"); + .join("WEBLINK","WEBLINK.WEBLINKID = WEBLINK_CLICK.WEBLINK_ID"); result.string(from.toString()); \ No newline at end of file diff --git a/entity/LinkClick_entity/recordcontainers/db/orderClauseProcess.js b/entity/WeblinkClick_entity/recordcontainers/db/orderClauseProcess.js similarity index 57% rename from entity/LinkClick_entity/recordcontainers/db/orderClauseProcess.js rename to entity/WeblinkClick_entity/recordcontainers/db/orderClauseProcess.js index df83830d32..08dda059e9 100644 --- a/entity/LinkClick_entity/recordcontainers/db/orderClauseProcess.js +++ b/entity/WeblinkClick_entity/recordcontainers/db/orderClauseProcess.js @@ -2,5 +2,5 @@ import("system.db"); import("system.result"); result.object({ - "LINK_CLICK.DATE_OPENED" : db.DESCENDING + "WEBLINK_CLICK.DATE_OPENED" : db.DESCENDING }); \ No newline at end of file diff --git a/entity/LinkClick_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js b/entity/WeblinkClick_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js similarity index 100% rename from entity/LinkClick_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js rename to entity/WeblinkClick_entity/recordcontainers/db/recordfieldmappings/contact_id.displayvalue/expression.js diff --git a/entity/LinkClick_entity/recordcontainers/db/recordfieldmappings/device_type.displayvalue/expression.js b/entity/WeblinkClick_entity/recordcontainers/db/recordfieldmappings/device_type.displayvalue/expression.js similarity index 79% rename from entity/LinkClick_entity/recordcontainers/db/recordfieldmappings/device_type.displayvalue/expression.js rename to entity/WeblinkClick_entity/recordcontainers/db/recordfieldmappings/device_type.displayvalue/expression.js index 3b14a9b790..c4b623c5f3 100644 --- a/entity/LinkClick_entity/recordcontainers/db/recordfieldmappings/device_type.displayvalue/expression.js +++ b/entity/WeblinkClick_entity/recordcontainers/db/recordfieldmappings/device_type.displayvalue/expression.js @@ -2,5 +2,5 @@ import("system.result"); import("Keyword_lib"); import("KeywordRegistry_basic"); -var sql = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.deviceType(), "LINK_CLICK.DEVICE_TYPE"); +var sql = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.deviceType(), "WEBLINK_CLICK.DEVICE_TYPE"); result.string(sql); diff --git a/entity/LinkTag_entity/LinkTag_entity.aod b/entity/WeblinkTag_entity/WeblinkTag_entity.aod similarity index 60% rename from entity/LinkTag_entity/LinkTag_entity.aod rename to entity/WeblinkTag_entity/WeblinkTag_entity.aod index 6fe8872547..58b737c76c 100644 --- a/entity/LinkTag_entity/LinkTag_entity.aod +++ b/entity/WeblinkTag_entity/WeblinkTag_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"> - <name>LinkTag_entity</name> + <name>WeblinkTag_entity</name> <title>Tag</title> <majorModelMode>DISTRIBUTED</majorModelMode> <grantUpdate v="false" /> - <grantUpdateProcess>%aditoprj%/entity/LinkTag_entity/grantUpdateProcess.js</grantUpdateProcess> - <onInit>%aditoprj%/entity/LinkTag_entity/onInit.js</onInit> + <grantUpdateProcess>%aditoprj%/entity/WeblinkTag_entity/grantUpdateProcess.js</grantUpdateProcess> + <onInit>%aditoprj%/entity/WeblinkTag_entity/onInit.js</onInit> <titlePlural>Tags</titlePlural> <recordContainer>db</recordContainer> <entityFields> @@ -17,45 +17,45 @@ <dependencies> <entityDependency> <name>4677d007-6467-4bc4-80ec-8230ee68d203</name> - <entityName>Link_entity</entityName> + <entityName>Weblink_entity</entityName> <fieldName>WebtrackingTags</fieldName> <isConsumer v="false" /> </entityDependency> </dependencies> </entityProvider> <entityParameter> - <name>LinkId_param</name> + <name>WeblinkId_param</name> <expose v="true" /> </entityParameter> <entityField> <name>TAG</name> <title>Tag</title> <consumer>KeywordLinkTags</consumer> - <displayValueProcess>%aditoprj%/entity/LinkTag_entity/entityfields/tag/displayValueProcess.js</displayValueProcess> + <displayValueProcess>%aditoprj%/entity/WeblinkTag_entity/entityfields/tag/displayValueProcess.js</displayValueProcess> </entityField> <entityField> - <name>LINKTAGID</name> + <name>WEBLINKTAGID</name> </entityField> <entityField> - <name>LINK_ID</name> + <name>WEBLINK_ID</name> <title>Url</title> - <valueProcess>%aditoprj%/entity/LinkTag_entity/entityfields/link_id/valueProcess.js</valueProcess> + <valueProcess>%aditoprj%/entity/WeblinkTag_entity/entityfields/weblink_id/valueProcess.js</valueProcess> </entityField> <entityField> <name>DATE_NEW</name> - <valueProcess>%aditoprj%/entity/LinkTag_entity/entityfields/date_new/valueProcess.js</valueProcess> + <valueProcess>%aditoprj%/entity/WeblinkTag_entity/entityfields/date_new/valueProcess.js</valueProcess> </entityField> <entityField> <name>DATE_EDIT</name> - <valueProcess>%aditoprj%/entity/LinkTag_entity/entityfields/date_edit/valueProcess.js</valueProcess> + <valueProcess>%aditoprj%/entity/WeblinkTag_entity/entityfields/date_edit/valueProcess.js</valueProcess> </entityField> <entityField> <name>USER_NEW</name> - <valueProcess>%aditoprj%/entity/LinkTag_entity/entityfields/user_new/valueProcess.js</valueProcess> + <valueProcess>%aditoprj%/entity/WeblinkTag_entity/entityfields/user_new/valueProcess.js</valueProcess> </entityField> <entityField> <name>USER_EDIT</name> - <valueProcess>%aditoprj%/entity/LinkTag_entity/entityfields/user_edit/valueProcess.js</valueProcess> + <valueProcess>%aditoprj%/entity/WeblinkTag_entity/entityfields/user_edit/valueProcess.js</valueProcess> </entityField> <entityProvider> <name>#PROVIDER_AGGREGATES</name> @@ -71,7 +71,7 @@ <children> <entityParameter> <name>ContainerName_param</name> - <valueProcess>%aditoprj%/entity/LinkTag_entity/entityfields/keywordlinktags/children/containername_param/valueProcess.js</valueProcess> + <valueProcess>%aditoprj%/entity/WeblinkTag_entity/entityfields/keywordlinktags/children/containername_param/valueProcess.js</valueProcess> </entityParameter> </children> </entityConsumer> @@ -79,43 +79,43 @@ <recordContainers> <dbRecordContainer> <name>db</name> - <conditionProcess>%aditoprj%/entity/LinkTag_entity/recordcontainers/db/conditionProcess.js</conditionProcess> + <conditionProcess>%aditoprj%/entity/WeblinkTag_entity/recordcontainers/db/conditionProcess.js</conditionProcess> <alias>Data_alias</alias> <recordFieldMappings> <dbRecordFieldMapping> <name>TAG.value</name> - <recordfield>LINKTAG.TAG</recordfield> + <recordfield>WEBLINKTAG.TAG</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> - <name>LINK_ID.value</name> - <recordfield>LINKTAG.LINK_ID</recordfield> + <name>WEBLINK_ID.value</name> + <recordfield>WEBLINKTAG.WEBLINK_ID</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>DATE_EDIT.value</name> - <recordfield>LINKTAG.DATE_EDIT</recordfield> + <recordfield>WEBLINKTAG.DATE_EDIT</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>DATE_NEW.value</name> - <recordfield>LINKTAG.DATE_NEW</recordfield> + <recordfield>WEBLINKTAG.DATE_NEW</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>USER_EDIT.value</name> - <recordfield>LINKTAG.USER_EDIT</recordfield> + <recordfield>WEBLINKTAG.USER_EDIT</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>USER_NEW.value</name> - <recordfield>LINKTAG.USER_NEW</recordfield> + <recordfield>WEBLINKTAG.USER_NEW</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> - <name>LINKTAGID.value</name> - <recordfield>LINKTAG.LINKTAGID</recordfield> + <name>WEBLINKTAGID.value</name> + <recordfield>WEBLINKTAG.WEBLINKTAGID</recordfield> </dbRecordFieldMapping> </recordFieldMappings> <linkInformation> <linkInformation> - <name>25e82f4e-e187-4e73-a10d-5c04d6356341</name> - <tableName>LINKTAG</tableName> - <primaryKey>LINKTAGID</primaryKey> + <name>2d72b86c-d2f6-46c9-bd82-5781ca93c630</name> + <tableName>WEBLINKTAG</tableName> + <primaryKey>WEBLINKTAGID</primaryKey> <isUIDTable v="true" /> <readonly v="false" /> </linkInformation> diff --git a/entity/LinkTag_entity/entityfields/date_edit/valueProcess.js b/entity/WeblinkTag_entity/entityfields/date_edit/valueProcess.js similarity index 100% rename from entity/LinkTag_entity/entityfields/date_edit/valueProcess.js rename to entity/WeblinkTag_entity/entityfields/date_edit/valueProcess.js diff --git a/entity/LinkTag_entity/entityfields/date_new/valueProcess.js b/entity/WeblinkTag_entity/entityfields/date_new/valueProcess.js similarity index 100% rename from entity/LinkTag_entity/entityfields/date_new/valueProcess.js rename to entity/WeblinkTag_entity/entityfields/date_new/valueProcess.js diff --git a/entity/LinkTag_entity/entityfields/keywordlinktags/children/containername_param/valueProcess.js b/entity/WeblinkTag_entity/entityfields/keywordlinktags/children/containername_param/valueProcess.js similarity index 100% rename from entity/LinkTag_entity/entityfields/keywordlinktags/children/containername_param/valueProcess.js rename to entity/WeblinkTag_entity/entityfields/keywordlinktags/children/containername_param/valueProcess.js diff --git a/entity/LinkTag_entity/entityfields/tag/displayValueProcess.js b/entity/WeblinkTag_entity/entityfields/tag/displayValueProcess.js similarity index 100% rename from entity/LinkTag_entity/entityfields/tag/displayValueProcess.js rename to entity/WeblinkTag_entity/entityfields/tag/displayValueProcess.js diff --git a/entity/LinkTag_entity/entityfields/user_edit/valueProcess.js b/entity/WeblinkTag_entity/entityfields/user_edit/valueProcess.js similarity index 100% rename from entity/LinkTag_entity/entityfields/user_edit/valueProcess.js rename to entity/WeblinkTag_entity/entityfields/user_edit/valueProcess.js diff --git a/entity/LinkTag_entity/entityfields/user_new/valueProcess.js b/entity/WeblinkTag_entity/entityfields/user_new/valueProcess.js similarity index 100% rename from entity/LinkTag_entity/entityfields/user_new/valueProcess.js rename to entity/WeblinkTag_entity/entityfields/user_new/valueProcess.js diff --git a/entity/LinkTag_entity/entityfields/link_id/valueProcess.js b/entity/WeblinkTag_entity/entityfields/weblink_id/valueProcess.js similarity index 78% rename from entity/LinkTag_entity/entityfields/link_id/valueProcess.js rename to entity/WeblinkTag_entity/entityfields/weblink_id/valueProcess.js index 255a9f02f7..927a984275 100644 --- a/entity/LinkTag_entity/entityfields/link_id/valueProcess.js +++ b/entity/WeblinkTag_entity/entityfields/weblink_id/valueProcess.js @@ -5,4 +5,4 @@ import("system.neon"); if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) - result.string(vars.get("$param.LinkId_param")) \ No newline at end of file + result.string(vars.get("$param.WeblinkId_param")) \ No newline at end of file diff --git a/entity/LinkTag_entity/grantUpdateProcess.js b/entity/WeblinkTag_entity/grantUpdateProcess.js similarity index 100% rename from entity/LinkTag_entity/grantUpdateProcess.js rename to entity/WeblinkTag_entity/grantUpdateProcess.js diff --git a/entity/LinkTag_entity/onInit.js b/entity/WeblinkTag_entity/onInit.js similarity index 100% rename from entity/LinkTag_entity/onInit.js rename to entity/WeblinkTag_entity/onInit.js diff --git a/entity/WeblinkTag_entity/recordcontainers/db/conditionProcess.js b/entity/WeblinkTag_entity/recordcontainers/db/conditionProcess.js new file mode 100644 index 0000000000..1c1f407304 --- /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/Link_entity/Link_entity.aod b/entity/Weblink_entity/Weblink_entity.aod similarity index 58% rename from entity/Link_entity/Link_entity.aod rename to entity/Weblink_entity/Weblink_entity.aod index 0c37357fc5..79e7260f73 100644 --- a/entity/Link_entity/Link_entity.aod +++ b/entity/Weblink_entity/Weblink_entity.aod @@ -1,9 +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"> - <name>Link_entity</name> + <name>Weblink_entity</name> <title>Weblink</title> <majorModelMode>DISTRIBUTED</majorModelMode> - <contentTitleProcess>%aditoprj%/entity/Link_entity/contentTitleProcess.js</contentTitleProcess> + <contentTitleProcess>%aditoprj%/entity/Weblink_entity/contentTitleProcess.js</contentTitleProcess> <iconId>NEON:FILTER</iconId> <titlePlural>Weblinks</titlePlural> <recordContainer>db</recordContainer> @@ -15,19 +15,19 @@ <name>URL</name> <title>Url</title> <mandatory v="true" /> - <stateProcess>%aditoprj%/entity/Link_entity/entityfields/url/stateProcess.js</stateProcess> - <onValidation>%aditoprj%/entity/Link_entity/entityfields/url/onValidation.js</onValidation> + <stateProcess>%aditoprj%/entity/Weblink_entity/entityfields/url/stateProcess.js</stateProcess> + <onValidation>%aditoprj%/entity/Weblink_entity/entityfields/url/onValidation.js</onValidation> </entityField> <entityField> - <name>LINKID</name> + <name>WEBLINKID</name> </entityField> <entityField> <name>DATE_NEW</name> - <valueProcess>%aditoprj%/entity/Link_entity/entityfields/date_new/valueProcess.js</valueProcess> + <valueProcess>%aditoprj%/entity/Weblink_entity/entityfields/date_new/valueProcess.js</valueProcess> </entityField> <entityField> <name>USER_NEW</name> - <valueProcess>%aditoprj%/entity/Link_entity/entityfields/user_new/valueProcess.js</valueProcess> + <valueProcess>%aditoprj%/entity/Weblink_entity/entityfields/user_new/valueProcess.js</valueProcess> </entityField> <entityField> <name>DATE_EDIT</name> @@ -40,7 +40,7 @@ <title>Punktzahl</title> <contentType>NUMBER</contentType> <outputFormat>#' Punkte'</outputFormat> - <valueProcess>%aditoprj%/entity/Link_entity/entityfields/score/valueProcess.js</valueProcess> + <valueProcess>%aditoprj%/entity/Weblink_entity/entityfields/score/valueProcess.js</valueProcess> </entityField> <entityField> <name>LINKTYPE</name> @@ -57,20 +57,20 @@ <selectionMode>MULTI</selectionMode> <dependency> <name>dependency</name> - <entityName>LinkTag_entity</entityName> + <entityName>WeblinkTag_entity</entityName> <fieldName>Tags</fieldName> </dependency> <children> <entityParameter> - <name>LinkId_param</name> - <valueProcess>%aditoprj%/entity/Link_entity/entityfields/webtrackingtags/children/webtrackingurl/valueProcess.js</valueProcess> + <name>WeblinkId_param</name> + <valueProcess>%aditoprj%/entity/Weblink_entity/entityfields/webtrackingtags/children/linkid_param/valueProcess.js</valueProcess> </entityParameter> </children> </entityConsumer> <entityField> <name>LINKTYPE_ICON</name> <contentType>IMAGE</contentType> - <valueProcess>%aditoprj%/entity/Link_entity/entityfields/linktype_icon/valueProcess.js</valueProcess> + <valueProcess>%aditoprj%/entity/Weblink_entity/entityfields/linktype_icon/valueProcess.js</valueProcess> </entityField> <entityProvider> <name>#PROVIDER_AGGREGATES</name> @@ -86,28 +86,28 @@ <children> <entityParameter> <name>ContainerName_param</name> - <valueProcess>%aditoprj%/entity/Link_entity/entityfields/keywordlinktype/children/containername_param/valueProcess.js</valueProcess> + <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/Link_entity/entityfields/placeholder/stateProcess.js</stateProcess> - <displayValueProcess>%aditoprj%/entity/Link_entity/entityfields/placeholder/displayValueProcess.js</displayValueProcess> - <onValidation>%aditoprj%/entity/Link_entity/entityfields/placeholder/onValidation.js</onValidation> + <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>LinkClick_entity</entityName> + <entityName>WeblinkClick_entity</entityName> <fieldName>#PROVIDER</fieldName> </dependency> <children> <entityParameter> - <name>LinkId_param</name> - <valueProcess>%aditoprj%/entity/Link_entity/entityfields/clicks/children/linkid_param/valueProcess.js</valueProcess> + <name>WeblinkId_param</name> + <valueProcess>%aditoprj%/entity/Weblink_entity/entityfields/clicks/children/linkid_param/valueProcess.js</valueProcess> </entityParameter> </children> </entityConsumer> @@ -123,84 +123,84 @@ <name>WORKFLOWPROCESSDEFINITION_KEY</name> <title>Workflow</title> <consumer>WorkflowDefinitions</consumer> - <stateProcess>%aditoprj%/entity/Link_entity/entityfields/workflowprocessdefinition_key/stateProcess.js</stateProcess> - <displayValueProcess>%aditoprj%/entity/Link_entity/entityfields/workflowprocessdefinition_key/displayValueProcess.js</displayValueProcess> + <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/Link_entity/entityfields/isredirect/stateProcess.js</stateProcess> - <valueProcess>%aditoprj%/entity/Link_entity/entityfields/isredirect/valueProcess.js</valueProcess> + <stateProcess>%aditoprj%/entity/Weblink_entity/entityfields/isredirect/stateProcess.js</stateProcess> + <valueProcess>%aditoprj%/entity/Weblink_entity/entityfields/isredirect/valueProcess.js</valueProcess> </entityField> </entityFields> <recordContainers> <dbRecordContainer> <name>db</name> - <conditionProcess>%aditoprj%/entity/Link_entity/recordcontainers/db/conditionProcess.js</conditionProcess> - <orderClauseProcess>%aditoprj%/entity/Link_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess> + <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>LINK.DATE_EDIT</recordfield> + <recordfield>WEBLINK.DATE_EDIT</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>DATE_NEW.value</name> - <recordfield>LINK.DATE_NEW</recordfield> + <recordfield>WEBLINK.DATE_NEW</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> - <name>LINKID.value</name> - <recordfield>LINK.LINKID</recordfield> + <name>WEBLINKID.value</name> + <recordfield>WEBLINK.WEBLINKID</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>SCORE.value</name> - <recordfield>LINK.SCORE</recordfield> + <recordfield>WEBLINK.SCORE</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>URL.value</name> - <recordfield>LINK.URL</recordfield> + <recordfield>WEBLINK.URL</recordfield> <isFilterable v="true" /> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>LINKTYPE.value</name> - <recordfield>LINK.LINKTYPE</recordfield> + <recordfield>WEBLINK.LINKTYPE</recordfield> <isFilterable v="true" /> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>USER_EDIT.value</name> - <recordfield>LINK.USER_EDIT</recordfield> + <recordfield>WEBLINK.USER_EDIT</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>USER_NEW.value</name> - <recordfield>LINK.USER_NEW</recordfield> + <recordfield>WEBLINK.USER_NEW</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>Tags.value</name> - <expression>%aditoprj%/entity/Link_entity/recordcontainers/db/recordfieldmappings/tags.value/expression.js</expression> + <expression>%aditoprj%/entity/Weblink_entity/recordcontainers/db/recordfieldmappings/tags.value/expression.js</expression> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>LINKTYPE.displayValue</name> - <expression>%aditoprj%/entity/Link_entity/recordcontainers/db/recordfieldmappings/urltype.displayvalue/expression.js</expression> + <expression>%aditoprj%/entity/Weblink_entity/recordcontainers/db/recordfieldmappings/linktype.displayvalue/expression.js</expression> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>PLACEHOLDER.value</name> - <recordfield>LINK.PLACEHOLDER</recordfield> + <recordfield>WEBLINK.PLACEHOLDER</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>WORKFLOWPROCESSDEFINITION_KEY.value</name> - <recordfield>LINK.WORKFLOWPROCESSDEFINITION_KEY</recordfield> + <recordfield>WEBLINK.WORKFLOWPROCESSDEFINITION_KEY</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>ISREDIRECT.value</name> - <recordfield>LINK.ISREDIRECT</recordfield> + <recordfield>WEBLINK.ISREDIRECT</recordfield> </dbRecordFieldMapping> </recordFieldMappings> <linkInformation> <linkInformation> - <name>4f64a314-f1c1-4f56-8b9c-f38e17a7ac74</name> - <tableName>LINK</tableName> - <primaryKey>LINKID</primaryKey> + <name>d7ef8574-3b73-4435-93f6-74bb60a86c1b</name> + <tableName>WEBLINK</tableName> + <primaryKey>WEBLINKID</primaryKey> <isUIDTable v="true" /> <readonly v="false" /> </linkInformation> diff --git a/entity/Link_entity/contentTitleProcess.js b/entity/Weblink_entity/contentTitleProcess.js similarity index 100% rename from entity/Link_entity/contentTitleProcess.js rename to entity/Weblink_entity/contentTitleProcess.js diff --git a/entity/Link_entity/entityfields/clicks/children/linkid_param/valueProcess.js b/entity/Weblink_entity/entityfields/clicks/children/linkid_param/valueProcess.js similarity index 52% rename from entity/Link_entity/entityfields/clicks/children/linkid_param/valueProcess.js rename to entity/Weblink_entity/entityfields/clicks/children/linkid_param/valueProcess.js index bfece7cf1e..39f7dede61 100644 --- a/entity/Link_entity/entityfields/clicks/children/linkid_param/valueProcess.js +++ b/entity/Weblink_entity/entityfields/clicks/children/linkid_param/valueProcess.js @@ -1,4 +1,4 @@ import("system.vars"); import("system.result"); -result.string(vars.get("$field.LINKID")); \ No newline at end of file +result.string(vars.get("$field.WEBLINKID")); \ No newline at end of file diff --git a/entity/Link_entity/entityfields/date_new/valueProcess.js b/entity/Weblink_entity/entityfields/date_new/valueProcess.js similarity index 100% rename from entity/Link_entity/entityfields/date_new/valueProcess.js rename to entity/Weblink_entity/entityfields/date_new/valueProcess.js diff --git a/entity/Link_entity/entityfields/isredirect/stateProcess.js b/entity/Weblink_entity/entityfields/isredirect/stateProcess.js similarity index 82% rename from entity/Link_entity/entityfields/isredirect/stateProcess.js rename to entity/Weblink_entity/entityfields/isredirect/stateProcess.js index 52dfd24468..31b3cd25a6 100644 --- a/entity/Link_entity/entityfields/isredirect/stateProcess.js +++ b/entity/Weblink_entity/entityfields/isredirect/stateProcess.js @@ -5,7 +5,7 @@ import("system.neon"); var linktype = vars.get("$field.LINKTYPE"); -if (linktype == $KeywordRegistry.linkType$EMail()) +if (linktype == $KeywordRegistry.weblinkType$EMail()) { result.string(neon.COMPONENTSTATE_EDITABLE); } diff --git a/entity/Link_entity/entityfields/isredirect/valueProcess.js b/entity/Weblink_entity/entityfields/isredirect/valueProcess.js similarity index 100% rename from entity/Link_entity/entityfields/isredirect/valueProcess.js rename to entity/Weblink_entity/entityfields/isredirect/valueProcess.js 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 0000000000..05de1cabb8 --- /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/Link_entity/entityfields/linktype_icon/valueProcess.js b/entity/Weblink_entity/entityfields/linktype_icon/valueProcess.js similarity index 100% rename from entity/Link_entity/entityfields/linktype_icon/valueProcess.js rename to entity/Weblink_entity/entityfields/linktype_icon/valueProcess.js diff --git a/entity/Link_entity/entityfields/placeholder/displayValueProcess.js b/entity/Weblink_entity/entityfields/placeholder/displayValueProcess.js similarity index 100% rename from entity/Link_entity/entityfields/placeholder/displayValueProcess.js rename to entity/Weblink_entity/entityfields/placeholder/displayValueProcess.js diff --git a/entity/Link_entity/entityfields/placeholder/onValidation.js b/entity/Weblink_entity/entityfields/placeholder/onValidation.js similarity index 70% rename from entity/Link_entity/entityfields/placeholder/onValidation.js rename to entity/Weblink_entity/entityfields/placeholder/onValidation.js index 1c1c14a472..394f99c96f 100644 --- a/entity/Link_entity/entityfields/placeholder/onValidation.js +++ b/entity/Weblink_entity/entityfields/placeholder/onValidation.js @@ -6,10 +6,10 @@ import("Sql_lib"); if (vars.get("$local.value")) { var defaultPlaceholders = PlaceholderUtils.getPlaceholders(); - var linkPlaceholders = newSelect("LINK.PLACEHOLDER") - .from("LINK") - .where("LINK.LINKID", vars.get("$field.LINKID"), SqlBuilder.NOT_EQUAL()) - .and("LINK.PLACEHOLDER is not null") + 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}); diff --git a/entity/Link_entity/entityfields/placeholder/stateProcess.js b/entity/Weblink_entity/entityfields/placeholder/stateProcess.js similarity index 82% rename from entity/Link_entity/entityfields/placeholder/stateProcess.js rename to entity/Weblink_entity/entityfields/placeholder/stateProcess.js index 6f8493a6ed..9be3319eef 100644 --- a/entity/Link_entity/entityfields/placeholder/stateProcess.js +++ b/entity/Weblink_entity/entityfields/placeholder/stateProcess.js @@ -6,7 +6,7 @@ import("system.neon"); var linktype = vars.get("$field.LINKTYPE") var res = neon.COMPONENTSTATE_INVISIBLE -if (linktype == $KeywordRegistry.linkType$EMail()) +if (linktype == $KeywordRegistry.weblinkType$EMail()) { res = neon.COMPONENTSTATE_EDITABLE; } diff --git a/entity/Link_entity/entityfields/score/valueProcess.js b/entity/Weblink_entity/entityfields/score/valueProcess.js similarity index 100% rename from entity/Link_entity/entityfields/score/valueProcess.js rename to entity/Weblink_entity/entityfields/score/valueProcess.js diff --git a/entity/Link_entity/entityfields/url/onValidation.js b/entity/Weblink_entity/entityfields/url/onValidation.js similarity index 84% rename from entity/Link_entity/entityfields/url/onValidation.js rename to entity/Weblink_entity/entityfields/url/onValidation.js index b793c34df7..789eb86303 100644 --- a/entity/Link_entity/entityfields/url/onValidation.js +++ b/entity/Weblink_entity/entityfields/url/onValidation.js @@ -6,7 +6,7 @@ import("Sql_lib"); if (vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW && vars.get("$local.value")) { - if (newSelect("URL").from("LINK").where("LINK.URL", vars.get("$local.value")).cell()) + 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"))) diff --git a/entity/Link_entity/entityfields/url/stateProcess.js b/entity/Weblink_entity/entityfields/url/stateProcess.js similarity index 100% rename from entity/Link_entity/entityfields/url/stateProcess.js rename to entity/Weblink_entity/entityfields/url/stateProcess.js diff --git a/entity/Link_entity/entityfields/user_new/valueProcess.js b/entity/Weblink_entity/entityfields/user_new/valueProcess.js similarity index 100% rename from entity/Link_entity/entityfields/user_new/valueProcess.js rename to entity/Weblink_entity/entityfields/user_new/valueProcess.js diff --git a/entity/Link_entity/entityfields/webtrackingtags/children/webtrackingurl/valueProcess.js b/entity/Weblink_entity/entityfields/webtrackingtags/children/webtrackingurl/valueProcess.js similarity index 52% rename from entity/Link_entity/entityfields/webtrackingtags/children/webtrackingurl/valueProcess.js rename to entity/Weblink_entity/entityfields/webtrackingtags/children/webtrackingurl/valueProcess.js index 6f028c8c8b..647f04b451 100644 --- a/entity/Link_entity/entityfields/webtrackingtags/children/webtrackingurl/valueProcess.js +++ b/entity/Weblink_entity/entityfields/webtrackingtags/children/webtrackingurl/valueProcess.js @@ -1,3 +1,3 @@ import("system.vars"); import("system.result"); -result.string(vars.get("$field.LINKID")); \ No newline at end of file +result.string(vars.get("$field.WEBLINKID")); \ No newline at end of file diff --git a/entity/Link_entity/entityfields/workflowprocessdefinition_key/displayValueProcess.js b/entity/Weblink_entity/entityfields/workflowprocessdefinition_key/displayValueProcess.js similarity index 100% rename from entity/Link_entity/entityfields/workflowprocessdefinition_key/displayValueProcess.js rename to entity/Weblink_entity/entityfields/workflowprocessdefinition_key/displayValueProcess.js diff --git a/entity/Link_entity/entityfields/workflowprocessdefinition_key/stateProcess.js b/entity/Weblink_entity/entityfields/workflowprocessdefinition_key/stateProcess.js similarity index 80% rename from entity/Link_entity/entityfields/workflowprocessdefinition_key/stateProcess.js rename to entity/Weblink_entity/entityfields/workflowprocessdefinition_key/stateProcess.js index 1fff908258..177f86ce6c 100644 --- a/entity/Link_entity/entityfields/workflowprocessdefinition_key/stateProcess.js +++ b/entity/Weblink_entity/entityfields/workflowprocessdefinition_key/stateProcess.js @@ -6,7 +6,7 @@ import("system.neon"); var linktype = vars.get("$field.LINKTYPE"); var redirect = vars.get("$field.ISREDIRECT"); -if (linktype == $KeywordRegistry.linkType$EMail() && redirect == "1") +if (linktype == $KeywordRegistry.weblinkType$EMail() && redirect == "1") { result.string(neon.COMPONENTSTATE_EDITABLE); diff --git a/entity/Link_entity/recordcontainers/db/conditionProcess.js b/entity/Weblink_entity/recordcontainers/db/conditionProcess.js similarity index 100% rename from entity/Link_entity/recordcontainers/db/conditionProcess.js rename to entity/Weblink_entity/recordcontainers/db/conditionProcess.js diff --git a/entity/Link_entity/recordcontainers/db/orderClauseProcess.js b/entity/Weblink_entity/recordcontainers/db/orderClauseProcess.js similarity index 67% rename from entity/Link_entity/recordcontainers/db/orderClauseProcess.js rename to entity/Weblink_entity/recordcontainers/db/orderClauseProcess.js index 9e8bad4287..38161951b9 100644 --- a/entity/Link_entity/recordcontainers/db/orderClauseProcess.js +++ b/entity/Weblink_entity/recordcontainers/db/orderClauseProcess.js @@ -1,5 +1,5 @@ import("system.result"); import("system.db"); result.object({ - "LINK.URL": db.ASCENDING + "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 0000000000..e69de29bb2 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 0000000000..cc71aa0d01 --- /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/Weblink_entity/recordcontainers/db/recordfieldmappings/urltype.displayvalue/expression.js b/entity/Weblink_entity/recordcontainers/db/recordfieldmappings/urltype.displayvalue/expression.js new file mode 100644 index 0000000000..92a7316b87 --- /dev/null +++ b/entity/Weblink_entity/recordcontainers/db/recordfieldmappings/urltype.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/WorkflowDefinition_entity/WorkflowDefinition_entity.aod b/entity/WorkflowDefinition_entity/WorkflowDefinition_entity.aod index 2e3b5cf4c7..97fcd7f503 100644 --- a/entity/WorkflowDefinition_entity/WorkflowDefinition_entity.aod +++ b/entity/WorkflowDefinition_entity/WorkflowDefinition_entity.aod @@ -30,7 +30,7 @@ </entityDependency> <entityDependency> <name>349ab9d2-edbb-4571-be14-3fb749bfff50</name> - <entityName>Link_entity</entityName> + <entityName>Weblink_entity</entityName> <fieldName>WorkflowDefinitions</fieldName> <isConsumer v="false" /> </entityDependency> diff --git a/neonContext/Link/Link.aod b/neonContext/Weblink/Weblink.aod similarity index 69% rename from neonContext/Link/Link.aod rename to neonContext/Weblink/Weblink.aod index 25e6154c35..375a57a0ff 100644 --- a/neonContext/Link/Link.aod +++ b/neonContext/Weblink/Weblink.aod @@ -1,34 +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>Link</name> + <name>Weblink</name> <title>Linkmanagement</title> <majorModelMode>DISTRIBUTED</majorModelMode> <icon>NEON:FILTER</icon> - <mainView>LinktMain_view</mainView> - <filterView>LinkFilter_view</filterView> - <editView>LinkEdit_view</editView> - <previewView>LinkPreview_view</previewView> - <entity>Link_entity</entity> + <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>LinkFilter_view</view> + <view>WeblinkFilter_view</view> </neonViewReference> <neonViewReference> <name>26c15847-68bf-4ae1-80c6-bf4aebe02d3c</name> - <view>LinkEdit_view</view> + <view>WeblinkEdit_view</view> </neonViewReference> <neonViewReference> <name>f5fd5e04-74a1-4c25-8237-9d6dcdc801f5</name> - <view>LinktMain_view</view> + <view>WeblinkMain_view</view> </neonViewReference> <neonViewReference> <name>466496bf-b703-4e94-be8c-33100a5516c6</name> - <view>LinkPreview_view</view> + <view>WeblinkPreview_view</view> </neonViewReference> <neonViewReference> <name>e1de7061-bc31-4dfb-bc5e-2e75db1c52ea</name> - <view>LinkDrawer_view</view> + <view>WeblinkDrawer_view</view> </neonViewReference> </references> </neonContext> diff --git a/neonContext/LinkClick/LinkClick.aod b/neonContext/WeblinkClick/WeblinkClick.aod similarity index 73% rename from neonContext/LinkClick/LinkClick.aod rename to neonContext/WeblinkClick/WeblinkClick.aod index b0a1810501..06f5518358 100644 --- a/neonContext/LinkClick/LinkClick.aod +++ b/neonContext/WeblinkClick/WeblinkClick.aod @@ -1,13 +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>LinkClick</name> + <name>WeblinkClick</name> <majorModelMode>DISTRIBUTED</majorModelMode> - <filterView>LinkClickFilter_view</filterView> - <entity>LinkClick_entity</entity> + <filterView>WeblinkClickFilter_view</filterView> + <entity>WeblinkClick_entity</entity> <references> <neonViewReference> <name>27fd3309-5cb7-4e27-85e3-68ce4ad2e60e</name> - <view>LinkClickFilter_view</view> + <view>WeblinkClickFilter_view</view> </neonViewReference> </references> </neonContext> diff --git a/neonContext/LinkTag/LinkTag.aod b/neonContext/WeblinkTag/WeblinkTag.aod similarity index 70% rename from neonContext/LinkTag/LinkTag.aod rename to neonContext/WeblinkTag/WeblinkTag.aod index 3234a45f33..e34c5dcd3b 100644 --- a/neonContext/LinkTag/LinkTag.aod +++ b/neonContext/WeblinkTag/WeblinkTag.aod @@ -1,22 +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>LinkTag</name> + <name>WeblinkTag</name> <majorModelMode>DISTRIBUTED</majorModelMode> - <filterView>LinkTagFilter_view</filterView> - <editView>LinkTagEdit_view</editView> - <entity>LinkTag_entity</entity> + <filterView>WeblinkTagFilter_view</filterView> + <editView>WeblinkTagEdit_view</editView> + <entity>WeblinkTag_entity</entity> <references> <neonViewReference> <name>c4a7ba88-dd7e-4471-ae17-450602216475</name> - <view>LinkTagFilter_view</view> + <view>WeblinkTagFilter_view</view> </neonViewReference> <neonViewReference> <name>51e9185c-cd69-483e-b618-fbb27cf8912b</name> - <view>LinkTagEdit_view</view> + <view>WeblinkTagEdit_view</view> </neonViewReference> <neonViewReference> <name>77247264-cea7-4fb3-8f94-d172213faac8</name> - <view>LinkTagMultiEdit_view</view> + <view>WeblinkTagMultiEdit_view</view> </neonViewReference> </references> </neonContext> diff --git a/neonView/BulkMailMain_view/BulkMailMain_view.aod b/neonView/BulkMailMain_view/BulkMailMain_view.aod index 86095cc750..82edef3461 100644 --- a/neonView/BulkMailMain_view/BulkMailMain_view.aod +++ b/neonView/BulkMailMain_view/BulkMailMain_view.aod @@ -37,7 +37,7 @@ <neonViewReference> <name>bd3876a9-492e-4e2e-bcca-e86455475dca</name> <entityField>Clicks</entityField> - <view>LinkClickFilter_view</view> + <view>WeblinkClickFilter_view</view> </neonViewReference> <neonViewReference> <name>49eb2dd2-0df9-4b58-bdae-f941200be8d9</name> diff --git a/neonView/LinktMain_view/LinktMain_view.aod b/neonView/LinktMain_view/WeblinkMain_view.aod similarity index 85% rename from neonView/LinktMain_view/LinktMain_view.aod rename to neonView/LinktMain_view/WeblinkMain_view.aod index 677f6043a9..b98b9afa1e 100644 --- a/neonView/LinktMain_view/LinktMain_view.aod +++ b/neonView/LinktMain_view/WeblinkMain_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>LinktMain_view</name> + <name>WeblinkMain_view</name> <majorModelMode>DISTRIBUTED</majorModelMode> <layout> <masterSlaveLayout> @@ -12,17 +12,17 @@ <neonViewReference> <name>a9bd300d-4c93-4d04-b6bc-ca007a834a51</name> <entityField>#ENTITY</entityField> - <view>LinkPreview_view</view> + <view>WeblinkPreview_view</view> </neonViewReference> <neonViewReference> <name>4318f521-5462-4767-bd9b-6966cf2e4734</name> <entityField>#ENTITY</entityField> - <view>LinkDrawer_view</view> + <view>WeblinkDrawer_view</view> </neonViewReference> <neonViewReference> <name>303de4e6-03de-419d-9875-42e10b912a1f</name> <entityField>Clicks</entityField> - <view>LinkClickFilter_view</view> + <view>WeblinkClickFilter_view</view> </neonViewReference> </children> </neonView> diff --git a/neonView/LinkClickFilter_view/LinkClickFilter_view.aod b/neonView/WeblinkClickFilter_view/WeblinkClickFilter_view.aod similarity index 97% rename from neonView/LinkClickFilter_view/LinkClickFilter_view.aod rename to neonView/WeblinkClickFilter_view/WeblinkClickFilter_view.aod index 5a3ac3d04c..7874f86a6e 100644 --- a/neonView/LinkClickFilter_view/LinkClickFilter_view.aod +++ b/neonView/WeblinkClickFilter_view/WeblinkClickFilter_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>LinkClickFilter_view</name> + <name>WeblinkClickFilter_view</name> <majorModelMode>DISTRIBUTED</majorModelMode> <filterable v="true" /> <layout> diff --git a/neonView/LinkDrawer_view/LinkDrawer_view.aod b/neonView/WeblinkDrawer_view/WeblinkDrawer_view.aod similarity index 89% rename from neonView/LinkDrawer_view/LinkDrawer_view.aod rename to neonView/WeblinkDrawer_view/WeblinkDrawer_view.aod index ff217947fd..4eb8096b64 100644 --- a/neonView/LinkDrawer_view/LinkDrawer_view.aod +++ b/neonView/WeblinkDrawer_view/WeblinkDrawer_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>LinkDrawer_view</name> + <name>WeblinkDrawer_view</name> <title>Weitere Informationen</title> <majorModelMode>DISTRIBUTED</majorModelMode> <layout> @@ -12,7 +12,7 @@ <neonViewReference> <name>92f84737-e546-4f97-842b-38f3a210e294</name> <entityField>WebtrackingTags</entityField> - <view>LinkTagFilter_view</view> + <view>WeblinkTagFilter_view</view> </neonViewReference> </children> </neonView> diff --git a/neonView/LinkEdit_view/LinkEdit_view.aod b/neonView/WeblinkEdit_view/WeblinkEdit_view.aod similarity index 95% rename from neonView/LinkEdit_view/LinkEdit_view.aod rename to neonView/WeblinkEdit_view/WeblinkEdit_view.aod index d579126cf9..8a245fb376 100644 --- a/neonView/LinkEdit_view/LinkEdit_view.aod +++ b/neonView/WeblinkEdit_view/WeblinkEdit_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>LinkEdit_view</name> + <name>WeblinkEdit_view</name> <majorModelMode>DISTRIBUTED</majorModelMode> <size>NORMAL</size> <layout> @@ -44,7 +44,7 @@ <neonViewReference> <name>0f6d1fc5-fbd9-443e-84a3-ffba18c3443a</name> <entityField>WebtrackingTags</entityField> - <view>LinkTagMultiEdit_view</view> + <view>WeblinkTagMultiEdit_view</view> </neonViewReference> </children> </neonView> diff --git a/neonView/LinkFilter_view/LinkFilter_view.aod b/neonView/WeblinkFilter_view/WeblinkFilter_view.aod similarity index 97% rename from neonView/LinkFilter_view/LinkFilter_view.aod rename to neonView/WeblinkFilter_view/WeblinkFilter_view.aod index 87805032ae..193c98458b 100644 --- a/neonView/LinkFilter_view/LinkFilter_view.aod +++ b/neonView/WeblinkFilter_view/WeblinkFilter_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>LinkFilter_view</name> + <name>WeblinkFilter_view</name> <majorModelMode>DISTRIBUTED</majorModelMode> <filterable v="true" /> <layout> diff --git a/neonView/LinkPreview_view/LinkPreview_view.aod b/neonView/WeblinkPreview_view/WeblinkPreview_view.aod similarity index 97% rename from neonView/LinkPreview_view/LinkPreview_view.aod rename to neonView/WeblinkPreview_view/WeblinkPreview_view.aod index d665692929..3feb2f988f 100644 --- a/neonView/LinkPreview_view/LinkPreview_view.aod +++ b/neonView/WeblinkPreview_view/WeblinkPreview_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>LinkPreview_view</name> + <name>WeblinkPreview_view</name> <majorModelMode>DISTRIBUTED</majorModelMode> <layout> <headerFooterLayout> diff --git a/neonView/LinkTagEdit_view/LinkTagEdit_view.aod b/neonView/WeblinkTagEdit_view/WeblinkTagEdit_view.aod similarity index 95% rename from neonView/LinkTagEdit_view/LinkTagEdit_view.aod rename to neonView/WeblinkTagEdit_view/WeblinkTagEdit_view.aod index d2b46782f8..3e2e9c2e96 100644 --- a/neonView/LinkTagEdit_view/LinkTagEdit_view.aod +++ b/neonView/WeblinkTagEdit_view/WeblinkTagEdit_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>LinkTagEdit_view</name> + <name>WeblinkTagEdit_view</name> <majorModelMode>DISTRIBUTED</majorModelMode> <size>SMALL</size> <layout> diff --git a/neonView/LinkTagFilter_view/LinkTagFilter_view.aod b/neonView/WeblinkTagFilter_view/WeblinkTagFilter_view.aod similarity index 95% rename from neonView/LinkTagFilter_view/LinkTagFilter_view.aod rename to neonView/WeblinkTagFilter_view/WeblinkTagFilter_view.aod index aa405333e0..ab82dd3c04 100644 --- a/neonView/LinkTagFilter_view/LinkTagFilter_view.aod +++ b/neonView/WeblinkTagFilter_view/WeblinkTagFilter_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>LinkTagFilter_view</name> + <name>WeblinkTagFilter_view</name> <majorModelMode>DISTRIBUTED</majorModelMode> <layout> <noneLayout> diff --git a/neonView/LinkTagMultiEdit_view/LinkTagMultiEdit_view.aod b/neonView/WeblinkTagMultiEdit_view/WeblinkTagMultiEdit_view.aod similarity index 95% rename from neonView/LinkTagMultiEdit_view/LinkTagMultiEdit_view.aod rename to neonView/WeblinkTagMultiEdit_view/WeblinkTagMultiEdit_view.aod index 39f46a033e..e70d8e9017 100644 --- a/neonView/LinkTagMultiEdit_view/LinkTagMultiEdit_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>LinkTagMultiEdit_view</name> + <name>WeblinkTagMultiEdit_view</name> <majorModelMode>DISTRIBUTED</majorModelMode> <layout> <boxLayout> diff --git a/process/Bulkmail_lib/process.js b/process/Bulkmail_lib/process.js index ddcca62fba..6261b7d596 100644 --- a/process/Bulkmail_lib/process.js +++ b/process/Bulkmail_lib/process.js @@ -544,12 +544,11 @@ BulkMailUtils.getEmlFile = function(pBulkMailId,pMailRunId, pMailLogId) **/ BulkMailUtils.getRedirectLink = function(pLinkId) { - var url ; if (pLinkId) { - url =newSelect("LINK.URL").from("LINK").where("LINK.LINKID", pLinkId).cell(); + return newSelect("WEBLINK.URL").from("WEBLINK").where("WEBLINK.WEBLINKID", pLinkId).cell(); } - return url; + return null; } /* *Inserts the Redirect into the link_click table. @@ -574,20 +573,26 @@ BulkMailUtils.insertClick = function(pMailLogId,pIpAddress,pLinkId,pBrowsername, { if (!pMailLogId || !pLinkId) { - return + return; } - var link_clickid = util.getNewUUID(); - db.insertData("LINK_CLICK" - , ["LINK_CLICKID","LINK_ID","DEVICE_TYPE","OPERATING_SYSTEM","BROWSER","IP_ADDRESS","MAIL_LOG_ID","DATE_OPENED"] - ,null - , [link_clickid,pLinkId,pDeviceType||"desktop",pOperatingSystemName||"",pBrowsername||"",pIpAddress,pMailLogId,vars.get("$sys.date")] - ); + 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") - .updateData(true, "MAIL_LOG", ["MAIL_LOG.OPENER_LINK_CLICK_ID"], null, [link_clickid]); + .and("MAIL_LOG.OPENER_LINK_CLICK_ID is null") + .updateFields({"OPENER_LINK_CLICK_ID": linkClickId}); } /*@TODO: Abändern nachdem geklärt ist wie wir IP-Adresse erhalten. Momentan bekommen wir nur Loadbalancer Ip. @@ -596,21 +601,16 @@ BulkMailUtils.insertClick = function(pMailLogId,pIpAddress,pLinkId,pBrowsername, BulkMailUtils.getIpAddressFromHeader = function(pHttpHeader) { - - var ipAddress; - - ipAddress = pHttpHeader["X-forwarded-for"].split(",")[0]; - - return ipAddress; + return pHttpHeader["X-forwarded-for"].split(",")[0]; } -BulkMailUtils.startBulkmailWorkFlow = function(pMailLogId,pLinkId) +BulkMailUtils.startBulkmailWorkFlow = function(pMailLogId, pLinkId) { if (!pMailLogId || !pLinkId) { return } - var workFlowKey = newSelect("WORKFLOWPROCESSDEFINITION_KEY").from("LINK").where("LINK.LINKID",pLinkId).cell(); + var workFlowKey = newSelect("WORKFLOWPROCESSDEFINITION_KEY").from("WEBLINK").where("WEBLINK.WEBLINKID", pLinkId).cell(); if (workFlowKey) { var variables = { diff --git a/process/KeywordRegistry_basic/process.js b/process/KeywordRegistry_basic/process.js index a93b4ea148..6639de882d 100644 --- a/process/KeywordRegistry_basic/process.js +++ b/process/KeywordRegistry_basic/process.js @@ -377,8 +377,8 @@ $KeywordRegistry.communicationChannelType$global = function(){return "COMMUNICAT $KeywordRegistry.communicationChannelType$communication = function(){return "COMMUNICATIONCHANNEL_COMMUNICATION";}; $KeywordRegistry.communicationChannelType$address = function(){return "COMMUNICATIONCHANNEL_ADDRESS";}; -$KeywordRegistry.linkType = function(){return "LINKTYPE";}; -$KeywordRegistry.linkType$EMail = function() {return "EMAIL"}; +$KeywordRegistry.weblinkType = function(){return "WeblinkType";}; +$KeywordRegistry.weblinkType$EMail = function() {return "WEBLINK_EMAIL"}; $KeywordRegistry.interestStatus = function(){return "InterestStatus";}; $KeywordRegistry.interestStatus$active = function(){return "INTEREST_ACTIVE";}; diff --git a/process/Placeholder_lib/process.js b/process/Placeholder_lib/process.js index 9537a85536..f9d5255fa6 100644 --- a/process/Placeholder_lib/process.js +++ b/process/Placeholder_lib/process.js @@ -131,10 +131,10 @@ PlaceholderUtils.getRegexpMatchAll = function () */ PlaceholderUtils.getLinkPlaceholders = function () { - var links = newSelect("LINK.PLACEHOLDER,LINK.URL") - .from("LINK") - .where("LINK.LINKTYPE", $KeywordRegistry.linkType$EMail()) - .and("LINK.PLACEHOLDER IS NOT NULL") + 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])}); diff --git a/process/migrateKeywordContainers/migrateKeywordContainers.aod b/process/migrateKeywordContainers/migrateKeywordContainers.aod index f75e961175..94eb478fa0 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/redirect_rest/process.js b/process/redirect_rest/process.js index c567e0b992..966602c69e 100644 --- a/process/redirect_rest/process.js +++ b/process/redirect_rest/process.js @@ -7,7 +7,6 @@ import("UserAgentParser_lib"); function restget (pRequest) { - var request = JSON.parse(pRequest); var linkId = request.query.link; var mailLogId = request.query.log; @@ -15,12 +14,9 @@ function restget (pRequest) 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.insertClick(mailLogId, ipAddress, linkId, UserAgentObject.browser.name, UserAgentObject.os.name, UserAgentObject.device.type); - BulkMailUtils.startBulkmailWorkFlow(mailLogId,linkId); - - - + BulkMailUtils.startBulkmailWorkFlow(mailLogId, linkId); if (redirectLink) { -- GitLab From 592a17b0d8b25ad3ffccca4061073a82c5534278 Mon Sep 17 00:00:00 2001 From: "p.neub" <p.neub@adito.de> Date: Tue, 20 Apr 2021 09:58:20 +0200 Subject: [PATCH 081/242] [Projekt: xRM-Sales][TicketNr.: 1077380][Vertriebsprojektphasen werden angezeigt obwohl inaktiv gesetzt.] --- .../recordcontainers/jdito/contentProcess.js | 2 +- process/Keyword_lib/process.js | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/entity/SalesprojectPhase_entity/recordcontainers/jdito/contentProcess.js b/entity/SalesprojectPhase_entity/recordcontainers/jdito/contentProcess.js index c66d85815d..e957ab3b90 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/process/Keyword_lib/process.js b/process/Keyword_lib/process.js index 3f33564d88..4d7f8120f6 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(); -- GitLab From af250f3a64a66974ebc8c84694c9092e2d90af2c Mon Sep 17 00:00:00 2001 From: Martin Groppe <m.groppe@adito.de> Date: Tue, 20 Apr 2021 08:04:51 +0000 Subject: [PATCH 082/242] =?UTF-8?q?[Projekt:=20xRM-Marketing][TicketNr.:?= =?UTF-8?q?=201077132][Kontakt=20-=20mehr=20Teilnehmer=20zu=20Kampagne=20h?= =?UTF-8?q?inzuf=C3=BCgen=20als=20freie=20Pl=C3=A4tze=20in=20der=20Stufe?= =?UTF-8?q?=20-=20ALLE=20Kontakte=20werden=20hinzugef=C3=BCgt]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [Projekt: xRM-Marketing][TicketNr.: 1077129][Firma - mehr Teilnehmer zu Kampagne hinzufügen als freie Plätze in der Stufe - Hinweis fehlt] [Projekt: xRM-Marketing][TicketNr.: 1074532]["Teilgenommen" in Kampagnen-Übersicht: Keine Funktion] --- .../CampaignAddParticipants_entity.aod | 2 + .../addparticipants/onActionProcess.js | 66 +++++-------------- .../entityfields/campaign_id/onValidation.js | 23 +++---- .../entityfields/campaign_id/stateProcess.js | 10 +++ .../valueProcess.js | 12 ++-- .../campaignstep_id/onValidation.js | 21 ++++++ .../_____LANGUAGE_EXTRA.aod | 3 + .../_____LANGUAGE_de/_____LANGUAGE_de.aod | 12 ++++ .../_____LANGUAGE_en/_____LANGUAGE_en.aod | 5 +- process/Campaign_lib/process.js | 58 +++++++++++++++- 10 files changed, 140 insertions(+), 72 deletions(-) create mode 100644 entity/CampaignAddParticipants_entity/entityfields/campaign_id/stateProcess.js create mode 100644 entity/CampaignAddParticipants_entity/entityfields/campaignstep_id/onValidation.js diff --git a/entity/CampaignAddParticipants_entity/CampaignAddParticipants_entity.aod b/entity/CampaignAddParticipants_entity/CampaignAddParticipants_entity.aod index 8f088d3661..76ea4711eb 100644 --- a/entity/CampaignAddParticipants_entity/CampaignAddParticipants_entity.aod +++ b/entity/CampaignAddParticipants_entity/CampaignAddParticipants_entity.aod @@ -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> @@ -38,6 +39,7 @@ <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 b299466750..ceeb7e8662 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 c596003e42..f4f7ad8fa8 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 0000000000..31931105f9 --- /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 d1c7824536..6511d5abbe 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 0000000000..29f8f42cc5 --- /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 = 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/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index 7a23534af0..ace547bafe 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -8421,6 +8421,9 @@ <entry> <key>${SALESPROJECT_CONTACT}</key> </entry> + <entry> + <key>Not enough room in campaignstep</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 a0af84c151..9bc9a4c2d8 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -18,6 +18,10 @@ <key>Value is too big, the maximum is %0</key> <value>Wert ist zu groß, das Maximum ist %0</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> @@ -511,6 +515,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> @@ -1095,6 +1103,10 @@ <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>Days inactive</key> <value>Tage inaktiv</value> diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod index bdbd5793b3..751ad3ee72 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -8246,7 +8246,7 @@ </entry> <entry> <key>Value must be an integer</key> - </entry> + </entry> <entry> <key>Buyer</key> </entry> @@ -8433,6 +8433,9 @@ <key>${SALESPROJECT_CONTACT}</key> <value>Contact</value> </entry> + <entry> + <key>Not enough room in campaignstep</key> + </entry> </keyValueMap> <font name="Dialog" style="0" size="11" /> </language> diff --git a/process/Campaign_lib/process.js b/process/Campaign_lib/process.js index 7606f5621d..f488f0ee65 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> -- GitLab From 76f2f51d0d341e88e5b28ab0522b4296fd304ab1 Mon Sep 17 00:00:00 2001 From: Daniel Tran <d.tran@adito.de> Date: Tue, 20 Apr 2021 08:06:55 +0000 Subject: [PATCH 083/242] =?UTF-8?q?[Projekt:=20xRM-ContactManagement][Tick?= =?UTF-8?q?etNr.:=201074059][Email=5Flib:=20Parameter=20Anzahl=20/=20Reihe?= =?UTF-8?q?nfolge=20f=C3=BCr=20EmailWritingUtils.openNewMail()=20und=20Ema?= =?UTF-8?q?ilWritingUtils.sendReportAsMail()=20falsch.]=20-=20Removed=20le?= =?UTF-8?q?ading=20comma,=20to=20fix=20broken=20dsgvo=20report.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dispatchdsgvoreport/onActionProcess.js | 7 +++- .../entityfields/sendmail/onActionProcess.js | 2 +- .../dispatchofferreport/onActionProcess.js | 4 +- .../dispatchorderreport/onActionProcess.js | 8 ++-- .../dispatchreminderreport/onActionProcess.js | 4 +- .../entityfields/newemail/onActionProcess.js | 3 +- .../dispatchorgreport/onActionProcess.js | 6 ++- .../entityfields/newemail/onActionProcess.js | 3 +- process/Email_lib/process.js | 37 +++++++++++-------- 9 files changed, 43 insertions(+), 31 deletions(-) diff --git a/entity/DSGVOReport_entity/entityfields/dsgvoreportdispatch/children/dispatchdsgvoreport/onActionProcess.js b/entity/DSGVOReport_entity/entityfields/dsgvoreportdispatch/children/dispatchdsgvoreport/onActionProcess.js index e7ffc71bed..14f7406091 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/Email_entity/entityfields/sendmail/onActionProcess.js b/entity/Email_entity/entityfields/sendmail/onActionProcess.js index 0ee0af9d3e..8c93bbcfad 100644 --- a/entity/Email_entity/entityfields/sendmail/onActionProcess.js +++ b/entity/Email_entity/entityfields/sendmail/onActionProcess.js @@ -30,7 +30,7 @@ if (vars.exists("$param.AdditionalPlaceholders_param") && vars.get("$param.Addit }); } -var eml = EmailWritingUtils.openMailTemplate( +EmailWritingUtils.openMailTemplate( vars.get("$field.RECIPIENT"), EmployeeUtils.getCurrentContactId(), vars.get("$field.DOCUMENT_TEMPLATE"), diff --git a/entity/Offer_entity/entityfields/offerreportdispatch/children/dispatchofferreport/onActionProcess.js b/entity/Offer_entity/entityfields/offerreportdispatch/children/dispatchofferreport/onActionProcess.js index 8206598749..c9be3c8898 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/Order_entity/entityfields/orderreportdispatch/children/dispatchorderreport/onActionProcess.js b/entity/Order_entity/entityfields/orderreportdispatch/children/dispatchorderreport/onActionProcess.js index 53225e7adf..ae3cb6d252 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 7538162cac..17b3308011 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/Organisation_entity/entityfields/newemail/onActionProcess.js b/entity/Organisation_entity/entityfields/newemail/onActionProcess.js index a46efc111d..ae42fcf1df 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/orgreportdispatch/children/dispatchorgreport/onActionProcess.js b/entity/Organisation_entity/entityfields/orgreportdispatch/children/dispatchorgreport/onActionProcess.js index ca54b8d0ce..f5b721ea2e 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/newemail/onActionProcess.js b/entity/Person_entity/entityfields/newemail/onActionProcess.js index a4b80166ed..c4ff5861b8 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/process/Email_lib/process.js b/process/Email_lib/process.js index 8f560c533a..d8f0e6c990 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 () {} @@ -84,9 +85,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, @@ -96,7 +98,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) @@ -115,16 +117,18 @@ EmailWritingUtils.getMailbridgeAddress = function () * 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; @@ -136,7 +140,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); } /** -- GitLab From 6d75d439c715c956a21053b37426f188d2edc992 Mon Sep 17 00:00:00 2001 From: Pascal Neub <p.neub@adito.de> Date: Tue, 20 Apr 2021 12:23:39 +0000 Subject: [PATCH 084/242] [Projekt: xRM-Sales][TicketNr.: 1078056][Performanceproblem Checklisten ] --- .../ChecklistEntryValue_entity.aod | 42 +--- .../children/setcompleted/onActionProcess.js | 30 ++- .../verifier_param/valueProcess.js | 14 -- .../recordcontainers/jdito/contentProcess.js | 200 ++++-------------- .../recordcontainers/jdito/onUpdate.js | 10 - 5 files changed, 74 insertions(+), 222 deletions(-) delete mode 100644 entity/ChecklistEntryValue_entity/entityfields/verifier_param/valueProcess.js delete mode 100644 entity/ChecklistEntryValue_entity/recordcontainers/jdito/onUpdate.js diff --git a/entity/ChecklistEntryValue_entity/ChecklistEntryValue_entity.aod b/entity/ChecklistEntryValue_entity/ChecklistEntryValue_entity.aod index d883abe34f..33a0522dbe 100644 --- a/entity/ChecklistEntryValue_entity/ChecklistEntryValue_entity.aod +++ b/entity/ChecklistEntryValue_entity/ChecklistEntryValue_entity.aod @@ -5,7 +5,7 @@ <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,7 +58,6 @@ <entityProvider> <name>ChecklistEntryValues</name> <titlePlural>Checklist entries</titlePlural> - <recordContainer>jdito</recordContainer> <dependencies> <entityDependency> <name>7eae9b1e-cea7-4688-898a-754dba82eac7</name> @@ -76,13 +73,6 @@ </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> @@ -104,33 +94,26 @@ <entityField> <name>AUTO</name> <title>Automatically</title> + <contentType>BOOLEAN</contentType> </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>CHECKLISTENTRY_ID.value</name> - </jDitoRecordFieldMapping> - <jDitoRecordFieldMapping> - <name>CHECKLISTENTRYVALUEID.value</name> + <name>AUTO.value</name> </jDitoRecordFieldMapping> <jDitoRecordFieldMapping> - <name>DATE_EDIT.value</name> + <name>CHECKLISTENTRY_ID.value</name> </jDitoRecordFieldMapping> <jDitoRecordFieldMapping> - <name>DATE_NEW.value</name> + <name>CHECKLISTENTRY_ID.displayValue</name> </jDitoRecordFieldMapping> <jDitoRecordFieldMapping> <name>IS_FULFILLED.value</name> @@ -142,19 +125,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 86551188b3..ccff131335 100644 --- a/entity/ChecklistEntryValue_entity/entityfields/setchecklistentrycompleted/children/setcompleted/onActionProcess.js +++ b/entity/ChecklistEntryValue_entity/entityfields/setchecklistentrycompleted/children/setcompleted/onActionProcess.js @@ -1,7 +1,29 @@ +import("Util_lib"); +import("Sql_lib"); import("system.vars"); import("system.neon"); -import("Sql_lib"); -newWhere("CHECKLISTENTRYVALUE.CHECKLISTENTRYVALUEID", "$field.CHECKLISTENTRYVALUEID") - .updateFields({"IS_FULFILLED": parseInt(vars.get("$field.IS_FULFILLED")) > 0 ? 0 : 1}); -neon.refresh(); \ No newline at end of file +var fulfilledValue = Utils.toBoolean(vars.get("$field.IS_FULFILLED")) ? "0" : "1"; +var cond = newWhere("CHECKLISTENTRYVALUE.CHECKLISTENTRYVALUEID", vars.get("$field.UID")).toString(); + +if(Utils.toBoolean(newSelect("count(*)").from("CHECKLISTENTRYVALUE").where(cond).cell())) +{ + newWhere(cond).updateFields({ + IS_FULFILLED: fulfilledValue + }, "CHECKLISTENTRYVALUE"); +} +else +{ + new SqlBuilder().insertFields({ + CHECKLISTENTRYVALUEID: vars.get("$field.UID"), + CHECKLISTENTRY_ID: vars.get("$field.CHECKLISTENTRY_ID"), + 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/verifier_param/valueProcess.js b/entity/ChecklistEntryValue_entity/entityfields/verifier_param/valueProcess.js deleted file mode 100644 index bd99ebeed2..0000000000 --- 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 a17f5785d3..16a48ff022 100644 --- a/entity/ChecklistEntryValue_entity/recordcontainers/jdito/contentProcess.js +++ b/entity/ChecklistEntryValue_entity/recordcontainers/jdito/contentProcess.js @@ -1,172 +1,46 @@ -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.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][4] = data[i][4] || "0"; + data[i][5] = data[i][5] || vars.get("$param.ObjectRowId_param"); + data[i][6] = data[i][6] || vars.get("$param.ObjectType_param"); + data[i][8] = data[i][8] || datetime.date(); + data[i][10] = data[i][10] || 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][4] = 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 666ee575b4..0000000000 --- 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 -- GitLab From adb225f52e0ffedf47bd0dc4ac0e1cbc5a59cbc9 Mon Sep 17 00:00:00 2001 From: "p.neub" <p.neub@adito.de> Date: Tue, 20 Apr 2021 14:43:45 +0200 Subject: [PATCH 085/242] [Projekt: xRM-Sales][TicketNr.: 1078651][Umsatzsteuer im Angebot muss bearbeitbar sein] --- entity/Offeritem_entity/Offeritem_entity.aod | 1 - 1 file changed, 1 deletion(-) diff --git a/entity/Offeritem_entity/Offeritem_entity.aod b/entity/Offeritem_entity/Offeritem_entity.aod index 4b11ba39e1..6b56552944 100644 --- a/entity/Offeritem_entity/Offeritem_entity.aod +++ b/entity/Offeritem_entity/Offeritem_entity.aod @@ -127,7 +127,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> -- GitLab From 6b8cc02ff1c9d7a30d13354b7139dd4a6740e898 Mon Sep 17 00:00:00 2001 From: "p.neub" <p.neub@adito.de> Date: Tue, 20 Apr 2021 15:19:09 +0200 Subject: [PATCH 086/242] =?UTF-8?q?[Projekt:=20xRM-Sales][TicketNr.:=20107?= =?UTF-8?q?9209][Wahrscheinleichkeit=20bei=20Neuanlage=20Angebot=20kann=20?= =?UTF-8?q?nicht=20ge=C3=A4ndert=20werden]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entity/Offer_entity/entityfields/probability/valueProcess.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/entity/Offer_entity/entityfields/probability/valueProcess.js b/entity/Offer_entity/entityfields/probability/valueProcess.js index ad82690b02..72e0517304 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 -- GitLab From 79dfece17c0f7ae4665c440409307126ea812db3 Mon Sep 17 00:00:00 2001 From: "m.sieber" <m.sieber@adito.de> Date: Wed, 21 Apr 2021 10:45:36 +0200 Subject: [PATCH 087/242] Loggings entfernt + nur ein result im stateProcess --- .../children/openfileaction/stateProcess.js | 10 ++++++---- .../entityfields/opensinglefileaction/stateProcess.js | 10 ++++++---- process/Document_lib/process.js | 3 --- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/entity/Document_entity/entityfields/document_actions/children/openfileaction/stateProcess.js b/entity/Document_entity/entityfields/document_actions/children/openfileaction/stateProcess.js index ccd5442dd2..c35353a4e1 100644 --- a/entity/Document_entity/entityfields/document_actions/children/openfileaction/stateProcess.js +++ b/entity/Document_entity/entityfields/document_actions/children/openfileaction/stateProcess.js @@ -1,8 +1,10 @@ import("system.result"); import("Document_lib"); -var canOpen = DocumentUtil.canOpenSelectedDocument(); -if(canOpen) - result.string("EDITABLE"); +var openFileState; +if(DocumentUtil.canOpenSelectedDocument()) + openFileState = "EDITABLE"; else - result.string("INVISIBLE"); \ No newline at end of file + openFileState = "INVISIBLE"; + +result.string(openFileState); \ No newline at end of file diff --git a/entity/Document_entity/entityfields/opensinglefileaction/stateProcess.js b/entity/Document_entity/entityfields/opensinglefileaction/stateProcess.js index ccd5442dd2..c35353a4e1 100644 --- a/entity/Document_entity/entityfields/opensinglefileaction/stateProcess.js +++ b/entity/Document_entity/entityfields/opensinglefileaction/stateProcess.js @@ -1,8 +1,10 @@ import("system.result"); import("Document_lib"); -var canOpen = DocumentUtil.canOpenSelectedDocument(); -if(canOpen) - result.string("EDITABLE"); +var openFileState; +if(DocumentUtil.canOpenSelectedDocument()) + openFileState = "EDITABLE"; else - result.string("INVISIBLE"); \ No newline at end of file + openFileState = "INVISIBLE"; + +result.string(openFileState); \ No newline at end of file diff --git a/process/Document_lib/process.js b/process/Document_lib/process.js index 401cc598bc..f0d72efd44 100644 --- a/process/Document_lib/process.js +++ b/process/Document_lib/process.js @@ -1,4 +1,3 @@ -import("system.logging"); import("system.util"); import("system.translate"); import("system.result"); @@ -84,8 +83,6 @@ DocumentUtil.canOpenSelectedDocument = function() if(uids.length == 1) { - logging.log("type: " + rows[0]["TYPE"]); - logging.log("re: " + MimeTypes.canOpenMimeTypeInBrowser(rows[0]["TYPE"])); return MimeTypes.canOpenMimeTypeInBrowser(rows[0]["TYPE"]); } } -- GitLab From dbf54f8fe3d1c882767ba15ee607e1a6d96fbc6b Mon Sep 17 00:00:00 2001 From: "m.sieber" <m.sieber@adito.de> Date: Wed, 21 Apr 2021 14:21:13 +0200 Subject: [PATCH 088/242] neon.COMPONENTSTATE verwendet --- .../document_actions/children/openfileaction/stateProcess.js | 5 +++-- .../entityfields/opensinglefileaction/stateProcess.js | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/entity/Document_entity/entityfields/document_actions/children/openfileaction/stateProcess.js b/entity/Document_entity/entityfields/document_actions/children/openfileaction/stateProcess.js index c35353a4e1..d29ab3ca86 100644 --- a/entity/Document_entity/entityfields/document_actions/children/openfileaction/stateProcess.js +++ b/entity/Document_entity/entityfields/document_actions/children/openfileaction/stateProcess.js @@ -1,10 +1,11 @@ +import("system.neon"); import("system.result"); import("Document_lib"); var openFileState; if(DocumentUtil.canOpenSelectedDocument()) - openFileState = "EDITABLE"; + openFileState = neon.COMPONENTSTATE_EDITABLE; else - openFileState = "INVISIBLE"; + openFileState = neon.COMPONENTSTATE_INVISIBLE; result.string(openFileState); \ No newline at end of file diff --git a/entity/Document_entity/entityfields/opensinglefileaction/stateProcess.js b/entity/Document_entity/entityfields/opensinglefileaction/stateProcess.js index c35353a4e1..d29ab3ca86 100644 --- a/entity/Document_entity/entityfields/opensinglefileaction/stateProcess.js +++ b/entity/Document_entity/entityfields/opensinglefileaction/stateProcess.js @@ -1,10 +1,11 @@ +import("system.neon"); import("system.result"); import("Document_lib"); var openFileState; if(DocumentUtil.canOpenSelectedDocument()) - openFileState = "EDITABLE"; + openFileState = neon.COMPONENTSTATE_EDITABLE; else - openFileState = "INVISIBLE"; + openFileState = neon.COMPONENTSTATE_INVISIBLE; result.string(openFileState); \ No newline at end of file -- GitLab From a572e82ab38cdb809b7c593ccbcdd3a0a211759b Mon Sep 17 00:00:00 2001 From: Carolin Wimmer <c.wimmer@adito.de> Date: Thu, 22 Apr 2021 08:41:52 +0000 Subject: [PATCH 089/242] =?UTF-8?q?[Projekt:=20xRM-ContactManagement][Tick?= =?UTF-8?q?etNr.:=201073798][Telefonnummer=20-=20Validierung=20und=20Vorbe?= =?UTF-8?q?legung=20abh=C3=A4ngig=20vom=20Land=20in=20der=20Adresse=20der?= =?UTF-8?q?=20Firma]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../contactsmaincountry_param/valueProcess.js | 16 ++++++++- .../contactsmaincountry_param/valueProcess.js | 33 +++++++++++++++++-- 2 files changed, 46 insertions(+), 3 deletions(-) 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 04b4079531..e02b6634f4 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/Person_entity/entityfields/communications/children/contactsmaincountry_param/valueProcess.js b/entity/Person_entity/entityfields/communications/children/contactsmaincountry_param/valueProcess.js index 04b4079531..48e3079503 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 -- GitLab From 5aa1e0c3ec03c2cfc994fbbd03bc6621a5e703eb Mon Sep 17 00:00:00 2001 From: "m.sieber" <m.sieber@adito.de> Date: Thu, 22 Apr 2021 13:07:55 +0200 Subject: [PATCH 090/242] Methode umbenannt in openFile --- process/Document_lib/process.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/process/Document_lib/process.js b/process/Document_lib/process.js index f0d72efd44..ee264f730e 100644 --- a/process/Document_lib/process.js +++ b/process/Document_lib/process.js @@ -64,9 +64,9 @@ DocumentUtil.openSelectedDocument = function(pAssignmentName) if(binaryContents.length == 1) { if(pAssignmentName == "ERRORLOG") - neon.open(binaryContents[0], rows[0]["NAME"] + ".txt", rows[0]["TYPE"], false); + neon.openFile(binaryContents[0], rows[0]["NAME"] + ".txt", rows[0]["TYPE"], false); else - neon.open(binaryContents[0], rows[0]["NAME"], rows[0]["TYPE"], false); + neon.openFile(binaryContents[0], rows[0]["NAME"], rows[0]["TYPE"], false); } } } -- GitLab From d13c6e2daf10faf9fcc665f399f5e1d82434f3b2 Mon Sep 17 00:00:00 2001 From: Simon Leipold <s.leipold@adito.de> Date: Thu, 22 Apr 2021 11:25:38 +0000 Subject: [PATCH 091/242] [Projekt: Entwicklung - Neon][TicketNr.: 1078807][[Rollen] PROJECT_Rolle kann CUSTOM_Rolle als Kind zugewiesen werden, in der PROJECT_Rolle wird der Eintrag aber nicht gespeichert] --- .../child_role/dropDownProcess.js | 34 +++++++++---------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/entity/RoleChildren_entity/entityfields/child_role/dropDownProcess.js b/entity/RoleChildren_entity/entityfields/child_role/dropDownProcess.js index 8867a68b1c..0085da92a9 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 -- GitLab From 9d0a859ae4dc6b932951fc3f177a0ae2e34ea70f Mon Sep 17 00:00:00 2001 From: Pascal Neub <p.neub@adito.de> Date: Thu, 22 Apr 2021 12:55:12 +0000 Subject: [PATCH 092/242] move rebuilding all to serverProcess since it will allways be executed via an asyncronous serverProcess --- .../Duplicate/alter_unrelatedduplicates.xml | 24 + .../basic/2021.0.3/Duplicate/changelog.xml | 10 + .../Duplicate/create_hasduplicate.xml | 21 + .../Duplicate/drop_duplicateclusters.xml | 6 + ...drop_duplicatescannerresultfieldconfig.xml | 6 + .../Duplicate/migrate_unrelatedduplicates.xml | 23 + .../Data_alias/basic/2021.0.3/changelog.xml | 1 + aliasDefinition/Data_alias/Data_alias.aod | 281 +--- .../_____SYSTEM_APPLICATION_NEON.aod | 5 - .../recordcontainers/db/onDBDelete.js | 3 +- .../DuplicateOrganisation_entity.aod | 241 +++ .../ignoreduplicates/onActionProcess.js | 7 + .../children/ignoreduplicates/titleProcess.js | 9 + .../onActionProcess.js | 19 +- .../onActionProcess.js | 19 +- .../entityfields/id_param/valueProcess.js | 5 + .../containername_param/valueProcess.js | 5 + .../containername_param/valueProcess.js | 5 + .../picture/displayValueProcess.js | 11 + .../targetcontext/valueProcess.js | 4 + .../initFilterProcess.js | 15 + .../recordcontainers/db/conditionProcess.js | 8 + .../recordcontainers/db/fromClauseProcess.js | 14 + .../duplicate.value/expression.js | 7 + .../expression.js | 4 + .../expression.js | 4 + .../status.displayvalue/expression.js | 6 + .../type.displayvalue/expression.js | 6 + .../DuplicatePerson_entity.aod | 270 +++ .../ignoreduplicates/onActionProcess.js | 7 + .../children/ignoreduplicates/titleProcess.js | 9 + .../onActionProcess.js | 19 +- .../onActionProcess.js | 19 +- .../entityfields/id_param/valueProcess.js | 5 + .../containername_param/valueProcess.js | 5 + .../parentcontext/valueProcess.js | 4 + .../picture/displayValueProcess.js | 11 + .../initFilterProcess.js | 15 + .../recordcontainers/db/conditionProcess.js | 8 + .../recordcontainers/db/fromClauseProcess.js | 14 + .../duplicate.value/expression.js | 7 + .../expression.js | 5 + .../organisation_id.value/expression.js | 6 + .../expression.js | 4 + .../expression.js | 4 + .../status.displayvalue/expression.js | 5 + .../dbrecordcontainer/conditionProcess.js | 0 ...plicateScannerResultFieldConfig_entity.aod | 104 -- .../entityfields/date_edit/valueProcess.js | 7 - .../entityfields/date_new/valueProcess.js | 7 - .../duplicatescanner_id/valueProcess.js | 7 - .../entityfields/user_edit/valueProcess.js | 7 - .../entityfields/user_new/valueProcess.js | 7 - .../recordcontainer/conditionProcess.js | 5 - .../DuplicateScanner_entity.aod | 63 +- .../children/rebuild/onActionProcess.js | 34 + .../viewduplicates/onActionProcess.js | 35 + .../onActionProcess.js | 18 - .../onActionProcess.js | 18 - .../runactiongroup/documentation.adoc | 1 - .../duplicatescannerid_param/valueProcess.js | 3 - .../testduplicatescanner/onActionProcess.js | 432 ----- .../duplicatecount.value/expression.js | 13 + .../DuplicatesUnrelated_entity.aod | 91 - .../documentation.adoc | 3 - .../jditorecordcontainer/contentProcess.js | 73 - .../jditorecordcontainer/onDelete.js | 3 - .../Duplicates_entity/Duplicates_entity.aod | 234 --- entity/Duplicates_entity/documentation.adoc | 3 - .../ignorewholecluster/onActionProcess.js | 27 - .../valueProcess.js | 2 - .../onlyshowcontactids_param/valueProcess.js | 18 - .../valueProcess.js | 2 - .../onlyshowcontactids_param/valueProcess.js | 18 - .../children/clusterid_param/valueProcess.js | 5 - .../children/targetentity/valueProcess.js | 4 - .../children/clusterid_param/valueProcess.js | 6 - .../children/targetentity/valueProcess.js | 4 - .../onActionProcess.js | 12 - .../onActionProcess.js | 12 - .../children/clusterid_param/valueProcess.js | 5 - .../children/targetentity/valueProcess.js | 2 - .../children/clusterid_param/valueProcess.js | 6 - .../children/targetentity/valueProcess.js | 2 - .../titlePluralProcess.js | 3 - .../recordcontainer/contentProcess.js | 121 -- .../KeywordEntry_entity.aod | 18 + .../Organisation_entity.aod | 241 +-- .../ignoreduplicate/onActionProcess.js | 10 - .../children/ignoreduplicate/stateProcess.js | 11 - .../ignorewholecluster/onActionProcess.js | 21 - .../ignorewholecluster/stateProcess.js | 11 - .../stateProcess.js | 11 - .../stateProcess.js | 11 - .../duplicateactions/stateProcess.js | 11 - .../children/obj_param/valueProcess.js | 20 + .../duplicates/selectionModeProcess.js | 9 + .../nonselfduplicates/documentation.adoc | 3 - .../selfduplicates/documentation.adoc | 1 - .../valueProcess.js | 2 - .../valueProcess.js | 3 - .../excludedcontactids_param/valueProcess.js | 7 - .../onlyshowcontactids_param/valueProcess.js | 55 - .../Organisation_entity/initFilterProcess.js | 19 +- .../filterConditionProcess.js | 16 + .../recordcontainers/db/onDBDelete.js | 2 +- .../recordcontainers/db/onDBInsert.js | 3 + .../recordcontainers/db/onDBUpdate.js | 3 + .../expression.js | 5 + .../expression.js | 5 + entity/Person_entity/Person_entity.aod | 209 +-- .../deletefunction/onActionProcess.js | 2 +- .../ignoreduplicate/onActionProcess.js | 10 - .../children/ignoreduplicate/stateProcess.js | 11 - .../ignorewholecluster/onActionProcess.js | 28 - .../ignorewholecluster/stateProcess.js | 11 - .../stateProcess.js | 11 - .../stateProcess.js | 11 - .../duplicateactions/stateProcess.js | 11 - .../children/obj_param/valueProcess.js | 23 + .../duplicates/selectionModeProcess.js | 9 + .../nonselfduplicates/documentation.adoc | 3 - .../selfduplicates/documentation.adoc | 1 - .../valueProcess.js | 2 - .../valueProcess.js | 3 - .../excludedcontactids_param/valueProcess.js | 7 - .../onlyshowcontactids_param/valueProcess.js | 60 - entity/Person_entity/initFilterProcess.js | 20 +- .../filterConditionProcess.js | 16 + .../recordcontainers/db/onDBDelete.js | 2 +- .../recordcontainers/db/onDBInsert.js | 3 + .../recordcontainers/db/onDBUpdate.js | 3 + .../expression.js | 5 + .../expression.js | 5 + .../QuickEntry_entity/QuickEntry_entity.aod | 1 + .../contactids_param/documentation.adoc | 2 + .../children/contactids_param/valueProcess.js | 45 +- .../_____LANGUAGE_EXTRA.aod | 28 + .../_____LANGUAGE_de/_____LANGUAGE_de.aod | 36 + .../_____LANGUAGE_en/_____LANGUAGE_en.aod | 26 + .../DuplicateOrganisation.aod | 24 + .../DuplicatePerson/DuplicatePerson.aod | 27 + .../DuplicateScannerResultFieldConfig.aod | 12 - neonContext/Duplicates/Duplicates.aod | 50 - .../DuplicatesUnrelated.aod | 16 - neonContext/Person/Person.aod | 1 - .../DuplicateOrganisationEdit_view.aod} | 38 +- .../DuplicateOrganisationFilter_view.aod | 58 + .../DuplicateOrganisationPreview_view.aod} | 13 +- .../DuplicatePersonEdit_view.aod | 61 + .../DuplicatePersonFilter_view.aod | 70 + .../DuplicatePersonPreview_view.aod} | 13 +- .../DuplicateScannerFilter_view.aod | 10 + .../DuplicateScannerPreview_view.aod | 4 - ...icateScannerResultFieldConfigEdit_view.aod | 24 - ...icatesUnrelatedOrganisationFilter_view.aod | 30 - .../DuplicatesUnrelatedPersonFilter_view.aod | 30 - .../OrganisationClusterMain_view.aod | 23 - .../OrganisationDuplicatesFilter_view.aod | 32 - .../OrganisationDuplicatesTab_view.aod | 24 - .../OrganisationEdit_view.aod | 6 +- .../OrganisationFilter_view.aod | 2 - .../OrganisationMain_view.aod | 6 +- .../PersonClusterMain_view.aod | 23 - .../PersonClusterPreview_view.aod | 22 - .../PersonDublicatesTab_view.aod | 24 - .../PersonDuplicatesFilter_view.aod | 48 - neonView/PersonEdit_view/PersonEdit_view.aod | 6 +- .../PersonFilter_view/PersonFilter_view.aod | 2 - neonView/PersonMain_view/PersonMain_view.aod | 6 +- .../DuplicateMerge_lib.aod} | 6 +- process/DuplicateMerge_lib/process.js | 368 +++++ process/DuplicateScanner_lib/process.js | 1464 ++--------------- process/IndexSearch_lib/process.js | 145 +- process/Leadimport_lib/process.js | 12 +- .../process.js | 55 - .../process.js | 40 - process/Sql_lib/process.js | 31 +- .../process.js | 74 + .../rebuildDuplicates_serverProcess.aod} | 8 +- 180 files changed, 2493 insertions(+), 4120 deletions(-) create mode 100644 .liquibase/Data_alias/basic/2021.0.3/Duplicate/alter_unrelatedduplicates.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.3/Duplicate/changelog.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.3/Duplicate/create_hasduplicate.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.3/Duplicate/drop_duplicateclusters.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.3/Duplicate/drop_duplicatescannerresultfieldconfig.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.3/Duplicate/migrate_unrelatedduplicates.xml create mode 100644 entity/DuplicateOrganisation_entity/DuplicateOrganisation_entity.aod create mode 100644 entity/DuplicateOrganisation_entity/entityfields/filteractions/children/ignoreduplicates/onActionProcess.js create mode 100644 entity/DuplicateOrganisation_entity/entityfields/filteractions/children/ignoreduplicates/titleProcess.js rename entity/{Organisation_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction => DuplicateOrganisation_entity/entityfields/filteractions/children/mergecurrentintoselected}/onActionProcess.js (51%) rename entity/{Organisation_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction => DuplicateOrganisation_entity/entityfields/filteractions/children/mergeselectedintocurrent}/onActionProcess.js (61%) create mode 100644 entity/DuplicateOrganisation_entity/entityfields/id_param/valueProcess.js create mode 100644 entity/DuplicateOrganisation_entity/entityfields/keywordcontactstates/children/containername_param/valueProcess.js create mode 100644 entity/DuplicateOrganisation_entity/entityfields/keywordorganisationtypes/children/containername_param/valueProcess.js create mode 100644 entity/DuplicateOrganisation_entity/entityfields/picture/displayValueProcess.js create mode 100644 entity/DuplicateOrganisation_entity/entityfields/targetcontext/valueProcess.js create mode 100644 entity/DuplicateOrganisation_entity/initFilterProcess.js create mode 100644 entity/DuplicateOrganisation_entity/recordcontainers/db/conditionProcess.js create mode 100644 entity/DuplicateOrganisation_entity/recordcontainers/db/fromClauseProcess.js create mode 100644 entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/duplicate.value/expression.js create mode 100644 entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js create mode 100644 entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js create mode 100644 entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js create mode 100644 entity/DuplicateOrganisation_entity/recordcontainers/db/recordfieldmappings/type.displayvalue/expression.js create mode 100644 entity/DuplicatePerson_entity/DuplicatePerson_entity.aod create mode 100644 entity/DuplicatePerson_entity/entityfields/filteractions/children/ignoreduplicates/onActionProcess.js create mode 100644 entity/DuplicatePerson_entity/entityfields/filteractions/children/ignoreduplicates/titleProcess.js rename entity/{Person_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction => DuplicatePerson_entity/entityfields/filteractions/children/mergecurrentintoselected}/onActionProcess.js (60%) rename entity/{Person_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction => DuplicatePerson_entity/entityfields/filteractions/children/mergeselectedintocurrent}/onActionProcess.js (70%) create mode 100644 entity/DuplicatePerson_entity/entityfields/id_param/valueProcess.js create mode 100644 entity/DuplicatePerson_entity/entityfields/keywordcontactstates/children/containername_param/valueProcess.js create mode 100644 entity/DuplicatePerson_entity/entityfields/parentcontext/valueProcess.js create mode 100644 entity/DuplicatePerson_entity/entityfields/picture/displayValueProcess.js create mode 100644 entity/DuplicatePerson_entity/initFilterProcess.js create mode 100644 entity/DuplicatePerson_entity/recordcontainers/db/conditionProcess.js create mode 100644 entity/DuplicatePerson_entity/recordcontainers/db/fromClauseProcess.js create mode 100644 entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/duplicate.value/expression.js create mode 100644 entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/organisation_id.displayvalue/expression.js create mode 100644 entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/organisation_id.value/expression.js create mode 100644 entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js create mode 100644 entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js create mode 100644 entity/DuplicatePerson_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js delete mode 100644 entity/DuplicateScannerPrefilterConfig_entity/recordcontainers/dbrecordcontainer/conditionProcess.js delete mode 100644 entity/DuplicateScannerResultFieldConfig_entity/DuplicateScannerResultFieldConfig_entity.aod delete mode 100644 entity/DuplicateScannerResultFieldConfig_entity/entityfields/date_edit/valueProcess.js delete mode 100644 entity/DuplicateScannerResultFieldConfig_entity/entityfields/date_new/valueProcess.js delete mode 100644 entity/DuplicateScannerResultFieldConfig_entity/entityfields/duplicatescanner_id/valueProcess.js delete mode 100644 entity/DuplicateScannerResultFieldConfig_entity/entityfields/user_edit/valueProcess.js delete mode 100644 entity/DuplicateScannerResultFieldConfig_entity/entityfields/user_new/valueProcess.js delete mode 100644 entity/DuplicateScannerResultFieldConfig_entity/recordcontainers/recordcontainer/conditionProcess.js create mode 100644 entity/DuplicateScanner_entity/entityfields/filteractions/children/rebuild/onActionProcess.js create mode 100644 entity/DuplicateScanner_entity/entityfields/filteractions/children/viewduplicates/onActionProcess.js delete mode 100644 entity/DuplicateScanner_entity/entityfields/runactiongroup/children/rebuildorganisationduplicatescache/onActionProcess.js delete mode 100644 entity/DuplicateScanner_entity/entityfields/runactiongroup/children/rebuildpersonduplicatescache/onActionProcess.js delete mode 100644 entity/DuplicateScanner_entity/entityfields/runactiongroup/documentation.adoc delete mode 100644 entity/DuplicateScanner_entity/entityfields/scannerresultfieldsconfig_consumer/children/duplicatescannerid_param/valueProcess.js delete mode 100644 entity/DuplicateScanner_entity/entityfields/testactiongroup/children/testduplicatescanner/onActionProcess.js create mode 100644 entity/DuplicateScanner_entity/recordcontainers/dbrecordcontainer/recordfieldmappings/duplicatecount.value/expression.js delete mode 100644 entity/DuplicatesUnrelated_entity/DuplicatesUnrelated_entity.aod delete mode 100644 entity/DuplicatesUnrelated_entity/documentation.adoc delete mode 100644 entity/DuplicatesUnrelated_entity/recordcontainers/jditorecordcontainer/contentProcess.js delete mode 100644 entity/DuplicatesUnrelated_entity/recordcontainers/jditorecordcontainer/onDelete.js delete mode 100644 entity/Duplicates_entity/Duplicates_entity.aod delete mode 100644 entity/Duplicates_entity/documentation.adoc delete mode 100644 entity/Duplicates_entity/entityfields/duplicateclusteractiongroup/children/ignorewholecluster/onActionProcess.js delete mode 100644 entity/Duplicates_entity/entityfields/duplicateorganisationsconsumer/children/duplicateactionscontrol_param/valueProcess.js delete mode 100644 entity/Duplicates_entity/entityfields/duplicateorganisationsconsumer/children/onlyshowcontactids_param/valueProcess.js delete mode 100644 entity/Duplicates_entity/entityfields/duplicatepersonsconsumer/children/duplicateactionscontrol_param/valueProcess.js delete mode 100644 entity/Duplicates_entity/entityfields/duplicatepersonsconsumer/children/onlyshowcontactids_param/valueProcess.js delete mode 100644 entity/Duplicates_entity/entityfields/duplicatesunrelatedorganisationconsumer/children/clusterid_param/valueProcess.js delete mode 100644 entity/Duplicates_entity/entityfields/duplicatesunrelatedorganisationconsumer/children/targetentity/valueProcess.js delete mode 100644 entity/Duplicates_entity/entityfields/duplicatesunrelatedpersonconsumer/children/clusterid_param/valueProcess.js delete mode 100644 entity/Duplicates_entity/entityfields/duplicatesunrelatedpersonconsumer/children/targetentity/valueProcess.js delete mode 100644 entity/Duplicates_entity/entityfields/organisationopenclusterdetailactiongroup/children/organisationopenclusterdetail/onActionProcess.js delete mode 100644 entity/Duplicates_entity/entityfields/personopenclusterdetailactiongroup/children/personopenclusterdetail/onActionProcess.js delete mode 100644 entity/Duplicates_entity/entityfields/selforganisationduplicatesconsumer/children/clusterid_param/valueProcess.js delete mode 100644 entity/Duplicates_entity/entityfields/selforganisationduplicatesconsumer/children/targetentity/valueProcess.js delete mode 100644 entity/Duplicates_entity/entityfields/selfpersonduplicatesconsumer/children/clusterid_param/valueProcess.js delete mode 100644 entity/Duplicates_entity/entityfields/selfpersonduplicatesconsumer/children/targetentity/valueProcess.js delete mode 100644 entity/Duplicates_entity/entityfields/selfpersonduplicatesprovider/titlePluralProcess.js delete mode 100644 entity/Duplicates_entity/recordcontainers/recordcontainer/contentProcess.js delete mode 100644 entity/Organisation_entity/entityfields/duplicateactions/children/ignoreduplicate/onActionProcess.js delete mode 100644 entity/Organisation_entity/entityfields/duplicateactions/children/ignoreduplicate/stateProcess.js delete mode 100644 entity/Organisation_entity/entityfields/duplicateactions/children/ignorewholecluster/onActionProcess.js delete mode 100644 entity/Organisation_entity/entityfields/duplicateactions/children/ignorewholecluster/stateProcess.js delete mode 100644 entity/Organisation_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/stateProcess.js delete mode 100644 entity/Organisation_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/stateProcess.js delete mode 100644 entity/Organisation_entity/entityfields/duplicateactions/stateProcess.js create mode 100644 entity/Organisation_entity/entityfields/duplicates/children/obj_param/valueProcess.js create mode 100644 entity/Organisation_entity/entityfields/duplicates/selectionModeProcess.js delete mode 100644 entity/Organisation_entity/entityfields/nonselfduplicates/documentation.adoc delete mode 100644 entity/Organisation_entity/entityfields/selfduplicates/documentation.adoc delete mode 100644 entity/Organisation_entity/entityfields/selfduplicatesuncached/children/duplicateactionscontrol_param/valueProcess.js delete mode 100644 entity/Organisation_entity/entityfields/selfduplicatesuncached/children/duplicatecurrentcontactid_param/valueProcess.js delete mode 100644 entity/Organisation_entity/entityfields/selfduplicatesuncached/children/excludedcontactids_param/valueProcess.js delete mode 100644 entity/Organisation_entity/entityfields/selfduplicatesuncached/children/onlyshowcontactids_param/valueProcess.js create mode 100644 entity/Organisation_entity/recordcontainers/db/filterextensions/duplicates_filter/filterConditionProcess.js create mode 100644 entity/Organisation_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js create mode 100644 entity/Organisation_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js delete mode 100644 entity/Person_entity/entityfields/duplicateactions/children/ignoreduplicate/onActionProcess.js delete mode 100644 entity/Person_entity/entityfields/duplicateactions/children/ignoreduplicate/stateProcess.js delete mode 100644 entity/Person_entity/entityfields/duplicateactions/children/ignorewholecluster/onActionProcess.js delete mode 100644 entity/Person_entity/entityfields/duplicateactions/children/ignorewholecluster/stateProcess.js delete mode 100644 entity/Person_entity/entityfields/duplicateactions/children/integratecurrentintoselectedaction/stateProcess.js delete mode 100644 entity/Person_entity/entityfields/duplicateactions/children/integrateselectedintocurrentaction/stateProcess.js delete mode 100644 entity/Person_entity/entityfields/duplicateactions/stateProcess.js create mode 100644 entity/Person_entity/entityfields/duplicates/children/obj_param/valueProcess.js create mode 100644 entity/Person_entity/entityfields/duplicates/selectionModeProcess.js delete mode 100644 entity/Person_entity/entityfields/nonselfduplicates/documentation.adoc delete mode 100644 entity/Person_entity/entityfields/selfduplicates/documentation.adoc delete mode 100644 entity/Person_entity/entityfields/selfduplicatesuncached/children/duplicateactionscontrol_param/valueProcess.js delete mode 100644 entity/Person_entity/entityfields/selfduplicatesuncached/children/duplicatecurrentcontactid_param/valueProcess.js delete mode 100644 entity/Person_entity/entityfields/selfduplicatesuncached/children/excludedcontactids_param/valueProcess.js delete mode 100644 entity/Person_entity/entityfields/selfduplicatesuncached/children/onlyshowcontactids_param/valueProcess.js create mode 100644 entity/Person_entity/recordcontainers/db/filterextensions/duplicates_filter/filterConditionProcess.js create mode 100644 entity/Person_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js create mode 100644 entity/Person_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js create mode 100644 entity/QuickEntry_entity/entityfields/organdpersduplicates/children/contactids_param/documentation.adoc create mode 100644 neonContext/DuplicateOrganisation/DuplicateOrganisation.aod create mode 100644 neonContext/DuplicatePerson/DuplicatePerson.aod delete mode 100644 neonContext/DuplicateScannerResultFieldConfig/DuplicateScannerResultFieldConfig.aod delete mode 100644 neonContext/Duplicates/Duplicates.aod delete mode 100644 neonContext/DuplicatesUnrelated/DuplicatesUnrelated.aod rename neonView/{PersonDuplicateEditview_view/PersonDuplicateEditview_view.aod => DuplicateOrganisationEdit_view/DuplicateOrganisationEdit_view.aod} (55%) create mode 100644 neonView/DuplicateOrganisationFilter_view/DuplicateOrganisationFilter_view.aod rename neonView/{DuplicatesUnrelatedCluster_view/DuplicatesUnrelatedCluster_view.aod => DuplicateOrganisationPreview_view/DuplicateOrganisationPreview_view.aod} (51%) create mode 100644 neonView/DuplicatePersonEdit_view/DuplicatePersonEdit_view.aod create mode 100644 neonView/DuplicatePersonFilter_view/DuplicatePersonFilter_view.aod rename neonView/{OrganisationUnrelatedDuplicates_view/OrganisationUnrelatedDuplicates_view.aod => DuplicatePersonPreview_view/DuplicatePersonPreview_view.aod} (50%) delete mode 100644 neonView/DuplicateScannerResultFieldConfigEdit_view/DuplicateScannerResultFieldConfigEdit_view.aod delete mode 100644 neonView/DuplicatesUnrelatedOrganisationFilter_view/DuplicatesUnrelatedOrganisationFilter_view.aod delete mode 100644 neonView/DuplicatesUnrelatedPersonFilter_view/DuplicatesUnrelatedPersonFilter_view.aod delete mode 100644 neonView/OrganisationClusterMain_view/OrganisationClusterMain_view.aod delete mode 100644 neonView/OrganisationDuplicatesFilter_view/OrganisationDuplicatesFilter_view.aod delete mode 100644 neonView/OrganisationDuplicatesTab_view/OrganisationDuplicatesTab_view.aod delete mode 100644 neonView/PersonClusterMain_view/PersonClusterMain_view.aod delete mode 100644 neonView/PersonClusterPreview_view/PersonClusterPreview_view.aod delete mode 100644 neonView/PersonDublicatesTab_view/PersonDublicatesTab_view.aod delete mode 100644 neonView/PersonDuplicatesFilter_view/PersonDuplicatesFilter_view.aod rename process/{RebuildDuplicatesCache_serverProcess/RebuildDuplicatesCache_serverProcess.aod => DuplicateMerge_lib/DuplicateMerge_lib.aod} (65%) create mode 100644 process/DuplicateMerge_lib/process.js delete mode 100644 process/RebuildAllDuplicateCaches_serverProcess/process.js delete mode 100644 process/RebuildDuplicatesCache_serverProcess/process.js create mode 100644 process/rebuildDuplicates_serverProcess/process.js rename process/{RebuildAllDuplicateCaches_serverProcess/RebuildAllDuplicateCaches_serverProcess.aod => rebuildDuplicates_serverProcess/rebuildDuplicates_serverProcess.aod} (50%) 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 0000000000..b6e59bdbd9 --- /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 0000000000..10ee1b9cc2 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.0.3/Duplicate/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="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"/> +</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 0000000000..f61d512d35 --- /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 0000000000..b61e7cb651 --- /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 0000000000..6804c4345d --- /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/2021.0.3/Duplicate/migrate_unrelatedduplicates.xml b/.liquibase/Data_alias/basic/2021.0.3/Duplicate/migrate_unrelatedduplicates.xml new file mode 100644 index 0000000000..ac72a09e14 --- /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/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/changelog.xml index 2c2fee9f87..887abd3911 100644 --- a/.liquibase/Data_alias/basic/2021.0.3/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/changelog.xml @@ -9,4 +9,5 @@ <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"/> </databaseChangeLog> \ No newline at end of file diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod index 8b751faf53..5943721355 100644 --- a/aliasDefinition/Data_alias/Data_alias.aod +++ b/aliasDefinition/Data_alias/Data_alias.aod @@ -12176,82 +12176,6 @@ </entityFieldDb> </entityFields> </entityDb> - <entityDb> - <name>DUPLICATECLUSTERS</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>DUPLICATEID</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>CLUSTERID</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> @@ -12313,136 +12237,11 @@ <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> + <name>DUPLICATETYPE</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" /> + <size v="63" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -18533,6 +18332,82 @@ </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="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>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>AB_SYNCCONTACT</name> <dbName></dbName> diff --git a/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod b/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod index 1a320de850..70f6ccdb13 100644 --- a/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod +++ b/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod @@ -330,11 +330,6 @@ <kind v="10077" /> <title></title> </entityNode> - <entityNode> - <name>Duplicates</name> - <kind v="10077" /> - <title></title> - </entityNode> <entityNode> <name>AuditLogHistory</name> <kind v="10077" /> diff --git a/entity/Contact_entity/recordcontainers/db/onDBDelete.js b/entity/Contact_entity/recordcontainers/db/onDBDelete.js index 61afa46ba9..c7b08f7110 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/DuplicateOrganisation_entity/DuplicateOrganisation_entity.aod b/entity/DuplicateOrganisation_entity/DuplicateOrganisation_entity.aod new file mode 100644 index 0000000000..eb3318d1aa --- /dev/null +++ b/entity/DuplicateOrganisation_entity/DuplicateOrganisation_entity.aod @@ -0,0 +1,241 @@ +<?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>DuplicateOrganisation_entity</name> + <title>Duplicate</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <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> + <dependencies> + <entityDependency> + <name>a666bb24-2875-481a-879e-86b8e8517c1e</name> + <entityName>Organisation_entity</entityName> + <fieldName>Duplicates</fieldName> + <isConsumer v="false" /> + </entityDependency> + </dependencies> + </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" /> + <isSelectionAction v="true" /> + <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> + <isSelectionAction v="true" /> + <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> + <isSelectionAction v="true" /> + <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/entityfields/filteractions/children/ignoreduplicates/onActionProcess.js b/entity/DuplicateOrganisation_entity/entityfields/filteractions/children/ignoreduplicates/onActionProcess.js new file mode 100644 index 0000000000..a070181a8e --- /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 0000000000..4c5ccfffeb --- /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 29dab7b72c..b23396c01c 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 5ac58579f1..ac1a9260b2 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 0000000000..bffe18eb09 --- /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 0000000000..43e8d27c6a --- /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 0000000000..9f418ef99a --- /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 0000000000..aa69acba15 --- /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 0000000000..84e4b61c25 --- /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 0000000000..92797e84db --- /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 0000000000..e53fabe5b3 --- /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 0000000000..5412501fe0 --- /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 0000000000..8f7063b2ac --- /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 0000000000..5827c59c41 --- /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 0000000000..0f438c2535 --- /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 0000000000..b63b2d5774 --- /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 0000000000..7ab8eb0652 --- /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 0000000000..2d5dd73d04 --- /dev/null +++ b/entity/DuplicatePerson_entity/DuplicatePerson_entity.aod @@ -0,0 +1,270 @@ +<?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>DuplicatePerson_entity</name> + <title>Duplicate</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <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> + <dependencies> + <entityDependency> + <name>7f8210c4-644f-4c45-a571-e232582f8d34</name> + <entityName>Person_entity</entityName> + <fieldName>Duplicates</fieldName> + <isConsumer v="false" /> + </entityDependency> + <entityDependency> + <name>fd3253c7-f3f8-483f-8f49-6192f4e75979</name> + <entityName>Person_entity</entityName> + <fieldName>Duplicates</fieldName> + <isConsumer v="false" /> + </entityDependency> + </dependencies> + </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" /> + <isSelectionAction v="true" /> + <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> + <isSelectionAction v="true" /> + <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> + <isSelectionAction v="true" /> + <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/entityfields/filteractions/children/ignoreduplicates/onActionProcess.js b/entity/DuplicatePerson_entity/entityfields/filteractions/children/ignoreduplicates/onActionProcess.js new file mode 100644 index 0000000000..69c03d7bc9 --- /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 0000000000..4c5ccfffeb --- /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 d5f864db52..8e96e7fcea 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 6a9f2ac39a..30d97b1c80 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 0000000000..bffe18eb09 --- /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 0000000000..43e8d27c6a --- /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 0000000000..f7baa76a6b --- /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 0000000000..e09fa2ae49 --- /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 0000000000..92797e84db --- /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 0000000000..658b1af578 --- /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 0000000000..2205f0c5af --- /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 0000000000..8f7063b2ac --- /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 0000000000..64f71be666 --- /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 0000000000..e37273248e --- /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 0000000000..5827c59c41 --- /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 0000000000..0f438c2535 --- /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 0000000000..50433a35e5 --- /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/DuplicateScannerPrefilterConfig_entity/recordcontainers/dbrecordcontainer/conditionProcess.js b/entity/DuplicateScannerPrefilterConfig_entity/recordcontainers/dbrecordcontainer/conditionProcess.js deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/entity/DuplicateScannerResultFieldConfig_entity/DuplicateScannerResultFieldConfig_entity.aod b/entity/DuplicateScannerResultFieldConfig_entity/DuplicateScannerResultFieldConfig_entity.aod deleted file mode 100644 index b336a59f80..0000000000 --- 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/date_edit/valueProcess.js b/entity/DuplicateScannerResultFieldConfig_entity/entityfields/date_edit/valueProcess.js deleted file mode 100644 index 5e6ef05973..0000000000 --- a/entity/DuplicateScannerResultFieldConfig_entity/entityfields/date_edit/valueProcess.js +++ /dev/null @@ -1,7 +0,0 @@ -import("system.util"); -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/DuplicateScannerResultFieldConfig_entity/entityfields/date_new/valueProcess.js b/entity/DuplicateScannerResultFieldConfig_entity/entityfields/date_new/valueProcess.js deleted file mode 100644 index a72892783b..0000000000 --- a/entity/DuplicateScannerResultFieldConfig_entity/entityfields/date_new/valueProcess.js +++ /dev/null @@ -1,7 +0,0 @@ -import("system.util"); -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/DuplicateScannerResultFieldConfig_entity/entityfields/duplicatescanner_id/valueProcess.js b/entity/DuplicateScannerResultFieldConfig_entity/entityfields/duplicatescanner_id/valueProcess.js deleted file mode 100644 index b8c682ad67..0000000000 --- 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/entityfields/user_edit/valueProcess.js b/entity/DuplicateScannerResultFieldConfig_entity/entityfields/user_edit/valueProcess.js deleted file mode 100644 index 6af880ae3e..0000000000 --- a/entity/DuplicateScannerResultFieldConfig_entity/entityfields/user_edit/valueProcess.js +++ /dev/null @@ -1,7 +0,0 @@ -import("system.util"); -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/DuplicateScannerResultFieldConfig_entity/entityfields/user_new/valueProcess.js b/entity/DuplicateScannerResultFieldConfig_entity/entityfields/user_new/valueProcess.js deleted file mode 100644 index e518bc75a9..0000000000 --- a/entity/DuplicateScannerResultFieldConfig_entity/entityfields/user_new/valueProcess.js +++ /dev/null @@ -1,7 +0,0 @@ -import("system.util"); -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/DuplicateScannerResultFieldConfig_entity/recordcontainers/recordcontainer/conditionProcess.js b/entity/DuplicateScannerResultFieldConfig_entity/recordcontainers/recordcontainer/conditionProcess.js deleted file mode 100644 index b9bff609c9..0000000000 --- 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 34fb0577df..220ca8da86 100644 --- a/entity/DuplicateScanner_entity/DuplicateScanner_entity.aod +++ b/entity/DuplicateScanner_entity/DuplicateScanner_entity.aod @@ -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" /> + <isSelectionAction v="true" /> + <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> + <isSelectionAction v="true" /> + <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/entityfields/filteractions/children/rebuild/onActionProcess.js b/entity/DuplicateScanner_entity/entityfields/filteractions/children/rebuild/onActionProcess.js new file mode 100644 index 0000000000..fc6ae65d2d --- /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 0000000000..064e1f6c17 --- /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 e391b4c193..0000000000 --- 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 cad8736382..0000000000 --- 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 f998dfcc78..0000000000 --- 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 3c559d4200..0000000000 --- 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 af7cd56a24..0000000000 --- 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 0000000000..a49f1a0db9 --- /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 7d2241b72c..0000000000 --- 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 06d0fa2749..0000000000 --- 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 7f6beb6cd3..0000000000 --- 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 4cb5ca4f2a..0000000000 --- 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 fe9a194850..0000000000 --- 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 aa8d46c4a3..0000000000 --- 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 77822dbca0..0000000000 --- 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 5267adbe23..0000000000 --- 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 ecb8c518cd..0000000000 --- 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 5267adbe23..0000000000 --- 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 ecb8c518cd..0000000000 --- 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 152dfe0324..0000000000 --- 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/duplicatesunrelatedorganisationconsumer/children/targetentity/valueProcess.js b/entity/Duplicates_entity/entityfields/duplicatesunrelatedorganisationconsumer/children/targetentity/valueProcess.js deleted file mode 100644 index ea14ae6b61..0000000000 --- a/entity/Duplicates_entity/entityfields/duplicatesunrelatedorganisationconsumer/children/targetentity/valueProcess.js +++ /dev/null @@ -1,4 +0,0 @@ -import("system.vars"); -import("system.result"); - -result.string("Organisation_entity"); \ 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 03d5df5be8..0000000000 --- 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 f8b07f56ab..0000000000 --- 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 f599915bdc..0000000000 --- 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 9d5cf8d6da..0000000000 --- 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 8ef7b76876..0000000000 --- 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 e781fb72fd..0000000000 --- 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 258d52e236..0000000000 --- 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/selfpersonduplicatesconsumer/children/targetentity/valueProcess.js b/entity/Duplicates_entity/entityfields/selfpersonduplicatesconsumer/children/targetentity/valueProcess.js deleted file mode 100644 index 0f7bee25ea..0000000000 --- a/entity/Duplicates_entity/entityfields/selfpersonduplicatesconsumer/children/targetentity/valueProcess.js +++ /dev/null @@ -1,2 +0,0 @@ -import("system.result"); -result.string("Person_entity"); \ 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 b213a20410..0000000000 --- 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 fc29941db9..0000000000 --- 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/KeywordEntry_entity/KeywordEntry_entity.aod b/entity/KeywordEntry_entity/KeywordEntry_entity.aod index 39bcb0a458..125241142e 100644 --- a/entity/KeywordEntry_entity/KeywordEntry_entity.aod +++ b/entity/KeywordEntry_entity/KeywordEntry_entity.aod @@ -637,6 +637,24 @@ <fieldName>KeywordPhases</fieldName> <isConsumer v="false" /> </entityDependency> + <entityDependency> + <name>414ad662-727b-4e9f-9e86-0659d92ec60d</name> + <entityName>DuplicatePerson_entity</entityName> + <fieldName>KeywordContactStates</fieldName> + <isConsumer v="false" /> + </entityDependency> + <entityDependency> + <name>0f8f9bfc-379c-4f05-8364-8270e718fe9a</name> + <entityName>DuplicateOrganisation_entity</entityName> + <fieldName>KeywordContactStates</fieldName> + <isConsumer v="false" /> + </entityDependency> + <entityDependency> + <name>b78c0dd7-a35c-4d9b-9a23-1a20e7e41464</name> + <entityName>DuplicateOrganisation_entity</entityName> + <fieldName>KeywordOrganisationTypes</fieldName> + <isConsumer v="false" /> + </entityDependency> <entityDependency> <name>98608b12-9927-4197-adfe-1398a388bcb0</name> <entityName>WebtrackingTag_entity</entityName> diff --git a/entity/Organisation_entity/Organisation_entity.aod b/entity/Organisation_entity/Organisation_entity.aod index be40c333ad..b0b919e690 100644 --- a/entity/Organisation_entity/Organisation_entity.aod +++ b/entity/Organisation_entity/Organisation_entity.aod @@ -186,6 +186,12 @@ <fieldName>OrganisationConsumer</fieldName> <isConsumer v="false" /> </entityDependency> + <entityDependency> + <name>fa1b6124-1e00-4fa0-8c04-debc19f58d95</name> + <entityName>DuplicatePerson_entity</entityName> + <fieldName>Organisations</fieldName> + <isConsumer v="false" /> + </entityDependency> <entityDependency> <name>640a8509-1972-4dc5-980e-68832f1c03c5</name> <entityName>Planning_entity</entityName> @@ -226,14 +232,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" /> @@ -699,14 +697,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" /> @@ -770,14 +760,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" /> @@ -955,65 +937,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> @@ -1023,33 +950,6 @@ <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> @@ -1153,14 +1053,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" /> @@ -1226,10 +1118,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" /> @@ -1282,52 +1170,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> @@ -1526,52 +1368,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> @@ -1629,6 +1425,22 @@ <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> @@ -1787,11 +1599,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> @@ -1943,6 +1757,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> 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 c9289cbd0e..0000000000 --- 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 b736eb15f5..0000000000 --- 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 99d7f55925..0000000000 --- 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 fdd913ad06..0000000000 --- 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 b736eb15f5..0000000000 --- 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 b736eb15f5..0000000000 --- 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 5b8b24021d..0000000000 --- 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 0000000000..39bdfae536 --- /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 0000000000..c92317456b --- /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/nonselfduplicates/documentation.adoc b/entity/Organisation_entity/entityfields/nonselfduplicates/documentation.adoc deleted file mode 100644 index dc35980c12..0000000000 --- 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/selfduplicates/documentation.adoc b/entity/Organisation_entity/entityfields/selfduplicates/documentation.adoc deleted file mode 100644 index 396162acb9..0000000000 --- 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 81570217c3..0000000000 --- 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/duplicatecurrentcontactid_param/valueProcess.js b/entity/Organisation_entity/entityfields/selfduplicatesuncached/children/duplicatecurrentcontactid_param/valueProcess.js deleted file mode 100644 index 821415ae69..0000000000 --- a/entity/Organisation_entity/entityfields/selfduplicatesuncached/children/duplicatecurrentcontactid_param/valueProcess.js +++ /dev/null @@ -1,3 +0,0 @@ -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/selfduplicatesuncached/children/excludedcontactids_param/valueProcess.js b/entity/Organisation_entity/entityfields/selfduplicatesuncached/children/excludedcontactids_param/valueProcess.js deleted file mode 100644 index 849632882b..0000000000 --- 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 77f449d52a..0000000000 --- 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/Organisation_entity/initFilterProcess.js b/entity/Organisation_entity/initFilterProcess.js index 936a623f59..afecc1ede0 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/duplicates_filter/filterConditionProcess.js b/entity/Organisation_entity/recordcontainers/db/filterextensions/duplicates_filter/filterConditionProcess.js new file mode 100644 index 0000000000..96f185ae76 --- /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 00e50690d4..320f4e3329 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 60299cd7d4..c8db8fdecb 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 9f0337793c..737768cc86 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/standard_email_communication.value/expression.js b/entity/Organisation_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js new file mode 100644 index 0000000000..41ef07ff58 --- /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 0000000000..320ae40ad1 --- /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/Person_entity/Person_entity.aod b/entity/Person_entity/Person_entity.aod index 87f279d514..acb1ac9f26 100644 --- a/entity/Person_entity/Person_entity.aod +++ b/entity/Person_entity/Person_entity.aod @@ -162,10 +162,6 @@ <name>OnlyActive_param</name> <expose v="false" /> </entityParameter> - <entityParameter> - <name>DuplicateCurrentContactId_param</name> - <expose v="false" /> - </entityParameter> </children> </entityProvider> <entityField> @@ -411,14 +407,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> @@ -776,10 +764,6 @@ <name>OnlyActive_param</name> <expose v="false" /> </entityParameter> - <entityParameter> - <name>DuplicateCurrentContactId_param</name> - <expose v="false" /> - </entityParameter> </children> </entityProvider> <entityConsumer> @@ -945,46 +929,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> @@ -1035,47 +984,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> @@ -1124,10 +1038,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 +1054,6 @@ <name>OnlyActive_param</name> <expose v="true" /> </entityParameter> - <entityParameter> - <name>DuplicateCurrentContactId_param</name> - <expose v="false" /> - </entityParameter> </children> </entityProvider> <entityField> @@ -1164,12 +1070,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,40 +1095,6 @@ </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> @@ -1395,52 +1261,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> @@ -1499,6 +1319,26 @@ <iconId>VAADIN:CURLY_BRACKETS</iconId> <stateProcess>%aditoprj%/entity/Person_entity/entityfields/openadminview/stateProcess.js</stateProcess> </entityActionField> + <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" /> @@ -1703,11 +1543,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> @@ -1857,6 +1699,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> diff --git a/entity/Person_entity/entityfields/deletefunction/onActionProcess.js b/entity/Person_entity/entityfields/deletefunction/onActionProcess.js index 083e2d8b0d..324c438c9d 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/duplicateactions/children/ignoreduplicate/onActionProcess.js b/entity/Person_entity/entityfields/duplicateactions/children/ignoreduplicate/onActionProcess.js deleted file mode 100644 index c9289cbd0e..0000000000 --- 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 b736eb15f5..0000000000 --- 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 f74997cb1d..0000000000 --- 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 fdd913ad06..0000000000 --- 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 b736eb15f5..0000000000 --- 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 b736eb15f5..0000000000 --- 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 5b8b24021d..0000000000 --- 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 0000000000..59dc755e2a --- /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 0000000000..c92317456b --- /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/nonselfduplicates/documentation.adoc b/entity/Person_entity/entityfields/nonselfduplicates/documentation.adoc deleted file mode 100644 index d7964dadc0..0000000000 --- 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/selfduplicates/documentation.adoc b/entity/Person_entity/entityfields/selfduplicates/documentation.adoc deleted file mode 100644 index 4f02d8b1a2..0000000000 --- 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 81570217c3..0000000000 --- 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/duplicatecurrentcontactid_param/valueProcess.js b/entity/Person_entity/entityfields/selfduplicatesuncached/children/duplicatecurrentcontactid_param/valueProcess.js deleted file mode 100644 index 821415ae69..0000000000 --- a/entity/Person_entity/entityfields/selfduplicatesuncached/children/duplicatecurrentcontactid_param/valueProcess.js +++ /dev/null @@ -1,3 +0,0 @@ -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/selfduplicatesuncached/children/excludedcontactids_param/valueProcess.js b/entity/Person_entity/entityfields/selfduplicatesuncached/children/excludedcontactids_param/valueProcess.js deleted file mode 100644 index 849632882b..0000000000 --- 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 8fa370156e..0000000000 --- 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/initFilterProcess.js b/entity/Person_entity/initFilterProcess.js index f64ef8977c..afecc1ede0 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/filterextensions/duplicates_filter/filterConditionProcess.js b/entity/Person_entity/recordcontainers/db/filterextensions/duplicates_filter/filterConditionProcess.js new file mode 100644 index 0000000000..6a53c389f9 --- /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/onDBDelete.js b/entity/Person_entity/recordcontainers/db/onDBDelete.js index 56d4461823..26d095805e 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 3385c553d1..8d1c5ddea0 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 0c29899fd4..100f1f714f 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/standard_email_communication.value/expression.js b/entity/Person_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js new file mode 100644 index 0000000000..41ef07ff58 --- /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 0000000000..320ae40ad1 --- /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/QuickEntry_entity/QuickEntry_entity.aod b/entity/QuickEntry_entity/QuickEntry_entity.aod index 9ce66331b3..2c460f59b8 100644 --- a/entity/QuickEntry_entity/QuickEntry_entity.aod +++ b/entity/QuickEntry_entity/QuickEntry_entity.aod @@ -237,6 +237,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> 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 0000000000..667cdd59e7 --- /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 68ef6879ab..98b27caa01 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/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index 1fc9a21e9d..1cf98cfded 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -8076,6 +8076,12 @@ <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> @@ -8406,6 +8412,28 @@ <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> diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod index 3a6dbc11f1..c239d44833 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -10984,6 +10984,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> @@ -11035,6 +11043,34 @@ 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> diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod index 775c68dacd..4f21302546 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -8325,6 +8325,9 @@ <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> @@ -8490,6 +8493,29 @@ <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> diff --git a/neonContext/DuplicateOrganisation/DuplicateOrganisation.aod b/neonContext/DuplicateOrganisation/DuplicateOrganisation.aod new file mode 100644 index 0000000000..180a84c994 --- /dev/null +++ b/neonContext/DuplicateOrganisation/DuplicateOrganisation.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>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>07bbb126-8b4b-4f3c-a2c8-30409e0ee826</name> + </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 0000000000..6d8e12f75a --- /dev/null +++ b/neonContext/DuplicatePerson/DuplicatePerson.aod @@ -0,0 +1,27 @@ +<?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>88155af6-074d-4683-b27e-20a8ef75dd8a</name> + </neonViewReference> + <neonViewReference> + <name>fb801ec5-ec73-4d6d-be3e-f2d78a57716f</name> + </neonViewReference> + <neonViewReference> + <name>596cd813-22e1-4ba6-96d5-fefefbb800cf</name> + <view>DuplicatePersonPreview_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonContext/DuplicateScannerResultFieldConfig/DuplicateScannerResultFieldConfig.aod b/neonContext/DuplicateScannerResultFieldConfig/DuplicateScannerResultFieldConfig.aod deleted file mode 100644 index 79d97363fb..0000000000 --- a/neonContext/DuplicateScannerResultFieldConfig/DuplicateScannerResultFieldConfig.aod +++ /dev/null @@ -1,12 +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>DuplicateScannerResultFieldConfig</name> - <majorModelMode>DISTRIBUTED</majorModelMode> - <entity>DuplicateScannerResultFieldConfig_entity</entity> - <references> - <neonViewReference> - <name>4bab12e9-c4c3-450f-bfcf-8ecbec1f994c</name> - <view>DuplicateScannerResultFieldConfigEdit_view</view> - </neonViewReference> - </references> -</neonContext> diff --git a/neonContext/Duplicates/Duplicates.aod b/neonContext/Duplicates/Duplicates.aod deleted file mode 100644 index 5de0f3a191..0000000000 --- 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/DuplicatesUnrelated/DuplicatesUnrelated.aod b/neonContext/DuplicatesUnrelated/DuplicatesUnrelated.aod deleted file mode 100644 index 56bf4fd857..0000000000 --- a/neonContext/DuplicatesUnrelated/DuplicatesUnrelated.aod +++ /dev/null @@ -1,16 +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>DuplicatesUnrelated</name> - <majorModelMode>DISTRIBUTED</majorModelMode> - <entity>DuplicatesUnrelated_entity</entity> - <references> - <neonViewReference> - <name>0b5cbd31-cfa1-4ee8-8bd2-b4772ac95953</name> - <view>DuplicatesUnrelatedPersonFilter_view</view> - </neonViewReference> - <neonViewReference> - <name>433a665e-63ac-4281-8f7c-08603362daf7</name> - <view>DuplicatesUnrelatedOrganisationFilter_view</view> - </neonViewReference> - </references> -</neonContext> diff --git a/neonContext/Person/Person.aod b/neonContext/Person/Person.aod index 1e80db9a3c..bc1cf78630 100644 --- a/neonContext/Person/Person.aod +++ b/neonContext/Person/Person.aod @@ -61,7 +61,6 @@ </neonViewReference> <neonViewReference> <name>2a6c44be-53e2-469e-84b3-615841bd4430</name> - <view>PersonDuplicateEditview_view</view> </neonViewReference> <neonViewReference> <name>627518cc-15b0-4f0d-b6f3-ec06172e7c4e</name> 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 b331c5900d..a2d93541e4 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 0000000000..2e4b88985d --- /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/DuplicatesUnrelatedCluster_view/DuplicatesUnrelatedCluster_view.aod b/neonView/DuplicateOrganisationPreview_view/DuplicateOrganisationPreview_view.aod similarity index 51% rename from neonView/DuplicatesUnrelatedCluster_view/DuplicatesUnrelatedCluster_view.aod rename to neonView/DuplicateOrganisationPreview_view/DuplicateOrganisationPreview_view.aod index 670b2c939d..29f3a38fc4 100644 --- a/neonView/DuplicatesUnrelatedCluster_view/DuplicatesUnrelatedCluster_view.aod +++ b/neonView/DuplicateOrganisationPreview_view/DuplicateOrganisationPreview_view.aod @@ -1,17 +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>DuplicatesUnrelatedCluster_view</name> + <name>DuplicateOrganisationPreview_view</name> <majorModelMode>DISTRIBUTED</majorModelMode> <layout> - <boxLayout> + <noneLayout> <name>layout</name> - </boxLayout> + </noneLayout> </layout> - <children> - <neonViewReference> - <name>484990d0-890b-48b8-8618-6f0fab367138</name> - <entityField>DuplicatesUnrelatedPersonConsumer</entityField> - <view>DuplicatesUnrelatedPersonFilter_view</view> - </neonViewReference> - </children> </neonView> diff --git a/neonView/DuplicatePersonEdit_view/DuplicatePersonEdit_view.aod b/neonView/DuplicatePersonEdit_view/DuplicatePersonEdit_view.aod new file mode 100644 index 0000000000..99e36d549f --- /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 0000000000..c1f6405a3c --- /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/OrganisationUnrelatedDuplicates_view/OrganisationUnrelatedDuplicates_view.aod b/neonView/DuplicatePersonPreview_view/DuplicatePersonPreview_view.aod similarity index 50% rename from neonView/OrganisationUnrelatedDuplicates_view/OrganisationUnrelatedDuplicates_view.aod rename to neonView/DuplicatePersonPreview_view/DuplicatePersonPreview_view.aod index 0b23c809aa..bd81268065 100644 --- a/neonView/OrganisationUnrelatedDuplicates_view/OrganisationUnrelatedDuplicates_view.aod +++ b/neonView/DuplicatePersonPreview_view/DuplicatePersonPreview_view.aod @@ -1,17 +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>OrganisationUnrelatedDuplicates_view</name> + <name>DuplicatePersonPreview_view</name> <majorModelMode>DISTRIBUTED</majorModelMode> <layout> - <boxLayout> + <noneLayout> <name>layout</name> - </boxLayout> + </noneLayout> </layout> - <children> - <neonViewReference> - <name>edc0822d-4388-4e3d-93d7-2e46e32f5742</name> - <entityField>DuplicatesUnrelatedOrganisationConsumer</entityField> - <view>DuplicatesUnrelatedOrganisationFilter_view</view> - </neonViewReference> - </children> </neonView> diff --git a/neonView/DuplicateScannerFilter_view/DuplicateScannerFilter_view.aod b/neonView/DuplicateScannerFilter_view/DuplicateScannerFilter_view.aod index 5a99ae0226..0a9b1256cb 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 75c33f7442..bbb07db7e2 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/DuplicateScannerResultFieldConfigEdit_view/DuplicateScannerResultFieldConfigEdit_view.aod b/neonView/DuplicateScannerResultFieldConfigEdit_view/DuplicateScannerResultFieldConfigEdit_view.aod deleted file mode 100644 index 9798328f41..0000000000 --- a/neonView/DuplicateScannerResultFieldConfigEdit_view/DuplicateScannerResultFieldConfigEdit_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>DuplicateScannerResultFieldConfigEdit_view</name> - <majorModelMode>DISTRIBUTED</majorModelMode> - <layout> - <boxLayout> - <name>layout</name> - </boxLayout> - </layout> - <children> - <genericMultipleViewTemplate> - <name>ResultFieldsConfig</name> - <autoNewRow v="true" /> - <entityField>#ENTITY</entityField> - <title>Result fields</title> - <columns> - <neonGenericMultipleTableColumn> - <name>e330572c-aa47-4c52-a760-3e8765ce3dd0</name> - <entityField>ENTITY_FIELD_NAME</entityField> - </neonGenericMultipleTableColumn> - </columns> - </genericMultipleViewTemplate> - </children> -</neonView> diff --git a/neonView/DuplicatesUnrelatedOrganisationFilter_view/DuplicatesUnrelatedOrganisationFilter_view.aod b/neonView/DuplicatesUnrelatedOrganisationFilter_view/DuplicatesUnrelatedOrganisationFilter_view.aod deleted file mode 100644 index 03a42bc169..0000000000 --- a/neonView/DuplicatesUnrelatedOrganisationFilter_view/DuplicatesUnrelatedOrganisationFilter_view.aod +++ /dev/null @@ -1,30 +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>DuplicatesUnrelatedOrganisationFilter_view</name> - <majorModelMode>DISTRIBUTED</majorModelMode> - <layout> - <boxLayout> - <name>layout</name> - </boxLayout> - </layout> - <children> - <tableViewTemplate> - <name>UnrelatedOrganisations</name> - <hideContentSearch v="true" /> - <entityField>#ENTITY</entityField> - <isCreatable v="false" /> - <isEditable v="false" /> - <title>Unrelated organisation duplicates</title> - <columns> - <neonTableColumn> - <name>04681f8d-b941-4a66-be50-6ac08d6f52a4</name> - <entityField>SourceDuplicateDescription</entityField> - </neonTableColumn> - <neonTableColumn> - <name>b293ed18-ebf5-474e-8ec2-851a3562b4d5</name> - <entityField>UnrelatedDuplicateDescription</entityField> - </neonTableColumn> - </columns> - </tableViewTemplate> - </children> -</neonView> diff --git a/neonView/DuplicatesUnrelatedPersonFilter_view/DuplicatesUnrelatedPersonFilter_view.aod b/neonView/DuplicatesUnrelatedPersonFilter_view/DuplicatesUnrelatedPersonFilter_view.aod deleted file mode 100644 index 173666ab5f..0000000000 --- a/neonView/DuplicatesUnrelatedPersonFilter_view/DuplicatesUnrelatedPersonFilter_view.aod +++ /dev/null @@ -1,30 +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>DuplicatesUnrelatedPersonFilter_view</name> - <majorModelMode>DISTRIBUTED</majorModelMode> - <layout> - <boxLayout> - <name>layout</name> - </boxLayout> - </layout> - <children> - <tableViewTemplate> - <name>UnrelatedPersons</name> - <hideContentSearch v="true" /> - <entityField>#ENTITY</entityField> - <isCreatable v="false" /> - <isEditable v="false" /> - <title>Unrelated person duplicates</title> - <columns> - <neonTableColumn> - <name>734re984-6a0b-4126-ab49-452e2b54f76d</name> - <entityField>SourceDuplicateDescription</entityField> - </neonTableColumn> - <neonTableColumn> - <name>8615259b-de5b-378u-945d-2ff934ae1b8c</name> - <entityField>UnrelatedDuplicateDescription</entityField> - </neonTableColumn> - </columns> - </tableViewTemplate> - </children> -</neonView> diff --git a/neonView/OrganisationClusterMain_view/OrganisationClusterMain_view.aod b/neonView/OrganisationClusterMain_view/OrganisationClusterMain_view.aod deleted file mode 100644 index 72d99cac59..0000000000 --- a/neonView/OrganisationClusterMain_view/OrganisationClusterMain_view.aod +++ /dev/null @@ -1,23 +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>OrganisationClusterMain_view</name> - <majorModelMode>DISTRIBUTED</majorModelMode> - <layout> - <boxLayout> - <name>layout</name> - <direction>HORIZONTAL</direction> - </boxLayout> - </layout> - <children> - <neonViewReference> - <name>b25f94bf-9316-4438-be78-b8cf596440b3</name> - <entityField>DuplicateOrganisationsConsumer</entityField> - <view>OrganisationFilter_view</view> - </neonViewReference> - <neonViewReference> - <name>5589bb81-171d-417b-a1b2-975144109d55</name> - <entityField>#ENTITY</entityField> - <view>DuplicatesUnrelatedCluster_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 c950c68920..0000000000 --- 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/OrganisationDuplicatesTab_view/OrganisationDuplicatesTab_view.aod b/neonView/OrganisationDuplicatesTab_view/OrganisationDuplicatesTab_view.aod deleted file mode 100644 index ed86c8059d..0000000000 --- a/neonView/OrganisationDuplicatesTab_view/OrganisationDuplicatesTab_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>OrganisationDuplicatesTab_view</name> - <title>Organisation duplicates</title> - <majorModelMode>DISTRIBUTED</majorModelMode> - <layout> - <boxLayout> - <name>layout</name> - <direction>HORIZONTAL</direction> - </boxLayout> - </layout> - <children> - <neonViewReference> - <name>8b4ab951-afb3-4fac-915b-89226ab2f849</name> - <entityField>SelfOrganisationDuplicatesConsumer</entityField> - <view>OrganisationDuplicatesFilter_view</view> - </neonViewReference> - <neonViewReference> - <name>d1e2ba4a-a5d6-4bba-a646-5918490e43a4</name> - <entityField>#ENTITY</entityField> - <view>OrganisationUnrelatedDuplicates_view</view> - </neonViewReference> - </children> -</neonView> diff --git a/neonView/OrganisationEdit_view/OrganisationEdit_view.aod b/neonView/OrganisationEdit_view/OrganisationEdit_view.aod index cf3a70c9a5..0e6500095f 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 d0a3e39a28..75d8254a1e 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 67ceac6a5c..9457155195 100644 --- a/neonView/OrganisationMain_view/OrganisationMain_view.aod +++ b/neonView/OrganisationMain_view/OrganisationMain_view.aod @@ -76,9 +76,9 @@ <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> </children> </neonView> diff --git a/neonView/PersonClusterMain_view/PersonClusterMain_view.aod b/neonView/PersonClusterMain_view/PersonClusterMain_view.aod deleted file mode 100644 index dcbd9badb6..0000000000 --- a/neonView/PersonClusterMain_view/PersonClusterMain_view.aod +++ /dev/null @@ -1,23 +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>PersonClusterMain_view</name> - <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> - </neonViewReference> - <neonViewReference> - <name>0df195b2-9074-4734-b6df-be3bbf47050a</name> - <entityField>#ENTITY</entityField> - <view>DuplicatesUnrelatedCluster_view</view> - </neonViewReference> - </children> -</neonView> diff --git a/neonView/PersonClusterPreview_view/PersonClusterPreview_view.aod b/neonView/PersonClusterPreview_view/PersonClusterPreview_view.aod deleted file mode 100644 index 69ab192629..0000000000 --- a/neonView/PersonClusterPreview_view/PersonClusterPreview_view.aod +++ /dev/null @@ -1,22 +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>PersonClusterPreview_view</name> - <majorModelMode>DISTRIBUTED</majorModelMode> - <layout> - <boxLayout> - <name>layout</name> - </boxLayout> - </layout> - <children> - <neonViewReference> - <name>156ebee5-6b13-462f-b956-0470f27a174b</name> - <entityField>DuplicatePersonsConsumer</entityField> - <view>PersonLookup_view</view> - </neonViewReference> - <neonViewReference> - <name>d8afce27-436c-42f0-a326-98bf6539b7bd</name> - <entityField>DuplicatesUnrelatedPersonConsumer</entityField> - <view>DuplicatesUnrelatedPersonFilter_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 c11bc1396a..0000000000 --- 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 0e95f05f72..0000000000 --- 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 1cc1577de9..27586ee38b 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/PersonFilter_view/PersonFilter_view.aod b/neonView/PersonFilter_view/PersonFilter_view.aod index c892033123..2471b831c6 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 75dd326492..fd3103de79 100644 --- a/neonView/PersonMain_view/PersonMain_view.aod +++ b/neonView/PersonMain_view/PersonMain_view.aod @@ -65,9 +65,9 @@ <view>PersonMarketing_view</view> </neonViewReference> <neonViewReference> - <name>d128a678-b1c0-49d0-a74c-7860d3a85247</name> - <entityField>SelfDuplicatesUncached</entityField> - <view>PersonFilter_view</view> + <name>24ea8bc9-7ed0-4bed-a984-b1a9f3815c7c</name> + <entityField>Duplicates</entityField> + <view>DuplicatePersonFilter_view</view> </neonViewReference> <neonViewReference> <name>78a658a3-680b-4420-85a2-6e99ccff9f94</name> diff --git a/process/RebuildDuplicatesCache_serverProcess/RebuildDuplicatesCache_serverProcess.aod b/process/DuplicateMerge_lib/DuplicateMerge_lib.aod similarity index 65% rename from process/RebuildDuplicatesCache_serverProcess/RebuildDuplicatesCache_serverProcess.aod rename to process/DuplicateMerge_lib/DuplicateMerge_lib.aod index 078550c720..bc0eb02352 100644 --- a/process/RebuildDuplicatesCache_serverProcess/RebuildDuplicatesCache_serverProcess.aod +++ b/process/DuplicateMerge_lib/DuplicateMerge_lib.aod @@ -1,9 +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>RebuildDuplicatesCache_serverProcess</name> + <name>DuplicateMerge_lib</name> <majorModelMode>DISTRIBUTED</majorModelMode> - <process>%aditoprj%/process/RebuildDuplicatesCache_serverProcess/process.js</process> + <process>%aditoprj%/process/DuplicateMerge_lib/process.js</process> <variants> - <element>EXECUTABLE</element> + <element>LIBRARY</element> </variants> </process> diff --git a/process/DuplicateMerge_lib/process.js b/process/DuplicateMerge_lib/process.js new file mode 100644 index 0000000000..5b83ce3f22 --- /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/process.js b/process/DuplicateScanner_lib/process.js index e26053edc6..be805bc2ae 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/IndexSearch_lib/process.js b/process/IndexSearch_lib/process.js index be35ad2cc8..549aefab09 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,146 @@ 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 valze + */ +IndexsearchFilterRow.fromFilter = function(pName, pOperator, pValue) +{ + if(pOperator == "NOT_EQUAL" || pOperator == "CONTAINSNOT") + { + return new IndexsearchFilterRow(pName, true, JSON.parse(pValue)); + } + else if(pOperator == "ISNOTNULL") + { + return new IndexsearchFilterRow(pName, false, []); + } + throw new Error("Unknown filterrow operator: " + pOperator); +} diff --git a/process/Leadimport_lib/process.js b/process/Leadimport_lib/process.js index d37c1f78ac..1859595621 100644 --- a/process/Leadimport_lib/process.js +++ b/process/Leadimport_lib/process.js @@ -918,19 +918,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/RebuildAllDuplicateCaches_serverProcess/process.js b/process/RebuildAllDuplicateCaches_serverProcess/process.js deleted file mode 100644 index b08a0abf9e..0000000000 --- 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 1e7f532f75..0000000000 --- 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/Sql_lib/process.js b/process/Sql_lib/process.js index 119068f4ad..383117664c 100644 --- a/process/Sql_lib/process.js +++ b/process/Sql_lib/process.js @@ -4657,4 +4657,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/rebuildDuplicates_serverProcess/process.js b/process/rebuildDuplicates_serverProcess/process.js new file mode 100644 index 0000000000..14369cff45 --- /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/RebuildAllDuplicateCaches_serverProcess/RebuildAllDuplicateCaches_serverProcess.aod b/process/rebuildDuplicates_serverProcess/rebuildDuplicates_serverProcess.aod similarity index 50% rename from process/RebuildAllDuplicateCaches_serverProcess/RebuildAllDuplicateCaches_serverProcess.aod rename to process/rebuildDuplicates_serverProcess/rebuildDuplicates_serverProcess.aod index 11432054cc..3a72b0bfc4 100644 --- a/process/RebuildAllDuplicateCaches_serverProcess/RebuildAllDuplicateCaches_serverProcess.aod +++ b/process/rebuildDuplicates_serverProcess/rebuildDuplicates_serverProcess.aod @@ -1,8 +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>RebuildAllDuplicateCaches_serverProcess</name> + <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> - <process>%aditoprj%/process/RebuildAllDuplicateCaches_serverProcess/process.js</process> + <process>%aditoprj%/process/rebuildDuplicates_serverProcess/process.js</process> + <alias>Data_alias</alias> <variants> <element>EXECUTABLE</element> </variants> -- GitLab From d4d5ec9de399959293cd1079ea6af500f53afd5c Mon Sep 17 00:00:00 2001 From: Simon Leipold <s.leipold@adito.de> Date: Fri, 23 Apr 2021 11:32:24 +0200 Subject: [PATCH 093/242] [Projekt: Entwicklung - Neon][TicketNr.: 1072749][Alphabetische Sortierung bei Favoriten] --- entity/Favorite_entity/Favorite_entity.aod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/entity/Favorite_entity/Favorite_entity.aod b/entity/Favorite_entity/Favorite_entity.aod index 4d3a729393..9ce8f7b404 100644 --- a/entity/Favorite_entity/Favorite_entity.aod +++ b/entity/Favorite_entity/Favorite_entity.aod @@ -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> -- GitLab From 07302af14d8aa73d155df4d8c67cd6396db58b9b Mon Sep 17 00:00:00 2001 From: "p.neub" <p.neub@adito.de> Date: Fri, 23 Apr 2021 14:08:00 +0200 Subject: [PATCH 094/242] =?UTF-8?q?[Projekt:=20xRM-Sales][TicketNr.:=20107?= =?UTF-8?q?5641][Checklisteneintr=C3=A4ge=20anpassen=20und=20Phasen=20umbe?= =?UTF-8?q?nennen]=20fix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entity/ChecklistEntry_entity/ChecklistEntry_entity.aod | 3 +++ 1 file changed, 3 insertions(+) diff --git a/entity/ChecklistEntry_entity/ChecklistEntry_entity.aod b/entity/ChecklistEntry_entity/ChecklistEntry_entity.aod index 3385604c58..d484cdac8c 100644 --- a/entity/ChecklistEntry_entity/ChecklistEntry_entity.aod +++ b/entity/ChecklistEntry_entity/ChecklistEntry_entity.aod @@ -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> -- GitLab From 776f7b6af42c55e1e321dbb2e0d4603a15890900 Mon Sep 17 00:00:00 2001 From: Sebastian Pongratz <s.pongratz@adito.de> Date: Mon, 26 Apr 2021 09:07:00 +0000 Subject: [PATCH 095/242] =?UTF-8?q?[Projekt:=20xRM-ContactManagement][Tick?= =?UTF-8?q?etNr.:=201073999][DSGVO=20Eigenschaft=20+=20Neuer=20Eintrag=20D?= =?UTF-8?q?atenschutzerkl=C3=A4rung]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../basic/2021.0.3/DSGVO/add_DSGVOType.xml | 17 + .../basic/2021.0.3/DSGVO/changelog.xml | 12 + .../DSGVO/create_DSGVOConfiguration.xml | 17 + .../2021.0.3/DSGVO/create_DSGVODeleteFlag.xml | 17 + .../DSGVO/insert_ContactStatusDelete.xml | 17 + .../DSGVO/insert_DSGVOConfigKeyword.xml | 36 + .../insert_DSGVOReasonKeywordCategory.xml | 13 + .../DSGVO/insert_DSGVOReasonKeywords.xml | 37 + .../Data_alias/basic/2021.0.3/changelog.xml | 1 + .../insert_asys_users-admin.xml | 9 + .../init/data/insert_asys_aliasconfig.xml | 13 + aliasDefinition/Data_alias/Data_alias.aod | 239 + .../Data_alias_noAudit/Data_alias_noAudit.aod | 16142 ++++++++++++++++ .../_____SYSTEM_APPLICATION_NEON.aod | 18 + .../entityfields/newmodule/stateProcess.js | 6 +- entity/Address_entity/afterOperatingState.js | 10 +- .../recordcontainers/db/onDBInsert.js | 6 +- .../recordcontainers/db/onDBUpdate.js | 6 +- .../recordcontainers/jdito/onInsert.js | 10 +- .../recordcontainers/jdito/onUpdate.js | 41 +- .../AttributeUsage_entity.aod | 1 + entity/Campaign_entity/Campaign_entity.aod | 6 + .../afterOperatingState.js | 5 +- .../DSGVOConfigurationAttribute_entity.aod | 76 + .../documentation.adoc | 5 + .../attribute_name/displayValueProcess.js | 5 + .../changedsgvorelevance/onActionProcess.js | 34 + .../filteractions/stateProcess.js | 8 + .../isdsgvorelevant/valueProcess.js | 8 + .../recordcontainers/jdito/contentProcess.js | 12 + .../DSGVOConfiguration_entity.aod | 187 + .../documentation.adoc | 8 + .../alreadymarked/valueProcess.js | 5 + .../keywordentryid_param/valueProcess.js | 4 + .../entityfields/count_usage/stateProcess.js | 12 + .../entityfields/date_edit/valueProcess.js | 9 + .../entityfields/date_new/valueProcess.js | 9 + .../entityfields/entity/valueProcess.js | 3 + .../entityfields/filter/valueProcess.js | 23 + .../anonymizepersons/onActionProcess.js | 18 + .../children/marktodelete/onActionProcess.js | 15 + .../children/marktodelete/titleProcess.js | 12 + .../opencontacts/onActionProcess.js | 7 + .../entityfields/reason/dropDownProcess.js | 12 + .../entityfields/reason/onValidation.js | 8 + .../entityfields/reason/valueProcess.js | 8 + .../entityfields/user_edit/valueProcess.js | 9 + .../entityfields/user_new/valueProcess.js | 9 + .../recordcontainers/db/onDBDelete.js | 17 + .../recordcontainers/db/onDBInsert.js | 36 + .../recordcontainers/db/onDBUpdate.js | 36 + .../count_usage.value/expression.js | 4 + .../DSGVODeleteFlag_entity.aod | 126 + .../DSGVODeleteFlag_entity/documentation.adoc | 9 + .../containername_param/valueProcess.js | 4 + .../addmanualdeleteflag/onActionProcess.js | 15 + .../reason/displayValueProcess.js | 6 + .../recordcontainers/db/conditionProcess.js | 8 + .../recordcontainers/db/onDBDelete.js | 19 + entity/DSGVO_entity/DSGVO_entity.aod | 11 + .../bindata/displayValueProcess.js | 15 + .../entityfields/bindata/mandatoryProcess.js | 13 + .../entityfields/bindata/stateProcess.js | 10 + .../entityfields/bindata/valueProcess.js | 18 + .../children/anonymperson/onActionProcess.js | 2 +- .../recordcontainers/jdito/onUpdate.js | 21 + entity/Document_entity/Document_entity.aod | 1 + .../is_main_document/stateProcess.js | 9 + .../is_main_document/valueProcess.js | 12 +- .../KeywordAttributeRelation_entity.aod | 6 + .../KeywordEntry_entity.aod | 30 +- .../Organisation_entity.aod | 6 +- .../blacklistids_param/valueProcess.js | 4 + .../entityfields/newemail/stateProcess.js | 6 +- entity/Person_entity/Person_entity.aod | 74 +- .../addtocampaign/stateProcess.js | 6 +- .../children/contactid_param/valueProcess.js | 4 + .../dsgvodeleteflags/stateProcess.js | 15 + .../blacklistids_param/valueProcess.js | 4 + .../children/tablenames_param/valueProcess.js | 2 +- .../newappointment/stateProcess.js | 6 +- .../entityfields/newemail/stateProcess.js | 6 +- .../entityfields/newletter/stateProcess.js | 6 +- .../entityfields/newoffer/stateProcess.js | 6 +- .../newvisitplanentry/stateProcess.js | 6 +- .../newvisitrecommendation/stateProcess.js | 6 +- .../openeditdefaultsview/stateProcess.js | 7 +- .../entityfields/status/stateProcess.js | 9 + .../recordcontainers/db/conditionProcess.js | 8 +- .../filterConditionProcess.js | 38 + .../isemployee_filter/filterValuesProcess.js | 4 + .../campaigns/filterConditionProcess.js | 12 + .../contracts/filterConditionProcess.js | 10 + .../offers/filterConditionProcess.js | 13 + .../orders/filterConditionProcess.js | 17 + .../tasks/filterConditionProcess.js | 16 + .../_____LANGUAGE_EXTRA.aod | 122 +- .../_____LANGUAGE_de/_____LANGUAGE_de.aod | 119 +- .../_____LANGUAGE_en/_____LANGUAGE_en.aod | 113 +- neonContext/DSGVO/DSGVO.aod | 1 + .../DSGVOConfiguration/DSGVOConfiguration.aod | 36 + .../DSGVOConfigurationAttribute.aod | 13 + .../DSGVODeleteFlag/DSGVODeleteFlag.aod | 23 + neonContext/Person/Person.aod | 8 + ...DSGVOConfigurationAttributeFilter_view.aod | 33 + .../DSGVOConfigurationEdit_view.aod | 33 + .../DSGVOConfigurationFilterFooter_view.aod | 32 + .../DSGVOConfigurationFilterHeader_view.aod | 23 + .../DSGVOConfigurationFilter_view.aod | 24 + .../DSGVOConfigurationPreview_view.aod | 34 + .../DSGVODeleteFlagEdit_view.aod | 23 + .../DSGVODeleteFlagFilter_view.aod | 29 + .../DSGVODeleteFlagPreview_view.aod | 35 + neonView/DSGVOEdit_view/DSGVOEdit_view.aod | 4 + .../DSGVOPreview_view/DSGVOPreview_view.aod | 4 + .../PersonDSGVO_view/PersonDSGVO_view.aod | 25 + .../PersonFilterOverlay_view.aod | 19 + neonView/PersonMain_view/PersonMain_view.aod | 5 + .../_____PREFERENCES_PROJECT.aod | 8 - process/Attribute_lib/process.js | 3 +- process/Calendar_lib/process.js | 1314 +- .../DSGVOAnonymize_serverProcess.aod | 10 + .../DSGVOAnonymize_serverProcess/process.js | 219 + .../DSGVOSetDeleteFlags_serverProcess.aod | 11 + .../process.js | 140 + process/DataPrivacy_lib/process.js | 175 +- process/KeywordRegistry_basic/process.js | 9 + role/PROJECT_DSGVO/PROJECT_DSGVO.aod | 6 + 128 files changed, 19735 insertions(+), 822 deletions(-) create mode 100644 .liquibase/Data_alias/basic/2021.0.3/DSGVO/add_DSGVOType.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.3/DSGVO/changelog.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.3/DSGVO/create_DSGVOConfiguration.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.3/DSGVO/create_DSGVODeleteFlag.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.3/DSGVO/insert_ContactStatusDelete.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.3/DSGVO/insert_DSGVOConfigKeyword.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.3/DSGVO/insert_DSGVOReasonKeywordCategory.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.3/DSGVO/insert_DSGVOReasonKeywords.xml create mode 100644 aliasDefinition/Data_alias_noAudit/Data_alias_noAudit.aod create mode 100644 entity/DSGVOConfigurationAttribute_entity/DSGVOConfigurationAttribute_entity.aod create mode 100644 entity/DSGVOConfigurationAttribute_entity/documentation.adoc create mode 100644 entity/DSGVOConfigurationAttribute_entity/entityfields/attribute_name/displayValueProcess.js create mode 100644 entity/DSGVOConfigurationAttribute_entity/entityfields/filteractions/children/changedsgvorelevance/onActionProcess.js create mode 100644 entity/DSGVOConfigurationAttribute_entity/entityfields/filteractions/stateProcess.js create mode 100644 entity/DSGVOConfigurationAttribute_entity/entityfields/isdsgvorelevant/valueProcess.js create mode 100644 entity/DSGVOConfigurationAttribute_entity/recordcontainers/jdito/contentProcess.js create mode 100644 entity/DSGVOConfiguration_entity/DSGVOConfiguration_entity.aod create mode 100644 entity/DSGVOConfiguration_entity/documentation.adoc create mode 100644 entity/DSGVOConfiguration_entity/entityfields/alreadymarked/valueProcess.js create mode 100644 entity/DSGVOConfiguration_entity/entityfields/configkeywordattributerelation/children/keywordentryid_param/valueProcess.js create mode 100644 entity/DSGVOConfiguration_entity/entityfields/count_usage/stateProcess.js create mode 100644 entity/DSGVOConfiguration_entity/entityfields/date_edit/valueProcess.js create mode 100644 entity/DSGVOConfiguration_entity/entityfields/date_new/valueProcess.js create mode 100644 entity/DSGVOConfiguration_entity/entityfields/entity/valueProcess.js create mode 100644 entity/DSGVOConfiguration_entity/entityfields/filter/valueProcess.js create mode 100644 entity/DSGVOConfiguration_entity/entityfields/filterconfigactions/children/anonymizepersons/onActionProcess.js create mode 100644 entity/DSGVOConfiguration_entity/entityfields/filterconfigactions/children/marktodelete/onActionProcess.js create mode 100644 entity/DSGVOConfiguration_entity/entityfields/filterconfigactions/children/marktodelete/titleProcess.js create mode 100644 entity/DSGVOConfiguration_entity/entityfields/opencontacts/onActionProcess.js create mode 100644 entity/DSGVOConfiguration_entity/entityfields/reason/dropDownProcess.js create mode 100644 entity/DSGVOConfiguration_entity/entityfields/reason/onValidation.js create mode 100644 entity/DSGVOConfiguration_entity/entityfields/reason/valueProcess.js create mode 100644 entity/DSGVOConfiguration_entity/entityfields/user_edit/valueProcess.js create mode 100644 entity/DSGVOConfiguration_entity/entityfields/user_new/valueProcess.js create mode 100644 entity/DSGVOConfiguration_entity/recordcontainers/db/onDBDelete.js create mode 100644 entity/DSGVOConfiguration_entity/recordcontainers/db/onDBInsert.js create mode 100644 entity/DSGVOConfiguration_entity/recordcontainers/db/onDBUpdate.js create mode 100644 entity/DSGVOConfiguration_entity/recordcontainers/db/recordfieldmappings/count_usage.value/expression.js create mode 100644 entity/DSGVODeleteFlag_entity/DSGVODeleteFlag_entity.aod create mode 100644 entity/DSGVODeleteFlag_entity/documentation.adoc create mode 100644 entity/DSGVODeleteFlag_entity/entityfields/dsgvoreasonkeywords/children/containername_param/valueProcess.js create mode 100644 entity/DSGVODeleteFlag_entity/entityfields/filteractions/children/addmanualdeleteflag/onActionProcess.js create mode 100644 entity/DSGVODeleteFlag_entity/entityfields/reason/displayValueProcess.js create mode 100644 entity/DSGVODeleteFlag_entity/recordcontainers/db/conditionProcess.js create mode 100644 entity/DSGVODeleteFlag_entity/recordcontainers/db/onDBDelete.js create mode 100644 entity/DSGVO_entity/entityfields/bindata/displayValueProcess.js create mode 100644 entity/DSGVO_entity/entityfields/bindata/mandatoryProcess.js create mode 100644 entity/DSGVO_entity/entityfields/bindata/stateProcess.js create mode 100644 entity/DSGVO_entity/entityfields/bindata/valueProcess.js create mode 100644 entity/Document_entity/entityfields/is_main_document/stateProcess.js create mode 100644 entity/Organisation_entity/entityfields/keywordcontactstates/children/blacklistids_param/valueProcess.js create mode 100644 entity/Person_entity/entityfields/dsgvodeleteflags/children/contactid_param/valueProcess.js create mode 100644 entity/Person_entity/entityfields/dsgvodeleteflags/stateProcess.js create mode 100644 entity/Person_entity/entityfields/keywordcontactstates/children/blacklistids_param/valueProcess.js create mode 100644 entity/Person_entity/entityfields/status/stateProcess.js create mode 100644 entity/Person_entity/recordcontainers/db/filterextensions/isemployee_filter/filterConditionProcess.js create mode 100644 entity/Person_entity/recordcontainers/db/filterextensions/isemployee_filter/filterValuesProcess.js create mode 100644 entity/Person_entity/recordcontainers/db/recordfieldmappings/campaigns/filterConditionProcess.js create mode 100644 entity/Person_entity/recordcontainers/db/recordfieldmappings/contracts/filterConditionProcess.js create mode 100644 entity/Person_entity/recordcontainers/db/recordfieldmappings/offers/filterConditionProcess.js create mode 100644 entity/Person_entity/recordcontainers/db/recordfieldmappings/orders/filterConditionProcess.js create mode 100644 entity/Person_entity/recordcontainers/db/recordfieldmappings/tasks/filterConditionProcess.js create mode 100644 neonContext/DSGVOConfiguration/DSGVOConfiguration.aod create mode 100644 neonContext/DSGVOConfigurationAttribute/DSGVOConfigurationAttribute.aod create mode 100644 neonContext/DSGVODeleteFlag/DSGVODeleteFlag.aod create mode 100644 neonView/DSGVOConfigurationAttributeFilter_view/DSGVOConfigurationAttributeFilter_view.aod create mode 100644 neonView/DSGVOConfigurationEdit_view/DSGVOConfigurationEdit_view.aod create mode 100644 neonView/DSGVOConfigurationFilterFooter_view/DSGVOConfigurationFilterFooter_view.aod create mode 100644 neonView/DSGVOConfigurationFilterHeader_view/DSGVOConfigurationFilterHeader_view.aod create mode 100644 neonView/DSGVOConfigurationFilter_view/DSGVOConfigurationFilter_view.aod create mode 100644 neonView/DSGVOConfigurationPreview_view/DSGVOConfigurationPreview_view.aod create mode 100644 neonView/DSGVODeleteFlagEdit_view/DSGVODeleteFlagEdit_view.aod create mode 100644 neonView/DSGVODeleteFlagFilter_view/DSGVODeleteFlagFilter_view.aod create mode 100644 neonView/DSGVODeleteFlagPreview_view/DSGVODeleteFlagPreview_view.aod create mode 100644 neonView/PersonDSGVO_view/PersonDSGVO_view.aod create mode 100644 neonView/PersonFilterOverlay_view/PersonFilterOverlay_view.aod create mode 100644 process/DSGVOAnonymize_serverProcess/DSGVOAnonymize_serverProcess.aod create mode 100644 process/DSGVOAnonymize_serverProcess/process.js create mode 100644 process/DSGVOSetDeleteFlags_serverProcess/DSGVOSetDeleteFlags_serverProcess.aod create mode 100644 process/DSGVOSetDeleteFlags_serverProcess/process.js create mode 100644 role/PROJECT_DSGVO/PROJECT_DSGVO.aod 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 0000000000..615a86a2a8 --- /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 0000000000..b2007f7723 --- /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 0000000000..97170f5219 --- /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 0000000000..fde4201e56 --- /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> + </changeSet> + <createIndex tableName="DSGVODELETEFLAG" indexName="IDX_DSGVODELETEFLAG_CONTACT_ID"> + <column name="CONTACT_ID"/> + </createIndex> +</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 0000000000..29de89e9eb --- /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 0000000000..d565392a6e --- /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 0000000000..5c7ecb0382 --- /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 0000000000..b3fce728b5 --- /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/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/changelog.xml index 887abd3911..33011d5d95 100644 --- a/.liquibase/Data_alias/basic/2021.0.3/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/changelog.xml @@ -10,4 +10,5 @@ <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"/> </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 78c7b235bd..a05e5910ca 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/init/data/insert_asys_aliasconfig.xml b/.liquibase/_____SYSTEMALIAS/basic/init/data/insert_asys_aliasconfig.xml index 017cb8a587..63efbcc25f 100644 --- a/.liquibase/_____SYSTEMALIAS/basic/init/data/insert_asys_aliasconfig.xml +++ b/.liquibase/_____SYSTEMALIAS/basic/init/data/insert_asys_aliasconfig.xml @@ -62,5 +62,18 @@ <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.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="f50ee138-12d9-420d-a4f9-9b8257e207e4"/> + <column name="DATE_EDIT" valueDate="2020-09-28T04:50:36"/> + <column name="ID" value="52b8cce2-d023-4925-beaf-95503ae93a2f"/> + </insert> </changeSet> </databaseChangeLog> \ No newline at end of file diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod index 5943721355..aec7ecad42 100644 --- a/aliasDefinition/Data_alias/Data_alias.aod +++ b/aliasDefinition/Data_alias/Data_alias.aod @@ -20026,6 +20026,245 @@ </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>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="false" /> + <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="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>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> </entities> </entityGroup> </aliasDefDb> 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 0000000000..1c4215342d --- /dev/null +++ b/aliasDefinition/Data_alias_noAudit/Data_alias_noAudit.aod @@ -0,0 +1,16142 @@ +<?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>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> + </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> + <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>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="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>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>LEAD</name> + <dbName></dbName> + <idColumn>LEADID</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>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>LEADID</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_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>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> + </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="true" /> + <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="true" /> + <isUnique v="false" /> + <index v="false" /> + <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>SENDER</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>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> + </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>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> + <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" /> + <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> + </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>DUPLICATECLUSTERS</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>DUPLICATEID</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>CLUSTERID</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>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> + </entities> + </entityGroup> + </aliasDefDb> + </aliasDefinitionSub> +</aliasDefinition> diff --git a/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod b/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod index 70f6ccdb13..25b0e7dfca 100644 --- a/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod +++ b/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod @@ -357,6 +357,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/entityfields/newmodule/stateProcess.js b/entity/360Degree_entity/entityfields/newmodule/stateProcess.js index 0b02ed053a..bb33b08a68 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/Address_entity/afterOperatingState.js b/entity/Address_entity/afterOperatingState.js index 23f607ff7d..8a3ecf6feb 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.get("$sys.operatingstate") == neon.OPERATINGSTATE_VIEW) +{ + vars.set("$context.PushDataPrivacyNotification", "false"); +} + diff --git a/entity/Address_entity/recordcontainers/db/onDBInsert.js b/entity/Address_entity/recordcontainers/db/onDBInsert.js index cddb15a9f8..b088c7a1b3 100644 --- a/entity/Address_entity/recordcontainers/db/onDBInsert.js +++ b/entity/Address_entity/recordcontainers/db/onDBInsert.js @@ -49,7 +49,11 @@ if(scopeType == "Organisation") } } -DataPrivacyUtils.notifyNeedDataPrivacyUpdate(rowdata["ADDRESS.CONTACT_ID"], vars.get("$param.ShowDsgvoMessage_param")); +if(vars.exists("$context.PushDataPrivacyNotification") && vars.get("$context.PushDataPrivacyNotification") == "false" && vars.get("$sys.isclient")) +{ + 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); diff --git a/entity/Address_entity/recordcontainers/db/onDBUpdate.js b/entity/Address_entity/recordcontainers/db/onDBUpdate.js index 87c3f2c271..8ce04bc6f3 100644 --- a/entity/Address_entity/recordcontainers/db/onDBUpdate.js +++ b/entity/Address_entity/recordcontainers/db/onDBUpdate.js @@ -7,7 +7,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" && vars.get("$sys.isclient")) +{ + 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") diff --git a/entity/AttributeRelation_entity/recordcontainers/jdito/onInsert.js b/entity/AttributeRelation_entity/recordcontainers/jdito/onInsert.js index 2836dcd5bc..f456452e9d 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 e88af46b5b..5dc936c76f 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 7537ce2687..19cd75197b 100644 --- a/entity/AttributeUsage_entity/AttributeUsage_entity.aod +++ b/entity/AttributeUsage_entity/AttributeUsage_entity.aod @@ -17,6 +17,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> diff --git a/entity/Campaign_entity/Campaign_entity.aod b/entity/Campaign_entity/Campaign_entity.aod index ab1ebaa775..a7d5b31ea8 100644 --- a/entity/Campaign_entity/Campaign_entity.aod +++ b/entity/Campaign_entity/Campaign_entity.aod @@ -195,6 +195,12 @@ <fieldName>CampaignConsumer</fieldName> <isConsumer v="false" /> </entityDependency> + <entityDependency> + <name>3cc06d94-0274-49be-8d1b-7a5f2a3a689e</name> + <entityName>Person_entity</entityName> + <fieldName>Campaigns</fieldName> + <isConsumer v="false" /> + </entityDependency> </dependencies> </entityProvider> <entityConsumer> diff --git a/entity/Communication_entity/afterOperatingState.js b/entity/Communication_entity/afterOperatingState.js index 7085e9f853..8c0033867c 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/DSGVOConfigurationAttribute_entity/DSGVOConfigurationAttribute_entity.aod b/entity/DSGVOConfigurationAttribute_entity/DSGVOConfigurationAttribute_entity.aod new file mode 100644 index 0000000000..b9124ce356 --- /dev/null +++ b/entity/DSGVOConfigurationAttribute_entity/DSGVOConfigurationAttribute_entity.aod @@ -0,0 +1,76 @@ +<?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>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> + <dependencies> + <entityDependency> + <name>96e9f7e0-1f47-47d5-beee-0e28b3e203e1</name> + <entityName>DSGVOConfiguration_entity</entityName> + <fieldName>DSGVOConfigurationAttributes</fieldName> + <isConsumer v="false" /> + </entityDependency> + </dependencies> + </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" /> + <isSelectionAction v="true" /> + </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 0000000000..4441147717 --- /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/DSGVOConfigurationAttribute_entity/entityfields/attribute_name/displayValueProcess.js b/entity/DSGVOConfigurationAttribute_entity/entityfields/attribute_name/displayValueProcess.js new file mode 100644 index 0000000000..a5717eabb7 --- /dev/null +++ b/entity/DSGVOConfigurationAttribute_entity/entityfields/attribute_name/displayValueProcess.js @@ -0,0 +1,5 @@ +import("system.vars"); +import("system.translate"); +import("system.result"); + +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 0000000000..0c425285f1 --- /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 0000000000..7bc43bb218 --- /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 0000000000..10bd0fec53 --- /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 0000000000..bd4950c921 --- /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 0000000000..5336dde6e7 --- /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.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> + <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" /> + <isSelectionAction v="false" /> + <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 0000000000..0c451d61a3 --- /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 0000000000..2689a33903 --- /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 0000000000..abbda7b196 --- /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 0000000000..fb8e12bf23 --- /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 0000000000..1cd90b34ea --- /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 0000000000..0c68e0b1ce --- /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/DSGVOConfiguration_entity/entityfields/entity/valueProcess.js b/entity/DSGVOConfiguration_entity/entityfields/entity/valueProcess.js new file mode 100644 index 0000000000..c8fadb7380 --- /dev/null +++ b/entity/DSGVOConfiguration_entity/entityfields/entity/valueProcess.js @@ -0,0 +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 0000000000..1d66c48f85 --- /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 0000000000..84cb5f3efd --- /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 0000000000..d811e528c0 --- /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 0000000000..9c5b8ed9a4 --- /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 0000000000..36f8bf311d --- /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 0000000000..11968ec24e --- /dev/null +++ b/entity/DSGVOConfiguration_entity/entityfields/reason/dropDownProcess.js @@ -0,0 +1,12 @@ +import("system.logging"); +import("system.result"); +import("KeywordRegistry_basic"); +import("Keyword_lib"); + +let keywords = KeywordUtils.getEntryNamesAndIdsByContainer($KeywordRegistry.dsgvoReason()); + +keywords.shift(); + +logging.log(JSON.stringify(keywords)); + +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 0000000000..315525a5cb --- /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 0000000000..13e5f3cef5 --- /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 0000000000..4b5364ae75 --- /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 0000000000..821388b7f4 --- /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 0000000000..e291fe5c7e --- /dev/null +++ b/entity/DSGVOConfiguration_entity/recordcontainers/db/onDBDelete.js @@ -0,0 +1,17 @@ +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()) + .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 0000000000..d5181af765 --- /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 0000000000..d5181af765 --- /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 0000000000..d2be782383 --- /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 0000000000..2689a96d7c --- /dev/null +++ b/entity/DSGVODeleteFlag_entity/DSGVODeleteFlag_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.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> + <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> + <dependencies> + <entityDependency> + <name>94915ca8-aca8-457a-ac12-05408ba8ab37</name> + <entityName>Person_entity</entityName> + <fieldName>DSGVODeleteFlags</fieldName> + <isConsumer v="false" /> + </entityDependency> + </dependencies> + </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 0000000000..415fdca25d --- /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 0000000000..7aca2ec205 --- /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 0000000000..9601edb784 --- /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 0000000000..7e63a5beb3 --- /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 0000000000..a7c168d2d1 --- /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 0000000000..b6365c6f9f --- /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/DSGVO_entity/DSGVO_entity.aod b/entity/DSGVO_entity/DSGVO_entity.aod index be47ef0d40..1e6d35b729 100644 --- a/entity/DSGVO_entity/DSGVO_entity.aod +++ b/entity/DSGVO_entity/DSGVO_entity.aod @@ -52,6 +52,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> diff --git a/entity/DSGVO_entity/entityfields/bindata/displayValueProcess.js b/entity/DSGVO_entity/entityfields/bindata/displayValueProcess.js new file mode 100644 index 0000000000..82d715638a --- /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 0000000000..4ec1aa1eb0 --- /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 0000000000..51bae3fa77 --- /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 0000000000..5a5737b060 --- /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 154dd846f4..d5f013ed1b 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 5197563de5..014592cb29 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/Document_entity/Document_entity.aod b/entity/Document_entity/Document_entity.aod index 9ac3e62ac8..59a7101729 100644 --- a/entity/Document_entity/Document_entity.aod +++ b/entity/Document_entity/Document_entity.aod @@ -111,6 +111,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> 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 0000000000..e938ad5864 --- /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 044f5d99f8..e835769e69 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/KeywordAttributeRelation_entity/KeywordAttributeRelation_entity.aod b/entity/KeywordAttributeRelation_entity/KeywordAttributeRelation_entity.aod index b5a77caf97..c21c9e8558 100644 --- a/entity/KeywordAttributeRelation_entity/KeywordAttributeRelation_entity.aod +++ b/entity/KeywordAttributeRelation_entity/KeywordAttributeRelation_entity.aod @@ -58,6 +58,12 @@ <fieldName>KeywordAttributeRelations</fieldName> <isConsumer v="false" /> </entityDependency> + <entityDependency> + <name>e6e2abfd-b504-47ff-bdb3-5927aaf9df5c</name> + <entityName>DSGVOConfiguration_entity</entityName> + <fieldName>ConfigKeywordAttributeRelation</fieldName> + <isConsumer v="false" /> + </entityDependency> </dependencies> <children> <entityParameter> diff --git a/entity/KeywordEntry_entity/KeywordEntry_entity.aod b/entity/KeywordEntry_entity/KeywordEntry_entity.aod index 125241142e..41dd103062 100644 --- a/entity/KeywordEntry_entity/KeywordEntry_entity.aod +++ b/entity/KeywordEntry_entity/KeywordEntry_entity.aod @@ -103,12 +103,6 @@ <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> @@ -343,12 +337,6 @@ <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> @@ -849,6 +837,24 @@ <fieldName>OrderedBySortingFieldKeywordsConsumer</fieldName> <isConsumer v="false" /> </entityDependency> + <entityDependency> + <name>815a5b03-64ec-4480-8a2b-f02077386158</name> + <entityName>Organisation_entity</entityName> + <fieldName>KeywordContactStates</fieldName> + <isConsumer v="false" /> + </entityDependency> + <entityDependency> + <name>51a15faf-a4a8-45be-8aae-416e6288439f</name> + <entityName>DSGVODeleteFlag_entity</entityName> + <fieldName>DSGVOReasonKeywords</fieldName> + <isConsumer v="false" /> + </entityDependency> + <entityDependency> + <name>a96898c5-5af2-4e91-84b0-ed079bbfbe06</name> + <entityName>Person_entity</entityName> + <fieldName>KeywordContactStates</fieldName> + <isConsumer v="false" /> + </entityDependency> </dependencies> <children> <entityParameter> diff --git a/entity/Organisation_entity/Organisation_entity.aod b/entity/Organisation_entity/Organisation_entity.aod index b0b919e690..e0b542fa60 100644 --- a/entity/Organisation_entity/Organisation_entity.aod +++ b/entity/Organisation_entity/Organisation_entity.aod @@ -458,7 +458,7 @@ <dependency> <name>dependency</name> <entityName>KeywordEntry_entity</entityName> - <fieldName>SpecificContainerKeywords</fieldName> + <fieldName>OrderedBySortingFieldKeywords</fieldName> </dependency> <children> <entityParameter> @@ -466,6 +466,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> 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 0000000000..a52cc08735 --- /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/newemail/stateProcess.js b/entity/Organisation_entity/entityfields/newemail/stateProcess.js index aefbc6e8f7..5c748f19d4 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/Person_entity/Person_entity.aod b/entity/Person_entity/Person_entity.aod index acb1ac9f26..308a22e1ef 100644 --- a/entity/Person_entity/Person_entity.aod +++ b/entity/Person_entity/Person_entity.aod @@ -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> @@ -624,6 +625,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> @@ -632,13 +634,17 @@ <dependency> <name>dependency</name> <entityName>KeywordEntry_entity</entityName> - <fieldName>SpecificContainerKeywords</fieldName> + <fieldName>OrderedBySortingFieldKeywords</fieldName> </dependency> <children> <entityParameter> <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> @@ -742,6 +748,12 @@ <fieldName>Persons</fieldName> <isConsumer v="false" /> </entityDependency> + <entityDependency> + <name>fe217f3a-edb1-4972-b8f6-c8b517a34a48</name> + <entityName>DSGVOConfiguration_entity</entityName> + <fieldName>Persons</fieldName> + <isConsumer v="false" /> + </entityDependency> </dependencies> <children> <entityParameter> @@ -1319,6 +1331,29 @@ <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" /> @@ -1642,6 +1677,36 @@ <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> </recordFieldMappings> <linkInformation> <linkInformation> @@ -1728,6 +1793,13 @@ <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> </filterExtensions> </dbRecordContainer> <indexRecordContainer> diff --git a/entity/Person_entity/entityfields/addtocampaign/stateProcess.js b/entity/Person_entity/entityfields/addtocampaign/stateProcess.js index aefbc6e8f7..5c748f19d4 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/dsgvodeleteflags/children/contactid_param/valueProcess.js b/entity/Person_entity/entityfields/dsgvodeleteflags/children/contactid_param/valueProcess.js new file mode 100644 index 0000000000..7b6137b4d1 --- /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 0000000000..76191b70ac --- /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/keywordcontactstates/children/blacklistids_param/valueProcess.js b/entity/Person_entity/entityfields/keywordcontactstates/children/blacklistids_param/valueProcess.js new file mode 100644 index 0000000000..a52cc08735 --- /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 4941f4e681..602247f455 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"]}); 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/stateProcess.js b/entity/Person_entity/entityfields/newappointment/stateProcess.js index aefbc6e8f7..5c748f19d4 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/stateProcess.js b/entity/Person_entity/entityfields/newemail/stateProcess.js index aefbc6e8f7..5c748f19d4 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 aefbc6e8f7..5c748f19d4 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 aefbc6e8f7..5c748f19d4 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 aefbc6e8f7..5c748f19d4 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 aefbc6e8f7..5c748f19d4 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/openeditdefaultsview/stateProcess.js b/entity/Person_entity/entityfields/openeditdefaultsview/stateProcess.js index aefbc6e8f7..8ce4375618 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/status/stateProcess.js b/entity/Person_entity/entityfields/status/stateProcess.js new file mode 100644 index 0000000000..f0a13ec445 --- /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/recordcontainers/db/conditionProcess.js b/entity/Person_entity/recordcontainers/db/conditionProcess.js index 3388111583..c24eb7b7e0 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/isemployee_filter/filterConditionProcess.js b/entity/Person_entity/recordcontainers/db/filterextensions/isemployee_filter/filterConditionProcess.js new file mode 100644 index 0000000000..4ba4942ef3 --- /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 0000000000..4462144da5 --- /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/recordfieldmappings/campaigns/filterConditionProcess.js b/entity/Person_entity/recordcontainers/db/recordfieldmappings/campaigns/filterConditionProcess.js new file mode 100644 index 0000000000..7217d840fe --- /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/contracts/filterConditionProcess.js b/entity/Person_entity/recordcontainers/db/recordfieldmappings/contracts/filterConditionProcess.js new file mode 100644 index 0000000000..03e121a6f5 --- /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 0000000000..a977f62ef6 --- /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 0000000000..25c57f4cc5 --- /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/tasks/filterConditionProcess.js b/entity/Person_entity/recordcontainers/db/recordfieldmappings/tasks/filterConditionProcess.js new file mode 100644 index 0000000000..f54fd98dd3 --- /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/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index 1cf98cfded..25609bc12a 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -8095,43 +8095,43 @@ <key>Add to offer</key> </entry> <entry> - <key>Participant is already participating</key> + <key>Event Data</key> </entry> <entry> - <key>incl. Dependencies</key> + <key>On Site</key> </entry> <entry> - <key>Add %0 Observations</key> + <key>Event Type</key> </entry> <entry> - <key>Traits have already been defined for this salesproject phase.</key> + <key>Event Begin</key> </entry> <entry> - <key>Event Data</key> + <key>Event</key> </entry> <entry> - <key>On Site</key> + <key>other</key> </entry> <entry> - <key>Event Type</key> + <key>Event End</key> </entry> <entry> - <key>New child product</key> + <key>On site</key> </entry> <entry> - <key>Event Begin</key> + <key>Participant is already participating</key> </entry> <entry> - <key>Event</key> + <key>incl. Dependencies</key> </entry> <entry> - <key>other</key> + <key>Add %0 Observations</key> </entry> <entry> - <key>Event End</key> + <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>Communication: Link</key> @@ -8437,6 +8437,102 @@ <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> </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 c239d44833..827c44f0eb 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -10999,6 +10999,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> @@ -11012,9 +11015,7 @@ Bitte Datumseingabe prüfen</value> </entry> <entry> <key>Vacation</key> - </entry> - <entry> - <key>On site</key> + <value>Urlaub</value> </entry> <entry> <key>Price could not be determined</key> @@ -11083,6 +11084,97 @@ Bitte Datumseingabe prüfen</value> <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 festgeleten 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 Kauvertrag vorhanden</value> + </entry> + <entry> + <key>Count Usage</key> + <value>Anzahl der Verwendungen</value> + </entry> + <entry> + <key>Marked for deletion</key> + <value>Makiert zum Löschen</value> + </entry> + <entry> + <key>Add Manual Delete Flag</key> + <value>Füge mauelles Löschkenzeichen 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>Makieren zum Löschen</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>Makiere alle zum Löschen</value> + </entry> + <entry> + <key>Mark selection to delete</key> + <value>Makiere selectierte 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 Makierungen löschen?</value> + </entry> + <entry> + <key>Do you really want to anonymize all marked persons?</key> + <value>Möchtest wirklich alle zur Löschung makrierten Personen anonymisieren?</value> + </entry> + <entry> + <key>FILE MISSING</key> + <value>DATEI FEHLT</value> + </entry> <entry> <key>${SALESPROJECT_PROSPECT}</key> <value>Prospect</value> @@ -11111,6 +11203,27 @@ Bitte Datumseingabe prüfen</value> <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>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> </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 4f21302546..db9fcca19c 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -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> @@ -8202,9 +8205,6 @@ <entry> <key>Traits have already been defined for this salesproject phase.</key> </entry> - <entry> - <key>On Site</key> - </entry> <entry> <key>New child product</key> </entry> @@ -8325,9 +8325,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> @@ -8339,7 +8336,7 @@ </entry> <entry> <key>Value must be an integer</key> - </entry> + </entry> <entry> <key>Buyer</key> </entry> @@ -8519,6 +8516,108 @@ <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> </keyValueMap> <font name="Dialog" style="0" size="11" /> </language> diff --git a/neonContext/DSGVO/DSGVO.aod b/neonContext/DSGVO/DSGVO.aod index 1a7b678b32..a493e487ba 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 0000000000..d91e9c10ee --- /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 0000000000..9c6dc17b90 --- /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 0000000000..7797e1cfba --- /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/Person/Person.aod b/neonContext/Person/Person.aod index bc1cf78630..987e287781 100644 --- a/neonContext/Person/Person.aod +++ b/neonContext/Person/Person.aod @@ -66,5 +66,13 @@ <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/neonView/DSGVOConfigurationAttributeFilter_view/DSGVOConfigurationAttributeFilter_view.aod b/neonView/DSGVOConfigurationAttributeFilter_view/DSGVOConfigurationAttributeFilter_view.aod new file mode 100644 index 0000000000..6c68223336 --- /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 0000000000..e72917c6ff --- /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 0000000000..a9b323bda1 --- /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 0000000000..9d164a33b5 --- /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 0000000000..fbc0eaaec3 --- /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 0000000000..3752f87ff7 --- /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 0000000000..8961be2d48 --- /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/DSGVODeleteFlagFilter_view/DSGVODeleteFlagFilter_view.aod b/neonView/DSGVODeleteFlagFilter_view/DSGVODeleteFlagFilter_view.aod new file mode 100644 index 0000000000..a15dc8d1a8 --- /dev/null +++ b/neonView/DSGVODeleteFlagFilter_view/DSGVODeleteFlagFilter_view.aod @@ -0,0 +1,29 @@ +<?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>DSGVODeleteFlagFilter_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterable v="true" /> + <layout> + <groupLayout> + <name>layout</name> + </groupLayout> + </layout> + <children> + <tableViewTemplate> + <name>DSGVODeleteFlagFilterTable</name> + <favoriteActionGroup1>FilterActions</favoriteActionGroup1> + <isCreatable v="false" /> + <isEditable v="false" /> + <columns> + <neonTableColumn> + <name>786d40dd-9d7c-47b6-ad82-0130f8c5b5c0</name> + <entityField>REASON</entityField> + </neonTableColumn> + <neonTableColumn> + <name>68b05f9f-d50f-4fe8-89ec-fe1347008417</name> + <entityField>DATE_NEW</entityField> + </neonTableColumn> + </columns> + </tableViewTemplate> + </children> +</neonView> diff --git a/neonView/DSGVODeleteFlagPreview_view/DSGVODeleteFlagPreview_view.aod b/neonView/DSGVODeleteFlagPreview_view/DSGVODeleteFlagPreview_view.aod new file mode 100644 index 0000000000..74eb6ae512 --- /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 7b92fa1674..16f0ff1823 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 ff1974aa15..36360ea06b 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/PersonDSGVO_view/PersonDSGVO_view.aod b/neonView/PersonDSGVO_view/PersonDSGVO_view.aod new file mode 100644 index 0000000000..f6032747a6 --- /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/PersonFilterOverlay_view/PersonFilterOverlay_view.aod b/neonView/PersonFilterOverlay_view/PersonFilterOverlay_view.aod new file mode 100644 index 0000000000..d9c42e27f8 --- /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/PersonMain_view/PersonMain_view.aod b/neonView/PersonMain_view/PersonMain_view.aod index fd3103de79..d6983b3781 100644 --- a/neonView/PersonMain_view/PersonMain_view.aod +++ b/neonView/PersonMain_view/PersonMain_view.aod @@ -59,6 +59,11 @@ <entityField>LogHistories</entityField> <view>LogHistoryFilter_view</view> </neonViewReference> + <neonViewReference> + <name>f0895c2a-5517-4c7b-80ed-147e4078603d</name> + <entityField>#ENTITY</entityField> + <view>PersonDSGVO_view</view> + </neonViewReference> <neonViewReference> <name>82f19c55-fa96-43de-9f26-46069b28db31</name> <entityField>#ENTITY</entityField> diff --git a/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod b/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod index 1fcbd5b49a..357db8c7f3 100644 --- a/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod +++ b/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod @@ -106,14 +106,6 @@ <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" /> diff --git a/process/Attribute_lib/process.js b/process/Attribute_lib/process.js index 98ff92d9eb..965a947abf 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" ]; } diff --git a/process/Calendar_lib/process.js b/process/Calendar_lib/process.js index de9bc373d0..a88ae599df 100644 --- a/process/Calendar_lib/process.js +++ b/process/Calendar_lib/process.js @@ -1,658 +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 {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]; +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 {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/DSGVOAnonymize_serverProcess/DSGVOAnonymize_serverProcess.aod b/process/DSGVOAnonymize_serverProcess/DSGVOAnonymize_serverProcess.aod new file mode 100644 index 0000000000..0469b88491 --- /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 0000000000..221517b85f --- /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 0000000000..767a329542 --- /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 0000000000..5f21ca346a --- /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 4eeff329bd..c7c004a2ce 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); } @@ -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 - ]) + ]) } }); } @@ -472,13 +509,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 +534,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 +570,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 +624,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 +637,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 +647,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 +664,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 +685,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/KeywordRegistry_basic/process.js b/process/KeywordRegistry_basic/process.js index 6639de882d..defb4e85cb 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";}; @@ -200,6 +201,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";}; @@ -212,6 +214,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";}; diff --git a/role/PROJECT_DSGVO/PROJECT_DSGVO.aod b/role/PROJECT_DSGVO/PROJECT_DSGVO.aod new file mode 100644 index 0000000000..e2bdeeae87 --- /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> -- GitLab From 2f46f98943127019a7d89092d076e63c00d68f74 Mon Sep 17 00:00:00 2001 From: "m.groppe" <m.groppe@adito.de> Date: Mon, 26 Apr 2021 16:13:03 +0200 Subject: [PATCH 096/242] [Projekt: xRM-Marketing][TicketNr.: 1079762][Fehler: Mailversand (inkl. Testversand) funktioniert nicht, keine Fehlerausgabe in den Logs] --- .../recordcontainers/db/conditionProcess.js | 2 +- process/Bulkmail_lib/process.js | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/entity/BulkMailRecipient_entity/recordcontainers/db/conditionProcess.js b/entity/BulkMailRecipient_entity/recordcontainers/db/conditionProcess.js index da5905dd40..3d3dceaa05 100644 --- a/entity/BulkMailRecipient_entity/recordcontainers/db/conditionProcess.js +++ b/entity/BulkMailRecipient_entity/recordcontainers/db/conditionProcess.js @@ -24,7 +24,7 @@ else .medium($KeywordRegistry.communicationMediumCampaign$mail(), "BULKMAILRECIPIENT.EMAIL_ADDRESS") .rejected() .existNoSettings() - .getCondition()); + .buildCondition()); } if (excludeBlacklisted) { diff --git a/process/Bulkmail_lib/process.js b/process/Bulkmail_lib/process.js index 6261b7d596..93e1b3884b 100644 --- a/process/Bulkmail_lib/process.js +++ b/process/Bulkmail_lib/process.js @@ -175,7 +175,7 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pIsTestRun) subject : activitySubject, content : email.body }; - let contactLink = [[ContactUtils.getContextByPersOrg(personId, organisationid), contactId]]; + let contactLink = [[ContactUtils.getContextByPersOrg(personId, organisationId), contactId]]; ActivityUtils.insertNewActivity(activityData, bulkMailLink.concat(contactLink)); } }); @@ -209,7 +209,7 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pIsTestRun) { let isSuccess = false; - let contactId = recipientData[i][1]; + let contactId = recipientData[i]["CONTACT_ID"]; let email = mails[contactId]; if (email !== undefined) @@ -218,11 +218,12 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pIsTestRun) email.subject = "Test: "+subjects[contactId]; for (let j =0; j<testRecipientData.length;j++) { - if(testRecipientData[j][1]){ + if(testRecipientData[j][1]) + { email.toRecipients = [testRecipientData[j][1]]; isSuccess = email.send(); - Array.prototype.push.call(isSuccess ? successIds : failedIds, recipientData[i][0]); + Array.prototype.push.call(isSuccess ? successIds : failedIds, recipientData[i]["BULKMAILRECIPIENTID"]); if (testRecipientData[j][0]) { @@ -231,7 +232,7 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pIsTestRun) this.storeEmlFile(pBulkMailId, mailrunId, mailLogId,email.getEML()); } } - } + } } } -- GitLab From b0b6ea1394b0bc0ad32162536294a296809d9083 Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Mon, 26 Apr 2021 18:34:16 +0200 Subject: [PATCH 097/242] linkinformation for MailLog_entity fixed --- entity/MailLog_entity/MailLog_entity.aod | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/entity/MailLog_entity/MailLog_entity.aod b/entity/MailLog_entity/MailLog_entity.aod index a72d503f7b..37a6fcbb87 100644 --- a/entity/MailLog_entity/MailLog_entity.aod +++ b/entity/MailLog_entity/MailLog_entity.aod @@ -211,7 +211,7 @@ </dbRecordFieldMapping> <dbRecordFieldMapping> <name>DATE_OPENED.value</name> - <recordfield>LINK_CLICK.DATE_OPENED</recordfield> + <recordfield>WEBLINK_CLICK.DATE_OPENED</recordfield> </dbRecordFieldMapping> </recordFieldMappings> <linkInformation> @@ -238,8 +238,8 @@ </linkInformation> <linkInformation> <name>ad7f427d-fdd8-426d-b068-ce89e2dbeeda</name> - <tableName>LINK_CLICK</tableName> - <primaryKey>LINK_CLICKID</primaryKey> + <tableName>WEBLINK_CLICK</tableName> + <primaryKey>WEBLINK_CLICKID</primaryKey> <isUIDTable v="false" /> <readonly v="true" /> </linkInformation> -- GitLab From 23eed077452d69b3d8ae92a6689ed6b76066b2f0 Mon Sep 17 00:00:00 2001 From: Pascal Neub <p.neub@adito.de> Date: Tue, 27 Apr 2021 04:44:24 +0000 Subject: [PATCH 098/242] =?UTF-8?q?[Projekt:=20xRM-Sales][TicketNr.:=20107?= =?UTF-8?q?9035][Buyingcenter=20im=20VT=20Projekt=20um=20"Loyalit=C3=A4t"?= =?UTF-8?q?=20erweitern]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entity/Member_entity/Member_entity.aod | 13 +++++++++++++ .../person_attr_loyalty/displayValueProcess.js | 5 +++++ .../person_attr_loyalty.value/expression.js | 12 ++++++++++++ .../recordcontainers/jdito/contentProcess.js | 12 +++++++++--- neonView/MemberFilter_view/MemberFilter_view.aod | 8 ++++++++ process/AttributeRegistry_basic/process.js | 1 + 6 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 entity/Member_entity/entityfields/person_attr_loyalty/displayValueProcess.js create mode 100644 entity/Member_entity/recordcontainers/db/recordfieldmappings/person_attr_loyalty.value/expression.js diff --git a/entity/Member_entity/Member_entity.aod b/entity/Member_entity/Member_entity.aod index 2352659698..1db580cf75 100644 --- a/entity/Member_entity/Member_entity.aod +++ b/entity/Member_entity/Member_entity.aod @@ -321,6 +321,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 +426,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 +543,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 0000000000..b8857b8ffd --- /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 0000000000..16ce5832a5 --- /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 6a0466b6f9..707685adc1 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,7 +57,8 @@ memberRows = memberRows.map(function(row) row["POSITION"], row["TARGETCONTEXT"], row["recordType"], - row["MST_MEMBERROLE"] + row["MST_MEMBERROLE"], + row["PERSON_ATTR_LOYALTY"] ]; }); @@ -150,7 +152,11 @@ if (Utils.isNullOrEmpty(idValues) || memberRows.length === 0) persRows[counter][7], null, "DistrictResponsible", - "" + "", + (new AttributeRelationQuery( + row[3], + $AttributeRegistry.loyalty() + ).includeDisplayValue().getSingleAttribute() || {displayValue: ""}).displayValue ]); }); } diff --git a/neonView/MemberFilter_view/MemberFilter_view.aod b/neonView/MemberFilter_view/MemberFilter_view.aod index 87b04dc9cc..52aed59f96 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/process/AttributeRegistry_basic/process.js b/process/AttributeRegistry_basic/process.js index 0d5b68b1c7..4def7134d0 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";}; -- GitLab From 4d9a638e7856500cb53101ca75cc94595d0fa595 Mon Sep 17 00:00:00 2001 From: "s.pongratz" <s.pongratz@adito.de> Date: Tue, 27 Apr 2021 09:32:37 +0200 Subject: [PATCH 099/242] FixDSGVOBugs afteroperatingstate cannot find the operating state and liquibase changes were not included in the change set --- .../basic/2021.0.3/DSGVO/create_DSGVODeleteFlag.xml | 6 +++--- entity/Address_entity/afterOperatingState.js | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) 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 index fde4201e56..b633ff0878 100644 --- a/.liquibase/Data_alias/basic/2021.0.3/DSGVO/create_DSGVODeleteFlag.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/DSGVO/create_DSGVODeleteFlag.xml @@ -10,8 +10,8 @@ <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> - <createIndex tableName="DSGVODELETEFLAG" indexName="IDX_DSGVODELETEFLAG_CONTACT_ID"> - <column name="CONTACT_ID"/> - </createIndex> </databaseChangeLog> \ No newline at end of file diff --git a/entity/Address_entity/afterOperatingState.js b/entity/Address_entity/afterOperatingState.js index 8a3ecf6feb..83cbe277d0 100644 --- a/entity/Address_entity/afterOperatingState.js +++ b/entity/Address_entity/afterOperatingState.js @@ -6,8 +6,8 @@ if (vars.exists("$field.AddressSearch")) { neon.setFieldValue("$field.AddressSearch", "");//why is this needed? } - -if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_VIEW) + +if(vars.exists("$sys.operatingstate") && vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_VIEW) { vars.set("$context.PushDataPrivacyNotification", "false"); } -- GitLab From 86a48c691eeeb3307fe8f616efb009e8c9e054ce Mon Sep 17 00:00:00 2001 From: "s.pongratz" <s.pongratz@adito.de> Date: Tue, 27 Apr 2021 09:51:15 +0200 Subject: [PATCH 100/242] FixDSGVOBugs dublicate UID --- .../basic/init/data/insert_asys_aliasconfig.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/data/insert_asys_aliasconfig.xml b/.liquibase/_____SYSTEMALIAS/basic/init/data/insert_asys_aliasconfig.xml index 63efbcc25f..0368177e79 100644 --- a/.liquibase/_____SYSTEMALIAS/basic/init/data/insert_asys_aliasconfig.xml +++ b/.liquibase/_____SYSTEMALIAS/basic/init/data/insert_asys_aliasconfig.xml @@ -71,7 +71,7 @@ <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="f50ee138-12d9-420d-a4f9-9b8257e207e4"/> + <column name="NAME" value="147ccd88-62cb-41a6-a2b8-2784adc6cec0"/> <column name="DATE_EDIT" valueDate="2020-09-28T04:50:36"/> <column name="ID" value="52b8cce2-d023-4925-beaf-95503ae93a2f"/> </insert> -- GitLab From 46473ae33483ae64fe0f8bae7e060a41a1ee695c Mon Sep 17 00:00:00 2001 From: "b.ulrich" <b.ulrich@adito.de> Date: Tue, 27 Apr 2021 10:55:17 +0200 Subject: [PATCH 101/242] [Projekt: xRM-Sales][TicketNr.: 1079506][Liquibase Skript alter_ChecklistEntry.xml verhindert drop all & update des Data_alias] --- .../basic/2021.0.2/Checklists/alter_ChecklistEntry.xml | 7 +++++++ 1 file changed, 7 insertions(+) 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 924c2b6c71..440e5ab493 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" -- GitLab From e094b985d64ecce9044aa96e6fea26a4b4b2a3ac Mon Sep 17 00:00:00 2001 From: "m.groppe" <m.groppe@adito.de> Date: Tue, 27 Apr 2021 10:50:29 +0200 Subject: [PATCH 102/242] [Projekt: xRM-Marketing][TicketNr.: 1079812][Fehler/Optimierung Weblink] --- .../entityfields/placeholder/onValidation.js | 2 +- .../linktype.displayvalue/expression.js | 3 ++ .../_____LANGUAGE_EXTRA.aod | 3 ++ .../_____LANGUAGE_de/_____LANGUAGE_de.aod | 4 +++ .../_____LANGUAGE_en/_____LANGUAGE_en.aod | 3 ++ .../WeblinkMain_view/WeblinkMain_view.aod | 28 +++++++++++++++++++ 6 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 neonView/WeblinkMain_view/WeblinkMain_view.aod diff --git a/entity/Weblink_entity/entityfields/placeholder/onValidation.js b/entity/Weblink_entity/entityfields/placeholder/onValidation.js index 394f99c96f..8871cd1136 100644 --- a/entity/Weblink_entity/entityfields/placeholder/onValidation.js +++ b/entity/Weblink_entity/entityfields/placeholder/onValidation.js @@ -14,7 +14,7 @@ if (vars.get("$local.value")) var defaultPlaceholderNames = defaultPlaceholders.map(function(placeholder){return placeholder.placeholderName}); - if(defaultPlaceholderNames.includes(vars.get("$local.value")) || linkPlaceholders.includes("$local.value")) + if(defaultPlaceholderNames.includes(vars.get("$local.value")) || linkPlaceholders.includes(vars.get("$local.value"))) { result.string("Placeholders must be unique") } diff --git a/entity/Weblink_entity/recordcontainers/db/recordfieldmappings/linktype.displayvalue/expression.js b/entity/Weblink_entity/recordcontainers/db/recordfieldmappings/linktype.displayvalue/expression.js index e69de29bb2..e452bc6e87 100644 --- a/entity/Weblink_entity/recordcontainers/db/recordfieldmappings/linktype.displayvalue/expression.js +++ b/entity/Weblink_entity/recordcontainers/db/recordfieldmappings/linktype.displayvalue/expression.js @@ -0,0 +1,3 @@ +import("system.result"); +import("Keyword_lib"); +result.string(KeywordUtils.getResolvedTitleSqlPart("WeblinkType", "WEBLINK.LINKTYPE")); \ No newline at end of file diff --git a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index 25609bc12a..0e1c36f550 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -8533,6 +8533,9 @@ <entry> <key>All of the chosen records are already in the campaignstep</key> </entry> + <entry> + <key>Placeholders must be unique</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 827c44f0eb..c7495d17d0 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -7576,6 +7576,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> diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod index db9fcca19c..35cb7ac22f 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -8618,6 +8618,9 @@ <entry> <key>Duplicaterow rebuild</key> </entry> + <entry> + <key>Placeholders must be unique</key> + </entry> </keyValueMap> <font name="Dialog" style="0" size="11" /> </language> diff --git a/neonView/WeblinkMain_view/WeblinkMain_view.aod b/neonView/WeblinkMain_view/WeblinkMain_view.aod new file mode 100644 index 0000000000..d768584685 --- /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> -- GitLab From eacdb61de47a28b0b42615a87828eaf7449f089d Mon Sep 17 00:00:00 2001 From: Benjamin Ulrich <b.ulrich@adito.de> Date: Tue, 27 Apr 2021 11:26:04 +0000 Subject: [PATCH 103/242] =?UTF-8?q?[Projekt:=20xRM-Sales][TicketNr.:=20107?= =?UTF-8?q?7070][Demobeispiel=20erstellen=20(Produkte=20mit=20FW=20sowie?= =?UTF-8?q?=20St=C3=BCckliste)]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Data_alias/basic/_demoData/changelog.xml | 1 + .../_demoData/generatedData/prod2prod.xml | 70 +++ .../basic/_demoData/generatedData/product.xml | 386 +++++++++------ .../_demoData/generatedData/productprice.xml | 448 +++++++++++++----- 4 files changed, 638 insertions(+), 267 deletions(-) create mode 100644 .liquibase/Data_alias/basic/_demoData/generatedData/prod2prod.xml diff --git a/.liquibase/Data_alias/basic/_demoData/changelog.xml b/.liquibase/Data_alias/basic/_demoData/changelog.xml index d27f20c3d1..1030dcdc8b 100644 --- a/.liquibase/Data_alias/basic/_demoData/changelog.xml +++ b/.liquibase/Data_alias/basic/_demoData/changelog.xml @@ -44,6 +44,7 @@ <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"/> 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 0000000000..f8374b87cf --- /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 2de3cd44d1..23aaf952c6 100644 --- a/.liquibase/Data_alias/basic/_demoData/generatedData/product.xml +++ b/.liquibase/Data_alias/basic/_demoData/generatedData/product.xml @@ -1,230 +1,330 @@ <?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="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:33"/> + <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> </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 2bf76a4ff9..983a1db294 100644 --- a/.liquibase/Data_alias/basic/_demoData/generatedData/productprice.xml +++ b/.liquibase/Data_alias/basic/_demoData/generatedData/productprice.xml @@ -1,240 +1,440 @@ <?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="CONTACT_ID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/> <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="CONTACT_ID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/> <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="CONTACT_ID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/> <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="CONTACT_ID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/> <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="CONTACT_ID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/> <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="CONTACT_ID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/> <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="CONTACT_ID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/> <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 -- GitLab From 279a229434763a0993768f6a4308cbafae4b01e8 Mon Sep 17 00:00:00 2001 From: Andreas Mayr <a.mayr@adito.de> Date: Tue, 27 Apr 2021 11:28:32 +0000 Subject: [PATCH 104/242] [Projekt: Entwicklung - Infrastruktur][TicketNr.: 1072111][entity "EmployeeToken_entity" ist nicht dokumentiert.] --- .../EmployeeToken_entity.aod | 1 + .../EmployeeToken_entity/documentation.adoc | 12 ++++++ process/blobHandler/process.js | 38 +++++++++++++++++++ 3 files changed, 51 insertions(+) create mode 100644 entity/EmployeeToken_entity/documentation.adoc diff --git a/entity/EmployeeToken_entity/EmployeeToken_entity.aod b/entity/EmployeeToken_entity/EmployeeToken_entity.aod index bb7b974062..8f90eef25a 100644 --- a/entity/EmployeeToken_entity/EmployeeToken_entity.aod +++ b/entity/EmployeeToken_entity/EmployeeToken_entity.aod @@ -3,6 +3,7 @@ <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> diff --git a/entity/EmployeeToken_entity/documentation.adoc b/entity/EmployeeToken_entity/documentation.adoc new file mode 100644 index 0000000000..bae9bc6293 --- /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/process/blobHandler/process.js b/process/blobHandler/process.js index 210e350aff..6092c67687 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); -- GitLab From 559069f26159a1bd5dd775d97dccfb3018c06061 Mon Sep 17 00:00:00 2001 From: Benjamin Ulrich <b.ulrich@adito.de> Date: Tue, 27 Apr 2021 12:01:35 +0000 Subject: [PATCH 105/242] 1073720 fix order preset salesproject --- .../children/neworder/onActionProcess.js | 2 +- entity/Order_entity/Order_entity.aod | 2 + .../entityfields/contact_id/onValueChange.js | 2 +- .../entityfields/isolanguage/valueProcess.js | 16 ++++++++ .../entityfields/object_rowid/valueProcess.js | 37 +++++++++++++++++++ process/Contact_lib/process.js | 33 ++++++++++++++--- 6 files changed, 84 insertions(+), 8 deletions(-) create mode 100644 entity/Order_entity/entityfields/isolanguage/valueProcess.js create mode 100644 entity/Order_entity/entityfields/object_rowid/valueProcess.js diff --git a/entity/360Degree_entity/entityfields/newmodule/children/neworder/onActionProcess.js b/entity/360Degree_entity/entityfields/newmodule/children/neworder/onActionProcess.js index 5c2ee2f884..eb125f5f59 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/Order_entity/Order_entity.aod b/entity/Order_entity/Order_entity.aod index 090bc46b1a..5bf30a370a 100644 --- a/entity/Order_entity/Order_entity.aod +++ b/entity/Order_entity/Order_entity.aod @@ -175,6 +175,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> @@ -519,6 +520,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/contact_id/onValueChange.js b/entity/Order_entity/entityfields/contact_id/onValueChange.js index 65ebe4338b..f9eb528b6d 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 0000000000..34f97d7216 --- /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 0000000000..2d2ca846a9 --- /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/process/Contact_lib/process.js b/process/Contact_lib/process.js index 2824ee4036..54602028f4 100644 --- a/process/Contact_lib/process.js +++ b/process/Contact_lib/process.js @@ -179,8 +179,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 +206,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 +233,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; } -- GitLab From 80b5d1f90d5cb987ed0840797149478f62c8391b Mon Sep 17 00:00:00 2001 From: "p.neub" <p.neub@adito.de> Date: Tue, 27 Apr 2021 15:53:42 +0200 Subject: [PATCH 106/242] [Projekt: xRM-Sales][TicketNr.: 1079704][Fehlende Keyword Migration Competition_entity] --- .../Competition_entity/entityfields/reason/dropDownProcess.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/entity/Competition_entity/entityfields/reason/dropDownProcess.js b/entity/Competition_entity/entityfields/reason/dropDownProcess.js index 8e12cae7f3..d134de8779 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) { -- GitLab From 13e9d6fc119ae1f810bc878ad4764f4b7d76fc57 Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Wed, 28 Apr 2021 09:24:03 +0200 Subject: [PATCH 107/242] 1079499 communication settings in organisation --- .../CommunicationSettings_entity.aod | 6 ++++++ .../Organisation_entity.aod | 14 ++++++++++++++ .../children/contactid_param/valueProcess.js | 4 ++++ neonContext/Organisation/Organisation.aod | 4 ++++ .../OrganisationMain_view.aod | 5 +++++ .../OrganisationMarketing_view.aod | 18 ++++++++++++++++++ 6 files changed, 51 insertions(+) create mode 100644 entity/Organisation_entity/entityfields/contactcommunicationsettings/children/contactid_param/valueProcess.js create mode 100644 neonView/OrganisationMarketing_view/OrganisationMarketing_view.aod diff --git a/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod b/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod index 09065e34bb..bfa47c0a1f 100644 --- a/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod +++ b/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod @@ -24,6 +24,12 @@ <fieldName>ContactCommunicationSettings</fieldName> <isConsumer v="false" /> </entityDependency> + <entityDependency> + <name>f94ce98a-46e1-4666-a7ef-2685baa3fcae</name> + <entityName>Organisation_entity</entityName> + <fieldName>ContactCommunicationSettings</fieldName> + <isConsumer v="false" /> + </entityDependency> </dependencies> </entityProvider> <entityField> diff --git a/entity/Organisation_entity/Organisation_entity.aod b/entity/Organisation_entity/Organisation_entity.aod index e0b542fa60..cf70abb5c6 100644 --- a/entity/Organisation_entity/Organisation_entity.aod +++ b/entity/Organisation_entity/Organisation_entity.aod @@ -1481,6 +1481,20 @@ <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> </entityFields> <recordContainers> <dbRecordContainer> diff --git a/entity/Organisation_entity/entityfields/contactcommunicationsettings/children/contactid_param/valueProcess.js b/entity/Organisation_entity/entityfields/contactcommunicationsettings/children/contactid_param/valueProcess.js new file mode 100644 index 0000000000..7b6137b4d1 --- /dev/null +++ b/entity/Organisation_entity/entityfields/contactcommunicationsettings/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/neonContext/Organisation/Organisation.aod b/neonContext/Organisation/Organisation.aod index f3e985e770..4fdc9462f1 100644 --- a/neonContext/Organisation/Organisation.aod +++ b/neonContext/Organisation/Organisation.aod @@ -71,5 +71,9 @@ <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/neonView/OrganisationMain_view/OrganisationMain_view.aod b/neonView/OrganisationMain_view/OrganisationMain_view.aod index 9457155195..dff4f05bbf 100644 --- a/neonView/OrganisationMain_view/OrganisationMain_view.aod +++ b/neonView/OrganisationMain_view/OrganisationMain_view.aod @@ -80,5 +80,10 @@ <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/OrganisationMarketing_view/OrganisationMarketing_view.aod b/neonView/OrganisationMarketing_view/OrganisationMarketing_view.aod new file mode 100644 index 0000000000..d5ae1fe81a --- /dev/null +++ b/neonView/OrganisationMarketing_view/OrganisationMarketing_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>OrganisationMarketing_view</name> + <title>Advertising</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <boxLayout> + <name>layout</name> + </boxLayout> + </layout> + <children> + <neonViewReference> + <name>0561b125-ac76-4ee1-829c-8fd954204f7d</name> + <entityField>ContactCommunicationSettings</entityField> + <view>CommunicationSettingsFilter_view</view> + </neonViewReference> + </children> +</neonView> -- GitLab From b6f59af1d91832883b8aa7b556cf39328e2fb7cc Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Wed, 28 Apr 2021 09:56:31 +0200 Subject: [PATCH 108/242] 1079660 remove legacy commRestriction --- .../CommRestriction_Entity.aod | 15 ----------- .../Organisation_entity.aod | 14 ---------- .../children/contactid_param/valueProcess.js | 4 --- entity/Person_entity/Person_entity.aod | 14 ---------- .../children/contactid_param/valueProcess.js | 4 --- neonContext/Organisation/Organisation.aod | 2 +- neonContext/Person/Person.aod | 2 +- .../OrganisationAttribute_view.aod} | 7 +---- .../OrganisationMain_view.aod | 2 +- .../PersonAttribute_view.aod} | 7 +---- neonView/PersonMain_view/PersonMain_view.aod | 2 +- process/Bulkmail_lib/process.js | 27 ++++++++++++++----- process/Contact_lib/process.js | 2 ++ 13 files changed, 29 insertions(+), 73 deletions(-) delete mode 100644 entity/Organisation_entity/entityfields/commrestrictions/children/contactid_param/valueProcess.js delete mode 100644 entity/Person_entity/entityfields/commrestrictions/children/contactid_param/valueProcess.js rename neonView/{OrganisationAttributeRestriction_view/OrganisationAttributeRestriction_view.aod => OrganisationAttribute_view/OrganisationAttribute_view.aod} (71%) rename neonView/{PersonAttributeRestriction_view/PersonAttributeRestriction_view.aod => PersonAttribute_view/PersonAttribute_view.aod} (72%) diff --git a/entity/CommRestriction_Entity/CommRestriction_Entity.aod b/entity/CommRestriction_Entity/CommRestriction_Entity.aod index b1604aa94b..c685eb6e0c 100644 --- a/entity/CommRestriction_Entity/CommRestriction_Entity.aod +++ b/entity/CommRestriction_Entity/CommRestriction_Entity.aod @@ -5,7 +5,6 @@ <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/Organisation_entity/Organisation_entity.aod b/entity/Organisation_entity/Organisation_entity.aod index e0b542fa60..dcedd377b2 100644 --- a/entity/Organisation_entity/Organisation_entity.aod +++ b/entity/Organisation_entity/Organisation_entity.aod @@ -954,20 +954,6 @@ <name>OnlyOwnSupervised_param</name> <expose v="true" /> </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/Organisation_entity/entityfields/commrestrictions/children/contactid_param/valueProcess.js</valueProcess> - </entityParameter> - </children> - </entityConsumer> <entityField> <name>COMMRESTRICTIONS_ACTIVE</name> <title>Commrestrictions</title> 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 08da3b121c..0000000000 --- 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/Person_entity/Person_entity.aod b/entity/Person_entity/Person_entity.aod index 308a22e1ef..72bf02195b 100644 --- a/entity/Person_entity/Person_entity.aod +++ b/entity/Person_entity/Person_entity.aod @@ -874,20 +874,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> 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 375a85e730..0000000000 --- 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/neonContext/Organisation/Organisation.aod b/neonContext/Organisation/Organisation.aod index f3e985e770..655651ab42 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> diff --git a/neonContext/Person/Person.aod b/neonContext/Person/Person.aod index 987e287781..1f9f01bbf1 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> 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 946e4932d3..a067a31a6b 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/OrganisationMain_view/OrganisationMain_view.aod b/neonView/OrganisationMain_view/OrganisationMain_view.aod index 9457155195..fb2963ceea 100644 --- a/neonView/OrganisationMain_view/OrganisationMain_view.aod +++ b/neonView/OrganisationMain_view/OrganisationMain_view.aod @@ -53,7 +53,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> 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 5202135ce5..47eb14656c 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/PersonMain_view/PersonMain_view.aod b/neonView/PersonMain_view/PersonMain_view.aod index d6983b3781..cfbe086984 100644 --- a/neonView/PersonMain_view/PersonMain_view.aod +++ b/neonView/PersonMain_view/PersonMain_view.aod @@ -42,7 +42,7 @@ <neonViewReference> <name>0470a456-1132-4802-ba69-4a1b562b8f14</name> <entityField>#ENTITY</entityField> - <view>PersonAttributeRestriction_view</view> + <view>PersonAttribute_view</view> </neonViewReference> <neonViewReference> <name>19a5f9ed-228d-4352-9e82-e7aa690648e9</name> diff --git a/process/Bulkmail_lib/process.js b/process/Bulkmail_lib/process.js index 93e1b3884b..15cefff32f 100644 --- a/process/Bulkmail_lib/process.js +++ b/process/Bulkmail_lib/process.js @@ -278,10 +278,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()) @@ -416,7 +419,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(); } @@ -714,7 +721,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()); @@ -839,6 +850,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/Contact_lib/process.js b/process/Contact_lib/process.js index 54602028f4..261d7d63d4 100644 --- a/process/Contact_lib/process.js +++ b/process/Contact_lib/process.js @@ -557,6 +557,8 @@ 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) { -- GitLab From 2fd3ccd0b4ffbc16c15779b82d63537ff9493c02 Mon Sep 17 00:00:00 2001 From: Daniel Tran <d.tran@adito.de> Date: Thu, 29 Apr 2021 07:28:37 +0000 Subject: [PATCH 109/242] =?UTF-8?q?[Projekt:=20xRM-ContactManagement][Tick?= =?UTF-8?q?etNr.:=201077287][updateAllAdressLocations=20sollte=20bei=20inv?= =?UTF-8?q?aliden=20Datens=C3=A4tzen=20weiterlaufen]=20-=20Added=20logic,?= =?UTF-8?q?=20to=20prevent=20process=20from=20stopping=20when=20=20=20=20?= =?UTF-8?q?=20data=20is=20invalid=20and=20implemented=20logic=20to=20colle?= =?UTF-8?q?ct=20uids=20of=20=20=20=20=20invalid=20data=20sets=20and=20prin?= =?UTF-8?q?t=20it=20after=20process=20is=20finished.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../process.js | 28 ++++++++++++++++--- .../process.js | 28 ++++++++++++++++--- 2 files changed, 48 insertions(+), 8 deletions(-) diff --git a/process/setMissingAddressLocations_serverProcess/process.js b/process/setMissingAddressLocations_serverProcess/process.js index 38efd07055..7cef5bfae4 100644 --- a/process/setMissingAddressLocations_serverProcess/process.js +++ b/process/setMissingAddressLocations_serverProcess/process.js @@ -1,9 +1,12 @@ +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()) { @@ -18,14 +21,31 @@ if (locationSearch.isEnabled()) 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) + + try { - locationUpdates.push(["ADDRESS", ["LAT", "LON"], null, [location.lat, location.lon], - newWhere("ADDRESS.ADDRESSID", addressId).buildCondition()]); + var location = locationSearch.getGeoLocation(addressData); + if (location) + { + locationUpdates.push(["ADDRESS", ["LAT", "LON"], null, [location.lat, location.lon], + newWhere("ADDRESS.ADDRESSID", addressId).buildCondition()]); + } + } + catch (pException) + { + malformedAddressData.push(addressId); } }); if (locationUpdates.length > 0) db.updates(locationUpdates); }); + if (Utils.isNotNullOrEmptyString(malformedAddressData)) + { + errMsg = "updateAllAddressLocations_serverProcess: Something went wrong, during updating address locations, with the following uids: "; + malformedAddressData.forEach(function(pMalformedData) + { + 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 5341f47ddf..6239ba470a 100644 --- a/process/updateAllAddressLocations_serverProcess/process.js +++ b/process/updateAllAddressLocations_serverProcess/process.js @@ -1,9 +1,12 @@ 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()) { @@ -16,14 +19,31 @@ if (locationSearch.isEnabled()) 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) + try { - locationUpdates.push(["ADDRESS", ["LAT", "LON"], null, [location.lat, location.lon], - newWhere("ADDRESS.ADDRESSID", addressId).buildCondition()]); + var location = locationSearch.getGeoLocation(addressData); + + if (location) + { + locationUpdates.push(["ADDRESS", ["LAT", "LON"], null, [location.lat, location.lon], + newWhere("ADDRESS.ADDRESSID", addressId).buildCondition()]); + } + } + catch (pException) + { + malformedAddressData.push(addressId); } }); if (locationUpdates.length > 0) db.updates(locationUpdates); }); + if (Utils.isNotNullOrEmptyString(malformedAddressData)) + { + errMsg = "updateAllAddressLocations_serverProcess: Something went wrong, during updating address locations, with the following uids: "; + malformedAddressData.forEach(function(pMalformedData) + { + errMsg += pMalformedData + "\n"; + }); + logging.log(errMsg); + } } \ No newline at end of file -- GitLab From 055a20e0a8641de9bb1afb433998d3d93a06b1f8 Mon Sep 17 00:00:00 2001 From: Pascal Neub <p.neub@adito.de> Date: Thu, 29 Apr 2021 07:38:07 +0000 Subject: [PATCH 110/242] =?UTF-8?q?[Projekt:=20xRM-Sales][TicketNr.:=20107?= =?UTF-8?q?9572][VT=20Projekt=20Wahrscheinlichkeit=20pro=20Phase=20als=20S?= =?UTF-8?q?chl=C3=BCsselwort-Eigenschaft]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Checklists/alter_salesproject_phase.xml | 10 ++ .../basic/2021.0.3/Checklists/changelog.xml | 1 + .../Data_alias/basic/2021.0.3/changelog.xml | 1 + .../2021.0.3/create_probability_keywords.xml | 120 ++++++++++++++++++ aliasDefinition/Data_alias/Data_alias.aod | 14 ++ .../KeywordEntry_entity.aod | 18 +++ entity/Offer_entity/Offer_entity.aod | 18 ++- .../containername_param/valueProcess.js | 4 + .../probability/dropDownProcess.js | 9 -- .../SalesprojectPhaseDefinition_entity.aod | 27 ++++ .../containername_param/valueProcess.js | 4 + .../Salesproject_entity.aod | 18 ++- .../containername_param/valueProcess.js | 4 + .../probability/dropDownProcess.js | 9 -- .../recordcontainers/db/onDBUpdate.js | 10 ++ .../_____LANGUAGE_de/_____LANGUAGE_de.aod | 4 + .../SalesprojectPhaseDefinitionEdit_view.aod | 4 + ...alesprojectPhaseDefinitionPreview_view.aod | 11 ++ process/KeywordRegistry_basic/process.js | 3 + 19 files changed, 267 insertions(+), 22 deletions(-) create mode 100644 .liquibase/Data_alias/basic/2021.0.3/Checklists/alter_salesproject_phase.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.3/create_probability_keywords.xml create mode 100644 entity/Offer_entity/entityfields/keywordprobabilityoffer/children/containername_param/valueProcess.js delete mode 100644 entity/Offer_entity/entityfields/probability/dropDownProcess.js create mode 100644 entity/SalesprojectPhaseDefinition_entity/entityfields/keywordprobabilitysalesproject/children/containername_param/valueProcess.js create mode 100644 entity/Salesproject_entity/entityfields/keywordprobabilitysalesproject/children/containername_param/valueProcess.js delete mode 100644 entity/Salesproject_entity/entityfields/probability/dropDownProcess.js 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 0000000000..7f258a8afe --- /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/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/Checklists/changelog.xml index 15bb01b42a..bb7e5ba0e9 100644 --- a/.liquibase/Data_alias/basic/2021.0.3/Checklists/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/Checklists/changelog.xml @@ -8,4 +8,5 @@ <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"/> </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 index 33011d5d95..743c8f9beb 100644 --- a/.liquibase/Data_alias/basic/2021.0.3/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/changelog.xml @@ -11,4 +11,5 @@ <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="create_probability_keywords.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 0000000000..8243d75edb --- /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/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod index aec7ecad42..113239f17a 100644 --- a/aliasDefinition/Data_alias/Data_alias.aod +++ b/aliasDefinition/Data_alias/Data_alias.aod @@ -17986,6 +17986,20 @@ <documentation></documentation> <description></description> </entityFieldDb> + <entityFieldDb> + <name>AUTOPROBABILITY</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> </entityFields> </entityDb> <entityDb> diff --git a/entity/KeywordEntry_entity/KeywordEntry_entity.aod b/entity/KeywordEntry_entity/KeywordEntry_entity.aod index 41dd103062..4f6e03d382 100644 --- a/entity/KeywordEntry_entity/KeywordEntry_entity.aod +++ b/entity/KeywordEntry_entity/KeywordEntry_entity.aod @@ -732,6 +732,24 @@ <fieldName>KeywordStatus</fieldName> <isConsumer v="false" /> </entityDependency> + <entityDependency> + <name>050100cf-7f48-4951-a1dc-343927e0a2af</name> + <entityName>SalesprojectPhaseDefinition_entity</entityName> + <fieldName>KeywordProbabilitySalesproject</fieldName> + <isConsumer v="false" /> + </entityDependency> + <entityDependency> + <name>6c34847b-56b1-4486-a31a-2279b15dfff0</name> + <entityName>Salesproject_entity</entityName> + <fieldName>KeywordProbabilitySalesproject</fieldName> + <isConsumer v="false" /> + </entityDependency> + <entityDependency> + <name>9b82186e-f230-4af9-b77e-72b750c68d27</name> + <entityName>Offer_entity</entityName> + <fieldName>KeywordProbabilityOffer</fieldName> + <isConsumer v="false" /> + </entityDependency> </dependencies> <children> <entityParameter> diff --git a/entity/Offer_entity/Offer_entity.aod b/entity/Offer_entity/Offer_entity.aod index 2e4d0172c3..88bd70bb61 100644 --- a/entity/Offer_entity/Offer_entity.aod +++ b/entity/Offer_entity/Offer_entity.aod @@ -75,12 +75,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> @@ -1158,6 +1158,20 @@ <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> </entityFields> <recordContainers> <dbRecordContainer> 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 0000000000..919d72f494 --- /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/probability/dropDownProcess.js b/entity/Offer_entity/entityfields/probability/dropDownProcess.js deleted file mode 100644 index 0ce6525ee9..0000000000 --- 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/SalesprojectPhaseDefinition_entity/SalesprojectPhaseDefinition_entity.aod b/entity/SalesprojectPhaseDefinition_entity/SalesprojectPhaseDefinition_entity.aod index a237428017..92dbe5cb1e 100644 --- a/entity/SalesprojectPhaseDefinition_entity/SalesprojectPhaseDefinition_entity.aod +++ b/entity/SalesprojectPhaseDefinition_entity/SalesprojectPhaseDefinition_entity.aod @@ -88,6 +88,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> @@ -132,6 +155,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 0000000000..79fdf41a10 --- /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/Salesproject_entity/Salesproject_entity.aod b/entity/Salesproject_entity/Salesproject_entity.aod index c55710d2e8..a16be31103 100644 --- a/entity/Salesproject_entity/Salesproject_entity.aod +++ b/entity/Salesproject_entity/Salesproject_entity.aod @@ -139,12 +139,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> @@ -882,6 +882,20 @@ </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> </entityFields> <recordContainers> <dbRecordContainer> 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 0000000000..79fdf41a10 --- /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/probability/dropDownProcess.js b/entity/Salesproject_entity/entityfields/probability/dropDownProcess.js deleted file mode 100644 index 0ce6525ee9..0000000000 --- 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/recordcontainers/db/onDBUpdate.js b/entity/Salesproject_entity/recordcontainers/db/onDBUpdate.js index b81c1dd9c2..8c73baf3b5 100644 --- a/entity/Salesproject_entity/recordcontainers/db/onDBUpdate.js +++ b/entity/Salesproject_entity/recordcontainers/db/onDBUpdate.js @@ -23,6 +23,16 @@ vars.get("$local.changed").forEach(function(fieldName) { switch (fieldName) { case "SALESPROJECT.PHASE": typeValue = "SalesprojectPhase"; + var autoProbab = newSelect("SALESPROJECTPHASEDEFINITION.AUTOPROBABILITY") + .from("SALESPROJECTPHASEDEFINITION") + .where("SALESPROJECTPHASEDEFINITION.PHASE", vars.get("$field.PHASE")).cell(); + if(!isNaN(parseInt(autoProbab))) + { + newWhere("SALESPROJECT.SALESPROJECTID", vars.get("$field.SALESPROJECTID")) + .updateFields({ + "PROBABILITY": autoProbab + }, "SALESPROJECT"); + } break; case "SALESPROJECT.STATUS": // Milestone diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod index 827c44f0eb..7e0ea6c3e5 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -11224,6 +11224,10 @@ Bitte Datumseingabe prüfen</value> <entry> <key>Integer</key> </entry> + <entry> + <key>Auto probability</key> + <value>Automatische Wahrscheinlichkeit</value> + </entry> </keyValueMap> <font name="Dialog" style="0" size="11" /> </language> diff --git a/neonView/SalesprojectPhaseDefinitionEdit_view/SalesprojectPhaseDefinitionEdit_view.aod b/neonView/SalesprojectPhaseDefinitionEdit_view/SalesprojectPhaseDefinitionEdit_view.aod index eae1779df4..b51922e319 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 25f7dc6572..d25d74cf44 100644 --- a/neonView/SalesprojectPhaseDefinitionPreview_view/SalesprojectPhaseDefinitionPreview_view.aod +++ b/neonView/SalesprojectPhaseDefinitionPreview_view/SalesprojectPhaseDefinitionPreview_view.aod @@ -16,6 +16,17 @@ <titleField>PHASE</titleField> <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/process/KeywordRegistry_basic/process.js b/process/KeywordRegistry_basic/process.js index defb4e85cb..727098fede 100644 --- a/process/KeywordRegistry_basic/process.js +++ b/process/KeywordRegistry_basic/process.js @@ -149,6 +149,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";}; -- GitLab From 63edb8d843aaa74402ea87cc474ef58db2b44688 Mon Sep 17 00:00:00 2001 From: "f.lang" <f.lang@flang.aditosoftware.local> Date: Thu, 29 Apr 2021 11:28:31 +0200 Subject: [PATCH 111/242] [Projekt: xRM-ContactManagement][TicketNr.: 1079935][Fehlerhafte Werte in AB_COUNTRYINFO.NAME_NATIVE bei MSSQL] --- .../Data_alias/basic/2021.0.3/changelog.xml | 1 + .../update_ab_countryinfo_name_native.xml | 527 ++++++++++++++++++ 2 files changed, 528 insertions(+) create mode 100644 .liquibase/Data_alias/basic/2021.0.3/update_ab_countryinfo_name_native.xml diff --git a/.liquibase/Data_alias/basic/2021.0.3/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/changelog.xml index 33011d5d95..b6a0ce044f 100644 --- a/.liquibase/Data_alias/basic/2021.0.3/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/changelog.xml @@ -11,4 +11,5 @@ <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"/> </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 0000000000..1b1d4071a3 --- /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 -- GitLab From 74d777b4fed1fb76f7f0f67d6690efce8174cbec Mon Sep 17 00:00:00 2001 From: Benjamin Ulrich <b.ulrich@adito.de> Date: Thu, 29 Apr 2021 11:14:38 +0000 Subject: [PATCH 112/242] =?UTF-8?q?[Projekt:=20xRM-Sales][TicketNr.:=20107?= =?UTF-8?q?5819][Preise=20korrekt=20aus=20St=C3=BCckliste=20berechnen->=20?= =?UTF-8?q?Bei=20Neuanlage=20von=20Angebotsposten,=20Belegposten=20und=20P?= =?UTF-8?q?reislisten]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_demoData/generatedData/productprice.xml | 7 ---- .../entityfields/contact_id/valueProcess.js | 2 ++ entity/Productprice_entity/onValidation.js | 16 ++++++--- .../recordcontainers/db/onDBInsert.js | 14 +++++--- process/OfferOrder_lib/process.js | 34 +++++++++++++------ process/Product_lib/process.js | 7 ++++ 6 files changed, 54 insertions(+), 26 deletions(-) diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/productprice.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/productprice.xml index 983a1db294..e85dd3e1aa 100644 --- a/.liquibase/Data_alias/basic/_demoData/generatedData/productprice.xml +++ b/.liquibase/Data_alias/basic/_demoData/generatedData/productprice.xml @@ -28,7 +28,6 @@ <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="CONTACT_ID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/> <column name="PRICE" valueNumeric="25000.00"/> <column name="VAT" valueNumeric="19.00"/> <column name="PRODUCT_ID" value="c9f744bc-7903-4ec0-96f9-1df010ce1f37"/> @@ -52,7 +51,6 @@ <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="CONTACT_ID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/> <column name="PRICE" valueNumeric="150000.00"/> <column name="VAT" valueNumeric="19.00"/> <column name="PRODUCT_ID" value="8cdbd2d8-70e2-4899-9ac6-3f0c3e28cab1"/> @@ -97,7 +95,6 @@ <insert tableName="PRODUCTPRICE"> <column name="PRODUCTPRICEID" value="4028dfb7-d0e4-493e-9676-6f14a24a9507"/> <column name="VALID_FROM" valueDate="2020-07-15T02:00:00"/> - <column name="CONTACT_ID" value="dec94545-2487-46d5-978d-26ee0fcf0f5f"/> <column name="PRICE" valueNumeric="10000.00"/> <column name="VAT" valueNumeric="0.00"/> <column name="PRODUCT_ID" value="c9f744bc-7903-4ec0-96f9-1df010ce1f37"/> @@ -166,7 +163,6 @@ <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="CONTACT_ID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/> <column name="PRICE" valueNumeric="2500.00"/> <column name="VAT" valueNumeric="19.00"/> <column name="PRODUCT_ID" value="805cd37f-d6c7-424b-99b0-b3de9ec89f7b"/> @@ -300,7 +296,6 @@ <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="CONTACT_ID" value="6efb4fab-64f9-4d8e-aa6f-a158d13fc273"/> <column name="PRICE" valueNumeric="15000.00"/> <column name="VAT" valueNumeric="19.00"/> <column name="PRODUCT_ID" value="e073ddc7-e3b8-4430-9e4f-12065106a624"/> @@ -391,7 +386,6 @@ <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="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="535cec1a-e81c-4833-aad6-1d2348dbc0fb"/> @@ -427,7 +421,6 @@ <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="CONTACT_ID" value="fc465f2f-803b-4a1f-b79d-7b466d7ecff4"/> <column name="PRICE" valueNumeric="5000.00"/> <column name="VAT" valueNumeric="19.00"/> <column name="PRODUCT_ID" value="535cec1a-e81c-4833-aad6-1d2348dbc0fb"/> diff --git a/entity/Productprice_entity/entityfields/contact_id/valueProcess.js b/entity/Productprice_entity/entityfields/contact_id/valueProcess.js index ebfa36528a..f8d1effa94 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/onValidation.js b/entity/Productprice_entity/onValidation.js index 2d96e9b5c1..ce0a2761a6 100644 --- a/entity/Productprice_entity/onValidation.js +++ b/entity/Productprice_entity/onValidation.js @@ -42,24 +42,25 @@ if(vars.getString("$param.IgnoreOnValidation_param") != "true") 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: vars.get("$field.FROMQUANTITY") + , quantity: quantity , priceList: priceList , buySell: buySell , dateFrom: validFrom , dateTo: validTo}; var ProductDetails = ProductUtils.getProductDetails(productId, priceListFilter); - var priceListsToPotentiallyReplace = ProductDetails.CurrentValidPriceLists; + 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) + if(currPriceList["priceList"] == priceList && currPriceList["buySell"] == buySell && Number.parseInt(currPriceList["fromQuantity"]) == Number.parseInt(quantity)) { if(currPriceList["validFrom"] > validFrom && ((validTo == undefined || validTo == "") || (currPriceList["validTo"] != undefined && currPriceList["validTo"] != "" && currPriceList["validTo"] < validTo))) @@ -72,6 +73,11 @@ if(vars.getString("$param.IgnoreOnValidation_param") != "true") showMessage = true; break; } + else if(currPriceList["validFrom"] == validFrom && validTo == currPriceList["validTo"]) + { + showMessage = true; + break; + } } } if(showMessage) diff --git a/entity/Productprice_entity/recordcontainers/db/onDBInsert.js b/entity/Productprice_entity/recordcontainers/db/onDBInsert.js index 62b572aaab..a67c60ee19 100644 --- a/entity/Productprice_entity/recordcontainers/db/onDBInsert.js +++ b/entity/Productprice_entity/recordcontainers/db/onDBInsert.js @@ -35,11 +35,17 @@ 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 PriceListFilter = { currency: currency, quantity: vars.get("$field.FROMQUANTITY"), priceList: priceList, buySell: buySell, dateFrom: validFrom, dateTo: validTo}; +var PriceListFilter = { currency: currency + , quantity: quantity + , priceList: priceList + , buySell: buySell + , dateFrom: validFrom + , dateTo: validTo}; var ProductDetails = ProductUtils.getProductDetails(productId, PriceListFilter); -var priceListsToPotentiallyReplace = ProductDetails.CurrentValidPriceLists; +var priceListsToPotentiallyReplace = ProductDetails.PriceLists; var priceListsUpdateValidTo = []; var priceListsUpdateValidFrom = []; var configValidTo = entities.createConfigForUpdatingRows().entity("Productprice_entity") @@ -50,8 +56,8 @@ var configValidFrom = entities.createConfigForUpdatingRows().entity("Productpric for (var valPriceList in priceListsToPotentiallyReplace) { var currPriceList = priceListsToPotentiallyReplace[valPriceList]; - if(currPriceList["priceListId"] != priceListId && currPriceList["priceList"] == priceList && currPriceList["buySell"] == buySell) - { + 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"]); diff --git a/process/OfferOrder_lib/process.js b/process/OfferOrder_lib/process.js index 656902d655..70aee7aa98 100644 --- a/process/OfferOrder_lib/process.js +++ b/process/OfferOrder_lib/process.js @@ -322,8 +322,9 @@ ItemUtils.prototype.insertPartsList = function(columns, productId, assignedTo, c if(pSumUpPrices)//also build priceObject if pSumUpPrices is set to true { priceObject[newid] = {}; - priceObject[newid]["price"] = price*P2pObject["quantity"]; + priceObject[newid]["price"] = price; priceObject[newid]["vat"] = vat; + priceObject[newid]["quantity"] = P2pObject["quantity"]; } } @@ -665,8 +666,13 @@ ItemUtils.sumUpPricesWhenInserting = function (pStatements, pCorrectOrder, pTree var vat = 0; for(var id in pTreeStructure[pTopItemId]) { - calcPrice = eMath.addDec(pPriceObj[id]["price"], calcPrice); - if(pPriceObj[id]["vat"] !== null && pPriceObj[id]["vat"] !== undefined && pPriceObj[id]["vat"] > 0) + let price = 0; + if(pPriceObj[id]) + { + price = pPriceObj[id]["price"]*pPriceObj[id]["quantity"]; + } + calcPrice = eMath.addDec(price, calcPrice); + if(pPriceObj[id] && pPriceObj[id]["vat"] && pPriceObj[id]["vat"] > 0) { vat = pPriceObj[id]["vat"]; } @@ -719,11 +725,11 @@ ItemUtils.sumUpPricesWhenInserting = function (pStatements, pCorrectOrder, pTree var childPrice; if(pPriceObj[child] != undefined) { - childPrice = pPriceObj[child]["price"] + childPrice = priceObj[child]["price"]*priceObj[child]["quantity"] } - else if(summandObject[child][child] != undefined) + else if(summandObject[child] != undefined && summandObject[child][child] != undefined) { - childPrice = pPriceObj[Object.keys(summandObject[child][child])[0]]["price"] + childPrice = priceObj[Object.keys(summandObject[child][child])[0]]["price"]*priceObj[child]["quantity"] vat = pPriceObj[Object.keys(summandObject[child][child])[0]]["vat"] } else @@ -732,9 +738,9 @@ ItemUtils.sumUpPricesWhenInserting = function (pStatements, pCorrectOrder, pTree vat = 0; } calcPrice = eMath.addDec(childPrice, calcPrice); - if(pPriceObj[child]["vat"] !== null && pPriceObj[child]["vat"] !== undefined && pPriceObj[child]["vat"] > 0) + if(pPriceObj[child] && priceObj[child]["vat"] !== null && priceObj[child]["vat"] !== undefined && priceObj[child]["vat"] > 0) { - vat = pPriceObj[child]["vat"]; + vat = priceObj[child]["vat"]; } } calcPrice = calcPrice/quantity; @@ -760,8 +766,16 @@ ItemUtils.sumUpPricesWhenInserting = function (pStatements, pCorrectOrder, pTree } else { - pStatements[statement][3][7] = priceObj[pStatements[statement][3][0]]["price"] //price - pStatements[statement][3][8] = priceObj[pStatements[statement][3][0]]["vat"] //vat + 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 + } } } } diff --git a/process/Product_lib/process.js b/process/Product_lib/process.js index cf20a1cf64..92cb931a3b 100644 --- a/process/Product_lib/process.js +++ b/process/Product_lib/process.js @@ -284,6 +284,13 @@ ProductUtils.getProductDetails = function(pid, pPriceListFilter, pAdditionalProd }, ProductDetails); } + //Pricelist (all) + var colIdx = colsProduct.length; + if (ProductData[i][colIdx] != "" && ProductDetails.PriceLists[ProductData[i][colIdx]] == undefined) //Pricelist found + { + ProductDetails.PriceLists[ProductData[i][colIdx]] = _getPriceListObject(); + } + //Pricelist (currently valid) colIdx = colsProduct.length + colsPricelistAll.length; if (validPriceLists) -- GitLab From 3634080c80e88274fb7892a2bcc5e42cae3b70ae Mon Sep 17 00:00:00 2001 From: Sebastian Pongratz <s.pongratz@adito.de> Date: Thu, 29 Apr 2021 11:19:16 +0000 Subject: [PATCH 113/242] Cm sp 1079978 adaptation language files --- .../entityfields/address_ws/titleProcess.js | 3 ++- language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod | 3 +++ language/_____LANGUAGE_de/_____LANGUAGE_de.aod | 10 +++++++--- language/_____LANGUAGE_en/_____LANGUAGE_en.aod | 3 +++ 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/entity/Address_entity/entityfields/address_ws/titleProcess.js b/entity/Address_entity/entityfields/address_ws/titleProcess.js index a4923c9cd0..e05306fb18 100644 --- a/entity/Address_entity/entityfields/address_ws/titleProcess.js +++ b/entity/Address_entity/entityfields/address_ws/titleProcess.js @@ -1,3 +1,4 @@ +import("system.translate"); import("system.result"); import("system.vars"); import("KeywordRegistry_basic"); @@ -6,5 +7,5 @@ import("Keyword_lib"); var key = vars.get("$field.ADDR_TYPE"); if (key == $KeywordRegistry.addressType$post()) { - result.string("Post office box number"); + result.string(translate.text("Post office box number")); } \ No newline at end of file diff --git a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index 0e1c36f550..d625a68e37 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -8536,6 +8536,9 @@ <entry> <key>Placeholders must be unique</key> </entry> + <entry> + <key>Auto probability</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 eb66216e2b..efe8ca27f6 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -11094,11 +11094,11 @@ Bitte Datumseingabe prüfen</value> </entry> <entry> <key>No customer since creation > 3 years</key> - <value>Kein Kundenkontakt seit erzeugung > 3 Jahre</value> + <value>Kein Kundenkontakt seit Erzeugung > 3 Jahre</value> </entry> <entry> <key>No valid sales contract</key> - <value>Kein Kauvertrag vorhanden</value> + <value>Kein Kaufvertrag vorhanden</value> </entry> <entry> <key>Count Usage</key> @@ -11110,7 +11110,7 @@ Bitte Datumseingabe prüfen</value> </entry> <entry> <key>Add Manual Delete Flag</key> - <value>Füge mauelles Löschkenzeichen hinzu</value> + <value>Füge manuelles Löschkennzeichen hinzu</value> </entry> <entry> <key>DSGVO Configuration</key> @@ -11232,6 +11232,10 @@ Bitte Datumseingabe prüfen</value> <key>Auto probability</key> <value>Automatische Wahrscheinlichkeit</value> </entry> + <entry> + <key>Post office box number</key> + <value>Postfachnummer</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 35cb7ac22f..27f7a19d55 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -8621,6 +8621,9 @@ <entry> <key>Placeholders must be unique</key> </entry> + <entry> + <key>Auto probability</key> + </entry> </keyValueMap> <font name="Dialog" style="0" size="11" /> </language> -- GitLab From 507d6cc1c22921527a56a6af242e05a8bb8910de Mon Sep 17 00:00:00 2001 From: Pascal Neub <p.neub@adito.de> Date: Thu, 29 Apr 2021 11:29:46 +0000 Subject: [PATCH 114/242] 2021.0 checklistcontribimpl --- .../Checklists/alter_checklistentryvalue.xml | 13 +++++++++ .../basic/2021.0.3/Checklists/changelog.xml | 1 + .../2021.0.3/Checklists/update_phase.xml | 12 ++++---- .../ChecklistEntryValue_entity.aod | 16 +++++++++++ .../children/setcompleted/onActionProcess.js | 10 ++++++- .../recordcontainers/jdito/contentProcess.js | 14 ++++++---- .../entityfields/auto/displayValueProcess.js | 4 +-- .../entityfields/title/displayValueProcess.js | 3 +- .../recordcontainers/db/conditionProcess.js | 17 ++--------- .../SalesprojectPhaseDefinition_entity.aod | 1 + .../_____LANGUAGE_de/_____LANGUAGE_de.aod | 28 +++++++++++++++++++ .../ChecklistEntryValueList_view.aod | 8 ++++++ .../ChecklistEntryRegistry_basic/process.js | 17 +++++++---- 13 files changed, 106 insertions(+), 38 deletions(-) create mode 100644 .liquibase/Data_alias/basic/2021.0.3/Checklists/alter_checklistentryvalue.xml 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 0000000000..f62b23a4c5 --- /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/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/Checklists/changelog.xml index bb7e5ba0e9..b4a899dadb 100644 --- a/.liquibase/Data_alias/basic/2021.0.3/Checklists/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/Checklists/changelog.xml @@ -9,4 +9,5 @@ <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_phase.xml b/.liquibase/Data_alias/basic/2021.0.3/Checklists/update_phase.xml index 837a9380da..b5d99df603 100644 --- a/.liquibase/Data_alias/basic/2021.0.3/Checklists/update_phase.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/Checklists/update_phase.xml @@ -2,7 +2,7 @@ <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="d204fc4f-f670-4df6-86ae-8a57a1fce5ae"> + <changeSet author="p.neub" id="b7fced70-0fae-4589-8bbf-c7139ebeb783"> <delete tableName="SALESPROJECTPHASEDEFINITION"/> <delete tableName="CHECKLIST"/> @@ -10,7 +10,7 @@ <column name="PHASE" value="SALPROJPHASECONTACT"/> <column name="CHECKLIST_ID" value="179dcc0d-e6fa-411d-b5ee-cb25b9735dbe"/> <column name="DATE_EDIT"/> - <column name="DESCRIPTION" value="Voraussetzungen für die Phase: 'Contact'."/> + <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"/> @@ -28,7 +28,7 @@ <column name="PHASE" value="SALPROJPHASELEAD"/> <column name="CHECKLIST_ID" value="3d0f1d25-cee8-4b83-a0de-3fded83ff9c4"/> <column name="DATE_EDIT"/> - <column name="DESCRIPTION" value="Voraussetzungen für die Phase: 'Lead'."/> + <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"/> @@ -46,7 +46,7 @@ <column name="PHASE" value="SALPROJPHASEPROS"/> <column name="CHECKLIST_ID" value="ecf50252-e0c2-4e7a-8cc6-078b5978d2c5"/> <column name="DATE_EDIT"/> - <column name="DESCRIPTION" value="Voraussetzungen für die Phase: 'Prospect'."/> + <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"/> @@ -64,7 +64,7 @@ <column name="PHASE" value="SALPROJPHASEOFFER"/> <column name="CHECKLIST_ID" value="0f95ce44-3b0d-417b-969f-f84897868558"/> <column name="DATE_EDIT"/> - <column name="DESCRIPTION" value="Voraussetzungen für die Phase: 'Offer'."/> + <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"/> @@ -82,7 +82,7 @@ <column name="PHASE" value="SALPROJPHASENEGO"/> <column name="CHECKLIST_ID" value="cb0357c9-a222-4d78-b2c5-035fffe3bb51"/> <column name="DATE_EDIT"/> - <column name="DESCRIPTION" value="Voraussetzungen für die Phase: 'Negotiation'."/> + <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"/> diff --git a/entity/ChecklistEntryValue_entity/ChecklistEntryValue_entity.aod b/entity/ChecklistEntryValue_entity/ChecklistEntryValue_entity.aod index 33a0522dbe..e8509f2137 100644 --- a/entity/ChecklistEntryValue_entity/ChecklistEntryValue_entity.aod +++ b/entity/ChecklistEntryValue_entity/ChecklistEntryValue_entity.aod @@ -96,6 +96,16 @@ <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> </entityFields> <recordContainers> <jDitoRecordContainer> @@ -115,6 +125,12 @@ <jDitoRecordFieldMapping> <name>CHECKLISTENTRY_ID.displayValue</name> </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>DONEUSER.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>DONEDATE.value</name> + </jDitoRecordFieldMapping> <jDitoRecordFieldMapping> <name>IS_FULFILLED.value</name> </jDitoRecordFieldMapping> diff --git a/entity/ChecklistEntryValue_entity/entityfields/setchecklistentrycompleted/children/setcompleted/onActionProcess.js b/entity/ChecklistEntryValue_entity/entityfields/setchecklistentrycompleted/children/setcompleted/onActionProcess.js index ccff131335..9ac4b995eb 100644 --- a/entity/ChecklistEntryValue_entity/entityfields/setchecklistentrycompleted/children/setcompleted/onActionProcess.js +++ b/entity/ChecklistEntryValue_entity/entityfields/setchecklistentrycompleted/children/setcompleted/onActionProcess.js @@ -3,12 +3,18 @@ import("Sql_lib"); import("system.vars"); import("system.neon"); -var fulfilledValue = Utils.toBoolean(vars.get("$field.IS_FULFILLED")) ? "0" : "1"; +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"); } @@ -17,6 +23,8 @@ 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"), diff --git a/entity/ChecklistEntryValue_entity/recordcontainers/jdito/contentProcess.js b/entity/ChecklistEntryValue_entity/recordcontainers/jdito/contentProcess.js index 16a48ff022..e1e1e87749 100644 --- a/entity/ChecklistEntryValue_entity/recordcontainers/jdito/contentProcess.js +++ b/entity/ChecklistEntryValue_entity/recordcontainers/jdito/contentProcess.js @@ -10,6 +10,8 @@ var data = newSelect([ "CHECKLISTENTRY.AUTO", "CHECKLISTENTRY.CHECKLISTENTRYID", "CHECKLISTENTRY.TITLE", + "CHECKLISTENTRYVALUE.DONEUSER", + "CHECKLISTENTRYVALUE.DONEDATE", "CHECKLISTENTRYVALUE.IS_FULFILLED", "CHECKLISTENTRYVALUE.OBJECT_ROWID", "CHECKLISTENTRYVALUE.OBJECT_TYPE", @@ -29,17 +31,17 @@ var data = newSelect([ for(let i = 0; i < data.length; i++) { data[i][0] = data[i][0] || util.getNewUUID(); - data[i][4] = data[i][4] || "0"; - data[i][5] = data[i][5] || vars.get("$param.ObjectRowId_param"); - data[i][6] = data[i][6] || vars.get("$param.ObjectType_param"); - data[i][8] = data[i][8] || datetime.date(); - data[i][10] = data[i][10] || vars.get("$sys.user"); + 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])) { var checklistEntry = $ChecklistEntryRegistry[data[i][3]](); data[i][3] = checklistEntry.title; - data[i][4] = checklistEntry.verifierFn(vars.get("$param.ObjectRowId_param")) ? "1" : "0"; + data[i][6] = checklistEntry.verifierFn(vars.get("$param.ObjectRowId_param")) ? "1" : "0"; } } diff --git a/entity/ChecklistEntry_entity/entityfields/auto/displayValueProcess.js b/entity/ChecklistEntry_entity/entityfields/auto/displayValueProcess.js index 94bb5f7e4d..afddf0e768 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 13b9519c0c..b3faf49a58 100644 --- a/entity/ChecklistEntry_entity/entityfields/title/displayValueProcess.js +++ b/entity/ChecklistEntry_entity/entityfields/title/displayValueProcess.js @@ -1,3 +1,4 @@ +import("Util_lib"); import("system.result"); import("system.vars"); import("system.translate"); @@ -6,7 +7,7 @@ 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); } diff --git a/entity/ChecklistEntry_entity/recordcontainers/db/conditionProcess.js b/entity/ChecklistEntry_entity/recordcontainers/db/conditionProcess.js index 6c25101de0..fb47eb24c5 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/SalesprojectPhaseDefinition_entity/SalesprojectPhaseDefinition_entity.aod b/entity/SalesprojectPhaseDefinition_entity/SalesprojectPhaseDefinition_entity.aod index 92dbe5cb1e..1731b12103 100644 --- a/entity/SalesprojectPhaseDefinition_entity/SalesprojectPhaseDefinition_entity.aod +++ b/entity/SalesprojectPhaseDefinition_entity/SalesprojectPhaseDefinition_entity.aod @@ -62,6 +62,7 @@ </entityProvider> <entityConsumer> <name>ChecklistEntries</name> + <refreshParent v="true" /> <dependency> <name>dependency</name> <entityName>ChecklistEntry_entity</entityName> diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod index efe8ca27f6..4152b5d25d 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -11207,6 +11207,34 @@ Bitte Datumseingabe prüfen</value> <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> diff --git a/neonView/ChecklistEntryValueList_view/ChecklistEntryValueList_view.aod b/neonView/ChecklistEntryValueList_view/ChecklistEntryValueList_view.aod index 05829b4051..3d6b1fee4f 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/process/ChecklistEntryRegistry_basic/process.js b/process/ChecklistEntryRegistry_basic/process.js index 50d9385590..3cc7f7907d 100644 --- a/process/ChecklistEntryRegistry_basic/process.js +++ b/process/ChecklistEntryRegistry_basic/process.js @@ -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; } }; } @@ -421,6 +425,7 @@ $ChecklistEntryRegistry.salesprojectRoleProjectteam = function(){ 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++) { @@ -431,7 +436,7 @@ $ChecklistEntryRegistry.salesprojectRoleProjectteam = function(){ roles.splice(index, 1); } } - return roles.length == 0; + return roles.length <= halfLength; } }; } -- GitLab From 9dbefa372de896ef4bb67d063cc8435844125345 Mon Sep 17 00:00:00 2001 From: Pascal Neub <p.neub@adito.de> Date: Thu, 29 Apr 2021 12:56:34 +0000 Subject: [PATCH 115/242] [Projekt: xRM-Sales][TicketNr.: 1079021][Berechnung "Tage inaktiv" fehlerhaft] --- .../entityfields/inactivetime/valueProcess.js | 48 +++++++++++-------- process/Date_lib/process.js | 2 +- 2 files changed, 29 insertions(+), 21 deletions(-) diff --git a/entity/Salesproject_entity/entityfields/inactivetime/valueProcess.js b/entity/Salesproject_entity/entityfields/inactivetime/valueProcess.js index ac06e81927..0daeae79aa 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/process/Date_lib/process.js b/process/Date_lib/process.js index bb454d912a..faab5091a0 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; } -- GitLab From 4f0bfc5c5b923d244681de337670e0199a057969 Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Thu, 29 Apr 2021 14:08:47 +0000 Subject: [PATCH 116/242] 1079736 workflow links --- .../add_weblinkWorkflowColumns.xml | 11 ++++ .../2021.0.3/LinkWorkflows/changelog.xml | 7 +++ .../insert_linkActionTypeKeyword.xml | 33 ++++++++++ .../Data_alias/basic/2021.0.3/changelog.xml | 1 + aliasDefinition/Data_alias/Data_alias.aod | 60 ++++++++++++------- .../KeywordEntry_entity.aod | 6 ++ entity/Weblink_entity/Weblink_entity.aod | 33 ++++++++++ .../entityfields/action_type/stateProcess.js | 17 ++++++ .../containername_param/valueProcess.js | 4 ++ .../stateProcess.js | 8 +-- .../workflowsignal_name/stateProcess.js | 18 ++++++ .../WeblinkEdit_view/WeblinkEdit_view.aod | 8 +++ process/Bulkmail_lib/process.js | 53 ++++++++++++---- process/DocumentTemplate_lib/process.js | 2 +- process/KeywordRegistry_basic/process.js | 6 +- 15 files changed, 227 insertions(+), 40 deletions(-) create mode 100644 .liquibase/Data_alias/basic/2021.0.3/LinkWorkflows/add_weblinkWorkflowColumns.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.3/LinkWorkflows/changelog.xml create mode 100644 .liquibase/Data_alias/basic/2021.0.3/LinkWorkflows/insert_linkActionTypeKeyword.xml create mode 100644 entity/Weblink_entity/entityfields/action_type/stateProcess.js create mode 100644 entity/Weblink_entity/entityfields/keywordactiontypes/children/containername_param/valueProcess.js create mode 100644 entity/Weblink_entity/entityfields/workflowsignal_name/stateProcess.js 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 0000000000..f88670c4f4 --- /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 0000000000..447f29d8a2 --- /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 0000000000..59172ddb45 --- /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/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/changelog.xml index f47516d27d..9ea2f9270d 100644 --- a/.liquibase/Data_alias/basic/2021.0.3/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/changelog.xml @@ -13,4 +13,5 @@ <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="LinkWorkflows/changelog.xml"/> </databaseChangeLog> \ No newline at end of file diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod index 113239f17a..3fc080829b 100644 --- a/aliasDefinition/Data_alias/Data_alias.aod +++ b/aliasDefinition/Data_alias/Data_alias.aod @@ -18591,8 +18591,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" /> @@ -18619,8 +18619,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" /> @@ -18716,8 +18716,36 @@ <name>ISREDIRECT</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" /> + <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" /> @@ -18962,20 +18990,6 @@ <title></title> <description></description> </entityFieldDb> - <entityFieldDb> - <name>FILEPATH</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>MAIL_RUN_ID</name> <dbName></dbName> @@ -18985,7 +18999,7 @@ <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> @@ -18995,7 +19009,7 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="23" /> + <size v="19" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -19013,7 +19027,7 @@ <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> diff --git a/entity/KeywordEntry_entity/KeywordEntry_entity.aod b/entity/KeywordEntry_entity/KeywordEntry_entity.aod index 4f6e03d382..148a373040 100644 --- a/entity/KeywordEntry_entity/KeywordEntry_entity.aod +++ b/entity/KeywordEntry_entity/KeywordEntry_entity.aod @@ -750,6 +750,12 @@ <fieldName>KeywordProbabilityOffer</fieldName> <isConsumer v="false" /> </entityDependency> + <entityDependency> + <name>48d817dc-e0fd-4d4b-bb48-3567a570105d</name> + <entityName>Weblink_entity</entityName> + <fieldName>KeywordActionTypes</fieldName> + <isConsumer v="false" /> + </entityDependency> </dependencies> <children> <entityParameter> diff --git a/entity/Weblink_entity/Weblink_entity.aod b/entity/Weblink_entity/Weblink_entity.aod index 79e7260f73..1cd2e681a6 100644 --- a/entity/Weblink_entity/Weblink_entity.aod +++ b/entity/Weblink_entity/Weblink_entity.aod @@ -133,6 +133,31 @@ <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> @@ -195,6 +220,14 @@ <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> 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 0000000000..eb0cd9f7f6 --- /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/keywordactiontypes/children/containername_param/valueProcess.js b/entity/Weblink_entity/entityfields/keywordactiontypes/children/containername_param/valueProcess.js new file mode 100644 index 0000000000..e2c2914556 --- /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/workflowprocessdefinition_key/stateProcess.js b/entity/Weblink_entity/entityfields/workflowprocessdefinition_key/stateProcess.js index 177f86ce6c..0fa195d165 100644 --- a/entity/Weblink_entity/entityfields/workflowprocessdefinition_key/stateProcess.js +++ b/entity/Weblink_entity/entityfields/workflowprocessdefinition_key/stateProcess.js @@ -1,18 +1,18 @@ +import("Util_lib"); import("system.result"); import("system.vars"); import("KeywordRegistry_basic"); import("system.neon"); var linktype = vars.get("$field.LINKTYPE"); -var redirect = vars.get("$field.ISREDIRECT"); +var isRedirect = Utils.toBoolean(vars.get("$field.ISREDIRECT")); +var actionType = vars.get("$field.ACTION_TYPE"); -if (linktype == $KeywordRegistry.weblinkType$EMail() && redirect == "1") +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 0000000000..a5de238dc9 --- /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/neonView/WeblinkEdit_view/WeblinkEdit_view.aod b/neonView/WeblinkEdit_view/WeblinkEdit_view.aod index 8a245fb376..5c1ae63aad 100644 --- a/neonView/WeblinkEdit_view/WeblinkEdit_view.aod +++ b/neonView/WeblinkEdit_view/WeblinkEdit_view.aod @@ -35,10 +35,18 @@ <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> diff --git a/process/Bulkmail_lib/process.js b/process/Bulkmail_lib/process.js index 15cefff32f..d40a686b69 100644 --- a/process/Bulkmail_lib/process.js +++ b/process/Bulkmail_lib/process.js @@ -117,12 +117,35 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pIsTestRun) "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 contactIds = recipientData.map(function (recipient) {return recipient["CONTACT_ID"];}); var successIds = []; var failedIds = []; var sentDate = vars.get("$sys.date"); - var mails = template.getReplacedEmailsByContactIds(contactIds); + var mails = template.getReplacedEmailsByContactIds(contactIds, linkPlaceholders); var subjectTemplate = new DocumentTemplate(subject, DocumentTemplate.types.PLAIN); var subjects = subjectTemplate.getReplacedContentByContactIds(contactIds); @@ -140,7 +163,7 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pIsTestRun) let personId = recipient["PERSON_ID"]; let organisationId = recipient["ORGANISATION_ID"]; let email = mails[contactId]; - let mailLogId = util.getNewUUID(); + let mailLogId = mailLogIds.get(contactId); if (email !== undefined && emailAddress) { email.toRecipients = [emailAddress]; @@ -577,7 +600,7 @@ BulkMailUtils.getRedirectLink = function(pLinkId) * The device type that was used to open the link.<br> **/ -BulkMailUtils.insertClick = function(pMailLogId,pIpAddress,pLinkId,pBrowsername,pOperatingSystemName,pDeviceType) +BulkMailUtils.insertClick = function (pMailLogId,pIpAddress,pLinkId,pBrowsername,pOperatingSystemName,pDeviceType) { if (!pMailLogId || !pLinkId) { @@ -618,15 +641,23 @@ BulkMailUtils.startBulkmailWorkFlow = function(pMailLogId, pLinkId) { return } - var workFlowKey = newSelect("WORKFLOWPROCESSDEFINITION_KEY").from("WEBLINK").where("WEBLINK.WEBLINKID", pLinkId).cell(); - if (workFlowKey) + var [actionType, workflowKey, signalName] = newSelect(["ACTION_TYPE", "WORKFLOWPROCESSDEFINITION_KEY", "WORKFLOWSIGNAL_NAME"]) + .from("WEBLINK") + .where("WEBLINK.WEBLINKID", pLinkId) + .arrayRow(); + + var variables = { + "mailLogId": pMailLogId, + "linkId": pLinkId + }; + if (actionType == $KeywordRegistry.weblinkActionType$startWorkflow() && workflowKey) { - var variables = { - "MAILLOGID": pMailLogId - }; - workflow.startProcessByKey(workFlowKey, variables); + workflow.startProcessByKey(workflowKey, variables); + } + else if (actionType == $KeywordRegistry.weblinkActionType$sendWorkflowSignal() && signalName) + { + workflow.signalEventReceived(signalName, variables); } - } diff --git a/process/DocumentTemplate_lib/process.js b/process/DocumentTemplate_lib/process.js index 2d2c94f233..5fef12bb28 100644 --- a/process/DocumentTemplate_lib/process.js +++ b/process/DocumentTemplate_lib/process.js @@ -555,7 +555,7 @@ DocumentTemplate.prototype.getReplacedEmailsByContactIds = function (pContactIds var emailObjects = {}; var isEML = this.type == DocumentTemplate.types.EML; this.setOptions({base64 : isEML}); - var emailContents = this.getReplacedContentByContactIds(pContactIds, PlaceholderUtils.getLinkPlaceholders()); + var emailContents = this.getReplacedContentByContactIds(pContactIds, pAdditionalPlaceholders); for (let contactId in emailContents) { diff --git a/process/KeywordRegistry_basic/process.js b/process/KeywordRegistry_basic/process.js index 727098fede..8c40b220a4 100644 --- a/process/KeywordRegistry_basic/process.js +++ b/process/KeywordRegistry_basic/process.js @@ -404,4 +404,8 @@ $KeywordRegistry.deviceType = function(){return "DeviceType";}; $KeywordRegistry.interestLinkStatus$notSubscribed = function(){return "INTERESTLINK_NOTSUBSCRIBED";}; $KeywordRegistry.communicationBlacklistType = function(){return "CommunicationBlacklistType";}; -$KeywordRegistry.communicationBlacklistType$emailRecipientFilter = function(){return "BLACKLIST_TYPE_EMAILRECIPIENT_FILTER";}; \ No newline at end of file +$KeywordRegistry.communicationBlacklistType$emailRecipientFilter = function(){return "BLACKLIST_TYPE_EMAILRECIPIENT_FILTER";}; + +$KeywordRegistry.weblinkActionType = function(){return "WeblinkActionType";}; +$KeywordRegistry.weblinkActionType$startWorkflow = function(){return "LINKACTION_STARTWORKFLOW";}; +$KeywordRegistry.weblinkActionType$sendWorkflowSignal = function(){return "LINKACTION_SENDSIGNAL";}; \ No newline at end of file -- GitLab From 6d2fdeebb070583e4b4951fae8065eb97c53ae2d Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Thu, 29 Apr 2021 17:04:16 +0200 Subject: [PATCH 117/242] 1079642 fix communication settings editing --- .../recordcontainers/db/conditionProcess.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/entity/CommunicationSettings_entity/recordcontainers/db/conditionProcess.js b/entity/CommunicationSettings_entity/recordcontainers/db/conditionProcess.js index 7e2c1224ac..03ff626542 100644 --- a/entity/CommunicationSettings_entity/recordcontainers/db/conditionProcess.js +++ b/entity/CommunicationSettings_entity/recordcontainers/db/conditionProcess.js @@ -1,6 +1,6 @@ import("system.result"); import("Sql_lib"); -var condition = newWhere("COMMUNICATIONSETTINGS.CONTACT_ID", "$param.ContactId_param"); +var condition = newWhereIfSet("COMMUNICATIONSETTINGS.CONTACT_ID", "$param.ContactId_param"); result.string(condition.toString()); \ No newline at end of file -- GitLab From 17b5c764b7369f0ba3da1928ee9cf23609a20e0b Mon Sep 17 00:00:00 2001 From: "s.pongratz" <s.pongratz@adito.de> Date: Fri, 30 Apr 2021 08:58:40 +0200 Subject: [PATCH 118/242] =?UTF-8?q?[Projekt:=20xRM-ContactManagement][Tick?= =?UTF-8?q?etNr.:=201078217][Dublettenkonfiguration=20kann=20nicht=20erste?= =?UTF-8?q?llt=20gel=C3=B6scht=20werden]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .liquibase/Data_alias/basic/2021.0.3/Duplicate/changelog.xml | 1 + .../Duplicate/insert_duplicatescanner.xml} | 0 .liquibase/Data_alias/basic/_demoData/changelog.xml | 1 - 3 files changed, 1 insertion(+), 1 deletion(-) rename .liquibase/Data_alias/basic/{_demoData/generatedData/duplicatescanner.xml => 2021.0.3/Duplicate/insert_duplicatescanner.xml} (100%) diff --git a/.liquibase/Data_alias/basic/2021.0.3/Duplicate/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/Duplicate/changelog.xml index 10ee1b9cc2..15d32034ee 100644 --- a/.liquibase/Data_alias/basic/2021.0.3/Duplicate/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/Duplicate/changelog.xml @@ -7,4 +7,5 @@ <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/_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/_demoData/changelog.xml b/.liquibase/Data_alias/basic/_demoData/changelog.xml index 1030dcdc8b..e447185e64 100644 --- a/.liquibase/Data_alias/basic/_demoData/changelog.xml +++ b/.liquibase/Data_alias/basic/_demoData/changelog.xml @@ -33,7 +33,6 @@ <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"/> -- GitLab From e7b0c1177640fa5f2361b59da436cc0a58777d26 Mon Sep 17 00:00:00 2001 From: Daniel Tran <d.tran@adito.de> Date: Fri, 30 Apr 2021 07:24:35 +0000 Subject: [PATCH 119/242] [Projekt: xRM-ContactManagement][TicketNr.: 1078787][Leadimport triggert Index nicht] - Customized if-statement to only catch the case when tablename is "LEAD", to fix not triggering index when importing leads via. leadimport. --- .../Data_alias/basic/2021.0.3/changelog.xml | 1 + .../basic/2021.0.3/renameLeadTable.xml | 9 + aliasDefinition/Data_alias/Data_alias.aod | 4593 +++++----- .../entities/lead/documentation.adoc | 3 - .../Data_alias_noAudit/Data_alias_noAudit.aod | 7630 ++++++++++------- entity/Lead_entity/Lead_entity.aod | 38 +- .../recordcontainers/db/conditionProcess.js | 2 +- .../leadimportreset/onActionProcess.js | 6 +- .../recordcontainers/db/onDBDelete.js | 2 +- process/Dependency_lib/process.js | 2 +- process/Leadimport_lib/process.js | 11 +- process/importLead_serverProcess/process.js | 2 +- 12 files changed, 6873 insertions(+), 5426 deletions(-) create mode 100644 .liquibase/Data_alias/basic/2021.0.3/renameLeadTable.xml delete mode 100644 aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/lead/documentation.adoc diff --git a/.liquibase/Data_alias/basic/2021.0.3/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/changelog.xml index 9ea2f9270d..12e4fef499 100644 --- a/.liquibase/Data_alias/basic/2021.0.3/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/changelog.xml @@ -14,4 +14,5 @@ <include relativeToChangelogFile="true" file="update_ab_countryinfo_name_native.xml"/> <include relativeToChangelogFile="true" file="create_probability_keywords.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/renameLeadTable.xml b/.liquibase/Data_alias/basic/2021.0.3/renameLeadTable.xml new file mode 100644 index 0000000000..3ff67e81e9 --- /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/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod index 3fc080829b..5210015442 100644 --- a/aliasDefinition/Data_alias/Data_alias.aod +++ b/aliasDefinition/Data_alias/Data_alias.aod @@ -10120,7 +10120,7 @@ <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> @@ -10183,7 +10183,7 @@ <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> @@ -10606,8 +10606,8 @@ <name>CREATEACTIVITIES</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="-6" /> - <size v="3" /> + <columnType v="5" /> + <size v="5" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -10648,8 +10648,8 @@ <name>USE_TEMPLATE_ATTACHMENTS</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="-6" /> - <size v="3" /> + <columnType v="5" /> + <size v="5" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -10663,8 +10663,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="19" /> - <scale v="0" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -10795,8 +10795,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="19" /> - <scale v="0" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -10836,8 +10836,8 @@ <name>IS_TEST_RECIPIENT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="-6" /> - <size v="3" /> + <columnType v="5" /> + <size v="5" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -12203,7 +12203,7 @@ <scale v="0" /> <notNull v="true" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> @@ -12245,7 +12245,7 @@ <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> @@ -13299,12 +13299,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> @@ -13317,11 +13317,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" /> @@ -13331,26 +13331,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" /> @@ -13359,11 +13359,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" /> @@ -13372,12 +13372,32 @@ <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>ATTRIBUTE_LOYALTY</name> + <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" /> @@ -13387,24 +13407,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" /> @@ -13415,11 +13435,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" /> @@ -13429,11 +13449,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" /> @@ -13443,11 +13463,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" /> @@ -13457,11 +13477,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" /> @@ -13470,26 +13490,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" /> @@ -13499,7 +13539,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>LEADIMPORT_ID</name> + <name>EXPORTTEMPLATE_ID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> @@ -13513,32 +13553,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> + <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>CONTACTPOSITION</name> + <name>PLACEOFUSE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13548,25 +13615,45 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ATTRIBUTE03</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>ATTRIBUTE02</name> + <name>ISOLANGUAGE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="100" /> + <columnType v="1" /> + <size v="3" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13576,12 +13663,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CONTACTROLE</name> + <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="60" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -13590,11 +13677,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>PERSINFO</name> + <name>DESCRIPTION</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> - <size v="2147483647" /> + <columnType v="12" /> + <size v="1337" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13604,25 +13691,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DEPARTMENT</name> + <name>EXPORTTEMPLATEID</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>NAME</name> + <name>TITLE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="250" /> + <size v="100" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13632,12 +13719,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>REGION</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -13646,28 +13733,21 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>PERSON_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> - <dependencies> - <entityDependency> - <name>b3823998-cf9c-4fa1-914c-6158945e9863</name> - <entityName>PERSON</entityName> - <fieldName>PERSONID</fieldName> - </entityDependency> - </dependencies> </entityFieldDb> <entityFieldDb> - <name>ADDRESS</name> + <name>USER_EDIT</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -13681,11 +13761,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>SOURCE</name> + <name>FIELDSEPARATOR</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13695,11 +13775,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>LEGALFORM</name> + <name>SENTENCESEPARATOR</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" /> @@ -13709,11 +13789,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DISTRICT</name> + <name>FIELDDELIMITER</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13722,12 +13802,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>DUPSTATUS</name> + <name>FIELD</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="20" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13737,25 +13837,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>GENDER</name> + <name>EXPORTTEMPLATEFIELDID</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>ATTRIBUTE04</name> + <name>SORTING</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="100" /> + <columnType v="5" /> + <size v="5" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13765,35 +13865,62 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>LETTERSALUTATION</name> + <name>EXPORTTEMPLATE_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> + <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>USER_NEW</name> + <name>EXPORTTEMPLATESELECTIONID</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>ORGANISATION_ID</name> + <name>EXPORTTEMPLATE_ID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> @@ -13807,32 +13934,52 @@ <description></description> <dependencies> <entityDependency> - <name>abfbfb1e-678a-409b-a5cb-a87c8332478f</name> - <entityName>ORGANISATION</entityName> - <fieldName>ORGANISATIONID</fieldName> + <name>e391399b-0f92-436d-96fa-1aaed5f712a8</name> + <entityName>EXPORTTEMPLATE</entityName> + <fieldName>EXPORTTEMPLATEID</fieldName> </entityDependency> </dependencies> </entityFieldDb> <entityFieldDb> - <name>LEADID</name> + <name>FILENAME</name> <dbName></dbName> - <primaryKey v="true" /> - <columnType v="1" /> - <size v="36" /> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="33" /> <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> + </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>USER_EDIT</name> + <name>PERMISSION</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13842,11 +13989,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CITY</name> + <name>PERMISSIONPROCURER_TYPE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13856,7 +14003,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATEOFBIRTH</name> + <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> @@ -13870,27 +14017,27 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>VATCODE</name> + <name>AB_PERMISSIONCALENDARID</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>ORGINFO</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> - <size v="2147483647" /> - <scale v="0" /> - <notNull v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -13898,13 +14045,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>PROVINCE</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> @@ -13912,39 +14059,39 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>TITLE</name> + <name>PERMISSIONPROCURER_ROWID</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>DATE_NEW</name> + <name>PERMISSIONDEALER_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>USER_EDIT</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="100" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13954,11 +14101,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>O_COMMXING</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" /> @@ -13967,13 +14114,33 @@ <title></title> <description></description> </entityFieldDb> - <entityFieldDb> - <name>O_COMMPHONE</name> + </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>DUE_DATE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="254" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -13982,11 +14149,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>O_COMMMOBIL</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" /> @@ -13996,39 +14163,39 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>O_COMMEMAIL</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_COMMLINKEDIN</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>O_COMMBLOG</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" /> @@ -14038,11 +14205,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>P_COMMXING</name> + <name>INFO</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="254" /> + <columnType v="2005" /> + <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14052,11 +14219,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>P_COMMLINKEDIN</name> + <name>USER_NEW</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="254" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14066,25 +14233,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ISOLANGUAGE</name> + <name>CONTACT_PERSON_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>P_COMMBLOG</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" /> @@ -14094,11 +14261,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>P_COMMPHONE</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" /> @@ -14107,26 +14274,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_COMMMOBIL</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_COMMEMAIL</name> + <name>VISITPLAN_WEEK</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" /> @@ -14136,11 +14337,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="2005" /> + <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14150,11 +14351,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" /> @@ -14166,9 +14367,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> @@ -14184,10 +14385,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" /> @@ -14198,25 +14399,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="8" /> <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="8" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14226,55 +14427,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" /> @@ -14288,7 +14469,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>TRIGGER_EVENT</name> + <name>APPOINTMENT_ID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> @@ -14302,11 +14483,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" /> @@ -14316,39 +14497,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" /> @@ -14360,12 +14541,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> @@ -14378,7 +14559,7 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>EXPORTTEMPLATEPLACEOFUSEID</name> + <name>CLASSIFICATIONGRADINGID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -14392,11 +14573,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" /> @@ -14406,7 +14587,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>EXPORTTEMPLATE_ID</name> + <name>CLASSIFICATIONGROUP_ID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> @@ -14418,23 +14599,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> @@ -14447,10 +14635,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" /> @@ -14459,20 +14647,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" /> @@ -14482,7 +14663,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DOCUMENTTEMPLATEPLACEOFUSEID</name> + <name>CLASSIFICATIONSTORAGEID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -14495,15 +14676,43 @@ <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>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> </entityFields> </entityDb> <entityDb> - <name>EXPORTTEMPLATE</name> + <name>CLASSIFICATIONGROUP</name> <dbName></dbName> - <idColumn>EXPORTTEMPLATEID</idColumn> + <idColumn>CLASSIFICATIONGROUPID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> - <documentation>%aditoprj%/aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/exporttemplate/documentation.adoc</documentation> + <documentation></documentation> <title></title> <description></description> <auditSyncConfig> @@ -14516,26 +14725,26 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>ISOLANGUAGE</name> + <name>CLASSIFICATIONGROUPID</name> <dbName></dbName> - <primaryKey v="false" /> + <primaryKey v="true" /> <columnType v="1" /> - <size v="3" /> + <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>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" /> @@ -14544,11 +14753,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" /> @@ -14557,8 +14766,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" /> @@ -14572,7 +14801,21 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>TITLE</name> + <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" /> @@ -14592,7 +14835,7 @@ <columnType v="93" /> <size v="29" /> <scale v="9" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -14600,11 +14843,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" /> @@ -14614,11 +14857,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" /> @@ -14628,13 +14871,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> @@ -14642,25 +14885,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" /> @@ -14672,12 +14915,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> @@ -14690,11 +14933,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" /> @@ -14704,26 +14947,26 @@ <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" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -14732,87 +14975,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" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <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" /> @@ -14821,32 +15030,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" /> @@ -14856,11 +15045,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" /> @@ -14870,21 +15059,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" /> @@ -14898,67 +15073,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="2005" /> + <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14968,11 +15101,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" /> @@ -14984,9 +15117,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> @@ -15002,7 +15135,21 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>DUE_DATE</name> + <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>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> @@ -15016,35 +15163,35 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>SOURCE</name> + <name>DEPARTMENT_ATTRIBUTE_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>VISITRECOMMENDATIONID</name> + <name>DISTRICT_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>EMPLOYEE_CONTACT_ID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> @@ -15058,12 +15205,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>PRIORITY</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="36" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -15072,11 +15219,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>INFO</name> + <name>USER_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> - <size v="2147483647" /> + <columnType v="12" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -15086,7 +15233,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</name> + <name>USER_EDIT</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -15100,24 +15247,24 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CONTACT_PERSON_ID</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" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>RESPONSIBLE</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" /> @@ -15128,12 +15275,26 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>STATUS</name> + <name>VALID_FROM</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> - <scale v="0" /> + <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" /> @@ -15144,9 +15305,9 @@ </entityFields> </entityDb> <entityDb> - <name>VISITPLANEMPLOYEEWEEK</name> + <name>DISTRICTCONTACT</name> <dbName></dbName> - <idColumn>VISITPLANEMPLOYEEWEEKID</idColumn> + <idColumn>DISTRICTCONTACTID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -15154,7 +15315,7 @@ <description></description> <auditSyncConfig> <name>auditSyncConfig</name> - <auditMode v="0" /> + <auditMode v="1" /> <syncActive v="false" /> <syncComplete v="true" /> <syncDirection v="1" /> @@ -15162,21 +15323,21 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>VISITPLANEMPLOYEEWEEKID</name> + <name>ORIGIN</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>CONTACT_ID</name> + <name>STATUS</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> @@ -15184,17 +15345,29 @@ <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> + <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>VISITPLAN_WEEK</name> + <name>ADVISER_ROLE</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" /> @@ -15204,55 +15377,35 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>INFO</name> + <name>ADVISER_CONTACT_ID</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" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>VISITPLAN_YEAR</name> + <name>DISTRICTCONTACTID</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> - </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> + <name>DISTRICT_ID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -15260,44 +15413,28 @@ <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" /> + <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>VISITPLANEMPLOYEEWEEK_ID</name> + <name>CONTACT_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> + <columnType v="12" /> <size v="36" /> <scale v="0" /> <notNull v="false" /> @@ -15306,42 +15443,40 @@ <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>VISITRECOMMENDATION_ID</name> + <name>VALID_FROM</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> - <scale v="0" /> + <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>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" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>APPOINTMENT_ID</name> + <name>VALID_UNTIL</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -15350,12 +15485,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ENTRYDATE</name> + <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="91" /> - <size v="10" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -15364,39 +15499,39 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CONTACT_ID</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" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>ORGANISATION_CONTACT_ID</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <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>USER_NEW</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -15408,9 +15543,9 @@ </entityFields> </entityDb> <entityDb> - <name>CLASSIFICATIONGRADING</name> + <name>KNOWLEDGEDISCUSSION</name> <dbName></dbName> - <idColumn>CLASSIFICATIONGRADINGID</idColumn> + <idColumn>KNOWLEDGEDISCUSSIONID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -15426,25 +15561,25 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>CLASSIFICATIONGRADINGID</name> + <name>PARENTENTRY</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>GRADING</name> + <name>STATUS</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="1" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -15454,26 +15589,26 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CLASSIFICATIONGROUP_ID</name> + <name>DISCUSSIONTEXT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="2005" /> + <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> <entityFieldDb> - <name>MINPERCENT</name> + <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="4" /> - <size v="10" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -15481,28 +15616,22 @@ <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> + <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" /> @@ -15516,11 +15645,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CLASSIFICATIONVALUE</name> + <name>AUTHOR</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="20" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -15530,25 +15659,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CLASSIFICATIONSTORAGEID</name> + <name>DATE_NEW</name> <dbName></dbName> - <primaryKey v="true" /> - <columnType v="1" /> - <size v="36" /> - <scale v="0" /> - <notNull v="true" /> - <isUnique v="true" /> - <index v="true" /> + <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> + <name>USER_NEW</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="63" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -15558,11 +15687,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>OUTDATED</name> + <name>USER_EDIT</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" /> @@ -15574,9 +15703,9 @@ </entityFields> </entityDb> <entityDb> - <name>CLASSIFICATIONGROUP</name> + <name>KNOWLEDGELINK</name> <dbName></dbName> - <idColumn>CLASSIFICATIONGROUPID</idColumn> + <idColumn>KNOWLEDGELINKID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -15592,69 +15721,7 @@ </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>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> + <name>KNOWLEDGELINKID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -15682,15 +15749,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> @@ -15702,7 +15769,7 @@ <columnType v="93" /> <size v="29" /> <scale v="9" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -15710,11 +15777,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" /> @@ -15724,11 +15791,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" /> @@ -15738,13 +15805,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> @@ -15752,7 +15819,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>LEADIMPORT_ID</name> + <name>ROW_ID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> @@ -15765,26 +15832,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> @@ -15800,12 +15853,12 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>DISTRICT_NAME</name> + <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -15814,39 +15867,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" /> @@ -15856,11 +15916,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" /> @@ -15870,12 +15930,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="2005" /> + <size v="2147483647" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -15884,25 +15944,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="2005" /> + <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -15910,14 +15977,21 @@ <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" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -15926,25 +16000,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" /> @@ -15954,29 +16014,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> @@ -15984,9 +16051,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> @@ -16002,7 +16069,7 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>DISTRICTRESPONSIBLEID</name> + <name>KNOWLEDGEROLESID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -16016,68 +16083,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" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <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" /> @@ -16086,12 +16173,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -16100,7 +16187,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_EDIT</name> + <name>USER_NEW</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -16114,11 +16201,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" /> @@ -16128,11 +16215,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" /> @@ -16141,40 +16228,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> @@ -16182,27 +16241,13 @@ <description></description> <auditSyncConfig> <name>auditSyncConfig</name> - <auditMode v="1" /> + <auditMode v="0" /> <syncActive v="false" /> <syncComplete v="true" /> <syncDirection v="1" /> <syncIds></syncIds> </auditSyncConfig> <entityFields> - <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> @@ -16214,40 +16259,14 @@ <isUnique v="false" /> <index v="false" /> <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> <description></description> </entityFieldDb> <entityFieldDb> - <name>ADVISER_CONTACT_ID</name> + <name>AB_ATTRIBUTE_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> + <columnType v="1" /> <size v="36" /> <scale v="0" /> <notNull v="false" /> @@ -16258,7 +16277,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DISTRICTCONTACTID</name> + <name>KNOWLEDGEMANAGEMENTTAGMODERATIONID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -16271,74 +16290,56 @@ <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>DISTRICT_ID</name> + <name>KNOWLEDGETAGID</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>District</title> + <title></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" /> @@ -16352,7 +16353,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_EDIT</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> @@ -16366,7 +16367,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_EDIT</name> + <name>TAG</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -16380,12 +16381,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" /> @@ -16394,7 +16395,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</name> + <name>USER_EDIT</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -16410,9 +16411,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> @@ -16428,12 +16429,12 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>PARENTENTRY</name> + <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -16442,35 +16443,35 @@ <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" /> @@ -16484,35 +16485,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" /> @@ -16525,14 +16526,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> @@ -16540,13 +16561,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> @@ -16554,13 +16589,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> @@ -16570,9 +16605,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> @@ -16588,7 +16623,35 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>KNOWLEDGELINKID</name> + <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" /> @@ -16602,40 +16665,60 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_EDIT</name> + <name>OBJECT_TYPE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> - <notNull 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>KNOWLEDGEMANAGEMENT_ID</name> + <name>MST_TEAMID</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>IS_ARCHIVED</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" /> @@ -16644,11 +16727,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" /> @@ -16658,11 +16741,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" /> @@ -16672,11 +16755,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" /> @@ -16686,15 +16769,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> @@ -16702,13 +16785,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> @@ -16719,6 +16801,19 @@ <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> + <description></description> + </entityFieldDb> <entityFieldDb> <name>DATE_EDIT</name> <dbName></dbName> @@ -16730,25 +16825,23 @@ <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" /> @@ -16758,18 +16851,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" /> @@ -16779,11 +16877,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" /> @@ -16791,66 +16888,61 @@ <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="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> + <name>TRIGGEREVENTINSERT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="255" /> + <columnType v="5" /> + <size v="5" /> <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="5" /> + <size v="5" /> <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> @@ -16863,68 +16955,56 @@ <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="2005" /> + <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> @@ -16936,21 +17016,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" /> @@ -16960,43 +17039,145 @@ <isUnique v="false" /> <index v="true" /> <documentation></documentation> - <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>ROLENAME</name> + <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> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DESCRIPTION</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="100" /> + <size v="500" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <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> + <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> + <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> + <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>AUTOPROBABILITY</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> - </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> + </entityFields> + </entityDb> + <entityDb> + <name>CHECKLISTENTRY</name> + <dbName></dbName> + <idColumn>CHECKLISTENTRYID</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>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> + <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> + <description></description> + </entityFieldDb> <entityFieldDb> <name>DATE_EDIT</name> <dbName></dbName> @@ -17008,35 +17189,19 @@ <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>TITLE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="200" /> + <size v="100" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> - <title></title> <description></description> </entityFieldDb> <entityFieldDb> @@ -17050,7 +17215,6 @@ <isUnique v="false" /> <index v="false" /> <documentation></documentation> - <title></title> <description></description> </entityFieldDb> <entityFieldDb> @@ -17064,11 +17228,10 @@ <isUnique v="false" /> <index v="false" /> <documentation></documentation> - <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>SYSTEMNAME</name> + <name>USER_EDIT</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -17078,17 +17241,16 @@ <isUnique v="false" /> <index v="false" /> <documentation></documentation> - <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_EDIT</name> + <name>AUTO</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> + <columnType v="5" /> + <size v="5" /> <scale v="0" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -17098,13 +17260,12 @@ </entityFields> </entityDb> <entityDb> - <name>KNOWLEDGEMANAGEMENTTAGMODERATION</name> + <name>CHECKLIST</name> <dbName></dbName> - <idColumn>KNOWLEDGEMANAGEMENTTAGMODERATIONID</idColumn> + <idColumn>CHECKLISTID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> - <title></title> <description></description> <auditSyncConfig> <name>auditSyncConfig</name> @@ -17116,57 +17277,79 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>STATUS</name> + <name>CHECKLISTID</name> <dbName></dbName> - <primaryKey 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> + <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_ATTRIBUTE_ID</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <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="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>KNOWLEDGEMANAGEMENTTAGMODERATIONID</name> + <name>USER_EDIT</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> </entityFields> </entityDb> <entityDb> - <name>KNOWLEDGETAG</name> + <name>CHECKLISTENTRYVALUE</name> <dbName></dbName> - <idColumn>KNOWLEDGETAGID</idColumn> + <idColumn>CHECKLISTENTRYVALUEID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> - <title></title> <description></description> <auditSyncConfig> <name>auditSyncConfig</name> @@ -17178,31 +17361,29 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>KNOWLEDGETAGID</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" /> + <notNull v="false" /> + <isUnique v="false" /> <index v="true" /> <documentation></documentation> - <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>STATUS</name> + <name>IS_FULFILLED</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <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> @@ -17216,7 +17397,19 @@ <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> <description></description> </entityFieldDb> <entityFieldDb> @@ -17230,11 +17423,10 @@ <isUnique v="false" /> <index v="false" /> <documentation></documentation> - <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>TAG</name> + <name>USER_NEW</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -17244,11 +17436,10 @@ <isUnique v="false" /> <index v="false" /> <documentation></documentation> - <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</name> + <name>OBJECT_TYPE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -17258,7 +17449,6 @@ <isUnique v="false" /> <index v="false" /> <documentation></documentation> - <title></title> <description></description> </entityFieldDb> <entityFieldDb> @@ -17272,15 +17462,27 @@ <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> <description></description> </entityFieldDb> </entityFields> </entityDb> <entityDb> - <name>KNOWLEDGETAGLINK</name> + <name>HASDUPLICATE</name> <dbName></dbName> - <idColumn>KNOWLEDGETAGLINKID</idColumn> + <idColumn>HASDUPLICATEID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -17296,21 +17498,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> + <name>OBJECT_ROWID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> @@ -17324,53 +17512,25 @@ <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> + <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="false" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</name> + <name>DUPLICATECOUNT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> + <columnType v="4" /> + <size v="10" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -17380,15 +17540,15 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_EDIT</name> + <name>HASDUPLICATEID</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> @@ -17396,9 +17556,9 @@ </entityFields> </entityDb> <entityDb> - <name>AB_KEYWORD_CATEGORY</name> + <name>AB_SYNCCONTACT</name> <dbName></dbName> - <idColumn>AB_KEYWORD_CATEGORYID</idColumn> + <idColumn>SYNCCONTACTID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -17414,13 +17574,13 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>SORTINGBY</name> + <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="4" /> - <size v="10" /> - <scale v="0" /> - <notNull v="true" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -17428,75 +17588,55 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>AB_KEYWORD_CATEGORYID</name> + <name>EXCHANGEID</name> <dbName></dbName> - <primaryKey v="true" /> - <columnType v="1" /> - <size v="36" /> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="254" /> <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>SORTINGDIRECTION</name> + <name>ASYS_FAVORITEID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="4" /> + <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>NAME</name> + <name>USER_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="80" /> + <columnType v="1" /> + <size v="46" /> <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> - </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> + <name>CONTACT_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" /> <documentation></documentation> @@ -17504,21 +17644,21 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>MST_TEAM_ID</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> - <scale v="0" /> - <notNull v="true" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <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>SYNCCONTACTID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -17532,13 +17672,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>OBJECT_TYPE</name> + <name>DATE_DEL</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="63" /> - <scale v="0" /> - <notNull v="true" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -17548,9 +17688,9 @@ </entityFields> </entityDb> <entityDb> - <name>MST_TEAM</name> + <name>WEBLINK</name> <dbName></dbName> - <idColumn>MST_TEAMID</idColumn> + <idColumn>WEBLINKID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -17566,25 +17706,11 @@ </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> + <name>SCORE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="5" /> - <size v="5" /> + <columnType v="4" /> + <size v="10" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -17594,11 +17720,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>SERVICE_URL</name> + <name>DATE_EDIT</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" /> @@ -17608,11 +17734,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>TEAMNAME</name> + <name>LINKTYPE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="255" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -17622,11 +17748,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>GENERAL_CHANNELID</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="48" /> + <columnType v="93" /> + <size v="19" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -17636,11 +17762,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>WEB_URL</name> + <name>USER_NEW</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="500" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -17649,166 +17775,164 @@ <title></title> <description></description> </entityFieldDb> - </entityFields> - </entityDb> - <entityDb> - <name>OBSERVATION</name> - <dbName></dbName> - <idColumn>OBSERVATIONID</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_FILTER</name> + <name>WEBLINKID</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>URL</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <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> + <name>USER_EDIT</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>PLACEHOLDER</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>USER_EDIT</name> + <name>WORKFLOWPROCESSDEFINITION_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" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>NOTIFICATION_PRIO</name> + <name>ISREDIRECT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="36" /> + <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>OBJECT_ID</name> + <name>WORKFLOWSIGNAL_NAME</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="63" /> + <size v="255" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> - <documentation></documentation> - <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" /> + <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>TRIGGEREVENTDELETE</name> + <name>ACTION_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" /> <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>TRIGGEREVENTINSERT</name> + <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="5" /> - <size v="5" /> - <scale v="0" /> + <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>TRIGGEREVENTUPDATE</name> + <name>WEBLINK_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" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> @@ -17822,19 +17946,21 @@ <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>OBSERVER</name> + <name>TAG</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="63" /> + <size v="100" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> @@ -17848,30 +17974,47 @@ <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>OBJECT_FIELD</name> + <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="2005" /> - <size v="2147483647" /> + <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> + <name>MAIL_LOG</name> <dbName></dbName> - <idColumn>SALESPROJECTPHASEDEFINITIONID</idColumn> + <idColumn>MAIL_LOGID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> + <title></title> <description></description> <auditSyncConfig> <name>auditSyncConfig</name> @@ -17883,116 +18026,124 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>PHASE</name> + <name>ERRORMESSAGE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="36" /> + <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>CHECKLIST_ID</name> + <name>MAIL_LOGID</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_EDIT</name> + <name>STATUS</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" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>DESCRIPTION</name> + <name>SENDER_EMAIL</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="500" /> + <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_NEW</name> + <name>RECIPIENT_EMAIL</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" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</name> + <name>MAILING_SUBJECT</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="100" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>SALESPROJECTPHASEDEFINITIONID</name> + <name>CONTACT_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" /> - <index v="true" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_EDIT</name> + <name>MAIL_RUN_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>AUTOPROBABILITY</name> + <name>DATE_SEND</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="3" /> - <size v="6" /> - <scale v="2" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -18000,15 +18151,30 @@ <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>CHECKLISTENTRY</name> + <name>MAIL_RUN</name> <dbName></dbName> - <idColumn>CHECKLISTENTRYID</idColumn> + <idColumn>MAIL_RUNID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> + <title></title> <description></description> <auditSyncConfig> <name>auditSyncConfig</name> @@ -18020,7 +18186,7 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>CHECKLISTENTRYID</name> + <name>MAIL_RUNID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -18030,49 +18196,53 @@ <isUnique v="true" /> <index v="true" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>CHECKLIST_ID</name> + <name>OBJECT_ROWID</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>STATUS</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>TITLE</name> + <name>INTEREST_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> </entityFieldDb> <entityFieldDb> - <name>DATE_NEW</name> + <name>DATE_RUN_START</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> @@ -18082,42 +18252,45 @@ <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</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" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_EDIT</name> + <name>DATE_RUN_FINISHED</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> - <scale v="0" /> + <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>AUTO</name> + <name>TESTRUN</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="5" /> <size v="5" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -18127,12 +18300,13 @@ </entityFields> </entityDb> <entityDb> - <name>CHECKLIST</name> + <name>COMMUNICATIONSETTINGS</name> <dbName></dbName> - <idColumn>CHECKLISTID</idColumn> + <idColumn>COMMUNICATIONSETTINGSID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> + <title></title> <description></description> <auditSyncConfig> <name>auditSyncConfig</name> @@ -18144,16 +18318,87 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>CHECKLISTID</name> + <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>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>COMMUNICATIONSETTINGSID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> <size v="36" /> <scale v="0" /> - <notNull v="true" /> - <isUnique v="true" /> + <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></title> <description></description> </entityFieldDb> <entityFieldDb> @@ -18167,6 +18412,7 @@ <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> @@ -18176,10 +18422,11 @@ <columnType v="93" /> <size v="29" /> <scale v="9" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> @@ -18189,10 +18436,11 @@ <columnType v="12" /> <size v="50" /> <scale v="0" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> @@ -18206,17 +18454,19 @@ <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> </entityFields> </entityDb> <entityDb> - <name>CHECKLISTENTRYVALUE</name> + <name>COMMUNICATIONLEGALBASE</name> <dbName></dbName> - <idColumn>CHECKLISTENTRYVALUEID</idColumn> + <idColumn>COMMUNICATIONLEGALBASEID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> + <title></title> <description></description> <auditSyncConfig> <name>auditSyncConfig</name> @@ -18228,29 +18478,17 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>OBJECT_ROWID</name> + <name>COMMUNICATIONSETTINGS_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" /> <documentation></documentation> - <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> @@ -18264,10 +18502,11 @@ <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>CHECKLISTENTRYVALUEID</name> + <name>COMMUNICATIONLEGALBASEID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -18277,6 +18516,21 @@ <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> @@ -18286,10 +18540,11 @@ <columnType v="93" /> <size v="29" /> <scale v="9" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> @@ -18299,23 +18554,25 @@ <columnType v="12" /> <size v="50" /> <scale v="0" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>OBJECT_TYPE</name> + <name>INFO</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="250" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> + <title></title> <description></description> </entityFieldDb> <entityFieldDb> @@ -18329,27 +18586,15 @@ <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> + <title></title> <description></description> </entityFieldDb> </entityFields> </entityDb> <entityDb> - <name>HASDUPLICATE</name> + <name>BULKMAILTESTRECIPIENT</name> <dbName></dbName> - <idColumn>HASDUPLICATEID</idColumn> + <idColumn>BULKMAILTESTRECIPIENTID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -18365,7 +18610,7 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>OBJECT_ROWID</name> + <name>BULKMAIL_ID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> @@ -18379,11 +18624,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>OBJECT_TYPE</name> + <name>EMAIL_ADDRESS</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="63" /> + <size v="255" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -18393,11 +18638,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DUPLICATECOUNT</name> + <name>CONTACT_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="4" /> - <size v="10" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -18407,7 +18652,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>HASDUPLICATEID</name> + <name>BULKMAILTESTRECIPIENTID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -18423,9 +18668,9 @@ </entityFields> </entityDb> <entityDb> - <name>AB_SYNCCONTACT</name> + <name>INTERESTLINK</name> <dbName></dbName> - <idColumn>SYNCCONTACTID</idColumn> + <idColumn>INTERESTLINKID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -18441,63 +18686,21 @@ </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> + <name>STATUS</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" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>CONTACT_ID</name> + <name>INTEREST_ID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> @@ -18511,21 +18714,7 @@ <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> + <name>INTERESTLINKID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -18539,15 +18728,15 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_DEL</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" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> @@ -18555,9 +18744,9 @@ </entityFields> </entityDb> <entityDb> - <name>WEBLINK</name> + <name>INTEREST</name> <dbName></dbName> - <idColumn>WEBLINKID</idColumn> + <idColumn>INTERESTID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -18573,11 +18762,11 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>SCORE</name> + <name>STATUS</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" /> @@ -18587,11 +18776,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_EDIT</name> + <name>DESCRIPTION</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="19" /> + <columnType v="12" /> + <size v="500" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -18601,25 +18790,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>LINKTYPE</name> + <name>INTERESTID</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_NEW</name> + <name>TITLE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="19" /> + <columnType v="12" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -18629,11 +18818,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</name> + <name>IS_DEFAULT</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" /> @@ -18642,26 +18831,32 @@ <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>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> + <name>BROWSER</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="512" /> + <size v="255" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -18671,11 +18866,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_EDIT</name> + <name>DEVICE_TYPE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="255" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -18685,25 +18880,39 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>PLACEHOLDER</name> + <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="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>WORKFLOWPROCESSDEFINITION_KEY</name> + <name>IP_ADDRESS</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="255" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -18713,11 +18922,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ISREDIRECT</name> + <name>WEBLINK_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="-6" /> - <size v="3" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -18727,7 +18936,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>WORKFLOWSIGNAL_NAME</name> + <name>OPERATING_SYSTEM</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -18741,12 +18950,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ACTION_TYPE</name> + <name>DATE_OPENED</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="36" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -18757,9 +18966,9 @@ </entityFields> </entityDb> <entityDb> - <name>WEBLINKTAG</name> + <name>COMMUNICATIONBLACKLIST</name> <dbName></dbName> - <idColumn>WEBLINKTAGID</idColumn> + <idColumn>COMMUNICATIONBLACKLISTID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -18774,6 +18983,20 @@ <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> @@ -18789,12 +19012,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>WEBLINK_ID</name> + <name>END_DATE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -18803,7 +19026,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_NEW</name> + <name>START_DATE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> @@ -18817,13 +19040,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>TAG</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="100" /> - <scale v="0" /> - <notNull v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -18837,7 +19060,7 @@ <columnType v="12" /> <size v="50" /> <scale v="0" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -18845,7 +19068,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>WEBLINKTAGID</name> + <name>COMMUNICATIONBLACKLISTID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -18858,6 +19081,20 @@ <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> @@ -18872,12 +19109,26 @@ <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>MAIL_LOG</name> + <name>PLANNING_MONTH</name> <dbName></dbName> - <idColumn>MAIL_LOGID</idColumn> + <idColumn>PLANNING_MONTHID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -18893,21 +19144,7 @@ </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> + <name>PLANNING_MONTHID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -18921,26 +19158,12 @@ <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> + <name>MONTH_FACTOR</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="255" /> - <scale v="0" /> + <columnType v="2" /> + <size v="5" /> + <scale v="2" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -18949,11 +19172,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>RECIPIENT_EMAIL</name> + <name>MONTH_NUMBER</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="255" /> + <columnType v="4" /> + <size v="10" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -18962,12 +19185,32 @@ <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>MAILING_SUBJECT</name> + <name>FILTER</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="100" /> + <columnType v="2005" /> + <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -18977,12 +19220,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CONTACT_ID</name> + <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -18991,26 +19234,26 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>MAIL_RUN_ID</name> + <name>DSGVOCONFIGURATIONID</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_SEND</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="19" /> - <scale v="0" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -19019,55 +19262,21 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>OPENER_LINK_CLICK_ID</name> + <name>USER_NEW</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" /> + <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>OBJECT_ROWID</name> + <name>REASON</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> @@ -19081,11 +19290,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>STATUS</name> + <name>USER_EDIT</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="100" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -19094,41 +19303,80 @@ <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>INTEREST_ID</name> + <name>DSGVODELETEFLAGID</name> <dbName></dbName> - <primaryKey v="false" /> + <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_RUN_START</name> + <name>CONTACT_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="19" /> + <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> + <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>OBJECT_TYPE</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="63" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -19137,11 +19385,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_RUN_FINISHED</name> + <name>USER_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="19" /> + <columnType v="12" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -19151,25 +19399,37 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>TESTRUN</name> + <name>REASON</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" /> <index v="false" /> <documentation></documentation> - <title></title> + <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>COMMUNICATIONSETTINGS</name> + <name>LEADS</name> <dbName></dbName> - <idColumn>COMMUNICATIONSETTINGSID</idColumn> + <idColumn>LEADID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -19185,13 +19445,13 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>STATUS</name> + <name>ZIP</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <size v="50" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -19199,11 +19459,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CHANNEL_ID</name> + <name>CUSTOMERCODE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -19213,13 +19473,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CHANNEL_TYPE</name> + <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="36" /> - <scale v="0" /> - <notNull v="true" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -19227,39 +19487,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CONTACT_ID</name> + <name>FIRSTNAME</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="12" /> + <size v="50" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> - <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" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>MEDIUM</name> + <name>ATTRIBUTE_LOYALTY</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <size v="100" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -19269,11 +19515,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_EDIT</name> + <name>DUPLICAT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="19" /> + <columnType v="4" /> + <size v="10" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -19283,13 +19529,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_NEW</name> + <name>P_COMMINTERNET</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="19" /> + <columnType v="12" /> + <size v="254" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -19297,13 +19543,13 @@ <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="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -19311,7 +19557,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_EDIT</name> + <name>MIDDLENAME</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -19324,46 +19570,12 @@ <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> + <name>COUNTRY</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" /> + <size v="2" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -19373,27 +19585,13 @@ <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> + <name>LASTNAME</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="4" /> - <size v="10" /> + <columnType v="12" /> + <size v="50" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -19401,13 +19599,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_NEW</name> + <name>SALUTATION</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="19" /> + <columnType v="12" /> + <size v="30" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -19415,13 +19613,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</name> + <name>TAXCODE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="30" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -19429,11 +19627,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>INFO</name> + <name>ORGCOUNTRYCODE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="250" /> + <size v="10" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -19443,11 +19641,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_EDIT</name> + <name>P_COMMXING</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="254" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -19456,28 +19654,8 @@ <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> + <name>LEADIMPORT_ID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> @@ -19485,17 +19663,17 @@ <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>EMAIL_ADDRESS</name> + <name>P_COMMLINKEDIN</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="255" /> + <size v="254" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -19505,11 +19683,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CONTACT_ID</name> + <name>BUILDINGNO</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" /> @@ -19519,45 +19697,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>BULKMAILTESTRECIPIENTID</name> + <name>ISOLANGUAGE</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> - </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> + <name>ATTRIBUTE_INDUSTRY</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <size v="100" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -19567,73 +19725,53 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>INTEREST_ID</name> + <name>CONTACTPOSITION</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>INTERESTLINKID</name> + <name>ATTRIBUTE03</name> <dbName></dbName> - <primaryKey v="true" /> - <columnType v="1" /> - <size v="36" /> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="100" /> <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>CONTACT_ID</name> + <name>ATTRIBUTE02</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>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> + <name>CONTACTROLE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <size v="60" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -19643,11 +19781,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DESCRIPTION</name> + <name>P_COMMBLOG</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="500" /> + <size v="254" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -19657,21 +19795,21 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>INTERESTID</name> + <name>PERSINFO</name> <dbName></dbName> - <primaryKey v="true" /> - <columnType v="1" /> - <size v="36" /> + <primaryKey v="false" /> + <columnType v="2005" /> + <size v="2147483647" /> <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>TITLE</name> + <name>DEPARTMENT</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -19685,45 +19823,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>IS_DEFAULT</name> + <name>NAME</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="-6" /> - <size v="3" /> + <columnType v="12" /> + <size v="250" /> <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>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> + <name>REGION</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="255" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -19733,11 +19851,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DEVICE_TYPE</name> + <name>O_COMMXING</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="255" /> + <size v="254" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -19747,25 +19865,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>WEBLINK_CLICKID</name> + <name>PERSON_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>MAIL_LOG_ID</name> + <name>ADDRESS</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" /> @@ -19775,7 +19893,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>IP_ADDRESS</name> + <name>SOURCE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -19789,11 +19907,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>WEBLINK_ID</name> + <name>O_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" /> @@ -19803,11 +19921,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>OPERATING_SYSTEM</name> + <name>O_COMMMOBIL</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="255" /> + <size v="254" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -19817,12 +19935,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_OPENED</name> + <name>O_COMMINTERNET</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <columnType v="12" /> + <size v="254" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -19830,32 +19948,26 @@ <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> + <name>LEGALFORM</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="-1" /> - <size v="2147483647" /> + <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" /> @@ -19865,11 +19977,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_EDIT</name> + <name>DISTRICT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="19" /> + <columnType v="12" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -19879,11 +19991,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>END_DATE</name> + <name>O_COMMLINKEDIN</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="19" /> + <columnType v="12" /> + <size v="254" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -19893,11 +20005,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>START_DATE</name> + <name>DUPSTATUS</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="19" /> + <columnType v="12" /> + <size v="20" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -19907,13 +20019,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_NEW</name> + <name>O_COMMBLOG</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="19" /> + <columnType v="12" /> + <size v="254" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -19921,13 +20033,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</name> + <name>GENDER</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> @@ -19935,25 +20047,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>COMMUNICATIONBLACKLISTID</name> + <name>ATTRIBUTE04</name> <dbName></dbName> - <primaryKey v="true" /> - <columnType v="1" /> - <size v="36" /> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="100" /> <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>REASON</name> + <name>LETTERSALUTATION</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="500" /> + <size v="100" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -19963,7 +20075,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_EDIT</name> + <name>USER_NEW</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -19977,59 +20089,39 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>BLACKLIST_TYPE</name> + <name>P_COMMPHONE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <size v="254" /> <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>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> + <name>ORGANISATION_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>MONTH_FACTOR</name> + <name>P_COMMMOBIL</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="4" /> - <size v="10" /> + <columnType v="12" /> + <size v="254" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -20039,11 +20131,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>MONTH_NUMBER</name> + <name>USER_EDIT</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" /> @@ -20052,32 +20144,12 @@ <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> + <name>CITY</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> - <size v="2147483647" /> + <columnType v="12" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -20087,7 +20159,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_EDIT</name> + <name>DATEOFBIRTH</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> @@ -20101,26 +20173,12 @@ <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> + <name>VATCODE</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" /> @@ -20129,11 +20187,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</name> + <name>P_COMMEMAIL</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="254" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -20143,11 +20201,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>REASON</name> + <name>ORGINFO</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="2005" /> + <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -20157,7 +20215,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_EDIT</name> + <name>PROVINCE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -20170,72 +20228,19 @@ <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> + <name>TITLE</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="false" /> <documentation></documentation> - <title>Contact Id</title> + <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> - <dependencies> - <entityDependency> - <name>2278befb-de66-4f45-98c2-619eb686d999</name> - <entityName>CONTACT</entityName> - <fieldName>CONTACTID</fieldName> - </entityDependency> - </dependencies> </entityFieldDb> <entityFieldDb> <name>DATE_NEW</name> @@ -20252,44 +20257,18 @@ <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> + <name>LEADSID</name> <dbName></dbName> - <primaryKey v="false" /> + <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>Reason</title> + <title></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> 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 e8620e8740..0000000000 --- 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 index 1c4215342d..5b08bfa758 100644 --- a/aliasDefinition/Data_alias_noAudit/Data_alias_noAudit.aod +++ b/aliasDefinition/Data_alias_noAudit/Data_alias_noAudit.aod @@ -9,124 +9,6 @@ <entityGroup> <name>entityGroup</name> <entities> - <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> - </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> - <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>KNOWLEDGEDISCUSSION</name> <dbName></dbName> @@ -3684,7 +3566,7 @@ <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> @@ -6000,9 +5882,9 @@ </entityFields> </entityDb> <entityDb> - <name>LEAD</name> + <name>CONTACT</name> <dbName></dbName> - <idColumn>LEADID</idColumn> + <idColumn>CONTACTID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -6018,11 +5900,11 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>ZIP</name> + <name>ISOLANGUAGE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> + <columnType v="1" /> + <size v="3" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -6032,7 +5914,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CUSTOMERCODE</name> + <name>CONTACTPOSITION</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -6060,7 +5942,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>FIRSTNAME</name> + <name>CONTACTROLE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -6074,25 +5956,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ATTRIBUTE_LOYALTY</name> + <name>ORGANISATION_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> </entityFieldDb> <entityFieldDb> - <name>DUPLICAT</name> + <name>DEPARTMENT</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" /> @@ -6102,11 +5984,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>P_COMMINTERNET</name> + <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="254" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -6130,27 +6026,27 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>MIDDLENAME</name> + <name>PERSON_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>COUNTRY</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="2" /> - <scale v="0" /> - <notNull v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -6158,11 +6054,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>LASTNAME</name> + <name>LETTERSALUTATION</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="200" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -6172,13 +6068,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>SALUTATION</name> + <name>USER_NEW</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="30" /> + <size v="50" /> <scale v="0" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -6186,24 +6082,44 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>TAXCODE</name> + <name>ADDRESS_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="30" /> + <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>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>ORGCOUNTRYCODE</name> + <name>ROWSINSERTED</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> + <columnType v="4" /> <size v="10" /> <scale v="0" /> <notNull v="false" /> @@ -6214,11 +6130,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>P_COMMXING</name> + <name>IMPORTSOURCE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="254" /> + <size v="500" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -6228,25 +6144,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>LEADIMPORT_ID</name> + <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>P_COMMLINKEDIN</name> + <name>IMPORTERRORS</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" /> @@ -6256,25 +6172,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>BUILDINGNO</name> + <name>LEADLOGID</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>ISOLANGUAGE</name> + <name>IMPORTCANCELED</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> + <columnType v="1" /> + <size v="1" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -6284,12 +6200,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ATTRIBUTE_INDUSTRY</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="100" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -6298,7 +6214,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CONTACTPOSITION</name> + <name>USER_NEW</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -6312,25 +6228,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ATTRIBUTE03</name> + <name>LEADIMPORT_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> </entityFieldDb> <entityFieldDb> - <name>ATTRIBUTE02</name> + <name>USER_EDIT</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="100" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -6339,12 +6255,32 @@ <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>CONTACTROLE</name> + <name>COLUMN18</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="60" /> + <size v="300" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -6354,11 +6290,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>P_COMMBLOG</name> + <name>COLUMN17</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="254" /> + <size v="300" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -6368,11 +6304,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>PERSINFO</name> + <name>COLUMN19</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> - <size v="2147483647" /> + <columnType v="12" /> + <size v="300" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -6382,11 +6318,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DEPARTMENT</name> + <name>COLUMN14</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="300" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -6396,11 +6332,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>NAME</name> + <name>COLUMN13</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="250" /> + <size v="300" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -6410,11 +6346,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>REGION</name> + <name>COLUMN16</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="300" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -6424,11 +6360,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>O_COMMXING</name> + <name>COLUMN15</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="254" /> + <size v="300" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -6438,25 +6374,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>PERSON_ID</name> + <name>COLUMN10</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="12" /> + <size v="300" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>ADDRESS</name> + <name>COLUMN12</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="300" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -6466,11 +6402,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>SOURCE</name> + <name>COLUMN11</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="300" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -6480,11 +6416,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>O_COMMPHONE</name> + <name>COLUMN30</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="254" /> + <size v="300" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -6494,25 +6430,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>O_COMMMOBIL</name> + <name>LEADTEMPID</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_COMMINTERNET</name> + <name>POSITION</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" /> @@ -6522,12 +6458,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>LEGALFORM</name> + <name>IMPORT_DATE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="4" /> - <size v="10" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -6536,11 +6472,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>O_COMMEMAIL</name> + <name>COLUMN07</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="254" /> + <size v="300" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -6550,11 +6486,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DISTRICT</name> + <name>COLUMN29</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="300" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -6564,11 +6500,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>O_COMMLINKEDIN</name> + <name>COLUMN06</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="254" /> + <size v="300" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -6578,11 +6514,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DUPSTATUS</name> + <name>COLUMN28</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="20" /> + <size v="300" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -6592,11 +6528,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>O_COMMBLOG</name> + <name>COLUMN09</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="254" /> + <size v="300" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -6606,11 +6542,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>GENDER</name> + <name>COLUMN08</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="300" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -6620,11 +6556,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ATTRIBUTE04</name> + <name>COLUMN03</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="100" /> + <size v="300" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -6634,11 +6570,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>LETTERSALUTATION</name> + <name>COLUMN25</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="100" /> + <size v="300" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -6648,11 +6584,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</name> + <name>COLUMN02</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="300" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -6662,11 +6598,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>P_COMMPHONE</name> + <name>COLUMN24</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="254" /> + <size v="300" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -6676,39 +6612,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ORGANISATION_ID</name> + <name>COLUMN05</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="12" /> + <size v="300" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> - <documentation></documentation> - <title></title> - <description></description> - </entityFieldDb> - <entityFieldDb> - <name>LEADID</name> - <dbName></dbName> - <primaryKey v="true" /> - <columnType v="1" /> - <size v="36" /> - <scale v="0" /> - <notNull v="true" /> - <isUnique v="true" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>P_COMMMOBIL</name> + <name>COLUMN27</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="254" /> + <size v="300" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -6718,11 +6640,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_EDIT</name> + <name>COLUMN04</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="300" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -6732,11 +6654,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CITY</name> + <name>COLUMN26</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="300" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -6746,12 +6668,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATEOFBIRTH</name> + <name>COLUMN21</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <columnType v="12" /> + <size v="300" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -6760,11 +6682,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>VATCODE</name> + <name>COLUMN20</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="30" /> + <size v="300" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -6774,11 +6696,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>P_COMMEMAIL</name> + <name>COLUMN01</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="254" /> + <size v="300" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -6788,11 +6710,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ORGINFO</name> + <name>COLUMN23</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> - <size v="2147483647" /> + <columnType v="12" /> + <size v="300" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -6802,11 +6724,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>PROVINCE</name> + <name>COLUMN22</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="300" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -6816,7 +6738,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>TITLE</name> + <name>NAME</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -6830,15 +6752,15 @@ <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="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> @@ -6846,9 +6768,9 @@ </entityFields> </entityDb> <entityDb> - <name>CONTACT</name> + <name>BULKMAILRECIPIENT</name> <dbName></dbName> - <idColumn>CONTACTID</idColumn> + <idColumn>BULKMAILRECIPIENTID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -6864,11 +6786,11 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>ISOLANGUAGE</name> + <name>STATUS</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="3" /> + <columnType v="12" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -6878,26 +6800,26 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CONTACTPOSITION</name> + <name>BULKMAIL_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>DATE_EDIT</name> + <name>EMAIL_ADDRESS</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" /> @@ -6906,11 +6828,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CONTACTROLE</name> + <name>PROBLEM</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -6920,53 +6842,53 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ORGANISATION_ID</name> + <name>BULKMAILRECIPIENTID</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>DEPARTMENT</name> + <name>CONTACT_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>CONTACTID</name> + <name>SENTDATE</name> <dbName></dbName> - <primaryKey v="true" /> - <columnType v="1" /> - <size v="36" /> - <scale v="0" /> - <notNull v="true" /> - <isUnique v="true" /> - <index v="true" /> + <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> + <name>IS_TEST_RECIPIENT</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" /> @@ -6975,13 +6897,33 @@ <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>STATUS</name> + <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="36" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -6990,27 +6932,27 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>PERSON_ID</name> + <name>RECORD_SEPARATOR</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>DATE_NEW</name> + <name>FIELD_SEPARATOR</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> - <notNull v="true" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -7018,11 +6960,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>LETTERSALUTATION</name> + <name>USER_EDIT</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="200" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -7032,13 +6974,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</name> + <name>NAME</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> @@ -7046,45 +6988,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ADDRESS_ID</name> + <name>LEADIMPORTID</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> - </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> + <name>IMPORTEMPLOYEE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="4" /> - <size v="10" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -7108,12 +7030,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_EDIT</name> + <name>STATUS</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" /> @@ -7122,12 +7044,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>IMPORTERRORS</name> + <name>IMPORT_DATE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="4" /> - <size v="10" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -7136,25 +7058,11 @@ <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> + <name>FIELD_DELIMITER</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="1" /> + <columnType v="12" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -7178,35 +7086,21 @@ <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> + <name>HEADLINE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> - <size v="36" /> + <size v="1" /> <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>USER_NEW</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -7222,9 +7116,9 @@ </entityFields> </entityDb> <entityDb> - <name>LEADTEMP</name> + <name>FORECAST</name> <dbName></dbName> - <idColumn>LEADTEMPID</idColumn> + <idColumn>FORECASTID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -7240,25 +7134,25 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>COLUMN18</name> + <name>OBJECT_ROWID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="300" /> + <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>COLUMN17</name> + <name>GROUPCODE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="300" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -7268,25 +7162,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>COLUMN19</name> + <name>FORECASTID</name> <dbName></dbName> - <primaryKey v="false" /> - <columnType v="12" /> - <size v="300" /> + <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>COLUMN14</name> + <name>VOLUME</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="300" /> + <columnType v="4" /> + <size v="10" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -7296,12 +7190,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>COLUMN13</name> + <name>DATE_START</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="300" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -7310,11 +7204,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>COLUMN16</name> + <name>INFO</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="300" /> + <columnType v="2005" /> + <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -7324,11 +7218,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>COLUMN15</name> + <name>OBJECT_TYPE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="300" /> + <size v="63" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -7338,11 +7232,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>COLUMN10</name> + <name>STATUS</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="300" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -7352,11 +7246,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>COLUMN12</name> + <name>KIND</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="300" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -7366,11 +7260,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>COLUMN11</name> + <name>FORECAST_YEAR</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="300" /> + <columnType v="4" /> + <size v="10" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -7380,39 +7274,59 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>COLUMN30</name> + <name>CONTACT_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="300" /> + <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>LEADTEMPID</name> + <name>RESPONSIBLE_CONTACT_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> + </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>POSITION</name> + <name>RESPONSIBLE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="4" /> - <size v="10" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -7422,12 +7336,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>IMPORT_DATE</name> + <name>STATUS</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" /> @@ -7436,12 +7350,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>COLUMN07</name> + <name>DUE_DATE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="300" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -7450,11 +7364,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>COLUMN29</name> + <name>SOURCE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="300" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -7464,25 +7378,39 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>COLUMN06</name> + <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="12" /> - <size v="300" /> + <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>COLUMN28</name> + <name>PRIORITY</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="300" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -7492,11 +7420,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>COLUMN09</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" /> @@ -7506,25 +7434,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>COLUMN08</name> + <name>CONTACT_PERSON_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="300" /> + <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>COLUMN03</name> + <name>INFO</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="300" /> + <columnType v="2005" /> + <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -7533,12 +7461,32 @@ <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>COLUMN25</name> + <name>OBJECT_FILTER</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="300" /> + <columnType v="2005" /> + <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -7548,12 +7496,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>COLUMN02</name> + <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="300" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -7562,13 +7510,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>COLUMN24</name> + <name>OBJECT_TYPE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="300" /> + <size v="80" /> <scale v="0" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -7576,25 +7524,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>COLUMN05</name> + <name>OBSERVATION_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="300" /> + <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>COLUMN27</name> + <name>USER_EDIT</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="300" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -7604,11 +7552,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>COLUMN04</name> + <name>NOTIFICATION_PRIO</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="300" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -7618,25 +7566,39 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>COLUMN26</name> + <name>OBJECT_ID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="300" /> + <size v="63" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>COLUMN21</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> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>TRIGGEREVENTDELETE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="300" /> + <columnType v="5" /> + <size v="5" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -7646,11 +7608,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>COLUMN20</name> + <name>TRIGGEREVENTINSERT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="300" /> + <columnType v="5" /> + <size v="5" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -7660,11 +7622,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>COLUMN01</name> + <name>TRIGGEREVENTUPDATE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="300" /> + <columnType v="5" /> + <size v="5" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -7674,12 +7636,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>COLUMN23</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="300" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -7688,13 +7650,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>COLUMN22</name> + <name>OBSERVER</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="300" /> + <size v="63" /> <scale v="0" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -7702,7 +7664,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>NAME</name> + <name>USER_NEW</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -7716,15 +7678,15 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ROW_ID</name> + <name>OBJECT_FIELD</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="2005" /> + <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> @@ -7732,9 +7694,9 @@ </entityFields> </entityDb> <entityDb> - <name>BULKMAILRECIPIENT</name> + <name>SALUTATION</name> <dbName></dbName> - <idColumn>BULKMAILRECIPIENTID</idColumn> + <idColumn>SALUTATIONID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -7750,11 +7712,11 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>STATUS</name> + <name>ISOLANGUAGE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="36" /> + <columnType v="1" /> + <size v="3" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -7764,25 +7726,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>BULKMAIL_ID</name> + <name>SALUTATION</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="12" /> + <size v="200" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>EMAIL_ADDRESS</name> + <name>SEX</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="255" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -7792,11 +7754,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>PROBLEM</name> + <name>SORT</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" /> @@ -7806,7 +7768,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>BULKMAILRECIPIENTID</name> + <name>SALUTATIONID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -7820,26 +7782,40 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CONTACT_ID</name> + <name>TITLE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="12" /> + <size v="30" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>SENTDATE</name> + <name>HEADLINE</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" /> + <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" /> @@ -7850,9 +7826,9 @@ </entityFields> </entityDb> <entityDb> - <name>LEADIMPORT</name> + <name>CLASSIFICATIONSTORAGE</name> <dbName></dbName> - <idColumn>LEADIMPORTID</idColumn> + <idColumn>CLASSIFICATIONSTORAGEID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -7868,25 +7844,25 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>DATE_EDIT</name> + <name>OBJECT_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>RECORD_SEPARATOR</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" /> @@ -7896,25 +7872,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>FIELD_SEPARATOR</name> + <name>CLASSIFICATIONSTORAGEID</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" /> - <index v="false" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_EDIT</name> + <name>OUTDATED</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" /> @@ -7924,11 +7900,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>NAME</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" /> @@ -7937,25 +7913,45 @@ <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>LEADIMPORTID</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>IMPORTEMPLOYEE</name> + <name>PHASE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> + <columnType v="12" /> <size v="36" /> <scale v="0" /> <notNull v="false" /> @@ -7966,11 +7962,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>IMPORTSOURCE</name> + <name>STATUS</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="500" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -7980,39 +7976,39 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>STATUS</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" /> + <notNull v="true" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>IMPORT_DATE</name> + <name>COMPETITIONID</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>FIELD_DELIMITER</name> + <name>INFO</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="36" /> + <columnType v="2005" /> + <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -8022,13 +8018,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_NEW</name> + <name>OBJECT_TYPE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> - <notNull v="false" /> + <columnType v="12" /> + <size v="63" /> + <scale v="0" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -8036,11 +8032,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>HEADLINE</name> + <name>REASON</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="1" /> + <columnType v="2005" /> + <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -8050,12 +8046,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</name> + <name>DATE_CANCELLED</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -8066,9 +8062,9 @@ </entityFields> </entityDb> <entityDb> - <name>FORECAST</name> + <name>MST_TEAM</name> <dbName></dbName> - <idColumn>FORECASTID</idColumn> + <idColumn>MST_TEAMID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -8084,25 +8080,25 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>OBJECT_ROWID</name> + <name>MST_TEAMID</name> <dbName></dbName> - <primaryKey v="false" /> + <primaryKey v="true" /> <columnType v="1" /> <size v="36" /> <scale v="0" /> <notNull v="true" /> - <isUnique v="false" /> + <isUnique v="true" /> <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>GROUPCODE</name> + <name>IS_ARCHIVED</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" /> @@ -8112,25 +8108,11 @@ <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> + <name>SERVICE_URL</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="4" /> - <size v="10" /> + <columnType v="12" /> + <size v="255" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -8140,12 +8122,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_START</name> + <name>TEAMNAME</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" /> @@ -8154,11 +8136,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>INFO</name> + <name>GENERAL_CHANNELID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> - <size v="2147483647" /> + <columnType v="1" /> + <size v="48" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -8168,13 +8150,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>OBJECT_TYPE</name> + <name>WEB_URL</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="63" /> + <size v="500" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -8184,9 +8166,9 @@ </entityFields> </entityDb> <entityDb> - <name>VISITRECOMMENDATION</name> + <name>PRODUCT</name> <dbName></dbName> - <idColumn>VISITRECOMMENDATIONID</idColumn> + <idColumn>PRODUCTID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -8202,10 +8184,10 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>RESPONSIBLE</name> + <name>UNIT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> + <columnType v="12" /> <size v="36" /> <scale v="0" /> <notNull v="false" /> @@ -8216,12 +8198,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>STATUS</name> + <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -8230,12 +8212,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DUE_DATE</name> + <name>PICTURE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <columnType v="2004" /> + <size v="2147483647" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -8244,11 +8226,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>SOURCE</name> + <name>ADVERTISING</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="36" /> + <columnType v="1" /> + <size v="1" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -8258,7 +8240,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>VISITRECOMMENDATIONID</name> + <name>PRODUCTID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -8272,25 +8254,39 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CONTACT_ID</name> + <name>PRODUCTNAME</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> <entityFieldDb> - <name>PRIORITY</name> + <name>PRODUCTCODE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <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" /> @@ -8300,11 +8296,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</name> + <name>MINSTOCK</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> + <columnType v="4" /> + <size v="10" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -8314,25 +8310,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CONTACT_PERSON_ID</name> + <name>GROUPCODEID</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>INFO</name> + <name>STATUS</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> - <size v="2147483647" /> + <columnType v="4" /> + <size v="10" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -8341,48 +8337,28 @@ <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> + <name>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> </entityFieldDb> <entityFieldDb> - <name>DATE_EDIT</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> <size v="29" /> <scale v="9" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -8390,11 +8366,11 @@ <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" /> <isUnique v="false" /> @@ -8403,8 +8379,28 @@ <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>OBSERVATION_ID</name> + <name>REQUESTOR_CONTACT_ID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> @@ -8418,11 +8414,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_EDIT</name> + <name>PRIORITY</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -8432,12 +8428,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>NOTIFICATION_PRIO</name> + <name>START_DATE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="36" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -8446,11 +8442,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>OBJECT_ID</name> + <name>MATURITY_DATE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="63" /> + <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" /> @@ -8460,7 +8470,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>OBSERVATIONID</name> + <name>TASKID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -8474,11 +8484,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>TRIGGEREVENTDELETE</name> + <name>STATUS</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" /> @@ -8488,11 +8498,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>TRIGGEREVENTINSERT</name> + <name>DESCRIPTION</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="5" /> - <size v="5" /> + <columnType v="2005" /> + <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -8502,11 +8512,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>TRIGGEREVENTUPDATE</name> + <name>KIND</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" /> @@ -8516,12 +8526,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_NEW</name> + <name>PROGRESS</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" /> @@ -8530,13 +8540,27 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>OBSERVER</name> + <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="63" /> + <size v="254" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -8544,11 +8568,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</name> + <name>PROTECTIONLEVEL</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" /> @@ -8558,11 +8582,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>OBJECT_FIELD</name> + <name>PARENT_CONTEXT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> - <size v="2147483647" /> + <columnType v="12" /> + <size v="64" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -8574,9 +8598,9 @@ </entityFields> </entityDb> <entityDb> - <name>SALUTATION</name> + <name>AB_KEYWORD_ENTRY</name> <dbName></dbName> - <idColumn>SALUTATIONID</idColumn> + <idColumn>AB_KEYWORD_ENTRYID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -8592,11 +8616,11 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>ISOLANGUAGE</name> + <name>ISESSENTIAL</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="3" /> + <columnType v="5" /> + <size v="5" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -8606,27 +8630,27 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>SALUTATION</name> + <name>CONTAINER</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="200" /> + <size v="80" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>SEX</name> + <name>SORTING</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="36" /> + <columnType v="4" /> + <size v="10" /> <scale v="0" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -8634,13 +8658,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>SORT</name> + <name>TITLE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="4" /> - <size v="10" /> + <columnType v="12" /> + <size v="100" /> <scale v="0" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -8648,27 +8672,27 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>SALUTATIONID</name> + <name>KEYID</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" /> + <isUnique v="false" /> <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>TITLE</name> + <name>ISACTIVE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="30" /> + <columnType v="5" /> + <size v="5" /> <scale v="0" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -8676,29 +8700,29 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>HEADLINE</name> + <name>AB_KEYWORD_CATEGORY_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>LETTERSALUTATION</name> + <name>AB_KEYWORD_ENTRYID</name> <dbName></dbName> - <primaryKey v="false" /> - <columnType v="12" /> - <size v="200" /> + <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> @@ -8706,9 +8730,9 @@ </entityFields> </entityDb> <entityDb> - <name>CLASSIFICATIONSTORAGE</name> + <name>AB_OBJECTRELATIONTYPE</name> <dbName></dbName> - <idColumn>CLASSIFICATIONSTORAGEID</idColumn> + <idColumn>AB_OBJECTRELATIONTYPEID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -8724,27 +8748,27 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>OBJECT_ROWID</name> + <name>AB_OBJECTRELATIONTYPEID</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>CLASSIFICATIONVALUE</name> + <name>SIDE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="20" /> + <columnType v="4" /> + <size v="10" /> <scale v="0" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -8752,25 +8776,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CLASSIFICATIONSTORAGEID</name> + <name>RELATION_TYPE</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" /> + <isUnique v="false" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>OUTDATED</name> + <name>ICON</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" /> @@ -8784,9 +8808,37 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="63" /> + <size v="50" /> <scale v="0" /> - <notNull v="false" /> + <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> @@ -8796,9 +8848,9 @@ </entityFields> </entityDb> <entityDb> - <name>COMPETITION</name> + <name>CLASSIFICATIONGROUP</name> <dbName></dbName> - <idColumn>COMPETITIONID</idColumn> + <idColumn>CLASSIFICATIONGROUPID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -8814,25 +8866,25 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>OBJECT_ROWID</name> + <name>CLASSIFICATIONGROUPID</name> <dbName></dbName> - <primaryKey v="false" /> + <primaryKey v="true" /> <columnType v="1" /> <size v="36" /> <scale v="0" /> <notNull v="true" /> - <isUnique v="false" /> + <isUnique v="true" /> <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>PHASE</name> + <name>SORTING</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" /> @@ -8842,7 +8894,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>STATUS</name> + <name>TITLE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -8855,12 +8907,32 @@ <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>CONTACT_ID</name> + <name>OBJECT_ROWID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="12" /> + <size v="512" /> <scale v="0" /> <notNull v="true" /> <isUnique v="false" /> @@ -8870,7 +8942,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>COMPETITIONID</name> + <name>AB_APPOINTMENTLINK_ID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -8884,15 +8956,15 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>INFO</name> + <name>APPOINTMENT_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> - <size v="2147483647" /> + <columnType v="12" /> + <size v="512" /> <scale v="0" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> @@ -8911,40 +8983,12 @@ <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> + <name>CAMPAIGNSTEP</name> <dbName></dbName> - <idColumn>MST_TEAMID</idColumn> + <idColumn>CAMPAIGNSTEPID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -8960,26 +9004,26 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>MST_TEAMID</name> + <name>CAMPAIGN_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" /> + <isUnique v="false" /> <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>IS_ARCHIVED</name> + <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="5" /> - <size v="5" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -8988,39 +9032,39 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>SERVICE_URL</name> + <name>PREDECESSORSTEP_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>CAMPAIGNSTEPID</name> <dbName></dbName> - <primaryKey v="false" /> - <columnType v="12" /> - <size v="255" /> + <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>GENERAL_CHANNELID</name> + <name>USER_EDIT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="48" /> + <columnType v="12" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -9030,47 +9074,27 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>WEB_URL</name> + <name>NAME</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="500" /> + <size v="50" /> <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>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> + <name>STATUS</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> <size v="36" /> <scale v="0" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -9078,12 +9102,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_EDIT</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" /> @@ -9092,11 +9116,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>PICTURE</name> + <name>STEPMEDIUM</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2004" /> - <size v="2147483647" /> + <columnType v="12" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -9106,13 +9130,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ADVERTISING</name> + <name>DATE_START</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="1" /> + <columnType v="91" /> + <size v="10" /> <scale v="0" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -9120,55 +9144,27 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>PRODUCTID</name> + <name>EMPLOYEE_CONTACT_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" /> + <isUnique v="false" /> <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>PRODUCTNAME</name> + <name>SORTING</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" /> + <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>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> @@ -9176,13 +9172,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>MINSTOCK</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="4" /> - <size v="10" /> - <scale v="0" /> - <notNull v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -9190,13 +9186,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>GROUPCODEID</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> @@ -9204,40 +9200,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>STATUS</name> + <name>MAXPARTICIPANTS</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" /> @@ -9246,11 +9214,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</name> + <name>DATE_END</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> + <columnType v="91" /> + <size v="10" /> <scale v="0" /> <notNull v="true" /> <isUnique v="false" /> @@ -9262,9 +9230,9 @@ </entityFields> </entityDb> <entityDb> - <name>TASK</name> + <name>ORGANISATION</name> <dbName></dbName> - <idColumn>TASKID</idColumn> + <idColumn>ORGANISATIONID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -9280,25 +9248,11 @@ </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> + <name>CUSTOMERCODE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <size v="30" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -9308,7 +9262,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>START_DATE</name> + <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> @@ -9322,12 +9276,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>MATURITY_DATE</name> + <name>PICTURE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <columnType v="2004" /> + <size v="2147483647" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -9336,41 +9290,41 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>PARENT_ID</name> + <name>KIND</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>TASKID</name> + <name>DATE_NEW</name> <dbName></dbName> - <primaryKey v="true" /> - <columnType v="1" /> - <size v="36" /> - <scale v="0" /> + <primaryKey v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="true" /> - <isUnique v="true" /> - <index v="true" /> + <isUnique v="false" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>STATUS</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> @@ -9378,7 +9332,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DESCRIPTION</name> + <name>INFO</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="2005" /> @@ -9392,25 +9346,11 @@ <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> + <name>SALESAREA</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" /> @@ -9420,39 +9360,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>EDITOR_CONTACT_ID</name> + <name>ORGANISATIONID</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>SUBJECT</name> + <name>USER_EDIT</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" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -9462,13 +9388,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>PARENT_CONTEXT</name> + <name>NAME</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="64" /> + <size v="255" /> <scale v="0" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -9478,9 +9404,9 @@ </entityFields> </entityDb> <entityDb> - <name>AB_KEYWORD_ENTRY</name> + <name>CAMPAIGNCOST</name> <dbName></dbName> - <idColumn>AB_KEYWORD_ENTRYID</idColumn> + <idColumn>CAMPAIGNCOSTID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -9496,53 +9422,53 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>ISESSENTIAL</name> + <name>CAMPAIGN_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" /> + <notNull v="true" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>CONTAINER</name> + <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="80" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>SORTING</name> + <name>CAMPAIGNCOSTID</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="true" /> - <isUnique v="false" /> - <index v="false" /> + <isUnique v="true" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>TITLE</name> + <name>CATEGORY</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="100" /> + <size v="36" /> <scale v="0" /> <notNull v="true" /> <isUnique v="false" /> @@ -9552,25 +9478,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>KEYID</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="36" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="true" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>ISACTIVE</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="true" /> <isUnique v="false" /> @@ -9580,28 +9506,42 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>AB_KEYWORD_CATEGORY_ID</name> + <name>NET</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <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="true" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>AB_KEYWORD_ENTRYID</name> + <name>CAMPAIGNSTEP_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> @@ -9610,9 +9550,9 @@ </entityFields> </entityDb> <entityDb> - <name>AB_OBJECTRELATIONTYPE</name> + <name>DSGVO</name> <dbName></dbName> - <idColumn>AB_OBJECTRELATIONTYPEID</idColumn> + <idColumn>DSGVOID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -9628,27 +9568,27 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>AB_OBJECTRELATIONTYPEID</name> + <name>DSGVOTYPE</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>SIDE</name> + <name>VALID_TO</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="4" /> - <size v="10" /> - <scale v="0" /> - <notNull v="true" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -9656,13 +9596,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>RELATION_TYPE</name> + <name>STATUORITYSOURCE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> <size v="36" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -9670,12 +9610,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ICON</name> + <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="36" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -9684,13 +9624,27 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>OBJECT_TYPE</name> + <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="50" /> + <size v="36" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -9698,26 +9652,26 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>RELATION_TITLE</name> + <name>CONTACT_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="80" /> + <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>HIERARCHY</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="4" /> - <size v="10" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="true" /> <isUnique v="false" /> <index v="false" /> @@ -9725,46 +9679,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>USER_NEW</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" /> + <isUnique v="false" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>SORTING</name> + <name>USER_EDIT</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" /> @@ -9774,15 +9708,15 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>TITLE</name> + <name>ROW_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> @@ -9790,9 +9724,9 @@ </entityFields> </entityDb> <entityDb> - <name>AB_APPOINTMENTLINK</name> + <name>AB_ATTRIBUTERELATION</name> <dbName></dbName> - <idColumn>AB_APPOINTMENTLINK_ID</idColumn> + <idColumn>AB_ATTRIBUTERELATIONID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -9808,13 +9742,13 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>OBJECT_ROWID</name> + <name>INT_VALUE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="512" /> + <columnType v="4" /> + <size v="10" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="true" /> <documentation></documentation> @@ -9822,27 +9756,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>AB_APPOINTMENTLINK_ID</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" /> - <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> @@ -9850,55 +9770,21 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>OBJECT_TYPE</name> + <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="63" /> - <scale v="0" /> - <notNull v="true" /> + <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>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> + <name>DATE_VALUE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> @@ -9906,18 +9792,18 @@ <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>PREDECESSORSTEP_ID</name> + <name>NUMBER_VALUE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> - <scale v="0" /> + <columnType v="2" /> + <size v="14" /> + <scale v="2" /> <notNull v="false" /> <isUnique v="false" /> <index v="true" /> @@ -9926,7 +9812,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CAMPAIGNSTEPID</name> + <name>AB_ATTRIBUTERELATIONID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -9940,13 +9826,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_EDIT</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" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -9954,13 +9840,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>NAME</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> @@ -9968,13 +9854,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>STATUS</name> + <name>CHAR_VALUE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <size v="512" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -9982,21 +9868,21 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DESCRIPTION</name> + <name>AB_ATTRIBUTE_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="500" /> + <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> - <name>STEPMEDIUM</name> + <name>ID_VALUE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -10004,17 +9890,31 @@ <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>DATE_START</name> + <name>USER_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="91" /> - <size v="10" /> + <columnType v="12" /> + <size v="50" /> <scale v="0" /> <notNull v="true" /> <isUnique v="false" /> @@ -10023,8 +9923,28 @@ <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>EMPLOYEE_CONTACT_ID</name> + <name>OBJECT_ROWID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> @@ -10038,19 +9958,33 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>SORTING</name> + <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="4" /> - <size v="10" /> - <scale v="0" /> - <notNull v="true" /> + <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> @@ -10080,28 +10014,42 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>MAXPARTICIPANTS</name> + <name>ACTIVITY_ID</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>DATE_END</name> + <name>OBJECT_TYPE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="91" /> - <size v="10" /> + <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> @@ -10110,9 +10058,9 @@ </entityFields> </entityDb> <entityDb> - <name>ORGANISATION</name> + <name>ADDRESS</name> <dbName></dbName> - <idColumn>ORGANISATIONID</idColumn> + <idColumn>ADDRESSID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -10128,11 +10076,11 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>CUSTOMERCODE</name> + <name>ZIP</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="30" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -10156,25 +10104,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>PICTURE</name> + <name>LON</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2004" /> - <size v="2147483647" /> - <scale v="0" /> + <columnType v="3" /> + <size v="11" /> + <scale v="8" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>KIND</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" /> @@ -10184,13 +10132,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_NEW</name> + <name>ADDR_TYPE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> - <notNull v="true" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -10198,13 +10146,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</name> + <name>REGION</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> @@ -10212,11 +10160,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>INFO</name> + <name>ADDRESSADDITION</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> - <size v="2147483647" /> + <columnType v="12" /> + <size v="60" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -10226,11 +10174,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>SALESAREA</name> + <name>DISTRICT</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" /> @@ -10240,25 +10188,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ORGANISATIONID</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>USER_EDIT</name> + <name>COUNTRY</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> + <columnType v="1" /> + <size v="2" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -10268,89 +10216,69 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>NAME</name> + <name>ADDRESS</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="255" /> + <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> - </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> + <name>ADDRESSID</name> <dbName></dbName> - <primaryKey v="false" /> + <primaryKey v="true" /> <columnType v="1" /> <size v="36" /> <scale v="0" /> <notNull v="true" /> - <isUnique v="false" /> + <isUnique v="true" /> <index v="true" /> <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" /> - <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>CAMPAIGNCOSTID</name> + <name>PROVINCE</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>CATEGORY</name> + <name>ADDRIDENTIFIER</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <size v="60" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -10386,21 +10314,21 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>NET</name> + <name>LAT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> - <size v="14" /> - <scale v="2" /> + <columnType v="3" /> + <size v="10" /> + <scale v="8" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_EDIT</name> + <name>BUILDINGNO</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -10413,26 +10341,12 @@ <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> + <name>DOCUMENTTEMPLATELINK</name> <dbName></dbName> - <idColumn>DSGVOID</idColumn> + <idColumn>DOCUMENTTEMPLATELINKID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -10448,7 +10362,21 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>DSGVOTYPE</name> + <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" /> @@ -10462,13 +10390,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>VALID_TO</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> <size v="29" /> <scale v="9" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -10476,13 +10404,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>STATUORITYSOURCE</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> @@ -10490,12 +10418,26 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_EDIT</name> + <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="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" /> @@ -10504,25 +10446,45 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DSGVOID</name> + <name>DOCUMENTTEMPLATE_ID_CHILD</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> + </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>PURPOSE</name> + <name>SIGNAL_NAME</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <size v="255" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -10532,27 +10494,27 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CONTACT_ID</name> + <name>WORKFLOWSIGNALID</name> <dbName></dbName> - <primaryKey v="false" /> + <primaryKey v="true" /> <columnType v="1" /> <size v="36" /> <scale v="0" /> <notNull v="true" /> - <isUnique v="false" /> + <isUnique v="true" /> <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_NEW</name> + <name>TRIGGER_EVENT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> - <notNull v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -10560,13 +10522,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</name> + <name>OBJECT_CONDITION</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="512" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -10574,11 +10536,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_EDIT</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" /> @@ -10588,15 +10550,29 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ROW_ID</name> + <name>VARIABLES</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="12" /> + <size v="512" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> + <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> @@ -10604,9 +10580,9 @@ </entityFields> </entityDb> <entityDb> - <name>AB_ATTRIBUTERELATION</name> + <name>KNOWLEDGEMANAGEMENT</name> <dbName></dbName> - <idColumn>AB_ATTRIBUTERELATIONID</idColumn> + <idColumn>KNOWLEDGEMANAGEMENTID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -10622,29 +10598,15 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>INT_VALUE</name> + <name>CONTENTDECODED</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="4" /> - <size v="10" /> + <columnType v="2005" /> + <size v="2147483647" /> <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" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> @@ -10664,26 +10626,26 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_VALUE</name> + <name>KNOWLEDGEMANAGEMENTID</name> <dbName></dbName> - <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> - <notNull v="false" /> - <isUnique 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>NUMBER_VALUE</name> + <name>AUTHOR_CONTACT_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> - <size v="14" /> - <scale v="2" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="true" /> @@ -10692,27 +10654,27 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>AB_ATTRIBUTERELATIONID</name> + <name>TITLE</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" /> + <notNull v="false" /> + <isUnique v="false" /> <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>OBJECT_TYPE</name> + <name>CONTENT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="63" /> + <columnType v="2005" /> + <size v="2147483647" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -10720,12 +10682,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_EDIT</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -10734,11 +10696,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CHAR_VALUE</name> + <name>PUBLISH</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="512" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -10748,24 +10710,24 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>AB_ATTRIBUTE_ID</name> + <name>USER_NEW</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>ID_VALUE</name> + <name>RESPONSIBLE_CONTACT_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> + <columnType v="1" /> <size v="36" /> <scale v="0" /> <notNull v="false" /> @@ -10776,27 +10738,27 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_NEW</name> + <name>TYPE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> - <notNull v="true" /> + <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> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</name> + <name>USER_EDIT</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="63" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -10806,9 +10768,9 @@ </entityFields> </entityDb> <entityDb> - <name>ACTIVITYLINK</name> + <name>BULKMAIL</name> <dbName></dbName> - <idColumn>ACTIVITYLINKID</idColumn> + <idColumn>BULKMAILID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -10824,55 +10786,27 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>OBJECT_ROWID</name> + <name>DOCUMENTTEMPLATE_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>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> + <name>USE_TEMPLATE_ATTACHMENTS</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> - <notNull v="true" /> + <columnType v="5" /> + <size v="5" /> + <scale v="0" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -10880,13 +10814,13 @@ <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="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -10894,39 +10828,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ACTIVITY_ID</name> + <name>BULKMAILID</name> <dbName></dbName> - <primaryKey v="false" /> + <primaryKey v="true" /> <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" /> + <isUnique v="true" /> <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_EDIT</name> + <name>DESCRIPTION</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="500" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -10935,32 +10855,12 @@ <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> + <name>TESTING_CONTACT_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" /> @@ -10970,12 +10870,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_EDIT</name> + <name>SUBJECT</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" /> @@ -10984,21 +10884,7 @@ <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> + <name>TESTING_EMAIL_ADDRESS</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -11012,11 +10898,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ADDR_TYPE</name> + <name>CREATEACTIVITIES</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" /> @@ -11026,7 +10912,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>REGION</name> + <name>NAME</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -11040,11 +10926,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ADDRESSADDITION</name> + <name>INTEREST_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="60" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -11054,7 +10940,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DISTRICT</name> + <name>SENDER_EMAIL_ADDRESS</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -11068,12 +10954,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CITY</name> + <name>DATE_TO_SEND</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -11081,14 +10967,34 @@ <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>COUNTRY</name> + <name>ISSTANDARD</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="2" /> + <columnType v="5" /> + <size v="5" /> <scale v="0" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -11096,12 +11002,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ADDRESS</name> + <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -11110,14 +11016,14 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ADDRESSID</name> + <name>MEDIUM_ID</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" /> + <notNull v="false" /> + <isUnique v="false" /> <index v="true" /> <documentation></documentation> <title></title> @@ -11130,7 +11036,7 @@ <columnType v="1" /> <size v="36" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="true" /> <documentation></documentation> @@ -11138,13 +11044,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>PROVINCE</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> - <scale v="0" /> - <notNull v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -11152,13 +11058,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ADDRIDENTIFIER</name> + <name>USER_NEW</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="60" /> + <size v="50" /> <scale v="0" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -11166,57 +11072,43 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_NEW</name> + <name>COMMUNICATIONID</name> <dbName></dbName> - <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <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> </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>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" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>BUILDINGNO</name> + <name>ADDR</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> @@ -11224,9 +11116,9 @@ </entityFields> </entityDb> <entityDb> - <name>DOCUMENTTEMPLATELINK</name> + <name>AB_OBJECTRELATION</name> <dbName></dbName> - <idColumn>DOCUMENTTEMPLATELINKID</idColumn> + <idColumn>AB_OBJECTRELATIONID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -11242,12 +11134,12 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>DATE_EDIT</name> + <name>AB_OBJECTRELATIONTYPE1</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" /> @@ -11256,7 +11148,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DOCUMENTTEMPLATE_ID_PARENT</name> + <name>AB_OBJECTRELATIONTYPE2</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -11270,35 +11162,49 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_NEW</name> + <name>OBJECT2_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="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>USER_NEW</name> + <name>OBJECT1_ROWID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> + <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>DOCUMENTTEMPLATELINKID</name> + <name>AB_OBJECTRELATIONID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -11311,14 +11217,62 @@ <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>USER_EDIT</name> + <name>SOURCEDUPLICATEID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> - <notNull v="false" /> + <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> @@ -11326,15 +11280,15 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DOCUMENTTEMPLATE_ID_CHILD</name> + <name>DUPLICATETYPE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <size v="63" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> @@ -11342,9 +11296,9 @@ </entityFields> </entityDb> <entityDb> - <name>WORKFLOWSIGNAL</name> + <name>KNOWLEDGEGITINTERFACE</name> <dbName></dbName> - <idColumn>WORKFLOWSIGNALID</idColumn> + <idColumn>KNOWLEDGEGITINTERFACEID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -11360,12 +11314,12 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>SIGNAL_NAME</name> + <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="255" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -11374,7 +11328,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>WORKFLOWSIGNALID</name> + <name>KNOWLEDGEGITINTERFACEID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -11388,11 +11342,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>TRIGGER_EVENT</name> + <name>GITCOMMIT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="12" /> + <size v="200" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -11402,12 +11356,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>OBJECT_CONDITION</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="512" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -11416,11 +11370,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>PROCESSDEFINITION_KEY</name> + <name>USER_NEW</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="255" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -11430,11 +11384,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>VARIABLES</name> + <name>SYSTEMNAME</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="512" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -11444,11 +11398,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>OBJECT_TYPE</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" /> @@ -11460,9 +11414,9 @@ </entityFields> </entityDb> <entityDb> - <name>KNOWLEDGEMANAGEMENT</name> + <name>TASKLINK</name> <dbName></dbName> - <idColumn>KNOWLEDGEMANAGEMENTID</idColumn> + <idColumn>TASKLINKID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -11478,27 +11432,27 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>CONTENTDECODED</name> + <name>OBJECT_ROWID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> - <size v="2147483647" /> + <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> - <name>DATE_EDIT</name> + <name>OBJECT_TYPE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> - <notNull v="false" /> + <columnType v="12" /> + <size v="63" /> + <scale v="0" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -11506,7 +11460,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>KNOWLEDGEMANAGEMENTID</name> + <name>TASKLINKID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -11520,39 +11474,59 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>AUTHOR_CONTACT_ID</name> + <name>TASK_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" /> <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>TITLE</name> + <name>KNOWLEDGETAGID</name> <dbName></dbName> - <primaryKey v="false" /> - <columnType v="12" /> - <size v="255" /> + <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>CONTENT</name> + <name>STATUS</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" /> @@ -11562,7 +11536,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_NEW</name> + <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> @@ -11576,12 +11550,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>PUBLISH</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="36" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -11590,11 +11564,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</name> + <name>TAG</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="63" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -11604,29 +11578,15 @@ <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> + <name>USER_NEW</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> @@ -11636,7 +11596,7 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="63" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -11648,9 +11608,9 @@ </entityFields> </entityDb> <entityDb> - <name>BULKMAIL</name> + <name>DOCUMENTTEMPLATEPLACEOFUSE</name> <dbName></dbName> - <idColumn>BULKMAILID</idColumn> + <idColumn>DOCUMENTTEMPLATEPLACEOFUSEID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -11669,7 +11629,7 @@ <name>DOCUMENTTEMPLATE_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> + <columnType v="12" /> <size v="36" /> <scale v="0" /> <notNull v="false" /> @@ -11680,11 +11640,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USE_TEMPLATE_ATTACHMENTS</name> + <name>PLACEOFUSE</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" /> @@ -11694,24 +11654,10 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>STATUS</name> + <name>DOCUMENTTEMPLATEPLACEOFUSEID</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" /> + <primaryKey v="true" /> + <columnType v="1" /> <size v="36" /> <scale v="0" /> <notNull v="true" /> @@ -11721,36 +11667,56 @@ <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>DESCRIPTION</name> + <name>SERIALLETTER_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="500" /> + <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>SENDER</name> + <name>LETTERRECIPIENTID</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>TESTING_CONTACT_ID</name> + <name>CONTACT_ID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> @@ -11758,61 +11724,81 @@ <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>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>SUBJECT</name> + <name>OBJECT_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" /> + <notNull v="true" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>TESTING_EMAIL_ADDRESS</name> + <name>MST_TEAM_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" /> + <notNull v="true" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>CREATEACTIVITIES</name> + <name>MST_TEAMLINKID</name> <dbName></dbName> - <primaryKey v="false" /> - <columnType v="5" /> - <size v="5" /> + <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>NAME</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" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -11822,9 +11808,9 @@ </entityFields> </entityDb> <entityDb> - <name>COMMUNICATION</name> + <name>CONTRACT</name> <dbName></dbName> - <idColumn>COMMUNICATIONID</idColumn> + <idColumn>CONTRACTID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -11840,11 +11826,11 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>ISSTANDARD</name> + <name>CONTRACTCODE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="5" /> - <size v="5" /> + <columnType v="12" /> + <size v="30" /> <scale v="0" /> <notNull v="true" /> <isUnique v="false" /> @@ -11854,7 +11840,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_EDIT</name> + <name>CONTRACTDUE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> @@ -11868,7 +11854,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>MEDIUM_ID</name> + <name>PAYMENT</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -11876,11 +11862,39 @@ <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> @@ -11896,13 +11910,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_NEW</name> + <name>CONTRACTEND</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> <size v="29" /> <scale v="9" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -11910,13 +11924,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</name> + <name>CONTRACTTYPE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="36" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -11924,26 +11938,12 @@ <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> + <name>CONTRACTSTART</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -11952,15 +11952,15 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ADDR</name> + <name>REMARK</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="255" /> + <columnType v="2005" /> + <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> @@ -11968,9 +11968,9 @@ </entityFields> </entityDb> <entityDb> - <name>AB_OBJECTRELATION</name> + <name>SALESPROJECT</name> <dbName></dbName> - <idColumn>AB_OBJECTRELATIONID</idColumn> + <idColumn>SALESPROJECTID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -11986,12 +11986,12 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>AB_OBJECTRELATIONTYPE1</name> + <name>STARTDATE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="36" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -12000,12 +12000,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>AB_OBJECTRELATIONTYPE2</name> + <name>VOLUME</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="36" /> - <scale v="0" /> + <columnType v="2" /> + <size v="14" /> + <scale v="2" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -12014,26 +12014,26 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>OBJECT2_ROWID</name> + <name>INFO</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="2005" /> + <size v="2147483647" /> <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>INFO</name> + <name>ENDDATE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> - <size v="2147483647" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -12042,58 +12042,38 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>OBJECT1_ROWID</name> + <name>PHASE</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>AB_OBJECTRELATIONID</name> + <name>PROBABILITY</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> + <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> - </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>CLUSTERID</name> + <name>STATUS</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> + <columnType v="12" /> <size v="36" /> <scale v="0" /> <notNull v="false" /> @@ -12104,13 +12084,27 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>SOURCEDUPLICATEID</name> + <name>PROJECTCODE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <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> @@ -12118,7 +12112,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ID</name> + <name>SALESPROJECTID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -12132,7 +12126,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>UNRELATEDDUPLICATEID</name> + <name>CONTACT_ID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> @@ -12140,6 +12134,34 @@ <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> @@ -12148,9 +12170,9 @@ </entityFields> </entityDb> <entityDb> - <name>KNOWLEDGEGITINTERFACE</name> + <name>CAMPAIGNPARTICIPANT</name> <dbName></dbName> - <idColumn>KNOWLEDGEGITINTERFACEID</idColumn> + <idColumn>CAMPAIGNPARTICIPANTID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -12166,21 +12188,21 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>DATE_EDIT</name> + <name>CAMPAIGN_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>KNOWLEDGEGITINTERFACEID</name> + <name>CAMPAIGNPARTICIPANTID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -12194,12 +12216,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>GITCOMMIT</name> + <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="200" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -12207,6 +12229,20 @@ <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> @@ -12214,7 +12250,7 @@ <columnType v="93" /> <size v="29" /> <scale v="9" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -12228,7 +12264,7 @@ <columnType v="12" /> <size v="50" /> <scale v="0" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -12236,15 +12272,15 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>SYSTEMNAME</name> + <name>RESPONSIBLE_CONTACT_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> @@ -12263,12 +12299,26 @@ <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>TASKLINK</name> + <name>DESCRIPTIONTRANSLATION</name> <dbName></dbName> - <idColumn>TASKLINKID</idColumn> + <idColumn>DESCRIPTIONTRANSLATIONID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -12298,13 +12348,27 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>OBJECT_TYPE</name> + <name>DESCRIPTIONTRANSLATIONID</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="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> @@ -12312,29 +12376,29 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>TASKLINKID</name> + <name>OBJECT_TYPE</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" /> + <isUnique v="false" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>TASK_ID</name> + <name>LANG</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> @@ -12342,9 +12406,9 @@ </entityFields> </entityDb> <entityDb> - <name>KNOWLEDGETAG</name> + <name>DISTRICTRESPONSIBLE</name> <dbName></dbName> - <idColumn>KNOWLEDGETAGID</idColumn> + <idColumn>DISTRICTRESPONSIBLEID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -12360,7 +12424,21 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>KNOWLEDGETAGID</name> + <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" /> @@ -12374,10 +12452,10 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>STATUS</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" /> @@ -12402,54 +12480,54 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_NEW</name> + <name>DEPARTMENT_ATTRIBUTE_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>TAG</name> + <name>DISTRICT_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>USER_NEW</name> + <name>EMPLOYEE_CONTACT_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>USER_EDIT</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -12457,12 +12535,68 @@ <title></title> <description></description> </entityFieldDb> - </entityFields> - </entityDb> - <entityDb> - <name>DOCUMENTTEMPLATEPLACEOFUSE</name> + <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>DOCUMENTTEMPLATEPLACEOFUSEID</idColumn> + <idColumn>SALESPROJECT_MILESTONEID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -12478,7 +12612,7 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>DOCUMENTTEMPLATE_ID</name> + <name>MILESTONEVALUE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -12486,17 +12620,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>PLACEOFUSE</name> + <name>KIND</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <size v="80" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -12506,7 +12640,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DOCUMENTTEMPLATEPLACEOFUSEID</name> + <name>SALESPROJECT_MILESTONEID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -12519,12 +12653,68 @@ <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>LETTERRECIPIENT</name> + <name>COMMRESTRICTION</name> <dbName></dbName> - <idColumn>LETTERRECIPIENTID</idColumn> + <idColumn>COMMRESTRICTIONID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -12540,29 +12730,57 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>SERIALLETTER_ID</name> + <name>COMMRESTRICTIONID</name> <dbName></dbName> - <primaryKey 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>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" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>LETTERRECIPIENTID</name> + <name>STARTDATE</name> <dbName></dbName> - <primaryKey v="true" /> + <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="true" /> - <isUnique v="true" /> - <index v="true" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> @@ -12581,12 +12799,26 @@ <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>MST_TEAMLINK</name> + <name>OBJECTMEMBER</name> <dbName></dbName> - <idColumn>MST_TEAMLINKID</idColumn> + <idColumn>OBJECTMEMBERID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -12602,21 +12834,21 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>OBJECT_ROWID</name> + <name>OBJECTMEMBERID</name> <dbName></dbName> - <primaryKey v="false" /> + <primaryKey v="true" /> <columnType v="1" /> <size v="36" /> <scale v="0" /> <notNull v="true" /> - <isUnique v="false" /> + <isUnique v="true" /> <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>MST_TEAM_ID</name> + <name>OBJECT_ROWID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> @@ -12630,14 +12862,42 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>MST_TEAMLINKID</name> + <name>ONSITE</name> <dbName></dbName> - <primaryKey v="true" /> + <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="true" /> + <isUnique v="false" /> <index v="true" /> <documentation></documentation> <title></title> @@ -12660,9 +12920,9 @@ </entityFields> </entityDb> <entityDb> - <name>CONTRACT</name> + <name>EXPORTTEMPLATE</name> <dbName></dbName> - <idColumn>CONTRACTID</idColumn> + <idColumn>EXPORTTEMPLATEID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -12678,13 +12938,13 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>CONTRACTCODE</name> + <name>FIELDSEPARATOR</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="30" /> + <size v="36" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -12692,12 +12952,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CONTRACTDUE</name> + <name>ISOLANGUAGE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <columnType v="1" /> + <size v="3" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -12706,7 +12966,1369 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>PAYMENT</name> + <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" /> @@ -12720,25 +14342,53 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CONTRACTID</name> + <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="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>CONTRACTSTATUS</name> + <name>ISOLANGUAGE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="36" /> + <columnType v="1" /> + <size v="3" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -12748,26 +14398,26 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CONTACT_ID</name> + <name>PAYMENTTERMS</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>CONTRACTEND</name> + <name>DELIVERYTERMS</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" /> @@ -12776,26 +14426,26 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CONTRACTTYPE</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" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>CONTRACTSTART</name> + <name>PAYMENTADDRESS</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -12804,11 +14454,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>REMARK</name> + <name>ORDERTYPE</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" /> @@ -12817,45 +14467,25 @@ <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> + <name>OFFER_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>VOLUME</name> + <name>PAID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> + <columnType v="3" /> <size v="14" /> <scale v="2" /> <notNull v="false" /> @@ -12866,7 +14496,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>INFO</name> + <name>FOOTER</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="2005" /> @@ -12880,12 +14510,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ENDDATE</name> + <name>DISCOUNT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <columnType v="2" /> + <size v="14" /> + <scale v="2" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -12894,12 +14524,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>PHASE</name> + <name>DISCOUNTED_NET</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="36" /> - <scale v="0" /> + <columnType v="2" /> + <size v="14" /> + <scale v="2" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -12908,12 +14538,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>PROBABILITY</name> + <name>DELIVERYADDRESS</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="3" /> - <size v="6" /> - <scale v="2" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -12922,11 +14552,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>STATUS</name> + <name>ORDERSTATUS</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" /> @@ -12936,26 +14566,26 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>PROJECTCODE</name> + <name>CONTACT_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="4" /> - <size v="10" /> + <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>REASONS</name> + <name>NET</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="498" /> - <scale v="0" /> + <columnType v="2" /> + <size v="14" /> + <scale v="2" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -12963,58 +14593,64 @@ <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>SALESPROJECTID</name> + <name>STATUS</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>CONTACT_ID</name> + <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>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" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>PROJECTTITLE</name> + <name>KNOWLEDGEMANAGEMENTTAGMODERATIONID</name> <dbName></dbName> - <primaryKey v="false" /> - <columnType v="12" /> - <size v="150" /> + <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> @@ -13022,9 +14658,9 @@ </entityFields> </entityDb> <entityDb> - <name>CAMPAIGNPARTICIPANT</name> + <name>SALESORDERITEM</name> <dbName></dbName> - <idColumn>CAMPAIGNPARTICIPANTID</idColumn> + <idColumn>SALESORDERITEMID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -13040,40 +14676,40 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>CAMPAIGN_ID</name> + <name>UNIT</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>CAMPAIGNPARTICIPANTID</name> + <name>PRICE</name> <dbName></dbName> - <primaryKey v="true" /> - <columnType v="1" /> - <size v="36" /> - <scale v="0" /> - <notNull v="true" /> - <isUnique v="true" /> - <index v="true" /> + <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>DATE_EDIT</name> + <name>QUANTITY</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <columnType v="2" /> + <size v="14" /> + <scale v="2" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -13082,27 +14718,27 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CONTACT_ID</name> + <name>VAT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> - <scale v="0" /> - <notNull v="true" /> + <columnType v="2" /> + <size v="14" /> + <scale v="2" /> + <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_NEW</name> + <name>INFO</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> - <notNull v="true" /> + <columnType v="2005" /> + <size v="2147483647" /> + <scale v="0" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -13110,39 +14746,39 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</name> + <name>PRODUCT_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> + <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>RESPONSIBLE_CONTACT_ID</name> + <name>DISCOUNT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> - <scale v="0" /> + <columnType v="2" /> + <size v="14" /> + <scale v="2" /> <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>ITEMPOSITION</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="50" /> + <size v="30" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13152,73 +14788,53 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CAMPAIGNSTEP_ID</name> + <name>GROUPCODEID</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> - </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> + <name>ITEMSORT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="4" /> + <size v="10" /> <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>DESCRIPTIONTRANSLATIONID</name> + <name>SALESORDER_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>DESCRIPTION</name> + <name>ASSIGNEDTO</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" /> @@ -13228,25 +14844,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>OBJECT_TYPE</name> + <name>SALESORDERITEMID</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="true" /> - <isUnique v="false" /> - <index v="false" /> + <isUnique v="true" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>LANG</name> + <name>ITEMNAME</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <size v="250" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13258,9 +14874,9 @@ </entityFields> </entityDb> <entityDb> - <name>DISTRICTRESPONSIBLE</name> + <name>AB_CTILOG</name> <dbName></dbName> - <idColumn>DISTRICTRESPONSIBLEID</idColumn> + <idColumn>AB_CTILOGID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -13276,43 +14892,43 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>ADVISER_STATUS</name> + <name>AB_CTILOGID</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" /> - <index v="false" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>DISTRICTRESPONSIBLEID</name> + <name>ANSWERMODE</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>ADVISER_ROLE</name> + <name>CALLID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <size v="64" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> @@ -13332,35 +14948,35 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DEPARTMENT_ATTRIBUTE_ID</name> + <name>ADDRESS</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="12" /> + <size v="30" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>DISTRICT_ID</name> + <name>DIRECTION</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>EMPLOYEE_CONTACT_ID</name> + <name>CONTACT_ID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> @@ -13380,15 +14996,35 @@ <columnType v="93" /> <size v="29" /> <scale v="9" /> - <notNull v="false" /> + <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>USER_NEW</name> + <name>RESPONSIBLE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -13402,7 +15038,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>VALID_FROM</name> + <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> @@ -13416,12 +15052,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>VALID_UNTIL</name> + <name>DIRECTION</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" /> @@ -13430,45 +15066,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_EDIT</name> + <name>ENTRYDATE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <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> + <name>INFO</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="36" /> + <columnType v="2005" /> + <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13478,11 +15094,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>KIND</name> + <name>USER_EDIT</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="80" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13492,7 +15108,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>SALESPROJECT_MILESTONEID</name> + <name>ACTIVITYID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -13506,41 +15122,69 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_START</name> + <name>PARENT_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>SALESPROJECT_ID</name> + <name>CATEGORY</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>DATE_END</name> + <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="false" /> + <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> @@ -13548,15 +15192,15 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>PARENT_ID</name> + <name>PARENT_CONTEXT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="12" /> + <size v="64" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> @@ -13564,9 +15208,9 @@ </entityFields> </entityDb> <entityDb> - <name>COMMRESTRICTION</name> + <name>PLANNING_MONTH</name> <dbName></dbName> - <idColumn>COMMRESTRICTIONID</idColumn> + <idColumn>PLANNING_MONTHID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -13582,7 +15226,7 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>COMMRESTRICTIONID</name> + <name>PLANNING_MONTHID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -13596,40 +15240,12 @@ <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> + <name>MONTH_FACTOR</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> - <scale v="0" /> + <columnType v="2" /> + <size v="5" /> + <scale v="2" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -13638,25 +15254,11 @@ <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> + <name>MONTH_NUMBER</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="250" /> + <columnType v="4" /> + <size v="10" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13668,9 +15270,9 @@ </entityFields> </entityDb> <entityDb> - <name>OBJECTMEMBER</name> + <name>LEADS</name> <dbName></dbName> - <idColumn>OBJECTMEMBERID</idColumn> + <idColumn>LEADSID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -13686,39 +15288,53 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>OBJECTMEMBERID</name> + <name>ZIP</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>OBJECT_ROWID</name> + <name>CUSTOMERCODE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="12" /> + <size v="50" /> <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>ONSITE</name> + <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="5" /> - <size v="5" /> + <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" /> @@ -13728,11 +15344,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>MEMBERROLE</name> + <name>ATTRIBUTE_LOYALTY</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <size v="100" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13742,61 +15358,41 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CONTACT_ID</name> + <name>DUPLICAT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="4" /> + <size v="10" /> <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>OBJECT_TYPE</name> + <name>P_COMMINTERNET</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="63" /> + <size v="254" /> <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>DUPLICATECLUSTERS</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>DUPLICATEID</name> + <name>STATUS</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="false" /> <documentation></documentation> @@ -13804,13 +15400,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CLUSTERID</name> + <name>MIDDLENAME</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="12" /> + <size v="50" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -13818,25 +15414,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ID</name> + <name>COUNTRY</name> <dbName></dbName> - <primaryKey v="true" /> + <primaryKey v="false" /> <columnType v="1" /> - <size v="36" /> + <size v="2" /> <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>TARGET_ENTITY</name> + <name>LASTNAME</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="200" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13845,32 +15441,12 @@ <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> + <name>SALUTATION</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <size v="30" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13880,11 +15456,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ISOLANGUAGE</name> + <name>TAXCODE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="3" /> + <columnType v="12" /> + <size v="30" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13894,12 +15470,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_EDIT</name> + <name>ORGCOUNTRYCODE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <columnType v="12" /> + <size v="10" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -13908,11 +15484,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DESCRIPTION</name> + <name>P_COMMXING</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="1337" /> + <size v="254" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13922,39 +15498,39 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>EXPORTTEMPLATEID</name> + <name>LEADIMPORT_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>FIELDDELIMITER</name> + <name>LEADSID</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" /> - <index v="false" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>TITLE</name> + <name>P_COMMLINKEDIN</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="100" /> + <size v="254" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -13964,12 +15540,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_NEW</name> - <dbName></dbName> - <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <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" /> @@ -13978,7 +15554,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</name> + <name>ISOLANGUAGE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -13992,11 +15568,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>SENTENCESEPARATOR</name> + <name>ATTRIBUTE_INDUSTRY</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <size v="100" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14006,7 +15582,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_EDIT</name> + <name>CONTACTPOSITION</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -14019,34 +15595,14 @@ <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> + <name>ATTRIBUTE03</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="5" /> - <size v="5" /> + <columnType v="12" /> + <size v="100" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -14054,13 +15610,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>TAKEPRICE</name> + <name>ATTRIBUTE02</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="5" /> - <size v="5" /> + <columnType v="12" /> + <size v="100" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -14068,26 +15624,26 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>SOURCE_ID</name> + <name>CONTACTROLE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="12" /> + <size v="60" /> <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>QUANTITY</name> + <name>P_COMMBLOG</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> - <size v="14" /> - <scale v="2" /> + <columnType v="12" /> + <size v="254" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -14096,89 +15652,69 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DEST_ID</name> + <name>PERSINFO</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="2005" /> + <size v="2147483647" /> <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>PROD2PRODID</name> + <name>DEPARTMENT</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> - </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> + <name>NAME</name> <dbName></dbName> - <primaryKey v="true" /> - <columnType v="1" /> - <size v="36" /> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="250" /> <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_ID</name> + <name>REGION</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <size v="50" /> <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>TRACKINGMINUTES</name> + <name>O_COMMXING</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="4" /> - <size v="10" /> + <columnType v="12" /> + <size v="254" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -14186,7 +15722,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CONTACT_ID</name> + <name>PERSON_ID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> @@ -14200,11 +15736,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>INFO</name> + <name>ADDRESS</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> - <size v="2147483647" /> + <columnType v="12" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14214,13 +15750,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>TRACKINGDATE</name> + <name>SOURCE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> - <notNull v="true" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -14228,47 +15764,27 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ROW_ID</name> + <name>O_COMMPHONE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="12" /> + <size v="254" /> <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> - </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> + <name>O_COMMMOBIL</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="63" /> + <size v="254" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -14276,13 +15792,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ATTRIBUTE_TYPE</name> + <name>O_COMMINTERNET</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <size v="254" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -14290,11 +15806,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DROPDOWNDEFINITION</name> + <name>LEGALFORM</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="80" /> + <columnType v="4" /> + <size v="10" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14304,27 +15820,27 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>AB_ATTRIBUTEID</name> + <name>O_COMMEMAIL</name> <dbName></dbName> - <primaryKey v="true" /> - <columnType v="1" /> - <size v="36" /> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="254" /> <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>ATTRIBUTE_ACTIVE</name> + <name>DISTRICT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="5" /> - <size v="5" /> + <columnType v="12" /> + <size v="50" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -14332,11 +15848,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>VALIDATIONPARAMETERS</name> + <name>O_COMMLINKEDIN</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="512" /> + <size v="254" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14346,11 +15862,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DROPDOWNFILTER</name> + <name>DUPSTATUS</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="512" /> + <size v="20" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14360,11 +15876,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>SORTING</name> + <name>O_COMMBLOG</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="4" /> - <size v="10" /> + <columnType v="12" /> + <size v="254" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14374,11 +15890,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ATTRIBUTE_INFO</name> + <name>GENDER</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> - <size v="2147483647" /> + <columnType v="12" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14388,61 +15904,41 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ATTRIBUTE_PARENT_ID</name> + <name>ATTRIBUTE04</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>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> + <name>LETTERSALUTATION</name> <dbName></dbName> - <primaryKey v="true" /> - <columnType v="1" /> - <size v="36" /> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="100" /> <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>KIND</name> + <name>USER_NEW</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <size v="50" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -14450,21 +15946,21 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CONTAINER</name> + <name>P_COMMPHONE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="80" /> + <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>AB_KEYWORD_CATEGORY_ID</name> + <name>ORGANISATION_ID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> @@ -14478,59 +15974,39 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>NAME</name> + <name>P_COMMMOBIL</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="100" /> + <size v="254" /> <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>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> + <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" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>IS_FULFILLED</name> + <name>CITY</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" /> @@ -14540,7 +16016,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_EDIT</name> + <name>DATEOFBIRTH</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> @@ -14554,26 +16030,26 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CHECKLISTENTRYVALUEID</name> + <name>VATCODE</name> <dbName></dbName> - <primaryKey v="true" /> - <columnType v="1" /> - <size v="36" /> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="30" /> <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>DATE_NEW</name> + <name>P_COMMEMAIL</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <columnType v="12" /> + <size v="254" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -14582,11 +16058,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</name> + <name>ORGINFO</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> + <columnType v="2005" /> + <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14596,7 +16072,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>OBJECT_TYPE</name> + <name>PROVINCE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -14610,7 +16086,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_EDIT</name> + <name>TITLE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -14624,15 +16100,15 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CHECKLISTENTRY_ID</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> @@ -14640,9 +16116,9 @@ </entityFields> </entityDb> <entityDb> - <name>AB_LOGHISTORY</name> + <name>HASDUPLICATE</name> <dbName></dbName> - <idColumn>AB_LOGHISTORYID</idColumn> + <idColumn>HASDUPLICATEID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -14658,35 +16134,7 @@ </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> + <name>OBJECT_ROWID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> @@ -14694,17 +16142,17 @@ <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>LOGTYPE</name> + <name>OBJECT_TYPE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="1" /> + <columnType v="12" /> + <size v="63" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14714,11 +16162,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>SOURCE_TABLENAME</name> + <name>DUPLICATECOUNT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="30" /> + <columnType v="4" /> + <size v="10" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14728,7 +16176,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>AB_LOGHISTORYID</name> + <name>HASDUPLICATEID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -14741,8 +16189,28 @@ <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>TABLENAMEID</name> + <name>WEBLINK_ID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> @@ -14756,59 +16224,39 @@ <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" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> - <scale v="0" /> - <notNull v="true" /> + <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>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> + <name>TAG</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <size v="100" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14818,25 +16266,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>EXPORTTEMPLATEFIELDID</name> + <name>USER_NEW</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>USER_EDIT</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" /> @@ -14846,14 +16294,14 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>EXPORTTEMPLATE_ID</name> + <name>WEBLINKTAGID</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> @@ -14862,9 +16310,9 @@ </entityFields> </entityDb> <entityDb> - <name>KNOWLEDGETAGLINK</name> + <name>INTERESTLINK</name> <dbName></dbName> - <idColumn>KNOWLEDGETAGLINKID</idColumn> + <idColumn>INTERESTLINKID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -14880,12 +16328,12 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>DATE_EDIT</name> + <name>STATUS</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" /> @@ -14894,7 +16342,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>KNOWLEDGEMANAGEMENT_ID</name> + <name>INTEREST_ID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> @@ -14908,7 +16356,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>KNOWLEDGETAGLINKID</name> + <name>INTERESTLINKID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -14922,21 +16370,7 @@ <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> + <name>CONTACT_ID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> @@ -14949,41 +16383,13 @@ <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> + <name>BULKMAILTESTRECIPIENT</name> <dbName></dbName> - <idColumn>ID</idColumn> - <idGeneratorType v="1" /> + <idColumn>BULKMAILTESTRECIPIENTID</idColumn> + <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> <title></title> @@ -14998,12 +16404,12 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>LOCKGRANTED</name> + <name>BULKMAIL_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" /> @@ -15012,13 +16418,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>LOCKED</name> + <name>EMAIL_ADDRESS</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="16" /> - <size v="1" /> + <columnType v="12" /> + <size v="255" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -15026,11 +16432,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>LOCKEDBY</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" /> @@ -15040,11 +16446,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ID</name> + <name>BULKMAILTESTRECIPIENTID</name> <dbName></dbName> <primaryKey v="true" /> - <columnType v="4" /> - <size v="10" /> + <columnType v="1" /> + <size v="36" /> <scale v="0" /> <notNull v="true" /> <isUnique v="true" /> @@ -15056,9 +16462,9 @@ </entityFields> </entityDb> <entityDb> - <name>SALESORDER</name> + <name>MAIL_LOG</name> <dbName></dbName> - <idColumn>SALESORDERID</idColumn> + <idColumn>MAIL_LOGID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -15074,7 +16480,7 @@ </auditSyncConfig> <entityFields> <entityFieldDb> - <name>NOTICE</name> + <name>ERRORMESSAGE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="2005" /> @@ -15088,40 +16494,40 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DISCOUNTED_VAT</name> + <name>MAIL_LOGID</name> <dbName></dbName> - <primaryKey v="false" /> - <columnType v="2" /> - <size v="14" /> - <scale v="2" /> - <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>PAYDUEDATE</name> + <name>OPENER_LINK_CLICK_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>VAT</name> + <name>STATUS</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> - <size v="14" /> - <scale v="2" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -15130,11 +16536,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>HEADER</name> + <name>SENDER_EMAIL</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> - <size v="2147483647" /> + <columnType v="12" /> + <size v="255" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -15144,11 +16550,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>SALESORDERCODE</name> + <name>RECIPIENT_EMAIL</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="4" /> - <size v="10" /> + <columnType v="12" /> + <size v="255" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -15158,11 +16564,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CANCELLATION</name> + <name>MAILING_SUBJECT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="5" /> - <size v="5" /> + <columnType v="12" /> + <size v="100" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -15172,11 +16578,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>INFO</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" /> @@ -15186,21 +16592,21 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>OBJECT_TYPE</name> + <name>MAIL_RUN_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="63" /> + <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>PAYDATE</name> + <name>DATE_SEND</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> @@ -15213,12 +16619,32 @@ <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>DUNNINGTEXT</name> + <name>STATUS</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" /> @@ -15228,12 +16654,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>SALESORDERDATE</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" /> @@ -15242,26 +16668,88 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>SALESORDER_ID</name> + <name>INTERESTID</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>DUNNINGLEVEL</name> + <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" /> @@ -15270,7 +16758,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>SALESORDERID</name> + <name>COMMUNICATIONLEGALBASEID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -15284,13 +16772,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DUNNINGDATE</name> + <name>VERSION</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> @@ -15298,27 +16786,27 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CURRENCY</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="36" /> - <scale v="0" /> - <notNull v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="true" /> <isUnique v="false" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>ISOLANGUAGE</name> + <name>USER_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="3" /> + <columnType v="12" /> + <size v="50" /> <scale v="0" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -15326,11 +16814,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>PAYMENTTERMS</name> + <name>INFO</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <size v="250" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -15340,11 +16828,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DELIVERYTERMS</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" /> @@ -15353,26 +16841,46 @@ <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>OBJECT_ROWID</name> + <name>BROWSER</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> + <columnType v="12" /> + <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>PAYMENTADDRESS</name> + <name>WEBLINK_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" /> @@ -15382,11 +16890,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ORDERTYPE</name> + <name>DEVICE_TYPE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <size v="255" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -15396,39 +16904,39 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>OFFER_ID</name> + <name>WEBLINK_CLICKID</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>PAID</name> + <name>MAIL_LOG_ID</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="3" /> - <size v="14" /> - <scale v="2" /> + <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>FOOTER</name> + <name>IP_ADDRESS</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> - <size v="2147483647" /> + <columnType v="12" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -15438,12 +16946,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DISCOUNT</name> + <name>OPERATING_SYSTEM</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> - <size v="14" /> - <scale v="2" /> + <columnType v="12" /> + <size v="255" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -15452,12 +16960,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DISCOUNTED_NET</name> + <name>DATE_OPENED</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> - <size v="14" /> - <scale v="2" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -15465,8 +16973,28 @@ <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>DELIVERYADDRESS</name> + <name>BLACKLIST_FILTER</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="2005" /> @@ -15480,12 +17008,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ORDERSTATUS</name> + <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="5" /> - <size v="5" /> - <scale v="0" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -15494,26 +17022,26 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CONTACT_ID</name> + <name>END_DATE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> - <scale v="0" /> - <notNull v="true" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="false" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>NET</name> + <name>START_DATE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> - <size v="14" /> - <scale v="2" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -15521,34 +17049,14 @@ <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>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="1" /> - <size v="36" /> - <scale v="0" /> - <notNull v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -15556,21 +17064,21 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>AB_ATTRIBUTE_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" /> + <notNull v="true" /> <isUnique v="false" /> - <index v="true" /> + <index v="false" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>KNOWLEDGEMANAGEMENTTAGMODERATIONID</name> + <name>COMMUNICATIONBLACKLISTID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -15583,32 +17091,12 @@ <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> + <name>REASON</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <size v="500" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -15618,12 +17106,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>PRICE</name> + <name>USER_EDIT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> - <size v="14" /> - <scale v="2" /> + <columnType v="12" /> + <size v="50" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -15632,27 +17120,47 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>QUANTITY</name> + <name>BLACKLIST_TYPE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> - <size v="14" /> - <scale v="2" /> - <notNull 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>VAT</name> + <name>STATUS</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> - <size v="14" /> - <scale v="2" /> - <notNull v="false" /> + <columnType v="12" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -15660,27 +17168,27 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>INFO</name> + <name>CHANNEL_ID</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" /> - <index v="false" /> + <index v="true" /> <documentation></documentation> <title></title> <description></description> </entityFieldDb> <entityFieldDb> - <name>PRODUCT_ID</name> + <name>MEDIUM</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" /> <documentation></documentation> @@ -15688,12 +17196,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DISCOUNT</name> + <name>DATE_EDIT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> - <size v="14" /> - <scale v="2" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -15702,13 +17210,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ITEMPOSITION</name> + <name>CHANNEL_TYPE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="30" /> + <size v="36" /> <scale v="0" /> - <notNull v="false" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -15716,27 +17224,27 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>GROUPCODEID</name> + <name>CONTACT_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> - <name>ITEMSORT</name> + <name>DATE_NEW</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="4" /> - <size v="10" /> - <scale v="0" /> - <notNull v="false" /> + <columnType v="93" /> + <size v="29" /> + <scale v="9" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -15744,27 +17252,13 @@ <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> + <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" /> + <notNull v="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -15772,7 +17266,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>SALESORDERITEMID</name> + <name>COMMUNICATIONSETTINGSID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -15786,11 +17280,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ITEMNAME</name> + <name>USER_EDIT</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="250" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -15802,9 +17296,9 @@ </entityFields> </entityDb> <entityDb> - <name>AB_CTILOG</name> + <name>WEBLINK</name> <dbName></dbName> - <idColumn>AB_CTILOGID</idColumn> + <idColumn>WEBLINKID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -15820,25 +17314,11 @@ </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> + <name>ISREDIRECT</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" /> @@ -15848,15 +17328,15 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>CALLID</name> + <name>SCORE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="64" /> + <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> @@ -15876,25 +17356,11 @@ <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> + <name>LINKTYPE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -15903,20 +17369,6 @@ <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> @@ -15924,35 +17376,15 @@ <columnType v="93" /> <size v="29" /> <scale v="9" /> - <notNull v="true" /> + <notNull v="false" /> <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> + <name>USER_NEW</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> @@ -15966,12 +17398,12 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DATE_EDIT</name> + <name>URL</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> + <columnType v="12" /> + <size v="512" /> + <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -15980,11 +17412,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>DIRECTION</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" /> @@ -15994,25 +17426,25 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>ENTRYDATE</name> + <name>WEBLINKID</name> <dbName></dbName> - <primaryKey v="false" /> - <columnType v="93" /> - <size v="29" /> - <scale v="9" /> - <notNull v="false" /> - <isUnique 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>INFO</name> + <name>PLACEHOLDER</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> - <size v="2147483647" /> + <columnType v="12" /> + <size v="50" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -16022,11 +17454,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_EDIT</name> + <name>WORKFLOWPROCESSDEFINITION_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" /> @@ -16035,8 +17467,28 @@ <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>ACTIVITYID</name> + <name>MAIL_RUNID</name> <dbName></dbName> <primaryKey v="true" /> <columnType v="1" /> @@ -16050,7 +17502,7 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>PARENT_ID</name> + <name>OBJECT_ROWID</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="1" /> @@ -16058,17 +17510,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>CATEGORY</name> + <name>STATUS</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="36" /> + <size v="100" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -16078,27 +17530,27 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>SUBJECT</name> + <name>INTEREST_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>DATE_NEW</name> + <name>DATE_RUN_START</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> <size v="29" /> <scale v="9" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -16106,13 +17558,13 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>USER_NEW</name> + <name>TESTRUN</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="12" /> - <size v="50" /> + <columnType v="5" /> + <size v="5" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -16120,11 +17572,11 @@ <description></description> </entityFieldDb> <entityFieldDb> - <name>PARENT_CONTEXT</name> + <name>OBJECT_TYPE</name> <dbName></dbName> <primaryKey v="false" /> <columnType v="12" /> - <size v="64" /> + <size v="63" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -16133,6 +17585,20 @@ <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> diff --git a/entity/Lead_entity/Lead_entity.aod b/entity/Lead_entity/Lead_entity.aod index f4f73b84ea..dd2b1c8875 100644 --- a/entity/Lead_entity/Lead_entity.aod +++ b/entity/Lead_entity/Lead_entity.aod @@ -66,7 +66,7 @@ <expose v="true" /> </entityParameter> <entityField> - <name>LEADID</name> + <name>LEADSID</name> </entityField> <entityField> <name>LEAD_SOURCE</name> @@ -134,88 +134,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 fe9e31415a..898acc9967 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/Leadimport_entity/entityfields/leadimportreset/onActionProcess.js b/entity/Leadimport_entity/entityfields/leadimportreset/onActionProcess.js index da2f76e57b..52cbc29086 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/recordcontainers/db/onDBDelete.js b/entity/Leadimport_entity/recordcontainers/db/onDBDelete.js index 17ff5bbfc5..0e876c9b6f 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/process/Dependency_lib/process.js b/process/Dependency_lib/process.js index 76b94543fc..54305d6527 100644 --- a/process/Dependency_lib/process.js +++ b/process/Dependency_lib/process.js @@ -718,7 +718,7 @@ Dependency.mapping = function () "options" : { "isObservable" : true }, - "getUIDsfn" : Dependency.defaultFunctionForField("LEAD.LEADIMPORT_ID") + "getUIDsfn" : Dependency.defaultFunctionForField("LEADS.LEADIMPORT_ID") } } }; diff --git a/process/Leadimport_lib/process.js b/process/Leadimport_lib/process.js index 1859595621..9d57e38ddd 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 = []; diff --git a/process/importLead_serverProcess/process.js b/process/importLead_serverProcess/process.js index 96f94dc8f0..83f67fedf8 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); -- GitLab From 30e8ec416e83efb02782722405862409dfbe2e69 Mon Sep 17 00:00:00 2001 From: Martin Groppe <m.groppe@adito.de> Date: Fri, 30 Apr 2021 07:50:53 +0000 Subject: [PATCH 120/242] [Projekt: xRM-Marketing][TicketNr.: 1079839][Fehler: Inkonsistentes Verhalten bei Platzhalterersetzung] --- process/DocumentTemplate_lib/process.js | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/process/DocumentTemplate_lib/process.js b/process/DocumentTemplate_lib/process.js index 5fef12bb28..3cebbc9b90 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]; } -- GitLab From 5eb239b1f253aa020919d1e57e8d07eb01977d72 Mon Sep 17 00:00:00 2001 From: "m.groppe" <m.groppe@adito.de> Date: Fri, 30 Apr 2021 11:05:59 +0200 Subject: [PATCH 121/242] [Projekt: xRM-Marketing][TicketNr.: 1080134][Fehler bei Redirectlinks im Testversand] --- process/Bulkmail_lib/process.js | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/process/Bulkmail_lib/process.js b/process/Bulkmail_lib/process.js index d40a686b69..b919ed14e3 100644 --- a/process/Bulkmail_lib/process.js +++ b/process/Bulkmail_lib/process.js @@ -234,6 +234,7 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pIsTestRun) let isSuccess = false; let contactId = recipientData[i]["CONTACT_ID"]; let email = mails[contactId]; + let currentMailLogId = mailLogIds.get(contactId); if (email !== undefined) { @@ -244,15 +245,28 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pIsTestRun) if(testRecipientData[j][1]) { email.toRecipients = [testRecipientData[j][1]]; + let nextMailLogId = util.getNewUUID(); + email.body = email.body.replace(currentMailLogId,nextMailLogId); + currentMailLogId = nextMailLogId; isSuccess = email.send(); Array.prototype.push.call(isSuccess ? successIds : failedIds, recipientData[i]["BULKMAILRECIPIENTID"]); if (testRecipientData[j][0]) { - let mailLogId = util.getNewUUID(); - db.insertData("MAIL_LOG", ["MAIL_LOGID","MAIL_RUN_ID","CONTACT_ID","STATUS","SENDER_EMAIL","RECIPIENT_EMAIL","MAILING_SUBJECT","DATE_SEND"], null, [mailLogId,mailrunId,testRecipientData[j][0],(isSuccess ?$KeywordRegistry.bulkMailRecipientStatus$sent(): $KeywordRegistry.bulkMailRecipientStatus$failed()),emailSender,testRecipientData[j][1],email.subject,vars.get("$sys.date")]); - this.storeEmlFile(pBulkMailId, mailrunId, mailLogId,email.getEML()); + 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()); } } } -- GitLab From 0a626869a3ab5c0acaf5d86103ac2af79bc1733e Mon Sep 17 00:00:00 2001 From: "s.pongratz" <s.pongratz@adito.de> Date: Fri, 30 Apr 2021 11:25:14 +0200 Subject: [PATCH 122/242] [Projekt: xRM-ContactManagement][TicketNr.: 1078328][Dubletten: Fehler bei Neuberechnung, wenn im Scanmuster "Firmenname ungleich privat" steht] --- process/IndexSearch_lib/process.js | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/process/IndexSearch_lib/process.js b/process/IndexSearch_lib/process.js index 549aefab09..0c2635e195 100644 --- a/process/IndexSearch_lib/process.js +++ b/process/IndexSearch_lib/process.js @@ -290,13 +290,24 @@ IndexsearchFilterRow.prototype.buildQuery = function(pFieldValues) * * @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 valze + * @param {string} pValue the field value */ IndexsearchFilterRow.fromFilter = function(pName, pOperator, pValue) { if(pOperator == "NOT_EQUAL" || pOperator == "CONTAINSNOT") { - return new IndexsearchFilterRow(pName, true, JSON.parse(pValue)); + 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") { -- GitLab From a925746e12fd50d144f70808b12621942723620b Mon Sep 17 00:00:00 2001 From: Daniel Tran <d.tran@adito.de> Date: Fri, 30 Apr 2021 10:52:19 +0000 Subject: [PATCH 123/242] [Projekt: xRM-ContactManagement][TicketNr.: 1048882][documentation zu Prozess emailWrite] - Added needed .adoc documentation for emailWrite process. --- process/emailWrite/documentation.adoc | 18 ++++++++++++++++++ process/emailWrite/emailWrite.aod | 1 + 2 files changed, 19 insertions(+) create mode 100644 process/emailWrite/documentation.adoc diff --git a/process/emailWrite/documentation.adoc b/process/emailWrite/documentation.adoc new file mode 100644 index 0000000000..b26f9b3ea5 --- /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 a752349818..008853153c 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> -- GitLab From 2cee7455732277a9c4d1fbf1a98f592e01c73d29 Mon Sep 17 00:00:00 2001 From: "m.groppe" <m.groppe@adito.de> Date: Fri, 30 Apr 2021 13:07:54 +0200 Subject: [PATCH 124/242] =?UTF-8?q?[Projekt:=20xRM-Marketing][TicketNr.:?= =?UTF-8?q?=201079868][Redesign:=20Opener=20Link=20Ersetzung=20muss=20auf?= =?UTF-8?q?=20Grund=20Mosaico=20Einschr=C3=A4nkungen=20=C3=BCberarbeitet?= =?UTF-8?q?=20werden]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- process/Bulkmail_lib/process.js | 18 ++++++++++++++++-- process/DocumentTemplate_lib/process.js | 8 +++++++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/process/Bulkmail_lib/process.js b/process/Bulkmail_lib/process.js index d40a686b69..adf52102ca 100644 --- a/process/Bulkmail_lib/process.js +++ b/process/Bulkmail_lib/process.js @@ -133,10 +133,24 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pIsTestRun) { if (Utils.toBoolean(isRedirect)) { - var linkFn = function (pContactId) + var linkFn; + //Mosaico places a url in front of the placeholder if it gets placed inside image src + //so we temporarily create the whole html tag with a placeholder for the opener until this is solved + if (placeholder == "pixel") { - return baseUrl + "link=" + weblinkId + "&log=" + mailLogIds.get(pContactId); + linkFn = function (pContactId) + { + return "<img src=\""+baseUrl + "link=" + weblinkId + "&log=" + mailLogIds.get(pContactId)+"\" alt=\"\" width=\"1\" height=\"1\" border=\"0\" hspace=\"0\" vspace=\"0\" align=\"top\">"; + } } + else + { + 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); diff --git a/process/DocumentTemplate_lib/process.js b/process/DocumentTemplate_lib/process.js index 5fef12bb28..fe748c72d9 100644 --- a/process/DocumentTemplate_lib/process.js +++ b/process/DocumentTemplate_lib/process.js @@ -425,7 +425,13 @@ 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); + { + //we need to write a full html tag and not only text for the opener pixel at the moment + if(i != "{@pixel@}") + { + pReplacements[i] = text.text2html(pReplacements[i], false); + } + } case DocumentTemplate.types.TXT: let decodedContent = util.decodeBase64String(content); let encodedContent = this._replaceText(decodedContent, pReplacements); -- GitLab From 668cdd645fc55f168e345f25f8e476f59d4b256b Mon Sep 17 00:00:00 2001 From: Pascal Neub <p.neub@adito.de> Date: Fri, 30 Apr 2021 11:23:26 +0000 Subject: [PATCH 125/242] =?UTF-8?q?[Projekt:=20xRM-Sales][TicketNr.:=20104?= =?UTF-8?q?0659][Produkt=20-=20St=C3=BCckliste:=20Eintr=C3=A4ge=20sollen?= =?UTF-8?q?=20nachtr=C3=A4glich=20bearbeitet=20werden=20k=C3=B6nnen]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entity/Prod2prod_entity/Prod2prod_entity.aod | 41 +-- .../entityfields/prod2prodid/valueProcess.js | 7 - .../entityfields/source_id/valueProcess.js | 0 .../entityfields/uid/valueProcess.js | 7 - .../recordcontainers/jdito/contentProcess.js | 264 ++++-------------- .../recordcontainers/jdito/onDelete.js | 3 +- .../recordcontainers/jdito/onInsert.js | 4 +- .../recordcontainers/jdito/onUpdate.js | 7 +- entity/Product_entity/Product_entity.aod | 1 + .../Prod2prodFilter_view.aod | 3 +- 10 files changed, 91 insertions(+), 246 deletions(-) delete mode 100644 entity/Prod2prod_entity/entityfields/prod2prodid/valueProcess.js delete mode 100644 entity/Prod2prod_entity/entityfields/source_id/valueProcess.js delete mode 100644 entity/Prod2prod_entity/entityfields/uid/valueProcess.js diff --git a/entity/Prod2prod_entity/Prod2prod_entity.aod b/entity/Prod2prod_entity/Prod2prod_entity.aod index 0acf3ef262..56050bde20 100644 --- a/entity/Prod2prod_entity/Prod2prod_entity.aod +++ b/entity/Prod2prod_entity/Prod2prod_entity.aod @@ -5,7 +5,7 @@ <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,7 +55,6 @@ </entityParameter> <entityField> <name>PROD2PRODID</name> - <valueProcess>%aditoprj%/entity/Prod2prod_entity/entityfields/prod2prodid/valueProcess.js</valueProcess> </entityField> <entityProvider> <name>ProductLinks</name> @@ -138,9 +132,6 @@ <title>Unit</title> <state>READONLY</state> </entityField> - <entityField> - <name>vat</name> - </entityField> <entityField> <name>currentPurchasePrice</name> <title>Curr. purchase price</title> @@ -151,13 +142,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 +163,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 +187,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/prod2prodid/valueProcess.js b/entity/Prod2prod_entity/entityfields/prod2prodid/valueProcess.js deleted file mode 100644 index 86ef789e06..0000000000 --- a/entity/Prod2prod_entity/entityfields/prod2prodid/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.string(util.getNewUUID()); \ No newline at end of file diff --git a/entity/Prod2prod_entity/entityfields/source_id/valueProcess.js b/entity/Prod2prod_entity/entityfields/source_id/valueProcess.js deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/entity/Prod2prod_entity/entityfields/uid/valueProcess.js b/entity/Prod2prod_entity/entityfields/uid/valueProcess.js deleted file mode 100644 index 884a038bbc..0000000000 --- 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 fb53ccb23f..a65c4e001e 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[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 94f252cf12..7cf6538ead 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 d1adc28758..2e13aacb36 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 c71a9c41db..a98faf66d8 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 740f556ee5..7310a2e80e 100644 --- a/entity/Product_entity/Product_entity.aod +++ b/entity/Product_entity/Product_entity.aod @@ -201,6 +201,7 @@ </entityProvider> <entityConsumer> <name>ProductLinks</name> + <selectionMode>MULTI</selectionMode> <dependency> <name>dependency</name> <entityName>Prod2prod_entity</entityName> diff --git a/neonView/Prod2prodFilter_view/Prod2prodFilter_view.aod b/neonView/Prod2prodFilter_view/Prod2prodFilter_view.aod index 7df0d8ad40..c009ab9b93 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> -- GitLab From f3b437db3f63328a56d2ad107077f498836a60aa Mon Sep 17 00:00:00 2001 From: Pascal Neub <p.neub@adito.de> Date: Fri, 30 Apr 2021 11:31:46 +0000 Subject: [PATCH 126/242] =?UTF-8?q?[Projekt:=20xRM-Sales][TicketNr.:=20107?= =?UTF-8?q?6358][Angebotserstellung=20aus=20360=C2=B0=20Ansicht=20nimmt=20?= =?UTF-8?q?zuf=C3=A4lligen=20Kontakt=20zur=20Verkn=C3=BCpfung]=20null=20or?= =?UTF-8?q?der=20by=20fix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../children/objectrowid_param/valueProcess.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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 aee05ab473..8ab26e2080 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 -- GitLab From dc7f0300b558850897a5e30b171208bd181e7154 Mon Sep 17 00:00:00 2001 From: Martin Groppe <m.groppe@adito.de> Date: Fri, 30 Apr 2021 11:32:47 +0000 Subject: [PATCH 127/242] [Projekt: xRM-Marketing][TicketNr.: 1079370][[Serienmail] Fehlermeldung bei Klick auf Bearbeiten Button im Bereich Details (Vorschau)] --- .../basic/2021.0.3/Bulkmail/AddBulkmailStatus.xml | 12 ++++++++++++ process/KeywordRegistry_basic/process.js | 2 ++ 2 files changed, 14 insertions(+) diff --git a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/AddBulkmailStatus.xml b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/AddBulkmailStatus.xml index 4b54ddabd2..b16135cdce 100644 --- a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/AddBulkmailStatus.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/AddBulkmailStatus.xml @@ -23,5 +23,17 @@ <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/process/KeywordRegistry_basic/process.js b/process/KeywordRegistry_basic/process.js index 8c40b220a4..283d223902 100644 --- a/process/KeywordRegistry_basic/process.js +++ b/process/KeywordRegistry_basic/process.js @@ -239,6 +239,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";}; -- GitLab From 84abe1205027a0a9461cb06db9db7cc0dadd2190 Mon Sep 17 00:00:00 2001 From: Martin Groppe <m.groppe@adito.de> Date: Fri, 30 Apr 2021 11:33:24 +0000 Subject: [PATCH 128/242] 1079751 optimierung serienmail --- entity/BulkMail_entity/BulkMail_entity.aod | 1 + .../bulkmailtestrecipients/stateProcess.js | 7 +++++++ .../createactivities/valueProcess.js | 2 +- .../entityfields/url/stateProcess.js | 3 ++- neonView/BulkMailMain_view/BulkMailMain_view.aod | 16 ++++++++-------- 5 files changed, 19 insertions(+), 10 deletions(-) create mode 100644 entity/BulkMail_entity/entityfields/bulkmailtestrecipients/stateProcess.js diff --git a/entity/BulkMail_entity/BulkMail_entity.aod b/entity/BulkMail_entity/BulkMail_entity.aod index ea3b4e8985..c7e6b94645 100644 --- a/entity/BulkMail_entity/BulkMail_entity.aod +++ b/entity/BulkMail_entity/BulkMail_entity.aod @@ -352,6 +352,7 @@ </entityConsumer> <entityConsumer> <name>BulkMailTestRecipients</name> + <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/bulkmailtestrecipients/stateProcess.js</stateProcess> <dependency> <name>dependency</name> <entityName>BulkMailTestRecipient_entity</entityName> diff --git a/entity/BulkMail_entity/entityfields/bulkmailtestrecipients/stateProcess.js b/entity/BulkMail_entity/entityfields/bulkmailtestrecipients/stateProcess.js new file mode 100644 index 0000000000..0e2b38fa2a --- /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/createactivities/valueProcess.js b/entity/BulkMail_entity/entityfields/createactivities/valueProcess.js index 72e22f0a52..a4bf6a6692 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/Weblink_entity/entityfields/url/stateProcess.js b/entity/Weblink_entity/entityfields/url/stateProcess.js index bf56cc956c..d20b8d2ca5 100644 --- a/entity/Weblink_entity/entityfields/url/stateProcess.js +++ b/entity/Weblink_entity/entityfields/url/stateProcess.js @@ -1,8 +1,9 @@ import("system.neon"); import("system.result"); import("system.vars"); +import("KeywordRegistry_basic"); -if(vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW) +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/neonView/BulkMailMain_view/BulkMailMain_view.aod b/neonView/BulkMailMain_view/BulkMailMain_view.aod index 82edef3461..dfe012e304 100644 --- a/neonView/BulkMailMain_view/BulkMailMain_view.aod +++ b/neonView/BulkMailMain_view/BulkMailMain_view.aod @@ -9,15 +9,20 @@ </masterSlaveLayout> </layout> <children> + <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>3222ace8-c6d6-4dab-ada1-1f50b983e7e7</name> - <entityField>#ENTITY</entityField> - <view>BulkMailContent_view</view> + <name>f78d044a-6246-49c0-a72c-03f54fc90fd2</name> + <entityField>BulkMailTestRecipients</entityField> + <view>BulkMailTestRecipientFilter_view</view> </neonViewReference> <neonViewReference> <name>9e1e1137-f0a8-45d5-8b91-6e36411be6f1</name> @@ -29,11 +34,6 @@ <entityField>MailLogs</entityField> <view>MailLogFilter_view</view> </neonViewReference> - <neonViewReference> - <name>f78d044a-6246-49c0-a72c-03f54fc90fd2</name> - <entityField>BulkMailTestRecipients</entityField> - <view>BulkMailTestRecipientFilter_view</view> - </neonViewReference> <neonViewReference> <name>bd3876a9-492e-4e2e-bcca-e86455475dca</name> <entityField>Clicks</entityField> -- GitLab From 4c515e5126c4c790dd77ff5a96c0977e1dff0e99 Mon Sep 17 00:00:00 2001 From: "p.neub" <p.neub@adito.de> Date: Fri, 30 Apr 2021 15:15:13 +0200 Subject: [PATCH 129/242] [Projekt: xRM-Sales][TicketNr.: 1032621][Vertriebsprojekt - Fehlende Suchkategorien in der erweiterten Suche] --- .../competitor_filterextension/filterValuesProcess.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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 da7c6ab53f..84000eea24 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()); -- GitLab From d7651d88029751dbb99669f611697ecf9b057bbf Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Fri, 30 Apr 2021 18:15:20 +0200 Subject: [PATCH 130/242] 1080075 communication setting channel type unique validation --- .../CommunicationSettings_entity.aod | 7 ++++ .../entityfields/overrideinfo/valueProcess.js | 40 +++++++++++++++++++ .../onValidation.js | 38 ++++++++++++++++++ .../recordcontainers/db/orderClauseProcess.js | 8 ++++ .../_____LANGUAGE_EXTRA.aod | 24 +++++++++++ .../_____LANGUAGE_de/_____LANGUAGE_de.aod | 8 ++++ .../_____LANGUAGE_en/_____LANGUAGE_en.aod | 24 +++++++++++ .../CommunicationSettingsPreview_view.aod | 1 + process/MarketingCondition_lib/process.js | 21 +++++++++- 9 files changed, 169 insertions(+), 2 deletions(-) create mode 100644 entity/CommunicationSettings_entity/entityfields/overrideinfo/valueProcess.js create mode 100644 entity/CommunicationSettings_entity/onValidation.js create mode 100644 entity/CommunicationSettings_entity/recordcontainers/db/orderClauseProcess.js diff --git a/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod b/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod index bfa47c0a1f..eb42697bc6 100644 --- a/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod +++ b/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod @@ -4,6 +4,7 @@ <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> @@ -209,12 +210,17 @@ <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> @@ -247,6 +253,7 @@ <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> diff --git a/entity/CommunicationSettings_entity/entityfields/overrideinfo/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/overrideinfo/valueProcess.js new file mode 100644 index 0000000000..be189450db --- /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/onValidation.js b/entity/CommunicationSettings_entity/onValidation.js new file mode 100644 index 0000000000..9641a12f5a --- /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/orderClauseProcess.js b/entity/CommunicationSettings_entity/recordcontainers/db/orderClauseProcess.js new file mode 100644 index 0000000000..88d3371b95 --- /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/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index d625a68e37..39e75b0b8b 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -8539,6 +8539,30 @@ <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> </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 4152b5d25d..9b42ae27aa 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -38,6 +38,10 @@ <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> @@ -10269,6 +10273,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> diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod index 27f7a19d55..610381d736 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -8624,6 +8624,30 @@ <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> </keyValueMap> <font name="Dialog" style="0" size="11" /> </language> diff --git a/neonView/CommunicationSettingsPreview_view/CommunicationSettingsPreview_view.aod b/neonView/CommunicationSettingsPreview_view/CommunicationSettingsPreview_view.aod index 8551f448c5..80f8488429 100644 --- a/neonView/CommunicationSettingsPreview_view/CommunicationSettingsPreview_view.aod +++ b/neonView/CommunicationSettingsPreview_view/CommunicationSettingsPreview_view.aod @@ -15,6 +15,7 @@ <titleField>#CONTENTTITLE</titleField> <subtitleField>STATUS</subtitleField> <isEditable v="false" /> + <informationField>overrideInfo</informationField> </cardViewTemplate> <genericViewTemplate> <name>Infos</name> diff --git a/process/MarketingCondition_lib/process.js b/process/MarketingCondition_lib/process.js index 2053acd67b..0be8717663 100644 --- a/process/MarketingCondition_lib/process.js +++ b/process/MarketingCondition_lib/process.js @@ -10,6 +10,7 @@ import("KeywordRegistry_basic"); function CommunicationSettingsCondition () { this._contactIdSql = "CONTACT.CONTACTID"; + this._contactId = null; this._channelType = null; this._medium = null; this._channelIdSql = null; @@ -20,6 +21,14 @@ function CommunicationSettingsCondition () 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; } @@ -120,8 +129,16 @@ CommunicationSettingsCondition.prototype.buildSelect = function (pSelectFields) pSelectFields = "COMMUNICATIONSETTINGS.COMMUNICATIONSETTINGSID"; var sql = newSelect(pSelectFields) .from("COMMUNICATIONSETTINGS") - .where("COMMUNICATIONSETTINGS.CONTACT_ID = " + this._contactIdSql) - .andIfSet("COMMUNICATIONSETTINGS.STATUS", this._settingStatus); + .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) -- GitLab From e3b090030c8331505d4ce4dd01ea52f9f9cb4510 Mon Sep 17 00:00:00 2001 From: Martin Groppe <m.groppe@adito.de> Date: Fri, 30 Apr 2021 16:17:57 +0000 Subject: [PATCH 131/242] 1079792 marketing demodata --- .../Data_alias/basic/_demoData/changelog.xml | 2 + .../_demoData/generatedData/interest.xml | 26 +++++++ .../basic/_demoData/generatedData/weblink.xml | 70 +++++++++++++++++++ 3 files changed, 98 insertions(+) create mode 100644 .liquibase/Data_alias/basic/_demoData/generatedData/interest.xml create mode 100644 .liquibase/Data_alias/basic/_demoData/generatedData/weblink.xml diff --git a/.liquibase/Data_alias/basic/_demoData/changelog.xml b/.liquibase/Data_alias/basic/_demoData/changelog.xml index e447185e64..034f757e84 100644 --- a/.liquibase/Data_alias/basic/_demoData/changelog.xml +++ b/.liquibase/Data_alias/basic/_demoData/changelog.xml @@ -37,6 +37,7 @@ <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"/> @@ -57,4 +58,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/interest.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/interest.xml new file mode 100644 index 0000000000..3294e38ae5 --- /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/weblink.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/weblink.xml new file mode 100644 index 0000000000..a5f7556599 --- /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 -- GitLab From f47c756063a9f21abe1c17186fb5398aa3e3c7bf Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Mon, 3 May 2021 11:20:18 +0200 Subject: [PATCH 132/242] 1079700 remove communication blacklist --- .../CommunicationBlacklist/changelog.xml | 7 --- .../create_communicationBlacklist.xml | 27 --------- .../insert_blacklistTypeKeyword.xml | 23 -------- .../Data_alias/basic/2021.0.3/changelog.xml | 1 - .../_____SYSTEM_APPLICATION_NEON.aod | 4 -- .../BulkMailRecipient_entity.aod | 10 ---- .../recordcontainers/db/conditionProcess.js | 5 -- .../filterConditionProcess.js | 31 ----------- .../blacklist_filter/filterValuesProcess.js | 8 --- process/KeywordRegistry_basic/process.js | 3 - process/MarketingCondition_lib/process.js | 55 ------------------- 11 files changed, 174 deletions(-) delete mode 100644 .liquibase/Data_alias/basic/2021.0.3/CommunicationBlacklist/changelog.xml delete mode 100644 .liquibase/Data_alias/basic/2021.0.3/CommunicationBlacklist/create_communicationBlacklist.xml delete mode 100644 .liquibase/Data_alias/basic/2021.0.3/CommunicationBlacklist/insert_blacklistTypeKeyword.xml delete mode 100644 entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/blacklist_filter/filterConditionProcess.js delete mode 100644 entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/blacklist_filter/filterValuesProcess.js diff --git a/.liquibase/Data_alias/basic/2021.0.3/CommunicationBlacklist/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/CommunicationBlacklist/changelog.xml deleted file mode 100644 index de169ea5bf..0000000000 --- a/.liquibase/Data_alias/basic/2021.0.3/CommunicationBlacklist/changelog.xml +++ /dev/null @@ -1,7 +0,0 @@ -<?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_communicationBlacklist.xml"/> - <include relativeToChangelogFile="true" file="insert_blacklistTypeKeyword.xml"/> -</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/CommunicationBlacklist/create_communicationBlacklist.xml b/.liquibase/Data_alias/basic/2021.0.3/CommunicationBlacklist/create_communicationBlacklist.xml deleted file mode 100644 index faf00d8192..0000000000 --- a/.liquibase/Data_alias/basic/2021.0.3/CommunicationBlacklist/create_communicationBlacklist.xml +++ /dev/null @@ -1,27 +0,0 @@ -<?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="9415eb4f-ea93-433c-8a69-1bdb77c6ec87"> - <createTable tableName="COMMUNICATIONBLACKLIST"> - <column name="COMMUNICATIONBLACKLISTID" type="CHAR(36)"> - <constraints nullable="false" primaryKey="true" primaryKeyName="PK_COMMUNICATIONBLACKLISTID"/> - </column> - <column name="BLACKLIST_TYPE" type="VARCHAR(36)"> - <constraints nullable="false"/> - </column> - <column name="BLACKLIST_FILTER" type="NCLOB"/> - <column name="REASON" type="NVARCHAR(500)"/> - <column name="START_DATE" type="DATETIME"/> - <column name="END_DATE" type="DATETIME"/> - <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> - </changeSet> -</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.0.3/CommunicationBlacklist/insert_blacklistTypeKeyword.xml b/.liquibase/Data_alias/basic/2021.0.3/CommunicationBlacklist/insert_blacklistTypeKeyword.xml deleted file mode 100644 index c2a6c8057c..0000000000 --- a/.liquibase/Data_alias/basic/2021.0.3/CommunicationBlacklist/insert_blacklistTypeKeyword.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: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="89ba3828-288c-4af7-bf98-feccc01ce312"> - <insert tableName="AB_KEYWORD_CATEGORY"> - <column name="AB_KEYWORD_CATEGORYID" value="e980999c-0f8e-484b-852b-92d60c38c14f"/> - <column name="NAME" value="CommunicationBlacklistType"/> - <column name="SORTINGBY" valueNumeric="0"/> - <column name="SORTINGDIRECTION" value="ASC"/> - </insert> - <insert tableName="AB_KEYWORD_ENTRY"> - <column name="AB_KEYWORD_ENTRYID" value="a1c8d2c6-54c7-4e9d-9792-dd576ac6f43e"/> - <column name="AB_KEYWORD_CATEGORY_ID" value="e980999c-0f8e-484b-852b-92d60c38c14f"/> - <column name="KEYID" value="BLACKLIST_TYPE_EMAILRECIPIENT_FILTER"/> - <column name="TITLE" value="Recipient filter"/> - <column name="CONTAINER" value="CommunicationBlacklistType"/> - <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/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/changelog.xml index 12e4fef499..1c8d89015e 100644 --- a/.liquibase/Data_alias/basic/2021.0.3/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/changelog.xml @@ -5,7 +5,6 @@ <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="CommunicationBlacklist/changelog.xml"/> <include relativeToChangelogFile="true" file="Checklists/changelog.xml"/> <include relativeToChangelogFile="true" file="Planning/changelog.xml"/> <include relativeToChangelogFile="true" file="alter_origin_attribute.xml"/> diff --git a/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod b/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod index 25b0e7dfca..37c97817e0 100644 --- a/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod +++ b/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod @@ -204,10 +204,6 @@ <name>Interest</name> <kind v="10077" /> </entityNode> - <entityNode> - <name>CommunicationBlacklist</name> - <kind v="10077" /> - </entityNode> </childNodes> </entityNode> <entityNode> diff --git a/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod b/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod index 337022169f..1166673b57 100644 --- a/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod +++ b/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod @@ -313,16 +313,6 @@ <readonly v="true" /> </linkInformation> </linkInformation> - <filterExtensions> - <filterExtension> - <name>Blacklist_filter</name> - <title>Blacklist</title> - <contentType>BOOLEAN</contentType> - <filterValuesProcess>%aditoprj%/entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/blacklist_filter/filterValuesProcess.js</filterValuesProcess> - <filterConditionProcess>%aditoprj%/entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/blacklist_filter/filterConditionProcess.js</filterConditionProcess> - <filtertype>BASIC</filtertype> - </filterExtension> - </filterExtensions> </dbRecordContainer> </recordContainers> </entity> diff --git a/entity/BulkMailRecipient_entity/recordcontainers/db/conditionProcess.js b/entity/BulkMailRecipient_entity/recordcontainers/db/conditionProcess.js index 3d3dceaa05..fbbbe546a0 100644 --- a/entity/BulkMailRecipient_entity/recordcontainers/db/conditionProcess.js +++ b/entity/BulkMailRecipient_entity/recordcontainers/db/conditionProcess.js @@ -7,7 +7,6 @@ import("Sql_lib"); import("MarketingCondition_lib"); var excludeWithCommunicationRejection = Utils.toBoolean(vars.get("$param.ExcludeCommunicationRejecting_param")); -var excludeBlacklisted = Utils.toBoolean(vars.get("$param.ExcludeBlacklisted_param")); var excludedStatus = Utils.parseJSON(vars.get("$param.ExcludedStatus_param")); var isTestMail = Utils.toBoolean(vars.get("$param.IsTestMail_param")); @@ -26,10 +25,6 @@ else .existNoSettings() .buildCondition()); } - if (excludeBlacklisted) - { - condition.and("not (" + CommunicationBlacklist.getMailRecipientBlacklist().buildCondition() + ")"); - } if (!Utils.isNullOrEmpty(excludedStatus)) { condition.and("BULKMAILRECIPIENT.STATUS", excludedStatus, SqlBuilder.NOT_IN()); diff --git a/entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/blacklist_filter/filterConditionProcess.js b/entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/blacklist_filter/filterConditionProcess.js deleted file mode 100644 index 35124c1297..0000000000 --- a/entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/blacklist_filter/filterConditionProcess.js +++ /dev/null @@ -1,31 +0,0 @@ -import("Sql_lib"); -import("system.result"); -import("Util_lib"); -import("system.vars"); -import("MarketingCondition_lib"); - -var operator = vars.get("$local.operator2").trim(); -var fetchBlacklisted = Utils.toBoolean(vars.get("$local.rawvalue")); -var condition = newWhere(); - -if (operator == "<>") -{ - fetchBlacklisted = !fetchBlacklisted; - operator = "="; -} -if (operator == "=") -{ - var blacklistCondition = CommunicationBlacklist.getMailRecipientBlacklist().getCondition(); - if (fetchBlacklisted && blacklistCondition.hasCondition()) - condition.and(blacklistCondition); - else if (fetchBlacklisted) - condition.noResult(); - else if (blacklistCondition.hasCondition()) - condition.and(null, blacklistCondition, SqlBuilder.NOT()); -} -else -{ - condition.noResult(); -} - -result.string(condition.toString("1=1")); \ No newline at end of file diff --git a/entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/blacklist_filter/filterValuesProcess.js b/entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/blacklist_filter/filterValuesProcess.js deleted file mode 100644 index 25006aba8d..0000000000 --- a/entity/BulkMailRecipient_entity/recordcontainers/db/filterextensions/blacklist_filter/filterValuesProcess.js +++ /dev/null @@ -1,8 +0,0 @@ -import("system.translate"); -import("system.result"); -import("system.translate"); - -result.object([ - ["true", translate.text("Yes")], - ["false", translate.text("No")] -]); \ No newline at end of file diff --git a/process/KeywordRegistry_basic/process.js b/process/KeywordRegistry_basic/process.js index 283d223902..8906c9fcaf 100644 --- a/process/KeywordRegistry_basic/process.js +++ b/process/KeywordRegistry_basic/process.js @@ -405,9 +405,6 @@ $KeywordRegistry.interestLinkStatus$notSubscribed = function(){return "INTERESTL $KeywordRegistry.deviceType = function(){return "DeviceType";}; $KeywordRegistry.interestLinkStatus$notSubscribed = function(){return "INTERESTLINK_NOTSUBSCRIBED";}; -$KeywordRegistry.communicationBlacklistType = function(){return "CommunicationBlacklistType";}; -$KeywordRegistry.communicationBlacklistType$emailRecipientFilter = function(){return "BLACKLIST_TYPE_EMAILRECIPIENT_FILTER";}; - $KeywordRegistry.weblinkActionType = function(){return "WeblinkActionType";}; $KeywordRegistry.weblinkActionType$startWorkflow = function(){return "LINKACTION_STARTWORKFLOW";}; $KeywordRegistry.weblinkActionType$sendWorkflowSignal = function(){return "LINKACTION_SENDSIGNAL";}; \ No newline at end of file diff --git a/process/MarketingCondition_lib/process.js b/process/MarketingCondition_lib/process.js index 2053acd67b..3d6bfba34b 100644 --- a/process/MarketingCondition_lib/process.js +++ b/process/MarketingCondition_lib/process.js @@ -149,58 +149,3 @@ CommunicationSettingsCondition.prototype.buildCondition = function () { return newWhere(null, this.buildSelect(), this._existsOperator); } - - -/* required functionality: - * - make communication settings condition - * - make interest condition - * - make blacklist condition - * - make full condition - * - check for single contact - */ - -function CommunicationBlacklist () -{ - this.filter = null; -} - -/** - * @return {CommunicationBlacklist} - */ -CommunicationBlacklist.getMailRecipientBlacklist = function () -{ - var currentDate = vars.get("$sys.date"); - var filters = newSelect("BLACKLIST_FILTER") - .from("COMMUNICATIONBLACKLIST") - .where("COMMUNICATIONBLACKLIST.BLACKLIST_TYPE", $KeywordRegistry.communicationBlacklistType$emailRecipientFilter()) - .and(newWhere("COMMUNICATIONBLACKLIST.START_DATE", currentDate, SqlBuilder.GREATER_OR_EQUAL()) - .or("COMMUNICATIONBLACKLIST.START_DATE is null")) - .and(newWhere("COMMUNICATIONBLACKLIST.END_DATE", currentDate, SqlBuilder.LESS_OR_EQUAL())) - .or("COMMUNICATIONBLACKLIST.END_DATE is null") - .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(); -} -- GitLab From df337c9c86cafd3ae5845abd33320dc0c9169c27 Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Mon, 3 May 2021 11:42:06 +0200 Subject: [PATCH 133/242] 1079700 CommunicationBlacklist removed --- .../CommunicationBlacklist_entity.aod | 130 ------------------ .../blacklist_filter/stateProcess.js | 12 -- .../blacklist_filter/valueProcess.js | 9 -- .../containername_param/valueProcess.js | 4 - .../entityfields/date_new/valueProcess.js | 6 - .../entityfields/user_new/valueProcess.js | 6 - .../onValidation.js | 15 -- .../blacklist_type.displayvalue/expression.js | 5 - .../CommunicationBlacklist.aod | 19 --- .../CommunicationBlacklistEdit_view.aod | 39 ------ .../CommunicationBlacklistFilter_view.aod | 34 ----- 11 files changed, 279 deletions(-) delete mode 100644 entity/CommunicationBlacklist_entity/CommunicationBlacklist_entity.aod delete mode 100644 entity/CommunicationBlacklist_entity/entityfields/blacklist_filter/stateProcess.js delete mode 100644 entity/CommunicationBlacklist_entity/entityfields/blacklist_filter/valueProcess.js delete mode 100644 entity/CommunicationBlacklist_entity/entityfields/blacklisttypekeyword/children/containername_param/valueProcess.js delete mode 100644 entity/CommunicationBlacklist_entity/entityfields/date_new/valueProcess.js delete mode 100644 entity/CommunicationBlacklist_entity/entityfields/user_new/valueProcess.js delete mode 100644 entity/CommunicationBlacklist_entity/onValidation.js delete mode 100644 entity/CommunicationBlacklist_entity/recordcontainers/db/recordfieldmappings/blacklist_type.displayvalue/expression.js delete mode 100644 neonContext/CommunicationBlacklist/CommunicationBlacklist.aod delete mode 100644 neonView/CommunicationBlacklistEdit_view/CommunicationBlacklistEdit_view.aod delete mode 100644 neonView/CommunicationBlacklistFilter_view/CommunicationBlacklistFilter_view.aod diff --git a/entity/CommunicationBlacklist_entity/CommunicationBlacklist_entity.aod b/entity/CommunicationBlacklist_entity/CommunicationBlacklist_entity.aod deleted file mode 100644 index 0b6d0eedc3..0000000000 --- a/entity/CommunicationBlacklist_entity/CommunicationBlacklist_entity.aod +++ /dev/null @@ -1,130 +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>CommunicationBlacklist_entity</name> - <title>Blacklist</title> - <majorModelMode>DISTRIBUTED</majorModelMode> - <onValidation>%aditoprj%/entity/CommunicationBlacklist_entity/onValidation.js</onValidation> - <iconId>VAADIN:BAN</iconId> - <recordContainer>db</recordContainer> - <entityFields> - <entityProvider> - <name>#PROVIDER</name> - </entityProvider> - <entityProvider> - <name>#PROVIDER_AGGREGATES</name> - <useAggregates v="true" /> - </entityProvider> - <entityField> - <name>COMMUNICATIONBLACKLISTID</name> - </entityField> - <entityField> - <name>START_DATE</name> - <title>Start date</title> - <contentType>DATE</contentType> - <resolution>DAY</resolution> - </entityField> - <entityField> - <name>END_DATE</name> - <title>End date</title> - <contentType>DATE</contentType> - <resolution>DAY</resolution> - </entityField> - <entityField> - <name>BLACKLIST_FILTER</name> - <title>Condition</title> - <contentType>FILTER_TREE</contentType> - <stateProcess>%aditoprj%/entity/CommunicationBlacklist_entity/entityfields/blacklist_filter/stateProcess.js</stateProcess> - <valueProcess>%aditoprj%/entity/CommunicationBlacklist_entity/entityfields/blacklist_filter/valueProcess.js</valueProcess> - </entityField> - <entityField> - <name>REASON</name> - <title>Reason</title> - <contentType>LONG_TEXT</contentType> - <mandatory v="true" /> - </entityField> - <entityField> - <name>BLACKLIST_TYPE</name> - <title>Type</title> - <consumer>BlacklistTypeKeyword</consumer> - <mandatory v="true" /> - </entityField> - <entityConsumer> - <name>BlacklistTypeKeyword</name> - <dependency> - <name>dependency</name> - <entityName>KeywordEntry_entity</entityName> - <fieldName>SpecificContainerKeywords</fieldName> - </dependency> - <children> - <entityParameter> - <name>ContainerName_param</name> - <valueProcess>%aditoprj%/entity/CommunicationBlacklist_entity/entityfields/blacklisttypekeyword/children/containername_param/valueProcess.js</valueProcess> - </entityParameter> - </children> - </entityConsumer> - <entityField> - <name>DATE_NEW</name> - <valueProcess>%aditoprj%/entity/CommunicationBlacklist_entity/entityfields/date_new/valueProcess.js</valueProcess> - </entityField> - <entityField> - <name>USER_NEW</name> - <valueProcess>%aditoprj%/entity/CommunicationBlacklist_entity/entityfields/user_new/valueProcess.js</valueProcess> - </entityField> - </entityFields> - <recordContainers> - <dbRecordContainer> - <name>db</name> - <alias>Data_alias</alias> - <recordFieldMappings> - <dbRecordFieldMapping> - <name>BLACKLIST_FILTER.value</name> - <recordfield>COMMUNICATIONBLACKLIST.BLACKLIST_FILTER</recordfield> - </dbRecordFieldMapping> - <dbRecordFieldMapping> - <name>BLACKLIST_TYPE.value</name> - <recordfield>COMMUNICATIONBLACKLIST.BLACKLIST_TYPE</recordfield> - <isFilterable v="true" /> - </dbRecordFieldMapping> - <dbRecordFieldMapping> - <name>COMMUNICATIONBLACKLISTID.value</name> - <recordfield>COMMUNICATIONBLACKLIST.COMMUNICATIONBLACKLISTID</recordfield> - </dbRecordFieldMapping> - <dbRecordFieldMapping> - <name>END_DATE.value</name> - <recordfield>COMMUNICATIONBLACKLIST.END_DATE</recordfield> - <isFilterable v="true" /> - </dbRecordFieldMapping> - <dbRecordFieldMapping> - <name>REASON.value</name> - <recordfield>COMMUNICATIONBLACKLIST.REASON</recordfield> - </dbRecordFieldMapping> - <dbRecordFieldMapping> - <name>START_DATE.value</name> - <recordfield>COMMUNICATIONBLACKLIST.START_DATE</recordfield> - <isFilterable v="true" /> - </dbRecordFieldMapping> - <dbRecordFieldMapping> - <name>USER_NEW.value</name> - <recordfield>COMMUNICATIONBLACKLIST.USER_NEW</recordfield> - </dbRecordFieldMapping> - <dbRecordFieldMapping> - <name>DATE_NEW.value</name> - <recordfield>COMMUNICATIONBLACKLIST.DATE_NEW</recordfield> - </dbRecordFieldMapping> - <dbRecordFieldMapping> - <name>BLACKLIST_TYPE.displayValue</name> - <expression>%aditoprj%/entity/CommunicationBlacklist_entity/recordcontainers/db/recordfieldmappings/blacklist_type.displayvalue/expression.js</expression> - </dbRecordFieldMapping> - </recordFieldMappings> - <linkInformation> - <linkInformation> - <name>007ad42a-0a7a-49a9-a71d-917ee3c94aa7</name> - <tableName>COMMUNICATIONBLACKLIST</tableName> - <primaryKey>COMMUNICATIONBLACKLISTID</primaryKey> - <isUIDTable v="true" /> - <readonly v="false" /> - </linkInformation> - </linkInformation> - </dbRecordContainer> - </recordContainers> -</entity> diff --git a/entity/CommunicationBlacklist_entity/entityfields/blacklist_filter/stateProcess.js b/entity/CommunicationBlacklist_entity/entityfields/blacklist_filter/stateProcess.js deleted file mode 100644 index 234a26e982..0000000000 --- a/entity/CommunicationBlacklist_entity/entityfields/blacklist_filter/stateProcess.js +++ /dev/null @@ -1,12 +0,0 @@ -import("system.result"); -import("KeywordRegistry_basic"); -import("system.vars"); -import("system.neon"); - -var state = neon.COMPONENTSTATE_INVISIBLE; -if (vars.get("$field.BLACKLIST_TYPE") == $KeywordRegistry.communicationBlacklistType$emailRecipientFilter()) -{ - state = neon.COMPONENTSTATE_EDITABLE; -} - -result.string(state); \ No newline at end of file diff --git a/entity/CommunicationBlacklist_entity/entityfields/blacklist_filter/valueProcess.js b/entity/CommunicationBlacklist_entity/entityfields/blacklist_filter/valueProcess.js deleted file mode 100644 index 0bb45e823a..0000000000 --- a/entity/CommunicationBlacklist_entity/entityfields/blacklist_filter/valueProcess.js +++ /dev/null @@ -1,9 +0,0 @@ -import("system.neon"); -import("system.vars"); -import("system.result"); - -if (!vars.get("$this.value") && (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT)) -{ - var emptyFilter = {entity: "BulkMailRecipient_entity", filter: {type: "group", operator: "AND", childs: []}}; - result.string(JSON.stringify(emptyFilter)); -} \ No newline at end of file diff --git a/entity/CommunicationBlacklist_entity/entityfields/blacklisttypekeyword/children/containername_param/valueProcess.js b/entity/CommunicationBlacklist_entity/entityfields/blacklisttypekeyword/children/containername_param/valueProcess.js deleted file mode 100644 index 1e28921b3c..0000000000 --- a/entity/CommunicationBlacklist_entity/entityfields/blacklisttypekeyword/children/containername_param/valueProcess.js +++ /dev/null @@ -1,4 +0,0 @@ -import("KeywordRegistry_basic"); -import("system.result"); - -result.string($KeywordRegistry.communicationBlacklistType()); \ No newline at end of file diff --git a/entity/CommunicationBlacklist_entity/entityfields/date_new/valueProcess.js b/entity/CommunicationBlacklist_entity/entityfields/date_new/valueProcess.js deleted file mode 100644 index 1dbb1c3887..0000000000 --- a/entity/CommunicationBlacklist_entity/entityfields/date_new/valueProcess.js +++ /dev/null @@ -1,6 +0,0 @@ -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/CommunicationBlacklist_entity/entityfields/user_new/valueProcess.js b/entity/CommunicationBlacklist_entity/entityfields/user_new/valueProcess.js deleted file mode 100644 index 8d9eb72f00..0000000000 --- a/entity/CommunicationBlacklist_entity/entityfields/user_new/valueProcess.js +++ /dev/null @@ -1,6 +0,0 @@ -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/CommunicationBlacklist_entity/onValidation.js b/entity/CommunicationBlacklist_entity/onValidation.js deleted file mode 100644 index 0652d9c0f9..0000000000 --- a/entity/CommunicationBlacklist_entity/onValidation.js +++ /dev/null @@ -1,15 +0,0 @@ -import("system.translate"); -import("Util_lib"); -import("system.result"); -import("KeywordRegistry_basic"); -import("system.vars"); -import("system.neon"); -import("JditoFilter_lib"); - -if (vars.get("$field.BLACKLIST_TYPE") == $KeywordRegistry.communicationBlacklistType$emailRecipientFilter()) -{ - var filter = Utils.parseJSON(vars.get("$field.BLACKLIST_FILTER")); - filter = new FilterConditionGroup(filter); - if (filter.isEmpty()) - result.string(translate.text("Filter can't be empty")); -} \ No newline at end of file diff --git a/entity/CommunicationBlacklist_entity/recordcontainers/db/recordfieldmappings/blacklist_type.displayvalue/expression.js b/entity/CommunicationBlacklist_entity/recordcontainers/db/recordfieldmappings/blacklist_type.displayvalue/expression.js deleted file mode 100644 index 6cf151ddba..0000000000 --- a/entity/CommunicationBlacklist_entity/recordcontainers/db/recordfieldmappings/blacklist_type.displayvalue/expression.js +++ /dev/null @@ -1,5 +0,0 @@ -import("KeywordRegistry_basic"); -import("system.result"); -import("Keyword_lib"); - -result.string(KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.communicationBlacklistType(), "COMMUNICATIONBLACKLIST.BLACKLIST_TYPE")); \ No newline at end of file diff --git a/neonContext/CommunicationBlacklist/CommunicationBlacklist.aod b/neonContext/CommunicationBlacklist/CommunicationBlacklist.aod deleted file mode 100644 index 9e69819413..0000000000 --- a/neonContext/CommunicationBlacklist/CommunicationBlacklist.aod +++ /dev/null @@ -1,19 +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>CommunicationBlacklist</name> - <title>Blacklist</title> - <majorModelMode>DISTRIBUTED</majorModelMode> - <filterView>CommunicationBlacklistFilter_view</filterView> - <editView>CommunicationBlacklistEdit_view</editView> - <entity>CommunicationBlacklist_entity</entity> - <references> - <neonViewReference> - <name>664796b3-d90b-439d-b960-a1f09e00c99d</name> - <view>CommunicationBlacklistFilter_view</view> - </neonViewReference> - <neonViewReference> - <name>c08fe896-0181-4243-8639-cb96e302d3c8</name> - <view>CommunicationBlacklistEdit_view</view> - </neonViewReference> - </references> -</neonContext> diff --git a/neonView/CommunicationBlacklistEdit_view/CommunicationBlacklistEdit_view.aod b/neonView/CommunicationBlacklistEdit_view/CommunicationBlacklistEdit_view.aod deleted file mode 100644 index 7ca289f4bd..0000000000 --- a/neonView/CommunicationBlacklistEdit_view/CommunicationBlacklistEdit_view.aod +++ /dev/null @@ -1,39 +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>CommunicationBlacklistEdit_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>5bf6cb8b-20da-4e64-ab86-e654e1f9f6a5</name> - <entityField>BLACKLIST_TYPE</entityField> - </entityFieldLink> - <entityFieldLink> - <name>bad5d056-972e-4d10-b3c7-a25bf6233cb5</name> - <entityField>BLACKLIST_FILTER</entityField> - </entityFieldLink> - <entityFieldLink> - <name>f74c2a6a-1b70-4914-8059-8866a0e5db77</name> - <entityField>START_DATE</entityField> - </entityFieldLink> - <entityFieldLink> - <name>2b2bb0e7-7cdf-42ca-8c0b-89d1d869fa44</name> - <entityField>END_DATE</entityField> - </entityFieldLink> - <entityFieldLink> - <name>947da750-50bd-47bb-af2d-7446b3756482</name> - <entityField>REASON</entityField> - </entityFieldLink> - </fields> - </genericViewTemplate> - </children> -</neonView> diff --git a/neonView/CommunicationBlacklistFilter_view/CommunicationBlacklistFilter_view.aod b/neonView/CommunicationBlacklistFilter_view/CommunicationBlacklistFilter_view.aod deleted file mode 100644 index 232b308af1..0000000000 --- a/neonView/CommunicationBlacklistFilter_view/CommunicationBlacklistFilter_view.aod +++ /dev/null @@ -1,34 +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>CommunicationBlacklistFilter_view</name> - <majorModelMode>DISTRIBUTED</majorModelMode> - <filterable v="true" /> - <layout> - <groupLayout> - <name>layout</name> - </groupLayout> - </layout> - <children> - <tableViewTemplate> - <name>Table</name> - <columns> - <neonTableColumn> - <name>86497fa4-acda-4041-8cbc-8d11838b4876</name> - <entityField>BLACKLIST_TYPE</entityField> - </neonTableColumn> - <neonTableColumn> - <name>304b2589-aabf-42f6-916f-a69cff5a1b00</name> - <entityField>START_DATE</entityField> - </neonTableColumn> - <neonTableColumn> - <name>fd5077c1-942b-42f0-8f44-80e9c568db44</name> - <entityField>END_DATE</entityField> - </neonTableColumn> - <neonTableColumn> - <name>d7050f91-da78-4ffc-a31c-30985d808473</name> - <entityField>REASON</entityField> - </neonTableColumn> - </columns> - </tableViewTemplate> - </children> -</neonView> -- GitLab From b053f27ec15cd4a9925909c03accfd2d06cecec1 Mon Sep 17 00:00:00 2001 From: Daniel Tran <d.tran@adito.de> Date: Tue, 4 May 2021 04:29:54 +0000 Subject: [PATCH 134/242] [Projekt: xRM-ContactManagement][TicketNr.: 1069662][Abbyy-Visitenkarten-Scan: letzter Buchstabe des Nachnamens, Hausnummer und Firmenname machen Probleme] - Added new field for business card lang to entity and edit view. - Make new field only visible when abbyy is enabled. - Added translation for new field. - Customized state process, to make upload field for business card only visible when in previous step, a corresponding language for this business card was selected. --- .../QuickEntry_entity/QuickEntry_entity.aod | 8 ++ .../businesscardlanguage/stateProcess.js | 11 ++ .../leadquickacquisition/onValueChange.js | 69 +++------- .../leadquickacquisition/stateProcess.js | 10 +- .../_____LANGUAGE_de/_____LANGUAGE_de.aod | 4 + .../QuickEntryEdit_view.aod | 4 + process/LeadQuickAcquisition_lib/process.js | 125 ++++++++++++------ 7 files changed, 133 insertions(+), 98 deletions(-) create mode 100644 entity/QuickEntry_entity/entityfields/businesscardlanguage/stateProcess.js diff --git a/entity/QuickEntry_entity/QuickEntry_entity.aod b/entity/QuickEntry_entity/QuickEntry_entity.aod index 2c460f59b8..943a7dd66a 100644 --- a/entity/QuickEntry_entity/QuickEntry_entity.aod +++ b/entity/QuickEntry_entity/QuickEntry_entity.aod @@ -223,6 +223,7 @@ <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> </entityField> @@ -249,6 +250,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 0000000000..70bf57136f --- /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 b947b83417..c76bdbc402 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 7376f4d25a..4b5f20add3 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/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod index 4152b5d25d..bba63ba6b1 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -11264,6 +11264,10 @@ Bitte Datumseingabe prüfen</value> <key>Post office box number</key> <value>Postfachnummer</value> </entry> + <entry> + <key>Business Card Language</key> + <value>Visitenkarten Sprache</value> + </entry> </keyValueMap> <font name="Dialog" style="0" size="11" /> </language> diff --git a/neonView/QuickEntryEdit_view/QuickEntryEdit_view.aod b/neonView/QuickEntryEdit_view/QuickEntryEdit_view.aod index 63d495112b..c9ef652c01 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/process/LeadQuickAcquisition_lib/process.js b/process/LeadQuickAcquisition_lib/process.js index efb48f95f7..80cf36921c 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; } -- GitLab From a7e858b48dbbffec21dd21a6a7005350a81a112e Mon Sep 17 00:00:00 2001 From: "s.pongratz" <s.pongratz@adito.de> Date: Tue, 4 May 2021 09:28:52 +0200 Subject: [PATCH 135/242] Change taps sorting and delete second data privacy tap --- neonView/PersonMain_view/PersonMain_view.aod | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/neonView/PersonMain_view/PersonMain_view.aod b/neonView/PersonMain_view/PersonMain_view.aod index cfbe086984..5a8f4d9906 100644 --- a/neonView/PersonMain_view/PersonMain_view.aod +++ b/neonView/PersonMain_view/PersonMain_view.aod @@ -55,29 +55,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>f0895c2a-5517-4c7b-80ed-147e4078603d</name> <entityField>#ENTITY</entityField> <view>PersonDSGVO_view</view> </neonViewReference> - <neonViewReference> - <name>82f19c55-fa96-43de-9f26-46069b28db31</name> - <entityField>#ENTITY</entityField> - <view>PersonMarketing_view</view> - </neonViewReference> <neonViewReference> <name>24ea8bc9-7ed0-4bed-a984-b1a9f3815c7c</name> <entityField>Duplicates</entityField> <view>DuplicatePersonFilter_view</view> </neonViewReference> <neonViewReference> - <name>78a658a3-680b-4420-85a2-6e99ccff9f94</name> - <entityField>DSGVOEntries</entityField> - <view>DSGVOFilter_view</view> + <name>5754fc3a-c81c-42ba-90ea-2859b10bb391</name> + <entityField>LogHistories</entityField> + <view>LogHistoryFilter_view</view> </neonViewReference> </children> </neonView> -- GitLab From 170bc9386e7d0531c28e34c8f37870ad6384726c Mon Sep 17 00:00:00 2001 From: Sebastian Pongratz <s.pongratz@adito.de> Date: Tue, 4 May 2021 09:26:21 +0000 Subject: [PATCH 136/242] [Projekt: xRM-ContactManagement][TicketNr.: 1074489][Bild in einer HTML-Editor-Komponente speichern (hochladen)] --- .../recordcontainers/db/onDBDelete.js | 3 + .../recordcontainers/db/onDBDelete.js | 4 + .../recordcontainers/db/onDBDelete.js | 11 ++- .../KnowledgeManagement_entity.aod | 87 ++++++++++--------- .../recordcontainers/db/onDBDelete.js | 3 + process/Document_lib/process.js | 22 ++++- 6 files changed, 82 insertions(+), 48 deletions(-) create mode 100644 entity/KnowledgeManagement_entity/recordcontainers/db/onDBDelete.js diff --git a/entity/Activity_entity/recordcontainers/db/onDBDelete.js b/entity/Activity_entity/recordcontainers/db/onDBDelete.js index 92347de26d..0ca8885634 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/BulkMail_entity/recordcontainers/db/onDBDelete.js b/entity/BulkMail_entity/recordcontainers/db/onDBDelete.js index 69fbfd853d..aaa02ff807 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/DocumentTemplate_entity/recordcontainers/db/onDBDelete.js b/entity/DocumentTemplate_entity/recordcontainers/db/onDBDelete.js index e59e3a882a..e462cebdbd 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/KnowledgeManagement_entity/KnowledgeManagement_entity.aod b/entity/KnowledgeManagement_entity/KnowledgeManagement_entity.aod index 4cc143f137..515e42af17 100644 --- a/entity/KnowledgeManagement_entity/KnowledgeManagement_entity.aod +++ b/entity/KnowledgeManagement_entity/KnowledgeManagement_entity.aod @@ -102,32 +102,32 @@ <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> @@ -151,37 +151,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,11 +197,6 @@ <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> @@ -210,17 +210,17 @@ <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 +229,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 +281,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 +297,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 +319,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 +353,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 0000000000..2a22a7d643 --- /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/process/Document_lib/process.js b/process/Document_lib/process.js index ee264f730e..bf9a2ba925 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"); @@ -34,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") @@ -101,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 -- GitLab From 03b60e9257dad7db31ec7fddfbbbcbbe87151c03 Mon Sep 17 00:00:00 2001 From: Sebastian Pongratz <s.pongratz@adito.de> Date: Tue, 4 May 2021 09:34:27 +0000 Subject: [PATCH 137/242] =?UTF-8?q?[Projekt:=20xRM-ContactManagement][Tick?= =?UTF-8?q?etNr.:=201080009][Status=20"F=C3=BCr=20L=C3=B6schung=20vorgeseh?= =?UTF-8?q?en"=20bleibt=20bestehen,=20so=20lange=20ein=20L=C3=B6schkennzei?= =?UTF-8?q?chen=20vorhanden=20ist.]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entityfields/reason/dropDownProcess.js | 3 --- .../recordcontainers/db/onDBDelete.js | 4 ++++ language/_____LANGUAGE_de/_____LANGUAGE_de.aod | 12 ++++++------ 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/entity/DSGVOConfiguration_entity/entityfields/reason/dropDownProcess.js b/entity/DSGVOConfiguration_entity/entityfields/reason/dropDownProcess.js index 11968ec24e..a488f2d4c2 100644 --- a/entity/DSGVOConfiguration_entity/entityfields/reason/dropDownProcess.js +++ b/entity/DSGVOConfiguration_entity/entityfields/reason/dropDownProcess.js @@ -1,4 +1,3 @@ -import("system.logging"); import("system.result"); import("KeywordRegistry_basic"); import("Keyword_lib"); @@ -7,6 +6,4 @@ let keywords = KeywordUtils.getEntryNamesAndIdsByContainer($KeywordRegistry.dsgv keywords.shift(); -logging.log(JSON.stringify(keywords)); - result.object(keywords); \ No newline at end of file diff --git a/entity/DSGVOConfiguration_entity/recordcontainers/db/onDBDelete.js b/entity/DSGVOConfiguration_entity/recordcontainers/db/onDBDelete.js index e291fe5c7e..f0ff8160c6 100644 --- a/entity/DSGVOConfiguration_entity/recordcontainers/db/onDBDelete.js +++ b/entity/DSGVOConfiguration_entity/recordcontainers/db/onDBDelete.js @@ -1,3 +1,4 @@ +import("system.SQLTYPES"); import("KeywordRegistry_basic"); import("Sql_lib"); import("system.vars"); @@ -10,6 +11,9 @@ newWhereIfSet("CONTACT.STATUS", $KeywordRegistry.contactStatus$markToDelete()) .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) diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod index 9b42ae27aa..bcc0fd1503 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -11114,7 +11114,7 @@ Bitte Datumseingabe prüfen</value> </entry> <entry> <key>Marked for deletion</key> - <value>Makiert zum Löschen</value> + <value>Markiert zum Löschen</value> </entry> <entry> <key>Add Manual Delete Flag</key> @@ -11130,7 +11130,7 @@ Bitte Datumseingabe prüfen</value> </entry> <entry> <key>Mark to Delete</key> - <value>Makieren zum Löschen</value> + <value>Markieren zum Löschen</value> </entry> <entry> <key>Is an active employee</key> @@ -11157,11 +11157,11 @@ Bitte Datumseingabe prüfen</value> </entry> <entry> <key>Mark all to delete</key> - <value>Makiere alle zum Löschen</value> + <value>Markiere alle zum Löschen</value> </entry> <entry> <key>Mark selection to delete</key> - <value>Makiere selectierte zum Löschen</value> + <value>Markiere selektierte zum Löschen</value> </entry> <entry> <key>consent pending</key> @@ -11177,11 +11177,11 @@ Bitte Datumseingabe prüfen</value> </entry> <entry> <key>Do you want to delete the flags of the already maked Persons?</key> - <value>Möchtest du die bereits gesetzten Makierungen löschen?</value> + <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 makrierten Personen anonymisieren?</value> + <value>Möchtest wirklich alle zur Löschung markierten Personen anonymisieren?</value> </entry> <entry> <key>FILE MISSING</key> -- GitLab From d688dc0ffa4b7b18a2bda37d93ecbe421ecef840 Mon Sep 17 00:00:00 2001 From: Daniel Tran <d.tran@adito.de> Date: Tue, 4 May 2021 10:07:30 +0000 Subject: [PATCH 138/242] [Projekt: xRM-ContactManagement][TicketNr.: 1075174][Kontakt - Beziehung Werbezielgruppe - ID als Link angezeigt, Fehlermeldung beim klick auf die ID] - Fixed permuted if-statement. --- .../generatedData/ab_objectrelationtype.xml | 8 ++++---- .../ObjectRelationType_entity.aod | 17 ++++++++++++++--- .../children/blacklist_param/valueProcess.js | 3 +++ .../invertblacklist_param/valueProcess.js | 3 +++ entity/ObjectTree_entity/ObjectTree_entity.aod | 1 + .../entityfields/target_context/valueProcess.js | 5 +---- .../treeprovider/documentation.adoc | 3 +++ .../_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod | 12 ++++++++++++ language/_____LANGUAGE_de/_____LANGUAGE_de.aod | 8 ++++++++ language/_____LANGUAGE_en/_____LANGUAGE_en.aod | 12 ++++++++++++ 10 files changed, 61 insertions(+), 11 deletions(-) create mode 100644 entity/ObjectRelationType_entity/entityfields/contexts/children/blacklist_param/valueProcess.js create mode 100644 entity/ObjectRelationType_entity/entityfields/contexts/children/invertblacklist_param/valueProcess.js create mode 100644 entity/ObjectTree_entity/entityfields/treeprovider/documentation.adoc diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/ab_objectrelationtype.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/ab_objectrelationtype.xml index 2231334c01..54c82b6ecb 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/entity/ObjectRelationType_entity/ObjectRelationType_entity.aod b/entity/ObjectRelationType_entity/ObjectRelationType_entity.aod index 4da3974ee6..3ed24f67b2 100644 --- a/entity/ObjectRelationType_entity/ObjectRelationType_entity.aod +++ b/entity/ObjectRelationType_entity/ObjectRelationType_entity.aod @@ -66,7 +66,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 +74,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 +104,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> 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 0000000000..a4c5350f95 --- /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 0000000000..e5bfa3bbe7 --- /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 f3a46c5839..462a0a7c15 100644 --- a/entity/ObjectTree_entity/ObjectTree_entity.aod +++ b/entity/ObjectTree_entity/ObjectTree_entity.aod @@ -18,6 +18,7 @@ <name>TreeProvider</name> <targetContextField>TARGET_CONTEXT</targetContextField> <targetIdField>TARGET_ID</targetIdField> + <documentation>%aditoprj%/entity/ObjectTree_entity/entityfields/treeprovider/documentation.adoc</documentation> <dependencies> <entityDependency> <name>f4c0605f-3ccb-4ff1-b460-7268e8553857</name> diff --git a/entity/ObjectTree_entity/entityfields/target_context/valueProcess.js b/entity/ObjectTree_entity/entityfields/target_context/valueProcess.js index cd4083fad2..3e02447bb6 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 0000000000..3129116b5e --- /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/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index 39e75b0b8b..8a73c7e6f4 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -8563,6 +8563,18 @@ <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> </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 bcc0fd1503..0fc3fda74f 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -11272,6 +11272,14 @@ Bitte Datumseingabe prüfen</value> <key>Post office box number</key> <value>Postfachnummer</value> </entry> + <entry> + <key>Object type 1</key> + <value>Objekttyp 1</value> + </entry> + <entry> + <key>Object type 2</key> + <value>Objekttyp 2</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 610381d736..412cb297fe 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -8648,6 +8648,18 @@ <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> </keyValueMap> <font name="Dialog" style="0" size="11" /> </language> -- GitLab From cbc430c198f85f8431ff20e5bf90230d99c51888 Mon Sep 17 00:00:00 2001 From: "m.groppe" <m.groppe@adito.de> Date: Tue, 4 May 2021 13:04:36 +0200 Subject: [PATCH 139/242] =?UTF-8?q?[Projekt:=20xRM-Marketing][TicketNr.:?= =?UTF-8?q?=201079868][Redesign:=20Opener=20Link=20Ersetzung=20muss=20auf?= =?UTF-8?q?=20Grund=20Mosaico=20Einschr=C3=A4nkungen=20=C3=BCberarbeitet?= =?UTF-8?q?=20werden]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- process/Bulkmail_lib/process.js | 22 ++++------------------ process/DocumentTemplate_lib/process.js | 8 ++------ 2 files changed, 6 insertions(+), 24 deletions(-) diff --git a/process/Bulkmail_lib/process.js b/process/Bulkmail_lib/process.js index da334e18d5..db558c2dbe 100644 --- a/process/Bulkmail_lib/process.js +++ b/process/Bulkmail_lib/process.js @@ -133,24 +133,10 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pIsTestRun) { if (Utils.toBoolean(isRedirect)) { - var linkFn; - //Mosaico places a url in front of the placeholder if it gets placed inside image src - //so we temporarily create the whole html tag with a placeholder for the opener until this is solved - if (placeholder == "pixel") - { - linkFn = function (pContactId) - { - return "<img src=\""+baseUrl + "link=" + weblinkId + "&log=" + mailLogIds.get(pContactId)+"\" alt=\"\" width=\"1\" height=\"1\" border=\"0\" hspace=\"0\" vspace=\"0\" align=\"top\">"; - } - } - else - { - linkFn = function (pContactId) - { - return baseUrl + "link=" + weblinkId + "&log=" + mailLogIds.get(pContactId); - } - } - + 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); diff --git a/process/DocumentTemplate_lib/process.js b/process/DocumentTemplate_lib/process.js index 7b046d54e1..99be3eedc8 100644 --- a/process/DocumentTemplate_lib/process.js +++ b/process/DocumentTemplate_lib/process.js @@ -438,12 +438,8 @@ DocumentTemplate.prototype.getReplacedContent = function (pReplacements) case DocumentTemplate.types.HTML: // replaces ä, ö, ü, ... with html escape signs for (let i in pReplacements) - { - //we need to write a full html tag and not only text for the opener pixel at the moment - if(i != "{@pixel@}") - { - pReplacements[i] = text.text2html(pReplacements[i], false); - } + { + pReplacements[i] = text.text2html(pReplacements[i], false); } case DocumentTemplate.types.TXT: let decodedContent = util.decodeBase64String(content); -- GitLab From d4e47c985a2ee6ad7a968218a3d549d43a2bdf91 Mon Sep 17 00:00:00 2001 From: Benjamin Ulrich <b.ulrich@adito.de> Date: Tue, 4 May 2021 09:32:18 +0000 Subject: [PATCH 140/242] Merge branch 'cm_ChangeSortingTaps' into '2021.0' Change taps sorting and delete second data privacy tap See merge request xrm/basic!912 (cherry picked from commit f67b53ef6858582404080ad14ce63a0c166d3a0f) a7e858b4 Change taps sorting and delete second data privacy tap --- neonView/PersonMain_view/PersonMain_view.aod | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/neonView/PersonMain_view/PersonMain_view.aod b/neonView/PersonMain_view/PersonMain_view.aod index cfbe086984..5a8f4d9906 100644 --- a/neonView/PersonMain_view/PersonMain_view.aod +++ b/neonView/PersonMain_view/PersonMain_view.aod @@ -55,29 +55,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>f0895c2a-5517-4c7b-80ed-147e4078603d</name> <entityField>#ENTITY</entityField> <view>PersonDSGVO_view</view> </neonViewReference> - <neonViewReference> - <name>82f19c55-fa96-43de-9f26-46069b28db31</name> - <entityField>#ENTITY</entityField> - <view>PersonMarketing_view</view> - </neonViewReference> <neonViewReference> <name>24ea8bc9-7ed0-4bed-a984-b1a9f3815c7c</name> <entityField>Duplicates</entityField> <view>DuplicatePersonFilter_view</view> </neonViewReference> <neonViewReference> - <name>78a658a3-680b-4420-85a2-6e99ccff9f94</name> - <entityField>DSGVOEntries</entityField> - <view>DSGVOFilter_view</view> + <name>5754fc3a-c81c-42ba-90ea-2859b10bb391</name> + <entityField>LogHistories</entityField> + <view>LogHistoryFilter_view</view> </neonViewReference> </children> </neonView> -- GitLab From b2d2e323196ed10a57b8175100a61974a4b83184 Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Tue, 4 May 2021 14:05:45 +0200 Subject: [PATCH 141/242] 1079500 liquibase script to migrate commRestriction --- .../CommunicationSettings/changelog.xml | 1 + .../insert_commRestrictions.xml | 36 +++++++++++++++++++ .../generatedData/commrestriction.xml | 13 ------- 3 files changed, 37 insertions(+), 13 deletions(-) create mode 100644 .liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_commRestrictions.xml delete mode 100644 .liquibase/Data_alias/basic/_demoData/generatedData/commrestriction.xml diff --git a/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/changelog.xml index 985bb74bdd..7f9a276d0e 100644 --- a/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/changelog.xml @@ -7,4 +7,5 @@ <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/insert_commRestrictions.xml b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_commRestrictions.xml new file mode 100644 index 0000000000..d33aa58ab2 --- /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/_demoData/generatedData/commrestriction.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/commrestriction.xml deleted file mode 100644 index 4bfd0d305d..0000000000 --- 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 -- GitLab From 1b8b0da71aeed94774985c6a36e76a77216b8c6c Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Tue, 4 May 2021 17:50:12 +0200 Subject: [PATCH 142/242] 1080071 communication rejection summary in preview --- .../CommunicationSettings_entity.aod | 4 ++ .../blacklistids_param/valueProcess.js | 4 ++ .../Organisation_entity.aod | 3 +- .../displayValueProcess.js | 8 --- .../commrestrictions_active/valueProcess.js | 9 ++++ .../expression.js | 4 -- entity/Person_entity/Person_entity.aod | 7 +-- .../displayValueProcess.js | 8 --- .../commrestrictions_active/valueProcess.js | 9 ++++ .../expression.js | 4 -- .../_____LANGUAGE_de/_____LANGUAGE_de.aod | 4 ++ process/Contact_lib/process.js | 54 ++++++++++--------- process/Observation_lib/process.js | 14 ++--- 13 files changed, 72 insertions(+), 60 deletions(-) create mode 100644 entity/CommunicationSettings_entity/entityfields/mediumkeyword/children/blacklistids_param/valueProcess.js delete mode 100644 entity/Organisation_entity/entityfields/commrestrictions_active/displayValueProcess.js create mode 100644 entity/Organisation_entity/entityfields/commrestrictions_active/valueProcess.js delete mode 100644 entity/Organisation_entity/recordcontainers/db/recordfieldmappings/commrestrictions_active.value/expression.js delete mode 100644 entity/Person_entity/entityfields/commrestrictions_active/displayValueProcess.js create mode 100644 entity/Person_entity/entityfields/commrestrictions_active/valueProcess.js delete mode 100644 entity/Person_entity/recordcontainers/db/recordfieldmappings/commrestrictions_active.value/expression.js diff --git a/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod b/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod index eb42697bc6..3c3d5fcfce 100644 --- a/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod +++ b/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod @@ -149,6 +149,10 @@ <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> 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 0000000000..283448c24c --- /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/Organisation_entity/Organisation_entity.aod b/entity/Organisation_entity/Organisation_entity.aod index 00cb66a88c..d851c8dec5 100644 --- a/entity/Organisation_entity/Organisation_entity.aod +++ b/entity/Organisation_entity/Organisation_entity.aod @@ -958,7 +958,7 @@ <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> @@ -1652,7 +1652,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> 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 7ab26545fc..0000000000 --- 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 0000000000..eb0180412d --- /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/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 5c633cb5d6..0000000000 --- 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/Person_entity/Person_entity.aod b/entity/Person_entity/Person_entity.aod index 72bf02195b..1426af8122 100644 --- a/entity/Person_entity/Person_entity.aod +++ b/entity/Person_entity/Person_entity.aod @@ -939,8 +939,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> @@ -1618,7 +1617,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> @@ -1693,6 +1691,9 @@ <isFilterable v="true" /> <filtertype>EXTENDED</filtertype> </consumerMapping> + <consumerMapping> + <name>ContactCommunicationSettings</name> + </consumerMapping> </recordFieldMappings> <linkInformation> <linkInformation> 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 89026aeebe..0000000000 --- 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 0000000000..eb0180412d --- /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/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 5c633cb5d6..0000000000 --- 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/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod index 0fc3fda74f..18fb7588a4 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -54,6 +54,10 @@ <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>No advertising</key> + <value>Keine Werbung</value> + </entry> <entry> <key>Value is too small, the minimum is %0</key> <value>Wert ist zu klein, das Minimum ist %0</value> diff --git a/process/Contact_lib/process.js b/process/Contact_lib/process.js index 261d7d63d4..d154f286f5 100644 --- a/process/Contact_lib/process.js +++ b/process/Contact_lib/process.js @@ -603,37 +603,41 @@ ContactUtils.hasCommRestriction = function(pContactId, pMedium, pStartDate) } /** - * 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(), "COMMUNICATIONSETTINGS.MEDIUM"); - var mask = new SqlMaskingUtils() - - 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 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 group = mask.getGroupConcat("DISTINCT "+mediumList, "', '"); - var subselect = "''"; - if(group) + if (communicationRejections.length > 0) { - var res = newSelect(group).from("COMMUNICATIONSETTINGS") - .where("COMMUNICATIONSETTINGS.CONTACT_ID = CONTACT.CONTACTID") - .and("COMMUNICATIONSETTINGS.STATUS", $KeywordRegistry.communicationSettingStatus$rejected()) - - var subres = newSelect(group).from("COMMUNICATIONSETTINGS") - .where("COMMUNICATIONSETTINGS.CONTACT_ID in ( "+orgContactSubselect.toString()+")") - .and("COMMUNICATIONSETTINGS.STATUS", $KeywordRegistry.communicationSettingStatus$rejected()) - - 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/Observation_lib/process.js b/process/Observation_lib/process.js index b2e80061c7..b67681a784 100644 --- a/process/Observation_lib/process.js +++ b/process/Observation_lib/process.js @@ -637,22 +637,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 }); } -- GitLab From 44518e42f35771a8e03a1ed3750effa097bf8e30 Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Wed, 5 May 2021 09:45:03 +0200 Subject: [PATCH 143/242] 1080363 optimized setCommunicationSetting_workflowService --- process/Bulkmail_lib/process.js | 10 +++++-- ...etCommunicationSetting_workflowService.aod | 1 + .../process.js | 28 +++++++++++++++---- .../serviceTaskParameterProcess.js | 15 ++++++++++ 4 files changed, 46 insertions(+), 8 deletions(-) create mode 100644 process/SetCommunicationSetting_workflowService/serviceTaskParameterProcess.js diff --git a/process/Bulkmail_lib/process.js b/process/Bulkmail_lib/process.js index da334e18d5..2140900b96 100644 --- a/process/Bulkmail_lib/process.js +++ b/process/Bulkmail_lib/process.js @@ -673,10 +673,16 @@ BulkMailUtils.startBulkmailWorkFlow = function(pMailLogId, pLinkId) .from("WEBLINK") .where("WEBLINK.WEBLINKID", pLinkId) .arrayRow(); - + + var contactId = newSelect("CONTACT_ID") + .from("MAIL_LOG") + .where("MAIL_LOG.MAIL_LOGID", pMailLogId) + .cell(); + var variables = { "mailLogId": pMailLogId, - "linkId": pLinkId + "linkId": pLinkId, + "contactId": contactId }; if (actionType == $KeywordRegistry.weblinkActionType$startWorkflow() && workflowKey) { diff --git a/process/SetCommunicationSetting_workflowService/SetCommunicationSetting_workflowService.aod b/process/SetCommunicationSetting_workflowService/SetCommunicationSetting_workflowService.aod index ded82a9d7a..cec630dd26 100644 --- a/process/SetCommunicationSetting_workflowService/SetCommunicationSetting_workflowService.aod +++ b/process/SetCommunicationSetting_workflowService/SetCommunicationSetting_workflowService.aod @@ -4,6 +4,7 @@ <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> diff --git a/process/SetCommunicationSetting_workflowService/process.js b/process/SetCommunicationSetting_workflowService/process.js index 8aa215483e..8d65044041 100644 --- a/process/SetCommunicationSetting_workflowService/process.js +++ b/process/SetCommunicationSetting_workflowService/process.js @@ -6,16 +6,32 @@ import("system.vars"); var variables = JSON.parse(vars.get("$local.value")); var contactId = variables.contactId || variables.targetId; var channelType = variables.channelType; -var channelId = variables.channelId; +var medium = variables.medium || ""; +var channelId = variables.channelId || ""; var status = variables.status || $KeywordRegistry.communicationSettingStatus$rejected(); -var settingsId = newSelect("COMMUNICATIONSETTINGSID") +var settingsIdSql = newSelect("COMMUNICATIONSETTINGSID") .from("COMMUNICATIONSETTINGS") .where("COMMUNICATIONSETTINGS.CONTACT_ID", contactId) - .and("COMMUNICATIONSETTINGS.CHANNEL_TYPE", channelType) - .and("COMMUNICATIONSETTINGS.CHANNEL_ID", channelId) - .cell(); - + .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"); +} + if (settingsId) { newWhere("COMMUNICATIONSETTINGS.COMMUNICATIONSETTINGSID") diff --git a/process/SetCommunicationSetting_workflowService/serviceTaskParameterProcess.js b/process/SetCommunicationSetting_workflowService/serviceTaskParameterProcess.js new file mode 100644 index 0000000000..3b4e5b8a16 --- /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 -- GitLab From cec0bceb1159d21f7fba0de2f8e6b0a1a43a8141 Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Wed, 5 May 2021 09:46:49 +0200 Subject: [PATCH 144/242] 1080363 setCommunicationSetting_workflowService fix --- process/SetCommunicationSetting_workflowService/process.js | 1 + 1 file changed, 1 insertion(+) diff --git a/process/SetCommunicationSetting_workflowService/process.js b/process/SetCommunicationSetting_workflowService/process.js index 8d65044041..c1496c175d 100644 --- a/process/SetCommunicationSetting_workflowService/process.js +++ b/process/SetCommunicationSetting_workflowService/process.js @@ -31,6 +31,7 @@ else { settingsIdSql.and("COMMUNICATIONSETTINGS.CHANNEL_ID is null"); } +var settingsId = settingsIdSql.cell(); if (settingsId) { -- GitLab From 467e8357ebed84903dda907598d3139653412310 Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Wed, 5 May 2021 09:59:49 +0200 Subject: [PATCH 145/242] 1080363 setCommunicationSetting_workflowService fix --- process/SetCommunicationSetting_workflowService/process.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/process/SetCommunicationSetting_workflowService/process.js b/process/SetCommunicationSetting_workflowService/process.js index c1496c175d..093920c3f8 100644 --- a/process/SetCommunicationSetting_workflowService/process.js +++ b/process/SetCommunicationSetting_workflowService/process.js @@ -35,7 +35,7 @@ var settingsId = settingsIdSql.cell(); if (settingsId) { - newWhere("COMMUNICATIONSETTINGS.COMMUNICATIONSETTINGSID") + newWhere("COMMUNICATIONSETTINGS.COMMUNICATIONSETTINGSID", settingsId) .updateFields({"STATUS": status}); } else -- GitLab From 0fcaba270fc8124f093d521acbec9a530817d20b Mon Sep 17 00:00:00 2001 From: "m.groppe" <m.groppe@adito.de> Date: Mon, 3 May 2021 18:09:40 +0200 Subject: [PATCH 146/242] [Projekt: xRM-Marketing][TicketNr.: 1080212][Webview / View in browser Platzhalter] --- process/Bulkmail_lib/process.js | 10 +++++- process/webview_rest/process.js | 44 +++++++++++++++++++++++++++ process/webview_rest/webview_rest.aod | 15 +++++++++ 3 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 process/webview_rest/process.js create mode 100644 process/webview_rest/webview_rest.aod diff --git a/process/Bulkmail_lib/process.js b/process/Bulkmail_lib/process.js index da334e18d5..5308da47b3 100644 --- a/process/Bulkmail_lib/process.js +++ b/process/Bulkmail_lib/process.js @@ -156,10 +156,18 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pIsTestRun) 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, linkPlaceholders); + var mails = template.getReplacedEmailsByContactIds(contactIds, additionalPlaceholders); var subjectTemplate = new DocumentTemplate(subject, DocumentTemplate.types.PLAIN); var subjects = subjectTemplate.getReplacedContentByContactIds(contactIds); diff --git a/process/webview_rest/process.js b/process/webview_rest/process.js new file mode 100644 index 0000000000..ec9191374d --- /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 0000000000..75dd991891 --- /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> -- GitLab From 73863e2901d4ab79a5f947c21c14390c74137005 Mon Sep 17 00:00:00 2001 From: "m.groppe" <m.groppe@adito.de> Date: Wed, 5 May 2021 12:04:09 +0200 Subject: [PATCH 147/242] liquibase fix --- .liquibase/Data_alias/basic/2021.0.3/Bulkmail/changelog.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/changelog.xml index 2453f645af..60465db554 100644 --- a/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/Bulkmail/changelog.xml @@ -4,7 +4,7 @@ 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"/> + <include relativeToChangelogFile="true" file="AddBulkmailStatus.xml"/> <include relativeToChangelogFile="true" file="createMailLog.xml"/> <include relativeToChangelogFile="true" file="createMailRun.xml"/> <include relativeToChangelogFile="true" file="createBulkMailTestRecipient.xml"/> -- GitLab From b58102b9511261b24ddcd8461361792422b4d4cb Mon Sep 17 00:00:00 2001 From: "m.groppe" <m.groppe@adito.de> Date: Wed, 5 May 2021 15:45:13 +0200 Subject: [PATCH 148/242] added brackets for subsql --- process/MarketingCondition_lib/process.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/process/MarketingCondition_lib/process.js b/process/MarketingCondition_lib/process.js index 3303f7733c..daad96cdd6 100644 --- a/process/MarketingCondition_lib/process.js +++ b/process/MarketingCondition_lib/process.js @@ -56,7 +56,7 @@ CommunicationSettingsCondition.prototype.medium = function (pMedium, pAddressSql this._channelType = $KeywordRegistry.communicationChannelType$communication(); this._medium = pMedium; if (pAddressSql) - this._channelIdSql = pAddressSql; + this._channelIdSql = "( "+ pAddressSql + " )"; return this; } @@ -80,7 +80,7 @@ CommunicationSettingsCondition.prototype.emails = function (pAddressSql) CommunicationSettingsCondition.prototype.address = function (pAddressSql) { this._channelType = $KeywordRegistry.communicationChannelType$address(); - this._channelIdSql = pAddressSql; + this._channelIdSql = "( "+ pAddressSql + " )"; return this; } -- GitLab From f611c629c06ff75e633f80ebc9bb2db68ee8b0c8 Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Wed, 5 May 2021 15:51:05 +0200 Subject: [PATCH 149/242] 1080447 bugfix for add bulkmail recipients action --- .../BulkMailAddRecipients_entity.aod | 33 ++++++++----------- .../addrecipients/onActionProcess.js | 2 +- .../addrecipients/stateProcess.js | 6 ++-- .../documentation.adoc | 0 .../currentrecipientcount/valueProcess.js | 11 +++++++ .../currentrecipients/valueProcess.js | 15 --------- .../documentation.adoc | 0 .../futurerecipientcount/valueProcess.js | 8 +++++ .../futurerecipients/valueProcess.js | 9 ----- .../notaddedcount/valueProcess.js | 8 +++++ .../proposedcontactids/valueProcess.js | 17 ++++++++++ .../recipientcontactids/valueProcess.js | 24 -------------- .../recipientcount/documentation.adoc | 6 ---- .../recipientcount/valueProcess.js | 11 ------- .../recipientcountmessage/valueProcess.js | 25 +++++++------- .../validcontactids/valueProcess.js | 14 ++++++++ .../BulkMailAddRecipientsEdit_view.aod | 4 +-- 17 files changed, 93 insertions(+), 100 deletions(-) rename entity/BulkMailAddRecipients_entity/entityfields/{currentrecipients => currentrecipientcount}/documentation.adoc (100%) create mode 100644 entity/BulkMailAddRecipients_entity/entityfields/currentrecipientcount/valueProcess.js delete mode 100644 entity/BulkMailAddRecipients_entity/entityfields/currentrecipients/valueProcess.js rename entity/BulkMailAddRecipients_entity/entityfields/{futurerecipients => futurerecipientcount}/documentation.adoc (100%) create mode 100644 entity/BulkMailAddRecipients_entity/entityfields/futurerecipientcount/valueProcess.js delete mode 100644 entity/BulkMailAddRecipients_entity/entityfields/futurerecipients/valueProcess.js create mode 100644 entity/BulkMailAddRecipients_entity/entityfields/notaddedcount/valueProcess.js create mode 100644 entity/BulkMailAddRecipients_entity/entityfields/proposedcontactids/valueProcess.js delete mode 100644 entity/BulkMailAddRecipients_entity/entityfields/recipientcontactids/valueProcess.js delete mode 100644 entity/BulkMailAddRecipients_entity/entityfields/recipientcount/documentation.adoc delete mode 100644 entity/BulkMailAddRecipients_entity/entityfields/recipientcount/valueProcess.js create mode 100644 entity/BulkMailAddRecipients_entity/entityfields/validcontactids/valueProcess.js diff --git a/entity/BulkMailAddRecipients_entity/BulkMailAddRecipients_entity.aod b/entity/BulkMailAddRecipients_entity/BulkMailAddRecipients_entity.aod index a43dd1134f..e7f67f8f1e 100644 --- a/entity/BulkMailAddRecipients_entity/BulkMailAddRecipients_entity.aod +++ b/entity/BulkMailAddRecipients_entity/BulkMailAddRecipients_entity.aod @@ -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 cce82d39ab..d8057fbcae 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 361fb44059..8d4f43e10f 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 0000000000..8aa9feddbe --- /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 ab684915b0..0000000000 --- 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 0000000000..afd4e40de1 --- /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 9c50bb1b4d..0000000000 --- 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 0000000000..83d9b3c1ff --- /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 0000000000..abc1e78c4e --- /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 02d7fa1e67..0000000000 --- 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 cb66eaab85..0000000000 --- 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 d04634f708..0000000000 --- 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 80f08142f0..67be755484 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 0000000000..2df0a16474 --- /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/neonView/BulkMailAddRecipientsEdit_view/BulkMailAddRecipientsEdit_view.aod b/neonView/BulkMailAddRecipientsEdit_view/BulkMailAddRecipientsEdit_view.aod index 4ecfda58d2..383d48350e 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> -- GitLab From 3f8a863aafb95c51961c6251dbce4b28bf57d502 Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Wed, 5 May 2021 16:17:27 +0200 Subject: [PATCH 150/242] 1079500 fixed liquibase file --- .../insert_commRestrictions.xml | 10 ++--- .../insert_iconsCommChannelType.xml | 38 ------------------- 2 files changed, 5 insertions(+), 43 deletions(-) delete mode 100644 .liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_iconsCommChannelType.xml 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 index d33aa58ab2..60be8d3018 100644 --- a/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_commRestrictions.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_commRestrictions.xml @@ -5,30 +5,30 @@ <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' + 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 + 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 + 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 + 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 + select SYS_GUID(), COMMUNICATIONSETTINGSID, CURRENT_TIMESTAMP, 'Admin', 1, REASON from COMMUNICATIONSETTINGS join COMMRESTRICTION on COMMUNICATIONSETTINGS.COMMUNICATIONSETTINGSID = COMMRESTRICTION.COMMRESTRICTIONID; </sql> diff --git a/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_iconsCommChannelType.xml b/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_iconsCommChannelType.xml deleted file mode 100644 index 7e4a3495df..0000000000 --- a/.liquibase/Data_alias/basic/2021.0.3/CommunicationSettings/insert_iconsCommChannelType.xml +++ /dev/null @@ -1,38 +0,0 @@ -<?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="6f8ade49-21aa-4ac6-8a7f-3ddd1c619d95"> - <insert tableName="AB_KEYWORD_ATTRIBUTE"> - <column name="AB_KEYWORD_ATTRIBUTEID" value="f1841bca-e937-44f6-ba94-0e321e81e960"/> - <column name="AB_KEYWORD_CATEGORY_ID" value=""/> - <column name="CONTAINER" value=""/> - <column name="KIND" value="CHAR_VALUE"/> - <column name="NAME" value="iconApproved"/> - </insert> - <insert tableName="AB_KEYWORD_ATTRIBUTERELATION"> - <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="c497054c-93ff-4436-9cb5-94661fe99a7c"/> - <column name="AB_KEYWORD_ATTRIBUTE_ID" value="f1841bca-e937-44f6-ba94-0e321e81e960"/> - <column name="AB_KEYWORD_ENTRY_ID" value="a395d73b-6780-41d2-9934-70d4f4a021ff"/> - <column name="CHAR_VALUE" value="VAADIN:USER"/> - </insert> - <insert tableName="AB_KEYWORD_ATTRIBUTERELATION"> - <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="c640739d-c38f-456b-9083-f3fedb0ddaaa"/> - <column name="AB_KEYWORD_ATTRIBUTE_ID" value="f1841bca-e937-44f6-ba94-0e321e81e960"/> - <column name="AB_KEYWORD_ENTRY_ID" value="10451ef3-9fee-41f9-88f2-8e3c0b326dab"/> - <column name="CHAR_VALUE" value=""/> - </insert> - <insert tableName="AB_KEYWORD_ATTRIBUTERELATION"> - <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="a8c8208c-b1e7-41ed-9b9d-829912930a1b"/> - <column name="AB_KEYWORD_ATTRIBUTE_ID" value="f1841bca-e937-44f6-ba94-0e321e81e960"/> - <column name="AB_KEYWORD_ENTRY_ID" value="49786329-801b-4adf-b5f9-34234d65111b"/> - <column name="CHAR_VALUE" value=""/> - </insert> - <insert tableName="AB_KEYWORD_ATTRIBUTERELATION"> - <column name="AB_KEYWORD_ATTRIBUTERELATIONID" value="c9a818a2-12c1-424b-9f9b-d731eb91d1f6"/> - <column name="AB_KEYWORD_ATTRIBUTE_ID" value="f1841bca-e937-44f6-ba94-0e321e81e960"/> - <column name="AB_KEYWORD_ENTRY_ID" value="b1234ea8-f560-401d-b63a-06497c873fec"/> - <column name="CHAR_VALUE" value=""/> - </insert> - </changeSet> -</databaseChangeLog> \ No newline at end of file -- GitLab From 06fb1278f66ed7365148b9c39a5cc46faa05e19a Mon Sep 17 00:00:00 2001 From: "m.groppe" <m.groppe@adito.de> Date: Wed, 5 May 2021 17:30:24 +0200 Subject: [PATCH 151/242] =?UTF-8?q?[Projekt:=20xRM-Marketing][TicketNr.:?= =?UTF-8?q?=201080329][Fehler:=20Hinzuf=C3=BCgen=20von=20Empf=C3=A4ngern?= =?UTF-8?q?=20f=C3=BChrt=20ggf.=20zu=20falscher=20E-Mail-Adresse]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BulkMailRecipient_entity.aod | 1 + .../entityfields/contact_id/onValueChange.js | 9 +++++++++ 2 files changed, 10 insertions(+) create mode 100644 entity/BulkMailRecipient_entity/entityfields/contact_id/onValueChange.js diff --git a/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod b/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod index 1166673b57..ef0e595219 100644 --- a/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod +++ b/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod @@ -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> 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 0000000000..07d0537e1e --- /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 -- GitLab From 99813a216118210423aeace717e4bc861468a43c Mon Sep 17 00:00:00 2001 From: Daniel Tran <d.tran@adito.de> Date: Thu, 6 May 2021 10:46:34 +0200 Subject: [PATCH 152/242] =?UTF-8?q?[Projekt:=20xRM-ContactManagement][Tick?= =?UTF-8?q?etNr.:=201079260][Aktivit=C3=A4ten=20die=20zu=20einem=20Kontakt?= =?UTF-8?q?=20mit=20einer=20Firma=20existieren,=20werden=20bei=20Neuanlage?= =?UTF-8?q?=20eines=20Privaten=20Kontakts=20als=20weiter=20Funktion=20mit?= =?UTF-8?q?=20=C3=BCbernommen]=20-=20Customized=20process,=20to=20fix=20mi?= =?UTF-8?q?sbehavior=20that=20activities=20=20=20=20=20of=20parent=20conta?= =?UTF-8?q?ct=20are=20shown=20in=20functions=20(child-contacts).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../recordcontainers/db/conditionProcess.js | 25 +++---------------- 1 file changed, 3 insertions(+), 22 deletions(-) diff --git a/entity/Activity_entity/recordcontainers/db/conditionProcess.js b/entity/Activity_entity/recordcontainers/db/conditionProcess.js index 950fcd1f1d..c89f50125d 100644 --- a/entity/Activity_entity/recordcontainers/db/conditionProcess.js +++ b/entity/Activity_entity/recordcontainers/db/conditionProcess.js @@ -14,28 +14,9 @@ if (vars.exists("$param.RowId_param") && vars.get("$param.RowId_param") && vars. .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")) -- GitLab From 90a30705c204c459b8af72a54c2bb5590c80fae5 Mon Sep 17 00:00:00 2001 From: Benjamin Ulrich <b.ulrich@adito.de> Date: Thu, 6 May 2021 09:35:06 +0000 Subject: [PATCH 153/242] =?UTF-8?q?[Projekt:=20xRM-Sales][TicketNr.:=20108?= =?UTF-8?q?0111][W=C3=A4hrungsbugs=20und=20unreinheiten=20im=20Angebot=20+?= =?UTF-8?q?=20Angepotsposten]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entity/Offeritem_entity/Offeritem_entity.aod | 6 ++++++ .../entityfields/currency/valueProcess.js | 13 +++++++++++++ entity/Orderitem_entity/Orderitem_entity.aod | 6 ++++++ .../entityfields/currency/valueProcess.js | 13 +++++++++++++ .../entityfields/product_id/onValueChange.js | 6 +++--- .../currentpurchaseprice/valueProcess.js | 12 ++++++++++-- .../entityfields/currentsalesprice/valueProcess.js | 12 ++++++++++-- neonView/OfferitemEdit_view/OfferitemEdit_view.aod | 4 ++++ neonView/OrderitemEdit_view/OrderitemEdit_view.aod | 4 ++++ process/OfferOrder_lib/process.js | 7 ++++++- process/Product_lib/process.js | 4 +++- 11 files changed, 78 insertions(+), 9 deletions(-) create mode 100644 entity/Offeritem_entity/entityfields/currency/valueProcess.js create mode 100644 entity/Orderitem_entity/entityfields/currency/valueProcess.js diff --git a/entity/Offeritem_entity/Offeritem_entity.aod b/entity/Offeritem_entity/Offeritem_entity.aod index 6b56552944..d8cfad37c1 100644 --- a/entity/Offeritem_entity/Offeritem_entity.aod +++ b/entity/Offeritem_entity/Offeritem_entity.aod @@ -296,6 +296,12 @@ <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 0000000000..f125324e59 --- /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/Orderitem_entity/Orderitem_entity.aod b/entity/Orderitem_entity/Orderitem_entity.aod index 68999920ab..054bfac329 100644 --- a/entity/Orderitem_entity/Orderitem_entity.aod +++ b/entity/Orderitem_entity/Orderitem_entity.aod @@ -282,6 +282,12 @@ <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 0000000000..f125324e59 --- /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/product_id/onValueChange.js b/entity/Orderitem_entity/entityfields/product_id/onValueChange.js index 07ed27e6e2..83f60fa1a8 100644 --- a/entity/Orderitem_entity/entityfields/product_id/onValueChange.js +++ b/entity/Orderitem_entity/entityfields/product_id/onValueChange.js @@ -25,10 +25,10 @@ if(pId != "" && vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) 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)//only sum-up this price if there is no valid Price + 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"]); + neon.setFieldValue("$field.PRICE", partsListObject["topProductInfo"]["price"]*quantity); + neon.setFieldValue("$field.VAT", partsListObject["topProductInfo"]["vat"]); } } diff --git a/entity/Product_entity/entityfields/currentpurchaseprice/valueProcess.js b/entity/Product_entity/entityfields/currentpurchaseprice/valueProcess.js index 48d5a48dba..de7096303d 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 6981610dc3..b7abab4378 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/neonView/OfferitemEdit_view/OfferitemEdit_view.aod b/neonView/OfferitemEdit_view/OfferitemEdit_view.aod index 0c19ce2dd1..401e099fe0 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/OrderitemEdit_view/OrderitemEdit_view.aod b/neonView/OrderitemEdit_view/OrderitemEdit_view.aod index 8149fa6360..bc85773ca9 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/process/OfferOrder_lib/process.js b/process/OfferOrder_lib/process.js index 70aee7aa98..0d59b0439d 100644 --- a/process/OfferOrder_lib/process.js +++ b/process/OfferOrder_lib/process.js @@ -628,6 +628,11 @@ 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); + } } }; @@ -669,7 +674,7 @@ ItemUtils.sumUpPricesWhenInserting = function (pStatements, pCorrectOrder, pTree let price = 0; if(pPriceObj[id]) { - price = pPriceObj[id]["price"]*pPriceObj[id]["quantity"]; + 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) diff --git a/process/Product_lib/process.js b/process/Product_lib/process.js index 92cb931a3b..f6b58db1ec 100644 --- a/process/Product_lib/process.js +++ b/process/Product_lib/process.js @@ -29,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"); @@ -49,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")); -- GitLab From 2fb27e55f61d3945795cb0736bb409a4abbe3d09 Mon Sep 17 00:00:00 2001 From: Pascal Neub <p.neub@adito.de> Date: Thu, 6 May 2021 10:00:39 +0000 Subject: [PATCH 154/242] duplicate documentation --- .../DuplicateOrganisation_entity.aod | 1 + .../documentation.adoc | 17 +++++++++++ .../DuplicatePerson_entity.aod | 1 + .../DuplicatePerson_entity/documentation.adoc | 17 +++++++++++ .../DuplicateScanner_entity.aod | 1 - .../documentation.adoc | 30 +++++++++++++++---- .../DuplicateMerge_lib/DuplicateMerge_lib.aod | 1 + process/DuplicateMerge_lib/documentation.adoc | 5 ++++ .../DuplicateScanner_lib.aod | 1 + .../DuplicateScanner_lib/documentation.adoc | 15 ++++++++++ process/IndexSearch_lib/IndexSearch_lib.aod | 1 + process/IndexSearch_lib/documentation.adoc | 3 ++ .../documentation.adoc | 12 ++++++++ .../rebuildDuplicates_serverProcess.aod | 1 + 14 files changed, 100 insertions(+), 6 deletions(-) create mode 100644 entity/DuplicateOrganisation_entity/documentation.adoc create mode 100644 entity/DuplicatePerson_entity/documentation.adoc create mode 100644 process/DuplicateMerge_lib/documentation.adoc create mode 100644 process/DuplicateScanner_lib/documentation.adoc create mode 100644 process/IndexSearch_lib/documentation.adoc create mode 100644 process/rebuildDuplicates_serverProcess/documentation.adoc diff --git a/entity/DuplicateOrganisation_entity/DuplicateOrganisation_entity.aod b/entity/DuplicateOrganisation_entity/DuplicateOrganisation_entity.aod index eb3318d1aa..e651b0227e 100644 --- a/entity/DuplicateOrganisation_entity/DuplicateOrganisation_entity.aod +++ b/entity/DuplicateOrganisation_entity/DuplicateOrganisation_entity.aod @@ -3,6 +3,7 @@ <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" /> diff --git a/entity/DuplicateOrganisation_entity/documentation.adoc b/entity/DuplicateOrganisation_entity/documentation.adoc new file mode 100644 index 0000000000..73695092a6 --- /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/DuplicatePerson_entity/DuplicatePerson_entity.aod b/entity/DuplicatePerson_entity/DuplicatePerson_entity.aod index 2d5dd73d04..76bf7dd0ac 100644 --- a/entity/DuplicatePerson_entity/DuplicatePerson_entity.aod +++ b/entity/DuplicatePerson_entity/DuplicatePerson_entity.aod @@ -3,6 +3,7 @@ <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" /> diff --git a/entity/DuplicatePerson_entity/documentation.adoc b/entity/DuplicatePerson_entity/documentation.adoc new file mode 100644 index 0000000000..8d2e8be6b1 --- /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/DuplicateScanner_entity/DuplicateScanner_entity.aod b/entity/DuplicateScanner_entity/DuplicateScanner_entity.aod index 220ca8da86..b94abcf358 100644 --- a/entity/DuplicateScanner_entity/DuplicateScanner_entity.aod +++ b/entity/DuplicateScanner_entity/DuplicateScanner_entity.aod @@ -97,7 +97,6 @@ <name>DBRecordContainer</name> <onDBInsert>%aditoprj%/entity/DuplicateScanner_entity/recordcontainers/dbrecordcontainer/onDBInsert.js</onDBInsert> <onDBUpdate>%aditoprj%/entity/DuplicateScanner_entity/recordcontainers/dbrecordcontainer/onDBUpdate.js</onDBUpdate> - <onDBDelete>%aditoprj%/entity/DuplicateScanner_entity/recordcontainers/dbrecordcontainer/onDBDelete.js</onDBDelete> <alias>Data_alias</alias> <recordFieldMappings> <dbRecordFieldMapping> diff --git a/entity/DuplicateScanner_entity/documentation.adoc b/entity/DuplicateScanner_entity/documentation.adoc index 6284402b76..63f59e3f44 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/process/DuplicateMerge_lib/DuplicateMerge_lib.aod b/process/DuplicateMerge_lib/DuplicateMerge_lib.aod index bc0eb02352..0b31b47ada 100644 --- a/process/DuplicateMerge_lib/DuplicateMerge_lib.aod +++ b/process/DuplicateMerge_lib/DuplicateMerge_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>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> diff --git a/process/DuplicateMerge_lib/documentation.adoc b/process/DuplicateMerge_lib/documentation.adoc new file mode 100644 index 0000000000..09fc1f7557 --- /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/DuplicateScanner_lib/DuplicateScanner_lib.aod b/process/DuplicateScanner_lib/DuplicateScanner_lib.aod index 6b45659f20..bf45bdb540 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 0000000000..d824334d2f --- /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/IndexSearch_lib/IndexSearch_lib.aod b/process/IndexSearch_lib/IndexSearch_lib.aod index b5a2aacd8c..966a62229e 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 0000000000..e1a46041bb --- /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/rebuildDuplicates_serverProcess/documentation.adoc b/process/rebuildDuplicates_serverProcess/documentation.adoc new file mode 100644 index 0000000000..b76ecd1451 --- /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/rebuildDuplicates_serverProcess.aod b/process/rebuildDuplicates_serverProcess/rebuildDuplicates_serverProcess.aod index 3a72b0bfc4..e28fee4a9b 100644 --- a/process/rebuildDuplicates_serverProcess/rebuildDuplicates_serverProcess.aod +++ b/process/rebuildDuplicates_serverProcess/rebuildDuplicates_serverProcess.aod @@ -5,6 +5,7 @@ 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> -- GitLab From b5ca592c986af89dccd615e4fb46461159b350e4 Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Thu, 6 May 2021 12:59:17 +0200 Subject: [PATCH 155/242] Liquibase and scan service fixes --- .../Data_alias/basic/_demoData/changelog.xml | 1 - aliasDefinition/Data_alias/Data_alias.aod | 1040 +++++++---------- neonContext/Salesproject/Salesproject.aod | 4 - process/Bulkmail_lib/process.js | 12 +- 4 files changed, 460 insertions(+), 597 deletions(-) diff --git a/.liquibase/Data_alias/basic/_demoData/changelog.xml b/.liquibase/Data_alias/basic/_demoData/changelog.xml index 034f757e84..391f71514b 100644 --- a/.liquibase/Data_alias/basic/_demoData/changelog.xml +++ b/.liquibase/Data_alias/basic/_demoData/changelog.xml @@ -21,7 +21,6 @@ <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"/> diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod index 5210015442..c060b095c1 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" /> @@ -1092,8 +1092,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" /> @@ -1120,8 +1120,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" /> @@ -1260,8 +1260,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 +1301,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 +1315,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 +1377,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 +1437,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 +1537,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 +1556,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 +1677,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 +1793,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 +1821,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 +1848,7 @@ <name>PICTURE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2004" /> + <columnType v="-4" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -1882,8 +1882,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 +1902,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 +1949,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 +2049,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 +2069,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 +2162,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 +2181,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 +2234,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 +2339,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 +2360,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 +2406,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 +2584,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 +2645,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 +2671,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 +2805,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 +2830,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 +2892,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 +2965,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 +2987,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 +3015,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 +3070,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 +3112,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 +3126,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 +3140,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" /> @@ -3199,7 +3199,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 +3219,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 +3239,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 +3331,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 +3371,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 +3446,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 +3481,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 +3523,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 +3542,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 +3562,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 +3583,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 +3791,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 +3887,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 +3944,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 +4025,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 +4045,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 +4154,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 +4182,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 +4209,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 +4280,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 +4301,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 +4322,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 +4365,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 +4439,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 +4554,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 +4576,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 +4596,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 +4623,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 +4643,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 +4691,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 +4789,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 +4857,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 +4878,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 +4918,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 +4932,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 +4946,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 +5005,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 +5026,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 +5047,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 +5100,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 +5227,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 +5278,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 +5346,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 +5439,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 +5541,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 +5772,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 +5987,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 +6071,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 +6162,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 +6182,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 +6302,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 +6330,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 +6482,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 +6496,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 +6556,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 +6661,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 +6786,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 +6977,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 +7012,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 +7075,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 +7657,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 +7949,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 +7969,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 +8058,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 +8143,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 +8191,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 +8240,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 +8372,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 +8407,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 +8504,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 +8560,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 +8677,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 +8705,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 +8795,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 +8844,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 +8956,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 +8998,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 +9067,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 +9186,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 +9325,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 +9360,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 +9499,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 +9541,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 +9568,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 +9680,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 +9693,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 +9721,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" /> @@ -9828,7 +9828,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 +9839,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 +9929,9 @@ <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" /> @@ -10053,8 +10053,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" /> @@ -10066,7 +10066,7 @@ <name>INFO</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -10221,7 +10221,7 @@ <columnType v="1" /> <size v="36" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="true" /> <documentation></documentation> @@ -10295,7 +10295,7 @@ <name>INFO</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -10323,7 +10323,7 @@ <name>REASON</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -10338,8 +10338,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" /> @@ -10400,8 +10400,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" /> @@ -10606,8 +10606,8 @@ <name>CREATEACTIVITIES</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" /> @@ -10648,8 +10648,8 @@ <name>USE_TEMPLATE_ATTACHMENTS</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" /> @@ -10663,8 +10663,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" /> @@ -10795,8 +10795,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" /> @@ -10836,8 +10836,8 @@ <name>IS_TEST_RECIPIENT</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" /> @@ -10954,8 +10954,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" /> @@ -10968,8 +10968,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" /> @@ -11017,8 +11017,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" /> @@ -11168,7 +11168,7 @@ <name>DESCRIPTION</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -11230,7 +11230,7 @@ <name>MAIL</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -11245,8 +11245,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" /> @@ -11287,8 +11287,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" /> @@ -11328,7 +11328,7 @@ <name>RECIPIENTS</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -11357,8 +11357,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" /> @@ -11432,8 +11432,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" /> @@ -11474,9 +11474,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="true" /> <isUnique v="false" /> <index v="false" /> <documentation></documentation> @@ -11854,7 +11854,7 @@ <columnType v="1" /> <size v="36" /> <scale v="0" /> - <notNull v="true" /> + <notNull v="false" /> <isUnique v="false" /> <index v="true" /> <documentation></documentation> @@ -11907,8 +11907,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" /> @@ -11970,8 +11970,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" /> @@ -11983,7 +11983,7 @@ <name>INFO</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -12039,8 +12039,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" /> @@ -12067,8 +12067,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" /> @@ -12164,7 +12164,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" /> @@ -12303,8 +12303,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" /> @@ -12359,8 +12359,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" /> @@ -12624,8 +12624,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" /> @@ -12952,8 +12952,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" /> @@ -13078,8 +13078,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" /> @@ -13106,8 +13106,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" /> @@ -13182,8 +13182,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" /> @@ -13224,8 +13224,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" /> @@ -13667,8 +13667,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" /> @@ -13723,8 +13723,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" /> @@ -14007,8 +14007,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" /> @@ -14035,8 +14035,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" /> @@ -14139,8 +14139,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" /> @@ -14208,7 +14208,7 @@ <name>INFO</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -14340,7 +14340,7 @@ <name>INFO</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -14403,7 +14403,7 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="92" /> - <size v="8" /> + <size v="10" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14417,7 +14417,7 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="92" /> - <size v="8" /> + <size v="10" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -14694,8 +14694,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="false" /> <isUnique v="false" /> @@ -14805,8 +14805,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" /> @@ -14833,8 +14833,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" /> @@ -14965,8 +14965,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" /> @@ -15007,8 +15007,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" /> @@ -15090,7 +15090,7 @@ <name>DISTRICT_FILTER</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -15153,8 +15153,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" /> @@ -15209,8 +15209,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" /> @@ -15278,9 +15278,9 @@ <name>VALID_FROM</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" /> @@ -15292,9 +15292,9 @@ <name>VALID_UNTIL</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" /> @@ -15461,8 +15461,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" /> @@ -15475,8 +15475,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" /> @@ -15489,8 +15489,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" /> @@ -15517,8 +15517,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" /> @@ -15592,7 +15592,7 @@ <name>DISCUSSIONTEXT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -15607,8 +15607,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" /> @@ -15663,8 +15663,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" /> @@ -15739,8 +15739,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" /> @@ -15767,8 +15767,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" /> @@ -15857,8 +15857,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" /> @@ -15933,7 +15933,7 @@ <name>CONTENTDECODED</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -15968,7 +15968,7 @@ <name>CONTENT</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -15990,8 +15990,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" /> @@ -16135,8 +16135,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" /> @@ -16177,8 +16177,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" /> @@ -16343,8 +16343,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" /> @@ -16357,8 +16357,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" /> @@ -16433,8 +16433,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" /> @@ -16475,8 +16475,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" /> @@ -16716,8 +16716,8 @@ <name>IS_ARCHIVED</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" /> @@ -16805,7 +16805,7 @@ <name>OBJECT_FILTER</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -16819,8 +16819,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" /> @@ -16909,8 +16909,8 @@ <name>TRIGGEREVENTDELETE</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" /> @@ -16922,8 +16922,8 @@ <name>TRIGGEREVENTINSERT</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" /> @@ -16935,8 +16935,8 @@ <name>TRIGGEREVENTUPDATE</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" /> @@ -16949,8 +16949,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" /> @@ -16987,7 +16987,7 @@ <name>OBJECT_FIELD</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -17046,8 +17046,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" /> @@ -17072,8 +17072,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" /> @@ -17183,8 +17183,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" /> @@ -17209,8 +17209,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" /> @@ -17247,8 +17247,8 @@ <name>AUTO</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" /> @@ -17294,8 +17294,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" /> @@ -17307,8 +17307,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" /> @@ -17391,8 +17391,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" /> @@ -17417,8 +17417,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" /> @@ -17477,6 +17477,34 @@ <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> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>DONEUSER</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> @@ -17578,8 +17606,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" /> @@ -17609,7 +17637,7 @@ <size v="36" /> <scale v="0" /> <notNull v="false" /> - <isUnique v="false" /> + <isUnique v="true" /> <index v="true" /> <documentation></documentation> <title></title> @@ -17648,8 +17676,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" /> @@ -17676,8 +17704,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" /> @@ -17912,8 +17940,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" /> @@ -17940,8 +17968,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" /> @@ -18029,7 +18057,7 @@ <name>ERRORMESSAGE</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -18142,8 +18170,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" /> @@ -18246,8 +18274,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" /> @@ -18274,8 +18302,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" /> @@ -18406,8 +18434,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" /> @@ -18420,8 +18448,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" /> @@ -18496,8 +18524,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" /> @@ -18538,8 +18566,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" /> @@ -18821,8 +18849,8 @@ <name>IS_DEFAULT</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" /> @@ -18954,153 +18982,7 @@ <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" /> + <size v="19" /> <scale v="0" /> <notNull v="false" /> <isUnique v="false" /> @@ -19109,20 +18991,6 @@ <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> @@ -19161,7 +19029,7 @@ <name>MONTH_FACTOR</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2" /> + <columnType v="3" /> <size v="5" /> <scale v="2" /> <notNull v="false" /> @@ -19209,7 +19077,7 @@ <name>FILTER</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -19224,8 +19092,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" /> @@ -19252,8 +19120,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" /> @@ -19375,8 +19243,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" /> @@ -19429,7 +19297,7 @@ <entityDb> <name>LEADS</name> <dbName></dbName> - <idColumn>LEADID</idColumn> + <idColumn>LEADSID</idColumn> <idGeneratorType v="0" /> <idGeneratorInterval v="1" /> <documentation></documentation> @@ -19477,8 +19345,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" /> @@ -19798,7 +19666,7 @@ <name>PERSINFO</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -20163,8 +20031,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" /> @@ -20204,7 +20072,7 @@ <name>ORGINFO</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="2005" /> + <columnType v="-1" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -20247,8 +20115,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" /> diff --git a/neonContext/Salesproject/Salesproject.aod b/neonContext/Salesproject/Salesproject.aod index 9b93a07f22..92def56f1a 100644 --- a/neonContext/Salesproject/Salesproject.aod +++ b/neonContext/Salesproject/Salesproject.aod @@ -80,9 +80,5 @@ <name>407d9b32-c379-428b-b1e1-d92a820971fd</name> <view>SalesprojectPreviewMultiple_view</view> </neonViewReference> - <neonViewReference> - <name>c860de14-8ebe-438f-92c3-cba727a15690</name> - <view>SalesprojectAttribute_view</view> - </neonViewReference> </references> </neonContext> diff --git a/process/Bulkmail_lib/process.js b/process/Bulkmail_lib/process.js index 5cc49e65fc..c8198e8f82 100644 --- a/process/Bulkmail_lib/process.js +++ b/process/Bulkmail_lib/process.js @@ -663,7 +663,7 @@ BulkMailUtils.startBulkmailWorkFlow = function(pMailLogId, pLinkId) { return } - var [actionType, workflowKey, signalName] = newSelect(["ACTION_TYPE", "WORKFLOWPROCESSDEFINITION_KEY", "WORKFLOWSIGNAL_NAME"]) + var [linkActionType, workflowKey, signalName] = newSelect(["ACTION_TYPE", "WORKFLOWPROCESSDEFINITION_KEY", "WORKFLOWSIGNAL_NAME"]) .from("WEBLINK") .where("WEBLINK.WEBLINKID", pLinkId) .arrayRow(); @@ -673,18 +673,18 @@ BulkMailUtils.startBulkmailWorkFlow = function(pMailLogId, pLinkId) .where("MAIL_LOG.MAIL_LOGID", pMailLogId) .cell(); - var variables = { + var processVariables = { "mailLogId": pMailLogId, "linkId": pLinkId, "contactId": contactId }; - if (actionType == $KeywordRegistry.weblinkActionType$startWorkflow() && workflowKey) + if (linkActionType == $KeywordRegistry.weblinkActionType$startWorkflow() && workflowKey) { - workflow.startProcessByKey(workflowKey, variables); + workflow.startProcessByKey(workflowKey, processVariables); } - else if (actionType == $KeywordRegistry.weblinkActionType$sendWorkflowSignal() && signalName) + else if (linkActionType == $KeywordRegistry.weblinkActionType$sendWorkflowSignal() && signalName) { - workflow.signalEventReceived(signalName, variables); + workflow.signalEventReceived(signalName, processVariables); } } -- GitLab From d5b6f9ce61300291e2a0346b567cca0349d61e6f Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Thu, 6 May 2021 16:37:31 +0200 Subject: [PATCH 156/242] Scan Services warning fixes --- .aditoprj/ignoredScanServiceTasks.json | 6 ++ .../AttributeRelation_entity.aod | 1 - .../children/gettree_param/valueProcess.js | 0 .../onActionProcess.js | 3 +- entity/BulkMail_entity/BulkMail_entity.aod | 2 +- .../displayValueProcess.js | 0 .../CampaignAddParticipants_entity.aod | 1 - .../campaignstep_id/onValueChange.js | 0 .../CommunicationSettings_entity.aod | 4 +- .../valueProcess.js | 0 .../expression.js | 0 .../DuplicateScanner_entity.aod | 1 + .../KeywordEntry_entity.aod | 3 - .../onActionProcess.js | 3 +- .../hascommrestriction.value/expression.js | 7 ++- entity/MailLog_entity/MailLog_entity.aod | 1 - .../ObservationMultiple_entity.aod | 1 - .../children/blacklist_param/valueProcess.js | 5 -- entity/Offeritem_entity/Offeritem_entity.aod | 1 - .../entityfields/price/valueProcess.js | 0 .../Organisation_entity.aod | 1 - .../PermissionDetail_entity.aod | 1 - .../children/fieldtype_param/valueProcess.js | 4 -- entity/Person_entity/Person_entity.aod | 1 - .../WeblinkClick_entity.aod | 6 -- entity/Weblink_entity/Weblink_entity.aod | 5 +- .../children/weblinkid_param}/valueProcess.js | 0 .../children/webtrackingurl/valueProcess.js | 3 - .../linktype.displayvalue/expression.js | 4 +- .../urltype.displayvalue/expression.js | 5 -- .../_____LANGUAGE_EXTRA.aod | 57 +++++++++++++++++++ .../_____LANGUAGE_de/_____LANGUAGE_de.aod | 51 +++++++++++++++++ .../_____LANGUAGE_en/_____LANGUAGE_en.aod | 57 +++++++++++++++++++ neonContext/Appointment/Appointment.aod | 3 - neonContext/Attribute/Attribute.aod | 3 - .../BulkMailTestRecipient.aod | 3 - neonContext/Document/Document.aod | 3 - .../DuplicateOrganisation.aod | 3 - .../DuplicatePerson/DuplicatePerson.aod | 6 -- neonContext/Person/Person.aod | 3 - neonContext/Planning/Planning.aod | 6 -- .../DuplicatesOverview_view.aod | 2 - .../ObservationEdit_view.aod | 1 - .../WeblinkDrawer_view/WeblinkDrawer_view.aod | 2 +- process/Bulkmail_lib/process.js | 11 ++-- process/Contact_lib/process.js | 16 +++++- .../MarketingCondition_test.aod | 1 - process/MarketingCondition_test/process.js | 0 48 files changed, 209 insertions(+), 88 deletions(-) delete mode 100644 entity/AttributeRelation_entity/entityfields/attributerelations/children/gettree_param/valueProcess.js rename entity/BulkMail_entity/entityfields/{interests_id => interest_id}/displayValueProcess.js (100%) delete mode 100644 entity/CampaignAddParticipants_entity/entityfields/campaignstep_id/onValueChange.js rename entity/CommunicationSettings_entity/entityfields/communicationchannels/children/{communicationmedium_param => communicationcategory_param}/valueProcess.js (100%) rename entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/{medium_id.displayvalue => medium.displayvalue}/expression.js (100%) delete mode 100644 entity/ObservationMultiple_entity/entityfields/contexts/children/blacklist_param/valueProcess.js delete mode 100644 entity/Offeritem_entity/entityfields/price/valueProcess.js delete mode 100644 entity/PermissionDetail_entity/entityfields/permissionactions/children/fieldtype_param/valueProcess.js rename entity/Weblink_entity/entityfields/{clicks/children/linkid_param => webtrackingtags/children/weblinkid_param}/valueProcess.js (100%) delete mode 100644 entity/Weblink_entity/entityfields/webtrackingtags/children/webtrackingurl/valueProcess.js delete mode 100644 entity/Weblink_entity/recordcontainers/db/recordfieldmappings/urltype.displayvalue/expression.js delete mode 100644 process/MarketingCondition_test/process.js diff --git a/.aditoprj/ignoredScanServiceTasks.json b/.aditoprj/ignoredScanServiceTasks.json index 1ba3e77ba9..55389c3975 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/entity/AttributeRelation_entity/AttributeRelation_entity.aod b/entity/AttributeRelation_entity/AttributeRelation_entity.aod index 040e3dfeae..05c0bf6f07 100644 --- a/entity/AttributeRelation_entity/AttributeRelation_entity.aod +++ b/entity/AttributeRelation_entity/AttributeRelation_entity.aod @@ -250,7 +250,6 @@ <children> <entityParameter> <name>GetTree_param</name> - <valueProcess>%aditoprj%/entity/AttributeRelation_entity/entityfields/attributerelations/children/gettree_param/valueProcess.js</valueProcess> <expose v="false" /> </entityParameter> </children> diff --git a/entity/AttributeRelation_entity/entityfields/attributerelations/children/gettree_param/valueProcess.js b/entity/AttributeRelation_entity/entityfields/attributerelations/children/gettree_param/valueProcess.js deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/entity/BulkMailRecipient_entity/entityfields/recipientactions/children/removewithcommrestriction/onActionProcess.js b/entity/BulkMailRecipient_entity/entityfields/recipientactions/children/removewithcommrestriction/onActionProcess.js index db090bed7f..6759a05380 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/BulkMail_entity/BulkMail_entity.aod b/entity/BulkMail_entity/BulkMail_entity.aod index c7e6b94645..fa5dbdfb87 100644 --- a/entity/BulkMail_entity/BulkMail_entity.aod +++ b/entity/BulkMail_entity/BulkMail_entity.aod @@ -387,7 +387,7 @@ <name>INTEREST_ID</name> <title>Interest</title> <consumer>Interests</consumer> - <displayValueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/interests_id/displayValueProcess.js</displayValueProcess> + <displayValueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/interest_id/displayValueProcess.js</displayValueProcess> </entityField> <entityConsumer> <name>Interests</name> diff --git a/entity/BulkMail_entity/entityfields/interests_id/displayValueProcess.js b/entity/BulkMail_entity/entityfields/interest_id/displayValueProcess.js similarity index 100% rename from entity/BulkMail_entity/entityfields/interests_id/displayValueProcess.js rename to entity/BulkMail_entity/entityfields/interest_id/displayValueProcess.js diff --git a/entity/CampaignAddParticipants_entity/CampaignAddParticipants_entity.aod b/entity/CampaignAddParticipants_entity/CampaignAddParticipants_entity.aod index 76ea4711eb..a2abae7874 100644 --- a/entity/CampaignAddParticipants_entity/CampaignAddParticipants_entity.aod +++ b/entity/CampaignAddParticipants_entity/CampaignAddParticipants_entity.aod @@ -38,7 +38,6 @@ <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> diff --git a/entity/CampaignAddParticipants_entity/entityfields/campaignstep_id/onValueChange.js b/entity/CampaignAddParticipants_entity/entityfields/campaignstep_id/onValueChange.js deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod b/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod index 3c3d5fcfce..d6c10b05f9 100644 --- a/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod +++ b/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod @@ -173,7 +173,7 @@ </entityParameter> <entityParameter> <name>CommunicationCategory_param</name> - <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/communicationchannels/children/communicationmedium_param/valueProcess.js</valueProcess> + <valueProcess>%aditoprj%/entity/CommunicationSettings_entity/entityfields/communicationchannels/children/communicationcategory_param/valueProcess.js</valueProcess> </entityParameter> </children> </entityConsumer> @@ -261,7 +261,7 @@ </dbRecordFieldMapping> <dbRecordFieldMapping> <name>MEDIUM.displayValue</name> - <expression>%aditoprj%/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/medium_id.displayvalue/expression.js</expression> + <expression>%aditoprj%/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/medium.displayvalue/expression.js</expression> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>STATUS.displayValue</name> diff --git a/entity/CommunicationSettings_entity/entityfields/communicationchannels/children/communicationmedium_param/valueProcess.js b/entity/CommunicationSettings_entity/entityfields/communicationchannels/children/communicationcategory_param/valueProcess.js similarity index 100% rename from entity/CommunicationSettings_entity/entityfields/communicationchannels/children/communicationmedium_param/valueProcess.js rename to entity/CommunicationSettings_entity/entityfields/communicationchannels/children/communicationcategory_param/valueProcess.js diff --git a/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/medium_id.displayvalue/expression.js b/entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/medium.displayvalue/expression.js similarity index 100% rename from entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/medium_id.displayvalue/expression.js rename to entity/CommunicationSettings_entity/recordcontainers/db/recordfieldmappings/medium.displayvalue/expression.js diff --git a/entity/DuplicateScanner_entity/DuplicateScanner_entity.aod b/entity/DuplicateScanner_entity/DuplicateScanner_entity.aod index b94abcf358..220ca8da86 100644 --- a/entity/DuplicateScanner_entity/DuplicateScanner_entity.aod +++ b/entity/DuplicateScanner_entity/DuplicateScanner_entity.aod @@ -97,6 +97,7 @@ <name>DBRecordContainer</name> <onDBInsert>%aditoprj%/entity/DuplicateScanner_entity/recordcontainers/dbrecordcontainer/onDBInsert.js</onDBInsert> <onDBUpdate>%aditoprj%/entity/DuplicateScanner_entity/recordcontainers/dbrecordcontainer/onDBUpdate.js</onDBUpdate> + <onDBDelete>%aditoprj%/entity/DuplicateScanner_entity/recordcontainers/dbrecordcontainer/onDBDelete.js</onDBDelete> <alias>Data_alias</alias> <recordFieldMappings> <dbRecordFieldMapping> diff --git a/entity/KeywordEntry_entity/KeywordEntry_entity.aod b/entity/KeywordEntry_entity/KeywordEntry_entity.aod index 148a373040..c4d78ac713 100644 --- a/entity/KeywordEntry_entity/KeywordEntry_entity.aod +++ b/entity/KeywordEntry_entity/KeywordEntry_entity.aod @@ -645,7 +645,6 @@ </entityDependency> <entityDependency> <name>98608b12-9927-4197-adfe-1398a388bcb0</name> - <entityName>WebtrackingTag_entity</entityName> <isConsumer v="false" /> </entityDependency> <entityDependency> @@ -692,8 +691,6 @@ </entityDependency> <entityDependency> <name>a4d04777-82dc-4384-a4a5-c6a4a71e7a65</name> - <entityName>CommunicationBlacklist_entity</entityName> - <fieldName>BlacklistTypeKeyword</fieldName> <isConsumer v="false" /> </entityDependency> <entityDependency> diff --git a/entity/LetterRecipient_entity/entityfields/recipientactions/children/removewithcommrestriction/onActionProcess.js b/entity/LetterRecipient_entity/entityfields/recipientactions/children/removewithcommrestriction/onActionProcess.js index 8b54190ef1..21b3e80d49 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 c4cd2c2544..7377540477 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().rejected().existSettings().buildCondition()) + .thenString("true") + .elseString("false") + .build(); result.string(sql); diff --git a/entity/MailLog_entity/MailLog_entity.aod b/entity/MailLog_entity/MailLog_entity.aod index 37a6fcbb87..5fc9bcb17e 100644 --- a/entity/MailLog_entity/MailLog_entity.aod +++ b/entity/MailLog_entity/MailLog_entity.aod @@ -181,7 +181,6 @@ </dbRecordFieldMapping> <dbRecordFieldMapping> <name>BCC_EMAIL.value</name> - <recordfield>MAIL_LOG.BCC_EMAIL</recordfield> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>CONTACT_ID.displayValue</name> diff --git a/entity/ObservationMultiple_entity/ObservationMultiple_entity.aod b/entity/ObservationMultiple_entity/ObservationMultiple_entity.aod index 2f9186f4f6..e62d9e9e4e 100644 --- a/entity/ObservationMultiple_entity/ObservationMultiple_entity.aod +++ b/entity/ObservationMultiple_entity/ObservationMultiple_entity.aod @@ -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 c40747f7e7..0000000000 --- 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/Offeritem_entity/Offeritem_entity.aod b/entity/Offeritem_entity/Offeritem_entity.aod index d8cfad37c1..019a47e172 100644 --- a/entity/Offeritem_entity/Offeritem_entity.aod +++ b/entity/Offeritem_entity/Offeritem_entity.aod @@ -74,7 +74,6 @@ <outputFormat>#,##0.00</outputFormat> <inputFormat>#,##0.00</inputFormat> <mandatory v="true" /> - <valueProcess>%aditoprj%/entity/Offeritem_entity/entityfields/price/valueProcess.js</valueProcess> <displayValueProcess>%aditoprj%/entity/Offeritem_entity/entityfields/price/displayValueProcess.js</displayValueProcess> </entityField> <entityField> diff --git a/entity/Offeritem_entity/entityfields/price/valueProcess.js b/entity/Offeritem_entity/entityfields/price/valueProcess.js deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/entity/Organisation_entity/Organisation_entity.aod b/entity/Organisation_entity/Organisation_entity.aod index d851c8dec5..c7f1751de1 100644 --- a/entity/Organisation_entity/Organisation_entity.aod +++ b/entity/Organisation_entity/Organisation_entity.aod @@ -183,7 +183,6 @@ <entityDependency> <name>6a81a15e-2015-48d6-9f69-0a032b4d5507</name> <entityName>CampaignParticipant_entity</entityName> - <fieldName>OrganisationConsumer</fieldName> <isConsumer v="false" /> </entityDependency> <entityDependency> diff --git a/entity/PermissionDetail_entity/PermissionDetail_entity.aod b/entity/PermissionDetail_entity/PermissionDetail_entity.aod index 9fc1e645ae..a78eb1c4d3 100644 --- a/entity/PermissionDetail_entity/PermissionDetail_entity.aod +++ b/entity/PermissionDetail_entity/PermissionDetail_entity.aod @@ -196,7 +196,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 52bd0deb21..0000000000 --- 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/Person_entity/Person_entity.aod b/entity/Person_entity/Person_entity.aod index 1426af8122..fa52cb70ed 100644 --- a/entity/Person_entity/Person_entity.aod +++ b/entity/Person_entity/Person_entity.aod @@ -386,7 +386,6 @@ <entityDependency> <name>9c5ade71-e56c-4684-95f1-151a47175797</name> <entityName>CampaignParticipant_entity</entityName> - <fieldName>PersonConsumer</fieldName> <isConsumer v="false" /> </entityDependency> </dependencies> diff --git a/entity/WeblinkClick_entity/WeblinkClick_entity.aod b/entity/WeblinkClick_entity/WeblinkClick_entity.aod index bd2d19c05b..e1e53ad5fe 100644 --- a/entity/WeblinkClick_entity/WeblinkClick_entity.aod +++ b/entity/WeblinkClick_entity/WeblinkClick_entity.aod @@ -18,12 +18,6 @@ <fieldName>Clicks</fieldName> <isConsumer v="false" /> </entityDependency> - <entityDependency> - <name>cf3f4f2c-43bb-44c3-9099-95966d05623f</name> - <entityName>Link_entity</entityName> - <fieldName>Clicks</fieldName> - <isConsumer v="false" /> - </entityDependency> <entityDependency> <name>2a2baa00-d7c3-4e88-a4e1-553a81b4ac77</name> <entityName>Weblink_entity</entityName> diff --git a/entity/Weblink_entity/Weblink_entity.aod b/entity/Weblink_entity/Weblink_entity.aod index 1cd2e681a6..dbafd8ac44 100644 --- a/entity/Weblink_entity/Weblink_entity.aod +++ b/entity/Weblink_entity/Weblink_entity.aod @@ -37,7 +37,7 @@ </entityField> <entityField> <name>SCORE</name> - <title>Punktzahl</title> + <title>Score</title> <contentType>NUMBER</contentType> <outputFormat>#' Punkte'</outputFormat> <valueProcess>%aditoprj%/entity/Weblink_entity/entityfields/score/valueProcess.js</valueProcess> @@ -63,7 +63,7 @@ <children> <entityParameter> <name>WeblinkId_param</name> - <valueProcess>%aditoprj%/entity/Weblink_entity/entityfields/webtrackingtags/children/linkid_param/valueProcess.js</valueProcess> + <valueProcess>%aditoprj%/entity/Weblink_entity/entityfields/webtrackingtags/children/weblinkid_param/valueProcess.js</valueProcess> </entityParameter> </children> </entityConsumer> @@ -107,7 +107,6 @@ <children> <entityParameter> <name>WeblinkId_param</name> - <valueProcess>%aditoprj%/entity/Weblink_entity/entityfields/clicks/children/linkid_param/valueProcess.js</valueProcess> </entityParameter> </children> </entityConsumer> diff --git a/entity/Weblink_entity/entityfields/clicks/children/linkid_param/valueProcess.js b/entity/Weblink_entity/entityfields/webtrackingtags/children/weblinkid_param/valueProcess.js similarity index 100% rename from entity/Weblink_entity/entityfields/clicks/children/linkid_param/valueProcess.js rename to entity/Weblink_entity/entityfields/webtrackingtags/children/weblinkid_param/valueProcess.js diff --git a/entity/Weblink_entity/entityfields/webtrackingtags/children/webtrackingurl/valueProcess.js b/entity/Weblink_entity/entityfields/webtrackingtags/children/webtrackingurl/valueProcess.js deleted file mode 100644 index 647f04b451..0000000000 --- a/entity/Weblink_entity/entityfields/webtrackingtags/children/webtrackingurl/valueProcess.js +++ /dev/null @@ -1,3 +0,0 @@ -import("system.vars"); -import("system.result"); -result.string(vars.get("$field.WEBLINKID")); \ 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 index e452bc6e87..92a7316b87 100644 --- a/entity/Weblink_entity/recordcontainers/db/recordfieldmappings/linktype.displayvalue/expression.js +++ b/entity/Weblink_entity/recordcontainers/db/recordfieldmappings/linktype.displayvalue/expression.js @@ -1,3 +1,5 @@ import("system.result"); import("Keyword_lib"); -result.string(KeywordUtils.getResolvedTitleSqlPart("WeblinkType", "WEBLINK.LINKTYPE")); \ No newline at end of file +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/urltype.displayvalue/expression.js b/entity/Weblink_entity/recordcontainers/db/recordfieldmappings/urltype.displayvalue/expression.js deleted file mode 100644 index 92a7316b87..0000000000 --- a/entity/Weblink_entity/recordcontainers/db/recordfieldmappings/urltype.displayvalue/expression.js +++ /dev/null @@ -1,5 +0,0 @@ -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/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index 8a73c7e6f4..b94ce935a3 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -8575,6 +8575,63 @@ <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>[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> </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 38086e6169..37c805cefb 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -11288,6 +11288,57 @@ Bitte Datumseingabe prüfen</value> <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> </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 412cb297fe..1464a7d2e2 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -8660,6 +8660,63 @@ <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>[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> </keyValueMap> <font name="Dialog" style="0" size="11" /> </language> diff --git a/neonContext/Appointment/Appointment.aod b/neonContext/Appointment/Appointment.aod index 7bd2dabf7a..7663253b4c 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 46d59cc597..749cae00fe 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/BulkMailTestRecipient/BulkMailTestRecipient.aod b/neonContext/BulkMailTestRecipient/BulkMailTestRecipient.aod index 5c35bf72c9..ce4cb549d1 100644 --- a/neonContext/BulkMailTestRecipient/BulkMailTestRecipient.aod +++ b/neonContext/BulkMailTestRecipient/BulkMailTestRecipient.aod @@ -6,9 +6,6 @@ <editView>BulkMailTestRecipientEdit_view</editView> <entity>BulkMailTestRecipient_entity</entity> <references> - <neonViewReference> - <name>c9330ab3-e805-4dbb-8360-4767a966ae3a</name> - </neonViewReference> <neonViewReference> <name>eb1567ec-e5d3-4442-9fe3-7b456ba13ffe</name> <view>BulkMailTestRecipientFilter_view</view> diff --git a/neonContext/Document/Document.aod b/neonContext/Document/Document.aod index 625b588c0d..cfb02a7f2b 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 index 180a84c994..d3cfec52aa 100644 --- a/neonContext/DuplicateOrganisation/DuplicateOrganisation.aod +++ b/neonContext/DuplicateOrganisation/DuplicateOrganisation.aod @@ -13,9 +13,6 @@ <name>512ef5c4-dc95-4ef1-81e0-d45479249c2e</name> <view>DuplicateOrganisationEdit_view</view> </neonViewReference> - <neonViewReference> - <name>07bbb126-8b4b-4f3c-a2c8-30409e0ee826</name> - </neonViewReference> <neonViewReference> <name>2e59d859-6b5f-4bb5-a47b-1225164140ed</name> <view>DuplicateOrganisationPreview_view</view> diff --git a/neonContext/DuplicatePerson/DuplicatePerson.aod b/neonContext/DuplicatePerson/DuplicatePerson.aod index 6d8e12f75a..a30cb53a7d 100644 --- a/neonContext/DuplicatePerson/DuplicatePerson.aod +++ b/neonContext/DuplicatePerson/DuplicatePerson.aod @@ -13,12 +13,6 @@ <name>f54e544a-2279-41ec-a7b3-44e11989a736</name> <view>DuplicatePersonEdit_view</view> </neonViewReference> - <neonViewReference> - <name>88155af6-074d-4683-b27e-20a8ef75dd8a</name> - </neonViewReference> - <neonViewReference> - <name>fb801ec5-ec73-4d6d-be3e-f2d78a57716f</name> - </neonViewReference> <neonViewReference> <name>596cd813-22e1-4ba6-96d5-fefefbb800cf</name> <view>DuplicatePersonPreview_view</view> diff --git a/neonContext/Person/Person.aod b/neonContext/Person/Person.aod index 1f9f01bbf1..89ed9017e3 100644 --- a/neonContext/Person/Person.aod +++ b/neonContext/Person/Person.aod @@ -59,9 +59,6 @@ <name>69b30bea-7b58-4a54-8d6b-dca3fb4a9c53</name> <view>PersonMultiEditQuickEntry_view</view> </neonViewReference> - <neonViewReference> - <name>2a6c44be-53e2-469e-84b3-615841bd4430</name> - </neonViewReference> <neonViewReference> <name>627518cc-15b0-4f0d-b6f3-ec06172e7c4e</name> <view>PersonMarketing_view</view> diff --git a/neonContext/Planning/Planning.aod b/neonContext/Planning/Planning.aod index 387221c361..bdaf234b37 100644 --- a/neonContext/Planning/Planning.aod +++ b/neonContext/Planning/Planning.aod @@ -17,12 +17,6 @@ <name>360005f9-0f0a-41dc-b7c8-3f8b2e947d98</name> <view>PlanningEdit_view</view> </neonViewReference> - <neonViewReference> - <name>87ed8e38-7591-404e-b57a-b1268db6a777</name> - </neonViewReference> - <neonViewReference> - <name>1a7e2b28-65ee-4620-88b7-c8f38b69d2c5</name> - </neonViewReference> <neonViewReference> <name>e12da517-cd75-4665-a4cd-c9a2643dc0c1</name> <view>PlanningOrganisationFilter_view</view> diff --git a/neonView/DuplicatesOverview_view/DuplicatesOverview_view.aod b/neonView/DuplicatesOverview_view/DuplicatesOverview_view.aod index ad0436323a..e7f6cadf9d 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/ObservationEdit_view/ObservationEdit_view.aod b/neonView/ObservationEdit_view/ObservationEdit_view.aod index 4540877e88..bba30a064e 100644 --- a/neonView/ObservationEdit_view/ObservationEdit_view.aod +++ b/neonView/ObservationEdit_view/ObservationEdit_view.aod @@ -47,7 +47,6 @@ </entityFieldLink> <entityFieldLink> <name>aa93c341-578b-4da9-8ee8-2b3d9ea9e1ca</name> - <entityField>includeDependencies</entityField> </entityFieldLink> <entityFieldLink> <name>c6fa82e2-5830-46c5-9127-e273ddf5a194</name> diff --git a/neonView/WeblinkDrawer_view/WeblinkDrawer_view.aod b/neonView/WeblinkDrawer_view/WeblinkDrawer_view.aod index 4eb8096b64..4a69a3455f 100644 --- a/neonView/WeblinkDrawer_view/WeblinkDrawer_view.aod +++ b/neonView/WeblinkDrawer_view/WeblinkDrawer_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>WeblinkDrawer_view</name> - <title>Weitere Informationen</title> + <title>Further informations</title> <majorModelMode>DISTRIBUTED</majorModelMode> <layout> <boxLayout> diff --git a/process/Bulkmail_lib/process.js b/process/Bulkmail_lib/process.js index c8198e8f82..05c5dbc203 100644 --- a/process/Bulkmail_lib/process.js +++ b/process/Bulkmail_lib/process.js @@ -554,13 +554,14 @@ BulkMailUtils.copy = function(pBulkMailId) * @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> + * The id of the corresponding mail log entry.<br> + * @param {String} pFile **/ -BulkMailUtils.storeEmlFile = function(pBulkMailId,pMailRunId, pMailLogId,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 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); } diff --git a/process/Contact_lib/process.js b/process/Contact_lib/process.js index d154f286f5..4d6ad17a8d 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"); @@ -589,16 +590,25 @@ 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() != ""; } diff --git a/process/MarketingCondition_test/MarketingCondition_test.aod b/process/MarketingCondition_test/MarketingCondition_test.aod index e1fabb654e..3f8e07edff 100644 --- a/process/MarketingCondition_test/MarketingCondition_test.aod +++ b/process/MarketingCondition_test/MarketingCondition_test.aod @@ -2,7 +2,6 @@ <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_test</name> <majorModelMode>DISTRIBUTED</majorModelMode> - <process>%aditoprj%/process/MarketingCondition_test/process.js</process> <variants> <element>EXECUTABLE</element> </variants> diff --git a/process/MarketingCondition_test/process.js b/process/MarketingCondition_test/process.js deleted file mode 100644 index e69de29bb2..0000000000 -- GitLab From 1e8f3e2c6adf98c1a151f76fce3e88fb82be2239 Mon Sep 17 00:00:00 2001 From: Markus Schloder <m.schloder@adito.de> Date: Thu, 6 May 2021 15:08:39 +0000 Subject: [PATCH 157/242] 1078478 asys audit liquibase --- .../_____SYSTEMALIAS/basic/init/init.xml | 5 ++++- .../basic/init/struct/create_asys_audit.xml | 21 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 .liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_audit.xml diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/init.xml b/.liquibase/_____SYSTEMALIAS/basic/init/init.xml index 540e5ac077..a3ef461345 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 0000000000..925f1cc139 --- /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 -- GitLab From 7ed4b272f9ba902d769bf648d0348eee6c2d833f Mon Sep 17 00:00:00 2001 From: Daniel Tran <d.tran@adito.de> Date: Thu, 6 May 2021 12:28:37 +0200 Subject: [PATCH 158/242] =?UTF-8?q?[Projekt:=20xRM-ContactManagement][Tick?= =?UTF-8?q?etNr.:=201074059][Email=5Flib:=20Parameter=20Anzahl=20/=20Reihe?= =?UTF-8?q?nfolge=20f=C3=BCr=20EmailWritingUtils.openNewMail()=20und=20Ema?= =?UTF-8?q?ilWritingUtils.sendReportAsMail()=20falsch.]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- process/Email_lib/process.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/process/Email_lib/process.js b/process/Email_lib/process.js index 2bb2c3d123..93e6008b16 100644 --- a/process/Email_lib/process.js +++ b/process/Email_lib/process.js @@ -41,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); @@ -72,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); } -- GitLab From 3cb05ecc3a61235379635680bdbd6f1d745265ae Mon Sep 17 00:00:00 2001 From: Sebastian Pongratz <s.pongratz@adito.de> Date: Mon, 10 May 2021 09:19:28 +0000 Subject: [PATCH 159/242] =?UTF-8?q?[Projekt:=20xRM-ContactManagement][Tick?= =?UTF-8?q?etNr.:=201074059][Email=5Flib:=20Parameter=20Anzahl=20/=20Reihe?= =?UTF-8?q?nfolge=20f=C3=BCr=20EmailWritingUtils.openNewMail()=20und=20Ema?= =?UTF-8?q?ilWritingUtils.sendReportAsMail()=20falsch.]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_____SYSTEMALIAS/basic/init/init.xml | 5 ++++- .../basic/init/struct/create_asys_audit.xml | 21 +++++++++++++++++++ process/Email_lib/process.js | 14 +++++++------ 3 files changed, 33 insertions(+), 7 deletions(-) create mode 100644 .liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_audit.xml diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/init.xml b/.liquibase/_____SYSTEMALIAS/basic/init/init.xml index 540e5ac077..a3ef461345 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 0000000000..925f1cc139 --- /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/process/Email_lib/process.js b/process/Email_lib/process.js index 2bb2c3d123..93e6008b16 100644 --- a/process/Email_lib/process.js +++ b/process/Email_lib/process.js @@ -41,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); @@ -72,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); } -- GitLab From bfa1ef643ff3ae263a90ea4f0eb2f0b86b4c5635 Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Mon, 10 May 2021 15:56:51 +0200 Subject: [PATCH 160/242] 1080074 communication settings in log history --- aliasDefinition/Data_alias/Data_alias.aod | 80 +++++++++++++++++-- .../translate4log/property.js | 23 ++++++ .../children/tablenames_param/valueProcess.js | 2 +- .../children/tablenames_param/valueProcess.js | 2 +- process/Loghistory_lib/process.js | 43 +++++----- 5 files changed, 124 insertions(+), 26 deletions(-) create mode 100644 aliasDefinition/Data_alias/aliasdefinitionsub/entitygroup/entities/communicationsettings/entityfields/channel_id/customproperties/translate4log/property.js diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod index c060b095c1..b2902498d3 100644 --- a/aliasDefinition/Data_alias/Data_alias.aod +++ b/aliasDefinition/Data_alias/Data_alias.aod @@ -18338,7 +18338,7 @@ <description></description> <auditSyncConfig> <name>auditSyncConfig</name> - <auditMode v="0" /> + <auditMode v="1" /> <syncActive v="false" /> <syncComplete v="true" /> <syncDirection v="1" /> @@ -18356,8 +18356,20 @@ <isUnique v="false" /> <index v="false" /> <documentation></documentation> - <title></title> + <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> @@ -18370,8 +18382,20 @@ <isUnique v="false" /> <index v="true" /> <documentation></documentation> - <title></title> + <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> @@ -18384,8 +18408,21 @@ <isUnique v="false" /> <index v="false" /> <documentation></documentation> - <title></title> + <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> @@ -18398,8 +18435,27 @@ <isUnique v="false" /> <index v="true" /> <documentation></documentation> - <title></title> + <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> @@ -18426,8 +18482,20 @@ <isUnique v="false" /> <index v="true" /> <documentation></documentation> - <title></title> + <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> 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 0000000000..c3396d4867 --- /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/entity/Organisation_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js b/entity/Organisation_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js index 17ba5b0226..723ad4e60c 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/Person_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js b/entity/Person_entity/entityfields/loghistories/children/tablenames_param/valueProcess.js index 602247f455..a8eb520241 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", "DSGVODELETEFLAG", "DSGVO"]}); +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/process/Loghistory_lib/process.js b/process/Loghistory_lib/process.js index 48aecff059..e7f2e76a4c 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) { -- GitLab From 38ed5ab50c843f39a7862347017d43efb5d7efed Mon Sep 17 00:00:00 2001 From: Sebastian Pongratz <s.pongratz@adito.de> Date: Tue, 11 May 2021 07:43:08 +0000 Subject: [PATCH 161/242] =?UTF-8?q?[Projekt:=20xRM-ContactManagement][Tick?= =?UTF-8?q?etNr.:=201080009][Status=20"F=C3=BCr=20L=C3=B6schung=20vorgeseh?= =?UTF-8?q?en"=20bleibt=20bestehen,=20so=20lange=20ein=20L=C3=B6schkennzei?= =?UTF-8?q?chen=20vorhanden=20ist.]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../basic/mailbridge/mailbridgeUser.xml | 75 +++++++++++++++++++ .liquibase/_____SYSTEMALIAS/changelog.xml | 1 + .../Organisation_entity.aod | 2 +- .../QuickEntry_entity/QuickEntry_entity.aod | 2 +- process/Email_lib/process.js | 2 +- 5 files changed, 79 insertions(+), 3 deletions(-) create mode 100644 .liquibase/_____SYSTEMALIAS/basic/mailbridge/mailbridgeUser.xml diff --git a/.liquibase/_____SYSTEMALIAS/basic/mailbridge/mailbridgeUser.xml b/.liquibase/_____SYSTEMALIAS/basic/mailbridge/mailbridgeUser.xml new file mode 100644 index 0000000000..a247f5de21 --- /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 0cff9f38ee..b7d047b86d 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/entity/Organisation_entity/Organisation_entity.aod b/entity/Organisation_entity/Organisation_entity.aod index d851c8dec5..b934a8ff16 100644 --- a/entity/Organisation_entity/Organisation_entity.aod +++ b/entity/Organisation_entity/Organisation_entity.aod @@ -51,7 +51,7 @@ <entityField> <name>NAME</name> <title>Name</title> - <contentType>LONG_TEXT</contentType> + <contentType>TEXT</contentType> <mandatory v="true" /> </entityField> <entityField> diff --git a/entity/QuickEntry_entity/QuickEntry_entity.aod b/entity/QuickEntry_entity/QuickEntry_entity.aod index 943a7dd66a..e91984345d 100644 --- a/entity/QuickEntry_entity/QuickEntry_entity.aod +++ b/entity/QuickEntry_entity/QuickEntry_entity.aod @@ -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> diff --git a/process/Email_lib/process.js b/process/Email_lib/process.js index 93e6008b16..1c2acdb21f 100644 --- a/process/Email_lib/process.js +++ b/process/Email_lib/process.js @@ -117,7 +117,7 @@ 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]; } /** -- GitLab From 3cde8e5e06ff35a64591bf3a36bdea81511f6d69 Mon Sep 17 00:00:00 2001 From: Simon Leipold <s.leipold@adito.de> Date: Tue, 11 May 2021 15:23:41 +0000 Subject: [PATCH 162/242] =?UTF-8?q?[Projekt:=20Entwicklung=20-=20Neon][Tic?= =?UTF-8?q?ketNr.:=201044885][Attribute=20MIN/MAX=20Anzahl=20=C3=BCbergeor?= =?UTF-8?q?dneter=20Attribute=20wird=20nicht=20ausgewertet]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../_____LANGUAGE_de/_____LANGUAGE_de.aod | 8 ++ process/Attribute_lib/process.js | 128 +++++++++++++++++- 2 files changed, 135 insertions(+), 1 deletion(-) diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod index 37c805cefb..3226194b7c 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -10,6 +10,10 @@ <key>Event End</key> <value>Veranstaltungs Ende</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> @@ -67,6 +71,10 @@ <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>Change responsible</key> <value>Verantwortlichen wechseln</value> diff --git a/process/Attribute_lib/process.js b/process/Attribute_lib/process.js index 965a947abf..20c80caef6 100644 --- a/process/Attribute_lib/process.js +++ b/process/Attribute_lib/process.js @@ -78,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() @@ -336,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. * @@ -718,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") + .where("AB_ATTRIBUTE.AB_ATTRIBUTEID", possibleAttributes, SqlBuilder.IN()) + .arrayColumn(); + // 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]) { @@ -730,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) @@ -2062,4 +2188,4 @@ AttributeRelation.prototype.deleteAttribute = function (pOmitValidation) newWhere("AB_ATTRIBUTERELATION.AB_ATTRIBUTERELATIONID", this.attributeRelationId) .deleteData(); return true; -} \ No newline at end of file +} -- GitLab From 92b068c06c8083c4184e207304b8aa1cefd7e4df Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Wed, 12 May 2021 08:44:34 +0200 Subject: [PATCH 163/242] 1074245 AttributeUsage onValidation fix --- entity/AttributeUsage_entity/AttributeUsage_entity.aod | 1 - .../entityfields/max_count/onValidation.js | 6 +++++- entity/AttributeUsage_entity/onValidation.js | 8 -------- 3 files changed, 5 insertions(+), 10 deletions(-) delete mode 100644 entity/AttributeUsage_entity/onValidation.js diff --git a/entity/AttributeUsage_entity/AttributeUsage_entity.aod b/entity/AttributeUsage_entity/AttributeUsage_entity.aod index 19cd75197b..9afed77c7a 100644 --- a/entity/AttributeUsage_entity/AttributeUsage_entity.aod +++ b/entity/AttributeUsage_entity/AttributeUsage_entity.aod @@ -7,7 +7,6 @@ <siblings> <element>Attribute_entity</element> </siblings> - <onValidation>%aditoprj%/entity/AttributeUsage_entity/onValidation.js</onValidation> <recordContainer>db</recordContainer> <entityFields> <entityProvider> diff --git a/entity/AttributeUsage_entity/entityfields/max_count/onValidation.js b/entity/AttributeUsage_entity/entityfields/max_count/onValidation.js index 0a2f0bdb56..38fd4fbc26 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 f35c9b28c2..0000000000 --- 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 -- GitLab From a4ecffdacf28942c101a929abc6c1369ab62f3ab Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Wed, 12 May 2021 08:30:11 +0000 Subject: [PATCH 164/242] Workflow Modeler Alias (cherry picked from commit bacc85093bea0f54d632bea9863baac73036fc79) --- process/Workflow_lib/process.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/process/Workflow_lib/process.js b/process/Workflow_lib/process.js index 52634e53c7..5d05eedb80 100644 --- a/process/Workflow_lib/process.js +++ b/process/Workflow_lib/process.js @@ -93,7 +93,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) -- GitLab From 95c4462316be4b58d54409e95a66e9d67e37bb34 Mon Sep 17 00:00:00 2001 From: "s.pongratz" <s.pongratz@adito.de> Date: Mon, 17 May 2021 10:12:41 +0200 Subject: [PATCH 165/242] projectUpgrade_2021.1.0 --- .aditoprj/project.version | 4 +- .../WorkflowModeler/WorkflowModeler.aod | 6 + entity/360Degree_entity/360Degree_entity.aod | 18 +- .../ActivityLink_entity.aod | 10 +- entity/Activity_entity/Activity_entity.aod | 96 +-- .../AddressType_entity/AddressType_entity.aod | 10 +- .../AddressValidation_entity.aod | 34 +- entity/Address_entity/Address_entity.aod | 72 +- .../AdminViewRow_entity.aod | 10 +- entity/Analyses_entity/Analyses_entity.aod | 2 +- .../AnyContact_entity/AnyContact_entity.aod | 110 +-- .../AppointmentLink_entity.aod | 10 +- .../Appointment_entity/Appointment_entity.aod | 22 +- .../AroundLocation_entity.aod | 2 +- .../AttributeRelation_entity.aod | 152 +--- .../AttributeUsage_entity.aod | 10 +- entity/Attribute_entity/Attribute_entity.aod | 62 +- .../AuditLogHistory_entity.aod | 2 +- .../BulkMailAddRecipients_entity.aod | 2 +- .../BulkMailRecipient_entity.aod | 10 +- .../BulkMailStatusChart_entity.aod | 10 +- .../BulkMailTestRecipient_entity.aod | 10 +- .../BulkMailTesting_entity.aod | 2 +- entity/BulkMail_entity/BulkMail_entity.aod | 18 +- .../CampaignAddParticipants_entity.aod | 2 +- .../CampaignAnalysis_entity.aod | 10 +- .../CampaignCostChart_entity.aod | 10 +- .../CampaignCost_entity.aod | 24 +- .../CampaignParticipantChart_entity.aod | 10 +- .../CampaignParticipant_entity.aod | 16 +- .../CampaignPlanning_entity.aod | 2 +- .../CampaignStep_entity.aod | 54 +- entity/Campaign_entity/Campaign_entity.aod | 48 +- .../ChecklistEntryValue_entity.aod | 18 +- .../ChecklistEntry_entity.aod | 16 +- entity/Checklist_entity/Checklist_entity.aod | 2 +- .../ClassificationAdmin_entity.aod | 2 +- .../ClassificationGrading_entity.aod | 10 +- .../ClassificationGroup_entity.aod | 2 +- .../ClassificationScore_entity.aod | 2 +- .../ClassificationType_entity.aod | 10 +- .../Classification_entity.aod | 16 +- .../CommRestriction_Entity.aod | 2 +- .../CommunicationChannel_entity.aod | 10 +- .../CommunicationSettings_entity.aod | 16 +- .../Communication_entity.aod | 82 +- .../Competition_entity/Competition_entity.aod | 10 +- entity/Contact_entity/Contact_entity.aod | 26 +- entity/Context_entity/Context_entity.aod | 110 +-- entity/Contract_entity/Contract_entity.aod | 30 +- entity/Countries_Entity/Countries_Entity.aod | 16 +- .../CovidCasesData_entity.aod | 2 +- .../DSGVOConfigurationAttribute_entity.aod | 12 +- .../DSGVOConfiguration_entity.aod | 4 +- .../DSGVODeleteFlag_entity.aod | 10 +- entity/DSGVOInfo_entity/DSGVOInfo_entity.aod | 2 +- .../DSGVOReport_entity/DSGVOReport_entity.aod | 2 +- entity/DSGVO_entity/DSGVO_entity.aod | 12 +- .../DefaultAdminView_entity.aod | 2 +- .../DescriptionTranslation_entity.aod | 10 +- .../DistrictContact_entity.aod | 20 +- .../DistrictResponsible_entity.aod | 32 +- entity/District_entity/District_entity.aod | 26 +- .../DocumentTemplateLink_entity.aod | 10 +- .../DocumentTemplatePlaceOfUse_entity.aod | 10 +- .../DocumentTemplateTypeCategory_entity.aod | 10 +- .../DocumentTemplate_entity.aod | 68 +- entity/Document_entity/Document_entity.aod | 166 +--- .../DuplicateOrganisation_entity.aod | 16 +- .../DuplicatePerson_entity.aod | 22 +- .../DuplicateScanner_entity.aod | 6 +- entity/Email_entity/Email_entity.aod | 10 +- .../EmployeeRole_entity.aod | 10 +- .../EmployeeToken_entity.aod | 10 +- entity/Employee_entity/Employee_entity.aod | 116 +-- .../EwsSyncAddContacts_entity.aod | 2 +- .../ExportTemplateField_entity.aod | 10 +- .../ExportTemplatePlaceOfUse_entity.aod | 10 +- .../ExportTemplateSelection_entity.aod | 2 +- .../ExportTemplate_entity.aod | 10 +- entity/Favorite_entity/Favorite_entity.aod | 2 +- entity/Forecast_entity/Forecast_entity.aod | 10 +- entity/Gender_keyword/Gender_keyword.aod | 10 +- .../ImportField_Entity/ImportField_Entity.aod | 10 +- .../IndexSearchEntity/IndexSearchEntity.aod | 2 +- .../InterestLink_entity.aod | 10 +- entity/Interest_entity/Interest_entity.aod | 16 +- .../KeywordAttributeRelation_entity.aod | 16 +- .../KeywordAttribute_entity.aod | 16 +- .../KeywordCategory_entity.aod | 10 +- .../KeywordEntry_entity.aod | 708 +----------------- .../KnowledgeDiscussion_entity.aod | 14 +- .../KnowledgeLink_entity.aod | 20 +- .../KnowledgeManagementTagList_entity.aod | 10 +- .../KnowledgeManagementTags_entity.aod | 10 +- .../KnowledgeManagement_entity.aod | 12 +- .../KnowledgeNewsFeed_entity.aod | 2 +- .../KnowledgeRole_entity.aod | 10 +- entity/Language_entity/Language_entity.aod | 72 +- entity/LeadLog_entity/LeadLog_entity.aod | 10 +- entity/LeadTemp_entity/LeadTemp_entity.aod | 10 +- entity/Lead_entity/Lead_entity.aod | 10 +- .../LeadimportMappingAssistant_entity.aod | 10 +- .../Leadimport_entity/Leadimport_entity.aod | 20 +- .../LetterRecipient_entity.aod | 12 +- entity/Letter_entity/Letter_entity.aod | 2 +- .../LogHistory_entity/LogHistory_entity.aod | 88 +-- .../MSTTeamLink_entity/MSTTeamLink_entity.aod | 2 +- .../MSTTeamMember_entity.aod | 16 +- entity/MSTTeam_entity/MSTTeam_entity.aod | 10 +- .../MSTeamsActivityImport_entity.aod | 2 +- .../MSTeamsChannel_entity.aod | 24 +- .../MSTeamsDocument_entity.aod | 2 +- .../MSTeamsMessage_entity.aod | 14 +- entity/MailLog_entity/MailLog_entity.aod | 12 +- .../MarketingWorkflowLauncher_entity.aod | 2 +- .../MemberRoles_entity/MemberRoles_entity.aod | 10 +- entity/Member_entity/Member_entity.aod | 20 +- .../ModuleTree_entity/ModuleTree_entity.aod | 22 +- .../Notification_entity.aod | 8 +- .../ObjectProxy_entity/ObjectProxy_entity.aod | 28 +- .../ObjectRelationType_entity.aod | 12 +- .../ObjectTree_entity/ObjectTree_entity.aod | 16 +- entity/Object_entity/Object_entity.aod | 60 +- .../ObservationMultiple_entity.aod | 2 +- .../Observation_entity/Observation_entity.aod | 4 +- entity/Offer_entity/Offer_entity.aod | 46 +- entity/Offeritem_entity/Offeritem_entity.aod | 10 +- entity/Order_entity/Order_entity.aod | 28 +- entity/Orderitem_entity/Orderitem_entity.aod | 16 +- .../Organisation_entity.aod | 155 +--- .../OrganisationsMultiEdit_entity.aod | 10 +- .../PermissionAction_entity.aod | 10 +- .../PermissionCalendar_entity.aod | 18 +- .../PermissionDetail_entity.aod | 22 +- .../PermissionMetaData_entity.aod | 10 +- .../PermissionOverview_entity.aod | 16 +- entity/Person_entity/Person_entity.aod | 101 +-- .../PlanningAddToOrganisations_entity.aod | 2 +- ...nningChangeStatusAndResponsible_entity.aod | 2 +- entity/Planning_entity/Planning_entity.aod | 26 +- .../PrivatePerson_entity.aod | 10 +- entity/Prod2prod_entity/Prod2prod_entity.aod | 12 +- entity/Product_entity/Product_entity.aod | 54 +- .../Productprice_entity.aod | 22 +- .../QuickEntry_entity/QuickEntry_entity.aod | 2 +- .../RoleChildren_entity.aod | 10 +- .../RoleParent_entity/RoleParent_entity.aod | 10 +- entity/Role_entity/Role_entity.aod | 36 +- .../SalesprojectAnalyses_entity.aod | 2 +- .../SalesprojectConversionRate_entity.aod | 10 +- .../SalesprojectMilestone_entity.aod | 18 +- .../SalesprojectPhaseDefinition_entity.aod | 8 +- .../SalesprojectPhase_entity.aod | 16 +- .../SalesprojectSource_entity.aod | 10 +- .../Salesproject_entity.aod | 52 +- .../SalutationDistinct_entity.aod | 10 +- .../SalutationTitleDistinct_entity.aod | 10 +- .../Salutation_entity/Salutation_entity.aod | 10 +- .../SerialLetterAddRecipients_entity.aod | 2 +- .../SerialLetter_entity.aod | 16 +- .../SingleObject_entity.aod | 2 +- entity/Social_entity/Social_entity.aod | 2 +- entity/Stock_entity/Stock_entity.aod | 16 +- .../SupportTicket_entity.aod | 16 +- entity/TaskLink_entity/TaskLink_entity.aod | 16 +- entity/Task_entity/Task_entity.aod | 78 +- .../Timetracking_entity.aod | 10 +- .../TurnoverTree_entity.aod | 10 +- entity/Turnover_entity/Turnover_entity.aod | 24 +- .../UniversalFileProcessor_entity.aod | 2 +- .../UnlinkedMailMappingLink_entity.aod | 10 +- .../UnlinkedMailMappingWrapper_entity.aod | 2 +- .../UnlinkedMail_entity.aod | 6 +- .../UserhelpResources_entity.aod | 2 +- .../Usersettings_entity.aod | 2 +- .../VisitPlanEmployeeWeek_entity.aod | 2 +- .../VisitPlanEntry_entity.aod | 10 +- .../VisitRecommendation_entity.aod | 10 +- .../WeblinkClick_entity.aod | 16 +- .../WeblinkTag_entity/WeblinkTag_entity.aod | 10 +- entity/Weblink_entity/Weblink_entity.aod | 2 +- .../WorkflowDefinition_entity.aod | 22 +- .../WorkflowInstanceHistory_entity.aod | 10 +- .../WorkflowInstance_entity.aod | 10 +- .../WorkflowLauncher_entity.aod | 2 +- .../WorkflowModel_entity.aod | 2 +- .../WorkflowSignal_entity.aod | 10 +- .../WorkflowStartConfig_entity.aod | 10 +- .../WorkflowTask_entity.aod | 28 +- .../WorkflowVariableValue_entity.aod | 10 +- neonView/OrderMain_view/OrderMain_view.aod | 6 +- .../RoleChildrenList_view.aod | 2 +- .../_____PREFERENCES_PROJECT.aod | 12 +- 194 files changed, 249 insertions(+), 4165 deletions(-) create mode 100644 aliasDefinition/WorkflowModeler/WorkflowModeler.aod diff --git a/.aditoprj/project.version b/.aditoprj/project.version index 94b3c6aab8..c476bb59ef 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/aliasDefinition/WorkflowModeler/WorkflowModeler.aod b/aliasDefinition/WorkflowModeler/WorkflowModeler.aod new file mode 100644 index 0000000000..6f342ac951 --- /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/entity/360Degree_entity/360Degree_entity.aod b/entity/360Degree_entity/360Degree_entity.aod index cf7b453f03..3fee3be4df 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/ActivityLink_entity/ActivityLink_entity.aod b/entity/ActivityLink_entity/ActivityLink_entity.aod index d9d7007ec9..44ea0b63d5 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/Activity_entity/Activity_entity.aod b/entity/Activity_entity/Activity_entity.aod index 968e15b45c..d14e21a69c 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> diff --git a/entity/AddressType_entity/AddressType_entity.aod b/entity/AddressType_entity/AddressType_entity.aod index ed17a9345d..8c570720e6 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 8ae67be093..3534d6d9fb 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> @@ -17,14 +17,6 @@ <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> @@ -76,14 +68,6 @@ <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> @@ -100,14 +84,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> @@ -136,14 +112,6 @@ <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> diff --git a/entity/Address_entity/Address_entity.aod b/entity/Address_entity/Address_entity.aod index 320df4d9eb..686d8185ca 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> @@ -95,14 +95,6 @@ <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,26 +125,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> - <entityDependency> - <name>03534109-04a7-4deb-b139-5c548aa2fd00</name> - <entityName>CommunicationChannel_entity</entityName> - <fieldName>Addresses</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ContactType_param</name> @@ -189,14 +161,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> @@ -234,26 +198,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> @@ -462,20 +406,6 @@ <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> diff --git a/entity/AdminViewRow_entity/AdminViewRow_entity.aod b/entity/AdminViewRow_entity/AdminViewRow_entity.aod index 3310f1bc7a..342ddfd282 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> diff --git a/entity/Analyses_entity/Analyses_entity.aod b/entity/Analyses_entity/Analyses_entity.aod index 7d49b0bd6a..66b762cd1e 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 f074dfa8dc..8426dd6b95 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,110 +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> - <entityDependency> - <name>b3cf7b34-6ea4-411a-8123-34afd7e10cfc</name> - <entityName>MailLog_entity</entityName> - <fieldName>Contacts</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>578dbb91-ea76-40ec-9dbd-9acf462ceba7</name> - <entityName>BulkMailTestRecipient_entity</entityName> - <fieldName>Contacts</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>cb874ee2-e147-4311-bdf1-a94df537bb9e</name> - <entityName>WeblinkClick_entity</entityName> - <fieldName>Contacts</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> @@ -201,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> diff --git a/entity/AppointmentLink_entity/AppointmentLink_entity.aod b/entity/AppointmentLink_entity/AppointmentLink_entity.aod index f049394bc2..fa6f725f68 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 ebfd0f83c6..c5080755c5 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> diff --git a/entity/AroundLocation_entity/AroundLocation_entity.aod b/entity/AroundLocation_entity/AroundLocation_entity.aod index 1ccc8984c6..2af99e89b5 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 05c0bf6f07..46767f5f58 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/AttributeUsage_entity/AttributeUsage_entity.aod b/entity/AttributeUsage_entity/AttributeUsage_entity.aod index 9afed77c7a..6838529358 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> @@ -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/Attribute_entity/Attribute_entity.aod b/entity/Attribute_entity/Attribute_entity.aod index 52049d2bae..4fb51c046e 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/AuditLogHistory_entity/AuditLogHistory_entity.aod b/entity/AuditLogHistory_entity/AuditLogHistory_entity.aod index 4425b01ed7..e094807eb8 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 e7f67f8f1e..63b472319f 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> diff --git a/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod b/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod index ef0e595219..3257dcb077 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> @@ -39,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> diff --git a/entity/BulkMailStatusChart_entity/BulkMailStatusChart_entity.aod b/entity/BulkMailStatusChart_entity/BulkMailStatusChart_entity.aod index 8449b088e7..3f31aadc56 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/BulkMailTestRecipient_entity/BulkMailTestRecipient_entity.aod b/entity/BulkMailTestRecipient_entity/BulkMailTestRecipient_entity.aod index 8181a5415a..cfea263cd5 100644 --- a/entity/BulkMailTestRecipient_entity/BulkMailTestRecipient_entity.aod +++ b/entity/BulkMailTestRecipient_entity/BulkMailTestRecipient_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>BulkMailTestRecipient_entity</name> <title>Test Recipient</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -38,14 +38,6 @@ </entityField> <entityProvider> <name>BulkMailTestRecipients</name> - <dependencies> - <entityDependency> - <name>bf4102ef-e33c-4bdc-b62d-844f466f8617</name> - <entityName>BulkMail_entity</entityName> - <fieldName>BulkMailTestRecipients</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityConsumer> <name>Contacts</name> diff --git a/entity/BulkMailTesting_entity/BulkMailTesting_entity.aod b/entity/BulkMailTesting_entity/BulkMailTesting_entity.aod index e4d9fa98c6..567fc93585 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 fa5dbdfb87..5057ec6063 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> @@ -256,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> diff --git a/entity/CampaignAddParticipants_entity/CampaignAddParticipants_entity.aod b/entity/CampaignAddParticipants_entity/CampaignAddParticipants_entity.aod index a2abae7874..f867fcdc40 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> diff --git a/entity/CampaignAnalysis_entity/CampaignAnalysis_entity.aod b/entity/CampaignAnalysis_entity/CampaignAnalysis_entity.aod index 432e1d4f79..5bd52372fc 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 58a579ab19..07c1ff71b4 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 9016cfd74c..e7262dec3c 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 5e514a302a..f33503df38 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 3466c72ea7..b32ed04cf4 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> diff --git a/entity/CampaignPlanning_entity/CampaignPlanning_entity.aod b/entity/CampaignPlanning_entity/CampaignPlanning_entity.aod index 33c4b451ad..b36112d302 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 00d2090a78..ddef5bb760 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> diff --git a/entity/Campaign_entity/Campaign_entity.aod b/entity/Campaign_entity/Campaign_entity.aod index a7d5b31ea8..7e0c6abd26 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,38 +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> - <entityDependency> - <name>3cc06d94-0274-49be-8d1b-7a5f2a3a689e</name> - <entityName>Person_entity</entityName> - <fieldName>Campaigns</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 e8509f2137..d338522fd9 100644 --- a/entity/ChecklistEntryValue_entity/ChecklistEntryValue_entity.aod +++ b/entity/ChecklistEntryValue_entity/ChecklistEntryValue_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>ChecklistEntryValue_entity</name> <title>Checklist entries</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -58,20 +58,6 @@ <entityProvider> <name>ChecklistEntryValues</name> <titlePlural>Checklist entries</titlePlural> - <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> <entityField> <name>UID</name> @@ -85,7 +71,7 @@ <name>setCompleted</name> <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> diff --git a/entity/ChecklistEntry_entity/ChecklistEntry_entity.aod b/entity/ChecklistEntry_entity/ChecklistEntry_entity.aod index d484cdac8c..bbc1bc5a7b 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> @@ -52,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/Checklist_entity/Checklist_entity.aod b/entity/Checklist_entity/Checklist_entity.aod index 5addd3e3f0..fab6c2cd44 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 b5da465e7f..264b4d4233 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> diff --git a/entity/ClassificationGrading_entity/ClassificationGrading_entity.aod b/entity/ClassificationGrading_entity/ClassificationGrading_entity.aod index 81876c26e6..2ade3b1f97 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> @@ -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> diff --git a/entity/ClassificationGroup_entity/ClassificationGroup_entity.aod b/entity/ClassificationGroup_entity/ClassificationGroup_entity.aod index 68724063ba..82f3b1f94c 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 e90b0af702..55ab29ac71 100644 --- a/entity/ClassificationScore_entity/ClassificationScore_entity.aod +++ b/entity/ClassificationScore_entity/ClassificationScore_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>ClassificationScore_entity</name> <title>Possible Value</title> <majorModelMode>DISTRIBUTED</majorModelMode> diff --git a/entity/ClassificationType_entity/ClassificationType_entity.aod b/entity/ClassificationType_entity/ClassificationType_entity.aod index 749feeedc3..8284348cbd 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> diff --git a/entity/Classification_entity/Classification_entity.aod b/entity/Classification_entity/Classification_entity.aod index e12475949f..086574ccbc 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> @@ -42,20 +42,6 @@ <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> diff --git a/entity/CommRestriction_Entity/CommRestriction_Entity.aod b/entity/CommRestriction_Entity/CommRestriction_Entity.aod index c685eb6e0c..d7cc3907cb 100644 --- a/entity/CommRestriction_Entity/CommRestriction_Entity.aod +++ b/entity/CommRestriction_Entity/CommRestriction_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>CommRestriction_Entity</name> <title>Advertising ban</title> <majorModelMode>DISTRIBUTED</majorModelMode> diff --git a/entity/CommunicationChannel_entity/CommunicationChannel_entity.aod b/entity/CommunicationChannel_entity/CommunicationChannel_entity.aod index 1ad20c2a04..76d1239d44 100644 --- a/entity/CommunicationChannel_entity/CommunicationChannel_entity.aod +++ b/entity/CommunicationChannel_entity/CommunicationChannel_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>CommunicationChannel_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <entityFields> @@ -49,14 +49,6 @@ <entityProvider> <name>ContactCommunicationChannels</name> <targetConsumerProcess>%aditoprj%/entity/CommunicationChannel_entity/entityfields/contactcommunicationchannels/targetConsumerProcess.js</targetConsumerProcess> - <dependencies> - <entityDependency> - <name>a1ac784e-a932-48a5-9aa5-285f8c9ad483</name> - <entityName>CommunicationSettings_entity</entityName> - <fieldName>CommunicationChannels</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityParameter> <name>CommunicationChannelType_param</name> diff --git a/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod b/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod index d6c10b05f9..cfa279a1e8 100644 --- a/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod +++ b/entity/CommunicationSettings_entity/CommunicationSettings_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>CommunicationSettings_entity</name> <title>Communication Settings</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -18,20 +18,6 @@ </entityProvider> <entityProvider> <name>SettingsForContact</name> - <dependencies> - <entityDependency> - <name>811c8c4c-20f8-4e20-9ae3-9aa7ae5e1dc0</name> - <entityName>Person_entity</entityName> - <fieldName>ContactCommunicationSettings</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>f94ce98a-46e1-4666-a7ef-2685baa3fcae</name> - <entityName>Organisation_entity</entityName> - <fieldName>ContactCommunicationSettings</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>COMMUNICATIONSETTINGSID</name> diff --git a/entity/Communication_entity/Communication_entity.aod b/entity/Communication_entity/Communication_entity.aod index d050640791..237914cda0 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,38 +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> - <entityDependency> - <name>8266f568-f15d-42c5-8ba3-5254fed7fd99</name> - <entityName>CommunicationChannel_entity</entityName> - <fieldName>Communications</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>CommCategory_param</name> @@ -123,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> @@ -165,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> @@ -272,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/Competition_entity/Competition_entity.aod b/entity/Competition_entity/Competition_entity.aod index 7c7f311b94..1fe54675aa 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/Contact_entity/Contact_entity.aod b/entity/Contact_entity/Contact_entity.aod index 76d2877c06..7918197fb3 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/Context_entity/Context_entity.aod b/entity/Context_entity/Context_entity.aod index 96796bb96d..6d18b16f96 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> diff --git a/entity/Contract_entity/Contract_entity.aod b/entity/Contract_entity/Contract_entity.aod index 49afa5872c..0b5a6a6d22 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> @@ -201,20 +187,6 @@ <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> diff --git a/entity/Countries_Entity/Countries_Entity.aod b/entity/Countries_Entity/Countries_Entity.aod index dd854efc61..1b89d6d86e 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 dd76a30e26..f06f4c4edd 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 index b9124ce356..51a8dfdf87 100644 --- a/entity/DSGVOConfigurationAttribute_entity/DSGVOConfigurationAttribute_entity.aod +++ b/entity/DSGVOConfigurationAttribute_entity/DSGVOConfigurationAttribute_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>DSGVOConfigurationAttribute_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/DSGVOConfigurationAttribute_entity/documentation.adoc</documentation> @@ -31,14 +31,6 @@ </entityField> <entityProvider> <name>DSGVOAttributeConfig</name> - <dependencies> - <entityDependency> - <name>96e9f7e0-1f47-47d5-beee-0e28b3e203e1</name> - <entityName>DSGVOConfiguration_entity</entityName> - <fieldName>DSGVOConfigurationAttributes</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityActionGroup> <name>FilterActions</name> @@ -50,7 +42,7 @@ <title>change DSGVO Relevance</title> <onActionProcess>%aditoprj%/entity/DSGVOConfigurationAttribute_entity/entityfields/filteractions/children/changedsgvorelevance/onActionProcess.js</onActionProcess> <isMenuAction v="true" /> - <isSelectionAction v="true" /> + <selectionType>MULTI</selectionType> </entityActionField> </children> </entityActionGroup> diff --git a/entity/DSGVOConfiguration_entity/DSGVOConfiguration_entity.aod b/entity/DSGVOConfiguration_entity/DSGVOConfiguration_entity.aod index 5336dde6e7..1c47b5724d 100644 --- a/entity/DSGVOConfiguration_entity/DSGVOConfiguration_entity.aod +++ b/entity/DSGVOConfiguration_entity/DSGVOConfiguration_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>DSGVOConfiguration_entity</name> <title>DSGVO Configuration</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -102,7 +102,7 @@ <title>Open Contacts</title> <onActionProcess>%aditoprj%/entity/DSGVOConfiguration_entity/entityfields/opencontacts/onActionProcess.js</onActionProcess> <isMenuAction v="true" /> - <isSelectionAction v="false" /> + <selectionType>UNBOUND</selectionType> <iconId>VAADIN:USERS</iconId> </entityActionField> <entityConsumer> diff --git a/entity/DSGVODeleteFlag_entity/DSGVODeleteFlag_entity.aod b/entity/DSGVODeleteFlag_entity/DSGVODeleteFlag_entity.aod index 2689a96d7c..e34d12654b 100644 --- a/entity/DSGVODeleteFlag_entity/DSGVODeleteFlag_entity.aod +++ b/entity/DSGVODeleteFlag_entity/DSGVODeleteFlag_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>DSGVODeleteFlag_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/DSGVODeleteFlag_entity/documentation.adoc</documentation> @@ -44,14 +44,6 @@ </entityField> <entityProvider> <name>DSGVODeleteFlags</name> - <dependencies> - <entityDependency> - <name>94915ca8-aca8-457a-ac12-05408ba8ab37</name> - <entityName>Person_entity</entityName> - <fieldName>DSGVODeleteFlags</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityParameter> <name>ContactId_param</name> diff --git a/entity/DSGVOInfo_entity/DSGVOInfo_entity.aod b/entity/DSGVOInfo_entity/DSGVOInfo_entity.aod index 674803b125..215011e99f 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 b3482dff7d..df5b97c20f 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/DSGVO_entity/DSGVO_entity.aod b/entity/DSGVO_entity/DSGVO_entity.aod index 1e6d35b729..58c2e84794 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> @@ -176,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/DefaultAdminView_entity/DefaultAdminView_entity.aod b/entity/DefaultAdminView_entity/DefaultAdminView_entity.aod index a5e20a9243..75ad6975d0 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 858fe5c982..fc6a33e2c9 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 a8f9c24814..49da7262c1 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 199213fe56..8cf24770c4 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,14 +228,6 @@ <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> </entityFields> <recordContainers> diff --git a/entity/District_entity/District_entity.aod b/entity/District_entity/District_entity.aod index a195aacda5..66c1873901 100644 --- a/entity/District_entity/District_entity.aod +++ b/entity/District_entity/District_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>District_entity</name> <title>District definition</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -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/DocumentTemplateLink_entity/DocumentTemplateLink_entity.aod b/entity/DocumentTemplateLink_entity/DocumentTemplateLink_entity.aod index 843d06ed29..f113a88dd1 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 4ac6764a9d..e8e7b3f14a 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/DocumentTemplateTypeCategory_entity/DocumentTemplateTypeCategory_entity.aod b/entity/DocumentTemplateTypeCategory_entity/DocumentTemplateTypeCategory_entity.aod index cd4ef60ae5..245ea52fe1 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 30e957717b..59d3e3d3a7 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/Document_entity/Document_entity.aod b/entity/Document_entity/Document_entity.aod index 59a7101729..e0f413cd2f 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> @@ -128,104 +120,6 @@ <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> @@ -250,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> @@ -330,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,7 +218,7 @@ <onActionProcess>%aditoprj%/entity/Document_entity/entityfields/document_actions/children/openfileaction/onActionProcess.js</onActionProcess> <isMenuAction v="true" /> <isObjectAction v="false" /> - <isSelectionAction v="true" /> + <selectionType>MULTI</selectionType> <isSaveAction v="false" /> <iconId>VAADIN:FOLDER_OPEN</iconId> <state>AUTO</state> @@ -387,7 +229,7 @@ <title>Download</title> <onActionProcess>%aditoprj%/entity/Document_entity/entityfields/document_actions/children/downloadfilesaction/onActionProcess.js</onActionProcess> <isObjectAction v="false" /> - <isSelectionAction v="true" /> + <selectionType>MULTI</selectionType> <iconId>VAADIN:DOWNLOAD</iconId> <state>EDITABLE</state> </entityActionField> @@ -397,7 +239,7 @@ <name>openSingleFileAction</name> <title>${ACTION_DO_OPEN}</title> <onActionProcess>%aditoprj%/entity/Document_entity/entityfields/opensinglefileaction/onActionProcess.js</onActionProcess> - <isSelectionAction v="false" /> + <selectionType>UNBOUND</selectionType> <iconId>VAADIN:FOLDER_OPEN</iconId> <state>AUTO</state> <stateProcess>%aditoprj%/entity/Document_entity/entityfields/opensinglefileaction/stateProcess.js</stateProcess> diff --git a/entity/DuplicateOrganisation_entity/DuplicateOrganisation_entity.aod b/entity/DuplicateOrganisation_entity/DuplicateOrganisation_entity.aod index e651b0227e..bc20fd9bae 100644 --- a/entity/DuplicateOrganisation_entity/DuplicateOrganisation_entity.aod +++ b/entity/DuplicateOrganisation_entity/DuplicateOrganisation_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>DuplicateOrganisation_entity</name> <title>Duplicate</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -15,14 +15,6 @@ <name>#PROVIDER</name> <targetContextField>targetContext</targetContextField> <targetIdField>CONTACTID</targetIdField> - <dependencies> - <entityDependency> - <name>a666bb24-2875-481a-879e-86b8e8517c1e</name> - <entityName>Organisation_entity</entityName> - <fieldName>Duplicates</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityProvider> <name>#PROVIDER_AGGREGATES</name> @@ -56,7 +48,7 @@ <title>${IGNORE_DUPLICATE}</title> <onActionProcess>%aditoprj%/entity/DuplicateOrganisation_entity/entityfields/filteractions/children/ignoreduplicates/onActionProcess.js</onActionProcess> <isObjectAction v="false" /> - <isSelectionAction v="true" /> + <selectionType>MULTI</selectionType> <iconId>VAADIN:CLOSE</iconId> <titleProcess>%aditoprj%/entity/DuplicateOrganisation_entity/entityfields/filteractions/children/ignoreduplicates/titleProcess.js</titleProcess> </entityActionField> @@ -64,14 +56,14 @@ <name>mergeselectedintocurrent</name> <title>Integrate selected into current contact</title> <onActionProcess>%aditoprj%/entity/DuplicateOrganisation_entity/entityfields/filteractions/children/mergeselectedintocurrent/onActionProcess.js</onActionProcess> - <isSelectionAction v="true" /> + <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> - <isSelectionAction v="true" /> + <selectionType>MULTI</selectionType> <iconId>NEON:EXPORT</iconId> </entityActionField> </children> diff --git a/entity/DuplicatePerson_entity/DuplicatePerson_entity.aod b/entity/DuplicatePerson_entity/DuplicatePerson_entity.aod index 76bf7dd0ac..09b341ca2b 100644 --- a/entity/DuplicatePerson_entity/DuplicatePerson_entity.aod +++ b/entity/DuplicatePerson_entity/DuplicatePerson_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>DuplicatePerson_entity</name> <title>Duplicate</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -15,20 +15,6 @@ <name>#PROVIDER</name> <targetContextField>parentContext</targetContextField> <targetIdField>CONTACTID</targetIdField> - <dependencies> - <entityDependency> - <name>7f8210c4-644f-4c45-a571-e232582f8d34</name> - <entityName>Person_entity</entityName> - <fieldName>Duplicates</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>fd3253c7-f3f8-483f-8f49-6192f4e75979</name> - <entityName>Person_entity</entityName> - <fieldName>Duplicates</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityProvider> <name>#PROVIDER_AGGREGATES</name> @@ -48,7 +34,7 @@ <title>${IGNORE_DUPLICATE}</title> <onActionProcess>%aditoprj%/entity/DuplicatePerson_entity/entityfields/filteractions/children/ignoreduplicates/onActionProcess.js</onActionProcess> <isObjectAction v="false" /> - <isSelectionAction v="true" /> + <selectionType>MULTI</selectionType> <iconId>VAADIN:CLOSE</iconId> <titleProcess>%aditoprj%/entity/DuplicatePerson_entity/entityfields/filteractions/children/ignoreduplicates/titleProcess.js</titleProcess> </entityActionField> @@ -56,14 +42,14 @@ <name>mergeselectedintocurrent</name> <title>Integrate selected into current contact</title> <onActionProcess>%aditoprj%/entity/DuplicatePerson_entity/entityfields/filteractions/children/mergeselectedintocurrent/onActionProcess.js</onActionProcess> - <isSelectionAction v="true" /> + <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> - <isSelectionAction v="true" /> + <selectionType>MULTI</selectionType> <iconId>NEON:EXPORT</iconId> </entityActionField> </children> diff --git a/entity/DuplicateScanner_entity/DuplicateScanner_entity.aod b/entity/DuplicateScanner_entity/DuplicateScanner_entity.aod index 220ca8da86..2be26b094c 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> @@ -73,7 +73,7 @@ <title>Rebuild selected entries</title> <onActionProcess>%aditoprj%/entity/DuplicateScanner_entity/entityfields/filteractions/children/rebuild/onActionProcess.js</onActionProcess> <isObjectAction v="false" /> - <isSelectionAction v="true" /> + <selectionType>MULTI</selectionType> <iconId>VAADIN:CALC</iconId> <tooltip>Rebuild all duplicates from the selected scanners</tooltip> </entityActionField> @@ -81,7 +81,7 @@ <name>viewDuplicates</name> <title>View duplicates</title> <onActionProcess>%aditoprj%/entity/DuplicateScanner_entity/entityfields/filteractions/children/viewduplicates/onActionProcess.js</onActionProcess> - <isSelectionAction v="true" /> + <selectionType>MULTI</selectionType> <iconId>VAADIN:TABLE</iconId> <tooltip>View all duplicates from this scanner</tooltip> </entityActionField> diff --git a/entity/Email_entity/Email_entity.aod b/entity/Email_entity/Email_entity.aod index 852de0f302..bd561c52e2 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 74475d9d45..6fb10f3d02 100644 --- a/entity/EmployeeRole_entity/EmployeeRole_entity.aod +++ b/entity/EmployeeRole_entity/EmployeeRole_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>EmployeeRole_entity</name> <title>Role</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -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/EmployeeToken_entity/EmployeeToken_entity.aod b/entity/EmployeeToken_entity/EmployeeToken_entity.aod index 8f90eef25a..7388aea9e4 100644 --- a/entity/EmployeeToken_entity/EmployeeToken_entity.aod +++ b/entity/EmployeeToken_entity/EmployeeToken_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>EmployeeToken_entity</name> <title>User token</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -56,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/Employee_entity/Employee_entity.aod b/entity/Employee_entity/Employee_entity.aod index d5182766d6..7d17b6b50c 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,92 +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> - <entityDependency> - <name>9c38e9ef-6f90-4e57-af45-d82539c57a0e</name> - <entityName>Planning_entity</entityName> - <fieldName>Responsible</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>b49eecba-062b-4658-a3b9-574982536fb1</name> - <entityName>PlanningChangeStatusAndResponsible_entity</entityName> - <fieldName>Responsibles</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>d1736052-573f-4774-b90b-0f8a81083cb6</name> - <entityName>PlanningAddToOrganisations_entity</entityName> - <fieldName>Responsible</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>OnlyActives_param</name> @@ -363,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/EwsSyncAddContacts_entity/EwsSyncAddContacts_entity.aod b/entity/EwsSyncAddContacts_entity/EwsSyncAddContacts_entity.aod index 332169d840..09e4da1fcd 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 dc20a3f5bb..63fc56aa97 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 7689336446..19bccd43d8 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 f68f881f9a..fe3b83665d 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 8fbadb06e1..fdfa7fc493 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 9ce8f7b404..264567968f 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> diff --git a/entity/Forecast_entity/Forecast_entity.aod b/entity/Forecast_entity/Forecast_entity.aod index 9182cdc2c8..126a8bbcf9 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> diff --git a/entity/Gender_keyword/Gender_keyword.aod b/entity/Gender_keyword/Gender_keyword.aod index 17f5aa15fe..a778a5b5d8 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 fb47af9cfe..360410fe75 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 4cd16dc36d..c2737a2c88 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 index 7f4c396f06..6b13ef837b 100644 --- a/entity/InterestLink_entity/InterestLink_entity.aod +++ b/entity/InterestLink_entity/InterestLink_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>InterestLink_entity</name> <title>Interest</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -62,14 +62,6 @@ </entityParameter> <entityProvider> <name>InterestsForContact</name> - <dependencies> - <entityDependency> - <name>97de1501-3646-475b-bf3c-2fec20843ee4</name> - <entityName>Person_entity</entityName> - <fieldName>InterestLinks</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>DESCRIPTION</name> diff --git a/entity/Interest_entity/Interest_entity.aod b/entity/Interest_entity/Interest_entity.aod index f2485ca1f2..4dbed8e6bf 100644 --- a/entity/Interest_entity/Interest_entity.aod +++ b/entity/Interest_entity/Interest_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>Interest_entity</name> <title>Interest</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -11,20 +11,6 @@ <entityFields> <entityProvider> <name>#PROVIDER</name> - <dependencies> - <entityDependency> - <name>a7f69959-a663-4089-828f-71cdc461262b</name> - <entityName>InterestLink_entity</entityName> - <fieldName>Interests</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>3b09958b-0175-47fa-9528-2d5570c21162</name> - <entityName>BulkMail_entity</entityName> - <fieldName>Interests</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityProvider> <name>#PROVIDER_AGGREGATES</name> diff --git a/entity/KeywordAttributeRelation_entity/KeywordAttributeRelation_entity.aod b/entity/KeywordAttributeRelation_entity/KeywordAttributeRelation_entity.aod index c21c9e8558..ce371ea313 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,20 +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> - <entityDependency> - <name>e6e2abfd-b504-47ff-bdb3-5927aaf9df5c</name> - <entityName>DSGVOConfiguration_entity</entityName> - <fieldName>ConfigKeywordAttributeRelation</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 f323e21738..af75707b37 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 fb84b88df6..c4cfe16844 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/KeywordEntry_entity/KeywordEntry_entity.aod b/entity/KeywordEntry_entity/KeywordEntry_entity.aod index c4d78ac713..43a8ea7d42 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,658 +82,6 @@ <lookupIdfield>KEYID</lookupIdfield> <documentation>%aditoprj%/entity/KeywordEntry_entity/entityfields/specificcontainerkeywords/documentation.adoc</documentation> <recordContainer>jDito</recordContainer> - <dependencies> - <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>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> - <entityDependency> - <name>414ad662-727b-4e9f-9e86-0659d92ec60d</name> - <entityName>DuplicatePerson_entity</entityName> - <fieldName>KeywordContactStates</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>0f8f9bfc-379c-4f05-8364-8270e718fe9a</name> - <entityName>DuplicateOrganisation_entity</entityName> - <fieldName>KeywordContactStates</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>b78c0dd7-a35c-4d9b-9a23-1a20e7e41464</name> - <entityName>DuplicateOrganisation_entity</entityName> - <fieldName>KeywordOrganisationTypes</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>98608b12-9927-4197-adfe-1398a388bcb0</name> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>8cfca9b8-3128-4e31-bb77-358d500c4b9a</name> - <entityName>Weblink_entity</entityName> - <fieldName>KeywordLinkType</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>7a7e6cc4-3e5b-4a2b-8ed9-1e84436cac15</name> - <entityName>WeblinkTag_entity</entityName> - <fieldName>KeywordLinkTags</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>f85bfcbc-627a-4746-acc1-e228b56ab122</name> - <entityName>CommunicationSettings_entity</entityName> - <fieldName>StatusKeyword</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>d6fe81c3-fadc-444d-8962-53c64b8ecd33</name> - <entityName>CommunicationSettings_entity</entityName> - <fieldName>MediumKeyword</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>81b5b8f4-74a7-42fe-84d1-05211ddcd221</name> - <entityName>CommunicationSettings_entity</entityName> - <fieldName>ChannelTypeKeyword</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>23da94c2-910f-4b89-a92e-0826e00fe293</name> - <entityName>Interest_entity</entityName> - <fieldName>StatusKeyword</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>9afcf60e-4854-45bb-a9f9-924926be7b25</name> - <entityName>InterestLink_entity</entityName> - <fieldName>StatusKeyword</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>a4d04777-82dc-4384-a4a5-c6a4a71e7a65</name> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>bf774c79-2902-4fdb-a8d2-8a157294bc27</name> - <entityName>Planning_entity</entityName> - <fieldName>KeywordKinds</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>3a570fef-552b-4d94-b010-33a7ffee7a96</name> - <entityName>Planning_entity</entityName> - <fieldName>KeywordStatus</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>5dc1bb58-75cb-4214-b6f5-065e8de26779</name> - <entityName>Planning_entity</entityName> - <fieldName>KeywordGroupcode</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>49358965-6e83-4279-82a8-babf257c3b5f</name> - <entityName>PlanningAddToOrganisations_entity</entityName> - <fieldName>KeywordStatus</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>f7aa1856-6896-4531-8b15-d3c5504172fb</name> - <entityName>PlanningAddToOrganisations_entity</entityName> - <fieldName>KeywordGroupcode</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>12a0dd2c-57f2-4277-b25c-9f824b82308d</name> - <entityName>PlanningChangeStatusAndResponsible_entity</entityName> - <fieldName>KeywordStatus</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>050100cf-7f48-4951-a1dc-343927e0a2af</name> - <entityName>SalesprojectPhaseDefinition_entity</entityName> - <fieldName>KeywordProbabilitySalesproject</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>6c34847b-56b1-4486-a31a-2279b15dfff0</name> - <entityName>Salesproject_entity</entityName> - <fieldName>KeywordProbabilitySalesproject</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>9b82186e-f230-4af9-b77e-72b750c68d27</name> - <entityName>Offer_entity</entityName> - <fieldName>KeywordProbabilityOffer</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>48d817dc-e0fd-4d4b-bb48-3567a570105d</name> - <entityName>Weblink_entity</entityName> - <fieldName>KeywordActionTypes</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>OnlyActives_param</name> @@ -851,32 +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> - <entityDependency> - <name>815a5b03-64ec-4480-8a2b-f02077386158</name> - <entityName>Organisation_entity</entityName> - <fieldName>KeywordContactStates</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>51a15faf-a4a8-45be-8aae-416e6288439f</name> - <entityName>DSGVODeleteFlag_entity</entityName> - <fieldName>DSGVOReasonKeywords</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>a96898c5-5af2-4e91-84b0-ed079bbfbe06</name> - <entityName>Person_entity</entityName> - <fieldName>KeywordContactStates</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ContainerName_param</name> @@ -888,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/KnowledgeDiscussion_entity/KnowledgeDiscussion_entity.aod b/entity/KnowledgeDiscussion_entity/KnowledgeDiscussion_entity.aod index ae567dde14..9c3cceddc4 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 6b817307e8..06a1067217 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 ce3999d283..98a8aab49e 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 3047fb341e..f80e360b29 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 515e42af17..67a9351abb 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> @@ -132,14 +132,6 @@ <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> @@ -203,7 +195,7 @@ <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> diff --git a/entity/KnowledgeNewsFeed_entity/KnowledgeNewsFeed_entity.aod b/entity/KnowledgeNewsFeed_entity/KnowledgeNewsFeed_entity.aod index 044c654b10..645f4066b1 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 a3aa8d298e..9c72617379 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 84fea3b199..e8c4852d6f 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 6ebe043221..823aabceea 100644 --- a/entity/LeadLog_entity/LeadLog_entity.aod +++ b/entity/LeadLog_entity/LeadLog_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>LeadLog_entity</name> <description></description> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -43,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/LeadTemp_entity/LeadTemp_entity.aod b/entity/LeadTemp_entity/LeadTemp_entity.aod index b8ae307bfe..b478047488 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 dd2b1c8875..d30008faf2 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,14 +52,6 @@ <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> diff --git a/entity/LeadimportMappingAssistant_entity/LeadimportMappingAssistant_entity.aod b/entity/LeadimportMappingAssistant_entity/LeadimportMappingAssistant_entity.aod index 1d52cd2f81..470ed88432 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 6dd8755383..3bece6cbcf 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/LetterRecipient_entity/LetterRecipient_entity.aod b/entity/LetterRecipient_entity/LetterRecipient_entity.aod index c69902cd77..2672cecc14 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/Letter_entity/Letter_entity.aod b/entity/Letter_entity/Letter_entity.aod index 1cd209bbe2..8d06b2a2c2 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 059c91250d..5337d8f6ea 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 3660a3783e..799395a268 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 3c69226444..afae0bf214 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 16929c27f7..d210c61424 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 5a3b3cc6b8..cd48a813bf 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 88467d4464..f61de16eed 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 6ba0493ae1..07c7f724cd 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 eb9b4954de..f505211227 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 index 5fc9bcb17e..431f9c0c31 100644 --- a/entity/MailLog_entity/MailLog_entity.aod +++ b/entity/MailLog_entity/MailLog_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>MailLog_entity</name> <title>Maillog</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -78,14 +78,6 @@ </entityParameter> <entityProvider> <name>MailLogs</name> - <dependencies> - <entityDependency> - <name>f089388e-d3b7-49b5-bcb6-69de2229b1d3</name> - <entityName>BulkMail_entity</entityName> - <fieldName>MailLogs</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ObjectType_param</name> @@ -108,7 +100,7 @@ <onActionProcess>%aditoprj%/entity/MailLog_entity/entityfields/recipientactions/children/downloademl/onActionProcess.js</onActionProcess> <isMenuAction v="true" /> <isObjectAction v="true" /> - <isSelectionAction v="true" /> + <selectionType>MULTI</selectionType> </entityActionField> </children> </entityActionGroup> diff --git a/entity/MarketingWorkflowLauncher_entity/MarketingWorkflowLauncher_entity.aod b/entity/MarketingWorkflowLauncher_entity/MarketingWorkflowLauncher_entity.aod index 272d727e2b..1cc1dc569c 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 969210f822..39185cc9c1 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 1db580cf75..97b8ff6f21 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> diff --git a/entity/ModuleTree_entity/ModuleTree_entity.aod b/entity/ModuleTree_entity/ModuleTree_entity.aod index f799c2ef9b..c380d83ddb 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 a6d76f43b4..494d9bcb8b 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> @@ -98,7 +98,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 +108,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 +118,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 71ef1a617e..de754623cf 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> diff --git a/entity/ObjectRelationType_entity/ObjectRelationType_entity.aod b/entity/ObjectRelationType_entity/ObjectRelationType_entity.aod index 3ed24f67b2..09c648f8e1 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> @@ -145,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/ObjectTree_entity/ObjectTree_entity.aod b/entity/ObjectTree_entity/ObjectTree_entity.aod index 462a0a7c15..0da39a07eb 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> @@ -19,20 +19,6 @@ <targetContextField>TARGET_CONTEXT</targetContextField> <targetIdField>TARGET_ID</targetIdField> <documentation>%aditoprj%/entity/ObjectTree_entity/entityfields/treeprovider/documentation.adoc</documentation> - <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> <children> <entityParameter> <name>Uid_param</name> diff --git a/entity/Object_entity/Object_entity.aod b/entity/Object_entity/Object_entity.aod index 860935ef74..6aba8ccb6b 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 e62d9e9e4e..e60da1f9ce 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> diff --git a/entity/Observation_entity/Observation_entity.aod b/entity/Observation_entity/Observation_entity.aod index 56b10c9389..e69c04a5bb 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> @@ -205,7 +205,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/Offer_entity/Offer_entity.aod b/entity/Offer_entity/Offer_entity.aod index 88bd70bb61..04e18008a2 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> @@ -376,26 +362,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> @@ -712,14 +678,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> @@ -1107,7 +1065,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> diff --git a/entity/Offeritem_entity/Offeritem_entity.aod b/entity/Offeritem_entity/Offeritem_entity.aod index 019a47e172..f6360e58a2 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> @@ -168,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> diff --git a/entity/Order_entity/Order_entity.aod b/entity/Order_entity/Order_entity.aod index 5bf30a370a..e1f343fcba 100644 --- a/entity/Order_entity/Order_entity.aod +++ b/entity/Order_entity/Order_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>Order_entity</name> <title>Receipt</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -17,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> diff --git a/entity/Orderitem_entity/Orderitem_entity.aod b/entity/Orderitem_entity/Orderitem_entity.aod index 054bfac329..6c64a71bd8 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> @@ -141,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> diff --git a/entity/Organisation_entity/Organisation_entity.aod b/entity/Organisation_entity/Organisation_entity.aod index 24e964ce76..0e41e000d3 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> @@ -137,79 +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> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>fa1b6124-1e00-4fa0-8c04-debc19f58d95</name> - <entityName>DuplicatePerson_entity</entityName> - <fieldName>Organisations</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>640a8509-1972-4dc5-980e-68832f1c03c5</name> - <entityName>Planning_entity</entityName> - <fieldName>Organisations</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>3ceb7668-285a-4169-b71a-b64edc206b34</name> - <entityName>OrganisationsMultiEdit_entity</entityName> - <fieldName>Organisations</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>75b4de32-4fd6-4223-80f5-908aeb533577</name> - <entityName>Turnover_entity</entityName> - <fieldName>Organisations</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>WithPrivate_param</name> @@ -330,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> @@ -657,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> @@ -727,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> @@ -1021,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> @@ -1282,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> @@ -1330,7 +1183,7 @@ <title>Create planning</title> <onActionProcess>%aditoprj%/entity/Organisation_entity/entityfields/filterviewactiongroup/children/addplanningtoorganisations/onActionProcess.js</onActionProcess> <isObjectAction v="false" /> - <isSelectionAction v="false" /> + <selectionType>UNBOUND</selectionType> <iconId>VAADIN:MONEY</iconId> </entityActionField> </children> @@ -1389,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> diff --git a/entity/OrganisationsMultiEdit_entity/OrganisationsMultiEdit_entity.aod b/entity/OrganisationsMultiEdit_entity/OrganisationsMultiEdit_entity.aod index e423affb31..2ba2c4ea5f 100644 --- a/entity/OrganisationsMultiEdit_entity/OrganisationsMultiEdit_entity.aod +++ b/entity/OrganisationsMultiEdit_entity/OrganisationsMultiEdit_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>OrganisationsMultiEdit_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/OrganisationsMultiEdit_entity/documentation.adoc</documentation> @@ -7,14 +7,6 @@ <entityFields> <entityProvider> <name>#PROVIDER</name> - <dependencies> - <entityDependency> - <name>ce007a14-f543-4959-81d6-145590e12a72</name> - <entityName>PlanningAddToOrganisations_entity</entityName> - <fieldName>Organisations</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityProvider> <name>#PROVIDER_AGGREGATES</name> diff --git a/entity/PermissionAction_entity/PermissionAction_entity.aod b/entity/PermissionAction_entity/PermissionAction_entity.aod index 88bf813934..63f9c0c639 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 c21dd39814..71412a63c2 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 a78eb1c4d3..37e1d2cb8c 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> diff --git a/entity/PermissionMetaData_entity/PermissionMetaData_entity.aod b/entity/PermissionMetaData_entity/PermissionMetaData_entity.aod index c611be5a93..f18de305ef 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 16c9910812..10bcfbb8d7 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 fa52cb70ed..140a64eb35 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> @@ -142,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> @@ -290,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> @@ -376,19 +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> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>OrgId_param</name> @@ -728,32 +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> - <entityDependency> - <name>fe217f3a-edb1-4972-b8f6-c8b517a34a48</name> - <entityName>DSGVOConfiguration_entity</entityName> - <fieldName>Persons</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>ContactId_param</name> @@ -959,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> @@ -1017,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> @@ -1109,14 +1020,6 @@ </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> @@ -1191,7 +1094,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> diff --git a/entity/PlanningAddToOrganisations_entity/PlanningAddToOrganisations_entity.aod b/entity/PlanningAddToOrganisations_entity/PlanningAddToOrganisations_entity.aod index c6e7d28790..c26311d3b6 100644 --- a/entity/PlanningAddToOrganisations_entity/PlanningAddToOrganisations_entity.aod +++ b/entity/PlanningAddToOrganisations_entity/PlanningAddToOrganisations_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>PlanningAddToOrganisations_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/PlanningAddToOrganisations_entity/documentation.adoc</documentation> diff --git a/entity/PlanningChangeStatusAndResponsible_entity/PlanningChangeStatusAndResponsible_entity.aod b/entity/PlanningChangeStatusAndResponsible_entity/PlanningChangeStatusAndResponsible_entity.aod index 9810a9260e..462141c2bf 100644 --- a/entity/PlanningChangeStatusAndResponsible_entity/PlanningChangeStatusAndResponsible_entity.aod +++ b/entity/PlanningChangeStatusAndResponsible_entity/PlanningChangeStatusAndResponsible_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>PlanningChangeStatusAndResponsible_entity</name> <majorModelMode>DISTRIBUTED</majorModelMode> <documentation>%aditoprj%/entity/PlanningChangeStatusAndResponsible_entity/documentation.adoc</documentation> diff --git a/entity/Planning_entity/Planning_entity.aod b/entity/Planning_entity/Planning_entity.aod index d398750ab2..3590d75c3b 100644 --- a/entity/Planning_entity/Planning_entity.aod +++ b/entity/Planning_entity/Planning_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>Planning_entity</name> <title>Planning</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -108,26 +108,6 @@ </entityField> <entityProvider> <name>Plannings</name> - <dependencies> - <entityDependency> - <name>73fab37a-74bc-452d-a1ec-ea1c53204468</name> - <entityName>Organisation_entity</entityName> - <fieldName>Plannings</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>9ddd5d69-72df-46f7-b42a-f08f08a2c8cd</name> - <entityName>PlanningAddToOrganisations_entity</entityName> - <fieldName>PlanningsAlreadyExists</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>c022c816-85eb-4112-95fe-7cbcab96e128</name> - <entityName>PlanningAddToOrganisations_entity</entityName> - <fieldName>PlanningsNew</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityParameter> <name>ContactId_param</name> @@ -195,7 +175,7 @@ <title>Change responsible</title> <onActionProcess>%aditoprj%/entity/Planning_entity/entityfields/filterviewactions/children/changeresponsible/onActionProcess.js</onActionProcess> <isObjectAction v="false" /> - <isSelectionAction v="true" /> + <selectionType>MULTI</selectionType> <iconId>VAADIN:USER</iconId> </entityActionField> <entityActionField> @@ -203,7 +183,7 @@ <title>Change status</title> <onActionProcess>%aditoprj%/entity/Planning_entity/entityfields/filterviewactions/children/changestatus/onActionProcess.js</onActionProcess> <isObjectAction v="false" /> - <isSelectionAction v="true" /> + <selectionType>MULTI</selectionType> <iconId>VAADIN:CHECK_SQUARE_O</iconId> </entityActionField> </children> diff --git a/entity/PrivatePerson_entity/PrivatePerson_entity.aod b/entity/PrivatePerson_entity/PrivatePerson_entity.aod index 67d65775c2..9ab398fbfa 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 56050bde20..a011d4d458 100644 --- a/entity/Prod2prod_entity/Prod2prod_entity.aod +++ b/entity/Prod2prod_entity/Prod2prod_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>Prod2prod_entity</name> <title>Parts list</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -60,14 +60,6 @@ <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> @@ -94,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> diff --git a/entity/Product_entity/Product_entity.aod b/entity/Product_entity/Product_entity.aod index 7310a2e80e..0c280605c9 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,32 +172,6 @@ <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> @@ -352,32 +326,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> diff --git a/entity/Productprice_entity/Productprice_entity.aod b/entity/Productprice_entity/Productprice_entity.aod index d886179ed2..7281523593 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> @@ -149,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/QuickEntry_entity/QuickEntry_entity.aod b/entity/QuickEntry_entity/QuickEntry_entity.aod index e91984345d..1811b49d9d 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> diff --git a/entity/RoleChildren_entity/RoleChildren_entity.aod b/entity/RoleChildren_entity/RoleChildren_entity.aod index 353284819b..f5d7e4d000 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/RoleParent_entity/RoleParent_entity.aod b/entity/RoleParent_entity/RoleParent_entity.aod index 86b5692906..adb2805123 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 956b66e51d..bb4d3c0d11 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 1411e096a8..b1f661d979 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> diff --git a/entity/SalesprojectConversionRate_entity/SalesprojectConversionRate_entity.aod b/entity/SalesprojectConversionRate_entity/SalesprojectConversionRate_entity.aod index cc131683a1..d0803f1b7a 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> @@ -10,14 +10,6 @@ <entityFields> <entityProvider> <name>#PROVIDER</name> - <dependencies> - <entityDependency> - <name>34de2519-ae79-4092-9f10-29727239804d</name> - <entityName>Organisation_entity</entityName> - <fieldName>conversionrates</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>UID</name> diff --git a/entity/SalesprojectMilestone_entity/SalesprojectMilestone_entity.aod b/entity/SalesprojectMilestone_entity/SalesprojectMilestone_entity.aod index e8af3acf65..639fb185ce 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> diff --git a/entity/SalesprojectPhaseDefinition_entity/SalesprojectPhaseDefinition_entity.aod b/entity/SalesprojectPhaseDefinition_entity/SalesprojectPhaseDefinition_entity.aod index 1731b12103..f0edc98a50 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,12 +53,6 @@ <entityProvider> <name>SalesprojectPhaseDefinitions</name> <lookupIdfield>SALESPROJECTPHASETRAITDEFINITIONID</lookupIdfield> - <dependencies> - <entityDependency> - <name>1d8760d0-186d-411d-a84e-dc82556ad722</name> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityConsumer> <name>ChecklistEntries</name> diff --git a/entity/SalesprojectPhase_entity/SalesprojectPhase_entity.aod b/entity/SalesprojectPhase_entity/SalesprojectPhase_entity.aod index 8bbdd874cc..6b56e6c4cf 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/SalesprojectSource_entity/SalesprojectSource_entity.aod b/entity/SalesprojectSource_entity/SalesprojectSource_entity.aod index 6621e3295e..258c2c5bb8 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 a16be31103..7f800c660a 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> @@ -422,26 +408,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> @@ -483,14 +449,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 +645,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> diff --git a/entity/SalutationDistinct_entity/SalutationDistinct_entity.aod b/entity/SalutationDistinct_entity/SalutationDistinct_entity.aod index b3181e070d..a0dd011e9c 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 967342e884..79a829d056 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 09ab3134e3..4399dc9137 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/SerialLetterAddRecipients_entity/SerialLetterAddRecipients_entity.aod b/entity/SerialLetterAddRecipients_entity/SerialLetterAddRecipients_entity.aod index 6109b0da0a..ab3393bc5b 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 2e747b5209..3aa3b44fe5 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 c6b3b52e6d..a2aac325aa 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 1f3883abe8..fcbc51b11b 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/Stock_entity/Stock_entity.aod b/entity/Stock_entity/Stock_entity.aod index d41f642e3e..42fe08d7b6 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/SupportTicket_entity/SupportTicket_entity.aod b/entity/SupportTicket_entity/SupportTicket_entity.aod index a82e8b8219..642c7b3f71 100644 --- a/entity/SupportTicket_entity/SupportTicket_entity.aod +++ b/entity/SupportTicket_entity/SupportTicket_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>SupportTicket_entity</name> <title>Support Ticket</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -38,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/TaskLink_entity/TaskLink_entity.aod b/entity/TaskLink_entity/TaskLink_entity.aod index b78981407b..e31e30cb39 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 4c1ec3f2df..5b2912ed81 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 7801512b42..019c0092c6 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 dc19068f6d..22a71c3c65 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 e61b1a3a96..2cd511e112 100644 --- a/entity/Turnover_entity/Turnover_entity.aod +++ b/entity/Turnover_entity/Turnover_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>Turnover_entity</name> <title>Sales forecast</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -55,14 +55,6 @@ <name>FilteredTurnovers</name> <documentation>%aditoprj%/entity/Turnover_entity/entityfields/filteredturnovers/documentation.adoc</documentation> <recordContainer>jdito</recordContainer> - <dependencies> - <entityDependency> - <name>51106aba-bd82-4ac5-8de6-fc56d53c6117</name> - <entityName>Salesproject_entity</entityName> - <fieldName>SalesprojectForecastCharts</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>MaxYear_param</name> @@ -185,20 +177,6 @@ </entityAggregateField> <entityProvider> <name>DynamicTurnover</name> - <dependencies> - <entityDependency> - <name>d20b815b-0c36-4e7c-b114-9a8bfba77c96</name> - <entityName>Organisation_entity</entityName> - <fieldName>Turnovers</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>341bcc89-313f-43eb-94ef-b9a934fe7f1e</name> - <entityName>Salesproject_entity</entityName> - <fieldName>Turnovers</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> <children> <entityParameter> <name>MaxYear_param</name> diff --git a/entity/UniversalFileProcessor_entity/UniversalFileProcessor_entity.aod b/entity/UniversalFileProcessor_entity/UniversalFileProcessor_entity.aod index c02555601d..838e84e5f7 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 b769af088b..33c5ab0f3c 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 54532cd9c8..39f072a9aa 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 3d3bf8f882..04d2a21438 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 39dd475719..831f7a4eff 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 2653396dea..1ec4ab0c78 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 df9c843f9b..14897c0211 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 5cbdd8c359..b2bbe781db 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> @@ -238,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/VisitRecommendation_entity/VisitRecommendation_entity.aod b/entity/VisitRecommendation_entity/VisitRecommendation_entity.aod index 5b3aed5fe7..122aecbad7 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 index e1e53ad5fe..bfc0e2a5ee 100644 --- a/entity/WeblinkClick_entity/WeblinkClick_entity.aod +++ b/entity/WeblinkClick_entity/WeblinkClick_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>WeblinkClick_entity</name> <title>Click</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -11,20 +11,6 @@ <entityFields> <entityProvider> <name>#PROVIDER</name> - <dependencies> - <entityDependency> - <name>cd0eb69c-917b-43ba-b02f-2b05bff34cdd</name> - <entityName>BulkMail_entity</entityName> - <fieldName>Clicks</fieldName> - <isConsumer v="false" /> - </entityDependency> - <entityDependency> - <name>2a2baa00-d7c3-4e88-a4e1-553a81b4ac77</name> - <entityName>Weblink_entity</entityName> - <fieldName>Clicks</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>BROWSER</name> diff --git a/entity/WeblinkTag_entity/WeblinkTag_entity.aod b/entity/WeblinkTag_entity/WeblinkTag_entity.aod index 58b737c76c..88e59eec7f 100644 --- a/entity/WeblinkTag_entity/WeblinkTag_entity.aod +++ b/entity/WeblinkTag_entity/WeblinkTag_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>WeblinkTag_entity</name> <title>Tag</title> <majorModelMode>DISTRIBUTED</majorModelMode> @@ -14,14 +14,6 @@ </entityProvider> <entityProvider> <name>Tags</name> - <dependencies> - <entityDependency> - <name>4677d007-6467-4bc4-80ec-8230ee68d203</name> - <entityName>Weblink_entity</entityName> - <fieldName>WebtrackingTags</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityParameter> <name>WeblinkId_param</name> diff --git a/entity/Weblink_entity/Weblink_entity.aod b/entity/Weblink_entity/Weblink_entity.aod index dbafd8ac44..d2e768f7f4 100644 --- a/entity/Weblink_entity/Weblink_entity.aod +++ b/entity/Weblink_entity/Weblink_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>Weblink_entity</name> <title>Weblink</title> <majorModelMode>DISTRIBUTED</majorModelMode> diff --git a/entity/WorkflowDefinition_entity/WorkflowDefinition_entity.aod b/entity/WorkflowDefinition_entity/WorkflowDefinition_entity.aod index 97fcd7f503..08115b3125 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,26 +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> - <entityDependency> - <name>349ab9d2-edbb-4571-be14-3fb749bfff50</name> - <entityName>Weblink_entity</entityName> - <fieldName>WorkflowDefinitions</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>UID</name> diff --git a/entity/WorkflowInstanceHistory_entity/WorkflowInstanceHistory_entity.aod b/entity/WorkflowInstanceHistory_entity/WorkflowInstanceHistory_entity.aod index 2ca484e8dd..183cada705 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 ecdc057e39..af63056718 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 f33bea3edc..876a676e43 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 674696c527..e4c027090f 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 a64a66745a..2e54329145 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/WorkflowStartConfig_entity/WorkflowStartConfig_entity.aod b/entity/WorkflowStartConfig_entity/WorkflowStartConfig_entity.aod index dde2a612a5..2ee19112c2 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 f686333ba7..2c7b0ff1bc 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 76e08b7ad6..6bdb790952 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/neonView/OrderMain_view/OrderMain_view.aod b/neonView/OrderMain_view/OrderMain_view.aod index 470461ecae..2a6dc63dcb 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/RoleChildrenList_view/RoleChildrenList_view.aod b/neonView/RoleChildrenList_view/RoleChildrenList_view.aod index 777f1a116a..df1d51b6c1 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/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod b/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod index 357db8c7f3..d27a2d9c2d 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 /> @@ -122,16 +122,6 @@ <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> -- GitLab From addb1a5f445d89fb12b019b2e991ca0335104037 Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Mon, 17 May 2021 10:31:56 +0200 Subject: [PATCH 166/242] 1080981 Standard workflows --- .../Data_alias/basic/2021.1.0/changelog.xml | 6 + .../2021.1.0/create_standardWorkflow.xml | 25 +++++ .../blob/rejectEmailCommunication.png | Bin 0 -> 4066 bytes .../blob/rejectEmailCommunication.xml | 40 +++++++ .../Data_alias/basic/workflows/changelog.xml | 6 + .../insert_rejectEmailCommunication.xml | 15 +++ .liquibase/Data_alias/changelog.xml | 2 + aliasDefinition/Data_alias/Data_alias.aod | 104 ++++++++++++++++++ .../StandardWorkflow_entity.aod | 90 +++++++++++++++ .../recordcontainers/db/conditionProcess.js | 17 +++ .../WorkflowDefinitionStore_entity.aod | 59 ++++++++++ .../deployallworkflows/onActionProcess.js | 27 +++++ .../deployselectedworkflow/onActionProcess.js | 16 +++ .../deployselectedworkflow/stateProcess.js | 10 ++ .../excludeexisting_param/valueProcess.js | 4 + .../WorkflowDefinition_entity.aod | 7 ++ .../children/openstore/onActionProcess.js | 3 + .../StandardWorkflow/StandardWorkflow.aod | 14 +++ .../WorkflowDefinitionStore.aod | 12 ++ .../StandardWorkflowFilter_view.aod | 21 ++++ .../WorkflowDefinitionStore_view.aod | 38 +++++++ 21 files changed, 516 insertions(+) create mode 100644 .liquibase/Data_alias/basic/2021.1.0/changelog.xml create mode 100644 .liquibase/Data_alias/basic/2021.1.0/create_standardWorkflow.xml create mode 100644 .liquibase/Data_alias/basic/workflows/blob/rejectEmailCommunication.png create mode 100644 .liquibase/Data_alias/basic/workflows/blob/rejectEmailCommunication.xml create mode 100644 .liquibase/Data_alias/basic/workflows/changelog.xml create mode 100644 .liquibase/Data_alias/basic/workflows/insert_rejectEmailCommunication.xml create mode 100644 entity/StandardWorkflow_entity/StandardWorkflow_entity.aod create mode 100644 entity/StandardWorkflow_entity/recordcontainers/db/conditionProcess.js create mode 100644 entity/WorkflowDefinitionStore_entity/WorkflowDefinitionStore_entity.aod create mode 100644 entity/WorkflowDefinitionStore_entity/entityfields/deployallworkflows/onActionProcess.js create mode 100644 entity/WorkflowDefinitionStore_entity/entityfields/deployselectedworkflow/onActionProcess.js create mode 100644 entity/WorkflowDefinitionStore_entity/entityfields/deployselectedworkflow/stateProcess.js create mode 100644 entity/WorkflowDefinitionStore_entity/entityfields/standardworkflows/children/excludeexisting_param/valueProcess.js create mode 100644 entity/WorkflowDefinition_entity/entityfields/tableactions/children/openstore/onActionProcess.js create mode 100644 neonContext/StandardWorkflow/StandardWorkflow.aod create mode 100644 neonContext/WorkflowDefinitionStore/WorkflowDefinitionStore.aod create mode 100644 neonView/StandardWorkflowFilter_view/StandardWorkflowFilter_view.aod create mode 100644 neonView/WorkflowDefinitionStore_view/WorkflowDefinitionStore_view.aod 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 0000000000..6a4ca39ed9 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.1.0/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="create_standardWorkflow.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 0000000000..52c2aaf4f0 --- /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/workflows/blob/rejectEmailCommunication.png b/.liquibase/Data_alias/basic/workflows/blob/rejectEmailCommunication.png new file mode 100644 index 0000000000000000000000000000000000000000..1a57cd6ad72356a822ba9c1f4240ba38a474d12d GIT binary patch literal 4066 zcmeHK`8%8I*4ACsn!DSYr`D#bW-S_ms;U+>)ZB=n#4OrGsGzzj&TdUDBIbjdYN{!O zV29R}V52Azwj!yy#)veWxBHy${Bo}AJO99We|WC<dY*SZ>t5?!*S+rbo3*7WKaV&M z2L}iLy}P#`aB!UP2HqFXZ~<$jV)7FX4#A3hw~g$cx~@|L0_|YZy<0IaC6Y2fw6z>| zCE2)%CiaNjNrSp{@y2@V5FIWwS>LLwCT5%xmaik0Yj~eOk7@|`sptw+yRd5mBP$&6 zbLvZx+fGK1m%`JdqY|Hmd8783GW5g*pP}3=Kc9FyInuD-Fb`QUluOqE_RNh=06_lt z{687EW2C56h{uNy?ypm#-&I!H=4b~M)w>*`Wc+-6ZxF(FXskiT>6_A{h2Pbrc-|Ek z8}kbYygRR8Y3-~UPF>oot*zZ0Gm5HZN}uSvR$roA=pKJ6gY6#>usTYd@$E3>*iKyQ za5tYye#0<2y_5RS&r-(t&a99#2r{$?&Wpou&yj<uz2gNA(aY&z?F3s-wHUFR?&^a4 zdDf<^(?wMN<A4;d25=}#W|?iXC(VL^{dY~&PyS7Ud~To;Cv6?goOE1aQxojjv)WA| z>ysnynBLLjPPfK)AJMs;6C1Wsz1;LVVIto}xO&(gyIi=Mc~$(wZ~jK(s(Z$c(d5YT zPcPlM&gx)G{5!xG&i}sUKbRb=F=ksK0+^^{VT?ElLi7<`b#DVFJpO5RH64t3w(*U> zP2i)2Rf#L-HI6xV%rB~oz51I5Fz!c4@G@N>^9f8mc|sKOGnpeYc53GSC3#3c?dj;S zq}70Aidn}QZw}4|7!boZe(z9NE?yRU;()6GvKJ8zDwG>ZiPo$E>1Ut;<DX*j`<07= znXF-v>i<IoS0`~_Mobil0YK-op+gl@w0}nsEh+jSn)1E6p{)o_XRLI$mu(_3y@=d~ zT#U+z4npBQegXcE<OH*70Kt=3XR|JRJ3Uio=L_^hd0X^zYfIa|d`>B=va*-}sJ9o$ zcC=USTsPGr4nUkSQ}w{+Su#e5m`Es17w?Q>?HhLNO+Yps9UMYc9ya<uo+X6;Vq#+Q zuCX!XDKX|0yLB#%gi(pWx3nBg(suDN?zl>X7Pic)z`&-tdbF#nYws|)xJKq}waJn8 zox{w5r?ketle($V_7DgwrNlh*$nL>|BG+g(YOi0RpuDv7GHUm$jr?M5h<UV_LB#%= zt&ot=Ad*JT@*h%LJLBDUbuxze>uKqOJb{_`yJr+2{F-?nwZ$t^jW9It)5k~OnP$N% zm9}M;Afw#BB`Pc!Zhbi4onm-&KtCK~qmi>7Ch8P>{5kUIosi$*-?*uE{>G|JTB0Gi zWJ=4E1wABv$X-iJYh|%N&3pf{Nom@$OvGB<f}p{{pBIoIkJ~?t&yvvr3`T3zF4{O0 zz_k)5;%bdTp*rR)OFH>7w-O(3V3=8?n|;fSXEW1H0b%4E9jmCFL7g&%^(+06W@ctw z-ejx>#l`jWS#qfT=UC^{%gRy%3RL%~uZ0PpB!UTrXf&Gay=dN(wguC*x*<r49E4r^ z;AM_)Y_vm#gkV>H$M$`H`RY|l9D5ARM^t7V26wVUQ5$&rJ6_e6n^XizMPq?8<47k@ zlSOgz5TNy85ZBX5B+~e=Cr^`0(=KFLmNMdzpDE(9xFCwd<-*(=6<AvSX5TL<;L&SQ zhr4rFlE5o<&YidS(sJF|2Ma0oNMr+gcf{1Qhx=-l!@ydwXPg$cg#T-Bsy;l`fW15R zuC{hKP*d^sGRz?Vv4J=Z7avoQ((x34#04vOe7PFZTw_|B+C<y#mgOTx&W6)L#8x2J zSdRx#DAa!_7qs$Hsm59a8uB_@J1G17pPCk>*GRdur91)ZtAA8&!4*@q(xI9%o+Nya zi}o$A?s)#_%wn}WEMvENuOoSR`8*GOf&w2A3>&zhU_ETW3Pepp!z$<n(XOblFw+DP z5fQ!a%F4=&Bg`T=9~_PdX$djU+G(om5+%Pj{!+wBH*I6dN@o>>6(F4`4`;_VmkxaL z!)Xej4=NJ7j)BZm=vPc|*F`?!%+yqcu$pTXoUqm7+h^v~)~(jQJBqD-G$pex5XSn~ zo%I`Sg^GqVuo&`W!?@%C4#U`W7?WA7465%{Ovz9-jV@wLhfKV24LAI>2WjY3<Rh+C zPftHo@PaYoDVy~qRpen4?r?6_EdE{=J4iVv29$-mg1A$F?5UDm!K{slRJ>uL1xh69 zDylEtQ*x}Ck@H!D*}`B;lW}ozJ7hYd^eImDCkaQ<7-oLN#*?4Slf&76#tP=9wl5^> z6?OXz=dbUkK^^O@Mstt4c-2DUNsf<@*dUm*x`IoBS6*0e#MVcVLGRZNn$cm-+D%$= zepB_Zys7D=`O#nNOl#Ex27kB^w|8IQF;=(A)3t|2?Trs@a5JA+#h@o^pd<6=K5w5K z(VBEA?n#l6X^2x+P<27{%WD9^n8$)PbmdkFdM*anuic|<hO16A0uJW8;$pWeBemBl z&9x@A$_3fOOBP#xb{$Dde8gNUSh#v`mGR+b8T{Cy8I;vY2RV&Rq`n;;9sQX(ZjiI< zK+$Ngm((mEWqldLk`dw}#6ZV5Ic)o?btWZmSzBR;p-jof#mn`laCUch(^%Oy=y0}y zQqA5EI-s%6mkxyFq%k8fI$pR4C-}w;zB}t^R~r=?`pnU5q^xDi7rf_TBfU9rrSID_ zTHTPL9E3cAx_hj@xIY|{<M|4-n2%nmII`H>)Lf^wh55WTVYSDIr-=~3hub-sZk=`m z+wRHEKQf!((>hp}0$Ri<JJ%ahOksA8jwC73DrU)za*gmMh<aHAPmgHVGnk)xFZ8cJ zu~5#(`L3!e5=80M$jr=~{2USpv-aHP;qeCXRaaG6+|RvXlO&<D(RkKBIM`9p@cVn@ zL|%HXrV@K*UbCio@kJ^mxZNHavEJn0^@4k-FeqT6N^Gx%h9JY67Z1gLFbDaY*OBSw z0m8mbZ<8>FPkl3om{}$>70`L)dS&eS8e_@c#JBzWhX8e1!nVkrq3!h{@mqm!|Lz`Y zHRIIsxNv22(=Z78B8e~Uj|hP1@_I*yrBta8YTNg-{R0ER)vShL1Ee&muD@8!G1*=_ z(=)X5aHVo&)!QX}DMO<>jVaUK6v2S|5ORV$KpTYbhw?vMD`L}L4_-UoU8O0TVnljy zT-8NIUvA<;eeCS*tFQ7bGg(H&wfq(3$$aeuyh7ma{=RO~9chwqp`J@Cb^heZlOu4k zNxjJH3;C!CXAP1@8_YE}HugzE8`bF8GbpIKbsb0f#H1I<<f(o&Cf2$YP4-v4Kh=<m znxnp1dMI{APRBAMViz{Qf<R=>1$U!AR$81!YEq55$#CXse6g~g?~GS#?2+kI`=xFi zoVt>`5@Z<=%GxvE)y)#>aUbd#Ujm4J9<G8!;omE%sT~taOT9lt7LWNZmSnm<w7Kvl z-~-pG29}mv&6@YKL91OMXlu!vWdU*TP?CXX_}VNH{4WnWjm?2mMXo@yuzu_sqDOMt zSCpnwB2oD*e+w~dV^t$FBO`A+P$dCZed*Rl=*8yfflpEv28UmZGtee}ygN{#n3yTH zhsFM8wqYXP(7#`}Fr8V9NnDjOEZ6hJPPHSJ%uvjwOjFjWq#TQ|KaN|_d;UJhAp{r` z8rv<YFtY09;1ugT{T$9~O69meDP;ka?>XuN3^M^=O*G!{)(48}*O0lL+LDr`IkX8# za-WrY>eRIiHo)J!e!M1zb2qeFm%!6ham~EC60-g=B57vuVK9hM7C-_4n$iaxcQn+_ z*#H%yxeJe8Cd`AU+q@zeil#J?LmZdPwx1rL0HpDzbH34M(`622S?Lty(pV0lHM*q9 zvh_<d>)Z}>Yu%|mTSv#T?Ck7Z=-pdKX3e{q^ZCYKW>$tWaPc>IczJ6l3qD9JNk<{{ z%DqyM6ALJylG=+M-vpzAQkmEtfyzi;+E1P`?}IXUf!rqDg=pN;9v`T{#dFFgFs^^C zb&djB%Nm^R$KLCRVs&h;tmxJt4?e&C#Wb6-Hr24x&X|Qb+SpuD%5<52e@R4etUtqD z^&9t$7i-E6&>X7G)yx-g>m@IU@f%qmm5dcD7=Fm4SQT{H*@2Hq5nXo6Ci#c~BtUV+ z3zJo+#ZzM}xR6G2qEyXVhzG_+a3Nj-ZcWccT3VE^1Ya|QzgOBxrI_E((H_K4W9JZG zGQwuO3KovotUMNPYr<&OSXmpO#ZJ7vC_$9mY!&kE=axD*0LUASZa_WcEdvd)cqbd^ zhUEJ17@1FMBgk|?j^*Y@A9<Q0ncLXqF(~J?=T)3Y!m0ySULm~i+iFdlr9N{pZA9gf zA}DDpZ&n2ls>CaIE}aI7UQ(^&;87VwU;$xOp-s;k0)(WOJaz$<)8yGJfSQY9n1sPB zvac)ZlJ)glo0_z|Tc7S&mbw+eb+GM|t?K`@a1tWJ`?XSFgvy%MtJA~nr60dDck*me zgMQy@AoG*MkpjQ9QlVm%4%IJRS7oz~JsJUx{r)PJI$!@Wa_qiN#op?qX+r;RXAm!I zU9P*;sQL_%fXJV*$;;<ZI}0+;t4Lnz^auS%^t-;gtltOcm#@Z%aS(HF3*E-Oflc;N z!{*jqxIRfLK!JNNVpWuWoCZ1rqWO$B378@NQz!F1cgI!zTkiiilMA25$CLWxRR*8` zz25CG>PA&;cwb}+$6{7|e0;Z*l$6FLBUq<^G}x&m7C-XW!C;QgoSU25+~mZ>#7E3d zmLj{gxv8;{P-)DJfHJZ-e|`>@^SB7{Z?)_*u)Mk|U)x4FdZGEB^I)p#@oDi1x-Wro S^kahOxMyN{yXKaA%s&97n76P1 literal 0 HcmV?d00001 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 0000000000..047d8bf45f --- /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/changelog.xml b/.liquibase/Data_alias/basic/workflows/changelog.xml new file mode 100644 index 0000000000..d8435c8e0a --- /dev/null +++ b/.liquibase/Data_alias/basic/workflows/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="insert_rejectEmailCommunication.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 0000000000..f36307a0da --- /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="KEY" 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/changelog.xml b/.liquibase/Data_alias/changelog.xml index 14683de8f2..c857106827 100644 --- a/.liquibase/Data_alias/changelog.xml +++ b/.liquibase/Data_alias/changelog.xml @@ -23,7 +23,9 @@ <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"/>--> </databaseChangeLog> \ No newline at end of file diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod index c060b095c1..2bcf26f4db 100644 --- a/aliasDefinition/Data_alias/Data_alias.aod +++ b/aliasDefinition/Data_alias/Data_alias.aod @@ -20140,6 +20140,110 @@ </entityFieldDb> </entityFields> </entityDb> + <entityDb> + <name>STANDARD_WORKFLOW</name> + <dbName></dbName> + <idColumn>STANDARD_WORKFLOWID</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>STANDARD_WORKFLOWID</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="4000" /> + <scale v="0" /> + <notNull v="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>PROCESSXML</name> + <dbName></dbName> + <primaryKey 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>DIAGRAM</name> + <dbName></dbName> + <primaryKey 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>PROCESSKEY</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>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> </entities> </entityGroup> </aliasDefDb> diff --git a/entity/StandardWorkflow_entity/StandardWorkflow_entity.aod b/entity/StandardWorkflow_entity/StandardWorkflow_entity.aod new file mode 100644 index 0000000000..be65ad093d --- /dev/null +++ b/entity/StandardWorkflow_entity/StandardWorkflow_entity.aod @@ -0,0 +1,90 @@ +<?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>StandardWorkflow_entity</name> + <title>Standard workflow</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <grantCreate v="false" /> + <grantUpdate v="false" /> + <grantDelete v="false" /> + <titlePlural>Standard workflows</titlePlural> + <recordContainer>db</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + <dependencies> + <entityDependency> + <name>38e423c3-f0b2-48d6-a035-5b19c79591ac</name> + <entityName>WorkflowDefinitionStore_entity</entityName> + <fieldName>StandardWorkflows</fieldName> + <isConsumer v="false" /> + </entityDependency> + </dependencies> + </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/recordcontainers/db/conditionProcess.js b/entity/StandardWorkflow_entity/recordcontainers/db/conditionProcess.js new file mode 100644 index 0000000000..9e683c7e4d --- /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/WorkflowDefinitionStore_entity/WorkflowDefinitionStore_entity.aod b/entity/WorkflowDefinitionStore_entity/WorkflowDefinitionStore_entity.aod new file mode 100644 index 0000000000..21a60f403d --- /dev/null +++ b/entity/WorkflowDefinitionStore_entity/WorkflowDefinitionStore_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.18" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.18"> + <name>WorkflowDefinitionStore_entity</name> + <title>Workflow definitions</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <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</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> + </entityFields> + <recordContainers> + <datalessRecordContainer> + <name>dataless</name> + <alias>Data_alias</alias> + </datalessRecordContainer> + </recordContainers> +</entity> diff --git a/entity/WorkflowDefinitionStore_entity/entityfields/deployallworkflows/onActionProcess.js b/entity/WorkflowDefinitionStore_entity/entityfields/deployallworkflows/onActionProcess.js new file mode 100644 index 0000000000..880fea03eb --- /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 0000000000..185311ec1d --- /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 0000000000..a0cbee140b --- /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/standardworkflows/children/excludeexisting_param/valueProcess.js b/entity/WorkflowDefinitionStore_entity/entityfields/standardworkflows/children/excludeexisting_param/valueProcess.js new file mode 100644 index 0000000000..60469fabc5 --- /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 97fcd7f503..d049a24df4 100644 --- a/entity/WorkflowDefinition_entity/WorkflowDefinition_entity.aod +++ b/entity/WorkflowDefinition_entity/WorkflowDefinition_entity.aod @@ -232,6 +232,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 0000000000..dec35f2444 --- /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/neonContext/StandardWorkflow/StandardWorkflow.aod b/neonContext/StandardWorkflow/StandardWorkflow.aod new file mode 100644 index 0000000000..a59793aafb --- /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/WorkflowDefinitionStore/WorkflowDefinitionStore.aod b/neonContext/WorkflowDefinitionStore/WorkflowDefinitionStore.aod new file mode 100644 index 0000000000..83c77e7814 --- /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/neonView/StandardWorkflowFilter_view/StandardWorkflowFilter_view.aod b/neonView/StandardWorkflowFilter_view/StandardWorkflowFilter_view.aod new file mode 100644 index 0000000000..7104b53b64 --- /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/WorkflowDefinitionStore_view/WorkflowDefinitionStore_view.aod b/neonView/WorkflowDefinitionStore_view/WorkflowDefinitionStore_view.aod new file mode 100644 index 0000000000..1b580e9074 --- /dev/null +++ b/neonView/WorkflowDefinitionStore_view/WorkflowDefinitionStore_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>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>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> -- GitLab From 6fb371e70a5e9781fa555e8ff71974a344ad3e99 Mon Sep 17 00:00:00 2001 From: "j.luginger" <j.luginger@adito.de> Date: Tue, 18 May 2021 10:33:50 +0200 Subject: [PATCH 167/242] =?UTF-8?q?[Projekt:=20xRM-Sales][TicketNr.:=20108?= =?UTF-8?q?1041][Planung=20bei=20Firma:=20Firmenname=20vorbef=C3=BCllen]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entity/Planning_entity/Planning_entity.aod | 1 + .../entityfields/contact_id/valueProcess.js | 9 +++++++++ 2 files changed, 10 insertions(+) create mode 100644 entity/Planning_entity/entityfields/contact_id/valueProcess.js diff --git a/entity/Planning_entity/Planning_entity.aod b/entity/Planning_entity/Planning_entity.aod index 3590d75c3b..dec3c63131 100644 --- a/entity/Planning_entity/Planning_entity.aod +++ b/entity/Planning_entity/Planning_entity.aod @@ -63,6 +63,7 @@ <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> 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 0000000000..1507222472 --- /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 -- GitLab From 50130fff3686568d554aa5c096389261c41f1d62 Mon Sep 17 00:00:00 2001 From: Simon Leipold <s.leipold@adito.de> Date: Tue, 18 May 2021 13:01:35 +0200 Subject: [PATCH 168/242] [Projekt: Entwicklung - Neon][TicketNr.: 1075313][ASYS_BINARIES: Spalte Description wird zu varchar(2048)] --- .../_____SYSTEMALIAS/basic/init/struct/create_asys_binaries.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_binaries.xml b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_binaries.xml index d700aacd49..7f3a311100 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"/> -- GitLab From bb0a916ae083cb2265986b7a7f591e559e1e01aa Mon Sep 17 00:00:00 2001 From: "j.luginger" <j.luginger@adito.de> Date: Wed, 19 May 2021 08:34:04 +0200 Subject: [PATCH 169/242] [Projekt: xRM-Sales][TicketNr.: 1081044][Planung: Balkendiagramm falsche Werte] --- .../basic/2021.1.0/alterPlanningMonthData.xml | 12 ++++++++++++ .liquibase/Data_alias/basic/2021.1.0/changelog.xml | 5 +++++ .liquibase/Data_alias/changelog.xml | 1 + .../jditodynamicmultidatachart/contentProcess.js | 5 +++-- process/Turnover_lib/process.js | 10 +++++----- 5 files changed, 26 insertions(+), 7 deletions(-) create mode 100644 .liquibase/Data_alias/basic/2021.1.0/alterPlanningMonthData.xml create mode 100644 .liquibase/Data_alias/basic/2021.1.0/changelog.xml 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 0000000000..3bc2dd381f --- /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 0000000000..8dbef5dd53 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.1.0/changelog.xml @@ -0,0 +1,5 @@ +<?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"/> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/changelog.xml b/.liquibase/Data_alias/changelog.xml index 14683de8f2..215ca78c98 100644 --- a/.liquibase/Data_alias/changelog.xml +++ b/.liquibase/Data_alias/changelog.xml @@ -23,6 +23,7 @@ <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"/> <!--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"/>--> diff --git a/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/contentProcess.js b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/contentProcess.js index 80bd839c8e..1fcebb2845 100644 --- a/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/contentProcess.js +++ b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/contentProcess.js @@ -26,8 +26,9 @@ if( vars.exists("$local.grouped")) 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) ") + 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"); diff --git a/process/Turnover_lib/process.js b/process/Turnover_lib/process.js index 4ce2665e32..3193c9e503 100644 --- a/process/Turnover_lib/process.js +++ b/process/Turnover_lib/process.js @@ -192,7 +192,7 @@ TurnoverDynamicChart.prototype.getPlanningFromSql = function () + " (" + this.getGroupFieldDisplayValue(this.idxPlanning) + ") as groupField, "; } - select += sqlHelper.cast("FORECAST.VOLUME/100*PLANNING_MONTH.MONTH_FACTOR", SQLTYPES.INTEGER) + " as sum_planning, " + 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) @@ -226,7 +226,7 @@ TurnoverDynamicChart.prototype.getForecastFromSql = function (pIsWeighted) select = this.groupMapping[this.groupedField]["forGrouping"][this.idxForecast] + " as uid, " + "(" + this.getGroupFieldDisplayValue(this.idxForecast) + ") as groupField,"; } - var volumeColumns = " 0 as sum_planning, " + sqlHelper.cast("FORECAST.VOLUME", SQLTYPES.INTEGER) + var volumeColumns = " 0 as sum_planning, FORECAST.VOLUME" + " as sum_forecast, 0 as sum_turnover, 0 as sum_forecast_weighted"; if(pIsWeighted) @@ -237,7 +237,7 @@ TurnoverDynamicChart.prototype.getForecastFromSql = function (pIsWeighted) } volumeColumns = " 0 as sum_planning, 0 as sum_forecast, 0 as sum_turnover, " - + sqlHelper.cast("(FORECAST.VOLUME/100*SALESPROJECT.PROBABILITY)", SQLTYPES.INTEGER) + + "(FORECAST.VOLUME/100*SALESPROJECT.PROBABILITY)" + " as sum_forecast_weighted"; } @@ -273,9 +273,9 @@ TurnoverDynamicChart.prototype.getTurnoverFromSql = function () } select += " 0 as sum_planning, 0 as sum_forecast, " - + sqlHelper.cast("((SALESORDERITEM.PRICE * SALESORDERITEM.QUANTITY * (100 - " + sqlHelper.isNull("SALESORDERITEM.DISCOUNT", 0) + + "((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))", SQLTYPES.INTEGER) + " as sum_turnover" + + ") / 100 * " + sqlHelper.isNull("SALESORDERITEM.VAT", 0) + " / 100)) as sum_turnover" + ", 0 as sum_forecast_weighted"; return newSelect(select) -- GitLab From 418de9bdb1ce6b70958ef92cbafd8520840bfcfb Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Wed, 19 May 2021 11:07:10 +0200 Subject: [PATCH 170/242] 1080981 Standard workflows --- .../workflows/blob/unsubscribeInterest.png | Bin 0 -> 3806 bytes .../workflows/blob/unsubscribeInterest.xml | 37 ++++++++++++ .../Data_alias/basic/workflows/changelog.xml | 1 + .../insert_rejectEmailCommunication.xml | 2 +- .../workflows/insert_unsubscribeInterest.xml | 15 +++++ .liquibase/Data_alias/changelog.xml | 4 -- .../CampaignParticipant_entity.aod | 2 - .../StandardWorkflow_entity.aod | 11 +--- .../documentation.adoc | 3 + .../WorkflowDefinitionStore_entity.aod | 12 +++- .../documentation.adoc | 9 +++ .../onActionProcess.js | 13 ++++ .../downloadselectedworkflow/stateProcess.js | 10 +++ .../_____LANGUAGE_EXTRA.aod | 57 ++++++++++++++++++ .../_____LANGUAGE_de/_____LANGUAGE_de.aod | 57 ++++++++++++++++++ .../_____LANGUAGE_en/_____LANGUAGE_en.aod | 57 ++++++++++++++++++ .../WorkflowDefinitionStore_view.aod | 1 + .../process.js | 8 +++ 18 files changed, 281 insertions(+), 18 deletions(-) create mode 100644 .liquibase/Data_alias/basic/workflows/blob/unsubscribeInterest.png create mode 100644 .liquibase/Data_alias/basic/workflows/blob/unsubscribeInterest.xml create mode 100644 .liquibase/Data_alias/basic/workflows/insert_unsubscribeInterest.xml create mode 100644 entity/StandardWorkflow_entity/documentation.adoc create mode 100644 entity/WorkflowDefinitionStore_entity/documentation.adoc create mode 100644 entity/WorkflowDefinitionStore_entity/entityfields/downloadselectedworkflow/onActionProcess.js create mode 100644 entity/WorkflowDefinitionStore_entity/entityfields/downloadselectedworkflow/stateProcess.js 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 GIT binary patch literal 3806 zcmds4Sy)q9x~0lePzrG<3XxGM!3HsnLQsRG5G5d!A^`;<D)S^VB?JO#p#?-B5rH66 ztU?G$ASeP60;Cl*%*bpYAtfYW7y=106VivSd%N$$eY{WiJe+TzefIhOf33aF|F8Y{ znj=hU-_d<?a&k(xHkX~{<i3jl#(af6!2MB3)uf!<{!-h^mM$?~^W4BxjcB6$;`J!c zpOhDyANe2rmZP(F>A<izTUB}E74>}j$&dDJt@;N&J-N&8j~E|UR!n?5w{N`H8;m;= zjfyNk>^*q7#N5j`IQ?-S%;BCMiIr}B!-JVn#;S{rZ3xa1x;SAi7QM?v9WGL)Cz)1K zvJ1%K|G{P5^o#9w(EMm^WUi6NiWLfllDt<0mFu}}pm?=D?O7mIBlm9wb1UDK8!CyR zWyi8YIB$)G^YaePvhBDbei}1wOR5U;YP_hlg7Bvw{0Dx*#{AMR>Zd8|wF%OVVv{z) zpR-YEy5f5-At@$po7H0qcWlBl!RjZ27T_VcIq>&KoQri3OhEykSd1aLh~toNN2Q1O zzuvdnjYjZR+ov>nN>QM7rqV7;Ehb?TTRT7IGd2Rnk&+RK8f}%Xcvvb_JgVQ$+!i<S z*H@YLKUdu*a#p^jJ=DSRN@TKTDOv&&o|Dzxfmch_?=~||v_0em?MC;mggq;mYBW2* zS)NH|FX&-K?CYl5IaNQL$9q)j;PO{{RN)UjsZ)*Oz@cvj*u4=t^xqQA9ZA_q8${VG zm#=I$av~TUVhG>Tl6JIAGdHjN_p*11<}{nfptFX(k6{n|Sx*uKUySeDPX^_34K4Tc z!8h^#P6d}gT#rFEekEvv3?RipjX=->9gyozkavk3a!!*QfGzZu4rpW|2g;LkS?KIJ zVg_mI*nu2cu7g<gnj~m%_l^<W9I7M)9r*~V3P0TH8fWOa(wuwrWFg9qKI1=KBFXvl z6)$0gu(kR7Q0ahvByZysI#2-Wea>14FG6$5v>(boWtrNBArM0tm*ySfYZJ{4-eX#Z ziOj}|<xdqxkmkb^apgdYW7jN;jc~6u*LPN-6K`i=fP~E~y()H|6B}>tF#7}g^;Nvp ze%q`$MhLqai<x`PDkd6xTlYGcaR(vMGlQO!ESytALj!XBL5mWkKS8^<@ca_$u)d?Y zF+>`0tnCRraSQY@T`dwb`ZMEWhWhI5jYzaRHnWZ`i$r5(v?CyhQK*j6BGc>Dop;!A z<X9*)3W?NHHedWzvN2nwA3R)P3l1AE{QH_3w-1`^ly4#=2?t13MdoM;&wqMk2FQ@Y zO~TB5em!0GUDHcwje6w?V^5@4x^v)PW#EhNMNKQC!Oy-0n6C>-#H;T-ozhh&5s}@d zkgDd58E7eN7qg>>0pBaR2WRX-*N{!{)5?eX(Lvh*K?Oc9Z#DM5f24?o`gUadj5ng& zanS9&?wRD)C}U}ko7Z}GDZy(4#TL{Y2UrVY={VuaKsHt}cD^SO3G0IPid%28L?V%; zjIJT|j!7r%T{1Fe&YcMe7uNBnfou}IX9mgbDcT8ZojzJ+c~1WR)2PFG_IcT!Uets9 z4-}-L#3ZKbYOw$LR1jmXn*UB-+rI8TH$N1alqSBnl}9_?<(=T>OSq!=L|06s(R?O9 zX0YS$&|A0k91GW?sn`ug02X97TK079*Hothu+cjInNzhx<uPMVdxY9l<v3VKj}rFt ztWy`ry5fqcW(Mu;L|Ucy$Mp4rxoVF`fQD=B@UQ~g7G&i4n6P?5uFvMmJX<f<&R%<o ztgzHw$pH)3I*0y(;zqlL6%J_G_F8Pt4evdycdG3)6RxmB>JR9n)k_ArR+L$5=RJ$( zx=U!b@4%(0UZPApJi6ln^K*zx7xT@V$Qx9z?Oy=7%pc%O2}kx99@Z8Kv)%6{<V<&Y z)P~kIMR|zgW-IC22M9lcTc}md4MyC%UhOoP;ej2d6eIzL0(=I@0CuU1K2hFyV$5&M zqajKNwJ$cW|1#T(ayzAe@%zuNFBx6^MXRMX+u$)MHNdi%=1i`Zj+MG!Y@3}&Nl_uW zq8FKV^6E_&PE_TEeJFj*NE-wPek#FPY+T|zW!s<i>$+)tpYxW?j%IrpWLhVO-0a>j zL5-vJ>-kxBS-Lp$Gi<C(`m7}Lf<gTsiHduYQ3?`QWy!HsMu4s$TvR_@9CCKF<leTx zSA`tf|Kj;s|NBA1fjQNx2#h!>Dg}LkaXQZKO48BlyQXK`CZEd7Yerp*n0TzOr>J`R z6qj>wED#X-uE{6`N#7xUk_gpj-O<tyeimvS2e5eW;=TbO+YGbu&kW@J=p0h>I@Pt( zogg|D<~QOSruNcOY4laT8h@IIP58@8V(bi=a#xV{B`5k@A50&R_S%a{4b0-ZcD6rJ zlXu-kiE1i^X~$<5Mi1X=2ljR8iMXRBE;csnoRR8)X6)DB+8?QU<+V0vd-gu1TtC8R zeqQL0eZvWRITirqvi>Nrz@(f?4ITlSQT15#<x&^{L4tIu?ohWU(1vYbTH&_`t&u^Z z=7xM;T-vmFqta3$V#>Dr`(n2ex{O&a8LG?Mn+t?wV#0<n$&m>tl_J#5E8(>$LkrEn zeX@dET7*xuI<Io-BjwAW3yn*Z+>6epX-SQ@;{`leL&nD~!(5NNI@_cPyUZd8%8x#q zdX+%;#uwEs!UuJDb)g>pV`CmFHHtr<vgt8j>UxO2GS66OR&v6AzMGQMFxmO4d~Q)U z^W41`i2D8K{`ebZS%chhpV)U>muv04t<pI=`=ZwV`5E778|<im=xB{_QoMU(uos-4 z78{6BEOaLi#czpOga$<1d~JWXHv7wRL#L&dCG;kqMR?UGU7sepReGEa`bqmKVTDoC zd~#J?2%br8{NRa|E<>z0wmgPAatwJ#5igb=)E;$4HUe}N8k}GJ$1Xbr(n7YiRGM6e zS(o&0<gkS0hg$_N;srTwS(_q8RZvWmNJ7rhFOE5m=0Al|cFHDsP}A($2l*@Y*f&8x z?O6w{>?rasfTTz_EZmHTS%P&p2l<LP_2Q3N?=fe+sK<N(36_i}Y|is1o`6p8mH;Dy zM#9>cc0k3Dzc!XQ9)JS%q%?9|u)PCqHlD5K*57J0u3z}zk}%r=xn?tRa-YQVPwC&T zeUJC+$`dpE5U^tKHu_3~YpttQM-URPS~{_X#s=u=6EP7(i%swnowgLt!flvi%Y<e@ zQBe`pRNT{}B<!gst1M^*vvd}|LOU$@c&n_)p7W%rd_73dI0g8{VmWNv(*q<Y*~?ob zH^1IuY3th0@x@k<J?N*wHS*}xI%f;#l?s*QpFmeLQ6b<j!W6OV!cgVL-)q18fQCKm zRX3wn%V;5}rVhyVouU1fB4G;u46v!t?gFzgH>A~qB}3G-I-bI!FP_B}9OR=}+K+>L zG^;0l7_;zku{;&1K?g$1G-`@rJ@|=v9r1;_r?FO_Izh~>fQFKaFaaI^qkh|xD@#k^ zEw|Eo__wFw$rNsp1;sOwqn_AyVjPJbg1g1jNj!G_eQtxy5tR+{kT(6TWv?XjD2yhc zV47`_H_;8Ty(VfsCXrKJwvHE<2m5cR7?L`Bs2r#V`)+MRXHI;konS4jdEGApXw|u= zU#HJ<-*i&o^N0BFAdq$-3Q_C%!si>XDJg6sJjK0}Nse>cgRYz|@L}O7tM<<%CgEy< z2n51vAX_^_y=s+8?@59q3*EWP+eP9d58ocw6CE#tViSfUk}1f20OIm9U6ULn<~sZ9 z&?#fDbOhS55u0Gd1FK!eT-fP?9+R2{Ez<8znm^A$^_%b3U`7|(b*h#z&q7cxP5$}W zoA7bZTVeT=nGo6_h^ELCHO%h0_`d3PN{BCuJmk5+Q`6RaO*3?@D0jDR3Zm;MOJP$U z28nN@gn#^3fA#6kH!W4Ky|k4s`l{Vxc-r{XNN!(0n0%M>Hk^4C*Q5Fo0-jtB$?)<o z&ZLL0%(0nHsH~yDZrr-hG?%jCgEt%1gfBeTYk58elunz|4PSqMc*D@YF#IEasnZo% z_ytLf>bET=qImJBp))gZKvJn-l~BXO9q3?}T8Ejh%&kD%4c_Z{6epauDI{&C!KtqC z!vh0L4*6pU?DCLXFm&yYBziG=>bXD3iKqo}b4rIE1$hTq<5_{pUo)5T1PRN<fmuZ` z-GOYwVkfQ159enhnD2&<d9Z!=)8m$BhDv2BtqVY(@&6a^N|Ne`F^ykdrckc4!GYIg zo_?M}QjEF2FWNoaA!hD~_+Qql594<8Y@+$LqDHR^c@6;}WQ)uPS`V%Vl8SQ8S2>YZ zG^@Jm79?qN5(jm3JTJ(0UY)1&ylN}lheVcMWuce$x9p8Djrg|@+*J?Qq#X}>nE$~5 z@V<IG?oOl40k2B^kK_H{4CMdyhm{OQoLg8}82m-~lv{&lvwcz{h>;<eT(fh?F}u&X zsbWA`Uj`gjk7E)Bja2{c$H2bduP|>l#)wyzXGd1go#8=pwz(r!9(0j%U@A6uxa!TA z!V8)L?%W~!+0An>YQC2kg<~=g$p6n{VL+>F*N;cNR~2FEw4Hg|D~^|Gm+mC~6Y|xI A{r~^~ literal 0 HcmV?d00001 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 0000000000..8dc3661838 --- /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 index d8435c8e0a..e1aef03f97 100644 --- a/.liquibase/Data_alias/basic/workflows/changelog.xml +++ b/.liquibase/Data_alias/basic/workflows/changelog.xml @@ -3,4 +3,5 @@ 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 index f36307a0da..792553fc3d 100644 --- a/.liquibase/Data_alias/basic/workflows/insert_rejectEmailCommunication.xml +++ b/.liquibase/Data_alias/basic/workflows/insert_rejectEmailCommunication.xml @@ -5,7 +5,7 @@ <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="KEY" value="rejectEmailCommunication"/> + <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"/> 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 0000000000..4d90b46952 --- /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 c857106827..a42f84d68b 100644 --- a/.liquibase/Data_alias/changelog.xml +++ b/.liquibase/Data_alias/changelog.xml @@ -20,10 +20,6 @@ <include relativeToChangelogFile="true" file="basic/2020.2.2/changelog.xml"/> <include relativeToChangelogFile="true" file="basic/2020.2.3/changelog.xml"/> <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:--> diff --git a/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod b/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod index b32ed04cf4..4c291546c5 100644 --- a/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod +++ b/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod @@ -122,8 +122,6 @@ <name>AnyContacts</name> <dependency> <name>dependency</name> - <entityName>AnyContact_entity</entityName> - <fieldName>ContactsByIds</fieldName> </dependency> <children> <entityParameter> diff --git a/entity/StandardWorkflow_entity/StandardWorkflow_entity.aod b/entity/StandardWorkflow_entity/StandardWorkflow_entity.aod index be65ad093d..d83e0534b8 100644 --- a/entity/StandardWorkflow_entity/StandardWorkflow_entity.aod +++ b/entity/StandardWorkflow_entity/StandardWorkflow_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>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" /> @@ -11,14 +12,6 @@ <entityFields> <entityProvider> <name>#PROVIDER</name> - <dependencies> - <entityDependency> - <name>38e423c3-f0b2-48d6-a035-5b19c79591ac</name> - <entityName>WorkflowDefinitionStore_entity</entityName> - <fieldName>StandardWorkflows</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityProvider> <name>#PROVIDER_AGGREGATES</name> diff --git a/entity/StandardWorkflow_entity/documentation.adoc b/entity/StandardWorkflow_entity/documentation.adoc new file mode 100644 index 0000000000..82672b0e0b --- /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/WorkflowDefinitionStore_entity/WorkflowDefinitionStore_entity.aod b/entity/WorkflowDefinitionStore_entity/WorkflowDefinitionStore_entity.aod index 21a60f403d..c5b314b159 100644 --- a/entity/WorkflowDefinitionStore_entity/WorkflowDefinitionStore_entity.aod +++ b/entity/WorkflowDefinitionStore_entity/WorkflowDefinitionStore_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>WorkflowDefinitionStore_entity</name> <title>Workflow definitions</title> <majorModelMode>DISTRIBUTED</majorModelMode> + <documentation>%aditoprj%/entity/WorkflowDefinitionStore_entity/documentation.adoc</documentation> <recordContainer>dataless</recordContainer> <entityFields> <entityProvider> @@ -32,7 +33,7 @@ </entityConsumer> <entityActionField> <name>deploySelectedWorkflow</name> - <title>Add selected</title> + <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> @@ -49,6 +50,13 @@ <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> diff --git a/entity/WorkflowDefinitionStore_entity/documentation.adoc b/entity/WorkflowDefinitionStore_entity/documentation.adoc new file mode 100644 index 0000000000..608df1a5be --- /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/downloadselectedworkflow/onActionProcess.js b/entity/WorkflowDefinitionStore_entity/entityfields/downloadselectedworkflow/onActionProcess.js new file mode 100644 index 0000000000..94d54bfc7c --- /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 0000000000..a0cbee140b --- /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/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index b94ce935a3..83e6860df3 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -8632,6 +8632,63 @@ <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> </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 3226194b7c..b53cdc8b99 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -11347,6 +11347,63 @@ Bitte Datumseingabe prüfen</value> <entry> <key>Global Cases </key> </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> </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 1464a7d2e2..3cb99dc83e 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -8717,6 +8717,63 @@ <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> </keyValueMap> <font name="Dialog" style="0" size="11" /> </language> diff --git a/neonView/WorkflowDefinitionStore_view/WorkflowDefinitionStore_view.aod b/neonView/WorkflowDefinitionStore_view/WorkflowDefinitionStore_view.aod index 1b580e9074..6e10496aa1 100644 --- a/neonView/WorkflowDefinitionStore_view/WorkflowDefinitionStore_view.aod +++ b/neonView/WorkflowDefinitionStore_view/WorkflowDefinitionStore_view.aod @@ -21,6 +21,7 @@ <name>Actions</name> <actions> <element>deploySelectedWorkflow</element> + <element>downloadSelectedWorkflow</element> <element>deployAllWorkflows</element> </actions> </actionsViewTemplate> diff --git a/process/SetInterestLink_workflowService/process.js b/process/SetInterestLink_workflowService/process.js index 5a6447a1a3..b66a48e570 100644 --- a/process/SetInterestLink_workflowService/process.js +++ b/process/SetInterestLink_workflowService/process.js @@ -6,6 +6,14 @@ 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() -- GitLab From 5b8c956df3d7780a923cf88208b73deb4be06a50 Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Wed, 19 May 2021 11:08:46 +0200 Subject: [PATCH 171/242] 1080981 Standard workflows changelog fix --- .liquibase/Data_alias/changelog.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.liquibase/Data_alias/changelog.xml b/.liquibase/Data_alias/changelog.xml index a42f84d68b..c857106827 100644 --- a/.liquibase/Data_alias/changelog.xml +++ b/.liquibase/Data_alias/changelog.xml @@ -20,6 +20,10 @@ <include relativeToChangelogFile="true" file="basic/2020.2.2/changelog.xml"/> <include relativeToChangelogFile="true" file="basic/2020.2.3/changelog.xml"/> <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:--> -- GitLab From 9fd773a01dfd16955441615c92db9f7a85137fd3 Mon Sep 17 00:00:00 2001 From: Pascal Neub <p.neub@adito.de> Date: Wed, 19 May 2021 09:21:53 +0000 Subject: [PATCH 172/242] [Projekt: xRM-Sales][TicketNr.: 1079960][Schreibfehler in Offer_Entity] --- entity/Offer_entity/entityfields/contact_id/onValueChange.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/entity/Offer_entity/entityfields/contact_id/onValueChange.js b/entity/Offer_entity/entityfields/contact_id/onValueChange.js index f28ede5935..8d9524327c 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 -- GitLab From 6fe6dcc96865de6d0b9ce89b9d94b114e4e8f50e Mon Sep 17 00:00:00 2001 From: "p.neub" <p.neub@adito.de> Date: Wed, 19 May 2021 11:57:28 +0200 Subject: [PATCH 173/242] =?UTF-8?q?[Projekt:=20xRM-Sales][TicketNr.:=20108?= =?UTF-8?q?0906][Position=20in=20Angebot=20l=C3=B6schen=20f=C3=BChrt=20zu?= =?UTF-8?q?=20Fehlermeldung]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../recordcontainers/db/onDBDelete.js | 31 ++++++------------- 1 file changed, 9 insertions(+), 22 deletions(-) diff --git a/entity/Offeritem_entity/recordcontainers/db/onDBDelete.js b/entity/Offeritem_entity/recordcontainers/db/onDBDelete.js index 283d1cb7a7..c00baa2b4d 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); +} -- GitLab From b2d323870fbf07960a315dd9bc64aee140338c1f Mon Sep 17 00:00:00 2001 From: Pascal Neub <p.neub@adito.de> Date: Wed, 19 May 2021 13:36:02 +0000 Subject: [PATCH 174/242] =?UTF-8?q?[Projekt:=20xRM-ContactManagement][Tick?= =?UTF-8?q?etNr.:=201074059][Email=5Flib:=20Parameter=20Anzahl=20/=20Reihe?= =?UTF-8?q?nfolge=20f=C3=BCr=20EmailWritingUtils.openNewMail()=20und=20Ema?= =?UTF-8?q?ilWritingUtils.sendReportAsMail()=20falsch.]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- process/Attribute_lib/process.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/process/Attribute_lib/process.js b/process/Attribute_lib/process.js index 20c80caef6..319191882d 100644 --- a/process/Attribute_lib/process.js +++ b/process/Attribute_lib/process.js @@ -769,7 +769,7 @@ AttributeRelationUtils.validateAttributeCount = function (pRowId, pObjectType, p }, countObj); } - var possibleAttributes = AttributeUtil.getPossibleAttributes(pObjectType, undefined, pFilteredAttributeIds); + var possibleAttributes = AttributeUtil.getPossibleAttributes(pObjectType, undefined, pFilteredAttributeIds) || []; var minMaxCounts = []; if (possibleAttributes.length > 0) @@ -794,8 +794,8 @@ AttributeRelationUtils.validateAttributeCount = function (pRowId, pObjectType, p // get all possible parent attributes var possibleParentAttributes = newSelect("distinct ATTRIBUTE_PARENT_ID") .from("AB_ATTRIBUTE") - .where("AB_ATTRIBUTE.AB_ATTRIBUTEID", possibleAttributes, SqlBuilder.IN()) - .arrayColumn(); + .whereIfSet("AB_ATTRIBUTE.AB_ATTRIBUTEID", possibleAttributes, SqlBuilder.IN()) + .arrayColumn(true); // remove empty elements possibleParentAttributes = possibleParentAttributes.filter(function (el) { return el != null && el != ""; }); -- GitLab From 9fec6a9a6f68d472930da1b7d8a29c4bec31b680 Mon Sep 17 00:00:00 2001 From: "p.neub" <p.neub@adito.de> Date: Thu, 20 May 2021 09:23:32 +0200 Subject: [PATCH 175/242] [Projekt: xRM-Sales][TicketNr.: 1080829][Reiter Gebietsverantwortliche aus Kontaktperson entfernen] --- entity/Person_entity/Person_entity.aod | 16 ---------------- .../children/orguid_param/valueProcess.js | 8 -------- .../districtresponsibles/stateProcess.js | 9 --------- neonView/PersonMain_view/PersonMain_view.aod | 5 ----- 4 files changed, 38 deletions(-) delete mode 100644 entity/Person_entity/entityfields/districtresponsibles/children/orguid_param/valueProcess.js delete mode 100644 entity/Person_entity/entityfields/districtresponsibles/stateProcess.js diff --git a/entity/Person_entity/Person_entity.aod b/entity/Person_entity/Person_entity.aod index 140a64eb35..7c16b95b5e 100644 --- a/entity/Person_entity/Person_entity.aod +++ b/entity/Person_entity/Person_entity.aod @@ -1002,22 +1002,6 @@ </entityParameter> </children> </entityConsumer> - <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> </entityProvider> 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 9bae30ceb9..0000000000 --- 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 6b51996c15..0000000000 --- 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/neonView/PersonMain_view/PersonMain_view.aod b/neonView/PersonMain_view/PersonMain_view.aod index 5a8f4d9906..b0263fcdcc 100644 --- a/neonView/PersonMain_view/PersonMain_view.aod +++ b/neonView/PersonMain_view/PersonMain_view.aod @@ -44,11 +44,6 @@ <entityField>#ENTITY</entityField> <view>PersonAttribute_view</view> </neonViewReference> - <neonViewReference> - <name>19a5f9ed-228d-4352-9e82-e7aa690648e9</name> - <entityField>DistrictResponsibles</entityField> - <view>DistrictResponsibleList_view</view> - </neonViewReference> <neonViewReference> <name>4b50b784-484f-4cdf-a705-4c356da763fa</name> <entityField>Documents</entityField> -- GitLab From b9dd62b301267c1367bdb9db230b13d9359cb8ae Mon Sep 17 00:00:00 2001 From: "p.neub" <p.neub@adito.de> Date: Thu, 20 May 2021 09:42:12 +0200 Subject: [PATCH 176/242] =?UTF-8?q?[Projekt:=20xRM-Sales][TicketNr.:=20108?= =?UTF-8?q?0118][Automatische=20checklisteneintr=C3=A4ge=20Quelle=20/=20He?= =?UTF-8?q?rkunft=20der=20Kontaktgenerierung=20wird=20nicht=20angehakt]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- process/ChecklistEntryRegistry_basic/process.js | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/process/ChecklistEntryRegistry_basic/process.js b/process/ChecklistEntryRegistry_basic/process.js index 3cc7f7907d..53e11df9ba 100644 --- a/process/ChecklistEntryRegistry_basic/process.js +++ b/process/ChecklistEntryRegistry_basic/process.js @@ -516,14 +516,11 @@ $ChecklistEntryRegistry.salesprojectContactsGenerationSource = function(){ return{ title: translate.text("Source / origin of the generation of contacts"), verifierFn: function(pSalesprojectId){ - return parseInt(AttributeRelationUtils.getAttributeSqlBuilder( - ["count(*)"], - pSalesprojectId, - "Salesproject" - ) - .and("AB_ATTRIBUTE.ATTRIBUTE_PARENT_ID", "d0ae40d2-1a7f-45f6-bb0c-20ce6ae7efe2") - .cell() - ) > 0; + return new AttributeRelationQuery( + pSalesprojectId, + "d0ae40d2-1a7f-45f6-bb0c-20ce6ae7efe2", + "Salesproject" + ).getAttributeCount() > 0; } }; } -- GitLab From 83469c16a920cd78ba2a5356ed78e01ec8aec735 Mon Sep 17 00:00:00 2001 From: "p.neub" <p.neub@adito.de> Date: Thu, 20 May 2021 09:59:44 +0200 Subject: [PATCH 177/242] [Projekt: xRM-Sales][TicketNr.: 1081145][Vertriebsprojekt, Angebot, Beleg, Produkt: Tabreihenfolge vereinheitlichen, da Tabs beliebig angeordnet sind] --- .../ProductMain_view/ProductMain_view.aod | 34 +++++++++---------- .../SalesprojectMain_view.aod | 30 ++++++++-------- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/neonView/ProductMain_view/ProductMain_view.aod b/neonView/ProductMain_view/ProductMain_view.aod index 861b85ac39..6fe32eef7f 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,25 +30,25 @@ <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> <entityField>Documents</entityField> <view>DocumentFilter_view</view> </neonViewReference> - <neonViewReference> - <name>6ee1258f-b571-45c1-b833-f292361b5a04</name> - <entityField>AttributeTree</entityField> - <view>AttributeRelationTree_view</view> - </neonViewReference> <neonViewReference> <name>0faf6a9e-b1f3-452d-b7fd-d0c9e3fc25f8</name> <entityField>LogHistories</entityField> diff --git a/neonView/SalesprojectMain_view/SalesprojectMain_view.aod b/neonView/SalesprojectMain_view/SalesprojectMain_view.aod index 95fc6da524..c13e9fc067 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>107b20e3-6326-498a-968b-ac09257981fc</name> - <entityField>AttributeTree</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> -- GitLab From 9de30e3db772e3ca8a9c0bb8fd5703d90a472e60 Mon Sep 17 00:00:00 2001 From: "p.neub" <p.neub@adito.de> Date: Thu, 20 May 2021 11:46:39 +0200 Subject: [PATCH 178/242] =?UTF-8?q?[Projekt:=20xRM-Sales][TicketNr.:=20108?= =?UTF-8?q?1114][St=C3=BCckliste=20wird=20nicht=20mehr=20angezeigt=20]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Prod2prod_entity/recordcontainers/jdito/contentProcess.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/entity/Prod2prod_entity/recordcontainers/jdito/contentProcess.js b/entity/Prod2prod_entity/recordcontainers/jdito/contentProcess.js index a65c4e001e..bb1b8c2231 100644 --- a/entity/Prod2prod_entity/recordcontainers/jdito/contentProcess.js +++ b/entity/Prod2prod_entity/recordcontainers/jdito/contentProcess.js @@ -30,7 +30,7 @@ var query = newSelect([ function _returnData(data) { for(let i = 0; i < data.length; i++) { - var productId = data[3]; + var productId = data[i][3]; // currentPurchasePrice.value var purchasePrice = ProductUtils.getCurrentProductPrice(productId, "PP", true); -- GitLab From 46db4c307c14cf647bf21ec2fbcc4e40f8fb3cf2 Mon Sep 17 00:00:00 2001 From: "p.neub" <p.neub@adito.de> Date: Thu, 20 May 2021 13:07:08 +0200 Subject: [PATCH 179/242] =?UTF-8?q?[Projekt:=20xRM-Sales][TicketNr.:=20108?= =?UTF-8?q?0935][Preisliste=20mit=20Fremdw=C3=A4hrung=20kann=20nicht=20ang?= =?UTF-8?q?elegt=20werden]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entity/Productprice_entity/onValidation.js | 4 +++- language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod | 6 ++++++ language/_____LANGUAGE_de/_____LANGUAGE_de.aod | 2 +- language/_____LANGUAGE_en/_____LANGUAGE_en.aod | 6 ++++++ 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/entity/Productprice_entity/onValidation.js b/entity/Productprice_entity/onValidation.js index ce0a2761a6..e1091b4245 100644 --- a/entity/Productprice_entity/onValidation.js +++ b/entity/Productprice_entity/onValidation.js @@ -60,7 +60,9 @@ if(vars.getString("$param.IgnoreOnValidation_param") != "true") for (var valPriceList in priceListsToPotentiallyReplace) { var currPriceList = priceListsToPotentiallyReplace[valPriceList]; - if(currPriceList["priceList"] == priceList && currPriceList["buySell"] == buySell && Number.parseInt(currPriceList["fromQuantity"]) == Number.parseInt(quantity)) + 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))) diff --git a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index b94ce935a3..9313ed244f 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -8632,6 +8632,12 @@ <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> </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 3226194b7c..3e5e640978 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -11106,7 +11106,7 @@ Bitte Datumseingabe prüfen</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 festgeleten Bereich.</value> + <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> diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod index 1464a7d2e2..6d4fd56a99 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -8717,6 +8717,12 @@ <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> </keyValueMap> <font name="Dialog" style="0" size="11" /> </language> -- GitLab From d8c156ddaa431bb262d557fb3f5cb7533a724371 Mon Sep 17 00:00:00 2001 From: "s.pongratz" <s.pongratz@adito.de> Date: Thu, 20 May 2021 13:13:06 +0200 Subject: [PATCH 180/242] =?UTF-8?q?[Projekt:=20xRM-ContactManagement][Tick?= =?UTF-8?q?etNr.:=201081261][UIDs=20werden=20f=C3=BCr=20Neuanlage=20falsch?= =?UTF-8?q?=20vorbelegt]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entityfields/activitylinkid/valueProcess.js | 6 ++++-- .../Address_entity/entityfields/addressid/valueProcess.js | 7 ++++--- entity/Campaign_entity/Campaign_entity.aod | 2 -- .../entityfields/communicationid/valueProcess.js | 6 ++++-- .../entityfields/contractid/valueProcess.js | 6 ++++-- .../entityfields/documenttemplateid/valueProcess.js | 6 ++++-- .../entityfields/ab_keyword_categoryid/valueProcess.js | 3 ++- entity/Member_entity/Member_entity.aod | 2 -- entity/ObjectProxy_entity/ObjectProxy_entity.aod | 2 -- entity/Offer_entity/Offer_entity.aod | 2 -- .../entityfields/offeritemid/valueProcess.js | 6 ++++-- entity/Order_entity/Order_entity.aod | 2 -- .../Order_entity/entityfields/salesorderid/valueProcess.js | 6 ++++-- .../entityfields/organisationid/valueProcess.js | 6 ++++-- entity/Person_entity/entityfields/personid/valueProcess.js | 6 ++++-- .../entityfields/organisation_id/valueProcess.js | 6 ++++-- .../entityfields/person_contact_id/valueProcess.js | 6 ++++-- .../entityfields/person_id/valueProcess.js | 7 +++++-- .../entityfields/salesproject_milestoneid/valueProcess.js | 6 ++++-- .../entityfields/salutationid/valueProcess.js | 6 ++++-- entity/Stock_entity/entityfields/stockid/valueProcess.js | 6 ++++-- 21 files changed, 63 insertions(+), 42 deletions(-) diff --git a/entity/ActivityLink_entity/entityfields/activitylinkid/valueProcess.js b/entity/ActivityLink_entity/entityfields/activitylinkid/valueProcess.js index 86ef789e06..823247cf89 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/Address_entity/entityfields/addressid/valueProcess.js b/entity/Address_entity/entityfields/addressid/valueProcess.js index 6cca32f779..ddcf55571c 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/Campaign_entity/Campaign_entity.aod b/entity/Campaign_entity/Campaign_entity.aod index 7e0c6abd26..7dc6d3ee53 100644 --- a/entity/Campaign_entity/Campaign_entity.aod +++ b/entity/Campaign_entity/Campaign_entity.aod @@ -273,8 +273,6 @@ <title>Charts</title> <dependency> <name>dependency</name> - <entityName>CampaignCostChart_entity</entityName> - <fieldName>CostChart</fieldName> </dependency> <children> <entityParameter> diff --git a/entity/Communication_entity/entityfields/communicationid/valueProcess.js b/entity/Communication_entity/entityfields/communicationid/valueProcess.js index 86ef789e06..823247cf89 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/Contract_entity/entityfields/contractid/valueProcess.js b/entity/Contract_entity/entityfields/contractid/valueProcess.js index 86ef789e06..823247cf89 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/DocumentTemplate_entity/entityfields/documenttemplateid/valueProcess.js b/entity/DocumentTemplate_entity/entityfields/documenttemplateid/valueProcess.js index a2378ee42b..10c60ad094 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/KeywordCategory_entity/entityfields/ab_keyword_categoryid/valueProcess.js b/entity/KeywordCategory_entity/entityfields/ab_keyword_categoryid/valueProcess.js index ad93cec3bf..cd3d2877ed 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/Member_entity/Member_entity.aod b/entity/Member_entity/Member_entity.aod index 97b8ff6f21..12296888c1 100644 --- a/entity/Member_entity/Member_entity.aod +++ b/entity/Member_entity/Member_entity.aod @@ -88,8 +88,6 @@ <name>Contacts</name> <dependency> <name>dependency</name> - <entityName>Person_entity</entityName> - <fieldName>IdFilteredActiveContacts</fieldName> </dependency> <children> <entityParameter> diff --git a/entity/ObjectProxy_entity/ObjectProxy_entity.aod b/entity/ObjectProxy_entity/ObjectProxy_entity.aod index de754623cf..925819bf43 100644 --- a/entity/ObjectProxy_entity/ObjectProxy_entity.aod +++ b/entity/ObjectProxy_entity/ObjectProxy_entity.aod @@ -128,8 +128,6 @@ <name>Bulkmails</name> <dependency> <name>dependency</name> - <entityName>BulkMail_entity</entityName> - <fieldName>#PROVIDER</fieldName> </dependency> </entityConsumer> <entityConsumer> diff --git a/entity/Offer_entity/Offer_entity.aod b/entity/Offer_entity/Offer_entity.aod index 04e18008a2..1207b50efa 100644 --- a/entity/Offer_entity/Offer_entity.aod +++ b/entity/Offer_entity/Offer_entity.aod @@ -224,8 +224,6 @@ <name>AnyContacts</name> <dependency> <name>dependency</name> - <entityName>AnyContact_entity</entityName> - <fieldName>OnlySameCompany</fieldName> </dependency> <children> <entityParameter> diff --git a/entity/Offeritem_entity/entityfields/offeritemid/valueProcess.js b/entity/Offeritem_entity/entityfields/offeritemid/valueProcess.js index 86ef789e06..823247cf89 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/Order_entity/Order_entity.aod b/entity/Order_entity/Order_entity.aod index e1f343fcba..0f5f6fef2a 100644 --- a/entity/Order_entity/Order_entity.aod +++ b/entity/Order_entity/Order_entity.aod @@ -462,8 +462,6 @@ <name>KeywordOrderTypes</name> <dependency> <name>dependency</name> - <entityName>KeywordEntry_entity</entityName> - <fieldName>SpecificContainerKeywords</fieldName> </dependency> <children> <entityParameter> diff --git a/entity/Order_entity/entityfields/salesorderid/valueProcess.js b/entity/Order_entity/entityfields/salesorderid/valueProcess.js index 86ef789e06..823247cf89 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/Organisation_entity/entityfields/organisationid/valueProcess.js b/entity/Organisation_entity/entityfields/organisationid/valueProcess.js index 056f5c94f1..2f2038a392 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/Person_entity/entityfields/personid/valueProcess.js b/entity/Person_entity/entityfields/personid/valueProcess.js index 86ef789e06..293bbaf034 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/QuickEntry_entity/entityfields/organisation_id/valueProcess.js b/entity/QuickEntry_entity/entityfields/organisation_id/valueProcess.js index 24b4e17505..663cf5f658 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 24b4e17505..663cf5f658 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 24b4e17505..363f6bcdd8 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/SalesprojectMilestone_entity/entityfields/salesproject_milestoneid/valueProcess.js b/entity/SalesprojectMilestone_entity/entityfields/salesproject_milestoneid/valueProcess.js index 86ef789e06..823247cf89 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/Salutation_entity/entityfields/salutationid/valueProcess.js b/entity/Salutation_entity/entityfields/salutationid/valueProcess.js index b00a74fd01..885ed2edec 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/Stock_entity/entityfields/stockid/valueProcess.js b/entity/Stock_entity/entityfields/stockid/valueProcess.js index 86ef789e06..823247cf89 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 -- GitLab From 35d62fe0eb0f700867bc8853583d39c9264c03e3 Mon Sep 17 00:00:00 2001 From: "p.neub" <p.neub@adito.de> Date: Thu, 20 May 2021 16:32:32 +0200 Subject: [PATCH 181/242] =?UTF-8?q?[Projekt:=20xRM-Sales][TicketNr.:=20108?= =?UTF-8?q?1146][Beleg:=20=C3=9Cbersetzungen=20fehlen]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- neonView/OrderAddress_view/OrderAddress_view.aod | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/neonView/OrderAddress_view/OrderAddress_view.aod b/neonView/OrderAddress_view/OrderAddress_view.aod index 59f34face3..a49935c630 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> -- GitLab From c2221572b901f32440c0563ce0eeb230dd1e7ffa Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Thu, 20 May 2021 17:38:05 +0200 Subject: [PATCH 182/242] 1080699 changed asys_system date_edit precision --- .../_____SYSTEMALIAS/basic/init/struct/create_asys_system.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_system.xml b/.liquibase/_____SYSTEMALIAS/basic/init/struct/create_asys_system.xml index 43355067f9..20b554ab74 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)"/> -- GitLab From 02224049d221c6aa901360b6f0170ddf635df457 Mon Sep 17 00:00:00 2001 From: "p.neub" <p.neub@adito.de> Date: Fri, 21 May 2021 08:19:45 +0200 Subject: [PATCH 183/242] =?UTF-8?q?[Projekt:=20xRM-Sales][TicketNr.:=20108?= =?UTF-8?q?1069][Angebot/Beleg/Vertrag=20anlegen=20f=C3=BCr=20Kontakt,=20d?= =?UTF-8?q?er=20zur=20L=C3=B6schung=20vorgesehen,=20ist=20in=20den=20Conte?= =?UTF-8?q?xten=20im=20Gegensatz=20zur=20360=20Grad=20=20m=C3=B6glich]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entity/AnyContact_entity/AnyContact_entity.aod | 4 ++++ .../recordcontainers/db/conditionProcess.js | 10 +++++++++- entity/Contract_entity/Contract_entity.aod | 6 ++++++ .../children/ignorecontactstates_param/valueProcess.js | 7 +++++++ entity/Offer_entity/Offer_entity.aod | 4 ++++ .../children/ignorecontactstates_param/valueProcess.js | 7 +++++++ entity/Order_entity/Order_entity.aod | 6 ++++++ .../children/ignorecontactstates_param/valueProcess.js | 7 +++++++ 8 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 entity/Contract_entity/entityfields/anycontacts/children/ignorecontactstates_param/valueProcess.js create mode 100644 entity/Offer_entity/entityfields/anycontacts/children/ignorecontactstates_param/valueProcess.js create mode 100644 entity/Order_entity/entityfields/anycontacts/children/ignorecontactstates_param/valueProcess.js diff --git a/entity/AnyContact_entity/AnyContact_entity.aod b/entity/AnyContact_entity/AnyContact_entity.aod index 8426dd6b95..0588ebec20 100644 --- a/entity/AnyContact_entity/AnyContact_entity.aod +++ b/entity/AnyContact_entity/AnyContact_entity.aod @@ -127,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 4627dbe640..fcb276c307 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/Contract_entity/Contract_entity.aod b/entity/Contract_entity/Contract_entity.aod index 0b5a6a6d22..f671def3f2 100644 --- a/entity/Contract_entity/Contract_entity.aod +++ b/entity/Contract_entity/Contract_entity.aod @@ -183,6 +183,12 @@ <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> 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 0000000000..c6c72b9e8a --- /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/Offer_entity/Offer_entity.aod b/entity/Offer_entity/Offer_entity.aod index 04e18008a2..25500f569d 100644 --- a/entity/Offer_entity/Offer_entity.aod +++ b/entity/Offer_entity/Offer_entity.aod @@ -237,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> 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 0000000000..c6c72b9e8a --- /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/Order_entity/Order_entity.aod b/entity/Order_entity/Order_entity.aod index e1f343fcba..df86cfc8b0 100644 --- a/entity/Order_entity/Order_entity.aod +++ b/entity/Order_entity/Order_entity.aod @@ -182,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> 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 0000000000..c6c72b9e8a --- /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() +])); -- GitLab From a85863ff08d83cc6859a090df61a9d3bb57a2cc0 Mon Sep 17 00:00:00 2001 From: "p.neub" <p.neub@adito.de> Date: Fri, 21 May 2021 08:48:57 +0200 Subject: [PATCH 184/242] =?UTF-8?q?[Projekt:=20xRM-Sales][TicketNr.:=20108?= =?UTF-8?q?0904][Preisliste=20an=20Produkt=20mit=20St=C3=BCckliste=20kann?= =?UTF-8?q?=20nicht=20angelegt=20werden]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- process/Product_lib/process.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/process/Product_lib/process.js b/process/Product_lib/process.js index f6b58db1ec..8a9ff19342 100644 --- a/process/Product_lib/process.js +++ b/process/Product_lib/process.js @@ -832,7 +832,7 @@ ProductUtils.presetPriceAndVat = function(pProductId, pVat, pPriceList, pBuySell sumUpPrices[products[product]["SOURCE_ID"]] = {}; } - var assignedTo = products[product]["DEST_ID"] != "" ? JSON.parse(products[product]["DEST_ID"])[1] : pProductId; + var assignedTo = products[product]["DEST_ID"] != "" ? products[product]["DEST_ID"] : pProductId; treestructure = ItemUtils.buildTreeStructure(treestructure, assignedTo, products[product]["PROD2PRODID"]); } } -- GitLab From da76063c5476debfe42ac5730f8fa3124d3dc5ad Mon Sep 17 00:00:00 2001 From: Sebastian Pongratz <s.pongratz@adito.de> Date: Fri, 21 May 2021 07:31:49 +0000 Subject: [PATCH 185/242] =?UTF-8?q?[Projekt:=20xRM-ContactManagement][Tick?= =?UTF-8?q?etNr.:=201081062][DSGVO=20-=20Fehlermeldung=20beim=20Anonymisie?= =?UTF-8?q?ren=20von=20Datens=C3=A4tzen]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../data/defaultBlob/RecordContainerCache.xml | 2 +- .../init/data/defaultBlob/_____configuration.xml | 2 +- .../basic/init/data/defaultBlob/data_alias.xml | 2 +- .../init/data/defaultBlob/data_alias_noAudit.xml | 16 ++++++++++++++++ .../data/defaultBlob/defaultDbRepository.xml | 2 +- .../init/data/defaultBlob/mailServerIMAP.xml | 2 +- .../basic/init/data/insert_asys_aliasconfig.xml | 4 ++-- 7 files changed, 23 insertions(+), 7 deletions(-) create mode 100644 .liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/data_alias_noAudit.xml diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/RecordContainerCache.xml b/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/RecordContainerCache.xml index 7d6b9e32c0..3ad81ecaa0 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 491f54d148..3e5ee0c4e6 100644 --- a/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/_____configuration.xml +++ b/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/_____configuration.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>_____CONFIGURATION</name> <serverId>default</serverId> <definitionName>_____CONFIGURATION</definitionName> diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/data_alias.xml b/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/data_alias.xml index 12db6be630..78f9b9d12e 100644 --- a/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/data_alias.xml +++ b/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/data_alias.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>f50ee138-12d9-420d-a4f9-9b8257e207e4</name> <description>jdbc:derby://localhost:1527/basic_data</description> <serverId>default</serverId> 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 0000000000..f9c31af1d8 --- /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 ef5ab4cdee..08bcb8b133 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 9c090e2837..dbcd5af49d 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 0368177e79..0d04350661 100644 --- a/.liquibase/_____SYSTEMALIAS/basic/init/data/insert_asys_aliasconfig.xml +++ b/.liquibase/_____SYSTEMALIAS/basic/init/data/insert_asys_aliasconfig.xml @@ -67,11 +67,11 @@ <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.xml"/> + <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="147ccd88-62cb-41a6-a2b8-2784adc6cec0"/> + <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> -- GitLab From 9171f3520942b46506804fe245b1b0c829a56133 Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Fri, 21 May 2021 10:06:21 +0000 Subject: [PATCH 186/242] Corrected CampaignParticipant_entity aod --- .../CampaignParticipant_entity/CampaignParticipant_entity.aod | 2 ++ 1 file changed, 2 insertions(+) diff --git a/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod b/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod index 4c291546c5..b32ed04cf4 100644 --- a/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod +++ b/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod @@ -122,6 +122,8 @@ <name>AnyContacts</name> <dependency> <name>dependency</name> + <entityName>AnyContact_entity</entityName> + <fieldName>ContactsByIds</fieldName> </dependency> <children> <entityParameter> -- GitLab From 75aa38a991e8e150acf3b0aef982937be866ec95 Mon Sep 17 00:00:00 2001 From: "p.neub" <p.neub@adito.de> Date: Fri, 21 May 2021 12:34:56 +0200 Subject: [PATCH 187/242] [Projekt: xRM-Sales][TicketNr.: 1079933][[Angebot] Status "Verloren", "Gewonnen" kann nicht gesetzt werden, wenn Status "Versendet" erreicht] --- .../recordcontainers/jdito/contentProcess.js | 18 ++++++++++++++++++ .../ObjectProxy_entity/ObjectProxy_entity.aod | 2 -- entity/Offer_entity/Offer_entity.aod | 4 ++++ .../whitelistids_param/valueProcess.js | 12 ++++++++++++ entity/Offer_entity/grantUpdateProcess.js | 4 +--- 5 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 entity/Offer_entity/entityfields/keywordofferstates/children/whitelistids_param/valueProcess.js diff --git a/entity/KeywordEntry_entity/recordcontainers/jdito/contentProcess.js b/entity/KeywordEntry_entity/recordcontainers/jdito/contentProcess.js index 7fa2f2e399..bd4a9e38d8 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/ObjectProxy_entity/ObjectProxy_entity.aod b/entity/ObjectProxy_entity/ObjectProxy_entity.aod index de754623cf..1e633cfb90 100644 --- a/entity/ObjectProxy_entity/ObjectProxy_entity.aod +++ b/entity/ObjectProxy_entity/ObjectProxy_entity.aod @@ -156,8 +156,6 @@ <name>DocumentTemplates</name> <dependency> <name>dependency</name> - <entityName>DocumentTemplate_entity</entityName> - <fieldName>#PROVIDER</fieldName> </dependency> </entityConsumer> <entityConsumer> diff --git a/entity/Offer_entity/Offer_entity.aod b/entity/Offer_entity/Offer_entity.aod index 04e18008a2..ee9a255d02 100644 --- a/entity/Offer_entity/Offer_entity.aod +++ b/entity/Offer_entity/Offer_entity.aod @@ -328,6 +328,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> 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 0000000000..31c9a715e4 --- /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/grantUpdateProcess.js b/entity/Offer_entity/grantUpdateProcess.js index dd8ad2ced3..1677ad01a5 100644 --- a/entity/Offer_entity/grantUpdateProcess.js +++ b/entity/Offer_entity/grantUpdateProcess.js @@ -7,8 +7,6 @@ import("KeywordRegistry_basic"); // using the grant update would also disable the status field. var status = vars.get("$field.STATUS"); -var editable = status != $KeywordRegistry.offerStatus$sent() - && status != $KeywordRegistry.offerStatus$won() - && status != $KeywordRegistry.offerStatus$lost(); +var editable = status != $KeywordRegistry.offerStatus$won() && status != $KeywordRegistry.offerStatus$lost(); result.string(editable || tools.hasRole(vars.get("$sys.user"), "INTERNAL_ADMINISTRATOR")); -- GitLab From 5e9379ee891379ece7ea928d38d4ea9a871f818e Mon Sep 17 00:00:00 2001 From: "p.neub" <p.neub@adito.de> Date: Fri, 21 May 2021 13:15:08 +0200 Subject: [PATCH 188/242] =?UTF-8?q?[Projekt:=20xRM-Sales][TicketNr.:=20107?= =?UTF-8?q?9936][[Angebot]=20Button=20"Zu=20Angebot=20hinzuf=C3=BCgen"=20i?= =?UTF-8?q?naktiv=20setzen,=20wenn=20Angebot=20nicht=20mehr=20bearbeitbar]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entityfields/addtooffer/stateProcess.js | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/entity/Product_entity/entityfields/addtooffer/stateProcess.js b/entity/Product_entity/entityfields/addtooffer/stateProcess.js index a28ffee7b2..e04ccbdcb9 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 -- GitLab From c17c7150b2d0ca6e5c9d885b715e9c59a083a417 Mon Sep 17 00:00:00 2001 From: Pascal Neub <p.neub@adito.de> Date: Tue, 25 May 2021 05:22:02 +0000 Subject: [PATCH 189/242] [Projekt: xRM-Sales][TicketNr.: 1080416][Tab Aufgaben soll immer angezeigt werden] --- entity/CampaignStep_entity/CampaignStep_entity.aod | 1 - .../entityfields/tasks/stateProcess.js | 10 ---------- entity/Contract_entity/Contract_entity.aod | 1 - .../Contract_entity/entityfields/tasks/stateProcess.js | 10 ---------- entity/Offer_entity/Offer_entity.aod | 1 - entity/Offer_entity/entityfields/tasks/stateProcess.js | 10 ---------- entity/Order_entity/Order_entity.aod | 1 - entity/Order_entity/entityfields/tasks/stateProcess.js | 10 ---------- entity/Product_entity/Product_entity.aod | 1 - .../Product_entity/entityfields/tasks/stateProcess.js | 10 ---------- entity/Salesproject_entity/Salesproject_entity.aod | 1 - .../entityfields/tasks/stateProcess.js | 10 ---------- 12 files changed, 66 deletions(-) delete mode 100644 entity/CampaignStep_entity/entityfields/tasks/stateProcess.js delete mode 100644 entity/Contract_entity/entityfields/tasks/stateProcess.js delete mode 100644 entity/Offer_entity/entityfields/tasks/stateProcess.js delete mode 100644 entity/Order_entity/entityfields/tasks/stateProcess.js delete mode 100644 entity/Product_entity/entityfields/tasks/stateProcess.js delete mode 100644 entity/Salesproject_entity/entityfields/tasks/stateProcess.js diff --git a/entity/CampaignStep_entity/CampaignStep_entity.aod b/entity/CampaignStep_entity/CampaignStep_entity.aod index ddef5bb760..c090c20d4c 100644 --- a/entity/CampaignStep_entity/CampaignStep_entity.aod +++ b/entity/CampaignStep_entity/CampaignStep_entity.aod @@ -257,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> diff --git a/entity/CampaignStep_entity/entityfields/tasks/stateProcess.js b/entity/CampaignStep_entity/entityfields/tasks/stateProcess.js deleted file mode 100644 index 24d86976c9..0000000000 --- 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/Contract_entity/Contract_entity.aod b/entity/Contract_entity/Contract_entity.aod index 0b5a6a6d22..65416c1c51 100644 --- a/entity/Contract_entity/Contract_entity.aod +++ b/entity/Contract_entity/Contract_entity.aod @@ -332,7 +332,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/tasks/stateProcess.js b/entity/Contract_entity/entityfields/tasks/stateProcess.js deleted file mode 100644 index 1b34404a38..0000000000 --- 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/Offer_entity/Offer_entity.aod b/entity/Offer_entity/Offer_entity.aod index 04e18008a2..de9acec821 100644 --- a/entity/Offer_entity/Offer_entity.aod +++ b/entity/Offer_entity/Offer_entity.aod @@ -503,7 +503,6 @@ </entityConsumer> <entityConsumer> <name>Tasks</name> - <stateProcess>%aditoprj%/entity/Offer_entity/entityfields/tasks/stateProcess.js</stateProcess> <dependency> <name>dependency</name> <entityName>Task_entity</entityName> diff --git a/entity/Offer_entity/entityfields/tasks/stateProcess.js b/entity/Offer_entity/entityfields/tasks/stateProcess.js deleted file mode 100644 index fca9129ea6..0000000000 --- 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/Order_entity/Order_entity.aod b/entity/Order_entity/Order_entity.aod index e1f343fcba..52f23b22af 100644 --- a/entity/Order_entity/Order_entity.aod +++ b/entity/Order_entity/Order_entity.aod @@ -313,7 +313,6 @@ </entityField> <entityConsumer> <name>Tasks</name> - <stateProcess>%aditoprj%/entity/Order_entity/entityfields/tasks/stateProcess.js</stateProcess> <dependency> <name>dependency</name> <entityName>Task_entity</entityName> diff --git a/entity/Order_entity/entityfields/tasks/stateProcess.js b/entity/Order_entity/entityfields/tasks/stateProcess.js deleted file mode 100644 index 01f44a3090..0000000000 --- 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/Product_entity/Product_entity.aod b/entity/Product_entity/Product_entity.aod index 0c280605c9..5c2b560db2 100644 --- a/entity/Product_entity/Product_entity.aod +++ b/entity/Product_entity/Product_entity.aod @@ -341,7 +341,6 @@ </entityActionField> <entityConsumer> <name>Tasks</name> - <stateProcess>%aditoprj%/entity/Product_entity/entityfields/tasks/stateProcess.js</stateProcess> <dependency> <name>dependency</name> <entityName>Task_entity</entityName> diff --git a/entity/Product_entity/entityfields/tasks/stateProcess.js b/entity/Product_entity/entityfields/tasks/stateProcess.js deleted file mode 100644 index 062f477b61..0000000000 --- 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/Salesproject_entity/Salesproject_entity.aod b/entity/Salesproject_entity/Salesproject_entity.aod index 7f800c660a..798fb37263 100644 --- a/entity/Salesproject_entity/Salesproject_entity.aod +++ b/entity/Salesproject_entity/Salesproject_entity.aod @@ -426,7 +426,6 @@ </entityProvider> <entityConsumer> <name>Tasks</name> - <stateProcess>%aditoprj%/entity/Salesproject_entity/entityfields/tasks/stateProcess.js</stateProcess> <dependency> <name>dependency</name> <entityName>Task_entity</entityName> diff --git a/entity/Salesproject_entity/entityfields/tasks/stateProcess.js b/entity/Salesproject_entity/entityfields/tasks/stateProcess.js deleted file mode 100644 index 8a5375f38f..0000000000 --- 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 -- GitLab From 849338da8218a0f7ca918df30de112473fd0230d Mon Sep 17 00:00:00 2001 From: Simon Leipold <s.leipold@adito.de> Date: Tue, 25 May 2021 13:29:33 +0200 Subject: [PATCH 190/242] [Projekt: Entwicklung - Neon][TicketNr.: 1078596][Mitarbeiter Neuanlage - Feld Rolle ist auf Readonly] --- entity/EmployeeRole_entity/EmployeeRole_entity.aod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/entity/EmployeeRole_entity/EmployeeRole_entity.aod b/entity/EmployeeRole_entity/EmployeeRole_entity.aod index 6fb10f3d02..772f769f7b 100644 --- a/entity/EmployeeRole_entity/EmployeeRole_entity.aod +++ b/entity/EmployeeRole_entity/EmployeeRole_entity.aod @@ -4,7 +4,7 @@ <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> -- GitLab From 5d1cb133754fa5e5bcf2225de7349a259c6350ff Mon Sep 17 00:00:00 2001 From: Pascal Neub <p.neub@adito.de> Date: Tue, 25 May 2021 13:44:27 +0000 Subject: [PATCH 191/242] [Projekt: xRM-Sales][TicketNr.: 1081118][Offer_entity onDBInsert select ASYS_BINARIES.BINDATA] --- .../recordcontainers/db/onDBInsert.js | 26 ++--------- process/Binary_lib/process.js | 45 +++++++++++++++++++ 2 files changed, 49 insertions(+), 22 deletions(-) diff --git a/entity/Offer_entity/recordcontainers/db/onDBInsert.js b/entity/Offer_entity/recordcontainers/db/onDBInsert.js index cbd146d287..dee3726f2e 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/process/Binary_lib/process.js b/process/Binary_lib/process.js index a1a13b0307..64a4248d91 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> -- GitLab From 6184461ede649875dd375d8201afe45a988baee4 Mon Sep 17 00:00:00 2001 From: Pascal Neub <p.neub@adito.de> Date: Tue, 25 May 2021 13:51:18 +0000 Subject: [PATCH 192/242] [Projekt: xRM-Sales][TicketNr.: 1078650][Project Member List- inaktive Gebietsverantwortliche werden angezeigt] --- .../DistrictResponsible_entity.aod | 4 ++++ .../recordcontainers/db/conditionProcess.js | 11 +++++++++++ .../recordcontainers/jdito/contentProcess.js | 1 + language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod | 6 ++++++ language/_____LANGUAGE_de/_____LANGUAGE_de.aod | 1 + language/_____LANGUAGE_en/_____LANGUAGE_en.aod | 6 ++++++ 6 files changed, 29 insertions(+) diff --git a/entity/DistrictResponsible_entity/DistrictResponsible_entity.aod b/entity/DistrictResponsible_entity/DistrictResponsible_entity.aod index 8cf24770c4..928ca8eb81 100644 --- a/entity/DistrictResponsible_entity/DistrictResponsible_entity.aod +++ b/entity/DistrictResponsible_entity/DistrictResponsible_entity.aod @@ -229,6 +229,10 @@ <name>DistrictResponsibleAdvisers</name> <lookupIdfield>EMPLOYEE_CONTACT_ID</lookupIdfield> </entityProvider> + <entityParameter> + <name>OnlyActive_param</name> + <expose v="true" /> + </entityParameter> </entityFields> <recordContainers> <dbRecordContainer> diff --git a/entity/DistrictResponsible_entity/recordcontainers/db/conditionProcess.js b/entity/DistrictResponsible_entity/recordcontainers/db/conditionProcess.js index d611896490..e9c5a40572 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/Member_entity/recordcontainers/jdito/contentProcess.js b/entity/Member_entity/recordcontainers/jdito/contentProcess.js index 707685adc1..106d0d7c1f 100644 --- a/entity/Member_entity/recordcontainers/jdito/contentProcess.js +++ b/entity/Member_entity/recordcontainers/jdito/contentProcess.js @@ -75,6 +75,7 @@ if (Utils.isNullOrEmpty(idValues) || memberRows.length === 0) .entity("DistrictResponsible_entity") .provider("OrganisationResponsibles") .addParameter("OrgUid_param", orgContactId) + .addParameter("OnlyActive_param", true) .fields(["#UID","DISTRICTRESPONSIBLEID", "DISTRICT_ID", "EMPLOYEE_CONTACT_ID", "EMPLOYEE_CONTACT_ID.displayValue", "USER_EDIT", "USER_NEW", "departmentAttributeName", "DATE_EDIT", "DATE_NEW"]); diff --git a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index b94ce935a3..9313ed244f 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -8632,6 +8632,12 @@ <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> </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 3226194b7c..8305371866 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -11220,6 +11220,7 @@ Bitte Datumseingabe prüfen</value> </entry> <entry> <key>Buying center and internal project team</key> + <value>Vertriebscenter 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> diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod index 1464a7d2e2..6d4fd56a99 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -8717,6 +8717,12 @@ <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> </keyValueMap> <font name="Dialog" style="0" size="11" /> </language> -- GitLab From 5f02c6c7b912a21aed154b2cf0a0c1d180dbe2c6 Mon Sep 17 00:00:00 2001 From: Pascal Neub <p.neub@adito.de> Date: Tue, 25 May 2021 13:58:42 +0000 Subject: [PATCH 193/242] =?UTF-8?q?[Projekt:=20xRM-Sales][TicketNr.:=20107?= =?UTF-8?q?8539][Umsatzauswertung=20Filter=20Lookup=20f=C3=BCr=20Gebiet=20?= =?UTF-8?q?und=20Kreis]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entity/Address_entity/Address_entity.aod | 4 +++ .../entityfields/district/dropDownProcess.js | 8 ++++++ .../entityfields/region/dropDownProcess.js | 8 ++++++ entity/Turnover_entity/Turnover_entity.aod | 15 +++++++++++ .../filterValuesProcess.js | 7 +++++ .../orgdistrict_filter/filterValuesProcess.js | 8 ++++++ .../orgregion_filter/filterValuesProcess.js | 8 ++++++ .../_____LANGUAGE_EXTRA.aod | 6 +++++ .../_____LANGUAGE_de/_____LANGUAGE_de.aod | 8 ++++++ .../_____LANGUAGE_en/_____LANGUAGE_en.aod | 6 +++++ process/Turnover_lib/process.js | 26 +++++++++++++++++++ 11 files changed, 104 insertions(+) create mode 100644 entity/Address_entity/entityfields/district/dropDownProcess.js create mode 100644 entity/Address_entity/entityfields/region/dropDownProcess.js create mode 100644 entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/districtname_filter/filterValuesProcess.js create mode 100644 entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orgdistrict_filter/filterValuesProcess.js create mode 100644 entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orgregion_filter/filterValuesProcess.js diff --git a/entity/Address_entity/Address_entity.aod b/entity/Address_entity/Address_entity.aod index 686d8185ca..8c6928fa28 100644 --- a/entity/Address_entity/Address_entity.aod +++ b/entity/Address_entity/Address_entity.aod @@ -67,10 +67,14 @@ <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> diff --git a/entity/Address_entity/entityfields/district/dropDownProcess.js b/entity/Address_entity/entityfields/district/dropDownProcess.js new file mode 100644 index 0000000000..c7e3f04405 --- /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 0000000000..1627eb6de2 --- /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/Turnover_entity/Turnover_entity.aod b/entity/Turnover_entity/Turnover_entity.aod index 2cd511e112..15f90bdf68 100644 --- a/entity/Turnover_entity/Turnover_entity.aod +++ b/entity/Turnover_entity/Turnover_entity.aod @@ -334,6 +334,7 @@ <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> @@ -358,6 +359,7 @@ <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> @@ -394,6 +396,19 @@ <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> 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 0000000000..3195439a60 --- /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/orgdistrict_filter/filterValuesProcess.js b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orgdistrict_filter/filterValuesProcess.js new file mode 100644 index 0000000000..c7e3f04405 --- /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/orgregion_filter/filterValuesProcess.js b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/orgregion_filter/filterValuesProcess.js new file mode 100644 index 0000000000..1627eb6de2 --- /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/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index b94ce935a3..9313ed244f 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -8632,6 +8632,12 @@ <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> </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 3226194b7c..962dc69364 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -11347,6 +11347,14 @@ Bitte Datumseingabe prüfen</value> <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> </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 1464a7d2e2..6d4fd56a99 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -8717,6 +8717,12 @@ <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> </keyValueMap> <font name="Dialog" style="0" size="11" /> </language> diff --git a/process/Turnover_lib/process.js b/process/Turnover_lib/process.js index 4ce2665e32..5495cd2ff9 100644 --- a/process/Turnover_lib/process.js +++ b/process/Turnover_lib/process.js @@ -459,6 +459,32 @@ TurnoverDynamicChart.getFilterMapping = function (pKind) } }; + 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); -- GitLab From f91e7d9df0104b86f63212cb0ab3be9fe0d659c7 Mon Sep 17 00:00:00 2001 From: Daniel Tran <d.tran@adito.de> Date: Wed, 26 May 2021 07:41:29 +0200 Subject: [PATCH 194/242] [Projekt: xRM-ContactManagement][TicketNr.: 1069662][Abbyy-Visitenkarten-Scan: letzter Buchstabe des Nachnamens, Hausnummer und Firmenname machen Probleme] - Added default credentials. --- .../_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod | 3 +++ 1 file changed, 3 insertions(+) diff --git a/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod b/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod index d27a2d9c2d..0dc3f425be 100644 --- a/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod +++ b/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod @@ -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> -- GitLab From 96023dc221d48417ebd86172fe560ab14f683e3f Mon Sep 17 00:00:00 2001 From: Andre Loreth <a.loreth@adito.de> Date: Wed, 26 May 2021 12:29:55 +0000 Subject: [PATCH 195/242] =?UTF-8?q?[Projekt:=20Entwicklung=20-=20Neon][Tic?= =?UTF-8?q?ketNr.:=201081390][Firmenlookup=20=C3=B6ffnet=20sich=20+=20Fehl?= =?UTF-8?q?ermeldung=20in=20Endlosschleife]=20Check=20existence=20of=20var?= =?UTF-8?q?iables=20before=20accessing=20them?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit There are certain cases where *.insertedRows/*.changedRows/*.deletedRows variables are NOT available. Therefore an existence check is necessary before accessing them. One specific case is the following: The "valueProcess" of a parameter in a consumer needs to access any of the above listed variables of another consumer field. This basically works just fine. BUT as soon as you're in a Lookup, the consumer might not be available, therefore the existence check is necessary to prevent an exception. --- process/Entity_lib/process.js | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/process/Entity_lib/process.js b/process/Entity_lib/process.js index afdfbfaa02..79d573a823 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) -- GitLab From 4d87213f6ac8870c4390fd0992415aefe72425a2 Mon Sep 17 00:00:00 2001 From: Simon Leipold <s.leipold@adito.de> Date: Wed, 26 May 2021 16:25:45 +0200 Subject: [PATCH 196/242] =?UTF-8?q?[Projekt:=20Entwicklung=20-=20Neon][Tic?= =?UTF-8?q?ketNr.:=201081447][Mitarbeiterrolle=20bearbeiten=20funktioniert?= =?UTF-8?q?,=20erzeugt=20aber=20Fehler=20an=20der=20Oberfl=C3=A4che]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../recordcontainers/jdito/contentProcess.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/entity/EmployeeRole_entity/recordcontainers/jdito/contentProcess.js b/entity/EmployeeRole_entity/recordcontainers/jdito/contentProcess.js index dd75cc33f8..84cbd8aec7 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) { -- GitLab From a92d685dbfe649619b23dd0a701110cbca618b13 Mon Sep 17 00:00:00 2001 From: Pascal Neub <p.neub@adito.de> Date: Wed, 26 May 2021 15:36:55 +0000 Subject: [PATCH 197/242] =?UTF-8?q?[Projekt:=20xRM-Sales][TicketNr.:=20108?= =?UTF-8?q?0452][Automatische=20Wahrscheinlichkeit=20soll=20nicht=20h?= =?UTF-8?q?=C3=B6here=20Werte=20=C3=BCberschreiben]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Salesproject_entity.aod | 4 +++ .../entityfields/phase/onValueChange.js | 25 +++++++++++++++++++ .../recordcontainers/db/onDBUpdate.js | 11 -------- 3 files changed, 29 insertions(+), 11 deletions(-) create mode 100644 entity/Salesproject_entity/entityfields/phase/onValueChange.js diff --git a/entity/Salesproject_entity/Salesproject_entity.aod b/entity/Salesproject_entity/Salesproject_entity.aod index 7f800c660a..f40a10ef01 100644 --- a/entity/Salesproject_entity/Salesproject_entity.aod +++ b/entity/Salesproject_entity/Salesproject_entity.aod @@ -47,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> diff --git a/entity/Salesproject_entity/entityfields/phase/onValueChange.js b/entity/Salesproject_entity/entityfields/phase/onValueChange.js new file mode 100644 index 0000000000..4fbd8be482 --- /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/recordcontainers/db/onDBUpdate.js b/entity/Salesproject_entity/recordcontainers/db/onDBUpdate.js index 8c73baf3b5..c9dfa3fa5c 100644 --- a/entity/Salesproject_entity/recordcontainers/db/onDBUpdate.js +++ b/entity/Salesproject_entity/recordcontainers/db/onDBUpdate.js @@ -22,17 +22,6 @@ vars.get("$local.changed").forEach(function(fieldName) { switch (fieldName) { case "SALESPROJECT.PHASE": - typeValue = "SalesprojectPhase"; - var autoProbab = newSelect("SALESPROJECTPHASEDEFINITION.AUTOPROBABILITY") - .from("SALESPROJECTPHASEDEFINITION") - .where("SALESPROJECTPHASEDEFINITION.PHASE", vars.get("$field.PHASE")).cell(); - if(!isNaN(parseInt(autoProbab))) - { - newWhere("SALESPROJECT.SALESPROJECTID", vars.get("$field.SALESPROJECTID")) - .updateFields({ - "PROBABILITY": autoProbab - }, "SALESPROJECT"); - } break; case "SALESPROJECT.STATUS": // Milestone -- GitLab From 2fdf20fc4712154a26c50c0c8674d1a79e6c8545 Mon Sep 17 00:00:00 2001 From: Pascal Neub <p.neub@adito.de> Date: Wed, 26 May 2021 15:38:25 +0000 Subject: [PATCH 198/242] [Projekt: xRM-Sales][TicketNr.: 1079043][Demodaten: Bereinigen ID's in Angebots- und Belegposten, zu denen es keine Produkte mehr gibt] --- .../_demoData/generatedData/offeritem.xml | 26 ----------- .../basic/_demoData/generatedData/product.xml | 43 +++++++++++++++++++ .../_demoData/generatedData/salesorder.xml | 6 +-- 3 files changed, 46 insertions(+), 29 deletions(-) diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/offeritem.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/offeritem.xml index 6cc33b720c..f6cf3772de 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 "/> @@ -404,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/product.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/product.xml index 23aaf952c6..787353e873 100644 --- a/.liquibase/Data_alias/basic/_demoData/generatedData/product.xml +++ b/.liquibase/Data_alias/basic/_demoData/generatedData/product.xml @@ -326,5 +326,48 @@ <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="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="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/salesorder.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/salesorder.xml index f74cacd3fa..a830e9f194 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"/> -- GitLab From 7266c865c50a2f8c00758f9842143e517f047e29 Mon Sep 17 00:00:00 2001 From: "p.neub" <p.neub@adito.de> Date: Thu, 27 May 2021 09:58:30 +0200 Subject: [PATCH 199/242] buyingcenter translation --- language/_____LANGUAGE_de/_____LANGUAGE_de.aod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod index 850599eff3..50a55e5b27 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -11220,7 +11220,7 @@ Bitte Datumseingabe prüfen</value> </entry> <entry> <key>Buying center and internal project team</key> - <value>Vertriebscenter und internes Projektteam</value> + <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> -- GitLab From 711bec41ba8ec92b1e9fefa9a9093208bb4c236c Mon Sep 17 00:00:00 2001 From: Simon Leipold <s.leipold@adito.de> Date: Wed, 26 May 2021 11:37:10 +0000 Subject: [PATCH 200/242] [Projekt: Entwicklung - Neon][TicketNr.: 1081303][SqlBuilder erzeugt fehlerhaftes Statement] (cherry picked from commit 89ea4945c16ef77c6282dc5c74b7d2eaea316825) --- process/Product_lib/process.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/process/Product_lib/process.js b/process/Product_lib/process.js index f6b58db1ec..d095b4ff11 100644 --- a/process/Product_lib/process.js +++ b/process/Product_lib/process.js @@ -79,7 +79,7 @@ ProductUtils.getCurrentProductPrice = function(pid, buySell, onlyStandard, pCurr 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"); -- GitLab From f64c05537f25f3b8a62a751b22af6380659140c3 Mon Sep 17 00:00:00 2001 From: Benjamin Ulrich <b.ulrich@adito.de> Date: Tue, 25 May 2021 05:41:36 +0000 Subject: [PATCH 201/242] Merge branch 'sales_pn_1081145_order_mainview_tabs' into '2021.1' [Projekt: xRM-Sales][TicketNr.: 1081145][Vertriebsprojekt, Angebot, Beleg,... See merge request xrm/basic!966 (cherry picked from commit be9b8ab55046fdc8ed977118a0f786db5766fe53) 83469c16 [Projekt: xRM-Sales][TicketNr.: 1081145][Vertriebsprojekt, Angebot, Beleg,... --- .../ProductMain_view/ProductMain_view.aod | 34 +++++++++---------- .../SalesprojectMain_view.aod | 30 ++++++++-------- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/neonView/ProductMain_view/ProductMain_view.aod b/neonView/ProductMain_view/ProductMain_view.aod index 861b85ac39..6fe32eef7f 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,25 +30,25 @@ <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> <entityField>Documents</entityField> <view>DocumentFilter_view</view> </neonViewReference> - <neonViewReference> - <name>6ee1258f-b571-45c1-b833-f292361b5a04</name> - <entityField>AttributeTree</entityField> - <view>AttributeRelationTree_view</view> - </neonViewReference> <neonViewReference> <name>0faf6a9e-b1f3-452d-b7fd-d0c9e3fc25f8</name> <entityField>LogHistories</entityField> diff --git a/neonView/SalesprojectMain_view/SalesprojectMain_view.aod b/neonView/SalesprojectMain_view/SalesprojectMain_view.aod index 95fc6da524..c13e9fc067 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>107b20e3-6326-498a-968b-ac09257981fc</name> - <entityField>AttributeTree</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> -- GitLab From c38af960228d7ea75c2ac90614a1ab426328fa68 Mon Sep 17 00:00:00 2001 From: Benjamin Ulrich <b.ulrich@adito.de> Date: Tue, 25 May 2021 13:44:28 +0000 Subject: [PATCH 202/242] Merge branch 'sales_pn_1081118_Offer_entity_onDBInser_asysbinary' into '2021.1' [Projekt: xRM-Sales][TicketNr.: 1081118][Offer_entity onDBInsert select ASYS_BINARIES.BINDATA] See merge request xrm/basic!962 (cherry picked from commit 406d81be300f452db5c519b8ea4ae4737048d454) 300c8660 [Projekt: xRM-Sales][TicketNr.: 1081118][Offer_entity onDBInsert select ASYS_BINARIES.BINDATA] f9d327cf merged 2021.1 into sales_pn_1081118_Offer_entity_onDBInser_asysbinary 56b904d1 Update process.js --- .../recordcontainers/db/onDBInsert.js | 26 ++--------- process/Binary_lib/process.js | 45 +++++++++++++++++++ 2 files changed, 49 insertions(+), 22 deletions(-) diff --git a/entity/Offer_entity/recordcontainers/db/onDBInsert.js b/entity/Offer_entity/recordcontainers/db/onDBInsert.js index cbd146d287..dee3726f2e 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/process/Binary_lib/process.js b/process/Binary_lib/process.js index a1a13b0307..64a4248d91 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> -- GitLab From 4b844f25fda1de316497727be9a56e707ca2be8b Mon Sep 17 00:00:00 2001 From: Benjamin Ulrich <b.ulrich@adito.de> Date: Tue, 25 May 2021 13:46:29 +0000 Subject: [PATCH 203/242] Merge branch 'sales_pn_1081114_stueckliste_wird_nicht_mehr_angezeigt' into '2021.1' MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [Projekt: xRM-Sales][TicketNr.: 1081114][Stückliste wird nicht mehr angezeigt ] See merge request xrm/basic!967 (cherry picked from commit ab08293a102b163e032d719fcf895345bda94269) 9de30e3d [Projekt: xRM-Sales][TicketNr.: 1081114][Stückliste wird nicht mehr angezeigt ] --- .../Prod2prod_entity/recordcontainers/jdito/contentProcess.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/entity/Prod2prod_entity/recordcontainers/jdito/contentProcess.js b/entity/Prod2prod_entity/recordcontainers/jdito/contentProcess.js index a65c4e001e..bb1b8c2231 100644 --- a/entity/Prod2prod_entity/recordcontainers/jdito/contentProcess.js +++ b/entity/Prod2prod_entity/recordcontainers/jdito/contentProcess.js @@ -30,7 +30,7 @@ var query = newSelect([ function _returnData(data) { for(let i = 0; i < data.length; i++) { - var productId = data[3]; + var productId = data[i][3]; // currentPurchasePrice.value var purchasePrice = ProductUtils.getCurrentProductPrice(productId, "PP", true); -- GitLab From 123b369c6c1f0e9558eced437ba65c2be2690641 Mon Sep 17 00:00:00 2001 From: Benjamin Ulrich <b.ulrich@adito.de> Date: Tue, 25 May 2021 05:25:42 +0000 Subject: [PATCH 204/242] =?UTF-8?q?Merge=20branch=20'2021.1=5F1081041=5FPl?= =?UTF-8?q?anungNeuanlage=C3=9CberFirma'=20into=20'2021.1'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [Projekt: xRM-Sales][TicketNr.: 1081041][Planung bei Firma: Firmenname vorbefüllen] See merge request xrm/basic!954 (cherry picked from commit 146f6767c29089908c0c90ebc4380bf771b91b6e) 6fb371e7 [Projekt: xRM-Sales][TicketNr.: 1081041][Planung bei Firma: Firmenname vorbefüllen] --- entity/Planning_entity/Planning_entity.aod | 1 + .../entityfields/contact_id/valueProcess.js | 9 +++++++++ 2 files changed, 10 insertions(+) create mode 100644 entity/Planning_entity/entityfields/contact_id/valueProcess.js diff --git a/entity/Planning_entity/Planning_entity.aod b/entity/Planning_entity/Planning_entity.aod index 3590d75c3b..dec3c63131 100644 --- a/entity/Planning_entity/Planning_entity.aod +++ b/entity/Planning_entity/Planning_entity.aod @@ -63,6 +63,7 @@ <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> 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 0000000000..1507222472 --- /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 -- GitLab From 04222f8fa40354315ef5e58e8b5ff3d50075512d Mon Sep 17 00:00:00 2001 From: Benjamin Ulrich <b.ulrich@adito.de> Date: Tue, 25 May 2021 05:29:44 +0000 Subject: [PATCH 205/242] Merge branch 'sales_pn_1080906_offeritemdeletionerror' into '2021.1' MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [Projekt: xRM-Sales][TicketNr.: 1080906][Position in Angebot löschen führt zu Fehlermeldung] See merge request xrm/basic!960 (cherry picked from commit deea3156274e8af2f302c351b49f6275f5f77f80) 6fe6dcc9 [Projekt: xRM-Sales][TicketNr.: 1080906][Position in Angebot löschen führt zu Fehlermeldung] --- .../recordcontainers/db/onDBDelete.js | 31 ++++++------------- 1 file changed, 9 insertions(+), 22 deletions(-) diff --git a/entity/Offeritem_entity/recordcontainers/db/onDBDelete.js b/entity/Offeritem_entity/recordcontainers/db/onDBDelete.js index 283d1cb7a7..c00baa2b4d 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); +} -- GitLab From 752873af213779abe42bf7836ebc3a8159d69660 Mon Sep 17 00:00:00 2001 From: Benjamin Ulrich <b.ulrich@adito.de> Date: Tue, 25 May 2021 13:38:29 +0000 Subject: [PATCH 206/242] Merge branch 'sales_pn_1080904_preisliste_an_produkt_mit_stueckliste_notcreateable' into '2021.1' MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [Projekt: xRM-Sales][TicketNr.: 1080904][Preisliste an Produkt mit Stückliste... See merge request xrm/basic!977 (cherry picked from commit b773b478e5a83f8cb26828d1837997d86abff9f5) a85863ff [Projekt: xRM-Sales][TicketNr.: 1080904][Preisliste an Produkt mit Stückliste... --- process/Product_lib/process.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/process/Product_lib/process.js b/process/Product_lib/process.js index d095b4ff11..7b11b0791f 100644 --- a/process/Product_lib/process.js +++ b/process/Product_lib/process.js @@ -832,7 +832,7 @@ ProductUtils.presetPriceAndVat = function(pProductId, pVat, pPriceList, pBuySell sumUpPrices[products[product]["SOURCE_ID"]] = {}; } - var assignedTo = products[product]["DEST_ID"] != "" ? JSON.parse(products[product]["DEST_ID"])[1] : pProductId; + var assignedTo = products[product]["DEST_ID"] != "" ? products[product]["DEST_ID"] : pProductId; treestructure = ItemUtils.buildTreeStructure(treestructure, assignedTo, products[product]["PROD2PRODID"]); } } -- GitLab From 98a52f2ba7601baee0f9b29b1ae7aea16093009e Mon Sep 17 00:00:00 2001 From: Benjamin Ulrich <b.ulrich@adito.de> Date: Wed, 26 May 2021 15:36:56 +0000 Subject: [PATCH 207/242] Merge branch 'sales_pn_1080452_salesproject_autoprobab_notheigher' into '2021.1' [Projekt: xRM-Sales][TicketNr.: 1080452][Automatische Wahrscheinlichkeit soll... See merge request xrm/basic!949 (cherry picked from commit 365d67bde10ac1415fe05e0d07ba1a745e72c560) bdb10a19 [Projekt: xRM-Sales][TicketNr.: 1080452][Automatische Wahrscheinlichkeit soll... 6806bbb2 merged 2021.1 into sales_pn_1080452_salesproject_autoprobab_notheigher 9ce8032a [Projekt: xRM-Sales][TicketNr.: 1080452][Automatische Wahrscheinlichkeit soll... --- .../Salesproject_entity.aod | 4 +++ .../entityfields/phase/onValueChange.js | 25 +++++++++++++++++++ .../recordcontainers/db/onDBUpdate.js | 11 -------- 3 files changed, 29 insertions(+), 11 deletions(-) create mode 100644 entity/Salesproject_entity/entityfields/phase/onValueChange.js diff --git a/entity/Salesproject_entity/Salesproject_entity.aod b/entity/Salesproject_entity/Salesproject_entity.aod index 7f800c660a..f40a10ef01 100644 --- a/entity/Salesproject_entity/Salesproject_entity.aod +++ b/entity/Salesproject_entity/Salesproject_entity.aod @@ -47,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> diff --git a/entity/Salesproject_entity/entityfields/phase/onValueChange.js b/entity/Salesproject_entity/entityfields/phase/onValueChange.js new file mode 100644 index 0000000000..4fbd8be482 --- /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/recordcontainers/db/onDBUpdate.js b/entity/Salesproject_entity/recordcontainers/db/onDBUpdate.js index 8c73baf3b5..c9dfa3fa5c 100644 --- a/entity/Salesproject_entity/recordcontainers/db/onDBUpdate.js +++ b/entity/Salesproject_entity/recordcontainers/db/onDBUpdate.js @@ -22,17 +22,6 @@ vars.get("$local.changed").forEach(function(fieldName) { switch (fieldName) { case "SALESPROJECT.PHASE": - typeValue = "SalesprojectPhase"; - var autoProbab = newSelect("SALESPROJECTPHASEDEFINITION.AUTOPROBABILITY") - .from("SALESPROJECTPHASEDEFINITION") - .where("SALESPROJECTPHASEDEFINITION.PHASE", vars.get("$field.PHASE")).cell(); - if(!isNaN(parseInt(autoProbab))) - { - newWhere("SALESPROJECT.SALESPROJECTID", vars.get("$field.SALESPROJECTID")) - .updateFields({ - "PROBABILITY": autoProbab - }, "SALESPROJECT"); - } break; case "SALESPROJECT.STATUS": // Milestone -- GitLab From e73ddbbba7c00e980e64e59e3c5add500cbc9f12 Mon Sep 17 00:00:00 2001 From: Benjamin Ulrich <b.ulrich@adito.de> Date: Tue, 25 May 2021 05:22:02 +0000 Subject: [PATCH 208/242] Merge branch 'sales_pn_1080416_tasks_nostateprocess' into '2021.1' [Projekt: xRM-Sales][TicketNr.: 1080416][Tab Aufgaben soll immer angezeigt werden] See merge request xrm/basic!950 (cherry picked from commit e1074ff1ce80c507c2644ec5edfadaad1e539f37) 99c4b8e9 [Projekt: xRM-Sales][TicketNr.: 1080416][Tab Aufgaben soll immer angezeigt werden] d94ce405 merged 2021.1 into sales_pn_1080416_tasks_nostateprocess --- entity/CampaignStep_entity/CampaignStep_entity.aod | 1 - .../entityfields/tasks/stateProcess.js | 10 ---------- entity/Contract_entity/Contract_entity.aod | 1 - .../Contract_entity/entityfields/tasks/stateProcess.js | 10 ---------- entity/Offer_entity/Offer_entity.aod | 1 - entity/Offer_entity/entityfields/tasks/stateProcess.js | 10 ---------- entity/Order_entity/Order_entity.aod | 1 - entity/Order_entity/entityfields/tasks/stateProcess.js | 10 ---------- entity/Product_entity/Product_entity.aod | 1 - .../Product_entity/entityfields/tasks/stateProcess.js | 10 ---------- entity/Salesproject_entity/Salesproject_entity.aod | 1 - .../entityfields/tasks/stateProcess.js | 10 ---------- 12 files changed, 66 deletions(-) delete mode 100644 entity/CampaignStep_entity/entityfields/tasks/stateProcess.js delete mode 100644 entity/Contract_entity/entityfields/tasks/stateProcess.js delete mode 100644 entity/Offer_entity/entityfields/tasks/stateProcess.js delete mode 100644 entity/Order_entity/entityfields/tasks/stateProcess.js delete mode 100644 entity/Product_entity/entityfields/tasks/stateProcess.js delete mode 100644 entity/Salesproject_entity/entityfields/tasks/stateProcess.js diff --git a/entity/CampaignStep_entity/CampaignStep_entity.aod b/entity/CampaignStep_entity/CampaignStep_entity.aod index ddef5bb760..c090c20d4c 100644 --- a/entity/CampaignStep_entity/CampaignStep_entity.aod +++ b/entity/CampaignStep_entity/CampaignStep_entity.aod @@ -257,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> diff --git a/entity/CampaignStep_entity/entityfields/tasks/stateProcess.js b/entity/CampaignStep_entity/entityfields/tasks/stateProcess.js deleted file mode 100644 index 24d86976c9..0000000000 --- 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/Contract_entity/Contract_entity.aod b/entity/Contract_entity/Contract_entity.aod index 0b5a6a6d22..65416c1c51 100644 --- a/entity/Contract_entity/Contract_entity.aod +++ b/entity/Contract_entity/Contract_entity.aod @@ -332,7 +332,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/tasks/stateProcess.js b/entity/Contract_entity/entityfields/tasks/stateProcess.js deleted file mode 100644 index 1b34404a38..0000000000 --- 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/Offer_entity/Offer_entity.aod b/entity/Offer_entity/Offer_entity.aod index 04e18008a2..de9acec821 100644 --- a/entity/Offer_entity/Offer_entity.aod +++ b/entity/Offer_entity/Offer_entity.aod @@ -503,7 +503,6 @@ </entityConsumer> <entityConsumer> <name>Tasks</name> - <stateProcess>%aditoprj%/entity/Offer_entity/entityfields/tasks/stateProcess.js</stateProcess> <dependency> <name>dependency</name> <entityName>Task_entity</entityName> diff --git a/entity/Offer_entity/entityfields/tasks/stateProcess.js b/entity/Offer_entity/entityfields/tasks/stateProcess.js deleted file mode 100644 index fca9129ea6..0000000000 --- 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/Order_entity/Order_entity.aod b/entity/Order_entity/Order_entity.aod index e1f343fcba..52f23b22af 100644 --- a/entity/Order_entity/Order_entity.aod +++ b/entity/Order_entity/Order_entity.aod @@ -313,7 +313,6 @@ </entityField> <entityConsumer> <name>Tasks</name> - <stateProcess>%aditoprj%/entity/Order_entity/entityfields/tasks/stateProcess.js</stateProcess> <dependency> <name>dependency</name> <entityName>Task_entity</entityName> diff --git a/entity/Order_entity/entityfields/tasks/stateProcess.js b/entity/Order_entity/entityfields/tasks/stateProcess.js deleted file mode 100644 index 01f44a3090..0000000000 --- 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/Product_entity/Product_entity.aod b/entity/Product_entity/Product_entity.aod index 0c280605c9..5c2b560db2 100644 --- a/entity/Product_entity/Product_entity.aod +++ b/entity/Product_entity/Product_entity.aod @@ -341,7 +341,6 @@ </entityActionField> <entityConsumer> <name>Tasks</name> - <stateProcess>%aditoprj%/entity/Product_entity/entityfields/tasks/stateProcess.js</stateProcess> <dependency> <name>dependency</name> <entityName>Task_entity</entityName> diff --git a/entity/Product_entity/entityfields/tasks/stateProcess.js b/entity/Product_entity/entityfields/tasks/stateProcess.js deleted file mode 100644 index 062f477b61..0000000000 --- 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/Salesproject_entity/Salesproject_entity.aod b/entity/Salesproject_entity/Salesproject_entity.aod index f40a10ef01..3b30e194f2 100644 --- a/entity/Salesproject_entity/Salesproject_entity.aod +++ b/entity/Salesproject_entity/Salesproject_entity.aod @@ -430,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> diff --git a/entity/Salesproject_entity/entityfields/tasks/stateProcess.js b/entity/Salesproject_entity/entityfields/tasks/stateProcess.js deleted file mode 100644 index 8a5375f38f..0000000000 --- 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 -- GitLab From a344a13fcd802a80e703861f4f54351ab6d75c4a Mon Sep 17 00:00:00 2001 From: Benjamin Ulrich <b.ulrich@adito.de> Date: Tue, 25 May 2021 13:45:31 +0000 Subject: [PATCH 209/242] Merge branch 'sales_pn_1080118_autochecklist_source_notworking' into '2021.1' MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [Projekt: xRM-Sales][TicketNr.: 1080118][Automatische checklisteneinträge... See merge request xrm/basic!965 (cherry picked from commit e5da4d1b99dd824cbc41dfb19d5fdcfef0dd78dd) b9dd62b3 [Projekt: xRM-Sales][TicketNr.: 1080118][Automatische checklisteneinträge... --- process/ChecklistEntryRegistry_basic/process.js | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/process/ChecklistEntryRegistry_basic/process.js b/process/ChecklistEntryRegistry_basic/process.js index 3cc7f7907d..53e11df9ba 100644 --- a/process/ChecklistEntryRegistry_basic/process.js +++ b/process/ChecklistEntryRegistry_basic/process.js @@ -516,14 +516,11 @@ $ChecklistEntryRegistry.salesprojectContactsGenerationSource = function(){ return{ title: translate.text("Source / origin of the generation of contacts"), verifierFn: function(pSalesprojectId){ - return parseInt(AttributeRelationUtils.getAttributeSqlBuilder( - ["count(*)"], - pSalesprojectId, - "Salesproject" - ) - .and("AB_ATTRIBUTE.ATTRIBUTE_PARENT_ID", "d0ae40d2-1a7f-45f6-bb0c-20ce6ae7efe2") - .cell() - ) > 0; + return new AttributeRelationQuery( + pSalesprojectId, + "d0ae40d2-1a7f-45f6-bb0c-20ce6ae7efe2", + "Salesproject" + ).getAttributeCount() > 0; } }; } -- GitLab From 69253dbc8e7adbf2ecf23ebb37d7cb6566115614 Mon Sep 17 00:00:00 2001 From: Benjamin Ulrich <b.ulrich@adito.de> Date: Tue, 25 May 2021 13:57:14 +0000 Subject: [PATCH 210/242] Merge branch 'sales_pn_1079936_zu_angebot_hinzufuegen_no_permission' into '2021.1' [Projekt: xRM-Sales][TicketNr.: 1079936][[Angebot] Button "Zu Angebot... See merge request xrm/basic!979 (cherry picked from commit 091464dac612f2c6e91745588d8c84ba68b670e2) 5e9379ee [Projekt: xRM-Sales][TicketNr.: 1079936][[Angebot] Button "Zu Angebot... --- .../entityfields/addtooffer/stateProcess.js | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/entity/Product_entity/entityfields/addtooffer/stateProcess.js b/entity/Product_entity/entityfields/addtooffer/stateProcess.js index a28ffee7b2..e04ccbdcb9 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 -- GitLab From 3932a507aa1e783eb7d128d15a519fa4fbf8f312 Mon Sep 17 00:00:00 2001 From: Benjamin Ulrich <b.ulrich@adito.de> Date: Tue, 25 May 2021 13:55:46 +0000 Subject: [PATCH 211/242] Merge branch 'sales_pn_1079933_offerstatus_lost_won_cantbeset' into '2021.1' [Projekt: xRM-Sales][TicketNr.: 1079933][[Angebot] Status "Verloren",... See merge request xrm/basic!978 (cherry picked from commit 6bf9d41eea11061c1bd7bea44168cc7009e4775e) 75aa38a9 [Projekt: xRM-Sales][TicketNr.: 1079933][[Angebot] Status "Verloren",... --- .../recordcontainers/jdito/contentProcess.js | 18 ++++++++++++++++++ .../ObjectProxy_entity/ObjectProxy_entity.aod | 2 -- entity/Offer_entity/Offer_entity.aod | 4 ++++ .../whitelistids_param/valueProcess.js | 12 ++++++++++++ entity/Offer_entity/grantUpdateProcess.js | 4 +--- 5 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 entity/Offer_entity/entityfields/keywordofferstates/children/whitelistids_param/valueProcess.js diff --git a/entity/KeywordEntry_entity/recordcontainers/jdito/contentProcess.js b/entity/KeywordEntry_entity/recordcontainers/jdito/contentProcess.js index 7fa2f2e399..bd4a9e38d8 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/ObjectProxy_entity/ObjectProxy_entity.aod b/entity/ObjectProxy_entity/ObjectProxy_entity.aod index de754623cf..1e633cfb90 100644 --- a/entity/ObjectProxy_entity/ObjectProxy_entity.aod +++ b/entity/ObjectProxy_entity/ObjectProxy_entity.aod @@ -156,8 +156,6 @@ <name>DocumentTemplates</name> <dependency> <name>dependency</name> - <entityName>DocumentTemplate_entity</entityName> - <fieldName>#PROVIDER</fieldName> </dependency> </entityConsumer> <entityConsumer> diff --git a/entity/Offer_entity/Offer_entity.aod b/entity/Offer_entity/Offer_entity.aod index de9acec821..a16373ac50 100644 --- a/entity/Offer_entity/Offer_entity.aod +++ b/entity/Offer_entity/Offer_entity.aod @@ -328,6 +328,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> 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 0000000000..31c9a715e4 --- /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/grantUpdateProcess.js b/entity/Offer_entity/grantUpdateProcess.js index dd8ad2ced3..1677ad01a5 100644 --- a/entity/Offer_entity/grantUpdateProcess.js +++ b/entity/Offer_entity/grantUpdateProcess.js @@ -7,8 +7,6 @@ import("KeywordRegistry_basic"); // using the grant update would also disable the status field. var status = vars.get("$field.STATUS"); -var editable = status != $KeywordRegistry.offerStatus$sent() - && status != $KeywordRegistry.offerStatus$won() - && status != $KeywordRegistry.offerStatus$lost(); +var editable = status != $KeywordRegistry.offerStatus$won() && status != $KeywordRegistry.offerStatus$lost(); result.string(editable || tools.hasRole(vars.get("$sys.user"), "INTERNAL_ADMINISTRATOR")); -- GitLab From 799b91a6d8156ec912ab896b69559a5c2e83e37f Mon Sep 17 00:00:00 2001 From: Benjamin Ulrich <b.ulrich@adito.de> Date: Thu, 27 May 2021 11:40:32 +0000 Subject: [PATCH 212/242] Cherrypick 1081044 into 2021.1.0 --- .../basic/2021.1.0/alterPlanningMonthData.xml | 12 ++++++++++++ .liquibase/Data_alias/basic/2021.1.0/changelog.xml | 6 +++--- .../jditodynamicmultidatachart/contentProcess.js | 5 +++-- language/_____LANGUAGE_de/_____LANGUAGE_de.aod | 1 + process/Turnover_lib/process.js | 10 +++++----- 5 files changed, 24 insertions(+), 10 deletions(-) create mode 100644 .liquibase/Data_alias/basic/2021.1.0/alterPlanningMonthData.xml 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 0000000000..3bc2dd381f --- /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 index 6a4ca39ed9..6d3bb24829 100644 --- a/.liquibase/Data_alias/basic/2021.1.0/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.1.0/changelog.xml @@ -1,6 +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"> + 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="create_standardWorkflow.xml"/> -</databaseChangeLog> \ No newline at end of file +</databaseChangeLog></databaseChangeLog> \ No newline at end of file diff --git a/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/contentProcess.js b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/contentProcess.js index 80bd839c8e..1fcebb2845 100644 --- a/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/contentProcess.js +++ b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/contentProcess.js @@ -26,8 +26,9 @@ if( vars.exists("$local.grouped")) 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) ") + 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"); diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod index b53cdc8b99..b49864ce47 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -11220,6 +11220,7 @@ Bitte Datumseingabe prüfen</value> </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> diff --git a/process/Turnover_lib/process.js b/process/Turnover_lib/process.js index 4ce2665e32..3193c9e503 100644 --- a/process/Turnover_lib/process.js +++ b/process/Turnover_lib/process.js @@ -192,7 +192,7 @@ TurnoverDynamicChart.prototype.getPlanningFromSql = function () + " (" + this.getGroupFieldDisplayValue(this.idxPlanning) + ") as groupField, "; } - select += sqlHelper.cast("FORECAST.VOLUME/100*PLANNING_MONTH.MONTH_FACTOR", SQLTYPES.INTEGER) + " as sum_planning, " + 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) @@ -226,7 +226,7 @@ TurnoverDynamicChart.prototype.getForecastFromSql = function (pIsWeighted) select = this.groupMapping[this.groupedField]["forGrouping"][this.idxForecast] + " as uid, " + "(" + this.getGroupFieldDisplayValue(this.idxForecast) + ") as groupField,"; } - var volumeColumns = " 0 as sum_planning, " + sqlHelper.cast("FORECAST.VOLUME", SQLTYPES.INTEGER) + var volumeColumns = " 0 as sum_planning, FORECAST.VOLUME" + " as sum_forecast, 0 as sum_turnover, 0 as sum_forecast_weighted"; if(pIsWeighted) @@ -237,7 +237,7 @@ TurnoverDynamicChart.prototype.getForecastFromSql = function (pIsWeighted) } volumeColumns = " 0 as sum_planning, 0 as sum_forecast, 0 as sum_turnover, " - + sqlHelper.cast("(FORECAST.VOLUME/100*SALESPROJECT.PROBABILITY)", SQLTYPES.INTEGER) + + "(FORECAST.VOLUME/100*SALESPROJECT.PROBABILITY)" + " as sum_forecast_weighted"; } @@ -273,9 +273,9 @@ TurnoverDynamicChart.prototype.getTurnoverFromSql = function () } select += " 0 as sum_planning, 0 as sum_forecast, " - + sqlHelper.cast("((SALESORDERITEM.PRICE * SALESORDERITEM.QUANTITY * (100 - " + sqlHelper.isNull("SALESORDERITEM.DISCOUNT", 0) + + "((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))", SQLTYPES.INTEGER) + " as sum_turnover" + + ") / 100 * " + sqlHelper.isNull("SALESORDERITEM.VAT", 0) + " / 100)) as sum_turnover" + ", 0 as sum_forecast_weighted"; return newSelect(select) -- GitLab From d4ec1a5e863e568ac086d088342c0d40706b4dca Mon Sep 17 00:00:00 2001 From: Pascal Neub <p.neub@adito.de> Date: Thu, 27 May 2021 11:53:41 +0000 Subject: [PATCH 213/242] =?UTF-8?q?[Projekt:=20xRM-Sales][TicketNr.:=20108?= =?UTF-8?q?1344][Gebietsverantwortliche=20nicht=20automatisch=20zum=20VT?= =?UTF-8?q?=20Projekt=20hinzuf=C3=BCgen]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../recordcontainers/jdito/contentProcess.js | 102 +----------------- 1 file changed, 1 insertion(+), 101 deletions(-) diff --git a/entity/Member_entity/recordcontainers/jdito/contentProcess.js b/entity/Member_entity/recordcontainers/jdito/contentProcess.js index 106d0d7c1f..ae5e30a855 100644 --- a/entity/Member_entity/recordcontainers/jdito/contentProcess.js +++ b/entity/Member_entity/recordcontainers/jdito/contentProcess.js @@ -62,104 +62,4 @@ memberRows = memberRows.map(function(row) ]; }); -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) - .addParameter("OnlyActive_param", true) - .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", "PERSONID", "CONTACTID"]); - var persRowsMap = {}; - entities.getRows(loadingConfPers).forEach(function(item) { - persRowsMap[item["CONTACTID"]] = item; - }); - - var persRows = []; - responsibleUids.forEach(function(uid) { - persRows.push(persRowsMap[uid]); - }); - - 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", - "", - (new AttributeRelationQuery( - row[3], - $AttributeRegistry.loyalty() - ).includeDisplayValue().getSingleAttribute() || {displayValue: ""}).displayValue - ]); - }); -} - -result.object(memberRows); \ No newline at end of file +result.object(memberRows); -- GitLab From 0a4999bcee4692e920542b49b80f777373b0cfdc Mon Sep 17 00:00:00 2001 From: "s.pongratz" <s.pongratz@adito.de> Date: Thu, 27 May 2021 15:07:16 +0200 Subject: [PATCH 214/242] =?UTF-8?q?[Projekt:=20xRM-ContactManagement][Tick?= =?UTF-8?q?etNr.:=201081078][DSGVO=20erzeugt=20Meldung=20am=20Client=20auc?= =?UTF-8?q?h=20wenn=20es=20am=20server=20ausgef=C3=BChrt=20wird]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Address_entity/recordcontainers/db/onDBInsert.js | 2 +- .../Address_entity/recordcontainers/db/onDBUpdate.js | 2 +- .../recordcontainers/db/onDBInsert.js | 2 +- .../recordcontainers/db/onDBUpdate.js | 2 +- process/DataPrivacy_lib/process.js | 10 ++++++++-- 5 files changed, 12 insertions(+), 6 deletions(-) diff --git a/entity/Address_entity/recordcontainers/db/onDBInsert.js b/entity/Address_entity/recordcontainers/db/onDBInsert.js index b088c7a1b3..0ea7d49858 100644 --- a/entity/Address_entity/recordcontainers/db/onDBInsert.js +++ b/entity/Address_entity/recordcontainers/db/onDBInsert.js @@ -49,7 +49,7 @@ if(scopeType == "Organisation") } } -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/Address_entity/recordcontainers/db/onDBUpdate.js b/entity/Address_entity/recordcontainers/db/onDBUpdate.js index 8ce04bc6f3..870d5a7533 100644 --- a/entity/Address_entity/recordcontainers/db/onDBUpdate.js +++ b/entity/Address_entity/recordcontainers/db/onDBUpdate.js @@ -7,7 +7,7 @@ import("DataPrivacy_lib"); var rowdata = vars.get("$local.rowdata"); -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/onDBInsert.js b/entity/Communication_entity/recordcontainers/db/onDBInsert.js index 7d836ae39e..b78d0ded2a 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 ebf288114b..1b8a0279c1 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/process/DataPrivacy_lib/process.js b/process/DataPrivacy_lib/process.js index c7c004a2ce..4e9ddfc604 100644 --- a/process/DataPrivacy_lib/process.js +++ b/process/DataPrivacy_lib/process.js @@ -485,13 +485,19 @@ 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")); } -- GitLab From 0b4737da1b97b40509a3eec9b6b39adb79acd9d2 Mon Sep 17 00:00:00 2001 From: "a.niebisch" <a.niebisch@adito.de> Date: Thu, 27 May 2021 15:55:30 +0200 Subject: [PATCH 215/242] =?UTF-8?q?#1081468=20AliasConfig=20f=C3=BCr=20Ind?= =?UTF-8?q?exAlias=20=C3=BCber=20Liquibase=20anlegen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - defaultBlob für IndexSearch AliasConfig hinzugefügt - defaultBlob für _____configuration um Eintrag für Alias der Indexsuche erweitert - insert_asys_aliasconfig.xml um Eintrag für IndexAlias erweitert --- .../basic/init/data/defaultBlob/IndexSearch.xml | 13 +++++++++++++ .../init/data/defaultBlob/_____configuration.xml | 1 + .../basic/init/data/insert_asys_aliasconfig.xml | 13 +++++++++++++ 3 files changed, 27 insertions(+) create mode 100644 .liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/IndexSearch.xml 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 0000000000..a623df3e3c --- /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/_____configuration.xml b/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/_____configuration.xml index 3e5ee0c4e6..b8e2eb9d98 100644 --- a/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/_____configuration.xml +++ b/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/_____configuration.xml @@ -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/insert_asys_aliasconfig.xml b/.liquibase/_____SYSTEMALIAS/basic/init/data/insert_asys_aliasconfig.xml index 0d04350661..0f0d825b27 100644 --- a/.liquibase/_____SYSTEMALIAS/basic/init/data/insert_asys_aliasconfig.xml +++ b/.liquibase/_____SYSTEMALIAS/basic/init/data/insert_asys_aliasconfig.xml @@ -75,5 +75,18 @@ <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 -- GitLab From bd9282661683d0d2be5dfeb7b2c148a4a4407bc3 Mon Sep 17 00:00:00 2001 From: Daniel Tran <d.tran@adito.de> Date: Thu, 27 May 2021 16:06:53 +0000 Subject: [PATCH 216/242] [Projekt: xRM-ContactManagement][TicketNr.: 1078470][Dokumentenvorlage nicht editierbar] - Fixed bug, that changes which were made to the binary behind the document template are not saved. --- .../recordcontainers/db/onDBUpdate.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/entity/DocumentTemplate_entity/recordcontainers/db/onDBUpdate.js b/entity/DocumentTemplate_entity/recordcontainers/db/onDBUpdate.js index dee24321b4..868bf99d8d 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(); -- GitLab From 692cab23794b5d92ce8349cb8c67646feeb2130d Mon Sep 17 00:00:00 2001 From: "p.neub" <p.neub@adito.de> Date: Thu, 27 May 2021 19:37:36 +0200 Subject: [PATCH 217/242] fix malformed .liquibase/basic/2021.1.0/changelog.xml --- .liquibase/Data_alias/basic/2021.1.0/changelog.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.liquibase/Data_alias/basic/2021.1.0/changelog.xml b/.liquibase/Data_alias/basic/2021.1.0/changelog.xml index 6d3bb24829..6819cd521a 100644 --- a/.liquibase/Data_alias/basic/2021.1.0/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.1.0/changelog.xml @@ -3,4 +3,4 @@ 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="create_standardWorkflow.xml"/> -</databaseChangeLog></databaseChangeLog> \ No newline at end of file +</databaseChangeLog> \ No newline at end of file -- GitLab From e18e25b9a297b9efa76bce8f7cfaa61f2efb89cf Mon Sep 17 00:00:00 2001 From: Erika Rohrmeyer <e.rohrmeyer@adito.de> Date: Fri, 28 May 2021 12:08:40 +0000 Subject: [PATCH 218/242] [Projekt: xRM-Sales][TicketNr.: 1080673][Angebotsfreigabe-Workflow] --- .../Data_alias/basic/2021.1.0/changelog.xml | 3 + .../add_ab_keyword_entry_activityCategory.xml | 17 + .../add_ab_keyword_entry_offerstatus.xml | 27 ++ .../offerWorkflow/alter_offer_approval.xml | 11 + aliasDefinition/Data_alias/Data_alias.aod | 28 ++ entity/Offer_entity/Offer_entity.aod | 115 ++++--- .../approveoffer/onActionProcess.js | 13 + .../entityfields/approveoffer/stateProcess.js | 20 ++ .../entityfields/approveoffer/titleProcess.js | 7 + .../checkoffer/onActionProcess.js | 20 ++ .../entityfields/checkoffer/stateProcess.js | 29 ++ .../entityfields/checkoffer/titleProcess.js | 8 + .../dispatchofferreport/stateProcess.js | 6 +- .../recordcontainers/db/conditionProcess.js | 13 +- .../_____LANGUAGE_EXTRA.aod | 54 +++ .../_____LANGUAGE_de/_____LANGUAGE_de.aod | 68 ++++ .../_____LANGUAGE_en/_____LANGUAGE_en.aod | 54 +++ neonContext/Offer/Offer.aod | 3 + .../OfferFilter_view/OfferFilter_view.aod | 47 +++ others/AngebotFreigeben.bpmn20.xml | 315 ++++++++++++++++++ ...eOfferApprovedActivity_workflowService.aod | 11 + .../process.js | 24 ++ .../serviceTaskParameterProcess.js | 7 + ...erApprovedNotification_workflowService.aod | 10 + .../process.js | 35 ++ ...ateOfferDeniedActivity_workflowService.aod | 11 + .../process.js | 74 ++++ .../serviceTaskParameterProcess.js | 17 + ...reateOfferNotification_workflowService.aod | 10 + .../process.js | 32 ++ process/KeywordRegistry_basic/process.js | 3 + .../UpdateOfferStatus_workflowService.aod | 11 + .../process.js | 8 + .../serviceTaskParameterProcess.js | 14 + process/Workflow_lib/process.js | 28 ++ .../PROJECT_Inspector1/PROJECT_Inspector1.aod | 5 + .../PROJECT_Inspector2/PROJECT_Inspector2.aod | 6 + 37 files changed, 1122 insertions(+), 42 deletions(-) create mode 100644 .liquibase/Data_alias/basic/2021.1.0/offerWorkflow/add_ab_keyword_entry_activityCategory.xml create mode 100644 .liquibase/Data_alias/basic/2021.1.0/offerWorkflow/add_ab_keyword_entry_offerstatus.xml create mode 100644 .liquibase/Data_alias/basic/2021.1.0/offerWorkflow/alter_offer_approval.xml create mode 100644 entity/Offer_entity/entityfields/approveoffer/onActionProcess.js create mode 100644 entity/Offer_entity/entityfields/approveoffer/stateProcess.js create mode 100644 entity/Offer_entity/entityfields/approveoffer/titleProcess.js create mode 100644 entity/Offer_entity/entityfields/checkoffer/onActionProcess.js create mode 100644 entity/Offer_entity/entityfields/checkoffer/stateProcess.js create mode 100644 entity/Offer_entity/entityfields/checkoffer/titleProcess.js create mode 100644 others/AngebotFreigeben.bpmn20.xml create mode 100644 process/CreateOfferApprovedActivity_workflowService/CreateOfferApprovedActivity_workflowService.aod create mode 100644 process/CreateOfferApprovedActivity_workflowService/process.js create mode 100644 process/CreateOfferApprovedActivity_workflowService/serviceTaskParameterProcess.js create mode 100644 process/CreateOfferApprovedNotification/CreateOfferApprovedNotification_workflowService.aod create mode 100644 process/CreateOfferApprovedNotification_workflowService/process.js create mode 100644 process/CreateOfferDeniedActivity_workflowService/CreateOfferDeniedActivity_workflowService.aod create mode 100644 process/CreateOfferDeniedActivity_workflowService/process.js create mode 100644 process/CreateOfferDeniedActivity_workflowService/serviceTaskParameterProcess.js create mode 100644 process/CreateOfferNotification_workflowService/CreateOfferNotification_workflowService.aod create mode 100644 process/CreateOfferNotification_workflowService/process.js create mode 100644 process/UpdateOfferStatus_workflowService/UpdateOfferStatus_workflowService.aod create mode 100644 process/UpdateOfferStatus_workflowService/process.js create mode 100644 process/UpdateOfferStatus_workflowService/serviceTaskParameterProcess.js create mode 100644 role/PROJECT_Inspector1/PROJECT_Inspector1.aod create mode 100644 role/PROJECT_Inspector2/PROJECT_Inspector2.aod diff --git a/.liquibase/Data_alias/basic/2021.1.0/changelog.xml b/.liquibase/Data_alias/basic/2021.1.0/changelog.xml index 6819cd521a..3eed7dff70 100644 --- a/.liquibase/Data_alias/basic/2021.1.0/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.1.0/changelog.xml @@ -2,5 +2,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 relativeToChangelogFile="true" file="alterPlanningMonthData.xml"/> + <include relativeToChangelogFile="true" file="offerWorkflow/alter_offer_approval.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"/> </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 0000000000..4d3f86db7d --- /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 0000000000..3d368b7a31 --- /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 0000000000..562c4ac797 --- /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/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod index 2bcf26f4db..85346acf26 100644 --- a/aliasDefinition/Data_alias/Data_alias.aod +++ b/aliasDefinition/Data_alias/Data_alias.aod @@ -3150,6 +3150,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> diff --git a/entity/Offer_entity/Offer_entity.aod b/entity/Offer_entity/Offer_entity.aod index a16373ac50..c6ea3d5685 100644 --- a/entity/Offer_entity/Offer_entity.aod +++ b/entity/Offer_entity/Offer_entity.aod @@ -1004,6 +1004,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> @@ -1086,6 +1136,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> @@ -1093,46 +1160,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> - <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> </entityFields> <recordContainers> <dbRecordContainer> @@ -1360,6 +1387,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/entityfields/approveoffer/onActionProcess.js b/entity/Offer_entity/entityfields/approveoffer/onActionProcess.js new file mode 100644 index 0000000000..4c386d3779 --- /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 0000000000..d44aa31f28 --- /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 0000000000..e74ec5edc1 --- /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 0000000000..65b29fcbc1 --- /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 0000000000..3c0c76db09 --- /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 0000000000..8127f6169b --- /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/offerreportdispatch/children/dispatchofferreport/stateProcess.js b/entity/Offer_entity/entityfields/offerreportdispatch/children/dispatchofferreport/stateProcess.js index 738545ff13..47d7dcf10f 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/recordcontainers/db/conditionProcess.js b/entity/Offer_entity/recordcontainers/db/conditionProcess.js index eabc7f2454..687c5f8bf9 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/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index 83e6860df3..ee70a5fef3 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -8581,6 +8581,60 @@ <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>No advertising</key> + </entry> <entry> <key>[TEST] Importer</key> </entry> diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod index b49864ce47..21ed6ae8fe 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -38,6 +38,10 @@ <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> @@ -50,6 +54,10 @@ <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> @@ -1147,6 +1155,10 @@ <key>Status</key> <value>Status</value> </entry> + <entry> + <key>denied</key> + <value>abgelehnt</value> + </entry> <entry> <key>Deadline</key> <value>Frist</value> @@ -1179,6 +1191,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> @@ -1191,6 +1211,10 @@ <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> @@ -1199,6 +1223,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> @@ -1832,6 +1860,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> @@ -1883,6 +1915,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> @@ -3823,6 +3859,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> @@ -4259,6 +4299,10 @@ <entry> <key>25%</key> </entry> + <entry> + <key>Second Approval</key> + <value>2. Freigabe</value> + </entry> <entry> <key>Sales forecast</key> <value>Umsatzprognose</value> @@ -6838,6 +6882,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> @@ -8956,6 +9008,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> @@ -9291,6 +9347,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> @@ -9307,6 +9367,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> @@ -11144,6 +11208,10 @@ Bitte Datumseingabe prüfen</value> <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> diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod index 3cb99dc83e..67f5544e63 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -8666,6 +8666,60 @@ <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>No advertising</key> + </entry> <entry> <key>[TEST] Importer</key> </entry> diff --git a/neonContext/Offer/Offer.aod b/neonContext/Offer/Offer.aod index 271bdfa9b4..9d43127e98 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/neonView/OfferFilter_view/OfferFilter_view.aod b/neonView/OfferFilter_view/OfferFilter_view.aod index f0ca240b04..c92b2a4e55 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/others/AngebotFreigeben.bpmn20.xml b/others/AngebotFreigeben.bpmn20.xml new file mode 100644 index 0000000000..c19a1a663b --- /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/process/CreateOfferApprovedActivity_workflowService/CreateOfferApprovedActivity_workflowService.aod b/process/CreateOfferApprovedActivity_workflowService/CreateOfferApprovedActivity_workflowService.aod new file mode 100644 index 0000000000..7e7f4e23c7 --- /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 0000000000..cdb5ca147a --- /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 0000000000..273a35fba1 --- /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 0000000000..256a186b59 --- /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 0000000000..de4c733c1f --- /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 0000000000..520a973407 --- /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 0000000000..1caa7274d4 --- /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 0000000000..76f283b6e2 --- /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 0000000000..d2860a2a5f --- /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 0000000000..d6a3583a95 --- /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/KeywordRegistry_basic/process.js b/process/KeywordRegistry_basic/process.js index 8906c9fcaf..480fe7ab1f 100644 --- a/process/KeywordRegistry_basic/process.js +++ b/process/KeywordRegistry_basic/process.js @@ -56,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";}; @@ -114,6 +116,7 @@ $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";}; diff --git a/process/UpdateOfferStatus_workflowService/UpdateOfferStatus_workflowService.aod b/process/UpdateOfferStatus_workflowService/UpdateOfferStatus_workflowService.aod new file mode 100644 index 0000000000..45d94d6c13 --- /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 0000000000..18596c5690 --- /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 0000000000..5fe0b0f9a0 --- /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/Workflow_lib/process.js b/process/Workflow_lib/process.js index 5d05eedb80..3965813e2b 100644 --- a/process/Workflow_lib/process.js +++ b/process/Workflow_lib/process.js @@ -112,6 +112,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 */ diff --git a/role/PROJECT_Inspector1/PROJECT_Inspector1.aod b/role/PROJECT_Inspector1/PROJECT_Inspector1.aod new file mode 100644 index 0000000000..73d6e71c56 --- /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 0000000000..94c0fd7004 --- /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> -- GitLab From 6db391d8c86ba9555403aad5b2bd9551f3db48e5 Mon Sep 17 00:00:00 2001 From: Simon Leipold <s.leipold@adito.de> Date: Fri, 28 May 2021 14:53:02 +0200 Subject: [PATCH 219/242] [Projekt: Entwicklung - Neon][TicketNr.: 1081133][SqlBuilder newWhere mit bringt Fehler bei db.quote] --- process/Sql_lib/process.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/process/Sql_lib/process.js b/process/Sql_lib/process.js index 383117664c..e7a2d4b430 100644 --- a/process/Sql_lib/process.js +++ b/process/Sql_lib/process.js @@ -4497,10 +4497,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)) @@ -4518,7 +4519,7 @@ 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]]; + return [db.quote(pValue[0], pAlias), pValue[1]]; }); return pExecutionCallback([pStatement[0], preparedStatements]); @@ -4533,7 +4534,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) @@ -4551,7 +4552,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) -- GitLab From 2e268930f66c33d0eba5b5d1d01c13c7b5a98450 Mon Sep 17 00:00:00 2001 From: "s.pongratz" <s.pongratz@adito.de> Date: Mon, 31 May 2021 09:42:26 +0200 Subject: [PATCH 220/242] [Projekt: xRM-ContactManagement][TicketNr.: 1080655]["Further information"-Labels anpassen ] --- entity/BulkMailStatusChart_entity/documentation.adoc | 2 +- language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod | 5 +---- language/_____LANGUAGE_de/_____LANGUAGE_de.aod | 2 +- language/_____LANGUAGE_en/_____LANGUAGE_en.aod | 5 +---- neonView/CampaignPreview_view/CampaignPreview_view.aod | 2 +- neonView/DistrictPreview_view/DistrictPreview_view.aod | 4 ++-- neonView/OfferPreview_view/OfferPreview_view.aod | 2 +- .../OrganisationPreview_view/OrganisationPreview_view.aod | 2 +- neonView/PersonPreview_view/PersonPreview_view.aod | 2 +- .../SalesprojectFurtherInfo_view.aod | 2 +- neonView/WeblinkDrawer_view/WeblinkDrawer_view.aod | 2 +- .../WorkflowDefinitionPreview_view.aod | 2 +- .../WorkflowInstancePreview_view.aod | 2 +- .../WorkflowTaskPreview_view/WorkflowTaskPreview_view.aod | 2 +- process/Calendar_lib/process.js | 2 +- process/DataPrivacy_lib/process.js | 6 +++--- process/DocxTemplater_lib/process.js | 2 +- process/ImporterMappingFunctions_lib/process.js | 2 +- process/IncomingCallExecutor_lib/process.js | 2 +- process/Sql_lib/process.js | 2 +- process/getDocxDocument_serverProcess/process.js | 2 +- 21 files changed, 24 insertions(+), 30 deletions(-) diff --git a/entity/BulkMailStatusChart_entity/documentation.adoc b/entity/BulkMailStatusChart_entity/documentation.adoc index cdeb86c7c9..09be850685 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/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index ee70a5fef3..ca326d2bcd 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> @@ -8632,9 +8632,6 @@ <entry> <key>show all offers with first approval</key> </entry> - <entry> - <key>No advertising</key> - </entry> <entry> <key>[TEST] Importer</key> </entry> diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod index 21ed6ae8fe..bd85d542ad 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -2748,7 +2748,7 @@ <value>Montserrat</value> </entry> <entry> - <key>Further informations</key> + <key>Further information</key> <value>Weitere Informationen</value> </entry> <entry> diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod index 67f5544e63..7f288c5fda 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> @@ -8717,9 +8717,6 @@ <entry> <key>show all offers with first approval</key> </entry> - <entry> - <key>No advertising</key> - </entry> <entry> <key>[TEST] Importer</key> </entry> diff --git a/neonView/CampaignPreview_view/CampaignPreview_view.aod b/neonView/CampaignPreview_view/CampaignPreview_view.aod index ef0a7a7e69..3c9d7772da 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/DistrictPreview_view/DistrictPreview_view.aod b/neonView/DistrictPreview_view/DistrictPreview_view.aod index 52d71fd474..94a09880f3 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/OfferPreview_view/OfferPreview_view.aod b/neonView/OfferPreview_view/OfferPreview_view.aod index 4639d6ac8a..3351f58318 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/OrganisationPreview_view/OrganisationPreview_view.aod b/neonView/OrganisationPreview_view/OrganisationPreview_view.aod index 5a88bf5233..4571168f48 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/PersonPreview_view/PersonPreview_view.aod b/neonView/PersonPreview_view/PersonPreview_view.aod index 78a6c4a8a2..4fc418c06b 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/SalesprojectFurtherInfo_view/SalesprojectFurtherInfo_view.aod b/neonView/SalesprojectFurtherInfo_view/SalesprojectFurtherInfo_view.aod index b9df7b607f..f5d5ef6702 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/WeblinkDrawer_view/WeblinkDrawer_view.aod b/neonView/WeblinkDrawer_view/WeblinkDrawer_view.aod index 4a69a3455f..249c154508 100644 --- a/neonView/WeblinkDrawer_view/WeblinkDrawer_view.aod +++ b/neonView/WeblinkDrawer_view/WeblinkDrawer_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>WeblinkDrawer_view</name> - <title>Further informations</title> + <title>Further information</title> <majorModelMode>DISTRIBUTED</majorModelMode> <layout> <boxLayout> diff --git a/neonView/WorkflowDefinitionPreview_view/WorkflowDefinitionPreview_view.aod b/neonView/WorkflowDefinitionPreview_view/WorkflowDefinitionPreview_view.aod index dbfa4e6474..a4b57a0b69 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/WorkflowInstancePreview_view/WorkflowInstancePreview_view.aod b/neonView/WorkflowInstancePreview_view/WorkflowInstancePreview_view.aod index 3761673b2e..53456e1587 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 460c6ea0cb..03d374ecd3 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/process/Calendar_lib/process.js b/process/Calendar_lib/process.js index a88ae599df..3cdfaf1fda 100644 --- a/process/Calendar_lib/process.js +++ b/process/Calendar_lib/process.js @@ -36,7 +36,7 @@ function CalendarUtil(){} * 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> + * The required information:<br> * <ul> * <li>pWithLink[0]: Name of the frame.</li> * <li>pWithLink[1]: Id of the shown record.</li> diff --git a/process/DataPrivacy_lib/process.js b/process/DataPrivacy_lib/process.js index c7c004a2ce..fb39ddc07f 100644 --- a/process/DataPrivacy_lib/process.js +++ b/process/DataPrivacy_lib/process.js @@ -120,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: @@ -473,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) @@ -498,7 +498,7 @@ DataPrivacyUtils.notifyNeedDataPrivacyUpdate = function(pContactId, pShowMessage } /** - * 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. diff --git a/process/DocxTemplater_lib/process.js b/process/DocxTemplater_lib/process.js index 8306c04214..9fecd012b7 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/ImporterMappingFunctions_lib/process.js b/process/ImporterMappingFunctions_lib/process.js index 338833fabb..b48f57eb5e 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 9f6eb5534d..5b34a53945 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/Sql_lib/process.js b/process/Sql_lib/process.js index 383117664c..44fca912c1 100644 --- a/process/Sql_lib/process.js +++ b/process/Sql_lib/process.js @@ -3434,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 diff --git a/process/getDocxDocument_serverProcess/process.js b/process/getDocxDocument_serverProcess/process.js index 80f0a37b65..c562904330 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); -- GitLab From a2f0e2e3f235f6d2ff1b8cc4232ac0ec426ae506 Mon Sep 17 00:00:00 2001 From: Sebastian Pongratz <s.pongratz@adito.de> Date: Tue, 1 Jun 2021 07:33:52 +0000 Subject: [PATCH 221/242] [Projekt: Entwicklung - Neon][TicketNr.: 1074612][[Beobachtungen] Benachrichtigung bei Felder mit DropDown-process] --- .../Notification_entity.aod | 1 + .../Observation_entity/Observation_entity.aod | 1 + entity/Observation_entity/documentation.adoc | 1 - .../includedependencies/valueProcess.js | 2 +- .../children/observe/stateProcess.js | 5 + neonContext/Observation/Observation.aod | 25 + .../ObservationEdit_view.aod | 3 +- .../_____PREFERENCES_PROJECT.aod | 2 +- process/Dependency_lib/process.js | 8 +- process/Observation_lib/process.js | 622 +++++++++++++----- process/Observation_test/Observation_test.aod | 11 + process/Observation_test/process.js | 66 ++ process/Workflow_lib/process.js | 69 +- .../process.js | 2 +- 14 files changed, 629 insertions(+), 189 deletions(-) create mode 100644 entity/Person_entity/entityfields/filterviewactiongroup/children/observe/stateProcess.js create mode 100644 neonContext/Observation/Observation.aod create mode 100644 process/Observation_test/Observation_test.aod create mode 100644 process/Observation_test/process.js diff --git a/entity/Notification_entity/Notification_entity.aod b/entity/Notification_entity/Notification_entity.aod index 494d9bcb8b..2374ea30f1 100644 --- a/entity/Notification_entity/Notification_entity.aod +++ b/entity/Notification_entity/Notification_entity.aod @@ -48,6 +48,7 @@ <entityField> <name>DESCRIPTION</name> <title>Description</title> + <contentType>HTML</contentType> </entityField> <entityField> <name>FORCEDPRIORITY</name> diff --git a/entity/Observation_entity/Observation_entity.aod b/entity/Observation_entity/Observation_entity.aod index e69c04a5bb..dd75d356f6 100644 --- a/entity/Observation_entity/Observation_entity.aod +++ b/entity/Observation_entity/Observation_entity.aod @@ -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> diff --git a/entity/Observation_entity/documentation.adoc b/entity/Observation_entity/documentation.adoc index 5968fb30c1..4337e3eb29 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 17d96815f7..13e327167d 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/Person_entity/entityfields/filterviewactiongroup/children/observe/stateProcess.js b/entity/Person_entity/entityfields/filterviewactiongroup/children/observe/stateProcess.js new file mode 100644 index 0000000000..84fd36a56b --- /dev/null +++ b/entity/Person_entity/entityfields/filterviewactiongroup/children/observe/stateProcess.js @@ -0,0 +1,5 @@ +import("system.vars"); +import("system.result"); +import("Observation_lib"); + +result.string(Observation.actionState(vars.get("$sys.selection"))); \ No newline at end of file diff --git a/neonContext/Observation/Observation.aod b/neonContext/Observation/Observation.aod new file mode 100644 index 0000000000..aeab7d749b --- /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/neonView/ObservationEdit_view/ObservationEdit_view.aod b/neonView/ObservationEdit_view/ObservationEdit_view.aod index bba30a064e..01b240c098 100644 --- a/neonView/ObservationEdit_view/ObservationEdit_view.aod +++ b/neonView/ObservationEdit_view/ObservationEdit_view.aod @@ -46,7 +46,8 @@ <entityField>TRIGGEREVENTDELETE</entityField> </entityFieldLink> <entityFieldLink> - <name>aa93c341-578b-4da9-8ee8-2b3d9ea9e1ca</name> + <name>ac899215-4356-4034-b263-d40807f0b0f1</name> + <entityField>includeDependencies</entityField> </entityFieldLink> <entityFieldLink> <name>c6fa82e2-5830-46c5-9127-e273ddf5a194</name> diff --git a/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod b/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod index d27a2d9c2d..1ab99fa50e 100644 --- a/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod +++ b/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod @@ -172,7 +172,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> diff --git a/process/Dependency_lib/process.js b/process/Dependency_lib/process.js index 54305d6527..488e2f5408 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") }, diff --git a/process/Observation_lib/process.js b/process/Observation_lib/process.js index b67681a784..51e6bfcf7e 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; - } - } - } - } - - 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]; - } - }); - } + this._checkDependencies(observation[2], observation[4], tempObserver, observation[5]); } } - 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; } @@ -693,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 0000000000..528cd6f03e --- /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 0000000000..dc44a3b28f --- /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/Workflow_lib/process.js b/process/Workflow_lib/process.js index 5d05eedb80..0e6b86e743 100644 --- a/process/Workflow_lib/process.js +++ b/process/Workflow_lib/process.js @@ -187,11 +187,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)}) @@ -206,7 +206,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]; @@ -305,6 +305,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 */ @@ -318,7 +334,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"): {})); } /** @@ -334,7 +350,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"): {})); } /** @@ -350,7 +366,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"): [])); } /** @@ -366,19 +382,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); } @@ -443,7 +477,7 @@ WorkflowVariables.CONTENTTITLE = function () */ WorkflowVariables.CONTENTTITLE.getDefaultValue = function () { - return vars.get("$field.#CONTENTTITLE"); + return vars.exists("$local.rowdata") ? vars.get("$field.#CONTENTTITLE") : null; } /** @@ -476,7 +510,8 @@ WorkflowVariables.getAllVariables = function () "TARGET_CONTEXT", "TARGET_ID", "TRIGGER", - "CONTENTTITLE" + "CONTENTTITLE", + "FIELDS_TO_LOAD" ] } diff --git a/process/workflowExtension_serverProcess/process.js b/process/workflowExtension_serverProcess/process.js index a2fe06d716..4da7b83aae 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); -- GitLab From 64ad984956776e62b73eb7719b0d9c2fe7ed82e6 Mon Sep 17 00:00:00 2001 From: Martin Groppe <m.groppe@adito.de> Date: Tue, 1 Jun 2021 11:54:12 +0000 Subject: [PATCH 222/242] campaignparticipant duplicate entries --- .../BulkMailRecipient_entity.aod | 1 + .../campaignstep_id/onValidation.js | 2 +- .../CampaignParticipant_entity.aod | 1 + .../entityfields/contact_id/onValidation.js | 17 +++++++++++++++++ .../entityfields/contact_id/stateProcess.js | 2 +- language/_____LANGUAGE_de/_____LANGUAGE_de.aod | 4 ++++ 6 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 entity/CampaignParticipant_entity/entityfields/contact_id/onValidation.js diff --git a/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod b/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod index 3257dcb077..b78cdfe935 100644 --- a/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod +++ b/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod @@ -188,6 +188,7 @@ <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> diff --git a/entity/CampaignAddParticipants_entity/entityfields/campaignstep_id/onValidation.js b/entity/CampaignAddParticipants_entity/entityfields/campaignstep_id/onValidation.js index 29f8f42cc5..9767998d73 100644 --- a/entity/CampaignAddParticipants_entity/entityfields/campaignstep_id/onValidation.js +++ b/entity/CampaignAddParticipants_entity/entityfields/campaignstep_id/onValidation.js @@ -11,7 +11,7 @@ var maxCount = vars.get("$field.campaignStepMaxParticipantCount"); var isUpdate = Utils.toBoolean(vars.get("$param.isUpdate_param")); if (vars.get("$field.CAMPAIGN_ID")){ - var currentCount = CampaignUtils.getParticipantCountForStep(vars.get("$field.CAMPAIGNSTEP_ID"),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")); diff --git a/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod b/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod index b32ed04cf4..7f9346cc2d 100644 --- a/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod +++ b/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod @@ -103,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 0000000000..6be2052997 --- /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 aefbe65aa0..1d20f9f105 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/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod index 21ed6ae8fe..22bff7f58f 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -435,6 +435,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> -- GitLab From 9c60b68562cd277565cae197068a4e0cafd0d7b1 Mon Sep 17 00:00:00 2001 From: Sebastian Pongratz <s.pongratz@adito.de> Date: Tue, 1 Jun 2021 13:03:53 +0000 Subject: [PATCH 223/242] =?UTF-8?q?[Projekt:=20xRM-ContactManagement][Tick?= =?UTF-8?q?etNr.:=201081419][[Kontakt/Firma]=20Status=20wird=20nach=20?= =?UTF-8?q?=C3=84nderung=20nicht=20als=20Klartext=20angezeigt,=20sondern?= =?UTF-8?q?=20als=20ID]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entity/Organisation_entity/Organisation_entity.aod | 2 +- entity/Person_entity/Person_entity.aod | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/entity/Organisation_entity/Organisation_entity.aod b/entity/Organisation_entity/Organisation_entity.aod index 0e41e000d3..807391c5e7 100644 --- a/entity/Organisation_entity/Organisation_entity.aod +++ b/entity/Organisation_entity/Organisation_entity.aod @@ -352,7 +352,7 @@ <dependency> <name>dependency</name> <entityName>KeywordEntry_entity</entityName> - <fieldName>OrderedBySortingFieldKeywords</fieldName> + <fieldName>SpecificContainerKeywords</fieldName> </dependency> <children> <entityParameter> diff --git a/entity/Person_entity/Person_entity.aod b/entity/Person_entity/Person_entity.aod index 140a64eb35..74e52fd3f8 100644 --- a/entity/Person_entity/Person_entity.aod +++ b/entity/Person_entity/Person_entity.aod @@ -586,7 +586,7 @@ <dependency> <name>dependency</name> <entityName>KeywordEntry_entity</entityName> - <fieldName>OrderedBySortingFieldKeywords</fieldName> + <fieldName>SpecificContainerKeywords</fieldName> </dependency> <children> <entityParameter> -- GitLab From fd5efd4d2a4ca6ff916829c87e56087aef8c9a9f Mon Sep 17 00:00:00 2001 From: "m.groppe" <m.groppe@adito.de> Date: Tue, 1 Jun 2021 15:22:15 +0200 Subject: [PATCH 224/242] =?UTF-8?q?[Projekt:=20xRM-Marketing][TicketNr.:?= =?UTF-8?q?=201080831][Verhalten=20des=20Feld=20"E-Mail"=20bei=20der=20Anl?= =?UTF-8?q?age=20des=20Empf=C3=A4ngers/Test=20Empf=C3=A4nger=20anpassen]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BulkMailRecipient_entity.aod | 3 ++- .../email_address/dropDownProcess.js | 20 +++++++++++++++++++ .../BulkMailTestRecipient_entity.aod | 2 ++ .../email_address/dropDownProcess.js | 20 +++++++++++++++++++ .../BulkMailRecipientFilter_view.aod | 2 +- 5 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 entity/BulkMailRecipient_entity/entityfields/email_address/dropDownProcess.js create mode 100644 entity/BulkMailTestRecipient_entity/entityfields/email_address/dropDownProcess.js diff --git a/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod b/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod index 3257dcb077..fe32c394a7 100644 --- a/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod +++ b/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod @@ -75,7 +75,8 @@ <entityField> <name>EMAIL_ADDRESS</name> <title>Email</title> - <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> 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 0000000000..f44ecd046f --- /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/BulkMailTestRecipient_entity/BulkMailTestRecipient_entity.aod b/entity/BulkMailTestRecipient_entity/BulkMailTestRecipient_entity.aod index cfea263cd5..8204e287fe 100644 --- a/entity/BulkMailTestRecipient_entity/BulkMailTestRecipient_entity.aod +++ b/entity/BulkMailTestRecipient_entity/BulkMailTestRecipient_entity.aod @@ -28,6 +28,8 @@ <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> 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 0000000000..f44ecd046f --- /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/neonView/BulkMailRecipientFilter_view/BulkMailRecipientFilter_view.aod b/neonView/BulkMailRecipientFilter_view/BulkMailRecipientFilter_view.aod index 1638eaab61..1c3f60390d 100644 --- a/neonView/BulkMailRecipientFilter_view/BulkMailRecipientFilter_view.aod +++ b/neonView/BulkMailRecipientFilter_view/BulkMailRecipientFilter_view.aod @@ -11,7 +11,7 @@ <children> <tableViewTemplate> <name>Table</name> - <inlineEdit v="true" /> + <inlineEdit v="false" /> <autoNewRow v="true" /> <entityField>#ENTITY</entityField> <favoriteActionGroup1>recipientActions</favoriteActionGroup1> -- GitLab From 2baa745da164631858da425e399f5d241694383f Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Tue, 1 Jun 2021 14:52:17 +0000 Subject: [PATCH 225/242] M 1080687 contact filter extensions --- .../BulkMailRecipient_entity.aod | 1 + .../CommunicationSettings_entity.aod | 2 + .../entityfields/date_edit/stateProcess.js | 10 +++ .../entityfields/date_new/stateProcess.js | 10 +++ .../Organisation_entity.aod | 54 +++++++++++++++ .../containername_param/valueProcess.js | 4 ++ .../filterConditionProcess.js | 23 +++++++ .../filterConditionProcess.js | 21 ++++++ .../filterConditionProcess.js | 21 ++++++ .../filterFieldsProcess.js | 25 +++++++ entity/Person_entity/Person_entity.aod | 65 +++++++++++++++++++ .../containername_param/valueProcess.js | 4 ++ .../filterConditionProcess.js | 23 +++++++ .../filterConditionProcess.js | 21 ++++++ .../filterConditionProcess.js | 21 ++++++ .../filterFieldsProcess.js | 25 +++++++ .../filterConditionProcess.js | 23 +++++++ .../_____LANGUAGE_EXTRA.aod | 6 +- .../_____LANGUAGE_de/_____LANGUAGE_de.aod | 20 +++++- .../_____LANGUAGE_en/_____LANGUAGE_en.aod | 6 +- neonContext/BulkMail/BulkMail.aod | 5 ++ .../BulkMailLookup_view.aod | 37 +++++++++++ process/MarketingCondition_lib/process.js | 6 ++ 23 files changed, 425 insertions(+), 8 deletions(-) create mode 100644 entity/CommunicationSettings_entity/entityfields/date_edit/stateProcess.js create mode 100644 entity/CommunicationSettings_entity/entityfields/date_new/stateProcess.js create mode 100644 entity/Organisation_entity/entityfields/communicationsettingstatuskeyword/children/containername_param/valueProcess.js create mode 100644 entity/Organisation_entity/recordcontainers/db/filterextensions/bulkmailreceived_filter/filterConditionProcess.js create mode 100644 entity/Organisation_entity/recordcontainers/db/filterextensions/campaignparticipation_filter/filterConditionProcess.js create mode 100644 entity/Organisation_entity/recordcontainers/db/filterextensions/communicationsettings_filter/filterConditionProcess.js create mode 100644 entity/Organisation_entity/recordcontainers/db/filterextensions/communicationsettings_filter/filterFieldsProcess.js create mode 100644 entity/Person_entity/entityfields/communicationsettingstatuskeyword/children/containername_param/valueProcess.js create mode 100644 entity/Person_entity/recordcontainers/db/filterextensions/bulkmailreceived_filter/filterConditionProcess.js create mode 100644 entity/Person_entity/recordcontainers/db/filterextensions/campaignparticipation_filter/filterConditionProcess.js create mode 100644 entity/Person_entity/recordcontainers/db/filterextensions/communicationsettings_filter/filterConditionProcess.js create mode 100644 entity/Person_entity/recordcontainers/db/filterextensions/communicationsettings_filter/filterFieldsProcess.js create mode 100644 entity/Person_entity/recordcontainers/db/filterextensions/interestlink_filter/filterConditionProcess.js create mode 100644 neonView/BulkMailLookup_view/BulkMailLookup_view.aod diff --git a/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod b/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod index d4a7182fc4..7f856b4de3 100644 --- a/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod +++ b/entity/BulkMailRecipient_entity/BulkMailRecipient_entity.aod @@ -109,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> diff --git a/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod b/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod index cfa279a1e8..42abe2d268 100644 --- a/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod +++ b/entity/CommunicationSettings_entity/CommunicationSettings_entity.aod @@ -35,6 +35,7 @@ <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> @@ -42,6 +43,7 @@ <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> 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 0000000000..44f9deec70 --- /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_new/stateProcess.js b/entity/CommunicationSettings_entity/entityfields/date_new/stateProcess.js new file mode 100644 index 0000000000..44f9deec70 --- /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/Organisation_entity/Organisation_entity.aod b/entity/Organisation_entity/Organisation_entity.aod index 807391c5e7..2d89d5020c 100644 --- a/entity/Organisation_entity/Organisation_entity.aod +++ b/entity/Organisation_entity/Organisation_entity.aod @@ -1333,6 +1333,36 @@ </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> </entityFields> <recordContainers> <dbRecordContainer> @@ -1640,6 +1670,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/communicationsettingstatuskeyword/children/containername_param/valueProcess.js b/entity/Organisation_entity/entityfields/communicationsettingstatuskeyword/children/containername_param/valueProcess.js new file mode 100644 index 0000000000..6e90947849 --- /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/recordcontainers/db/filterextensions/bulkmailreceived_filter/filterConditionProcess.js b/entity/Organisation_entity/recordcontainers/db/filterextensions/bulkmailreceived_filter/filterConditionProcess.js new file mode 100644 index 0000000000..d3faf41218 --- /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 0000000000..d3472ac783 --- /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/communicationsettings_filter/filterConditionProcess.js b/entity/Organisation_entity/recordcontainers/db/filterextensions/communicationsettings_filter/filterConditionProcess.js new file mode 100644 index 0000000000..b45b894a14 --- /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 0000000000..31db294836 --- /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/Person_entity/Person_entity.aod b/entity/Person_entity/Person_entity.aod index 74e52fd3f8..2f19b8a67a 100644 --- a/entity/Person_entity/Person_entity.aod +++ b/entity/Person_entity/Person_entity.aod @@ -1290,6 +1290,38 @@ </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> @@ -1689,6 +1721,39 @@ <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>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/communicationsettingstatuskeyword/children/containername_param/valueProcess.js b/entity/Person_entity/entityfields/communicationsettingstatuskeyword/children/containername_param/valueProcess.js new file mode 100644 index 0000000000..63ee095ed6 --- /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/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 0000000000..d3faf41218 --- /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 0000000000..d3472ac783 --- /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 0000000000..b45b894a14 --- /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 0000000000..31db294836 --- /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/interestlink_filter/filterConditionProcess.js b/entity/Person_entity/recordcontainers/db/filterextensions/interestlink_filter/filterConditionProcess.js new file mode 100644 index 0000000000..daf0725b4a --- /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/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index ee70a5fef3..916c36e833 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -8632,9 +8632,6 @@ <entry> <key>show all offers with first approval</key> </entry> - <entry> - <key>No advertising</key> - </entry> <entry> <key>[TEST] Importer</key> </entry> @@ -8743,6 +8740,9 @@ <entry> <key>Exclude existing workflows</key> </entry> + <entry> + <key>Interest (subscribed)</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 22bff7f58f..897fbeb0ca 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -66,10 +66,18 @@ <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> @@ -552,8 +560,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> @@ -1764,6 +1772,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> @@ -2407,6 +2419,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> diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod index 67f5544e63..84471325d6 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -8717,9 +8717,6 @@ <entry> <key>show all offers with first approval</key> </entry> - <entry> - <key>No advertising</key> - </entry> <entry> <key>[TEST] Importer</key> </entry> @@ -8828,6 +8825,9 @@ <entry> <key>Exclude existing workflows</key> </entry> + <entry> + <key>Interest (subscribed)</key> + </entry> </keyValueMap> <font name="Dialog" style="0" size="11" /> </language> diff --git a/neonContext/BulkMail/BulkMail.aod b/neonContext/BulkMail/BulkMail.aod index f87a16ce60..44a1246a9b 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,9 @@ <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> </references> </neonContext> diff --git a/neonView/BulkMailLookup_view/BulkMailLookup_view.aod b/neonView/BulkMailLookup_view/BulkMailLookup_view.aod new file mode 100644 index 0000000000..692f84cd89 --- /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/process/MarketingCondition_lib/process.js b/process/MarketingCondition_lib/process.js index daad96cdd6..bbabd0e7ce 100644 --- a/process/MarketingCondition_lib/process.js +++ b/process/MarketingCondition_lib/process.js @@ -117,6 +117,12 @@ CommunicationSettingsCondition.prototype.pending = function () 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. * -- GitLab From ccf8ab8eb324e80df34d29c0057a80f596fbdb28 Mon Sep 17 00:00:00 2001 From: Martin Groppe <m.groppe@adito.de> Date: Tue, 1 Jun 2021 15:28:43 +0000 Subject: [PATCH 226/242] M 1074934 campaignstep sorting changeable --- .../CampaignStep_entity.aod | 19 +++++++ .../children/movedown/onActionProcess.js | 9 ++++ .../group/children/movedown/stateProcess.js | 27 ++++++++++ .../group/children/moveup/onActionProcess.js | 8 +++ .../group/children/moveup/stateProcess.js | 25 ++++++++++ .../recordcontainers/db/onDBDelete.js | 18 +++++++ .../CampaignStepFilter_view.aod | 2 + process/Campaign_lib/process.js | 50 +++++++++++++++++++ 8 files changed, 158 insertions(+) create mode 100644 entity/CampaignStep_entity/entityfields/group/children/movedown/onActionProcess.js create mode 100644 entity/CampaignStep_entity/entityfields/group/children/movedown/stateProcess.js create mode 100644 entity/CampaignStep_entity/entityfields/group/children/moveup/onActionProcess.js create mode 100644 entity/CampaignStep_entity/entityfields/group/children/moveup/stateProcess.js diff --git a/entity/CampaignStep_entity/CampaignStep_entity.aod b/entity/CampaignStep_entity/CampaignStep_entity.aod index c090c20d4c..98f8c9ab6b 100644 --- a/entity/CampaignStep_entity/CampaignStep_entity.aod +++ b/entity/CampaignStep_entity/CampaignStep_entity.aod @@ -379,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 0000000000..d55de329e8 --- /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 0000000000..984483b8fc --- /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 0000000000..f6c210312a --- /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 0000000000..f24f17d1e3 --- /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/recordcontainers/db/onDBDelete.js b/entity/CampaignStep_entity/recordcontainers/db/onDBDelete.js index 6ff91a5eb3..c851ee9b66 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/neonView/CampaignStepFilter_view/CampaignStepFilter_view.aod b/neonView/CampaignStepFilter_view/CampaignStepFilter_view.aod index 84f150264f..6f7b3669c8 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/process/Campaign_lib/process.js b/process/Campaign_lib/process.js index f488f0ee65..808c85d412 100644 --- a/process/Campaign_lib/process.js +++ b/process/Campaign_lib/process.js @@ -814,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 -- GitLab From 98f1950e81df2860932df279fa2127053a21371d Mon Sep 17 00:00:00 2001 From: Alexander Riedl <a.riedl@adito.de> Date: Wed, 2 Jun 2021 09:07:07 +0000 Subject: [PATCH 227/242] =?UTF-8?q?[Projekt:=20xRM-ContactManagement][Tick?= =?UTF-8?q?etNr.:=201074059][Email=5Flib:=20Parameter=20Anzahl=20/=20Reihe?= =?UTF-8?q?nfolge=20f=C3=BCr=20EmailWritingUtils.openNewMail()=20und=20Ema?= =?UTF-8?q?ilWritingUtils.sendReportAsMail()=20falsch.]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Data_alias/basic/2021.0.3/changelog.xml | 1 + .../Advertising/AdvertisingKeywords.xml | 80 ++++ .../2021.1.0/Advertising/AlterProduct.xml | 8 + .../basic/2021.1.0/Advertising/changelog.xml | 10 + .../Advertising/create_Advertising.xml | 33 ++ .../Advertising/create_AdvertisingItem.xml | 38 ++ .../Data_alias/basic/2021.1.0/changelog.xml | 1 + aliasDefinition/Data_alias/Data_alias.aod | 432 ++++++++++++++++++ .../_____SYSTEM_APPLICATION_NEON.aod | 8 + .../children/objecttype_param/valueProcess.js | 3 +- .../children/objecttype_param/valueProcess.js | 3 + entity/Activity_entity/Activity_entity.aod | 53 +++ .../children/contactids_param/valueProcess.js | 22 + .../children/rowid_param/valueProcess.js | 4 + .../stateProcess.js | 6 + .../advertisingid_param/valueProcess.js | 12 + .../children/rowid_param/valueProcess.js | 4 + .../advertisingitems/stateProcess.js | 28 ++ .../children/rowid_param/valueProcess.js | 4 + .../hasadvertising/stateProcess.js | 16 + .../hasadvertising/valueProcess.js | 22 + .../recordcontainers/db/conditionProcess.js | 6 +- .../recordcontainers/db/onDBInsert.js | 25 +- .../AdvertisingItem_entity.aod | 314 +++++++++++++ .../AdvertisingItem_entity/documentation.adoc | 6 + .../actualamount/displayValueProcess.js | 10 + .../entityfields/actualamount/titleProcess.js | 6 + .../entityfields/actualamount/valueProcess.js | 12 + .../advertising_id/valueProcess.js | 11 + .../contactid/displayValueProcess.js | 6 + .../entityfields/contactid/valueProcess.js | 7 + .../currency_param/valueProcess.js | 15 + .../entityfields/date_edit/valueProcess.js | 9 + .../entityfields/date_new/valueProcess.js | 8 + .../delivery/displayValueProcess.js | 6 + .../entityfields/free/onValueChange.js | 19 + .../entityfields/free/valueProcess.js | 8 + .../entityfields/itemposition/valueProcess.js | 11 + .../containername_param/valueProcess.js | 4 + .../containername_param/valueProcess.js | 4 + .../containername_param/valueProcess.js | 5 + .../entityfields/price/displayValueProcess.js | 10 + .../entityfields/price/stateProcess.js | 6 + .../entityfields/price/titleProcess.js | 6 + .../entityfields/price/valueProcess.js | 18 + .../product_id/displayValueProcess.js | 8 + .../entityfields/product_id/onValueChange.js | 22 + .../entityfields/product_id/stateProcess.js | 5 + .../productobject_param/valueProcess.js | 11 + .../advertisingproducts_param/valueProcess.js | 2 + .../entityfields/quantity/onValidation.js | 10 + .../entityfields/quantity/stateProcess.js | 12 + .../entityfields/quantity/valueProcess.js | 8 + .../entityfields/sent/valueProcess.js | 15 + .../targetamount/displayValueProcess.js | 11 + .../entityfields/targetamount/titleProcess.js | 6 + .../entityfields/targetamount/valueProcess.js | 16 + .../entityfields/unit/displayValueProcess.js | 14 + .../recordcontainers/db/conditionProcess.js | 26 ++ .../recordcontainers/db/orderClauseProcess.js | 4 + .../Advertising_entity/Advertising_entity.aod | 261 +++++++++++ .../contentDescriptionProcess.js | 8 + .../Advertising_entity/contentTitleProcess.js | 14 + entity/Advertising_entity/documentation.adoc | 81 ++++ .../advertisingid_param/valueProcess.js | 4 + .../advertisingitemsconsumer/stateProcess.js | 6 + .../contact_id/displayValueProcess.js | 5 + .../contactids_param/valueProcess.js | 27 ++ .../entityfields/countitems/valueProcess.js | 9 + .../currency/displayValueProcess.js | 6 + .../entityfields/currency/stateProcess.js | 19 + .../entityfields/currency/valueProcess.js | 11 + .../entityfields/date_edit/valueProcess.js | 8 + .../entityfields/date_new/valueProcess.js | 8 + .../containername_param/valueProcess.js | 4 + .../containername_param/valueProcess.js | 5 + .../entityfields/newmail/onActionProcess.js | 63 +++ .../entityfields/newmail/stateProcess.js | 34 ++ .../children/objecttype_param/valueProcess.js | 4 + .../entityfields/objects/documentation.adoc | 3 + .../onlyshowcontactids_param/valueProcess.js | 9 + .../responsible_id/displayValueProcess.js | 5 + .../row_id/displayValueProcess.js | 11 + .../row_id/linkedContextProcess.js | 5 + .../startworkflow/onActionProcess.js | 72 +++ .../startworkflow/stateProcess.js | 35 ++ .../startworkflow/tooltipProcess.js | 10 + .../status/displayValueProcess.js | 6 + .../entityfields/status/stateProcess.js | 0 .../entityfields/status/valueProcess.js | 9 + .../recordcontainers/db/conditionProcess.js | 12 + .../active.value/expression.js | 6 + entity/Context_entity/Context_entity.aod | 20 + .../children/blacklist_param/valueProcess.js | 3 + .../invertblacklist_param/valueProcess.js | 3 + .../invertblacklist_param/documentation.adoc | 0 .../children/blacklist_param/valueProcess.js | 2 +- .../DocumentTemplate_entity.aod | 1 + .../documentation.adoc | 0 .../recordcontainers/jdito/onInsert.js | 4 +- .../entityfields/quantity/onValueChange.js | 2 +- entity/Person_entity/Person_entity.aod | 7 + .../filterConditionProcess.js | 4 + entity/Product_entity/Product_entity.aod | 40 ++ .../entityfields/digital/stateProcess.js | 5 + .../assignmentrowid_param/valueProcess.js | 4 + .../assignmenttable_param/valueProcess.js | 3 + .../children/keyword_param/valueProcess.js | 3 + .../stateProcess.js | 12 + .../entityfields/documents/stateProcess.js | 13 + .../recordcontainers/db/conditionProcess.js | 4 + .../QuickEntry_entity/QuickEntry_entity.aod | 5 + .../children/blacklist_param/valueProcess.js | 4 +- .../_____LANGUAGE_EXTRA.aod | 66 +++ .../_____LANGUAGE_de/_____LANGUAGE_de.aod | 86 +++- .../_____LANGUAGE_en/_____LANGUAGE_en.aod | 66 +++ neonContext/Activity/Activity.aod | 10 + neonContext/Advertising/Advertising.aod | 36 ++ .../AdvertisingItem/AdvertisingItem.aod | 34 ++ neonContext/Product/Product.aod | 3 + .../ActivityAdvertising_view.aod | 23 + .../ActivityEdit_view/ActivityEdit_view.aod | 4 + .../ActivityMain_view/ActivityMain_view.aod | 5 + .../AdvertisingDetail_view.aod | 40 ++ .../AdvertisingEdit_view.aod | 42 ++ .../AdvertisingFilter_view.aod | 38 ++ .../AdvertisingItemEdit_view.aod | 55 +++ .../AdvertisingItemFilter_view.aod | 61 +++ .../AdvertisingItemPreview_view.aod | 57 +++ .../AdvertisingItemSmallFilter_view.aod | 30 ++ .../AdvertisingMain_view.aod | 23 + .../AdvertisingPreview_view.aod | 41 ++ .../AdvertisingTestEdit_view.aod | 28 ++ .../PrivatePersonPreview_view.aod | 2 +- .../ProductEdit_view/ProductEdit_view.aod | 4 + .../ProductMain_view/ProductMain_view.aod | 5 + .../ProductPreview_view.aod | 8 + .../Workflows/AdvertisingShipment.bpmn20.xml | 208 +++++++++ process/Advertising_lib/Advertising_lib.aod | 14 + process/Advertising_lib/process.js | 225 +++++++++ process/AttributeRegistry_basic/process.js | 2 + process/KeywordRegistry_basic/process.js | 12 +- .../UpdateAdvertisingItem_workflowService.aod | 13 + .../documentation.adoc | 5 + .../process.js | 11 + .../serviceTaskParameterProcess.js | 13 + .../UpdateAdvertising_workflowService.aod | 12 + .../documentation.adoc | 2 + .../process.js | 26 ++ process/Workflow_lib/process.js | 3 +- process/_test_clientProcess/process.js | 2 +- 151 files changed, 3684 insertions(+), 20 deletions(-) create mode 100644 .liquibase/Data_alias/basic/2021.1.0/Advertising/AdvertisingKeywords.xml create mode 100644 .liquibase/Data_alias/basic/2021.1.0/Advertising/AlterProduct.xml create mode 100644 .liquibase/Data_alias/basic/2021.1.0/Advertising/changelog.xml create mode 100644 .liquibase/Data_alias/basic/2021.1.0/Advertising/create_Advertising.xml create mode 100644 .liquibase/Data_alias/basic/2021.1.0/Advertising/create_AdvertisingItem.xml create mode 100644 entity/Activity_entity/entityfields/advertisinginformationconsumer/children/contactids_param/valueProcess.js create mode 100644 entity/Activity_entity/entityfields/advertisinginformationconsumer/children/rowid_param/valueProcess.js create mode 100644 entity/Activity_entity/entityfields/advertisinginformationconsumer/stateProcess.js create mode 100644 entity/Activity_entity/entityfields/advertisingitems/children/advertisingid_param/valueProcess.js create mode 100644 entity/Activity_entity/entityfields/advertisingitems/children/rowid_param/valueProcess.js create mode 100644 entity/Activity_entity/entityfields/advertisingitems/stateProcess.js create mode 100644 entity/Activity_entity/entityfields/advertisingitemstest/children/rowid_param/valueProcess.js create mode 100644 entity/Activity_entity/entityfields/hasadvertising/stateProcess.js create mode 100644 entity/Activity_entity/entityfields/hasadvertising/valueProcess.js create mode 100644 entity/AdvertisingItem_entity/AdvertisingItem_entity.aod create mode 100644 entity/AdvertisingItem_entity/documentation.adoc create mode 100644 entity/AdvertisingItem_entity/entityfields/actualamount/displayValueProcess.js create mode 100644 entity/AdvertisingItem_entity/entityfields/actualamount/titleProcess.js create mode 100644 entity/AdvertisingItem_entity/entityfields/actualamount/valueProcess.js create mode 100644 entity/AdvertisingItem_entity/entityfields/advertising_id/valueProcess.js create mode 100644 entity/AdvertisingItem_entity/entityfields/contactid/displayValueProcess.js create mode 100644 entity/AdvertisingItem_entity/entityfields/contactid/valueProcess.js create mode 100644 entity/AdvertisingItem_entity/entityfields/currency_param/valueProcess.js create mode 100644 entity/AdvertisingItem_entity/entityfields/date_edit/valueProcess.js create mode 100644 entity/AdvertisingItem_entity/entityfields/date_new/valueProcess.js create mode 100644 entity/AdvertisingItem_entity/entityfields/delivery/displayValueProcess.js create mode 100644 entity/AdvertisingItem_entity/entityfields/free/onValueChange.js create mode 100644 entity/AdvertisingItem_entity/entityfields/free/valueProcess.js create mode 100644 entity/AdvertisingItem_entity/entityfields/itemposition/valueProcess.js create mode 100644 entity/AdvertisingItem_entity/entityfields/keywordcurrencies/children/containername_param/valueProcess.js create mode 100644 entity/AdvertisingItem_entity/entityfields/keyworddelivery/children/containername_param/valueProcess.js create mode 100644 entity/AdvertisingItem_entity/entityfields/keywordunit/children/containername_param/valueProcess.js create mode 100644 entity/AdvertisingItem_entity/entityfields/price/displayValueProcess.js create mode 100644 entity/AdvertisingItem_entity/entityfields/price/stateProcess.js create mode 100644 entity/AdvertisingItem_entity/entityfields/price/titleProcess.js create mode 100644 entity/AdvertisingItem_entity/entityfields/price/valueProcess.js create mode 100644 entity/AdvertisingItem_entity/entityfields/product_id/displayValueProcess.js create mode 100644 entity/AdvertisingItem_entity/entityfields/product_id/onValueChange.js create mode 100644 entity/AdvertisingItem_entity/entityfields/product_id/stateProcess.js create mode 100644 entity/AdvertisingItem_entity/entityfields/productobject_param/valueProcess.js create mode 100644 entity/AdvertisingItem_entity/entityfields/products/children/advertisingproducts_param/valueProcess.js create mode 100644 entity/AdvertisingItem_entity/entityfields/quantity/onValidation.js create mode 100644 entity/AdvertisingItem_entity/entityfields/quantity/stateProcess.js create mode 100644 entity/AdvertisingItem_entity/entityfields/quantity/valueProcess.js create mode 100644 entity/AdvertisingItem_entity/entityfields/sent/valueProcess.js create mode 100644 entity/AdvertisingItem_entity/entityfields/targetamount/displayValueProcess.js create mode 100644 entity/AdvertisingItem_entity/entityfields/targetamount/titleProcess.js create mode 100644 entity/AdvertisingItem_entity/entityfields/targetamount/valueProcess.js create mode 100644 entity/AdvertisingItem_entity/entityfields/unit/displayValueProcess.js create mode 100644 entity/AdvertisingItem_entity/recordcontainers/db/conditionProcess.js create mode 100644 entity/AdvertisingItem_entity/recordcontainers/db/orderClauseProcess.js create mode 100644 entity/Advertising_entity/Advertising_entity.aod create mode 100644 entity/Advertising_entity/contentDescriptionProcess.js create mode 100644 entity/Advertising_entity/contentTitleProcess.js create mode 100644 entity/Advertising_entity/documentation.adoc create mode 100644 entity/Advertising_entity/entityfields/advertisingitemsconsumer/children/advertisingid_param/valueProcess.js create mode 100644 entity/Advertising_entity/entityfields/advertisingitemsconsumer/stateProcess.js create mode 100644 entity/Advertising_entity/entityfields/contact_id/displayValueProcess.js create mode 100644 entity/Advertising_entity/entityfields/contactids_param/valueProcess.js create mode 100644 entity/Advertising_entity/entityfields/countitems/valueProcess.js create mode 100644 entity/Advertising_entity/entityfields/currency/displayValueProcess.js create mode 100644 entity/Advertising_entity/entityfields/currency/stateProcess.js create mode 100644 entity/Advertising_entity/entityfields/currency/valueProcess.js create mode 100644 entity/Advertising_entity/entityfields/date_edit/valueProcess.js create mode 100644 entity/Advertising_entity/entityfields/date_new/valueProcess.js create mode 100644 entity/Advertising_entity/entityfields/keywordadvertisingstatus/children/containername_param/valueProcess.js create mode 100644 entity/Advertising_entity/entityfields/keywordcurrencies/children/containername_param/valueProcess.js create mode 100644 entity/Advertising_entity/entityfields/newmail/onActionProcess.js create mode 100644 entity/Advertising_entity/entityfields/newmail/stateProcess.js create mode 100644 entity/Advertising_entity/entityfields/objects/children/objecttype_param/valueProcess.js create mode 100644 entity/Advertising_entity/entityfields/objects/documentation.adoc create mode 100644 entity/Advertising_entity/entityfields/personconsumer/children/onlyshowcontactids_param/valueProcess.js create mode 100644 entity/Advertising_entity/entityfields/responsible_id/displayValueProcess.js create mode 100644 entity/Advertising_entity/entityfields/row_id/displayValueProcess.js create mode 100644 entity/Advertising_entity/entityfields/row_id/linkedContextProcess.js create mode 100644 entity/Advertising_entity/entityfields/startworkflow/onActionProcess.js create mode 100644 entity/Advertising_entity/entityfields/startworkflow/stateProcess.js create mode 100644 entity/Advertising_entity/entityfields/startworkflow/tooltipProcess.js create mode 100644 entity/Advertising_entity/entityfields/status/displayValueProcess.js create mode 100644 entity/Advertising_entity/entityfields/status/stateProcess.js create mode 100644 entity/Advertising_entity/entityfields/status/valueProcess.js create mode 100644 entity/Advertising_entity/recordcontainers/db/conditionProcess.js create mode 100644 entity/Advertising_entity/recordcontainers/db/recordfieldmappings/active.value/expression.js create mode 100644 entity/Context_entity/entityfields/advertisinglinkable/children/blacklist_param/valueProcess.js create mode 100644 entity/Context_entity/entityfields/advertisinglinkable/children/invertblacklist_param/valueProcess.js create mode 100644 entity/Context_entity/entityfields/contexttemplateplaceofuse/children/invertblacklist_param/documentation.adoc create mode 100644 entity/DocumentTemplate_entity/entityfields/documenttemplateplaceofuse/children/documenttemplateplaceofuse_param/documentation.adoc create mode 100644 entity/Person_entity/recordcontainers/db/filterextensions/advertising_filter/filterConditionProcess.js create mode 100644 entity/Product_entity/entityfields/digital/stateProcess.js create mode 100644 entity/Product_entity/entityfields/digitaladvertisingdocuments/children/assignmentrowid_param/valueProcess.js create mode 100644 entity/Product_entity/entityfields/digitaladvertisingdocuments/children/assignmenttable_param/valueProcess.js create mode 100644 entity/Product_entity/entityfields/digitaladvertisingdocuments/children/keyword_param/valueProcess.js create mode 100644 entity/Product_entity/entityfields/digitaladvertisingdocuments/stateProcess.js create mode 100644 entity/Product_entity/entityfields/documents/stateProcess.js create mode 100644 neonContext/Advertising/Advertising.aod create mode 100644 neonContext/AdvertisingItem/AdvertisingItem.aod create mode 100644 neonView/ActivityAdvertising_view/ActivityAdvertising_view.aod create mode 100644 neonView/AdvertisingDetail_view/AdvertisingDetail_view.aod create mode 100644 neonView/AdvertisingEdit_view/AdvertisingEdit_view.aod create mode 100644 neonView/AdvertisingFilter_view/AdvertisingFilter_view.aod create mode 100644 neonView/AdvertisingItemEdit_view/AdvertisingItemEdit_view.aod create mode 100644 neonView/AdvertisingItemFilter_view/AdvertisingItemFilter_view.aod create mode 100644 neonView/AdvertisingItemPreview_view/AdvertisingItemPreview_view.aod create mode 100644 neonView/AdvertisingItemSmallFilter_view/AdvertisingItemSmallFilter_view.aod create mode 100644 neonView/AdvertisingMain_view/AdvertisingMain_view.aod create mode 100644 neonView/AdvertisingPreview_view/AdvertisingPreview_view.aod create mode 100644 neonView/AdvertisingTestEdit_view/AdvertisingTestEdit_view.aod create mode 100644 others/Workflows/AdvertisingShipment.bpmn20.xml create mode 100644 process/Advertising_lib/Advertising_lib.aod create mode 100644 process/Advertising_lib/process.js create mode 100644 process/UpdateAdvertisingItem_workflowService/UpdateAdvertisingItem_workflowService.aod create mode 100644 process/UpdateAdvertisingItem_workflowService/documentation.adoc create mode 100644 process/UpdateAdvertisingItem_workflowService/process.js create mode 100644 process/UpdateAdvertisingItem_workflowService/serviceTaskParameterProcess.js create mode 100644 process/UpdateAdvertising_workflowService/UpdateAdvertising_workflowService.aod create mode 100644 process/UpdateAdvertising_workflowService/documentation.adoc create mode 100644 process/UpdateAdvertising_workflowService/process.js diff --git a/.liquibase/Data_alias/basic/2021.0.3/changelog.xml b/.liquibase/Data_alias/basic/2021.0.3/changelog.xml index 1c8d89015e..7e9eb94a5e 100644 --- a/.liquibase/Data_alias/basic/2021.0.3/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.0.3/changelog.xml @@ -12,6 +12,7 @@ <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.1.0/Advertising/AdvertisingKeywords.xml b/.liquibase/Data_alias/basic/2021.1.0/Advertising/AdvertisingKeywords.xml new file mode 100644 index 0000000000..a5246cf99e --- /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 0000000000..8a5c306cf1 --- /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 0000000000..b1dad50367 --- /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 0000000000..b7fad82476 --- /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 0000000000..1731aa081a --- /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/changelog.xml b/.liquibase/Data_alias/basic/2021.1.0/changelog.xml index 3eed7dff70..b99b6df912 100644 --- a/.liquibase/Data_alias/basic/2021.1.0/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.1.0/changelog.xml @@ -6,4 +6,5 @@ <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"/> </databaseChangeLog> \ No newline at end of file diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod index 8f2fa3ed82..5564fd5eb5 100644 --- a/aliasDefinition/Data_alias/Data_alias.aod +++ b/aliasDefinition/Data_alias/Data_alias.aod @@ -1858,6 +1858,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> @@ -20340,6 +20354,424 @@ </entityFieldDb> </entityFields> </entityDb> + <entityDb> + <name>ADVERTISING</name> + <dbName></dbName> + <idColumn>ADVERTISINGID</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>ADVERTISINGID</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>RESPONSIBLE_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>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>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>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="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>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>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="false" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + </entityFields> + </entityDb> + <entityDb> + <name>ADVERTISINGITEM</name> + <dbName></dbName> + <idColumn>ADVERTISINGITEMID</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>ADVERTISINGITEMID</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>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> + <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>QUANTITY</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>INFO</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>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> + <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>DELIVERY</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>TARGETAMOUNT</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>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>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>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>ACTUALAMOUNT</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>SENT</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> + <name>ADVERTISING_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> + </entityFields> + </entityDb> </entities> </entityGroup> </aliasDefDb> diff --git a/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod b/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod index 37c97817e0..5bab995ba7 100644 --- a/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod +++ b/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod @@ -100,6 +100,10 @@ <name>SalesprojectConversionRate</name> <kind v="10077" /> </entityNode> + <entityNode> + <name>Advertising</name> + <kind v="10077" /> + </entityNode> </childNodes> </entityNode> <entityNode> @@ -168,6 +172,10 @@ </entityNode> </childNodes> </entityNode> + <entityNode> + <name>Group14</name> + <kind v="123" /> + </entityNode> <entityNode> <name>Group4</name> <kind v="123" /> 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 9b0fe874ba..af517cc087 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 f5ae6a13a1..0a08d4ff56 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/Activity_entity/Activity_entity.aod b/entity/Activity_entity/Activity_entity.aod index d14e21a69c..d36eaed13b 100644 --- a/entity/Activity_entity/Activity_entity.aod +++ b/entity/Activity_entity/Activity_entity.aod @@ -636,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 0000000000..6d56212636 --- /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 0000000000..a8267b6206 --- /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 0000000000..b7978b1081 --- /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 0000000000..32c458221b --- /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 0000000000..b5ea578ca5 --- /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 0000000000..bf20bd9d44 --- /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/advertisingitemstest/children/rowid_param/valueProcess.js b/entity/Activity_entity/entityfields/advertisingitemstest/children/rowid_param/valueProcess.js new file mode 100644 index 0000000000..b5ea578ca5 --- /dev/null +++ b/entity/Activity_entity/entityfields/advertisingitemstest/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/hasadvertising/stateProcess.js b/entity/Activity_entity/entityfields/hasadvertising/stateProcess.js new file mode 100644 index 0000000000..833c6571b2 --- /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 0000000000..da81698953 --- /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/recordcontainers/db/conditionProcess.js b/entity/Activity_entity/recordcontainers/db/conditionProcess.js index c89f50125d..2bc6039536 100644 --- a/entity/Activity_entity/recordcontainers/db/conditionProcess.js +++ b/entity/Activity_entity/recordcontainers/db/conditionProcess.js @@ -9,9 +9,9 @@ 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"); diff --git a/entity/Activity_entity/recordcontainers/db/onDBInsert.js b/entity/Activity_entity/recordcontainers/db/onDBInsert.js index 03ba2693c5..fa37b0c09b 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/AdvertisingItem_entity/AdvertisingItem_entity.aod b/entity/AdvertisingItem_entity/AdvertisingItem_entity.aod new file mode 100644 index 0000000000..13150f4edf --- /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 0000000000..22737bac22 --- /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 0000000000..911ec54d13 --- /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 0000000000..372b52c156 --- /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 0000000000..29c61d3d4a --- /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 0000000000..a737dda85a --- /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 0000000000..f52abea363 --- /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 0000000000..d4e4b5ba78 --- /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 0000000000..a49cb0e8cf --- /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/AdvertisingItem_entity/entityfields/date_edit/valueProcess.js b/entity/AdvertisingItem_entity/entityfields/date_edit/valueProcess.js new file mode 100644 index 0000000000..22da50b9b0 --- /dev/null +++ b/entity/AdvertisingItem_entity/entityfields/date_edit/valueProcess.js @@ -0,0 +1,9 @@ +import("system.util"); +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/AdvertisingItem_entity/entityfields/date_new/valueProcess.js b/entity/AdvertisingItem_entity/entityfields/date_new/valueProcess.js new file mode 100644 index 0000000000..d5cf2ff4f9 --- /dev/null +++ b/entity/AdvertisingItem_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")); +} \ 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 0000000000..2680d53aa4 --- /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 0000000000..13bf387f06 --- /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 0000000000..a97324da4c --- /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 0000000000..1b61799da8 --- /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 0000000000..b50dc76b77 --- /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 0000000000..a8ca4e3ed8 --- /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 0000000000..116859e4d9 --- /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 0000000000..7b2a8585a1 --- /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 0000000000..ff4c0f2c4b --- /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 0000000000..4e3e533742 --- /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 0000000000..abfeadee88 --- /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 0000000000..b4a2de7925 --- /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 0000000000..6371c57e68 --- /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 0000000000..680d7fd185 --- /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 0000000000..d4fb29c921 --- /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 0000000000..d3ed7d447b --- /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 0000000000..f04bfad82b --- /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 0000000000..dea061a433 --- /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 0000000000..1ac9248b80 --- /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 0000000000..15dc711a7f --- /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 0000000000..1809306740 --- /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 0000000000..569277fab2 --- /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 0000000000..854a028990 --- /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 0000000000..0838f4ba2d --- /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 0000000000..91c684838b --- /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 0000000000..05b609515c --- /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 0000000000..83abb94236 --- /dev/null +++ b/entity/Advertising_entity/Advertising_entity.aod @@ -0,0 +1,261 @@ +<?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> + <stateProcess>%aditoprj%/entity/Advertising_entity/entityfields/status/stateProcess.js</stateProcess> + <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 0000000000..0bd9edf00a --- /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 0000000000..156e8754f5 --- /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 0000000000..a6942a22dd --- /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 0000000000..c2cbdbc18a --- /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 0000000000..bdb999edd3 --- /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 0000000000..091a8570bc --- /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 0000000000..9d60d17847 --- /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 0000000000..21765b080a --- /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 0000000000..71f6fd2391 --- /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 0000000000..0ea94f675e --- /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 0000000000..4ec1aa77fc --- /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 0000000000..2af46a8e46 --- /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 0000000000..f8a1c81be5 --- /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 0000000000..a61b5749d3 --- /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 0000000000..05d20a465b --- /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 0000000000..bcb608527e --- /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 0000000000..7d2b37e13b --- /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 0000000000..03654e9e87 --- /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 0000000000..1c6e8999af --- /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 0000000000..d6e48343fa --- /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 0000000000..3c0d4375ef --- /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 0000000000..ffa37a0035 --- /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 0000000000..bea1100ffa --- /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 0000000000..93f58deeb6 --- /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 0000000000..c7ac0e6283 --- /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 0000000000..08ff773a22 --- /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 0000000000..d7fb6631a0 --- /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/stateProcess.js b/entity/Advertising_entity/entityfields/status/stateProcess.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/entity/Advertising_entity/entityfields/status/valueProcess.js b/entity/Advertising_entity/entityfields/status/valueProcess.js new file mode 100644 index 0000000000..ca5b3e2522 --- /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 0000000000..61616bf1cb --- /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 0000000000..fa16702189 --- /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/Context_entity/Context_entity.aod b/entity/Context_entity/Context_entity.aod index 6d18b16f96..0b5ffde90b 100644 --- a/entity/Context_entity/Context_entity.aod +++ b/entity/Context_entity/Context_entity.aod @@ -74,6 +74,7 @@ <name>InvertBlacklist_param</name> <valueProcess>%aditoprj%/entity/Context_entity/entityfields/contexttemplateplaceofuse/children/invertblacklist_param/valueProcess.js</valueProcess> <expose v="true" /> + <documentation>%aditoprj%/entity/Context_entity/entityfields/contexttemplateplaceofuse/children/invertblacklist_param/documentation.adoc</documentation> </entityParameter> <entityParameter> <name>Blacklist_param</name> @@ -85,6 +86,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 0000000000..8017ce496e --- /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 0000000000..e5bfa3bbe7 --- /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/Context_entity/entityfields/contexttemplateplaceofuse/children/invertblacklist_param/documentation.adoc b/entity/Context_entity/entityfields/contexttemplateplaceofuse/children/invertblacklist_param/documentation.adoc new file mode 100644 index 0000000000..e69de29bb2 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 9d5b64bb87..dbc5c8b100 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/DocumentTemplate_entity/DocumentTemplate_entity.aod b/entity/DocumentTemplate_entity/DocumentTemplate_entity.aod index 59d3e3d3a7..e414b7ad8f 100644 --- a/entity/DocumentTemplate_entity/DocumentTemplate_entity.aod +++ b/entity/DocumentTemplate_entity/DocumentTemplate_entity.aod @@ -259,6 +259,7 @@ <name>DocumentTemplatePlaceOfUse_param</name> <valueProcess>%aditoprj%/entity/DocumentTemplate_entity/entityfields/documenttemplateplaceofuse/children/documenttemplateplaceofuse_param/valueProcess.js</valueProcess> <expose v="true" /> + <documentation>%aditoprj%/entity/DocumentTemplate_entity/entityfields/documenttemplateplaceofuse/children/documenttemplateplaceofuse_param/documentation.adoc</documentation> </entityParameter> </children> </entityConsumer> diff --git a/entity/DocumentTemplate_entity/entityfields/documenttemplateplaceofuse/children/documenttemplateplaceofuse_param/documentation.adoc b/entity/DocumentTemplate_entity/entityfields/documenttemplateplaceofuse/children/documenttemplateplaceofuse_param/documentation.adoc new file mode 100644 index 0000000000..e69de29bb2 diff --git a/entity/Document_entity/recordcontainers/jdito/onInsert.js b/entity/Document_entity/recordcontainers/jdito/onInsert.js index 3f40dd1a20..db26ea759a 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/Offeritem_entity/entityfields/quantity/onValueChange.js b/entity/Offeritem_entity/entityfields/quantity/onValueChange.js index d7b8bf70c3..4a182c851b 100644 --- a/entity/Offeritem_entity/entityfields/quantity/onValueChange.js +++ b/entity/Offeritem_entity/entityfields/quantity/onValueChange.js @@ -31,4 +31,4 @@ if(pId != "" && vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) neon.setFieldValue("$field.PRICE", partsListObject["topProductInfo"]["price"]); neon.setFieldValue("$field.VAT", partsListObject["topProductInfo"]["vat"]); } -} \ No newline at end of file +} diff --git a/entity/Person_entity/Person_entity.aod b/entity/Person_entity/Person_entity.aod index 2f19b8a67a..3ede6c487c 100644 --- a/entity/Person_entity/Person_entity.aod +++ b/entity/Person_entity/Person_entity.aod @@ -1721,6 +1721,13 @@ <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> 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 0000000000..ae1a432eac --- /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/Product_entity/Product_entity.aod b/entity/Product_entity/Product_entity.aod index 5c2b560db2..4b80873056 100644 --- a/entity/Product_entity/Product_entity.aod +++ b/entity/Product_entity/Product_entity.aod @@ -206,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> @@ -508,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> @@ -614,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/digital/stateProcess.js b/entity/Product_entity/entityfields/digital/stateProcess.js new file mode 100644 index 0000000000..a3c48311cd --- /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/Product_entity/entityfields/digitaladvertisingdocuments/children/assignmentrowid_param/valueProcess.js b/entity/Product_entity/entityfields/digitaladvertisingdocuments/children/assignmentrowid_param/valueProcess.js new file mode 100644 index 0000000000..eaa8f9632d --- /dev/null +++ b/entity/Product_entity/entityfields/digitaladvertisingdocuments/children/assignmentrowid_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.result"); +import("system.vars"); + +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 0000000000..3d8d233b6f --- /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 0000000000..bf12b6cd68 --- /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 0000000000..5972c08198 --- /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 0000000000..d885b05207 --- /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/recordcontainers/db/conditionProcess.js b/entity/Product_entity/recordcontainers/db/conditionProcess.js index 33a3aee401..8a3a4bf928 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/QuickEntry_entity/QuickEntry_entity.aod b/entity/QuickEntry_entity/QuickEntry_entity.aod index 1811b49d9d..6a5199461c 100644 --- a/entity/QuickEntry_entity/QuickEntry_entity.aod +++ b/entity/QuickEntry_entity/QuickEntry_entity.aod @@ -226,6 +226,11 @@ <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> 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 b8dcc60644..3e844ef887 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/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index 916c36e833..5e1e844759 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -8740,6 +8740,72 @@ <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> diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod index 897fbeb0ca..8e985c20c8 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -82,6 +82,10 @@ <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 @@ -139,10 +143,17 @@ <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> @@ -303,6 +314,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> @@ -395,6 +410,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> @@ -755,6 +774,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> @@ -1035,6 +1058,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> @@ -1059,6 +1086,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> @@ -1079,6 +1110,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> @@ -1323,6 +1358,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> @@ -1729,8 +1768,8 @@ <value>Service</value> </entry> <entry> - <key>Advertising material</key> - <value>Werbemittel</value> + <key>Advertising</key> + <value>Werbung</value> </entry> <entry> <key>Healthcare</key> @@ -2391,10 +2430,6 @@ <entry> <key>#,##0.00</key> </entry> - <entry> - <key>Advertising</key> - <value>Werbung</value> - </entry> <entry> <key>Latin Name</key> <value>Lateinischer Name</value> @@ -4125,6 +4160,10 @@ <key>Qatar</key> <value>Katar</value> </entry> + <entry> + <key>delivery</key> + <value>Übergabe</value> + </entry> <entry> <key>Slovakia</key> <value>Slowakei</value> @@ -6378,6 +6417,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> @@ -7724,6 +7767,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> @@ -9044,6 +9091,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> @@ -9962,6 +10013,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> @@ -11493,6 +11548,25 @@ Bitte Datumseingabe prüfen</value> <key>Exclude existing workflows</key> <value>Nur nicht vorhandene Workflows</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> </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 84471325d6..f58c5df072 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -8825,6 +8825,72 @@ <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> diff --git a/neonContext/Activity/Activity.aod b/neonContext/Activity/Activity.aod index 996107066d..d37b0fdff1 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 0000000000..72511e2122 --- /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 0000000000..b550260050 --- /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/Product/Product.aod b/neonContext/Product/Product.aod index 4a1a49078e..8b72cfd151 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/neonView/ActivityAdvertising_view/ActivityAdvertising_view.aod b/neonView/ActivityAdvertising_view/ActivityAdvertising_view.aod new file mode 100644 index 0000000000..768596a4c9 --- /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 1ad3a620d0..2fff9dfbe2 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 19b722bfa2..b2d1782492 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/AdvertisingDetail_view/AdvertisingDetail_view.aod b/neonView/AdvertisingDetail_view/AdvertisingDetail_view.aod new file mode 100644 index 0000000000..2591c4e320 --- /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 0000000000..84e7e192d8 --- /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 0000000000..957936fd83 --- /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 0000000000..29926466fa --- /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 0000000000..91ab8d80c2 --- /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 0000000000..53aa6c2d7e --- /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/AdvertisingItemSmallFilter_view/AdvertisingItemSmallFilter_view.aod b/neonView/AdvertisingItemSmallFilter_view/AdvertisingItemSmallFilter_view.aod new file mode 100644 index 0000000000..392578f715 --- /dev/null +++ b/neonView/AdvertisingItemSmallFilter_view/AdvertisingItemSmallFilter_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>AdvertisingItemSmallFilter_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <size>SMALL</size> + <layout> + <boxLayout> + <name>layout</name> + </boxLayout> + </layout> + <children> + <tableViewTemplate> + <name>Table</name> + <columns> + <neonTableColumn> + <name>4f14ad89-679c-43c5-bf2d-9a7050a84b4c</name> + <entityField>PRODUCT_ID</entityField> + </neonTableColumn> + <neonTableColumn> + <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> + </children> +</neonView> diff --git a/neonView/AdvertisingMain_view/AdvertisingMain_view.aod b/neonView/AdvertisingMain_view/AdvertisingMain_view.aod new file mode 100644 index 0000000000..7e906290ca --- /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 0000000000..466eea0c9e --- /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 0000000000..f959c261c1 --- /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/PrivatePersonPreview_view/PrivatePersonPreview_view.aod b/neonView/PrivatePersonPreview_view/PrivatePersonPreview_view.aod index de138a4323..9abc84a676 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/ProductEdit_view/ProductEdit_view.aod b/neonView/ProductEdit_view/ProductEdit_view.aod index a651ea4b7c..0fa3800f17 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 6fe32eef7f..ef39735d81 100644 --- a/neonView/ProductMain_view/ProductMain_view.aod +++ b/neonView/ProductMain_view/ProductMain_view.aod @@ -49,6 +49,11 @@ <entityField>Documents</entityField> <view>DocumentFilter_view</view> </neonViewReference> + <neonViewReference> + <name>e058bcaa-8f1e-4b64-a6a9-a67be12a7fce</name> + <entityField>DigitalAdvertisingDocuments</entityField> + <view>DocumentFilter_view</view> + </neonViewReference> <neonViewReference> <name>0faf6a9e-b1f3-452d-b7fd-d0c9e3fc25f8</name> <entityField>LogHistories</entityField> diff --git a/neonView/ProductPreview_view/ProductPreview_view.aod b/neonView/ProductPreview_view/ProductPreview_view.aod index 2117c52998..687114627b 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/others/Workflows/AdvertisingShipment.bpmn20.xml b/others/Workflows/AdvertisingShipment.bpmn20.xml new file mode 100644 index 0000000000..260461ae91 --- /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/process/Advertising_lib/Advertising_lib.aod b/process/Advertising_lib/Advertising_lib.aod new file mode 100644 index 0000000000..471b2f7e22 --- /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 0000000000..31a0c15798 --- /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/AttributeRegistry_basic/process.js b/process/AttributeRegistry_basic/process.js index 4def7134d0..030f4c7baa 100644 --- a/process/AttributeRegistry_basic/process.js +++ b/process/AttributeRegistry_basic/process.js @@ -27,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/KeywordRegistry_basic/process.js b/process/KeywordRegistry_basic/process.js index 480fe7ab1f..0dba86a0b5 100644 --- a/process/KeywordRegistry_basic/process.js +++ b/process/KeywordRegistry_basic/process.js @@ -410,4 +410,14 @@ $KeywordRegistry.interestLinkStatus$notSubscribed = function(){return "INTERESTL $KeywordRegistry.weblinkActionType = function(){return "WeblinkActionType";}; $KeywordRegistry.weblinkActionType$startWorkflow = function(){return "LINKACTION_STARTWORKFLOW";}; -$KeywordRegistry.weblinkActionType$sendWorkflowSignal = function(){return "LINKACTION_SENDSIGNAL";}; \ No newline at end of file +$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";}; diff --git a/process/UpdateAdvertisingItem_workflowService/UpdateAdvertisingItem_workflowService.aod b/process/UpdateAdvertisingItem_workflowService/UpdateAdvertisingItem_workflowService.aod new file mode 100644 index 0000000000..c637a2b209 --- /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 0000000000..350cba2904 --- /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 0000000000..5d279eb586 --- /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 0000000000..1f2ee0ebfa --- /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 0000000000..a96e358a7e --- /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 0000000000..2610297a18 --- /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 0000000000..e4b676612a --- /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/Workflow_lib/process.js b/process/Workflow_lib/process.js index f5c336f0b0..8431bc717a 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", ]; } diff --git a/process/_test_clientProcess/process.js b/process/_test_clientProcess/process.js index bae4f5fd7b..71527d0505 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 -- GitLab From eb9e4362f09bf07892f4b593d0bb100d8e7bfb98 Mon Sep 17 00:00:00 2001 From: Malte Kremer <m.kremer@adito.de> Date: Wed, 2 Jun 2021 11:15:57 +0000 Subject: [PATCH 228/242] =?UTF-8?q?1081754/1079943=20Timeshift=20in=20Basi?= =?UTF-8?q?c=20=C3=BCbernehmen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- process/DataTimeshift/DataTimeshift.aod | 9 + process/DataTimeshift/process.js | 135 ++++++++++++++ .../DataTimeshift_lib/DataTimeshift_lib.aod | 10 + process/DataTimeshift_lib/process.js | 176 ++++++++++++++++++ .../DatabaseSupplier_lib.aod | 9 + process/DatabaseSupplier_lib/process.js | 77 ++++++++ process/Supplier_lib/Supplier_lib.aod | 9 + process/Supplier_lib/process.js | 27 +++ 8 files changed, 452 insertions(+) create mode 100644 process/DataTimeshift/DataTimeshift.aod create mode 100644 process/DataTimeshift/process.js create mode 100644 process/DataTimeshift_lib/DataTimeshift_lib.aod create mode 100644 process/DataTimeshift_lib/process.js create mode 100644 process/DatabaseSupplier_lib/DatabaseSupplier_lib.aod create mode 100644 process/DatabaseSupplier_lib/process.js create mode 100644 process/Supplier_lib/Supplier_lib.aod create mode 100644 process/Supplier_lib/process.js diff --git a/process/DataTimeshift/DataTimeshift.aod b/process/DataTimeshift/DataTimeshift.aod new file mode 100644 index 0000000000..7ed0045dd2 --- /dev/null +++ b/process/DataTimeshift/DataTimeshift.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>DataTimeshift</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <process>%aditoprj%/process/DataTimeshift/process.js</process> + <variants> + <element>EXECUTABLE</element> + </variants> +</process> diff --git a/process/DataTimeshift/process.js b/process/DataTimeshift/process.js new file mode 100644 index 0000000000..c5cc7fd57e --- /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 0000000000..29d178a8be --- /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 0000000000..1d32d54279 --- /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 0000000000..a9d5d7e631 --- /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 0000000000..f9052970b6 --- /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/Supplier_lib/Supplier_lib.aod b/process/Supplier_lib/Supplier_lib.aod new file mode 100644 index 0000000000..8bfdde7648 --- /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 0000000000..6c4788e913 --- /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 -- GitLab From 7f0e873a0d9262d7044b9e5cf0500534eed10a21 Mon Sep 17 00:00:00 2001 From: Sebastian Pongratz <s.pongratz@adito.de> Date: Wed, 2 Jun 2021 14:16:19 +0000 Subject: [PATCH 229/242] [Projekt: xRM-ContactManagement][TicketNr.: 1080429][[Adressen] Adressfelder neu anordnen und entfernen der Nominatim-Funktion] --- .../addValidationResultColumn.xml | 10 ++ .../2021.1.0/Addressvalidation/changelog.xml | 6 + .../Data_alias/basic/2021.1.0/changelog.xml | 1 + aliasDefinition/Data_alias/Data_alias.aod | 22 ++- .../AddressValidation_entity.aod | 33 ---- .../children/type_param/valueProcess.js | 4 - .../cityvalidation/documentation.adoc | 3 - .../children/type_param/valueProcess.js | 4 - .../streetvalidation/documentation.adoc | 3 - .../children/type_param/valueProcess.js | 4 - .../zipvalidaton/documentation.adoc | 3 - entity/Address_entity/Address_entity.aod | 143 ++++-------------- .../entityfields/address/mandatoryProcess.js | 6 - .../entityfields/address/onValueChange.js | 6 +- .../entityfields/address/stateProcess.js | 9 +- .../address_ws/displayValueProcess.js | 3 - .../address_ws/documentation.adoc | 3 - .../address_ws/mandatoryProcess.js | 6 - .../entityfields/address_ws/onValueChange.js | 3 - .../entityfields/address_ws/stateProcess.js | 11 -- .../entityfields/address_ws/titleProcess.js | 11 -- .../entityfields/address_ws/valueProcess.js | 4 - .../addresssearch/stateProcess.js | 6 +- .../addresssearch/valueProcess.js | 5 +- .../entityfields/buildingno/onValueChange.js | 3 + .../entityfields/city/mandatoryProcess.js | 6 - .../entityfields/city/onValueChange.js | 3 + .../entityfields/city/stateProcess.js | 9 +- .../city_ws/displayValueProcess.js | 3 - .../entityfields/city_ws/documentation.adoc | 3 - .../entityfields/city_ws/mandatoryProcess.js | 6 - .../entityfields/city_ws/onValueChange.js | 3 - .../entityfields/city_ws/stateProcess.js | 9 -- .../entityfields/city_ws/valueProcess.js | 3 - .../children/country_param/valueProcess.js | 4 - .../currentvalue_param/valueProcess.js | 4 - .../entityfields/country/onValueChange.js | 3 + .../entityfields/state/onValueChange.js | 3 + .../children/city_param/valueProcess.js | 4 - .../children/country_param/valueProcess.js | 4 - .../currentvalue_param/valueProcess.js | 4 - .../entityfields/zip/mandatoryProcess.js | 6 - .../entityfields/zip/onValueChange.js | 3 + .../entityfields/zip/stateProcess.js | 9 +- .../zip_ws/displayValueProcess.js | 3 - .../entityfields/zip_ws/documentation.adoc | 3 - .../entityfields/zip_ws/mandatoryProcess.js | 6 - .../entityfields/zip_ws/onValidation.js | 17 --- .../entityfields/zip_ws/onValueChange.js | 3 - .../entityfields/zip_ws/stateProcess.js | 11 -- .../entityfields/zip_ws/valueProcess.js | 3 - .../children/country_param/valueProcess.js | 4 - .../currentvalue_param/valueProcess.js | 4 - .../recordcontainers/db/onDBInsert.js | 16 +- .../recordcontainers/db/onDBUpdate.js | 18 ++- .../addr_type.displayvalue/expression.js | 8 +- .../AddressList_view/AddressList_view.aod | 12 -- .../AddressOrgMultiEdit_view.aod | 22 +-- .../AddressValidationLookup_view.aod | 20 ++- .../AdressMultiEdit_view.aod | 22 +-- .../_____PREFERENCES_PROJECT.aod | 25 +-- .../nominatim.filterkeys/property.js | 1 + process/Location_lib/process.js | 63 +++++++- process/WsValidation_lib/process.js | 101 +++++++------ .../process.js | 27 +--- .../process.js | 29 +--- 66 files changed, 290 insertions(+), 529 deletions(-) create mode 100644 .liquibase/Data_alias/basic/2021.1.0/Addressvalidation/addValidationResultColumn.xml create mode 100644 .liquibase/Data_alias/basic/2021.1.0/Addressvalidation/changelog.xml delete mode 100644 entity/AddressValidation_entity/entityfields/cityvalidation/children/type_param/valueProcess.js delete mode 100644 entity/AddressValidation_entity/entityfields/cityvalidation/documentation.adoc delete mode 100644 entity/AddressValidation_entity/entityfields/streetvalidation/children/type_param/valueProcess.js delete mode 100644 entity/AddressValidation_entity/entityfields/streetvalidation/documentation.adoc delete mode 100644 entity/AddressValidation_entity/entityfields/zipvalidaton/children/type_param/valueProcess.js delete mode 100644 entity/AddressValidation_entity/entityfields/zipvalidaton/documentation.adoc delete mode 100644 entity/Address_entity/entityfields/address/mandatoryProcess.js delete mode 100644 entity/Address_entity/entityfields/address_ws/displayValueProcess.js delete mode 100644 entity/Address_entity/entityfields/address_ws/documentation.adoc delete mode 100644 entity/Address_entity/entityfields/address_ws/mandatoryProcess.js delete mode 100644 entity/Address_entity/entityfields/address_ws/onValueChange.js delete mode 100644 entity/Address_entity/entityfields/address_ws/stateProcess.js delete mode 100644 entity/Address_entity/entityfields/address_ws/titleProcess.js delete mode 100644 entity/Address_entity/entityfields/address_ws/valueProcess.js create mode 100644 entity/Address_entity/entityfields/buildingno/onValueChange.js delete mode 100644 entity/Address_entity/entityfields/city/mandatoryProcess.js create mode 100644 entity/Address_entity/entityfields/city/onValueChange.js delete mode 100644 entity/Address_entity/entityfields/city_ws/displayValueProcess.js delete mode 100644 entity/Address_entity/entityfields/city_ws/documentation.adoc delete mode 100644 entity/Address_entity/entityfields/city_ws/mandatoryProcess.js delete mode 100644 entity/Address_entity/entityfields/city_ws/onValueChange.js delete mode 100644 entity/Address_entity/entityfields/city_ws/stateProcess.js delete mode 100644 entity/Address_entity/entityfields/city_ws/valueProcess.js delete mode 100644 entity/Address_entity/entityfields/cityvalidation/children/country_param/valueProcess.js delete mode 100644 entity/Address_entity/entityfields/cityvalidation/children/currentvalue_param/valueProcess.js create mode 100644 entity/Address_entity/entityfields/country/onValueChange.js create mode 100644 entity/Address_entity/entityfields/state/onValueChange.js delete mode 100644 entity/Address_entity/entityfields/streetvalidation/children/city_param/valueProcess.js delete mode 100644 entity/Address_entity/entityfields/streetvalidation/children/country_param/valueProcess.js delete mode 100644 entity/Address_entity/entityfields/streetvalidation/children/currentvalue_param/valueProcess.js delete mode 100644 entity/Address_entity/entityfields/zip/mandatoryProcess.js create mode 100644 entity/Address_entity/entityfields/zip/onValueChange.js delete mode 100644 entity/Address_entity/entityfields/zip_ws/displayValueProcess.js delete mode 100644 entity/Address_entity/entityfields/zip_ws/documentation.adoc delete mode 100644 entity/Address_entity/entityfields/zip_ws/mandatoryProcess.js delete mode 100644 entity/Address_entity/entityfields/zip_ws/onValidation.js delete mode 100644 entity/Address_entity/entityfields/zip_ws/onValueChange.js delete mode 100644 entity/Address_entity/entityfields/zip_ws/stateProcess.js delete mode 100644 entity/Address_entity/entityfields/zip_ws/valueProcess.js delete mode 100644 entity/Address_entity/entityfields/zipvalidation/children/country_param/valueProcess.js delete mode 100644 entity/Address_entity/entityfields/zipvalidation/children/currentvalue_param/valueProcess.js create mode 100644 preferences/_____PREFERENCES_PROJECT/customproperties/nominatim.filterkeys/property.js 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 0000000000..1674db376b --- /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 0000000000..44bba8b77f --- /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/changelog.xml b/.liquibase/Data_alias/basic/2021.1.0/changelog.xml index b99b6df912..9709b5188f 100644 --- a/.liquibase/Data_alias/basic/2021.1.0/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.1.0/changelog.xml @@ -7,4 +7,5 @@ <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="Addressvalidation/changelog.xml"/> </databaseChangeLog> \ No newline at end of file diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod index 5564fd5eb5..af12a5f42b 100644 --- a/aliasDefinition/Data_alias/Data_alias.aod +++ b/aliasDefinition/Data_alias/Data_alias.aod @@ -1092,8 +1092,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="19" /> - <scale v="0" /> + <size v="29" /> + <scale v="9" /> <notNull v="false" /> <isUnique v="false" /> <index v="false" /> @@ -1120,8 +1120,8 @@ <dbName></dbName> <primaryKey v="false" /> <columnType v="93" /> - <size v="19" /> - <scale v="0" /> + <size v="29" /> + <scale v="9" /> <notNull v="true" /> <isUnique v="false" /> <index 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> diff --git a/entity/AddressValidation_entity/AddressValidation_entity.aod b/entity/AddressValidation_entity/AddressValidation_entity.aod index 3534d6d9fb..050da6433c 100644 --- a/entity/AddressValidation_entity/AddressValidation_entity.aod +++ b/entity/AddressValidation_entity/AddressValidation_entity.aod @@ -14,17 +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> - <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" /> @@ -65,17 +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> - <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" /> @@ -109,17 +87,6 @@ <name>BUILDINGNO</name> <title>House number</title> </entityField> - <entityProvider> - <name>StreetValidation</name> - <documentation>%aditoprj%/entity/AddressValidation_entity/entityfields/streetvalidation/documentation.adoc</documentation> - <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 e856004597..0000000000 --- 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 737201e405..0000000000 --- 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 84ce4d3552..0000000000 --- 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 60a4b5ed2a..0000000000 --- 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 6ab3539198..0000000000 --- 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 9da7e51bd4..0000000000 --- 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 686d8185ca..1e79143f14 100644 --- a/entity/Address_entity/Address_entity.aod +++ b/entity/Address_entity/Address_entity.aod @@ -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,6 +71,10 @@ <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> @@ -84,12 +96,20 @@ <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> @@ -262,42 +282,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> @@ -328,81 +312,11 @@ </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> @@ -434,6 +348,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> @@ -543,6 +460,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/entityfields/address/mandatoryProcess.js b/entity/Address_entity/entityfields/address/mandatoryProcess.js deleted file mode 100644 index c92fea5dd7..0000000000 --- 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 9ec7eecebe..c21d354477 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 005ea314f1..ed5e161dcc 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 8b35f14226..0000000000 --- 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 f15b5e5649..0000000000 --- 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 305a67d36c..0000000000 --- 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 02aee85018..0000000000 --- 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 1e05ad82e9..0000000000 --- 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 e05306fb18..0000000000 --- a/entity/Address_entity/entityfields/address_ws/titleProcess.js +++ /dev/null @@ -1,11 +0,0 @@ -import("system.translate"); -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(translate.text("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 ef17405a27..0000000000 --- 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/addresssearch/stateProcess.js b/entity/Address_entity/entityfields/addresssearch/stateProcess.js index 6b661824b3..441e172606 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 e5e514c908..094a9ae8b2 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 0000000000..c21d354477 --- /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 255d63dfb4..0000000000 --- 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 0000000000..c21d354477 --- /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 fe5eecb4a3..ed5e161dcc 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 7cbee1a42e..0000000000 --- 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 f15b5e5649..0000000000 --- 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 866716ba42..0000000000 --- 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 5938552243..0000000000 --- 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 7095f69b78..0000000000 --- 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 789a3b3303..0000000000 --- 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/cityvalidation/children/country_param/valueProcess.js b/entity/Address_entity/entityfields/cityvalidation/children/country_param/valueProcess.js deleted file mode 100644 index 41f3b8dc1a..0000000000 --- a/entity/Address_entity/entityfields/cityvalidation/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/entityfields/cityvalidation/children/currentvalue_param/valueProcess.js b/entity/Address_entity/entityfields/cityvalidation/children/currentvalue_param/valueProcess.js deleted file mode 100644 index 74c070329c..0000000000 --- a/entity/Address_entity/entityfields/cityvalidation/children/currentvalue_param/valueProcess.js +++ /dev/null @@ -1,4 +0,0 @@ -import("system.vars"); -import("system.result"); - -result.string(vars.get("$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 0000000000..c21d354477 --- /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/state/onValueChange.js b/entity/Address_entity/entityfields/state/onValueChange.js new file mode 100644 index 0000000000..c21d354477 --- /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/city_param/valueProcess.js b/entity/Address_entity/entityfields/streetvalidation/children/city_param/valueProcess.js deleted file mode 100644 index 74c070329c..0000000000 --- a/entity/Address_entity/entityfields/streetvalidation/children/city_param/valueProcess.js +++ /dev/null @@ -1,4 +0,0 @@ -import("system.vars"); -import("system.result"); - -result.string(vars.get("$field.CITY")) \ No newline at end of file diff --git a/entity/Address_entity/entityfields/streetvalidation/children/country_param/valueProcess.js b/entity/Address_entity/entityfields/streetvalidation/children/country_param/valueProcess.js deleted file mode 100644 index 41f3b8dc1a..0000000000 --- a/entity/Address_entity/entityfields/streetvalidation/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/entityfields/streetvalidation/children/currentvalue_param/valueProcess.js b/entity/Address_entity/entityfields/streetvalidation/children/currentvalue_param/valueProcess.js deleted file mode 100644 index 8e559d5146..0000000000 --- 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 453956bca6..0000000000 --- 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 0000000000..c21d354477 --- /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 764f48cdd7..ed5e161dcc 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 3c1fea5790..0000000000 --- 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 f15b5e5649..0000000000 --- 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 453956bca6..0000000000 --- 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 bbbf2acbbc..0000000000 --- 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 dfd1bbf97d..0000000000 --- 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 624d619e37..0000000000 --- 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 0ecfd8b06e..0000000000 --- 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 41f3b8dc1a..0000000000 --- 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/entityfields/zipvalidation/children/currentvalue_param/valueProcess.js b/entity/Address_entity/entityfields/zipvalidation/children/currentvalue_param/valueProcess.js deleted file mode 100644 index d9e7983e6f..0000000000 --- a/entity/Address_entity/entityfields/zipvalidation/children/currentvalue_param/valueProcess.js +++ /dev/null @@ -1,4 +0,0 @@ -import("system.vars"); -import("system.result"); - -result.string(vars.get("$field.ZIP")) \ 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 b088c7a1b3..80f13d5246 100644 --- a/entity/Address_entity/recordcontainers/db/onDBInsert.js +++ b/entity/Address_entity/recordcontainers/db/onDBInsert.js @@ -59,11 +59,19 @@ var address = new AddressObject(rowdata["ADDRESS.ADDRESS"], rowdata["ADDRESS.BUI 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 8ce04bc6f3..a1868fd1d6 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"); @@ -27,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 34af55ea17..cbce8488e0 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/neonView/AddressList_view/AddressList_view.aod b/neonView/AddressList_view/AddressList_view.aod index a3e85b279b..958e360b91 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 fa53f54f1a..b695b472b6 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 c64330a9cb..3b1f25f260 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 3bcfaf74c4..d7483c3512 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/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod b/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod index 8e1dc8e208..2e5b1523b1 100644 --- a/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod +++ b/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod @@ -115,21 +115,12 @@ </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>ai.salesprojectProbability</name> - <description></description> - <property v="false" /> - </customBooleanProperty> <customPasswordProperty> <name>nominatim.pw</name> <description></description> @@ -139,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> @@ -187,6 +187,11 @@ <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> 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 0000000000..c0996e0881 --- /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/Location_lib/process.js b/process/Location_lib/process.js index e57ae643c7..98a3aba621 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/WsValidation_lib/process.js b/process/WsValidation_lib/process.js index 817a2a1841..44b4967131 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/setMissingAddressLocations_serverProcess/process.js b/process/setMissingAddressLocations_serverProcess/process.js index 7cef5bfae4..dd23bc7aee 100644 --- a/process/setMissingAddressLocations_serverProcess/process.js +++ b/process/setMissingAddressLocations_serverProcess/process.js @@ -10,34 +10,13 @@ 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) - { - var locationUpdates = []; - addresses.forEach(function ([addressId, address, buildingno, zip, city, country, state]) - { - var addressData = new AddressObject(address, buildingno, zip, city, country, state); - - try - { - var location = locationSearch.getGeoLocation(addressData); - if (location) - { - locationUpdates.push(["ADDRESS", ["LAT", "LON"], null, [location.lat, location.lon], - newWhere("ADDRESS.ADDRESSID", addressId).buildCondition()]); - } - } - catch (pException) - { - malformedAddressData.push(addressId); - } - }); - if (locationUpdates.length > 0) - db.updates(locationUpdates); + .forEachPage(function (pAddresses) { + LocationFinder.PagingFunctionSetLocations(malformedAddressData, pAddresses); }); if (Utils.isNotNullOrEmptyString(malformedAddressData)) { diff --git a/process/updateAllAddressLocations_serverProcess/process.js b/process/updateAllAddressLocations_serverProcess/process.js index 6239ba470a..9f53d5000b 100644 --- a/process/updateAllAddressLocations_serverProcess/process.js +++ b/process/updateAllAddressLocations_serverProcess/process.js @@ -10,34 +10,13 @@ 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) - { - var locationUpdates = []; - addresses.forEach(function ([addressId, address, buildingno, zip, city, country, state]) - { - var addressData = new AddressObject(address, buildingno, zip, city, country, state); - try - { - var location = locationSearch.getGeoLocation(addressData); - - if (location) - { - locationUpdates.push(["ADDRESS", ["LAT", "LON"], null, [location.lat, location.lon], - newWhere("ADDRESS.ADDRESSID", addressId).buildCondition()]); - } - } - catch (pException) - { - malformedAddressData.push(addressId); - } - }); - if (locationUpdates.length > 0) - db.updates(locationUpdates); + .forEachPage(function (pAddresses) { + LocationFinder.PagingFunctionSetLocations(malformedAddressData, pAddresses); }); - if (Utils.isNotNullOrEmptyString(malformedAddressData)) + if (!Utils.isNullOrEmpty(malformedAddressData)) { errMsg = "updateAllAddressLocations_serverProcess: Something went wrong, during updating address locations, with the following uids: "; malformedAddressData.forEach(function(pMalformedData) -- GitLab From 4f5155684c1b3b736248be40bb156517151b29e0 Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Fri, 4 Jun 2021 11:49:58 +0200 Subject: [PATCH 230/242] scan service errors missing dependencies fixed --- entity/Campaign_entity/Campaign_entity.aod | 2 ++ entity/Member_entity/Member_entity.aod | 2 ++ entity/ObjectProxy_entity/ObjectProxy_entity.aod | 4 ++++ entity/Offer_entity/Offer_entity.aod | 2 ++ entity/Order_entity/Order_entity.aod | 2 ++ 5 files changed, 12 insertions(+) diff --git a/entity/Campaign_entity/Campaign_entity.aod b/entity/Campaign_entity/Campaign_entity.aod index 7dc6d3ee53..7e0c6abd26 100644 --- a/entity/Campaign_entity/Campaign_entity.aod +++ b/entity/Campaign_entity/Campaign_entity.aod @@ -273,6 +273,8 @@ <title>Charts</title> <dependency> <name>dependency</name> + <entityName>CampaignCostChart_entity</entityName> + <fieldName>CostChart</fieldName> </dependency> <children> <entityParameter> diff --git a/entity/Member_entity/Member_entity.aod b/entity/Member_entity/Member_entity.aod index 12296888c1..97b8ff6f21 100644 --- a/entity/Member_entity/Member_entity.aod +++ b/entity/Member_entity/Member_entity.aod @@ -88,6 +88,8 @@ <name>Contacts</name> <dependency> <name>dependency</name> + <entityName>Person_entity</entityName> + <fieldName>IdFilteredActiveContacts</fieldName> </dependency> <children> <entityParameter> diff --git a/entity/ObjectProxy_entity/ObjectProxy_entity.aod b/entity/ObjectProxy_entity/ObjectProxy_entity.aod index dc4c9ca836..de754623cf 100644 --- a/entity/ObjectProxy_entity/ObjectProxy_entity.aod +++ b/entity/ObjectProxy_entity/ObjectProxy_entity.aod @@ -128,6 +128,8 @@ <name>Bulkmails</name> <dependency> <name>dependency</name> + <entityName>BulkMail_entity</entityName> + <fieldName>#PROVIDER</fieldName> </dependency> </entityConsumer> <entityConsumer> @@ -154,6 +156,8 @@ <name>DocumentTemplates</name> <dependency> <name>dependency</name> + <entityName>DocumentTemplate_entity</entityName> + <fieldName>#PROVIDER</fieldName> </dependency> </entityConsumer> <entityConsumer> diff --git a/entity/Offer_entity/Offer_entity.aod b/entity/Offer_entity/Offer_entity.aod index fed9cd1990..c6ea3d5685 100644 --- a/entity/Offer_entity/Offer_entity.aod +++ b/entity/Offer_entity/Offer_entity.aod @@ -224,6 +224,8 @@ <name>AnyContacts</name> <dependency> <name>dependency</name> + <entityName>AnyContact_entity</entityName> + <fieldName>OnlySameCompany</fieldName> </dependency> <children> <entityParameter> diff --git a/entity/Order_entity/Order_entity.aod b/entity/Order_entity/Order_entity.aod index fd853436cb..52f23b22af 100644 --- a/entity/Order_entity/Order_entity.aod +++ b/entity/Order_entity/Order_entity.aod @@ -461,6 +461,8 @@ <name>KeywordOrderTypes</name> <dependency> <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> </dependency> <children> <entityParameter> -- GitLab From 29931cd4db8755f82f2bdcd9a93e97e4bf59b5be Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Fri, 4 Jun 2021 10:57:30 +0000 Subject: [PATCH 231/242] 1081090 liquibase asys_aliasconfig fix --- .../basic/_demoData/changelog.xml | 2 - .../example_workflows/ACT_GE_BYTEARRAY.xml | 24 ------ .../a01ad77d7c18c3d6ea3b6142c270fa83 | 70 ------------------ .../cd7557c02d22c531ca4fffb99e7d7609 | Bin 8766 -> 0 bytes .../example_workflows/ACT_RE_DEPLOYMENT.xml | 13 ---- .../example_workflows/ACT_RE_PROCDEF.xml | 23 ------ .../example_workflows/OfferCheck.xml | 6 -- .../data/defaultBlob/_____configuration.xml | 2 +- .../init/data/defaultBlob/data_alias.xml | 2 +- .../init/data/insert_asys_aliasconfig.xml | 4 +- 10 files changed, 4 insertions(+), 142 deletions(-) delete mode 100644 .liquibase/_____SYSTEMALIAS/basic/_demoData/example_workflows/ACT_GE_BYTEARRAY.xml delete mode 100644 .liquibase/_____SYSTEMALIAS/basic/_demoData/example_workflows/ACT_GE_BYTEARRAY/BYTES_/blobFiles/a01ad77d7c18c3d6ea3b6142c270fa83 delete mode 100644 .liquibase/_____SYSTEMALIAS/basic/_demoData/example_workflows/ACT_GE_BYTEARRAY/BYTES_/blobFiles/cd7557c02d22c531ca4fffb99e7d7609 delete mode 100644 .liquibase/_____SYSTEMALIAS/basic/_demoData/example_workflows/ACT_RE_DEPLOYMENT.xml delete mode 100644 .liquibase/_____SYSTEMALIAS/basic/_demoData/example_workflows/ACT_RE_PROCDEF.xml delete mode 100644 .liquibase/_____SYSTEMALIAS/basic/_demoData/example_workflows/OfferCheck.xml diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/changelog.xml b/.liquibase/_____SYSTEMALIAS/basic/_demoData/changelog.xml index 96ebb69f95..35007bbefd 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_workflows/ACT_GE_BYTEARRAY.xml b/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_workflows/ACT_GE_BYTEARRAY.xml deleted file mode 100644 index 8c57c1502c..0000000000 --- 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 2656dbe0f4..0000000000 --- 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 GIT binary patch literal 0 HcmV?d00001 literal 8766 zcmeHMc|6qXzyG4B(=wf33vHxLC0miQjTWiI)Jas#s1Om8EW<EHsT^r=N|wYZMP->n z)?w<1vBZe1GfWJ|GK*ylgPFO{=-hM9xv%?r-TTM==f3Wl|K@o<pU?BzpYP}WM4qv+ zT=CO}pCAZYaq`5mUm!@K1cKy7mMDUiPg^73LD1I4CyyPr4McIfgR_zTNrq!rZP!G; z*rNC={`#Gr$L>g%s2iz#lG9K`J@)Oj-Go)wDj55htDmC&HnjCvYoz-z^8wuAP511# z$+O}-pBHu*IbJ(nviw!Snv%FKO=Y^r?J1tyKz1XK&+%<Ux$*PM+RTWEiT>>J+~icV zSzM{mwQVoZ<)7dGUk`MU^7aN#&Q6Wu3$arpl)Vmxd&@?1%WPp;<8G4K2WvG`DeTl> z8wB1^cfGhwY6Vk(Y)^07A|?OalxLlMz_l!ZTPK-k!?RTF=98#I@x(yA(~U)gl#_V4 z?$3WRFytPD#VZ=N(z}X%Sn<crE8t@B$72Gt|0$WgW8}|YH>Zi6#*N(<^>+{Rm3F?s zXPv{UKxte1OkJ;EI5(HshxttsdU@+?(WO@ra?qZ%?%4UdXhP?#QfQnhc3N7e8SjiN zB|gP2t%+;(mLB(F2u}$`8zuWm7i@~M8W*%SH&z!7aA~eFjPWNNjC2+=XPX`6H7xP) z*s<kY+c9xj@H8<$M~BOp3#`JIzr)lJ2Cj<LF!Q_V;}dv(W(G>8ko?Y{YAsABhjN@1 z881?C0;g&YDZ@^FpDUrAqW4`giB7GP^s*^5UdW8-hRAtiK8Ycy=}|X~cNSA5)cj7S zp-|Mu^~_Ut(i;l6v>>s1S#86V)3k)ISLt>3y;irAb<QG}x(y_J5qTz)V+EfR_dE~C zD;=t4y3%e0UH=kfThd$!L2GqUC%khld9x#ly@jtk;(0&xu>MA|l1`TBRdNES^6|mg zFXL}RhOa<jKPB$kuIyUFwFVwCI4iBTii=Vg@+C}u9x=BoHYfOsCF=dA(Ffcjabxgk z+1WpBt;*b;`B%L>S}EhTwd0?DY2be%JU`H_)3%oG%sg0~sg1E)V7hd#zo1Pr_~38W z0Ip%H-_rYdUZqaiR?|_Zrq6K`R28AuVRq_=a&l;5v*7+l{HFcit4sg1<iiNl&)uM3 zm@CkQ%oi8@RGTyMMv0`hzrVWF4{k8^uh`vL=cU+^35llZa_Ed)&XI}4u5x3CvXQrX zN4-I0orU)2_Q)mW?Hpka#DIAIn!*Xsyvh^=p08MtczVsFbX1STQTQ2MVSMeQ)}F#D zvtggNAwL|{BbgIYjttpL$2p0t^P(Rf_dd~6ZcHy0rgD1eI;#6SGS<$0uHcOX{E+|- zsQGh37+fk&yb?g3?W2Vzh<&KU>SvZu{#4NggQjX?{Ean%Vwa}S--rRc#@tdjFUg~R zC$pIdP7hUxi}Bt|ogV5DjZKPl=kfO0^#LNwx6waxI4hRX*i9eb6Kze)?D|8<S-qi( zcVY_s#2&K?Z&hwNmt3H5U!^EAw4eODhc`Rc+hNUGQL^fIi>GGI^!Hz_nc7{~vQT95 zb$4A1%0UstOLFWMa%I({taBizhnXG=A|Uk=qyOplrS&Q*2R#A<1ACjAnsNxlX~U7E z<F4s&z8aFEE3}GP3}u*~$h85QyuxRl$0lA24-Z#EFDGdpSLzDzwAhr8x(wQN_^%YY z`uc*3>UUU&D7nJZ-RsyVX)B<DzfpYp^yx9pWb(`A28Gd!ZYfWY0iCX$d9L+&{-bTK z4n^J#N9G?=-<uUuLu=E@v>Fpo3Q*$RSjQBQLRM0{EWy~9HkDKC1Bwj$D0P1!r?V4= zpQ*etC*+FG7$<e;2xC}J6}wG+dIXoCkBjd1kHm$YzPQkd+;YDf7Y8dbs-l$L5T;YM zM%2O`(NU~qB_zgAE^X0Y+}4|P{qp7S;%(cu(W9OV9$9JEqC&>2`~tLgM8{0(uPAk3 z84Z7s3tRU$=^52fX@O{^ccy~3dgEipSL9RFM#%lIrUwqL7e7ra=YL8Wv5KRvW_yOl z<dT%-!wxK|ZQTu0Oo0Ay3Pv*_eDZbG3#*PeZXIzD-O|l?GVBXM|0-WuYpI6wyZe!x z8rT=9M=!fr<=;H@`22iQ2*+7%V}59<m3c<flDz2yBQO1MZ`;KiUqw)LOd0U5;ZL`3 z-%j5!M^>$L3lSsAh%X%No)ry`-b2NVX3!Qx?#=bF<XZ!E<<AX9%9vtaBChm@>{i>D z(Sk)TKUrhEb}sKK=P-Afn)nR&O1|2_R<2l);=q}nBH>L_tjqQ^Iyq|QCYvckX(x4# zPTX0%Y~p)R^?J8{I9xo8;CHW!N!PBJ>EoF4gAf6qf3|dKM+JLTaBDS)U-)%oF&9l6 z{F0Q92<y&swK{<AA#>hUuB^`*$4ff%X=Y`#L(1BYiRG-#{2H5sy?1XkJT(v%<~S4$ zvW@y<kLF=0bKN4daneAQUPJrP`K2{$p2`dF9xh9ec|b$^hX<-z$q%>~CJtki5ODq( zWw?a#ZQcY5J4QM(VWm?ZS3Zj5*HsR6eej$d3mW^R<VGS-oT@NYwM62kT4l*OG0<UH zXb~GtZAW5|lAf1WnH>i(JVwZ&=!@^KT2yS3Ba5EFCF3!Z?>5(GreZxRa+Y+pJNjA+ z!`0@uI7P=YLL6tAy4|2I-G6@PpvXl{q2p9j$%30w_piau*mvWTx37x9z1~t%kkvPD zP3yhgKP(S5VAnoE7x&&b@k0gn-V?E4A>S25EMq=-KYmmF*`Hqm4N4FvaBO2{k`BM) z{Wf}`7u}4$^_X%@)B|xcZM{?F8Afkp+2QwEyj@kSgHAq;TVoB0l!OH}vRmrH14y%m zr(g&awisV9R8sIlsc20Mi~rs4!K5K_u0$Y`hpd4L@ToTl!qU96MCm+xl3T^PDjlR+ zBobni75f9<T-^%-7WBm+O5B&Yr2T!!(DMkMuj7rV1k>tU<j?!c19UV)m9_4~{lc>Q z<FH}AWy7<sd^f}&vA~wO$w919ixbh)?d9VH^cR~$10W(5)8+gDbwQ$YbgdfomhJm; zk<X;nW>V?MTU;UG;luv=1gFp-N$RT$+GgiJbm&A!CKy*w3}+Hk(NT!E52@q7Q2BW2 zoM>XPvSTbdD&cZ9E3oJ1x)y2b@E*+VT`%QI-|#l~z;x`}D!ETod1_i%^l8|EP&4~% zjD|9_=cTf`D498bP4ys4;rauA7<_)L2inLt*b^VcZHO_v(GiOiq^mVJWfZ%AeGwu~ z?h#~!IE1)2%!?-Tx5b$33#QY1;!^^;u6MQ|;N`SKedWPE8pAWJ7#h<`h2EF@wbPAQ zK7G`4oet_5W&6HDq)*k_&fW;MRHtq7ezVN|ND!mMT^9^TEu_bXdxfW9(=h?qn;pTo z<kFskkQl!S#P_%+Ambx?BUG`wVCB@!7)GLa1SP-kUgRDBd?NwKuMBTc`&Wp$%b`}= zh}e+H217ThYVeJKro&3EN~(dE1NtI0uEES^zW-N@hnbI;L2J(^#G0%=WuCED?2yx3 zxxfD7$B$<T&nKr;OjxFU;}ZVxDz=#822Xa<$W?B)CN6`TT#SxRAVMb|b6%%M*YO#j zm1r;N8d(=>gXc4T={{&l0>ZL~hnN>v3r;(dX3o5RV>c<%C~XU*+LnOU-lAe;zYcSO zWt^6I^jT5yaYr58O33`G(UDtc(YR5E$;%tmj8-#KlDzpARa5EBQ|I@BzL}AZce8HV zzuL>QsMII=ZM<q~kfM?j9JM?x-;LIoiXD05cbt3T8QR6=WpPw;)l@SZg0^RD+iuyg zVMU&W0cq~DhS_iUW{>PB*o!1XG%BFuO2mMHzJ45@YdI--Ki~ftF^GxnTW!aBY?oa0 z!8iKeGUY)c2mAX{4HwV0?CW#IGy0t~yoPPj2e+09yF97$n1FonRXFkzZ=ZAN32x}9 zT3yflpdp)742pT<#8m!MtY__`9ij;fWn=*cHz^z(5cn9g(I`}@-*sUx41Z91cVMVh z=Ely|2ot?)lz`bnj<nh@i#9d(<(rCG!n&jG<GY#NtJoI{+`oESV|)@a+7+QoL)*6_ z?DDIZex%G)>EyYk2JLh*l(i|)SnKoFYTEVJyFK%%PGluh-1ehNTgf>ozMnBSjt3G3 z&LK=ca9Oz(vm+tFd#UYlFQtTTnQx7TnJVUJide{bPgSL}`Ix<yxH&qr5nm18vzEGs z-W6ohDQX$$P_56hCpCsnWjPJhtBGnXt2ym9%y=;~(R->yH8n|5QLzUIDq2@Lv?IZ> zc|2_+)d^gw!Tj&lqCYNEqouWvTeCARcg-KH_*QYjei41}0cqpOm>B=}WM^vh{LG*i z_t`f2qalHod#T750Wnbt7x|15U*f2>z3fxzq_le4yLxk%bM&EWL<+NNLQZK@taQGu zsN%zP;-GkE@PeX`5oU*+qWOiU199gjKKZh$3C=>#Omw{jeY$AY5k_+aUpN|uieF6| zFn*b{%>xIuOTx=E8i}aYkcy>-dQjfeCyS~DKHt<MHa#NI$w8BMsnq&7=R=CEel=d~ zO+KfW*DUnFLL4J7CNup<7O-A@BAn|d-TIYy_I<?#)Vs@vCC$C*F=kl4Uc;OLJX%gq zqW&gm&V`KtJxw&gi8kidG=etIso56ur5!&OuC^)PDXBuM3_n|ZW4JddNAF>ym#QDj zv~;{KJpk^1NEjtfW`-MMD@ukxKw(S${`ClyoY$h7YH1RCRGTtCF<;MfE}0Ru4T_VU zazk3r+jH|}vDdTcFcS+}=w{w8*gag?NBUz4!CqhA<~NG+fzabsvx5VHQjfjNAa;s~ z6%I2yh~LD&PB2F?b|5Q4f`sX6Vt1l5{Sbcg7TL)xo@MN>7Wn;kh^U;8<0p#i1YVuu z7OJZiY(Lf#<IocO6kpyX>sgfTq1~naoozV|lg|%?R<kas(UU87zJBe+`!4@+&7aE8 zoJkZ-ve_7K&@HcLro@{9O`U}?2={2%qsZ@MS>MHxv)_07exCb@<vlh|RU_sg%L=)y zomgJC_K)1<hp>%<;1-Fgt%B*YAW=rLcU=N}GKtn7Ln`ijz!|HA(SrF;J#%YAXIqGa zYJ1kI4cQ7@eQwB#F*?DJ3cpsB(yo%>JcKN{HSkxHR^PvWzo&gB81Jy}U3?C`&t$kn zF6;o%J^13dYUxY@Z%H=HRB%T1Sd1~RSZ}Vi1Z2WnD`{g~bEW=9G4}adEya#Vk9(x0 z@?k4mcWkFxsl=EHJ2+|KE9+L8jD6&MUXA#o8Z!3j@2my;baijqItL;T>g)S?ve;q* z_L^TB_->EMbyAsoMU{unZP{+03C?P!wC-7$w2s{J|FeICIrN|H|B+kj<F$fu?YT(j z-=B_n8H6g)4CN<yf@y`-Un#A-Wq$ox(=IzOv?asZSw4BhOO~332jnNje}hAKCG6Ce z1RW<yUo~N4QSr8Ka~|_aXvVuMm57bKGcdwz@(+n~l!X!3LO05I6=BwwoSE(IFP>_5 ztE{YaZfk$pM>COd?m1^{m+&4+HaAn|G66Z%-MXY^`uGW(c7@hVyd3!O-nNOjMlPtp z=2VeF>npIb<t$_IhMeFQuDSoP69l<GVl2L8xWwa_R30+lTC%L)d)2pJC5xf3oj%k| z3-bW5WiH#gT0DhJd%;+7=cg751g`VIzA|%*lsHu-4t`b{%psMlnTz+-b#HmSMZ64x zynem>ELUOVu#EG_iTkt7fG2j<qvsU@9dO6qb$P8LqgtxIe#Gh@l7Ia2Pcr=P7fGSS zqW~}6(+yDZ{qgF`9=jFk)`U`bLFQplu6MvfrpnEzPX}<z!F~ex>q@>IK%Rmi-F%f> z&kyX}=%PVi2|;37?6MC{Jc!N<1yxU6UUDYLRjEC1P60BP>h>RbW$k}CWyA-9&Y<r* zzRtE$YPE?`g2HC?`j71J_cZ6W1wl}nD&RWQt$Ml)X9hv9wU27so-&G6ZF)`FEWUUg z>xe}`&=3N!KlEEgkeia~@4@Pa78(ylV;r&I&>=Y3x@)K4&WI#P_P$LyTom+CYsA-@ z?toN+pxFp@WntO4BF#==^jNremYB32$-F@xm4nR1>u+75JiYP#hCy-R20sUGyT?bZ z(*a1Jg2qv8jv;sD(;UT)!NWzZ!bnBNk+OD~-n#w2hn@}ic*CHknq^pUf!P@5uxri) z*wD4Sq{;W(=DiLpN<AM@T@@L>+Y(_AWE-QdjD6d3JFhj3UK{2xBnScr8+?w<iW@;1 zbn#vkz^oo5?8?O4Wcg(CkC~8E{9vaHK}5_oQ+o7LhHSjE5J+$POd4p0Ve38KD!69J z8J4FTKRJwfO9R$Hw_KI#?G(JpN=2=inhERu>dnBRko%i%IbX6I<^{jj%dN?4dKRoT z#n&n}*eTq|LY(#fz&sYtb7@};gzjFC{^5X|%W{Nh1K?CsKs@xoE}YG5^uT}AD%ju$ zZ!ais^#{voqs?*!L6^PUK59Mu;e063Zg|TE1rJ7~7v`hZOX@4OOlazm(7cN~DF^J> z-M!&-nZK$`=7~%Nk4&lpShTnHKeLb(kZw-h%52wZU`kl32j-?11`a4YNIN%PUdS%! z$-bT~#ywcD_`1L^&00;yowFvKYmp9LQ4ChUwSTo#6T_Jk@kK8A%NJI<$HvCW6%-Wo z`sD#J&Onjzc*7Gy+sWYonG`~C6kWf+C)rze<fRk5zS3miTXWnFj8At1&^;}+x+H4U zTN}_$?QcXnVtj!WuM<xGN%%RXYu!<=OT0lK{R~2{BV!bhro}G@kA9F~#Zeg}t}<38 zlc_7ypvmx`t^b4G_+}IDioQ^eopQ^iNM?<7$_33@PP5Gk0V%<}5)w7G>}K!prpida zuT}(qg!aX}ej<P(Cwl~eApRZv4V7F6Z!r9-g$!sqiRxwGjwXq`Z;p$`Cj$ghn_lYg zxvtO6Bzo#S4xnJ96ud+<N;|}UMzL8a>p2T&cVvM}?IWZzD)5Tz&5rY-9aSIERr@*g zy%Zo*@7UzY#<}U|&!11fVuP3FuvGUiZ<H85)XngVU`#CZ8*b*b+B;dZI|@Jh_{;;) zNL-f$=K53E%|O9KJ3^-*EZMtsnAvDL&ES9$2*GaK9Xa`h2*<N)YHG*=S;^^o^{wRn zes5VmcmjNt?_t>&;yd^yDCp+Rv3|i*u;1jLWtVelje>U(?|a4uHcsqIoMQ+9Xgr+> zKm{l)_xhJKw5Y4SqENHvsBwyS$v`|8VB<xZpp}B%5^f>ALXG&sq!pIrVgC#-nHME1 z0sJM^OxD?kE;tKADibL41C-D062b4d>Fy$D@Z#V)3)(G|<_wOWRbxN%wV^Y^>2Hb~ zIi2~K<;$0EdIHd7z+K}H5ZCr6_Nb)B7cC>rRysHrclRNNKvt&amhpQp=9Sp%oY!Um zu`w%QFlO8zY{~!uL5{YQ5bUPwAFee#T|rQvzWoQ+I&H_9SpbzbAM(58)m=I@P#rtx zIO`}=XPaA!zg?jlE!A&jiXCCJ{F}-xOeVm{A;>82@~1nd<rR<1f+hzwx@%=UX0&4L zo(}oj=yboCu)`UKMaa4a5;I<<4F5Wcu$K(z;DfRd_P~c}quL<z@FP>x{n{vU;2ZuA z{)JovLoTH)7MS<KCq?;wM1&#iKg{nCv58V!5-Kl*MKF~3I@chRet7kPZ{s00NvHVx z9aB=ptcTI#fb*<*n!Y0AgY1b0K?DsJ@@wd;ijv}nn_rPK!>=osO9<!?mL)+Qa~<mi zwuj!zLQG5A&mN$v;Y~K%l=Zb!BvbwbIgGQTM)?7mgl<`~)d7?R<K0!TJLRl#-j&Mx z`0LAyX|R<mQ=b7;1cEXeWSMrzcaZ!o$G9{dbCc-#jR9U?K;m)xqGfM9AH?wv-koNx zu=EG8qzyP2ZyA{MA?TgciWMu$0W8-a4SayE;8)BA6wH~H62u3(16c%kB)H<fdHJLY z7(muLr_b$T{rjzJ0j3u^p5-JSsgw<AF5oo)-vQt)O+u1zKnB5&s^J7*mCzNUL5D`T zbe_Ip&O1_!vt9*cJTdss<MRVPx#2jz2VNR_g_EEP`rCi=Ybun&j48KpQp*!sGSZV4 LHpg<0T)y*fUu(3` diff --git a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_workflows/ACT_RE_DEPLOYMENT.xml b/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_workflows/ACT_RE_DEPLOYMENT.xml deleted file mode 100644 index 9852f8a541..0000000000 --- a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_workflows/ACT_RE_DEPLOYMENT.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="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> -</databaseChangeLog> \ No newline at end of file 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 96cfbe0914..0000000000 --- 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/_demoData/example_workflows/OfferCheck.xml b/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_workflows/OfferCheck.xml deleted file mode 100644 index cedeeb547f..0000000000 --- a/.liquibase/_____SYSTEMALIAS/basic/_demoData/example_workflows/OfferCheck.xml +++ /dev/null @@ -1,6 +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"> - <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> diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/_____configuration.xml b/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/_____configuration.xml index b8e2eb9d98..c1a70a1b00 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.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/aliasConfig/1.1.8"> - <name>_____CONFIGURATION</name> + <name>_____CONFIGURATION_default</name> <serverId>default</serverId> <definitionName>_____CONFIGURATION</definitionName> <aliasConfigSub> diff --git a/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/data_alias.xml b/.liquibase/_____SYSTEMALIAS/basic/init/data/defaultBlob/data_alias.xml index 78f9b9d12e..9b2f7c7e5c 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.8" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/aliasConfig/1.1.8"> - <name>f50ee138-12d9-420d-a4f9-9b8257e207e4</name> + <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/insert_asys_aliasconfig.xml b/.liquibase/_____SYSTEMALIAS/basic/init/data/insert_asys_aliasconfig.xml index 0f0d825b27..61a2119e84 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,7 +58,7 @@ <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> -- GitLab From fa2f292f6562447601a320966e8ecb955b4fed9e Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Fri, 4 Jun 2021 15:32:53 +0200 Subject: [PATCH 232/242] Scan services removed empty files and properties --- .../children/rowid_param/valueProcess.js | 4 ---- entity/Advertising_entity/Advertising_entity.aod | 1 - .../Advertising_entity/entityfields/status/stateProcess.js | 0 entity/Context_entity/Context_entity.aod | 1 - .../children/invertblacklist_param/documentation.adoc | 0 entity/DocumentTemplate_entity/DocumentTemplate_entity.aod | 1 - .../documenttemplateplaceofuse_param/documentation.adoc | 0 .../filterviewactiongroup/children/observe/stateProcess.js | 5 ----- 8 files changed, 12 deletions(-) delete mode 100644 entity/Activity_entity/entityfields/advertisingitemstest/children/rowid_param/valueProcess.js delete mode 100644 entity/Advertising_entity/entityfields/status/stateProcess.js delete mode 100644 entity/Context_entity/entityfields/contexttemplateplaceofuse/children/invertblacklist_param/documentation.adoc delete mode 100644 entity/DocumentTemplate_entity/entityfields/documenttemplateplaceofuse/children/documenttemplateplaceofuse_param/documentation.adoc delete mode 100644 entity/Person_entity/entityfields/filterviewactiongroup/children/observe/stateProcess.js diff --git a/entity/Activity_entity/entityfields/advertisingitemstest/children/rowid_param/valueProcess.js b/entity/Activity_entity/entityfields/advertisingitemstest/children/rowid_param/valueProcess.js deleted file mode 100644 index b5ea578ca5..0000000000 --- a/entity/Activity_entity/entityfields/advertisingitemstest/children/rowid_param/valueProcess.js +++ /dev/null @@ -1,4 +0,0 @@ -import("system.vars"); -import("system.result"); - -result.string(vars.getString("$field.ACTIVITYID")); \ No newline at end of file diff --git a/entity/Advertising_entity/Advertising_entity.aod b/entity/Advertising_entity/Advertising_entity.aod index 83abb94236..0be659078a 100644 --- a/entity/Advertising_entity/Advertising_entity.aod +++ b/entity/Advertising_entity/Advertising_entity.aod @@ -126,7 +126,6 @@ <name>STATUS</name> <title>Status</title> <consumer>KeywordAdvertisingStatus</consumer> - <stateProcess>%aditoprj%/entity/Advertising_entity/entityfields/status/stateProcess.js</stateProcess> <valueProcess>%aditoprj%/entity/Advertising_entity/entityfields/status/valueProcess.js</valueProcess> <displayValueProcess>%aditoprj%/entity/Advertising_entity/entityfields/status/displayValueProcess.js</displayValueProcess> </entityField> diff --git a/entity/Advertising_entity/entityfields/status/stateProcess.js b/entity/Advertising_entity/entityfields/status/stateProcess.js deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/entity/Context_entity/Context_entity.aod b/entity/Context_entity/Context_entity.aod index 0b5ffde90b..063809fea7 100644 --- a/entity/Context_entity/Context_entity.aod +++ b/entity/Context_entity/Context_entity.aod @@ -74,7 +74,6 @@ <name>InvertBlacklist_param</name> <valueProcess>%aditoprj%/entity/Context_entity/entityfields/contexttemplateplaceofuse/children/invertblacklist_param/valueProcess.js</valueProcess> <expose v="true" /> - <documentation>%aditoprj%/entity/Context_entity/entityfields/contexttemplateplaceofuse/children/invertblacklist_param/documentation.adoc</documentation> </entityParameter> <entityParameter> <name>Blacklist_param</name> diff --git a/entity/Context_entity/entityfields/contexttemplateplaceofuse/children/invertblacklist_param/documentation.adoc b/entity/Context_entity/entityfields/contexttemplateplaceofuse/children/invertblacklist_param/documentation.adoc deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/entity/DocumentTemplate_entity/DocumentTemplate_entity.aod b/entity/DocumentTemplate_entity/DocumentTemplate_entity.aod index e414b7ad8f..59d3e3d3a7 100644 --- a/entity/DocumentTemplate_entity/DocumentTemplate_entity.aod +++ b/entity/DocumentTemplate_entity/DocumentTemplate_entity.aod @@ -259,7 +259,6 @@ <name>DocumentTemplatePlaceOfUse_param</name> <valueProcess>%aditoprj%/entity/DocumentTemplate_entity/entityfields/documenttemplateplaceofuse/children/documenttemplateplaceofuse_param/valueProcess.js</valueProcess> <expose v="true" /> - <documentation>%aditoprj%/entity/DocumentTemplate_entity/entityfields/documenttemplateplaceofuse/children/documenttemplateplaceofuse_param/documentation.adoc</documentation> </entityParameter> </children> </entityConsumer> diff --git a/entity/DocumentTemplate_entity/entityfields/documenttemplateplaceofuse/children/documenttemplateplaceofuse_param/documentation.adoc b/entity/DocumentTemplate_entity/entityfields/documenttemplateplaceofuse/children/documenttemplateplaceofuse_param/documentation.adoc deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/entity/Person_entity/entityfields/filterviewactiongroup/children/observe/stateProcess.js b/entity/Person_entity/entityfields/filterviewactiongroup/children/observe/stateProcess.js deleted file mode 100644 index 84fd36a56b..0000000000 --- a/entity/Person_entity/entityfields/filterviewactiongroup/children/observe/stateProcess.js +++ /dev/null @@ -1,5 +0,0 @@ -import("system.vars"); -import("system.result"); -import("Observation_lib"); - -result.string(Observation.actionState(vars.get("$sys.selection"))); \ No newline at end of file -- GitLab From ec35a01a2bf6603b5f56622d496bfe2e23a72867 Mon Sep 17 00:00:00 2001 From: Sebastian Listl <s.listl@adito.de> Date: Mon, 7 Jun 2021 08:50:00 +0200 Subject: [PATCH 233/242] 1081682 serial letter opening error fixed --- .../hascommrestriction.value/expression.js | 4 ++-- process/MarketingCondition_lib/process.js | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) 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 7377540477..680d9a1477 100644 --- a/entity/LetterRecipient_entity/recordcontainers/db/recordfieldmappings/hascommrestriction.value/expression.js +++ b/entity/LetterRecipient_entity/recordcontainers/db/recordfieldmappings/hascommrestriction.value/expression.js @@ -5,8 +5,8 @@ import("system.db"); import("system.result"); import("MarketingCondition_lib"); -var sql = SqlBuilder.caseWhen(new CommunicationSettingsCondition().address().rejected().existSettings().buildCondition()) +var sql = SqlBuilder.caseWhen(new CommunicationSettingsCondition().address("CONTACT.ADDRESS_ID").rejected().existSettings().buildCondition()) .thenString("true") .elseString("false") - .build(); + .toString(); result.string(sql); diff --git a/process/MarketingCondition_lib/process.js b/process/MarketingCondition_lib/process.js index bbabd0e7ce..f6033c7d1a 100644 --- a/process/MarketingCondition_lib/process.js +++ b/process/MarketingCondition_lib/process.js @@ -80,7 +80,10 @@ CommunicationSettingsCondition.prototype.emails = function (pAddressSql) CommunicationSettingsCondition.prototype.address = function (pAddressSql) { this._channelType = $KeywordRegistry.communicationChannelType$address(); - this._channelIdSql = "( "+ pAddressSql + " )"; + if (pAddressSql) + { + this._channelIdSql = "( "+ pAddressSql + " )"; + } return this; } -- GitLab From bfb22cb1f8eed898afa74ecb5c3913cb1e5d91d9 Mon Sep 17 00:00:00 2001 From: Martin Groppe <m.groppe@adito.de> Date: Mon, 7 Jun 2021 07:00:46 +0000 Subject: [PATCH 234/242] =?UTF-8?q?[Projekt:=20xRM-Marketing][TicketNr.:?= =?UTF-8?q?=201080233][Mosaico:=20=C3=9Cber=20Serienmail=20Kontext=20direk?= =?UTF-8?q?t=20aus=20Adito=20heraus=20startbar]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- entity/BulkMail_entity/BulkMail_entity.aod | 7 +++++++ .../entityfields/openmosaico/onActionProcess.js | 4 ++++ .../entityfields/openmosaico/stateProcess.js | 13 +++++++++++++ .../_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod | 6 ++++++ language/_____LANGUAGE_de/_____LANGUAGE_de.aod | 4 ++++ language/_____LANGUAGE_en/_____LANGUAGE_en.aod | 6 ++++++ .../_____PREFERENCES_PROJECT.aod | 5 +++++ 7 files changed, 45 insertions(+) create mode 100644 entity/BulkMail_entity/entityfields/openmosaico/onActionProcess.js create mode 100644 entity/BulkMail_entity/entityfields/openmosaico/stateProcess.js diff --git a/entity/BulkMail_entity/BulkMail_entity.aod b/entity/BulkMail_entity/BulkMail_entity.aod index 5057ec6063..bd6bf06d90 100644 --- a/entity/BulkMail_entity/BulkMail_entity.aod +++ b/entity/BulkMail_entity/BulkMail_entity.aod @@ -381,6 +381,13 @@ <fieldName>#PROVIDER</fieldName> </dependency> </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> diff --git a/entity/BulkMail_entity/entityfields/openmosaico/onActionProcess.js b/entity/BulkMail_entity/entityfields/openmosaico/onActionProcess.js new file mode 100644 index 0000000000..151f3d8d61 --- /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 0000000000..b046fb7ebf --- /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/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index 5e1e844759..06221113c1 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -8632,6 +8632,9 @@ <entry> <key>show all offers with first approval</key> </entry> + <entry> + <key>No advertising</key> + </entry> <entry> <key>[TEST] Importer</key> </entry> @@ -8809,6 +8812,9 @@ <entry> <key>Interest (subscribed)</key> </entry> + <entry> + <key>Open Mosaico</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 8e985c20c8..f540332e63 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -11548,6 +11548,10 @@ Bitte Datumseingabe prüfen</value> <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> diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod index f58c5df072..b7420d158c 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -8717,6 +8717,9 @@ <entry> <key>show all offers with first approval</key> </entry> + <entry> + <key>No advertising</key> + </entry> <entry> <key>[TEST] Importer</key> </entry> @@ -8894,6 +8897,9 @@ <entry> <key>Interest (subscribed)</key> </entry> + <entry> + <key>Open Mosaico</key> + </entry> </keyValueMap> <font name="Dialog" style="0" size="11" /> </language> diff --git a/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod b/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod index 2e5b1523b1..e448ae00cc 100644 --- a/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod +++ b/preferences/_____PREFERENCES_PROJECT/_____PREFERENCES_PROJECT.aod @@ -197,5 +197,10 @@ <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> -- GitLab From 5800d38247620bf08b2f5aac51858c5ed8d278d7 Mon Sep 17 00:00:00 2001 From: Benjamin Ulrich <b.ulrich@adito.de> Date: Mon, 7 Jun 2021 09:28:56 +0000 Subject: [PATCH 235/242] [Projekt: xRM-Sales][TicketNr.: 1078179][Administration der Klassifizierung: Fields am entity-recordContainer] --- .../alter_ClassificationScore.xml | 19 + .../alter_ClassificationType.xml | 16 + .../2021.1.0/Classification/changelog.xml | 5 + .../Data_alias/basic/2021.1.0/changelog.xml | 1 + .../generatedData/classificationgrading.xml | 212 +- .../generatedData/classificationgroup.xml | 31 +- .../generatedData/classificationscore.xml | 1440 +++++++------- .../generatedData/classificationstorage.xml | 140 +- .../generatedData/classificationtype.xml | 279 ++- aliasDefinition/Data_alias/Data_alias.aod | 98 + .../ClassificationAdmin_entity.aod | 42 +- .../documentation.adoc | 26 +- .../dropDownProcess.js | 3 +- .../stateProcess.js | 13 +- .../filterTreeExcludedFieldsProcess.js | 2 +- .../stateProcess.js | 12 - .../valueProcess.js | 21 - .../entityfields/field/dropDownProcess.js | 21 + .../entityfields/field/mandatoryProcess.js | 10 + .../entityfields/field/onValueChange.js | 89 + .../entityfields/field/stateProcess.js | 20 + .../onActionProcess.js | 2 - .../onActionProcess.js | 0 .../entityfields/object_type/onValueChange.js | 8 +- .../recordcontainers/jdito/contentProcess.js | 66 +- .../recordcontainers/jdito/onDelete.js | 81 +- .../recordcontainers/jdito/onInsert.js | 75 +- .../recordcontainers/jdito/onUpdate.js | 94 +- .../ClassificationGrading_entity.aod | 4 +- .../documentation.adoc | 2 +- .../recordcontainers/db/onDBInsert.js | 2 +- .../ClassificationScore_entity.aod | 73 +- .../contentTitleProcess.js | 4 +- .../documentation.adoc | 18 +- .../classificationscoreid/valueProcess.js | 6 +- .../classificationtype_id/valueProcess.js | 6 +- .../displayvaluefortitlefield/stateProcess.js | 6 + .../displayvaluefortitlefield/valueProcess.js | 31 + .../filterTreeExcludedFieldsProcess.js | 102 + .../entityfields/fieldvalue/onValueChange.js | 0 .../entityfields/fieldvalue/stateProcess.js | 9 + .../entityfields/fieldvalue/valueProcess.js | 18 + .../indicatorinteger/mandatoryProcess.js | 8 + .../indicatorinteger/stateProcess.js | 7 + .../indicatornumber/mandatoryProcess.js | 8 + .../indicatornumber/stateProcess.js | 7 + .../indicatortext/dropDownProcess.js | 16 + .../indicatortext/mandatoryProcess.js | 14 + .../indicatortext/stateProcess.js | 9 + .../onValidation.js | 0 .../recordcontainers/db/onDBInsert.js | 8 + .../recordcontainers/db/onDBUpdate.js | 4 +- .../ClassificationType_entity.aod | 26 + .../documentation.adoc | 14 +- .../valueProcess.js | 12 + .../classificationscores/onValidation.js | 56 + .../Classification_entity.aod | 71 +- .../classificationgroup/mandatoryProcess.js | 5 - .../classificationtype_param/valueProcess.js | 2 - .../classificationtypeid/stateProcess.js | 8 - .../classificationtypeid/valueProcess.js | 8 - .../onActionProcess.js | 18 - .../entityfields/groupscore/valueProcess.js | 15 - .../entityfields/info/displayValueProcess.js | 26 - .../entityfields/object_rowid/valueProcess.js | 8 - .../entityfields/object_type/valueProcess.js | 6 - .../scoretype/displayValueProcess.js | 5 - .../entityfields/value/displayValueProcess.js | 19 - .../recordcontainers/jdito/contentProcess.js | 561 +----- .../recordcontainers/jdito/onUpdate.js | 11 - entity/Forecast_entity/Forecast_entity.aod | 3 + .../recordcontainers/db/onDBDelete.js | 3 + .../recordcontainers/db/onDBInsert.js | 3 + .../recordcontainers/db/onDBUpdate.js | 3 + .../Organisation_entity.aod | 15 +- .../onActionProcess.js | 7 + .../filterConditionProcess.js | 6 - .../filterFieldsProcess.js | 8 - .../filterValuesProcess.js | 5 - .../groupQueryProcess.js | 28 - .../Salesproject_entity.aod | 15 +- .../onActionProcess.js | 7 + .../filterConditionProcess.js | 6 - .../filterFieldsProcess.js | 7 - .../filterValuesProcess.js | 5 - .../groupQueryProcess.js | 26 - entity/Turnover_entity/Turnover_entity.aod | 7 - .../filterFieldsProcess.js | 6 - .../filterValuesProcess.js | 5 - .../_____LANGUAGE_EXTRA.aod | 51 + .../_____LANGUAGE_de/_____LANGUAGE_de.aod | 66 + .../_____LANGUAGE_en/_____LANGUAGE_en.aod | 51 + neonContext/Classification/Classification.aod | 2 - .../ClassificationAdminEdit_view.aod | 12 +- .../ClassificationAdminFilter_view.aod | 4 + .../ClassificationPreview_view.aod | 47 - .../ClassificationScoreMultipleEdit_view.aod | 22 +- .../ClassificationTree_view.aod | 14 +- .../ClassificationTypePreview_View.aod | 4 - .../OrganisationMain_view.aod | 5 - .../SalesprojectMain_view.aod | 5 - ...ficationComplexIndicatorRegistry_basic.aod | 10 + .../process.js | 314 +++ process/ClassificationFilter_lib/process.js | 155 +- ...sificationIndicatorFieldRegistry_basic.aod | 10 + .../process.js | 68 + .../ClassificationUpdate_lib.aod | 10 + process/ClassificationUpdate_lib/process.js | 1756 +++++++++++++++++ process/Classification_lib/process.js | 257 ++- .../documentation.adoc | 16 +- .../process.js | 938 +-------- 111 files changed, 4650 insertions(+), 3391 deletions(-) create mode 100644 .liquibase/Data_alias/basic/2021.1.0/Classification/alter_ClassificationScore.xml create mode 100644 .liquibase/Data_alias/basic/2021.1.0/Classification/alter_ClassificationType.xml create mode 100644 .liquibase/Data_alias/basic/2021.1.0/Classification/changelog.xml delete mode 100644 entity/ClassificationAdmin_entity/entityfields/classificationtypeiddisplayvalue/stateProcess.js delete mode 100644 entity/ClassificationAdmin_entity/entityfields/classificationtypeiddisplayvalue/valueProcess.js create mode 100644 entity/ClassificationAdmin_entity/entityfields/field/dropDownProcess.js create mode 100644 entity/ClassificationAdmin_entity/entityfields/field/mandatoryProcess.js create mode 100644 entity/ClassificationAdmin_entity/entityfields/field/onValueChange.js create mode 100644 entity/ClassificationAdmin_entity/entityfields/field/stateProcess.js rename entity/ClassificationAdmin_entity/entityfields/filterviewactiongroup/children/{updateclassification => updateclassifications}/onActionProcess.js (100%) create mode 100644 entity/ClassificationScore_entity/entityfields/displayvaluefortitlefield/stateProcess.js create mode 100644 entity/ClassificationScore_entity/entityfields/displayvaluefortitlefield/valueProcess.js create mode 100644 entity/ClassificationScore_entity/entityfields/fieldvalue/filterTreeExcludedFieldsProcess.js create mode 100644 entity/ClassificationScore_entity/entityfields/fieldvalue/onValueChange.js create mode 100644 entity/ClassificationScore_entity/entityfields/fieldvalue/stateProcess.js create mode 100644 entity/ClassificationScore_entity/entityfields/fieldvalue/valueProcess.js create mode 100644 entity/ClassificationScore_entity/entityfields/indicatorinteger/mandatoryProcess.js create mode 100644 entity/ClassificationScore_entity/entityfields/indicatorinteger/stateProcess.js create mode 100644 entity/ClassificationScore_entity/entityfields/indicatornumber/mandatoryProcess.js create mode 100644 entity/ClassificationScore_entity/entityfields/indicatornumber/stateProcess.js create mode 100644 entity/ClassificationScore_entity/entityfields/indicatortext/dropDownProcess.js create mode 100644 entity/ClassificationScore_entity/entityfields/indicatortext/mandatoryProcess.js create mode 100644 entity/ClassificationScore_entity/entityfields/indicatortext/stateProcess.js create mode 100644 entity/ClassificationScore_entity/onValidation.js create mode 100644 entity/ClassificationScore_entity/recordcontainers/db/onDBInsert.js create mode 100644 entity/ClassificationType_entity/entityfields/classificationscores/children/classificationtypeinfo_param/valueProcess.js create mode 100644 entity/ClassificationType_entity/entityfields/classificationscores/onValidation.js delete mode 100644 entity/Classification_entity/entityfields/classificationgroup/mandatoryProcess.js delete mode 100644 entity/Classification_entity/entityfields/classificationtypeid/stateProcess.js delete mode 100644 entity/Classification_entity/entityfields/classificationtypeid/valueProcess.js delete mode 100644 entity/Classification_entity/entityfields/fitlerviewactiongroup/children/refreshclassificationsofthisdataset/onActionProcess.js delete mode 100644 entity/Classification_entity/entityfields/groupscore/valueProcess.js delete mode 100644 entity/Classification_entity/entityfields/info/displayValueProcess.js delete mode 100644 entity/Classification_entity/entityfields/object_rowid/valueProcess.js delete mode 100644 entity/Classification_entity/entityfields/object_type/valueProcess.js delete mode 100644 entity/Classification_entity/entityfields/scoretype/displayValueProcess.js delete mode 100644 entity/Classification_entity/entityfields/value/displayValueProcess.js delete mode 100644 entity/Classification_entity/recordcontainers/jdito/onUpdate.js create mode 100644 entity/Forecast_entity/recordcontainers/db/onDBDelete.js create mode 100644 entity/Forecast_entity/recordcontainers/db/onDBInsert.js create mode 100644 entity/Forecast_entity/recordcontainers/db/onDBUpdate.js create mode 100644 entity/Organisation_entity/entityfields/openclassificationoverview/onActionProcess.js delete mode 100644 entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterConditionProcess.js delete mode 100644 entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterFieldsProcess.js delete mode 100644 entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterValuesProcess.js delete mode 100644 entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/groupQueryProcess.js create mode 100644 entity/Salesproject_entity/entityfields/openclassificationoverview/onActionProcess.js delete mode 100644 entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterConditionProcess.js delete mode 100644 entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterFieldsProcess.js delete mode 100644 entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterValuesProcess.js delete mode 100644 entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/groupQueryProcess.js delete mode 100644 entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/classificationtype_filter/filterFieldsProcess.js delete mode 100644 entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/classificationtype_filter/filterValuesProcess.js delete mode 100644 neonView/ClassificationPreview_view/ClassificationPreview_view.aod create mode 100644 process/ClassificationComplexIndicatorRegistry_basic/ClassificationComplexIndicatorRegistry_basic.aod create mode 100644 process/ClassificationComplexIndicatorRegistry_basic/process.js create mode 100644 process/ClassificationIndicatorFieldRegistry_basic/ClassificationIndicatorFieldRegistry_basic.aod create mode 100644 process/ClassificationIndicatorFieldRegistry_basic/process.js create mode 100644 process/ClassificationUpdate_lib/ClassificationUpdate_lib.aod create mode 100644 process/ClassificationUpdate_lib/process.js 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 0000000000..8e611914be --- /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 0000000000..f605a6d0e9 --- /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 0000000000..ea5caaa5d1 --- /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/changelog.xml b/.liquibase/Data_alias/basic/2021.1.0/changelog.xml index 9709b5188f..b44ea997ce 100644 --- a/.liquibase/Data_alias/basic/2021.1.0/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.1.0/changelog.xml @@ -3,6 +3,7 @@ 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"/> diff --git a/.liquibase/Data_alias/basic/_demoData/generatedData/classificationgrading.xml b/.liquibase/Data_alias/basic/_demoData/generatedData/classificationgrading.xml index 2e68fcc50a..291fb3795a 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 61598f100b..127844a603 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 c4e7fabc5d..27cee38103 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 e212d1053b..32b733dd13 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 979cafb44d..4463565946 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/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod index af12a5f42b..90477aa561 100644 --- a/aliasDefinition/Data_alias/Data_alias.aod +++ b/aliasDefinition/Data_alias/Data_alias.aod @@ -9787,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> @@ -9995,6 +10037,62 @@ <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" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> </entityFields> </entityDb> <entityDb> diff --git a/entity/ClassificationAdmin_entity/ClassificationAdmin_entity.aod b/entity/ClassificationAdmin_entity/ClassificationAdmin_entity.aod index 264b4d4233..6d1f4898e6 100644 --- a/entity/ClassificationAdmin_entity/ClassificationAdmin_entity.aod +++ b/entity/ClassificationAdmin_entity/ClassificationAdmin_entity.aod @@ -91,9 +91,9 @@ <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 server process manually, which will recalculate all (potentially) outdated classifications. This process should be executed after changes to the classification configuration.</tooltip> </entityActionField> @@ -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 52829958f6..4fa1c03050 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 917fbdf4fd..226ff90e56 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 75628dd48b..53859257bf 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 cf03254dee..448b8a6881 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 9366c2e0e8..0000000000 --- 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 85208cfbe4..0000000000 --- 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 0000000000..cb06d13166 --- /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 0000000000..34103c074e --- /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 0000000000..f50ea67a8b --- /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 0000000000..7b0636d5c5 --- /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 a8ccdd28cc..130f76a229 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 22539b26e0..1dbd39f8e4 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 4022fc575b..8a2d00bece 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 57378b99c7..d436e8067f 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 687c5a1a47..63490869f5 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 9a9e04cfd7..f54db92f29 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 2ade3b1f97..bb15b3c717 100644 --- a/entity/ClassificationGrading_entity/ClassificationGrading_entity.aod +++ b/entity/ClassificationGrading_entity/ClassificationGrading_entity.aod @@ -16,7 +16,7 @@ </entityField> <entityField> <name>GRADING</name> - <title>Scoretype</title> + <title>Grading</title> </entityField> <entityField> <name>CLASSIFICATIONGROUP_ID</name> @@ -44,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 9638714b06..3b060496fb 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 9c06240960..02b185c19d 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/ClassificationScore_entity/ClassificationScore_entity.aod b/entity/ClassificationScore_entity/ClassificationScore_entity.aod index 55ab29ac71..de2b879dbd 100644 --- a/entity/ClassificationScore_entity/ClassificationScore_entity.aod +++ b/entity/ClassificationScore_entity/ClassificationScore_entity.aod @@ -5,6 +5,7 @@ <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 a32d1c4fcc..78abc419e0 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 8d280e34f8..2610527000 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 394e2a4a03..24e8467f15 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 8806f470d9..186858e8e7 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 0000000000..ceb8b4c2e6 --- /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 0000000000..03b0db7617 --- /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 0000000000..1741b0560d --- /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/ClassificationScore_entity/entityfields/fieldvalue/onValueChange.js b/entity/ClassificationScore_entity/entityfields/fieldvalue/onValueChange.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/entity/ClassificationScore_entity/entityfields/fieldvalue/stateProcess.js b/entity/ClassificationScore_entity/entityfields/fieldvalue/stateProcess.js new file mode 100644 index 0000000000..fa537cdef8 --- /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 0000000000..773f1925cc --- /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 0000000000..93d9930ec5 --- /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 0000000000..093ba4b941 --- /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 0000000000..218dc09e20 --- /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 0000000000..412a3e1337 --- /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 0000000000..8fb59508d1 --- /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 0000000000..8e4b65df0e --- /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 0000000000..c39e741b11 --- /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/ClassificationScore_entity/onValidation.js b/entity/ClassificationScore_entity/onValidation.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/entity/ClassificationScore_entity/recordcontainers/db/onDBInsert.js b/entity/ClassificationScore_entity/recordcontainers/db/onDBInsert.js new file mode 100644 index 0000000000..1d7a46d81d --- /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 c9d29f0a6e..1d7a46d81d 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 8284348cbd..4aadb51b31 100644 --- a/entity/ClassificationType_entity/ClassificationType_entity.aod +++ b/entity/ClassificationType_entity/ClassificationType_entity.aod @@ -32,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> @@ -46,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> @@ -80,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> @@ -114,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 ec1b4d8a15..e2fa391d6f 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 0000000000..c40502a50f --- /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 0000000000..d6bba21874 --- /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 086574ccbc..5dfcffcc83 100644 --- a/entity/Classification_entity/Classification_entity.aod +++ b/entity/Classification_entity/Classification_entity.aod @@ -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> @@ -46,9 +42,6 @@ <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> @@ -56,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> @@ -92,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> @@ -121,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> @@ -137,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> @@ -166,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> @@ -184,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> @@ -196,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 7bbc5aa02d..0000000000 --- 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 66d1a9ae5a..49cfe957ff 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/classificationtypeid/stateProcess.js b/entity/Classification_entity/entityfields/classificationtypeid/stateProcess.js deleted file mode 100644 index d2c0dd18db..0000000000 --- a/entity/Classification_entity/entityfields/classificationtypeid/stateProcess.js +++ /dev/null @@ -1,8 +0,0 @@ -import("system.result"); -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 diff --git a/entity/Classification_entity/entityfields/classificationtypeid/valueProcess.js b/entity/Classification_entity/entityfields/classificationtypeid/valueProcess.js deleted file mode 100644 index 2bccd5eb7f..0000000000 --- a/entity/Classification_entity/entityfields/classificationtypeid/valueProcess.js +++ /dev/null @@ -1,8 +0,0 @@ -import("system.result"); -import("system.neon"); -import("system.vars"); - -if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW) -{ - result.string(vars.get("$param.ClassificationType_param")); -} \ 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 10cfa6bda2..0000000000 --- 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 f711050aab..0000000000 --- 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 8cc250e8c5..0000000000 --- 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 fe14f896ec..0000000000 --- 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 f51252e64a..0000000000 --- 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/scoretype/displayValueProcess.js b/entity/Classification_entity/entityfields/scoretype/displayValueProcess.js deleted file mode 100644 index 87d569a0e2..0000000000 --- a/entity/Classification_entity/entityfields/scoretype/displayValueProcess.js +++ /dev/null @@ -1,5 +0,0 @@ -import("system.vars"); -import("system.translate"); -import("system.result"); - -result.string(translate.text(vars.get("$field.SCORETYPE"))); \ 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 142bdf632c..0000000000 --- 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 9012ad499c..241ef0e013 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 cae77afa19..0000000000 --- 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/Forecast_entity/Forecast_entity.aod b/entity/Forecast_entity/Forecast_entity.aod index 126a8bbcf9..c5ca5ac38a 100644 --- a/entity/Forecast_entity/Forecast_entity.aod +++ b/entity/Forecast_entity/Forecast_entity.aod @@ -127,6 +127,9 @@ <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> diff --git a/entity/Forecast_entity/recordcontainers/db/onDBDelete.js b/entity/Forecast_entity/recordcontainers/db/onDBDelete.js new file mode 100644 index 0000000000..6ff91a5eb3 --- /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 0000000000..54f0349c9f --- /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 0000000000..2e53f3cad9 --- /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/Organisation_entity/Organisation_entity.aod b/entity/Organisation_entity/Organisation_entity.aod index 2d89d5020c..1d08483c9c 100644 --- a/entity/Organisation_entity/Organisation_entity.aod +++ b/entity/Organisation_entity/Organisation_entity.aod @@ -1363,6 +1363,12 @@ </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> @@ -1608,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> diff --git a/entity/Organisation_entity/entityfields/openclassificationoverview/onActionProcess.js b/entity/Organisation_entity/entityfields/openclassificationoverview/onActionProcess.js new file mode 100644 index 0000000000..20382b740f --- /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/recordcontainers/db/filterextensions/classificationtype_filter/filterConditionProcess.js b/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterConditionProcess.js deleted file mode 100644 index 5875efb769..0000000000 --- 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 eebe4d8382..0000000000 --- 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/filterValuesProcess.js b/entity/Organisation_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterValuesProcess.js deleted file mode 100644 index 488499064a..0000000000 --- a/entity/Organisation_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); \ 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 bffcdb6a1e..0000000000 --- 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/Salesproject_entity/Salesproject_entity.aod b/entity/Salesproject_entity/Salesproject_entity.aod index 3b30e194f2..db4b360e28 100644 --- a/entity/Salesproject_entity/Salesproject_entity.aod +++ b/entity/Salesproject_entity/Salesproject_entity.aod @@ -849,6 +849,12 @@ </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> @@ -1050,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> diff --git a/entity/Salesproject_entity/entityfields/openclassificationoverview/onActionProcess.js b/entity/Salesproject_entity/entityfields/openclassificationoverview/onActionProcess.js new file mode 100644 index 0000000000..409ae146ee --- /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/recordcontainers/db/filterextensions/classificationtype_filter/filterConditionProcess.js b/entity/Salesproject_entity/recordcontainers/db/filterextensions/classificationtype_filter/filterConditionProcess.js deleted file mode 100644 index 5875efb769..0000000000 --- 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 b2cf16be60..0000000000 --- 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 541cc6c67c..0000000000 --- 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 2120bd1a53..0000000000 --- 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/Turnover_entity/Turnover_entity.aod b/entity/Turnover_entity/Turnover_entity.aod index 2cd511e112..b36977240a 100644 --- a/entity/Turnover_entity/Turnover_entity.aod +++ b/entity/Turnover_entity/Turnover_entity.aod @@ -310,13 +310,6 @@ <isGroupable v="false" /> <filtertype>EXTENDED</filtertype> </filterExtensionSet> - <filterExtensionSet> - <name>ClassificationType_filter</name> - <filterFieldsProcess>%aditoprj%/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/classificationtype_filter/filterFieldsProcess.js</filterFieldsProcess> - <filterValuesProcess>%aditoprj%/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/classificationtype_filter/filterValuesProcess.js</filterValuesProcess> - <isGroupable v="false" /> - <filtertype>EXTENDED</filtertype> - </filterExtensionSet> <filterExtension> <name>OrgCountry_filter</name> <title>Organisation Country</title> diff --git a/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/classificationtype_filter/filterFieldsProcess.js b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/classificationtype_filter/filterFieldsProcess.js deleted file mode 100644 index 973583180e..0000000000 --- a/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/classificationtype_filter/filterFieldsProcess.js +++ /dev/null @@ -1,6 +0,0 @@ -import("system.vars"); -import("system.result"); -import("ClassificationFilter_lib"); - -var fields = ClassificationTypeFilterUtils.getFilterFields("Organisation"); -result.string(fields); \ No newline at end of file diff --git a/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/classificationtype_filter/filterValuesProcess.js b/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/classificationtype_filter/filterValuesProcess.js deleted file mode 100644 index 488499064a..0000000000 --- a/entity/Turnover_entity/recordcontainers/jditodynamicmultidatachart/filterextensions/classificationtype_filter/filterValuesProcess.js +++ /dev/null @@ -1,5 +0,0 @@ -import("system.result"); -import("ClassificationFilter_lib"); - -var values = ClassificationTypeFilterUtils.makeFilterFields(); -result.object(values); \ No newline at end of file diff --git a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index e0f78e2de4..f7ab04b504 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -8812,6 +8812,57 @@ <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 3f4b2bc518..1e9b406ae7 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -10654,6 +10654,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> @@ -10855,6 +10856,7 @@ Bitte Datumseingabe prüfen</value> </entry> <entry> <key>Percent</key> + <value>Prozent</value> </entry> <entry> <key>Prev</key> @@ -11571,6 +11573,70 @@ Bitte Datumseingabe prüfen</value> <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 c5438335a2..2086f746b7 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -8897,6 +8897,57 @@ <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/Classification/Classification.aod b/neonContext/Classification/Classification.aod index 07bc147120..30512179e4 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/neonView/ClassificationAdminEdit_view/ClassificationAdminEdit_view.aod b/neonView/ClassificationAdminEdit_view/ClassificationAdminEdit_view.aod index 84950dabea..9a437afea6 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 14e2c43328..e454baf2c5 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 f97be47068..0000000000 --- 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 ca2ae66ae1..f0cb233d7a 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 6607bad059..d625b2e6f3 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 e2b699ea8f..6d8252d4e0 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/OrganisationMain_view/OrganisationMain_view.aod b/neonView/OrganisationMain_view/OrganisationMain_view.aod index 9cef248c5a..fcdacbfe67 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> diff --git a/neonView/SalesprojectMain_view/SalesprojectMain_view.aod b/neonView/SalesprojectMain_view/SalesprojectMain_view.aod index c13e9fc067..4adb5c12f6 100644 --- a/neonView/SalesprojectMain_view/SalesprojectMain_view.aod +++ b/neonView/SalesprojectMain_view/SalesprojectMain_view.aod @@ -24,11 +24,6 @@ <element>DESKTOP</element> </devices> </neonViewReference> - <neonViewReference> - <name>d0c1344f-c143-43b4-9c44-f823fb525eff</name> - <entityField>Classifications</entityField> - <view>ClassificationTree_view</view> - </neonViewReference> <neonViewReference> <name>8a83afee-e02c-4714-9641-13b62c95cea1</name> <entityField>#ENTITY</entityField> diff --git a/process/ClassificationComplexIndicatorRegistry_basic/ClassificationComplexIndicatorRegistry_basic.aod b/process/ClassificationComplexIndicatorRegistry_basic/ClassificationComplexIndicatorRegistry_basic.aod new file mode 100644 index 0000000000..05d0390e09 --- /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 0000000000..67ab0b2771 --- /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 bf51b65574..b8f9200553 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 @@ -341,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; }; @@ -436,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 0000000000..daaa98ed0f --- /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 0000000000..24d723a083 --- /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 0000000000..b288b71365 --- /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 0000000000..7f287cfef0 --- /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] = 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] = 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] = 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] = 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] = 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 25419ec3b8..db81046fd7 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/updateClassifications_serverProcess/documentation.adoc b/process/updateClassifications_serverProcess/documentation.adoc index fd053e82fc..67d5c667ce 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 5777f187a6..237a3c92b9 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 -- GitLab From 51e023e47f430c1955bd61613fb24527743ee18d Mon Sep 17 00:00:00 2001 From: Carolin Wimmer <c.wimmer@adito.de> Date: Mon, 7 Jun 2021 09:44:57 +0000 Subject: [PATCH 236/242] [Projekt: xRM-Sales][TicketNr.: 1079788][Besuchsvorschlag - Erweiterung der FilterView um die Kartendarstellung analog in der Firma] --- .../VisitPlanEntry_entity.aod | 27 ++++++++ .../displayValueProcess.js | 5 ++ .../visitrecommendation_id/onValueChange.js | 16 +++++ .../visitrecommendation_id/stateProcess.js | 10 +++ .../prioritysource_param/valueProcess.js | 4 ++ .../valueProcess.js | 4 ++ .../VisitRecommendation_entity.aod | 69 +++++++++++++++++++ .../contentTitleProcess.js | 7 ++ .../entityfields/map_config/valueProcess.js | 23 +++++++ .../map_marker_color/valueProcess.js | 26 +++++++ .../mapviewcenterlat_param/documentation.adoc | 2 + .../mapviewcenterlat_param/valueProcess.js | 2 + .../mapviewcenterlon_param/documentation.adoc | 2 + .../mapviewcenterlon_param/valueProcess.js | 2 + .../newvisitplaneentry/onActionProcess.js | 1 + .../recordcontainers/jdito/contentProcess.js | 63 +++++++++++++++-- .../VisitRecommendation.aod | 1 + .../VisitPlanEntryEdit_view.aod | 4 ++ .../VisitRecommendationFilter_view.aod | 10 +++ process/JditoFilter_lib/process.js | 9 +-- 20 files changed, 276 insertions(+), 11 deletions(-) create mode 100644 entity/VisitPlanEntry_entity/entityfields/visitrecommendation_id/displayValueProcess.js create mode 100644 entity/VisitPlanEntry_entity/entityfields/visitrecommendation_id/onValueChange.js create mode 100644 entity/VisitPlanEntry_entity/entityfields/visitrecommendation_id/stateProcess.js create mode 100644 entity/VisitPlanEntry_entity/entityfields/visitrecommendations/children/prioritysource_param/valueProcess.js create mode 100644 entity/VisitPlanEntry_entity/entityfields/visitrecommendations/children/visitrecommendationid_param/valueProcess.js create mode 100644 entity/VisitRecommendation_entity/contentTitleProcess.js create mode 100644 entity/VisitRecommendation_entity/entityfields/map_config/valueProcess.js create mode 100644 entity/VisitRecommendation_entity/entityfields/map_marker_color/valueProcess.js create mode 100644 entity/VisitRecommendation_entity/entityfields/mapviewcenterlat_param/documentation.adoc create mode 100644 entity/VisitRecommendation_entity/entityfields/mapviewcenterlat_param/valueProcess.js create mode 100644 entity/VisitRecommendation_entity/entityfields/mapviewcenterlon_param/documentation.adoc create mode 100644 entity/VisitRecommendation_entity/entityfields/mapviewcenterlon_param/valueProcess.js diff --git a/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod b/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod index b2bbe781db..9f368889ff 100644 --- a/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod +++ b/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod @@ -188,7 +188,12 @@ </entityField> <entityField> <name>VISITRECOMMENDATION_ID</name> + <title>Visit Recommendation</title> + <consumer>Visitrecommendations</consumer> + <stateProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/visitrecommendation_id/stateProcess.js</stateProcess> <valueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/visitrecommendation_id/valueProcess.js</valueProcess> + <displayValueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/visitrecommendation_id/displayValueProcess.js</displayValueProcess> + <onValueChange>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/visitrecommendation_id/onValueChange.js</onValueChange> </entityField> <entityField> <name>APPOINTMENT_ID</name> @@ -285,6 +290,28 @@ <name>VisitrecommendationId_param</name> <expose v="true" /> </entityParameter> + <entityConsumer> + <name>Visitrecommendations</name> + <dependency> + <name>dependency</name> + <entityName>VisitRecommendation_entity</entityName> + <fieldName>#PROVIDER</fieldName> + </dependency> + <children> + <entityParameter> + <name>VisitrecommendationId_param</name> + <valueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/visitrecommendations/children/visitrecommendationid_param/valueProcess.js</valueProcess> + </entityParameter> + <entityParameter> + <name>PrioritySource_param</name> + <valueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/visitrecommendations/children/prioritysource_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityParameter> + <name>PrioritySource_param</name> + <expose v="true" /> + </entityParameter> </entityFields> <recordContainers> <jDitoRecordContainer> diff --git a/entity/VisitPlanEntry_entity/entityfields/visitrecommendation_id/displayValueProcess.js b/entity/VisitPlanEntry_entity/entityfields/visitrecommendation_id/displayValueProcess.js new file mode 100644 index 0000000000..5b65509fef --- /dev/null +++ b/entity/VisitPlanEntry_entity/entityfields/visitrecommendation_id/displayValueProcess.js @@ -0,0 +1,5 @@ +import("system.vars"); +import("system.result"); +import("Context_lib"); + +result.string(ContextUtils.loadContentTitle("VisitRecommendation_entity", vars.get("$field.VISITRECOMMENDATION_ID"))); \ No newline at end of file diff --git a/entity/VisitPlanEntry_entity/entityfields/visitrecommendation_id/onValueChange.js b/entity/VisitPlanEntry_entity/entityfields/visitrecommendation_id/onValueChange.js new file mode 100644 index 0000000000..bb550f5c61 --- /dev/null +++ b/entity/VisitPlanEntry_entity/entityfields/visitrecommendation_id/onValueChange.js @@ -0,0 +1,16 @@ +import("KeywordRegistry_basic"); +import("system.logging"); +import("system.neon"); +import("system.vars"); +import("Sql_lib"); + + +if(vars.get("$param.PrioritySource_param") == $KeywordRegistry.visitRecommendationPrioSource$manual()) +{ + var Ids = newSelect("CONTACT_ID, CONTACT_PERSON_ID").from("VISITRECOMMENDATION") + .where("VISITRECOMMENDATION.VISITRECOMMENDATIONID", vars.get("$local.value")) + .arrayRow() + + neon.setFieldValue("$field.CONTACT_ID", Ids[1]); + neon.setFieldValue("$field.ORGANISATION_CONTACT_ID", Ids[0]); +} diff --git a/entity/VisitPlanEntry_entity/entityfields/visitrecommendation_id/stateProcess.js b/entity/VisitPlanEntry_entity/entityfields/visitrecommendation_id/stateProcess.js new file mode 100644 index 0000000000..fcc4878c47 --- /dev/null +++ b/entity/VisitPlanEntry_entity/entityfields/visitrecommendation_id/stateProcess.js @@ -0,0 +1,10 @@ +import("system.result"); +import("KeywordRegistry_basic"); +import("system.vars"); +import("Sql_lib"); +import("system.neon") + +if(vars.get("$param.PrioritySource_param") == $KeywordRegistry.visitRecommendationPrioSource$visitFrequency()) +{ + result.string(neon.COMPONENTSTATE_INVISIBLE) +} diff --git a/entity/VisitPlanEntry_entity/entityfields/visitrecommendations/children/prioritysource_param/valueProcess.js b/entity/VisitPlanEntry_entity/entityfields/visitrecommendations/children/prioritysource_param/valueProcess.js new file mode 100644 index 0000000000..a5dbcbd2d3 --- /dev/null +++ b/entity/VisitPlanEntry_entity/entityfields/visitrecommendations/children/prioritysource_param/valueProcess.js @@ -0,0 +1,4 @@ +import("KeywordRegistry_basic"); +import("system.result"); + +result.string($KeywordRegistry.visitRecommendationPrioSource$manual()); \ No newline at end of file diff --git a/entity/VisitPlanEntry_entity/entityfields/visitrecommendations/children/visitrecommendationid_param/valueProcess.js b/entity/VisitPlanEntry_entity/entityfields/visitrecommendations/children/visitrecommendationid_param/valueProcess.js new file mode 100644 index 0000000000..25f8033cfa --- /dev/null +++ b/entity/VisitPlanEntry_entity/entityfields/visitrecommendations/children/visitrecommendationid_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("system.result"); + +result.string(vars.get("$field.VISITRECOMMENDATION_ID")); \ No newline at end of file diff --git a/entity/VisitRecommendation_entity/VisitRecommendation_entity.aod b/entity/VisitRecommendation_entity/VisitRecommendation_entity.aod index 122aecbad7..857530448d 100644 --- a/entity/VisitRecommendation_entity/VisitRecommendation_entity.aod +++ b/entity/VisitRecommendation_entity/VisitRecommendation_entity.aod @@ -7,6 +7,7 @@ <grantCreate v="true" /> <grantUpdateProcess>%aditoprj%/entity/VisitRecommendation_entity/grantUpdateProcess.js</grantUpdateProcess> <grantDeleteProcess>%aditoprj%/entity/VisitRecommendation_entity/grantDeleteProcess.js</grantDeleteProcess> + <contentTitleProcess>%aditoprj%/entity/VisitRecommendation_entity/contentTitleProcess.js</contentTitleProcess> <initFilterProcess>%aditoprj%/entity/VisitRecommendation_entity/initFilterProcess.js</initFilterProcess> <iconId>VAADIN:BRIEFCASE</iconId> <image>VAADIN:BRIEFCASE</image> @@ -18,6 +19,20 @@ <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> + <entityDependency> + <name>3c5d510c-f7b3-401a-99cc-36b8e86c18f1</name> + <entityName>VisitPlanEntry_entity</entityName> + <fieldName>Visitrecommendations</fieldName> + <isConsumer v="false" /> + </entityDependency> + </dependencies> </entityProvider> <entityField> <name>CONTACT_ID</name> @@ -155,6 +170,10 @@ <contentType>IMAGE</contentType> <valueProcess>%aditoprj%/entity/VisitRecommendation_entity/entityfields/icon/valueProcess.js</valueProcess> </entityField> + <entityField> + <name>MAP_MARKER_COLOR</name> + <valueProcess>%aditoprj%/entity/VisitRecommendation_entity/entityfields/map_marker_color/valueProcess.js</valueProcess> + </entityField> <entityField> <name>TARGET_CONTEXT</name> <valueProcess>%aditoprj%/entity/VisitRecommendation_entity/entityfields/target_context/valueProcess.js</valueProcess> @@ -247,6 +266,44 @@ <name>TARGET_ID</name> <valueProcess>%aditoprj%/entity/VisitRecommendation_entity/entityfields/target_id/valueProcess.js</valueProcess> </entityField> + <entityField> + <name>LAT</name> + <contentType>NUMBER</contentType> + </entityField> + <entityField> + <name>LON</name> + <contentType>NUMBER</contentType> + </entityField> + <entityField> + <name>ADDRESS_ID</name> + </entityField> + <entityField> + <name>MAP_CONFIG</name> + <valueProcess>%aditoprj%/entity/VisitRecommendation_entity/entityfields/map_config/valueProcess.js</valueProcess> + </entityField> + <entityParameter> + <name>MapViewCenterLat_param</name> + <valueProcess>%aditoprj%/entity/VisitRecommendation_entity/entityfields/mapviewcenterlat_param/valueProcess.js</valueProcess> + <expose v="true" /> + <documentation>%aditoprj%/entity/VisitRecommendation_entity/entityfields/mapviewcenterlat_param/documentation.adoc</documentation> + </entityParameter> + <entityParameter> + <name>MapViewCenterLon_param</name> + <valueProcess>%aditoprj%/entity/VisitRecommendation_entity/entityfields/mapviewcenterlon_param/valueProcess.js</valueProcess> + <expose v="true" /> + <documentation>%aditoprj%/entity/VisitRecommendation_entity/entityfields/mapviewcenterlon_param/documentation.adoc</documentation> + </entityParameter> + <entityField> + <name>MAP_FEATURE_COLLECTION</name> + </entityField> + <entityParameter> + <name>VisitrecommendationId_param</name> + <expose v="true" /> + </entityParameter> + <entityParameter> + <name>PrioritySource_param</name> + <expose v="true" /> + </entityParameter> </entityFields> <recordContainers> <jDitoRecordContainer> @@ -336,6 +393,18 @@ <isFilterable v="true" /> <isLookupFilter v="true" /> </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>LON.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>LAT.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>ADDRESS_ID.value</name> + </jDitoRecordFieldMapping> + <jDitoRecordFieldMapping> + <name>ADDRESS_ID.displayValue</name> + </jDitoRecordFieldMapping> </recordFieldMappings> <filterExtensions> <filterExtensionSet> diff --git a/entity/VisitRecommendation_entity/contentTitleProcess.js b/entity/VisitRecommendation_entity/contentTitleProcess.js new file mode 100644 index 0000000000..638b461208 --- /dev/null +++ b/entity/VisitRecommendation_entity/contentTitleProcess.js @@ -0,0 +1,7 @@ +import("system.datetime"); +import("system.vars"); +import("system.result"); + +title = vars.get("$field.ORGANISATION_NAME") + " - Fällig: " + datetime.toDate(vars.get("$field.DUE_DATE"), "dd.MM.yyyy") + +result.string(title); \ No newline at end of file diff --git a/entity/VisitRecommendation_entity/entityfields/map_config/valueProcess.js b/entity/VisitRecommendation_entity/entityfields/map_config/valueProcess.js new file mode 100644 index 0000000000..c720a99689 --- /dev/null +++ b/entity/VisitRecommendation_entity/entityfields/map_config/valueProcess.js @@ -0,0 +1,23 @@ +import("system.result"); +import("system.vars"); +import("system.vars"); +import("MapViewTemplate_lib"); + +var config = MapViewConfigUtils.getBaseConfiguration(); +config.startingCenterPosition.lat = parseFloat(vars.get("$param.MapViewCenterLat_param")); +config.startingCenterPosition.lon = parseFloat(vars.get("$param.MapViewCenterLon_param")); +config.startingCenterPosition.zoomLevel = 5; + +var tileConfig = MapViewConfigUtils.getMainTileConfig(); +config.tiles = tileConfig; + +//when opening the AroundLocation view we do want to have the source organisation as center, so let's not overwrite the starting center position by +//looking for the users current location +if ( vars.exists("$param.MapViewAdditionalFeatures_param") &&vars.get("$param.MapViewAdditionalFeatures_param") ) +{ + config.startingCenterPosition.zoomLevel = 10;//max amount of km is 100, so let's zoom in + config.startingCenterPosition.autoLocate = false; +} + +var res = JSON.stringify(config); +result.string(res); \ No newline at end of file diff --git a/entity/VisitRecommendation_entity/entityfields/map_marker_color/valueProcess.js b/entity/VisitRecommendation_entity/entityfields/map_marker_color/valueProcess.js new file mode 100644 index 0000000000..fcf772a4fc --- /dev/null +++ b/entity/VisitRecommendation_entity/entityfields/map_marker_color/valueProcess.js @@ -0,0 +1,26 @@ +import("system.vars"); +import("KeywordRegistry_basic"); +import("system.result"); +import("system.neon"); + +var res = "" +switch(vars.getString("$field.PRIORITY")) +{ + case $KeywordRegistry.visitRecommendationPriority$low(): + res = neon.PRIORITY_NONE_COLOR; + break; + case $KeywordRegistry.visitRecommendationPriority$medium(): + res = neon.PRIORITY_LOW_COLOR; + break; + case $KeywordRegistry.visitRecommendationPriority$high(): + res = neon.PRIORITY_MEDIUM_COLOR; + break; + case $KeywordRegistry.visitRecommendationPriority$veryHigh(): + res = neon.PRIORITY_MEDIUM_COLOR; + break; + case $KeywordRegistry.visitRecommendationPriority$critical(): + res = neon.PRIORITY_HIGH_COLOR; + break; +} + +result.string(res); \ No newline at end of file diff --git a/entity/VisitRecommendation_entity/entityfields/mapviewcenterlat_param/documentation.adoc b/entity/VisitRecommendation_entity/entityfields/mapviewcenterlat_param/documentation.adoc new file mode 100644 index 0000000000..f92fe01e05 --- /dev/null +++ b/entity/VisitRecommendation_entity/entityfields/mapviewcenterlat_param/documentation.adoc @@ -0,0 +1,2 @@ +Pass a valid default decimal (or string-decimal) latitude-value to set the default center position of the Map-view which is based on the parameters +`MapViewCenterLat_param` and `MapViewCenterLon_param`. \ No newline at end of file diff --git a/entity/VisitRecommendation_entity/entityfields/mapviewcenterlat_param/valueProcess.js b/entity/VisitRecommendation_entity/entityfields/mapviewcenterlat_param/valueProcess.js new file mode 100644 index 0000000000..75f0dea1eb --- /dev/null +++ b/entity/VisitRecommendation_entity/entityfields/mapviewcenterlat_param/valueProcess.js @@ -0,0 +1,2 @@ +import("system.result"); +result.string("50.989791"); \ No newline at end of file diff --git a/entity/VisitRecommendation_entity/entityfields/mapviewcenterlon_param/documentation.adoc b/entity/VisitRecommendation_entity/entityfields/mapviewcenterlon_param/documentation.adoc new file mode 100644 index 0000000000..f92fe01e05 --- /dev/null +++ b/entity/VisitRecommendation_entity/entityfields/mapviewcenterlon_param/documentation.adoc @@ -0,0 +1,2 @@ +Pass a valid default decimal (or string-decimal) latitude-value to set the default center position of the Map-view which is based on the parameters +`MapViewCenterLat_param` and `MapViewCenterLon_param`. \ No newline at end of file diff --git a/entity/VisitRecommendation_entity/entityfields/mapviewcenterlon_param/valueProcess.js b/entity/VisitRecommendation_entity/entityfields/mapviewcenterlon_param/valueProcess.js new file mode 100644 index 0000000000..2cdca40931 --- /dev/null +++ b/entity/VisitRecommendation_entity/entityfields/mapviewcenterlon_param/valueProcess.js @@ -0,0 +1,2 @@ +import("system.result"); +result.string("4.772377"); \ No newline at end of file diff --git a/entity/VisitRecommendation_entity/entityfields/newentrygroup/children/newvisitplaneentry/onActionProcess.js b/entity/VisitRecommendation_entity/entityfields/newentrygroup/children/newvisitplaneentry/onActionProcess.js index e5ac707432..373517b099 100644 --- a/entity/VisitRecommendation_entity/entityfields/newentrygroup/children/newvisitplaneentry/onActionProcess.js +++ b/entity/VisitRecommendation_entity/entityfields/newentrygroup/children/newvisitplaneentry/onActionProcess.js @@ -9,6 +9,7 @@ params["NoVisitPlanEmployeeWeek_param"] = true; params["ComingFromRecommendation_param"] = true; params["ContactId_param"] = vars.get("$field.CONTACT_PERSON_ID"); params["Entrydate_param"] = vars.get("$field.DUE_DATE"); +params["PrioritySource_param"] = vars.get("$field.PRIORITY_SOURCE"); params["VisitrecommendationId_param"] = vars.get("$field.UID"); neon.openContext("VisitPlanEntry", null, null, neon.OPERATINGSTATE_NEW, params); \ No newline at end of file diff --git a/entity/VisitRecommendation_entity/recordcontainers/jdito/contentProcess.js b/entity/VisitRecommendation_entity/recordcontainers/jdito/contentProcess.js index b81300d798..19858910ea 100644 --- a/entity/VisitRecommendation_entity/recordcontainers/jdito/contentProcess.js +++ b/entity/VisitRecommendation_entity/recordcontainers/jdito/contentProcess.js @@ -36,6 +36,10 @@ var recommendationSQLData = newSelect( "VISITRECOMMENDATION.USER_NEW", //10 "VISITRECOMMENDATION.CONTACT_PERSON_ID",//11 "VISITRECOMMENDATION.RESPONSIBLE", //12 + //Fields for MapView + "ADDRESS.LON", //13 + "ADDRESS.LAT", //14 + "ADDRESS.ADDRESSID" //15 ]) .from("VISITRECOMMENDATION") .join("CONTACT", "coalesce(VISITRECOMMENDATION.CONTACT_PERSON_ID, VISITRECOMMENDATION.CONTACT_ID) = CONTACT.CONTACTID") @@ -45,21 +49,36 @@ var recommendationSQLData = newSelect( var idValues = false; if (vars.exists("$local.idvalues") && vars.get("$local.idvalues")) +{ idValues = true; +} if(idValues == true) +{ recommendationSQLData.and("VISITRECOMMENDATION.VISITRECOMMENDATIONID", vars.get("$local.idvalues"), SqlBuilder.IN()) - +} +else if(vars.get("$param.VisitrecommendationId_param")) +{ + recommendationSQLData.and("VISITRECOMMENDATION.VISITRECOMMENDATIONID", vars.get("$param.VisitrecommendationId_param")); +} + recommendationSQLData = recommendationSQLData.table(); for( let i = 0; i < recommendationSQLData.length; i++) { + var prio = "" if(recommendationSQLData[i][2]) - var prio = recommendationSQLData[i][2]; + { + prio = recommendationSQLData[i][2]; + } else if(recommendationSQLData[i][3]) + { prio = getPrioByDueDate(recommendationSQLData[i][3]); + } else + { prio = $KeywordRegistry.visitRecommendationPriority$low(); + } tmpData = [ recommendationSQLData[i][0], //UID.value @@ -80,7 +99,12 @@ for( let i = 0; i < recommendationSQLData.length; i++) ContactUtils.getFullTitleByContactId(recommendationSQLData[i][11], false), //CONTACT_PERSON_ID.displayvalue recommendationSQLData[i][11], //CONTACT_PERSON_ID.value ContactUtils.getFullTitleByContactId(recommendationSQLData[i][12], false), //RESPONSIBLE.displayvalue - recommendationSQLData[i][12] //RESPONSIBLE.value + recommendationSQLData[i][12], //RESPONSIBLE.value + recommendationSQLData[i][13], //LON.value + recommendationSQLData[i][14], //LAT.value + recommendationSQLData[i][15], //ADDRESS_ID.value + AddressUtils.getFormattedOnlineAddressById(recommendationSQLData[i][15]) //ADDRESS_ID.displayValue + ]; recommendationData.push(tmpData); @@ -121,6 +145,10 @@ if(idValues == false) , activitySubQuery //8 , "org.NAME" //9 , "PERSON.PERSONID" //10 + //Fields for MapView + , "ADDRESS.LON"//11 + , "ADDRESS.LAT"//12 + , "ADDRESS.ADDRESSID"//13 ]) .from("CONTACT") .join("ORGANISATION", "CONTACT.ORGANISATION_ID = org.ORGANISATIONID", "org") @@ -181,7 +209,12 @@ if(idValues == false) ContactUtils.getFullTitleByContactId(visitFrequencyData[i][1], false), //CONTACT_PERSON_ID.displayValue isPersonContact ? visitFrequencyData[i][1]: "", //CONTACT_PERSON_ID.value "", //RESPONSIBLE.displayValue - "" //RESPONSIBLE.value + "", //RESPONSIBLE.value + visitFrequencyData[i][11], //LON.value + visitFrequencyData[i][12], //LAT.value + visitFrequencyData[i][13], //ADDRESS_ID.value + AddressUtils.getFormattedOnlineAddressById(visitFrequencyData[i][13]) //ADDRESS_ID.displayValue + ]; @@ -200,9 +233,12 @@ if(idValues == false) visitEntry = visitEntry.and(newWhere("VISITPLANENTRY.ENTRYDATE", eMath.subInt(vars.get("$sys.today"), datetime.ONE_DAY * 7), SqlBuilder.LESS_OR_EQUAL()) .and("VISITPLANENTRY.STATUS", $KeywordRegistry.visitPlanEntryStatus$Visitreportcreated(), SqlBuilder.NOT_EQUAL())) - .or("VISITPLANENTRY.STATUS", $KeywordRegistry.visitPlanEntryStatus$Visitreportcreated(), SqlBuilder.EQUAL()).cell() + .or("VISITPLANENTRY.STATUS", $KeywordRegistry.visitPlanEntryStatus$Visitreportcreated(), SqlBuilder.EQUAL()) + .cell() + + var prioritySource = vars.get("$param.PrioritySource_param"); - if(!manualRec) //if manual Record was created, visitfrequency is not relevant + if(prioritySource != $KeywordRegistry.visitRecommendationPrioSource$manual() && !manualRec) //if manual Record was created, visitfrequency is not relevant { //!visitEntryExists - if no visitplanentry for the organisation/person from recommendation was created -> show recommendation so it can be planned if(!visitEntryExists || visitEntry) @@ -216,7 +252,7 @@ if(idValues == false) var filter = vars.get("$local.filter"); //TODO: this is a workaround that filters the records manually, it should be possible to filter the users with a tools.* method var filterFields = ["", "ORGANISATION_NAME", "STREET", "COUNTRY" , "ZIP", "CITY", "PRIORITY", "PRIORITY_SOURCE", "", "DUE_DATE", "INFO", "CONTACT_ID" - , "", "", "USER_NEW", "", "CONTACT_PERSON_ID", "", "RESPONSIBLE"]; + , "", "", "USER_NEW", "", "CONTACT_PERSON_ID", "", "RESPONSIBLE", "LON", "LAT", "", ""]; var filterFns = { "$$$LOOKUPFIELD$$$" : function (pRecordValue, pFilterValue, pOperator, pRow) { @@ -235,6 +271,7 @@ var filterFns = { return false; } }; + recommendationData = JditoFilterUtils.filterRecords(filterFields, recommendationData, filter.filter, filterFns); @@ -264,7 +301,9 @@ for (let field in order) } if (!sortOrder.length) +{ sortOrder = [9, false]; //default sort by duedate +} ArrayUtils.sortMulti(recommendationData, sortOrder); result.object(recommendationData); @@ -279,15 +318,25 @@ function getPrioByDueDate(pDueDate) var dateDifference = pDueDate - currentDate; if(dateDifference < 0) + { prio = $KeywordRegistry.visitRecommendationPriority$critical(); + } else if(dateDifference < datetime.ONE_DAY * 3) + { prio = $KeywordRegistry.visitRecommendationPriority$veryHigh(); + } else if(dateDifference < datetime.ONE_DAY * 7) + { prio = $KeywordRegistry.visitRecommendationPriority$high(); + } else if(dateDifference < datetime.ONE_DAY * 14) + { prio = $KeywordRegistry.visitRecommendationPriority$medium(); + } else + { prio = $KeywordRegistry.visitRecommendationPriority$low(); + } } return prio; diff --git a/neonContext/VisitRecommendation/VisitRecommendation.aod b/neonContext/VisitRecommendation/VisitRecommendation.aod index 6c3505a44e..0b8098fb4c 100644 --- a/neonContext/VisitRecommendation/VisitRecommendation.aod +++ b/neonContext/VisitRecommendation/VisitRecommendation.aod @@ -4,6 +4,7 @@ <majorModelMode>DISTRIBUTED</majorModelMode> <filterView>VisitRecommendationFilter_view</filterView> <editView>VisitRecommendationEdit_view</editView> + <lookupView>VisitRecommendationFilter_view</lookupView> <entity>VisitRecommendation_entity</entity> <references> <neonViewReference> diff --git a/neonView/VisitPlanEntryEdit_view/VisitPlanEntryEdit_view.aod b/neonView/VisitPlanEntryEdit_view/VisitPlanEntryEdit_view.aod index 9bcde0169b..7be65dd5be 100644 --- a/neonView/VisitPlanEntryEdit_view/VisitPlanEntryEdit_view.aod +++ b/neonView/VisitPlanEntryEdit_view/VisitPlanEntryEdit_view.aod @@ -16,6 +16,10 @@ <entityField>#ENTITY</entityField> <isEditable v="true" /> <fields> + <entityFieldLink> + <name>3f3cb663-2649-4c49-9b98-9bab67282cd5</name> + <entityField>VISITRECOMMENDATION_ID</entityField> + </entityFieldLink> <entityFieldLink> <name>8c3a2df7-3928-43d4-baa9-686747ed020c</name> <entityField>ORGANISATION_CONTACT_ID</entityField> diff --git a/neonView/VisitRecommendationFilter_view/VisitRecommendationFilter_view.aod b/neonView/VisitRecommendationFilter_view/VisitRecommendationFilter_view.aod index a0da27ee47..eb87ad0eee 100644 --- a/neonView/VisitRecommendationFilter_view/VisitRecommendationFilter_view.aod +++ b/neonView/VisitRecommendationFilter_view/VisitRecommendationFilter_view.aod @@ -130,5 +130,15 @@ </neonTreeTableColumn> </columns> </treeTableViewTemplate> + <mapViewTemplate> + <name>Map</name> + <configField>MAP_CONFIG</configField> + <autoGeneratedMarkerLatitudeField>LAT</autoGeneratedMarkerLatitudeField> + <autoGeneratedMarkerLongitudeField>LON</autoGeneratedMarkerLongitudeField> + <autoGeneratedMarkerIconField>#ICON</autoGeneratedMarkerIconField> + <autoGeneratedMarkerColorField>MAP_MARKER_COLOR</autoGeneratedMarkerColorField> + <autoGeneratedMarkerPopupField>ADDRESS_ID</autoGeneratedMarkerPopupField> + <maxDBRow v="400" /> + </mapViewTemplate> </children> </neonView> diff --git a/process/JditoFilter_lib/process.js b/process/JditoFilter_lib/process.js index c2244518ff..6487793b53 100644 --- a/process/JditoFilter_lib/process.js +++ b/process/JditoFilter_lib/process.js @@ -314,14 +314,15 @@ JditoFilter.prototype.checkRecord = function (pRow) return (new RegExp("^" + pFilterValue + "$", regexFlags)).test(pRowValue); case "NOT_EQUAL": return !(new RegExp("^" + pFilterValue + "$", regexFlags)).test(pRowValue); + //String-comparison returns false values < <= > >= are just relevant for numbervalues case "LESS": - return pRowValue < pFilterValue; + return new Number(pRowValue) < new Number(pFilterValue); case "LESS_OR_EQUAL": - return pRowValue <= pFilterValue; + return new Number(pRowValue) <= new Number(pFilterValue); case "GREATER": - return pRowValue > pFilterValue; + return new Number(pRowValue) > new Number(pFilterValue); case "GREATER_OR_EQUAL": - return pRowValue >= pFilterValue; + return new Number(pRowValue) >= new Number(pFilterValue); case "ISNULL": return pRowValue == ""; case "ISNOTNULL": -- GitLab From fa1a7cf8d383034b79f6c9059e71bf7da6ba17d1 Mon Sep 17 00:00:00 2001 From: Sebastian Pongratz <s.pongratz@adito.de> Date: Mon, 7 Jun 2021 09:51:19 +0000 Subject: [PATCH 237/242] Revert "Merge branch '2021.0_BesuchVorOrt_1079788' into '2021.1.0'" This reverts merge request !1011 --- .../VisitPlanEntry_entity.aod | 27 -------- .../displayValueProcess.js | 5 -- .../visitrecommendation_id/onValueChange.js | 16 ----- .../visitrecommendation_id/stateProcess.js | 10 --- .../prioritysource_param/valueProcess.js | 4 -- .../valueProcess.js | 4 -- .../VisitRecommendation_entity.aod | 69 ------------------- .../contentTitleProcess.js | 7 -- .../entityfields/map_config/valueProcess.js | 23 ------- .../map_marker_color/valueProcess.js | 26 ------- .../mapviewcenterlat_param/documentation.adoc | 2 - .../mapviewcenterlat_param/valueProcess.js | 2 - .../mapviewcenterlon_param/documentation.adoc | 2 - .../mapviewcenterlon_param/valueProcess.js | 2 - .../newvisitplaneentry/onActionProcess.js | 1 - .../recordcontainers/jdito/contentProcess.js | 63 ++--------------- .../VisitRecommendation.aod | 1 - .../VisitPlanEntryEdit_view.aod | 4 -- .../VisitRecommendationFilter_view.aod | 10 --- process/JditoFilter_lib/process.js | 9 ++- 20 files changed, 11 insertions(+), 276 deletions(-) delete mode 100644 entity/VisitPlanEntry_entity/entityfields/visitrecommendation_id/displayValueProcess.js delete mode 100644 entity/VisitPlanEntry_entity/entityfields/visitrecommendation_id/onValueChange.js delete mode 100644 entity/VisitPlanEntry_entity/entityfields/visitrecommendation_id/stateProcess.js delete mode 100644 entity/VisitPlanEntry_entity/entityfields/visitrecommendations/children/prioritysource_param/valueProcess.js delete mode 100644 entity/VisitPlanEntry_entity/entityfields/visitrecommendations/children/visitrecommendationid_param/valueProcess.js delete mode 100644 entity/VisitRecommendation_entity/contentTitleProcess.js delete mode 100644 entity/VisitRecommendation_entity/entityfields/map_config/valueProcess.js delete mode 100644 entity/VisitRecommendation_entity/entityfields/map_marker_color/valueProcess.js delete mode 100644 entity/VisitRecommendation_entity/entityfields/mapviewcenterlat_param/documentation.adoc delete mode 100644 entity/VisitRecommendation_entity/entityfields/mapviewcenterlat_param/valueProcess.js delete mode 100644 entity/VisitRecommendation_entity/entityfields/mapviewcenterlon_param/documentation.adoc delete mode 100644 entity/VisitRecommendation_entity/entityfields/mapviewcenterlon_param/valueProcess.js diff --git a/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod b/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod index 9f368889ff..b2bbe781db 100644 --- a/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod +++ b/entity/VisitPlanEntry_entity/VisitPlanEntry_entity.aod @@ -188,12 +188,7 @@ </entityField> <entityField> <name>VISITRECOMMENDATION_ID</name> - <title>Visit Recommendation</title> - <consumer>Visitrecommendations</consumer> - <stateProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/visitrecommendation_id/stateProcess.js</stateProcess> <valueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/visitrecommendation_id/valueProcess.js</valueProcess> - <displayValueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/visitrecommendation_id/displayValueProcess.js</displayValueProcess> - <onValueChange>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/visitrecommendation_id/onValueChange.js</onValueChange> </entityField> <entityField> <name>APPOINTMENT_ID</name> @@ -290,28 +285,6 @@ <name>VisitrecommendationId_param</name> <expose v="true" /> </entityParameter> - <entityConsumer> - <name>Visitrecommendations</name> - <dependency> - <name>dependency</name> - <entityName>VisitRecommendation_entity</entityName> - <fieldName>#PROVIDER</fieldName> - </dependency> - <children> - <entityParameter> - <name>VisitrecommendationId_param</name> - <valueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/visitrecommendations/children/visitrecommendationid_param/valueProcess.js</valueProcess> - </entityParameter> - <entityParameter> - <name>PrioritySource_param</name> - <valueProcess>%aditoprj%/entity/VisitPlanEntry_entity/entityfields/visitrecommendations/children/prioritysource_param/valueProcess.js</valueProcess> - </entityParameter> - </children> - </entityConsumer> - <entityParameter> - <name>PrioritySource_param</name> - <expose v="true" /> - </entityParameter> </entityFields> <recordContainers> <jDitoRecordContainer> diff --git a/entity/VisitPlanEntry_entity/entityfields/visitrecommendation_id/displayValueProcess.js b/entity/VisitPlanEntry_entity/entityfields/visitrecommendation_id/displayValueProcess.js deleted file mode 100644 index 5b65509fef..0000000000 --- a/entity/VisitPlanEntry_entity/entityfields/visitrecommendation_id/displayValueProcess.js +++ /dev/null @@ -1,5 +0,0 @@ -import("system.vars"); -import("system.result"); -import("Context_lib"); - -result.string(ContextUtils.loadContentTitle("VisitRecommendation_entity", vars.get("$field.VISITRECOMMENDATION_ID"))); \ No newline at end of file diff --git a/entity/VisitPlanEntry_entity/entityfields/visitrecommendation_id/onValueChange.js b/entity/VisitPlanEntry_entity/entityfields/visitrecommendation_id/onValueChange.js deleted file mode 100644 index bb550f5c61..0000000000 --- a/entity/VisitPlanEntry_entity/entityfields/visitrecommendation_id/onValueChange.js +++ /dev/null @@ -1,16 +0,0 @@ -import("KeywordRegistry_basic"); -import("system.logging"); -import("system.neon"); -import("system.vars"); -import("Sql_lib"); - - -if(vars.get("$param.PrioritySource_param") == $KeywordRegistry.visitRecommendationPrioSource$manual()) -{ - var Ids = newSelect("CONTACT_ID, CONTACT_PERSON_ID").from("VISITRECOMMENDATION") - .where("VISITRECOMMENDATION.VISITRECOMMENDATIONID", vars.get("$local.value")) - .arrayRow() - - neon.setFieldValue("$field.CONTACT_ID", Ids[1]); - neon.setFieldValue("$field.ORGANISATION_CONTACT_ID", Ids[0]); -} diff --git a/entity/VisitPlanEntry_entity/entityfields/visitrecommendation_id/stateProcess.js b/entity/VisitPlanEntry_entity/entityfields/visitrecommendation_id/stateProcess.js deleted file mode 100644 index fcc4878c47..0000000000 --- a/entity/VisitPlanEntry_entity/entityfields/visitrecommendation_id/stateProcess.js +++ /dev/null @@ -1,10 +0,0 @@ -import("system.result"); -import("KeywordRegistry_basic"); -import("system.vars"); -import("Sql_lib"); -import("system.neon") - -if(vars.get("$param.PrioritySource_param") == $KeywordRegistry.visitRecommendationPrioSource$visitFrequency()) -{ - result.string(neon.COMPONENTSTATE_INVISIBLE) -} diff --git a/entity/VisitPlanEntry_entity/entityfields/visitrecommendations/children/prioritysource_param/valueProcess.js b/entity/VisitPlanEntry_entity/entityfields/visitrecommendations/children/prioritysource_param/valueProcess.js deleted file mode 100644 index a5dbcbd2d3..0000000000 --- a/entity/VisitPlanEntry_entity/entityfields/visitrecommendations/children/prioritysource_param/valueProcess.js +++ /dev/null @@ -1,4 +0,0 @@ -import("KeywordRegistry_basic"); -import("system.result"); - -result.string($KeywordRegistry.visitRecommendationPrioSource$manual()); \ No newline at end of file diff --git a/entity/VisitPlanEntry_entity/entityfields/visitrecommendations/children/visitrecommendationid_param/valueProcess.js b/entity/VisitPlanEntry_entity/entityfields/visitrecommendations/children/visitrecommendationid_param/valueProcess.js deleted file mode 100644 index 25f8033cfa..0000000000 --- a/entity/VisitPlanEntry_entity/entityfields/visitrecommendations/children/visitrecommendationid_param/valueProcess.js +++ /dev/null @@ -1,4 +0,0 @@ -import("system.vars"); -import("system.result"); - -result.string(vars.get("$field.VISITRECOMMENDATION_ID")); \ No newline at end of file diff --git a/entity/VisitRecommendation_entity/VisitRecommendation_entity.aod b/entity/VisitRecommendation_entity/VisitRecommendation_entity.aod index 857530448d..122aecbad7 100644 --- a/entity/VisitRecommendation_entity/VisitRecommendation_entity.aod +++ b/entity/VisitRecommendation_entity/VisitRecommendation_entity.aod @@ -7,7 +7,6 @@ <grantCreate v="true" /> <grantUpdateProcess>%aditoprj%/entity/VisitRecommendation_entity/grantUpdateProcess.js</grantUpdateProcess> <grantDeleteProcess>%aditoprj%/entity/VisitRecommendation_entity/grantDeleteProcess.js</grantDeleteProcess> - <contentTitleProcess>%aditoprj%/entity/VisitRecommendation_entity/contentTitleProcess.js</contentTitleProcess> <initFilterProcess>%aditoprj%/entity/VisitRecommendation_entity/initFilterProcess.js</initFilterProcess> <iconId>VAADIN:BRIEFCASE</iconId> <image>VAADIN:BRIEFCASE</image> @@ -19,20 +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> - <entityDependency> - <name>3c5d510c-f7b3-401a-99cc-36b8e86c18f1</name> - <entityName>VisitPlanEntry_entity</entityName> - <fieldName>Visitrecommendations</fieldName> - <isConsumer v="false" /> - </entityDependency> - </dependencies> </entityProvider> <entityField> <name>CONTACT_ID</name> @@ -170,10 +155,6 @@ <contentType>IMAGE</contentType> <valueProcess>%aditoprj%/entity/VisitRecommendation_entity/entityfields/icon/valueProcess.js</valueProcess> </entityField> - <entityField> - <name>MAP_MARKER_COLOR</name> - <valueProcess>%aditoprj%/entity/VisitRecommendation_entity/entityfields/map_marker_color/valueProcess.js</valueProcess> - </entityField> <entityField> <name>TARGET_CONTEXT</name> <valueProcess>%aditoprj%/entity/VisitRecommendation_entity/entityfields/target_context/valueProcess.js</valueProcess> @@ -266,44 +247,6 @@ <name>TARGET_ID</name> <valueProcess>%aditoprj%/entity/VisitRecommendation_entity/entityfields/target_id/valueProcess.js</valueProcess> </entityField> - <entityField> - <name>LAT</name> - <contentType>NUMBER</contentType> - </entityField> - <entityField> - <name>LON</name> - <contentType>NUMBER</contentType> - </entityField> - <entityField> - <name>ADDRESS_ID</name> - </entityField> - <entityField> - <name>MAP_CONFIG</name> - <valueProcess>%aditoprj%/entity/VisitRecommendation_entity/entityfields/map_config/valueProcess.js</valueProcess> - </entityField> - <entityParameter> - <name>MapViewCenterLat_param</name> - <valueProcess>%aditoprj%/entity/VisitRecommendation_entity/entityfields/mapviewcenterlat_param/valueProcess.js</valueProcess> - <expose v="true" /> - <documentation>%aditoprj%/entity/VisitRecommendation_entity/entityfields/mapviewcenterlat_param/documentation.adoc</documentation> - </entityParameter> - <entityParameter> - <name>MapViewCenterLon_param</name> - <valueProcess>%aditoprj%/entity/VisitRecommendation_entity/entityfields/mapviewcenterlon_param/valueProcess.js</valueProcess> - <expose v="true" /> - <documentation>%aditoprj%/entity/VisitRecommendation_entity/entityfields/mapviewcenterlon_param/documentation.adoc</documentation> - </entityParameter> - <entityField> - <name>MAP_FEATURE_COLLECTION</name> - </entityField> - <entityParameter> - <name>VisitrecommendationId_param</name> - <expose v="true" /> - </entityParameter> - <entityParameter> - <name>PrioritySource_param</name> - <expose v="true" /> - </entityParameter> </entityFields> <recordContainers> <jDitoRecordContainer> @@ -393,18 +336,6 @@ <isFilterable v="true" /> <isLookupFilter v="true" /> </jDitoRecordFieldMapping> - <jDitoRecordFieldMapping> - <name>LON.value</name> - </jDitoRecordFieldMapping> - <jDitoRecordFieldMapping> - <name>LAT.value</name> - </jDitoRecordFieldMapping> - <jDitoRecordFieldMapping> - <name>ADDRESS_ID.value</name> - </jDitoRecordFieldMapping> - <jDitoRecordFieldMapping> - <name>ADDRESS_ID.displayValue</name> - </jDitoRecordFieldMapping> </recordFieldMappings> <filterExtensions> <filterExtensionSet> diff --git a/entity/VisitRecommendation_entity/contentTitleProcess.js b/entity/VisitRecommendation_entity/contentTitleProcess.js deleted file mode 100644 index 638b461208..0000000000 --- a/entity/VisitRecommendation_entity/contentTitleProcess.js +++ /dev/null @@ -1,7 +0,0 @@ -import("system.datetime"); -import("system.vars"); -import("system.result"); - -title = vars.get("$field.ORGANISATION_NAME") + " - Fällig: " + datetime.toDate(vars.get("$field.DUE_DATE"), "dd.MM.yyyy") - -result.string(title); \ No newline at end of file diff --git a/entity/VisitRecommendation_entity/entityfields/map_config/valueProcess.js b/entity/VisitRecommendation_entity/entityfields/map_config/valueProcess.js deleted file mode 100644 index c720a99689..0000000000 --- a/entity/VisitRecommendation_entity/entityfields/map_config/valueProcess.js +++ /dev/null @@ -1,23 +0,0 @@ -import("system.result"); -import("system.vars"); -import("system.vars"); -import("MapViewTemplate_lib"); - -var config = MapViewConfigUtils.getBaseConfiguration(); -config.startingCenterPosition.lat = parseFloat(vars.get("$param.MapViewCenterLat_param")); -config.startingCenterPosition.lon = parseFloat(vars.get("$param.MapViewCenterLon_param")); -config.startingCenterPosition.zoomLevel = 5; - -var tileConfig = MapViewConfigUtils.getMainTileConfig(); -config.tiles = tileConfig; - -//when opening the AroundLocation view we do want to have the source organisation as center, so let's not overwrite the starting center position by -//looking for the users current location -if ( vars.exists("$param.MapViewAdditionalFeatures_param") &&vars.get("$param.MapViewAdditionalFeatures_param") ) -{ - config.startingCenterPosition.zoomLevel = 10;//max amount of km is 100, so let's zoom in - config.startingCenterPosition.autoLocate = false; -} - -var res = JSON.stringify(config); -result.string(res); \ No newline at end of file diff --git a/entity/VisitRecommendation_entity/entityfields/map_marker_color/valueProcess.js b/entity/VisitRecommendation_entity/entityfields/map_marker_color/valueProcess.js deleted file mode 100644 index fcf772a4fc..0000000000 --- a/entity/VisitRecommendation_entity/entityfields/map_marker_color/valueProcess.js +++ /dev/null @@ -1,26 +0,0 @@ -import("system.vars"); -import("KeywordRegistry_basic"); -import("system.result"); -import("system.neon"); - -var res = "" -switch(vars.getString("$field.PRIORITY")) -{ - case $KeywordRegistry.visitRecommendationPriority$low(): - res = neon.PRIORITY_NONE_COLOR; - break; - case $KeywordRegistry.visitRecommendationPriority$medium(): - res = neon.PRIORITY_LOW_COLOR; - break; - case $KeywordRegistry.visitRecommendationPriority$high(): - res = neon.PRIORITY_MEDIUM_COLOR; - break; - case $KeywordRegistry.visitRecommendationPriority$veryHigh(): - res = neon.PRIORITY_MEDIUM_COLOR; - break; - case $KeywordRegistry.visitRecommendationPriority$critical(): - res = neon.PRIORITY_HIGH_COLOR; - break; -} - -result.string(res); \ No newline at end of file diff --git a/entity/VisitRecommendation_entity/entityfields/mapviewcenterlat_param/documentation.adoc b/entity/VisitRecommendation_entity/entityfields/mapviewcenterlat_param/documentation.adoc deleted file mode 100644 index f92fe01e05..0000000000 --- a/entity/VisitRecommendation_entity/entityfields/mapviewcenterlat_param/documentation.adoc +++ /dev/null @@ -1,2 +0,0 @@ -Pass a valid default decimal (or string-decimal) latitude-value to set the default center position of the Map-view which is based on the parameters -`MapViewCenterLat_param` and `MapViewCenterLon_param`. \ No newline at end of file diff --git a/entity/VisitRecommendation_entity/entityfields/mapviewcenterlat_param/valueProcess.js b/entity/VisitRecommendation_entity/entityfields/mapviewcenterlat_param/valueProcess.js deleted file mode 100644 index 75f0dea1eb..0000000000 --- a/entity/VisitRecommendation_entity/entityfields/mapviewcenterlat_param/valueProcess.js +++ /dev/null @@ -1,2 +0,0 @@ -import("system.result"); -result.string("50.989791"); \ No newline at end of file diff --git a/entity/VisitRecommendation_entity/entityfields/mapviewcenterlon_param/documentation.adoc b/entity/VisitRecommendation_entity/entityfields/mapviewcenterlon_param/documentation.adoc deleted file mode 100644 index f92fe01e05..0000000000 --- a/entity/VisitRecommendation_entity/entityfields/mapviewcenterlon_param/documentation.adoc +++ /dev/null @@ -1,2 +0,0 @@ -Pass a valid default decimal (or string-decimal) latitude-value to set the default center position of the Map-view which is based on the parameters -`MapViewCenterLat_param` and `MapViewCenterLon_param`. \ No newline at end of file diff --git a/entity/VisitRecommendation_entity/entityfields/mapviewcenterlon_param/valueProcess.js b/entity/VisitRecommendation_entity/entityfields/mapviewcenterlon_param/valueProcess.js deleted file mode 100644 index 2cdca40931..0000000000 --- a/entity/VisitRecommendation_entity/entityfields/mapviewcenterlon_param/valueProcess.js +++ /dev/null @@ -1,2 +0,0 @@ -import("system.result"); -result.string("4.772377"); \ No newline at end of file diff --git a/entity/VisitRecommendation_entity/entityfields/newentrygroup/children/newvisitplaneentry/onActionProcess.js b/entity/VisitRecommendation_entity/entityfields/newentrygroup/children/newvisitplaneentry/onActionProcess.js index 373517b099..e5ac707432 100644 --- a/entity/VisitRecommendation_entity/entityfields/newentrygroup/children/newvisitplaneentry/onActionProcess.js +++ b/entity/VisitRecommendation_entity/entityfields/newentrygroup/children/newvisitplaneentry/onActionProcess.js @@ -9,7 +9,6 @@ params["NoVisitPlanEmployeeWeek_param"] = true; params["ComingFromRecommendation_param"] = true; params["ContactId_param"] = vars.get("$field.CONTACT_PERSON_ID"); params["Entrydate_param"] = vars.get("$field.DUE_DATE"); -params["PrioritySource_param"] = vars.get("$field.PRIORITY_SOURCE"); params["VisitrecommendationId_param"] = vars.get("$field.UID"); neon.openContext("VisitPlanEntry", null, null, neon.OPERATINGSTATE_NEW, params); \ No newline at end of file diff --git a/entity/VisitRecommendation_entity/recordcontainers/jdito/contentProcess.js b/entity/VisitRecommendation_entity/recordcontainers/jdito/contentProcess.js index 19858910ea..b81300d798 100644 --- a/entity/VisitRecommendation_entity/recordcontainers/jdito/contentProcess.js +++ b/entity/VisitRecommendation_entity/recordcontainers/jdito/contentProcess.js @@ -36,10 +36,6 @@ var recommendationSQLData = newSelect( "VISITRECOMMENDATION.USER_NEW", //10 "VISITRECOMMENDATION.CONTACT_PERSON_ID",//11 "VISITRECOMMENDATION.RESPONSIBLE", //12 - //Fields for MapView - "ADDRESS.LON", //13 - "ADDRESS.LAT", //14 - "ADDRESS.ADDRESSID" //15 ]) .from("VISITRECOMMENDATION") .join("CONTACT", "coalesce(VISITRECOMMENDATION.CONTACT_PERSON_ID, VISITRECOMMENDATION.CONTACT_ID) = CONTACT.CONTACTID") @@ -49,36 +45,21 @@ var recommendationSQLData = newSelect( var idValues = false; if (vars.exists("$local.idvalues") && vars.get("$local.idvalues")) -{ idValues = true; -} if(idValues == true) -{ recommendationSQLData.and("VISITRECOMMENDATION.VISITRECOMMENDATIONID", vars.get("$local.idvalues"), SqlBuilder.IN()) -} -else if(vars.get("$param.VisitrecommendationId_param")) -{ - recommendationSQLData.and("VISITRECOMMENDATION.VISITRECOMMENDATIONID", vars.get("$param.VisitrecommendationId_param")); -} - + recommendationSQLData = recommendationSQLData.table(); for( let i = 0; i < recommendationSQLData.length; i++) { - var prio = "" if(recommendationSQLData[i][2]) - { - prio = recommendationSQLData[i][2]; - } + var prio = recommendationSQLData[i][2]; else if(recommendationSQLData[i][3]) - { prio = getPrioByDueDate(recommendationSQLData[i][3]); - } else - { prio = $KeywordRegistry.visitRecommendationPriority$low(); - } tmpData = [ recommendationSQLData[i][0], //UID.value @@ -99,12 +80,7 @@ for( let i = 0; i < recommendationSQLData.length; i++) ContactUtils.getFullTitleByContactId(recommendationSQLData[i][11], false), //CONTACT_PERSON_ID.displayvalue recommendationSQLData[i][11], //CONTACT_PERSON_ID.value ContactUtils.getFullTitleByContactId(recommendationSQLData[i][12], false), //RESPONSIBLE.displayvalue - recommendationSQLData[i][12], //RESPONSIBLE.value - recommendationSQLData[i][13], //LON.value - recommendationSQLData[i][14], //LAT.value - recommendationSQLData[i][15], //ADDRESS_ID.value - AddressUtils.getFormattedOnlineAddressById(recommendationSQLData[i][15]) //ADDRESS_ID.displayValue - + recommendationSQLData[i][12] //RESPONSIBLE.value ]; recommendationData.push(tmpData); @@ -145,10 +121,6 @@ if(idValues == false) , activitySubQuery //8 , "org.NAME" //9 , "PERSON.PERSONID" //10 - //Fields for MapView - , "ADDRESS.LON"//11 - , "ADDRESS.LAT"//12 - , "ADDRESS.ADDRESSID"//13 ]) .from("CONTACT") .join("ORGANISATION", "CONTACT.ORGANISATION_ID = org.ORGANISATIONID", "org") @@ -209,12 +181,7 @@ if(idValues == false) ContactUtils.getFullTitleByContactId(visitFrequencyData[i][1], false), //CONTACT_PERSON_ID.displayValue isPersonContact ? visitFrequencyData[i][1]: "", //CONTACT_PERSON_ID.value "", //RESPONSIBLE.displayValue - "", //RESPONSIBLE.value - visitFrequencyData[i][11], //LON.value - visitFrequencyData[i][12], //LAT.value - visitFrequencyData[i][13], //ADDRESS_ID.value - AddressUtils.getFormattedOnlineAddressById(visitFrequencyData[i][13]) //ADDRESS_ID.displayValue - + "" //RESPONSIBLE.value ]; @@ -233,12 +200,9 @@ if(idValues == false) visitEntry = visitEntry.and(newWhere("VISITPLANENTRY.ENTRYDATE", eMath.subInt(vars.get("$sys.today"), datetime.ONE_DAY * 7), SqlBuilder.LESS_OR_EQUAL()) .and("VISITPLANENTRY.STATUS", $KeywordRegistry.visitPlanEntryStatus$Visitreportcreated(), SqlBuilder.NOT_EQUAL())) - .or("VISITPLANENTRY.STATUS", $KeywordRegistry.visitPlanEntryStatus$Visitreportcreated(), SqlBuilder.EQUAL()) - .cell() - - var prioritySource = vars.get("$param.PrioritySource_param"); + .or("VISITPLANENTRY.STATUS", $KeywordRegistry.visitPlanEntryStatus$Visitreportcreated(), SqlBuilder.EQUAL()).cell() - if(prioritySource != $KeywordRegistry.visitRecommendationPrioSource$manual() && !manualRec) //if manual Record was created, visitfrequency is not relevant + if(!manualRec) //if manual Record was created, visitfrequency is not relevant { //!visitEntryExists - if no visitplanentry for the organisation/person from recommendation was created -> show recommendation so it can be planned if(!visitEntryExists || visitEntry) @@ -252,7 +216,7 @@ if(idValues == false) var filter = vars.get("$local.filter"); //TODO: this is a workaround that filters the records manually, it should be possible to filter the users with a tools.* method var filterFields = ["", "ORGANISATION_NAME", "STREET", "COUNTRY" , "ZIP", "CITY", "PRIORITY", "PRIORITY_SOURCE", "", "DUE_DATE", "INFO", "CONTACT_ID" - , "", "", "USER_NEW", "", "CONTACT_PERSON_ID", "", "RESPONSIBLE", "LON", "LAT", "", ""]; + , "", "", "USER_NEW", "", "CONTACT_PERSON_ID", "", "RESPONSIBLE"]; var filterFns = { "$$$LOOKUPFIELD$$$" : function (pRecordValue, pFilterValue, pOperator, pRow) { @@ -271,7 +235,6 @@ var filterFns = { return false; } }; - recommendationData = JditoFilterUtils.filterRecords(filterFields, recommendationData, filter.filter, filterFns); @@ -301,9 +264,7 @@ for (let field in order) } if (!sortOrder.length) -{ sortOrder = [9, false]; //default sort by duedate -} ArrayUtils.sortMulti(recommendationData, sortOrder); result.object(recommendationData); @@ -318,25 +279,15 @@ function getPrioByDueDate(pDueDate) var dateDifference = pDueDate - currentDate; if(dateDifference < 0) - { prio = $KeywordRegistry.visitRecommendationPriority$critical(); - } else if(dateDifference < datetime.ONE_DAY * 3) - { prio = $KeywordRegistry.visitRecommendationPriority$veryHigh(); - } else if(dateDifference < datetime.ONE_DAY * 7) - { prio = $KeywordRegistry.visitRecommendationPriority$high(); - } else if(dateDifference < datetime.ONE_DAY * 14) - { prio = $KeywordRegistry.visitRecommendationPriority$medium(); - } else - { prio = $KeywordRegistry.visitRecommendationPriority$low(); - } } return prio; diff --git a/neonContext/VisitRecommendation/VisitRecommendation.aod b/neonContext/VisitRecommendation/VisitRecommendation.aod index 0b8098fb4c..6c3505a44e 100644 --- a/neonContext/VisitRecommendation/VisitRecommendation.aod +++ b/neonContext/VisitRecommendation/VisitRecommendation.aod @@ -4,7 +4,6 @@ <majorModelMode>DISTRIBUTED</majorModelMode> <filterView>VisitRecommendationFilter_view</filterView> <editView>VisitRecommendationEdit_view</editView> - <lookupView>VisitRecommendationFilter_view</lookupView> <entity>VisitRecommendation_entity</entity> <references> <neonViewReference> diff --git a/neonView/VisitPlanEntryEdit_view/VisitPlanEntryEdit_view.aod b/neonView/VisitPlanEntryEdit_view/VisitPlanEntryEdit_view.aod index 7be65dd5be..9bcde0169b 100644 --- a/neonView/VisitPlanEntryEdit_view/VisitPlanEntryEdit_view.aod +++ b/neonView/VisitPlanEntryEdit_view/VisitPlanEntryEdit_view.aod @@ -16,10 +16,6 @@ <entityField>#ENTITY</entityField> <isEditable v="true" /> <fields> - <entityFieldLink> - <name>3f3cb663-2649-4c49-9b98-9bab67282cd5</name> - <entityField>VISITRECOMMENDATION_ID</entityField> - </entityFieldLink> <entityFieldLink> <name>8c3a2df7-3928-43d4-baa9-686747ed020c</name> <entityField>ORGANISATION_CONTACT_ID</entityField> diff --git a/neonView/VisitRecommendationFilter_view/VisitRecommendationFilter_view.aod b/neonView/VisitRecommendationFilter_view/VisitRecommendationFilter_view.aod index eb87ad0eee..a0da27ee47 100644 --- a/neonView/VisitRecommendationFilter_view/VisitRecommendationFilter_view.aod +++ b/neonView/VisitRecommendationFilter_view/VisitRecommendationFilter_view.aod @@ -130,15 +130,5 @@ </neonTreeTableColumn> </columns> </treeTableViewTemplate> - <mapViewTemplate> - <name>Map</name> - <configField>MAP_CONFIG</configField> - <autoGeneratedMarkerLatitudeField>LAT</autoGeneratedMarkerLatitudeField> - <autoGeneratedMarkerLongitudeField>LON</autoGeneratedMarkerLongitudeField> - <autoGeneratedMarkerIconField>#ICON</autoGeneratedMarkerIconField> - <autoGeneratedMarkerColorField>MAP_MARKER_COLOR</autoGeneratedMarkerColorField> - <autoGeneratedMarkerPopupField>ADDRESS_ID</autoGeneratedMarkerPopupField> - <maxDBRow v="400" /> - </mapViewTemplate> </children> </neonView> diff --git a/process/JditoFilter_lib/process.js b/process/JditoFilter_lib/process.js index 6487793b53..c2244518ff 100644 --- a/process/JditoFilter_lib/process.js +++ b/process/JditoFilter_lib/process.js @@ -314,15 +314,14 @@ JditoFilter.prototype.checkRecord = function (pRow) return (new RegExp("^" + pFilterValue + "$", regexFlags)).test(pRowValue); case "NOT_EQUAL": return !(new RegExp("^" + pFilterValue + "$", regexFlags)).test(pRowValue); - //String-comparison returns false values < <= > >= are just relevant for numbervalues case "LESS": - return new Number(pRowValue) < new Number(pFilterValue); + return pRowValue < pFilterValue; case "LESS_OR_EQUAL": - return new Number(pRowValue) <= new Number(pFilterValue); + return pRowValue <= pFilterValue; case "GREATER": - return new Number(pRowValue) > new Number(pFilterValue); + return pRowValue > pFilterValue; case "GREATER_OR_EQUAL": - return new Number(pRowValue) >= new Number(pFilterValue); + return pRowValue >= pFilterValue; case "ISNULL": return pRowValue == ""; case "ISNOTNULL": -- GitLab From 0ff82a9602ef0a529f3dfb77685728e02619bc95 Mon Sep 17 00:00:00 2001 From: Pascal Neub <p.neub@adito.de> Date: Mon, 7 Jun 2021 11:27:10 +0000 Subject: [PATCH 238/242] =?UTF-8?q?[Projekt:=20xRM-Sales][TicketNr.:=20108?= =?UTF-8?q?0939][Preisliste=20wird=20abh=C3=A4ngig=20von=20der=20St=C3=BCc?= =?UTF-8?q?kzahl=20beim=20Anlegen=20einer=20Angebotsposition=20nicht=20ric?= =?UTF-8?q?htig=20gezogen]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Offeritem_entity/entityfields/quantity/onValueChange.js | 4 ++-- process/OfferOrder_lib/process.js | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/entity/Offeritem_entity/entityfields/quantity/onValueChange.js b/entity/Offeritem_entity/entityfields/quantity/onValueChange.js index d7b8bf70c3..731926cebd 100644 --- a/entity/Offeritem_entity/entityfields/quantity/onValueChange.js +++ b/entity/Offeritem_entity/entityfields/quantity/onValueChange.js @@ -8,13 +8,13 @@ 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); + 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 language = vars.exists("$param.Language_param") ? vars.get("$param.Language_param") : ""; - var quantity = vars.get("$local.value"); var sumUpTop = false; var price = vars.get("$field.PRICE"); diff --git a/process/OfferOrder_lib/process.js b/process/OfferOrder_lib/process.js index 0d59b0439d..5831e00113 100644 --- a/process/OfferOrder_lib/process.js +++ b/process/OfferOrder_lib/process.js @@ -581,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") : ""; @@ -602,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. -- GitLab From 50e181ba4907f61e9438a7b4f8cfa4c7ab0b3397 Mon Sep 17 00:00:00 2001 From: "b.ulrich" <b.ulrich@adito.de> Date: Mon, 7 Jun 2021 15:06:17 +0200 Subject: [PATCH 239/242] hotfix --- process/ClassificationUpdate_lib/process.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/process/ClassificationUpdate_lib/process.js b/process/ClassificationUpdate_lib/process.js index 7f287cfef0..e12e2235ff 100644 --- a/process/ClassificationUpdate_lib/process.js +++ b/process/ClassificationUpdate_lib/process.js @@ -495,7 +495,7 @@ ClassificationUpdateHelper._buildAttributeObject = function(pRowIds, pCurrentObj //assign them to attributeObj for easier access for (let element in attributeArray) { - [objectRowId, attributeId, attributeRelationId, value, numericValue, attributeType] = element; + [objectRowId, attributeId, attributeRelationId, value, numericValue, attributeType] = attributeArray[element]; var encodedName = AttributeSearchNameCoder.encode(attributeId, attributeType); if (!helperObject.hasOwnProperty(objectRowId)) @@ -1093,7 +1093,7 @@ ClassificationUpdateHelper._buildGradingObject = function(pCorrectCondition) //logic from above applies here aswell for (let element in gradingArray) { - [objectType, classificationGroupId, classificationTypeId, minPercent, classificationGrading] = element; + [objectType, classificationGroupId, classificationTypeId, minPercent, classificationGrading] = gradingArray[element]; if (!helperObject.hasOwnProperty(objectType)) //objectType { gradingObject[objectType] = {}; @@ -1149,7 +1149,7 @@ ClassificationUpdateHelper._buildFilterAndNoFilterObj = function(pCorrectConditi //build scoreObject out of scoreArray for (let element in scoreArray) { - [objectType, classificationGroupId, classificationTypeId, classificationScoreId, classificationScore, classificationTypeFilter] = element; + [objectType, classificationGroupId, classificationTypeId, classificationScoreId, classificationScore, classificationTypeFilter] = scoreArray[element]; if (!helperObject.hasOwnProperty(objectType)) //objectType { helperObject[objectType] = ""; @@ -1260,7 +1260,7 @@ ClassificationUpdateHelper._buildClassificationFilterObjects = function(pRecalcu let objectType, classificationGroupId, classificationTypeId, classificationTypeFilter, classificationTypeField, classificationTypeFieldType, classificationTypeIndicatorType; for (let element in outdatedGroupsAndObjectTypes) { - [objectType, classificationGroupId, classificationTypeId, classificationTypeFilter, classificationTypeField, classificationTypeFieldType, classificationTypeIndicatorType] = element; + [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 @@ -1407,7 +1407,7 @@ ClassificationUpdateHelper._buildOutdatedStoredClassificationObject = function(p //build objectTypes out of outdatedStoredClassifications for (let element in outdatedStoredClassifications) { - [objectType, objectRowId] = element; + [objectType, objectRowId] = outdatedStoredClassifications[element]; if (!helperObject.hasOwnProperty(objectType)) //objectType { helperObject[objectType] = ""; -- GitLab From 5f4d382873016f7f6fab6a674a2986f3a548c087 Mon Sep 17 00:00:00 2001 From: Martin Groppe <m.groppe@adito.de> Date: Mon, 7 Jun 2021 18:14:08 +0000 Subject: [PATCH 240/242] [Projekt: xRM-Marketing][TicketNr.: 1063704][Serienmail-/Newsletter Auswertung ] Umsetzung Workaround zum invisible setzen von eigener View nach Bedingung --- .../basic/2021.1.0/Bulkmail/AlterBulkmail.xml | 8 + .../basic/2021.1.0/Bulkmail/changelog.xml | 4 + .../EmailFilterHandling/changelog.xml | 7 + .../create_emailFilterHandling.xml | 30 ++++ .../insert_emailFilterTypeKeyword.xml | 43 +++++ .../Data_alias/basic/2021.1.0/changelog.xml | 2 + .liquibase/Data_alias/changelog.xml | 2 +- aliasDefinition/Data_alias/Data_alias.aod | 158 ++++++++++++++++++ .../_____SYSTEM_APPLICATION_NEON.aod | 14 ++ .../BulkMailAnalysisBounceChart_entity.aod | 46 +++++ .../recordcontainers/jdito/contentProcess.js | 38 +++++ ...ulkMailAnalysisOpeningHourChart_entity.aod | 59 +++++++ .../recordcontainers/jdito/contentProcess.js | 40 +++++ ...lkMailAnalysisStatusFunnelChart_entity.aod | 46 +++++ .../recordcontainers/jdito/contentProcess.js | 33 ++++ .../BulkMailAnalysis_entity.aod | 83 +++++++++ .../documentation.adoc | 3 + .../bouncerate/displayValueProcess.js | 22 +++ .../clickrate/displayValueProcess.js | 21 +++ .../deliveryrate/displayValueProcess.js | 21 +++ .../openerrate/displayValueProcess.js | 21 +++ .../uniqueclickrate/displayValueProcess.js | 21 +++ .../unsubscriberate/displayValueProcess.js | 21 +++ .../recordcontainers/jdito/contentProcess.js | 30 ++++ entity/BulkMail_entity/BulkMail_entity.aod | 140 ++++++++++++++++ .../children/bulkmailid_param/valueProcess.js | 4 + .../bulkmailoverviewview/documentation.adoc | 3 + .../children/bulkmailid_param/valueProcess.js | 4 + .../bulkmailoverviewviews/stateProcess.js | 13 ++ .../children/bulkmailid_param/valueProcess.js | 4 + .../children/bulkmailid_param/valueProcess.js | 4 + .../displayValueProcess.js | 5 + .../employee_contact_id/valueProcess.js | 7 + .../children/bulkmailid_param/valueProcess.js | 4 + .../recordcontainers/db/conditionProcess.js | 12 +- .../bouncecount.value/expression.js | 9 + .../deliveredmailcount.value/expression.js | 15 ++ .../expression.js | 3 + .../recipientcount.value/expression.js | 2 + .../recipients/filterConditionProcess.js | 11 ++ entity/EmailData_entity/EmailData_entity.aod | 72 ++++++++ .../EmailFilterHandling_entity.aod | 153 +++++++++++++++++ .../entityfields/filter/valueProcess.js | 19 +++ .../containername_param/valueProcess.js | 3 + .../entityfields/isactive/valueProcess.js | 8 + .../isfallthrough/valueProcess.js | 8 + .../entityfields/priority/valueProcess.js | 15 ++ .../displayValueProcess.js | 5 + .../filter_type.displayvalue/expression.js | 4 + .../_____LANGUAGE_EXTRA.aod | 45 +++++ .../_____LANGUAGE_de/_____LANGUAGE_de.aod | 40 +++++ .../_____LANGUAGE_en/_____LANGUAGE_en.aod | 45 +++++ neonContext/BulkMail/BulkMail.aod | 12 ++ .../BulkMailAnalysis/BulkMailAnalysis.aod | 19 +++ .../BulkMailAnalysisBounceChart.aod | 12 ++ .../BulkMailAnalysisOpeningHourChart.aod | 12 ++ .../BulkMailAnalysisStatusFunnelChart.aod | 12 ++ neonContext/EmailData/EmailData.aod | 14 ++ .../EmailFilterHandling.aod | 24 +++ .../Marketingdashboard/Marketingdashboard.aod | 74 ++++++++ .../BulkMailAnalysisBounceChart_view.aod | 18 ++ .../BulkMailAnalysisDeviceTypeChart_view.aod | 37 ++++ ...MailAnalysisDynamicMultiDataChart_view.aod | 26 +++ .../BulkMailAnalysisOpeningHourChart_view.aod | 19 +++ .../BulkMailAnalysisScoreCard_view.aod | 61 +++++++ ...BulkMailAnalysisStatusFunnelChart_view.aod | 18 ++ .../BulkMailEdit_view/BulkMailEdit_view.aod | 4 + .../BulkMailFilter_view.aod | 24 +++ .../BulkMailMain_view/BulkMailMain_view.aod | 5 + .../BulkMailOverviewBottom_view.aod | 23 +++ .../BulkMailOverviewTop_view.aod | 23 +++ .../BulkMailOverview_view.aod | 23 +++ .../BulkMailPreview_view.aod | 22 +++ .../BulkMailScoreCard_view.aod | 15 ++ .../EmailDataFilter_view.aod | 22 +++ .../EmailFilterHandlingEdit_view.aod | 40 +++++ .../EmailFilterHandlingFilter_view.aod | 38 +++++ .../EmailFilterHandlingPreview_view.aod | 18 ++ .../BulkmailAnalysis_lib.aod | 9 + process/BulkmailAnalysis_lib/process.js | 127 ++++++++++++++ process/Bulkmail_lib/process.js | 7 +- .../CommunicationBlacklist_lib.aod | 10 ++ process/CommunicationBlacklist_lib/process.js | 45 +++++ .../EmailFilterHandling_lib.aod | 10 ++ process/EmailFilterHandling_lib/process.js | 113 +++++++++++++ process/IncomingEmailExecutor_lib/process.js | 18 +- process/KeywordRegistry_basic/process.js | 9 +- .../MarketingCondition_test.aod | 1 + process/MarketingCondition_test/process.js | 0 process/Sql_lib/process.js | 26 +++ 90 files changed, 2411 insertions(+), 9 deletions(-) create mode 100644 .liquibase/Data_alias/basic/2021.1.0/Bulkmail/AlterBulkmail.xml create mode 100644 .liquibase/Data_alias/basic/2021.1.0/Bulkmail/changelog.xml create mode 100644 .liquibase/Data_alias/basic/2021.1.0/EmailFilterHandling/changelog.xml create mode 100644 .liquibase/Data_alias/basic/2021.1.0/EmailFilterHandling/create_emailFilterHandling.xml create mode 100644 .liquibase/Data_alias/basic/2021.1.0/EmailFilterHandling/insert_emailFilterTypeKeyword.xml create mode 100644 entity/BulkMailAnalysisBounceChart_entity/BulkMailAnalysisBounceChart_entity.aod create mode 100644 entity/BulkMailAnalysisBounceChart_entity/recordcontainers/jdito/contentProcess.js create mode 100644 entity/BulkMailAnalysisOpeningHourChart_entity/BulkMailAnalysisOpeningHourChart_entity.aod create mode 100644 entity/BulkMailAnalysisOpeningHourChart_entity/recordcontainers/jdito/contentProcess.js create mode 100644 entity/BulkMailAnalysisStatusFunnelChart_entity/BulkMailAnalysisStatusFunnelChart_entity.aod create mode 100644 entity/BulkMailAnalysisStatusFunnelChart_entity/recordcontainers/jdito/contentProcess.js create mode 100644 entity/BulkMailAnalysis_entity/BulkMailAnalysis_entity.aod create mode 100644 entity/BulkMailAnalysis_entity/documentation.adoc create mode 100644 entity/BulkMailAnalysis_entity/entityfields/bouncerate/displayValueProcess.js create mode 100644 entity/BulkMailAnalysis_entity/entityfields/clickrate/displayValueProcess.js create mode 100644 entity/BulkMailAnalysis_entity/entityfields/deliveryrate/displayValueProcess.js create mode 100644 entity/BulkMailAnalysis_entity/entityfields/openerrate/displayValueProcess.js create mode 100644 entity/BulkMailAnalysis_entity/entityfields/uniqueclickrate/displayValueProcess.js create mode 100644 entity/BulkMailAnalysis_entity/entityfields/unsubscriberate/displayValueProcess.js create mode 100644 entity/BulkMailAnalysis_entity/recordcontainers/jdito/contentProcess.js create mode 100644 entity/BulkMail_entity/entityfields/bulkmailbouncechart/children/bulkmailid_param/valueProcess.js create mode 100644 entity/BulkMail_entity/entityfields/bulkmailoverviewview/documentation.adoc create mode 100644 entity/BulkMail_entity/entityfields/bulkmailoverviewviews/children/bulkmailid_param/valueProcess.js create mode 100644 entity/BulkMail_entity/entityfields/bulkmailoverviewviews/stateProcess.js create mode 100644 entity/BulkMail_entity/entityfields/bulkmailstatusfunnel/children/bulkmailid_param/valueProcess.js create mode 100644 entity/BulkMail_entity/entityfields/devicetypechart/children/bulkmailid_param/valueProcess.js create mode 100644 entity/BulkMail_entity/entityfields/employee_contact_id/displayValueProcess.js create mode 100644 entity/BulkMail_entity/entityfields/employee_contact_id/valueProcess.js create mode 100644 entity/BulkMail_entity/entityfields/openinghourchart/children/bulkmailid_param/valueProcess.js create mode 100644 entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/bouncecount.value/expression.js create mode 100644 entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/deliveredmailcount.value/expression.js create mode 100644 entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/employee_contact_id.displayvalue/expression.js create mode 100644 entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/recipientcount.value/expression.js create mode 100644 entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/recipients/filterConditionProcess.js create mode 100644 entity/EmailData_entity/EmailData_entity.aod create mode 100644 entity/EmailFilterHandling_entity/EmailFilterHandling_entity.aod create mode 100644 entity/EmailFilterHandling_entity/entityfields/filter/valueProcess.js create mode 100644 entity/EmailFilterHandling_entity/entityfields/filtertypekeyword/children/containername_param/valueProcess.js create mode 100644 entity/EmailFilterHandling_entity/entityfields/isactive/valueProcess.js create mode 100644 entity/EmailFilterHandling_entity/entityfields/isfallthrough/valueProcess.js create mode 100644 entity/EmailFilterHandling_entity/entityfields/priority/valueProcess.js create mode 100644 entity/EmailFilterHandling_entity/entityfields/workflowdefinition_key/displayValueProcess.js create mode 100644 entity/EmailFilterHandling_entity/recordcontainers/db/recordfieldmappings/filter_type.displayvalue/expression.js create mode 100644 neonContext/BulkMailAnalysis/BulkMailAnalysis.aod create mode 100644 neonContext/BulkMailAnalysisBounceChart/BulkMailAnalysisBounceChart.aod create mode 100644 neonContext/BulkMailAnalysisOpeningHourChart/BulkMailAnalysisOpeningHourChart.aod create mode 100644 neonContext/BulkMailAnalysisStatusFunnelChart/BulkMailAnalysisStatusFunnelChart.aod create mode 100644 neonContext/EmailData/EmailData.aod create mode 100644 neonContext/EmailFilterHandling/EmailFilterHandling.aod create mode 100644 neonDashboard/Marketingdashboard/Marketingdashboard.aod create mode 100644 neonView/BulkMailAnalysisBounceChart_view/BulkMailAnalysisBounceChart_view.aod create mode 100644 neonView/BulkMailAnalysisDeviceTypeChart_view/BulkMailAnalysisDeviceTypeChart_view.aod create mode 100644 neonView/BulkMailAnalysisDynamicMultiDataChart_view/BulkMailAnalysisDynamicMultiDataChart_view.aod create mode 100644 neonView/BulkMailAnalysisOpeningHourChart_view/BulkMailAnalysisOpeningHourChart_view.aod create mode 100644 neonView/BulkMailAnalysisScoreCard_view/BulkMailAnalysisScoreCard_view.aod create mode 100644 neonView/BulkMailAnalysisStatusFunnelChart_view/BulkMailAnalysisStatusFunnelChart_view.aod create mode 100644 neonView/BulkMailOverviewBottom_view/BulkMailOverviewBottom_view.aod create mode 100644 neonView/BulkMailOverviewTop_view/BulkMailOverviewTop_view.aod create mode 100644 neonView/BulkMailOverview_view/BulkMailOverview_view.aod create mode 100644 neonView/BulkMailScoreCard_view/BulkMailScoreCard_view.aod create mode 100644 neonView/EmailDataFilter_view/EmailDataFilter_view.aod create mode 100644 neonView/EmailFilterHandlingEdit_view/EmailFilterHandlingEdit_view.aod create mode 100644 neonView/EmailFilterHandlingFilter_view/EmailFilterHandlingFilter_view.aod create mode 100644 neonView/EmailFilterHandlingPreview_view/EmailFilterHandlingPreview_view.aod create mode 100644 process/BulkmailAnalysis_lib/BulkmailAnalysis_lib.aod create mode 100644 process/BulkmailAnalysis_lib/process.js create mode 100644 process/CommunicationBlacklist_lib/CommunicationBlacklist_lib.aod create mode 100644 process/CommunicationBlacklist_lib/process.js create mode 100644 process/EmailFilterHandling_lib/EmailFilterHandling_lib.aod create mode 100644 process/EmailFilterHandling_lib/process.js create mode 100644 process/MarketingCondition_test/process.js 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 0000000000..0954f7085c --- /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 0000000000..633ec59ea6 --- /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/EmailFilterHandling/changelog.xml b/.liquibase/Data_alias/basic/2021.1.0/EmailFilterHandling/changelog.xml new file mode 100644 index 0000000000..1db8a9eb2e --- /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 0000000000..a6255d5b0b --- /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 0000000000..68c7ffac5b --- /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/changelog.xml b/.liquibase/Data_alias/basic/2021.1.0/changelog.xml index b44ea997ce..0a7259a9b9 100644 --- a/.liquibase/Data_alias/basic/2021.1.0/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.1.0/changelog.xml @@ -8,5 +8,7 @@ <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/changelog.xml b/.liquibase/Data_alias/changelog.xml index c857106827..5266ede8f1 100644 --- a/.liquibase/Data_alias/changelog.xml +++ b/.liquibase/Data_alias/changelog.xml @@ -27,5 +27,5 @@ <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/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod index 90477aa561..82b7e21c4c 100644 --- a/aliasDefinition/Data_alias/Data_alias.aod +++ b/aliasDefinition/Data_alias/Data_alias.aod @@ -10854,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> @@ -20884,6 +20896,152 @@ </entityFieldDb> </entityFields> </entityDb> + <entityDb> + <name>EMAIL_FILTER_HANDLING</name> + <dbName></dbName> + <idColumn>EMAIL_FILTER_HANDLINGID</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>WORKFLOWDEFINITION_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>FILTER_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>TITLE</name> + <dbName></dbName> + <primaryKey v="false" /> + <columnType v="12" /> + <size v="250" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>EMAIL_FILTER_HANDLINGID</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>PRIORITY</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>ISACTIVE</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> + <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>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> </entityGroup> </aliasDefDb> diff --git a/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod b/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod index 5bab995ba7..2f1a06e471 100644 --- a/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod +++ b/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod @@ -156,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" /> diff --git a/entity/BulkMailAnalysisBounceChart_entity/BulkMailAnalysisBounceChart_entity.aod b/entity/BulkMailAnalysisBounceChart_entity/BulkMailAnalysisBounceChart_entity.aod new file mode 100644 index 0000000000..2eaefaa396 --- /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 0000000000..25068e3fa4 --- /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 0000000000..4e594c6e91 --- /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 0000000000..ffbc6de0af --- /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 0000000000..550306ae0d --- /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 0000000000..4fead50d35 --- /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 0000000000..6a871243c1 --- /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 0000000000..6aed8e9943 --- /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 0000000000..15ae0607aa --- /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 0000000000..e4696f2209 --- /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 0000000000..2808760ff0 --- /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 0000000000..a4794fd679 --- /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 0000000000..6d09570bfd --- /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 0000000000..aa8d03ef11 --- /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 0000000000..4c401cd51d --- /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/BulkMail_entity/BulkMail_entity.aod b/entity/BulkMail_entity/BulkMail_entity.aod index bd6bf06d90..4dfdfce86f 100644 --- a/entity/BulkMail_entity/BulkMail_entity.aod +++ b/entity/BulkMail_entity/BulkMail_entity.aod @@ -381,6 +381,118 @@ <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> @@ -472,7 +584,35 @@ <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 0000000000..0d6101a3ab --- /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 0000000000..6d8e48e884 --- /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 0000000000..2a12b8389b --- /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 0000000000..52e69c9b86 --- /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 0000000000..0d6101a3ab --- /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/devicetypechart/children/bulkmailid_param/valueProcess.js b/entity/BulkMail_entity/entityfields/devicetypechart/children/bulkmailid_param/valueProcess.js new file mode 100644 index 0000000000..0d6101a3ab --- /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 0000000000..037d5e264b --- /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 0000000000..4b00f2d048 --- /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/openinghourchart/children/bulkmailid_param/valueProcess.js b/entity/BulkMail_entity/entityfields/openinghourchart/children/bulkmailid_param/valueProcess.js new file mode 100644 index 0000000000..0d6101a3ab --- /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/recordcontainers/db/conditionProcess.js b/entity/BulkMail_entity/recordcontainers/db/conditionProcess.js index 114bc7ba5a..762df3e980 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/recordfieldmappings/bouncecount.value/expression.js b/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/bouncecount.value/expression.js new file mode 100644 index 0000000000..3ec0abc2d9 --- /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 0000000000..a93cc04985 --- /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 0000000000..39b635bffd --- /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 0000000000..c30687bdfd --- /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 0000000000..45824972a7 --- /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/EmailData_entity/EmailData_entity.aod b/entity/EmailData_entity/EmailData_entity.aod new file mode 100644 index 0000000000..86a513a1b6 --- /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 0000000000..2b3ec48be0 --- /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 0000000000..68905f859e --- /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 0000000000..0122337e94 --- /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 0000000000..e056e70a86 --- /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 0000000000..3c10e6fa54 --- /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 0000000000..dfe73fb463 --- /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 0000000000..9b4c511d8c --- /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 0000000000..e6005b9db2 --- /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/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index f7ab04b504..2bcd082e98 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -8809,6 +8809,51 @@ <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> diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod index 1e9b406ae7..b4d97cae65 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -6,10 +6,26 @@ <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> @@ -18,6 +34,10 @@ <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> @@ -95,6 +115,10 @@ <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> @@ -5350,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> @@ -8914,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> @@ -9965,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> @@ -10910,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> diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod index 2086f746b7..c954de3194 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -8894,6 +8894,51 @@ <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> diff --git a/neonContext/BulkMail/BulkMail.aod b/neonContext/BulkMail/BulkMail.aod index 44a1246a9b..2fa25f28a4 100644 --- a/neonContext/BulkMail/BulkMail.aod +++ b/neonContext/BulkMail/BulkMail.aod @@ -34,5 +34,17 @@ <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 0000000000..8d2a006407 --- /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/BulkMailAnalysisBounceChart/BulkMailAnalysisBounceChart.aod b/neonContext/BulkMailAnalysisBounceChart/BulkMailAnalysisBounceChart.aod new file mode 100644 index 0000000000..505eb33571 --- /dev/null +++ b/neonContext/BulkMailAnalysisBounceChart/BulkMailAnalysisBounceChart.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>BulkMailAnalysisBounceChart</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <entity>BulkMailAnalysisBounceChart_entity</entity> + <references> + <neonViewReference> + <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 0000000000..1aa23fa769 --- /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 0000000000..253ac2ca8a --- /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/EmailData/EmailData.aod b/neonContext/EmailData/EmailData.aod new file mode 100644 index 0000000000..83bc40e8e1 --- /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 0000000000..5dd14c418c --- /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/neonDashboard/Marketingdashboard/Marketingdashboard.aod b/neonDashboard/Marketingdashboard/Marketingdashboard.aod new file mode 100644 index 0000000000..441fb62f8d --- /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/BulkMailAnalysisBounceChart_view/BulkMailAnalysisBounceChart_view.aod b/neonView/BulkMailAnalysisBounceChart_view/BulkMailAnalysisBounceChart_view.aod new file mode 100644 index 0000000000..2208b61a19 --- /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 0000000000..870422df47 --- /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 0000000000..856abaeea5 --- /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 0000000000..79c30eaefe --- /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 0000000000..650ea5b83a --- /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 0000000000..d500fb68ea --- /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 6e234a5ab8..49b8defd14 100644 --- a/neonView/BulkMailEdit_view/BulkMailEdit_view.aod +++ b/neonView/BulkMailEdit_view/BulkMailEdit_view.aod @@ -76,6 +76,10 @@ <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> diff --git a/neonView/BulkMailFilter_view/BulkMailFilter_view.aod b/neonView/BulkMailFilter_view/BulkMailFilter_view.aod index b8e876f95b..236b5f911b 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/BulkMailMain_view/BulkMailMain_view.aod b/neonView/BulkMailMain_view/BulkMailMain_view.aod index dfe012e304..f61ce77117 100644 --- a/neonView/BulkMailMain_view/BulkMailMain_view.aod +++ b/neonView/BulkMailMain_view/BulkMailMain_view.aod @@ -9,6 +9,11 @@ </masterSlaveLayout> </layout> <children> + <neonViewReference> + <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> diff --git a/neonView/BulkMailOverviewBottom_view/BulkMailOverviewBottom_view.aod b/neonView/BulkMailOverviewBottom_view/BulkMailOverviewBottom_view.aod new file mode 100644 index 0000000000..cd84008aaf --- /dev/null +++ b/neonView/BulkMailOverviewBottom_view/BulkMailOverviewBottom_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>BulkMailOverviewBottom_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <boxLayout> + <name>layout</name> + <direction>HORIZONTAL</direction> + </boxLayout> + </layout> + <children> + <neonViewReference> + <name>46b376c3-78ac-4ce4-98b4-f79f65b45b86</name> + <entityField>OpeningHourChart</entityField> + <view>BulkMailAnalysisOpeningHourChart_view</view> + </neonViewReference> + <neonViewReference> + <name>0c6750e2-5e2c-4aaa-aafc-18f13b750a62</name> + <entityField>DeviceTypeChart</entityField> + <view>BulkMailAnalysisDeviceTypeChart_view</view> + </neonViewReference> + </children> +</neonView> diff --git a/neonView/BulkMailOverviewTop_view/BulkMailOverviewTop_view.aod b/neonView/BulkMailOverviewTop_view/BulkMailOverviewTop_view.aod new file mode 100644 index 0000000000..a204f7f9f9 --- /dev/null +++ b/neonView/BulkMailOverviewTop_view/BulkMailOverviewTop_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>BulkMailOverviewTop_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <boxLayout> + <name>layout</name> + <direction>HORIZONTAL</direction> + </boxLayout> + </layout> + <children> + <neonViewReference> + <name>7f6d7977-bd3d-44a8-ad58-8b543d23c8c9</name> + <entityField>BulkmailStatusFunnel</entityField> + <view>BulkMailAnalysisStatusFunnelChart_view</view> + </neonViewReference> + <neonViewReference> + <name>050f2223-806d-4c76-803a-1cd5a830678b</name> + <entityField>BulkMailBounceChart</entityField> + <view>BulkMailAnalysisBounceChart_view</view> + </neonViewReference> + </children> +</neonView> diff --git a/neonView/BulkMailOverview_view/BulkMailOverview_view.aod b/neonView/BulkMailOverview_view/BulkMailOverview_view.aod new file mode 100644 index 0000000000..c84830332d --- /dev/null +++ b/neonView/BulkMailOverview_view/BulkMailOverview_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>BulkMailOverview_view</name> + <title>Overview</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <boxLayout> + <name>layout</name> + </boxLayout> + </layout> + <children> + <neonViewReference> + <name>077160ff-f8d8-46e3-b9bb-2cf69b7ff8e3</name> + <entityField>#ENTITY</entityField> + <view>BulkMailOverviewTop_view</view> + </neonViewReference> + <neonViewReference> + <name>160d6889-0526-4c10-97bc-dab0187bf6d4</name> + <entityField>#ENTITY</entityField> + <view>BulkMailOverviewBottom_view</view> + </neonViewReference> + </children> +</neonView> diff --git a/neonView/BulkMailPreview_view/BulkMailPreview_view.aod b/neonView/BulkMailPreview_view/BulkMailPreview_view.aod index 3cd10ec5dd..c370e94bca 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> @@ -55,6 +56,10 @@ <name>65546b24-3f6d-4639-b144-491ff5c478c1</name> <entityField>USE_TEMPLATE_ATTACHMENTS</entityField> </entityFieldLink> + <entityFieldLink> + <name>8f811e5a-0477-4ba8-8f6e-fbb390833459</name> + <entityField>EMPLOYEE_CONTACT_ID</entityField> + </entityFieldLink> <entityFieldLink> <name>9f3df668-6741-4faf-9afc-a0d761db990a</name> <entityField>INTEREST_ID</entityField> @@ -66,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/BulkMailScoreCard_view/BulkMailScoreCard_view.aod b/neonView/BulkMailScoreCard_view/BulkMailScoreCard_view.aod new file mode 100644 index 0000000000..44e48038bc --- /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/EmailDataFilter_view/EmailDataFilter_view.aod b/neonView/EmailDataFilter_view/EmailDataFilter_view.aod new file mode 100644 index 0000000000..92e180e38b --- /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 0000000000..3d9009271e --- /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 0000000000..307b0c8ccd --- /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 0000000000..cd1dc162dd --- /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/process/BulkmailAnalysis_lib/BulkmailAnalysis_lib.aod b/process/BulkmailAnalysis_lib/BulkmailAnalysis_lib.aod new file mode 100644 index 0000000000..122d3f7400 --- /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 0000000000..6c3fbf2597 --- /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 05c5dbc203..47d89a46ea 100644 --- a/process/Bulkmail_lib/process.js +++ b/process/Bulkmail_lib/process.js @@ -254,7 +254,7 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pIsTestRun) { email.toRecipients = [testRecipientData[j][1]]; let nextMailLogId = util.getNewUUID(); - email.body = email.body.replace(currentMailLogId,nextMailLogId); + email.body = StringUtils.replaceAll(email.body,currentMailLogId,nextMailLogId); currentMailLogId = nextMailLogId; isSuccess = email.send(); @@ -649,8 +649,11 @@ BulkMailUtils.insertClick = function (pMailLogId,pIpAddress,pLinkId,pBrowsername .updateFields({"OPENER_LINK_CLICK_ID": linkClickId}); } -/*@TODO: Abändern nachdem geklärt ist wie wir IP-Adresse erhalten. Momentan bekommen wir nur Loadbalancer Ip. +/* 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) diff --git a/process/CommunicationBlacklist_lib/CommunicationBlacklist_lib.aod b/process/CommunicationBlacklist_lib/CommunicationBlacklist_lib.aod new file mode 100644 index 0000000000..0a0b5c2cea --- /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 0000000000..238bf50b48 --- /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/EmailFilterHandling_lib/EmailFilterHandling_lib.aod b/process/EmailFilterHandling_lib/EmailFilterHandling_lib.aod new file mode 100644 index 0000000000..8c117f64a1 --- /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 0000000000..15db9b516d --- /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/IncomingEmailExecutor_lib/process.js b/process/IncomingEmailExecutor_lib/process.js index 7557234d79..8a6da20315 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) @@ -234,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/KeywordRegistry_basic/process.js b/process/KeywordRegistry_basic/process.js index 0dba86a0b5..5fc9954356 100644 --- a/process/KeywordRegistry_basic/process.js +++ b/process/KeywordRegistry_basic/process.js @@ -406,7 +406,9 @@ $KeywordRegistry.interestLinkStatus$subscribed = function(){return "INTERESTLINK $KeywordRegistry.interestLinkStatus$notSubscribed = function(){return "INTERESTLINK_NOTSUBSCRIBED";}; $KeywordRegistry.deviceType = function(){return "DeviceType";}; -$KeywordRegistry.interestLinkStatus$notSubscribed = function(){return "INTERESTLINK_NOTSUBSCRIBED";}; +$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";}; @@ -421,3 +423,8 @@ $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/MarketingCondition_test/MarketingCondition_test.aod b/process/MarketingCondition_test/MarketingCondition_test.aod index 3f8e07edff..e1fabb654e 100644 --- a/process/MarketingCondition_test/MarketingCondition_test.aod +++ b/process/MarketingCondition_test/MarketingCondition_test.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>MarketingCondition_test</name> <majorModelMode>DISTRIBUTED</majorModelMode> + <process>%aditoprj%/process/MarketingCondition_test/process.js</process> <variants> <element>EXECUTABLE</element> </variants> diff --git a/process/MarketingCondition_test/process.js b/process/MarketingCondition_test/process.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/process/Sql_lib/process.js b/process/Sql_lib/process.js index 44fca912c1..89a1f51ee4 100644 --- a/process/Sql_lib/process.js +++ b/process/Sql_lib/process.js @@ -3952,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 -- GitLab From 57d3f8faccb5ec926dd2d2ac81a6f482bd164303 Mon Sep 17 00:00:00 2001 From: "b.ulrich" <b.ulrich@adito.de> Date: Tue, 8 Jun 2021 08:54:25 +0200 Subject: [PATCH 241/242] [Projekt: Entwicklung - Neon][TicketNr.: 1081133][SqlBuilder newWhere bringt Fehler bei db.quote] --- process/Sql_lib/process.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/process/Sql_lib/process.js b/process/Sql_lib/process.js index e7a2d4b430..1a16af4438 100644 --- a/process/Sql_lib/process.js +++ b/process/Sql_lib/process.js @@ -4519,7 +4519,14 @@ SqlUtils.translateWithQuotes = function(pStatement, pAlias, pExecutionCallback) return pValue; // As the first element represents the value it will be quoted here. - return [db.quote(pValue[0], pAlias), 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]); -- GitLab From d7c0541182cd5911b3d4e719833000228e841ccf Mon Sep 17 00:00:00 2001 From: Daniel Tran <d.tran@adito.de> Date: Wed, 9 Jun 2021 07:20:28 +0000 Subject: [PATCH 242/242] =?UTF-8?q?[Projekt:=20xRM-ContactManagement][Tick?= =?UTF-8?q?etNr.:=201080529][Termin=20aus=20Person:=20Firma=20wird=20nicht?= =?UTF-8?q?=20automatisch=20mit=20verkn=C3=BCpft]=20-=20Added=20linking=20?= =?UTF-8?q?to=20contacts=20org,=20when=20creating=20an=20new=20appointment?= =?UTF-8?q?=20=20=20=20=20for=20this=20contact.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entityfields/newappointment/onActionProcess.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/entity/Person_entity/entityfields/newappointment/onActionProcess.js b/entity/Person_entity/entityfields/newappointment/onActionProcess.js index beb5dd4802..703676cc9e 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" } ]; -- GitLab