MARX#71922 Factuurbericht naar Twinq - Nieuwe functies "MARX_2_TWINQ_Facturen" en "F_GetFacturen_TWINQ"

svn path=/Mareon/trunk/; revision=55552
This commit is contained in:
Marcel Bourseau
2022-04-08 15:27:08 +00:00
parent d03ac9955a
commit 072b702731
2 changed files with 134 additions and 14 deletions

View File

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

View File

@@ -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 = "<GetFACT4_SALES005_NQ><adapterversion>" + G_Mareon_Adapter + "</adapterversion></GetFACT4_SALES005_NQ>"
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 = "<?xml version=\"1.0\"?>" + 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);
}
}