293 lines
14 KiB
JavaScript
293 lines
14 KiB
JavaScript
// --------------------------------------------------------------------------------------
|
|
// F_GetSuppliers.js
|
|
// Copyright 2014 SG|facilitor. 053-4800 700, helpdesk@sgfacilitor.nl
|
|
// Written by MB (2014)
|
|
//
|
|
// MAREON Connector/Adapter Ax -> FACILITOR en Facilitor -> Ax
|
|
// --------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
function api_F_PutOpdr_Bijlage(p_url, p_apikey, p_mld_opdr_key, p_bestandsnaam, p_bijlage64, p_kenmerk_key)
|
|
{
|
|
// FF voor de test naar uwv op work/trunk, mareon op labs is nog 2015.1 (wacht op 2015.2 stuff)
|
|
//var factuurkey = 98225;
|
|
//var G_marx_url = 'http://uwva.facws001/trunk/';
|
|
// var http://uwva.facws001.sg.nl/trunk/api2/issues/1021288.html?include=custom_fields&fileencoding=base64&fields=custom_fields
|
|
__Log("Start api_F_PutOpdr_Bijlage: ", 2);
|
|
try{
|
|
|
|
var v_url = p_url + "api2/orders/" + p_mld_opdr_key + ".json?scope=fo&include=custom_fields&fileencoding=base64";
|
|
|
|
var l_json_data =
|
|
{
|
|
order: {
|
|
custom_fields: [
|
|
{
|
|
propertyid: p_kenmerk_key,
|
|
attachments: [
|
|
{
|
|
name: p_bestandsnaam,
|
|
content_base64: p_bijlage64
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
}
|
|
|
|
l_json_message = JSON.stringify(l_json_data, null, 2);
|
|
var v_discard_active_abort = 1; //In geval van 500-error, geen active abort... (MARX#61048: Documenten versturen van Mareon naar AX)
|
|
var v_suppress_req_logging = 0; // Json message gewoon loggen indien dat gewenst is, dus niet onderdrukken.
|
|
var l_response_JSON = FcltAPI2(p_apikey, "PUT", v_url, l_json_message, v_discard_active_abort, v_suppress_req_logging);
|
|
//l_response_JSON_text = JSON.stringify(l_response_JSON, null, 2);
|
|
__Log("l_response_JSON_text:" + l_response_JSON, 3);
|
|
return l_response_JSON;
|
|
}
|
|
catch(e)
|
|
{
|
|
__Log("api_F_PutOpdr_Bijlage: catch met propertyid" + p_kenmerk_key, 3);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function F_GetOpdrachten_Key(p_ERP_id, p_mld_opdr_externnr)
|
|
{
|
|
var v_mld_opdr_key = "-1";
|
|
var v_API = "GET_OPDRDATA_4AX";
|
|
var v_APIKEY = G_marx_apikey;
|
|
var v_req = "<GetGET_OPDRDATA_4AX><adapterversion>" + G_Mareon_Adapter + "</adapterversion><APIkey>" + v_APIKEY + "</APIkey><ax_company_id>" + p_ERP_id + "</ax_company_id><mld_opdr_externnr>" + p_mld_opdr_externnr + "</mld_opdr_externnr></GetGET_OPDRDATA_4AX>"
|
|
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);
|
|
|
|
var l_node;
|
|
|
|
__Log("F_GetOpdrachten_Key: " + v_resp.text,3);
|
|
|
|
// Uitlezen van XML's...
|
|
var i = 1;
|
|
var strQuery = "//xml/mld_ordr[" + i + "]";
|
|
var l_deelxml = v_resp.selectSingleNode(strQuery);
|
|
if (l_deelxml)
|
|
{
|
|
var l_node = strQuery + "/mld_opdr_key";
|
|
var v_mld_opdr_key = v_resp.selectSingleNode(l_node).text;
|
|
}
|
|
__Log("v_mld_opdr_key: " + v_mld_opdr_key,2);
|
|
return v_mld_opdr_key;
|
|
}
|
|
|
|
//MARX#57420: Documenten van Tobias AX naar Mareon
|
|
//Input: v_xml_bijlagen_string, xml(node) met opdrachten en opdrachtregels, daarbinnen de documenten/bijlages.
|
|
|
|
function api_AX_2_F_Bijlagen(v_xml_bijlagen_string)
|
|
{
|
|
var v_xml_bijlagen = STR_2_XML(v_xml_bijlagen_string);
|
|
var l_xml_opdrachten = v_xml_bijlagen.getElementsByTagName("b:PurchOrder");
|
|
__Log("api_AX_2_F_Bijlagen: Aantal opdrachten met bijlage(s) = " + l_xml_opdrachten.length ,2);
|
|
var l_opdr_str = "";
|
|
var l_marx_api = "ACTION_REF_KEY";
|
|
var l_import_action = "OPDR_POST_BIJLAGE";
|
|
// Loop 1. Eerst de loop met alle opdrachten
|
|
for (var i=0; i < l_xml_opdrachten.length; i++)
|
|
{
|
|
var l_mld_opdr_key = -1;
|
|
var l_node_opdracht_companyId = l_xml_opdrachten[i].getElementsByTagName("b:CompanyId");
|
|
var l_node_opdracht_ionr = l_xml_opdrachten[i].getElementsByTagName("b:PurchId");
|
|
|
|
if (l_node_opdracht_companyId.length !=0){
|
|
l_opdracht_companyId = l_node_opdracht_companyId[0].childNodes[0].nodeValue;
|
|
}
|
|
if (l_node_opdracht_ionr.length !=0){
|
|
l_node_opdracht_ionr = l_node_opdracht_ionr[0].childNodes[0].nodeValue;
|
|
}
|
|
|
|
if (l_opdracht_companyId != "" && l_node_opdracht_ionr != ""){
|
|
l_mld_opdr_key = F_GetOpdrachten_Key(l_opdracht_companyId, l_node_opdracht_ionr);
|
|
}
|
|
|
|
__Log("api_AX_2_F_Bijlagen - l_mld_opdr_key: " + l_mld_opdr_key, 2);
|
|
if (l_mld_opdr_key != -1){
|
|
// Er is een mld_opdracht aangemaakt ovb Tobias ERP-id (l_opdracht_companyId) en daarbinnen het unieke opdrachtnummer l_node_opdracht_ionr.
|
|
|
|
// Loop 2. Daarna de loop met alle bestanden/documenten op opdracht-kop nivo
|
|
l_docs_xml = l_xml_opdrachten[i].getElementsByTagName("b:Documents");
|
|
l_aantal_uploads = api_AX_2_F_Verwerk_Documenten (l_mld_opdr_key, l_docs_xml , 0, "b:FileName", "b:Extension", "b:Base64");
|
|
|
|
// Loop 3. Nu nog de loop met alle opdracht-regels binnen de opdracht
|
|
var l_xml_opdrachtregels = l_xml_opdrachten[i].getElementsByTagName("b:SupplierPurchLine");
|
|
for (var j=0; j < l_xml_opdrachtregels.length; j++)
|
|
{
|
|
// Loop 4. Tenslotte de loop met alle bestanden/documenten op betreffende opdracht-regel nivo
|
|
l_docs_xml = l_xml_opdrachtregels[j].getElementsByTagName("b:Documents");
|
|
l_aantal_uploads = api_AX_2_F_Verwerk_Documenten (l_mld_opdr_key, l_docs_xml, l_aantal_uploads, "b:FileName", "b:Extension", "b:Base64");
|
|
}
|
|
l_opdr_str = l_opdr_str + "<action><action_code>" + l_import_action + "</action_code>" + "<ref_key>" + l_mld_opdr_key + "</ref_key></action>";
|
|
}
|
|
// Opdracht bestaat niet in Mareon, bijlages kunnen (nog) niet worden geupload.
|
|
else
|
|
{
|
|
__Log("api_AX_2_F_Bijlagen: Opdracht " + l_node_opdracht_ionr + " bestaat (nog) niet in Mareon, bijlagen kunnen niet worden geupload.",1);
|
|
}
|
|
}
|
|
if (l_opdr_str != ""){
|
|
// Er zijn (nieuwe) bijlages bij minimaal 1 opdracht geupload
|
|
l_opdr_str = "<xml>" + l_opdr_str + "</xml>";
|
|
api_F_PutXML(l_opdr_str, l_marx_api);
|
|
}
|
|
}
|
|
|
|
//MARX#57420: Documenten van Tobias AX naar Mareon
|
|
// Inputparamters:
|
|
// v_mld_opdr_key = Mareon opdracht key (mld_opdr_key)
|
|
// v_xml_documenten = xml met alle documenten (op opdracht- of regelnivo)
|
|
// v_aantal_uploads = aantal documenten tot nu toe bij opdracht geupload, initeel waarde 0.
|
|
// Er wordt hier in deze functie gecheckt dat het maximum aantal documenten bij een opdracht het maximum (van 10 doen we, vanuit REMS overgenomen) niet wordt overschreden.
|
|
// Hierbij wordt geen rekening gehouden met evt. al aanwezige bestanden bij de opdracht, bij een vorige call.
|
|
// NB: Ketenstandaard geeft een maximum van 3 bestanden (op opdracht-kop nivo), 10 is daarbij vergeleken heel erg ruim!
|
|
|
|
// Outputparameter (dwz result) vandeze functie:
|
|
// l_result: Aantal bestanden dat erbij is geupload.
|
|
|
|
function api_AX_2_F_Verwerk_Documenten(v_mld_opdr_key, v_xml_documenten, v_aantal_uploads, v_filename, v_file_extension, v_file_content_base64){
|
|
var l_result = 0;
|
|
var l_xml_document = v_xml_documenten[0].getElementsByTagName("b:Document");
|
|
for (var i=0; i < l_xml_document.length; i++)
|
|
{
|
|
if (i + v_aantal_uploads < 10){
|
|
l_result = i + 1;
|
|
|
|
var l_bijlage_naam = null;
|
|
var l_bijlage_ext = null;
|
|
var l_bijlage_base64 = null;
|
|
|
|
var node_media_id = l_xml_document[i].getElementsByTagName(v_filename);
|
|
if (node_media_id.length !=0)
|
|
l_bijlage_naam = node_media_id[0].childNodes[0].nodeValue;
|
|
__Log("Bestandsnaam[" + i + "] : " + l_bijlage_naam, 2);
|
|
|
|
var node_media_type = l_xml_document[i].getElementsByTagName(v_file_extension);
|
|
if (node_media_type.length !=0)
|
|
l_bijlage_ext= node_media_type[0].childNodes[0].nodeValue;
|
|
__Log("Bestands-extensie[" + i + "] : " + l_bijlage_ext, 2);
|
|
|
|
var node_documentinhoud64 = l_xml_document[i].getElementsByTagName(v_file_content_base64);
|
|
if (node_documentinhoud64.length !=0){
|
|
l_bijlage_base64 = node_documentinhoud64[0].childNodes[0].nodeValue;
|
|
}
|
|
__Log("DocumentInhoud[" + i + "] : " + l_bijlage_base64, 4);
|
|
|
|
// Maximaal 10 bijlages staan we per opdracht toe.
|
|
if (l_bijlage_base64 && l_bijlage_naam && l_bijlage_ext){
|
|
var l_bestandsnaam = l_bijlage_naam + "." + l_bijlage_ext;
|
|
__Log("api_AX_2_F_Verwerk_Documenten - l_bestandsnaam : " + l_bestandsnaam, 3);
|
|
__Log("api_AX_2_F_Verwerk_Documenten - v_mld_opdr_key : " + v_mld_opdr_key, 3);
|
|
if (v_mld_opdr_key != -1) {
|
|
__Log("api_AX_2_F_Verwerk_Documenten - Before api_F_PutOpdr_Bijlage : ", 3);
|
|
// Kenmerk-key in Mareon waarin de bijlagen terecht moet komen is key 20.
|
|
var l_upload_success = api_F_PutOpdr_Bijlage(G_marx_url, G_marx_apikey, v_mld_opdr_key, l_bestandsnaam, l_bijlage_base64, 20);
|
|
if (l_upload_success == null){
|
|
// Upload niet gelukt, b.v. omdat opdracht al gesloten was (technisch gereed of afgewezen), of omdat file-extensie niet geoorloofd, omdat ....
|
|
// Dat zouden we kunnen tracken bij de opdracht, b.v. via algemene API 'ACTION_REF_KEY' onder een CUST-notify, doen we vooralsnog ff niet
|
|
// We loggen dat iig wel...
|
|
__Log("Upload failure api_AX_2_F_Verwerk_Documenten: Bijlage " + l_bestandsnaam + " NIET geupload naar kenmerk ",1);
|
|
}
|
|
// ----------------------------------------------------------------------
|
|
__Log("api_AX_2_F_Verwerk_Documenten - After api_F_PutOpdr_Bijlage : ", 3);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
__Log("api_AX_2_F_Verwerk_Documenten: Maximum van 10 documenten is bereikt, bijlagen kan niet worden geupload.",1);
|
|
}
|
|
}
|
|
return l_result + v_aantal_uploads;
|
|
}
|
|
|
|
|
|
//MARX#57420: Documenten van Tobias AX naar Mareon, webservice om van nieuwe toegevoegde opdrachten in Mareon, de bijlages vanuit opdrachtgever op te halen.
|
|
//Deze functie is alleen (en alleen) voor Facilitor - Mareon bedoeld (niet voor AX)
|
|
function F_GetOpdrachten_NEW()
|
|
{
|
|
|
|
var v_API = "NEW_OPDR_4FCLT";
|
|
var v_APIKEY = G_marx_apikey;
|
|
var v_req = "<GetNEW_OPDR_4FCLT><adapterversion>" + G_Mareon_Adapter + "</adapterversion><APIkey>" + v_APIKEY + "</APIkey></GetNEW_OPDR_4FCLT>"
|
|
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);
|
|
|
|
var l_node;
|
|
|
|
var l_opdr_str = "";
|
|
|
|
|
|
__Log("F_GetOpdrachten_NEW: " + v_resp.text, 3);
|
|
|
|
// Uitlezen van XML's...
|
|
var i = 1;
|
|
var strQuery = "//xml/mld_ordr[" + i + "]";
|
|
var l_deelxml = v_resp.selectSingleNode(strQuery);
|
|
while (l_deelxml)
|
|
{
|
|
l_node = strQuery + "/mld_opdr_key";
|
|
var v_mld_opdr_key_marx = v_resp.selectSingleNode(l_node).text;
|
|
|
|
l_node = strQuery + "/mld_opdr_key_fclt";
|
|
var v_mld_opdr_key_fclt = v_resp.selectSingleNode(l_node).text;
|
|
__Log("v_mld_opdr_key_fclt: " + v_mld_opdr_key_fclt,2);
|
|
|
|
l_opdr_str = l_opdr_str + F_Putorders_NEW(v_mld_opdr_key_marx, v_mld_opdr_key_fclt);
|
|
|
|
i = i + 1;
|
|
|
|
var strQuery = "//xml/mld_ordr[" + i + "]";
|
|
l_deelxml = v_resp.selectSingleNode(strQuery);
|
|
}
|
|
F_GetOpdrachten_NEW_POST (l_opdr_str);
|
|
}
|
|
|
|
|
|
// MARX#65463: Bijlages komen niet aan AAGN -> Schekman
|
|
// Ophalen van bijlages vanuit, in beide gevallen, dwz vanuit oude SYNC-mode en ook vanuit de nieuwe NQ-modes
|
|
// Uitgestelde Putorders/mar_send_mld_opdr_to_supplier uit mar_update_gen_opdrachten (mareon.sql) moet nog aangeslingerd worden, onvoorwaardelijk, of er nu bijlages zijn gevonden of niet.
|
|
// Deze functie is alleen voor Facilitor (niet Tobias etc) bedoeld!
|
|
function F_Putorders_NEW(v_mld_opdr_key_marx, v_mld_opdr_key_fclt)
|
|
{
|
|
var l_import_action = "OPDR_POST_PUTORDERS";
|
|
var l_opdr_str = "";
|
|
if (AX_or_Tobias() == "F") {
|
|
if (G_mar_sync_bijlages_opdrgvr != '0' && G_mar_sync_bijlages_opdrgvr != '-1'){
|
|
// MARX#57420: Documenten van Tobias AX naar Mareon
|
|
// 0/leeg = bestanden vanuit opdrachtgever worden niet gedeeld;
|
|
// <> 0 = bestanden vanuit opdrachtgever wel delen met leverancier, default wordt door import nieuwe woco/opdrachtgever de waarde -1 ingevuld, mn voor Tobias bedoeld, hiermee wordt bereikt dat default wel bijlages wordt uitgewisseld.
|
|
// LET OP!: vul voor Faciltior kenmerk-key bijlages in, dus key van flexprop van bijlages uit facilitor omgeving, -1 is daarbij geen geldige waarde/key voor kenmerk, en betekent geen uitwisseling)
|
|
//Deze key voor Facilitor moet derhalve > 0 zijn, anders heeft dat geen zin cq. gaat dat fout.
|
|
v_aantal_bestanden = FCLT_2_MARX_PutOpdrachtBijlages(v_mld_opdr_key_fclt, v_mld_opdr_key_marx);
|
|
}
|
|
}
|
|
l_opdr_str = l_opdr_str + "<action><action_code>" + l_import_action + "</action_code>" + "<ref_key>" + v_mld_opdr_key_marx + "</ref_key></action>";
|
|
return l_opdr_str;
|
|
}
|
|
|
|
|
|
function F_GetOpdrachten_NEW_POST (l_opdr_str)
|
|
{
|
|
var l_marx_api = "ACTION_REF_KEY";
|
|
if (l_opdr_str != ""){
|
|
// Er zijn (nieuwe) bijlages bij minimaal 1 opdracht geupload, of in geval van NQ altijd een post-bericht (uitgesteld putorders)...
|
|
l_opdr_str = "<xml>" + l_opdr_str + "</xml>";
|
|
api_F_PutXML(l_opdr_str, l_marx_api);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|