283 lines
16 KiB
JavaScript
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 + "¬i_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;
|
|
}
|
|
|
|
|