Files
Mareon/ax/SRC/AxFacilitor.js

1048 lines
42 KiB
JavaScript

// --------------------------------------------------------------------------------------
// AxFacilitor.js
// Copyright 2014 SG|facilitor. 053-4800 700, helpdesk@sgfacilitor.nl
// Written by MB (2014)
//
// MAREON Connector/Adapter Ax -> FACILITOR en Facilitor -> Ax
// --------------------------------------------------------------------------------------
// Scheduled Connector/Adapter voor alle communcatie van Ax -> Facilitor
// Staat elke nn minuten gescheduled
//var G_proxy = "127.0.0.1:8888"; // Voor debugging met Fiddler
function FCLT_Sync_START(){
F_PutSync(0);
}
function FCLT_Sync_END(){
var l_erp = AX_or_Tobias();
switch (l_erp)
{
case "A":
// AX 2009
F_PutSync(1);
break;
case "A12":
// AX 2012
F_PutSync(1);
break;
case "T":
// Tobias Progress
F_PutSync(1);
break;
case "A365":
// Tobias 365
F_PutSync(2);
break;
case "F":
// Facilitor
F_PutSync(2);
break;
case "R":
// REMS
F_PutSync(2);
break;
case "TQ":
// TwinQ
F_PutSync(2);
break;
case "3P":
// 3RD PARTY
F_PutSync(2);
break;
default:
F_PutSync(1);
}
}
// ----------------------------- AX functies -----------------------------------------
function AX_2_FCLT_ReturnCodes(){
A_GetReturnCodes();
}
function AX_2_FCLT_Opdrachten(){
A_GetOpdrachten();
}
function FCLT_2_AX_Bijlagen(){
F_GetOpdrachten_Bijlagen();
}
function FCLT_2_AX_OpdrachtStatus(){
F_GetOpdrachten_Statussen();
}
function FCLT_2_AX_OpmerkingOpdrachten(){
F_GetOpdrachten_Opmerking();
}
function FCLT_2_AX_AfgemeldeOpdrachten(){
F_GetOpdrachten_Afgemeld();
}
function FCLT_2_AX_GeplandeOpdrachten(){
F_GetOpdrachten_Gepland();
}
function FCLT_2_AX_VerlengdeOpdrachten(){
F_GetOpdrachten_Verlengd();
}
function FCLT_2_AX_UitvoeringOpdrachten(){
F_GetOpdrachten_Uitvoer();
}
function FCLT_2_AX_OnderbrokenOpdrachten(){
F_GetOpdrachten_Onderbroken();
}
function FCLT_2_AX_AcceptRefuseOpdracht(){
F_GetOpdrachten_AcceptRefuse();
}
// ----------------------------- AX2012 functies -----------------------------------------
function AX2012_2_FCLT_Opdrachten(){
A2012_GetOpdrachten();
}
function FCLT_2_AX2012_Bijlagen(){
F_GetOpdrachten_Bijlagen();
}
function FCLT_2_AX2012_OpdrachtStatus(){
F_GetOpdrachten_Statussen();
}
function FCLT_2_AX2012_OpmerkingOpdrachten(){
F_GetOpdrachten_Opmerking();
}
function FCLT_2_AX2012_AfgemeldeOpdrachten(){
F_GetOpdrachten_Afgemeld();
}
function FCLT_2_AX2012_GeplandeOpdrachten(){
F_GetOpdrachten_Gepland();
}
function FCLT_2_AX2012_VerlengdeOpdrachten(){
F_GetOpdrachten_Verlengd();
}
function FCLT_2_AX2012_UitvoeringOpdrachten(){
F_GetOpdrachten_Uitvoer();
}
function FCLT_2_AX2012_OnderbrokenOpdrachten(){
F_GetOpdrachten_Onderbroken();
}
function FCLT_2_AX2012_AcceptRefuseOpdracht(){
F_GetOpdrachten_AcceptRefuse();
}
// ----------------------------- AX365 functies -----------------------------------------
function FCLT_2_AX365_OpdrachtStatus_Bijlagen(){
F_GetOpdrachten_Statussen();
}
// ----------------------------- Tobias functies -----------------------------------------
function Tobias_2_FCLT_Opdrachten(){
T_GetOpdrachten();
}
function FCLT_2_Tobias_OpmerkingOpdrachten(){
F_GetOpdrachten_Opmerking();
}
function FCLT_2_Tobias_AcceptRefuseOpdracht(){
F_GetOpdrachten_AcceptRefuse();
}
function FCLT_2_Tobias_GeplandeOpdrachten(){
F_GetOpdrachten_Gepland();
}
function FCLT_2_Tobias_AfgemeldeOpdrachten(){
F_GetOpdrachten_Afgemeld();
}
function FCLT_2_Tobias_Facturen(){
F_GetFacturen_Tobias();
}
// ----------------------------- Facilitor functies -----------------------------------------
function MARX_2_FCLT_NEW_Opdrachten(){
F_GetOpdrachten_NEW();
}
function MARX_2_FCLT_Bijlagen(){
F_GetOpdrachten_Bijlagen();
}
function MARX_2_FCLT_OpdrachtStatus(){
F_GetOpdrachten_Statussen();
}
function MARX_2_FCLT_OpmerkingOpdrachten(){
F_GetOpdrachten_Opmerking();
}
function MARX_2_FCLT_AcceptRefuseOpdracht(){
F_GetOpdrachten_AcceptRefuse();
}
function MARX_2_FCLT_GeplandeOpdrachten(){
F_GetOpdrachten_Gepland();
}
function MARX_2_FCLT_AfgemeldeOpdrachten(){
F_GetOpdrachten_Afgemeld();
}
function MARX_2_FCLT_AfgerondeOpdrachten(){
F_GetOpdrachten_FinancAfgerond();
}
function MARX_2_FCLT_Facturen(){
F_GetFacturen_FCLT();
}
// ----------------------------- REMS functies -----------------------------------------
function REMS_2_MARX_Opdrachten(){
R_GetOpdrachten();
}
function MARX_2_REMS_OpmerkingOpdrachten(){
F_GetOpdrachten_Opmerking();
}
function MARX_2_REMS_OpdrachtStatus(){
F_GetOpdrachten_Statussen();
}
function MARX_2_REMS_AcceptRefuseOpdracht(){
F_GetOpdrachten_AcceptRefuse();
}
function MARX_2_REMS_GeplandeOpdrachten(){
F_GetOpdrachten_Gepland();
}
function MARX_2_REMS_AfgemeldeOpdrachten(){
F_GetOpdrachten_Afgemeld();
}
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();
}
// ----------------------------- #RD PARTY functies -----------------------------------------
function MARX_2_3RDPARTY_OpdrachtStatus(){
F_GetOpdrachten_Statussen();
}
function MARX_2_3RDPARTY_Facturen(){
F_GetFacturen_3RDPARTY();
}
// ----------------------------- Xtractor functies -----------------------------------------
function FCLT_2_AX_Facturen(){
F_GetFacturen_AX();
}
// ----------------------------- -----------------------------------------
function Ax_2_FACILITOR()
{
if (G_push_notifyqueue == "0"){
//start then-tak pull
// Als de koppeling niet via PUSH verloopt, dan zelf de opdrachten uit AX halen (PULL), en de statusupdates via diverse views obv laatste tracking-key
__Log("*** START AX --> FCLT : Opdrachten uit AX en naar Mareon ***", 2);
AX_2_FCLT_Opdrachten();
__Log("*** END", 2);
__Log("*** START FCLT --> AX : Opmerking opdrachten uit Mareon naar AX ***", 2);
FCLT_2_AX_OpmerkingOpdrachten();
__Log("*** END", 2);
__Log("*** START FCLT --> AX : Geaccepteerde/geweigerde opdrachten uit Facilitor naar AX ***", 2);
FCLT_2_AX_AcceptRefuseOpdracht();
__Log("*** END", 2);
__Log("*** START FCLT --> AX : Geplande opdrachten uit Mareon naar AX ***", 2);
FCLT_2_AX_GeplandeOpdrachten();
__Log("*** END", 2);
if (G_mar_communicatielogboek == 1){
__Log("*** Communicatie logboek AAN", 2);
__Log("*** START FCLT --> AX : Verlengde opdrachten uit Mareon naar AX ***", 2);
FCLT_2_AX_VerlengdeOpdrachten();
__Log("*** END", 2);
__Log("*** START FCLT --> AX : Opdrachten in uitvoering uit Mareon naar AX ***", 2);
FCLT_2_AX_UitvoeringOpdrachten();
__Log("*** END", 2);
__Log("*** START FCLT --> AX : Onderbroken opdrachten uit Mareon naar AX ***", 2);
FCLT_2_AX_OnderbrokenOpdrachten();
__Log("*** END", 2);
}
else{
__Log("*** Communicatie logboek UIT", 2);
}
if (G_mar_sync_bijlages_naar_opdrgvr != '0'){
__Log("*** START FCLT --> AX : Bijlagen bij opdrachten uit Mareon naar AX ***", 2);
FCLT_2_AX_Bijlagen();
__Log("*** END", 2);
}
__Log("*** START FCLT --> AX : Afgemelde opdrachten uit Mareon naar AX ***", 2);
FCLT_2_AX_AfgemeldeOpdrachten();
__Log("*** END", 2);
} // einde then-tak "pull"
else {
//start else-tak "push/notifyqueue"
//Totdat AX nog geen push-mechanisme heeft, gaan we de opdrachtverstrekking nog PULLEN!
//Zodra AX2012 wel push-mechanisme heeft, verloopt de opdrachtverstrekking buiten de sync, en kan dit stukje komen te vervallen...
__Log("*** START AX --> FCLT : Opdrachten uit AX en naar Mareon ***", 2);
AX_2_FCLT_Opdrachten();
__Log("*** END", 2);
__Log("*** START FCLT --> AX2012 : Verwerken van ALLE opdrachtstatussen uit Mareon naar AX obv notifyqueue ***", 2);
FCLT_2_AX_OpdrachtStatus();
__Log("*** END", 2);
//einde else-tak "push/notifyqueue"
}
}
function Ax2012_2_FACILITOR()
{
if (G_push_notifyqueue == "0"){
//start then-tak pull
// Als de koppeling niet via PUSH verloopt, dan zelf de opdrachten uit AX halen (PULL), en de statusupdates via diverse views obv laatste tracking-key
__Log("*** START AX2012 --> FCLT : Opdrachten uit AX en naar Mareon ***", 2);
AX2012_2_FCLT_Opdrachten();
__Log("*** END", 2);
__Log("*** START FCLT --> AX2012 : Opmerking opdrachten uit Mareon naar AX ***", 2);
FCLT_2_AX2012_OpmerkingOpdrachten();
__Log("*** END", 2);
__Log("*** START FCLT --> AX2012 : Geaccepteerde/geweigerde opdrachten uit Mareon naar AX ***", 2);
FCLT_2_AX2012_AcceptRefuseOpdracht();
__Log("*** END", 2);
__Log("*** START FCLT --> AX2012 : Geplande opdrachten uit Mareon naar AX ***", 2);
FCLT_2_AX2012_GeplandeOpdrachten();
__Log("*** END", 2);
if (G_mar_communicatielogboek == 1){
__Log("*** Communicatie logboek AAN", 2);
__Log("*** START FCLT --> AX2012 : Verlengde opdrachten uit Mareon naar AX ***", 2);
FCLT_2_AX2012_VerlengdeOpdrachten();
__Log("*** END", 2);
__Log("*** START FCLT --> AX2012 : Opdrachten in uitvoering uit Mareon naar AX ***", 2);
FCLT_2_AX2012_UitvoeringOpdrachten();
__Log("*** END", 2);
__Log("*** START FCLT --> AX2012 : Onderbroken opdrachten uit Mareon naar AX ***", 2);
FCLT_2_AX2012_OnderbrokenOpdrachten();
__Log("*** END", 2);
}
else{
__Log("*** Communicatie logboek UIT", 2);
}
// Alleen bij pull (niet bij push), de bijlages opvragen van ALLE(!) opdrachten op basis van sync-datum
// PS Bij push doen we dat per opdracht...
if (G_mar_sync_bijlages_naar_opdrgvr != '0'){
__Log("*** START FCLT --> AX2012 : Bijlagen bij opdrachten uit Mareon naar AX ***", 2);
//Bijlages naar AX2012 kan alleen via Token icm Saxton AX-webservice(s). Op soortgelijke (bijna identieke wijze) als AX365.
//---------------
__Log("*** START AX2012 --> FCLT : Get Token ***", 2);
G_Token_saxton = ReadSaxtonTokenFromFile();
if (G_Token_saxton == ""){
__Log("G_Token_saxton ReadSaxtonTokenFromFile is leeg:", 3);
G_Token_saxton = A2012_saxton_GetToken();
}
__Log("*** END Get Token", 2);
//---------------
FCLT_2_AX2012_Bijlagen();
__Log("*** END", 2);
}
// En tenslotte obv PULL de afgemelde opdrachten nog.
__Log("*** START FCLT --> AX2012 : Afgemelde opdrachten uit Mareon naar AX ***", 2);
FCLT_2_AX2012_AfgemeldeOpdrachten();
__Log("*** END", 2);
} // einde then-tak "pull"
else {
//start else-tak "push/notifyqueue"
//Totdat AX nog geen push-mechanisme heeft, gaan we de opdrachtverstrekking nog PULLEN!
//Zodra AX2012 wel push-mechanisme heeft, verloopt de opdrachtverstrekking buiten de sync, en kan dit stukje komen te vervallen...
__Log("*** START AX2012 --> FCLT : Opdrachten uit AX en naar Mareon ***", 2);
AX2012_2_FCLT_Opdrachten();
__Log("*** END", 2);
__Log("*** START FCLT --> AX2012 : Verwerken van ALLE opdrachtstatussen uit Mareon naar AX obv notifyqueue ***", 2);
FCLT_2_AX2012_OpdrachtStatus();
__Log("*** END", 2);
//einde else-tak "push/notifyqueue"
}
}
function AX365_2_FACILITOR()
{
if (G_ID_saxton_url != "" && G_push_notifyqueue == "1")
{
__Log("*** START AX365 --> FCLT : Get AX Saxton Token ***", 2);
G_Token_saxton = ReadSaxtonTokenFromFile();
if (G_Token_saxton == ""){
__Log("G_Token_saxton ReadSaxtonTokenFromFile is leeg:", 3);
G_Token_saxton = A365_saxton_GetToken();
}
__Log("*** END Get AX Saxton Token", 2);
// Statusinformatie en evt bijlagen van Mareon -> AX365
__Log("*** START FCLT --> AX365 : Verwerken van ALLE opdrachtstatussen + bijlagen uit Mareon naar AX365 obv notifyqueue ***", 2);
FCLT_2_AX365_OpdrachtStatus_Bijlagen();
__Log("*** END", 2);
if (G_ID_ax365_supplierservice_url == ""){
// MARX#74747 Voor T365 de Facturen via de Saxton/JSON koppeling, als supplier-url leeg is, dan laten we facturen over deze as lopen...
__Log("*** AX365: Facturen via Saxton", 2)
FACILITOR_2_Xtractor();
}
}
else{
__Log("*** AX365: Saxton NIET ingesteld", 2)
}
if (G_ID_ax365_supplierservice_url != "")
{
__Log("*** START AX365 --> FCLT : Get Supplierservice Token ***", 2);
G_Token_supplierservice = ReadSupplierserviceTokenFromFile();
if (G_Token_supplierservice == ""){
__Log("G_Token_supplierservice ReadSupplierserviceTokenFromFile is leeg:", 3);
G_Token_supplierservice = A365_supplierservice_GetToken();
}
__Log("*** END Get Supplierservice Token", 2);
// Facturen van Mareon -> AX365, in de functie FACILITOR_2_Xtractor wordt zelf bekeken of dit WEL/NIET via pushnotificatie verloopt...
__Log("*** AX365: Facturen via SupplierService", 2)
FACILITOR_2_Xtractor();
}
else{
__Log("*** AX365: Supplierservice NIET ingesteld", 2);
}
}
function Tobias_2_FACILITOR()
{
// "*** START Tobias --> FCLT : Weiger returncodes/teksten uit Tobias ZIJN ER NIET (i.t.t. AX ***");
__Log("*** START Tobias --> FCLT : Opdrachten uit Tobias en naar Mareon ***", 2);
Tobias_2_FCLT_Opdrachten();
__Log("*** END", 2);
__Log("*** START FCLT --> Tobias : Opmerking opdrachten uit Mareon naar Tobias ***", 2);
FCLT_2_Tobias_OpmerkingOpdrachten();
__Log("*** END", 2);
__Log("*** START FCLT --> Tobias : Geaccepteerde/geweigerde opdrachten uit Mareon naar Tobias ***", 2);
FCLT_2_Tobias_AcceptRefuseOpdracht();
__Log("*** END", 2);
__Log("*** START FCLT --> Tobias : Geplande opdrachten uit Mareon naar Tobias ***", 2);
FCLT_2_Tobias_GeplandeOpdrachten();
__Log("*** END", 2);
__Log("*** START FCLT --> Tobias : Afgemelde opdrachten uit Mareon naar Tobias ***", 2);
FCLT_2_Tobias_AfgemeldeOpdrachten();
__Log("*** END", 2);
if (G_ax_xtractorfolder == ""){
__Log("*** START FCLT --> Tobias : Facturen uit Mareon naar Tobias ***", 2);
FCLT_2_Tobias_Facturen();
}
else{
// Met name bij Hybride Tobias/AX omgevingen, zoals DWPL
__Log("*** NO START FCLT --> Tobias : Facturen verlopen via Xtractor ***", 2);
}
__Log("*** END", 2);
}
function MAREON_2_FACILITOR()
{
if (G_push_notifyqueue == "0"){
//start then-tak pull
// Als de koppeling niet via PUSH verloopt, dan zelf de opdrachten uit AX halen (PULL), omdat Putorders iig nog gezet moet worden en evt bijlages opgehaald moeten worden, obv laatste tracking-key
// MARX_2_FCLT_NEW_Opdrachten zet iig Putorders (mld_opdr_teverzenden), mogelijk (afh van instelling) worden bijlages opgehaald.
__Log("*** START CUST.FACILITOR.NL --> MAREON : Putorders instellen en bijlages van opdrachtgever naar Mareon ophalen ***", 2);
MARX_2_FCLT_NEW_Opdrachten();
__Log("*** END", 2);
if (G_mar_sync_bijlages_naar_opdrgvr != '0'){
__Log("*** START MAREON --> CUST.FACILITOR.NL : Bijlagen bij opdrachten uit Mareon naar Facilitor ***", 2);
MARX_2_FCLT_Bijlagen();
__Log("*** END", 2);
}
__Log("*** START MAREON --> CUST.FACILITOR.NL : Opmerking opdrachten uit Mareon naar Facilitor ***", 2);
MARX_2_FCLT_OpmerkingOpdrachten();
__Log("*** END", 2);
__Log("*** START MAREON --> CUST.FACILITOR.NL : Geaccepteerde/geweigerde opdrachten uit Mareon naar Facilitor ***", 2);
MARX_2_FCLT_AcceptRefuseOpdracht();
__Log("*** END", 2);
__Log("*** START MAREON --> CUST.FACILITOR.NL : Geplande opdrachten uit Mareon naar Facilitor ***", 2);
MARX_2_FCLT_GeplandeOpdrachten();
__Log("*** END", 2);
__Log("*** START MAREON --> CUST.FACILITOR.NL : Afgemelde opdrachten uit Mareon naar Facilitor ***", 2);
MARX_2_FCLT_AfgemeldeOpdrachten();
__Log("*** END", 2);
__Log("*** START MAREON --> CUST.FACILITOR.NL : Afgeronde opdrachten uit Mareon naar Facilitor ***", 2);
MARX_2_FCLT_AfgerondeOpdrachten();
__Log("*** END", 2);
__Log("*** START MAREON --> CUST.FACILITOR.NL : Facturen uit Mareon naar Facilitor ***", 2);
if (G_fclt_factuur_xmlfolder != ""){
MARX_2_FCLT_Facturen();
}
__Log("*** END", 2);
} // einde then-tak "pull"
else{
//start else-tak "push/notifyqueue"
__Log("*** START MAREON --> CUST.FACILITOR.NL : Verwerken van ALLE opdrachtstatussen uit Mareon naar Facilitor obv notifyqueue ***", 2);
MARX_2_FCLT_OpdrachtStatus();
__Log("*** END", 2);
__Log("*** START MAREON --> CUST.FACILITOR.NL : Facturen uit Mareon naar Facilitor ***", 2);
if (G_fclt_factuur_xmlfolder != ""){
MARX_2_FCLT_Facturen();
}
__Log("*** END", 2);
//einde else-tak "push/notifyqueue"
}
}
function REMS_2_MAREON()
{
if (G_push_notifyqueue == "0"){
//start then-tak pull
// Als de koppeling niet via PUSH verloopt, dan zelf de opdrachten uit AX halen (PULL), en de statusupdates via diverse views obv laatste tracking-key
__Log("*** START REMS --> MAREON.NL : Nieuwe opdrachten uit REMS naar Mareon ***", 2);
REMS_2_MARX_Opdrachten();
__Log("*** END", 2);
__Log("*** START MAREON --> REMS : Opmerking opdrachten uit Mareon naar REMS ***", 2);
MARX_2_REMS_OpmerkingOpdrachten();
__Log("*** END", 2);
__Log("*** START MAREON --> REMS : Geaccepteerde/geweigerde opdrachten uit Mareon naar REMS ***", 2);
MARX_2_REMS_AcceptRefuseOpdracht();
__Log("*** END", 2);
__Log("*** START MAREON --> REMS : Geplande opdrachten uit Mareon naar REMS ***", 2);
MARX_2_REMS_GeplandeOpdrachten();
__Log("*** END", 2);
if (G_mar_communicatielogboek == 1){
__Log("*** Communicatie logboek AAN", 2);
__Log("*** START MAREON --> REMS : Verlengde opdrachten uit Mareon naar AX ***", 2);
FCLT_2_AX2012_VerlengdeOpdrachten();
__Log("*** END", 2);
__Log("*** START MAREON --> REMS : Opdrachten in uitvoering uit Mareon naar AX ***", 2);
FCLT_2_AX2012_UitvoeringOpdrachten();
__Log("*** END", 2);
__Log("*** START MAREON --> REMS : Onderbroken opdrachten uit Mareon naar AX ***", 2);
FCLT_2_AX2012_OnderbrokenOpdrachten();
__Log("*** END", 2);
}
else{
__Log("*** Communicatie logboek UIT", 2);
}
__Log("*** START MAREON --> REMS : Afgemelde opdrachten uit Mareon naar REMS ***", 2);
MARX_2_REMS_AfgemeldeOpdrachten();
__Log("*** END", 2);
if (G_rems_facturen_xmlfolder != ""){
__Log("*** START MAREON --> REMS : Facturen uit Mareon naar REMS ***", 2);
MARX_2_REMS_Facturen();
__Log("*** END", 2);
}
}// einde then-tak "pull"
else{
//start else-tak "push/notifyqueue"
// Ook als de koppeling wel via PUSH (NQ mode) verloopt, dan zelf de opdrachten uit folder bij REMS halen (PULL), en door de SYNC pushen naar Mareon
__Log("*** START REMS --> MAREON.NL : Nieuwe opdrachten uit REMS naar Mareon ***", 2);
REMS_2_MARX_Opdrachten();
__Log("*** END", 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 != ""){
__Log("*** START MAREON --> REMS : Facturen uit Mareon naar REMS ***", 2);
MARX_2_REMS_Facturen();
__Log("*** END", 2);
}
//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();
if (G_Token_saxton == ""){
__Log("G_Token_saxton ReadSaxtonTokenFromFile is leeg:", 3);
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);
//MARX#71922 Factuurbericht naar Twinq
__Log("*** START MAREON --> TWINQ: Facturen uit Mareon naar Twinq ***", 2);
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 MAREON_2_3RDPARTY()
{
if (G_push_notifyqueue == "1")
{
__Log("*** START MAREON --> 3RD PARTY ***", 2);
//start "push/notifyqueue"
__Log("*** START MAREON --> 3RD PARTY : Verwerken van ALLE opdrachtstatussen uit Mareon naar 3RD PARTY obv notifyqueue ***", 2);
MARX_2_3RDPARTY_OpdrachtStatus();
__Log("*** END", 2);
__Log("*** START MAREON --> 3RD PARTY: Facturen uit Mareon naar 3RD PARTY ***", 2);
MARX_2_3RDPARTY_Facturen();
__Log("*** END", 2);
__Log("*** END MAREON --> 3RD PARTY ***", 2);
}
else{
//Geen "push/notifyqueue" ingesteld
__Log("*** NQ staat niet in gesteld, de koppeling naar 3RD PARTY staat uit ***", 1);
}
}
function FACILITOR_2_Xtractor()
{
__Log("*** START FCLT --> AX / Tobias/AX : Facturen uit Mareon naar AX of Tobias/AX ***", 2);
FCLT_2_AX_Facturen();
__Log("*** END", 2);
}
//-- Versie Mareon adapter
// 1.02 -- MARX#37375: Extreem veel API-aanroepen AX_OPDRACHTEN
// 1.10 -- MARX#39172: Koppeling AX2012 - Mareon
// 1.20 -- MARX#40977: Koppeling Mareon -> Facilitor + MARX#40953: Logging van Mareon sync adapter zelf kunnen opvragen
// 1.30 -- MARX#40977: Koppeling REMS -> Facilitor
// 1.31 -- MARX#53259: Geen automatische upload log-bestand bij HTTP500
// 1.32 -- MARX#56493: Lege plandatum vanuit Mareon naar Tobias-AX wordt in AX2012 niet verwerkt.
// 1.35 -- MARX#56792: Mareon sync adapter aanpassen tbv nieuwe statussen naar Tobias2012 + MARX#57368: Aanpassing 'huidige' aanroep Tobias-AX webservice ivm communicatie logboek
// 1.36 -- MARX#57502: AX Adapter robuuster maken + MARX#57491: Communicatie logboek ook voor Tobias AX 2009
// 1.37 -- MARX#57420: Documenten van Tobias AX naar Mareon
// 1.38 -- MARX#60079: Mareon inrichten voor reversible billing KPN
// 1.40 -- MARX#59862: Tobias 365 - Mareon
// 1.41 -- MARX#61048: Documenten versturen van Mareon naar AX
// 1.50 -- MARX#62647: Koppeling AX365 - Mareon (Push)
// 1.51 -- MARX#66742: De logging van de sync adapter voor AX365 per klant + YKPN#66746: Hago en Mondial krijgen geen mails/ meldingen meer door
// 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
// 1.61 -- MARX#71922: Factuurbericht naar Twinq
// 1.62 -- MARX#72900: Afwijkende technische gereeddatum komt niet goed bij opdrachtgever aan
// 1.63 -- MARX#73648: Factuur wordt telkens weer (oneindig) aan REMS aangeboden
// 1.64 -- MARX#69028: Uitvalfacturen toch naar het prefacturen register.
// 1.65 -- MARX#74749: Mareon Sync heel traag na MARX23.
// 1.70 -- MARX#76415: Mareon koppeling met 3rd Party Viewpoint + MARX#74444: Het '&' teken in de naam van een bijlage wordt niet ondersteund in de sync.
// 1.71 -- MARX#76342: Mareon Bijlagen aanpassing AX2012 via nieuwe webservices die base64 stuk voor stuk ophaalt tbv performance
// 1.72 -- MARX#77225: Bugje statusbericht naar 3RD party Viewpoint/Itris + MARX#76900 Mareon Universele Opdracht API
// 1.73 -- MARX#76390: Kan oude logging van de SYNC adapter automatisch opgeruimd worden + MARX#76891: Registratie in AX2012 of inkooporder aanwezig is in Mareon
// 1.74 -- MARX#78797: Premium Ter Steege met woco "Mijande Wonen" (Viewpoint/Itris) - soapaction toegevoegd, contenttype aangepast en timestamp in MsgDateTime verbeterd
// 1.75 -- MARX#74747: Voor T365 de Facturen via de Saxton/JSON koppeling
// 1.76 -- MARX#80511: Weg met de Secrets en Tokens in de Mareon logging
// 1.77 -- MARX#81188: Toevoegen van nieuwe factuurvelden in de JSON structuur voor T365 - Failure, InvoiceSource, PaymentID, OrderArtikelOmschr
// 1.78 -- MARX#81877: Bij een fout in factuurkoppeling naar Viewpoint wordt de factuur toch verwerkt + MARX#81919 Veel timeouts op facturen richting Tobias 365 - NQ lijst + MARX#82680 Verwijderen van XML die door REMS wordt aangeboden,maar niet verwerkt kan worden
// 1.79 -- MARX#82415: Implementatie "Mijande Wonen" (Dynamic Empire van Zig/Cegeka) + MARX#83105 Tobias AX2012 -> T365 conversie met facturenstop + MARX#83688 Implementatie Bouwinvest / Schepvastgoed (Zig/Casix)
// 1.80 -- MARX#81606: Signaleren dat een opdracht gewijzigd is (VM000000566278), t.b.v. (alleen) AX2012 is aanpassing in SYNC nodig (AX2009 worden geen updates meer gedaan, alle andere ERPs verlopen via pushprincipe en doen het)
var G_Mareon_Adapter = "1.80";
//MARX#56643: Test Haagwonen inkoopordernummer ontbreekt in Mareon ION001753
var G_new_date = new Date();
//Proxy-settings: MARX#81919 Veel timeouts op facturen richting Tobias 365 - NQ lijst
var SXH_PROXY_SET_PROXY = 2;
var SXH_OPTION_IGNORE_SERVER_SSL_CERT_ERROR_FLAGS = 2
var SXH_SERVER_CERT_IGNORE_UNKNOWN_CA = 256
var SXH_SERVER_CERT_IGNORE_WRONG_USAGE = 512
var SXH_SERVER_CERT_IGNORE_CERT_CN_INVALID = 4096
var SXH_SERVER_CERT_IGNORE_CERT_DATE_INVALID = 8192
var SXH_SERVER_CERT_IGNORE_ALL_SERVER_ERRORS = 13056
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Filepointer voor Logfile
var fso = new ActiveXObject("Scripting.FileSystemObject");
// Parameter:
// 1) Naam van de configuratie-xml met settings.
var G_settings_xml_file = WScript.Arguments(0);
var G_log_level = Read_Ini_Setting("common","logging");
__Log("************************************************** START Mareon Adapter ***********************************************", 0);
var G_proxy = Read_Ini_Setting("common","proxy");
var G_log_clean_days = Read_Ini_Setting("common","clean_log_days");
//MARX#76390 Kan oude logging van de SYNC adapter automatisch opgeruimd worden
//Defaultwaarde is 90 dagen, oftewel logbestanden worden zonder instelling van meer dan 3 maanden geleden opgeruimd.
//Als er niet opgeruimd moet worden, stel dan waarde -1 in (in de XML), dan wordt het verwijderen van oude LOG-bestanden overgeslagen.
if (!G_log_clean_days) G_log_clean_days = 90;
var G_ax_url = Read_Ini_Setting("ax","url");
var G_ax_url_serviceax = Read_Ini_Setting("ax","url_serviceax");
var G_ax2012_url = Read_Ini_Setting("ax2012","url");
var G_ax2012_url_serviceax = Read_Ini_Setting("ax2012","url_serviceax");
var G_ax2012_logonAs = Read_Ini_Setting("ax2012", "logonAs");
var G_ax2012_bcProxy = Read_Ini_Setting("ax2012", "bcProxy");
var G_ax365_url_supplierservice = Read_Ini_Setting("ax365","url");
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");
var G_3party_id = Read_Ini_Setting("thirdparty","id");
var G_3party_export_folder = Read_Ini_Setting("thirdparty","exportfolder");
var G_3party_dico_version = Read_Ini_Setting("thirdparty","dico/version");
var G_3party_dico_ms_version = Read_Ini_Setting("thirdparty","dico/messageservice/version");
// 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;
var G_tobias_url = Read_Ini_Setting("tobias","url");
var G_fclt_url = Read_Ini_Setting("fclt","url");
var G_fclt_apikey = Read_Ini_Setting("fclt","apikey");
var G_fclt_factuur_xmlfolder = Read_Ini_Setting("fclt","factuur/xmlfolder");
var G_fclt_factuur_pdffolder = Read_Ini_Setting("fclt","factuur/pdffolder");
var G_rems_opdracht_xmlfolder = Read_Ini_Setting("rems","opdrachtenfolder");
var G_rems_opdrachtstatus_xmlfolder = Read_Ini_Setting("rems","opdrachtstatusfolder");
var G_rems_facturen_xmlfolder = Read_Ini_Setting("rems","facturenfolder");
var G_ax_xtractorfolder = Read_Ini_Setting("xtractor","xmlfolder");
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' 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");
var G_ID_saxton_grant_type = Read_Ini_Setting("identityserver","token/grant_type");
var G_ID_saxton_resource = Read_Ini_Setting("identityserver","token/resource");
var G_ID_saxton_scope = Read_Ini_Setting("identityserver","token/scope");
// Identity Token instellingen voor de AX365 webservice 'SupplierService' MSMSupplierPortal
var G_ID_ax365_supplierservice_url = Read_Ini_Setting("ax365","supplierservice/identityserver/token/url");
var G_ID_ax365_supplierservice_client_id = Read_Ini_Setting("ax365","supplierservice/identityserver/token/client_id");
var G_ID_ax365_supplierservice_client_secret = Read_Ini_Setting("ax365","supplierservice/identityserver/token/client_secret");
var G_ID_ax365_supplierservice_grant_type = Read_Ini_Setting("ax365","supplierservice/identityserver/token/grant_type");
var G_ID_ax365_supplierservice_resource = Read_Ini_Setting("ax365","supplierservice/identityserver/token/resource");
var G_ID_ax365_supplierservice_scope = Read_Ini_Setting("ax365","supplierservice/identityserver/token/scope");
// Mareon instellingen, de term (XML node) "facilitor" is ivm historie cq. alle locale installaties bij woco's niet 1-2-3 aan te passen in de veel logischere term mareon.
var G_marx_url = Read_Ini_Setting("facilitor","url");
var G_marx_apikey = Read_Ini_Setting("facilitor","apikey");
//MARX#57502: AX Adapter robuuster maken, instelbare timeout
var G_mar_timeout = 0; //initieel 1e keer.
__Log("***Mareon Adapter - versie: " + G_Mareon_Adapter, 1);
//Eerst de xml settings loggen
__Log("***XML- common/logging: " + G_log_level, 1);
__Log("***XML- common/clean_log_days: " + G_log_clean_days, 1);
__Log("***XML- ax/url(SupplierService): " + G_ax_url, 1);
__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);
if (G_proxy) __Log("***XML- AX365/proxy: " + G_proxy, 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);
__Log("***XML- facilitor/factuur/pdffolder: " + G_fclt_factuur_pdffolder, 1);
__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- thirdparty/id: " + G_3party_id, 1);
__Log("***XML- thirdparty/exportfolder: " + G_3party_export_folder, 1);
__Log("***XML- thirdparty/dico/version: " + G_3party_dico_version, 1);
__Log("***XML- thirdparty/dico/messageservice/version: " + G_3party_dico_ms_version, 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);
__Log("***XML- xtractor/pdffolder: " + G_pdf_xtractorfolder, 1);
__Log("***XML- xtractor/succeededfolder: " + G_ax_succeededfolder, 1);
__Log("***XML- xtractor/rejectedfolder: " + G_ax_rejectedfolder, 1);
if (G_marx_apikey == "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"){
// Vergeten de default/voorbeeld API key in mareon.xml in te vullen
__Log("Invalid API key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", 2);
__Log("************************************************** END Mareon Adapter ***********************************************", 1);
}
else{
// Haal de Mareon-info uit Facilitor die geregistreerd zijn voor deze woco...
// In de array staan achtereenvolgens (op plaats 0 en 1):
// - min_adapter_version
// - mar_connection_allowed
l_array = F_GetMareonInfo();
//MARX#40953: Logging van Mareon sync adapter zelf kunnen opvragen
v_loglevel = l_array[9];
if (v_loglevel != ""){
G_log_level = v_loglevel;
__Log("***XML- common/logging G_log_level is overruled by Mareon :" + v_loglevel, 1);
}
v_date_sendlogfile = l_array[10]; // format "yyyy-mm-dd"
if (v_date_sendlogfile != "")
{
FCLT_SendLogFile(v_date_sendlogfile);
}
//MARX#52112: Mogelijkheid om (per opdrachtgever) Mareon Sync afbreken bij een HTTP error
var G_abort_http_error = parseInt(l_array[11]); //0 (not abort) or 1 (do abort) in case of HTTP status < 200 or > 299.
var G_mar_timeout = parseInt(l_array[15]); // Instelbare timeout die wordt gebruikt bij aanroepen van de (AX/FCLT)-webservices, default = 30 sec (30000 milli sec)
// MARX#59862: Tobias 365 - Mareon
var G_bedrijf_key = l_array[18]; // Key van woco-bedrijf
// MARX#62647: Koppeling AX365 - Mareon (Push)
var G_push_notifyqueue = parseInt(l_array[26]); // 0 (no push koppeling) or 1 (push koppeling)
v_woco = l_array[2]; // Naam van de woco-bedrijf
__Log("*** Company: " + v_woco, 2);
v_min_adapter_version = l_array[0]; // Versienummer, iets als "1", of "1.1", of "1.23" etc
v_mar_connection_allowed = l_array[1]; // 0 (not allowed to connect) of 1 (= allowed to connect)
if (G_Mareon_Adapter >= v_min_adapter_version){
if (v_mar_connection_allowed == '1'){
// Connection is allowed
__Log("Connection allowed", 1);
FCLT_Sync_START();
//MARX#37375: nu- NA de start!!- halen we de nieuwe sync-data nog eens op. Met name hier cruciaal het moment van ophalen, dat MOET na de START van de sync.
// want na de start van de sync is het gegeven 'MAR_SYNC_OPDR_PAST_SECS_STOP' pas correct.
// dit gegeven wordt namelijk gebaseerd op 'sync_date_now' die in de DB in de procedure mar_update_ax_sync is gezet, en dat gebeurt dus in de start-sync. Vandaar!
l_array = F_GetMareonInfo();
var G_mar_sync_opdr_past_days = parseInt(l_array[6]);
var G_mar_sync_opdr_past_secs_start = parseInt(l_array[7]);
var G_mar_sync_opdr_past_secs_stop = parseInt(l_array[8]);
var G_mar_sync_date_now = l_array[12]; // Timestamp *now* in format yyyy-mm-ddThh:mm:ss
var G_mar_sync_date_last = l_array[3]; // Timestamp last connection in format yyyy-mm-ddThh:mm:ss
var G_mar_sync_buffer = parseInt(l_array[13]); // Buffer in seconds, extra time overload (overlap van extra tijd)
var G_mar_communicatielogboek = parseInt(l_array[14]); // Opdrachtgever maakt gebruik van communicatielogboek (AX webservice UpdatePurchStatus beschikbaar)
var G_mar_sync_bijlages_opdrgvr = l_array[16]; // Bijlages vanuit opdrachtgever worden gedeeld met leverancier indien niet leeg/0. Voor Facilitor vullen met de flexprop-key
var G_mar_sync_bijlages_naar_opdrgvr = l_array[17]; // Bijlages vanuit opdrachtnemer worden gedeeld met opdrachtgever indien niet leeg/0. Voor Facilitor vullen met de flexprop-key
//MARX62284: Identityserver gegevens (tbv AX2012) niet in mareon sync.xml
var v_ax2012_bcproxy = l_array[19];
if (v_ax2012_bcproxy != ""){
G_ax2012_bcProxy = v_ax2012_bcproxy;
__Log("***XML- G_ax2012_bcProxy is overruled by Mareon", 3);
}
var v_ID_url = l_array[20];
if (v_ID_url != ""){
G_ID_saxton_url = v_ID_url;
__Log("***XML- G_ID_saxton_url is overruled by Mareon", 3);
}
var v_ID_client_id = l_array[21];
if (v_ID_client_id != ""){
G_ID_saxton_client_id = v_ID_client_id;
__Log("***XML- G_ID_saxton_client_id is overruled by Mareon", 3);
}
var v_ID_client_secret = l_array[22];
if (v_ID_client_secret != ""){
G_ID_saxton_client_secret = v_ID_client_secret;
__Log("***XML- G_ID_saxton_client_secret is overruled by Mareon", 3);
}
var v_ID_grant_type = l_array[23];
if (v_ID_grant_type != ""){
G_ID_saxton_grant_type = v_ID_grant_type;
__Log("***XML- G_ID_saxton_grant_type is overruled by Mareon", 3);
}
var v_ID_resource = l_array[24];
if (v_ID_resource != ""){
G_ID_saxton_resource = v_ID_resource;
__Log("***XML- G_ID_saxton_resource is overruled by Mareon", 3);
}
var v_ID_scope = l_array[25];
if (v_ID_scope != ""){
G_ID_saxton_scope = v_ID_scope;
__Log("***XML- G_ID_saxton_scope is overruled by Mareon", 3);
}
// MARX#76891 VM387219: Registratie in AX2012 of inkooporder aanwezig is in Mareon
var G_company_Id = l_array[27]; // AX-id van interne bedrijf, o.a. nodig in de webservice SupplierPortalPurchOrderDeliveredRequest
if (AX_or_Tobias() == "A")
{
__Log("AX2009", 2);
Ax_2_FACILITOR();
}
if (AX_or_Tobias() == "A12")
{
__Log("AX2012", 2);
Ax2012_2_FACILITOR();
}
if (AX_or_Tobias() == "A365")
{
__Log("AX365", 2);
AX365_2_FACILITOR();
}
if (AX_or_Tobias() == "T")
{
__Log("TOBIAS", 2);
Tobias_2_FACILITOR();
}
if (AX_or_Tobias() == "F")
{
__Log("FACILITOR", 2);
MAREON_2_FACILITOR();
}
if (AX_or_Tobias() == "R")
{
__Log("REMS", 2);
REMS_2_MAREON();
}
if (AX_or_Tobias() == "TQ")
{
__Log("TWINQ", 2);
MAREON_2_TWINQ();
}
if (AX_or_Tobias() == "3P")
{
__Log("3RD PARTY", 2);
MAREON_2_3RDPARTY();
}
if (G_ax_xtractorfolder != "")
{
FACILITOR_2_Xtractor();
}
FCLT_Sync_END();
}
else{
v_last_connect = l_array[3]; // format "2015-07-22T13:00"
v_connect_after = l_array[4]; // format "2015-07-22T12:30:22"
__Log("Connection NOT allowed (yet)", 1);
__Log("Last Connection: " + v_last_connect, 1);
__Log("Connection allowed after: " + v_connect_after, 1);
}
}
else{
__Log("Invalid Mareon adapter version", 0);
}
__Log("************************************************** END Mareon Adapter ***********************************************", 0);
__Log("", 1);
if (v_date_sendlogfile != "")
{
FCLT_SendLogFile(v_date_sendlogfile);
}
if (G_log_clean_days != -1)
{
CleanUp_Old_Logfiles(G_log_clean_days);
}
}