MARX#69956 Notities bij opdrachten naar de opdrachtgever - Bijlage in notities ook naar opdrachtgever (in geval van AX2012, T365 en Facilitor)

svn path=/Mareon/trunk/; revision=65321
This commit is contained in:
Marcel Bourseau
2024-06-27 14:30:42 +00:00
parent fb81c5842c
commit e92c4eab25
4 changed files with 195 additions and 87 deletions

View File

@@ -109,6 +109,10 @@ function AX2012_2_FCLT_Opdrachten(){
function FCLT_2_AX2012_Bijlagen(){
F_GetOpdrachten_Bijlagen();
//MARX#69956 Notities bij opdrachten naar de opdrachtgever, dan ook evt bijlagen in notities.
if (G_mar_sync_bijlages_naar_opdrgvr == '-1'){
F_GetOpdrachtenNotitie_Bijlagen();
}
}
function FCLT_2_AX2012_OpdrachtStatus(){
@@ -743,7 +747,7 @@ function FACILITOR_2_Xtractor()
// 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)
// 1.90 -- MARX#69956 Notities bij opdrachten naar de opdrachtgever
// 1.90 -- MARX#69956: Notities bij opdrachten naar de opdrachtgever
var G_Mareon_Adapter = "1.90";
//MARX#56643: Test Haagwonen inkoopordernummer ontbreekt in Mareon ION001753

View File

@@ -65,12 +65,12 @@ function FCLT_or_MARX_PutOpdrachtBijlages(v_url_bron, v_apikey_bron, v_mld_opdr_
var l_filename;
var l_file_url;
var l_file_size;
var v_suppress_req_logging = 0; // Logging van request, indien dat gewenst is, niet onderdrukken.
var l_response_JSON = FcltAPI2(v_apikey_bron, "GET", l_url, "", 0, v_suppress_req_logging);
if (l_response_JSON)
{
__Log("FCLT_GetOpdrachtBijlages: GET", 2);
__Log("FCLT_or_MARX_PutOpdrachtBijlages: GET", 2);
var data = eval ("(" + l_response_JSON.responseText + ")");
__Log("Opdracht data:" + data, 4);
if ("order" in data && "custom_fields" in data.order)
@@ -78,90 +78,168 @@ function FCLT_or_MARX_PutOpdrachtBijlages(v_url_bron, v_apikey_bron, v_mld_opdr_
for (var fld in data.order.custom_fields)
{ __Log("Bijlage custom_fields: fld", 3);
var attarr = data.order.custom_fields[fld].attachments;
if (attarr)
{ v_totaal_aantal_bestanden = attarr.length;
__Log("Aantal opdracht attachments " + v_src_2_dest + " :" + v_totaal_aantal_bestanden, 3);
for (var i = 0; i < v_totaal_aantal_bestanden; i++)
{
l_filename = attarr[i].name;
l_file_size = attarr[i].size;
l_file_url = attarr[i].content_url;
// MARX61048: Documenten versturen van Mareon naar AX (Stadgenoot), alleen bijlages die nog niet eerder zijn geupload (dus check filter v_fac_bijlagen_filename)
// Als er geen filter met files is opgegeven (= dont care), of wel een filter maar de filenaam is gelijk aan of zit in het filter, dan uploaden die hap :) naar het andere systeem...
if ((v_fac_bijlagen_filename == "") || (l_filename == v_fac_bijlagen_filename)){
__Log("File: " + l_filename,2);
__Log("Size: " + l_file_size,2);
__Log("Url: " + l_file_url,2);
// ophalen van binary bestand via URL l_file_url en base64 encoderen...
v_base64_str = BinaryStream_2_Base64(v_apikey_bron, l_file_url);
if (v_src_2_dest == "MARX_2_AX") {
var v_resp_xml_str = A_UploadDocument (v_base64_str);
var v_checksum = A_GetCheckSum_UploadDocument(v_resp_xml_str);
if (v_checksum != ""){
// v_company_id, v_entityname, v_entityid , v_checksum, v_filename, v_notes);
A_CreateDocuRefByEntityName (v_apikey_dest, "PurchaseOrder", v_mld_opdr_key_dest, v_checksum, l_filename, "");
}
else{
__Log("FCLT_or_MARX_PutOpdrachtBijlages warning: checksum not returned by Tobias AX 2009",1);
}
}
if (v_src_2_dest == "MARX_2_AX2012") {
var v_resp_json_str = A2012_UploadDocument (v_base64_str);
var v_checksum = A12_365_GetCheckSum_UploadDocument(v_resp_json_str);
if (v_checksum != ""){
// v_company_id, v_entityname, v_entityid , v_checksum, v_filename, v_notes);
A2012_CreateDocuRefByEntityName (v_apikey_dest, "PurchaseOrder", v_mld_opdr_key_dest, v_checksum, l_filename, "");
}
else{
__Log("FCLT_or_MARX_PutOpdrachtBijlages warning: checksum not returned by Tobias AX 2012",1);
}
}
if (v_src_2_dest == "MARX_2_AX365") {
var v_resp_json_str = A365_UploadDocument (v_base64_str);
var v_checksum = A12_365_GetCheckSum_UploadDocument(v_resp_json_str);
if (v_checksum != ""){
// v_company_id, v_entityname, v_entityid , v_checksum, v_filename, v_notes);
A365_CreateDocuRefByEntityName (v_apikey_dest, "PurchaseOrder", v_mld_opdr_key_dest, v_checksum, l_filename, "");
}
else{
__Log("FCLT_or_MARX_PutOpdrachtBijlages warning: checksum not returned by Tobias AX 365",1);
}
}
if ((v_src_2_dest == "FCLT_2_MARX") || (v_src_2_dest == "MARX_2_FCLT")) {
// Van Facilitor naar Mareon OF van Mareon naar Facilitor
var l_kenmerk_arr = v_mld_kenmerk_key_dest.split(",");
__Log("Aantal kenmerk-keys: " + l_kenmerk_arr.length, 3);
for (var j = 0; j < l_kenmerk_arr.length; j++)
{ try {
var l_kenmerk_key = parseInt(l_kenmerk_arr[j]);
var l_upload_success = api_F_PutOpdr_Bijlage(v_url_dest, v_apikey_dest, v_mld_opdr_key_dest, l_filename, v_base64_str, l_kenmerk_key);
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
__Log("Upload failure: Bijlage " + v_src_2_dest + ": File " + l_filename + " NIET geupload naar kenmerk " + l_kenmerk_key ,1);
}
else
{
__Log("Upload success: Bijlage " + v_src_2_dest + ": File " + l_filename + " geupload naar kenmerk " + l_kenmerk_key ,3);
}
}
catch(e) {
__Log("FCLT_or_MARX_PutOpdrachtBijlages: catch van parseInt van kenmerk-key" + l_kenmerk_arr[j], 3);
}
}
}
}
}
}
v_totaal_aantal_bestanden += UploadBijlagen(attarr, v_apikey_bron, v_url_dest, v_apikey_dest, v_mld_opdr_key_dest, v_mld_kenmerk_key_dest, v_src_2_dest, v_fac_bijlagen_filename);
}
}
}
else
{
__Log("FCLT_GetOpdrachtBijlages 1: " + l_response_JSON.responseText,2);
__Log("FCLT_GetOpdrachtBijlages 2: " + l_response_JSON.status, 2);
__Log("FCLT_or_MARX_PutOpdrachtBijlages 1: " + l_response_JSON.responseText,2);
__Log("FCLT_or_MARX_PutOpdrachtBijlages 2: " + l_response_JSON.status, 2);
}
return v_totaal_aantal_bestanden;
}
function MARX_GetOpdrNotitieBijlages(v_url_bron, v_apikey_bron, v_mld_opdr_key_bron, v_url_dest, v_apikey_dest, v_mld_opdr_key_dest, v_mld_opdr_note_key, v_mld_kenmerk_key_dest, v_src_2_dest, v_fac_bijlagen_filename)
{
// Init aantal bijlages op 0.
var v_totaal_aantal_bestanden = 0;
//v_mld_opdr_note_key is de notitie waar evt bijlagen zijn toegevoegd, dat gaan we hier uitvogelen
var l_url = v_url_bron + "api2/orders/" + v_mld_opdr_key_bron + ".json?include=notes&notes_id=" + v_mld_opdr_note_key;
__Log("l_url: " + l_url,3);
var v_suppress_req_logging = 0; // Logging van request, indien dat gewenst is, niet onderdrukken.
var l_response_JSON = FcltAPI2(v_apikey_bron, "GET", l_url, "", 0, v_suppress_req_logging);
if (l_response_JSON)
{
__Log("MARX_GetOpdrNotitieBijlages: GET", 2);
var data = eval ("(" + l_response_JSON.responseText + ")");
__Log("Opdracht data:" + data, 4);
if ("order" in data && "notes" in data.order)
{ __Log("Opdracht : order", 3);
for (var fld in data.order.notes)
{ __Log("Bijlage notes: fld", 3);
var attarr = data.order.notes[fld].attachments;
v_totaal_aantal_bestanden += UploadBijlagen(attarr, v_apikey_bron, v_url_dest, v_apikey_dest, v_mld_opdr_key_dest, v_mld_kenmerk_key_dest, v_src_2_dest, v_fac_bijlagen_filename);
}
}
}
else
{
__Log("MARX_GetOpdrNotitieBijlages 1: " + l_response_JSON.responseText,2);
__Log("MARX_GetOpdrNotitieBijlages 2: " + l_response_JSON.status, 2);
}
return v_totaal_aantal_bestanden;
}
function UploadBijlagen(v_attachments, v_apikey_bron, v_url_dest, v_apikey_dest, v_mld_opdr_key_dest, v_mld_kenmerk_key_dest, v_src_2_dest, v_fac_bijlagen_filename)
{
// v_attachments moet JSON ARRAY zijn met minimaal deze parameters:
// [
// {
// "name": "image_20240612T133240.png",
// "content_url": "http://marx.facws001.sg.nl/branch20242/appl/shared/BijlagenStream.asp?module=ORDN&bijlagen_key=3713551&opdr_key=3554247&hmac=12345...."
// },
// {
// "name": "image_20240612T133241.png",
// "content_url": "http://marx.facws001.sg.nl/branch20242/appl/shared/BijlagenStream.asp?module=ORDN&bijlagen_key=3713552&opdr_key=3554247&hmac=67890...."
// },
// ....
// ]
var l_filename;
var l_file_url;
// Init aantal bijlages op 0.
var v_totaal_aantal_bestanden = 0;
if (v_attachments)
{ v_totaal_aantal_bestanden = v_attachments.length;
__Log("Aantal opdracht attachments " + v_src_2_dest + " :" + v_totaal_aantal_bestanden, 3);
for (var i = 0; i < v_totaal_aantal_bestanden; i++)
{
l_filename = v_attachments[i].name;
l_file_url = v_attachments[i].content_url;
// MARX61048: Documenten versturen van Mareon naar AX (Stadgenoot), alleen bijlages die nog niet eerder zijn geupload (dus check filter v_fac_bijlagen_filename)
// Als er geen filter met files is opgegeven (= dont care), of wel een filter maar de filenaam is gelijk aan of zit in het filter, dan uploaden die hap :) naar het andere systeem...
if ((v_fac_bijlagen_filename == "") || (l_filename == v_fac_bijlagen_filename)){
__Log("File: " + l_filename,2);
__Log("Url: " + l_file_url,2);
// ophalen van binary bestand via URL l_file_url en base64 encoderen...
v_base64_str = BinaryStream_2_Base64(v_apikey_bron, l_file_url);
if (v_src_2_dest == "MARX_2_AX") {
var v_resp_xml_str = A_UploadDocument (v_base64_str);
var v_checksum = A_GetCheckSum_UploadDocument(v_resp_xml_str);
if (v_checksum != ""){
// v_company_id, v_entityname, v_entityid , v_checksum, v_filename, v_notes);
A_CreateDocuRefByEntityName (v_apikey_dest, "PurchaseOrder", v_mld_opdr_key_dest, v_checksum, l_filename, "");
}
else{
__Log("FCLT_or_MARX_PutOpdrachtBijlages warning: checksum not returned by Tobias AX 2009",1);
}
}
if (v_src_2_dest == "MARX_2_AX2012") {
var v_resp_json_str = A2012_UploadDocument (v_base64_str);
var v_checksum = A12_365_GetCheckSum_UploadDocument(v_resp_json_str);
if (v_checksum != ""){
// v_company_id, v_entityname, v_entityid , v_checksum, v_filename, v_notes);
A2012_CreateDocuRefByEntityName (v_apikey_dest, "PurchaseOrder", v_mld_opdr_key_dest, v_checksum, l_filename, "");
}
else{
__Log("FCLT_or_MARX_PutOpdrachtBijlages warning: checksum not returned by Tobias AX 2012",1);
}
}
if (v_src_2_dest == "MARX_2_AX365") {
var v_resp_json_str = A365_UploadDocument (v_base64_str);
var v_checksum = A12_365_GetCheckSum_UploadDocument(v_resp_json_str);
if (v_checksum != ""){
// v_company_id, v_entityname, v_entityid , v_checksum, v_filename, v_notes);
A365_CreateDocuRefByEntityName (v_apikey_dest, "PurchaseOrder", v_mld_opdr_key_dest, v_checksum, l_filename, "");
}
else{
__Log("FCLT_or_MARX_PutOpdrachtBijlages warning: checksum not returned by Tobias AX 365",1);
}
}
if ((v_src_2_dest == "FCLT_2_MARX") || (v_src_2_dest == "MARX_2_FCLT")) {
// Van Facilitor naar Mareon OF van Mareon naar Facilitor
var l_kenmerk_arr = v_mld_kenmerk_key_dest.split(",");
__Log("Aantal kenmerk-keys: " + l_kenmerk_arr.length, 3);
for (var j = 0; j < l_kenmerk_arr.length; j++)
{ try {
var l_kenmerk_key = parseInt(l_kenmerk_arr[j]);
var l_upload_success = api_F_PutOpdr_Bijlage(v_url_dest, v_apikey_dest, v_mld_opdr_key_dest, l_filename, v_base64_str, l_kenmerk_key);
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
__Log("Upload failure: Bijlage " + v_src_2_dest + ": File " + l_filename + " NIET geupload naar kenmerk " + l_kenmerk_key ,1);
}
else
{
__Log("Upload success: Bijlage " + v_src_2_dest + ": File " + l_filename + " geupload naar kenmerk " + l_kenmerk_key ,3);
}
}
catch(e) {
__Log("FCLT_or_MARX_PutOpdrachtBijlages: catch van parseInt van kenmerk-key" + l_kenmerk_arr[j], 3);
}
}
}
}
}
}
return v_totaal_aantal_bestanden;
}
function MARX_SendOpdrachtNotitieBijlages(v_ax_company_id, v_mld_opdr_key_marx, v_mld_opdr_note_key, v_mld_opdr_ordernr, v_mld_opdr_externnr)
{
var v_aantal_bestanden = 0;
if (AX_or_Tobias() == "A") {
var v_aantal_bestanden = MARX_GetOpdrNotitieBijlages(G_marx_url, G_marx_apikey, v_mld_opdr_key_marx, "", v_ax_company_id, v_mld_opdr_externnr, v_mld_opdr_note_key, "", "MARX_2_AX", "");
}
if (AX_or_Tobias() == "A12") {
var v_aantal_bestanden = MARX_GetOpdrNotitieBijlages(G_marx_url, G_marx_apikey, v_mld_opdr_key_marx, "", v_ax_company_id, v_mld_opdr_externnr, v_mld_opdr_note_key, "", "MARX_2_AX2012", "");
}
if (AX_or_Tobias() == "A365") {
var v_aantal_bestanden = MARX_GetOpdrNotitieBijlages(G_marx_url, G_marx_apikey, v_mld_opdr_key_marx, "", v_ax_company_id, v_mld_opdr_externnr, v_mld_opdr_note_key, "", "MARX_2_AX365", "");
}
if (AX_or_Tobias() == "F") {
var v_aantal_bestanden = MARX_GetOpdrNotitieBijlages(G_marx_url, G_marx_apikey, v_mld_opdr_key_marx, G_fclt_url, G_fclt_apikey, v_mld_opdr_ordernr, v_mld_opdr_note_key, G_mar_sync_bijlages_naar_opdrgvr, "MARX_2_FCLT", "");
}
return v_aantal_bestanden;
}

View File

@@ -12,7 +12,7 @@ function F_GetOpdracht_BijlagenQueue (p_opdr_key, p_aanmaak_datum_van){
var v_APIKEY = G_marx_apikey;
var v_req = "<GetBIJLAGEN_QUEUE_OPDR_4AX><adapterversion>" + G_Mareon_Adapter + "</adapterversion><APIkey>" + v_APIKEY + "</APIkey><mld_opdr_key>" + p_opdr_key + "</mld_opdr_key><aanmaak_datum_van>" + p_aanmaak_datum_van + "</aanmaak_datum_van></GetBIJLAGEN_QUEUE_OPDR_4AX>";
var v_API = "BIJLAGEN_QUEUE_OPDR_4AX";
F_GetOpdrachten_Bijlagen_Inner(v_req, v_API);
F_GetOpdrachten_Bijlagen_Inner(v_req, v_API, "mld_opdr");
}
//Deze functie (bestond al) levert de bijlagen van alle opdrachten van opdrachtgever (APIKEY) op, die sinds de laatste sync-datum/tijd erbij zijn gekomen
@@ -21,10 +21,20 @@ function F_GetOpdrachten_Bijlagen()
var v_APIKEY = G_marx_apikey;
var v_req = "<GetBIJLAGEN_OPDR_4AX><adapterversion>" + G_Mareon_Adapter + "</adapterversion><APIkey>" + v_APIKEY + "</APIkey></GetBIJLAGEN_OPDR_4AX>";
var v_API = "BIJLAGEN_OPDR_4AX";
F_GetOpdrachten_Bijlagen_Inner(v_req, v_API);
F_GetOpdrachten_Bijlagen_Inner(v_req, v_API, "mld_opdr");
}
function F_GetOpdrachten_Bijlagen_Inner(v_req, v_API)
//MARX#69956 Notities bij opdrachten naar de opdrachtgever, dan ook evt bijlagen in notities.
//Deze functie (bestond al) levert de bijlagen van alle opdrachtnotities van opdrachtgever (APIKEY) op, die sinds de laatste sync-datum/tijd erbij zijn gekomen
function F_GetOpdrachtenNotitie_Bijlagen()
{
var v_APIKEY = G_marx_apikey;
var v_req = "<GetBIJLAGEN_OPDR_NOTES_4AX><adapterversion>" + G_Mareon_Adapter + "</adapterversion><APIkey>" + v_APIKEY + "</APIkey></GetBIJLAGEN_OPDR_NOTES_4AX>";
var v_API = "BIJLAGEN_OPDR_NOTES_4AX";
F_GetOpdrachten_Bijlagen_Inner(v_req, v_API, "mld_opdr_note");
}
function F_GetOpdrachten_Bijlagen_Inner(v_req, v_API, v_entiteit)
{
@@ -64,7 +74,15 @@ function F_GetOpdrachten_Bijlagen_Inner(v_req, v_API)
MARX_2_AX_PutOpdrachtBijlages(v_ax_company_id, v_mld_opdr_key_marx, v_mld_opdr_externnr, v_fac_bijlagen_filename);
}
if (AX_or_Tobias() == "A12") {
MARX_2_AX2012_PutOpdrachtBijlages(v_ax_company_id, v_mld_opdr_key_marx, v_mld_opdr_externnr, v_fac_bijlagen_filename);
if (v_entiteit == "mld_opdr"){
MARX_2_AX2012_PutOpdrachtBijlages(v_ax_company_id, v_mld_opdr_key_marx, v_mld_opdr_externnr, v_fac_bijlagen_filename);
}
if (v_entiteit == "mld_opdr_note"){
l_node = strQuery + "/mld_opdr_note_key";
var v_mld_opdr_note_key = v_resp.selectSingleNode(l_node).text;
__Log("v_mld_opdr_note_key: " + v_mld_opdr_note_key,2);
MARX_SendOpdrachtNotitieBijlages(v_ax_company_id, v_mld_opdr_key_marx, v_mld_opdr_note_key, "", v_mld_opdr_externnr);
}
}
if (AX_or_Tobias() == "A365") {
MARX_2_AX365_PutOpdrachtBijlages(v_ax_company_id, v_mld_opdr_key_marx, v_mld_opdr_externnr, v_fac_bijlagen_filename);

View File

@@ -160,7 +160,7 @@ function do_exec_opdrstatus(p_order, p_min_fac_tracking_datum_ordupd){
//var l_mld_melding_externnr = p_order.mld_melding_externnr; // eg "MLD00058733"
var l_mld_opdr_externnr = p_order.mld_opdr_externnr; // eg "ION00030210"
var l_mld_opdr_ordernr = p_order.mld_opdr_ordernr; // eg "MLD00058733-01"
var l_mld_opdr_ordernr = p_order.mld_opdr_ordernr; // eg "MLD00058733-01", en voor Facilitor-koppeling staat hier het mld_opdr_key van de klant (4-lettercode) waarmee gekoppeld wordt.
var l_mld_opdr_plandatum;
var l_mld_opdr_plandatum_tmp = p_order.mld_opdr_plandatum; //eg "2020-07-30T09:00:00", UTC time, deze kan null zijn!!
@@ -228,6 +228,8 @@ function do_exec_opdrstatus(p_order, p_min_fac_tracking_datum_ordupd){
if (l_mld_opdr_notitie == null){l_mld_opdr_notitie = ""};
l_mld_opdr_notitie = escapeXml(l_mld_opdr_notitie);
var l_mld_opdr_note_key = p_order.mld_opdr_note_key; // eg 123456, of null
//var l_fac_srtnotificatie_key = p_order.fac_srtnotificatie_key; // eg 264
var l_fac_srtnotificatie_code = p_order.fac_srtnotificatie_code; // eg "ORDRSM"
var l_mld_opdr_kosten = p_order.mld_opdr_kosten; // eg 0
@@ -255,6 +257,12 @@ function do_exec_opdrstatus(p_order, p_min_fac_tracking_datum_ordupd){
// En ook alleen sturen als opdracht nog loopt, dwz niet afgesloten is, dus niet in status 1, 6, 7, 9
if (l_mld_opdr_notitie != "" && l_mld_statusopdr_key != 1 && l_mld_statusopdr_key != 6 && l_mld_statusopdr_key != 7 && l_mld_statusopdr_key != 9){
l_response = GEN_SetSupplierText(l_ax_company_id, l_mld_opdr_ordernr, l_mld_opdr_externnr, l_mld_opdr_notitie);
// 2. evt bijlage(n) bij de notitie, dit kan alleen bij losse notities, zie MARX#69956 "Notities bij opdrachten naar de opdrachtgever"
if (l_response.api_status_code == 1)
{ MARX_SendOpdrachtNotitieBijlages(l_ax_company_id, l_mld_opdr_key, l_mld_opdr_note_key, l_mld_opdr_ordernr, l_mld_opdr_externnr);
//We gaan er voorlopig uit dat bijlage upload in principe altijd lukt, zo niet, dan toch, en laten we die voorbij gaan...
l_response = {api_status_code: 1, api_status_message: "", api_response_message: ""};
}
}
break;