diff --git a/.liquibase/Data_alias/basic/2021.2.0/Mosaico/alter_bulkMailAddISOLanguage.xml b/.liquibase/Data_alias/basic/2021.2.0/Mosaico/alter_bulkMailAddISOLanguage.xml new file mode 100644 index 0000000000000000000000000000000000000000..9101534c1ec90d5fc206e3f43b57f48a0455c013 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.2.0/Mosaico/alter_bulkMailAddISOLanguage.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="m.groppe" id="14703c1c-8052-42dd-8ec5-4b9e828a3c28"> + <addColumn tableName="BULKMAIL"> + <column name="ISOLANGUAGE" type="CHAR(3)"/> + </addColumn> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.2.0/Mosaico/alter_bulkMailAddMosaicoTemplateId.xml b/.liquibase/Data_alias/basic/2021.2.0/Mosaico/alter_bulkMailAddMosaicoTemplateId.xml new file mode 100644 index 0000000000000000000000000000000000000000..ebafc4e9602273e2d1f4326c3acea357bebbdbc2 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.2.0/Mosaico/alter_bulkMailAddMosaicoTemplateId.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="m.groppe" id="76e38ecb-a7f9-4c63-8089-e14296fb5f09"> + <preConditions onFail="MARK_RAN"> + <not> + <columnExists tableName="BULKMAIL" columnName="MOSAICOTEMPLATE_ID" /> + </not> + </preConditions> + <addColumn tableName="BULKMAIL"> + <column name="MOSAICOTEMPLATE_ID" type="CHAR(36)"/> + </addColumn> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.2.0/Mosaico/changelog.xml b/.liquibase/Data_alias/basic/2021.2.0/Mosaico/changelog.xml new file mode 100644 index 0000000000000000000000000000000000000000..bbcceb5f18df46196be33f56058f50b70ae349d2 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.2.0/Mosaico/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_mosaicoTemplate.xml"/> + <include relativeToChangelogFile="true" file="insert_mosaicoBaseTemplate.xml"/> + <include relativeToChangelogFile="true" file="alter_bulkMailAddMosaicoTemplateId.xml"/> + <include relativeToChangelogFile="true" file="insert_mosaicoTemplateCategory.xml"/> + <include relativeToChangelogFile="true" file="alter_bulkMailAddISOLanguage.xml"/> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.2.0/Mosaico/create_mosaicoTemplate.xml b/.liquibase/Data_alias/basic/2021.2.0/Mosaico/create_mosaicoTemplate.xml new file mode 100644 index 0000000000000000000000000000000000000000..4a47e94f4abf4d4e7c38eaee361cfd9ab4287e5d --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.2.0/Mosaico/create_mosaicoTemplate.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="m.groppe" id="7c12f422-7d10-4c08-b5ee-11e166e71ba0"> + <createTable tableName="MOSAICOTEMPLATE"> + <column name="MOSAICOTEMPLATEID" type="CHAR(36)"> + <constraints nullable="false" primaryKey="true" primaryKeyName="PK_MOSAICOTEMPLATEID"/> + </column> + <column name="NAME" type="NVARCHAR(250)"> + <constraints nullable="false"/> + </column> + <column name="CATEGORY" type="varchar(36)"/> + <column name="ISOLANGUAGE" type="CHAR(3)"/> + <column name="METADATA" type="NCLOB"/> + <column name="CONTENT" type="NCLOB"/> + <column name="USER_NEW" type="NVARCHAR(50)"> + <constraints nullable="false"/> + </column> + <column name="DATE_NEW" type="DATETIME"> + <constraints nullable="false"/> + </column> + <column name="USER_EDIT" type="NVARCHAR(50)" /> + <column name="DATE_EDIT" type="DATETIME" /> + <column name="BASETEMPLATE" type="VARCHAR(36)"/> + </createTable> + </changeSet> +</databaseChangeLog> \ No newline at end of file diff --git a/.liquibase/Data_alias/basic/2021.2.0/Mosaico/insert_mosaicoBaseTemplate.xml b/.liquibase/Data_alias/basic/2021.2.0/Mosaico/insert_mosaicoBaseTemplate.xml new file mode 100644 index 0000000000000000000000000000000000000000..94baa2ba9eb684d740d054d98fcce8d86cb573eb --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.2.0/Mosaico/insert_mosaicoBaseTemplate.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="m.groppe" id="d5e4eec9-d3df-4557-bdbe-39b84c9a000a"> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="ed4e3c0d-e0ed-4476-b2b9-76b821f03c2f"/> + <column name="NAME" value="MosaicoBaseTemplate"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="e42140fe-7df3-4452-80b7-f914d8c03d0e"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="ed4e3c0d-e0ed-4476-b2b9-76b821f03c2f"/> + <column name="KEYID" value="adito-versafix-1"/> + <column name="TITLE" value="Adito Versafix"/> + <column name="CONTAINER" value="MosaicoBaseTemplate"/> + <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.2.0/Mosaico/insert_mosaicoTemplateCategory.xml b/.liquibase/Data_alias/basic/2021.2.0/Mosaico/insert_mosaicoTemplateCategory.xml new file mode 100644 index 0000000000000000000000000000000000000000..a89513576d48effc9b0f31daad1865586a2aac41 --- /dev/null +++ b/.liquibase/Data_alias/basic/2021.2.0/Mosaico/insert_mosaicoTemplateCategory.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="m.groppe" id="b45ae681-b484-4815-a953-4c8ba5375363"> + <insert tableName="AB_KEYWORD_CATEGORY"> + <column name="AB_KEYWORD_CATEGORYID" value="be28e8a4-08d4-4697-b248-8b97b4e6e749"/> + <column name="NAME" value="MosaicoTemplateCategory"/> + <column name="SORTINGBY" valueNumeric="0"/> + <column name="SORTINGDIRECTION" value="ASC"/> + </insert> + <insert tableName="AB_KEYWORD_ENTRY"> + <column name="AB_KEYWORD_ENTRYID" value="f4831eb4-276d-4625-ac38-d3238a306f4d"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="be28e8a4-08d4-4697-b248-8b97b4e6e749"/> + <column name="KEYID" value="NEWSLETTER"/> + <column name="TITLE" value="Newsletter"/> + <column name="CONTAINER" value="MosaicoTemplateCategory"/> + <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="b5353b07-248f-4818-96d8-171f7bac18d9"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="be28e8a4-08d4-4697-b248-8b97b4e6e749"/> + <column name="KEYID" value="INVITATION"/> + <column name="TITLE" value="Invitation"/> + <column name="CONTAINER" value="MosaicoTemplateCategory"/> + <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="71a04a08-e1e1-4512-ae61-a51a3de9a645"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="be28e8a4-08d4-4697-b248-8b97b4e6e749"/> + <column name="KEYID" value="ACTIONMAIL"/> + <column name="TITLE" value="Action mail"/> + <column name="CONTAINER" value="MosaicoTemplateCategory"/> + <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="6c6a9e60-e72e-4f38-8d51-b01674f9953f"/> + <column name="AB_KEYWORD_CATEGORY_ID" value="be28e8a4-08d4-4697-b248-8b97b4e6e749"/> + <column name="KEYID" value="TECHNICALEMAIL"/> + <column name="TITLE" value="Technical email"/> + <column name="CONTAINER" value="MosaicoTemplateCategory"/> + <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.2.0/changelog.xml b/.liquibase/Data_alias/basic/2021.2.0/changelog.xml index 3cf8852332e10ba851a2d4374b71ed11a9e3f86e..e4951320a59b1f9461b41a5f8d144e94b0864391 100644 --- a/.liquibase/Data_alias/basic/2021.2.0/changelog.xml +++ b/.liquibase/Data_alias/basic/2021.2.0/changelog.xml @@ -4,4 +4,5 @@ <include relativeToChangelogFile="true" file="TopicTree/changelog.xml"/> <include relativeToChangelogFile="true" file="CampaignStep/changelog.xml"/> <include relativeToChangelogFile="true" file="xRM-Service/changelog.xml"/> -</databaseChangeLog> \ No newline at end of file + <include relativeToChangelogFile="true" file="Mosaico/changelog.xml"/> +</databaseChangeLog> diff --git a/aliasDefinition/Data_alias/Data_alias.aod b/aliasDefinition/Data_alias/Data_alias.aod index 437beffcdfb17c34d3f4b0f578a9e891d58ca6ab..0f9089f43bf57ecf9259f0810d9547cf94df4be6 100644 --- a/aliasDefinition/Data_alias/Data_alias.aod +++ b/aliasDefinition/Data_alias/Data_alias.aod @@ -5515,8 +5515,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" /> @@ -5608,7 +5608,7 @@ <name>DESCRIPTION</name> <dbName></dbName> <primaryKey v="false" /> - <columnType v="-1" /> + <columnType v="2005" /> <size v="2147483647" /> <scale v="0" /> <notNull v="false" /> @@ -5710,8 +5710,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" /> @@ -11219,6 +11219,34 @@ <title></title> <description></description> </entityFieldDb> + <entityFieldDb> + <name>MOSAICOTEMPLATE_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>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> </entityFields> </entityDb> <entityDb> @@ -27400,6 +27428,180 @@ </entityFieldDb> </entityFields> </entityDb> + <entityDb> + <name>MOSAICOTEMPLATE</name> + <dbName></dbName> + <idColumn>MOSAICOTEMPLATEID</idColumn> + <idGeneratorType v="0" /> + <idGeneratorInterval v="1" /> + <documentation></documentation> + <title></title> + <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>MOSAICOTEMPLATEID</name> + <dbName></dbName> + <primaryKey v="true" /> + <columnType v="1" /> + <size v="36" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="true" /> + <index v="true" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>CONTENT</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_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>METADATA</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>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="250" /> + <scale v="0" /> + <notNull v="true" /> + <isUnique v="false" /> + <index v="false" /> + <documentation></documentation> + <title></title> + <description></description> + </entityFieldDb> + <entityFieldDb> + <name>BASETEMPLATE</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>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>CATEGORY</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> </entities> </entityGroup> </aliasDefDb> diff --git a/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod b/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod index da2c65876c69db5150138a5436bdf162eb6f48b3..6163debccb9b8f4f6450c1b8709e0bdc84c7deec 100644 --- a/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod +++ b/application/_____SYSTEM_APPLICATION_NEON/_____SYSTEM_APPLICATION_NEON.aod @@ -230,6 +230,10 @@ <name>EmailFilterHandling</name> <kind v="10077" /> </entityNode> + <entityNode> + <name>MosaicoTemplate</name> + <kind v="10077" /> + </entityNode> </childNodes> </entityNode> <entityNode> diff --git a/entity/BulkMailAddMosaico_entity/BulkMailAddMosaico_entity.aod b/entity/BulkMailAddMosaico_entity/BulkMailAddMosaico_entity.aod new file mode 100644 index 0000000000000000000000000000000000000000..060d3e16f7181a02024785e4d96ddccf246828cb --- /dev/null +++ b/entity/BulkMailAddMosaico_entity/BulkMailAddMosaico_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.22" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.22"> + <name>BulkMailAddMosaico_entity</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <recordContainer>recordContainer</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + </entityProvider> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityField> + <name>BASETEMPLATE</name> + <documentation>%aditoprj%/entity/BulkMailAddMosaico_entity/entityfields/basetemplate/documentation.adoc</documentation> + <title>Base Template</title> + <consumer>BaseTemplates</consumer> + <mandatory v="true" /> + <state>EDITABLE</state> + </entityField> + <entityField> + <name>MOSAICOTEMPLATE_ID</name> + <title>Copy template</title> + <consumer>MosaicoTemplates</consumer> + <state>EDITABLE</state> + <onValueChange>%aditoprj%/entity/BulkMailAddMosaico_entity/entityfields/mosaicotemplate_id/onValueChange.js</onValueChange> + </entityField> + <entityConsumer> + <name>BaseTemplates</name> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/BulkMailAddMosaico_entity/entityfields/basetemplates/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityConsumer> + <name>MosaicoTemplates</name> + <dependency> + <name>dependency</name> + <entityName>MosaicoTemplate_entity</entityName> + <fieldName>#PROVIDER</fieldName> + </dependency> + </entityConsumer> + <entityField> + <name>NAME</name> + <title>Name</title> + <mandatory v="true" /> + <state>EDITABLE</state> + </entityField> + <entityActionField> + <name>createAndOpen</name> + <title>Create and open in editor</title> + <onActionProcess>%aditoprj%/entity/BulkMailAddMosaico_entity/entityfields/createandopen/onActionProcess.js</onActionProcess> + <stateProcess>%aditoprj%/entity/BulkMailAddMosaico_entity/entityfields/createandopen/stateProcess.js</stateProcess> + </entityActionField> + <entityParameter> + <name>BulkMailId_param</name> + <expose v="true" /> + </entityParameter> + <entityField> + <name>ISOLANGUAGE</name> + <title>Language</title> + <consumer>Languages</consumer> + <mandatory v="true" /> + <state>EDITABLE</state> + </entityField> + <entityField> + <name>CATEGORY</name> + <title>Classification</title> + <consumer>KeywordMosaicoTemplateCategory</consumer> + <mandatory v="true" /> + <state>EDITABLE</state> + </entityField> + <entityConsumer> + <name>KeywordMosaicoTemplateCategory</name> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/BulkMailAddMosaico_entity/entityfields/keywordmosaicotemplatecategory/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityConsumer> + <name>Languages</name> + <dependency> + <name>dependency</name> + <entityName>Language_entity</entityName> + <fieldName>ISO3Name</fieldName> + </dependency> + </entityConsumer> + </entityFields> + <recordContainers> + <datalessRecordContainer> + <name>recordContainer</name> + <alias>Data_alias</alias> + </datalessRecordContainer> + </recordContainers> +</entity> diff --git a/entity/BulkMailAddMosaico_entity/entityfields/basetemplate/documentation.adoc b/entity/BulkMailAddMosaico_entity/entityfields/basetemplate/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/entity/BulkMailAddMosaico_entity/entityfields/basetemplates/children/containername_param/valueProcess.js b/entity/BulkMailAddMosaico_entity/entityfields/basetemplates/children/containername_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..0e3d579ca46672ae7f9dfe93246ecb85864fcb9c --- /dev/null +++ b/entity/BulkMailAddMosaico_entity/entityfields/basetemplates/children/containername_param/valueProcess.js @@ -0,0 +1,4 @@ +import("KeywordRegistry_basic"); +import("system.result"); + +result.string($KeywordRegistry.mosaicoBaseTemplate()); \ No newline at end of file diff --git a/entity/BulkMailAddMosaico_entity/entityfields/createandopen/onActionProcess.js b/entity/BulkMailAddMosaico_entity/entityfields/createandopen/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..d0709ded0849ad413fc7bfa78c087534fe0dc16b --- /dev/null +++ b/entity/BulkMailAddMosaico_entity/entityfields/createandopen/onActionProcess.js @@ -0,0 +1,42 @@ +import("MosaicoTemplate_lib"); +import("system.neon"); +import("system.util"); +import("system.vars"); +import("system.entities") + +var fieldValues = {}; +if (vars.get("$field.MOSAICOTEMPLATE_ID")) +{ + var loadConfig = entities.createConfigForLoadingRows() + .entity("MosaicoTemplate_entity") + .fields(["CONTENT","METADATA"]) + .uid(vars.get("$field.MOSAICOTEMPLATE_ID")); + + fieldValues = entities.getRow(loadConfig); +} + +var createdMosaicoTemplateId = util.getNewUUID(); + +fieldValues.BASETEMPLATE = vars.get("$field.BASETEMPLATE"); +fieldValues.NAME = vars.get("$field.NAME"); +fieldValues.MOSAICOTEMPLATEID = createdMosaicoTemplateId; +fieldValues.ISOLANGUAGE = vars.get("$field.ISOLANGUAGE"); +fieldValues.CATEGORY = vars.get("$field.CATEGORY"); + +var createConfig = entities.createConfigForAddingRows() + .entity("MOSAICOTEMPLATE_ENTITY") + .fieldValues(fieldValues) + .addParameter("CopyMosaicoTemplateIdParam", vars.get("$field.MOSAICOTEMPLATE_ID")); + +entities.createRow(createConfig); + +var updateConfig = entities.createConfigForUpdatingRows() + .entity("Bulkmail_entity") + .fieldValues({"MOSAICOTEMPLATE_ID": createdMosaicoTemplateId}) + .uid(vars.get("$param.BulkMailId_param")); + +entities.updateRow(updateConfig); + +MosaicoUtils.openInMosaico(createdMosaicoTemplateId); + +neon.closeImage(vars.get("$sys.currentimage"), true); \ No newline at end of file diff --git a/entity/BulkMailAddMosaico_entity/entityfields/createandopen/stateProcess.js b/entity/BulkMailAddMosaico_entity/entityfields/createandopen/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..aa49d9532a683bbab8c926963027e8d4efede54a --- /dev/null +++ b/entity/BulkMailAddMosaico_entity/entityfields/createandopen/stateProcess.js @@ -0,0 +1,12 @@ +import("system.neon"); +import("system.result"); +import("system.vars"); + +if (vars.get("$sys.validationerrors")) +{ + result.string(neon.COMPONENTSTATE_DISABLED); +} +else +{ + result.string(neon.COMPONENTSTATE_EDITABLE); +} diff --git a/entity/BulkMailAddMosaico_entity/entityfields/keywordmosaicotemplatecategory/children/containername_param/valueProcess.js b/entity/BulkMailAddMosaico_entity/entityfields/keywordmosaicotemplatecategory/children/containername_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..f95e6c4ea55b82158002c3d64e2dba7e95db01a0 --- /dev/null +++ b/entity/BulkMailAddMosaico_entity/entityfields/keywordmosaicotemplatecategory/children/containername_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.result"); +import("KeywordRegistry_basic") + +result.string($KeywordRegistry.mosaicoTemplateCategory()); \ No newline at end of file diff --git a/entity/BulkMailAddMosaico_entity/entityfields/mosaicotemplate_id/onValueChange.js b/entity/BulkMailAddMosaico_entity/entityfields/mosaicotemplate_id/onValueChange.js new file mode 100644 index 0000000000000000000000000000000000000000..514bef6b806f52c1f5851bbb6d4cfcb716ff9472 --- /dev/null +++ b/entity/BulkMailAddMosaico_entity/entityfields/mosaicotemplate_id/onValueChange.js @@ -0,0 +1,21 @@ +import("system.neon"); +import("system.vars"); +import("system.entities"); + +if (vars.get("$this.value")) +{ + var config = entities.createConfigForLoadingRows() + .entity("MosaicoTemplate_entity") + .fields(["BASETEMPLATE","BASETEMPLATE.displayValue","ISOLANGUAGE","ISOLANGUAGE.displayValue","CATEGORY","CATEGORY.displayValue"]) + .uid(vars.get("$this.value")); + + var fieldValues = entities.getRow(config); + + fieldValues = Object.keys(fieldValues).reduce(function (pAccumulator, pFieldName) + { + pAccumulator["$field."+pFieldName] = fieldValues[pFieldName]; + return pAccumulator; + },{}); + + neon.setFieldValues(fieldValues); +} \ No newline at end of file diff --git a/entity/BulkMail_entity/BulkMail_entity.aod b/entity/BulkMail_entity/BulkMail_entity.aod index a8044bd0acb8b04888990811895b89911ce77f6b..19f43ebcb586a085f8f43e823fd2d4dace177c97 100644 --- a/entity/BulkMail_entity/BulkMail_entity.aod +++ b/entity/BulkMail_entity/BulkMail_entity.aod @@ -42,6 +42,7 @@ <title>Document Template</title> <consumer>Templates</consumer> <mandatory v="false" /> + <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/documenttemplate_id/stateProcess.js</stateProcess> <onValueChange>%aditoprj%/entity/BulkMail_entity/entityfields/documenttemplate_id/onValueChange.js</onValueChange> <onValueChangeTypes> <element>MASK</element> @@ -364,14 +365,12 @@ </entityField> <entityField> <name>DATE_NEW</name> - <title>Created on</title> <contentType>DATE</contentType> <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/date_new/valueProcess.js</valueProcess> </entityField> <entityField> <name>recipientCount</name> <title>Recipients</title> - <contentType>NUMBER</contentType> </entityField> <entityField> <name>deliveredMailCount</name> @@ -385,7 +384,6 @@ <name>EMPLOYEE_CONTACT_ID</name> <title>Person in charge</title> <consumer>Employees</consumer> - <groupable v="true" /> <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> @@ -482,6 +480,58 @@ </entityParameter> </children> </entityConsumer> + <entityField> + <name>DATE_EDIT</name> + <title>Edited on</title> + <contentType>DATE</contentType> + <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/date_edit/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>USER_NEW</name> + <title>Creator</title> + <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/user_new/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>USER_EDIT</name> + <title>Editor</title> + <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/user_edit/valueProcess.js</valueProcess> + </entityField> + <entityParameter> + <name>PresetRecipientsContext_param</name> + <expose v="true" /> + <documentation>%aditoprj%/entity/BulkMail_entity/entityfields/presetrecipientscontext_param/documentation.adoc</documentation> + </entityParameter> + <entityParameter> + <name>PresetRecipientsFilter_param</name> + <expose v="true" /> + <documentation>%aditoprj%/entity/BulkMail_entity/entityfields/presetrecipientsfilter_param/documentation.adoc</documentation> + </entityParameter> + <entityField> + <name>firstSendDate</name> + <title>Send Date</title> + <contentType>DATE</contentType> + </entityField> + <entityParameter> + <name>CreateFromMosaicoTemplateId_param</name> + <expose v="true" /> + </entityParameter> + <entityField> + <name>MOSAICOTEMPLATE_ID</name> + <title>Mosaico template</title> + <consumer>MosaicoTemplates</consumer> + <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/mosaicotemplate_id/stateProcess.js</stateProcess> + <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/mosaicotemplate_id/valueProcess.js</valueProcess> + <displayValueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/mosaicotemplate_id/displayValueProcess.js</displayValueProcess> + <onValueChange>%aditoprj%/entity/BulkMail_entity/entityfields/mosaicotemplate_id/onValueChange.js</onValueChange> + </entityField> + <entityConsumer> + <name>MosaicoTemplates</name> + <dependency> + <name>dependency</name> + <entityName>MosaicoTemplate_entity</entityName> + <fieldName>#PROVIDER</fieldName> + </dependency> + </entityConsumer> <entityActionGroup> <name>observeActionoGroup</name> <children> @@ -529,6 +579,20 @@ <onActionProcess>%aditoprj%/entity/BulkMail_entity/entityfields/copybulkmail/onActionProcess.js</onActionProcess> <iconId>VAADIN:COPY</iconId> </entityActionField> + <entityActionField> + <name>openInMosaico</name> + <title>Open in mosaico</title> + <onActionProcess>%aditoprj%/entity/BulkMail_entity/entityfields/openinmosaico/onActionProcess.js</onActionProcess> + <iconId>NEON:WRENCH</iconId> + <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/openinmosaico/stateProcess.js</stateProcess> + </entityActionField> + <entityActionField> + <name>newMosaicoTemplate</name> + <title>Open new mosaico template</title> + <onActionProcess>%aditoprj%/entity/BulkMail_entity/entityfields/newmosaicotemplate/onActionProcess.js</onActionProcess> + <iconId>VAADIN:TOOLS</iconId> + <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/newmosaicotemplate/stateProcess.js</stateProcess> + </entityActionField> <entityActionField> <name>openAdminView</name> <title>Open admin view</title> @@ -536,43 +600,12 @@ <iconId>VAADIN:CURLY_BRACKETS</iconId> <stateProcess>%aditoprj%/entity/BulkMail_entity/entityfields/openadminview/stateProcess.js</stateProcess> </entityActionField> - <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> <entityField> - <name>DATE_EDIT</name> - <title>Edited on</title> - <contentType>DATE</contentType> - <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/date_edit/valueProcess.js</valueProcess> - </entityField> - <entityField> - <name>USER_NEW</name> - <title>Creator</title> - <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/user_new/valueProcess.js</valueProcess> - </entityField> - <entityField> - <name>USER_EDIT</name> - <title>Editor</title> - <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/user_edit/valueProcess.js</valueProcess> - </entityField> - <entityParameter> - <name>PresetRecipientsContext_param</name> - <expose v="true" /> - <documentation>%aditoprj%/entity/BulkMail_entity/entityfields/presetrecipientscontext_param/documentation.adoc</documentation> - </entityParameter> - <entityParameter> - <name>PresetRecipientsFilter_param</name> - <expose v="true" /> - <documentation>%aditoprj%/entity/BulkMail_entity/entityfields/presetrecipientsfilter_param/documentation.adoc</documentation> - </entityParameter> - <entityField> - <name>firstSendDate</name> - <title>Send Date</title> - <contentType>DATE</contentType> + <name>ISOLANGUAGE</name> + <title>Language</title> + <consumer>Languages</consumer> + <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/isolanguage/valueProcess.js</valueProcess> + <displayValueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/isolanguage/displayValueProcess.js</displayValueProcess> </entityField> <entityField> <name>dateLastEdit</name> @@ -589,6 +622,14 @@ <name>BULKMAIL_OBJECTTYPE</name> <valueProcess>%aditoprj%/entity/BulkMail_entity/entityfields/bulkmail_objecttype/valueProcess.js</valueProcess> </entityField> + <entityConsumer> + <name>Languages</name> + <dependency> + <name>dependency</name> + <entityName>Language_entity</entityName> + <fieldName>ISO3Name</fieldName> + </dependency> + </entityConsumer> </entityFields> <recordContainers> <dbRecordContainer> @@ -687,7 +728,6 @@ <dbRecordFieldMapping> <name>recipientCount.value</name> <expression>%aditoprj%/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/recipientcount.value/expression.js</expression> - <isFilterable v="true" /> </dbRecordFieldMapping> <dbRecordFieldMapping> <name>bounceCount.value</name> @@ -724,6 +764,15 @@ <name>USER_NEW.value</name> <recordfield>BULKMAIL.USER_NEW</recordfield> </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>MOSAICOTEMPLATE_ID.value</name> + <recordfield>BULKMAIL.MOSAICOTEMPLATE_ID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>MOSAICOTEMPLATE_ID.displayValue</name> + <recordfield>MOSAICOTEMPLATE.NAME</recordfield> + <expression>%aditoprj%/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/mosaicotemplate_id.displayvalue/expression.js</expression> + </dbRecordFieldMapping> <dbRecordFieldMapping> <name>firstSendDate.value</name> <expression>%aditoprj%/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/firstsenddate.value/expression.js</expression> @@ -739,22 +788,38 @@ <expression>%aditoprj%/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/userlastedit.value/expression.js</expression> <isFilterable v="true" /> </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>ISOLANGUAGE.value</name> + <recordfield>BULKMAIL.ISOLANGUAGE</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>ISOLANGUAGE.displayValue</name> + <expression>%aditoprj%/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/isolanguage.displayvalue/expression.js</expression> + </dbRecordFieldMapping> </recordFieldMappings> <linkInformation> <linkInformation> - <name>6444866d-42ee-4b7b-8536-6dc8f6437c45</name> + <name>453f760a-71eb-45d4-bedd-f939d3f87f84</name> <tableName>BULKMAIL</tableName> <primaryKey>BULKMAILID</primaryKey> <isUIDTable v="true" /> <readonly v="false" /> </linkInformation> <linkInformation> - <name>914d6373-4409-44e5-882a-3f795b196d7b</name> + <name>ca336008-563a-4550-84b0-b812707cd3d0</name> <tableName>DOCUMENTTEMPLATE</tableName> <primaryKey>DOCUMENTTEMPLATEID</primaryKey> <isUIDTable v="false" /> <readonly v="true" /> </linkInformation> + <linkInformation> + <name>04b5f582-de36-43ab-bf2d-7b73a776772e</name> + <tableName>MOSAICOTEMPLATE</tableName> + <primaryKey>MOSAICOTEMPLATEID</primaryKey> + <isUIDTable v="false" /> + <readonly v="true" /> + </linkInformation> </linkInformation> <filterExtensions> <filterExtension> diff --git a/entity/BulkMail_entity/afterUiInit.js b/entity/BulkMail_entity/afterUiInit.js index 1e0e4d5eef788e4b28c73de46dc13f41e2b05bfa..9683c9911488b527fa27d3c2460c228512091565 100644 --- a/entity/BulkMail_entity/afterUiInit.js +++ b/entity/BulkMail_entity/afterUiInit.js @@ -22,7 +22,9 @@ if (!vars.exists("$context.dataCopied") && vars.get("$param.CopyBulkMailId_param "TESTING_CONTACT_ID", "TESTING_EMAIL_ADDRESS", "USE_TEMPLATE_ATTACHMENTS", - "INTEREST_ID" + "INTEREST_ID", + "MOSAICOTEMPLATE_ID", + "ISOLANGUAGE" ]) .uid(vars.get("$param.CopyBulkMailId_param")); diff --git a/entity/BulkMail_entity/entityfields/bindata/valueProcess.js b/entity/BulkMail_entity/entityfields/bindata/valueProcess.js index 52dbdae3a4809478e2dacaa68176bc37eade3fd9..449206cf2746bf3aefd027152050228451ba0395 100644 --- a/entity/BulkMail_entity/entityfields/bindata/valueProcess.js +++ b/entity/BulkMail_entity/entityfields/bindata/valueProcess.js @@ -2,9 +2,10 @@ import("system.result"); import("Bulkmail_lib"); import("system.vars"); +var template; if (vars.get("$param.CopyBulkMailId_param") && vars.get("$this.value") == null) { - var template = BulkMailUtils.getBulkMailTemplate(vars.get("$param.CopyBulkMailId_param"), "", false, false) + template = BulkMailUtils.getBulkMailTemplate(vars.get("$param.CopyBulkMailId_param"), "", false, false) result.string([template.filename, template.content, template.mimeType].join(";")); } diff --git a/entity/BulkMail_entity/entityfields/content/valueProcess.js b/entity/BulkMail_entity/entityfields/content/valueProcess.js index 5192b7dcfe71ab076752a059520149b1ce08baf6..d5d1db80974240bcac5caf614491d0a42023cc22 100644 --- a/entity/BulkMail_entity/entityfields/content/valueProcess.js +++ b/entity/BulkMail_entity/entityfields/content/valueProcess.js @@ -10,11 +10,12 @@ import("Bulkmail_lib"); /* Processes that can also set the value of this field: * - bindata.onValueChange * - DOCUMENTTEMPLATE_ID.onValueChange + * - MOSAICOTEMPLATE_ID.onValueChange */ if (vars.get("$sys.viewmode") == neon.FRAME_VIEWMODE_DATASET && vars.get("$this.value") == null) { - var template = BulkMailUtils.getBulkMailTemplate(vars.get("$field.BULKMAILID"), vars.get("$field.DOCUMENTTEMPLATE_ID"), false, false, new FileUpload(vars.get("$field.bindata"))); + var template = BulkMailUtils.getBulkMailTemplate(vars.get("$field.BULKMAILID"), vars.get("$field.DOCUMENTTEMPLATE_ID"), false, false, new FileUpload(vars.get("$field.bindata")), vars.get("$field.MOSAICOTEMPLATE_ID")); if (template && template.type) { var content = util.decodeBase64String(template.content); diff --git a/entity/BulkMail_entity/entityfields/documenttemplate_id/stateProcess.js b/entity/BulkMail_entity/entityfields/documenttemplate_id/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..c13e7d9d548d02f1d33ccdadf1e55036299f9a71 --- /dev/null +++ b/entity/BulkMail_entity/entityfields/documenttemplate_id/stateProcess.js @@ -0,0 +1,12 @@ +import("system.vars"); +import("system.result"); +import("system.neon"); + +if (vars.get("$field.MOSAICOTEMPLATE_ID")) +{ + result.string(neon.COMPONENTSTATE_DISABLED); +} +else +{ + result.string(neon.COMPONENTSTATE_EDITABLE) +} \ No newline at end of file diff --git a/entity/BulkMail_entity/entityfields/isolanguage/displayValueProcess.js b/entity/BulkMail_entity/entityfields/isolanguage/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..9278f212a479bb0de19104a610f39e1de83cccf0 --- /dev/null +++ b/entity/BulkMail_entity/entityfields/isolanguage/displayValueProcess.js @@ -0,0 +1,11 @@ +import("system.translate"); +import("system.result"); +import("system.vars"); +import("Sql_lib"); + +var latinName = newSelect("NAME_LATIN") + .from("AB_LANGUAGE") + .whereIfSet("AB_LANGUAGE.ISO3", "$field.ISOLANGUAGE") + .cell(true) + +result.string(translate.text(latinName)); \ No newline at end of file diff --git a/entity/BulkMail_entity/entityfields/isolanguage/valueProcess.js b/entity/BulkMail_entity/entityfields/isolanguage/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..7a23b1ac729496cd74e1b9c59801f610f98246d0 --- /dev/null +++ b/entity/BulkMail_entity/entityfields/isolanguage/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("deu"); +} \ No newline at end of file diff --git a/entity/BulkMail_entity/entityfields/mosaicotemplate_id/displayValueProcess.js b/entity/BulkMail_entity/entityfields/mosaicotemplate_id/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..9c83829a68ffa67bc144e3731b0780ff1d7d947f --- /dev/null +++ b/entity/BulkMail_entity/entityfields/mosaicotemplate_id/displayValueProcess.js @@ -0,0 +1,8 @@ +import("system.result"); +import("Sql_lib"); + + +result.string(newSelect("MOSAICOTEMPLATE.NAME") + .from("MOSAICOTEMPLATE") + .whereIfSet("MOSAICOTEMPLATE.MOSAICOTEMPLATEID", "$field.MOSAICOTEMPLATE_ID") + .cell(true)); \ No newline at end of file diff --git a/entity/BulkMail_entity/entityfields/mosaicotemplate_id/onValueChange.js b/entity/BulkMail_entity/entityfields/mosaicotemplate_id/onValueChange.js new file mode 100644 index 0000000000000000000000000000000000000000..75ba2b3e5dbdfce827895489111c29cf60ed02ac --- /dev/null +++ b/entity/BulkMail_entity/entityfields/mosaicotemplate_id/onValueChange.js @@ -0,0 +1,42 @@ +import("system.vars"); +import("system.neon"); +import("system.util"); +import("system.mail"); +import("DocumentTemplate_lib"); +import("Entity_lib"); +import("EmailUtil_lib"); +import("Document_lib"); + +if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW || vars.get("$sys.recordstate") == neon.OPERATINGSTATE_EDIT) +{ + // note: could not use only the valueProcess from $field.content because then it refreshed $field.content just before save. + // --> only set in $field.content.valueProcess if $field.content is null and set it from here only if MASK triggered change + var fileUpLoad = new FileUpload(vars.get("$field.bindata")); + var content,type,template; + if (fileUpLoad.isFilled()) + { + type = DocumentTemplate.types.fromFileExtension(fileUpLoad.fileExtension); + if (type == DocumentTemplate.types.HTML || type == DocumentTemplate.types.TXT || type == DocumentTemplate.types.EML) + { + content = util.decodeBase64String(fileUpLoad.bindata); + } + } + else + { + var mosaicoTemplateId = vars.get("$local.value"); + template = DocumentTemplate.loadTemplate(mosaicoTemplateId, "MOSAICOTEMPLATE", false); + if (template != null) + { + type = template.type; + if (type == DocumentTemplate.types.HTML || type == DocumentTemplate.types.TXT || type == DocumentTemplate.types.EML) + { + content = util.decodeBase64String(template.content); + } + } + } + if(content) + { + vars.set("$field.templateType", type); + vars.set("$field.content", content); + } +} \ No newline at end of file diff --git a/entity/BulkMail_entity/entityfields/mosaicotemplate_id/stateProcess.js b/entity/BulkMail_entity/entityfields/mosaicotemplate_id/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..d2791e06b0f022d60b0fc439b58d867db4484c41 --- /dev/null +++ b/entity/BulkMail_entity/entityfields/mosaicotemplate_id/stateProcess.js @@ -0,0 +1,12 @@ +import("system.vars"); +import("system.result"); +import("system.neon"); + +if (vars.get("$field.DOCUMENTTEMPLATE_ID")) +{ + result.string(neon.COMPONENTSTATE_DISABLED); +} +else +{ + result.string(neon.COMPONENTSTATE_EDITABLE) +} \ No newline at end of file diff --git a/entity/BulkMail_entity/entityfields/mosaicotemplate_id/valueProcess.js b/entity/BulkMail_entity/entityfields/mosaicotemplate_id/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..6b100c42c35a32d13a07b0555429e04b6eaefda2 --- /dev/null +++ b/entity/BulkMail_entity/entityfields/mosaicotemplate_id/valueProcess.js @@ -0,0 +1,8 @@ +import("Util_lib"); +import("system.result"); +import("system.vars"); + +if (vars.get("$param.CreateFromMosaicoTemplateId_param") && Utils.isNullOrEmptyString(vars.get("$this.value"))) +{ + result.string(vars.get("$param.CreateFromMosaicoTemplateId_param")); +} \ No newline at end of file diff --git a/entity/BulkMail_entity/entityfields/name/valueProcess.js b/entity/BulkMail_entity/entityfields/name/valueProcess.js index adb0f3d6b2fdf8627655ec017e6eba58491048a7..884964819da22c08dc0ca1a98c93e5ccd7c37859 100644 --- a/entity/BulkMail_entity/entityfields/name/valueProcess.js +++ b/entity/BulkMail_entity/entityfields/name/valueProcess.js @@ -21,7 +21,24 @@ if (!vars.get("$this.value") && vars.get("$sys.recordstate") == neon.OPERATINGST var name = entities.getRows(conf); if (name.length > 0) + { name = name[0].NAME; + } + + result.string(name); + } + else if (vars.get("$field.MOSAICOTEMPLATE_ID")) + { + let conf = entities.createConfigForLoadingRows(); + conf.entity("MosaicoTemplate_entity") + .fields(["NAME"]) + .uid(vars.get("$field.MOSAICOTEMPLATE_ID")); + + let name = entities.getRows(conf); + if (name.length > 0) + { + name = name[0].NAME; + } result.string(name); } diff --git a/entity/BulkMail_entity/entityfields/newmosaicotemplate/onActionProcess.js b/entity/BulkMail_entity/entityfields/newmosaicotemplate/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..55e632ebbcdeb6bf790e5834e6df79e9fe6747a5 --- /dev/null +++ b/entity/BulkMail_entity/entityfields/newmosaicotemplate/onActionProcess.js @@ -0,0 +1,8 @@ +import("system.neon"); +import("system.vars") + +var params = { + "BulkMailId_param": vars.get("$field.BULKMAILID") +}; + +neon.openContext("BulkMailAddMosaico", "BulkMailAddMosaicoEdit_view",null, neon.OPERATINGSTATE_VIEW, params, null); \ No newline at end of file diff --git a/entity/BulkMail_entity/entityfields/newmosaicotemplate/stateProcess.js b/entity/BulkMail_entity/entityfields/newmosaicotemplate/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..507a146fc740e1b8115df769b626058227586c03 --- /dev/null +++ b/entity/BulkMail_entity/entityfields/newmosaicotemplate/stateProcess.js @@ -0,0 +1,13 @@ +import("system.vars"); +import("system.neon"); +import("system.result"); + + +if (vars.get("$field.MOSAICOTEMPLATE_ID" || vars.get("$field.DOCUMENTTEMPLATE_ID") || vars.get("$field.content"))) +{ + result.string( neon.COMPONENTSTATE_INVISIBLE); +} +else +{ + result.string(neon.COMPONENTSTATE_EDITABLE); +} \ No newline at end of file diff --git a/entity/BulkMail_entity/entityfields/openinmosaico/onActionProcess.js b/entity/BulkMail_entity/entityfields/openinmosaico/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..e4354fb35e2ac07a93048c0cc284700916d6ef3b --- /dev/null +++ b/entity/BulkMail_entity/entityfields/openinmosaico/onActionProcess.js @@ -0,0 +1,5 @@ +import("system.vars"); +import("system.neon"); +import("MosaicoTemplate_lib") + +MosaicoUtils.openInMosaico(vars.get("$field.MOSAICOTEMPLATE_ID")); \ No newline at end of file diff --git a/entity/BulkMail_entity/entityfields/openmosaico/stateProcess.js b/entity/BulkMail_entity/entityfields/openinmosaico/stateProcess.js similarity index 66% rename from entity/BulkMail_entity/entityfields/openmosaico/stateProcess.js rename to entity/BulkMail_entity/entityfields/openinmosaico/stateProcess.js index b046fb7ebf6d157125ef135fe4d1f1f7857ac98c..4756f0ef5428b776e137f8af2df88feacb82ddd2 100644 --- a/entity/BulkMail_entity/entityfields/openmosaico/stateProcess.js +++ b/entity/BulkMail_entity/entityfields/openinmosaico/stateProcess.js @@ -1,9 +1,9 @@ +import("system.vars"); import("system.neon"); import("system.result"); -import("system.project"); -if (project.getPreferenceValue("custom.mosaico.url") != "") +if (vars.get("$field.MOSAICOTEMPLATE_ID")) { result.string( neon.COMPONENTSTATE_EDITABLE); } diff --git a/entity/BulkMail_entity/entityfields/openmosaico/onActionProcess.js b/entity/BulkMail_entity/entityfields/openmosaico/onActionProcess.js deleted file mode 100644 index 151f3d8d61ea2c2acd6255a79fdf067a27002886..0000000000000000000000000000000000000000 --- a/entity/BulkMail_entity/entityfields/openmosaico/onActionProcess.js +++ /dev/null @@ -1,4 +0,0 @@ -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/templatetype/valueProcess.js b/entity/BulkMail_entity/entityfields/templatetype/valueProcess.js index 70e4f35af37e352ee5cb868c47e11d3700f8a33f..559b11282d5584c03ae2963b964729eeef87c511 100644 --- a/entity/BulkMail_entity/entityfields/templatetype/valueProcess.js +++ b/entity/BulkMail_entity/entityfields/templatetype/valueProcess.js @@ -6,6 +6,7 @@ import("system.vars"); /* Processes that can also set the value of this field: * - bindata.onValueChange * - DOCUMENTTEMPLATE_ID.onValueChange + * - MOSAICOTEMPLATE_ID.onVAlueChange */ if (vars.get("$sys.viewmode") == neon.FRAME_VIEWMODE_DATASET) diff --git a/entity/BulkMail_entity/recordcontainers/db/fromClauseProcess.js b/entity/BulkMail_entity/recordcontainers/db/fromClauseProcess.js index c25725ee94a7972130b141b36e34354b285a5619..1820a51b4973e9e143e89ef18739e26e3f5b276f 100644 --- a/entity/BulkMail_entity/recordcontainers/db/fromClauseProcess.js +++ b/entity/BulkMail_entity/recordcontainers/db/fromClauseProcess.js @@ -1,3 +1,8 @@ +import("Sql_lib"); import("system.result"); -result.string("BULKMAIL left join DOCUMENTTEMPLATE on BULKMAIL.DOCUMENTTEMPLATE_ID = DOCUMENTTEMPLATE.DOCUMENTTEMPLATEID"); \ No newline at end of file +var from = new SqlBuilder() + .from("BULKMAIL") + .leftJoin("DOCUMENTTEMPLATE", "BULKMAIL.DOCUMENTTEMPLATE_ID = DOCUMENTTEMPLATE.DOCUMENTTEMPLATEID") + .leftJoin("MOSAICOTEMPLATE", "BULKMAIL.MOSAICOTEMPLATE_ID = MOSAICOTEMPLATE.MOSAICOTEMPLATEID") +result.string(from.toString()); \ No newline at end of file diff --git a/entity/BulkMail_entity/recordcontainers/db/onDBUpdate.js b/entity/BulkMail_entity/recordcontainers/db/onDBUpdate.js index 7626ea2ecbb54be6241b0f6d4214ac16388e7bb3..fe4b9f614916fffa60a24c75cb84e4450038ef7e 100644 --- a/entity/BulkMail_entity/recordcontainers/db/onDBUpdate.js +++ b/entity/BulkMail_entity/recordcontainers/db/onDBUpdate.js @@ -19,8 +19,9 @@ var rowdata = vars.get("$local.rowdata"); var bulkMailId = rowdata["BULKMAIL.BULKMAILID"]; var templateId = rowdata["BULKMAIL.DOCUMENTTEMPLATE_ID"]; var bulkMailName = rowdata["BULKMAIL.NAME"]; +var mosaicoTemplateId = rowdata["BULKMAIL.MOSAICOTEMPLATE_ID"]; -var template = BulkMailUtils.getBulkMailTemplate(bulkMailId, templateId, false, false, new FileUpload(bindata)); +var template = BulkMailUtils.getBulkMailTemplate(bulkMailId, templateId, false, false, new FileUpload(bindata), mosaicoTemplateId); if (content) template.content = util.encodeBase64String(content); diff --git a/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/isolanguage.displayvalue/expression.js b/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/isolanguage.displayvalue/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..ce72053235e7bf02ba59bccae083058fbaf02f73 --- /dev/null +++ b/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/isolanguage.displayvalue/expression.js @@ -0,0 +1,4 @@ +import("system.result"); +import("Keyword_lib"); + +result.string(LanguageKeywordUtils.getResolvedTitleSqlPart("BULKMAIL.ISOLANGUAGE")); \ No newline at end of file diff --git a/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/mosaicotemplate_id.displayvalue/expression.js b/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/mosaicotemplate_id.displayvalue/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..055bdb685e54dcd2422a823c29f97241ade8ff3a --- /dev/null +++ b/entity/BulkMail_entity/recordcontainers/db/recordfieldmappings/mosaicotemplate_id.displayvalue/expression.js @@ -0,0 +1,8 @@ +import("system.result"); +import("Sql_lib"); + + +result.string(newSelect("MOSAICOTEMPLATE.NAME") + .from("MOSAICOTEMPLATE") + .whereIfSet("MOSAICOTEMPLATE.MOSAICOTEMPLATEID = BULKMAIL.MOSAICOTEMPLATE_ID") + .toString()); \ No newline at end of file diff --git a/entity/DocumentTemplate_entity/DocumentTemplate_entity.aod b/entity/DocumentTemplate_entity/DocumentTemplate_entity.aod index f9077535b3495a0a3a35a7b664ad654b7746a0af..17f075c645ad79860c201c3534a6310a24fd70a4 100644 --- a/entity/DocumentTemplate_entity/DocumentTemplate_entity.aod +++ b/entity/DocumentTemplate_entity/DocumentTemplate_entity.aod @@ -74,6 +74,7 @@ <entityField> <name>BINDATA</name> <contentType>FILE</contentType> + <valueProcess>%aditoprj%/entity/DocumentTemplate_entity/entityfields/bindata/valueProcess.js</valueProcess> <onValueChange>%aditoprj%/entity/DocumentTemplate_entity/entityfields/bindata/onValueChange.js</onValueChange> <onValueChangeTypes> <element>MASK</element> @@ -348,6 +349,10 @@ <name>IncludeDocumentTemplateIds_param</name> <expose v="true" /> </entityParameter> + <entityParameter> + <name>CreateFromMosaicoTemplateId_param</name> + <expose v="true" /> + </entityParameter> </entityFields> <recordContainers> <dbRecordContainer> diff --git a/entity/DocumentTemplate_entity/entityfields/bindata/valueProcess.js b/entity/DocumentTemplate_entity/entityfields/bindata/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..161f999c1289aa42206799732d0714570b907507 --- /dev/null +++ b/entity/DocumentTemplate_entity/entityfields/bindata/valueProcess.js @@ -0,0 +1,10 @@ +import("Util_lib"); +import("system.result"); +import("DocumentTemplate_lib"); +import("system.vars"); + +if (vars.get("$param.CreateFromMosaicoTemplateId_param") && Utils.isNullOrEmptyString(vars.get("$this.value"))) +{ + template = DocumentTemplate.loadTemplate(vars.get("$param.CreateFromMosaicoTemplateId_param"), "MOSAICOTEMPLATE", false) + result.string([template.filename, template.content, template.mimeType].join(";")); +} \ No newline at end of file diff --git a/entity/MosaicoTemplate_entity/MosaicoTemplate_entity.aod b/entity/MosaicoTemplate_entity/MosaicoTemplate_entity.aod new file mode 100644 index 0000000000000000000000000000000000000000..b62eb16a186dbf4fee0ccbbe1aa2a065c3764972 --- /dev/null +++ b/entity/MosaicoTemplate_entity/MosaicoTemplate_entity.aod @@ -0,0 +1,249 @@ +<?xml version="1.0" encoding="UTF-8"?> +<entity xmlns="http://www.adito.de/2018/ao/Model" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" VERSION="1.3.22" xsi:schemaLocation="http://www.adito.de/2018/ao/Model adito://models/xsd/entity/1.3.22"> + <name>MosaicoTemplate_entity</name> + <title>Mosaico</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <documentation>%aditoprj%/entity/MosaicoTemplate_entity/documentation.adoc</documentation> + <icon>VAADIN:EXTERNAL_BROWSER</icon> + <contentTitleProcess>%aditoprj%/entity/MosaicoTemplate_entity/contentTitleProcess.js</contentTitleProcess> + <afterUiInit>%aditoprj%/entity/MosaicoTemplate_entity/afterUiInit.js</afterUiInit> + <imageProcess>%aditoprj%/entity/MosaicoTemplate_entity/imageProcess.js</imageProcess> + <titlePlural>Mosaico</titlePlural> + <recordContainer>db</recordContainer> + <entityFields> + <entityProvider> + <name>#PROVIDER</name> + </entityProvider> + <entityField> + <name>CONTENT</name> + </entityField> + <entityField> + <name>DATE_EDIT</name> + <contentType>DATE</contentType> + <valueProcess>%aditoprj%/entity/MosaicoTemplate_entity/entityfields/date_edit/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>DATE_NEW</name> + <title>DATE_NEW</title> + <contentType>DATE</contentType> + <valueProcess>%aditoprj%/entity/MosaicoTemplate_entity/entityfields/date_new/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>METADATA</name> + </entityField> + <entityField> + <name>MOSAICOTEMPLATEID</name> + </entityField> + <entityField> + <name>NAME</name> + <title>Name</title> + <mandatory v="true" /> + </entityField> + <entityField> + <name>USER_EDIT</name> + <contentType>TEXT</contentType> + <valueProcess>%aditoprj%/entity/MosaicoTemplate_entity/entityfields/user_edit/valueProcess.js</valueProcess> + </entityField> + <entityField> + <name>USER_NEW</name> + <valueProcess>%aditoprj%/entity/MosaicoTemplate_entity/entityfields/user_new/valueProcess.js</valueProcess> + </entityField> + <entityProvider> + <name>#PROVIDER_AGGREGATES</name> + <useAggregates v="true" /> + </entityProvider> + <entityField> + <name>BASETEMPLATE</name> + <title>Base Template</title> + <consumer>KeywordMosaicoBaseTemplate</consumer> + <mandatory v="true" /> + <stateProcess>%aditoprj%/entity/MosaicoTemplate_entity/entityfields/basetemplate/stateProcess.js</stateProcess> + </entityField> + <entityConsumer> + <name>KeywordMosaicoBaseTemplate</name> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/MosaicoTemplate_entity/entityfields/keywordmosaicobasetemplate/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityConsumer> + <name>Documents</name> + <dependency> + <name>dependency</name> + <entityName>Document_entity</entityName> + <fieldName>SingleDocument</fieldName> + </dependency> + <children> + <entityParameter> + <name>AssignmentRowId_param</name> + <valueProcess>%aditoprj%/entity/MosaicoTemplate_entity/entityfields/documents/children/assignmentrowid_param/valueProcess.js</valueProcess> + </entityParameter> + <entityParameter> + <name>AssignmentTable_param</name> + <valueProcess>%aditoprj%/entity/MosaicoTemplate_entity/entityfields/documents/children/assignmenttable_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityActionField> + <name>OpenInMosaico</name> + <title>Open in mosaico</title> + <onActionProcess>%aditoprj%/entity/MosaicoTemplate_entity/entityfields/openinmosaico/onActionProcess.js</onActionProcess> + <iconId>NEON:WRENCH</iconId> + <tooltipProcess>%aditoprj%/entity/MosaicoTemplate_entity/entityfields/openinmosaico/tooltipProcess.js</tooltipProcess> + </entityActionField> + <entityActionField> + <name>CopyTemplate</name> + <title>Copy template</title> + <onActionProcess>%aditoprj%/entity/MosaicoTemplate_entity/entityfields/copytemplate/onActionProcess.js</onActionProcess> + <iconId>VAADIN:COPY</iconId> + </entityActionField> + <entityActionField> + <name>newBulkMail</name> + <title>Write bulk mail</title> + <onActionProcess>%aditoprj%/entity/MosaicoTemplate_entity/entityfields/newbulkmail/onActionProcess.js</onActionProcess> + <iconId>VAADIN:AT</iconId> + </entityActionField> + <entityActionField> + <name>newDocumentTemplate</name> + <title>New document template</title> + <onActionProcess>%aditoprj%/entity/MosaicoTemplate_entity/entityfields/newdocumenttemplate/onActionProcess.js</onActionProcess> + <iconId>VAADIN:FILE_FONT</iconId> + </entityActionField> + <entityParameter> + <name>CopyMosaicoTemplateIdParam</name> + <expose v="true" /> + </entityParameter> + <entityField> + <name>ISOLANGUAGE</name> + <title>Language</title> + <consumer>Languages</consumer> + <groupable v="true" /> + <mandatory v="true" /> + <valueProcess>%aditoprj%/entity/MosaicoTemplate_entity/entityfields/isolanguage/valueProcess.js</valueProcess> + <displayValueProcess>%aditoprj%/entity/MosaicoTemplate_entity/entityfields/isolanguage/displayValueProcess.js</displayValueProcess> + </entityField> + <entityConsumer> + <name>Languages</name> + <dependency> + <name>dependency</name> + <entityName>Language_entity</entityName> + <fieldName>ISO3Name</fieldName> + </dependency> + </entityConsumer> + <entityConsumer> + <name>KeywordMosaicoTemplateCategory</name> + <dependency> + <name>dependency</name> + <entityName>KeywordEntry_entity</entityName> + <fieldName>SpecificContainerKeywords</fieldName> + </dependency> + <children> + <entityParameter> + <name>ContainerName_param</name> + <valueProcess>%aditoprj%/entity/MosaicoTemplate_entity/entityfields/keywordmosaicotemplatecategory/children/containername_param/valueProcess.js</valueProcess> + </entityParameter> + </children> + </entityConsumer> + <entityField> + <name>CATEGORY</name> + <title>Classification</title> + <consumer>KeywordMosaicoTemplateCategory</consumer> + <groupable v="true" /> + <mandatory v="true" /> + </entityField> + <entityActionField> + <name>openAdminView</name> + <documentation>%aditoprj%/entity/MosaicoTemplate_entity/entityfields/openadminview/documentation.adoc</documentation> + <title>Open admin view</title> + <onActionProcess>%aditoprj%/entity/MosaicoTemplate_entity/entityfields/openadminview/onActionProcess.js</onActionProcess> + <iconId>VAADIN:CURLY_BRACKETS</iconId> + <stateProcess>%aditoprj%/entity/MosaicoTemplate_entity/entityfields/openadminview/stateProcess.js</stateProcess> + </entityActionField> + </entityFields> + <recordContainers> + <dbRecordContainer> + <name>db</name> + <orderClauseProcess>%aditoprj%/entity/MosaicoTemplate_entity/recordcontainers/db/orderClauseProcess.js</orderClauseProcess> + <onDBInsert>%aditoprj%/entity/MosaicoTemplate_entity/recordcontainers/db/onDBInsert.js</onDBInsert> + <onDBDelete>%aditoprj%/entity/MosaicoTemplate_entity/recordcontainers/db/onDBDelete.js</onDBDelete> + <alias>Data_alias</alias> + <recordFieldMappings> + <dbRecordFieldMapping> + <name>CONTENT.value</name> + <recordfield>MOSAICOTEMPLATE.CONTENT</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DATE_EDIT.value</name> + <recordfield>MOSAICOTEMPLATE.DATE_EDIT</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>DATE_NEW.value</name> + <recordfield>MOSAICOTEMPLATE.DATE_NEW</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>METADATA.value</name> + <recordfield>MOSAICOTEMPLATE.METADATA</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>MOSAICOTEMPLATEID.value</name> + <recordfield>MOSAICOTEMPLATE.MOSAICOTEMPLATEID</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>NAME.value</name> + <recordfield>MOSAICOTEMPLATE.NAME</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>USER_EDIT.value</name> + <recordfield>MOSAICOTEMPLATE.USER_EDIT</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>USER_NEW.value</name> + <recordfield>MOSAICOTEMPLATE.USER_NEW</recordfield> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>BASETEMPLATE.value</name> + <recordfield>MOSAICOTEMPLATE.BASETEMPLATE</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>BASETEMPLATE.displayValue</name> + <expression>%aditoprj%/entity/MosaicoTemplate_entity/recordcontainers/db/recordfieldmappings/basetemplate.displayvalue/expression.js</expression> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>ISOLANGUAGE.value</name> + <recordfield>MOSAICOTEMPLATE.ISOLANGUAGE</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>CATEGORY.value</name> + <recordfield>MOSAICOTEMPLATE.CATEGORY</recordfield> + <isFilterable v="true" /> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>CATEGORY.displayValue</name> + <expression>%aditoprj%/entity/MosaicoTemplate_entity/recordcontainers/db/recordfieldmappings/category.displayvalue/expression.js</expression> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>ISOLANGUAGE.displayValue</name> + <expression>%aditoprj%/entity/MosaicoTemplate_entity/recordcontainers/db/recordfieldmappings/isolanguage.displayvalue/expression.js</expression> + </dbRecordFieldMapping> + </recordFieldMappings> + <linkInformation> + <linkInformation> + <name>79f97860-53dd-42ef-b636-76ba5710e1cb</name> + <tableName>MOSAICOTEMPLATE</tableName> + <primaryKey>MOSAICOTEMPLATEID</primaryKey> + <isUIDTable v="true" /> + <readonly v="false" /> + </linkInformation> + </linkInformation> + </dbRecordContainer> + </recordContainers> +</entity> diff --git a/entity/MosaicoTemplate_entity/afterUiInit.js b/entity/MosaicoTemplate_entity/afterUiInit.js new file mode 100644 index 0000000000000000000000000000000000000000..90ba6cee799560c0d554e80526f9a4e863ff7d86 --- /dev/null +++ b/entity/MosaicoTemplate_entity/afterUiInit.js @@ -0,0 +1,19 @@ +import("system.vars"); +import("Sql_lib"); +import("system.neon") + +if (vars.get("$param.CopyMosaicoTemplateIdParam")) +{ + var [metadata,content,basetemplate,isolanguage,category] = newSelect(["METADATA","CONTENT","BASETEMPLATE","ISOLANGUAGE","CATEGORY"]) + .from("MOSAICOTEMPLATE") + .whereIfSet("MOSAICOTEMPLATE.MOSAICOTEMPLATEID","$param.CopyMosaicoTemplateIdParam") + .arrayRow(true); + + neon.setFieldValues({ + "$field.METADATA":metadata, + "$field.CONTENT":content, + "$field.BASETEMPLATE":basetemplate, + "$field.ISOLANGUAGE": isolanguage, + "$field.CATEGORY": category + }); +} \ No newline at end of file diff --git a/entity/MosaicoTemplate_entity/contentTitleProcess.js b/entity/MosaicoTemplate_entity/contentTitleProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..33f139bb3d446b844820ecaf7443db266043bc13 --- /dev/null +++ b/entity/MosaicoTemplate_entity/contentTitleProcess.js @@ -0,0 +1,4 @@ +import("system.result"); +import("system.vars"); + +result.string(vars.getString("$field.NAME")); \ No newline at end of file diff --git a/entity/MosaicoTemplate_entity/documentation.adoc b/entity/MosaicoTemplate_entity/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..152357006a20dd5ee06b0024e7c56c9ff575a958 --- /dev/null +++ b/entity/MosaicoTemplate_entity/documentation.adoc @@ -0,0 +1,5 @@ += MosaicoTemplate_entity + +This entity is used to store templates used in the mosaico email editor and load them again in mosaico for changes. + +The datatransfer between mosaico and adito uses the mosaico_rest webservice. \ No newline at end of file diff --git a/entity/MosaicoTemplate_entity/entityfields/basetemplate/stateProcess.js b/entity/MosaicoTemplate_entity/entityfields/basetemplate/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..cd8ec48607747ea4fc48e210ca30902fb8c793e8 --- /dev/null +++ b/entity/MosaicoTemplate_entity/entityfields/basetemplate/stateProcess.js @@ -0,0 +1,12 @@ +import("system.result"); +import("system.vars"); +import("system.neon"); + +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/MosaicoTemplate_entity/entityfields/copytemplate/onActionProcess.js b/entity/MosaicoTemplate_entity/entityfields/copytemplate/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..9e061b14e8a46cc29abe46e5b995675d68ddf9a2 --- /dev/null +++ b/entity/MosaicoTemplate_entity/entityfields/copytemplate/onActionProcess.js @@ -0,0 +1,7 @@ +import("system.vars"); +import("system.neon"); + +var params = { + "copyMosaicoTemplateIdParam" : vars.get("$field.MOSAICOTEMPLATEID") +}; +neon.openContext("MosaicoTemplate", null, null, neon.OPERATINGSTATE_NEW, params); \ No newline at end of file diff --git a/entity/MosaicoTemplate_entity/entityfields/date_edit/valueProcess.js b/entity/MosaicoTemplate_entity/entityfields/date_edit/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..1eefa316a133507629399cdfd701e7cd3b8f7e70 --- /dev/null +++ b/entity/MosaicoTemplate_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/MosaicoTemplate_entity/entityfields/date_new/valueProcess.js b/entity/MosaicoTemplate_entity/entityfields/date_new/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..3ca8db33b7f771c6904f01a7c445d110c6102d8e --- /dev/null +++ b/entity/MosaicoTemplate_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/MosaicoTemplate_entity/entityfields/documents/children/assignmentrowid_param/valueProcess.js b/entity/MosaicoTemplate_entity/entityfields/documents/children/assignmentrowid_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..6ecf58a8f40423fac6f94a242679f7c7741c03e3 --- /dev/null +++ b/entity/MosaicoTemplate_entity/entityfields/documents/children/assignmentrowid_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("system.result"); + +result.string(vars.get("$field.MOSAICOTEMPLATEID")); \ No newline at end of file diff --git a/entity/MosaicoTemplate_entity/entityfields/documents/children/assignmenttable_param/valueProcess.js b/entity/MosaicoTemplate_entity/entityfields/documents/children/assignmenttable_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..c4c2a344f6ed422e191694858a3b417ec630d69e --- /dev/null +++ b/entity/MosaicoTemplate_entity/entityfields/documents/children/assignmenttable_param/valueProcess.js @@ -0,0 +1,3 @@ +import("system.result"); + +result.string("MOSAICOTEMPLATE"); \ No newline at end of file diff --git a/entity/MosaicoTemplate_entity/entityfields/isolanguage/displayValueProcess.js b/entity/MosaicoTemplate_entity/entityfields/isolanguage/displayValueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..5ebcc2d6c6b20ff5f13dba82f1108577ec1d162e --- /dev/null +++ b/entity/MosaicoTemplate_entity/entityfields/isolanguage/displayValueProcess.js @@ -0,0 +1,11 @@ +import("system.translate"); +import("system.result"); +import("system.vars"); +import("Sql_lib"); + +var latinName = newSelect("NAME_LATIN") + .from("AB_LANGUAGE") + .whereIfSet("AB_LANGUAGE.ISO3", "$field.ISOLANGUAGE") + .cell(true) + +result.string(translate.text(latinName)); diff --git a/entity/MosaicoTemplate_entity/entityfields/isolanguage/valueProcess.js b/entity/MosaicoTemplate_entity/entityfields/isolanguage/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..7a23b1ac729496cd74e1b9c59801f610f98246d0 --- /dev/null +++ b/entity/MosaicoTemplate_entity/entityfields/isolanguage/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("deu"); +} \ No newline at end of file diff --git a/entity/MosaicoTemplate_entity/entityfields/keywordmosaicobasetemplate/children/containername_param/valueProcess.js b/entity/MosaicoTemplate_entity/entityfields/keywordmosaicobasetemplate/children/containername_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..afa1a46098235f94b87fd177671c07a2ce27ce5d --- /dev/null +++ b/entity/MosaicoTemplate_entity/entityfields/keywordmosaicobasetemplate/children/containername_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.result"); +import("KeywordRegistry_basic") + +result.string($KeywordRegistry.mosaicoBaseTemplate()); \ No newline at end of file diff --git a/entity/MosaicoTemplate_entity/entityfields/keywordmosaicotemplatecategory/children/containername_param/valueProcess.js b/entity/MosaicoTemplate_entity/entityfields/keywordmosaicotemplatecategory/children/containername_param/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..f95e6c4ea55b82158002c3d64e2dba7e95db01a0 --- /dev/null +++ b/entity/MosaicoTemplate_entity/entityfields/keywordmosaicotemplatecategory/children/containername_param/valueProcess.js @@ -0,0 +1,4 @@ +import("system.result"); +import("KeywordRegistry_basic") + +result.string($KeywordRegistry.mosaicoTemplateCategory()); \ No newline at end of file diff --git a/entity/MosaicoTemplate_entity/entityfields/newbulkmail/onActionProcess.js b/entity/MosaicoTemplate_entity/entityfields/newbulkmail/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..121f8cd4ae685e6053f103feac3ebdc9d10e6410 --- /dev/null +++ b/entity/MosaicoTemplate_entity/entityfields/newbulkmail/onActionProcess.js @@ -0,0 +1,5 @@ +import("system.vars"); +import("Bulkmail_lib"); + + +BulkMailUtils.createFromMosaicoTemplate(vars.get("$field.MOSAICOTEMPLATEID")); \ No newline at end of file diff --git a/entity/MosaicoTemplate_entity/entityfields/newdocumenttemplate/onActionProcess.js b/entity/MosaicoTemplate_entity/entityfields/newdocumenttemplate/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..83ccf0f0600933f88a9acef672285f3d705f648b --- /dev/null +++ b/entity/MosaicoTemplate_entity/entityfields/newdocumenttemplate/onActionProcess.js @@ -0,0 +1,7 @@ +import("system.vars"); +import("system.neon"); + +var params = { + "CreateFromMosaicoTemplateId_param" : vars.get("$field.MOSAICOTEMPLATEID") +}; +neon.openContext("DocumentTemplate", null, null, neon.OPERATINGSTATE_NEW, params); \ No newline at end of file diff --git a/entity/MosaicoTemplate_entity/entityfields/openadminview/documentation.adoc b/entity/MosaicoTemplate_entity/entityfields/openadminview/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..e6005836e949835562ff919c0925e8ccda186dbf --- /dev/null +++ b/entity/MosaicoTemplate_entity/entityfields/openadminview/documentation.adoc @@ -0,0 +1,3 @@ += MosaicoTemplate_entity + +stores the data from the mosaico email editor in adito and provides basic functions for them. \ No newline at end of file diff --git a/entity/MosaicoTemplate_entity/entityfields/openadminview/onActionProcess.js b/entity/MosaicoTemplate_entity/entityfields/openadminview/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..dfbca24fd2fc6d23b1c643604bfed276bb359de2 --- /dev/null +++ b/entity/MosaicoTemplate_entity/entityfields/openadminview/onActionProcess.js @@ -0,0 +1,11 @@ +import("system.vars"); +import("Context_lib"); + + + +AdminViewUtils.open("MOSAICOTEMPLATEID", [ + ["DATE_NEW", vars.get("$field.DATE_NEW"), "DATE"], + ["DATE_EDIT", vars.get("$field.DATE_EDIT"), "DATE"], + ["USER_NEW", vars.get("$field.USER_NEW")], + ["USER_EDIT", vars.get("$field.USER_EDIT")] +]); \ No newline at end of file diff --git a/entity/MosaicoTemplate_entity/entityfields/openadminview/stateProcess.js b/entity/MosaicoTemplate_entity/entityfields/openadminview/stateProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..38f2298db7304b4d44a15fbad7f720558c02da99 --- /dev/null +++ b/entity/MosaicoTemplate_entity/entityfields/openadminview/stateProcess.js @@ -0,0 +1,4 @@ +import("Context_lib"); +import("system.result"); + +result.string(AdminViewUtils.getActionState()); \ No newline at end of file diff --git a/entity/MosaicoTemplate_entity/entityfields/openinmosaico/onActionProcess.js b/entity/MosaicoTemplate_entity/entityfields/openinmosaico/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..c396089ac1347c82cd80aa603471b5c500f8139e --- /dev/null +++ b/entity/MosaicoTemplate_entity/entityfields/openinmosaico/onActionProcess.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("MosaicoTemplate_lib"); + +MosaicoUtils.openInMosaico(vars.get("$field.MOSAICOTEMPLATEID")); diff --git a/entity/MosaicoTemplate_entity/entityfields/openinmosaico/tooltipProcess.js b/entity/MosaicoTemplate_entity/entityfields/openinmosaico/tooltipProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..f34836b44cef2d2e75ac169393873dc2b91ed503 --- /dev/null +++ b/entity/MosaicoTemplate_entity/entityfields/openinmosaico/tooltipProcess.js @@ -0,0 +1,4 @@ +import("system.translate"); +import("system.result"); + +result.string(translate.text("Open in mosaico")); \ No newline at end of file diff --git a/entity/MosaicoTemplate_entity/entityfields/user_edit/valueProcess.js b/entity/MosaicoTemplate_entity/entityfields/user_edit/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..80b1b2bff5e62c25b1dc95985b0863c5a59cdc90 --- /dev/null +++ b/entity/MosaicoTemplate_entity/entityfields/user_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.user")); +} \ No newline at end of file diff --git a/entity/MosaicoTemplate_entity/entityfields/user_new/valueProcess.js b/entity/MosaicoTemplate_entity/entityfields/user_new/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..2ed73474a25ad9b2ebe467da27c4695ec60c4bc4 --- /dev/null +++ b/entity/MosaicoTemplate_entity/entityfields/user_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.user")); +} \ No newline at end of file diff --git a/entity/MosaicoTemplate_entity/imageProcess.js b/entity/MosaicoTemplate_entity/imageProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..c88b7ab04f19f1ebdbb7cfbd189709d3fcd9cbfe --- /dev/null +++ b/entity/MosaicoTemplate_entity/imageProcess.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("system.result"); + +result.string("TEXT:" + vars.getString("$field.NAME")); \ No newline at end of file diff --git a/entity/MosaicoTemplate_entity/recordcontainers/db/onDBDelete.js b/entity/MosaicoTemplate_entity/recordcontainers/db/onDBDelete.js new file mode 100644 index 0000000000000000000000000000000000000000..39dec5b19549271cdc1673a77847b3e251def6e2 --- /dev/null +++ b/entity/MosaicoTemplate_entity/recordcontainers/db/onDBDelete.js @@ -0,0 +1,4 @@ +import("system.vars"); +import("Binary_lib"); + +SingleBinaryUtils.remove("MOSAICOTEMPLATE", "DOCUMENT", vars.get("$field.MOSAICOTEMPLATEID")); \ No newline at end of file diff --git a/entity/MosaicoTemplate_entity/recordcontainers/db/onDBInsert.js b/entity/MosaicoTemplate_entity/recordcontainers/db/onDBInsert.js new file mode 100644 index 0000000000000000000000000000000000000000..ac3bf12b8cd51e3553194c51b9fbd95ae2f4ae96 --- /dev/null +++ b/entity/MosaicoTemplate_entity/recordcontainers/db/onDBInsert.js @@ -0,0 +1,7 @@ +import("system.vars"); +import("Binary_lib"); + +if (vars.get("$param.CopyMosaicoTemplateIdParam")) +{ + BinaryUtils.copyBinaries("MOSAICOTEMPLATE", vars.get("$param.CopyMosaicoTemplateIdParam"), "MOSAICOTEMPLATE", vars.get("$field.MOSAICOTEMPLATEID"), "DOCUMENT"); +} diff --git a/entity/MosaicoTemplate_entity/recordcontainers/db/orderClauseProcess.js b/entity/MosaicoTemplate_entity/recordcontainers/db/orderClauseProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..bff0dfb582fc9755f57024d572cf7e7b61dbac17 --- /dev/null +++ b/entity/MosaicoTemplate_entity/recordcontainers/db/orderClauseProcess.js @@ -0,0 +1,4 @@ +import("system.result"); +import("system.db"); + +result.object({"MOSAICOTEMPLATE.DATE_NEW": db.DESCENDING}); \ No newline at end of file diff --git a/entity/MosaicoTemplate_entity/recordcontainers/db/recordfieldmappings/basetemplate.displayvalue/expression.js b/entity/MosaicoTemplate_entity/recordcontainers/db/recordfieldmappings/basetemplate.displayvalue/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..b06efea1f9f460632da3bed2a6db4b1b8b22a434 --- /dev/null +++ b/entity/MosaicoTemplate_entity/recordcontainers/db/recordfieldmappings/basetemplate.displayvalue/expression.js @@ -0,0 +1,6 @@ +import("system.result"); +import("Keyword_lib"); +import("KeywordRegistry_basic"); + +var sql = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.mosaicoBaseTemplate(), "MOSAICOTEMPLATE.BASETEMPLATE"); +result.string(sql); diff --git a/entity/MosaicoTemplate_entity/recordcontainers/db/recordfieldmappings/category.displayvalue/expression.js b/entity/MosaicoTemplate_entity/recordcontainers/db/recordfieldmappings/category.displayvalue/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..b6431ba46f059d54579589c4c9d59814165ae84f --- /dev/null +++ b/entity/MosaicoTemplate_entity/recordcontainers/db/recordfieldmappings/category.displayvalue/expression.js @@ -0,0 +1,6 @@ +import("system.result"); +import("Keyword_lib"); +import("KeywordRegistry_basic"); + +var sql = KeywordUtils.getResolvedTitleSqlPart($KeywordRegistry.mosaicoTemplateCategory(), "MOSAICOTEMPLATE.CATEGORY"); +result.string(sql); diff --git a/entity/MosaicoTemplate_entity/recordcontainers/db/recordfieldmappings/isolanguage.displayvalue/expression.js b/entity/MosaicoTemplate_entity/recordcontainers/db/recordfieldmappings/isolanguage.displayvalue/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..cc125ff72c2d2b0445cc9199a00860148799bf37 --- /dev/null +++ b/entity/MosaicoTemplate_entity/recordcontainers/db/recordfieldmappings/isolanguage.displayvalue/expression.js @@ -0,0 +1,4 @@ +import("system.result"); +import("Keyword_lib"); + +result.string(LanguageKeywordUtils.getResolvedTitleSqlPart("MOSAICOTEMPLATE.ISOLANGUAGE")); \ No newline at end of file diff --git a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index 61e20fbe57b27f4494d5634ae972ad0d39a86bc1..82e8891993439553f731341e1745980c2d51d724 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -10501,12 +10501,21 @@ <entry> <key>Should a test email be sent to you instead?</key> </entry> + <entry> + <key>Open in mosaico</key> + </entry> <entry> <key>Copy Recipients</key> </entry> <entry> <key>copy</key> </entry> + <entry> + <key>New document template</key> + </entry> + <entry> + <key>Copy template</key> + </entry> <entry> <key>There are no test recipients.</key> </entry> @@ -10654,21 +10663,12 @@ <entry> <key>Saturday</key> </entry> - <entry> - <key>Processing of the given business card failed.\nReason: %0</key> - </entry> - <entry> - <key>Requested business card were already deleted.</key> - </entry> <entry> <key>Appointment Start</key> </entry> <entry> <key>Appointment End</key> </entry> - <entry> - <key>Contigent exhausted, please buy some new one to continue.</key> - </entry> <entry> <key>Appointment Subject</key> </entry> @@ -10772,6 +10772,33 @@ <entry> <key>Answer Address</key> </entry> + <entry> + <key>Open new mosaico template</key> + </entry> + <entry> + <key>Base Template</key> + </entry> + <entry> + <key>Action mail</key> + </entry> + <entry> + <key>Technical email</key> + </entry> + <entry> + <key>Create and open in editor</key> + </entry> + <entry> + <key>Create new mosaico template</key> + </entry> + <entry> + <key>Processing of the given business card failed.\nReason: %0</key> + </entry> + <entry> + <key>Requested business card were already deleted.</key> + </entry> + <entry> + <key>Contigent exhausted, please buy some new one to continue.</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 892c48776cf4bbc2a0e350d480deb13bd2fc047e..15fdd1a08fb1f8d40dbf30fff1faa433d58cd864 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -10,6 +10,14 @@ <key>Create new campaign step</key> <value>Neue Kampagnenstufe erstellen</value> </entry> + <entry> + <key>Base Template</key> + <value>Ursprungsvorlage</value> + </entry> + <entry> + <key>Open in mosaico</key> + <value>In Mosaico öffnen</value> + </entry> <entry> <key>Single (Service/Internal)</key> <value>Einzel (Service/Intern)</value> @@ -1020,6 +1028,10 @@ <key>%0 responsilbe/s was/were changed</key> <value>%0 Verantwortliche/r wurde/n geändert</value> </entry> + <entry> + <key>Technical email</key> + <value>Technische E-Mail</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> @@ -1891,6 +1903,10 @@ <key>Descriptions</key> <value>Beschreibungen</value> </entry> + <entry> + <key>Create new mosaico template</key> + <value>Neue Mosaicovorlage erstellen</value> + </entry> <entry> <key>Free</key> <value>Frei</value> @@ -3273,6 +3289,10 @@ <key>Public Hand</key> <value>Öffentliche Hand</value> </entry> + <entry> + <key>Create and open in editor</key> + <value>Erstellen und im Editor öffnen</value> + </entry> <entry> <key>Producing and Processing Industry</key> <value>Produzierende und verarbeitende Industrie</value> @@ -6037,6 +6057,10 @@ <key>Trade</key> <value>Handel</value> </entry> + <entry> + <key>Action mail</key> + <value>Aktionsmail</value> + </entry> <entry> <key>Consultation</key> <value>Beratung</value> @@ -7188,6 +7212,10 @@ <key>CONTRACTID (UID)</key> <value>CONTRACTID (UID)</value> </entry> + <entry> + <key>Copy template</key> + <value>Vorlage kopieren</value> + </entry> <entry> <key>[%0]it was necessary to create a file from a blob-field but no lob-file-path was specified.</key> <value>[%0]es war Notwendig eine Datei von einem blob-Feld zu erstellen aber es wurde kein lob-Dateipfad angegeben.</value> @@ -7881,6 +7909,10 @@ <key>Only .odt files are supported for bulkletters.</key> <value>Für Serienbriefe werden nur .odt Dateien unterstützt</value> </entry> + <entry> + <key>New document template</key> + <value>Neue Dokumentvorlage</value> + </entry> <entry> <key>Show tickets where I am the editor</key> </entry> diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod index efd7d08eb48d3324502df9c3041a0446aa713727..61e063af63ac21f49795468123e9313a228207bb 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -9772,19 +9772,19 @@ <key>Saturday</key> </entry> <entry> - <key>Processing of the given business card failed.\nReason: %0</key> + <key>Appointment Start</key> </entry> <entry> - <key>Requested business card were already deleted.</key> + <key>Open in mosaico</key> </entry> <entry> - <key>Appointment Start</key> + <key>Appointment End</key> </entry> <entry> - <key>Appointment End</key> + <key>New document template</key> </entry> <entry> - <key>Contigent exhausted, please buy some new one to continue.</key> + <key>Copy template</key> </entry> <entry> <key>Appointment Subject</key> @@ -10861,6 +10861,33 @@ <entry> <key>Answer Address</key> </entry> + <entry> + <key>Open new mosaico template</key> + </entry> + <entry> + <key>Base Template</key> + </entry> + <entry> + <key>Action mail</key> + </entry> + <entry> + <key>Technical email</key> + </entry> + <entry> + <key>Create and open in editor</key> + </entry> + <entry> + <key>Create new mosaico template</key> + </entry> + <entry> + <key>Processing of the given business card failed.\nReason: %0</key> + </entry> + <entry> + <key>Requested business card were already deleted.</key> + </entry> + <entry> + <key>Contigent exhausted, please buy some new one to continue.</key> + </entry> </keyValueMap> <font name="Dialog" style="0" size="11" /> </language> diff --git a/neonContext/BulkMailAddMosaico/BulkMailAddMosaico.aod b/neonContext/BulkMailAddMosaico/BulkMailAddMosaico.aod new file mode 100644 index 0000000000000000000000000000000000000000..1b4ec4b48ef0eaa13cbd2f3eb524afb8d32ad47d --- /dev/null +++ b/neonContext/BulkMailAddMosaico/BulkMailAddMosaico.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>BulkMailAddMosaico</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <editView>BulkMailAddMosaicoEdit_view</editView> + <entity>BulkMailAddMosaico_entity</entity> + <references> + <neonViewReference> + <name>8f951f6b-ae65-46b2-8adc-6a82b1a23385</name> + <view>BulkMailAddMosaicoEdit_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonContext/MosaicoTemplate/MosaicoTemplate.aod b/neonContext/MosaicoTemplate/MosaicoTemplate.aod new file mode 100644 index 0000000000000000000000000000000000000000..1e8b630290ee3c7d0ac976713d896fa80dc051bc --- /dev/null +++ b/neonContext/MosaicoTemplate/MosaicoTemplate.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>MosaicoTemplate</name> + <title>Mosaico</title> + <majorModelMode>DISTRIBUTED</majorModelMode> + <icon>VAADIN:EXTERNAL_BROWSER</icon> + <filterView>MosaicoTemplateFilter_view</filterView> + <editView>MosaicoTemplateEdit_view</editView> + <previewView>MosaicoTemplatePreview_view</previewView> + <entity>MosaicoTemplate_entity</entity> + <references> + <neonViewReference> + <name>81ee2f8b-752d-4cc0-ae77-762795944d06</name> + <view>MosaicoTemplateEdit_view</view> + </neonViewReference> + <neonViewReference> + <name>0bb791be-3de8-4692-a015-b918b77389ff</name> + <view>MosaicoTemplateFilter_view</view> + </neonViewReference> + <neonViewReference> + <name>e5337161-3eda-4adb-a11b-5ee4f9c40e9d</name> + <view>MosaicoTemplatePreview_view</view> + </neonViewReference> + </references> +</neonContext> diff --git a/neonView/BulkMailAddMosaicoEdit_view/BulkMailAddMosaicoEdit_view.aod b/neonView/BulkMailAddMosaicoEdit_view/BulkMailAddMosaicoEdit_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..f691d55b36c9418017defbc8e9a1132e424a6d43 --- /dev/null +++ b/neonView/BulkMailAddMosaicoEdit_view/BulkMailAddMosaicoEdit_view.aod @@ -0,0 +1,45 @@ +<?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>BulkMailAddMosaicoEdit_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <size>SMALL</size> + <layout> + <headerFooterLayout> + <name>layout</name> + </headerFooterLayout> + </layout> + <children> + <genericViewTemplate> + <name>Generic</name> + <editMode v="true" /> + <fields> + <entityFieldLink> + <name>ffaee3b9-bb62-40cd-9b32-994b4c276097</name> + <entityField>NAME</entityField> + </entityFieldLink> + <entityFieldLink> + <name>07938506-50e8-4151-bec5-ab090dc0b2e8</name> + <entityField>MOSAICOTEMPLATE_ID</entityField> + </entityFieldLink> + <entityFieldLink> + <name>25e5868a-5fb2-4bca-af93-54b1dc605d83</name> + <entityField>BASETEMPLATE</entityField> + </entityFieldLink> + <entityFieldLink> + <name>dc4f74b4-1099-406a-a2eb-9e3004849e0a</name> + <entityField>CATEGORY</entityField> + </entityFieldLink> + <entityFieldLink> + <name>5d214250-93ad-4b1a-9a63-30b3f1e2f288</name> + <entityField>ISOLANGUAGE</entityField> + </entityFieldLink> + </fields> + </genericViewTemplate> + <actionsViewTemplate> + <name>Actions</name> + <actions> + <element>createAndOpen</element> + </actions> + </actionsViewTemplate> + </children> +</neonView> diff --git a/neonView/BulkMailEdit_view/BulkMailEdit_view.aod b/neonView/BulkMailEdit_view/BulkMailEdit_view.aod index f48012b8609f0d01551fb5e125487404c8c876d4..b6e0482043baf8a03862d8ec0a8f5da7dafd48db 100644 --- a/neonView/BulkMailEdit_view/BulkMailEdit_view.aod +++ b/neonView/BulkMailEdit_view/BulkMailEdit_view.aod @@ -17,6 +17,10 @@ <name>55842e88-7e2b-41ee-b564-3c2e3fb04125</name> <entityField>DOCUMENTTEMPLATE_ID</entityField> </entityFieldLink> + <entityFieldLink> + <name>34565ff5-e555-417a-a901-7f8d2b2372df</name> + <entityField>MOSAICOTEMPLATE_ID</entityField> + </entityFieldLink> </fields> </genericViewTemplate> <actionsViewTemplate> @@ -88,6 +92,10 @@ <name>1891cd3a-34a5-4c7d-9e35-635640476c63</name> <entityField>INTEREST_ID</entityField> </entityFieldLink> + <entityFieldLink> + <name>cd711f0c-20b7-4f1a-8bca-2e1cf420bb6d</name> + <entityField>ISOLANGUAGE</entityField> + </entityFieldLink> </fields> </genericViewTemplate> <genericViewTemplate> diff --git a/neonView/BulkMailPreview_view/BulkMailPreview_view.aod b/neonView/BulkMailPreview_view/BulkMailPreview_view.aod index 4c7fd9cab9dbdb9eb4223897a8f86ca476352ba2..f09be1f845aa3608b0740200cfe97b80efda05bc 100644 --- a/neonView/BulkMailPreview_view/BulkMailPreview_view.aod +++ b/neonView/BulkMailPreview_view/BulkMailPreview_view.aod @@ -52,6 +52,10 @@ <name>edbeea4d-019f-4661-b0d7-c07468e747cc</name> <entityField>DOCUMENTTEMPLATE_ID</entityField> </entityFieldLink> + <entityFieldLink> + <name>1a99fef8-775e-48e2-b40c-fbe9c9b0f725</name> + <entityField>MOSAICOTEMPLATE_ID</entityField> + </entityFieldLink> <entityFieldLink> <name>514d0861-ad00-4d32-9c56-6be0443e03e3</name> <entityField>CREATEACTIVITIES</entityField> @@ -72,6 +76,10 @@ <name>9f3df668-6741-4faf-9afc-a0d761db990a</name> <entityField>INTEREST_ID</entityField> </entityFieldLink> + <entityFieldLink> + <name>c1a6bec9-5c06-4755-9eee-19b5636c143d</name> + <entityField>ISOLANGUAGE</entityField> + </entityFieldLink> </fields> </genericViewTemplate> <neonViewReference> diff --git a/neonView/MosaicoTemplateEdit_view/MosaicoTemplateEdit_view.aod b/neonView/MosaicoTemplateEdit_view/MosaicoTemplateEdit_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..f04658a8d1c8b8866a20a56621166b77a1d8269a --- /dev/null +++ b/neonView/MosaicoTemplateEdit_view/MosaicoTemplateEdit_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>MosaicoTemplateEdit_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>025859a7-e151-460c-83fe-87207b6712c1</name> + <entityField>NAME</entityField> + </entityFieldLink> + <entityFieldLink> + <name>b704117a-cbb3-4a26-948e-bb4a3b773ebd</name> + <entityField>BASETEMPLATE</entityField> + </entityFieldLink> + <entityFieldLink> + <name>b41df2f0-aa59-469a-8242-5e889fff3853</name> + <entityField>ISOLANGUAGE</entityField> + </entityFieldLink> + <entityFieldLink> + <name>a2537044-a300-46f2-85e2-35ac8d3eb018</name> + <entityField>CATEGORY</entityField> + </entityFieldLink> + </fields> + </genericViewTemplate> + </children> +</neonView> diff --git a/neonView/MosaicoTemplateFilter_view/MosaicoTemplateFilter_view.aod b/neonView/MosaicoTemplateFilter_view/MosaicoTemplateFilter_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..91f7176e1d63869f57715b7136c37b2abcd6242c --- /dev/null +++ b/neonView/MosaicoTemplateFilter_view/MosaicoTemplateFilter_view.aod @@ -0,0 +1,71 @@ +<?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>MosaicoTemplateFilter_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <filterable v="true" /> + <layout> + <groupLayout> + <name>layout</name> + </groupLayout> + </layout> + <children> + <tableViewTemplate> + <name>table</name> + <columns> + <neonTableColumn> + <name>a36a289d-a8f0-400b-9423-77f594fafada</name> + <entityField>#IMAGE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>7c757f7e-0b46-489c-80eb-58c1413492a3</name> + <entityField>NAME</entityField> + </neonTableColumn> + <neonTableColumn> + <name>df065e6d-388a-4258-839f-8dafa206bd5c</name> + <entityField>BASETEMPLATE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>f35fc405-6c90-4f27-9c7d-28eba8518ae3</name> + <entityField>DATE_NEW</entityField> + </neonTableColumn> + <neonTableColumn> + <name>a1927d82-e243-4aed-acc1-dce9746ca1eb</name> + <entityField>ISOLANGUAGE</entityField> + </neonTableColumn> + <neonTableColumn> + <name>4aa87d26-ac44-458d-b8ab-d9550caffb17</name> + <entityField>CATEGORY</entityField> + </neonTableColumn> + </columns> + </tableViewTemplate> + <treeTableViewTemplate> + <name>TreeTable</name> + <columns> + <neonTreeTableColumn> + <name>ed2cad46-4428-4e79-b944-86a479b545ce</name> + <entityField>#IMAGE</entityField> + </neonTreeTableColumn> + <neonTreeTableColumn> + <name>1f1a33eb-fe91-4eac-961d-fa91b48dcf23</name> + <entityField>NAME</entityField> + </neonTreeTableColumn> + <neonTreeTableColumn> + <name>d492493a-250a-4886-9da7-0808bb590709</name> + <entityField>BASETEMPLATE</entityField> + </neonTreeTableColumn> + <neonTreeTableColumn> + <name>19246444-ffbb-4ed3-aefd-44405ce5d8fc</name> + <entityField>DATE_NEW</entityField> + </neonTreeTableColumn> + <neonTreeTableColumn> + <name>02429f3d-3d1a-4fc3-82a6-b1e4195c4196</name> + <entityField>ISOLANGUAGE</entityField> + </neonTreeTableColumn> + <neonTreeTableColumn> + <name>8a3e0e78-0a7c-47c2-a994-0b53fa402d86</name> + <entityField>CATEGORY</entityField> + </neonTreeTableColumn> + </columns> + </treeTableViewTemplate> + </children> +</neonView> diff --git a/neonView/MosaicoTemplatePreview_view/MosaicoTemplatePreview_view.aod b/neonView/MosaicoTemplatePreview_view/MosaicoTemplatePreview_view.aod new file mode 100644 index 0000000000000000000000000000000000000000..592993049d4312857d8b648ea2ed7c381cbc4e21 --- /dev/null +++ b/neonView/MosaicoTemplatePreview_view/MosaicoTemplatePreview_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>MosaicoTemplatePreview_view</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <layout> + <headerFooterLayout> + <name>layout</name> + <header>headerCard</header> + </headerFooterLayout> + </layout> + <children> + <cardViewTemplate> + <name>headerCard</name> + <iconField>#IMAGE</iconField> + <titleField>NAME</titleField> + <subtitleField>BASETEMPLATE</subtitleField> + <favoriteAction1>OpenInMosaico</favoriteAction1> + </cardViewTemplate> + <genericViewTemplate> + <name>Generic</name> + <fields> + <entityFieldLink> + <name>1f9bfdf0-50a4-4cd2-acd6-46927be7e03c</name> + <entityField>ISOLANGUAGE</entityField> + </entityFieldLink> + <entityFieldLink> + <name>65e97a67-9ea4-4412-96be-3b46a2d1326f</name> + <entityField>CATEGORY</entityField> + </entityFieldLink> + </fields> + </genericViewTemplate> + <neonViewReference> + <name>6dd3e8ef-9a94-400d-a8a6-d7cb660b4ec3</name> + <entityField>Documents</entityField> + <view>DocumentList_view</view> + </neonViewReference> + </children> +</neonView> diff --git a/process/Bulkmail_lib/process.js b/process/Bulkmail_lib/process.js index 75e83e1cbc915388df6142e5cdd2531f0ac2a785..01a0f46955c0e4a6d595f618bc57d77e84c92949 100644 --- a/process/Bulkmail_lib/process.js +++ b/process/Bulkmail_lib/process.js @@ -83,15 +83,15 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pIsTestRun, pUser) } var sendUserTitle = project.getPreferenceValue("custom.bulkmail.user"); - var [templateId, subject, emailSender, createActivity, bulkMailName, useTemplateAttachments] = - newSelect("DOCUMENTTEMPLATE_ID, SUBJECT, SENDER_EMAIL_ADDRESS, CREATEACTIVITIES, NAME, USE_TEMPLATE_ATTACHMENTS") + var [templateId, subject, emailSender, createActivity, bulkMailName, useTemplateAttachments, mosaicoTemplateId] = + newSelect("DOCUMENTTEMPLATE_ID, SUBJECT, SENDER_EMAIL_ADDRESS, CREATEACTIVITIES, NAME, USE_TEMPLATE_ATTACHMENTS, MOSAICOTEMPLATE_ID") .from("BULKMAIL") .where("BULKMAIL.BULKMAILID", pBulkMailId) .arrayRow(); useTemplateAttachments = Utils.toBoolean(useTemplateAttachments); - var template = BulkMailUtils.getBulkMailTemplate(pBulkMailId, templateId, true, useTemplateAttachments); + var template = BulkMailUtils.getBulkMailTemplate(pBulkMailId, templateId, true, useTemplateAttachments, mosaicoTemplateId); var recipientData; var testRecipientData; @@ -479,25 +479,38 @@ BulkMailUtils.addRecipients = function (pBulkMailId, pContactIds) * If true the attachments from the document template is always used * @param {FileUpload} pUpload (optional) <p> * The upload value if a custom template is used.<br> + * @param {String} pMosaicoTemplateId (optional) <p> + * The id of the mosaico template.<br> * @return {DocumentTemplate} <p> * The document template, null if no content was found.<br> */ -BulkMailUtils.getBulkMailTemplate = function (pBulkMailId, pDocumentTemplateId, pResolveSubtemplates, pUseTemplateAttachments, pUpload) +BulkMailUtils.getBulkMailTemplate = function (pBulkMailId, pDocumentTemplateId, pResolveSubtemplates, pUseTemplateAttachments, pUpload, pMosaicoTemplateId) { if (pUpload && pUpload.isFilled() && BulkMailUtils.isValidMimeType(pUpload.mimeType)) + { return DocumentTemplate.fromUpload(pUpload); + } var bulkTemplate = DocumentTemplate.loadTemplate(pBulkMailId, "BULKMAIL", pResolveSubtemplates); var documentTemplate = DocumentTemplate.loadTemplate(pDocumentTemplateId, undefined, pResolveSubtemplates); - + var mosaicoTemplate = DocumentTemplate.loadTemplate(pMosaicoTemplateId, "MOSAICOTEMPLATE", pResolveSubtemplates); if (!bulkTemplate.content) { - return documentTemplate; + if (pMosaicoTemplateId) + { + return mosaicoTemplate; + } + else + { + return documentTemplate; + } } else { if (pUseTemplateAttachments) + { bulkTemplate.setAttachments(documentTemplate.getAttachments()); + } return bulkTemplate; } @@ -698,6 +711,20 @@ BulkMailUtils.copy = function(pBulkMailId) }; neon.openContext("BulkMail", null, null, neon.OPERATINGSTATE_NEW, params); } + +/** + * Opens BulkMail context in new mode, with the given template from MosaicoTemplate id.<br> + * + * @param {String} pMosaicoTemplateId <p> + * The id of the bulk mail.<br> + */ +BulkMailUtils.createFromMosaicoTemplate = function(pMosaicoTemplateId) +{ + var params = { + "CreateFromMosaicoTemplateId_param" : pMosaicoTemplateId + }; + neon.openContext("BulkMail", null, null, neon.OPERATINGSTATE_NEW, params); +} /* *Stores the Eml file for a bulkmailrecipient in the Filesystem * diff --git a/process/DocumentTemplate_lib/process.js b/process/DocumentTemplate_lib/process.js index daf83b6b1573ceee181d1cb7218ffca1b6b7b36e..862ad205061423ccd4c0c7050a1abb928c5354e9 100644 --- a/process/DocumentTemplate_lib/process.js +++ b/process/DocumentTemplate_lib/process.js @@ -662,12 +662,24 @@ DocumentTemplate.prototype._getRequiredPlaceholders = function (pForcedPlacehold * @param {Array} pContactIds contact ids * @param {Placeholder[]} pAdditionalPlaceholders Additional placeholders that should be used. You can use placeholders with the * types FIXEDVALUE and CALLBACKFUNCTION if you want to calculate the replacement values yourself. + * @param {boolean} pGetAllReplacements if true all Replacements get returned even if theyre not in the document. * * @return {Object} Object containing the data. The structure is like {contactId : {placeholderName : replacementValue, ...}, ...} */ -DocumentTemplate.prototype.getReplacementsByContactIds = function (pContactIds, pAdditionalPlaceholders) +DocumentTemplate.prototype.getReplacementsByContactIds = function (pContactIds, pAdditionalPlaceholders, pGetAllReplacements) { - var placeholders = this._getRequiredPlaceholders(["{@firstname@}", "{@lastname@}"], pAdditionalPlaceholders); + var placeholders; + if(pGetAllReplacements) + { + placeholders = PlaceholderUtils.getPlaceholders(); + if (pAdditionalPlaceholders) + placeholders = placeholders.concat(pAdditionalPlaceholders); + } + else + { + placeholders = this._getRequiredPlaceholders(["{@firstname@}", "{@lastname@}"], pAdditionalPlaceholders); + } + var contactPlaceholders = []; var additionalPlaceholders = {}; var isUserRequired = false; diff --git a/process/KeywordRegistry_basic/process.js b/process/KeywordRegistry_basic/process.js index cad4add23feaf327961ba46ac1196bc0b169dd14..cc85d170a716afb3a5e352b754534ce5b5b93330 100644 --- a/process/KeywordRegistry_basic/process.js +++ b/process/KeywordRegistry_basic/process.js @@ -514,4 +514,8 @@ $KeywordRegistry.attributeFilterComparisonMethod$fix = function(){return "FIX";} $KeywordRegistry.linkEvaluationType = function(){return "LinkEvaluationType";}; $KeywordRegistry.linkEvaluationType$default = function(){return "LINKEVALUATION_DEFAULT";}; $KeywordRegistry.linkEvaluationType$ignore = function(){return "LINKEVALUATION_IGNORE";}; -$KeywordRegistry.linkEvaluationType$unsubscribe = function(){return "LINKEVALUATION_UNSUBSCRIBE";}; \ No newline at end of file +$KeywordRegistry.linkEvaluationType$unsubscribe = function(){return "LINKEVALUATION_UNSUBSCRIBE";}; + +$KeywordRegistry.mosaicoBaseTemplate = function(){return "MosaicoBaseTemplate";}; + +$KeywordRegistry.mosaicoTemplateCategory = function(){return "MosaicoTemplateCategory";}; \ No newline at end of file diff --git a/process/MosaicoTemplate_lib/MosaicoTemplate_lib.aod b/process/MosaicoTemplate_lib/MosaicoTemplate_lib.aod new file mode 100644 index 0000000000000000000000000000000000000000..18f4ea2e9f4dd0459fcde69b8a5ef0be046ae90d --- /dev/null +++ b/process/MosaicoTemplate_lib/MosaicoTemplate_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>MosaicoTemplate_lib</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <process>%aditoprj%/process/MosaicoTemplate_lib/process.js</process> + <alias>Data_alias</alias> + <variants> + <element>LIBRARY</element> + </variants> +</process> diff --git a/process/MosaicoTemplate_lib/process.js b/process/MosaicoTemplate_lib/process.js new file mode 100644 index 0000000000000000000000000000000000000000..849855de8a1626632e7cd732482b5a69155b2b12 --- /dev/null +++ b/process/MosaicoTemplate_lib/process.js @@ -0,0 +1,52 @@ +import("Sql_lib"); +import("system.project"); +import("system.neon"); +import("Employee_lib"); +import("system.vars"); + + +/** + * Provides functions for Mosaico. + * + * Do not create an instance of this! + * + * @class + */ +function MosaicoUtils () {} + + +/** + * Opens the mosaico email editor in a new tab with the provided mosaicotemplateid + * + * @param {String} pMosaicoTemplateId the id of the mosaico template + * + * @return {void} + */ +MosaicoUtils.openInMosaico = function (pMosaicoTemplateId) +{ + var baseurl = project.getPreferenceValue("custom.mosaico.url"); + + var aditoWebserviceBaseUrl = vars.get("$sys.origin"); + + var baseTemplate = newSelect("BASETEMPLATE") + .from("MOSAICOTEMPLATE") + .where("MOSAICOTEMPLATE.MOSAICOTEMPLATEID",pMosaicoTemplateId) + .cell() + .trim(); + + if (baseurl && aditoWebserviceBaseUrl && pMosaicoTemplateId && baseTemplate) + { + var parameters = { + aditouser: EmployeeUtils.getCurrentUserId(), + aditourl: aditoWebserviceBaseUrl, + id: pMosaicoTemplateId + }; + + + var parameterString = "?"+Object.keys(parameters).map(function(key){return key+"="+encodeURIComponent(parameters[key])}).join("&"); + + var hash = "#/templates/"+baseTemplate+"/template-"+baseTemplate+".html" + + neon.openUrl(baseurl+"/editor.html"+parameterString+hash,true); + } +} \ No newline at end of file diff --git a/process/Placeholder_lib/process.js b/process/Placeholder_lib/process.js index f9d5255fa6724011b31a58996b059d949c979482..e96b202d0b755d65adbbc90123e4e5cf6867e129 100644 --- a/process/Placeholder_lib/process.js +++ b/process/Placeholder_lib/process.js @@ -39,12 +39,12 @@ PlaceholderUtils.getPlaceholders = function (pLocale, pIsExportTemplateField) _addAddressFormat("district", "{district}", null , translate.text("District", locale)); _addAddressFormat("region", "{region}", null , translate.text("Region", locale)); _addAddressFormat("country", "{country}", null , translate.text("Country", locale)); - _addAddressFormat("letterSalutation", "{letter_salutation}", null); + _addAddressFormat("letterSalutation", "{letter_salutation}", null, translate.text("Letter salutation")); _addAddressFormat("fullAddress", "", null, translate.text("FullAddress", locale));//empty string is automatically transformed into the address format of the recrods country (the format is stored in the the db table AB_COUNTRYINFO) - _addAddressFormat("senderOrgname", "{organisation_name}", Placeholder.targets.SENDER); - _addAddressFormat("senderAddress", "{street} {buildingno}", Placeholder.targets.SENDER); - _addAddressFormat("senderZipCity", "{country} - {zip} {city}", Placeholder.targets.SENDER); - _addAddressFormat("senderFullAddress", "", Placeholder.targets.SENDER), translate.text("FullAddress", locale); + _addAddressFormat("senderOrgname", "{organisation_name}", Placeholder.targets.SENDER, translate.text("Sender organisation name")); + _addAddressFormat("senderAddress", "{street} {buildingno}", Placeholder.targets.SENDER, translate.text("Sender address")); + _addAddressFormat("senderZipCity", "{country} - {zip} {city}", Placeholder.targets.SENDER, translate.text("Sender country - zip - city")); + _addAddressFormat("senderFullAddress", "", Placeholder.targets.SENDER, translate.text("Sender full address", locale)); _addSqlPart("orgname", "ORGANISATION.NAME", null , translate.text("Organisationname", locale)); _addSqlPart("firstname", "PERSON.FIRSTNAME", null , translate.text("Firstname", locale)); @@ -55,10 +55,10 @@ PlaceholderUtils.getPlaceholders = function (pLocale, pIsExportTemplateField) _addSqlPart("phone", CommUtil.getStandardSubSqlPhone(), null , translate.text("Phone", locale)); _addSqlPart("email", CommUtil.getStandardSubSqlMail(), null , translate.text("Email", locale)); _addSqlPart("name", sqlUtil.concatWithSeparator(["SALUTATION", "TITLE", "FIRSTNAME", "LASTNAME"]), null , translate.text("Name", locale)); - _addSqlPart("senderPhone", CommUtil.getStandardSubSqlPhone(), Placeholder.targets.SENDER, null); - _addSqlPart("senderEmail", CommUtil.getStandardSubSqlMail(), Placeholder.targets.SENDER, null); - _addSqlPart("senderName", sqlUtil.concatWithSeparator(["SALUTATION", "TITLE", "FIRSTNAME", "LASTNAME"]), Placeholder.targets.SENDER, null); - _addSqlPart("date", "'" + datetime.toDate(vars.get("sys.date"), translate.text("dd.MM.yyyy")) + "'", Placeholder.targets.SENDER, null); + _addSqlPart("senderPhone", CommUtil.getStandardSubSqlPhone(), Placeholder.targets.SENDER, translate.text("Sender phone")); + _addSqlPart("senderEmail", CommUtil.getStandardSubSqlMail(), Placeholder.targets.SENDER, translate.text("Sender email")); + _addSqlPart("senderName", sqlUtil.concatWithSeparator(["SALUTATION", "TITLE", "FIRSTNAME", "LASTNAME"]), Placeholder.targets.SENDER, translate.text("Sender name")); + _addSqlPart("date", "'" + datetime.toDate(vars.get("sys.date"), translate.text("dd.MM.yyyy")) + "'", Placeholder.targets.SENDER, translate.text("Date")); /***************************************************************************************************************/ diff --git a/process/mosaico_rest/documentation.adoc b/process/mosaico_rest/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..f8cb0af77a943f29c4f47bbaf9acd6d5076dedec --- /dev/null +++ b/process/mosaico_rest/documentation.adoc @@ -0,0 +1,4 @@ += mosaico_rest + +This webservice is used by the mosaico email editor to save and load templates from the adito server. +The Templates get shown in the MosaicoTemplate_entity. \ No newline at end of file diff --git a/process/mosaico_rest/mosaico_rest.aod b/process/mosaico_rest/mosaico_rest.aod new file mode 100644 index 0000000000000000000000000000000000000000..25ec4112454dff020788ab3953c797d1925c3a69 --- /dev/null +++ b/process/mosaico_rest/mosaico_rest.aod @@ -0,0 +1,19 @@ +<?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>mosaico_rest</name> + <majorModelMode>DISTRIBUTED</majorModelMode> + <documentation>%aditoprj%/process/mosaico_rest/documentation.adoc</documentation> + <process>%aditoprj%/process/mosaico_rest/process.js</process> + <publishAsWebservice v="true" /> + <style>REST</style> + <restAcceptedMimeType>application/json</restAcceptedMimeType> + <restDeliveredMimeType>application/json</restDeliveredMimeType> + <loginTypeId> + <element>internal.none</element> + </loginTypeId> + <jditoWebserviceUser>Admin</jditoWebserviceUser> + <alias>Data_alias</alias> + <variants> + <element>EXECUTABLE</element> + </variants> +</process> diff --git a/process/mosaico_rest/process.js b/process/mosaico_rest/process.js new file mode 100644 index 0000000000000000000000000000000000000000..8674e22c97ce68f7f1f013c100f79cbd7ba2b990 --- /dev/null +++ b/process/mosaico_rest/process.js @@ -0,0 +1,132 @@ +import("system.vars"); +import("Placeholder_lib"); +import("Binary_lib"); +import("system.db"); +import("system.util"); +import("Sql_lib"); +import("KeywordRegistry_basic"); +import("system.tools"); + +//saves a Mosaico Template +function restpost(pRequest) +{ + var request = JSON.parse(pRequest); + var body = JSON.parse(util.decodeBase64String(request.body, "UTF-8")); + var mosaicoTemplateId = body.id; + var userId = body.user; + var employee = tools.getUserByAttribute(tools.NAME, userId, tools.PROFILE_DEFAULT); + if(mosaicoTemplateId) + { + //check if template exists in db + var name = newSelect("NAME") + .from("MOSAICOTEMPLATE") + .where("MOSAICOTEMPLATE.MOSAICOTEMPLATEID", mosaicoTemplateId) + .cell(true); + + if (name) + { + newWhere("MOSAICOTEMPLATE.MOSAICOTEMPLATEID", mosaicoTemplateId) + .updateFields({ + "METADATA": body.metadata, + "CONTENT": body.content, + "USER_EDIT":employee[tools.TITLE], + "DATE_EDIT":vars.get("$sys.date") + }); + + SingleBinaryUtils.set("MOSAICOTEMPLATE", "DOCUMENT", mosaicoTemplateId, util.encodeBase64String(body.html),name +".html",""); + + var bulkMailsWithTemplate = newSelect(["BULKMAIL.BULKMAILID", "BULKMAIL.NAME"]) + .from("BULKMAIL") + .where("BULKMAIL.MOSAICOTEMPLATE_ID", mosaicoTemplateId) + .table(); + + //update all bulkmails which use the template with the new html file + bulkMailsWithTemplate.forEach(function ([pBulkMailId, pBulkMailName]) + { + var metaData = SingleBinaryUtils.getMetadata("BULKMAIL", "DOCUMENT", pBulkMailId); + SingleBinaryUtils.set("BULKMAIL", "DOCUMENT", pBulkMailId, util.encodeBase64String(body.html), metaData[db.BINARY_FILENAME] || (pBulkMailName+".html")); + }); + + request.response.httpStatusCode = 200; + } + else + { + request.response.httpStatusCode = 500; + } + } + else + { + request.response.httpStatusCode = 500; + } + return JSON.stringify(request); +} + +//get information about the template, links and placeholders for use in the mosaico editor +function restget(pRequest) +{ + var responseBody = {} + var request = JSON.parse(pRequest); + var mosaicoTemplateId = request.query.id; + var userName = request.query.user; + + if (mosaicoTemplateId && userName) + { + var mosaicoTemplateData = newSelect(["METADATA","CONTENT"]) + .from("MOSAICOTEMPLATE") + .where("MOSAICOTEMPLATE.MOSAICOTEMPLATEID", mosaicoTemplateId) + .arrayRow(); + if (mosaicoTemplateData.length > 0) + { + responseBody = {"metadata": mosaicoTemplateData[0], "content": mosaicoTemplateData[1]}; + } + + responseBody.links = _getMosaicoLinks(); + responseBody.placeholders = _getMosaicoPlaceholders(userName); + + if(responseBody.hasOwnProperty("metadata")) + { + request.response.httpStatusCode = 200; //ok + } + else + { + request.response.httpStatusCode = 404; //not found + } + } + else + { + request.response.httpStatusCode = 400; //bad request + } + + request.response.body = JSON.stringify(responseBody); + + return JSON.stringify(request); +} + + +function _getMosaicoLinks() +{ + return newSelect("PLACEHOLDER") + .from("WEBLINK") + .where("WEBLINK.PLACEHOLDER is not null") + .orderBy("PLACEHOLDER asc") + .arrayColumn(); +} + +function _getMosaicoPlaceholders(pUserName) +{ + var employee = tools.getUserByAttribute(tools.NAME, pUserName, tools.PROFILE_DEFAULT); + var employeeContactId = employee[tools.PARAMS][tools.CONTACTID]; + var replacements = new DocumentTemplate().getReplacementsByContactIds([employeeContactId],null,true) + + + var mosaicoPlaceholders = PlaceholderUtils.getPlaceholders() + .map( function(pPlaceholder) + { + return {title: pPlaceholder.title, + preview: replacements[employeeContactId][pPlaceholder.getFormattedName()], + placeholder: pPlaceholder.getFormattedName(), + variableName: pPlaceholder.placeholderName}; + }); + + return mosaicoPlaceholders +} \ No newline at end of file