Skip to content
Snippets Groups Projects
Commit 257e9b54 authored by Benjamin Ulrich's avatar Benjamin Ulrich :speech_balloon: Committed by Sebastian Listl
Browse files

[Projekt: xRM-Sales][TicketNr.: 1047801][Angebot: Automatische Befüllung, wenn...

[Projekt: xRM-Sales][TicketNr.: 1047801][Angebot: Automatische Befüllung, wenn Angebot aus Aufgabe/Aktivität gestellt wird]
parent 43f495a7
No related branches found
No related tags found
No related merge requests found
......@@ -2,20 +2,50 @@ import("Sql_lib");
import("system.vars");
import("Offer_lib");
var contactIds = [];
var activityId = vars.get("$field.ACTIVITYID");
var activityLinks = newSelect("ACTIVITYLINK.OBJECT_TYPE, ACTIVITYLINK.OBJECT_ROWID")
.from("ACTIVITYLINK")
.where("ACTIVITYLINK.ACTIVITY_ID", activityId)
.and("ACTIVITYLINK.OBJECT_TYPE", ["Person", "Organisation", "Salesproject"], SqlBuilder.IN())
.table();
var organisationArray = [];
var salesprojectId;
for (var i = 0; i < activityLinks.length; i++) {
if(activityLinks[i][0] == "Person")
{
contactIds.push(activityLinks[i][1])
}
else if(activityLinks[i][0] == "Organisation")
{
organisationArray.push(activityLinks[i][1])
}
else if(activityLinks[i][0] == "Salesproject")
{
if(!salesprojectId)
{
salesprojectId = links[i][1]
}
else//only preset the salesproject if only one exists
{
salesprojectId = "";
}
}
}
//make a map from the 2d-array to easily access the ids by objectType
var linkMap = new Map(activityLinks);
for (i = 0; i < organisationArray.length; i++) {
var orgContacts = newSelect("CONTACT.CONTACTID")
.from("CONTACT")
.where("CONTACT.ORGANISATION_ID", newSelect("ORGANISATION.ORGANISATIONID")
.from("ORGANISATION")
.join("CONTACT", "ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID")
.where("CONTACT.CONTACTID", organisationArray[i])
.cell())
.arrayColumn();
contactIds = contactIds.concat(orgContacts);
}
//if we only have one Person: that person is the contact.
//otherwise: we check for organisations: if we only have one then we use that one.
//same logic for salesprojects: if we have only one: use that one
var contactId = linkMap.get("Person") || linkMap.get("Organisation");
var salesprojectId = linkMap.get("Salesproject");
var info = vars.get("$field.INFO");
OfferUtils.createNewOffer("Salesproject", salesprojectId, contactId, activityId);
\ No newline at end of file
OfferUtils.createNewOffer("Salesproject", salesprojectId, contactIds, info, "Activity", activityId);
\ No newline at end of file
......@@ -245,6 +245,11 @@
<name>ContactId_param</name>
<valueProcess>%aditoprj%/entity/Offer_entity/entityfields/anycontacts/children/contactid_param/valueProcess.js</valueProcess>
</entityParameter>
<entityParameter>
<name>ContactIds_param</name>
<valueProcess>%aditoprj%/entity/Offer_entity/entityfields/anycontacts/children/contactids_param/valueProcess.js</valueProcess>
<expose v="true" />
</entityParameter>
</children>
</entityConsumer>
<entityConsumer>
......@@ -557,6 +562,7 @@
<title>Information</title>
<contentType>LONG_TEXT</contentType>
<stateProcess>%aditoprj%/entity/Offer_entity/entityfields/info/stateProcess.js</stateProcess>
<valueProcess>%aditoprj%/entity/Offer_entity/entityfields/info/valueProcess.js</valueProcess>
</entityField>
<entityConsumer>
<name>Attributes</name>
......@@ -1139,6 +1145,18 @@
</entityParameter>
</children>
</entityConsumer>
<entityParameter>
<name>ContactIds_param</name>
<expose v="true" />
</entityParameter>
<entityParameter>
<name>Info_param</name>
<expose v="true" />
</entityParameter>
<entityParameter>
<name>TaskId_param</name>
<expose v="true" />
</entityParameter>
</entityFields>
<recordContainers>
<dbRecordContainer>
......
import("system.result");
import("system.vars");
var contactIds = "";
if (vars.exists("$param.ContactIds_param") && vars.get("$param.ContactIds_param")) {
contactIds = vars.get("$param.ContactIds_param");
}
if (contactIds)
result.string(contactIds);
\ No newline at end of file
import("system.result");
import("system.neon");
import("system.vars");
if((vars.get("$sys.operatingstate") == neon.OPERATINGSTATE_NEW && vars.get("$this.value") == null) && vars.exists("$param.Info_param") && vars.get("$param.Info_param"))
{
result.string(vars.get("$param.Info_param"));
}
\ No newline at end of file
import("Binary_lib");
import("Sql_lib");
import("Context_lib");
import("system.workflow");
import("Workflow_lib");
......@@ -16,6 +18,8 @@ if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
if (vars.exists("$param.OfferOriginal_Id_param") && vars.get("$param.OfferOriginal_Id_param"))
OfferUtils.copyOfferItems(vars.getString("$param.OfferOriginal_Id_param"), offerId, discount);
var binaryColumns;
var binaries;
var activityId = vars.get("$param.ActivityId_param");
if (activityId)
{
......@@ -26,7 +30,30 @@ if (vars.get("$sys.recordstate") == neon.OPERATINGSTATE_NEW)
"OBJECT_TYPE": ContextUtils.getCurrentContextId(),
"OBJECT_ROWID": offerId
}, "ACTIVITYLINK", "ACTIVITYLINKID");
binaryColumns = "BINDATA, FILENAME, DESCRIPTION, KEYWORD";
binaries = newSelect(binaryColumns, SqlUtils.getBinariesAlias())
.from("ASYS_BINARIES")
.where("ASYS_BINARIES.ROW_ID", activityId)
.table()
for (i = 0; i < binaries.length; i++)
{
SingleBinaryUtils.insert("OFFER", "DOCUMENT", offerId, binaries[i][0], binaries[i][1], binaries[i][2], binaries[i][3], SqlUtils.getBinariesAlias())
}
}
var taskId = vars.get("$param.TaskId_param");
if (taskId)
{
binaryColumns = "BINDATA, FILENAME, DESCRIPTION, KEYWORD";
binaries = newSelect(binaryColumns, SqlUtils.getBinariesAlias())
.from("ASYS_BINARIES")
.where("ASYS_BINARIES.ROW_ID", taskId)
.table()
for (i = 0; i < binaries.length; i++)
{
SingleBinaryUtils.insert("OFFER", "DOCUMENT", taskId, binaries[i][0], binaries[i][1], binaries[i][2], binaries[i][3], SqlUtils.getBinariesAlias())
}
}
}
WorkflowSignalSender.inserted();
WorkflowSignalSender.inserted();
\ No newline at end of file
......@@ -2,19 +2,51 @@ import("Sql_lib");
import("system.vars");
import("Offer_lib");
var taskId = vars.get("$field.TASKID");
var contactIds = [vars.get("$field.REQUESTOR_CONTACT_ID"), vars.get("$field.EDITOR_CONTACT_ID")];
var links = newSelect("TASKLINK.OBJECT_TYPE, TASKLINK.OBJECT_ROWID")
.from("TASKLINK")
.where("TASKLINK.TASK_ID", vars.get("$field.TASKID"))
.and("TASKLINK.OBJECT_TYPE", ["Person", "Organisation", "Salesproject"], SqlBuilder.IN())
.and("TASKLINK.OBJECT_TYPE", ["PrivatePerson", "Organisation", "Salesproject"], SqlBuilder.IN())
.table();
var organisationArray = [];
var salesprojectId;
for (var i = 0; i < links.length; i++) {
if(links[i][0] == "PrivatePerson")
{
contactIds.push(links[i][1])
}
else if(links[i][0] == "Organisation")
{
organisationArray.push(links[i][1])
}
else if(links[i][0] == "Salesproject")
{
if(!salesprojectId)
{
salesprojectId = links[i][1]
}
else//only preset the salesproject if only one exists
{
salesprojectId = "";
}
}
}
//make a map from the 2d-array to easily access the ids by objectType
var linkMap = new Map(links);
for (i = 0; i < organisationArray.length; i++) {
var orgContacts = newSelect("CONTACT.CONTACTID")
.from("CONTACT")
.where("CONTACT.ORGANISATION_ID", newSelect("ORGANISATION.ORGANISATIONID")
.from("ORGANISATION")
.join("CONTACT", "ORGANISATION.ORGANISATIONID = CONTACT.ORGANISATION_ID")
.where("CONTACT.CONTACTID", organisationArray[i])
.cell())
.arrayColumn();
contactIds = contactIds.concat(orgContacts);
}
//if we only have one Person: that person is the contact.
//otherwise: we check for organisations: if we only have one then we use that one.
//same logic for salesprojects: if we have only one: use that one
var contactId = linkMap.get("Person") || linkMap.get("Organisation");
var salesprojectId = linkMap.get("Salesproject");
var subject = vars.get("$field.SUBJECT");
OfferUtils.createNewOffer("Salesproject", salesprojectId, contactId);
\ No newline at end of file
OfferUtils.createNewOffer("Salesproject", salesprojectId, contactIds, subject, "Task", taskId);
\ No newline at end of file
......@@ -78,7 +78,7 @@ OfferUtils.isDeletable = function(status) {
* Create a new offer and open the offer context in NEW-mode
* //TODO: function comment
*/
OfferUtils.createNewOffer = function(pContextId, pRowId, pRelationId, pActivityId)
OfferUtils.createNewOffer = function(pContextId, pRowId, pRelationId, pInfo, pSourceObjectType, pSourceObjectRowId)
{
var params = {};
......@@ -89,11 +89,22 @@ OfferUtils.createNewOffer = function(pContextId, pRowId, pRelationId, pActivityI
}
if (pRelationId)
params["ContactId_param"] = pRelationId;
{
if(Array.isArray(pRelationId))
{
params["ContactIds_param"] = JSON.stringify(pRelationId);
}
else
params["ContactId_param"] = pRelationId;
}
if (pActivityId)
params["ActivityId_param"] = pActivityId;
if(pSourceObjectType == "Activity")
params["ActivityId_param"] = pSourceObjectRowId;
else if(pSourceObjectType == "Task")
params["TaskId_param"] = pSourceObjectRowId;
if (pInfo)
params["Info_param"] = pInfo;
neon.openContext("Offer", null, null, neon.OPERATINGSTATE_NEW, params);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment