diff --git a/ax/AxFacilitor.NMK b/ax/AxFacilitor.NMK
index b60f712..2a605ad 100644
--- a/ax/AxFacilitor.NMK
+++ b/ax/AxFacilitor.NMK
@@ -115,6 +115,7 @@ $(OBJ)\objMareon.js: \
$(MSRC)\A_UploadDocument.js \
$(MSRC)\A2012_UploadDocument.js \
$(MSRC)\R_SetOpdrachtStatus.js \
+ $(MSRC)\TQ_SetOpdrachtStatus.js \
$(MSRC)\F_PutOpdrachten.js \
$(MSRC)\A_SetSupplierText.js \
$(MSRC)\A2012_SetSupplierText.js \
diff --git a/ax/AxFacilitor.SRC b/ax/AxFacilitor.SRC
index d625ada..1eab36a 100644
--- a/ax/AxFacilitor.SRC
+++ b/ax/AxFacilitor.SRC
@@ -17,6 +17,7 @@
#include "SRC\A_UploadDocument.js"
#include "SRC\A2012_UploadDocument.js"
#include "SRC\R_SetOpdrachtStatus.js"
+#include "SRC\TQ_SetOpdrachtStatus.js"
#include "SRC\T_GetOpdrachten.js"
#include "SRC\F_PutOpdrachten.js"
#include "SRC\A_SetSupplierText.js"
diff --git a/ax/SRC/A2012_VerlengServiceTask.js b/ax/SRC/A2012_VerlengServiceTask.js
deleted file mode 100644
index 57661f0..0000000
--- a/ax/SRC/A2012_VerlengServiceTask.js
+++ /dev/null
@@ -1,33 +0,0 @@
-// --------------------------------------------------------------------------------------
-// A2012_VerlengServiceTask.js
-// Copyright 2019 Facilitor. 053-4800 700, helpdesk@facilitor.nl
-// Written by MB (2019)
-//
-
-
-function A2012_VerlengServiceTask(v_company_id, v_taskId, v_plandate2)
-{
-
-var v_API = "updatePurchStatus";
-if (v_plandate2 != "")
- {v_plandate2 = v_plandate2 + "Z";}
-else
- {v_plandate2 = "1900-01-01T00:00:00Z";}
-
-v_req = '<_companyID>' + v_company_id + " <_taskId>" + v_taskId + " <_planDate>" + v_plandate2 + "";
-v_type = 0;
-var v_soapAction = "SupplierPortal/updatePurchStatus";
-v_resp = apiAX(v_API, v_req, v_type,v_soapAction);
-
-if (v_type == 1 && v_resp != "")
- {
- oStream = new ActiveXObject("ADODB.Stream");
- oStream.Open();
- oStream.Type = 1; // adTypeBinary
- oStream.Write(v_resp); // responseText geeft encoding problemen!
- oStream.SaveToFile ("Log/test" + v_supplier_id + ".xml", 2);
- oStream.Close();
-
- }
-return v_resp;
-}
\ No newline at end of file
diff --git a/ax/SRC/A365_GetToken.js b/ax/SRC/A365_GetToken.js
index 4d2844c..13b7fa0 100644
--- a/ax/SRC/A365_GetToken.js
+++ b/ax/SRC/A365_GetToken.js
@@ -6,31 +6,60 @@
function A365_supplierservice_GetToken (){
var v_token;
- v_token = MARX_GetToken(G_ID_ax365_supplierservice_url, G_ID_ax365_supplierservice_client_id, G_ID_ax365_supplierservice_client_secret, G_ID_ax365_supplierservice_grant_type, G_ID_ax365_supplierservice_resource, G_ID_ax365_supplierservice_scope);
+ v_token = MARX_GetToken(G_ID_ax365_supplierservice_url, G_ID_ax365_supplierservice_client_id, G_ID_ax365_supplierservice_client_secret, G_ID_ax365_supplierservice_grant_type, G_ID_ax365_supplierservice_resource, G_ID_ax365_supplierservice_scope, 0);
WriteSupplierserviceToken2File(v_token);
return v_token;
}
function A365_saxton_GetToken (){
var v_token;
- v_token = MARX_GetToken(G_ID_saxton_url, G_ID_saxton_client_id, G_ID_saxton_client_secret, G_ID_saxton_grant_type, G_ID_saxton_resource, G_ID_saxton_scope);
+ v_token = MARX_GetToken(G_ID_saxton_url, G_ID_saxton_client_id, G_ID_saxton_client_secret, G_ID_saxton_grant_type, G_ID_saxton_resource, G_ID_saxton_scope, 0);
WriteSaxtonToken2File(v_token);
return v_token;
}
function A2012_saxton_GetToken (){
var v_token;
- v_token = MARX_GetToken(G_ID_saxton_url, G_ID_saxton_client_id, G_ID_saxton_client_secret, G_ID_saxton_grant_type, G_ID_saxton_resource, G_ID_saxton_scope);
+ v_token = MARX_GetToken(G_ID_saxton_url, G_ID_saxton_client_id, G_ID_saxton_client_secret, G_ID_saxton_grant_type, G_ID_saxton_resource, G_ID_saxton_scope, 0);
WriteSaxtonToken2File(v_token);
return v_token;
}
-function MARX_GetToken (v_url, v_client_id, v_client_secret, v_grant_type, v_resource, v_scope)
+//MARX#69220 Koppeling Mareon -> Twinq
+function TWINQ_GetToken (){
+ var v_token;
+ v_token = MARX_GetToken(G_ID_saxton_url, G_ID_saxton_client_id, G_ID_saxton_client_secret, G_ID_saxton_grant_type, G_ID_saxton_resource, G_ID_saxton_scope, 1);
+ WriteSaxtonToken2File(v_token);
+ return v_token;
+}
+
+// MARX#69220 Koppeling Mareon -> Twinq
+// v_basic_authentication (0 of 1): In geval van Twinq, geldt v_basic_authentication (waarde = 1), bij T365/AX2012 geldt dat niet (waarde = 0)
+function MARX_GetToken (v_url, v_client_id, v_client_secret, v_grant_type, v_resource, v_scope, v_basic_authentication)
{
+ __Log("MARX_GetToken v_url: " + v_url,3);
+ __Log("MARX_GetToken v_client_id: " + v_client_id,3);
+ __Log("MARX_GetToken v_client_secret: " + v_client_secret,4);
+ __Log("MARX_GetToken v_grant_type: " + v_grant_type,3);
+ __Log("MARX_GetToken v_resource: " + v_resource,3);
+ __Log("MARX_GetToken v_scope: " + v_scope,3);
+ __Log("MARX_GetToken v_basic_authentication: " + v_basic_authentication,3);
- l_request_body = "client_id=" + v_client_id
+ var l_secret;
+ var l_request_body;
+ l_secret = "";
+ if (v_basic_authentication == 0)
+ { //geen basic auth, credentials in body...
+ l_request_body = "client_id=" + v_client_id
+ "&client_secret=" + v_client_secret
+ "&grant_type=" + v_grant_type;
+ }
+ else
+ { // wel basis auth, alleen granttype in body, en client_id en client secret worden in base64 omgezet...
+ l_request_body = "grant_type=" + v_grant_type;
+ var base64 = new Base64Cls();
+ l_secret = base64.encode(v_client_id + ":" + v_client_secret);
+ }
// v_resource is optioneel, in geval van AX365 is deze WEL gevuld (en in AX2012 NIET)
if (v_resource != "")
l_request_body = l_request_body + "&resource=" + v_resource;
@@ -41,7 +70,7 @@ function MARX_GetToken (v_url, v_client_id, v_client_secret, v_grant_type, v_res
var v_type = 1;
var v_contenttype = "application/x-www-form-urlencoded";
__Log("MARX_GetToken: Nieuwe token opgehaald" ,2);
- var v_resp = apiIDentity(v_url, l_request_body, v_type, v_contenttype, 0);
+ var v_resp = apiIDentity(v_url, l_request_body, v_type, v_contenttype, 0, v_basic_authentication, l_secret);
var json_resp = JSON.parse(v_resp);
var v_token = json_resp.access_token;
diff --git a/ax/SRC/AxFacilitor.js b/ax/SRC/AxFacilitor.js
index 9901272..f69923d 100644
--- a/ax/SRC/AxFacilitor.js
+++ b/ax/SRC/AxFacilitor.js
@@ -217,6 +217,16 @@ function MARX_2_REMS_Facturen(){
F_GetFacturen_REMS();
}
+// ----------------------------- TWINQ functies -----------------------------------------
+function MARX_2_TWINQ_OpdrachtStatus(){
+ F_GetOpdrachten_Statussen();
+}
+
+function MARX_2_TWINQ_Facturen(){
+ F_GetFacturen_TWINQ();
+}
+
+
// ----------------------------- Xtractor functies -----------------------------------------
function FCLT_2_AX_Facturen(){
F_GetFacturen_AX();
@@ -395,7 +405,7 @@ function AX365_2_FACILITOR()
G_Token_saxton = ReadSaxtonTokenFromFile();
__Log("G_Token_saxton ReadSaxtonTokenFromFile:" + G_Token_saxton, 4);
if (G_Token_saxton == ""){
- __Log("G_Token_saxton ReadSupplierserviceTokenFromFile is leeg:", 4);
+ __Log("G_Token_saxton ReadSaxtonTokenFromFile is leeg:", 4);
G_Token_saxton = A365_saxton_GetToken();
}
__Log("*** END Get AX Saxton Token", 2);
@@ -520,7 +530,7 @@ function MAREON_2_FACILITOR()
else{
//start else-tak "push/notifyqueue"
- __Log("*** START FCLT --> AX2012 : Verwerken van ALLE opdrachtstatussen uit Mareon naar Facilitor obv notifyqueue ***", 2);
+ __Log("*** START MAREON --> CUST.FACILITOR.NL : Verwerken van ALLE opdrachtstatussen uit Mareon naar Facilitor obv notifyqueue ***", 2);
MARX_2_FCLT_OpdrachtStatus();
__Log("*** END", 2);
@@ -588,17 +598,50 @@ function REMS_2_MAREON()
REMS_2_MARX_Opdrachten();
__Log("*** END", 2);
- __Log("*** START FCLT --> AX2012 : Verwerken van ALLE opdrachtstatussen uit Mareon naar REMS obv notifyqueue ***", 2);
+ __Log("*** START MAREON --> REMS : Verwerken van ALLE opdrachtstatussen uit Mareon naar REMS obv notifyqueue ***", 2);
MARX_2_REMS_OpdrachtStatus();
__Log("*** END", 2);
if (G_rems_facturen_xmlfolder != ""){
MARX_2_REMS_Facturen();
}
//einde else-tak "push/notifyqueue"
- }
-
+ }
}
+function MAREON_2_TWINQ()
+{
+
+ if (G_ID_saxton_url != "" && G_push_notifyqueue == "1")
+ {
+ __Log("*** START MAREON --> TWINQ : Get (Saxton) Token ***", 2);
+ G_Token_saxton = ReadSaxtonTokenFromFile();
+ __Log("G_Token_saxton ReadSaxtonTokenFromFile:" + G_Token_saxton, 4);
+ if (G_Token_saxton == ""){
+ __Log("G_Token_saxton ReadSaxtonTokenFromFile is leeg:", 4);
+ G_Token_saxton = TWINQ_GetToken();
+ }
+ __Log("*** END Get (Saxton) Token", 2);
+
+ //start "push/notifyqueue"
+ __Log("*** START MAREON --> TWINQ : Verwerken van ALLE opdrachtstatussen uit Mareon naar Twinq obv notifyqueue ***", 2);
+ MARX_2_TWINQ_OpdrachtStatus();
+ __Log("*** END", 2);
+
+ // TODO TODO
+
+ //__Log("*** START MAREON --> TWINQ: Facturen uit Mareon naar Twinq ***", 2);
+ //if (G_fclt_factuur_xmlfolder != ""){
+ // MARX_2_TWINQ_Facturen();
+ //}
+ //__Log("*** END", 2);
+ }
+ else{
+ //Geen "push/notifyqueue" ingesteld
+ __Log("*** NQ staat niet in gesteld, de koppeling naarr Twinq staat uit ***", 1);
+ }
+}
+
+
function FACILITOR_2_Xtractor()
{
@@ -625,8 +668,9 @@ function FACILITOR_2_Xtractor()
// 1.52 -- MARX#67695: Adapter genereert veel te veel logging --> Logging van base64 XML nodes (van PDF bestanden) is oorzaak, we kappen de logging daarvan af op max. 1024 tekens (1K)
// 1.53 -- MARX#67715: Uitbreiding van de communicatie van statuscodes naar REMS
// 1.54 -- MARX#69545 Factuur scanning 365 werkt niet door update in Tobias 365
+// 1.60 -- MARX#69220 Koppeling Mareon -> Twinq
-var G_Mareon_Adapter = "1.54";
+var G_Mareon_Adapter = "1.60";
//MARX#56643: Test Haagwonen inkoopordernummer ontbreekt in Mareon ION001753
var G_new_date = new Date();
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@@ -654,6 +698,8 @@ var G_Token_supplierservice = "";
var G_ax365_url_serviceax = Read_Ini_Setting("ax365","url_serviceax");
var G_Token_saxton = "";
+var G_twinq_url = Read_Ini_Setting("twinq","url");
+
// In een (1) sync sessie mogen er max 3 x een poging worden gedaan (= eigen keuze) om een Token op te halen indien deze expired zou zijn (om niet in oneindige loop te raken).
var G_AX365_Allowed_Get_Token = 3;
@@ -673,7 +719,7 @@ var G_pdf_xtractorfolder = Read_Ini_Setting("xtractor","pdffolder");
var G_ax_succeededfolder = Read_Ini_Setting("xtractor", "succeededfolder");
var G_ax_rejectedfolder = Read_Ini_Setting("xtractor", "rejectedfolder");
-// Identity Token instellingen voor de AX Saxton webservice 'CustomerPortalAX'
+// Identity Token instellingen voor de AX Saxton webservice 'CustomerPortalAX' of Twinq token service
var G_ID_saxton_url = Read_Ini_Setting("identityserver","token/url");
var G_ID_saxton_client_id = Read_Ini_Setting("identityserver","token/client_id");
var G_ID_saxton_client_secret = Read_Ini_Setting("identityserver","token/client_secret");
@@ -707,6 +753,8 @@ var G_mar_timeout = 0; //initieel 1e keer.
__Log("***XML- ax/url(ServiceAX): " + G_ax_url_serviceax, 1);
__Log("***XML- ax2012/url(SupplierService): " + G_ax2012_url, 1);
__Log("***XML- ax2012/url(ServiceAX): " + G_ax2012_url_serviceax, 1);
+ __Log("***XML- ax365/url(SupplierService): " + G_ax365_url_supplierservice, 1);
+ __Log("***XML- ax365/url(ServiceAX): " + G_ax365_url_serviceax, 1);
__Log("***XML- tobias/url: " + G_tobias_url, 1);
__Log("***XML- facilitor/url: " + G_fclt_url, 1);
__Log("***XML- facilitor/factuur/xmlfolder: " + G_fclt_factuur_xmlfolder, 1);
@@ -714,6 +762,7 @@ var G_mar_timeout = 0; //initieel 1e keer.
__Log("***XML- rems/opdrachtenfolder: " + G_rems_opdracht_xmlfolder, 1);
__Log("***XML- rems/opdrachtstatusfolder: " + G_rems_opdrachtstatus_xmlfolder, 1);
__Log("***XML- rems/facturenfolder: " + G_rems_facturen_xmlfolder, 1);
+ __Log("***XML- twinq/url: " + G_twinq_url, 1);
__Log("***XML- identityserver/token/url: " + G_ID_saxton_url, 1);
__Log("***XML- mareon/url: " + G_marx_url, 1);
__Log("***XML- xtractor/xmlfolder: " + G_ax_xtractorfolder, 1);
@@ -851,6 +900,11 @@ var G_mar_timeout = 0; //initieel 1e keer.
__Log("REMS", 2);
REMS_2_MAREON();
}
+ if (AX_or_Tobias() == "TQ")
+ {
+ __Log("TWINQ", 2);
+ MAREON_2_TWINQ();
+ }
if (G_ax_xtractorfolder != "")
{
FACILITOR_2_Xtractor();
diff --git a/ax/SRC/AxFacilitor.xml b/ax/SRC/AxFacilitor.xml
index fda17dd..22ea385 100644
--- a/ax/SRC/AxFacilitor.xml
+++ b/ax/SRC/AxFacilitor.xml
@@ -59,6 +59,10 @@
1
+
+
+
+
diff --git a/ax/SRC/Common.js b/ax/SRC/Common.js
index 364c6f7..b337415 100644
--- a/ax/SRC/Common.js
+++ b/ax/SRC/Common.js
@@ -19,7 +19,9 @@ function AX_or_Tobias(){
else {if (G_ax365_url_supplierservice != "" || G_ax365_url_serviceax != "") return "A365";
else {if (G_fclt_url != "") return "F";
else {if (G_rems_opdracht_xmlfolder != "") return "R";
- else return "";
+ else {if (G_twinq_url != "") return "TQ";
+ else return "";
+ }
}
}
}
@@ -291,6 +293,12 @@ function apiAX_GENERAL (v_API, v_req, v_type, v_soapAction, v_discard_active_abo
}
l_result = api2_AX365_inner(v_url, v_API, v_req, v_type, v_soapAction, v_discard_active_abort, v_soort_api, v_token);
}
+ if (AX_or_Tobias() == "TQ")
+ {
+ var v_url = G_twinq_url;
+ var v_token = G_Token_saxton;
+ l_result = api2_TWINQ_inner(v_url, v_API, v_req, v_type, v_soapAction, v_discard_active_abort, v_soort_api, v_token);
+ }
if (AX_or_Tobias() == "T")
{
// laatste parameter is runmethod, hier altijd 0 (= standaard runmethod van Tobias)
@@ -732,7 +740,7 @@ function api2_AX365_inner (v_Url, v_API, v_req, v_type, v_soapAction, v_discard_
G_AX365_Allowed_Get_Token = G_AX365_Allowed_Get_Token - 1;
switch (v_soort_api){
case 1: G_Token_supplierservice = A365_supplierservice_GetToken(); var l_token = G_Token_supplierservice; break;
- case 2: G_Token_saxton = A2012_saxton_GetToken(); var l_token = G_Token_saxton; break;
+ case 2: G_Token_saxton = A365_saxton_GetToken(); var l_token = G_Token_saxton; break;
}
// We mogen nu de functie zelf nog eens aanroepen (iteratief).
@@ -769,15 +777,143 @@ function api2_AX365_inner (v_Url, v_API, v_req, v_type, v_soapAction, v_discard_
}
}
+// Levert/retourneert een rij (struct) op van de volgende waarden:
+// api_status_code: 0 of 1, 0 = fout gegaan, 1 = goed gegaan
+// api_status_message: statustekst behorende bij status_code (http.statusText)
+// api_response_message: response-berecht van webservice (api) die wordt aangeroepen.
+function api2_TWINQ_inner (v_Url, v_API, v_req, v_type, v_soapAction, v_discard_active_abort, v_soort_api, v_token)
+{
+ __Log("api2_TWINQ_inner v_API: " + v_API, 3);
+ __Log("api2_TWINQ_inner v_type: " + v_type, 3);
+ __Log("api2_TWINQ_inner v_req: " + v_req, 3);
+ __Log("api2_TWINQ_inner v_discard_active_abort: " + v_discard_active_abort, 3);
+ __Log("api2_TWINQ_inner v_soort_api: " + v_soort_api, 3);
+
+ var lResolve = 0;
+ var lConnect = 60 * 1000;
+ var lSend = 30 * 1000;
-function apiIDentity (v_url, v_req, v_type, v_contenttype, v_discard_active_abort)
+ var xmlhttp = new ActiveXObject("MSXML2.ServerXMLHTTP.6.0");
+ SXH_PROXY_SET_PROXY = 2;
+ if (typeof proxy != "undefined" && proxy)
+ xmlhttp.setProxy(SXH_PROXY_SET_PROXY, proxy);
+
+ xmlhttp.open("POST", v_Url, false);
+
+ __Log("api2_TWINQ_inner v_token: " + v_token, 4);
+ xmlhttp.setRequestHeader("Authorization", "Bearer " + v_token);
+ xmlhttp.setRequestHeader("Content-Type", "text/plain");
+ var v_msg = v_req;
+
+ __Log("api2_TWINQ_inner v_msg: " + v_msg, 4);
+
+ if (G_mar_timeout != 0){
+ //MARX#57502: AX Adapter robuuster maken, instelbare timeout
+ xmlhttp.setTimeouts(lResolve, lConnect, lSend, G_mar_timeout * 1000);
+ }
+ try {
+ xmlhttp.send(v_msg);
+ var txt = xmlhttp.responseText;
+ }
+ catch (e)
+ {
+ //MARX#57502: AX Adapter robuuster maken: Waarschijnlijk timeout-error
+ var txt = "api2_TWINQ_inner failed/timeout: " + e.description;
+ __Log(txt,1);
+ if (G_abort_http_error == 1)
+ {
+ MARXQUIT(v_discard_active_abort);
+ }
+ return {api_status_code: 0, api_status_message: "", api_response_message: txt};
+ //return "";
+ }
+ var l_statusText = xmlhttp.status + " " + xmlhttp.statusText;
+
+ if (xmlhttp.status >= 200 && xmlhttp.status <= 299)
+ {
+ try
+ {
+ __Log("api2_TWINQ_inner XML Response = TRUE :", 3);
+ __Log("api2_TWINQ_inner XML Response :" + txt, 3);
+ return {api_status_code: 1, api_status_message: l_statusText, api_response_message: txt};
+ //return txt;
+ }
+ catch (e)
+ {
+ // Waarschijnlijk http-error terug gekregen
+ return {api_status_code: 1, api_status_message: l_statusText, api_response_message: txt};
+ //return "";
+ }
+ }
+ else
+ { __Log("api2_TWINQ_inner XML Response = FALSE :",1);
+ __Log("api2_TWINQ_inner - HTTP <> 2xx",1);
+ __Log("api2_TWINQ_inner URL: " + v_Url,1);
+ __Log("api2_TWINQ_inner Message: " + v_msg.substr(0,4*1024),1);
+ __Log("api2_TWINQ_inner Status: "+ l_statusText,1);
+ l_resp = xmlhttp.responseText;
+ __Log("api2_TWINQ_inner ResponseText:" + l_resp,1);
+
+ if (xmlhttp.status == 500 || xmlhttp.status == 401){
+ // SupplierService geeft HTTP 500 in geval van Unauthorized, AX Saxton webservice 'CustomerPortalAX' geeft HTTP 401
+ // Token expired? Kan heel goed mogelijk zijn, token heeft geldigheid van uur, en is om
+ // Als in response (dit is XML) de faultcode forbidden is, dan is dat het geval:
+ // a:Forbidden
+ // Bij HTTP401 (in geval CustomerPortalAX) is er geen XML die terugkomt.
+ // MARX#69545 Factuur scanning 365 werkt niet door update in Tobias 365, vandaar extra check op NativeErrorCode 1287
+ if (xmlhttp.status == 401) {
+ // Forbidden gevonden, we doen een retry, door een nieuwe token op te halen / op te vragen, max. 3 x in een sync (G_AX365_Allowed_Get_Token > 0)
+ if (G_AX365_Allowed_Get_Token > 0){
+ G_AX365_Allowed_Get_Token = G_AX365_Allowed_Get_Token - 1;
+ G_Token_saxton = TWINQ_GetToken(); var l_token = G_Token_saxton;
+
+
+ // We mogen nu de functie zelf nog eens aanroepen (iteratief).
+ l_result = api2_TWINQ_inner (v_Url, v_API, v_req, v_type, v_soapAction, v_discard_active_abort, v_soort_api, l_token);
+ return l_result;
+ }
+ else{
+ __Log("api2_TWINQ_inner: Token problem, maximum van 3 pogingen zijn allemaal mislukt" ,1);
+ if (G_abort_http_error == 1)
+ {
+ MARXQUIT(v_discard_active_abort);
+ }
+ return {api_status_code: 0, api_status_message: l_statusText, api_response_message: txt};
+ //return ""
+ }
+
+ }
+ else{
+ if (G_abort_http_error == 1)
+ {
+ MARXQUIT(v_discard_active_abort);
+ }
+ return {api_status_code: 0, api_status_message: l_statusText, api_response_message: txt};
+ //return ""
+ }
+ }
+ else {
+ if (G_abort_http_error == 1)
+ {
+ MARXQUIT(v_discard_active_abort);
+ }
+ return {api_status_code: 0, api_status_message: l_statusText, api_response_message: txt};
+ }
+ }
+}
+
+
+
+function apiIDentity (v_url, v_req, v_type, v_contenttype, v_discard_active_abort, v_basic_authentication, v_secret)
{
__Log("apiIDentity v_url: " + v_url, 3);
__Log("apiIDentity v_req: " + v_req, 3);
__Log("apiIDentity v_type: " + v_type, 3);
__Log("apiIDentity v_discard_active_abort: " + v_discard_active_abort, 3);
+ __Log("apiIDentity v_basic_authentication: " + v_basic_authentication, 3);
+
var lResolve = 0;
var lConnect = 60 * 1000;
@@ -791,6 +927,11 @@ function apiIDentity (v_url, v_req, v_type, v_contenttype, v_discard_active_abor
xmlhttp.open("POST", v_url, false);
xmlhttp.setRequestHeader("Content-Type", v_contenttype);
+ if (v_basic_authentication == 1)
+ {
+ __Log("apiIDentity l_secret: " + v_secret, 4);
+ xmlhttp.setRequestHeader("Authorization", "Basic " + v_secret);
+ }
if (G_mar_timeout != 0){
//MARX#57502: AX Adapter robuuster maken, instelbare timeout
@@ -1342,6 +1483,10 @@ function MARX_substr (v_str, v_char, v_last){
return l_result;
}
+function MARX_replaceAll(str, find, replace) {
+ return str.replace(new RegExp(find, 'g'), replace);
+}
+
function STR_2_XML (v_str){
var xmldoc = new ActiveXObject("Msxml2.DOMDocument.6.0");
xmldoc.async = false;
@@ -1393,6 +1538,159 @@ function __Log_XML(p_xmldoc, p_node, level){
}
}
+// Copied from \UTILS\PutOrders\puo_base64.js
+function Base64Cls()
+{
+ // Private variabelen
+ this._keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
+
+ // Public functies
+ this.encode = _encode;
+ this.decode = _decode;
+
+
+ // private method for UTF-8 encoding
+ function utf8_encode(string)
+ {
+ string = string.replace(/\r\n/g,"\n");
+ var utftext = "";
+
+ for (var n = 0; n < string.length; n++)
+ {
+ var c = string.charCodeAt(n);
+
+ if (c < 128)
+ {
+ utftext += String.fromCharCode(c);
+ }
+ else if((c > 127) && (c < 2048))
+ {
+ utftext += String.fromCharCode((c >> 6) | 192);
+ utftext += String.fromCharCode((c & 63) | 128);
+ }
+ else
+ {
+ utftext += String.fromCharCode((c >> 12) | 224);
+ utftext += String.fromCharCode(((c >> 6) & 63) | 128);
+ utftext += String.fromCharCode((c & 63) | 128);
+ }
+ }
+ return utftext;
+ }
+
+ // private method for UTF-8 decoding
+ function utf8_decode(utftext)
+ {
+ var string = "";
+ var i = 0;
+ var c = c1 = c2 = 0;
+
+ while ( i < utftext.length )
+ {
+ c = utftext.charCodeAt(i);
+
+ if (c < 128)
+ {
+ string += String.fromCharCode(c);
+ i++;
+ }
+ else if((c > 191) && (c < 224))
+ {
+ c2 = utftext.charCodeAt(i+1);
+ string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
+ i += 2;
+ }
+ else
+ {
+ c2 = utftext.charCodeAt(i+1);
+ c3 = utftext.charCodeAt(i+2);
+ string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
+ i += 3;
+ }
+
+ }
+ return string;
+ }
+
+
+ function _encode(input)
+ {
+ var output = "";
+ var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
+ var i = 0;
+
+ input = utf8_encode(input);
+
+ while (i < input.length)
+ {
+ chr1 = input.charCodeAt(i++);
+ chr2 = input.charCodeAt(i++);
+ chr3 = input.charCodeAt(i++);
+
+ enc1 = chr1 >> 2;
+ enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
+ enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
+ enc4 = chr3 & 63;
+
+ if (isNaN(chr2))
+ {
+ enc3 = enc4 = 64;
+ }
+ else if (isNaN(chr3))
+ {
+ enc4 = 64;
+ }
+
+ output = output +
+ this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
+ this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
+
+ }
+ return output;
+ }
+
+ function _decode(input)
+ {
+ var output = "";
+ var chr1, chr2, chr3;
+ var enc1, enc2, enc3, enc4;
+ var i = 0;
+
+ input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
+
+ while (i < input.length)
+ {
+ enc1 = this._keyStr.indexOf(input.charAt(i++));
+ enc2 = this._keyStr.indexOf(input.charAt(i++));
+ enc3 = this._keyStr.indexOf(input.charAt(i++));
+ enc4 = this._keyStr.indexOf(input.charAt(i++));
+
+ chr1 = (enc1 << 2) | (enc2 >> 4);
+ chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
+ chr3 = ((enc3 & 3) << 6) | enc4;
+
+ output = output + String.fromCharCode(chr1);
+
+ if (enc3 != 64)
+ {
+ output = output + String.fromCharCode(chr2);
+ }
+ if (enc4 != 64)
+ {
+ output = output + String.fromCharCode(chr3);
+ }
+ }
+ output = utf8_decode(output);
+
+ return output;
+ }
+
+
+}
+
+
+
+
function encodeBase64(p_bytes){
l_xml=new ActiveXObject("Msxml2.DOMDocument.6.0");
// Create temporary node with Base64 data type
diff --git a/ax/SRC/F_GetOpdrachtenAcceptedRefused.js b/ax/SRC/F_GetOpdrachtenAcceptedRefused.js
index f8837d4..59f63de 100644
--- a/ax/SRC/F_GetOpdrachtenAcceptedRefused.js
+++ b/ax/SRC/F_GetOpdrachtenAcceptedRefused.js
@@ -66,15 +66,15 @@ function F_GetOpdrachten_AcceptRefuse()
v_mld_opdr_extrainfo = escapeXml(v_mld_opdr_extrainfo);
if (v_srtnotificatie_code == 'ORDACP') {
- GEN_AcceptServiceTask(v_company_id, v_taskId, v_externnr, v_mld_opdr_extrainfo);
+ GEN_AcceptServiceTask(v_company_id, "", "", v_taskId, v_externnr, v_mld_opdr_extrainfo);
}
if (v_srtnotificatie_code == 'ORDCAN') {
- GEN_RefuseServiceTask(v_company_id, v_taskId, v_externnr, "GEWEIGERD", v_mld_opdr_extrainfo);
+ GEN_RefuseServiceTask(v_company_id, "", "", v_taskId, v_externnr, "GEWEIGERD", v_mld_opdr_extrainfo);
}
if (v_srtnotificatie_code == 'ORDANN') {
- GEN_AnnuleerServiceTask(v_company_id, v_taskId, "ANN", v_externnr, v_mld_opdr_extrainfo, "-1");
+ GEN_AnnuleerServiceTask(v_company_id, "", "", v_taskId, "ANN", v_externnr, v_mld_opdr_extrainfo, "-1");
}
i = i + 1;
@@ -83,7 +83,7 @@ function F_GetOpdrachten_AcceptRefuse()
}
}
-function GEN_AcceptServiceTask(v_company_id, v_taskId, v_externnr, v_mld_opdr_extrainfo)
+function GEN_AcceptServiceTask(v_company_id, v_woco_gln, v_lev_gln, v_taskId, v_externnr, v_mld_opdr_extrainfo)
{
var v_resp;
if (AX_or_Tobias() == "A") {
@@ -101,13 +101,16 @@ function GEN_AcceptServiceTask(v_company_id, v_taskId, v_externnr, v_mld_opdr_ex
if (AX_or_Tobias() == "F") {
v_resp = FCLT_SetOpdrachtStatus (v_company_id, v_taskId, v_externnr, "ORDACP", "");
}
- if (AX_or_Tobias() == "R") {
+ if (AX_or_Tobias() == "R") {
v_resp = R_SetOpdrachtStatus (v_company_id, v_taskId, v_externnr, "ACC", "", v_mld_opdr_extrainfo);
}
+ if (AX_or_Tobias() == "TQ") {
+ v_resp = TQ_SetOpdrachtStatus (v_company_id, v_woco_gln, v_lev_gln, v_taskId, v_externnr, "ACC", v_mld_opdr_extrainfo, "-1");
+ }
return v_resp;
}
-function GEN_RefuseServiceTask(v_company_id, v_taskId, v_externnr, v_code_geweigerd, v_mld_opdr_extrainfo)
+function GEN_RefuseServiceTask(v_company_id, v_woco_gln, v_lev_gln, v_taskId, v_externnr, v_code_geweigerd, v_mld_opdr_extrainfo)
{
var v_resp;
@@ -129,12 +132,14 @@ function GEN_RefuseServiceTask(v_company_id, v_taskId, v_externnr, v_code_geweig
if (AX_or_Tobias() == "R") {
v_resp = R_SetOpdrachtStatus (v_company_id, v_taskId, v_externnr, "WEI", "", v_mld_opdr_extrainfo);
}
-
+ if (AX_or_Tobias() == "TQ") {
+ v_resp = TQ_SetOpdrachtStatus (v_company_id, v_woco_gln, v_lev_gln, v_taskId, v_externnr, "WEI", v_mld_opdr_extrainfo, "-1");
+ }
return v_resp;
}
-function GEN_AnnuleerServiceTask(v_company_id, v_taskId, v_statuscode, v_externnr, v_mld_opdr_extrainfo, v_date)
+function GEN_AnnuleerServiceTask(v_company_id, v_woco_gln, v_lev_gln, v_taskId, v_statuscode, v_externnr, v_mld_opdr_extrainfo, v_date)
{
var v_resp;
@@ -156,6 +161,8 @@ function GEN_AnnuleerServiceTask(v_company_id, v_taskId, v_statuscode, v_externn
if (AX_or_Tobias() == "R") {
v_resp = R_SetOpdrachtStatus (v_company_id, v_taskId, v_externnr, v_statuscode, "", v_mld_opdr_extrainfo);
}
-
+ if (AX_or_Tobias() == "TQ") {
+ v_resp = TQ_SetOpdrachtStatus (v_company_id, v_woco_gln, v_lev_gln, v_taskId, v_externnr, v_statuscode, v_mld_opdr_extrainfo, "-1");
+ }
return v_resp;
}
\ No newline at end of file
diff --git a/ax/SRC/F_GetOpdrachtenAfgemeld.js b/ax/SRC/F_GetOpdrachtenAfgemeld.js
index 47f677a..83885b3 100644
--- a/ax/SRC/F_GetOpdrachtenAfgemeld.js
+++ b/ax/SRC/F_GetOpdrachtenAfgemeld.js
@@ -51,7 +51,7 @@ function F_GetOpdrachten_Afgemeld()
//MARX#56792: XML equivalent van & < > etc toepassen...
v_extraInfo = escapeXml(v_extraInfo);
- GEN_CompleteServiceTask(v_company_id, v_taskId, v_externnr, v_extraInfo, v_dateComplete);
+ GEN_CompleteServiceTask(v_company_id, "", "", v_taskId, v_externnr, v_extraInfo, v_dateComplete);
i = i + 1;
var strQuery = "//xml/mld_ordr[" + i + "]";
@@ -59,7 +59,7 @@ function F_GetOpdrachten_Afgemeld()
}
}
-function GEN_CompleteServiceTask(v_company_id, v_taskId, v_externnr, v_extraInfo, v_dateComplete)
+function GEN_CompleteServiceTask(v_company_id, v_woco_gln, v_lev_gln, v_taskId, v_externnr, v_extraInfo, v_dateComplete)
{
var v_resp;
@@ -81,6 +81,8 @@ function GEN_CompleteServiceTask(v_company_id, v_taskId, v_externnr, v_extraInfo
if (AX_or_Tobias() == "R") {
v_resp = R_SetOpdrachtStatus (v_company_id, v_taskId, v_externnr, "GER", v_dateComplete, v_extraInfo);
}
-
+ if (AX_or_Tobias() == "TQ") {
+ v_resp = TQ_SetOpdrachtStatus (v_company_id, v_woco_gln, v_lev_gln, v_taskId, v_externnr, "GER", v_extraInfo, v_dateComplete);
+ }
return v_resp;
}
diff --git a/ax/SRC/F_GetOpdrachtenFinancAfgerond.js b/ax/SRC/F_GetOpdrachtenFinancAfgerond.js
index 816f7de..97f9341 100644
--- a/ax/SRC/F_GetOpdrachtenFinancAfgerond.js
+++ b/ax/SRC/F_GetOpdrachtenFinancAfgerond.js
@@ -82,6 +82,8 @@ function GEN_FinancAfrondenServiceTask(v_company_id, v_taskId, v_externnr, v_opd
if (AX_or_Tobias() == "R") {
v_resp = {api_status_code: 1, api_status_message: "", api_response_message: ""};
}
-
+ if (AX_or_Tobias() == "TQ") {
+ v_resp = {api_status_code: 1, api_status_message: "", api_response_message: ""};
+ }
return v_resp;
}
\ No newline at end of file
diff --git a/ax/SRC/F_GetOpdrachtenGepland.js b/ax/SRC/F_GetOpdrachtenGepland.js
index 15ec055..b2c9dd7 100644
--- a/ax/SRC/F_GetOpdrachtenGepland.js
+++ b/ax/SRC/F_GetOpdrachtenGepland.js
@@ -52,7 +52,7 @@ function F_GetOpdrachten_Gepland()
//MARX#56792: XML equivalent van & < > etc toepassen...
v_extraInfo = escapeXml(v_extraInfo);
- GEN_PlanServiceTask(v_company_id, v_taskId, v_externnr, v_extraInfo, v_date);
+ GEN_PlanServiceTask(v_company_id, "", "", v_taskId, v_externnr, v_extraInfo, v_date);
i = i + 1;
var strQuery = "//xml/mld_ordr[" + i + "]";
@@ -60,7 +60,7 @@ function F_GetOpdrachten_Gepland()
}
}
-function GEN_PlanServiceTask(v_company_id, v_taskId, v_externnr, v_extraInfo, v_date)
+function GEN_PlanServiceTask(v_company_id, v_woco_gln, v_lev_gln, v_taskId, v_externnr, v_extraInfo, v_date)
{
var v_resp;
if (AX_or_Tobias() == "A") {
@@ -81,6 +81,8 @@ function GEN_PlanServiceTask(v_company_id, v_taskId, v_externnr, v_extraInfo, v_
if (AX_or_Tobias() == "R") {
v_resp = R_SetOpdrachtStatus (v_company_id, v_taskId, v_externnr, "AFH", v_date, v_extraInfo);
}
-
+ if (AX_or_Tobias() == "TQ") {
+ v_resp = TQ_SetOpdrachtStatus (v_company_id, v_woco_gln, v_lev_gln, v_taskId, v_externnr, "AFH", v_extraInfo, v_date);
+ }
return v_resp;
}
\ No newline at end of file
diff --git a/ax/SRC/F_GetOpdrachtenOnderbroken.js b/ax/SRC/F_GetOpdrachtenOnderbroken.js
index b8a0377..08b4907 100644
--- a/ax/SRC/F_GetOpdrachtenOnderbroken.js
+++ b/ax/SRC/F_GetOpdrachtenOnderbroken.js
@@ -51,7 +51,7 @@ function F_GetOpdrachten_Onderbroken()
//MARX#56792: XML equivalent van & < > etc toepassen...
v_extraInfo = escapeXml(v_extraInfo);
- GEN_OnderbreekServiceTask(v_company_id, v_taskId, v_statuscode, v_externnr, v_extraInfo, "-1");
+ GEN_OnderbreekServiceTask(v_company_id, "", "", v_taskId, v_statuscode, v_externnr, v_extraInfo, "-1");
i = i + 1;
var strQuery = "//xml/mld_ordr[" + i + "]";
@@ -60,7 +60,7 @@ function F_GetOpdrachten_Onderbroken()
}
-function GEN_OnderbreekServiceTask(v_company_id, v_taskId, v_statuscode, v_externnr, v_extraInfo, v_date)
+function GEN_OnderbreekServiceTask(v_company_id, v_woco_gln, v_lev_gln, v_taskId, v_statuscode, v_externnr, v_extraInfo, v_date)
{
var v_resp;
if (AX_or_Tobias() == "A") {
@@ -81,13 +81,15 @@ function GEN_OnderbreekServiceTask(v_company_id, v_taskId, v_statuscode, v_exter
if (AX_or_Tobias() == "R") {
v_resp = R_SetOpdrachtStatus (v_company_id, v_taskId, v_externnr, v_statuscode, "", v_extraInfo);
}
-
+ if (AX_or_Tobias() == "TQ") {
+ v_resp = TQ_SetOpdrachtStatus (v_company_id, v_woco_gln, v_lev_gln, v_taskId, v_externnr, v_statuscode, v_extraInfo, v_date);
+ }
return v_resp;
}
// Dezelfde functie als GEN_OnderbreekServiceTask, maar wordt alleen uitgevoerd als de onderbreek-status afwijkt van laatst gestuurde onderbreek-status, en nadat bericht is gestuurd, wordt deze laatste
// onderbreekstatus in Mareon vastgelegd/geregistreerd, voor de volgende keer.
-function GEN_Conditioneel_OnderbreekServiceTask (v_opdr_key, v_company_id, v_taskId, v_statuscode, v_externnr, v_extraInfo, v_date){
+function GEN_Conditioneel_OnderbreekServiceTask (v_opdr_key, v_company_id, v_woco_gln, v_lev_gln, v_taskId, v_statuscode, v_externnr, v_extraInfo, v_date){
var v_resp;
//Default gaan we ervan uit dat de response goed gaat/is, en dus de notify uit de queue kan...
v_resp = {api_status_code: 1, api_status_message: "", api_response_message: ""};
@@ -96,7 +98,7 @@ function GEN_Conditioneel_OnderbreekServiceTask (v_opdr_key, v_company_id, v_tas
v_laatste_statuscode_Mareon = F_GetOpdracht_Laatse_Onderbreekcode (v_opdr_key);
if (v_statuscode != v_laatste_statuscode_Mareon){
// De statuscode die nu wordt gestuurd, wijkt af van de laatste statuscode, dus: opsturen naar ERP odprachtgever...
- v_resp = GEN_OnderbreekServiceTask(v_company_id, v_taskId, v_statuscode, v_externnr, v_extraInfo, v_date);
+ v_resp = GEN_OnderbreekServiceTask(v_company_id, v_woco_gln, v_lev_gln, v_taskId, v_statuscode, v_externnr, v_extraInfo, v_date);
if (v_resp.api_status_code == 1){
// then goed verwerkt, stuur naar Mareon dat deze (laatst) gestuurde onderbreek-code naar ERP opdrachtgever goed is verwerkt, en registreer deze onderbreek-code, om dubbele berichten te voorkomen
MARX_Send_Succes_Or_Failure(v_opdr_key, "OPDR_POST_ONDERBREEK", v_statuscode);
diff --git a/ax/SRC/F_GetOpdrachtenOpmerking.js b/ax/SRC/F_GetOpdrachtenOpmerking.js
index 12d1787..7e79e93 100644
--- a/ax/SRC/F_GetOpdrachtenOpmerking.js
+++ b/ax/SRC/F_GetOpdrachtenOpmerking.js
@@ -78,6 +78,9 @@ function GEN_SetSupplierText(v_company_id, v_taskId, v_externnr, v_extraInfo)
if (AX_or_Tobias() == "R") {
v_resp = R_SetOpdrachtStatus (v_company_id, v_taskId, v_externnr, "", "", v_extraInfo);
}
+ if (AX_or_Tobias() == "TQ") {
+ v_resp = {api_status_code: 1, api_status_message: "", api_response_message: ""};
+ }
return v_resp;
}
diff --git a/ax/SRC/F_GetOpdrachtenStatussen.js b/ax/SRC/F_GetOpdrachtenStatussen.js
index ede110b..632a129 100644
--- a/ax/SRC/F_GetOpdrachtenStatussen.js
+++ b/ax/SRC/F_GetOpdrachtenStatussen.js
@@ -154,6 +154,10 @@ function do_exec_opdrstatus(p_order, p_min_fac_tracking_datum_ordupd){
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_woco_gln = p_order.woco_prs_leverancier_nr; // eg "1234567890123"
+ var l_lev_gln = p_order.lev_prs_leverancier_nr; // eg "1234567890123"
+
//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"
@@ -226,7 +230,7 @@ function do_exec_opdrstatus(p_order, p_min_fac_tracking_datum_ordupd){
case "ORDACP":
// Geaccepteerde opdracht
- l_response = GEN_AcceptServiceTask(l_ax_company_id, l_mld_opdr_ordernr, l_mld_opdr_externnr, l_mld_opdr_opmerking);
+ l_response = GEN_AcceptServiceTask(l_ax_company_id, l_woco_gln, l_lev_gln, l_mld_opdr_ordernr, l_mld_opdr_externnr, l_mld_opdr_opmerking);
break;
case "ORDUPD":
@@ -248,7 +252,7 @@ function do_exec_opdrstatus(p_order, p_min_fac_tracking_datum_ordupd){
// 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_ordernr, l_mld_opdr_onderbreek_code, l_mld_opdr_externnr, l_mld_opdr_opmerking, "-1");
+ l_response = GEN_Conditioneel_OnderbreekServiceTask(l_mld_opdr_key, l_ax_company_id, l_woco_gln, l_lev_gln, l_mld_opdr_ordernr, l_mld_opdr_onderbreek_code, l_mld_opdr_externnr, l_mld_opdr_opmerking, "-1");
}
}
// 3. bijlage(n)
@@ -278,7 +282,7 @@ function do_exec_opdrstatus(p_order, p_min_fac_tracking_datum_ordupd){
case "ORDPLD":
// Gewijzigde Start Plandatum bij opdracht
if (l_mld_opdr_plandatum != ""){
- l_response = GEN_PlanServiceTask(l_ax_company_id, l_mld_opdr_ordernr, l_mld_opdr_externnr, l_mld_opdr_opmerking, l_mld_opdr_plandatum);
+ l_response = GEN_PlanServiceTask(l_ax_company_id, l_woco_gln, l_lev_gln, l_mld_opdr_ordernr, l_mld_opdr_externnr, l_mld_opdr_opmerking, l_mld_opdr_plandatum);
}
else{
// Uit de NQ halen
@@ -289,7 +293,7 @@ function do_exec_opdrstatus(p_order, p_min_fac_tracking_datum_ordupd){
case "ORDPL2":
// Gewijzigde Eind Plandatum bij opdracht
if (l_mld_opdr_plandatum2 != ""){
- l_response = GEN_VerlengServiceTask(l_ax_company_id, l_mld_opdr_ordernr, "VER", l_mld_opdr_externnr, l_mld_opdr_opmerking, l_mld_opdr_plandatum2);
+ l_response = GEN_VerlengServiceTask(l_ax_company_id, l_woco_gln, l_lev_gln, l_mld_opdr_ordernr, "VER", l_mld_opdr_externnr, l_mld_opdr_opmerking, l_mld_opdr_plandatum2);
}
else{
// Uit de NQ halen
@@ -299,21 +303,21 @@ function do_exec_opdrstatus(p_order, p_min_fac_tracking_datum_ordupd){
case "ORDHLT":
// Opdracht is onderbroken
- l_response = GEN_Conditioneel_OnderbreekServiceTask(l_mld_opdr_key, l_ax_company_id, l_mld_opdr_ordernr, l_mld_opdr_onderbreek_code, l_mld_opdr_externnr, l_mld_opdr_opmerking, "-1");
+ l_response = GEN_Conditioneel_OnderbreekServiceTask(l_mld_opdr_key, l_ax_company_id, l_woco_gln, l_lev_gln, l_mld_opdr_ordernr, 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, l_mld_opdr_ordernr, "UIT", l_mld_opdr_externnr, l_mld_opdr_opmerking, "-1");
+ l_response = GEN_UitvoeringServiceTask_ResetOnderbreek(l_mld_opdr_key, l_ax_company_id, l_woco_gln, l_lev_gln, l_mld_opdr_ordernr, "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);
+ l_response = GEN_RefuseServiceTask(l_ax_company_id, l_woco_gln, l_lev_gln, 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, l_mld_opdr_ordernr, "ANN", l_mld_opdr_externnr, l_mld_opdr_opmerking, "-1");
+ l_response = GEN_AnnuleerServiceTask(l_ax_company_id, l_woco_gln, l_lev_gln, l_mld_opdr_ordernr, "ANN", l_mld_opdr_externnr, l_mld_opdr_opmerking, "-1");
}
break;
diff --git a/ax/SRC/F_GetOpdrachtenUitvoer.js b/ax/SRC/F_GetOpdrachtenUitvoer.js
index 3fb5892..bee0631 100644
--- a/ax/SRC/F_GetOpdrachtenUitvoer.js
+++ b/ax/SRC/F_GetOpdrachtenUitvoer.js
@@ -47,7 +47,7 @@ function F_GetOpdrachten_Uitvoer()
//MARX#56792: XML equivalent van & < > etc toepassen...
v_extraInfo = escapeXml(v_extraInfo);
- GEN_UitvoeringServiceTask(v_company_id, v_taskId, "UIT", v_externnr, v_extraInfo, "-1");
+ GEN_UitvoeringServiceTask(v_company_id, "", "", v_taskId, "UIT", v_externnr, v_extraInfo, "-1");
i = i + 1;
var strQuery = "//xml/mld_ordr[" + i + "]";
@@ -55,7 +55,7 @@ function F_GetOpdrachten_Uitvoer()
}
}
-function GEN_UitvoeringServiceTask(v_company_id, v_taskId, v_statuscode, v_externnr, v_extraInfo, v_date)
+function GEN_UitvoeringServiceTask(v_company_id, v_woco_gln, v_lev_gln, v_taskId, v_statuscode, v_externnr, v_extraInfo, v_date)
{
var v_resp;
if (AX_or_Tobias() == "A") {
@@ -76,16 +76,18 @@ function GEN_UitvoeringServiceTask(v_company_id, v_taskId, v_statuscode, v_exter
if (AX_or_Tobias() == "R") {
v_resp = R_SetOpdrachtStatus (v_company_id, v_taskId, v_externnr, v_statuscode, "", v_extraInfo);
}
-
+ if (AX_or_Tobias() == "TQ") {
+ v_resp = TQ_SetOpdrachtStatus (v_company_id, v_woco_gln, v_lev_gln, v_taskId, v_externnr, v_statuscode, v_extraInfo, v_date);
+ }
return v_resp;
}
// Dezelfde functie als GEN_UitvoeringServiceTask, maar nadat bericht is gestuurd, wordt deze laatste onderbreekstatus in Mareon gewist, voor de volgende keer altijd (=onvoorwaardelijk) een onderbreekcode wordt gestuurd.
-function GEN_UitvoeringServiceTask_ResetOnderbreek (v_opdr_key, v_company_id, v_taskId, v_statuscode, v_externnr, v_extraInfo, v_date){
+function GEN_UitvoeringServiceTask_ResetOnderbreek (v_opdr_key, v_company_id, v_woco_gln, v_lev_gln, v_taskId, v_statuscode, v_externnr, v_extraInfo, v_date){
var v_resp;
//Default gaan we ervan uit dat de response goed gaat/is, en dus de notify uit de queue kan...
- v_resp = GEN_UitvoeringServiceTask(v_company_id, v_taskId, v_statuscode, v_externnr, v_extraInfo, v_date);
+ v_resp = GEN_UitvoeringServiceTask(v_company_id, v_woco_gln, v_lev_gln, v_taskId, v_statuscode, v_externnr, v_extraInfo, v_date);
if (v_resp.api_status_code == 1){
// then goed verwerkt, stuur naar Mareon dat de (laatst) gestuurde onderbreek-code naar ERP opdrachtgever gewist/gedelete kan worden.
MARX_Send_Succes_Or_Failure(v_opdr_key, "OPDR_POST_ONDERBREEK", "");
diff --git a/ax/SRC/F_GetOpdrachtenVerlengd.js b/ax/SRC/F_GetOpdrachtenVerlengd.js
index b98f719..a8bd2b6 100644
--- a/ax/SRC/F_GetOpdrachtenVerlengd.js
+++ b/ax/SRC/F_GetOpdrachtenVerlengd.js
@@ -50,7 +50,7 @@ function F_GetOpdrachten_Verlengd()
//MARX#56792: XML equivalent van & < > etc toepassen...
v_extraInfo = escapeXml(v_extraInfo);
- GEN_VerlengServiceTask(v_company_id, v_taskId, "VER", v_externnr, v_extraInfo, v_date);
+ GEN_VerlengServiceTask(v_company_id, "", "", v_taskId, "VER", v_externnr, v_extraInfo, v_date);
i = i + 1;
var strQuery = "//xml/mld_ordr[" + i + "]";
@@ -58,7 +58,7 @@ function F_GetOpdrachten_Verlengd()
}
}
-function GEN_VerlengServiceTask(v_company_id, v_taskId, v_statuscode, v_externnr, v_extraInfo, v_date)
+function GEN_VerlengServiceTask(v_company_id, v_woco_gln, v_lev_gln, v_taskId, v_statuscode, v_externnr, v_extraInfo, v_date)
{
var v_resp;
if (AX_or_Tobias() == "A") {
@@ -79,6 +79,8 @@ function GEN_VerlengServiceTask(v_company_id, v_taskId, v_statuscode, v_externnr
if (AX_or_Tobias() == "R") {
v_resp = R_SetOpdrachtStatus (v_company_id, v_taskId, v_externnr, v_statuscode, v_date, v_extraInfo);
}
-
+ if (AX_or_Tobias() == "TQ") {
+ v_resp = TQ_SetOpdrachtStatus (v_company_id, v_woco_gln, v_lev_gln, v_taskId, v_externnr, v_statuscode, v_extraInfo, v_date);
+ }
return v_resp;
}
diff --git a/ax/SRC/TQ_SetOpdrachtStatus.js b/ax/SRC/TQ_SetOpdrachtStatus.js
new file mode 100644
index 0000000..56b37df
--- /dev/null
+++ b/ax/SRC/TQ_SetOpdrachtStatus.js
@@ -0,0 +1,144 @@
+// --------------------------------------------------------------------------------------
+// TQ_SetOpdrachtStatus.js
+// Copyright 2021 Facilitor. 053-4800 700, helpdesk@mareon.nl
+// Written by MB
+//
+
+//Berichtvoorbeeld
+//Voorbeeld Body: dit is een SALES005 ketenstandaard MaintenanceStatus XML-bericht:
+//
+
+
+//
+//
+//1234
+//2021-12-16
+//10:27:30
+//
+// 8712345000011
+//
+//
+// 8712345000004
+//
+//
+// ION000001
+// GER
+// 2021-12-15
+// XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
+//
+// 2018-07-17 Afspraakdatum
+// 00:00:00 Afspraaktijd
+//
+// 2018-07-16
+// 00:00:00
+// 2018-07-18 Verlengingsdatum
+// 00:00:00 Verlengingstijd
+//
+//
+//
+//
+
+// v_company_id is AX365 bedrijf-id
+// v_statuscode is een van de vaste/afgesproken (ketenstandaard) statuscode, bv ACC, GER, etc
+// v_purchId is het opdracht/ION nr van AX365
+// v_extraInfo is optionele tekst
+// v_dateTime is datum/tijd veld die bij sommige statuscodes verplicht is, bv bij die van GER (gereeddatum/tijd)
+// v_communicatie_logboek_vereist(waarde 0/1) geeft aan of in AX365 het zg. "communicatielogboek" moet zijn ingericht (nee=0, ja=1) voor betreffende status 'v_statuscode',
+// wanneer waarde 0 dan altijd communicatie, en bij waarde 1 betekent dat G_mar_communicatielogboek moet aanstaan, zo niet, dan wordt de status niet aan AX365 gestuurd (maar geskipt)
+
+function TQ_SetOpdrachtStatus (v_company_id, v_woco_gln, v_lev_gln, v_taskId, v_purchId, v_statuscode, v_extraInfo, v_dateTime)
+{
+ //default gaan we ervan uit dat de communcatie goed verloopt (lekker positief ingesteld ;-)
+ var v_resp = {api_status_code: 1, api_status_message: "", api_response_message: ""};
+ __Log("TQ_SetOpdrachtStatus: " + "Start", 2);
+ __Log("v_company_id: " + v_company_id, 2);
+ __Log("v_woco_gln: " + v_woco_gln, 2);
+ __Log("v_lev_gln: " + v_lev_gln, 2);
+ __Log("v_taskId: " + v_taskId, 2);
+ __Log("v_purchId: " + v_purchId, 2);
+ __Log("v_statuscode: " + v_statuscode, 2);
+ __Log("v_dateTime: " + v_dateTime, 2);
+
+ if (v_dateTime == "-1")
+ {
+ // met v_dateTime gelijk aan -1 willen we de datumtime xml niet opnemen in de request!
+ v_dateTime = "";
+ }
+ else
+ {
+ v_dateTime = v_dateTime; // e.g.: 2021-12-17T12:00:00
+ }
+
+
+ var l_timestamp = displayTimeStamp() //yyyy-mm-ddThh_mi_ss_iii (jaar-maand-dagTuur_min_sec_millisec): 23 tekens
+
+ l_msg_id = l_timestamp.substr(2); // 21 tekens
+ l_msg_id = MARX_replaceAll(l_msg_id, "-", "");//19 tekens
+ l_msg_id = MARX_replaceAll(l_msg_id, "_", "");//17 tekens
+ l_msg_id = MARX_replaceAll(l_msg_id, "T", "");//15 tekens
+
+ // Returns a random integer from 0 to 99 // 2 tekens
+ var l_random = Math.floor(Math.random() * 100);
+ var l_msg_id = l_msg_id + l_random; // max. 17 tekens
+
+ var l_msg_date = l_timestamp.substr(0,10); //yyyy-mm-dd
+ var l_msg_time = l_timestamp.substr(11,8)
+ l_msg_time = MARX_replaceAll(l_msg_time, "_", ":"); //hh:mi:ss
+
+ var v_req = ""
+ + "" + l_msg_id + ""
+ + "" + l_msg_date + ""
+ + "" + l_msg_time + ""
+ + ""
+ + "" + v_woco_gln + ""
+ + ""
+ + ""
+ + "" + v_lev_gln + ""
+ + ""
+ + ""
+ + "" + v_purchId + ""
+ + "" + v_statuscode + "";
+
+ var l_dateTime_datum = v_dateTime.substr(0,10);
+ var l_dateTime_tijd = v_dateTime.substr(11,8);
+
+ if (v_statuscode == "GER" && l_dateTime_datum != "")
+ { // Alleen bij gereedmelden opdrachten (technisch afmelden) komt in SALES005 de DateReady in de vorm van YYYY-MM-DD mee...
+ v_req = v_req + "" + l_dateTime_datum + "";
+ }
+ if (v_extraInfo != "")
+ {
+ v_req = v_req + "" + v_extraInfo + "";
+ }
+ if ((v_statuscode == "AFH" || v_statuscode == "VER") && l_dateTime_datum != "")
+ {
+ v_req = v_req + "";
+ if (v_statuscode == "AFH")
+ {
+ v_req = v_req + "" + l_dateTime_datum + ""; // Afspraakdatum
+ v_req = v_req + "" + l_dateTime_tijd + "";// Afspraakdatum
+ }
+ if (v_statuscode == "VER")
+ {
+ v_req = v_req + "";
+ v_req = v_req + "" + l_dateTime_datum + ""; // Verlengingsdatum
+ v_req = v_req + "" + l_dateTime_tijd + ""; // Verlengingstijd
+ v_req = v_req + "";
+ }
+ v_req = v_req + "";
+ }
+ v_req = v_req + "";
+ v_req = v_req + "";
+
+ __Log("v_req: " + v_req, 2);
+
+ var v_API = "";
+ var v_type = 0;
+ var v_soapAction = "";
+ var v_discard_active_abort = 1; //In geval van 500-error, geen active abort...
+ var v_soort_api = 2;
+ var v_resp = apiAX_GENERAL(v_API, v_req, v_type, v_soapAction, v_discard_active_abort, v_soort_api);
+
+ __Log("TQ_SetOpdrachtStatus: " + "End", 2);
+ return v_resp;
+}
\ No newline at end of file