Files
Facilitor/APPL/API/api_cntsoap.asp
Jos Groot Lipman 2defa14438 FSN#37972 Met FO rechten ook bezoekers voor anderen doen
svn path=/Website/branches/v2016.2/; revision=31230
2016-10-26 11:06:50 +00:00

181 lines
8.0 KiB
Plaintext

<%@ language = "JavaScript" %>
<% /*
$Revision$
$Id$
File: api_cntsoap.asp
Description: API voor CNT-soap berichten
Interpreteert een bericht zodanig dat contractgegevens worden aangepast.
Dat is: qua ingangsdatum, contractbedrag of termijnbedrag.
Parameters: Een xml
Status:
Context:
*/
DOCTYPE_Disable = 1;
THIS_FILE = "appl/api/api_cntsoap.asp";
%>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/xml_converter.inc" -->
<!-- #include file="../Shared/save2db.inc" -->
<!-- #include file="../api/api.inc" -->
<!-- #include file="../cnt/cnt.inc" -->
<%
// 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 resultcode = -1; /* Zolang deze -1 is, is het nog goed. Uiteindelijk eindigt het met 0 (als goed). */
var resulttekst = "";
var xmlReq = Server.CreateObject("MSXML2.DOMDocument.6.0");
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 elmHeader = 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]));
elmHeader.appendChild(FCLTdata);
}
FCLTElement.appendChild(elmHeader);
// 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
// Is hiermee voldoende gecheckt op rechten?
var authparams = user.checkAutorisation("WEB_CNTMAN");// Dit is nog ongeacht het contract
// Dit is de contractenloop (mochten er ooit nog anderen gaan volgen).
var contracten = xmlReq.getElementsByTagName("contract");
for (i=0; i < contracten.length; i++)
{
// Lees per node de (optionele) tages en waarden
var fields = []; // Bij te werken velden
var cntid = contracten[i].getAttribute("key");
var cntaction = contracten[i].getAttribute("type").toLowerCase();
var mut_datum = XMLval(contracten[i], "datum"); // Unsupported yet (misschien eigenlijk zelfs overbodig).
var van_datum = XMLval(contracten[i], "ingangsdatum");
var contractbedrag = XMLval(contracten[i], "contractbedrag");
var termijnbedrag = XMLval(contracten[i], "termijnbedrag");
//var cntkenmerken = (contracten[i].getElementsByTagName("kenmerk"))[0].childNodes[0].nodeValue; // Unsupported yet
var cnt_key = -1; // Bepaald op basis van cntid
if (cntid == null) {
resultcode = 1;
resulttekst = "Undefined contract ID (key)";
} else if (cntaction != 'update') {
resultcode = 2;
resulttekst = "Invalid action (type="+ cntaction +")";
} else {
tsql = "SELECT c.cnt_contract_key, TO_CHAR (c.cnt_contract_looptijd_tot, 'yyyymmdd') tot_datum "
+ " FROM cnt_contract c"
+ " WHERE c.cnt_contract_nummer_intern="+ safe.quoted_sql(cntid)
+ " AND NOT EXISTS"
+ " (SELECT 1 FROM cnt_contract"
+ " WHERE cnt_contract_nummer_intern=c.cnt_contract_nummer_intern"
+ " AND cnt_contract_versie > c.cnt_contract_versie)";
var oRs = Oracle.Execute(tsql);
if (oRs.eof) {
resultcode = 3;
resulttekst = "Unknown contract";
} else {
// Hier heb ik een geldige cnt_contract_key.
cnt_key = oRs("cnt_contract_key").value;
tot_datum = oRs("tot_datum").value;
this_cnt = cnt.func_enabled_contract(cnt_key); // Wat heb ik zoal aan rechten op dit contract?
if (this_cnt.canChange) {
// Bepaal de door te voeren wijzigingen.
if (van_datum != null) {
try {
var looptijd_van = XMLtoJsDate(van_datum);
var looptijd_tot = XMLtoJsDate(tot_datum);
}
catch (e)
{
__Log2File(xmlReq.xml, API.APIname + "_IN");
Response.End;
}
if (looptijd_van <= looptijd_tot) {
fields.push({ dbs: "cnt_contract_looptijd_van", typ: "date", val: looptijd_van, track: L("lcl_cnt_date_start") });
}
else {
resultcode = 4;
resulttekst = "Invalid datum (ingangsdatum)";
}
}
if (contractbedrag != null)
fields.push({ dbs: "cnt_contract_kosten", typ: "float", val: contractbedrag, track: L("lcl_cnt_contract_sum") });
if (termijnbedrag != null)
fields.push({ dbs: "cnt_contract_termijnkosten", typ: "float", val: termijnbedrag, track: L("lcl_cnt_period_sum") });
// We weten de updates, nu nog uitvoeren; rechten voldoende afgedekt via CNTMAN-check hierboven?
if (resultcode == -1) { // Nog steeds geen fouten.
if (fields.length > 0) {
// Construct/uitvoeren update.
var cntUpd = buildTrackingUpdate("cnt_contract", "cnt_contract_key = " + cnt_key, fields, { noValidateToken: true });
oRs = Oracle.Execute(cntUpd.sql);
// Tot slot nog de tracking toevoegen.
if (cntUpd.trackarray.length)
shared.trackaction("CNTUPD", cnt_key, L("lcl_cnt_is_cntupd") + "\n" + cntUpd.trackarray.join("\n"));
}
resultcode = 0; // Ik heb gedaan wat ik moest en mocht doen voor dit contract.
}
}
else {
// Wat als geen rechten; melden of niets doen (resultcode = -1)?
resultcode = 5;
resulttekst = "Not authorized";
}
} // end geldige cnt_key
} // end geldige cntid
var binfo = {
returncode: resultcode,
returntekst: resulttekst,
// executed:sql, // debug
datum: nowtxt
}
var FCLTBody = xmlResp.createElement("contract"); // type=response
FCLTBody.setAttribute('key', cntid);
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 contract-nodes zijn behandeld.
xmlResp.appendChild(FCLTElement);
Response.ContentType = "text/xml";
Response.Write(xmlResp.xml)
%>