Files
Facilitor/UTILS/PutOrders/puo_send2address.js
Jos Groot Lipman b746ba4de7 FCLT#84701 Standaardkoppelingen via interface te beheren en instellen savepoint
svn path=/Website/trunk/; revision=70469
2025-09-30 13:44:20 +00:00

286 lines
13 KiB
JavaScript
Raw Blame History

// ******************************************
// * $Id$
// *
// * send2address()
// *
// * send2address sends notification or order to a known prs_bedrijfadres
// *
// * arguments:
// * prs_bedrijfadres_key to send something to
// * ....
// *
// * Notes: may overrule puo_loglevel. Caller must remember/reset
// *
// ******************************************
function send2address( bedrijfadres_key
, XMLnode
, refkey
, params)
{
params = params || {};
Log2File(2, "\n*> send2address");
var SendOrderResult = { resultcode: 1 };
try
{
var sqlB = "SELECT prs_bedrijfadres_url, "
+ " prs_bedrijfadres_sender, "
+ " prs_bedrijfadres_replyaddress, "
+ " prs_bedrijfadres_encoding, "
+ " prs_bedrijfadres_ordermode, "
+ " NVL(replace(prs_bedrijfadres_xsl, '\\', '/'), 'xsl/" + customerId + ".xsl') prs_bedrijfadres_xsl, "
+ " prs_bedrijfadres_certificate, "
+ " prs_bedrijfadres_error_handler, "
+ " prs_bedrijfadres_plugin, "
+ " prs_bedrijfadres_plugindata, "
+ " prs_bedrijfadres_attachfile,"
+ " prs_bedrijfadres_flexfiles,"
+ " ba.mld_typeopdr_key, "
+ " ba.prs_bedrijfadres_ext, "
+ " ba.prs_bedrijfadres_username,"
+ " ba.prs_bedrijfadres_password,"
+ " ba.prs_bedrijfadres_authmethod,"
+ " ba.prs_bedrijfadres_oa_token_url,"
+ " ba.prs_bedrijfadres_oa_scope," // unused yet
+ " ba.prs_bedrijfadres_oa_resource," // unused yet
+ " ba.prs_bedrijfadres_soapversion,"
+ " ba.prs_bedrijfadres_soapaction,"
+ " ba.prs_bedrijfadres_locksecret,"
+ " ba.prs_bedrijfadres_loglevel,"
+ " ba.prs_bedrijfadres_charset"
+ " FROM prs_bedrijfadres ba "
+ " WHERE prs_bedrijfadres_key = " + bedrijfadres_key
+ " AND prs_bedrijfadres_startdatum <= SYSDATE"; // Onwaarschijnlijk maar mogelijk is hij achteraf 'disabled' door datum in de toekomst te zetten
Log2File(3, sqlB);
var oRsB = Oracle.Execute(sqlB);
if (oRsB.EOF)
{
oRsB.Close();
var tekst = "Fatal error: prs_bedrijfadres_key {0} not found or not yet valid".format(bedrijfadres_key);
Log2File(1, tekst);
SendOrderResult = { resultcode: -1, errtext: tekst };
return SendOrderResult;
}
try
{
var plugindata = JSON.parse(oRsB("prs_bedrijfadres_plugindata").Value || "{}");
}
catch (e)
{
var tekst = "Error parsing JSON plugindata: {0}\n{1} {2}".format(oRsB("prs_bedrijfadres_plugindata").Value, e.message, e.name);
Log2File(1, tekst);
SendOrderResult = { resultcode: -1, errtext: tekst };
return SendOrderResult;
}
var bedrijfadres = { bedrijfadres_key: bedrijfadres_key,
url: oRsB("prs_bedrijfadres_url").Value,
sender: oRsB("prs_bedrijfadres_sender").Value,
reply: oRsB("prs_bedrijfadres_replyaddress").Value,
encoding: oRsB("prs_bedrijfadres_encoding").Value,
ordermode: oRsB("prs_bedrijfadres_ordermode").Value || 0,
typeopdr_key: oRsB("mld_typeopdr_key").Value,
certificateName: oRsB("prs_bedrijfadres_certificate").Value || "",
error_handling: oRsB("prs_bedrijfadres_error_handler").Value || 0,
plugin: oRsB("prs_bedrijfadres_plugin").Value,
plugindata: plugindata,
extension: oRsB("prs_bedrijfadres_ext").Value || "",
flexfiles: oRsB("prs_bedrijfadres_flexfiles").Value,
AttachFile: oRsB("prs_bedrijfadres_attachfile").Value,// E<>n vaste bijlage ('algemene voorwaarden') om bij te sluiten
XSLbedr: oRsB("prs_bedrijfadres_xsl").Value.toLowerCase(),
username: oRsB("prs_bedrijfadres_username").Value,
password: oRsB("prs_bedrijfadres_password").Value,
authmethod: oRsB("prs_bedrijfadres_authmethod").Value || 0,
token_url: oRsB("prs_bedrijfadres_oa_token_url").Value,
oa_scope: oRsB("prs_bedrijfadres_oa_scope").Value,
oa_resource: oRsB("prs_bedrijfadres_oa_resource").Value,
soapversion: oRsB("prs_bedrijfadres_soapversion").Value,
soapaction: oRsB("prs_bedrijfadres_soapaction").Value,
locksecret: oRsB("prs_bedrijfadres_locksecret").Value,
loglevel: oRsB("prs_bedrijfadres_loglevel").Value,
charset: oRsB("prs_bedrijfadres_charset").Value
};
oRsB.Close();
if (bedrijfadres.loglevel > S("puo_loglevel"))
{
settings.overrule_setting("puo_loglevel", bedrijfadres.loglevel); // caller must reset it!
Log2File(1, "puo_loglevel overruled by prs_bedrijfadres_loglevel: " + bedrijfadres.loglevel);
}
puo_hook.initialize(bedrijfadres);
if (bedrijfadres.url.substring(0, 1) == '@') // intern, bijvoorbeeld @/appl/exp/zendesk.asp
{
if (!S("puo_fclt_web_url"))
{
throw { description: "Error: puo_fclt_web_url not set. Cannot use relative url: " + bedrijfadres.url};
}
bedrijfadres.orgurl = bedrijfadres.url; // zodat overrule er van af blijft
bedrijfadres.url = S("puo_fclt_web_url") + bedrijfadres.url.substring(1);
bedrijfadres.url += (bedrijfadres.url.indexOf("?")>=0?"&":"?") + "fac_id=" + customerId;
bedrijfadres.url += "&bdradr_key=" + bedrijfadres_key;
if (S("puo_loglevel") > 0)
bedrijfadres.url += "&logging=" + S("puo_loglevel"); // dan de ASP ook loggen
if (XMLnode)
bedrijfadres.url += "&XMLnode=" + XMLnode;
if (refkey)
bedrijfadres.url += "&refkey=" + refkey;
if (params.srtcode)
bedrijfadres.url += "&srtnoti=" + params.srtcode;
}
var connect = new ConnectorCls();
connect.connect(bedrijfadres);
puo_hook.callhook("post_connect", {});
if (!connect.Connected)
{
var tekst = "Could not connect, invalid technical adress '{0}' for prs_bedrijfadres_key {1}?".format(bedrijfadres.url, bedrijfadres_key);
Log2File(1, tekst);
if (params.marksent)
params.marksent(XMLnode, refkey, -1, tekst);
// TODO: Wel blijven proberen?
result = null;
}
else
{
// fouten worden afgevangen in fetchXMLContent. Indien geen xml aangemaakt
// kan worden levert de functie een lege string. Voor orders gaan we dit blijven
// herhalen totdat de order wel verstuurd kan worden.
if (params.xml_content)
xml_content = params.xml_content
else
var xml_content = fetchXMLContent( XMLnode
, XMLnode=="reservering"?null:refkey
, XMLnode=="reservering"?refkey:params.extrakey
, "" // where
, params.taal
, { srtnotificatie: params.srtcode,
aanmaak: params.aanmaak,
notificatie_key: params.notificatie_key }
);
if (xml_content)
{
var Bijlagen = {};
if ((bedrijfadres.flexfiles||S("puo_order_flexfiles")) == 1 && XMLnode == "opdracht")
{
Bijlagen = { module: "MLD"
, niveau: "O"
, refkey: refkey
};
}
if (bedrijfadres.flexfiles == 1 && XMLnode == "bestelopdr")
{
Bijlagen = { module: "BES"
, niveau: "B"
, refkey: params.ordernr.split("/")[0]
};
}
if (bedrijfadres.flexfiles == 1 && XMLnode == "reservering")
{
Bijlagen = { module: "RES"
, niveau: "R"
, refkey: refkey
};
}
if (Bijlagen.module)
Log2File(1, "Searching attachments under: " + JSON.stringify(Bijlagen));
var XSLfile = getXslNode(bedrijfadres.XSLbedr, XMLnode);
Log2File(3, "In send2address sender=" + bedrijfadres.sender);
Log2File(4, "xsl=" + bedrijfadres.XSLbedr + "==>" + XSLfile);
Log2File(4, "xmlnode=" + XMLnode);
Log2File(4, "bedrijfadres:\n" + JSON.stringify(bedrijfadres, null, 4));
var SendOrderResult = SendOrder( connect
, xml_content
, bedrijfadres
, XSLfile
, params.ordernr
, refkey
, params.sender
, XMLnode
, params.srtcode
, Bijlagen
, params.subject);
Log2File(1, "SendOrderResult: " + SendOrderResult.resultcode);
var tekst = [];
if (connect.friendlyurl)
tekst.push(connect.friendlyurl);
if (SendOrderResult.errtext)
tekst.push(SendOrderResult.errtext);
if (params.marksent)
params.marksent(XMLnode, refkey, SendOrderResult.resultcode, tekst.join("\n"));
if (SendOrderResult.resultcode == 0 || SendOrderResult.resultcode == 2)
{
result = SendOrderResult;
// send notification to supplier is possibly done by mld_opdr/bes_bestelopdr
// notification triggers when we change the status
}
} // if (XMLcontent)
connect.disconnect()
} // if (connect.Connected)
if (SendOrderResult.resultcode != 0 && SendOrderResult.resultcode != 2)
{
Log2File(0, "Sending to prs_bedrijfadres failed. Errorcode:" + SendOrderResult.resultcode);
}
else
{
Log2File(2, "Sending to prs_bedrijfadres was successful");
}
}
catch(e)
{
Log2File(0, "Error in send2address: " + e.description, "E");
}
puo_hook.callhook("finalize", {});
puo_hook.finalize();
return SendOrderResult;
}
function getXslNode(pXslFile, pNode)
{
var fso = new ActiveXObject("Scripting.FileSystemObject");
var custIDxsl = "xsl/" + customerId.toLowerCase() + ".xsl";
var vFile = pXslFile;
if (vFile == custIDxsl)
{
vFile = "xsl/" + pNode + ".xsl";
if (!fso.FileExists(custabspath + "/" + vFile))
{
vFile = pXslFile;
}
}
return vFile;
}
function marksent(XMLnode, OpdrKey, resultcode, tekst)
{
if (XMLnode == "planrequest")
return; // die kent geen markorderassent
// tekst += "\nFor contractor '{1}' key {2}".format(bedrijfnaam, Bedrijf_key);
var sqlC = "BEGIN "
+ " FAC.markorderassent(" + safe.quoted_sql(XMLnode)
+ ", " + OpdrKey
+ ", " + resultcode // failure
+ ", " + safe.quoted_sql(tekst)
+ ");"
+ " END;";
Log2File(2, sqlC);
Oracle.Execute(sqlC);
}