diff --git a/entity/BulkMailAddRecipients_entity/BulkMailAddRecipients_entity.aod b/entity/BulkMailAddRecipients_entity/BulkMailAddRecipients_entity.aod index 63b472319fa68c5290688ac1587d01af22ded26b..8a89d2b2b286d6d0bb3a5d97ee9d6a9cfe088451 100644 --- a/entity/BulkMailAddRecipients_entity/BulkMailAddRecipients_entity.aod +++ b/entity/BulkMailAddRecipients_entity/BulkMailAddRecipients_entity.aod @@ -31,7 +31,7 @@ </dependency> </entityConsumer> <entityParameter> - <name>ContactIds_param</name> + <name>Ids_param</name> <expose v="true" /> </entityParameter> <entityField> @@ -73,13 +73,17 @@ <useAggregates v="true" /> </entityProvider> <entityParameter> - <name>ContactFilter_param</name> + <name>Filter_param</name> <expose v="true" /> </entityParameter> <entityField> <name>proposedContactIds</name> <valueProcess>%aditoprj%/entity/BulkMailAddRecipients_entity/entityfields/proposedcontactids/valueProcess.js</valueProcess> </entityField> + <entityParameter> + <name>Parameters_param</name> + <expose v="true" /> + </entityParameter> </entityFields> <recordContainers> <datalessRecordContainer> diff --git a/entity/BulkMailAddRecipients_entity/entityfields/proposedcontactids/valueProcess.js b/entity/BulkMailAddRecipients_entity/entityfields/proposedcontactids/valueProcess.js index abc1e78c4e3211d5cbb9cfbb1440a276edc8f400..a865018d80dc98523a354ff97ae305e84008d850 100644 --- a/entity/BulkMailAddRecipients_entity/entityfields/proposedcontactids/valueProcess.js +++ b/entity/BulkMailAddRecipients_entity/entityfields/proposedcontactids/valueProcess.js @@ -1,3 +1,6 @@ +import("Context_lib"); +import("system.entities"); +import("Sql_lib"); import("Util_lib"); import("FilterViewAction_lib"); import("system.result"); @@ -7,11 +10,61 @@ var bulkMailId = vars.get("$field.BULKMAIL_ID"); var proposedRecipients = []; if (bulkMailId) { - var contactIds = Utils.parseJSON(vars.get("$param.ContactIds_param")); - var contactFilter = vars.get("$param.ContactFilter_param"); + var ids = Utils.parseJSON(vars.get("$param.Ids_param")); + var filter = vars.get("$param.Filter_param"); var context = vars.getString("$param.ObjectType_param"); + var parameters = vars.get("$param.Parameters_param"); + + + switch(context) + { + case "CampaignParticipant": + if (Utils.isNullOrEmpty(ids) && filter) + { + var filterObject = Utils.isString(filter) ? JSON.parse(filter) : filter; + + let _parameters = Utils.isString(parameters) ? JSON.parse(parameters) : parameters; + + var loadRowsConfig = entities.createConfigForLoadingRows() + .entity(ContextUtils.getEntity(context)) + .fields(["CONTACT_ID"]) + + if (filterObject.filter) + loadRowsConfig.filter(JSON.stringify(filterObject.filter)); - proposedRecipients = FilterViewActionUtils.getUidsBySelectionOrFilter(context, contactIds, contactFilter); + if(_parameters) + { + Object.keys(_parameters).forEach(function(key) + { + loadRowsConfig.addParameter(key, _parameters[key]) + }); + } + + + proposedRecipients = entities.getRows(loadRowsConfig).map(function (row) + { + return row["CONTACT_ID"]; + }); + } + else if(!Utils.isNullOrEmpty(ids)) + { + proposedRecipients = newSelect("CAMPAIGNPARTICIPANT.CONTACT_ID") + .from("CAMPAIGNPARTICIPANT") + .where("CAMPAIGNPARTICIPANT.CAMPAIGNPARTICIPANTID", ids, SqlBuilder.IN()) + .arrayColumn(); + } + break; + case "CampaignStep": + var proposedIds = FilterViewActionUtils.getUidsBySelectionOrFilter(context, ids, filter, parameters); + proposedRecipients = newSelect("CAMPAIGNPARTICIPANT.CONTACT_ID") + .from("CAMPAIGNPARTICIPANT") + .where("CAMPAIGNPARTICIPANT.CAMPAIGNSTEP_ID", proposedIds, SqlBuilder.IN()) + .arrayColumn(); + break; + default: + proposedRecipients = FilterViewActionUtils.getUidsBySelectionOrFilter(context, ids, filter, parameters); + } + } result.string(JSON.stringify(proposedRecipients)); \ No newline at end of file diff --git a/entity/BulkMailAddRecipients_entity/entityfields/validcontactids/valueProcess.js b/entity/BulkMailAddRecipients_entity/entityfields/validcontactids/valueProcess.js index 2df0a164747ae867eb2c6a645c4be5625ba9d21c..9517c6034fc740302e21c219d11be1c149e959dc 100644 --- a/entity/BulkMailAddRecipients_entity/entityfields/validcontactids/valueProcess.js +++ b/entity/BulkMailAddRecipients_entity/entityfields/validcontactids/valueProcess.js @@ -2,13 +2,27 @@ import("Util_lib"); import("system.result"); import("Bulkmail_lib"); import("system.vars"); +import("Sql_lib"); var bulkMailId = vars.get("$field.BULKMAIL_ID"); +var filter = vars.get("$param.Filter_param"); +var ids = Utils.parseJSON(vars.get("$param.Ids_param")); +var context = vars.getString("$param.ObjectType_param"); + +if (Utils.isString(filter)) + filter = JSON.parse(filter); var validRecipients = []; + if (bulkMailId) { - var proposedRecipients = Utils.parseJSON(vars.get("$field.proposedContactIds")); - validRecipients = BulkMailUtils.filterNewRecipients(bulkMailId, proposedRecipients); + if (Utils.isNullOrEmpty(ids) && filter && filter.condition) + { + validRecipients = BulkMailUtils.filterNewRecipientsByCondition(bulkMailId, filter.condition, context) + } + else + { + validRecipients = BulkMailUtils.filterNewRecipients(bulkMailId, JSON.parse(vars.get("$field.proposedContactIds"))); + } } result.string(JSON.stringify(validRecipients)); \ No newline at end of file diff --git a/entity/BulkMail_entity/BulkMail_entity.aod b/entity/BulkMail_entity/BulkMail_entity.aod index 1a126d58acbf5fc674a943513f0f608bd918fa33..0d5114b36d50c84ab07874aa1bbc4ce7ffdd325c 100644 --- a/entity/BulkMail_entity/BulkMail_entity.aod +++ b/entity/BulkMail_entity/BulkMail_entity.aod @@ -550,6 +550,16 @@ <name>USER_EDIT</name> <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> </entityFields> <recordContainers> <dbRecordContainer> diff --git a/entity/BulkMail_entity/entityfields/presetrecipientscontext_param/documentation.adoc b/entity/BulkMail_entity/entityfields/presetrecipientscontext_param/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..a1be78edef0f33d431bd8b8a11a8c4913a6c1b3d --- /dev/null +++ b/entity/BulkMail_entity/entityfields/presetrecipientscontext_param/documentation.adoc @@ -0,0 +1,3 @@ +used in combination with PresetRecipientsFilter_param when creating a new Bulkmail from a serial action. + +gets ignored when PresetRecipients_param is also set. \ No newline at end of file diff --git a/entity/BulkMail_entity/entityfields/presetrecipientsfilter_param/documentation.adoc b/entity/BulkMail_entity/entityfields/presetrecipientsfilter_param/documentation.adoc new file mode 100644 index 0000000000000000000000000000000000000000..0fbc5c9feb6e8a9ac1e8b475b292f9bbc3f2a47e --- /dev/null +++ b/entity/BulkMail_entity/entityfields/presetrecipientsfilter_param/documentation.adoc @@ -0,0 +1,5 @@ +used in combination with PresetRecipientsContext_param when creating a new Bulkmail from a serial action. + +gets ignored when PresetRecipients_param is also set. + +Expects $sys.filter object. \ No newline at end of file diff --git a/entity/BulkMail_entity/recordcontainers/db/onDBInsert.js b/entity/BulkMail_entity/recordcontainers/db/onDBInsert.js index b6cddba7941ba335df3c724c15abcd4dd7b139d1..54931b06e7104406b1df9fa48a117170497f7b17 100644 --- a/entity/BulkMail_entity/recordcontainers/db/onDBInsert.js +++ b/entity/BulkMail_entity/recordcontainers/db/onDBInsert.js @@ -89,4 +89,21 @@ if (vars.get("$param.CopyBulkMailId_param") && Utils.toBoolean(vars.get("$field. db.inserts(inserts); } +var contactIds = []; + +if (vars.get("$param.PresetRecipients_param")) +{ + contactIds = contactIds.concat(BulkMailUtils.filterNewRecipients(bulkMailId,JSON.parse(vars.getString("$param.PresetRecipients_param")))); +} +else if (vars.getString("$param.PresetRecipientsContext_param") && vars.getString("$param.PresetRecipientsFilter_param")) +{ + contactIds = contactIds.concat(BulkMailUtils.filterNewRecipientsByCondition(bulkMailId, JSON.parse(vars.getString("$param.PresetRecipientsFilter_param")).condition, vars.getString("$param.PresetRecipientsContext_param"))); +} + + +if (contactIds && contactIds.length > 0) + BulkMailUtils.addRecipients(bulkMailId, contactIds); + + + WorkflowSignalSender.inserted(); \ No newline at end of file diff --git a/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod b/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod index 684247565835d1adbc8487986ccbda6ae2358fa0..a886027212db89216b6f4be30daaa9d6004b6ee6 100644 --- a/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod +++ b/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod @@ -175,6 +175,18 @@ <tooltip>Update campaign step</tooltip> <tooltipProcess>%aditoprj%/entity/CampaignParticipant_entity/entityfields/filterviewactiongroup/children/setsteptoparticipantselection/tooltipProcess.js</tooltipProcess> </entityActionField> + <entityActionField> + <name>addToBulkmail</name> + <title>Add to Bulkmail</title> + <onActionProcess>%aditoprj%/entity/CampaignParticipant_entity/entityfields/filterviewactiongroup/children/addtobulkmail/onActionProcess.js</onActionProcess> + <iconId>VAADIN:AT</iconId> + </entityActionField> + <entityActionField> + <name>newBulkMail</name> + <title>Write bulk mail</title> + <onActionProcess>%aditoprj%/entity/CampaignParticipant_entity/entityfields/filterviewactiongroup/children/newbulkmail/onActionProcess.js</onActionProcess> + <iconId>VAADIN:AT</iconId> + </entityActionField> </children> </entityActionGroup> <entityField> @@ -339,14 +351,6 @@ <name>CAMPAIGNPARTICIPANTID.displayValue</name> <recordfield>CAMPAIGNPARTICIPANT.CAMPAIGNPARTICIPANTID</recordfield> </dbRecordFieldMapping> - <dbRecordFieldMapping> - <name>STANDARD_PHONE_COMMUNICATION.displayValue</name> - <expression>%aditoprj%/entity/CampaignParticipant_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.displayvalue/expression.js</expression> - </dbRecordFieldMapping> - <dbRecordFieldMapping> - <name>STANDARD_EMAIL_COMMUNICATION.displayValue</name> - <expression>%aditoprj%/entity/CampaignParticipant_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.displayvalue/expression.js</expression> - </dbRecordFieldMapping> <dbRecordFieldMapping> <name>ADVERTISINGBAN_ICON.value</name> <expression>%aditoprj%/entity/CampaignParticipant_entity/recordcontainers/db/recordfieldmappings/advertisingban_icon.value/expression.js</expression> @@ -402,6 +406,14 @@ <name>ORGANISATION_CONTACT_ID.displayValue</name> <recordfield>ORGANISATION.NAME</recordfield> </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>STANDARD_EMAIL_COMMUNICATION.value</name> + <expression>%aditoprj%/entity/CampaignParticipant_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js</expression> + </dbRecordFieldMapping> + <dbRecordFieldMapping> + <name>STANDARD_PHONE_COMMUNICATION.value</name> + <expression>%aditoprj%/entity/CampaignParticipant_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js</expression> + </dbRecordFieldMapping> </recordFieldMappings> <linkInformation> <linkInformation> diff --git a/entity/CampaignParticipant_entity/entityfields/filterviewactiongroup/children/addtobulkmail/onActionProcess.js b/entity/CampaignParticipant_entity/entityfields/filterviewactiongroup/children/addtobulkmail/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..c5e06bc71d9e0872e5ba270940a124d90da8fc2f --- /dev/null +++ b/entity/CampaignParticipant_entity/entityfields/filterviewactiongroup/children/addtobulkmail/onActionProcess.js @@ -0,0 +1,5 @@ +import("Bulkmail_lib"); +import("system.vars"); + +var parameters = {"CampaignId_param":vars.get("$param.CampaignId_param")}; +BulkMailUtils.openAddRecipientView(vars.get("$sys.currentcontextname"), vars.get("$sys.selection"), vars.get("$sys.filter"), parameters); \ No newline at end of file diff --git a/entity/CampaignParticipant_entity/entityfields/filterviewactiongroup/children/newbulkmail/onActionProcess.js b/entity/CampaignParticipant_entity/entityfields/filterviewactiongroup/children/newbulkmail/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..7bca6ed54c3f9d4dfc5aa1c56556d2bac6832ed6 --- /dev/null +++ b/entity/CampaignParticipant_entity/entityfields/filterviewactiongroup/children/newbulkmail/onActionProcess.js @@ -0,0 +1,21 @@ +import("system.vars"); +import("Sql_lib"); +import("system.db"); +import("Bulkmail_lib"); + + +var selection = vars.get("$sys.selection"); +var filter = vars.get("$sys.filter"); +var recipientsSql = newSelect("CONTACT_ID") + .from("CAMPAIGNPARTICIPANT") + +if(selection.length > 0) +{ + recipientsSql.where("CAMPAIGNPARTICIPANT.CAMPAIGNPARTICIPANTID",selection,SqlBuilder.IN()); + BulkMailUtils.newBulkMail(recipientsSql.arrayColumn()); +} +else +{ + BulkMailUtils.newBulkMail(null,vars.getString("$sys.currentcontextname"),filter); +} + diff --git a/entity/CampaignParticipant_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js b/entity/CampaignParticipant_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..02a585f840c78bfdcc768640e146bd2f4b41f008 --- /dev/null +++ b/entity/CampaignParticipant_entity/recordcontainers/db/recordfieldmappings/standard_email_communication.value/expression.js @@ -0,0 +1,6 @@ +import("Sql_lib"); +import("system.result"); +import("Communication_lib"); + +var res = CommUtil.getStandardSubSqlMail(newWhere("COMMUNICATION.OBJECT_ROWID = CAMPAIGNPARTICIPANT.CONTACT_ID")); +result.string(res); \ No newline at end of file diff --git a/entity/CampaignParticipant_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js b/entity/CampaignParticipant_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js new file mode 100644 index 0000000000000000000000000000000000000000..b13adb6ad2bc89f776b5ad17a811005e1050f85d --- /dev/null +++ b/entity/CampaignParticipant_entity/recordcontainers/db/recordfieldmappings/standard_phone_communication.value/expression.js @@ -0,0 +1,6 @@ +import("system.result"); +import("Communication_lib"); +import("Sql_lib"); + +var res = CommUtil.getStandardSubSqlPhone(newWhere("COMMUNICATION.OBJECT_ROWID = CAMPAIGNPARTICIPANT.CONTACT_ID")); +result.string(res); \ No newline at end of file diff --git a/entity/CampaignStep_entity/CampaignStep_entity.aod b/entity/CampaignStep_entity/CampaignStep_entity.aod index 80eba01b15c052c1dea96ec81668ab55688d08db..3e6431a73b8603709e2058f5edf0921f2bd4b35e 100644 --- a/entity/CampaignStep_entity/CampaignStep_entity.aod +++ b/entity/CampaignStep_entity/CampaignStep_entity.aod @@ -337,12 +337,6 @@ <consumer>KeywordStepMedium</consumer> <groupable v="true" /> </entityField> - <entityActionField> - <name>newBulkMail</name> - <title>Write bulk mail</title> - <onActionProcess>%aditoprj%/entity/CampaignStep_entity/entityfields/newbulkmail/onActionProcess.js</onActionProcess> - <iconId>VAADIN:AT</iconId> - </entityActionField> <entityParameter> <name>maxSort_param</name> <expose v="true" /> @@ -386,6 +380,8 @@ <name>moveUp</name> <title>Move up</title> <onActionProcess>%aditoprj%/entity/CampaignStep_entity/entityfields/group/children/moveup/onActionProcess.js</onActionProcess> + <isMenuAction v="true" /> + <isObjectAction v="false" /> <iconId>VAADIN:ARROW_UP</iconId> <state>DISABLED</state> <stateProcess>%aditoprj%/entity/CampaignStep_entity/entityfields/group/children/moveup/stateProcess.js</stateProcess> @@ -396,10 +392,26 @@ <title>Move down</title> <description></description> <onActionProcess>%aditoprj%/entity/CampaignStep_entity/entityfields/group/children/movedown/onActionProcess.js</onActionProcess> + <isMenuAction v="true" /> + <isObjectAction v="false" /> <iconId>VAADIN:ARROW_DOWN</iconId> <stateProcess>%aditoprj%/entity/CampaignStep_entity/entityfields/group/children/movedown/stateProcess.js</stateProcess> <tooltipProcess>%aditoprj%/entity/CampaignStep_entity/entityfields/group/children/movedown/tooltipProcess.js</tooltipProcess> </entityActionField> + <entityActionField> + <name>addToBulkMail</name> + <title>Add to Bulkmail</title> + <onActionProcess>%aditoprj%/entity/CampaignStep_entity/entityfields/group/children/addtobulkmail/onActionProcess.js</onActionProcess> + <isObjectAction v="false" /> + <iconId>VAADIN:AT</iconId> + </entityActionField> + <entityActionField> + <name>newBulkMail</name> + <title>Write bulk mail</title> + <onActionProcess>%aditoprj%/entity/CampaignStep_entity/entityfields/group/children/newbulkmail/onActionProcess.js</onActionProcess> + <isObjectAction v="false" /> + <iconId>VAADIN:AT</iconId> + </entityActionField> </children> </entityActionGroup> </entityFields> diff --git a/entity/CampaignStep_entity/entityfields/group/children/addtobulkmail/onActionProcess.js b/entity/CampaignStep_entity/entityfields/group/children/addtobulkmail/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..3a56d448a8c9b338e7b99dcf92ab7e08d202c6d0 --- /dev/null +++ b/entity/CampaignStep_entity/entityfields/group/children/addtobulkmail/onActionProcess.js @@ -0,0 +1,5 @@ +import("Bulkmail_lib"); +import("system.vars"); + +var parameters = {"campaignId_param":vars.get("$param.campaignId_param")}; +BulkMailUtils.openAddRecipientView(vars.get("$sys.currentcontextname"), vars.get("$sys.selection"), vars.get("$sys.filter"), parameters); \ No newline at end of file diff --git a/entity/CampaignStep_entity/entityfields/group/children/newbulkmail/onActionProcess.js b/entity/CampaignStep_entity/entityfields/group/children/newbulkmail/onActionProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..548f568aebb826bfa906f7ba752f12b1a51ad638 --- /dev/null +++ b/entity/CampaignStep_entity/entityfields/group/children/newbulkmail/onActionProcess.js @@ -0,0 +1,7 @@ +import("system.vars"); +import("Sql_lib"); +import("system.db"); +import("Bulkmail_lib"); + + +BulkMailUtils.newBulkMail(null,vars.get("$sys.currentcontextname"),{"condition":newWhere("CAMPAIGNSTEP.CAMPAIGNSTEPID","$field.CAMPAIGNSTEPID").toString()}); \ No newline at end of file diff --git a/entity/CampaignStep_entity/entityfields/newbulkmail/onActionProcess.js b/entity/CampaignStep_entity/entityfields/newbulkmail/onActionProcess.js deleted file mode 100644 index 090b957b3fb2f37a3f71424c1824faf0a1bda8d8..0000000000000000000000000000000000000000 --- a/entity/CampaignStep_entity/entityfields/newbulkmail/onActionProcess.js +++ /dev/null @@ -1,11 +0,0 @@ -import("Sql_lib"); -import("system.db"); -import("Bulkmail_lib"); - -var recipients = newSelect("CONTACT_ID") - .from("CAMPAIGNPARTICIPANT") - .where("CAMPAIGNPARTICIPANT.CAMPAIGNSTEP_ID", "$field.CAMPAIGNSTEPID") - .and("CAMPAIGNPARTICIPANT.CAMPAIGN_ID", "$field.CAMPAIGN_ID") - .arrayColumn() - -BulkMailUtils.newBulkMail(recipients); \ No newline at end of file diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod index f69643cf430f4b92ac55f5511ead8a9872730f16..86f1d20bd155090b9534bf87b08fbef2a4296c63 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -12452,6 +12452,15 @@ Bitte Datumseingabe prüfen</value> <key>Zip Archive</key> <value>Zip Archiv</value> </entry> + <entry> + <key>set attribute (use filter result)</key> + </entry> + <entry> + <key>Copy Recipients</key> + </entry> + <entry> + <key>copy</key> + </entry> </keyValueMap> <font name="Dialog" style="0" size="11" /> </language> diff --git a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod index 8a2742e2cafbb9135183299ab27956f79c274ce3..14758851ea7f13a96750a23595f615bc0e969059 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -9368,6 +9368,33 @@ <entry> <key>Weekly</key> </entry> + <entry> + <key>SerialLetter</key> + </entry> + <entry> + <key>Bulkmail</key> + </entry> + <entry> + <key>%0 recipient will be added to the serial letter.</key> + </entry> + <entry> + <key>Volume (Euro)</key> + </entry> + <entry> + <key>%0 recipient will be added to the bulk mail.</key> + </entry> + <entry> + <key>Copy Recipients</key> + </entry> + <entry> + <key>Attribute \"%0\" can only be inserted once with the same value.</key> + </entry> + <entry> + <key>Set attribute (use filter result)</key> + </entry> + <entry> + <key>copy</key> + </entry> <entry> <key>Set workflow for selected e-mail filter</key> </entry> diff --git a/process/Bulkmail_lib/process.js b/process/Bulkmail_lib/process.js index b984b31ab61fc5b10e34d71d79e47380d7e63942..52221761690132a78edebe892f1722a25c52fc34 100644 --- a/process/Bulkmail_lib/process.js +++ b/process/Bulkmail_lib/process.js @@ -1,3 +1,4 @@ +import("JditoFilter_lib"); import("CommunicationBlacklist_lib"); import("EmailFilterHandling_lib"); import("system.logging"); @@ -361,20 +362,28 @@ BulkMailUtils.sendBulkMail = function (pBulkMailId, pIsTestRun, pUser) * Opens a context to select a bulk mail to add recipients to.<br> * * @param {String} pContext the context of the contacts (Person or Organisation) - * @param {String[]} pContactIds Recipients that should be added.<br> - * @param {String|Object} pFilter the filter for the contacts that should be used if no contact is selected + * @param {String[]} pIds Ids that should be added.<br> + * @param {String|Object} pFilter the filter for the contacts that should be used if no Ids are selected + * @param {String|Object} pParameters the relevant parameters that are needed to get the Ids from entities.loadrows in the form:{parametername:parametervalue} */ -BulkMailUtils.openAddRecipientView = function (pContext, pContactIds, pFilter) +BulkMailUtils.openAddRecipientView = function (pContext, pIds, pFilter, pParameters) { - if (!Utils.isString(pContactIds)) - pContactIds = JSON.stringify(pContactIds); - if (!Utils.isString(pFilter)) - pFilter = JSON.stringify(pFilter); + if (!Utils.isString(pParameters)) + pParameters = JSON.stringify(pParameters); + if (!Utils.isString(pIds)) + pIds = JSON.stringify(pIds); + if (Utils.isString(pFilter)) + pFilter = JSON.parse(pFilter); + if(Utils.isNullOrEmpty(pFilter.filter)) + pFilter.filter= JSON.parse(JditoFilterUtils.getEmptyFilter()).filter; + + pFilter= JSON.stringify(pFilter); neon.openContext("BulkMailAddRecipients", "BulkMailAddRecipientsEdit_view", null, neon.OPERATINGSTATE_VIEW, { "ObjectType_param": pContext, - "ContactIds_param": pContactIds, - "ContactFilter_param": pFilter + "Ids_param": pIds, + "Filter_param": pFilter, + "Parameters_param": pParameters }); } @@ -500,11 +509,17 @@ BulkMailUtils.isRecipient = function (pBulkMailId, pContactId, pRecipientId) * * @param {String[]} pRecipients (optional) <p> * Recipients that should be added after creation.<br> + * @param {String} pContext (optional) <p> + * Context the filter is coming from.<br> + * @param {Object} pFilter (optional) <p> + * sys.filter of selection that should be added to new bulkmail<br> */ -BulkMailUtils.newBulkMail = function (pRecipients) +BulkMailUtils.newBulkMail = function (pRecipients, pContext, pFilter) { var params = { - "PresetRecipients_param" : JSON.stringify(pRecipients) + "PresetRecipients_param" : pRecipients?JSON.stringify(pRecipients):null, + "PresetRecipientsContext_param": pContext, + "PresetRecipientsFilter_param": pFilter?JSON.stringify(pFilter):null }; neon.openContext("BulkMail", "BulkMailEdit_view", null, neon.OPERATINGSTATE_NEW, params); } @@ -537,6 +552,56 @@ BulkMailUtils.filterNewRecipients = function (pBulkMailId, pContactIds) .arrayColumn(); } +/** + * Filters the given contactIds if they can be added as new recipients. + * Checks if a contact is already a recipient or if there is a advertising ban. + * + * @param {String} pBulkMailId id of the bulk mail the contacts should be added to + * @param {String} pCondition Condition part of sys.filter + * @param {String} pContext Context that belongs to the filtercondition + * @return {String[]} contacts that can be added as recipients + */ +BulkMailUtils.filterNewRecipientsByCondition = function (pBulkMailId, pCondition, pContext) +{ + var condition = newSelect("CONTACTID") + .from("CONTACT") + .whereIfSet(pCondition) + // only add contacts that aren't already recipients + .and(null, newSelect("BULKMAILRECIPIENTID") + .from("BULKMAILRECIPIENT") + .where("BULKMAILRECIPIENT.CONTACT_ID = CONTACT.CONTACTID") + .and("BULKMAILRECIPIENT.BULKMAIL_ID", pBulkMailId) + , SqlBuilder.NOT_EXISTS()) + // check if there's a commrestriction + .and(new CommunicationSettingsCondition() + .emails(CommUtil.getStandardSubSqlMail()) + .rejected() + .existNoSettings() + .buildCondition()); + if (pContext == "Person") + { + condition.and("CONTACT.PERSON_ID is not null"); + } + + if (pContext == "Organistaion") + { + condition.and("CONTACT.PERSON_ID is null"); + } + + if (pContext == "CampaignParticipant") + { + condition.join("CAMPAIGNPARTICIPANT","CAMPAIGNPARTICIPANT.CONTACT_ID = CONTACT.CONTACTID"); + } + + if (pContext == "CampaignStep") + { + condition.join("CAMPAIGNPARTICIPANT","CAMPAIGNPARTICIPANT.CONTACT_ID = CONTACT.CONTACTID") + .join("CAMPAIGNSTEP","CAMPAIGNSTEP.CAMPAIGNSTEPID = CAMPAIGNPARTICIPANT.CAMPAIGNSTEP_ID"); + } + + return condition.arrayColumn(); +} + /** * Opens the given bulk mail. * diff --git a/process/FilterViewAction_lib/process.js b/process/FilterViewAction_lib/process.js index e285e75cef8ba69a37c4d0b4befc9f2552c53bcb..ede6618261ac763fd7f7cc05f4a7f3414c5e04fc 100644 --- a/process/FilterViewAction_lib/process.js +++ b/process/FilterViewAction_lib/process.js @@ -17,13 +17,17 @@ function FilterViewActionUtils() {} * * @param {String} pContext the context * @param {String|Object} pFilter the filter to apply (content of "$sys.filter") + * @param {String|Object} pParameters the Parameters the entity should be loaded with as "Object" (key-value-pairs); null for no parameter variables * @return {String[]} all uids that could be found */ -FilterViewActionUtils.getUidsByEntityFilter = function (pContext, pFilter) +FilterViewActionUtils.getUidsByEntityFilter = function (pContext, pFilter, pParameters) { if (Utils.isString(pFilter)) pFilter = JSON.parse(pFilter); + if (Utils.isString(pParameters)) + pParameters = JSON.parse(pParameters); + //uids from Person and Organisation are loaded with simple sql queries because that's much faster than over the entity' if (pContext == "Person" && "condition" in pFilter) { @@ -54,7 +58,10 @@ FilterViewActionUtils.getUidsByEntityFilter = function (pContext, pFilter) .fields(["#UID"]) if (pFilter.filter) loadRowsConfig.filter(JSON.stringify(pFilter.filter)); - + + if(pParameters) + Object.keys(pParameters).forEach(function(key){loadRowsConfig.addParameter(key, pParameters[key])}); + return entities.getRows(loadRowsConfig).map(function (row) { return row["#UID"]; @@ -68,12 +75,13 @@ FilterViewActionUtils.getUidsByEntityFilter = function (pContext, pFilter) * @param {String} pContext the context * @param {String[]} pSelection selected uids ("$sys.selection") * @param {String|Object} pFilter the filter ("$sys.filter") + * @param {String|Object} pParameters the Parameters the entity should be loaded with as "Object" (key-value-pairs); null for no parameter variables * @return {String[]} the uids that should be used */ -FilterViewActionUtils.getUidsBySelectionOrFilter = function (pContext, pSelection, pFilter) +FilterViewActionUtils.getUidsBySelectionOrFilter = function (pContext, pSelection, pFilter, pParameters) { if (Utils.isNullOrEmpty(pSelection) && pFilter) - return FilterViewActionUtils.getUidsByEntityFilter(pContext, pFilter); + return FilterViewActionUtils.getUidsByEntityFilter(pContext, pFilter,pParameters); return pSelection || []; }