diff --git a/entity/CampaignAddParticipants_entity/entityfields/addparticipants/onActionProcess.js b/entity/CampaignAddParticipants_entity/entityfields/addparticipants/onActionProcess.js index 6d4c28eb345a9522f1947b118937133c9206016e..b2c37dfa07d393af2fbd10b50ae3ea3dcac816b4 100644 --- a/entity/CampaignAddParticipants_entity/entityfields/addparticipants/onActionProcess.js +++ b/entity/CampaignAddParticipants_entity/entityfields/addparticipants/onActionProcess.js @@ -38,12 +38,12 @@ if (!vars.exists("$param.currentCampaignId_param") || !vars.get("$param.currentC function _handleCondition(pCampaignId, pTargetTableName, pCondition) { var contactIdsToHandle = []; + var contextComingFrom = "Person"; - var useRightJoinToGetOrgs = "false"; if(pTargetTableName == "ORGANISATION") { - useRightJoinToGetOrgs = "true"; - pCondition += " and PERSON.PERSONID is NULL" + pCondition += " and PERSON.PERSONID is NULL"; + contextComingFrom = "Organisation"; } /* @@ -55,10 +55,10 @@ function _handleCondition(pCampaignId, pTargetTableName, pCondition) */ if(isUpdate == "true") { - contactIdsToHandle = CampaignUtils.GetContactIdsInCampaignByCondition(pCampaignId, pCondition, useRightJoinToGetOrgs) + contactIdsToHandle = CampaignUtils.GetContactIdsInCampaignByCondition(pCampaignId, pCondition); } else - contactIdsToHandle = CampaignUtils.GetContactIdsNotInCampaignByCondition(pCampaignId, pCondition, useRightJoinToGetOrgs); + contactIdsToHandle = CampaignUtils.GetContactIdsNotInCampaignByCondition(pCampaignId, pCondition, contextComingFrom); _handleRowIds(contactIdsToHandle, pCampaignId); } @@ -169,6 +169,4 @@ function _handleRowIds(pParticipantRowIds, pCampaignId) if(logArray.length > 0) db.inserts(logArray); - - neon.refreshAll(); } \ No newline at end of file diff --git a/entity/CampaignAddParticipants_entity/entityfields/addparticipants/stateProcess.js b/entity/CampaignAddParticipants_entity/entityfields/addparticipants/stateProcess.js index be5aec2ba0d4f21dc0a169a53489021c880b3c8b..8271cfcda5c3966074453a2c2c22d86b086388ce 100644 --- a/entity/CampaignAddParticipants_entity/entityfields/addparticipants/stateProcess.js +++ b/entity/CampaignAddParticipants_entity/entityfields/addparticipants/stateProcess.js @@ -5,4 +5,11 @@ import("system.vars"); if (vars.get("$sys.validationerrors")) result.string(neon.COMPONENTSTATE_DISABLED); else - result.string(neon.COMPONENTSTATE_EDITABLE); \ No newline at end of file +{ + var contactCount = JSON.parse(vars.get("$field.campaignparticipantContactIds")).length; + if (contactCount == 0) + result.string(neon.COMPONENTSTATE_DISABLED); + else + result.string(neon.COMPONENTSTATE_EDITABLE); +} + \ No newline at end of file diff --git a/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantcontactids/valueProcess.js b/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantcontactids/valueProcess.js index cb25278a4aad53d629e718f18c7dd99c7f16183d..ff279849cebaa73eaaad7f251b821d9379d06ad5 100644 --- a/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantcontactids/valueProcess.js +++ b/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantcontactids/valueProcess.js @@ -22,14 +22,14 @@ if(vars.get("$field.CAMPAIGN_ID")) else if(comingfrom == "Person") filteredContactIds = FilterViewActionUtils.contactIdsFilter(selection) - contactIds = CampaignUtils.GetContactIdsNotInCampaignByCondition(vars.get("$field.CAMPAIGN_ID"), selection); + contactIds = CampaignUtils.GetContactIdsNotInCampaignByCondition(vars.get("$field.CAMPAIGN_ID"), selection, comingfrom); } else if(isUpdate) { - if (vars.get("$param.campaignParticipantsCondition_param")) { - contactIds = CampaignUtils.GetContactIdsNotInCampaignByCondition(vars.get("$field.CAMPAIGN_ID"), JSON.parse(vars.get("$param.campaignParticipantsCondition_param")).condition, false); + var contactFilterCondition = JSON.parse(vars.get("$param.campaignParticipantsCondition_param")).condition; + contactIds = CampaignUtils.GetContactIdsNotInCampaignByCondition(vars.get("$field.CAMPAIGN_ID"), contactFilterCondition, comingfrom); } else { diff --git a/process/Campaign_lib/process.js b/process/Campaign_lib/process.js index be0fe84ca47464bc0f07a8ccbfec7c1cb6f8b3f5..7c893948d7f1a576518e469721ae1dbec4a50ec2 100644 --- a/process/Campaign_lib/process.js +++ b/process/Campaign_lib/process.js @@ -521,30 +521,34 @@ CampaignUtils.GetContactIdsNotInCampaignByRowIds = function(pCampaignId, pPartic * The id of the campaign.<br> * @param {String} pCondition (optional) <p> * An condition which is used to limit the search contact results.<br> - * @param {Boolean} pRightJoinContacts <p> - * Case if its true, a prefix will used<br> - * to do a right join.<br> + * @param {String} [pOrigin=Organisation] <br/> + * id from which context we are coming from, e.g. "Person" * @return {String[]} <p> * The contact ids they arent in the campaign.<br> */ -CampaignUtils.GetContactIdsNotInCampaignByCondition = function(pCampaignId, pCondition, pRightJoinContacts) +CampaignUtils.GetContactIdsNotInCampaignByCondition = function(pCampaignId, pCondition, pOrigin) { - let query = newSelect("CONTACT.CONTACTID").from("PERSON"); + var origin = pOrigin || "Organisation"; + //subselect for excluding entries that are already in the campaign 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"); + .from("CAMPAIGNPARTICIPANT") + .where("CAMPAIGNPARTICIPANT.CAMPAIGN_ID", pCampaignId); + var query = newSelect("CONTACT.CONTACTID") + .from("CONTACT"); + + if (origin == "Person") + query.leftJoin("PERSON", "CONTACT.PERSON_ID = PERSON.PERSONID"); + query.join("ORGANISATION", "ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID") .leftJoin("ADDRESS", "ADDRESS.ADDRESSID = CONTACT.ADDRESS_ID") .where("CONTACT.CONTACTID", subselect , SqlBuilder.NOT_IN() ); + + if (origin == "Organisation") + query.and("CONTACT.PERSON_ID is null"); //pCondition is always a contact related condition string and not a campaignparticipant related condition if(pCondition != "") @@ -562,14 +566,11 @@ CampaignUtils.GetContactIdsNotInCampaignByCondition = function(pCampaignId, pCon * @param {String} pCondition <p> * The condition which shall be used, to<br> * limit the search result.<br> - * @param {Boolean} [pRightJoinContacts=false] <p> - * Currently not used.<br> - * <p> * @return {String[]} <p> * The contact ids which are in the given<br> * campaign.<br> */ -CampaignUtils.GetContactIdsInCampaignByCondition = function(pCampaignId, pCondition, pRightJoinContacts) +CampaignUtils.GetContactIdsInCampaignByCondition = function(pCampaignId, pCondition) { let query = newSelect("CONTACT.CONTACTID").from("CONTACT");