From 072b702731a51a23fe60b66bae3440bd47d9474a Mon Sep 17 00:00:00 2001 From: Marcel Bourseau Date: Fri, 8 Apr 2022 15:27:08 +0000 Subject: [PATCH] MARX#71922 Factuurbericht naar Twinq - Nieuwe functies "MARX_2_TWINQ_Facturen" en "F_GetFacturen_TWINQ" svn path=/Mareon/trunk/; revision=55552 --- ax/SRC/AxFacilitor.js | 32 ++++++----- ax/SRC/F_GetFacturen.js | 116 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 134 insertions(+), 14 deletions(-) diff --git a/ax/SRC/AxFacilitor.js b/ax/SRC/AxFacilitor.js index f69923d..b2c10a0 100644 --- a/ax/SRC/AxFacilitor.js +++ b/ax/SRC/AxFacilitor.js @@ -18,16 +18,21 @@ function FCLT_Sync_END(){ switch (l_erp) { - case "A365": - // AX 365 - F_PutSync(2); + case "A": + // AX 2009 + F_PutSync(1); break; - case "F": - // Facilitor - F_PutSync(2); + case "A12": + // AX 2012 + F_PutSync(1); + break; + case "T": + // Tobias Progress + F_PutSync(1); break; default: - F_PutSync(1); + // T365, Facilitor, REMS en Twinq + F_PutSync(2); } } @@ -627,13 +632,11 @@ function MAREON_2_TWINQ() 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); + //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 @@ -669,8 +672,9 @@ function FACILITOR_2_Xtractor() // 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 -var G_Mareon_Adapter = "1.60"; +var G_Mareon_Adapter = "1.61"; //MARX#56643: Test Haagwonen inkoopordernummer ontbreekt in Mareon ION001753 var G_new_date = new Date(); //----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/ax/SRC/F_GetFacturen.js b/ax/SRC/F_GetFacturen.js index 550fee9..b26e91b 100644 --- a/ax/SRC/F_GetFacturen.js +++ b/ax/SRC/F_GetFacturen.js @@ -541,4 +541,120 @@ function A365_Xtractor2AX(v_resp, i, v_deelxml, v_factuur_key, v_notification_ke } +function F_GetFacturen_TWINQ() +{ + var v_API = "FACT4_SALES005"; + var v_APIKEY = G_marx_apikey; + var v_req = "" + G_Mareon_Adapter + "" + var v_type = 1; // xml + var v_soap_envelop = 1; //soap-envelop eromheen + + var v_resp = apiFCLT(G_marx_url, v_API, v_APIKEY, v_req, v_type, v_soap_envelop, 0); + + __Log("F_GetFacturen_TWINQ: " + v_resp.text, 4); + + + var l_tmp_namespace = "sales"; // Deze tijdelijke en dummy namespace (truuk) met letters mb had van alles kunnen zijn, en is nodig om een goede query op Invoice te doen, + // want in de XML staat de default namespace (zonder prefix dus). Als we dit NIET doen, wordt er niets gequeryd uit XML!! En gaat het dus fout! + // namespace=http://www.ketenstandaard.nl/factuur/SALES/005 + v_resp.setProperty ("SelectionNamespaces", "xmlns:" + l_tmp_namespace + "='http://www.ketenstandaard.nl/factuur/SALES/005'"); + + // SPlitsen van XML's... + var i = 1; + var strQuery = "//batch/fin_factuur[" + i + "]"; + l_deelxml = v_resp.selectSingleNode(strQuery); + while (l_deelxml) + { + + var l_strQuery_fin_factuur_key = strQuery + "/fin_factuur_key"; + var l_fin_factuur_key = v_resp.selectSingleNode(l_strQuery_fin_factuur_key).text; + __Log("l_fin_factuur_key: " + l_fin_factuur_key, 3); + + var l_strQuery_fac_notificatie_key = strQuery + "/fac_notificatie_key"; + var l_fac_notificatie_key = v_resp.selectSingleNode(l_strQuery_fac_notificatie_key).text; + __Log("l_fac_notificatie_key: " + l_fac_notificatie_key, 3); + + // Eerst nog de Facilitor/Mareon headers van de XML eraf halen om de SALES005 over te houden. + var strUBLQuery = "//" + l_tmp_namespace + ":Invoice"; + var tmp_xml = STR_2_XML(l_deelxml.xml); + __Log("F_GetFacturen_TWINQ: tmp_xml " + tmp_xml.xml, 4); + tmp_xml.setProperty ("SelectionNamespaces", "xmlns:" + l_tmp_namespace + "='http://www.ketenstandaard.nl/factuur/SALES/005'"); + var l_sales005_xml = tmp_xml.selectSingleNode(strUBLQuery); + __Log("F_GetFacturen_TWINQ: l_sales005_xml " + l_sales005_xml, 3); + + l_pdf_base64 = F_Get_Base64_FactuurFile(l_fin_factuur_key); + if (l_pdf_base64 != ""){ + + // De node Attachment in de XML. + var strUBLQuery = "//" + l_tmp_namespace + ":Invoice" + "/" + l_tmp_namespace + ":Attachment"; + var node_attachment = l_sales005_xml.selectSingleNode(strUBLQuery); + + if (node_attachment.length != 0){ + // De node Attachment in de XML bestaat dus. + __Log("XML node Attachment exists", 3); + + // De node AttachedData in XMLResult gaat inhoud krijgen met de base64 tekenreeks. + var strUBLQuery = "//" + l_tmp_namespace + ":Invoice" + "/" + l_tmp_namespace + ":Attachment" + "/" + l_tmp_namespace + ":AttachedData"; + var node_attached_data = l_sales005_xml.selectSingleNode(strUBLQuery); + + if (node_attached_data.length != 0){ + __Log("XML node AttachedData exists", 3); + node_attached_data.text=l_pdf_base64; + } + else { + __Log("XML node AttachedData does NOT exist",2); + + newEle = v_resp.createElement(l_tmp_namespace + ":AttachedData"); + __Log("XML element AttachedData created",3); + newTxt = v_resp.createTextNode(l_pdf_base64); + __Log("XML textnode with base64 data created",3); + newEle.appendChild(newTxt); + __Log("XML element AttachedData with textnode",3); + node_attachment.appendChild(newEle); + __Log("XML element added to XML",3); + } + } + } + + var XMLResult = "" + l_sales005_xml.xml; + if (G_log_level >= 4 && G_fclt_factuur_xmlfolder != ''){ + WriteText2File(G_fclt_factuur_xmlfolder, "twinq[" + i + "]" , "xml" , XMLResult, 1, 1); + } + + // Send factuur-XML to TWINQ + + + 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_result = apiAX_GENERAL (v_API, XMLResult, v_type, v_soapAction, v_discard_active_abort, v_soort_api); + + + var l_statuscode = v_result.api_status_code; + var l_statustekst = v_result.api_status_message; + var l_reponsetekst = v_result.api_response_message; + + if (l_statuscode == 1){ + // Factuur is goed verwerkt door Twinq + // Dan de factuur op verwerkt zetten en evt de auto-close van bijbehorende opdracht, dus call van MARX_Send_Succes_Or_Failure + MARX_Send_Succes_Or_Failure(l_fin_factuur_key, "FIN_FACTUUR_POST_SUCCESS", ""); + //en natuurlijk de factuur uit de notifyqueue verwijderen... + post_do_exec_notification(l_fac_notificatie_key, v_result); + __Log("TWINQ factuurverwerking succesvol",3); + } + else{ + var l_extra_omschr = l_statustekst + " - " + l_reponsetekst; + l_extra_omschr = l_extra_omschr.substr(0, 4000); + // de factuur voorzien van een failure in notifyqueue + ORDTRK met de response-fout + post_do_exec_notification(l_fac_notificatie_key, v_result); + __Log("TWINQ factuurverwerking NIET succesvol",1); + } + + i = i + 1; + var strQuery = "//batch/fin_factuur[" + i + "]"; + l_deelxml = v_resp.selectSingleNode(strQuery); + } +}