Something went wrong on our end
-
[Projekt: Entwicklung - Neon][TicketNr.: 1061658][Besuchsvorschlag - neuer Wochenplaneintrag: Kontakt nicht auswählbar obwohl vorhanden]
[Projekt: Entwicklung - Neon][TicketNr.: 1061658][Besuchsvorschlag - neuer Wochenplaneintrag: Kontakt nicht auswählbar obwohl vorhanden]
contentProcess.js 12.46 KiB
import("system.eMath");
import("system.tools");
import("PostalAddress_lib");
import("system.translate");
import("Contact_lib");
import("KeywordRegistry_basic");
import("system.logging");
import("system.datetime");
import("system.util");
import("system.result");
import("system.vars");
import("system.db");
import("Sql_lib");
import("Keyword_lib");
import("AttributeRegistry_basic");
import("KeywordRegistry_basic");
import("Util_lib");
import("Address_lib");
var recommendationData = [];
var tmpData = [];
var activitySubQuery = "";
activitySubQuery = newSelect("max(ENTRYDATE)")
.from("ACTIVITY")
.join("ACTIVITYLINK", "ACTIVITYID = ACTIVITY_ID")
.where("ACTIVITYLINK.OBJECT_ROWID = org.ORGANISATIONID")
.and("ACTIVITY.CATEGORY", "VISIT")
var idValues = false;
if (vars.exists("$local.idvalues") && vars.get("$local.idvalues"))
idValues = true
//dynamic Recommendations
//recommended Organisations containing the attribute Visit Frequency
if(idValues == false)
{
var visitFrequencyData = newSelect(["org.ORGANISATIONID", "NAME",
newSelect("CONTACT.CONTACTID")
.from("CONTACT")
.leftJoin("AB_ATTRIBUTERELATION", "CONTACT.CONTACTID = AB_ATTRIBUTERELATION.OBJECT_ROWID")
.leftJoin("AB_ATTRIBUTE", "AB_ATTRIBUTE.AB_ATTRIBUTEID = AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID")
.leftJoin("ORGANISATION", "ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID")
.where("AB_ATTRIBUTE.AB_ATTRIBUTEID", $AttributeRegistry.visitPlanPointOfContact())
.cell(), AddressUtils.formatOnelineSql(),
"visitPlanFrequency.ID_VALUE", "'VISITFREQUENCY '", activitySubQuery, "CONTACTID",
newSelect("min(ENTRYDATE)")
.from("VISITPLANENTRY")
.where("CONTACT.CONTACTID", "VISITPLANENTRY.ORGANISATION_CONTACT_ID")
.and(newWhere("VISITPLANENTRY.STATUS", $KeywordRegistry.visitPlanEntryStatus$planned())
.or("VISITPLANENTRY.STATUS", $KeywordRegistry.visitPlanEntryStatus$Appointmentarranged()))
.and("VISITPLANENTRY.ENTRYDATE", newSelect("min(vp.ENTRYDATE)")
.from("VISITPLANENTRY", "vp")
.where(["VISITPLANENTRY", "ORGANISATION_CONTACT_ID", "vp"], "visitplanentry.ORGANISATION_CONTACT_ID")
.and(["VISITPLANENTRY", "ENTRYDATE", "vp"], datetime.today())
.and(newWhere(["VISITPLANENTRY", "STATUS", "vp"],
$KeywordRegistry.visitPlanEntryStatus$planned())
.or(["VISITPLANENTRY", "STATUS", "vp"],
$KeywordRegistry.visitPlanEntryStatus$Appointmentarranged()))
.cell())])
.from("CONTACT")
.join("ORGANISATION", "CONTACT.ORGANISATION_ID = org.ORGANISATIONID", "org")
.leftJoin("PERSON", "PERSON.PERSONID = CONTACT.PERSON_ID")
.leftJoin("ADDRESS", "ADDRESS_ID = ADDRESSID")
.join("AB_ATTRIBUTERELATION", "visitPlanFrequency.OBJECT_ROWID = CONTACT.CONTACTID", "visitPlanFrequency")
.where(["AB_ATTRIBUTERELATION", "AB_ATTRIBUTE_ID", "visitPlanFrequency"], $AttributeRegistry.visitPlanFrequency())
.table();
}
var recommendationSQLData = newSelect(["VISITRECOMMENDATIONID", "VISITRECOMMENDATION.CONTACT_ID", "PRIORITY", "DUE_DATE", "SOURCE", "INFO", AddressUtils.formatOnelineSql(),
newSelect("CONTACT.CONTACTID")
.from("CONTACT")
.leftJoin("AB_ATTRIBUTERELATION", "CONTACT.CONTACTID = AB_ATTRIBUTERELATION.OBJECT_ROWID")
.leftJoin("AB_ATTRIBUTE", "AB_ATTRIBUTE.AB_ATTRIBUTEID = AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID")
.leftJoin("ORGANISATION", "ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID")
.where("AB_ATTRIBUTE.AB_ATTRIBUTEID", $AttributeRegistry.visitPlanPointOfContact())
.and("CONTACT.CONTACTID", "VISITRECOMMENDATION.CONTACT_ID")
.cell(),
newSelect("min(ENTRYDATE)")
.from("VISITPLANENTRY")
.where("VISITPLANENTRY.ORGANISATION_CONTACT_ID", "VISITRECOMMENDATION.CONTACT_ID")
.and("VISITPLANENTRY.STATUS", $KeywordRegistry.visitPlanEntryStatus$planned())
.or("VISITPLANENTRY.STATUS", $KeywordRegistry.visitPlanEntryStatus$Appointmentarranged())
.and("VISITPLANENTRY.entrydate", datetime.today(), SqlBuilder.GREATER())
.cell(),
newSelect("VISITRECOMMENDATION.CONTACT_ID")
.from("VISITPLANEMPLOYEEWEEK, VISITPLANENTRY")
.where("VISITPLANENTRY.VISITPLANEMPLOYEEWEEK_ID", "VISITPLANEMPLOYEEWEEK.VISITPLANEMPLOYEEWEEKID")
.and("VISITRECOMMENDATION.CONTACT_ID", "VISITPLANENTRY.ORGANISATION_CONTACT_ID")
.and(newWhere("VISITPLANENTRY.STATUS", $KeywordRegistry.visitPlanEntryStatus$planned())
.or("VISITPLANENTRY.STATUS", $KeywordRegistry.visitPlanEntryStatus$Appointmentarranged()))
.and("VISITPLANENTRY.entrydate", newSelect("min(vp.entrydate)")
.from("visitplanentry", "VP")
.where(["VISITPLANENTRY", "entrydate", "vp"], datetime.today(), SqlBuilder.GREATER())
.and(["VISITPLANENTRY", "STATUS", "vp"], $KeywordRegistry.visitPlanEntryStatus$planned())
.or(["VISITPLANENTRY", "STATUS", "vp"], $KeywordRegistry.visitPlanEntryStatus$Appointmentarranged()).cell())
])
.from("VISITRECOMMENDATION")
.join("CONTACT", "VISITRECOMMENDATION.CONTACT_ID = CONTACT.CONTACTID")
.join("ADDRESS", "CONTACT.ADDRESS_ID = ADDRESS.ADDRESSID")
if(idValues == true)
recommendationSQLData.where("VISITRECOMMENDATION.VISITRECOMMENDATIONID", vars.get("$local.idvalues"), SqlBuilder.IN())
recommendationSQLData = recommendationSQLData.table();
for( let i = 0; i < recommendationSQLData.length; i++)
{
tmpData = [];
var organisationName = ContactUtils.getFullTitleByContactId(recommendationSQLData[i][1])
if(recommendationSQLData[i][2])
var prio = recommendationSQLData[i][2]
else if(recommendationSQLData[i][3])
prio = getPrioByDueDate(recommendationSQLData[i][3]);
else
prio = $KeywordRegistry.visitRecommendationPriority$low();
var title = "";
if(recommendationSQLData[i][9]){
var user = tools.getUserByAttribute(tools.CONTACTID, recommendationSQLData[i][9]);
title = user[tools.TITLE]
}
tmpData[0] = recommendationSQLData[i][0]; //UID
tmpData[1] = organisationName; //Organisation Name
tmpData[3] = recommendationSQLData[i][6]; //Address
tmpData[4] = prio;
tmpData[5] = recommendationSQLData[i][4]; //Source of Priority
tmpData[7] = recommendationSQLData[i][3]; //Due Date
tmpData[8] = recommendationSQLData[i][5]; //Info
tmpData[9] = recommendationSQLData[i][1]; //CONTACT_ID
tmpData[2] = recommendationSQLData[i][8]; //Data_planned
recommendationData.push(tmpData);
}
var monthly = parseInt(datetime.ONE_DAY * 31);
var semiannually = parseInt(datetime.ONE_DAY * 183);
var quarterly = parseInt(datetime.ONE_DAY * 93);
var yearly = parseInt(datetime.ONE_DAY * 365);
if(idValues == false)
{
for (var i = 0; i < visitFrequencyData.length; i++)
{
tmpData = [];
let title = "";
if(visitFrequencyData[i][9])
{
let user = tools.getUserByAttribute(tools.CONTACTID, visitFrequencyData[i][9]);
title = user[tools.TITLE]
}
tmpData[0] = visitFrequencyData[i][0]; //UID
tmpData[1] = visitFrequencyData[i][1]; //Organisation Name
tmpData[3] = visitFrequencyData[i][2]; //Address
tmpData[5] = visitFrequencyData[i][4]; //Source of Priority
tmpData[8] = "";
tmpData[4] = visitFrequencyData[i][5]; //last visit
tmpData[9] = visitFrequencyData[i][6]; //ContactId
tmpData[2] = visitFrequencyData[i][1]; //OrganisationId
var dueDate = "";
var lastVisitDate = "";
if((visitFrequencyData[i][5]).length == 0)
{
dueDate = datetime.date();
}
else
{
lastVisitDate = visitFrequencyData[i][5];
switch(visitFrequencyData[i][3])
{
case $AttributeRegistry.visitPlanFrequency$monthly():
{
dueDate = eMath.addInt(lastVisitDate, monthly);
break;
}
case $AttributeRegistry.visitPlanFrequency$quarterly():
{
dueDate = eMath.addInt(lastVisitDate, quarterly);
break;
}
case $AttributeRegistry.visitPlanFrequency$semiannually():
{
dueDate = eMath.addInt(lastVisitDate, semiannually);
break;
}
case $AttributeRegistry.visitPlanFrequency$yearly():
{
dueDate = eMath.addInt(lastVisitDate, yearly);
break;
}
default:
{
break;
}
}
}
tmpData[7] = dueDate; //Due Date
tmpData[4] = getPrioByDueDate(dueDate); //Priority
recommendationData.push(tmpData);
}
}
//add Display Value for Priority and PrioritySource
for (let i = 0; i < recommendationData.length; i++)
{
recommendationData[i][6] = KeywordUtils.getViewValue($KeywordRegistry.visitRecommendationPriority(), recommendationData[i][4])
recommendationData[i][10] = KeywordUtils.getViewValue($KeywordRegistry.visitRecommendationPrioSource(), recommendationData[i][5])
}
//sort Array by priority; highest priority first
ArrayUtils.sort2d(recommendationData, 4, true)
result.object(recommendationData);
function getPrioByDueDate(pDueDate)
{
var prio = "";
var currentDate = datetime.date();
if(pDueDate != "")
{
var dateDifference = pDueDate - currentDate;
if(dateDifference < 0)
prio = $KeywordRegistry.visitRecommendationPriority$critical();
else if(dateDifference < datetime.ONE_DAY * 3)
prio = $KeywordRegistry.visitRecommendationPriority$veryHigh();
else if(dateDifference < datetime.ONE_DAY * 7)
prio = $KeywordRegistry.visitRecommendationPriority$high();
else if(dateDifference < datetime.ONE_DAY * 14)
prio = $KeywordRegistry.visitRecommendationPriority$medium();
else
prio = $KeywordRegistry.visitRecommendationPriority$low();
}
return prio;
}