279 lines
12 KiB
Plaintext
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)
|
|
}
|
|
%>
|