<%@ 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"; %> <% // We sturen het antwoord in UTF-8. Session.Codepage = 65001; Response.Charset = 'utf-8'; var API = new API_func(); 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 var bes_disc_info = bes.disc_info(bes_info.dis_key); // alle discipline informatie 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 als bes_disc_info.disc_params_fiatflow == 0. // vanuit sattus 4 als bes_disc_info.disc_params_fiatflow == 1. // * BESREJ alleen vanuit status 2 en 3 als bes_disc_info.disc_params_fiatflow == 0. // vanuit status 2 en 4 als bes_disc_info.disc_params_fiatflow == 1. 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 als bes_disc_info.disc_params_fiatflow == 0. // vanuit sattus 4 als bes_disc_info.disc_params_fiatflow == 1. if (nwStatus == "BESFIT") { if ((bes_disc_info.disc_params_fiatflow == 0 && curStatus == 2) || (bes_disc_info.disc_params_fiatflow == 1 && curStatus == 4)) { 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 als bes_disc_info.disc_params_fiatflow == 0. // vanuit status 2 en 4 als bes_disc_info.disc_params_fiatflow == 1. else if (nwStatus == "BESREJ") { if ((bes_disc_info.disc_params_fiatflow == 0 && (curStatus == 2 || curStatus == 3)) || (bes_disc_info.disc_params_fiatflow == 1 && (curStatus == 2 || curStatus == 4))) { 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) } %>