286 lines
13 KiB
JavaScript
286 lines
13 KiB
JavaScript
// ******************************************
|
||
// * $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);
|
||
} |