MARX#69220 Koppeling Mareon -> Twinq: statusupdates van opdracht naar Twinq
svn path=/Mareon/trunk/; revision=54249
This commit is contained in:
@@ -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 \
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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 = '<updatePurchStatus xmlns="http://tempuri.org"><_companyID>' + v_company_id + "</_companyID> <_taskId>" + v_taskId + "</_taskId> <_planDate>" + v_plandate2 + "</_planDate></updatePurchStatus>";
|
||||
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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
l_request_body = "client_id=" + v_client_id
|
||||
// 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);
|
||||
|
||||
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;
|
||||
|
||||
@@ -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,7 +598,7 @@ 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 != ""){
|
||||
@@ -596,9 +606,42 @@ function REMS_2_MAREON()
|
||||
}
|
||||
//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();
|
||||
|
||||
@@ -59,6 +59,10 @@
|
||||
<opdr_past_days>1</opdr_past_days><!-- opdr_past_days is default 1 (alle opdrachten vanaf gisteren) -->
|
||||
<opdr_today></opdr_today><!-- opdr_today is optioneel en default empty (empty = alle opdrachten tot en met vandaag, 1 = alle opdrachten tot met gisteren, 2 = eergisteren etc) -->
|
||||
</ax365>
|
||||
<twinq>
|
||||
<!-- URL van de webservice 'ketenstandaard' bij Twinq -->
|
||||
<url></url>
|
||||
</twinq>
|
||||
<!-- Identity-server behorende bij de AX Saxton webservice 'CustomerPortalAX' van ax2012 of ax365 -->
|
||||
<identityserver>
|
||||
<token>
|
||||
|
||||
304
ax/SRC/Common.js
304
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:
|
||||
// <faultcode xmlns:a="http://schemas.microsoft.com/2009/WebFault">a:Forbidden</faultcode>
|
||||
// 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
|
||||
|
||||
@@ -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") {
|
||||
@@ -104,10 +104,13 @@ function GEN_AcceptServiceTask(v_company_id, v_taskId, v_externnr, v_mld_opdr_ex
|
||||
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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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", "");
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
144
ax/SRC/TQ_SetOpdrachtStatus.js
Normal file
144
ax/SRC/TQ_SetOpdrachtStatus.js
Normal file
@@ -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:
|
||||
//
|
||||
|
||||
|
||||
//<?xml version="1.0" encoding="utf-8"?>
|
||||
//<MaintenanceStatus xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.ketenstandaard.nl/onderhoudsstatus/SALES/005" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ketenstandaard.nl/onderhoudsstatus/SALES/005 Onderhoudsstatus_SALES005.xsd">
|
||||
//<MessageNumber>1234</MessageNumber>
|
||||
//<MessageDate>2021-12-16</MessageDate>
|
||||
//<MessageTime>10:27:30</MessageTime>
|
||||
//<Buyer>
|
||||
// <GLN>8712345000011</GLN>
|
||||
//</Buyer>
|
||||
//<Contractor>
|
||||
// <GLN>8712345000004</GLN>
|
||||
//</Contractor>
|
||||
//<InstructionData>
|
||||
// <InstructionNumber>ION000001</InstructionNumber>
|
||||
// <Status>GER</Status>
|
||||
// <DateReady>2021-12-15</DateReady>
|
||||
// <FreeText>XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX</FreeText>
|
||||
// <AppointmentDateTimeInformation>
|
||||
// <RequiredDeliveryDate>2018-07-17</RequiredDeliveryDate> Afspraakdatum
|
||||
// <RequiredDeliveryTime>00:00:00</RequiredDeliveryTime> Afspraaktijd
|
||||
// <DeliveryTimeFrame>
|
||||
// <DeliveryDateEarliest>2018-07-16</DeliveryDateEarliest>
|
||||
// <DeliveryTimeEarliest>00:00:00</DeliveryTimeEarliest>
|
||||
// <DeliveryDateLatest>2018-07-18</DeliveryDateLatest> Verlengingsdatum
|
||||
// <DeliveryTimeLatest>00:00:00</DeliveryTimeLatest> Verlengingstijd
|
||||
// </DeliveryTimeFrame>
|
||||
// </AppointmentDateTimeInformation>
|
||||
//</InstructionData>
|
||||
//</MaintenanceStatus>
|
||||
|
||||
// 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 = "<MaintenanceStatus xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns=\"http://www.ketenstandaard.nl/onderhoudsstatus/SALES/005\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.ketenstandaard.nl/onderhoudsstatus/SALES/005 Onderhoudsstatus_SALES005.xsd\">"
|
||||
+ "<MessageNumber>" + l_msg_id + "</MessageNumber>"
|
||||
+ "<MessageDate>" + l_msg_date + "</MessageDate>"
|
||||
+ "<MessageTime>" + l_msg_time + "</MessageTime>"
|
||||
+ "<Buyer>"
|
||||
+ "<GLN>" + v_woco_gln + "</GLN>"
|
||||
+ "</Buyer>"
|
||||
+ "<Contractor>"
|
||||
+ "<GLN>" + v_lev_gln + "</GLN>"
|
||||
+ "</Contractor>"
|
||||
+ "<InstructionData>"
|
||||
+ "<InstructionNumber>" + v_purchId + "</InstructionNumber>"
|
||||
+ "<Status>" + v_statuscode + "</Status>";
|
||||
|
||||
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 + "<DateReady>" + l_dateTime_datum + "</DateReady>";
|
||||
}
|
||||
if (v_extraInfo != "")
|
||||
{
|
||||
v_req = v_req + "<FreeText>" + v_extraInfo + "</FreeText>";
|
||||
}
|
||||
if ((v_statuscode == "AFH" || v_statuscode == "VER") && l_dateTime_datum != "")
|
||||
{
|
||||
v_req = v_req + "<AppointmentDateTimeInformation>";
|
||||
if (v_statuscode == "AFH")
|
||||
{
|
||||
v_req = v_req + "<RequiredDeliveryDate>" + l_dateTime_datum + "</RequiredDeliveryDate>"; // Afspraakdatum
|
||||
v_req = v_req + "<RequiredDeliveryTime>" + l_dateTime_tijd + "</RequiredDeliveryTime>";// Afspraakdatum
|
||||
}
|
||||
if (v_statuscode == "VER")
|
||||
{
|
||||
v_req = v_req + "<DeliveryTimeFrame>";
|
||||
v_req = v_req + "<DeliveryDateLatest>" + l_dateTime_datum + "</DeliveryDateLatest>"; // Verlengingsdatum
|
||||
v_req = v_req + "<DeliveryTimeLatest>" + l_dateTime_tijd + "</DeliveryTimeLatest>"; // Verlengingstijd
|
||||
v_req = v_req + "</DeliveryTimeFrame>";
|
||||
}
|
||||
v_req = v_req + "</AppointmentDateTimeInformation>";
|
||||
}
|
||||
v_req = v_req + "</InstructionData>";
|
||||
v_req = v_req + "</MaintenanceStatus>";
|
||||
|
||||
__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;
|
||||
}
|
||||
Reference in New Issue
Block a user