diff --git a/entity/CampaignAddParticipants_entity/entityfields/isoperationvalid/valueProcess.js b/entity/CampaignAddParticipants_entity/entityfields/isoperationvalid/valueProcess.js index 471416a0f8668d62254f1bcdb2f73c652b8925af..982aa7d22404ee21ac7c5f7d26da735265a8716e 100644 --- a/entity/CampaignAddParticipants_entity/entityfields/isoperationvalid/valueProcess.js +++ b/entity/CampaignAddParticipants_entity/entityfields/isoperationvalid/valueProcess.js @@ -69,7 +69,12 @@ if(selectedCampaignId != '') { participantCondition = JSON.parse(vars.getString("$param.campaignParticipantsCondition_param")).condition; logging.log("im isOperationValid -> "); - countParticipantsToAdd = CampaignUtils.GetContactCountByCondition(participantCondition, isUpdate); + + let useRightJoinToGetOrgs = "false"; + if(targetTable == "ORGANISATION") + useRightJoinToGetOrgs = "true"; + + countParticipantsToAdd = CampaignUtils.GetContactCountByCondition(participantCondition, isUpdate, useRightJoinToGetOrgs); logging.log("countParticipantsToAdd -> " + countParticipantsToAdd); /* @@ -84,7 +89,7 @@ if(selectedCampaignId != '') else whereCondition = "CAMPAIGNPARTICIPANT.CAMPAIGN_ID = '" + selectedCampaignId + "'"; - countParticipantsAlreadyInCampaign = CampaignUtils.GetParticipantsAlreadyAddedCountByCondition(whereCondition, participantCondition); + countParticipantsAlreadyInCampaign = CampaignUtils.GetParticipantsAlreadyAddedCountByCondition(whereCondition, participantCondition, useRightJoinToGetOrgs); //CAMPAIGNPARTICIPANT.CAMPAIGN_ID = '" + pCampaignId + "'" } countValidParticipantsToAdd = countParticipantsToAdd - countParticipantsAlreadyInCampaign; diff --git a/entity/CampaignAddParticipants_entity/recordcontainers/jdito/onInsert.js b/entity/CampaignAddParticipants_entity/recordcontainers/jdito/onInsert.js index e571d933bc02e7e44cdf574021006b6e0067c845..6ae8f16c2a96b3053d9296eeb0156911ac00090e 100644 --- a/entity/CampaignAddParticipants_entity/recordcontainers/jdito/onInsert.js +++ b/entity/CampaignAddParticipants_entity/recordcontainers/jdito/onInsert.js @@ -38,6 +38,10 @@ function _handleCondition(pCampaignId, pTargetTableName, pCondition) { let contactIdsToHandle = []; + let useRightJoinToGetOrgs = "false"; + if(pTargetTableName == "ORGANISATION") + useRightJoinToGetOrgs = "true"; + /* * If it's an update of participants, get the participants defined by the condition in the selected campaign * Because they already are participants, no restrictions apply to the affected IDs. @@ -47,10 +51,10 @@ function _handleCondition(pCampaignId, pTargetTableName, pCondition) */ if(isUpdate == "true") { - contactIdsToHandle = CampaignUtils.GetContactIdsInCampaignByCondition(pCampaignId, pCondition) + contactIdsToHandle = CampaignUtils.GetContactIdsInCampaignByCondition(pCampaignId, pCondition, useRightJoinToGetOrgs) } else - contactIdsToHandle = CampaignUtils.GetContactIdsNotInCampaignByCondition(pCampaignId, pCondition); + contactIdsToHandle = CampaignUtils.GetContactIdsNotInCampaignByCondition(pCampaignId, pCondition, useRightJoinToGetOrgs); logging.log("contactIdsToHandle -> " + contactIdsToHandle); _handleRowIds(contactIdsToHandle); diff --git a/process/Campaign_lib/process.js b/process/Campaign_lib/process.js index e16e5b948a2e8d13f493eb624f29940f510e8580..d055712e833a7f57ba4fd0c248d4329be0309b3a 100644 --- a/process/Campaign_lib/process.js +++ b/process/Campaign_lib/process.js @@ -335,10 +335,14 @@ CampaignUtils.GetParticipantsAlreadyAddedCountByRowId = function(pWhereCondition return db.cell(query) } -CampaignUtils.GetParticipantsAlreadyAddedCountByCondition = function(pWhereCondition, pCondition) +CampaignUtils.GetParticipantsAlreadyAddedCountByCondition = function(pWhereCondition, pCondition, pRightJoinContacts) { let query = "select count(*) from PERSON" - + " join CONTACT on (CONTACT.PERSON_ID = PERSON.PERSONID)" + + if(pRightJoinContacts == "true") + query += " right" + + query += " join CONTACT on (CONTACT.PERSON_ID = PERSON.PERSONID)" + " join ORGANISATION on (ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID)" + " left join ADDRESS on (ADDRESS.ADDRESSID = CONTACT.ADDRESS_ID)" + " left join CAMPAIGNPARTICIPANT on CAMPAIGNPARTICIPANT.CONTACT_ID = CONTACT.CONTACTID" @@ -365,10 +369,14 @@ CampaignUtils.GetContactIdsNotInCampaignByRowIds = function(pCampaignId, pPartic return db.array(db.COLUMN, query) } -CampaignUtils.GetContactIdsNotInCampaignByCondition = function(pCampaignId, pCondition) +CampaignUtils.GetContactIdsNotInCampaignByCondition = function(pCampaignId, pCondition, pRightJoinContacts) { let query = "select CONTACT.CONTACTID from PERSON" - + " join CONTACT on (CONTACT.PERSON_ID = PERSON.PERSONID)" + + if(pRightJoinContacts == "true") + query += " right" + + query += " join CONTACT on (CONTACT.PERSON_ID = PERSON.PERSONID)" + " join ORGANISATION on (ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID)" + " left join ADDRESS on (ADDRESS.ADDRESSID = CONTACT.ADDRESS_ID)" + " where CONTACT.CONTACTID not in" @@ -377,29 +385,37 @@ CampaignUtils.GetContactIdsNotInCampaignByCondition = function(pCampaignId, pCon if(pCondition != "") query += " and " + pCondition; - + logging.log("GetContactIdsNotInCampaignByCondition -> " + query); return db.array(db.COLUMN, query); } -CampaignUtils.GetContactIdsInCampaignByCondition = function(pCampaignId, pCondition) +CampaignUtils.GetContactIdsInCampaignByCondition = function(pCampaignId, pCondition, pRightJoinContacts) { let query = "select CONTACT.CONTACTID from PERSON" - + " join CONTACT on (CONTACT.PERSON_ID = PERSON.PERSONID)" + + if(pRightJoinContacts == "true") + query += " right" + + query += " join CONTACT on (CONTACT.PERSON_ID = PERSON.PERSONID)" + " join ORGANISATION on (ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID)" + " left join ADDRESS on (ADDRESS.ADDRESSID = CONTACT.ADDRESS_ID)" + " left join CAMPAIGNPARTICIPANT on CAMPAIGNPARTICIPANT.CONTACT_ID = CONTACT.CONTACTID" + " where " + pCondition + " and CAMPAIGNPARTICIPANT.CAMPAIGN_ID = '" + pCampaignId + "'"; - + logging.log("GetContactIdsInCampaignByCondition -> " + GetContactIdsInCampaignByCondition); return db.array(db.COLUMN, query); } -CampaignUtils.GetContactCountByCondition = function(pCondition, pLookInCampaignOnly) +CampaignUtils.GetContactCountByCondition = function(pCondition, pLookInCampaignOnly, pRightJoinContacts) { let query = "select count(*) from PERSON" - + " join CONTACT on (CONTACT.PERSON_ID = PERSON.PERSONID)" - + " join ORGANISATION on (ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID)" - + " left join ADDRESS on (ADDRESS.ADDRESSID = CONTACT.ADDRESS_ID)" + + if(pRightJoinContacts == "true") + query += " right" + + query += " join CONTACT on (CONTACT.PERSON_ID = PERSON.PERSONID)" + query += " join ORGANISATION on (ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID)" + query += " left join ADDRESS on (ADDRESS.ADDRESSID = CONTACT.ADDRESS_ID)" if(pLookInCampaignOnly == "true") query += " left join CAMPAIGNPARTICIPANT on CAMPAIGNPARTICIPANT.CONTACT_ID = CONTACT.CONTACTID";