diff --git a/entity/CampaignAddParticipants_entity/CampaignAddParticipants_entity.aod b/entity/CampaignAddParticipants_entity/CampaignAddParticipants_entity.aod index ea28eb64265345721c84653b28b76cc702c108aa..0f5041a7285705756f5069ff30517728f13195cf 100644 --- a/entity/CampaignAddParticipants_entity/CampaignAddParticipants_entity.aod +++ b/entity/CampaignAddParticipants_entity/CampaignAddParticipants_entity.aod @@ -127,6 +127,10 @@ <name>dataSourceTableName_param</name> <expose v="true" /> </entityParameter> + <entityField> + <name>isOperationValid</name> + <valueProcess>%aditoprj%/entity/CampaignAddParticipants_entity/entityfields/isoperationvalid/valueProcess.js</valueProcess> + </entityField> </entityFields> <recordContainers> <jDitoRecordContainer> diff --git a/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantmessage/valueProcess.js b/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantmessage/valueProcess.js index b4015c595144d461b0e4661bccb1e5d79721a06f..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 --- a/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantmessage/valueProcess.js +++ b/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantmessage/valueProcess.js @@ -1,88 +0,0 @@ -import("Campaign_lib"); -import("system.logging"); -import("system.result"); -import("system.translate"); -import("system.vars"); - -//logging.log("campaignParticipantsRowIds_param -> " + vars.get("$param.campaignParticipantsRowIds_param")); -//logging.log("campaignParticipantsRowIds_param -> " + JSON.parse(vars.getString("$param.campaignParticipantsRowIds_param")).length); -//logging.log("campaignParticipantsRowIds_param -> " + vars.getString("$param.campaignParticipantsRowIds_param")); -//logging.log("campaignParticipantsCondition_param -> " + vars.getString("$param.campaignParticipantsCondition_param")); - -var campaignParticipantsAmount = 0; -var informationText = translate.text("participants will be added to the selected campaign step"); - -var targetTable = vars.get("$param.dataSourceTableName_param"); -var selectionRowIds = JSON.parse(vars.getString("$param.campaignParticipantsRowIds_param")); -var selectedCampaignId = vars.get("$field.CAMPAIGN_ID"); -var selectedCampaignStepId = vars.get("$field.CAMPAIGNSTEP_ID"); - - -var participantCondition = ""; -var resultString = ""; -//logging.log("selectedCampaignId -> " + selectedCampaignId); - -if(selectedCampaignId == '') - result.string(resultString); -else -{ - /* - * First determines how many of the selected are already in the campaign - * If there are no valid participants at all or too many in respect of the - * selected steps max number of participants, nothing will be added. - * A message describing this situation will be written. - * - * If none of those criteria match, all participants are good to be added. - */ - var countParticipantsAlreadyInCampaign = 0; - var countParticipantsToAdd = 0; - var countValidParticipantsToAdd = 0; - //if theres a selection, we have to use it, otherwise use the condition - if(selectionRowIds != null && selectionRowIds.length > 0) - { - countParticipantsToAdd = selectionRowIds.length; - logging.log("selectedCampaignId -> " + selectedCampaignId); - countParticipantsAlreadyInCampaign = CampaignUtils.GetParticipantsAlreadyInStepCountByRowId(selectedCampaignId, selectionRowIds); - } - else - { - logging.log("campaignParticipantsCondition_param -> " + vars.getString("$param.campaignParticipantsCondition_param")); - participantCondition = JSON.parse(vars.getString("$param.campaignParticipantsCondition_param")).condition; - countParticipantsToAdd = CampaignUtils.GetContactCountByCondition(participantCondition); - countParticipantsAlreadyInCampaign = CampaignUtils.GetParticipantsAlreadyInStepCountByCondition(selectedCampaignId, targetTable, participantCondition); - } - countValidParticipantsToAdd = countParticipantsToAdd - countParticipantsAlreadyInCampaign; - - logging.log("countParticipantsToAdd -> " + countParticipantsToAdd); - logging.log("countParticipantsAlreadyInCampaign -> " + countParticipantsAlreadyInCampaign); - logging.log("countValidParticipantsToAdd -> " + countValidParticipantsToAdd); - - if(countValidParticipantsToAdd <= 0) - { - resultString = "Alle selektierten Teilnehmer befinden sich bereits in der Stufe"; - } - else if(hasStepEnoughSlots(countValidParticipantsToAdd)) - { - resultString = countValidParticipantsToAdd + "/" + countParticipantsToAdd + " " + informationText; - - } - else - { - resultString = "Nicht genug Teilnehmerplätze für " - + countValidParticipantsToAdd + "/" + countParticipantsToAdd - + " Teilnehmern vorhanden"; - } - - result.string(resultString); -} - -function hasStepEnoughSlots(pCountToAdd) -{ -// logging.log(" selectedCampaignStepId-> " + selectedCampaignStepId); - let currentParticipants = CampaignUtils.getParticipantCountForStep(selectedCampaignStepId) - let maxParticipants = CampaignUtils.getMaxParticipantCountForStep(selectedCampaignStepId) -// logging.log(" currentParticipants + pCountToAdd-> " + (parseInt(currentParticipants) + parseInt(pCountToAdd))); -// logging.log(" maxParticipants-> " + maxParticipants); -// logging.log(" (currentParticipants + pCountToAdd) <= maxParticipants-> " + ((currentParticipants + pCountToAdd) <= maxParticipants)); - return (parseInt(currentParticipants) + parseInt(pCountToAdd)) <= maxParticipants; -} \ No newline at end of file diff --git a/entity/CampaignAddParticipants_entity/entityfields/isoperationvalid/valueProcess.js b/entity/CampaignAddParticipants_entity/entityfields/isoperationvalid/valueProcess.js new file mode 100644 index 0000000000000000000000000000000000000000..fb39eed20e0040a1f60fb9c63c93fa050d32fc18 --- /dev/null +++ b/entity/CampaignAddParticipants_entity/entityfields/isoperationvalid/valueProcess.js @@ -0,0 +1,116 @@ +import("Campaign_lib"); +import("system.logging"); +import("system.result"); +import("system.translate"); +import("system.vars"); +import("system.neon"); + +//logging.log("campaignParticipantsRowIds_param -> " + vars.get("$param.campaignParticipantsRowIds_param")); +//logging.log("campaignParticipantsRowIds_param -> " + JSON.parse(vars.getString("$param.campaignParticipantsRowIds_param")).length); +//logging.log("campaignParticipantsRowIds_param -> " + vars.getString("$param.campaignParticipantsRowIds_param")); +//logging.log("campaignParticipantsCondition_param -> " + vars.getString("$param.campaignParticipantsCondition_param")); + +var campaignParticipantsAmount = 0; +var informationText = translate.text("participants will be added to the selected campaign step"); + +var targetTable = vars.get("$param.dataSourceTableName_param"); +var selectionRowIds = JSON.parse(vars.getString("$param.campaignParticipantsRowIds_param")); +var selectedCampaignId = vars.get("$field.CAMPAIGN_ID"); +var selectedCampaignStepId = vars.get("$field.CAMPAIGNSTEP_ID"); +var isUpdate = vars.get("$field.isUpdate"); + +var participantCondition = ""; +var messageString = ""; +var resultValue = "false"; +//logging.log("selectedCampaignId -> " + selectedCampaignId); + +if(selectedCampaignId != '') +{ + /* + * First determines how many of the selected are already in the campaign + * If there are no valid participants at all or too many in respect of the + * selected steps max number of participants, nothing will be added. + * A message describing this situation will be written. + * + * If none of those criteria match, all participants are good to be added. + */ + var countParticipantsAlreadyInCampaign = 0; + var countParticipantsToAdd = 0; + var countValidParticipantsToAdd = 0; + var whereCondition = ""; + var rowIdsComparisonField = ""; + + //if theres a selection, we have to use it, otherwise use the condition + if(selectionRowIds != null && selectionRowIds.length > 0) + { + countParticipantsToAdd = selectionRowIds.length; + + + /* + * The field against which will be checked, if the selection is already contained in the campaignStep + * depends on wether isUpdate is true or not. + * If true, the selected IDs are CampaignParticipantIds, otherwise contactIds. + * This happens because on true the action is called in the participants filterview to move participants + * between steps, on false new participants are in the process of being added to a step. + */ + if(isUpdate == "true") + { + rowIdsComparisonField = "CAMPAIGNPARTICIPANT.CAMPAIGNPARTICIPANTID"; + whereCondition = "CAMPAIGNPARTICIPANT.CAMPAIGNSTEP_ID = '" + selectedCampaignStepId + "'"; + } + else + { + rowIdsComparisonField = "CAMPAIGNPARTICIPANT.CONTACT_ID"; + whereCondition = "CAMPAIGNPARTICIPANT.CAMPAIGN_ID = '" + selectedCampaignId + "'"; + } + countParticipantsAlreadyInCampaign = CampaignUtils.GetParticipantsAlreadyAddedCountByRowId(whereCondition, rowIdsComparisonField, selectionRowIds); + } + else + { + participantCondition = JSON.parse(vars.getString("$param.campaignParticipantsCondition_param")).condition; + + countParticipantsToAdd = CampaignUtils.GetContactCountByCondition(participantCondition); + + if(isUpdate == "true") + whereCondition = "CAMPAIGNPARTICIPANT.CAMPAIGNSTEP_ID = '" + selectedCampaignStepId + "'"; + else + whereCondition = "CAMPAIGNPARTICIPANT.CAMPAIGN_ID = '" + selectedCampaignId + "'"; + + countParticipantsAlreadyInCampaign = CampaignUtils.GetParticipantsAlreadyAddedCountByCondition(whereCondition, participantCondition); + //CAMPAIGNPARTICIPANT.CAMPAIGN_ID = '" + pCampaignId + "'" + } + countValidParticipantsToAdd = countParticipantsToAdd - countParticipantsAlreadyInCampaign; + + logging.log("countParticipantsToAdd -> " + countParticipantsToAdd); + logging.log("countParticipantsAlreadyInCampaign -> " + countParticipantsAlreadyInCampaign); + logging.log("countValidParticipantsToAdd -> " + countValidParticipantsToAdd); + + if(countValidParticipantsToAdd <= 0) + { + messageString = "Alle selektierten Teilnehmer befinden sich bereits in der Stufe"; + } + else if(hasStepEnoughSlots(countValidParticipantsToAdd)) + { + messageString = countValidParticipantsToAdd + "/" + countParticipantsToAdd + " " + informationText; + resultValue = "true"; + } + else + { + messageString = "Nicht genug Teilnehmerplätze für " + + countValidParticipantsToAdd + "/" + countParticipantsToAdd + + " Teilnehmern vorhanden"; + } + neon.setFieldValue("$field.campaignParticipantMessage", messageString); + result.string(resultValue); +} + +function hasStepEnoughSlots(pCountToAdd) +{ +// logging.log(" selectedCampaignStepId-> " + selectedCampaignStepId); + let currentParticipants = CampaignUtils.getParticipantCountForStep(selectedCampaignStepId) + let maxParticipants = CampaignUtils.getMaxParticipantCountForStep(selectedCampaignStepId) +// logging.log(" currentParticipants + pCountToAdd-> " + (parseInt(currentParticipants) + parseInt(pCountToAdd))); +// logging.log(" maxParticipants-> " + maxParticipants); +// logging.log(" (currentParticipants + pCountToAdd) <= maxParticipants-> " + ((currentParticipants + pCountToAdd) <= maxParticipants)); + return (parseInt(currentParticipants) + parseInt(pCountToAdd)) <= maxParticipants; +} \ No newline at end of file diff --git a/entity/CampaignAddParticipants_entity/recordcontainers/jdito/onInsert.js b/entity/CampaignAddParticipants_entity/recordcontainers/jdito/onInsert.js index 6eeacc6b47775eef8154ec127cb50a0c3c62bd85..e571d933bc02e7e44cdf574021006b6e0067c845 100644 --- a/entity/CampaignAddParticipants_entity/recordcontainers/jdito/onInsert.js +++ b/entity/CampaignAddParticipants_entity/recordcontainers/jdito/onInsert.js @@ -19,8 +19,10 @@ var colNamesCampaignParticipantLog = CampaignUtils.getParticipantLogInsertColumn if(participantRowIds != null && participantRowIds.length > 0) { let contactIdsToHandle = participantRowIds; + if(isUpdate == "false") contactIdsToHandle = CampaignUtils.GetContactIdsNotInCampaignByRowIds(campaignId, participantRowIds); + logging.log("contactIdsToHandle by rowIds -> " + contactIdsToHandle); _handleRowIds(contactIdsToHandle); } @@ -30,6 +32,8 @@ else _handleCondition(campaignId, conditionSourceTableName, participantCondition); } + + function _handleCondition(pCampaignId, pTargetTableName, pCondition) { let contactIdsToHandle = []; @@ -39,7 +43,7 @@ function _handleCondition(pCampaignId, pTargetTableName, pCondition) * Because they already are participants, no restrictions apply to the affected IDs. * * Otherwise the participants ought to be inserted. The only restriction right now is, hat the participants to be inserted - * musn't already be in this specific campaign. Therefore all IDs hat are defined by the condition and not in the campaign are selected. + * can't already be in this specific campaign. Therefore all IDs hat are defined by the condition and not in the campaign are selected. */ if(isUpdate == "true") { @@ -78,13 +82,14 @@ function _handleRowIds(pParticipantRowIds) for (participant in pParticipantRowIds) { let campaignParticipantLogId = util.getNewUUID(); + if(isUpdate == "true") { let updatedValues = [newCampaignStepId, vars.get("$sys.user"), vars.get("$sys.date")]; - let condition = "CAMPAIGNPARTICIPANTID = '" + pParticipantRowIds[participant] + "'"; + let condition = "CONTACT_ID = '" + pParticipantRowIds[participant] + "' OR CAMPAIGNPARTICIPANTID = '" + pParticipantRowIds[participant] + "'"; let valsCampaignParticipantLog = new Array(pParticipantRowIds[participant], campaignId, newCampaignStepId, campaignParticipantLogId, vars.get("$sys.user"), vars.get("$sys.date")); statementArray.push(["CAMPAIGNPARTICIPANT", cols, null, updatedValues, condition]); @@ -107,9 +112,12 @@ function _handleRowIds(pParticipantRowIds) statementArray.push(["CAMPAIGNPARTICIPANT", cols, null, valsCampaignParticipant]); } } - + logging.log("statementArray -> " + statementArray); if(isUpdate == "true") - db.updates(statementArray) + { + logging.log("vor db.updates??? -> "); + db.updates(statementArray) + } else db.inserts(statementArray); diff --git a/entity/CampaignParticipant_entity/entityfields/filterviewactiongroup/children/setsteptoparticipantselection/onActionProcess.js b/entity/CampaignParticipant_entity/entityfields/filterviewactiongroup/children/setsteptoparticipantselection/onActionProcess.js index 1b2aa9e9bbce53eed7c943f579572496c3d0e454..15d7c2f29e6537b70f675adac3d0149e5b938596 100644 --- a/entity/CampaignParticipant_entity/entityfields/filterviewactiongroup/children/setsteptoparticipantselection/onActionProcess.js +++ b/entity/CampaignParticipant_entity/entityfields/filterviewactiongroup/children/setsteptoparticipantselection/onActionProcess.js @@ -1,11 +1,21 @@ +import("system.logging"); import("system.vars"); import("system.neon"); import("Campaign_lib"); -var sysSelection = vars.getString("$sys.selection"); +var sysSelection = vars.get("$sys.selection"); +var campaignId = vars.get("$field.CAMPAIGN_ID"); +var campaignStepId = vars.get("$field.CAMPAIGNSTEP_ID") if(sysSelection.length > 0) //selektierte IDs als Array { - CampaignUtils.openSetCampaignStepView(vars.getString("$sys.selection"), vars.get("$field.CAMPAIGN_ID"), vars.get("$field.CAMPAIGNSTEP_ID")); + CampaignUtils.openSetCampaignStepViewByRowIds(vars.getString("$sys.selection"), campaignId, campaignStepId); +} +else +{ + let sysFilter = vars.get("$sys.filter");//todo change name + logging.log("sysFilter -> " + sysFilter); + + CampaignUtils.openSetCampaignStepViewByCondition(JSON.stringify(sysFilter), campaignId, campaignStepId); } \ No newline at end of file diff --git a/process/Campaign_lib/process.js b/process/Campaign_lib/process.js index 5fe24b9887212895ce04451e867a0e619cdce93b..9fc534013e2ee915ed7cef03af48d1bc0b837f99 100644 --- a/process/Campaign_lib/process.js +++ b/process/Campaign_lib/process.js @@ -158,7 +158,7 @@ CampaignUtils.getParticipantLogInsertColumnNames = function() /** * todo */ -CampaignUtils.openSetCampaignStepView = function(pParticipantIds, pCampaignId, pCampaignStepId) +CampaignUtils.openSetCampaignStepViewByRowIds = function(pParticipantIds, pCampaignId, pCampaignStepId) { var params = {}; params["campaignParticipantsRowIds_param"] = pParticipantIds; @@ -166,8 +166,20 @@ CampaignUtils.openSetCampaignStepView = function(pParticipantIds, pCampaignId, p params["currentCampaignStepId_param"] = pCampaignStepId; params["isUpdate_param"] = true; - + neon.openContext("CampaignAddParticipants", "CampaignAddParticipantsEdit_view", null, neon.OPERATINGSTATE_NEW, params); +} +/** + * todo + */ +CampaignUtils.openSetCampaignStepViewByCondition = function(pCondition, pCampaignId, pCampaignStepId) +{ + var params = {}; + params["campaignParticipantsCondition_param"] = pCondition; + params["currentCampaignId_param"] = pCampaignId; + params["currentCampaignStepId_param"] = pCampaignStepId; + params["isUpdate_param"] = true; + neon.openContext("CampaignAddParticipants", "CampaignAddParticipantsEdit_view", null, neon.OPERATINGSTATE_NEW, params); } @@ -310,60 +322,30 @@ CampaignUtils.checkforCommRestrictions = function() .buildSql("select MEDIUM from CAMPAIGNSTEP join COMMRESTRICTION on MEDIUM = STEPMEDIUM", "1=2")); } -//CampaignUtils.GetContactIdsNotInStepByRowIds = function(pCampaignId, pParticipantRowIds) -//{ -// //SELECT CAMPAIGNPARTICIPANTID FROM CAMPAIGNPARTICIPANT -// //WHERE CAMPAIGNPARTICIPANT.CONTACT_ID -// //IN ('4cc98357-25f3-462b-898c-440f9faf4b97','d5a2dc64-e503-4aed-a0c6-d54f49b8db87','45635aca-7971-43df-a683-c80c86cb58cc','1a67eaa7-21da-4a18-97ab-755ac5cb74f7') -// -// let rowIdsAsRay = _CampaignUtils._convertToSqlValuesList(pParticipantRowIds); -// -// let query = "SELECT CAMPAIGNPARTICIPANTID FROM CAMPAIGNPARTICIPANT" -// + " where CAMPAIGNPARTICIPANT.CAMPAIGN_ID = '" + pCampaignId + "' AND" -// + " CAMPAIGNPARTICIPANT.CONTACT_ID NOT IN " + rowIdsAsRay; -// -// return db.array(db.COLUMN, query) -//} - -CampaignUtils.GetParticipantsAlreadyInStepCountByRowId = function(pCampaignId, pParticipantRowIds) +CampaignUtils.GetParticipantsAlreadyAddedCountByRowId = function(pWhereCondition, pRowIdsComparisonField, pParticipantRowIds) { let rowIdsAsRay = _CampaignUtils._convertToSqlValuesList(pParticipantRowIds); let query = "SELECT COUNT(*) FROM CAMPAIGNPARTICIPANT" - + " where CAMPAIGNPARTICIPANT.CAMPAIGN_ID = '" + pCampaignId + "' AND" - + " CAMPAIGNPARTICIPANT.CONTACT_ID IN " + rowIdsAsRay; + + " where " + pWhereCondition + " AND" + + " " + pRowIdsComparisonField + " IN " + rowIdsAsRay; logging.log("GetParticipantsAlreadyInStepCountByRowId query -> " + query); return db.cell(query) } -CampaignUtils.GetParticipantsAlreadyInStepCountByCondition = function(pCampaignId, pTargetTableName, pCondition) +CampaignUtils.GetParticipantsAlreadyAddedCountByCondition = function(pWhereCondition, pCondition) { - let targetIdField = "CONTACT.CONTACTID"; - - var joinCondition = ""; - if(pTargetTableName == "PERSON") - { - joinCondition = "PERSONID = PERSON_ID"; - } - else - { - joinCondition = "ORGANISATIONID = ORGANISATION_ID"; - } - - //select PERSON.* - //from CONTACT - //join PERSON on PERSONID = PERSON_ID - //where CONTACT.CONTACTID in ('d5a2dc64-e503-4aed-a0c6-d54f49b8db87','45635aca-7971-43df-a683-c80c86cb58cc','1a67eaa7-21da-4a18-97ab-755ac5cb74f7') - - let query = "select count(*) from CAMPAIGNPARTICIPANT" - + " where CAMPAIGNPARTICIPANT.CAMPAIGN_ID = '" + pCampaignId + "' AND" - + " CAMPAIGNPARTICIPANT.CONTACT_ID in" - + " (" + _CampaignUtils._selectFromContactWithJoin(targetIdField, pTargetTableName, joinCondition, pCondition) - + ")"; + 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)" + + " left join CAMPAIGNPARTICIPANT on CAMPAIGNPARTICIPANT.CONTACT_ID = CONTACT.CONTACTID" + + " where " + pWhereCondition + + " and " + pCondition; - logging.log("query -> " + query); + logging.log("GetParticipantsAlreadyAddedCountByCondition query -> " + query); return db.cell(query) } @@ -397,13 +379,13 @@ CampaignUtils.GetContactIdsNotInCampaignByCondition = function(pCampaignId, pCon CampaignUtils.GetContactIdsInCampaignByCondition = function(pCampaignId, pCondition) { - let query = "select CONTACT.CONTACTID, person.FIRSTNAME from PERSON" + let query = "select CONTACT.CONTACTID 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)" + " left join CAMPAIGNPARTICIPANT on CAMPAIGNPARTICIPANT.CONTACT_ID = CONTACT.CONTACTID" + " where " + pCondition - + " and CAMPAIGNPARTICIPANT.CAMPAIGN_ID = '" + pCampaignId + "')"; + + " and CAMPAIGNPARTICIPANT.CAMPAIGN_ID = '" + pCampaignId + "'"; return db.array(db.COLUMN, query); } @@ -413,7 +395,8 @@ CampaignUtils.GetContactCountByCondition = function(pCondition) 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)"; + + " left join ADDRESS on (ADDRESS.ADDRESSID = CONTACT.ADDRESS_ID)" + + " left join CAMPAIGNPARTICIPANT on CAMPAIGNPARTICIPANT.CONTACT_ID = CONTACT.CONTACTID"; if(pCondition != "") query += " where " + pCondition;