From d8e47592e9b8119f606cba9f912d39a5903ddce5 Mon Sep 17 00:00:00 2001 From: edvbachg <gerhard.bachmaier@hama.de> Date: Thu, 22 Oct 2020 15:24:22 +0200 Subject: [PATCH] Gebiet: Automatische Zuordnung von Firmen --- process/District_lib/process.js | 89 +++++++++++++++++++++++++++----- process/process_audit/process.js | 7 +++ 2 files changed, 82 insertions(+), 14 deletions(-) diff --git a/process/District_lib/process.js b/process/District_lib/process.js index 8e3a1b061a..a4160e6c1d 100644 --- a/process/District_lib/process.js +++ b/process/District_lib/process.js @@ -1,3 +1,5 @@ +import("system.logging"); +import("Contact_lib"); import("KeywordRegistry_basic"); import("system.vars"); import("system.util"); @@ -103,25 +105,35 @@ DistrictUtils.assignDistrictOnServer = function (pArrDistrictIds, pUser) * Id of the district.<br> * @param {String} pAppliedFilter <p> * Filter condition to get the assigned companies.<br> + * @param {String} pContactId (opt) <p> + * Only filled when a special contact-ID should assigned to a district.<br>* * @return {Object} <p> * Count of new assigned companies and no longer assigned companies.<br> */ -DistrictUtils.assignDistrict = function (pDistrictId, pAppliedFilter) +DistrictUtils.assignDistrict = function (pDistrictId, pAppliedFilter, pContactId) { + if (pContactId == undefined) + pContactId = null; + var newAssigned = 0; var unchanged = 0; var invalid = 0; //Einlesen von allen bereits existierenden automatischen Zuordnungen, - //die nicht auf Status 'zur Prüfung' sthen - var arrExistingIds = new SqlBuilder() - .select("DISTRICTCONTACT.DISTRICTCONTACTID, DISTRICTCONTACT.CONTACT_ID, DISTRICTCONTACT.ADVISER_CONTACT_ID") - .from("DISTRICTCONTACT") - .where("DISTRICTCONTACT.DISTRICT_ID", pDistrictId) - .and ("DISTRICTCONTACT.ORIGIN", $KeywordRegistry.districtOrigin$auto()) - .and ("DISTRICTCONTACT.STATUS", $KeywordRegistry.contactStatus$inReview(), SqlBuilder.NOT_EQUAL()) - .table(); - + //die nicht auf Status 'zur Prüfung' stehen + //Nur notwendig, wenn pContactId leer ist. Ansonsten soll ja gezielt ein neuer Datensatz angelegt werden + var arrExistingIds = [] + if (!pContactId) + { + arrExistingIds = new SqlBuilder() + .select("DISTRICTCONTACT.DISTRICTCONTACTID, DISTRICTCONTACT.CONTACT_ID, DISTRICTCONTACT.ADVISER_CONTACT_ID") + .from("DISTRICTCONTACT") + .where("DISTRICTCONTACT.DISTRICT_ID", pDistrictId) + .and ("DISTRICTCONTACT.ORIGIN", $KeywordRegistry.districtOrigin$auto()) + .and ("DISTRICTCONTACT.STATUS", $KeywordRegistry.contactStatus$inReview(), SqlBuilder.NOT_EQUAL()) + .table(); + } + //Einlesen aller Betreuer, die dem übergebenen Gebiet zugeordnet sind var arrResponsibleIds = new SqlBuilder() .select("DISTRICTRESPONSIBLE.EMPLOYEE_CONTACT_ID, DISTRICTRESPONSIBLE.ADVISER_ROLE, " + @@ -129,12 +141,13 @@ DistrictUtils.assignDistrict = function (pDistrictId, pAppliedFilter) .from("DISTRICTRESPONSIBLE") .where("DISTRICTRESPONSIBLE.DISTRICT_ID", pDistrictId) .table(); - + //Aufbereiten des im JSON-Format übergebenen Filters in eine SQL-Condition var appliedFilterCondition = JSON.parse(pAppliedFilter).filter; - appliedFilterCondition = JSON.stringify(appliedFilterCondition); + appliedFilterCondition = JSON.stringify(appliedFilterCondition); + logging.log("appliedFilterCondition: " + appliedFilterCondition); var sqlCondition = db.toFilterCondition(appliedFilterCondition, "Organisation_entity") - + logging.log("sqlCondition: " + sqlCondition) //Einlesen der Contact-IDs zu den Firmen, die gemäß Filter diesem Gebiet zugeordnet sind var arrOrgContactIds = new SqlBuilder() .selectDistinct("CONTACT.CONTACTID") @@ -143,8 +156,9 @@ DistrictUtils.assignDistrict = function (pDistrictId, pAppliedFilter) .leftJoin("ADDRESS", "ADDRESS.ADDRESSID = CONTACT.ADDRESS_ID") .leftJoin("CLASSIFICATIONSTORAGE", "CLASSIFICATIONSTORAGE.OBJECT_ROWID = CONTACT.CONTACTID") .whereIfSet(sqlCondition) + .andIfSet("CONTACT.CONTACTID", pContactId) .arrayColumn(); - + logging.log("arrOrgContactIds.length: " + arrOrgContactIds.length) var insertArray = []; var colsInsert = [ "DISTRICTCONTACTID", @@ -347,4 +361,51 @@ DistrictUtils._getParentFilter = function (pParentDistrict_DistrictId, pPrevious } return resFilter; +} + + +/** + * This function will assign a new organisation to all districts, which + * - have the property "auto assignment" + * - and are part of the regarding filter + * @param {String} pOrganisationId <p> + * Organisation-ID of the new Organisation<br> + * @param {String} pUserLogin <p> + * login,who created the new organistion<br> + * @return <none> <p> + */ +DistrictUtils.assignOrganisationToDistrict = function (pOrganisationId, pUserLogin) +{ + //contactid zur organisationid ermitteln + var contactId = ContactUtils.getOrgContactId(pOrganisationId); + + //alle Filter ermitteln, die auf auto-assignment gleich true gesetzt sind + var allAutoDistricts = newSelect("DISTRICTID") + .from("DISTRICT") + .where("DISTRICT.DISTRICT_AUTOADD", 1) + .arrayColumn(); + + //TODO: pUserLogin noch bis zum Schreiben von date_new durchschleusen + logging.log("pUerLogin: " + pUserLogin) + + + //Variante 1 + for (var i=0; i<allAutoDistricts.length; i++) + { + logging.log("allAutoDistricts[i]: " + allAutoDistricts[i]); + //pro District den kompletten Filter ermitteln + var districtData = DistrictUtils.getDataFromDistrict(allAutoDistricts[i]); + var completeFilter = DistrictUtils.getAppliedFilter(districtData[0], districtData[1]) + //logging.log("completeFilter: " + completeFilter) + //prüfen, ob die neue contactid im filter enthalten wäre + //und im Erfolgsfall die Daten in der districtcontact anlegen + //TODO: pUserLogin als 4ten Parameter übergeben. Wenn gefüllt, diesen als USER_NEW/EDIT setzen, sonst den sys.user verwenden + var res = DistrictUtils.assignDistrict(allAutoDistricts[i], completeFilter, contactId); + } + + + //Variante 2: Aufruf des Server-Prozessen mit allen Gebieten mit Auto-Zuordnung gleich true + //Wirft den gleichen Fehler wie Variante 1 + //TODO: Aus dem pUserLogin noch die Employee-ID ermitteln + //DistrictUtils.assignDistrictOnServer(allAutoDistricts, pUserLogin); } \ No newline at end of file diff --git a/process/process_audit/process.js b/process/process_audit/process.js index 023a6e0dbf..62e7b5c450 100644 --- a/process/process_audit/process.js +++ b/process/process_audit/process.js @@ -1,3 +1,4 @@ +import("District_lib"); import("Loghistory_lib"); import("system.vars"); import("system.process"); @@ -15,3 +16,9 @@ if (sqlAction != 'X') { (new LogHistoryExecutor(tableName, userLogin, columns, newvalues, oldvalues, timestamp, sqlAction, id)).execute(); } + +//Ticketnummer: 1066031 +if (sqlAction == 'I' && tableName == 'ORGANISATION') +{ + DistrictUtils.assignOrganisationToDistrict(id, userLogin); +} \ No newline at end of file -- GitLab