MARX#69220 Koppeling Mareon -> Twinq: statusupdates van opdracht naar Twinq

svn path=/Mareon/trunk/; revision=54249
This commit is contained in:
Marcel Bourseau
2021-12-21 15:28:25 +00:00
parent 8dcc9cc0f9
commit f161ffb7d2
17 changed files with 610 additions and 86 deletions

View File

@@ -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 \

View File

@@ -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"

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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();

View File

@@ -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>

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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);

View File

@@ -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;
}

View File

@@ -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;

View File

@@ -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", "");

View File

@@ -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;
}

View 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;
}