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:
@@ -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();
|
||||
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user