Files
Mareon/ax/SRC/F_GetOpdrachtenStatussen.js
Marcel Bourseau ac14521f63 MARX#62647: Koppeling AX365 - Mareon (Push) - Enkele logging verbeteringen
svn path=/Mareon/trunk/; revision=49549
2021-01-25 17:28:05 +00:00

283 lines
16 KiB
JavaScript

// --------------------------------------------------------------------------------------
// F_GetOpdrachten_Statussen.js
// Copyright 2020 SG|facilitor. 053-4800 700, helpdesk@mareon.nl
// Written by MB (2019)
// --------------------------------------------------------------------------------------
//MARX#62647: Koppeling AX365 - Mareon (Push)
function F_GetOpdrachten_Statussen ()
{
var l_url = G_marx_url + "api2/reports/?rapcode=MARX_NQ_ORDER";
__Log("l_url: " + l_url,3);
var v_suppress_req_logging = 0; // Logging van request, indien dat gewenst is, niet onderdrukken.
var l_response_JSON = FcltAPI2(G_marx_apikey, "GET", l_url, "", 0, v_suppress_req_logging);
//Array van soort notificatie codes, idee is dat als bij dezelfde opdracht als eerder in deze run is uitgevoerd, wordt de 2e, 3e notify etc overgeslagen.
var l_fac_srtnotificatie_code_LIST = {};
if (l_response_JSON){
__Log("F_GetOpdrachten_Statussen: GET", 2);
var data = myJSON.parse(l_response_JSON.responseText);
__Log("Opdrachtstatus data:" + data, 4);
if ("marx_v_notifyqueue_orders" in data)
{ var l_orders = data.marx_v_notifyqueue_orders;
var l_aant_orders = l_orders.length;
__Log("Aantal opdrachtenstatussen: " + l_aant_orders, 3);
var l_prev_mld_opdr_key = -1; //default non-existent key
var l_error = 0; // default 0 = no (HTTP-error / success), 1 = HTTP-error/failure
for (var i = 0; i < l_aant_orders; i++)
{
var l_mld_opdr_key = l_orders[i].mld_opdr_key;
var l_fac_srtnotificatie_code = l_orders[i].fac_srtnotificatie_code;
var l_fac_notificatie_key = l_orders[i].fac_notificatie_key;
__Log("l_mld_opdr_key: " + l_mld_opdr_key, 4);
__Log("l_fac_srtnotificatie_code: " + l_fac_srtnotificatie_code, 4);
__Log("l_fac_notificatie_key: " + l_fac_notificatie_key, 4);
if (l_mld_opdr_key == l_prev_mld_opdr_key){
//dezelfde opdracht als vorige keer
if (l_error == 0){
// Geen error bij dezelfde opdracht de vorge keer, dus DOORGAAN met deze
// Maar wel eerst checken of deze soort notificatie bij dezelfde opdracht nog niet in deze sync is geweest, want dan slaan we die over.
if (l_fac_srtnotificatie_code in l_fac_srtnotificatie_code_LIST){
// Ja, deze soort notificatie is dus al uitgevoerd, we gaan geen communicatie naar extern systeem doen,
// Enkel een OKE-berichtje met bit64 reset van deze notify naar Mareon...
__Log("F_GetOpdrachten_Statussen Bypass: dubbele srtnoti " + l_fac_srtnotificatie_code, 4);
post_do_exec_notification(l_fac_notificatie_key, {api_status_code: 1, api_status_message: "", api_response_message: ""});
}
else{
// We gaan de soort notificaties van dezelfde opdracht registeren in LIJST (Array)
l_fac_srtnotificatie_code_LIST[l_fac_srtnotificatie_code]=1;
// En communicatie van notify naar extern systeem...
l_error = do_exec_opdrstatus (l_orders[i]);
}
}
else{
// Wel een error bij dezelfde opdracht de vorge keer, dus SKIPPEN van deze
__Log("Agv vorige fout bij MAR-nr " + l_orders[i].mld_opdr_marx_nr + ": opdrachtstatus " + l_orders[i].fac_srtnotificatie_code + " bij opdracht " + l_orders[i].mld_opdr_externnr + " / " + l_orders[i].mld_opdr_ordernr + " wordt overgeslagen" + "(key:" + l_mld_opdr_key + ")", 1);
}
}
else{
//andere opdracht dan de vorige keer
//meteen maar l_error en Array resetten.
l_error = 0;
l_fac_srtnotificatie_code_LIST = {};
l_fac_srtnotificatie_code_LIST[l_fac_srtnotificatie_code]=1;
// en status natuurlijk gaan verwerken
l_error = do_exec_opdrstatus (l_orders[i]);
}
l_prev_mld_opdr_key = l_mld_opdr_key;
}
//einde lus alle statussen
}
}
}
function do_exec_opdrstatus(p_order){
var l_error = 0;
var l_mld_opdr_key = p_order.mld_opdr_key; // eg 897125
var l_fac_notificatie_key = p_order.fac_notificatie_key; // eg 409044
var l_fac_tracking_datum;
var l_fac_tracking_datum_tmp = p_order.fac_tracking_datum; // eg "2020-07-29T14:59:39", UTC time
if (l_fac_tracking_datum_tmp == null){l_fac_tracking_datum = ""} else{l_fac_tracking_datum = jsdatetoiso(l_fac_tracking_datum_tmp)};
var l_mld_statusopdr_key = p_order.mld_statusopdr_key; // eg 1
var l_mld_opdr_halted = p_order.mld_opdr_halted; // eg 1
//var l_mld_opdr_marx_nr = p_order.mld_opdr_marx_nr; // eg "MAR844121/1",
var l_ax_company_id = p_order.ax_company_id; // eg "1"
//var l_mld_melding_externnr = p_order.mld_melding_externnr; // eg "MLD00058733"
var l_mld_opdr_externnr = p_order.mld_opdr_externnr; // eg "ION00030210"
var l_mld_opdr_ordernr = p_order.mld_opdr_ordernr; // eg "MLD00058733-01"
var l_mld_opdr_plandatum;
var l_mld_opdr_plandatum_tmp = p_order.mld_opdr_plandatum; //eg "2020-07-30T09:00:00", UTC time, deze kan null zijn!!
if (l_mld_opdr_plandatum_tmp == null){l_mld_opdr_plandatum = ""} else {l_mld_opdr_plandatum = jsdatetoiso(l_mld_opdr_plandatum_tmp)};
var l_mld_opdr_plandatum2;
var l_mld_opdr_plandatum2_tmp = p_order.mld_opdr_plandatum2; //eg null, in UTC time, deze kan null zijn!!
if (l_mld_opdr_plandatum2_tmp == null){l_mld_opdr_plandatum2 = ""}else {l_mld_opdr_plandatum2 = jsdatetoiso(l_mld_opdr_plandatum2_tmp)};
var l_mld_opdr_opmerking = p_order.mld_opdr_opmerking; // eg "Is niet meer nodig, de vloerbedekking is weer goed.", deze kan null zijn!!
if (l_mld_opdr_opmerking == null){l_mld_opdr_opmerking = ""};
l_mld_opdr_opmerking = escapeXml(l_mld_opdr_opmerking);
//var l_fac_srtnotificatie_key = p_order.fac_srtnotificatie_key; // eg 264
var l_fac_srtnotificatie_code = p_order.fac_srtnotificatie_code; // eg "ORDRSM"
var l_mld_opdr_kosten = p_order.mld_opdr_kosten; // eg 0
var l_mld_opdr_onderbreek_code = p_order.mld_opdr_onderbreek_code; // eg "AFW", deze kan null zijn!!
if (l_mld_opdr_onderbreek_code == null){l_mld_opdr_onderbreek_code = ""};
var l_mld_opdr_afwijs_code = p_order.mld_opdr_afwijs_code; // eg "ANN" of "WEI", deze kan null zijn!!
if (l_mld_opdr_afwijs_code == null){l_mld_opdr_afwijs_code = ""};
var l_response;
__Log("do_exec_opdrstatus - l_mld_opdr_key: " + l_mld_opdr_key, 3);
__Log("do_exec_opdrstatus - l_fac_srtnotificatie_code: " + l_fac_srtnotificatie_code, 3);
switch (l_fac_srtnotificatie_code)
{
case "ORDNEW":
// Nieuwe opdracht
//Default gaan we ervan uit dat de response goed gaat/is, en dus de notify uit de queue kan...
l_response = {api_status_code: 1, api_status_message: "", api_response_message: ""};
// Alleen voor Facilitor -> bijlagen van de nieuwe opdrachten ophalen (pullen)
if (AX_or_Tobias() == "F"){
if (G_mar_sync_bijlages_opdrgvr != '0' && G_mar_sync_bijlages_opdrgvr != '-1'){
// MARX#57420: Documenten van Tobias AX naar Mareon
// 0/leeg = bestanden vanuit opdrachtgever worden niet gedeeld;
// <> 0 = bestanden vanuit opdrachtgever wel delen met leverancier, default wordt door import nieuwe woco/opdrachtgever de waarde -1 ingevuld, mn voor Tobias bedoeld, hiermee wordt bereikt dat default wel bijlages wordt uitgewisseld.
// LET OP!: vul voor Faciltior kenmerk-key bijlages in, dus key van flexprop van bijlages uit facilitor omgeving, -1 is daarbij geen geldige waarde/key voor kenmerk, en betekent geen uitwisseling)
//Deze key voor Facilitor moet derhalve > 0 zijn, anders heeft dat geen zin cq. gaat dat fout.
__Log("*** START CUST.FACILITOR.NL --> MAREON : Bijlages van opdrachtgever naar Mareon ***", 2);
var l_opdr_str = F_GetOpdrachtKey_NEW(l_mld_opdr_key,l_mld_opdr_ordernr);
F_GetOpdrachten_NEW_POST (l_opdr_str);
__Log("*** END", 2);
}
}
break;
case "ORDACP":
// Geaccepteerde opdracht
l_response = GEN_AcceptServiceTask(l_ax_company_id, l_mld_opdr_ordernr, l_mld_opdr_externnr, l_mld_opdr_opmerking);
break;
case "ORDUPD":
// Gewijzigde opdracht, kan zijn:
// 1. opmerking, of
// 2. een flexprop "onderbroken" (via api) of
// 3. bijlage(n).
//Default gaan we ervan uit dat de response goed gaat/is, en dus de notify uit de queue kan...
l_response = {api_status_code: 1, api_status_message: "", api_response_message: ""};
// 1. opmerking
if (l_mld_opdr_opmerking != ""){
l_response = GEN_SetSupplierText(l_ax_company_id, l_mld_opdr_ordernr, l_mld_opdr_externnr, l_mld_opdr_opmerking);
}
// 2. een flexprop "onderbroken" (via api)
if (l_response.api_status_code == 1){
// Communciatie vorige GEN_SetSupplierText is goed verlopen
if (l_mld_statusopdr_key == 8 && l_mld_opdr_halted == 1 && l_mld_opdr_onderbreek_code != ""){
// status is 8 (=geaccepteerd), halted is 1 (=onderbroken), en flexprop "onderbeekcode" is gevuld
l_response = GEN_Conditioneel_OnderbreekServiceTask(l_mld_opdr_key, l_ax_company_id, l_mld_opdr_onderbreek_code, l_mld_opdr_externnr, l_mld_opdr_opmerking, "-1");
}
}
// 3. bijlage(n)
if (l_response.api_status_code == 1){
// Communciatie vorige GEN_SetSupplierText en/of GEN_OnderbreekServiceTask is goed verlopen
if (G_mar_sync_bijlages_naar_opdrgvr != '0'){
if (AX_or_Tobias() == "F" || AX_or_Tobias() == "A" || AX_or_Tobias() == "A12" ){
// Alleen in geval van Facilitor, AX2009 of AX2012
__Log("*** START: Bijlagen bij opdrachten uit Mareon naar opdrachtgever ***", 2);
F_GetOpdracht_BijlagenQueue (l_mld_opdr_key, l_fac_tracking_datum);
//We gaan er voorlopig uit dat bijlage upload in principe altijd lukt, zo niet, dan toch, en laten we die voorbij gaan...
l_response = {api_status_code: 1, api_status_message: "", api_response_message: ""};
__Log("*** END", 2);
}
}
}
break;
case "ORDPLD":
// Gewijzigde Start Plandatum bij opdracht
l_response = GEN_PlanServiceTask(l_ax_company_id, l_mld_opdr_ordernr, l_mld_opdr_externnr, l_mld_opdr_opmerking, l_mld_opdr_plandatum);
break;
case "ORDPL2":
// Gewijzigde Eind Plandatum bij opdracht
l_response = GEN_VerlengServiceTask(l_ax_company_id, "VER", l_mld_opdr_externnr, l_mld_opdr_opmerking, l_mld_opdr_plandatum2);
break;
case "ORDHLT":
// Opdracht is onderbroken
l_response = GEN_Conditioneel_OnderbreekServiceTask(l_mld_opdr_key, l_ax_company_id, l_mld_opdr_onderbreek_code, l_mld_opdr_externnr, l_mld_opdr_opmerking, "-1");
break;
case "ORDRSM":
// Opdracht is in uitvoering gezet
l_response = GEN_UitvoeringServiceTask_ResetOnderbreek(l_mld_opdr_key, l_ax_company_id, "UIT", l_mld_opdr_externnr, l_mld_opdr_opmerking, "-1");
break;
case "ORDCAN":
// Opdracht is afgewezen, reden kan zijn (1) geweigerd of (2) geannuleerd
if (l_mld_opdr_afwijs_code == 'WEI') {
l_response = GEN_RefuseServiceTask(l_ax_company_id, l_mld_opdr_ordernr, l_mld_opdr_externnr, "GEWEIGERD", l_mld_opdr_opmerking);
}
if (l_mld_opdr_afwijs_code == 'ANN') {
l_response = GEN_AnnuleerServiceTask(l_ax_company_id, "ANN", l_mld_opdr_externnr, l_mld_opdr_opmerking, "-1");
}
break;
case "ORDAFM":
// Opdracht is technisch voltooid (gereed)
l_response = GEN_CompleteServiceTask(l_ax_company_id, l_mld_opdr_ordernr, l_mld_opdr_externnr, l_mld_opdr_opmerking, l_fac_tracking_datum);
break;
case "ORDAFR":
// Opdracht is administratief voltooid (kosten gereed)
l_response = GEN_FinancAfrondenServiceTask(l_ax_company_id, l_mld_opdr_ordernr, l_mld_opdr_externnr, l_mld_opdr_kosten);
break;
default:
// Onbekend, doe niets, ook geen foutmelding, i.v.m. , backward compatible van oude sync adapters die nog (ergens) draaien, en nieuwe statuscodes moeten netto niets doen/geen impact hebben.
// Maar wel alsof het verwerken goed is gegaan, zodat ze uit de queue verdwijnen.
__Log("Onbekende statuscode:" + l_fac_srtnotificatie_code, 1);
l_response = {api_status_code: 1, api_status_message: "", api_response_message: ""};
}
l_error = post_do_exec_notification(l_fac_notificatie_key, l_response);
return l_error;
}
function post_do_exec_notification(p_fac_notificatie_key, p_response){
var l_error = 0;
var l_statuscode = p_response.api_status_code;
var l_statustekst = p_response.api_status_message;
var l_reponsetekst = p_response.api_response_message;
var l_extra_omschr = "";
var v_API = "MARKNOTISENT";
var l_url = G_marx_url + "?API=" + v_API + "&noti_key=" + p_fac_notificatie_key
var v_suppress_req_logging = 0; // Logging van request, indien dat gewenst is, niet onderdrukken.
if (l_statuscode == 1){
// Statusbericht is goed verwerkt door ERP, stuur naar Mareon een goed-signaal voor deze notify-queue actie.
l_error = 0;
l_url = l_url + "&resultcode=0";
FcltAPI2(G_marx_apikey, "GET", l_url, "", 0, v_suppress_req_logging);
}
else{
// Statusbericht is NIET goed verwerkt door ERP, stuur naar Mareon een fout-signaal voor deze notify-queue actie incl bijbehorende tekst.
l_error = 1;
l_url = l_url + "&resultcode=-1";
if (l_statustekst != "" || l_reponsetekst != ""){
var l_extra_omschr = l_statustekst + " - " + l_reponsetekst;
l_extra_omschr = l_extra_omschr.substr(0, 1000);
l_extra_omschr = encodeURIComponent(l_extra_omschr);
l_url = l_url + "&track_text=" + l_extra_omschr;
}
__Log("post_do_exec_notification: Error: " + p_fac_notificatie_key + " - " + l_extra_omschr, 2);
FcltAPI2(G_marx_apikey, "GET", l_url, "", 0, v_suppress_req_logging);
}
return l_error;
}