diff --git a/entity/CampaignAddParticipants_entity/entityfields/addparticipants/onActionProcess.js b/entity/CampaignAddParticipants_entity/entityfields/addparticipants/onActionProcess.js index 1b5987419561f447d26a0366fec02180e328d71d..6b8422bd3d9b28b53250d035700f735bf685f85b 100644 --- a/entity/CampaignAddParticipants_entity/entityfields/addparticipants/onActionProcess.js +++ b/entity/CampaignAddParticipants_entity/entityfields/addparticipants/onActionProcess.js @@ -1,19 +1,19 @@ import("system.neon"); -import("Sql_lib"); import("system.vars"); import("system.db"); import("system.util"); import("Campaign_lib"); +import("Sql_lib"); var cols = []; -var participantRowIds = JSON.parse(vars.getString("$param.campaignParticipantsRowIds_param")); var participantCondition = ""; +var participantRowIds = JSON.parse(vars.getString("$param.campaignParticipantsRowIds_param")); var conditionSourceTableName = vars.getString("$param.dataSourceTableName_param"); +var isUpdate = vars.get("$field.isUpdate"); var campaignId = vars.getString("$field.CAMPAIGN_ID"); var newCampaignStepId = vars.getString("$field.CAMPAIGNSTEP_ID"); -var isUpdate = vars.get("$field.isUpdate"); var colNamesCampaignParticipantLog = CampaignUtils.getParticipantLogInsertColumnNames(); @@ -40,7 +40,7 @@ function _handleCondition(pCampaignId, pTargetTableName, pCondition) let contactIdsToHandle = []; let useRightJoinToGetOrgs = "false"; - if(pTargetTableName == "Organisation") + if(pTargetTableName == "ORGANISATION") { useRightJoinToGetOrgs = "true"; pCondition += " and PERSON.PERSONID is NULL" @@ -66,63 +66,67 @@ function _handleCondition(pCampaignId, pTargetTableName, pCondition) function _handleRowIds(pParticipantRowIds, pCampaignId) { var oldStepIds = {}; + if(isUpdate == "true") { - cols = [ "CAMPAIGNSTEP_ID", - "USER_EDIT", - "DATE_EDIT" + cols = [ + "CAMPAIGNSTEP_ID", + "USER_EDIT", + "DATE_EDIT" ]; + let oldSteps = newSelect("CAMPAIGNPARTICIPANTID, CAMPAIGNSTEP_ID") - .from("CAMPAIGNPARTICIPANT") - .whereIfSet("CAMPAIGNPARTICIPANT.CONTACT_ID", pParticipantRowIds, SqlBuilder.IN()) - .and("CAMPAIGNPARTICIPANT.CAMPAIGN_ID", pCampaignId) - .table(true); + .from("CAMPAIGNPARTICIPANT") + .whereIfSet("CAMPAIGNPARTICIPANT.CONTACT_ID", pParticipantRowIds, SqlBuilder.IN()) + .and("CAMPAIGNPARTICIPANT.CAMPAIGN_ID", pCampaignId) + .table(true); - oldSteps.forEach(function (step) + oldSteps.forEach(function(step) { this[step[0]] = step[1]; }, oldStepIds); } else { - cols = [ "CAMPAIGNPARTICIPANTID" - ,"CONTACT_ID" - ,"CAMPAIGN_ID" - ,"CAMPAIGNSTEP_ID" - ,"USER_NEW" - ,"DATE_NEW" + cols = [ + "CAMPAIGNPARTICIPANTID", + "CONTACT_ID", + "CAMPAIGN_ID", + "CAMPAIGNSTEP_ID", + "USER_NEW", + "DATE_NEW" ]; } let statementArray = []; let logArray = []; - let participantRowIds = pParticipantRowIds; - if(participantRowIds[0].length == 1) //pParticipantRowIds isn't parsed yet when the data has been selected, so we parse it here - participantRowIds = JSON.parse(pParticipantRowIds); - - for (let participantRowId of participantRowIds) + for (let participant in pParticipantRowIds) { let campaignParticipantLogId = util.getNewUUID(); if(isUpdate == "true") { - let oldCampaignStepId = oldStepIds[participantRowId] || ""; - let updatedValues = [newCampaignStepId, - vars.get("$sys.user"), - vars.get("$sys.date")]; + let oldCampaignStepId = oldStepIds[pParticipantRowIds[participant]] || ""; + + let updatedValues = [ + newCampaignStepId, + vars.get("$sys.user"), + vars.get("$sys.date") + ]; - let condition = newWhere("CAMPAIGNPARTICIPANT.CONTACT_ID", participantRowId) - .or("CAMPAIGNPARTICIPANT.CAMPAIGNPARTICIPANTID", participantRowId); + let condition = newWhere("CAMPAIGNPARTICIPANT.CONTACT_ID", pParticipantRowIds[participant]) + .and("CAMPAIGNPARTICIPANT.CAMPAIGN_ID", pCampaignId) + .or("CAMPAIGNPARTICIPANT.CAMPAIGNPARTICIPANTID", pParticipantRowIds[participant]); let valsCampaignParticipantLog = [ - participantRowId, - campaignId, - newCampaignStepId, - campaignParticipantLogId, - vars.get("$sys.user"), - vars.get("$sys.date"), - oldCampaignStepId + campaignParticipantLogId, + campaignId, + newCampaignStepId, + pParticipantRowIds[participant], + vars.get("$sys.user"), + vars.get("$sys.date"), + oldCampaignStepId ]; statementArray.push(["CAMPAIGNPARTICIPANT", cols, null, updatedValues, condition.build()]); @@ -132,26 +136,38 @@ function _handleRowIds(pParticipantRowIds, pCampaignId) { let campaignParticipantId = util.getNewUUID(); - let valsCampaignParticipant = [ campaignParticipantId - , participantRowId - , campaignId - , newCampaignStepId - , vars.get("$sys.user") - , vars.get("$sys.date") + let valsCampaignParticipant = [ + campaignParticipantId, + pParticipantRowIds[participant], + campaignId, + newCampaignStepId, + vars.get("$sys.user"), + vars.get("$sys.date") ]; - let valsCampaignParticipantLog = new Array(campaignParticipantId, campaignId, newCampaignStepId, campaignParticipantLogId, vars.get("$sys.user"), vars.get("$sys.date")); + let valsCampaignParticipantLog = [ + campaignParticipantLogId, + campaignId, + newCampaignStepId, + campaignParticipantId, + vars.get("$sys.user"), + vars.get("$sys.date") + ]; statementArray.push(["CAMPAIGNPARTICIPANT", cols, null, valsCampaignParticipant]); + logArray.push(["CAMPAIGNPARTICIPANTLOG", colNamesCampaignParticipantLog, null, valsCampaignParticipantLog]); } } + if(isUpdate == "true") { db.updates(statementArray) } else db.inserts(statementArray); + if(logArray.length > 0) db.inserts(logArray); -} + neon.refreshAll(); +} \ No newline at end of file diff --git a/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantcontactids/valueProcess.js b/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantcontactids/valueProcess.js index e831ec632cbba7601e7085e0e59fdbf772e58725..5eac9077a7357f9f99488c0d19747a83fa3fede2 100644 --- a/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantcontactids/valueProcess.js +++ b/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantcontactids/valueProcess.js @@ -1,29 +1,43 @@ -import("Campaign_lib"); import("system.eMath"); -import("FilterviewMenuAction_lib"); import("system.result"); import("system.vars"); import("system.neon"); +import("FilterviewMenuAction_lib"); +import("Campaign_lib"); + if(vars.get("$field.CAMPAIGN_ID")) { + var contactIds, filteredContactIds; + var isUpdate = vars.getString("$param.isUpdate_param"); var comingfrom = vars.getString("$param.dataSourceTableName_param"); - var contactIds; - var filteredContactIds; - var selection = vars.getString("$param.campaignParticipantsRowIds_param"); + var selection = JSON.parse(vars.getString("$param.campaignParticipantsRowIds_param")); - if(vars.exists("$param.campaignParticipantsCondition_param") && vars.get("$param.campaignParticipantsCondition_param")) + if(vars.exists("$param.campaignParticipantsCondition_param") && vars.get("$param.campaignParticipantsCondition_param") && !isUpdate) { selection = JSON.parse(vars.getString("$param.campaignParticipantsCondition_param")).condition; + if(comingfrom == "Organisation") filteredContactIds = FilterviewMenuActionUtils.organisationIdsFilter(selection); else if(comingfrom == "Person") filteredContactIds = FilterviewMenuActionUtils.contactIdsFilter(selection) - contactIds = CampaignUtils.GetContactIdsNotInCampaignByRowIds(vars.get("$field.CAMPAIGN_ID"), filteredContactIds); + + contactIds = CampaignUtils.GetContactIdsNotInCampaignByCondition(vars.get("$field.CAMPAIGN_ID"), selection); + } + else if(isUpdate) + { + + if (vars.get("$param.campaignParticipantsCondition_param")) + { + contactIds = CampaignUtils.GetContactIdsInCampaignByCondition(vars.get("$field.CAMPAIGN_ID"), JSON.parse(vars.get("$param.campaignParticipantsCondition_param")).condition, false); + } else{ + contactIds = selection; + } } - else + else { contactIds = CampaignUtils.GetContactIdsNotInCampaignByRowIds(vars.get("$field.CAMPAIGN_ID"), JSON.parse(selection)); } + result.string(JSON.stringify(contactIds)); } \ No newline at end of file diff --git a/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantmessage/valueProcess.js b/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantmessage/valueProcess.js index b08b067a18d8abf3bfcb5b27d61390176a9141de..f9a576941ad8a5d8e00dbc4b985934e7e5a6a919 100644 --- a/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantmessage/valueProcess.js +++ b/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantmessage/valueProcess.js @@ -1,36 +1,48 @@ import("system.eMath"); -import("FilterviewMenuAction_lib"); import("system.translate"); import("system.result"); import("system.vars"); +import("Campaign_lib"); +import("FilterviewMenuAction_lib"); var res = ""; -var resNotAdded = "\n\ -"; +var resNotAdded = "\n"; + if(vars.get("$field.CAMPAIGN_ID") && vars.get("$field.campaignparticipantContactIds") && !vars.get("$sys.validationerrors")) { - var validCount = JSON.parse(vars.get("$field.campaignparticipantContactIds")).length; var selectedIds; + var isUpdate = vars.get("$param.isUpdate_param"); + var validCount = JSON.parse(vars.get("$field.campaignparticipantContactIds")).length; var comingfrom = vars.get("$param.dataSourceTableName_param"); - if (validCount && !vars.get("$sys.validationerrors") && vars.get("$field.CAMPAIGN_ID")) + if (validCount && !vars.get("$sys.validationerrors") && vars.get("$field.CAMPAIGN_ID") && !isUpdate) { if (validCount != 0) { res = translate.withArguments("%0 new participants will be added to the campaign.", [validCount]); + if(vars.exists("$param.campaignParticipantsRowIds_param") && vars.getString("$param.campaignParticipantsRowIds_param")) selectedIds = JSON.parse(vars.getString("$param.campaignParticipantsRowIds_param")).length; else { var selection = JSON.parse(vars.getString("$param.campaignParticipantsCondition_param")).condition; + if(comingfrom == "Organisation") selectedIds = FilterviewMenuActionUtils.organisationIdsFilter(selection).length; else if(comingfrom == "Person") selectedIds = FilterviewMenuActionUtils.contactIdsFilter(selection).length; } - var alreadyParticipant = eMath.subInt(selectedIds, validCount) + if (selectedIds != undefined) { + var alreadyParticipant = eMath.subInt(selectedIds, validCount) resNotAdded += translate.withArguments("%0 of the chosen records are already in the campaign", [alreadyParticipant]); + } } } + else if(isUpdate){ + validCount = JSON.parse(vars.get("$field.campaignparticipantContactIds")).length; + var maxParticipantCounting = CampaignUtils.getParticipantCount(vars.get("$field.CAMPAIGN_ID")); + res = translate.withArguments("%0/%1 participant(s) will be added to the selected campaign step", [validCount, maxParticipantCounting]); + } } + result.string(res + resNotAdded); \ No newline at end of file diff --git a/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod b/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod index d6224666455e9a5cd83cec9e3a0a03cb60ccc19c..3c8e5a5655f3c8320c4188939e9588988e7b9b44 100644 --- a/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod +++ b/entity/CampaignParticipant_entity/CampaignParticipant_entity.aod @@ -9,6 +9,7 @@ <element>CampaignParticipantChart_entity</element> </siblings> <afterOperatingState>%aditoprj%/entity/CampaignParticipant_entity/afterOperatingState.js</afterOperatingState> + <useFavorites v="true" /> <titlePlural>Participants</titlePlural> <recordContainer>ParticipantsDbRecordContainer</recordContainer> <entityFields> diff --git a/entity/CampaignParticipant_entity/entityfields/filterviewactiongroup/children/setsteptoparticipantselection/onActionProcess.js b/entity/CampaignParticipant_entity/entityfields/filterviewactiongroup/children/setsteptoparticipantselection/onActionProcess.js index 1537b3bbbc7edc2d2149dc80c799697e1d02e8ea..5f2f7a2cfa299eb520877db19056edad8bbef2f6 100644 --- a/entity/CampaignParticipant_entity/entityfields/filterviewactiongroup/children/setsteptoparticipantselection/onActionProcess.js +++ b/entity/CampaignParticipant_entity/entityfields/filterviewactiongroup/children/setsteptoparticipantselection/onActionProcess.js @@ -9,7 +9,7 @@ var campaignStepId = vars.get("$field.CAMPAIGNSTEP_ID") if(sysSelection.length > 0) //selektierte IDs als Array { - CampaignUtils.openSetCampaignStepViewByRowIds(vars.getString("$sys.selection"), campaignId, campaignStepId); + CampaignUtils.openSetCampaignStepViewByRowIds(JSON.stringify(vars.get("$sys.selection")), campaignId, campaignStepId); } else { diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod index 3ca1a4994f769baab13afe8bf6219d01fbee245c..0facedfc4b8899e92b476d55e95e5f85973441e0 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -8978,6 +8978,7 @@ Bitte Datumseingabe prüfen</value> </entry> <entry> <key>Add Participants</key> + <value>Teilnehmer hinzufügen</value> </entry> <entry> <key>and open Report</key> diff --git a/process/Campaign_lib/process.js b/process/Campaign_lib/process.js index 7a2b2ead829e1d007bec8d5d6e47382c0d228b5b..99d839acf1d6102614d26f662889471973cc58d3 100644 --- a/process/Campaign_lib/process.js +++ b/process/Campaign_lib/process.js @@ -203,13 +203,14 @@ CampaignUtils.getParticipantLogInsertColumnNames = function() */ CampaignUtils.openSetCampaignStepViewByRowIds = function(pParticipantIds, pCampaignId, pCampaignStepId) { - var params = {}; - params["campaignParticipantsRowIds_param"] = pParticipantIds; - params["currentCampaignId_param"] = pCampaignId; - params["currentCampaignStepId_param"] = pCampaignStepId; - params["isUpdate_param"] = true; + var params = { + "campaignParticipantsRowIds_param":pParticipantIds, + "currentCampaignId_param":pCampaignId, + "currentCampaignStepId_param":pCampaignStepId, + "isUpdate_param":true + }; - neon.openContext("CampaignAddParticipants", "CampaignAddParticipantsEdit_view", null, neon.OPERATINGSTATE_NEW, params); + neon.openContext("CampaignAddParticipants", "CampaignAddParticipantsEdit_view", null, neon.OPERATINGSTATE_VIEW, params); } /** @@ -231,7 +232,7 @@ CampaignUtils.openSetCampaignStepViewByCondition = function(pCondition, pCampaig params["currentCampaignStepId_param"] = pCampaignStepId; params["isUpdate_param"] = true; - neon.openContext("CampaignAddParticipants", "CampaignAddParticipantsEdit_view", null, neon.OPERATINGSTATE_NEW, params); + neon.openContext("CampaignAddParticipants", "CampaignAddParticipantsEdit_view", null, neon.OPERATINGSTATE_VIEW, params); } /** @@ -502,24 +503,14 @@ CampaignUtils.GetParticipantsAlreadyAddedCountByCondition = function(pWhereCondi */ CampaignUtils.GetContactIdsNotInCampaignByRowIds = function(pCampaignId, pParticipantRowIds) { - - var isNotOrg = newSelect("CONTACT.PERSON_ID").from("CONTACT").where("CONTACT.CONTACTID", pParticipantRowIds[0]).cell() - - var contactIds = newSelect("CAMPAIGNPARTICIPANT.CONTACT_ID") - .from("CAMPAIGNPARTICIPANT") - .where("CAMPAIGNPARTICIPANT.CAMPAIGN_ID", pCampaignId) - .arrayColumn(); - if(contactIds.length <= 0) - contactIds = [""]; - var contactidsNotInCampaign = newSelect("CONTACT.CONTACTID") - .from("CONTACT") - .where("CONTACT.CONTACTID", pParticipantRowIds, SqlBuilder.IN()) - .and("CONTACT.CONTACTID", contactIds, SqlBuilder.NOT_IN()) - - if(!isNotOrg) - contactidsNotInCampaign = contactidsNotInCampaign.and("CONTACT.PERSON_ID is null") - - return contactidsNotInCampaign.arrayColumn(); + return newSelect("CONTACT.CONTACTID") + .from("CONTACT") + .where("CONTACT.CONTACTID", pParticipantRowIds, SqlBuilder.IN()) + .and("CONTACT.CONTACTID", + newSelect("CAMPAIGNPARTICIPANT.CONTACT_ID") + .from("CAMPAIGNPARTICIPANT") + .where("CAMPAIGNPARTICIPANT.CAMPAIGN_ID", pCampaignId), SqlBuilder.NOT_IN()) + .arrayColumn(); } /** @@ -540,23 +531,26 @@ CampaignUtils.GetContactIdsNotInCampaignByRowIds = function(pCampaignId, pPartic CampaignUtils.GetContactIdsNotInCampaignByCondition = function(pCampaignId, pCondition, pRightJoinContacts) { let query = newSelect("CONTACT.CONTACTID").from("PERSON"); + var subselect = newSelect("CAMPAIGNPARTICIPANT.CONTACT_ID") + .from("CAMPAIGNPARTICIPANT") + .where("CAMPAIGNPARTICIPANT.CAMPAIGN_ID", pCampaignId); if (pRightJoinContacts == "true") query.rightJoin("CONTACT", "CONTACT.PERSON_ID = PERSON.PERSONID"); else query.join("CONTACT", "CONTACT.PERSON_ID = PERSON.PERSONID"); + if(pCondition != "") + subselect = newSelect("CAMPAIGNPARTICIPANT.CONTACT_ID") + .from("CAMPAIGNPARTICIPANT") + .where(pCondition); + query.join("ORGANISATION", "ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID") .leftJoin("ADDRESS", "ADDRESS.ADDRESSID = CONTACT.ADDRESS_ID") - .where("CONTACT.CONTACTID", - newSelect("CAMPAIGNPARTICIPANT.CONTACT_ID") - .from("CAMPAIGNPARTICIPANT") - .where("CAMPAIGNPARTICIPANT.CAMPAIGN_ID", pCampaignId) + .where("CONTACT.CONTACTID", + subselect , SqlBuilder.NOT_IN() ); - - if(pCondition != "") - query.and(pCondition); return query.arrayColumn(); }