diff --git a/entity/CampaignAddParticipants_entity/entityfields/addparticipants/onActionProcess.js b/entity/CampaignAddParticipants_entity/entityfields/addparticipants/onActionProcess.js index 798e2b67f2069b417fa90421aefdc85d7639399a..b2c37dfa07d393af2fbd10b50ae3ea3dcac816b4 100644 --- a/entity/CampaignAddParticipants_entity/entityfields/addparticipants/onActionProcess.js +++ b/entity/CampaignAddParticipants_entity/entityfields/addparticipants/onActionProcess.js @@ -19,10 +19,10 @@ var colNamesCampaignParticipantLog = CampaignUtils.getParticipantLogInsertColumn if(participantRowIds != null && participantRowIds.length > 0) { - let contactIdsToHandle = participantRowIds; + var contactIdsToHandle = participantRowIds; if(isUpdate == "false") - contactIdsToHandle = vars.get("$field.campaignparticipantContactIds"); + contactIdsToHandle = JSON.parse(vars.get("$field.campaignparticipantContactIds")); _handleRowIds(contactIdsToHandle, campaignId); } @@ -37,13 +37,13 @@ if (!vars.exists("$param.currentCampaignId_param") || !vars.get("$param.currentC function _handleCondition(pCampaignId, pTargetTableName, pCondition) { - let contactIdsToHandle = []; + var contactIdsToHandle = []; + var contextComingFrom = "Person"; - let 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); } @@ -75,7 +75,7 @@ function _handleRowIds(pParticipantRowIds, pCampaignId) "DATE_EDIT" ]; - let oldSteps = newSelect("CAMPAIGNPARTICIPANTID, CAMPAIGNSTEP_ID") + var oldSteps = newSelect("CAMPAIGNPARTICIPANTID, CAMPAIGNSTEP_ID") .from("CAMPAIGNPARTICIPANT") .whereIfSet("CAMPAIGNPARTICIPANT.CONTACT_ID", pParticipantRowIds, SqlBuilder.IN()) .and("CAMPAIGNPARTICIPANT.CAMPAIGN_ID", pCampaignId) @@ -98,28 +98,28 @@ function _handleRowIds(pParticipantRowIds, pCampaignId) ]; } - let statementArray = []; - let logArray = []; + var statementArray = []; + var logArray = []; - for (let participant in pParticipantRowIds) + for (var participant in pParticipantRowIds) { - let campaignParticipantLogId = util.getNewUUID(); - + var campaignParticipantLogId = util.getNewUUID(); + var valsCampaignParticipantLog; if(isUpdate == "true") { - let oldCampaignStepId = oldStepIds[pParticipantRowIds[participant]] || ""; + var oldCampaignStepId = oldStepIds[pParticipantRowIds[participant]] || ""; - let updatedValues = [ + var updatedValues = [ newCampaignStepId, vars.get("$sys.user"), vars.get("$sys.date") ]; - let condition = newWhere("CAMPAIGNPARTICIPANT.CONTACT_ID", pParticipantRowIds[participant]) + var condition = newWhere("CAMPAIGNPARTICIPANT.CONTACT_ID", pParticipantRowIds[participant]) .and("CAMPAIGNPARTICIPANT.CAMPAIGN_ID", pCampaignId) .or("CAMPAIGNPARTICIPANT.CAMPAIGNPARTICIPANTID", pParticipantRowIds[participant]); - let valsCampaignParticipantLog = [ + valsCampaignParticipantLog = [ campaignParticipantLogId, campaignId, newCampaignStepId, @@ -134,9 +134,9 @@ function _handleRowIds(pParticipantRowIds, pCampaignId) } else { - let campaignParticipantId = util.getNewUUID(); + var campaignParticipantId = util.getNewUUID(); - let valsCampaignParticipant = [ + var valsCampaignParticipant = [ campaignParticipantId, pParticipantRowIds[participant], campaignId, @@ -145,7 +145,7 @@ function _handleRowIds(pParticipantRowIds, pCampaignId) vars.get("$sys.date") ]; - let valsCampaignParticipantLog = [ + valsCampaignParticipantLog = [ campaignParticipantLogId, campaignId, newCampaignStepId, @@ -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 a8170e082c09b950279474e1c8bec2c8900bfdf9..ff279849cebaa73eaaad7f251b821d9379d06ad5 100644 --- a/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantcontactids/valueProcess.js +++ b/entity/CampaignAddParticipants_entity/entityfields/campaignparticipantcontactids/valueProcess.js @@ -22,15 +22,17 @@ 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.GetContactIdsInCampaignByCondition(vars.get("$field.CAMPAIGN_ID"), JSON.parse(vars.get("$param.campaignParticipantsCondition_param")).condition, false); - } else{ + var contactFilterCondition = JSON.parse(vars.get("$param.campaignParticipantsCondition_param")).condition; + contactIds = CampaignUtils.GetContactIdsNotInCampaignByCondition(vars.get("$field.CAMPAIGN_ID"), contactFilterCondition, comingfrom); + } + else + { contactIds = selection; } } diff --git a/entity/Offer_entity/Offer_entity.aod b/entity/Offer_entity/Offer_entity.aod index 8de69496e5b41239379dcbf6a1ed8cc3b7408f45..0491466e0b6a47b54b5d0c67d48d8d4b7a891d31 100644 --- a/entity/Offer_entity/Offer_entity.aod +++ b/entity/Offer_entity/Offer_entity.aod @@ -1293,13 +1293,17 @@ </aggregateFieldDbMapping> <aggregateFieldDbMapping> <name>COUNT_aggregate.value</name> - <recordfield>OFFER.OFFER_ID</recordfield> + <recordfield>OFFER.OFFERID</recordfield> <aggregateType>COUNT</aggregateType> </aggregateFieldDbMapping> <aggregateFieldDbMapping> <name>PROBABILITY_aggregate.value</name> <expression>%aditoprj%/entity/Offer_entity/recordcontainers/db/recordfieldmappings/probability_aggregate.value/expression.js</expression> </aggregateFieldDbMapping> + <dbRecordFieldMapping> + <name>OFFER_ID.value</name> + <recordfield>OFFER.OFFER_ID</recordfield> + </dbRecordFieldMapping> </recordFieldMappings> <filterExtensions> <filterExtensionSet> diff --git a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod index 8b633511b0c4c9faba5f9e3b50735af40f527318..2853fb597879f3ed452efdb45a7998fc36e0f0cd 100644 --- a/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod +++ b/language/_____LANGUAGE_EXTRA/_____LANGUAGE_EXTRA.aod @@ -7272,6 +7272,18 @@ <entry> <key>Mailbridge failed: user '%0' is unknown, contact an administrator.</key> </entry> + <entry> + <key>Count Chart</key> + </entry> + <entry> + <key>Sum Chart</key> + </entry> + <entry> + <key>Probability Chart</key> + </entry> + <entry> + <key>Probability in %</key> + </entry> </keyValueMap> <font name="Dialog" style="0" size="11" /> <sqlModels> diff --git a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod index 61cbdca2017302dd4a0d634690f5f5ba38d10044..f2aba5d40f04df4be587f4dc4b73a2c1f7ceb8d8 100644 --- a/language/_____LANGUAGE_de/_____LANGUAGE_de.aod +++ b/language/_____LANGUAGE_de/_____LANGUAGE_de.aod @@ -9646,6 +9646,22 @@ Bitte Datumseingabe prüfen</value> <key>Mailbridge failed: user '%0' is unknown, contact an administrator.</key> <value>Mailbridge fehlgeschlagen: Benutzer '%0' ist unbekannt, kontaktieren sie einen Administrator.</value> </entry> + <entry> + <key>Count Chart</key> + <value>Anzahl Diagramm</value> + </entry> + <entry> + <key>Sum Chart</key> + <value>Summen Diagramm</value> + </entry> + <entry> + <key>Probability Chart</key> + <value>Wahrscheinlichkeit Diagramm</value> + </entry> + <entry> + <key>Probability in %</key> + <value>Wahrscheinlichkeit in %</value> + </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 7b56909fe432b7642e440636ea2dbb6aaa8c9454..b09cc03cdef4fcb4fc80771342b5320e6b3c4172 100644 --- a/language/_____LANGUAGE_en/_____LANGUAGE_en.aod +++ b/language/_____LANGUAGE_en/_____LANGUAGE_en.aod @@ -7353,6 +7353,18 @@ <entry> <key>Mailbridge failed: user '%0' is unknown, contact an administrator.</key> </entry> + <entry> + <key>Count Chart</key> + </entry> + <entry> + <key>Sum Chart</key> + </entry> + <entry> + <key>Probability Chart</key> + </entry> + <entry> + <key>Probability in %</key> + </entry> </keyValueMap> <font name="Dialog" style="0" size="11" /> </language> diff --git a/neonView/OfferFilter_view/OfferFilter_view.aod b/neonView/OfferFilter_view/OfferFilter_view.aod index 0a1ab5740c5a8ae675bc91f798159175c3fdee75..dcfe1e8da8909c739b4d2d7d7cfad05ed4272a66 100644 --- a/neonView/OfferFilter_view/OfferFilter_view.aod +++ b/neonView/OfferFilter_view/OfferFilter_view.aod @@ -140,7 +140,12 @@ <name>DynamicMultiDataChartCount</name> <chartType>COLUMN</chartType> <yAxisLabel>Count</yAxisLabel> + <shareParent v="false" /> <entityField>#ENTITY</entityField> + <defaultGroupFields> + <element>STATUS</element> + </defaultGroupFields> + <title>Count Chart</title> <columns> <neonDynamicMultiDataChartColumn> <name>4bbc9650-47fd-4a59-8e1e-bb60ceb85795</name> @@ -153,7 +158,12 @@ <name>DynamicMultiDataChartSum</name> <chartType>COLUMN</chartType> <yAxisLabel>Total in euros</yAxisLabel> + <shareParent v="false" /> <entityField>#ENTITY</entityField> + <defaultGroupFields> + <element>STATUS</element> + </defaultGroupFields> + <title>Sum Chart</title> <columns> <neonDynamicMultiDataChartColumn> <name>e5d14506-5205-43d0-89cb-416bf6debd25</name> @@ -162,5 +172,23 @@ </neonDynamicMultiDataChartColumn> </columns> </dynamicMultiDataChartViewTemplate> + <dynamicMultiDataChartViewTemplate> + <name>DynamicMultiDataChartProb</name> + <chartType>COLUMN</chartType> + <yAxisLabel>Probability in %</yAxisLabel> + <shareParent v="false" /> + <entityField>#ENTITY</entityField> + <defaultGroupFields> + <element>STATUS</element> + </defaultGroupFields> + <title>Probability Chart</title> + <columns> + <neonDynamicMultiDataChartColumn> + <name>e5d14506-5205-43d0-89cb-416bf6debd25</name> + <entityField>PROBABILITY</entityField> + <aggregateEntityField>PROBABILITY_aggregate</aggregateEntityField> + </neonDynamicMultiDataChartColumn> + </columns> + </dynamicMultiDataChartViewTemplate> </children> </neonView> diff --git a/process/Campaign_lib/process.js b/process/Campaign_lib/process.js index 9db490141b571252ed2fd6f98d5bcf3a7932bb69..7c893948d7f1a576518e469721ae1dbec4a50ec2 100644 --- a/process/Campaign_lib/process.js +++ b/process/Campaign_lib/process.js @@ -520,37 +520,39 @@ CampaignUtils.GetContactIdsNotInCampaignByRowIds = function(pCampaignId, pPartic * @param {String} pCampaignId <p> * The id of the campaign.<br> * @param {String} pCondition (optional) <p> - * An condition which could used to<br> - * limit the search result.<br> - * @param {Boolean} pRightJoinContacts <p> - * Case if its true, a prefix will used<br> - * to do a right join.<br> + * An condition which is used to limit the search contact results.<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"); - - if(pCondition != "") - subselect = newSelect("CAMPAIGNPARTICIPANT.CONTACT_ID") - .from("CAMPAIGNPARTICIPANT") - .where(pCondition); + .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 != "") + query.and(pCondition); return query.arrayColumn(); } @@ -564,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");