Files
Facilitor/APPL/API/api_bessoap.asp
Jos Groot Lipman 9e11332d82 Versie 5.4.3 Gold A patches
svn path=/Website/trunk/; revision=23291
2014-11-10 13:25:20 +00:00

279 lines
12 KiB
Plaintext

<%@ language = "JavaScript" %>
<% /*
$Revision$
$Id$
File: api_bes_soap.asp
Description: API voor bes-soap berichten (bestelAANVRAGEN)
Interpreteert bericht zodanig dat een bestelaanvraag wordt aangemaakt/aangepast.
Parameters: Een xml
Status: Eerste implementatie in kader FSN#26296 (tbv Corsa/BCT)
Context:
Notes:
*/
DOCTYPE_Disable = 1;
THIS_FILE = "appl/api/api_bessoap.asp";
%>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/xml_converter.inc" -->
<!-- #include file="../Shared/save2db.inc" -->
<!-- #include file="../Shared/flexfiles.inc" -->
<!-- #include file="../Shared/upload.inc" -->
<!-- #include file="../api/api.inc" -->
<!-- #include file="../shared/kpl_ksrt_validate.inc" -->
<!-- #include file="../bes/bes.inc" -->
<%
// We sturen het antwoord in UTF-8.
Session.Codepage = 65001;
Response.Charset = 'utf-8';
var APIname = getQParam("API");
var APIKEY = getQParam("APIKEY");
var API = new API_func(APIname, APIKEY);
var tsql = "-"; // Voor tijdelijke statement(s)
var sql = "-"; // De uiteindelijke insert/update-sql
var xmlReq = Server.CreateObject("MSXML2.DOMDocument.6.0");
if (API.apidata.stylesheet)
{
var iXsl = Server.CreateObject("MSXML2.DOMDocument.6.0");
if( ! iXsl.load(Server.MapPath(API.apidata.stylesheet)) )
{
API.error("Could not load XSL " + API.apidata.stylesheet + "\n" + iXsl.parseError.reason);
}
var inputXML = Server.CreateObject("MSXML2.DOMDocument.6.0");
inputXML.load(Request);
inputXML.transformNodeToObject(iXsl, xmlReq);
}
else
xmlReq.load(Request);
var xmlResp = new ActiveXObject("MSXML2.DOMDocument.6.0");
xmlResp.appendChild(xmlResp.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"utf-8\""))
// The response.
var FCLTElement = xmlResp.createElement("facilitor");
// The response header.
var now = new Date();
var nowtxt = now.getFullYear()+'-'+padout(now.getMonth()+1) +'-'+padout(now.getDate()) +' '
+padout(now.getHours()) +':'+padout(now.getMinutes())+':'+padout(now.getSeconds());
var FCLTHeader = xmlResp.createElement("header");
var headerinfo = {
// file: String(Request.ServerVariables("SCRIPT_NAME")).toLowerCase(),
datum: nowtxt,
naam: user.naam(),
custId: customerId,
language: user.lang()
}
for (param in headerinfo)
{
var FCLTdata = xmlResp.createElement(param);
FCLTdata.appendChild(xmlResp.createTextNode(headerinfo[param]));
FCLTHeader.appendChild(FCLTdata);
}
FCLTElement.appendChild(FCLTHeader);
// Hier zou het echte werk moeten gebeuren nav. xmlReq
// en FCLTElement moeten we uitbreiden met antwoorden.
var detected ="?";
// xmlReq.setProperty("SelectionLanguage", "XPath"); // Weet niet of noodzakelijk
// Dit is de bestellingenloop (mochten er ooit nog anderen gaan volgen).
var bestellingen = xmlReq.getElementsByTagName("bestelling");
for (i=0; i < bestellingen.length; i++)
{
var resultcode = -1; /* Zolang deze -1 is, is het nog goed. Uiteindelijk eindigt het met 0 (als goed). */
var resulttekst = "";
// Lees per node de (optionele) tags en waarden.
var fields = []; // Bij te werken velden.
var besid = bestellingen[i].getAttribute("key"); // Bij type=update/delete
var besaction = bestellingen[i].getAttribute("type").toLowerCase();
var nwStatus = XMLval(bestellingen[i], "status");
if (besid == null) { // Voorkom problemen als key-attribuut ontbreekt!
besid = '';
}
var bestelling_key = parseInt(besid, 10); // En anders bepaald bij insert!
user.checkAutorisation("WEB_BESUSE"); // Dit is nog ongeacht de reservering
if (besaction == 'insert') {
resultcode = 999;
resulttekst = "Insert unsupported";
}
else if (besaction == 'update')
{
if (besid == '') {
resultcode = 2;
resulttekst = "Undefined bestelling (key)";
}
else if (isNaN (bestelling_key)) {
resultcode = 2;
resulttekst = "Invalid bestelling (key) "+besid;
}
else {
tsql = "SELECT bes_bestelling_key"
+ " FROM bes_bestelling"
+ " WHERE bes_bestelling_key="+bestelling_key
+ " AND 1=1"; // Niet verwijderd, ...???
var toRs = Oracle.Execute(tsql);
if (!toRs.eof) {
// Hier heb ik een geldige bes_bestelling_key.
bes_bestelling_key = toRs("bes_bestelling_key").value;
var bes_info = bes.bestelling_info(bes_bestelling_key); // Globale variabele met alle bes_bestelling informatie
var this_bes = bes.func_enabled_bestelling(bes_info); // Wat heb ik zoal aan rechten op deze specifieke reservering
if(!this_bes.canChange) {
resultcode = 9;
resulttekst = "Niet geautoriseerd voor bestelling "+besid;
}
else {
if (nwStatus != null) { // Bij update optioneel
// statusdiagram afdwingen:
// * BESFIT alleen vanuit status 2
// * BESREJ alleen vanuit status 2 en 3
sql = "SELECT bes_bestelling_status"
+ " FROM bes_bestelling"
+ " WHERE bes_bestelling_key="+bestelling_key;
var oRs = Oracle.Execute(sql);
if (!oRs.eof) {
curStatus = oRs("bes_bestelling_status").value;
// Feitelijke UPDATE status.
// BESFIT: alleen vanuit status 2
if (nwStatus == "BESFIT") {
if (curStatus == 2) {
bes.setbestellingstatus(bes_bestelling_key, 3); // Gefiatteerd
sql = "SELECT bes_bestelling_status"
+ " FROM bes_bestelling"
+ " WHERE bes_bestelling_key="+bestelling_key;
var oRs = Oracle.Execute(sql);
if (!oRs.eof) {
var bes_status = oRs("bes_bestelling_status").value;
if (bes_status == 3) {
resulttekst = "Bestelling "+bes_bestelling_key+" gefiatteerd";
resultcode = 0;
}
else {
resulttekst = "Bestelling "+bes_bestelling_key+" niet gefiatteerd";
resultcode = 308;
}
}
else {
resulttekst = "Fout bij ophalen nieuwe status";
resultcode = 307;
}
}
else if (curStatus == 3) {
resulttekst = "Bestelling "+bes_bestelling_key+" is al gefiatteerd";
resultcode = 306;
}
else {
resulttekst = "Kan niet fiatteren; ongeldige beginstatus";
resultcode = 305;
}
}
// BESREJ: alleen vanuit status 2 en 3
else if (nwStatus == "BESREJ") {
if (curStatus == 2 || curStatus == 3) {
bes.setbestellingstatus(bes_bestelling_key, 1); // Afgewezen
sql = "SELECT bes_bestelling_status"
+ " FROM bes_bestelling"
+ " WHERE bes_bestelling_key="+bestelling_key;
var oRs = Oracle.Execute(sql);
if (!oRs.eof) {
var bes_status = oRs("bes_bestelling_status").value;
if (bes_status == 1) {
resulttekst = "Bestelling "+bes_bestelling_key+" afgewezen";
resultcode = 0;
} else {
resulttekst = "Bestelling "+bes_bestelling_key+" niet afgewezen";
resultcode = 108;
}
} else {
resulttekst = "Fout bij ophalen nieuwe status";
resultcode = 107;
}
}
else if (curStatus == 1) {
resulttekst = "Bestelling "+bes_bestelling_key+" is al afgewezen";
resultcode = 106;
}
else {
resulttekst = "Kan niet afwijzen; ongeldige beginstatus";
resultcode = 105;
}
}
else {
resultcode = 3;
resulttekst = "Ongeldige status "+nwStatus;
}
} else {
resultcode = 4;
resulttekst = "Ongedefinieerde huidige status";
}
} // nwStatus != null
if (resultcode == -1) { // nog steeds geen fouten
resultcode = 0; // Ik heb gedaan wat ik moest en mocht doen voor deze bestelling.
}
}
////////////////////////////////////////////////////////////////////////////////
} else {
resultcode = 5;
resulttekst = "Not updatable bestelling "+besid;
}
toRs.Close();
}
}
else if (besaction == 'delete')
{
resultcode = 999;
resulttekst = "Delete unsupported";
}
else {
resultcode = 2;
resulttekst = "Undefined operation (type)";
}
var binfo = {
returncode: resultcode,
returntekst: resulttekst,
// executed:sql, // debug
datum: nowtxt, // TODO: Beter ook xml-datum???
besid: besid
}
var FCLTBody = xmlResp.createElement("bestelling"); // type=response
FCLTBody.setAttribute('key', besid);
FCLTBody.setAttribute('type', 'response');
for (param in binfo)
{
var FCLTdata = xmlResp.createElement(param);
FCLTdata.appendChild(xmlResp.createTextNode(binfo[param]));
FCLTBody.appendChild(FCLTdata);
}
FCLTElement.appendChild(FCLTBody);
} // end for
// Alle bestelling-nodes zijn behandeld.
xmlResp.appendChild(FCLTElement);
//__DoLog("Ik gebruik stylesheet '"+API.apidata.stylesheet+"'");
if (API.apidata.stylesheet)
{
var outputXML = Server.CreateObject("MSXML2.DOMDocument.6.0");
xmlResp.transformNodeToObject(iXsl, outputXML);
Response.ContentType = "text/xml";
Response.Write(outputXML.xml)
}
else
{
Response.ContentType = "text/xml";
Response.Write(xmlResp.xml)
}
%>