Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
76a5c63d4d | ||
|
|
760eeb16c9 |
@@ -48,40 +48,14 @@ alg = {
|
||||
var uALGreadlevel = 9;
|
||||
var uALGwritelevel = 9;
|
||||
}
|
||||
|
||||
// From now use the highest authorisations (lowest values)
|
||||
|
||||
var ALGreadlevel = mALGreadlevel < uALGreadlevel? mALGreadlevel : uALGreadlevel ;
|
||||
var ALGwritelevel = mALGwritelevel < uALGwritelevel? mALGwritelevel: uALGwritelevel;
|
||||
|
||||
var autfunction = "WEB_RUIMAN";
|
||||
var authparams = user.checkAutorisation(autfunction, true);
|
||||
if (authparams) {
|
||||
|
||||
var rmALGreadlevel = authparams.ALGreadlevel;
|
||||
var rmALGwritelevel = authparams.ALGwritelevel;
|
||||
}
|
||||
else {
|
||||
var rmALGreadlevel = 9;
|
||||
var rmALGwritelevel = 9;
|
||||
}
|
||||
|
||||
var autfunction = "WEB_TERMAN";
|
||||
var authparams = user.checkAutorisation(autfunction, true);
|
||||
if (authparams) {
|
||||
|
||||
var tmALGreadlevel = authparams.ALGreadlevel;
|
||||
var tmALGwritelevel = authparams.ALGwritelevel;
|
||||
}
|
||||
else {
|
||||
var tmALGreadlevel = 9;
|
||||
var tmALGwritelevel = 9;
|
||||
}
|
||||
|
||||
return ({ALGreadlevel: ALGreadlevel, ALGwritelevel: ALGwritelevel,
|
||||
mALGreadlevel: mALGreadlevel, mALGwritelevel: mALGwritelevel,
|
||||
uALGreadlevel: uALGreadlevel, uALGwritelevel: uALGwritelevel,
|
||||
rmALGreadlevel: rmALGreadlevel, rmALGwritelevel: rmALGwritelevel,
|
||||
tmALGreadlevel: tmALGreadlevel, tmALGwritelevel: tmALGwritelevel
|
||||
uALGreadlevel: uALGreadlevel, uALGwritelevel: uALGwritelevel
|
||||
});
|
||||
},
|
||||
|
||||
@@ -92,31 +66,17 @@ alg = {
|
||||
onrgoedlvl == "G" || onrgoedlvl == "T" || onrgoedlvl == "V" || onrgoedlvl == "R")
|
||||
{
|
||||
var rresult = user.func_enabled("ALG",
|
||||
null, // geen disciplines
|
||||
alg_key,
|
||||
null); // nooit prs-scope
|
||||
null, // geen disciplines
|
||||
alg_key,
|
||||
null); // nooit prs-scope
|
||||
|
||||
var autfunctionMAN = "WEB_ALGMAN";
|
||||
var autfunctionUSE = "WEB_ALGUSE";
|
||||
|
||||
// Met ALG* bepaal je wat je ziet (Read).
|
||||
rresult.readman = rresult.canRead (autfunctionMAN);
|
||||
rresult.readman = rresult.canRead (onrgoedlvl == "T"?"WEB_TERMAN":"WEB_ALGMAN");
|
||||
rresult.writeman = rresult.canWrite(onrgoedlvl == "T"?"WEB_TERMAN":"WEB_ALGMAN");
|
||||
if (onrgoedlvl != "T")
|
||||
rresult.readuse = rresult.canRead (autfunctionUSE);
|
||||
|
||||
// Met RUI* en TER* bepaal je wat je kunt wijzigen (Write).
|
||||
switch (onrgoedlvl)
|
||||
{
|
||||
case "T": autfunctionMAN = "WEB_TERMAN";
|
||||
break;
|
||||
case "R": autfunctionMAN = "WEB_RUIMAN";
|
||||
autfunctionUSE = "WEB_RUIUSE";
|
||||
break;
|
||||
rresult.readuse = rresult.canRead ("WEB_ALGUSE");
|
||||
rresult.writeuse = rresult.canWrite("WEB_ALGUSE");
|
||||
}
|
||||
rresult.writeman = rresult.canWrite(autfunctionMAN);
|
||||
|
||||
if (onrgoedlvl != "T")
|
||||
rresult.writeuse = rresult.canWrite(autfunctionUSE);
|
||||
}
|
||||
else // iets meer werk
|
||||
{
|
||||
|
||||
@@ -26,10 +26,10 @@ var dis_key_arr = getFParamIntArray("key");
|
||||
var autfunction = {D : "WEB_ALGMAN",
|
||||
RE: "WEB_ALGMAN",
|
||||
L : "WEB_ALGMAN",
|
||||
T : "WEB_TERMAN", // Met ALG* bepaal je wat je ziet (Read), met RUI* en TER* bepaal je wat je kunt wijzigen (Write).
|
||||
T : "WEB_ALGMAN",
|
||||
G : "WEB_ALGMAN",
|
||||
V : "WEB_ALGMAN",
|
||||
R : "WEB_RUIMAN", // Met ALG* bepaal je wat je ziet (Read), met RUI* en TER* bepaal je wat je kunt wijzigen (Write).
|
||||
R : "WEB_ALGMAN",
|
||||
W : "WEB_PRSBOF",
|
||||
PW: "WEB_PRSBOF"}[level];
|
||||
|
||||
|
||||
@@ -28,9 +28,9 @@ if (dis_key > 0)
|
||||
+ " FROM alg_district "
|
||||
+ " WHERE alg_district_key = " + dis_key;
|
||||
|
||||
var oRs = Oracle.Execute(sql);
|
||||
oRs = Oracle.Execute(sql);
|
||||
|
||||
var dis_name = oRs("alg_district_omschrijving").value;
|
||||
oRs.Close()
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -42,7 +42,7 @@ else
|
||||
<head>
|
||||
<% FCLTHeader.Generate(); %>
|
||||
<script type="text/javascript" >
|
||||
FcltMgr.setTitle(L("lcl_district") + " " + "<%=safe.jsstring(dis_name)%>", {hot: false});
|
||||
FcltMgr.setTitle("<%=L("lcl_district")%> <%=safe.jsstring(dis_name)%> ", {hot: false});
|
||||
<% if (dis_key == -1) { %>FcltMgr.startEdit(window);<% } %>
|
||||
function algClose(params)
|
||||
{
|
||||
@@ -67,7 +67,7 @@ else
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<body id="editbody">
|
||||
<% if (dis_key == -1)
|
||||
var page="alg_edit_district.asp"; // Maak een nieuw
|
||||
else
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
Note:
|
||||
*/ %>
|
||||
|
||||
<!-- #include file="../Shared/disCxprs3d.inc" -->
|
||||
<!-- #include file="../Shared/json2.js" -->
|
||||
<!-- #include file="../Shared/resultset_table_v2.inc" -->
|
||||
<!-- #include file="../Shared/getkenmerksql.inc" -->
|
||||
|
||||
@@ -7,22 +7,17 @@
|
||||
*/ %>
|
||||
|
||||
<!-- #include file="../Shared/common.inc" -->
|
||||
<!-- #include file="../Shared/save2db.inc" -->
|
||||
<!-- #include file="../shared/save2db.inc" -->
|
||||
<!-- #include file="../Shared/kenmerk_common.inc"-->
|
||||
<!-- #include file="alg.inc" -->
|
||||
|
||||
<% FCLTHeader.Requires({ plugins:["jQuery", "kenmerk"],
|
||||
js: []
|
||||
}) %>
|
||||
<%
|
||||
var dis_key = getQParamInt( "dis_key" );
|
||||
var dis_key = getQParamInt( "dis_key" );
|
||||
|
||||
var onrgoedlvl = "D";
|
||||
var this_alg = alg.func_enabled(dis_key, onrgoedlvl);
|
||||
user.auth_required_or_abort(this_alg.readman || this_alg.readuse);
|
||||
|
||||
var fields = [ { dbs: "alg_district_omschrijving", typ: "varchar", frm: "dis_oms" },
|
||||
{ dbs: "alg_regio_key", typ: "number", frm: "regiokey" }];
|
||||
var fields = [ { dbs: "alg_district_omschrijving", typ: "varchar", frm: "dis_oms" },
|
||||
{ dbs: "alg_regio_key", typ: "number", frm: "regiokey" }];
|
||||
|
||||
var warning = "";
|
||||
if (dis_key > 0)
|
||||
|
||||
@@ -12,13 +12,12 @@
|
||||
Note:
|
||||
|
||||
*/ %>
|
||||
<!-- #include file="../Shared/common.inc" -->
|
||||
<!-- #include file="../Shared/iface.inc" -->
|
||||
<!-- #include file="../Shared/selector.inc" -->
|
||||
<!--#include file="../Shared/common.inc" -->
|
||||
<!--#include file="../Shared/iface.inc" -->
|
||||
<!--#include file="../Shared/selector.inc" -->
|
||||
|
||||
<!-- #include file="../Shared/plaatsselector.inc" -->
|
||||
<!-- #include file="../Shared/kostenplaatsselector.inc" -->
|
||||
<!-- #include file="../Shared/persoonselector.inc" -->
|
||||
<!--#include file="../Shared/plaatsselector.inc" -->
|
||||
<!--#include file="../Shared/kostenplaatsselector.inc" -->
|
||||
<!-- #include file="alg_flexkenmerk.inc" -->
|
||||
<!-- #include file="alg.inc" -->
|
||||
|
||||
@@ -33,189 +32,194 @@ user.auth_required_or_abort(this_alg.writeman || (bld_key>0&&this_alg.writeuse))
|
||||
|
||||
if (bld_key > 0)
|
||||
{
|
||||
var sql = " SELECT *"
|
||||
+ " FROM alg_gebouw"
|
||||
+ " WHERE alg_gebouw_key = " + bld_key;
|
||||
sql = " select * "
|
||||
+ " FROM ALG_GEBOUW "
|
||||
+ " WHERE alg_gebouw_key = " + bld_key;
|
||||
|
||||
oRs = Oracle.Execute(sql);
|
||||
if (oRs.Eof)
|
||||
shared.record_not_found("<!--"+bld_key+"-->");
|
||||
oRs = Oracle.Execute(sql);
|
||||
if (oRs.Eof)
|
||||
shared.record_not_found("<!--"+bld_key+"-->");
|
||||
|
||||
var bld_srtkey = oRs("alg_srtgebouw_key").Value;
|
||||
var bld_naam = oRs("alg_gebouw_naam").Value;
|
||||
var bld_code = oRs("alg_gebouw_code").Value;
|
||||
var bld_descr = oRs("alg_gebouw_omschrijving").Value;
|
||||
var bld_maak = oRs("alg_gebouw_aanmaak").Value;
|
||||
var bld_teken = oRs("alg_gebouw_getekend").Value;
|
||||
var bld_opp = oRs("alg_gebouw_bruto_vloeropp").Value;
|
||||
var bld_omtrek = oRs("alg_gebouw_omtrek").Value;
|
||||
var bld_inhoud = oRs("alg_gebouw_inhoud").Value;
|
||||
var bld_opmerk = oRs("alg_gebouw_opmerking").Value;
|
||||
var mld_adres = oRs("mld_adres_key").Value;
|
||||
var prs_kstpl = oRs("prs_kostenplaats_key").Value;
|
||||
var bld_ordrnr = oRs("alg_gebouw_ordernr").Value;
|
||||
var bld_dwgx = oRs("alg_gebouw_dwgx").Value;
|
||||
var bld_dwgy = oRs("alg_gebouw_dwgy").Value;
|
||||
var bld_x = oRs("alg_gebouw_x").Value;
|
||||
var bld_y = oRs("alg_gebouw_y").Value;
|
||||
var bld_bez = oRs("alg_gebouw_bez").Value;
|
||||
var dienstniveau = oRs("mld_dienstniveau_key").Value;
|
||||
var beginuur = oRs("alg_gebouw_beginuur").Value;
|
||||
var einduur = oRs("alg_gebouw_einduur").Value;
|
||||
var werkdagen = oRs("alg_gebouw_werkdagen").Value;
|
||||
var verantw_key = oRs("prs_perslid_key_verantw").Value;
|
||||
oRs.Close();
|
||||
var bld_srtkey = oRs("ALG_SRTGEBOUW_KEY").value;
|
||||
var bld_naam = oRs("ALG_GEBOUW_NAAM").value;
|
||||
var bld_code = oRs("ALG_GEBOUW_CODE").value;
|
||||
var bld_descr = oRs("ALG_GEBOUW_OMSCHRIJVING").value;
|
||||
var bld_maak = oRs("ALG_GEBOUW_AANMAAK").value;
|
||||
var bld_teken = oRs("ALG_GEBOUW_GETEKEND").value;
|
||||
var bld_opp = oRs("ALG_GEBOUW_BRUTO_VLOEROPP").value;
|
||||
var bld_omtrek = oRs("ALG_GEBOUW_OMTREK").value;
|
||||
var bld_inhoud = oRs("ALG_GEBOUW_INHOUD").value;
|
||||
var bld_opmerk = oRs("ALG_GEBOUW_OPMERKING").value;
|
||||
var mld_adres = oRs("MLD_ADRES_KEY").value;
|
||||
var prs_kstpl = oRs("PRS_KOSTENPLAATS_KEY").value;
|
||||
var bld_ordrnr = oRs("ALG_GEBOUW_ORDERNR").value;
|
||||
var bld_dwgx = oRs("ALG_GEBOUW_DWGX").value;
|
||||
var bld_dwgy = oRs("ALG_GEBOUW_DWGY").value;
|
||||
var bld_x = oRs("ALG_GEBOUW_X").value;
|
||||
var bld_y = oRs("ALG_GEBOUW_Y").value;
|
||||
var bld_bez = oRs("ALG_GEBOUW_BEZ").value;
|
||||
var dienstniveau = oRs("mld_dienstniveau_key").value;
|
||||
var beginuur = oRs("alg_gebouw_beginuur").value;
|
||||
var einduur = oRs("alg_gebouw_einduur").value;
|
||||
var werkdagen = oRs("alg_gebouw_werkdagen").value;
|
||||
oRs.Close();
|
||||
}
|
||||
else
|
||||
var werkdagen = 1;
|
||||
werkdagen = 1;
|
||||
%>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<head>
|
||||
<%
|
||||
FCLTHeader.Generate();
|
||||
%>
|
||||
<script>
|
||||
function alg_submit()
|
||||
{
|
||||
document.activeElement.blur(); // trigger laatste onChanges
|
||||
if (!validateForm("u2"))
|
||||
return false;
|
||||
document.forms.u2.submit();
|
||||
}
|
||||
function alg_cancel()
|
||||
{
|
||||
FcltMgr.closeDetail(window, { cancel: true } );
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<script>
|
||||
function alg_submit()
|
||||
{
|
||||
document.activeElement.blur(); // trigger laatste onChanges
|
||||
if (!validateForm("u2"))
|
||||
return false;
|
||||
document.forms.u2.submit();
|
||||
}
|
||||
function alg_cancel()
|
||||
{
|
||||
FcltMgr.closeDetail(window, { cancel: true } );
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body id="editbody">
|
||||
<body id="editbody">
|
||||
<%
|
||||
var buttons = [ {title: L("lcl_submit"), action:"alg_submit()", icon: "opslaan.png" },
|
||||
{title: L("lcl_cancel"), action:"alg_cancel()", icon: "undo.png" } ];
|
||||
IFRAMER_HEADER(L("lcl_alg_gebouw_frame"), buttons);
|
||||
var buttons = [ {title: L("lcl_submit"), action:"alg_submit()", icon: "opslaan.png" },
|
||||
{title: L("lcl_cancel"), action:"alg_cancel()", icon: "undo.png" } ];
|
||||
IFRAMER_HEADER(L("lcl_alg_gebouw_frame"), buttons);
|
||||
%>
|
||||
<div id="edit">
|
||||
<form name="u2"
|
||||
action="alg_edit_gebouw_save.asp?bld_key=<%=bld_key%>"
|
||||
method="post"
|
||||
target="hidFrameSubmit"
|
||||
onSubmit="alg_submit();">
|
||||
<div id="edit">
|
||||
<form name="u2"
|
||||
action="alg_edit_gebouw_save.asp?bld_key=<%=bld_key%>"
|
||||
method="post"
|
||||
target="hidFrameSubmit"
|
||||
onSubmit="alg_submit();">
|
||||
<%
|
||||
if (this_alg.writeman)
|
||||
manRWFIELD = RWFIELDTR;
|
||||
else
|
||||
manRWFIELD = function (a,b,c,d,e) { ROFIELDTR(b,c,d,e) }; // als geen USE of <self> dan zijn er veel readonly
|
||||
if (this_alg.writeman)
|
||||
manRWFIELD = RWFIELDTR;
|
||||
else
|
||||
manRWFIELD = function (a,b,c,d,e) { ROFIELDTR(b,c,d,e) }; // als geen USE of <self> dan zijn er veel readonly
|
||||
|
||||
BLOCK_START("algLoc1", "");
|
||||
FCLTplaatsselector(this_alg.authparams("WEB_ALGMAN").ALGwritelevel,
|
||||
{ gebouwkey: bld_key,
|
||||
startlevel: 2, //Locatie
|
||||
eindlevel: 2, // Locatie
|
||||
readonly: bld_key > 0,
|
||||
required: true
|
||||
});
|
||||
manRWFIELD("bld_naam", "fld", L("lcl_estate_gebouw_man_name"), bld_naam, {required: true, maxlength: 30});
|
||||
sql = "SELECT alg_srtgebouw_key, "
|
||||
+ " "+lcl.xsqla('alg_srtgebouw_omschrijving', 'alg_srtgebouw_key')
|
||||
+ " FROM alg_srtgebouw "
|
||||
+ " WHERE alg_srtgebouw_verwijder IS NULL "
|
||||
+ "ORDER BY UPPER("+lcl.xsql('alg_srtgebouw_omschrijving', 'alg_srtgebouw_key')+")";
|
||||
FCLTselector("bld_srtkey",
|
||||
sql,
|
||||
{ label: L("lcl_estate_gebouw_srtgebouw"),
|
||||
BLOCK_START("algLoc1", "");
|
||||
|
||||
FCLTplaatsselector(this_alg.authparams("WEB_ALGMAN").ALGwritelevel, {
|
||||
gebouwkey: bld_key,
|
||||
startlevel: 2, //Locatie
|
||||
eindlevel: 2, // Locatie
|
||||
readonly: bld_key > 0,
|
||||
required: true });
|
||||
|
||||
manRWFIELD("bld_naam", "fld", L("lcl_estate_gebouw_man_name"), bld_naam, {required: true, maxlength: 30});
|
||||
|
||||
sql = "SELECT alg_srtgebouw_key, "
|
||||
+ " "+lcl.xsqla('alg_srtgebouw_omschrijving', 'alg_srtgebouw_key')
|
||||
+ " FROM alg_srtgebouw "
|
||||
+ " WHERE alg_srtgebouw_verwijder IS NULL "
|
||||
+ "ORDER BY UPPER("+lcl.xsql('alg_srtgebouw_omschrijving', 'alg_srtgebouw_key')+")";
|
||||
|
||||
FCLTselector("bld_srtkey", sql,
|
||||
{ label: L("lcl_estate_gebouw_srtgebouw"),
|
||||
initKey: bld_srtkey,
|
||||
emptyOption: "",
|
||||
readonly: !this_alg.writeman
|
||||
});
|
||||
manRWFIELD("bld_code", "fld", L("lcl_estate_gebouw_man_code"), bld_code, {required: true, maxlength: 12});
|
||||
manRWFIELD("bld_opmerk", "fld", L("lcl_estate_gebouw_man_opmerk"), bld_opmerk, {maxlength: 50});
|
||||
FCLTkostenplaatsselector( "prs_kstpl",
|
||||
"prs_kstpl",
|
||||
user_key,
|
||||
{ kostenplaatsKey: prs_kstpl,
|
||||
label: L("lcl_prs_dept_kosten"),
|
||||
filtercode: "G",
|
||||
readonly: !this_alg.writeman
|
||||
});
|
||||
manRWFIELD("bld_ordrnr", "fld", L("lcl_estate_gebouw_ordernr"), bld_ordrnr, {maxlength: 30});
|
||||
sql = "SELECT mld_dienstniveau_key"
|
||||
+ " , " + lcl.xsqla("mld_dienstniveau_omschr", "mld_dienstniveau_key")
|
||||
+ " FROM mld_dienstniveau"
|
||||
+ " ORDER BY UPPER(" + lcl.xsql("mld_dienstniveau_omschr", "mld_dienstniveau_key") + ")";
|
||||
FCLTselector("dienstniveau",
|
||||
sql,
|
||||
{ label: L("lcl_mld_dienst_niveau"),
|
||||
initKey: dienstniveau,
|
||||
emptyOption: "",
|
||||
readonly: !this_alg.writeuse
|
||||
});
|
||||
FCLTpersoonselector("verantw",
|
||||
"sgVerantw",
|
||||
{ perslidKey: verantw_key,
|
||||
label: L("lcl_alg_verantw"),
|
||||
readonly: !this_alg.writeuse,
|
||||
autlevel: this_alg.authparams("WEB_ALGMAN") && this_alg.authparams("WEB_ALGMAN").PRSwritelevel
|
||||
}
|
||||
);
|
||||
|
||||
manRWFIELD("bld_code", "fld", L("lcl_estate_gebouw_man_code"), bld_code, {required: true, maxlength: 12});
|
||||
manRWFIELD("bld_opmerk", "fld", L("lcl_estate_gebouw_man_opmerk"), bld_opmerk, {maxlength: 50});
|
||||
|
||||
FCLTkostenplaatsselector( "prs_kstpl",
|
||||
"prs_kstpl",
|
||||
user_key,
|
||||
{ kostenplaatsKey: prs_kstpl,
|
||||
label: L("lcl_prs_dept_kosten"),
|
||||
filtercode: "G",
|
||||
readonly: !this_alg.writeman
|
||||
});
|
||||
BLOCK_END();
|
||||
|
||||
BLOCK_START("algLoc2", "");
|
||||
manRWFIELD("bld_opp", "fld", L("lcl_estate_gebouw_man_bruto_vloeropp"), bld_opp, {maxlength: 15});
|
||||
manRWFIELD("bld_omtrek", "fld", L("lcl_estate_gebouw_man_omtrek"), bld_omtrek, {maxlength: 15});
|
||||
manRWFIELD("bld_inhoud", "fld", L("lcl_estate_gebouw_man_inhoud"), bld_inhoud, {maxlength: 15});
|
||||
sql = "SELECT mld_adres_key"
|
||||
+ " , mld_adres_naam "
|
||||
+ " FROM mld_v_afleveradres"
|
||||
+ " ORDER BY mld_adres_naam ";
|
||||
FCLTselector("mld_adres",
|
||||
sql,
|
||||
{ label: L("lcl_delivery_address"),
|
||||
initKey: mld_adres,
|
||||
emptyOption: "",
|
||||
readonly: !this_alg.writeman
|
||||
});
|
||||
manRWFIELD("bld_x", "fld", L("lcl_geoxcoord"), bld_x, {maxlength: 25});
|
||||
manRWFIELD("bld_y", "fld", L("lcl_geoycoord"), bld_y, {maxlength: 25});
|
||||
if (this_alg.writeman)
|
||||
CHECKBOXTR(L("lcl_estate_gebouw_bez"), "fldalgbez", "bld_bez", bld_bez==1)
|
||||
var times = [];
|
||||
for (i=0; i<24; i++)
|
||||
{
|
||||
sql = " SELECT " + String(i+0/4) + ", '" + String(i) + ":00' FROM DUAL"
|
||||
+ " UNION ALL SELECT " + String(i+1/4) + ", '" + String(i) + ":15' FROM DUAL"
|
||||
+ " UNION ALL SELECT " + String(i+2/4) + ", '" + String(i) + ":30' FROM DUAL"
|
||||
+ " UNION ALL SELECT " + String(i+3/4) + ", '" + String(i) + ":45' FROM DUAL"
|
||||
times.push(sql);
|
||||
}
|
||||
FCLTselector("bld_beginuur", times.join(" UNION ALL "),
|
||||
{ label: L("lcl_estate_gebouw_beginuur"),
|
||||
initKey: beginuur,
|
||||
emptyOption: "",
|
||||
readonly: !this_alg.writeman
|
||||
}
|
||||
);
|
||||
FCLTselector("bld_einduur", times.join(" UNION ALL "),
|
||||
{ label: L("lcl_estate_gebouw_einduur"),
|
||||
initKey: einduur,
|
||||
emptyOption: "",
|
||||
readonly: !this_alg.writeman
|
||||
}
|
||||
);
|
||||
if (this_alg.writeman)
|
||||
CHECKBOXTR(L("lcl_estate_gebouw_werkdagen"), "fldalgwerk", "bld_werkdagen", werkdagen==1)
|
||||
BLOCK_END();
|
||||
manRWFIELD("bld_ordrnr", "fld", L("lcl_estate_gebouw_ordernr"), bld_ordrnr, {maxlength: 30});
|
||||
|
||||
generateFlexKenmerkBlock ({ onrgoed_key : bld_key,
|
||||
onrgoed_niveau : onrgoedlvl,
|
||||
reado : false,
|
||||
flexcolumns : S("alg_flexcolumns"),
|
||||
this_alg : this_alg
|
||||
});
|
||||
IFACE.FORM_END();
|
||||
sql = "SELECT mld_dienstniveau_key, "
|
||||
+ lcl.xsqla("mld_dienstniveau_omschr", "mld_dienstniveau_key")
|
||||
+ " FROM mld_dienstniveau "
|
||||
+ "ORDER BY UPPER("+lcl.xsql("mld_dienstniveau_omschr", "mld_dienstniveau_key")+")";
|
||||
|
||||
FCLTselector("dienstniveau", sql,
|
||||
{ label: L("lcl_mld_dienst_niveau"),
|
||||
initKey: dienstniveau,
|
||||
emptyOption: "",
|
||||
readonly: !this_alg.writeuse
|
||||
});
|
||||
|
||||
BLOCK_END();
|
||||
BLOCK_START("algLoc2", "");
|
||||
|
||||
manRWFIELD("bld_opp", "fld", L("lcl_estate_gebouw_man_bruto_vloeropp"), bld_opp, {maxlength: 15});
|
||||
manRWFIELD("bld_omtrek", "fld", L("lcl_estate_gebouw_man_omtrek"), bld_omtrek, {maxlength: 15});
|
||||
manRWFIELD("bld_inhoud", "fld", L("lcl_estate_gebouw_man_inhoud"), bld_inhoud, {maxlength: 15});
|
||||
|
||||
sql ="SELECT mld_adres_key, "
|
||||
+ " mld_adres_naam "
|
||||
+ " FROM mld_v_afleveradres "
|
||||
+ "ORDER BY mld_adres_naam ";
|
||||
|
||||
FCLTselector("mld_adres", sql,
|
||||
{ label: L("lcl_delivery_address"),
|
||||
initKey: mld_adres,
|
||||
emptyOption: "",
|
||||
readonly: !this_alg.writeman
|
||||
});
|
||||
|
||||
manRWFIELD("bld_x", "fld", L("lcl_geoxcoord"), bld_x, {maxlength: 25});
|
||||
manRWFIELD("bld_y", "fld", L("lcl_geoycoord"), bld_y, {maxlength: 25});
|
||||
if (this_alg.writeman)
|
||||
CHECKBOXTR(L("lcl_estate_gebouw_bez"), "fldalgbez", "bld_bez", bld_bez==1)
|
||||
|
||||
var times = [];
|
||||
for (i=0; i<24; i++)
|
||||
{
|
||||
sql = " SELECT " + String(i+0/4) + ", '" + String(i) + ":00' FROM DUAL"
|
||||
+ " UNION ALL SELECT " + String(i+1/4) + ", '" + String(i) + ":15' FROM DUAL"
|
||||
+ " UNION ALL SELECT " + String(i+2/4) + ", '" + String(i) + ":30' FROM DUAL"
|
||||
+ " UNION ALL SELECT " + String(i+3/4) + ", '" + String(i) + ":45' FROM DUAL"
|
||||
times.push(sql);
|
||||
}
|
||||
FCLTselector("bld_beginuur", times.join(" UNION ALL "),
|
||||
{ label: L("lcl_estate_gebouw_beginuur"),
|
||||
initKey: beginuur,
|
||||
emptyOption: "",
|
||||
readonly: !this_alg.writeman
|
||||
}
|
||||
);
|
||||
FCLTselector("bld_einduur", times.join(" UNION ALL "),
|
||||
{ label: L("lcl_estate_gebouw_einduur"),
|
||||
initKey: einduur,
|
||||
emptyOption: "",
|
||||
readonly: !this_alg.writeman
|
||||
}
|
||||
);
|
||||
if (this_alg.writeman)
|
||||
CHECKBOXTR(L("lcl_estate_gebouw_werkdagen"), "fldalgwerk", "bld_werkdagen", werkdagen==1)
|
||||
|
||||
BLOCK_END();
|
||||
|
||||
generateFlexKenmerkBlock ({
|
||||
onrgoed_key : bld_key,
|
||||
onrgoed_niveau : onrgoedlvl,
|
||||
reado : false,
|
||||
flexcolumns : S("alg_flexcolumns"),
|
||||
this_alg : this_alg
|
||||
});
|
||||
IFACE.FORM_END();
|
||||
%>
|
||||
</form>
|
||||
<iframe src="../Shared/empty.html" name="hidFrameSubmit" style="display:none"></iframe>
|
||||
</div>
|
||||
</body>
|
||||
</form>
|
||||
<iframe src="../Shared/empty.html" name="hidFrameSubmit" style="display:none"></iframe>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -7,9 +7,8 @@
|
||||
*/ %>
|
||||
|
||||
<!-- #include file="../Shared/common.inc" -->
|
||||
<!-- #include file="../Shared/save2db.inc" -->
|
||||
<!-- #include file="../shared/save2db.inc" -->
|
||||
<!-- #include file="../Shared/kenmerk_common.inc"-->
|
||||
<!-- #include file="alg.inc" -->
|
||||
|
||||
<% FCLTHeader.Requires({ plugins:["jQuery"],
|
||||
js: []
|
||||
@@ -25,31 +24,26 @@
|
||||
if (einduur == -1)
|
||||
einduur = "";
|
||||
|
||||
var onrgoedlvl = "G";
|
||||
var this_alg = alg.func_enabled(bld_key, onrgoedlvl);
|
||||
user.auth_required_or_abort(this_alg.writeman || (bld_key>0&&this_alg.writeuse));
|
||||
|
||||
var fields = [ { dbs: "alg_locatie_key", typ: "key", frm: "locatiekey" },
|
||||
{ dbs: "alg_srtgebouw_key", typ: "key", frm: "bld_srtkey" },
|
||||
{ dbs: "alg_gebouw_naam", typ: "varchar", frm: "bld_naam" },
|
||||
{ dbs: "alg_gebouw_code", typ: "varchar", frm: "bld_code" },
|
||||
{ dbs: "alg_gebouw_omschrijving", typ: "varchar", frm: "bld_descr" },
|
||||
{ dbs: "alg_gebouw_getekend", typ: "date", frm: "bld_teken" },
|
||||
{ dbs: "alg_gebouw_bruto_vloeropp", typ: "number", frm: "bld_opp" },
|
||||
{ dbs: "alg_gebouw_omtrek", typ: "number", frm: "bld_omtrek" },
|
||||
{ dbs: "alg_gebouw_inhoud", typ: "number", frm: "bld_inhoud" },
|
||||
{ dbs: "alg_gebouw_opmerking", typ: "varchar", frm: "bld_opmerk" },
|
||||
{ dbs: "mld_adres_key", typ: "key", frm: "mld_adres" },
|
||||
{ dbs: "prs_kostenplaats_key", typ: "key", frm: "prs_kstpl" },
|
||||
{ dbs: "mld_dienstniveau_key", typ: "key", frm: "dienstniveau" },
|
||||
{ dbs: "alg_gebouw_ordernr", typ: "varchar", frm: "bld_ordrnr" },
|
||||
{ dbs: "alg_gebouw_dwgx", typ: "float", frm: "bld_dwgx" },
|
||||
{ dbs: "alg_gebouw_dwgy", typ: "float", frm: "bld_dwgy" },
|
||||
{ dbs: "alg_gebouw_x", typ: "float", frm: "bld_x" },
|
||||
{ dbs: "alg_gebouw_y", typ: "float", frm: "bld_y" },
|
||||
{ dbs: "alg_gebouw_bez", typ: "check", frm: "bld_bez" },
|
||||
{ dbs: "alg_gebouw_werkdagen", typ: "check0", frm: "bld_werkdagen" },
|
||||
{ dbs: "prs_perslid_key_verantw", typ: "key", frm: "verantw" }];
|
||||
{ dbs: "ALG_SRTGEBOUW_KEY", typ: "key", frm: "bld_srtkey" },
|
||||
{ dbs: "ALG_GEBOUW_NAAM", typ: "varchar", frm: "bld_naam" },
|
||||
{ dbs: "ALG_GEBOUW_CODE", typ: "varchar", frm: "bld_code" },
|
||||
{ dbs: "ALG_GEBOUW_OMSCHRIJVING", typ: "varchar", frm: "bld_descr" },
|
||||
{ dbs: "ALG_GEBOUW_GETEKEND", typ: "date", frm: "bld_teken" },
|
||||
{ dbs: "ALG_GEBOUW_BRUTO_VLOEROPP", typ: "number", frm: "bld_opp" },
|
||||
{ dbs: "ALG_GEBOUW_OMTREK", typ: "number", frm: "bld_omtrek" },
|
||||
{ dbs: "ALG_GEBOUW_INHOUD", typ: "number", frm: "bld_inhoud" },
|
||||
{ dbs: "ALG_GEBOUW_OPMERKING", typ: "varchar", frm: "bld_opmerk" },
|
||||
{ dbs: "MLD_ADRES_KEY", typ: "key", frm: "mld_adres" },
|
||||
{ dbs: "PRS_KOSTENPLAATS_KEY", typ: "key", frm: "prs_kstpl" },
|
||||
{ dbs: "MLD_DIENSTNIVEAU_KEY", typ: "key", frm: "dienstniveau" },
|
||||
{ dbs: "ALG_GEBOUW_ORDERNR", typ: "varchar", frm: "bld_ordrnr" },
|
||||
{ dbs: "ALG_GEBOUW_DWGX", typ: "float", frm: "bld_dwgx" },
|
||||
{ dbs: "ALG_GEBOUW_DWGY", typ: "float", frm: "bld_dwgy" },
|
||||
{ dbs: "ALG_GEBOUW_X", typ: "float", frm: "bld_x" },
|
||||
{ dbs: "ALG_GEBOUW_Y", typ: "float", frm: "bld_y" },
|
||||
{ dbs: "ALG_GEBOUW_BEZ", typ: "check", frm: "bld_bez" },
|
||||
{ dbs: "ALG_GEBOUW_WERKDAGEN", typ: "check0", frm: "bld_werkdagen" }];
|
||||
|
||||
if (beginuur != -2)
|
||||
fields.push({ dbs: "alg_gebouw_beginuur", typ: "float", val: beginuur });
|
||||
|
||||
@@ -7,9 +7,8 @@
|
||||
*/ %>
|
||||
|
||||
<!-- #include file="../Shared/common.inc" -->
|
||||
<!-- #include file="../Shared/save2db.inc" -->
|
||||
<!-- #include file="../shared/save2db.inc" -->
|
||||
<!-- #include file="../Shared/kenmerk_common.inc"-->
|
||||
<!-- #include file="alg.inc" -->
|
||||
|
||||
<% FCLTHeader.Requires({ plugins:["jQuery"],
|
||||
js: []
|
||||
@@ -17,10 +16,6 @@
|
||||
<%
|
||||
var loc_key = getQParamInt( "loc_key" );
|
||||
|
||||
var onrgoedlvl = "L";
|
||||
var this_alg = alg.func_enabled(loc_key, onrgoedlvl);
|
||||
user.auth_required_or_abort(this_alg.writeman || (loc_key>0&&this_alg.writeuse));
|
||||
|
||||
var fields = [ { dbs: "alg_district_key", typ: "number", frm: "districtkey" },
|
||||
{ dbs: "alg_locatie_code", typ: "varchar", frm: "loc_code" },
|
||||
{ dbs: "alg_locatie_omschrijving", typ: "varchar", frm: "loc_omsch" },
|
||||
|
||||
@@ -7,20 +7,15 @@
|
||||
*/ %>
|
||||
|
||||
<!-- #include file="../Shared/common.inc" -->
|
||||
<!-- #include file="../Shared/save2db.inc" -->
|
||||
<!-- #include file="alg.inc" -->
|
||||
<!-- #include file="../shared/save2db.inc" -->
|
||||
|
||||
<% FCLTHeader.Requires({ plugins:["jQuery"],
|
||||
js: []
|
||||
}) %>
|
||||
<%
|
||||
var reg_key = getQParamInt( "regio_key" );
|
||||
var reg_key = getQParamInt( "regio_key" );
|
||||
|
||||
var onrgoedlvl = "RG";
|
||||
var this_alg = alg.func_enabled(reg_key, onrgoedlvl);
|
||||
user.auth_required_or_abort(this_alg.writeman || (reg_key>0&&this_alg.writeuse));
|
||||
|
||||
var fields = [ { dbs: "alg_regio_omschrijving", typ: "varchar", frm: "reg_oms" }];
|
||||
var fields = [ { dbs: "alg_regio_omschrijving", typ: "varchar", frm: "reg_oms" }];
|
||||
|
||||
var warning = "";
|
||||
if (reg_key > 0)
|
||||
|
||||
@@ -142,7 +142,7 @@ else
|
||||
|
||||
BLOCK_START("algLoc1", "");
|
||||
|
||||
FCLTplaatsselector(this_alg.authparams("WEB_RUIMAN").ALGwritelevel, {
|
||||
FCLTplaatsselector(this_alg.authparams("WEB_ALGMAN").ALGwritelevel, {
|
||||
locatiekey: loc_key,
|
||||
gebouwkey: geb_key,
|
||||
verdiepingkey: ver_key,
|
||||
|
||||
@@ -8,9 +8,8 @@
|
||||
*/ %>
|
||||
|
||||
<!-- #include file="../Shared/common.inc" -->
|
||||
<!-- #include file="../Shared/save2db.inc" -->
|
||||
<!-- #include file="../shared/save2db.inc" -->
|
||||
<!-- #include file="../Shared/kenmerk_common.inc"-->
|
||||
<!-- #include file="alg.inc" -->
|
||||
|
||||
<% FCLTHeader.Requires({ plugins:["jQuery"],
|
||||
js: []
|
||||
@@ -27,10 +26,6 @@
|
||||
if (einduur == -1)
|
||||
einduur = "";
|
||||
|
||||
var onrgoedlvl = "R";
|
||||
var this_alg = alg.func_enabled(room_key, onrgoedlvl);
|
||||
user.auth_required_or_abort(this_alg.writeman || (room_key>0&&this_alg.writeuse));
|
||||
|
||||
function uurForeign(tm)
|
||||
{
|
||||
return toTimeString(tm, false); // geen seconden
|
||||
|
||||
@@ -12,16 +12,12 @@
|
||||
*/ %>
|
||||
|
||||
<!-- #include file="../Shared/common.inc" -->
|
||||
<!-- #include file="../Shared/save2db.inc" -->
|
||||
<!-- #include file="alg.inc" -->
|
||||
<!-- #include file="../shared/save2db.inc" -->
|
||||
|
||||
<% FCLTHeader.Requires({ plugins:["jQuery"],
|
||||
js: []
|
||||
}) %>
|
||||
<%
|
||||
var autfunction = 'WEB_ALGMAN';
|
||||
var authparams = user.checkAutorisation(autfunction)
|
||||
|
||||
var srtruimte_lg_key = getQParamInt("srtruimte_lg_key", -1);
|
||||
var srtruimte_key = getFParamInt("srtruimte", -1);
|
||||
var loc_key = getFParamInt("locatiekey", -1);
|
||||
@@ -68,7 +64,7 @@ __Log("srtruimte_lg_key = " + srtruimte_lg_key);
|
||||
{
|
||||
sql = buildUpdate("alg_srtruimte_locatiegebouw", fields)
|
||||
+ " alg_srtruimte_lg_key = " + srtruimte_lg_key;
|
||||
|
||||
|
||||
var err = Oracle.Execute(sql, true);
|
||||
if (err.friendlyMsg)
|
||||
warning = err.friendlyMsg;
|
||||
@@ -78,7 +74,7 @@ __Log("srtruimte_lg_key = " + srtruimte_lg_key);
|
||||
fields.push({ dbs: "alg_srtruimte_lg_key", typ: "key", seq: "alg_s_alg_srtruimte_lg_key" });
|
||||
var regIns = buildInsert("alg_srtruimte_locatiegebouw", fields);
|
||||
var srtruimte_lg_key = regIns.sequences["alg_srtruimte_lg_key"];
|
||||
|
||||
|
||||
sql = regIns.sql;
|
||||
var err = Oracle.Execute(sql, true);
|
||||
if (err.friendlyMsg)
|
||||
|
||||
@@ -7,19 +7,14 @@
|
||||
*/ %>
|
||||
|
||||
<!-- #include file="../Shared/common.inc" -->
|
||||
<!-- #include file="../Shared/save2db.inc" -->
|
||||
<!-- #include file="../shared/save2db.inc" -->
|
||||
<!-- #include file="../Shared/kenmerk_common.inc"-->
|
||||
<!-- #include file="alg.inc" -->
|
||||
|
||||
<% FCLTHeader.Requires({ plugins:["jQuery"],
|
||||
js: []
|
||||
}) %>
|
||||
<%
|
||||
var ter_key = getQParamInt( "ter_key" );
|
||||
|
||||
var onrgoedlvl = "T";
|
||||
var this_alg = alg.func_enabled(ter_key, onrgoedlvl);
|
||||
user.auth_required_or_abort(this_alg.writeman || (ter_key>0&&this_alg.writeuse));
|
||||
var ter_key = getQParamInt( "ter_key" );
|
||||
|
||||
var fields = [ { dbs: "alg_locatie_key", typ: "key", frm: "locatiekey", track: true /* afzonderlijke tracking, wel oldjsval */ },
|
||||
{ dbs: "ALG_TERREINSECTOR_OMSCHRIJVING", typ: "varchar", frm: "ter_oms" },
|
||||
|
||||
@@ -7,19 +7,14 @@
|
||||
*/ %>
|
||||
|
||||
<!-- #include file="../Shared/common.inc" -->
|
||||
<!-- #include file="../Shared/save2db.inc" -->
|
||||
<!-- #include file="../shared/save2db.inc" -->
|
||||
<!-- #include file="../Shared/kenmerk_common.inc"-->
|
||||
<!-- #include file="alg.inc" -->
|
||||
|
||||
<% FCLTHeader.Requires({ plugins:["jQuery"],
|
||||
js: []
|
||||
}) %>
|
||||
<%
|
||||
var flr_key = getQParamInt( "flr_key" );
|
||||
|
||||
var onrgoedlvl = "V";
|
||||
var this_alg = alg.func_enabled(flr_key, onrgoedlvl);
|
||||
user.auth_required_or_abort(this_alg.writeman || (flr_key>0&&this_alg.writeuse));
|
||||
var flr_key = getQParamInt( "flr_key" );
|
||||
|
||||
var fields = [ { dbs: "alg_verdieping_omschrijving", typ: "varchar", frm: "flr_omschr" },
|
||||
{ dbs: "alg_verdieping_volgnr", typ: "number", frm: "flr_volgnr" },
|
||||
|
||||
@@ -8,8 +8,7 @@
|
||||
|
||||
<!-- #include file="../Shared/common.inc" -->
|
||||
<!-- #include file="../Shared/iface.inc" -->
|
||||
<!-- #include file="../Shared/save2db.inc" -->
|
||||
<!-- #include file="alg.inc" -->
|
||||
<!-- #include file="../shared/save2db.inc" -->
|
||||
|
||||
<% FCLTHeader.Requires({ plugins:["jQuery"] }); %>
|
||||
<%
|
||||
@@ -20,8 +19,6 @@ var virtueel = (getFParamInt("has_wp_virt", 0) == 1) && (Request.Form("wp_virt")
|
||||
// Bij impliciet altijd flex
|
||||
var wp_type = (S("prs_werkplek_implicit") == 1)?1:getFParamInt("wp_type");
|
||||
|
||||
var authparams = alg.checkAutorisation();
|
||||
|
||||
var fields = [// { dbs: "PRS_WERKPLEK_MODULE", typ: "varchar", frm: "" },
|
||||
{ dbs: "PRS_WERKPLEK_VOLGNR", typ: "number", frm: "wp_volgnr" },
|
||||
{ dbs: "PRS_WERKPLEK_OMSCHRIJVING", typ: "varchar", frm: "wp_oms" },
|
||||
|
||||
@@ -71,7 +71,6 @@ function generateFlexKenmerkBlock(params)
|
||||
+ lcl.xsql('k.alg_kenmerk_hint', 'k.alg_kenmerk_key') +" kenmerk_hint, "
|
||||
+ lcl.xsql('k.alg_kenmerk_default', 'k.alg_kenmerk_key') +" kenmerk_default, "
|
||||
+ " k.alg_kenmerk_verplicht kenmerk_verplicht, "
|
||||
+ " k.alg_kenmerk_groep kenmerk_groep, "
|
||||
+ " NULL otherpath, "
|
||||
+ " k.alg_kenmerk_toonbaar kenmerk_toonbaar,"
|
||||
+ " k.alg_kenmerk_uniek kenmerk_uniek,"
|
||||
|
||||
@@ -66,7 +66,7 @@ else
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<body id="editbody">
|
||||
<% if (bld_key == -1)
|
||||
var page="alg_edit_gebouw.asp"; // Maak een nieuw
|
||||
else
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
Note:
|
||||
*/ %>
|
||||
|
||||
<!-- #include file="../Shared/disCxprs3d.inc" -->
|
||||
<!-- #include file="../Shared/json2.js" -->
|
||||
<!-- #include file="../Shared/resultset_table_v2.inc" -->
|
||||
<!-- #include file="../Shared/getkenmerksql.inc" -->
|
||||
@@ -87,15 +88,14 @@ function gebouw_list(pautfunction, params)
|
||||
var dis_key = params.dis_key;
|
||||
var loc_key = params.loc_key;
|
||||
var bld_key = params.bld_key;
|
||||
var srtgebouw_key = params.srtgebouw_key;
|
||||
var verantw_key = params.verantw_key;
|
||||
var bld_func = params.bld_func;
|
||||
|
||||
function fnrowActionEnabler(oRs)
|
||||
{
|
||||
var eDelete = false;
|
||||
if (alg.canWriteGebouw(oRs("alg_gebouw_key").value, authparams.mALGwritelevel))
|
||||
eDelete = true;
|
||||
return ({eDelete: eDelete})
|
||||
var eDelete = false;
|
||||
if (alg.canWriteGebouw(oRs("alg_gebouw_key").value, authparams.mALGwritelevel))
|
||||
eDelete = true;
|
||||
return ({eDelete: eDelete})
|
||||
}
|
||||
|
||||
function fnrowFlexParams(oRs)
|
||||
@@ -114,62 +114,72 @@ function gebouw_list(pautfunction, params)
|
||||
</head>
|
||||
<body id="listbody">
|
||||
<%
|
||||
var sqln = "SELECT g.alg_gebouw_key"
|
||||
+ " , g.alg_locatie_key"
|
||||
+ " , g.alg_locatie_key"
|
||||
+ " , g.alg_srtgebouw_key"
|
||||
+ " , l.alg_locatie_omschrijving"
|
||||
+ " , " + lcl.xsqla('s.alg_srtgebouw_omschrijving', 's.alg_srtgebouw_key')
|
||||
+ " , g.alg_gebouw_code"
|
||||
+ " , g.alg_gebouw_naam"
|
||||
+ " , g.alg_gebouw_opmerking"
|
||||
+ " , g.alg_gebouw_bruto_vloeropp"
|
||||
+ " , g.alg_gebouw_omtrek"
|
||||
+ " , g.alg_gebouw_inhoud"
|
||||
+ " , g.alg_gebouw_x"
|
||||
+ " , g.alg_gebouw_y"
|
||||
+ " FROM alg_v_aanweziggebouw g"
|
||||
+ " , alg_locatie l"
|
||||
+ " , alg_srtgebouw s"
|
||||
+ " WHERE l.alg_locatie_key(+) = g.alg_locatie_key"
|
||||
+ " AND s.alg_srtgebouw_key(+) = g.alg_srtgebouw_key"
|
||||
+ " AND g.alg_gebouw_verwijder IS NULL";
|
||||
var sqln = "SELECT g.alg_gebouw_key, "
|
||||
+ " g.alg_locatie_key, "
|
||||
+ " g.alg_locatie_key, "
|
||||
+ " g.alg_srtgebouw_key, "
|
||||
+ " l.alg_locatie_omschrijving, "
|
||||
+ lcl.xsqla('s.alg_srtgebouw_omschrijving', 's.alg_srtgebouw_key')+", "
|
||||
+ " g.alg_gebouw_code, "
|
||||
+ " g.alg_gebouw_naam, "
|
||||
+ " g.alg_gebouw_opmerking, "
|
||||
+ " g.alg_gebouw_bruto_vloeropp, "
|
||||
+ " g.alg_gebouw_omtrek, "
|
||||
+ " g.alg_gebouw_inhoud, "
|
||||
+ " g.alg_gebouw_x, "
|
||||
+ " g.alg_gebouw_y "
|
||||
+ " FROM alg_v_aanweziggebouw g, "
|
||||
+ " alg_locatie l, "
|
||||
+ " alg_srtgebouw s "
|
||||
+ " WHERE l.alg_locatie_key(+) = g.alg_locatie_key "
|
||||
+ " AND s.alg_srtgebouw_key(+) = g.alg_srtgebouw_key "
|
||||
+ " AND g.alg_gebouw_verwijder IS NULL ";
|
||||
|
||||
if ( authparams.ALGreadlevel > -1 )
|
||||
{ // Er is een scope-beperking van kracht
|
||||
sqln += " AND g.alg_gebouw_key IN (SELECT alg_gebouw_key FROM fac_v_my_buildings "
|
||||
+ " WHERE prs_perslid_key = " + user_key
|
||||
+ " AND niveau = " + authparams.ALGreadlevel + ")";
|
||||
}
|
||||
{ // Er is een scope-beperking van kracht
|
||||
sqln += " AND g.alg_gebouw_key IN "
|
||||
+ "(SELECT alg_gebouw_key FROM fac_v_my_buildings "
|
||||
+ "WHERE prs_perslid_key="+user_key
|
||||
+ " AND niveau=" + authparams.ALGreadlevel + ")";
|
||||
}
|
||||
|
||||
sqln += getKenmerkSql("ALG", "g.alg_gebouw_key");
|
||||
sqln += getKenmerkSql("ALG", "g.alg_gebouw_key");
|
||||
|
||||
if (bld_key)
|
||||
if (bld_key)
|
||||
{
|
||||
sqln += " AND g.alg_gebouw_key = " + bld_key;
|
||||
else if (loc_key)
|
||||
}
|
||||
|
||||
else if (loc_key)
|
||||
{
|
||||
sqln += " AND g.alg_locatie_key = " + loc_key;
|
||||
else if (dis_key)
|
||||
}
|
||||
else if (dis_key)
|
||||
{
|
||||
sqln += " AND l.alg_district_key = " + dis_key;
|
||||
else if (reg_key)
|
||||
}
|
||||
else if (reg_key)
|
||||
{
|
||||
sqln += " AND l.alg_district_key IN (SELECT alg_district_key FROM alg_district WHERE alg_regio_key = " + reg_key+")";
|
||||
}
|
||||
|
||||
if (srtgebouw_key)
|
||||
sqln += " AND g.alg_srtgebouw_key = " + srtgebouw_key;
|
||||
if (bld_func)
|
||||
{
|
||||
sqln += " AND g.alg_srtgebouw_key = " + bld_func;
|
||||
}
|
||||
|
||||
if (verantw_key)
|
||||
sqln += " AND g.prs_perslid_key_verantw = " + verantw_key;
|
||||
|
||||
sqln += " ORDER BY l.alg_locatie_upper ASC, "
|
||||
sqln += " ORDER BY l.alg_locatie_upper ASC, "
|
||||
+ " g.alg_gebouw_upper ASC ";
|
||||
|
||||
var addurl = "appl/alg/alg_gebouw.asp";
|
||||
|
||||
if (canAdd)
|
||||
{
|
||||
addButton = [{ icon: "plus.png", title: L("lcl_add"), action: "FcltMgr.openDetail('" + addurl + "', '" + L("lcl_add") + "')" }]
|
||||
}
|
||||
if (canAdd)
|
||||
{
|
||||
addButton = [{ icon: "plus.png", title: L("lcl_add"), action: "FcltMgr.openDetail('" + addurl + "', '" + L("lcl_add") + "')" }]
|
||||
}
|
||||
|
||||
// addurl += buildTransitParam(["loc_key", "bld_key", "flo_key", "room_key"], params) // TODO: welke allemaal?
|
||||
// addurl += buildTransitParam(["loc_key", "bld_key", "flo_key", "room_key"], params) // TODO: welke allemaal?
|
||||
|
||||
var rst = new ResultsetTable({ sql:sqln,
|
||||
keyColumn: "alg_gebouw_key",
|
||||
@@ -194,24 +204,22 @@ function gebouw_list(pautfunction, params)
|
||||
|
||||
if (outputmode != 0)
|
||||
{
|
||||
rst.addColumn(new Column({caption: L("lcl_estate_gebouw_man_opmerk"), content: "alg_gebouw_opmerking"}));
|
||||
rst.addColumn(new Column({caption: L("lcl_estate_gebouw_man_omtrek"), content: "alg_gebouw_omtrek"}));
|
||||
rst.addColumn(new Column({caption: L("lcl_estate_gebouw_man_inhoud"), content: "alg_gebouw_inhoud"}));
|
||||
rst.addColumn(new Column({caption: L("lcl_geoxcoord"), content: "alg_gebouw_x"}));
|
||||
rst.addColumn(new Column({caption: L("lcl_geoycoord"), content: "alg_gebouw_y"}));
|
||||
rst.addColumn(new Column({caption: L("lcl_estate_gebouw_man_opmerk"), content: "alg_gebouw_opmerking"}));
|
||||
rst.addColumn(new Column({caption: L("lcl_estate_gebouw_man_omtrek"), content: "alg_gebouw_omtrek"}));
|
||||
rst.addColumn(new Column({caption: L("lcl_estate_gebouw_man_inhoud"), content: "alg_gebouw_inhoud"}));
|
||||
rst.addColumn(new Column({caption: L("lcl_geoxcoord"), content: "alg_gebouw_x"}));
|
||||
rst.addColumn(new Column({caption: L("lcl_geoycoord"), content: "alg_gebouw_y"}));
|
||||
}
|
||||
|
||||
rst.addAction({ action: "gebouwEdit", caption: L("lcl_edit"), isDefault: true});
|
||||
rst.addAction({ action: "doDelete", caption: L("lcl_delete"), enabler: "eDelete", single:!noref, multi: true, multiOnce: true});
|
||||
if (!noref)
|
||||
{
|
||||
rst.addAction({ action: "gotoDetails", caption: L("lcl_goto_verdieping_list")});
|
||||
rst.addAction({ action: "gotoParent", caption: L("lcl_goto_locatie_list")});
|
||||
if (!noref) {
|
||||
rst.addAction({ action: "gotoDetails", caption: L("lcl_goto_verdieping_list")});
|
||||
rst.addAction({ action: "gotoParent", caption: L("lcl_goto_locatie_list")});
|
||||
}
|
||||
var cnt = rst.processResultset();
|
||||
%>
|
||||
</body>
|
||||
</html>
|
||||
<%
|
||||
} %>
|
||||
<%}%>
|
||||
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
<!-- #include file="../Shared/common.inc" -->
|
||||
<!-- #include file="../Shared/iface.inc" -->
|
||||
<!-- #include file="../Shared/plaatsselector.inc" -->
|
||||
<!-- #include file="../Shared/persoonselector.inc" -->
|
||||
<!-- #include file="../Shared/selector.inc" -->
|
||||
<!-- #include file="alg.inc" -->
|
||||
|
||||
@@ -16,11 +15,9 @@ FCLTHeader.Requires({ plugins:["jQuery", "kenmerk"] });
|
||||
|
||||
var locatie_key = getQParamInt("locatie_key", -1); // Locatie
|
||||
var gebouw_key = getQParamInt("gebouw_key", -1); // Gebouw
|
||||
var srtgebouw_key = getQParamInt("gebouw_func", -1); // Gebouwfunctie
|
||||
var verantw_key = getQParamInt("verantw", -1); // Gebouw verantwoordelijke
|
||||
var gebouw_func = getQParamInt("gebouw_func", -1); // Gebouwfunctie
|
||||
var autosearch = getQParamInt("autosearch", 0) == 1;
|
||||
var authparams = alg.checkAutorisation();
|
||||
var this_alg = alg.func_enabled(gebouw_key);
|
||||
%>
|
||||
|
||||
<html>
|
||||
@@ -49,59 +46,47 @@ var this_alg = alg.func_enabled(gebouw_key);
|
||||
<body id="searchbody">
|
||||
<div id="search">
|
||||
<form name="u2" target="workFrame" action="alg_gebouw_search_list.asp" method="get">
|
||||
<% BLOCK_START("searchtable", L("lcl_filterblok"));%>
|
||||
<tr>
|
||||
<td class="searchkolom1">
|
||||
<table><!-- x rijen, 2 kolommen: label + veld -->
|
||||
<% BLOCK_START("searchtable", L("lcl_filterblok"));%>
|
||||
<tr>
|
||||
<td class="searchkolom1">
|
||||
<table><!-- x rijen, 2 kolommen: label + veld -->
|
||||
|
||||
<% <!-- Locatie, gebouw en verdieping -->
|
||||
FCLTplaatsselector(authparams.ALGreadlevel, {
|
||||
locatiekey: locatie_key,
|
||||
gebouwkey: gebouw_key,
|
||||
startlevel: 2, // locatie
|
||||
eindlevel: 3, // gebouw
|
||||
whenEmpty: L("lcl_search_generic")
|
||||
});
|
||||
<% <!-- Locatie, gebouw en verdieping -->
|
||||
FCLTplaatsselector(authparams.ALGreadlevel, {
|
||||
locatiekey: locatie_key,
|
||||
gebouwkey: gebouw_key,
|
||||
startlevel: 2, // locatie
|
||||
eindlevel: 3, // gebouw
|
||||
whenEmpty: L("lcl_search_generic")
|
||||
});
|
||||
%>
|
||||
</table>
|
||||
</td><!-- end column 1 -->
|
||||
</table>
|
||||
</td><!-- end column 1 -->
|
||||
|
||||
<td class="searchkolom2">
|
||||
<table><!-- x rijen, 2 kolommen: label + veld -->
|
||||
<!-- Zoektekst -->
|
||||
<% sql = "SELECT alg_srtgebouw_key"
|
||||
+ ", "+lcl.xsqla('alg_srtgebouw_omschrijving', 'alg_srtgebouw_key')
|
||||
+ " FROM alg_srtgebouw"
|
||||
+ " WHERE alg_srtgebouw_verwijder IS NULL"
|
||||
+ " ORDER BY UPPER("+lcl.xsql('alg_srtgebouw_omschrijving', 'alg_srtgebouw_key')+")";
|
||||
FCLTselector("srt",
|
||||
sql,
|
||||
{ initKey: srtgebouw_key,
|
||||
label: L("lcl_estate_gebouw_srtgebouw"),
|
||||
trclass: "primsearch",
|
||||
emptyOption: ""
|
||||
});
|
||||
<td class="searchkolom2">
|
||||
<table><!-- x rijen, 2 kolommen: label + veld -->
|
||||
<% // <!-- Zoektekst -->
|
||||
sql = "SELECT alg_srtgebouw_key"
|
||||
+ ", "+lcl.xsqla('alg_srtgebouw_omschrijving', 'alg_srtgebouw_key')
|
||||
+ " FROM alg_srtgebouw"
|
||||
+ " WHERE alg_srtgebouw_verwijder IS NULL"
|
||||
+ " ORDER BY UPPER("+lcl.xsql('alg_srtgebouw_omschrijving', 'alg_srtgebouw_key')+")";
|
||||
FCLTselector("srt",
|
||||
sql,
|
||||
{ initKey: gebouw_func,
|
||||
label: L("lcl_estate_gebouw_srtgebouw"),
|
||||
trclass: "primsearch",
|
||||
emptyOption: ""
|
||||
});
|
||||
%>
|
||||
<!-- Gebouw verantwoordelijke -->
|
||||
<% // Dit veld is alleen zichtbaar indien er minimaal <20><>n gebouwverantwoordelijke geconfigureerd is (suppressNoValues).
|
||||
FCLTpersoonselector("verantw",
|
||||
"sgVerantw",
|
||||
{ perslidKey: verantw_key,
|
||||
label: L("lcl_alg_bld_verantw"),
|
||||
filtercode: "GV", // Gebouw Verantwoordelijke
|
||||
trclass: "primsearch",
|
||||
suppressNoValues: true,
|
||||
whenEmpty: L("lcl_search_generic") // want filter
|
||||
});
|
||||
%>
|
||||
</table>
|
||||
</td><!-- end column 1 -->
|
||||
</tr>
|
||||
<% BLOCK_END();
|
||||
</table>
|
||||
</td><!-- end column 1 -->
|
||||
</tr>
|
||||
<% BLOCK_END();
|
||||
|
||||
var buttons = [ {title: L("lcl_search"), action: "doSubmit()", id: "bSearch" },
|
||||
{title: L("lcl_obj_advanced"), action: "myModal()", id: "bAdvanced" } ];
|
||||
CreateButtons(buttons, { entersubmit: true });
|
||||
var buttons = [ {title: L("lcl_search"), action: "doSubmit()", id: "bSearch" },
|
||||
{title: L("lcl_obj_advanced"), action: "myModal()", id: "bAdvanced" } ];
|
||||
CreateButtons(buttons, { entersubmit: true });
|
||||
%>
|
||||
</form>
|
||||
</div> <!-- search -->
|
||||
|
||||
@@ -26,14 +26,12 @@ var reg_key = getQParamInt("regiokey", -1); // Regio
|
||||
var dis_key = getQParamInt("districtkey", -1); // District
|
||||
var loc_key = getQParamInt("locatiekey", -1); // Locatie
|
||||
var bld_key = getQParamInt("gebouwkey", -1); // Gebouw
|
||||
var srtgebouw_key = getQParamInt("srt", -1); // Gebouwfunctie
|
||||
var verantw_key = getQParamInt("verantw", -1); // Gebouw verantwoordelijke
|
||||
var bld_func = getQParamInt("srt", -1);
|
||||
|
||||
gebouw_list ( "*",
|
||||
{ outputmode: outputmode,
|
||||
showall: showall,
|
||||
srtgebouw_key: (srtgebouw_key != -1? srtgebouw_key: null),
|
||||
verantw_key: (verantw_key != -1? verantw_key: null),
|
||||
bld_func: (bld_func != -1? bld_func: null),
|
||||
reg_key: (reg_key != -1? reg_key : null),
|
||||
dis_key: (dis_key != -1? dis_key : null),
|
||||
loc_key: (loc_key != -1? loc_key : null),
|
||||
|
||||
@@ -65,7 +65,7 @@ else
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<body id="editbody">
|
||||
<%
|
||||
if (loc_key == -1)
|
||||
var page="alg_edit_locatie.asp"; // Maak een nieuw
|
||||
|
||||
@@ -50,7 +50,7 @@ var reg_key = getQParamInt("key", -1);
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<body id="editbody">
|
||||
<% if (reg_key == -1)
|
||||
var page="alg_edit_regio.asp"; // Maak een nieuw
|
||||
else
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
Note:
|
||||
*/ %>
|
||||
|
||||
<!-- #include file="../Shared/disCxprs3d.inc" -->
|
||||
<!-- #include file="../Shared/json2.js" -->
|
||||
<!-- #include file="../Shared/resultset_table_v2.inc" -->
|
||||
<!-- #include file="../Shared/getkenmerksql.inc" -->
|
||||
|
||||
@@ -95,7 +95,7 @@ else
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<body id="editbody">
|
||||
<%
|
||||
if (room_key == -1)
|
||||
var page="alg_edit_ruimte.asp?room_key=" + room_key + addString; // Maak een nieuw
|
||||
|
||||
@@ -22,8 +22,7 @@ function ruimte_list(pautfunction, params)
|
||||
// De functie checkAutorisation(autfunction) geeft een Response.End indien er geen autorisatie voor autfunction wordt gevonden
|
||||
var addButton = [];
|
||||
var authparams = alg.checkAutorisation();
|
||||
// Met ALG* bepaal je wat je ziet (Read), met RUI* en TER* bepaal je wat je kunt wijzigen (Write).
|
||||
var canAdd = (authparams.rmALGwritelevel < 9);
|
||||
var canAdd = (authparams.mALGwritelevel < 9);
|
||||
|
||||
// Voor resulttable de globalen zetten; zou ng anders moeten.
|
||||
var outputmode = params.outputmode; // print to 0 = screen, 1 = printer, 2 = excel, etc.
|
||||
@@ -174,10 +173,10 @@ function ruimte_list(pautfunction, params)
|
||||
|
||||
function fnrowData(oRs)
|
||||
{
|
||||
var parent_key = oRs("alg_verdieping_key").Value;
|
||||
var detail_key = oRs("alg_ruimte_key").Value;
|
||||
var key = oRs("alg_ruimte_key").Value;
|
||||
var oms = oRs("alg_ruimte_omschrijving").Value;
|
||||
var parent_key = oRs("alg_verdieping_key").value;
|
||||
var detail_key = oRs("alg_ruimte_key").value;
|
||||
var key = oRs("alg_ruimte_key").value;
|
||||
var oms = oRs("alg_ruimte_omschrijving").value;
|
||||
|
||||
var data = {parent_key:parent_key, detail_key:detail_key, key:key, oms:oms};
|
||||
return JSON.stringify(data);
|
||||
@@ -187,17 +186,17 @@ function ruimte_list(pautfunction, params)
|
||||
// Voor performance bekijken we de rechten per verdieping. In de praktijk nauwkeurig genoeg
|
||||
function fnrowActionEnabler(oRs)
|
||||
{
|
||||
if (!floorCache[oRs("alg_verdieping_key").Value])
|
||||
if (!floorCache[oRs("alg_verdieping_key").value])
|
||||
{
|
||||
floorCache[oRs("alg_verdieping_key").Value] =
|
||||
floorCache[oRs("alg_verdieping_key").value] =
|
||||
{
|
||||
eDelete: alg.canWriteVerdieping(oRs("alg_verdieping_key").Value, authparams.rmALGwritelevel),
|
||||
eDelete: alg.canWriteVerdieping(oRs("alg_verdieping_key").value, authparams.mALGwritelevel),
|
||||
// Bezetting moet per regel en is afhankelijk van WEB_PRSBOF (werkplekbeheer)
|
||||
eBezetting: alg.func_enabled_ruimte(oRs("alg_verdieping_key").Value).canPRSBOFwrite
|
||||
eBezetting: alg.func_enabled_ruimte(oRs("alg_verdieping_key").value).canPRSBOFwrite
|
||||
}
|
||||
}
|
||||
|
||||
return (floorCache[oRs("alg_verdieping_key").Value]);
|
||||
return (floorCache[oRs("alg_verdieping_key").value]);
|
||||
}
|
||||
|
||||
function fnrowFlexParams(oRs)
|
||||
|
||||
@@ -51,7 +51,7 @@ FCLTHeader.Requires({plugins:["suggest","jQuery"], js: ["jQuery-ui.js"]})
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<body id="editbody">
|
||||
<%
|
||||
var page="alg_edit_ruimtefunctie.asp?srtruimte_lg_key=" + srtruimte_lg_key; // Edit
|
||||
//if (srtruimte_lg_key == -1)
|
||||
|
||||
@@ -81,7 +81,7 @@ var authparams = alg.checkAutorisation();
|
||||
{title: L("lcl_menu_alg_ruimte"), action: "doSubmit('R')"},
|
||||
{title: L("lcl_menu_alg_terreinsector"), action: "doSubmit('T')"}
|
||||
];
|
||||
CreateButtons(buttons, { entersubmit: true });
|
||||
CreateButtons(buttons);
|
||||
%></div> <!-- search -->
|
||||
|
||||
<div id="result">
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
<!-- #include file="../Shared/iface.inc" -->
|
||||
<!-- #include file="../Shared/selector.inc" -->
|
||||
<!-- #include file="../Shared/plaatsselector.inc" -->
|
||||
<!-- #include file="../Shared/persoonselector.inc" -->
|
||||
<!-- #include file="alg_flexkenmerk.inc" -->
|
||||
<!-- #include file="alg.inc" -->
|
||||
|
||||
@@ -33,30 +32,29 @@ var sql = " SELECT * "
|
||||
+ " FROM alg_gebouw "
|
||||
+ " WHERE alg_gebouw_key = " + bld_key;
|
||||
var oRs = Oracle.Execute(sql);
|
||||
var bld_srtkey = oRs("alg_srtgebouw_key").Value;
|
||||
var bld_naam = oRs("alg_gebouw_naam").Value;
|
||||
var bld_code = oRs("alg_gebouw_code").Value;
|
||||
var bld_descr = oRs("alg_gebouw_omschrijving").Value;
|
||||
var bld_maak = oRs("alg_gebouw_aanmaak").Value;
|
||||
var bld_teken = oRs("alg_gebouw_getekend").Value;
|
||||
var bld_opp = oRs("alg_gebouw_bruto_vloeropp").Value;
|
||||
var bld_omtrek = oRs("alg_gebouw_omtrek").Value;
|
||||
var bld_inhoud = oRs("alg_gebouw_inhoud").Value;
|
||||
var bld_opmerk = oRs("alg_gebouw_opmerking").Value;
|
||||
var mld_adres = oRs("mld_adres_key").Value;
|
||||
var prs_kstpl = oRs("prs_kostenplaats_key").Value;
|
||||
var bld_ordrnr = oRs("alg_gebouw_ordernr").Value;
|
||||
var bld_dwgx = oRs("alg_gebouw_dwgx").Value;
|
||||
var bld_dwgy = oRs("alg_gebouw_dwgy").Value;
|
||||
var bld_x = oRs("alg_gebouw_x").Value;
|
||||
var bld_y = oRs("alg_gebouw_y").Value;
|
||||
var bld_bez = oRs("alg_gebouw_bez").Value;
|
||||
var bld_deleted = oRs("alg_gebouw_verwijder").Value != null;
|
||||
var dienstniveau = oRs("mld_dienstniveau_key").Value;
|
||||
var beginuur = oRs("alg_gebouw_beginuur").Value;
|
||||
var einduur = oRs("alg_gebouw_einduur").Value;
|
||||
var werkdagen = oRs("alg_gebouw_werkdagen").Value;
|
||||
var verantw = oRs("prs_perslid_key_verantw").Value;
|
||||
var bld_srtkey = oRs("alg_srtgebouw_key").value;
|
||||
var bld_naam = oRs("alg_gebouw_naam").value;
|
||||
var bld_code = oRs("alg_gebouw_code").value;
|
||||
var bld_descr = oRs("alg_gebouw_omschrijving").value;
|
||||
var bld_maak = oRs("alg_gebouw_aanmaak").value;
|
||||
var bld_teken = oRs("alg_gebouw_getekend").value;
|
||||
var bld_opp = oRs("alg_gebouw_bruto_vloeropp").value;
|
||||
var bld_omtrek = oRs("alg_gebouw_omtrek").value;
|
||||
var bld_inhoud = oRs("alg_gebouw_inhoud").value;
|
||||
var bld_opmerk = oRs("alg_gebouw_opmerking").value;
|
||||
var mld_adres = oRs("mld_adres_key").value;
|
||||
var prs_kstpl = oRs("prs_kostenplaats_key").value;
|
||||
var bld_ordrnr = oRs("alg_gebouw_ordernr").value;
|
||||
var bld_dwgx = oRs("alg_gebouw_dwgx").value;
|
||||
var bld_dwgy = oRs("alg_gebouw_dwgy").value;
|
||||
var bld_x = oRs("alg_gebouw_x").value;
|
||||
var bld_y = oRs("alg_gebouw_y").value;
|
||||
var bld_bez = oRs("alg_gebouw_bez").value;
|
||||
var bld_deleted = oRs("alg_gebouw_verwijder").value != null;
|
||||
var dienstniveau = oRs("mld_dienstniveau_key").value;
|
||||
var beginuur = oRs("alg_gebouw_beginuur").value;
|
||||
var einduur = oRs("alg_gebouw_einduur").value;
|
||||
var werkdagen = oRs("alg_gebouw_werkdagen").value;
|
||||
oRs.Close();
|
||||
%>
|
||||
|
||||
@@ -111,84 +109,73 @@ oRs.Close();
|
||||
{ gebouwkey: bld_key,
|
||||
startlevel: 2, //Locatie
|
||||
eindlevel: 3, // Gebouw
|
||||
readonly: true
|
||||
});
|
||||
sql = "SELECT alg_srtgebouw_key"
|
||||
+ " , " + lcl.xsqla('alg_srtgebouw_omschrijving', 'alg_srtgebouw_key')
|
||||
+ " FROM alg_srtgebouw"
|
||||
+ " WHERE alg_srtgebouw_verwijder IS NULL"
|
||||
+ " ORDER BY alg_srtgebouw_upper"
|
||||
FCLTselector("bld_srtkey",
|
||||
sql,
|
||||
readonly: true });
|
||||
sql = "SELECT alg_srtgebouw_key, "
|
||||
+ " "+lcl.xsqla('alg_srtgebouw_omschrijving', 'alg_srtgebouw_key')
|
||||
+ " FROM alg_srtgebouw "
|
||||
+ " WHERE alg_srtgebouw_verwijder IS NULL "
|
||||
+ "ORDER BY alg_srtgebouw_upper "
|
||||
FCLTselector("bld_srtkey", sql,
|
||||
{ label: L("lcl_estate_gebouw_srtgebouw"),
|
||||
initKey: bld_srtkey,
|
||||
emptyOption: "",
|
||||
readonly: true
|
||||
});
|
||||
readonly: true });
|
||||
ROFIELDTR("fld", L("lcl_estate_gebouw_man_code"), bld_code, {suppressEmpty:true});
|
||||
ROFIELDTR("fld", L("lcl_estate_gebouw_man_opmerk"), bld_opmerk, {suppressEmpty:true});
|
||||
sql = "SELECT prs_kostenplaats_key"
|
||||
+ " , k.prs_kostenplaats_nr || ' ' || k.prs_kostenplaats_omschrijving"
|
||||
+ " FROM prs_kostenplaats k"
|
||||
+ " WHERE k.prs_kostenplaats_module = 'ALG'"
|
||||
+ " ORDER BY prs_kostenplaats_upper";
|
||||
FCLTselector("prs_kstpl",
|
||||
sql,
|
||||
{ label: L("lcl_prs_dept_kosten"),
|
||||
initKey: prs_kstpl,
|
||||
emptyOption: "",
|
||||
readonly: true
|
||||
});
|
||||
sql = "SELECT prs_kostenplaats_key, "
|
||||
+ " k.prs_kostenplaats_nr || ' ' || k.prs_kostenplaats_omschrijving "
|
||||
+ " FROM prs_kostenplaats k "
|
||||
+ " WHERE k.prs_kostenplaats_module = 'ALG' "
|
||||
+ "ORDER BY prs_kostenplaats_upper ";
|
||||
FCLTselector("prs_kstpl", sql,
|
||||
{ label: L("lcl_prs_dept_kosten"),
|
||||
initKey: prs_kstpl,
|
||||
emptyOption: "",
|
||||
readonly: true });
|
||||
ROFIELDTR("fld", L("lcl_estate_gebouw_ordernr"), bld_ordrnr, {suppressEmpty:true});
|
||||
if (dienstniveau)
|
||||
{
|
||||
sql = "SELECT mld_dienstniveau_key"
|
||||
+ " , " + lcl.xsqla("mld_dienstniveau_omschr", "mld_dienstniveau_key")
|
||||
+ " FROM mld_dienstniveau"
|
||||
+ " WHERE mld_dienstniveau_key = " + dienstniveau;
|
||||
oRs = Oracle.Execute(sql);
|
||||
ROFIELDTR("fld", L("lcl_mld_dienst_niveau"), oRs("mld_dienstniveau_omschr").value);
|
||||
oRs.Close();
|
||||
sql = "SELECT mld_dienstniveau_key, "
|
||||
+ lcl.xsqla("mld_dienstniveau_omschr", "mld_dienstniveau_key")
|
||||
+ " FROM mld_dienstniveau "
|
||||
+ " WHERE mld_dienstniveau_key = " + dienstniveau;
|
||||
oRs = Oracle.Execute(sql);
|
||||
ROFIELDTR("fld", L("lcl_mld_dienst_niveau"), oRs("mld_dienstniveau_omschr").value);
|
||||
oRs.Close();
|
||||
}
|
||||
FCLTpersoonselector("verantw",
|
||||
"sgVerantw",
|
||||
{ perslidKey: verantw,
|
||||
label: L("lcl_alg_verantw"),
|
||||
readonly: true,
|
||||
suppressEmpty: true,
|
||||
moreinfo: this_alg.writeman
|
||||
});
|
||||
BLOCK_END();
|
||||
|
||||
BLOCK_START("algLoc2", "");
|
||||
ROFIELDTR("fld", L("lcl_estate_gebouw_man_bruto_vloeropp"), bld_opp, {suppressEmpty: true});
|
||||
ROFIELDTR("fld", L("lcl_estate_gebouw_man_omtrek"), bld_omtrek, {suppressEmpty: true});
|
||||
ROFIELDTR("fld", L("lcl_estate_gebouw_man_inhoud"), bld_inhoud, {suppressEmpty: true});
|
||||
sql = "SELECT mld_adres_key"
|
||||
+ " , mld_adres_naam"
|
||||
+ " FROM mld_v_afleveradres"
|
||||
+ " ORDER BY mld_adres_naam";
|
||||
FCLTselector("del_address",
|
||||
sql,
|
||||
{ label: L("lcl_delivery_address"),
|
||||
initKey: mld_adres,
|
||||
emptyOption: "",
|
||||
readonly: true
|
||||
});
|
||||
ROFIELDTR("fld", L("lcl_estate_gebouw_man_bruto_vloeropp"), bld_opp, {suppressEmpty:true});
|
||||
ROFIELDTR("fld", L("lcl_estate_gebouw_man_omtrek"), bld_omtrek, {suppressEmpty:true});
|
||||
ROFIELDTR("fld", L("lcl_estate_gebouw_man_inhoud"), bld_inhoud, {suppressEmpty:true});
|
||||
sql ="SELECT mld_adres_key, "
|
||||
+ " mld_adres_naam "
|
||||
+ " FROM mld_v_afleveradres "
|
||||
+ "ORDER BY mld_adres_naam ";
|
||||
FCLTselector("del_address", sql,
|
||||
{ label: L("lcl_delivery_address"),
|
||||
initKey: mld_adres,
|
||||
emptyOption: "",
|
||||
readonly: true
|
||||
}
|
||||
);
|
||||
ROFIELDTR("fld", L("lcl_geoxcoord"), bld_x, {suppressEmpty:true});
|
||||
ROFIELDTR("fld", L("lcl_geoycoord"), bld_y, {suppressEmpty:true});
|
||||
ROCHECKBOXTR("fldalgbez", L("lcl_estate_gebouw_bez"), bld_bez==1);
|
||||
|
||||
ROFIELDTR("fld", L("lcl_estate_gebouw_beginuur"), toTimeString(beginuur), {suppressEmpty:true} );
|
||||
ROFIELDTR("fld", L("lcl_estate_gebouw_einduur"), toTimeString(einduur), {suppressEmpty:true} );
|
||||
|
||||
ROCHECKBOXTR("fldalgwerk", L("lcl_estate_gebouw_werkdagen"), werkdagen==1);
|
||||
|
||||
BLOCK_END();
|
||||
|
||||
generateFlexKenmerkBlock ({ onrgoed_key : bld_key,
|
||||
onrgoed_niveau : onrgoedlvl,
|
||||
reado : true,
|
||||
flexcolumns : S("alg_flexcolumns"),
|
||||
this_alg : this_alg
|
||||
});
|
||||
onrgoed_niveau : onrgoedlvl,
|
||||
reado : true,
|
||||
flexcolumns : S("alg_flexcolumns"),
|
||||
this_alg : this_alg });
|
||||
%>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
@@ -124,7 +124,7 @@ oRs.Close();
|
||||
var xfunc = user.func_enabled2("CAD", { isOptional: true });
|
||||
if (xfunc && xfunc.canRead("WEB_CADUSE"))
|
||||
buttons.push({title: L("lcl_prs_wp_fgraph"), action:"openFG()", icon: "zone.png" });
|
||||
if (this_alg.writeman) // RUIMAN nodig
|
||||
if (this_alg.writeman) // ALGMAN nodig
|
||||
buttons.push({title: L("lcl_delete"), action:"room_delete()", icon: "delete.png" });
|
||||
}
|
||||
|
||||
|
||||
@@ -1,326 +0,0 @@
|
||||
<%@language = "javascript" %>
|
||||
<% /*
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File: alg_srtruimte.asp
|
||||
Description: Wijzigen van srtruimte gegevens
|
||||
Parameters:
|
||||
Context:
|
||||
*/ %>
|
||||
|
||||
<!-- #include file="../Shared/common.inc" -->
|
||||
<!-- #include file="../Shared/iface.inc" -->
|
||||
<!-- #include file="../Shared/json2.js" -->
|
||||
<!-- #include file="../Shared/save2db.inc" -->
|
||||
<!-- #include file="../Shared/selector.inc" -->
|
||||
|
||||
<%
|
||||
FCLTHeader.Requires({js: ["jquery-ui.js"]});
|
||||
|
||||
var srtruimte_key = getQParamInt("alg_srtruimte_key", -1); // default is nieuwe
|
||||
var mode = getQParam("mode", "show");
|
||||
|
||||
if (srtruimte_key == -1 && mode == "show")
|
||||
mode = "new";
|
||||
|
||||
var authparams = user.checkAutorisation("WEB_ALGMSU");
|
||||
|
||||
var srtr_info = {};
|
||||
|
||||
if (srtruimte_key > 0)
|
||||
{ // bestaande ruimtesoort
|
||||
var sql = "SELECT r.alg_srtruimte_key"
|
||||
+ " , r.alg_srtruimte_omschrijving"
|
||||
+ " , r.alg_srtruimte_prijs"
|
||||
+ " , r.alg_srtruimte_prijs2"
|
||||
+ " , r.alg_srtruimte_prijs3"
|
||||
+ " , r.alg_srtruimte_prijs4"
|
||||
+ " , r.alg_srtruimte_prijs5"
|
||||
+ " , r.alg_srtruimte_code"
|
||||
+ " , r.prs_bevat_werkplek"
|
||||
+ " , r.prs_verhuurbaar"
|
||||
+ " , r.alg_srtruimte_t_uitvoertijd.tijdsduur uitvoertijd_t"
|
||||
+ " , r.alg_srtruimte_t_uitvoertijd.eenheid uitvoertijd_e"
|
||||
+ " , r.alg_srtruimte_verwijder"
|
||||
+ " FROM alg_srtruimte r"
|
||||
+ " WHERE alg_srtruimte_key = " + srtruimte_key;
|
||||
oRs = Oracle.Execute(sql);
|
||||
if (!oRs.eof)
|
||||
{
|
||||
var srtr_info = { alg_srtruimte_omschrijving: oRs("alg_srtruimte_omschrijving").Value,
|
||||
alg_srtruimte_prijs: oRs("alg_srtruimte_prijs").Value,
|
||||
alg_srtruimte_prijs2: oRs("alg_srtruimte_prijs2").Value,
|
||||
alg_srtruimte_prijs3: oRs("alg_srtruimte_prijs3").Value,
|
||||
alg_srtruimte_prijs4: oRs("alg_srtruimte_prijs4").Value,
|
||||
alg_srtruimte_prijs5: oRs("alg_srtruimte_prijs5").Value,
|
||||
alg_srtruimte_code: oRs("alg_srtruimte_code").Value,
|
||||
prs_bevat_werkplek: oRs("prs_bevat_werkplek").Value,
|
||||
prs_verhuurbaar: oRs("prs_verhuurbaar").Value,
|
||||
tijd_uitvoertijd: oRs("uitvoertijd_t").Value,
|
||||
eenh_uitvoertijd: oRs("uitvoertijd_e").Value
|
||||
};
|
||||
var srtruimte_deleted = oRs("alg_srtruimte_verwijder").value != null;
|
||||
}
|
||||
oRs.close();
|
||||
}
|
||||
else
|
||||
{ // nieuwe ruimtesoort
|
||||
var srtr_info = { alg_srtruimte_omschrijving: "",
|
||||
alg_srtruimte_code: "",
|
||||
tijd_uitvoertijd: null,
|
||||
eenh_uitvoertijd: null
|
||||
};
|
||||
}
|
||||
|
||||
%>
|
||||
<html>
|
||||
<head>
|
||||
<%
|
||||
FCLTHeader.Generate();
|
||||
|
||||
if (mode == "save")
|
||||
{
|
||||
var fields = [ { dbs: "alg_srtruimte_omschrijving", typ: "varchar", frm: "omschrijving" },
|
||||
{ dbs: "alg_srtruimte_prijs", typ: "float", frm: "prijs" },
|
||||
{ dbs: "alg_srtruimte_prijs2", typ: "float", frm: "prijs2" },
|
||||
{ dbs: "alg_srtruimte_prijs3", typ: "float", frm: "prijs3" },
|
||||
{ dbs: "alg_srtruimte_prijs4", typ: "float", frm: "prijs4" },
|
||||
{ dbs: "alg_srtruimte_prijs5", typ: "float", frm: "prijs5" },
|
||||
{ dbs: "alg_srtruimte_code", typ: "varchar", frm: "code" },
|
||||
{ dbs: "prs_bevat_werkplek", typ: "check", frm: "bevatwerkplek" },
|
||||
{ dbs: "prs_verhuurbaar", typ: "check", frm: "verhuurbaar" }
|
||||
];
|
||||
|
||||
// Checken of het eenheden selectveld met dagen/uren bij "Uitvoertijd" niet readonly was en wel is meegegeven.
|
||||
// Als dit eenheden selectieveld readonly was dan is er geen waarde voor uitvoertijd ingevuld en moeten beide waarden null worden.
|
||||
fields = shared.add_time_field(fields, "alg_srtruimte_t_uitvoertijd", "uitvoertijd", "dayshours_urg");
|
||||
|
||||
// Update, delete of insert uitvoeren.
|
||||
if (srtruimte_key > 0)
|
||||
{
|
||||
var sql = buildUpdate("alg_srtruimte", fields)
|
||||
+ " alg_srtruimte_key = " + srtruimte_key;
|
||||
var err = Oracle.Execute(sql, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
fields.push( { dbs: "alg_srtruimte_key", typ: "key", seq: "alg_s_alg_srtruimte_key" } );
|
||||
var algIns = buildInsert("alg_srtruimte", fields);
|
||||
var alg_srtruimte_key = algIns.sequences["alg_srtruimte_key"];
|
||||
var err = Oracle.Execute(algIns.sql, true);
|
||||
srtruimte_key = alg_srtruimte_key;
|
||||
}
|
||||
|
||||
if (err.friendlyMsg)
|
||||
{
|
||||
%>
|
||||
<script>
|
||||
alert("<%=safe.jsstring(err.friendlyMsg)%>");
|
||||
</script>
|
||||
<%
|
||||
}
|
||||
else
|
||||
{
|
||||
%>
|
||||
<script>
|
||||
$(document).ready(function () {parent.window.location.href="alg_srtruimte.asp?mode=show&alg_srtruimte_key=<%=srtruimte_key%>";} );
|
||||
</script>
|
||||
<%
|
||||
}
|
||||
Response.End;
|
||||
}
|
||||
else if (srtruimte_key > 0 && mode == "delete")
|
||||
{
|
||||
var sql = "UPDATE alg_srtruimte"
|
||||
+ " SET alg_srtruimte_verwijder = SYSDATE"
|
||||
+ " WHERE alg_srtruimte_verwijder IS NULL"
|
||||
+ " AND alg_srtruimte_key = " + srtruimte_key;
|
||||
var err = Oracle.Execute(sql, true);
|
||||
%>
|
||||
<script>
|
||||
$(document).ready(function () {
|
||||
FcltMgr.closeDetail(window, { alg_srtruimte_key: <%=srtruimte_key%>,
|
||||
warning: "<%=safe.jsstring(err.friendlyMsg)%>",
|
||||
keepForm: <%=err.friendlyMsg? "true" : "false"%>
|
||||
});
|
||||
} );
|
||||
</script>
|
||||
<%
|
||||
Response.End;
|
||||
}
|
||||
%>
|
||||
<script type="text/javascript" >
|
||||
|
||||
function alg_submit()
|
||||
{
|
||||
$("#verhuurbaar").prop("disabled", false); // Weer enabled zodat waarde ook gesubmit wordt.
|
||||
if (!validateForm("u2"))
|
||||
return false;
|
||||
|
||||
document.forms.u2.submit();
|
||||
}
|
||||
|
||||
function alg_edit()
|
||||
{
|
||||
window.location.href = "alg_srtruimte.asp?mode=edit&alg_srtruimte_key=<%=srtruimte_key%>";
|
||||
}
|
||||
|
||||
function alg_delete()
|
||||
{
|
||||
if (confirm("<%=safe.jsstring(L("lcl_R_U_sure"))%>"))
|
||||
window.location.href = "alg_srtruimte.asp?mode=delete&alg_srtruimte_key=<%=srtruimte_key%>";
|
||||
}
|
||||
|
||||
function alg_cancel()
|
||||
{
|
||||
if (<%=srtruimte_key%> > 0)
|
||||
{
|
||||
window.location.href = "alg_srtruimte.asp?mode=show&alg_srtruimte_key=<%=srtruimte_key%>";
|
||||
}
|
||||
else
|
||||
{
|
||||
FcltMgr.closeDetail(window, { cancel: true });
|
||||
}
|
||||
}
|
||||
|
||||
function alg_close(params)
|
||||
{
|
||||
<% if (srtruimte_key == -1)
|
||||
{
|
||||
%>
|
||||
if (params.cancel)
|
||||
{
|
||||
FcltMgr.closeDetail(window, params);
|
||||
return true;
|
||||
}
|
||||
<% }
|
||||
else
|
||||
{ // Bestaand ruimtesoort bewerkt, switch naar show-mode
|
||||
%>
|
||||
if (params.close)
|
||||
{
|
||||
FcltMgr.closeDetail(window, { close: true})
|
||||
}
|
||||
<% }
|
||||
%>
|
||||
if (!params.keepForm)
|
||||
window.location.href = "alg_srtruimte.asp?mode=show&alg_srtruimte_key=" + params.srtruimte_key;
|
||||
}
|
||||
|
||||
function onChangeBevatWerkplek()
|
||||
{
|
||||
// Als bevat_werkplek is aangevinkt, moet verhuurbaar ook aangevinkt worden (constraint ALG_C_PRS_WERKPLEK_VERHUURBAAR)
|
||||
if ($("#bevatwerkplek").is(":checked"))
|
||||
{
|
||||
$("#verhuurbaar").prop("checked", "checked");
|
||||
$("#verhuurbaar").prop("disabled", true);
|
||||
}
|
||||
else
|
||||
{
|
||||
$("#verhuurbaar").prop("disabled", false);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function onChangeUitvoertijd()
|
||||
{
|
||||
if (isNaN(parseFloat($("#uitvoertijd").val())))
|
||||
$("#dayshours_urg").prop("disabled", true);
|
||||
else
|
||||
$("#dayshours_urg").prop("disabled", false);
|
||||
}
|
||||
|
||||
jQuery(document).ready(function()
|
||||
{
|
||||
$('textarea').resize(function () { FcltMgr.resized(window) } );
|
||||
$('textarea').autogrow();
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body id="<%=((mode == "show")? "showbody" : "editbody")%>">
|
||||
<%
|
||||
var buttons = [];
|
||||
|
||||
if (!srtruimte_deleted)
|
||||
{
|
||||
if (mode == "show")
|
||||
{
|
||||
buttons.push( {title: L("lcl_change"), action:"alg_edit()", icon: "wijzigen.png" } );
|
||||
buttons.push( {title: L("lcl_delete"), action:"alg_delete()", icon: "delete.png" } );
|
||||
}
|
||||
else
|
||||
{
|
||||
buttons.push( {title: L("lcl_submit"), action:"alg_submit()", icon: "opslaan.png" } );
|
||||
buttons.push( {title: L("lcl_cancel"), action:"alg_cancel()", icon: "undo.png" } );
|
||||
}
|
||||
}
|
||||
IFRAMER_HEADER(L("lcl_alg_srtruimte_details"), buttons);
|
||||
|
||||
if (mode == "show")
|
||||
{
|
||||
myFIELD = function (a, b, c, d, e) { ROFIELDTR(b, c, d, e) };
|
||||
myTEXTAREA = function (a, b, c, d, e) { ROTEXTAREATR(b, c, d, e) };
|
||||
myCHECKBOX = function (a, b, c, d, e) { ROCHECKBOXTR(b, c, d, e) };
|
||||
}
|
||||
else
|
||||
{
|
||||
myFIELD = RWFIELDTR;
|
||||
myTEXTAREA = RWTEXTAREATR;
|
||||
myCHECKBOX = RWCHECKBOXTR;
|
||||
}
|
||||
|
||||
if (srtruimte_deleted)
|
||||
{
|
||||
%> <div class="alg_deleted"><%=L("lcl_record_is_deleted")%></div><%
|
||||
}
|
||||
|
||||
%>
|
||||
<div id="show">
|
||||
<form name="u2"
|
||||
action="alg_srtruimte.asp?mode=save&alg_srtruimte_key=<%=srtruimte_key%>"
|
||||
method="post"
|
||||
target="hidFrameSubmit"
|
||||
onSubmit="alg_submit()">
|
||||
<%
|
||||
BLOCK_START("algInfo", safe.html(L("lcl_general_properties")));
|
||||
|
||||
ROFIELDTR( "fld", L("lcl_key"), srtruimte_key);
|
||||
myFIELD("omschrijving", "fld", L("lcl_descr"), srtr_info.alg_srtruimte_omschrijving);
|
||||
myFIELD("prijs", "fld", L("lcl_alg_alg_tarief")+" (m2)", safe.editablefloat(srtr_info.alg_srtruimte_prijs), {datatype: "float", suppressEmpty: true} );
|
||||
myFIELD("prijs2", "fld", L("lcl_alg_alg_tariefA")+" (m2)", safe.editablefloat(srtr_info.alg_srtruimte_prijs2), {datatype: "float", suppressEmpty: true} );
|
||||
myFIELD("prijs3", "fld", L("lcl_alg_alg_tariefB")+" (m2)", safe.editablefloat(srtr_info.alg_srtruimte_prijs3), {datatype: "float", suppressEmpty: true} );
|
||||
myFIELD("prijs4", "fld", L("lcl_alg_alg_tariefC")+" (m2)", safe.editablefloat(srtr_info.alg_srtruimte_prijs4), {datatype: "float", suppressEmpty: true} );
|
||||
myFIELD("prijs5", "fld", L("lcl_alg_alg_tariefD")+" (m2)", safe.editablefloat(srtr_info.alg_srtruimte_prijs5), {datatype: "float", suppressEmpty: true} );
|
||||
myFIELD("code", "fld", L("lcl_alg_srtruimte_code"), srtr_info.alg_srtruimte_code);
|
||||
myCHECKBOX("bevatwerkplek", "fldcheck", L("lcl_prs_has_workplace"), srtr_info.prs_bevat_werkplek, {html: "onChange='onChangeBevatWerkplek();'"});
|
||||
myCHECKBOX("verhuurbaar", "fldcheck", L("lcl_prs_rentable"), srtr_info.prs_verhuurbaar);
|
||||
|
||||
sql = "SELECT 'U', " + safe.quoted_sql(L("lcl_mld_hours")) + " FROM DUAL"
|
||||
+ " UNION "
|
||||
+ "SELECT 'D', " + safe.quoted_sql(L("lcl_mld_days")) + " FROM DUAL"
|
||||
+ " ORDER BY 2";
|
||||
var selectparams = { fieldName: "dayshours_urg",
|
||||
sql: sql,
|
||||
params: { id: "dayshours_urg",
|
||||
initKey: srtr_info.eenh_uitvoertijd,
|
||||
readonly: (mode == "show"),
|
||||
disable: !srtr_info.tijd_uitvoertijd
|
||||
}
|
||||
}
|
||||
myFIELD("uitvoertijd", "fldalg_uitvtijd", L("lcl_mld_stduitvoertijd"), srtr_info.tijd_uitvoertijd? Math.round(srtr_info.tijd_uitvoertijd * 100) / 100 : ""
|
||||
, {maxlength: 4, datatype: "float", html: "onChange='onChangeUitvoertijd();'", suppressEmpty: true, selector: selectparams});
|
||||
|
||||
BLOCK_END();
|
||||
|
||||
IFACE.FORM_END();
|
||||
%>
|
||||
</form>
|
||||
</div>
|
||||
<iframe src="../Shared/empty.html"
|
||||
name="hidFrameSubmit"
|
||||
FcltClose="alg_close"
|
||||
style="display:none"></iframe>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,83 +0,0 @@
|
||||
<%@ LANGUAGE = JavaScript %>
|
||||
<% /*
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File: alg_srtruimte_search.asp
|
||||
Description: Zoekscherm ruimtesoort
|
||||
Parameters:
|
||||
Context:
|
||||
Note:
|
||||
|
||||
*/ %>
|
||||
|
||||
<!-- #include file="../Shared/common.inc" -->
|
||||
<!-- #include file="../Shared/iface.inc" -->
|
||||
|
||||
<%
|
||||
FCLTHeader.Requires({ plugins:["jQuery"]});
|
||||
|
||||
var autosearch = getQParamInt("autosearch", 0) == 1;
|
||||
|
||||
var authparams = user.checkAutorisation("WEB_ALGMSU");
|
||||
%>
|
||||
|
||||
<html>
|
||||
<head>
|
||||
<%
|
||||
FCLTHeader.Generate();
|
||||
%>
|
||||
|
||||
<script type="text/javascript">
|
||||
function doSubmit()
|
||||
{
|
||||
document.forms.u2.submit();
|
||||
}
|
||||
|
||||
$(document).ready(function()
|
||||
{
|
||||
<% if (autosearch) { %> document.forms.u2.submit();<%}%>
|
||||
});
|
||||
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body id="searchbody">
|
||||
<div id="search">
|
||||
<% BLOCK_START("searchtable", L("lcl_filterblok"));%>
|
||||
<form name="u2" target="workFrame" action="alg_srtruimte_search_list.asp" method="get">
|
||||
<tr>
|
||||
<td class="searchkolom1">
|
||||
<table><!-- x rijen, 2 kolommen: label + veld -->
|
||||
<tr class="primsearch">
|
||||
<td class="label"><label for="searchtext"><%=L("lcl_descr")%>:</label></td>
|
||||
<td><input type="text" class="fldsrch wildcard" name="searchtext" id="searchtext"></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td><!-- end column 1 -->
|
||||
|
||||
<td class="searchkolom2">
|
||||
<table><!-- x rijen, 2 kolommen: label + veld -->
|
||||
<%
|
||||
%>
|
||||
</table>
|
||||
</td><!-- end column 2 -->
|
||||
</tr>
|
||||
<% BLOCK_END();
|
||||
|
||||
var buttons = [ {title: L("lcl_search"), action: "doSubmit()", id: "bSearch" } ];
|
||||
CreateButtons(buttons, { entersubmit: true});
|
||||
%>
|
||||
</form>
|
||||
</div> <!-- search -->
|
||||
|
||||
<div id="result">
|
||||
<iframe width="100%" height="100%"
|
||||
src="../Shared/empty.asp"
|
||||
name="workFrame" id="workFrame"
|
||||
onload="FcltMgr.iframeLoaded(this)"
|
||||
frameborder="0" scrolling="no">
|
||||
</iframe>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,114 +0,0 @@
|
||||
<%@language = "javascript" %>
|
||||
<% /*
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File: alg_srtruimte_search_list.asp
|
||||
Description: Vangt de parameters van alg_srtruimte_search op en verwerkt die tot een lijst
|
||||
Parameters:
|
||||
Context: Vanuit alg_srtruimte_search.asp
|
||||
Note:
|
||||
*/ %>
|
||||
|
||||
<!-- #include file="../Shared/common.inc" -->
|
||||
<!-- #include file="../Shared/resultset_table_v2.inc" -->
|
||||
|
||||
<%
|
||||
var searchtext = getQParam("searchtext", null);
|
||||
//var fkdmodule = getQParamSafe("fkdmodule", -1);
|
||||
|
||||
var outputmode = getQParamInt("outputmode", 0); // 0 = screen, 1 = print, 2 = excel etc
|
||||
var showall = getQParamInt("showall", 0) == 1;
|
||||
|
||||
var authparams = user.checkAutorisation("WEB_ALGMSU");
|
||||
|
||||
%>
|
||||
<html>
|
||||
<head>
|
||||
<%
|
||||
FCLTHeader.Generate({outputmode: outputmode});
|
||||
%>
|
||||
|
||||
<script>
|
||||
function fkd_edit(row)
|
||||
{
|
||||
var srtruimte_key = row.getAttribute("ROWKEY");
|
||||
var url = "appl/alg/alg_srtruimte.asp?alg_srtruimte_key="+srtruimte_key;
|
||||
FcltMgr.openDetail(url, "<%=L("lcl_alg_srtruimte_details")%>", {callback: FcltMgr.reload } );
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<%
|
||||
|
||||
var sql = "SELECT sr.alg_srtruimte_key"
|
||||
+ " , sr.alg_srtruimte_omschrijving"
|
||||
+ " , sr.alg_srtruimte_prijs"
|
||||
+ " , sr.alg_srtruimte_prijs2"
|
||||
+ " , sr.alg_srtruimte_prijs3"
|
||||
+ " , sr.alg_srtruimte_prijs4"
|
||||
+ " , sr.alg_srtruimte_prijs5"
|
||||
+ " , sr.alg_srtruimte_code"
|
||||
+ " , CASE WHEN sr.prs_bevat_werkplek = 1"
|
||||
+ " THEN " + safe.quoted_sql(L("lcl_yes"))
|
||||
+ " ELSE " + safe.quoted_sql(L("lcl_no"))
|
||||
+ " END bevat_werkplek"
|
||||
+ " , CASE WHEN sr.prs_verhuurbaar = 1"
|
||||
+ " THEN " + safe.quoted_sql(L("lcl_yes"))
|
||||
+ " ELSE " + safe.quoted_sql(L("lcl_no"))
|
||||
+ " END verhuurbaar"
|
||||
+ " , sr.alg_srtruimte_t_uitvoertijd.tijdsduur tijdsduur"
|
||||
+ " , sr.alg_srtruimte_t_uitvoertijd.eenheid eenheid"
|
||||
+ " FROM alg_srtruimte sr"
|
||||
+ " WHERE sr.alg_srtruimte_verwijder IS NULL"
|
||||
+ (searchtext
|
||||
? " AND sr.alg_srtruimte_upper LIKE " + safe.quoted_sql_wild("%" + searchtext + "%")
|
||||
: ""
|
||||
)
|
||||
+ " ORDER BY sr.alg_srtruimte_omschrijving";
|
||||
|
||||
function fnUitvoertijdKolom(oRs)
|
||||
{
|
||||
var tmp = "";
|
||||
if (oRs("tijdsduur").Value)
|
||||
tmp = oRs("tijdsduur").Value + " " + (oRs("eenheid").Value == "U" ? L("lcl_mld_hours") : L("lcl_mld_days"))
|
||||
|
||||
return tmp;
|
||||
}
|
||||
|
||||
buttons = {};
|
||||
//if (canAdd)
|
||||
{
|
||||
var addurl = "appl/alg/alg_srtruimte.asp?mode=edit";
|
||||
buttons = [{ icon: "plus.png", title: L("lcl_add"), action: "FcltMgr.openDetail('" + addurl + "', '" + L("lcl_add") + "', {callback: FcltMgr.reload })" }]
|
||||
}
|
||||
|
||||
var rst = new ResultsetTable({ sql: sql,
|
||||
keyColumn: "alg_srtruimte_key",
|
||||
ID: "algsrtruimtetable",
|
||||
showAll: showall,
|
||||
outputmode: outputmode,
|
||||
title: L("lcl_menu_alg_ruimtefuncties"),
|
||||
buttons: buttons
|
||||
});
|
||||
|
||||
rst.addColumn(new Column({caption: "Key", content: "alg_srtruimte_key"}));
|
||||
rst.addColumn(new Column({caption: L("lcl_descr"), content: "alg_srtruimte_omschrijving"}));
|
||||
rst.addColumn(new Column({caption: L("lcl_alg_alg_tarief"), content: "alg_srtruimte_prijs", datatype: "currency"}));
|
||||
rst.addColumn(new Column({caption: L("lcl_alg_alg_tariefA"), content: "alg_srtruimte_prijs2", datatype: "currency"}));
|
||||
rst.addColumn(new Column({caption: L("lcl_alg_alg_tariefB"), content: "alg_srtruimte_prijs3", datatype: "currency"}));
|
||||
rst.addColumn(new Column({caption: L("lcl_alg_alg_tariefC"), content: "alg_srtruimte_prijs4", datatype: "currency"}));
|
||||
rst.addColumn(new Column({caption: L("lcl_alg_alg_tariefD"), content: "alg_srtruimte_prijs5", datatype: "currency"}));
|
||||
rst.addColumn(new Column({caption: L("lcl_alg_srtruimte_code"), content: "alg_srtruimte_code"}));
|
||||
rst.addColumn(new Column({caption: L("lcl_prs_has_workplace"), content: "bevat_werkplek"}));
|
||||
rst.addColumn(new Column({caption: L("lcl_prs_rentable"), content: "verhuurbaar"}));
|
||||
rst.addColumn(new Column({caption: L("lcl_mld_stduitvoertijd"), content: fnUitvoertijdKolom}));
|
||||
|
||||
rst.addAction({ action: "fkd_edit", caption: L("lcl_edit"), isDefault: true});
|
||||
|
||||
var cnt = rst.processResultset();
|
||||
|
||||
%>
|
||||
</body>
|
||||
</html>
|
||||
@@ -71,7 +71,7 @@ else
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<body id="editbody">
|
||||
<% if (ter_key == -1)
|
||||
var page = "alg_edit_terreinsector.asp"; // Maak een nieuw
|
||||
else
|
||||
|
||||
@@ -20,9 +20,9 @@ FCLTHeader.Requires({ plugins:["jQuery"] });
|
||||
|
||||
function fnrowData(oRs)
|
||||
{
|
||||
var parent_key = oRs("alg_locatie_key").Value;
|
||||
var key = oRs("alg_terreinsector_key").Value;
|
||||
var oms = oRs("alg_terreinsector_omschrijving").Value;
|
||||
var parent_key = oRs("alg_locatie_key").value;
|
||||
var key = oRs("alg_terreinsector_key").value;
|
||||
var oms = oRs("alg_terreinsector_omschrijving").value;
|
||||
|
||||
var data = {parent_key: parent_key, key: key, oms: oms};
|
||||
|
||||
@@ -70,8 +70,7 @@ function terrein_list(pautfunction, params)
|
||||
// De functie checkAutorisation(autfunction) geeft een Response.End indien er geen autorisatie voor autfunction wordt gevonden
|
||||
var addButton = [];
|
||||
var authparams = alg.checkAutorisation();
|
||||
// Met ALG* bepaal je wat je ziet (Read), met RUI* en TER* bepaal je wat je kunt wijzigen (Write).
|
||||
var canAdd = (authparams.tmALGwritelevel < 9); //wat moet het zijn voor terriensector
|
||||
var canAdd = (authparams.mALGwritelevel < 9); //wat moet het zijn voor terriensector
|
||||
|
||||
// Voor resulttable de globalen zetten; zou ng anders moeten.
|
||||
var outputmode = params.outputmode; // print to 0 = screen, 1 = printer, 2 = excel, etc.
|
||||
@@ -86,7 +85,7 @@ function terrein_list(pautfunction, params)
|
||||
function fnrowActionEnabler(oRs) // klopt dit voor terreinsector?
|
||||
{
|
||||
var eDelete = false;
|
||||
if (alg.canWriteLocatie(oRs("alg_locatie_key").Value, authparams.tmALGwritelevel))
|
||||
if (alg.canWriteLocatie(oRs("alg_locatie_key").value, authparams.mALGwritelevel))
|
||||
eDelete = true;
|
||||
return ({eDelete: eDelete})
|
||||
}
|
||||
|
||||
@@ -75,7 +75,7 @@ else
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<body id="editbody">
|
||||
<% if (flr_key == -1)
|
||||
var page="alg_edit_verdieping.asp"; // Maak een nieuw
|
||||
else
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
Note:
|
||||
*/ %>
|
||||
|
||||
<!-- #include file="../Shared/disCxprs3d.inc" -->
|
||||
<!-- #include file="../Shared/json2.js" -->
|
||||
<!-- #include file="../Shared/resultset_table_v2.inc" -->
|
||||
<!-- #include file="../Shared/getkenmerksql.inc" -->
|
||||
|
||||
@@ -64,7 +64,7 @@ if (wp_key > 0)
|
||||
</script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<body id="editbody">
|
||||
<% if (wp_key == -1)
|
||||
var page="alg_edit_wp.asp"; // Maak een nieuw
|
||||
else
|
||||
|
||||
@@ -26,8 +26,7 @@ function API_func(APIname, APIKEY)
|
||||
|
||||
var sql2 = "SELECT prs_perslid_key, prs_perslid_naam"
|
||||
+ " FROM prs_perslid"
|
||||
+ " WHERE prs_perslid_apikey = " + safe.quoted_sql(APIKEY)
|
||||
+ " AND prs_perslid_verwijder IS NULL"; // Eigenlijk zou de trigger APIKEY moeten wissen bij verwijderen
|
||||
+ " WHERE prs_perslid_apikey = " + safe.quoted_sql(APIKEY);
|
||||
var oRs2 = Oracle.Execute(sql2);
|
||||
if (oRs2.Eof)
|
||||
{
|
||||
@@ -46,27 +45,11 @@ function API_func(APIname, APIKEY)
|
||||
loglevel: oRs("fac_api_loglevel").Value,
|
||||
usrrap_key: oRs("fac_usrrap_key").Value,
|
||||
stylesheet: oRs("fac_api_stylesheet").Value,
|
||||
import_app_key: oRs("fac_import_app_key").Value
|
||||
import_app_key: oRs("fac_import_app_key").Value,
|
||||
options: eval("("+oRs("fac_api_options_json").Value+")"),
|
||||
viewmapping: eval("("+oRs("fac_api_viewmapping_json").Value+")")
|
||||
};
|
||||
|
||||
try
|
||||
{
|
||||
this.apidata.options = eval("("+oRs("fac_api_options_json").Value+")");
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
__DoLogj(e);
|
||||
this.error("Invalid api 'options': " + e.description);
|
||||
}
|
||||
try
|
||||
{
|
||||
this.apidata.viewmapping = eval("("+oRs("fac_api_viewmapping_json").Value+")");
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
this.error("Invalid api 'viewmapping': " + e.description);
|
||||
}
|
||||
|
||||
oRs2.Close();
|
||||
oRs.Close();
|
||||
// Wij doen niets met eventuele prs_perslid_key; dat doet loginTry.asp maar voor ons
|
||||
|
||||
@@ -55,7 +55,7 @@ try
|
||||
|
||||
var asJSON = getQParam("json","0")!="0";
|
||||
|
||||
var xmlReq = Server.CreateObject("MSXML2.DOMDocument.6.0");
|
||||
var xmlReq = Server.CreateObject("MSXML2.DOMDocument.4.0");
|
||||
xmlReq.load(Request);
|
||||
|
||||
if (API.apidata.loglevel) __Log2File(xmlReq.xml, APIname + "_IN");
|
||||
@@ -318,7 +318,7 @@ try
|
||||
// op van het resultaat,dus maar zonder de metadata, dus alleen de facilitor/[resultnode]/
|
||||
if (stylesheet == null)
|
||||
{
|
||||
var xmldoc = new ActiveXObject("Msxml2.DOMDocument.6.0");
|
||||
var xmldoc = new ActiveXObject("Msxml2.DOMDocument.4.0");
|
||||
xmldoc.async = false;
|
||||
xmldoc.loadXML(xml_content);
|
||||
if (xmldoc.parseError.errorCode != 0)
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
var API = new API_func(APIname, APIKEY);
|
||||
Session("logging") = API.apidata.loglevel||0;
|
||||
|
||||
var xmlReq = Server.CreateObject("MSXML2.DOMDocument.6.0");
|
||||
var xmlReq = Server.CreateObject("MSXML2.DOMDocument.4.0");
|
||||
xmlReq.load(Request);
|
||||
|
||||
XML2TEMP(xmlReq.xml, "IN");
|
||||
@@ -75,7 +75,7 @@
|
||||
|
||||
var oRsW = Oracle.Execute(whichSQL);
|
||||
var xml_nodes_arr = [];
|
||||
var xml_nodes_dom = new ActiveXObject("MSXML2.DOMDocument.6.0");
|
||||
var xml_nodes_dom = new ActiveXObject("MSXML2.DOMDocument.4.0");
|
||||
|
||||
var FCLTElement = xml_nodes_dom.createElement("facilitor");
|
||||
var headerDone = false;
|
||||
@@ -104,7 +104,7 @@
|
||||
__Log("XML '" + oRsW("xmlnode").Value + "' voor key " + oRsW("fac_tracking_refkey").Value + " is " + xml_content.length + " karakters");
|
||||
|
||||
xml_nodes_arr.push(xml_content); // E<>n node
|
||||
var xmldoc = new ActiveXObject("Msxml2.DOMDocument.6.0");
|
||||
var xmldoc = new ActiveXObject("Msxml2.DOMDocument.4.0");
|
||||
xmldoc.async = false;
|
||||
xmldoc.loadXML(xml_content);
|
||||
xmldoc.setProperty("SelectionLanguage", "XPath");
|
||||
|
||||
@@ -35,15 +35,15 @@
|
||||
var sql = "-"; // De uiteindelijke 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");
|
||||
var xmlReq = Server.CreateObject("MSXML2.DOMDocument.4.0");
|
||||
if (API.apidata.stylesheet)
|
||||
{
|
||||
var iXsl = Server.CreateObject("MSXML2.DOMDocument.6.0");
|
||||
var iXsl = Server.CreateObject("MSXML2.DOMDocument.4.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");
|
||||
var inputXML = Server.CreateObject("MSXML2.DOMDocument.4.0");
|
||||
inputXML.load(Request);
|
||||
inputXML.transformNodeToObject(iXsl, xmlReq);
|
||||
}
|
||||
@@ -52,7 +52,7 @@
|
||||
|
||||
if (API.apidata.loglevel) __Log2File(xmlReq.xml, APIname + "_TUSSEN");
|
||||
|
||||
var xmlResp = new ActiveXObject("MSXML2.DOMDocument.6.0");
|
||||
var xmlResp = new ActiveXObject("MSXML2.DOMDocument.4.0");
|
||||
xmlResp.appendChild(xmlResp.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"utf-8\""))
|
||||
|
||||
// The response
|
||||
|
||||
@@ -33,22 +33,22 @@
|
||||
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");
|
||||
var xmlReq = Server.CreateObject("MSXML2.DOMDocument.4.0");
|
||||
if (API.apidata.stylesheet)
|
||||
{
|
||||
var iXsl = Server.CreateObject("MSXML2.DOMDocument.6.0");
|
||||
var iXsl = Server.CreateObject("MSXML2.DOMDocument.4.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");
|
||||
var inputXML = Server.CreateObject("MSXML2.DOMDocument.4.0");
|
||||
inputXML.load(Request);
|
||||
inputXML.transformNodeToObject(iXsl, xmlReq);
|
||||
}
|
||||
else
|
||||
xmlReq.load(Request);
|
||||
|
||||
var xmlResp = new ActiveXObject("MSXML2.DOMDocument.6.0");
|
||||
var xmlResp = new ActiveXObject("MSXML2.DOMDocument.4.0");
|
||||
xmlResp.appendChild(xmlResp.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"utf-8\""))
|
||||
|
||||
// The response.
|
||||
@@ -84,20 +84,20 @@
|
||||
{
|
||||
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";
|
||||
@@ -139,7 +139,7 @@
|
||||
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") {
|
||||
@@ -209,13 +209,13 @@
|
||||
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.
|
||||
}
|
||||
@@ -245,7 +245,7 @@
|
||||
datum: nowtxt, // TODO: Beter ook xml-datum???
|
||||
besid: besid
|
||||
}
|
||||
|
||||
|
||||
var FCLTBody = xmlResp.createElement("bestelling"); // type=response
|
||||
FCLTBody.setAttribute('key', besid);
|
||||
FCLTBody.setAttribute('type', 'response');
|
||||
@@ -265,7 +265,7 @@
|
||||
//__DoLog("Ik gebruik stylesheet '"+API.apidata.stylesheet+"'");
|
||||
if (API.apidata.stylesheet)
|
||||
{
|
||||
var outputXML = Server.CreateObject("MSXML2.DOMDocument.6.0");
|
||||
var outputXML = Server.CreateObject("MSXML2.DOMDocument.4.0");
|
||||
xmlResp.transformNodeToObject(iXsl, outputXML);
|
||||
Response.ContentType = "text/xml";
|
||||
Response.Write(outputXML.xml)
|
||||
|
||||
@@ -75,11 +75,11 @@ var APIKEY = getQParam("APIKEY");
|
||||
var API = new API_func(APIname, APIKEY);
|
||||
|
||||
// XML Omzetten naar equivalente JSON
|
||||
// var xmlReq = Server.CreateObject("MSXML2.DOMDocument.6.0");
|
||||
// var xmlReq = Server.CreateObject("MSXML2.DOMDocument.4.0");
|
||||
// xmlReq.load(Request);
|
||||
|
||||
// The response.
|
||||
var xmlResp = new ActiveXObject("MSXML2.DOMDocument.6.0");
|
||||
var xmlResp = new ActiveXObject("MSXML2.DOMDocument.4.0");
|
||||
xmlResp.appendChild(xmlResp.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"utf-8\""))
|
||||
|
||||
var FCLTElement = xmlResp.createElement("facilitor");
|
||||
|
||||
@@ -32,10 +32,10 @@
|
||||
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");
|
||||
var xmlReq = Server.CreateObject("MSXML2.DOMDocument.4.0");
|
||||
xmlReq.load(Request);
|
||||
|
||||
var xmlResp = new ActiveXObject("MSXML2.DOMDocument.6.0");
|
||||
var xmlResp = new ActiveXObject("MSXML2.DOMDocument.4.0");
|
||||
xmlResp.appendChild(xmlResp.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"utf-8\""))
|
||||
|
||||
// The response.
|
||||
|
||||
@@ -27,18 +27,11 @@
|
||||
var API = new API_func(APIname, APIKEY);
|
||||
|
||||
var import_app_key = API.apidata.options['import_app_key'];
|
||||
var bytes = Request.TotalBytes;
|
||||
if (bytes == 0)
|
||||
{
|
||||
__DoLog("api_gen_import empty body posted", "#ffff00");
|
||||
Response.Write("Error: no data posted for API import");
|
||||
Response.End; // Grof maar anders AiAi, dat is nog erger
|
||||
}
|
||||
|
||||
fileStream = Server.CreateObject("ADODB.Stream");
|
||||
fileStream.Type = 1; // adTypeBinary eerst nog
|
||||
fileStream.Open();
|
||||
fileStream.Write(Request.BinaryRead(bytes));
|
||||
fileStream.Write(Request.BinaryRead(Request.TotalBytes));
|
||||
|
||||
if (API.apidata.loglevel & 1)
|
||||
fileStream.SaveToFile(Server.MapPath(rooturl + "/temp/") + "/" + customerId + "_" + APIname + ".tmp", 2); // 2=create
|
||||
@@ -55,7 +48,7 @@
|
||||
else
|
||||
var warn = res.warning;
|
||||
|
||||
var xmlResp = new ActiveXObject("MSXML2.DOMDocument.6.0");
|
||||
var xmlResp = new ActiveXObject("MSXML2.DOMDocument.4.0");
|
||||
xmlResp.appendChild(xmlResp.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"utf-8\""));
|
||||
|
||||
// The response
|
||||
|
||||
@@ -1,191 +0,0 @@
|
||||
<%@ language = "JavaScript" %>
|
||||
<% /*
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File: api_hmail.asp
|
||||
Description: API voor opvangen van hMailserver e-mails
|
||||
|
||||
Parameters: Een xml
|
||||
Status:
|
||||
Context: 1-op-1 met \UTILS\mail_receive\EventHandlers.js
|
||||
Notes: Deze API krijgen we XML binnen, en geven JSON terug.
|
||||
Dat was het eenvoudigst
|
||||
*/
|
||||
JSON_Result = true;
|
||||
THIS_FILE = "appl/api/api_hmail.asp";
|
||||
%>
|
||||
<!-- #include file="../Shared/common.inc" -->
|
||||
<!-- #include file="../Shared/json2.js" -->
|
||||
<!-- #include file="../Shared/xml_converter.inc" -->
|
||||
<!-- #include file="../Shared/flexfiles.inc" -->
|
||||
<!-- #include file="../Shared/upload.inc" -->
|
||||
<!-- #include file="../api/api.inc" -->
|
||||
<%
|
||||
var APIname = getQParam("API");
|
||||
var APIKEY = getQParam("APIKEY");
|
||||
var API = new API_func(APIname, APIKEY);
|
||||
|
||||
function abortRejectMail(tekst)
|
||||
{
|
||||
var result = { success: false,
|
||||
message: tekst
|
||||
}
|
||||
Response.Write(JSON.stringify(result));
|
||||
Response.End;
|
||||
}
|
||||
function stripHtml(html)
|
||||
{
|
||||
// verwijder html-tags
|
||||
html = (html||"").replace(/(<([^>]+)>)/ig,"");
|
||||
//verwijder leading spaces and tabs
|
||||
html = html.replace(/^[ \t]+/gm,"");
|
||||
// verwijder lege regels
|
||||
html = html.replace(/[(\n\r)]+/g,"\n\r");
|
||||
// zet een regel die begint met : maar achter de vorige
|
||||
html = html.replace(/(\n\r:)/g,":");
|
||||
return html;
|
||||
}
|
||||
|
||||
// puur intern gebruik dus geen stylesheet conversie nodig
|
||||
var xmlReq = Server.CreateObject("MSXML2.DOMDocument.6.0");
|
||||
xmlReq.load(Request);
|
||||
if (xmlReq.parseError.errorCode != 0)
|
||||
{
|
||||
abortRejectMail("Error " + xmlReq.parseError.reason);
|
||||
}
|
||||
|
||||
if (API.apidata.loglevel)
|
||||
__Log2File(xmlReq.xml, APIname + "_IN");
|
||||
|
||||
var Subject = XMLval(xmlReq, "subject");
|
||||
var fromAddr = XMLval(xmlReq, "from");
|
||||
var toAddr = XMLval(xmlReq, "to");
|
||||
var htmlBody = XMLval(xmlReq, "htmlbody");
|
||||
var Body = XMLval(xmlReq, "body");
|
||||
|
||||
__Log("Subject: " + Subject);
|
||||
__Log("From: " + fromAddr);
|
||||
__Log("To: " + toAddr);
|
||||
__Log("htmlBody: " + htmlBody);
|
||||
__Log("body: " + Body);
|
||||
|
||||
var user = toAddr.split("@")[0];
|
||||
|
||||
sql = "SELECT fac_email_setting_action,"
|
||||
+ " fac_email_setting_expire,"
|
||||
+ " fac_email_setting_from,"
|
||||
+ " fac_email_setting_attachpath"
|
||||
+ " FROM fac_email_setting"
|
||||
+ " WHERE upper(fac_email_setting_user) = upper("+safe.quoted_sql(user)+")";
|
||||
|
||||
var oRs = Oracle.Execute(sql);
|
||||
if (oRs.Eof)
|
||||
{
|
||||
__Log("E-mail user niet ontvankelijk: " + user);
|
||||
abortRejectMail("Database-fout");
|
||||
}
|
||||
__Log("E-mail user ontvankelijk: " + user);
|
||||
if (oRs("fac_email_setting_expire").Value != null)
|
||||
{
|
||||
var expire = new Date(oRs("fac_email_setting_expire").Value);
|
||||
if (expire.getTime() < (new Date).getTime())
|
||||
{
|
||||
__Log("Te laat: " + expire);
|
||||
abortRejectMail("Te laat");
|
||||
}
|
||||
}
|
||||
var shouldFrom = oRs("fac_email_setting_from").Value;
|
||||
if (shouldFrom)
|
||||
{
|
||||
if (String(shouldFrom).toUpperCase() != String(fromAddr).toUpperCase())
|
||||
{
|
||||
__Log("Foute afzender. Verwacht: " + shouldFrom + ", kreeg: " + fromAddr);
|
||||
abortRejectMail("Foute afzender");
|
||||
}
|
||||
}
|
||||
var action = oRs("fac_email_setting_action").Value; // Package aanroep
|
||||
var path = oRs("fac_email_setting_attachpath").Value;
|
||||
oRs.Close();
|
||||
|
||||
var result = { success: true, path: path, attachments: [] };
|
||||
|
||||
// verwijder entries in de FAC_RESULT table zodat de action nieuwe resultaten kan schrijven
|
||||
var sql = "DELETE fac_result WHERE fac_result_sessionid = 'hMailServer'";
|
||||
Oracle.Execute(sql);
|
||||
|
||||
if (action) // Bijv "fac.processemail" of "uwva.closeorder-sample"
|
||||
{
|
||||
if (!Body || Body == "") // Voorkeur voor plaintekst
|
||||
{
|
||||
var v_body = "Mail body is leeg. HTML inhoud:\n" + stripHtml(htmlBody);
|
||||
}
|
||||
else
|
||||
{
|
||||
var v_body = Body;
|
||||
}
|
||||
sql = "BEGIN " + action + " (" + safe.quoted_sql(fromAddr) + ","
|
||||
+ safe.quoted_sql(toAddr) + ","
|
||||
+ safe.quoted_sql(Subject) + ","
|
||||
+ safe.quoted_sql(v_body) + ","
|
||||
+ "'');" // pextra
|
||||
+ "END;";
|
||||
Oracle.Execute(sql);
|
||||
// TODO: Is er ook een resultaat om terug te melden? Melding-key bijvoorbeeld?
|
||||
|
||||
// TODO: Dit is niet multi-mail-safe
|
||||
sql = "SELECT fac_result_waarde"
|
||||
+ " FROM fac_result"
|
||||
+ " WHERE fac_result_naam = 'errormsg'"
|
||||
+ " AND fac_result_sessionid = 'hMailServer'";
|
||||
var oRs = Oracle.Execute(sql);
|
||||
if (!oRs.Eof)
|
||||
{
|
||||
__Log(oRs("fac_result_waarde").Value);
|
||||
abortRejectMail(oRs("fac_result_waarde").Value);
|
||||
}
|
||||
oRs.Close();
|
||||
|
||||
sql = "SELECT fac_result_waarde"
|
||||
+ " FROM fac_result"
|
||||
+ " WHERE fac_result_naam = 'kenmerkpath'"
|
||||
+ " AND fac_result_sessionid = 'hMailServer'";
|
||||
var oRs = Oracle.Execute(sql);
|
||||
if (!oRs.Eof)
|
||||
{
|
||||
result.path = result.path + oRs("fac_result_waarde").Value;
|
||||
}
|
||||
oRs.Close();
|
||||
}
|
||||
|
||||
if (result.path)
|
||||
{
|
||||
var Attachments = xmlReq.getElementsByTagName("attachment");
|
||||
for (i=0; i < Attachments.length; i++)
|
||||
{
|
||||
var safefilename = safe.filename(XMLval(Attachments[i], "filename"));
|
||||
if (safefilename == 'tmpl_logo.gif')
|
||||
{ // Waarschijnlijk een FACILITOR bon gereply'd
|
||||
__Log("Bijlage " + safefilename + " genegeerd.");
|
||||
}
|
||||
else if (!new RegExp(S("flexallowedext"), "ig").test(safefilename))
|
||||
{
|
||||
// TODO: Misschien ook terugkoppelen aan zender?
|
||||
__DoLog("Onbekende extensie e-mail bijlage: " + safefilename + ". Bestand is niet opgeslagen.");
|
||||
}
|
||||
else
|
||||
{
|
||||
__Log(safefilename + ' bijlage (' + XMLval(Attachments[i], "size") + ' bytes) mag naar ' + result.path);
|
||||
CreateFullPath(result.path); // Hoeft hMailserver dat niet meer te doen. Eist wel dat hMail op 'onze' webserver draait
|
||||
result.attachments.push ({ sequence: i,
|
||||
safefilename: result.path + safefilename
|
||||
})
|
||||
}
|
||||
}
|
||||
// TODO: Is er ook een resultaat om terug te melden? 'Geslaagd' bijvoorbeeld?
|
||||
// Of: adm_tracking: fromAddr + ' stuurt per e-mail ' + oMessage.Attachments.Item(i).fileName
|
||||
}
|
||||
|
||||
Response.Write(JSON.stringify(result));
|
||||
Response.End;
|
||||
%>
|
||||
@@ -44,15 +44,15 @@
|
||||
|
||||
var tsql = "-"; // Voor tijdelijke statement(s)
|
||||
var sql = "-"; // De uiteindelijke insert/update-sql
|
||||
var xmlReq = Server.CreateObject("MSXML2.DOMDocument.6.0");
|
||||
var xmlReq = Server.CreateObject("MSXML2.DOMDocument.4.0");
|
||||
if (API.apidata.stylesheet)
|
||||
{
|
||||
var iXsl = Server.CreateObject("MSXML2.DOMDocument.6.0");
|
||||
var iXsl = Server.CreateObject("MSXML2.DOMDocument.4.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");
|
||||
var inputXML = Server.CreateObject("MSXML2.DOMDocument.4.0");
|
||||
inputXML.load(Request);
|
||||
inputXML.transformNodeToObject(iXsl, xmlReq);
|
||||
}
|
||||
@@ -61,7 +61,7 @@
|
||||
|
||||
if (API.apidata.loglevel) __Log2File(xmlReq.xml, APIname + "_TUSSEN");
|
||||
|
||||
var xmlResp = new ActiveXObject("MSXML2.DOMDocument.6.0");
|
||||
var xmlResp = new ActiveXObject("MSXML2.DOMDocument.4.0");
|
||||
xmlResp.appendChild(xmlResp.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"utf-8\""))
|
||||
|
||||
// The response.
|
||||
@@ -255,7 +255,6 @@
|
||||
|
||||
xmlResp.appendChild(FCLTElement);
|
||||
|
||||
if (API.apidata.loglevel) __Log2File(xmlResp.xml, APIname + "_TUSSEN_OUT");
|
||||
if (API.apidata.stylesheet)
|
||||
{
|
||||
// Niet super efficient dat we eerst naar tekstuele xml gaan maar ach...
|
||||
@@ -272,6 +271,5 @@
|
||||
var antwoord = JSON.stringify(xmlToJson(xmlResp), null, getQParam("pretty","0")=="1"?2:0);
|
||||
else
|
||||
var antwoord = xmlResp.xml;
|
||||
Response.Write(antwoord);
|
||||
}
|
||||
%>
|
||||
|
||||
@@ -24,405 +24,383 @@
|
||||
<!-- #include file="../api/api.inc" -->
|
||||
<!-- #include file="../mld/mld.inc" -->
|
||||
<%
|
||||
// We sturen het antwoord in UTF-8.
|
||||
Session.Codepage = 65001;
|
||||
Response.Charset = 'utf-8';
|
||||
// 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 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");
|
||||
if (API.apidata.stylesheet)
|
||||
{
|
||||
var iXsl = Server.CreateObject("MSXML2.DOMDocument.6.0");
|
||||
if( ! iXsl.load(Server.MapPath(API.apidata.stylesheet)) )
|
||||
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 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.4.0");
|
||||
if (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);
|
||||
|
||||
if (API.apidata.loglevel) __Log2File(xmlReq.xml, APIname + "_IN");
|
||||
|
||||
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
|
||||
|
||||
// Dit is de meldingenloop (mochten er ooit nog anderen gaan volgen).
|
||||
var meldingen = xmlReq.getElementsByTagName("melding");
|
||||
for (i = 0; i < meldingen.length; i++)
|
||||
{
|
||||
// Lees per node de (optionele) tags en waarden.
|
||||
var fields = []; // Bij te werken velden.
|
||||
var ext_id = meldingen[i].getAttribute("key");
|
||||
var meldaction = meldingen[i].getAttribute("type").toLowerCase();
|
||||
var melddatum = XMLval(meldingen[i], "datum");
|
||||
var einddatum = XMLval(meldingen[i], "einddatum");
|
||||
//var melderemail = XMLval(meldingen[i], "melder"); // Unsupported yet
|
||||
var stdmld_key = parseInt(XMLval(meldingen[i], "stdmelding"), 10); // Numeriek
|
||||
var stdmld_sla = -1; // Normale uitvoertijd (prio door melder nog unsupported)
|
||||
//var meldprio = XMLval(meldingen[i], "prioriteit"); // Unsupported yet
|
||||
//var meldobj_id = XMLval(meldingen[i], "object"); // Unsupported yet
|
||||
var meldloc = XMLval(meldingen[i], "locatiecode");
|
||||
var meldgeb = XMLval(meldingen[i], "gebouwcode");
|
||||
var meldver = XMLval(meldingen[i], "verdiepingcode");
|
||||
var meldrnr = XMLval(meldingen[i], "ruimtecode");
|
||||
var locatie_key = -1; // Bepaald op basis van meldloc
|
||||
var plaats_key = -1; // Bepaald op basis van meldgeb/meldver/meldrnr
|
||||
var meld_oms = XMLval(meldingen[i], "omschrijving");
|
||||
//var mldkenmerken = (meldingen[i].getElementsByTagName("kenmerk"))[0].childNodes[0].nodeValue; // Unsupported yet
|
||||
var mldkenmerken = meldingen[i].getElementsByTagName("kenmerk");
|
||||
var mld_key = -1; // Bepaald na insert
|
||||
|
||||
user.checkAutorisation("WEB_MLDUSE"); // Dit is nog ongeacht de melding
|
||||
|
||||
if (ext_id == null)
|
||||
{
|
||||
resultcode = 1;
|
||||
resulttekst = "Undefined external ID (key)";
|
||||
}
|
||||
else if (meldaction != 'insert')
|
||||
{
|
||||
resultcode = 2;
|
||||
resulttekst = "Undefined operation (type)";
|
||||
}
|
||||
else
|
||||
{
|
||||
tsql = "SELECT sm.mld_stdmelding_t_uitvoertijd.tijdsduur tijdsduur"
|
||||
+ " , sm.mld_stdmelding_t_uitvoertijd.eenheid eenheid"
|
||||
+ " FROM mld_stdmelding sm"
|
||||
+ " WHERE sm.mld_stdmelding_key = " + stdmld_key
|
||||
+ " AND sm.mld_stdmelding_verwijder IS NULL";
|
||||
var oRs = Oracle.Execute(tsql);
|
||||
if (oRs.eof)
|
||||
{
|
||||
resultcode = 3;
|
||||
resulttekst = "Undefined stdmelding";
|
||||
var iXsl = Server.CreateObject("MSXML2.DOMDocument.4.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.4.0");
|
||||
inputXML.load(Request);
|
||||
inputXML.transformNodeToObject(iXsl, xmlReq);
|
||||
}
|
||||
else
|
||||
{ // Hier heb ik een geldige mld_stdmelding_key.
|
||||
stdmld_sla_tijdsduur = oRs("tijdsduur").value;
|
||||
stdmld_sla_eenheid = oRs("eenheid").value;
|
||||
xmlReq.load(Request);
|
||||
|
||||
fields.push({ dbs: "mld_stdmelding_key", typ: "key", val: stdmld_key });
|
||||
fields.push({ dbs: "mld_melding_t_uitvoertijd.tijdsduur", typ: "number", val: stdmld_sla_tijdsduur, obj: "MLD_T_UITVOERTIJD" });
|
||||
fields.push({ dbs: "mld_melding_t_uitvoertijd.eenheid", typ: "varchar", val: stdmld_sla_eenheid, obj: "MLD_T_UITVOERTIJD" });
|
||||
if (melddatum != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
var meldaanmaakdate = XMLtoJsDate(melddatum);
|
||||
fields.push({ dbs: "mld_melding_datum", typ: "datetime", val: meldaanmaakdate });
|
||||
}
|
||||
catch (e)
|
||||
{ // Verkeerde datum-formaat, volgens spec. dan now gebruiken!
|
||||
__DoLog("Formaat ontvangen XML-datum incorrect: "+ melddatum, "#00FF00");
|
||||
meldaanmaakdate = now;
|
||||
fields.push({ dbs: "mld_melding_datum", typ: "datetime", val: meldaanmaakdate });
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
fields.push({ dbs: "mld_melding_datum", typ: "datetime", val: now });
|
||||
}
|
||||
// De einddatum is de meegegeven einddatum, maar als die niet wordt meegegeven is het
|
||||
// gewoon enddate_std en dat regelt de trigger wel, dus DAN MOET IK HEM NIET MEEGEVEN
|
||||
if (einddatum != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
var meldeinddate = XMLtoJsDate(einddatum);
|
||||
if (meldeinddate > meldaanmaakdate)
|
||||
{
|
||||
fields.push({ dbs: "mld_melding_einddatum", typ: "datetime", val: meldeinddate });
|
||||
}
|
||||
else
|
||||
{
|
||||
// Ontvangen XML-einddatum voor begindatum, dan later volgens SLA zetten!
|
||||
__DoLog("Ontvangen XML-einddatum voor begindatum: "+ einddatum, "#00FF00");
|
||||
}
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
// Verkeerde datum-formaat, dan later volgens SLA zetten!
|
||||
__DoLog("Formaat ontvangen XML-einddatum incorrect: "+ einddatum, "#00FF00");
|
||||
}
|
||||
}
|
||||
if (API.apidata.loglevel) __Log2File(xmlReq.xml, APIname + "_IN");
|
||||
|
||||
tsql = "SELECT alg_locatie_key "
|
||||
+ " FROM alg_v_aanweziglocatie"
|
||||
+ " WHERE alg_locatie_code="+ safe.quoted_sql(meldloc);
|
||||
var oRs = Oracle.Execute(tsql);
|
||||
if (!oRs.eof)
|
||||
{
|
||||
locatie_key = oRs("alg_locatie_key").value;
|
||||
fields.push({ dbs: "mld_alg_locatie_key", typ: "key", val: locatie_key });
|
||||
var xmlResp = new ActiveXObject("MSXML2.DOMDocument.4.0");
|
||||
xmlResp.appendChild(xmlResp.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"utf-8\""))
|
||||
|
||||
tsql = "SELECT alg_gebouw_key "
|
||||
+ " FROM alg_v_aanweziggebouw"
|
||||
+ " WHERE alg_locatie_key ="+ locatie_key
|
||||
+ " AND alg_gebouw_code="+ safe.quoted_sql(meldgeb);
|
||||
var oRs = Oracle.Execute(tsql);
|
||||
if (!oRs.eof)
|
||||
{
|
||||
plaats_key = oRs("alg_gebouw_key").value;
|
||||
// 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);
|
||||
|
||||
tsql = "SELECT alg_verdieping_key "
|
||||
+ " FROM alg_v_aanwezigverdieping"
|
||||
+ " WHERE alg_gebouw_key ="+ plaats_key
|
||||
+ " AND alg_verdieping_code="+ safe.quoted_sql(meldver);
|
||||
var oRs = Oracle.Execute(tsql);
|
||||
if (!oRs.eof)
|
||||
{
|
||||
plaats_key = oRs("alg_verdieping_key").value;
|
||||
// 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
|
||||
|
||||
tsql = "SELECT alg_ruimte_key "
|
||||
+ " FROM alg_v_aanwezigruimte"
|
||||
+ " WHERE alg_verdieping_key ="+ plaats_key
|
||||
+ " AND alg_ruimte_nr="+ safe.quoted_sql(meldrnr);
|
||||
// Dit is de meldingenloop (mochten er ooit nog anderen gaan volgen).
|
||||
var meldingen = xmlReq.getElementsByTagName("melding");
|
||||
for (i=0; i < meldingen.length; i++)
|
||||
{
|
||||
// Lees per node de (optionele) tags en waarden.
|
||||
var fields = []; // Bij te werken velden.
|
||||
var ext_id = meldingen[i].getAttribute("key");
|
||||
var meldaction = meldingen[i].getAttribute("type").toLowerCase();
|
||||
var melddatum = XMLval(meldingen[i], "datum");
|
||||
var einddatum = XMLval(meldingen[i], "einddatum");
|
||||
//var melderemail = XMLval(meldingen[i], "melder"); // Unsupported yet
|
||||
var stdmld_key = parseInt(XMLval(meldingen[i], "stdmelding"), 10); // Numeriek
|
||||
var stdmld_sla = -1; // Normale uitvoertijd (prio door melder nog unsupported)
|
||||
//var meldprio = XMLval(meldingen[i], "prioriteit"); // Unsupported yet
|
||||
//var meldobj_id = XMLval(meldingen[i], "object"); // Unsupported yet
|
||||
var meldloc = XMLval(meldingen[i], "locatiecode");
|
||||
var meldgeb = XMLval(meldingen[i], "gebouwcode");
|
||||
var meldver = XMLval(meldingen[i], "verdiepingcode");
|
||||
var meldrnr = XMLval(meldingen[i], "ruimtecode");
|
||||
var locatie_key = -1; // Bepaald op basis van meldloc
|
||||
var plaats_key = -1; // Bepaald op basis van meldgeb/meldver/meldrnr
|
||||
var meld_oms = XMLval(meldingen[i], "omschrijving");
|
||||
//var mldkenmerken = (meldingen[i].getElementsByTagName("kenmerk"))[0].childNodes[0].nodeValue; // Unsupported yet
|
||||
var mldkenmerken = meldingen[i].getElementsByTagName("kenmerk");
|
||||
var mld_key = -1; // Bepaald na insert
|
||||
|
||||
user.checkAutorisation("WEB_MLDUSE"); // Dit is nog ongeacht de melding
|
||||
|
||||
if (ext_id == null) {
|
||||
resultcode = 1;
|
||||
resulttekst = "Undefined external ID (key)";
|
||||
} else if (meldaction != 'insert') {
|
||||
resultcode = 2;
|
||||
resulttekst = "Undefined operation (type)";
|
||||
} else {
|
||||
tsql = "SELECT mld_stdmelding_uitvoertijd "
|
||||
+ " FROM mld_stdmelding"
|
||||
+ " WHERE mld_stdmelding_key="+ stdmld_key
|
||||
+ " AND mld_stdmelding_verwijder IS NULL";
|
||||
var oRs = Oracle.Execute(tsql);
|
||||
if (!oRs.eof) {
|
||||
plaats_key = oRs("alg_ruimte_key").value;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (oRs.eof) {
|
||||
resultcode = 3;
|
||||
resulttekst = "Undefined stdmelding";
|
||||
} else {
|
||||
// Hier heb ik een geldige mld_stdmelding_key.
|
||||
stdmld_sla = oRs("mld_stdmelding_uitvoertijd").value;
|
||||
|
||||
if (plaats_key != -1)
|
||||
{
|
||||
fields.push({ dbs: "mld_alg_onroerendgoed_keys", typ: "key", val: plaats_key });
|
||||
}
|
||||
}
|
||||
|
||||
fields = fields.concat(
|
||||
[ { dbs: "mld_melding_key", typ: "key", seq: "mld_s_mld_melding_key" },
|
||||
{ dbs: "mld_melding_module", typ: "varchar", val: "MLD" },
|
||||
{ dbs: "mld_meldbron_key", typ: "key", val: 6 }, // system
|
||||
{ dbs: "mld_melding_omschrijving", typ: "varchar", val: meld_oms, len: 4000 },
|
||||
{ dbs: "prs_kostenplaats_key", typ: "key", val: user.afdeling().prs_kostenplaats_key() },
|
||||
{ dbs: "prs_perslid_key", typ: "key", val: user_key },
|
||||
{ dbs: "prs_perslid_key_voor", typ: "key", val: user_key },
|
||||
{ dbs: "mld_melding_spoed", typ: "key", val: 3 }, // default (frontend) = 3
|
||||
{ dbs: "mld_melding_externnr", typ: "varchar", val: ext_id, len: 30 }
|
||||
]);
|
||||
|
||||
// We weten wat te inserten, nu nog uitvoeren; rechten voldoende afgedekt via MLDUSE-check hierboven?
|
||||
|
||||
if (resultcode == -1)
|
||||
{ // nog steeds geen fouten
|
||||
var mldIns = buildInsert("mld_melding", fields, { noValidateToken: true });
|
||||
mld_key = mldIns.sequences["mld_melding_key"];
|
||||
|
||||
sql = mldIns.sql;
|
||||
oRs = Oracle.Execute(sql);
|
||||
|
||||
// Zetten van de status op ingevoerd en afhandelen van de tracking.
|
||||
mld.setmeldingstatus(mld_key, 2); // Zorgt ook voor tracking & daarmee notificatie.
|
||||
|
||||
// Eventuele (gewijzigde) objecten zijn nu ook opgeslagen. Nu kan de definitieve mld_melding.mld_melding_einddatum_std bepaald en gezet worden.
|
||||
//mld.updatestdeinddatum(mld_key); // Unsupported yet. So update of mld_melding_einddatum_std not needed yet.
|
||||
|
||||
// De kenmerken.
|
||||
for (j=0; j < mldkenmerken.length; j++)
|
||||
{
|
||||
var kenmerk_naam = mldkenmerken[j].getAttribute("naam");
|
||||
if (mldkenmerken[j].childNodes.length > 0)
|
||||
var kenmerk_waarde = mldkenmerken[j].childNodes[0].nodeValue;
|
||||
else
|
||||
var kenmerk_waarde = "";
|
||||
//Response.Write(kenmerk_naam);
|
||||
//Response.Write(kenmerk_waarde);
|
||||
// Zoek het kenmerk op naam terug
|
||||
ksql = "SELECT k.mld_kenmerk_key, sk.mld_srtkenmerk_kenmerktype, sk.mld_srtkenmerk_lengte "
|
||||
+ " FROM mld_kenmerk k"
|
||||
+ " , mld_srtkenmerk sk"
|
||||
+ " , mld_stdmelding s"
|
||||
+ " , mld_discipline d"
|
||||
+ " WHERE s.mld_ins_discipline_key = d.ins_discipline_key"
|
||||
+ " AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key "
|
||||
+ " AND k.mld_kenmerk_verwijder IS NULL "
|
||||
+ " AND sk.mld_srtkenmerk_upper = " + safe.quoted_sql_upper(kenmerk_naam)
|
||||
+ " AND s.mld_ins_discipline_key = d.ins_discipline_key"
|
||||
+ " AND s.mld_stdmelding_key = " + stdmld_key
|
||||
+ " AND ((k.mld_stdmelding_key = s.mld_stdmelding_key AND k.mld_kenmerk_niveau = 'S')"
|
||||
+ " OR (k.mld_stdmelding_key = s.mld_ins_discipline_key AND k.mld_kenmerk_niveau = 'D')"
|
||||
+ " OR (k.mld_stdmelding_key = d.ins_srtdiscipline_key AND k.mld_kenmerk_niveau = 'T'))";
|
||||
|
||||
var oRs = Oracle.Execute(ksql);
|
||||
|
||||
if (!oRs.eof)
|
||||
{
|
||||
var kenmerk_key = oRs("mld_kenmerk_key").value;
|
||||
var kenmerk_type = oRs("mld_srtkenmerk_kenmerktype").value;
|
||||
var kenmerk_lengte = oRs("mld_srtkenmerk_lengte").value;
|
||||
|
||||
ksql = "SELECT km.mld_kenmerkmelding_key "
|
||||
+ " FROM mld_kenmerkmelding km "
|
||||
+ " WHERE km.mld_melding_key = " + mld_key
|
||||
+ " AND km.mld_kenmerk_key = " + kenmerk_key;
|
||||
var oRs = Oracle.Execute(ksql);
|
||||
|
||||
switch (kenmerk_type)
|
||||
{
|
||||
case 'C':
|
||||
{
|
||||
// we ondersteunen alleen nog maar karakter velden.
|
||||
if (!oRs.eof)
|
||||
{
|
||||
var kenmerkmelding_key = oRs("mld_kenmerkmelding_key").value;
|
||||
ksql = "UPDATE mld_kenmerkmelding"
|
||||
+ " SET mld_kenmerkmelding_waarde = " + safe.quoted_sql(kenmerk_waarde)
|
||||
+ " WHERE mld_kenmerkmelding_key = " + kenmerkmelding_key;
|
||||
}
|
||||
else
|
||||
{
|
||||
ksql = "INSERT INTO mld_kenmerkmelding (mld_kenmerk_key, mld_melding_key, mld_kenmerkmelding_waarde) "
|
||||
+ "VALUES (" + kenmerk_key + ", " + mld_key + ", " + safe.quoted_sql(kenmerk_waarde) + ")";
|
||||
}
|
||||
Oracle.Execute(ksql);
|
||||
break;
|
||||
}
|
||||
case 'N':
|
||||
{
|
||||
// we ondersteunen alleen nog maar karakter velden.
|
||||
if (!oRs.eof)
|
||||
{
|
||||
var kenmerkmelding_key = oRs("mld_kenmerkmelding_key").value;
|
||||
ksql = "UPDATE mld_kenmerkmelding"
|
||||
+ " SET mld_kenmerkmelding_waarde = " + safe.quoted_sql(kenmerk_waarde)
|
||||
+ " WHERE mld_kenmerkmelding_key = " + kenmerkmelding_key;
|
||||
}
|
||||
else
|
||||
{
|
||||
ksql = "INSERT INTO mld_kenmerkmelding (mld_kenmerk_key, mld_melding_key, mld_kenmerkmelding_waarde) "
|
||||
+ "VALUES (" + kenmerk_key + ", " + mld_key + ", " + safe.quoted_sql(kenmerk_waarde) + ")";
|
||||
}
|
||||
Oracle.Execute(ksql);
|
||||
break;
|
||||
}
|
||||
case "M": // Folder met bijlagen
|
||||
{
|
||||
//Response.Write(kenmerk_naam);
|
||||
var bijlagen = mldkenmerken[j].getElementsByTagName("bijlage");
|
||||
var bi;
|
||||
for (bi = 0; bi < bijlagen.length; bi++)
|
||||
{
|
||||
var Attachment = XMLval(bijlagen[bi], "attachment");
|
||||
var Name = XMLval(bijlagen[bi], "name");
|
||||
var Size = XMLval(bijlagen[bi], "size");
|
||||
//Response.Write("Name: " + Name + " size: " + Size);
|
||||
if (Attachment && Name && Size)
|
||||
{
|
||||
var SafeName = safe.filename(Name);
|
||||
var params = flexProps("MLD", mld_key, String(kenmerk_key), "M");
|
||||
if (params.extFilter)
|
||||
{
|
||||
var regFilter = params.extFilter;
|
||||
regFilter = regFilter.replace(/( |,|;)/g,"|"); // Altijd | karakter
|
||||
regFilter = ".*\\." + "(" + regFilter + ")$"; // er moet een punt voor en extensie is aan het einde
|
||||
fields.push({ dbs: "mld_stdmelding_key", typ: "key", val: stdmld_key });
|
||||
fields.push({ dbs: "mld_melding_uitvoertijd", typ: "number", val: stdmld_sla });
|
||||
if (melddatum != null) {
|
||||
try {
|
||||
var meldaanmaakdate = XMLtoJsDate(melddatum);
|
||||
fields.push({ dbs: "mld_melding_datum", typ: "datetime", val: meldaanmaakdate });
|
||||
}
|
||||
else
|
||||
regFilter = ".*";
|
||||
if (!new RegExp(S("flexAllowedExt"), "ig").test(SafeName) ||
|
||||
!new RegExp(regFilter, "ig").test(SafeName))
|
||||
{
|
||||
__DoLog("Unsafe SOAP file '{0}' ignored.".format(SafeName), "#FFFF00");
|
||||
catch (e) {
|
||||
// Verkeerde datum-formaat, volgens spec. dan now gebruiken!
|
||||
__DoLog("Formaat ontvangen XML-datum incorrect: "+ melddatum, "#00FF00");
|
||||
meldaanmaakdate = now;
|
||||
fields.push({ dbs: "mld_melding_datum", typ: "datetime", val: meldaanmaakdate });
|
||||
}
|
||||
else
|
||||
{
|
||||
__Log("Start saving: " + params.AttachPath + SafeName);
|
||||
CreateFullPath(params.AttachPath);
|
||||
VB_SaveFile(params.AttachPath + SafeName, Attachment)
|
||||
__Log("Done saving: " + params.AttachPath + SafeName);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
fields.push({ dbs: "mld_melding_datum", typ: "datetime", val: now });
|
||||
}
|
||||
}
|
||||
}
|
||||
oRs.Close();
|
||||
}
|
||||
// De einddatum is de meegegeven einddatum, maar als die niet wordt meegegeven is het
|
||||
// gewoon enddate_std en dat regelt de trigger wel, dus DAN MOET IK HEM NIET MEEGEVEN
|
||||
if (einddatum != null) {
|
||||
try {
|
||||
var meldeinddate = XMLtoJsDate(einddatum);
|
||||
if (meldeinddate > meldaanmaakdate) {
|
||||
fields.push({ dbs: "mld_melding_einddatum", typ: "datetime", val: meldeinddate });
|
||||
}
|
||||
else {
|
||||
// Ontvangen XML-einddatum voor begindatum, dan later volgens SLA zetten!
|
||||
__DoLog("Ontvangen XML-einddatum voor begindatum: "+ einddatum, "#00FF00");
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
// Verkeerde datum-formaat, dan later volgens SLA zetten!
|
||||
__DoLog("Formaat ontvangen XML-einddatum incorrect: "+ einddatum, "#00FF00");
|
||||
}
|
||||
}
|
||||
|
||||
tsql = "SELECT alg_locatie_key "
|
||||
+ " FROM alg_v_aanweziglocatie"
|
||||
+ " WHERE alg_locatie_code="+ safe.quoted_sql(meldloc);
|
||||
var oRs = Oracle.Execute(tsql);
|
||||
if (!oRs.eof) {
|
||||
locatie_key = oRs("alg_locatie_key").value;
|
||||
fields.push({ dbs: "mld_alg_locatie_key", typ: "key", val: locatie_key });
|
||||
|
||||
tsql = "SELECT alg_gebouw_key "
|
||||
+ " FROM alg_v_aanweziggebouw"
|
||||
+ " WHERE alg_locatie_key ="+ locatie_key
|
||||
+ " AND alg_gebouw_code="+ safe.quoted_sql(meldgeb);
|
||||
var oRs = Oracle.Execute(tsql);
|
||||
if (!oRs.eof) {
|
||||
plaats_key = oRs("alg_gebouw_key").value;
|
||||
|
||||
tsql = "SELECT alg_verdieping_key "
|
||||
+ " FROM alg_v_aanwezigverdieping"
|
||||
+ " WHERE alg_gebouw_key ="+ plaats_key
|
||||
+ " AND alg_verdieping_code="+ safe.quoted_sql(meldver);
|
||||
var oRs = Oracle.Execute(tsql);
|
||||
if (!oRs.eof) {
|
||||
plaats_key = oRs("alg_verdieping_key").value;
|
||||
|
||||
tsql = "SELECT alg_ruimte_key "
|
||||
+ " FROM alg_v_aanwezigruimte"
|
||||
+ " WHERE alg_verdieping_key ="+ plaats_key
|
||||
+ " AND alg_ruimte_nr="+ safe.quoted_sql(meldrnr);
|
||||
var oRs = Oracle.Execute(tsql);
|
||||
if (!oRs.eof) {
|
||||
plaats_key = oRs("alg_ruimte_key").value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (plaats_key != -1) {
|
||||
fields.push({ dbs: "mld_alg_onroerendgoed_keys", typ: "key", val: plaats_key });
|
||||
}
|
||||
}
|
||||
|
||||
fields = fields.concat(
|
||||
[ { dbs: "mld_melding_key", typ: "key", seq: "mld_s_mld_melding_key" },
|
||||
{ dbs: "mld_melding_module", typ: "varchar", val: "MLD" },
|
||||
{ dbs: "mld_meldbron_key", typ: "key", val: 6 }, // system
|
||||
{ dbs: "mld_melding_omschrijving", typ: "varchar", val: meld_oms, len: 4000 },
|
||||
{ dbs: "prs_kostenplaats_key", typ: "key", val: user.afdeling().prs_kostenplaats_key() },
|
||||
{ dbs: "prs_perslid_key", typ: "key", val: user_key },
|
||||
{ dbs: "prs_perslid_key_voor", typ: "key", val: user_key },
|
||||
{ dbs: "mld_melding_spoed", typ: "key", val: 3 }, // default (frontend) = 3
|
||||
{ dbs: "mld_melding_externnr", typ: "varchar", val: ext_id, len: 30 }
|
||||
]);
|
||||
|
||||
// We weten wat te inserten, nu nog uitvoeren; rechten voldoende afgedekt via MLDUSE-check hierboven?
|
||||
|
||||
if (resultcode == -1) { // nog steeds geen fouten
|
||||
var mldIns = buildInsert("mld_melding", fields, { noValidateToken: true });
|
||||
mld_key = mldIns.sequences["mld_melding_key"];
|
||||
|
||||
sql = mldIns.sql;
|
||||
oRs = Oracle.Execute(sql);
|
||||
|
||||
// Zetten van de status op ingevoerd en afhandelen van de tracking.
|
||||
mld.setmeldingstatus(mld_key, 2); // Zorgt ook voor tracking & daarmee notificatie.
|
||||
|
||||
// Eventuele (gewijzigde) objecten zijn nu ook opgeslagen. Nu kan de definitieve mld_melding.mld_melding_einddatum_std bepaald en gezet worden.
|
||||
//mld.updatestdeinddatum(mld_key); // Unsupported yet. So update of mld_melding_einddatum_std not needed yet.
|
||||
|
||||
// De kenmerken.
|
||||
for (j=0; j < mldkenmerken.length; j++)
|
||||
{
|
||||
var kenmerk_naam = mldkenmerken[j].getAttribute("naam");
|
||||
if (mldkenmerken[j].childNodes.length > 0)
|
||||
var kenmerk_waarde = mldkenmerken[j].childNodes[0].nodeValue;
|
||||
else
|
||||
var kenmerk_waarde = "";
|
||||
//Response.Write(kenmerk_naam);
|
||||
//Response.Write(kenmerk_waarde);
|
||||
// Zoek het kenmerk op naam terug
|
||||
ksql = "SELECT k.mld_kenmerk_key, sk.mld_srtkenmerk_kenmerktype, sk.mld_srtkenmerk_lengte "
|
||||
+ " FROM mld_kenmerk k"
|
||||
+ " , mld_srtkenmerk sk"
|
||||
+ " , mld_stdmelding s"
|
||||
+ " , mld_discipline d"
|
||||
+ " WHERE s.mld_ins_discipline_key = d.ins_discipline_key"
|
||||
+ " AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key "
|
||||
+ " AND sk.mld_srtkenmerk_upper = " + safe.quoted_sql_upper(kenmerk_naam)
|
||||
+ " AND s.mld_ins_discipline_key = d.ins_discipline_key"
|
||||
+ " AND s.mld_stdmelding_key = " + stdmld_key
|
||||
+ " AND ((k.mld_stdmelding_key = s.mld_stdmelding_key AND k.mld_kenmerk_niveau = 'S')"
|
||||
+ " OR (k.mld_stdmelding_key = s.mld_ins_discipline_key AND k.mld_kenmerk_niveau = 'D')"
|
||||
+ " OR (k.mld_stdmelding_key = d.ins_srtdiscipline_key AND k.mld_kenmerk_niveau = 'T'))";
|
||||
|
||||
var oRs = Oracle.Execute(ksql);
|
||||
|
||||
if (!oRs.eof)
|
||||
{
|
||||
var kenmerk_key = oRs("mld_kenmerk_key").value;
|
||||
var kenmerk_type = oRs("mld_srtkenmerk_kenmerktype").value;
|
||||
var kenmerk_lengte = oRs("mld_srtkenmerk_lengte").value;
|
||||
|
||||
ksql = "SELECT km.mld_kenmerkmelding_key "
|
||||
+ " FROM mld_kenmerkmelding km "
|
||||
+ " WHERE km.mld_melding_key = " + mld_key
|
||||
+ " AND km.mld_kenmerk_key = " + kenmerk_key;
|
||||
var oRs = Oracle.Execute(ksql);
|
||||
|
||||
switch (kenmerk_type)
|
||||
{
|
||||
case 'C':
|
||||
{
|
||||
// we ondersteunen alleen nog maar karakter velden.
|
||||
if (!oRs.eof)
|
||||
{
|
||||
var kenmerkmelding_key = oRs("mld_kenmerkmelding_key").value;
|
||||
ksql = "UPDATE mld_kenmerkmelding"
|
||||
+ " SET mld_kenmerkmelding_waarde = " + safe.quoted_sql(kenmerk_waarde)
|
||||
+ " WHERE mld_kenmerkmelding_key = " + kenmerkmelding_key;
|
||||
}
|
||||
else
|
||||
{
|
||||
ksql = "INSERT INTO mld_kenmerkmelding (mld_kenmerk_key, mld_melding_key, mld_kenmerkmelding_waarde) "
|
||||
+ "VALUES (" + kenmerk_key + ", " + mld_key + ", " + safe.quoted_sql(kenmerk_waarde) + ")";
|
||||
}
|
||||
Oracle.Execute(ksql);
|
||||
break;
|
||||
}
|
||||
case 'N':
|
||||
{
|
||||
// we ondersteunen alleen nog maar karakter velden.
|
||||
if (!oRs.eof)
|
||||
{
|
||||
var kenmerkmelding_key = oRs("mld_kenmerkmelding_key").value;
|
||||
ksql = "UPDATE mld_kenmerkmelding"
|
||||
+ " SET mld_kenmerkmelding_waarde = " + safe.quoted_sql(kenmerk_waarde)
|
||||
+ " WHERE mld_kenmerkmelding_key = " + kenmerkmelding_key;
|
||||
}
|
||||
else
|
||||
{
|
||||
ksql = "INSERT INTO mld_kenmerkmelding (mld_kenmerk_key, mld_melding_key, mld_kenmerkmelding_waarde) "
|
||||
+ "VALUES (" + kenmerk_key + ", " + mld_key + ", " + safe.quoted_sql(kenmerk_waarde) + ")";
|
||||
}
|
||||
Oracle.Execute(ksql);
|
||||
break;
|
||||
}
|
||||
case "M": // Folder met bijlagen
|
||||
{
|
||||
//Response.Write(kenmerk_naam);
|
||||
var bijlagen = mldkenmerken[j].getElementsByTagName("bijlage");
|
||||
var bi;
|
||||
for (bi = 0; bi < bijlagen.length; bi++)
|
||||
{
|
||||
var Attachment = XMLval(bijlagen[bi], "attachment");
|
||||
var Name = XMLval(bijlagen[bi], "name");
|
||||
var Size = XMLval(bijlagen[bi], "size");
|
||||
//Response.Write("Name: " + Name + " size: " + Size);
|
||||
if (Attachment && Name && Size)
|
||||
{
|
||||
var SafeName = safe.filename(Name);
|
||||
var params = flexProps("MLD", mld_key, String(kenmerk_key), "M");
|
||||
if (params.extFilter)
|
||||
{
|
||||
var regFilter = params.extFilter;
|
||||
regFilter = regFilter.replace(/( |,|;)/g,"|"); // Altijd | karakter
|
||||
regFilter = ".*\\." + "(" + regFilter + ")$"; // er moet een punt voor en extensie is aan het einde
|
||||
}
|
||||
else
|
||||
regFilter = ".*";
|
||||
if (!new RegExp(S("flexAllowedExt"), "ig").test(SafeName) ||
|
||||
!new RegExp(regFilter, "ig").test(SafeName))
|
||||
{
|
||||
__DoLog("Unsafe SOAP file '{0}' ignored.".format(SafeName), "#FFFF00");
|
||||
}
|
||||
else
|
||||
{
|
||||
__Log("Start saving: " + params.AttachPath + SafeName);
|
||||
CreateFullPath(params.AttachPath);
|
||||
VB_SaveFile(params.AttachPath + SafeName, Attachment)
|
||||
__Log("Done saving: " + params.AttachPath + SafeName);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
oRs.Close();
|
||||
}
|
||||
}
|
||||
|
||||
resultcode = 0; // Ik heb gedaan wat ik moest en mocht doen voor deze melding.
|
||||
// En nog maar even de aanname dat een extern systeem niet aan workflows/ktos doet?
|
||||
}
|
||||
} // end geldige stdmld_key
|
||||
} // end geldige ext_id
|
||||
|
||||
var binfo = {
|
||||
returncode: resultcode,
|
||||
returntekst: resulttekst,
|
||||
// executed:sql, // debug
|
||||
datum: nowtxt,
|
||||
meldingnr: mld_key
|
||||
}
|
||||
|
||||
var FCLTBody = xmlResp.createElement("melding"); // type=response
|
||||
FCLTBody.setAttribute('key', ext_id); // Let op: key van de aanroeper!
|
||||
FCLTBody.setAttribute('type', 'response');
|
||||
for (param in binfo)
|
||||
{
|
||||
var FCLTdata = xmlResp.createElement(param);
|
||||
FCLTdata.appendChild(xmlResp.createTextNode(binfo[param]));
|
||||
FCLTBody.appendChild(FCLTdata);
|
||||
}
|
||||
|
||||
resultcode = 0; // Ik heb gedaan wat ik moest en mocht doen voor deze melding.
|
||||
// En nog maar even de aanname dat een extern systeem niet aan workflows/ktos doet?
|
||||
}
|
||||
} // end geldige stdmld_key
|
||||
} // end geldige ext_id
|
||||
FCLTElement.appendChild(FCLTBody);
|
||||
} // end for
|
||||
// Alle melding-nodes zijn behandeld.
|
||||
|
||||
var binfo = {returncode: resultcode,
|
||||
returntekst: resulttekst,
|
||||
// executed:sql, // debug
|
||||
datum: nowtxt,
|
||||
meldingnr: mld_key
|
||||
}
|
||||
xmlResp.appendChild(FCLTElement);
|
||||
|
||||
var FCLTBody = xmlResp.createElement("melding"); // type=response
|
||||
FCLTBody.setAttribute('key', ext_id); // Let op: key van de aanroeper!
|
||||
FCLTBody.setAttribute('type', 'response');
|
||||
for (param in binfo)
|
||||
{
|
||||
var FCLTdata = xmlResp.createElement(param);
|
||||
FCLTdata.appendChild(xmlResp.createTextNode(binfo[param]));
|
||||
FCLTBody.appendChild(FCLTdata);
|
||||
}
|
||||
if (API.apidata.stylesheet)
|
||||
{
|
||||
// Niet super efficient dat we eerst naar tekstuele xml gaan maar ach...
|
||||
STR2Stream(xmlResp.xml, API.apidata.stylesheet, Response, {});
|
||||
}
|
||||
else
|
||||
{
|
||||
Response.ContentType = "text/xml";
|
||||
Response.Write(xmlResp.xml)
|
||||
}
|
||||
|
||||
FCLTElement.appendChild(FCLTBody);
|
||||
} // end for
|
||||
// Alle melding-nodes zijn behandeld.
|
||||
|
||||
xmlResp.appendChild(FCLTElement);
|
||||
|
||||
if (API.apidata.stylesheet)
|
||||
{
|
||||
// Niet super efficient dat we eerst naar tekstuele xml gaan maar ach...
|
||||
STR2Stream(xmlResp.xml, API.apidata.stylesheet, Response, {});
|
||||
}
|
||||
else
|
||||
{
|
||||
Response.ContentType = "text/xml";
|
||||
Response.Write(xmlResp.xml)
|
||||
}
|
||||
%>
|
||||
<script language="VBScript" runat="Server">
|
||||
' JavaScript is erg slecht in binary data, dat doen we dan maar met VBScript.
|
||||
Function HexDecode(ByVal vCode)
|
||||
Dim oXML, oNode
|
||||
|
||||
Set oXML = CreateObject("MSXML2.DOMDocument.6.0")
|
||||
Set oXML = CreateObject("MSXML2.DOMDocument.4.0")
|
||||
Set oNode = oXML.CreateElement("hex")
|
||||
oNode.dataType = "bin.hex" ' Zeer snelle oplossing
|
||||
oNode.text = vCode
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -34,24 +34,22 @@
|
||||
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");
|
||||
var xmlReq = Server.CreateObject("MSXML2.DOMDocument.4.0");
|
||||
if (API.apidata.stylesheet)
|
||||
{
|
||||
var iXsl = Server.CreateObject("MSXML2.DOMDocument.6.0");
|
||||
var iXsl = Server.CreateObject("MSXML2.DOMDocument.4.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");
|
||||
var inputXML = Server.CreateObject("MSXML2.DOMDocument.4.0");
|
||||
inputXML.load(Request);
|
||||
inputXML.transformNodeToObject(iXsl, xmlReq);
|
||||
}
|
||||
else
|
||||
xmlReq.load(Request);
|
||||
|
||||
if (API.apidata.loglevel) __Log2File(xmlReq.xml, APIname + "_IN");
|
||||
|
||||
var xmlResp = new ActiveXObject("MSXML2.DOMDocument.6.0");
|
||||
var xmlResp = new ActiveXObject("MSXML2.DOMDocument.4.0");
|
||||
xmlResp.appendChild(xmlResp.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"utf-8\""))
|
||||
|
||||
// The response.
|
||||
@@ -280,22 +278,12 @@
|
||||
if (shown != null) { // Bij update optioneel
|
||||
// Feitelijke UPDATE shown.
|
||||
// Verder geen checks (Oracle fout als shown < 0 of shown > 999 niet afvangen???)!
|
||||
if (S("res_noshow_detailed") == 1) {
|
||||
sql = "UPDATE res_rsv_ruimte"
|
||||
+ " SET res_rsv_ruimte_bezoekers_shown="+parseInt(shown, 10)
|
||||
+ " WHERE res_rsv_ruimte_key="+rsv_ruimte_key
|
||||
+ " AND 1=1"; // Niet dirty, niet verwijderd, ...???
|
||||
Oracle.Execute(sql);
|
||||
}
|
||||
else {
|
||||
if (parseInt(shown, 10) == 0) {
|
||||
sql = "UPDATE res_rsv_ruimte"
|
||||
+ " SET res_rsv_ruimte_noshow = 1"
|
||||
+ " WHERE res_rsv_ruimte_key="+rsv_ruimte_key
|
||||
+ " AND 1=1"; // Niet dirty, niet verwijderd, ...???
|
||||
Oracle.Execute(sql);
|
||||
}
|
||||
}
|
||||
sql = "UPDATE res_rsv_ruimte"
|
||||
+ " SET res_rsv_ruimte_bezoekers_shown="+parseInt(shown, 10)
|
||||
+ " WHERE res_rsv_ruimte_key="+rsv_ruimte_key
|
||||
+ " AND 1=1"; // Niet dirty, niet verwijderd, ...???
|
||||
Oracle.Execute(sql);
|
||||
|
||||
// RESNOS-tracking toevoegen!
|
||||
shared.trackaction("RESNOS", rsv_ruimte_key);
|
||||
}
|
||||
|
||||
@@ -2,12 +2,9 @@
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File: api2.inc
|
||||
File: api.inc
|
||||
Description: Functies voor API's
|
||||
Notes: Hier wordt van alles met de 'buitenwereld' gecommuniceerd.
|
||||
Doel is dat de model's puur op json-data hoeven te werken
|
||||
|
||||
Status: Nog TODO's wegwerken
|
||||
Notes:
|
||||
|
||||
*/
|
||||
%>
|
||||
@@ -28,10 +25,7 @@ api2 = {
|
||||
}
|
||||
else
|
||||
{
|
||||
if (Session("user_key") > 0)
|
||||
{} // Tijdens ontwikkeling heb je soms in tweede tab de GUI open. Laat dat ongemoeid.
|
||||
else
|
||||
Session.Abandon(); // Altijd, voor de zekerheid
|
||||
Session.Abandon(); // Altijd, voor de zekerheid
|
||||
|
||||
var sql = "SELECT prs_perslid_key, prs_perslid_naam"
|
||||
+ " FROM prs_perslid"
|
||||
@@ -49,7 +43,6 @@ api2 = {
|
||||
oRs.Close();
|
||||
}
|
||||
/* global */ user = new Perslid(user_key);
|
||||
CheckForLogging(Request.QueryString("logging")); // Nu pas kan autorisatie via user gecontrolerd worden
|
||||
|
||||
// Impersonate?
|
||||
var IMPERS;
|
||||
@@ -88,6 +81,8 @@ api2 = {
|
||||
},
|
||||
process: function _process(model)
|
||||
{
|
||||
CheckForLogging(Request.QueryString("logging"));
|
||||
|
||||
Session.Codepage = 65001; // We doen *uitsluitend* utf-8
|
||||
Response.Charset = 'utf-8';
|
||||
|
||||
@@ -107,125 +102,25 @@ api2 = {
|
||||
Response.End;
|
||||
}
|
||||
var jsondata = {};
|
||||
var filter = api2.qs2json();
|
||||
filter = api2.plugin.transform_filter(filter);
|
||||
var requestparams = { filter: filter, include: getQParamArray("include", []) };
|
||||
|
||||
if (/PUT|POST/.test(method)) // Dan is er in de body data meegestuurd
|
||||
if (/PUT|POST/.test(method))
|
||||
{
|
||||
switch (getQParamSafe("format", "invalid").toLowerCase())
|
||||
{
|
||||
case "json":
|
||||
{
|
||||
var parsed = RequestJSON();
|
||||
if (parsed.error)
|
||||
api2.error(500, "Error parsing input JSON: " + parsed.error);
|
||||
jsondata = api2.plugin.transform_incoming(requestparams, parsed.json);
|
||||
if (!jsondata)
|
||||
api2.error(500, "Error parsing input JSON: Empty");
|
||||
break;
|
||||
}
|
||||
case "xml":
|
||||
{
|
||||
var parsed = RequestXML();
|
||||
if (parsed.error)
|
||||
api2.error(500, "Error parsing input XML: " + parsed.error);
|
||||
jsondata = api2.xml2json(parsed.xml);
|
||||
if (!jsondata)
|
||||
api2.error(500, "Error parsing input XML: Empty");
|
||||
break;
|
||||
}
|
||||
default:
|
||||
UNKNOWN_FORMAT_TYPE;
|
||||
}
|
||||
if (!jsondata || !(model.record_name in jsondata || (model.multi_update && model.records_name in jsondata)))
|
||||
{
|
||||
api2.error(500, "No '{0}' found in input".format(model.record_name));
|
||||
}
|
||||
jsondata = RequestJSON(); // TODO: XML ondersteunen
|
||||
if (!jsondata)
|
||||
api2.error(500, "Error parsing input JSON");
|
||||
}
|
||||
var key = getQParamInt("id", -1); // Voor POST/PUT/DELETE
|
||||
var isSingle = /PUT|POST|DELETE/.test(method) || (key>0); // PUT, POST en DELETE altijd single
|
||||
var key = getQParamInt("id", -1); // Voor GET/PUT/DELETE
|
||||
|
||||
if (getQParamSafe("format", "json") == "api")
|
||||
var data = model["REST_" + method]( { filter: api2.qs2json(), include: getQParamArray("include",[]) }, jsondata, key );
|
||||
if (method == "DELETE")
|
||||
{
|
||||
// TODO: Onderstaande in een of ander standaardformaat opleveren?
|
||||
var result = { id: model.records_name,
|
||||
methods: [],
|
||||
includes: [],
|
||||
filters: [] };
|
||||
for (var i in model.includes)
|
||||
result.includes.push(i);
|
||||
if ("REST_GET" in model)
|
||||
result.methods.push("GET");
|
||||
if ("REST_PUT" in model)
|
||||
result.methods.push("PUT");
|
||||
if ("REST_POST" in model)
|
||||
result.methods.push("POST");
|
||||
if ("REST_DELETE" in model)
|
||||
result.methods.push("DELETE");
|
||||
|
||||
for (var i in model.fields) // TODO: Misschien beter via een (beknopt) field-object?
|
||||
{ // TODO: We missen hard-coded filters als reservableequipment/allowedinroom nu nog
|
||||
if (model.fields[i].filter)
|
||||
result.filters.push({ id: model.fields[i].name,
|
||||
filter: model.fields[i].filter,
|
||||
type: model.fields[i].typ
|
||||
});
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (method == "GET" || method == "DELETE" || model.record_name in jsondata)
|
||||
{
|
||||
var result = model["REST_" + method]( requestparams, jsondata, key );
|
||||
}
|
||||
else
|
||||
{ // Loop door de multiple records en geef de REST_ functie altijd <20><>n record
|
||||
for (var record in jsondata[model.records_name])
|
||||
{
|
||||
var thisdata = {};
|
||||
thisdata[model.record_name] = jsondata[model.records_name][record];
|
||||
var result = model["REST_" + method]( requestparams, thisdata, thisdata[model.record_name].id );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
switch (method)
|
||||
{
|
||||
case "DELETE":
|
||||
{
|
||||
Response.Status = "204 No Content";
|
||||
Response.End;
|
||||
break;
|
||||
}
|
||||
case "GET":
|
||||
{
|
||||
data = result;
|
||||
break;
|
||||
}
|
||||
case "PUT":
|
||||
case "POST":
|
||||
{
|
||||
var key = result.key;
|
||||
if (key)
|
||||
{
|
||||
var params = { filter: api2.qs2json(), include: getQParamArray("include", []) }, jsondata, key
|
||||
// requestparams.include is mogelijk uitgebreid met wat er in de body stond
|
||||
data = model.REST_GET({ filter: { id: key }, include: requestparams.include }); // resulterende data weer terug
|
||||
__Logj(data);
|
||||
}
|
||||
else
|
||||
{
|
||||
data = [];
|
||||
isSingle = false;
|
||||
}
|
||||
}
|
||||
Response.Status = "204 No Content";
|
||||
Response.End;
|
||||
}
|
||||
|
||||
api2.deliver(data, getQParamSafe("format", "json"),
|
||||
model.records_name,
|
||||
model.record_name,
|
||||
isSingle);
|
||||
(method != "GET")||getQParamInt("id","0")>0); // PUT en POST altijd single
|
||||
|
||||
},
|
||||
qs2json: function _qs2json(params)
|
||||
@@ -251,100 +146,22 @@ api2 = {
|
||||
if (!filter)
|
||||
continue;
|
||||
|
||||
// We kijken of dit model-veld in de filterparameters voorkomt. Voor ranges kunnen prefixes in gebruik zijn
|
||||
if (field.name in params.filter || "start_"+field.name in params.filter || "end_"+field.name in params.filter)
|
||||
if (field.name in params.filter)
|
||||
{
|
||||
// filterval is de meegegeven filterwaarde voor dit veld
|
||||
var filterval = params.filter[field.name];
|
||||
|
||||
// Voor ranges komt de naam (misschien) niet letterlijk voor, maar (mogelijk) met start_ of end_ ervoor
|
||||
// meerdere filters voor 1 veld dus wellicht
|
||||
if (filter == "range") {
|
||||
filterval1 = params.filter["start_"+field.name];
|
||||
filterval2 = params.filter["end_"+field.name];
|
||||
//__Log(">>filterval1>>"+filterval1);
|
||||
//__Log(">>filterval2>>"+filterval2);
|
||||
}
|
||||
// Nu is ook voor ranges alles weer normaal
|
||||
//__Log(">>field>>"+field.name);
|
||||
//__Log(">>filter>>"+filter);
|
||||
//__Log(">>filterval>>"+filterval);
|
||||
// TODO: operand?
|
||||
var clause;
|
||||
var operand = " = ";
|
||||
switch (field.typ)
|
||||
{
|
||||
case "key":
|
||||
if (filterval instanceof Array)
|
||||
var safe_val = parseInt(filterval, 10);
|
||||
if (isNaN(safe_val))
|
||||
{
|
||||
safe_val = "(" + filterval.join(",") + ")";
|
||||
operand = " IN ";
|
||||
}
|
||||
else if (String(filterval).indexOf(",") != -1) // let op: bij buildings/1234.json is id al numeriek gemaakt
|
||||
// NB: index=-1 als het geen array is.
|
||||
{
|
||||
safe_val = "(" + getQParamIntArray(field.name).join(",") + ")"; // TODO: Niet via getQParamIntArray
|
||||
operand = " IN ";
|
||||
}
|
||||
else
|
||||
{
|
||||
var safe_val = parseInt(filterval, 10);
|
||||
if (isNaN(safe_val))
|
||||
{
|
||||
Response.Status = "404 Not Found";
|
||||
Response.End;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "float":
|
||||
var safe_val = parseFloat(filterval);
|
||||
if (filter == "range")
|
||||
{
|
||||
// Als er maar 1 filterwaarde is, dan gedraagt zich die als start_
|
||||
if (filterval && !filterval1) filterval1 = filterval;
|
||||
|
||||
if (filterval1) {
|
||||
var safe_val1 = parseFloat(filterval1);
|
||||
}
|
||||
if (filterval2) {
|
||||
var safe_val2 = parseFloat(filterval2);
|
||||
}
|
||||
if (filterval1 && filterval2) {
|
||||
operand = " BETWEEN ";
|
||||
safe_val = safe_val1+" AND "+safe_val2;
|
||||
} else if (filterval1) {
|
||||
operand = " >= ";
|
||||
safe_val = safe_val1;
|
||||
} else if (filterval2) {
|
||||
operand = " <= ";
|
||||
safe_val = safe_val2;
|
||||
}
|
||||
Response.Status = "404 Not Found";
|
||||
Response.End;
|
||||
}
|
||||
break;
|
||||
case "number":
|
||||
var safe_val = parseInt(filterval, 10);
|
||||
if (filter == "range")
|
||||
{
|
||||
// Als er maar 1 filterwaarde is, dan gedraagt zich die als start_
|
||||
if (filterval && !filterval1) filterval1 = filterval;
|
||||
|
||||
if (filterval1) {
|
||||
var safe_val1 = parseInt(filterval1, 10);
|
||||
}
|
||||
if (filterval2) {
|
||||
var safe_val2 = parseInt(filterval2, 10);
|
||||
}
|
||||
if (filterval1 && filterval2) {
|
||||
operand = " BETWEEN ";
|
||||
safe_val = safe_val1+" AND "+safe_val2;
|
||||
} else if (filterval1) {
|
||||
operand = " >= ";
|
||||
safe_val = safe_val1;
|
||||
} else if (filterval2) {
|
||||
operand = " <= ";
|
||||
safe_val = safe_val2;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case "check":
|
||||
var safe_val = parseInt(filterval, 10);
|
||||
if (isNaN(safe_val))
|
||||
@@ -354,83 +171,24 @@ api2 = {
|
||||
}
|
||||
break;
|
||||
case "varchar":
|
||||
var safe_val = (filter == "exact" ? safe.quoted_sql(filterval) : safe.quoted_sql("%"+filterval+"%"));
|
||||
break;
|
||||
case "date": // onderscheid date en datetime?
|
||||
case "datetime":
|
||||
// exact: dbs == filterval; nodig? zoiets dan:
|
||||
//if (filter == "exact")
|
||||
//{
|
||||
// var safe_val = new Date(parseInt(filterval, 10));
|
||||
// safe_val = safe_val.toSQL();
|
||||
// field.dbs = "TRUNC("+field.dbs+")";
|
||||
//}
|
||||
// range: (dbs >= start_value, dbs <= end_value)
|
||||
if (filter == "range")
|
||||
{
|
||||
// Als er maar 1 filterwaarde is, dan gedraagt zich die als start_
|
||||
if (filterval && !filterval1) filterval1 = filterval;
|
||||
|
||||
var safe_val;
|
||||
if (filterval1) {
|
||||
var safe_val1 = myJSON.internal_parsedate(null, filterval1);
|
||||
//var safe_val1 = new Date(parseInt(filterval1, 10));
|
||||
safe_val1 = safe_val1.beginToSQL();
|
||||
}
|
||||
if (filterval2) {
|
||||
var safe_val2 = myJSON.internal_parsedate(null, filterval2);
|
||||
//var safe_val2 = new Date(parseInt(filterval2, 10));
|
||||
safe_val2 = safe_val2.endToSQL();
|
||||
}
|
||||
if (filterval1 && filterval2) {
|
||||
operand = " BETWEEN ";
|
||||
safe_val = safe_val1+" AND "+safe_val2;
|
||||
} else if (filterval1) {
|
||||
operand = " >= ";
|
||||
safe_val = safe_val1;
|
||||
} else if (filterval2) {
|
||||
operand = " <= ";
|
||||
safe_val = safe_val2;
|
||||
}
|
||||
}
|
||||
var safe_val = safe.quoted_sql(filterval);
|
||||
break;
|
||||
default:
|
||||
UNKNOWN_FILTER_TYPE;
|
||||
}
|
||||
var dbs = field.dbs;
|
||||
if (model.aliasprefix)
|
||||
dbs = model.aliasprefix + dbs;
|
||||
if (dbs.indexOf(".") < 0)
|
||||
dbs = model.table + "." + field.dbs;
|
||||
if (field.sql)
|
||||
dbs = field.sql; /* dit werkt bv voor cnt-XD */
|
||||
|
||||
if (filter == "like")
|
||||
{
|
||||
operand = " like ";
|
||||
if (field.typ == "varchar")
|
||||
{
|
||||
dbs = "UPPER("+dbs+")";
|
||||
safe_val = safe_val.toUpperCase();
|
||||
}
|
||||
}
|
||||
wheres.push(dbs + operand + safe_val);
|
||||
wheres.push(dbs + " = " + safe_val);
|
||||
}
|
||||
}
|
||||
}
|
||||
return wheres;
|
||||
},
|
||||
|
||||
// Als er voor een veldnaam een alias moet worden gebruikt, doe het dan op deze manier.
|
||||
sqlfield_alias: function _sqlfield_alias(model, field)
|
||||
{
|
||||
return model.aliasprefix + (field.dbs == model.primary ? field.dbs : field.name);
|
||||
},
|
||||
|
||||
// Bepaal bij een GET welke velden op te halen
|
||||
sqlfields: function _sqlfields(params, model)
|
||||
{
|
||||
model.aliasprefix = model.aliasprefix || "";
|
||||
var selects = [];
|
||||
var tables = [ model.table ];
|
||||
var wheres = [];
|
||||
@@ -445,94 +203,53 @@ api2 = {
|
||||
var dbs = field.dbs;
|
||||
if (field.sql)
|
||||
{
|
||||
if (model.aliasprefix)
|
||||
dbs = model.aliasprefix + field.name;
|
||||
selects.push(field.sql + " AS " + dbs);
|
||||
selects.push(field.sql + " AS " + field.dbs);
|
||||
}
|
||||
else if (dbs)
|
||||
else
|
||||
{
|
||||
// veldnamen moeten gelijk zijn bij het ophalen. Zie ook: sql2jsonval
|
||||
if (dbs.indexOf(".") < 0)
|
||||
{
|
||||
dbs = model.table + "." + dbs;
|
||||
if (model.aliasprefix)
|
||||
dbs += " AS " + api2.sqlfield_alias(model, field);
|
||||
}
|
||||
dbs = model.table + "." + field.dbs;
|
||||
|
||||
selects.push(dbs);
|
||||
}
|
||||
if (field.val instanceof Function)
|
||||
continue;
|
||||
|
||||
|
||||
if (field.foreign && typeof field.foreign == 'string') // de functions komen later
|
||||
{
|
||||
var foreign = foreignKeyTable(field.foreign);
|
||||
if (!foreign)
|
||||
MISSING_FOREIGN;
|
||||
var fieldname = (foreign.name||foreign.desc);
|
||||
field.foreignsql = "SELECT " + fieldname
|
||||
field.foreignsql = "SELECT " + foreign.desc
|
||||
+ " FROM " + foreign.tbl + " " + (foreign.alias||"xx")
|
||||
+ " WHERE ";
|
||||
if (foreign.where)
|
||||
field.foreignsql += foreign.where + " AND ";
|
||||
field.foreignsql += (foreign.alias||"xx") + "." + foreign.key + " = " + (field.sql||(field.dbs.indexOf(".") < 0? model.table + ".":"") + field.dbs);
|
||||
field.foreignsql += (foreign.alias||"xx") + "." + foreign.key + " = " + dbs;
|
||||
if (foreign.desc.match(/\_CODE$/i))
|
||||
field.foreigniscode = true;
|
||||
}
|
||||
if (field.foreignsql)
|
||||
{
|
||||
name_cnt ++;
|
||||
field._foreignname = "foreign_" + name_cnt; // Genereer een niet al te extreem lange naam
|
||||
selects.push("(" + field.foreignsql + ") " + " AS " + model.aliasprefix + field._foreignname);
|
||||
selects.push("(" + field.foreignsql + ") " + field._foreignname);
|
||||
}
|
||||
}
|
||||
if (params.include && model.includes)
|
||||
{
|
||||
// Dubbelen er uit halen, dat geeft lelijke foutmeldingen en kan ontstaan
|
||||
// als je include=visitors in de url meegeeft <20>n visitors in de body POST
|
||||
var tmp = {};
|
||||
for (var i in params.include) {
|
||||
tmp[params.include[i]] = 1;
|
||||
}
|
||||
params.include = [];
|
||||
for (var i in tmp) {
|
||||
params.include.push(i);
|
||||
}
|
||||
var inccnt = 0;
|
||||
for (var i in params.include)
|
||||
{
|
||||
if (params.include[i] in model.includes)
|
||||
{
|
||||
var inc = model.includes[params.include[i]];
|
||||
// Geneste includes verwijderen, we doen hooguit 1 diep
|
||||
if ("model" in inc) // reservablerooms/include/occupations heeft geen model
|
||||
delete inc.model.includes;
|
||||
|
||||
if (inc.model)
|
||||
{
|
||||
if (inc.single_only && !params.filter.id)
|
||||
{
|
||||
abort_with_warning("Include '{0}' only allowed with single '{1}'".format(params.include[i], model.record_name));
|
||||
}
|
||||
inccnt ++;
|
||||
inc.model.aliasprefix = "I" + inccnt + "_";
|
||||
var incquery = api2.sqlfields(params, inc.model);
|
||||
|
||||
selects = selects.concat (incquery.selects);
|
||||
tables = tables.concat (incquery.tables);
|
||||
wheres = wheres.concat (incquery.wheres);
|
||||
if (inc.joinfunction)
|
||||
{
|
||||
var where = inc.joinfunction(params);
|
||||
wheres.push (where);
|
||||
}
|
||||
else
|
||||
{
|
||||
// simpel op joinfield
|
||||
wheres.push ( model.table + "." + model.primary + "=" + inc.model.table + "." + inc.joinfield + "(+)");
|
||||
}
|
||||
wheres.push ( model.table + "." + model.primary + "=" + inc.model.table + "." + inc.joinfield);
|
||||
}
|
||||
}
|
||||
else
|
||||
__Log("Unknown include '{0}' requested".format(params.include[i]));
|
||||
}
|
||||
}
|
||||
return { selects: selects, tables: tables, wheres: wheres };
|
||||
@@ -552,51 +269,22 @@ api2 = {
|
||||
// De key halen we uit de url, die in de JSON negeren we
|
||||
if (field.name == "id")
|
||||
continue;
|
||||
if ("sql" in field)
|
||||
if (field.dbs.indexOf(".") >= 0) // complexe foreign key
|
||||
continue;
|
||||
if (!(field.name in jsondata) && !field.fnval)
|
||||
continue;
|
||||
if (field.readonly)
|
||||
continue;
|
||||
|
||||
if (field.fnval)
|
||||
var newval = field.fnval(jsondata);
|
||||
else // simpel
|
||||
var newval = jsondata[field.name];
|
||||
|
||||
switch (field.typ)
|
||||
{
|
||||
case "key": // De foreign keys action { "id": "5", "name": "afhalen" }
|
||||
if (newval && typeof newval == "object" && "id" in newval)
|
||||
{ // dereference
|
||||
newval = newval.id;
|
||||
jsondata[field.name] = newval;
|
||||
}
|
||||
break;
|
||||
case "date":
|
||||
case "datetime":
|
||||
// LET OP: Een (new Date) gemaakt binnen een plugin is vreemd genoeg geen (instanceof Date)
|
||||
// Waarschijnlijk gebruikt een wsc een ander Date object als (ASP)JScript?
|
||||
if (newval !== null && typeof newval == "object" && !(newval instanceof Date))
|
||||
newval = new Date(newval);
|
||||
// De foreign keys action { "id": "5", "name": "afhalen" }
|
||||
if (field.typ == "key" && newval && typeof newval == "object")
|
||||
newval = newval.id;
|
||||
|
||||
if (newval !== null && !(newval instanceof Date))
|
||||
{
|
||||
abort_with_warning("Invalid " + field.typ + " (" + model.record_name + "." + field.name + "): " + newval);
|
||||
}
|
||||
break;
|
||||
case "float":
|
||||
case "number":
|
||||
if (isNaN(newval))
|
||||
abort_with_warning("Invalid number (" + model.record_name + "." + field.name + "): " + newval);
|
||||
break;
|
||||
}
|
||||
if (field.dbs.indexOf(".") >= 0) // complexe foreign key
|
||||
continue;
|
||||
//__Log("newval="+newval);
|
||||
var newfield = { dbs: field.dbs,
|
||||
typ: field.typ,
|
||||
track: field.track,
|
||||
val: newval
|
||||
};
|
||||
fields.push(newfield);
|
||||
@@ -619,9 +307,6 @@ api2 = {
|
||||
var inc = model.includes[incname];
|
||||
if (inc.model) // andere includes zijn nog niet bij te werken
|
||||
{
|
||||
// Als je bij een PUT/POST een include in de BODY zet geven we heb automagisch terug
|
||||
params.include.push(incname);
|
||||
|
||||
var incmodel = inc.model;
|
||||
|
||||
// Vul existing_includes met bestaande records in de database
|
||||
@@ -644,12 +329,12 @@ api2 = {
|
||||
var inckey = incdata[j]["id"]; // Die moet er zijn
|
||||
if (!inckey || inckey < 0 || params.isNew)
|
||||
{
|
||||
__Log("Nu ga ik een '{0}' toevoegen".format(incname));
|
||||
//__DoLog("Ik zou moeten inserten");
|
||||
incmodel.REST_POST(params, incdata[j], the_key);
|
||||
}
|
||||
else if (inckey in existing_includes)
|
||||
{
|
||||
__Log("Nu ga ik '{0}' {1} updaten".format(incname, inckey));
|
||||
//__DoLog("Ik zou '{0}' {1} moeten updaten".format(incname, inckey));
|
||||
incmodel.REST_PUT(params, incdata[j], inckey);
|
||||
existing_includes[inckey].found = true;
|
||||
}
|
||||
@@ -670,32 +355,28 @@ api2 = {
|
||||
}
|
||||
},
|
||||
// Geeft de GET terug
|
||||
sql2jsonval: function(oRs, field, model)
|
||||
sql2jsonval: function(oRs, field)
|
||||
{
|
||||
if (field.val instanceof Function)
|
||||
var val = field.val(oRs, field, model);
|
||||
else if (field.dbs.indexOf(".") < 0)
|
||||
{
|
||||
var sqlfieldname = (model.aliasprefix ? api2.sqlfield_alias(model, field) : field.dbs);
|
||||
var val = oRs(sqlfieldname).Value;
|
||||
}
|
||||
//__DoLog(field.dbs);
|
||||
if (field.dbs.indexOf(".") < 0)
|
||||
var val = oRs(field.dbs).Value;
|
||||
else
|
||||
var val = oRs(field.dbs.split(".")[1]).Value;
|
||||
if (field.typ == "date" && (val != null))
|
||||
val = new Date(val)
|
||||
if (field.typ == "datetime" && (val != null))
|
||||
val = new Date(val)
|
||||
// Wat te doen met lege waarde
|
||||
// action: null
|
||||
// action: {key: null, name: null}
|
||||
// action: {}
|
||||
// of helemaal weglaten? We hebben nu de 1e optie. Dat is zelfdocumenterend
|
||||
// TODO: Wat te doen met lege waarde
|
||||
// action: null
|
||||
// action: {key: null, name: null}
|
||||
// action: {}
|
||||
// of helemaal weglaten? We hebben nu de 1e optie
|
||||
// En wat bij een leeg (include) array? Dan kun je ook nog occupations:[] krijgen
|
||||
if (val !== null && (field.foreign || field.foreignsql))
|
||||
if (val && (field.foreign || field.foreignsql))
|
||||
{
|
||||
if (field.foreignsql)
|
||||
{
|
||||
var name = oRs(model.aliasprefix + field._foreignname).Value;
|
||||
var name = oRs(field._foreignname).Value;
|
||||
if (name != null && typeof name == "date" )
|
||||
name = new Date(name);
|
||||
}
|
||||
@@ -704,7 +385,10 @@ api2 = {
|
||||
var name = field.foreign(val);
|
||||
}
|
||||
val = { id: val };
|
||||
val.name = name;
|
||||
if (field.foreigniscode)
|
||||
val.code = name;
|
||||
else
|
||||
val.name = name;
|
||||
}
|
||||
return val;
|
||||
},
|
||||
@@ -717,10 +401,7 @@ api2 = {
|
||||
if (!field.name)
|
||||
continue;
|
||||
|
||||
var val = api2.sql2jsonval(oRs, field, model);
|
||||
if (field.readonly && !val.id)
|
||||
continue;
|
||||
record[field.name] = val;
|
||||
record[field.name] = api2.sql2jsonval(oRs, field);
|
||||
}
|
||||
return record;
|
||||
},
|
||||
@@ -735,24 +416,20 @@ api2 = {
|
||||
var data = [];
|
||||
var oRs = Oracle.Execute(sql);
|
||||
var lastkey = -1;
|
||||
// Merk op dat onze recordset meer regels kan bevatten dan je zou verwachten
|
||||
// omdat de includes er bij zijn gejoind
|
||||
while (!oRs.Eof)
|
||||
{
|
||||
var key = oRs(model.primary).Value;
|
||||
if (key != lastkey)
|
||||
{
|
||||
if (lastkey > 0 && "id" in record) // Record was er mogelijk uit gefilterd
|
||||
if (lastkey > 0)
|
||||
data.push(record);
|
||||
var record = {};
|
||||
}
|
||||
|
||||
// Complexe filtering die we niet voor elkaar kregen met een WHERE-clause
|
||||
if (model.filter && model.filter.func)
|
||||
{
|
||||
if (!model.filter.func(oRs, params, prefilterfuncdata))
|
||||
{
|
||||
lastkey = key;
|
||||
oRs.MoveNext();
|
||||
continue;
|
||||
}
|
||||
@@ -764,56 +441,35 @@ api2 = {
|
||||
var field = model.fields[fld];
|
||||
if (!field.name)
|
||||
continue;
|
||||
var val = api2.sql2jsonval(oRs, field, model)
|
||||
if (field.readonly && !val.id)
|
||||
continue;
|
||||
record[field.name] = val;
|
||||
record[field.name] = api2.sql2jsonval(oRs, field);
|
||||
}
|
||||
|
||||
if (params.include && model.includes)
|
||||
{
|
||||
for (var i in params.include) // welke includes worden opgevraagd?
|
||||
for (var i in params.include)
|
||||
{
|
||||
var incname = params.include[i];
|
||||
if (incname in model.includes) // Ondersteunen we deze include?
|
||||
if (incname in model.includes)
|
||||
{
|
||||
var incmodel = model.includes[incname].model;
|
||||
if (!(incname in record))
|
||||
record[incname] = [];
|
||||
var incmodel = model.includes[incname].model;
|
||||
if (incmodel)
|
||||
{ // Standaard include via model. Ons 'hoofd' record zal meerdere keren
|
||||
// uit de query komen met telkens een ander 'include' record
|
||||
incmodel.aliasprefix = incmodel.aliasprefix || "";
|
||||
if (oRs(incmodel.aliasprefix + incmodel.primary).value == null) // Geen record door outer join
|
||||
continue;
|
||||
|
||||
var inc_record = api2.sql2jsonfields(oRs, incmodel);
|
||||
var inc_record_exists = false;
|
||||
for (var i=0; i<record[incname].length; i++)
|
||||
{
|
||||
var tmp_record = record[incname];
|
||||
var cur_record = tmp_record[i];
|
||||
if (JSON.stringify(cur_record) == JSON.stringify(inc_record))
|
||||
inc_record_exists = true;
|
||||
}
|
||||
if (!inc_record_exists)
|
||||
record[incname].push(inc_record);
|
||||
//else
|
||||
// __Log("Deze bestaat al");
|
||||
{
|
||||
record[incname].push(api2.sql2jsonfields(oRs, incmodel));
|
||||
}
|
||||
else if (model.includes[incname].func) // include via callback functie zoals reservablerooms/occupation
|
||||
else if (model.includes[incname].func)
|
||||
{
|
||||
if (model.includes[incname].prefunc && !prefuncdatainitialized)
|
||||
{
|
||||
prefuncdata = model.includes[incname].prefunc(params);
|
||||
prefuncdatainitialized = true;
|
||||
}
|
||||
var incdata = model.includes[incname].func(key, params, oRs, record, prefuncdata);
|
||||
var incdata = model.includes[incname].func(key, params, prefuncdata);
|
||||
if (incdata !== null)
|
||||
record[incname] = incdata; // de callback geeft de gehele include in een keer
|
||||
record[incname].push(incdata);
|
||||
}
|
||||
}
|
||||
else
|
||||
__Log("Unknown include '{0}' requested".format(incname));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -835,12 +491,6 @@ api2 = {
|
||||
|
||||
switch (format)
|
||||
{
|
||||
case "api":
|
||||
{
|
||||
var str_antwoord = JSON.stringify(data, null, getQParam("pretty","0")=="1"?2:0);
|
||||
Response.ContentType = "application/json";
|
||||
break;
|
||||
}
|
||||
case "json":
|
||||
var result = { };
|
||||
if (single)
|
||||
@@ -848,8 +498,7 @@ api2 = {
|
||||
else
|
||||
result[records_name] = data;
|
||||
|
||||
var resultdata = api2.plugin.transform_outgoing({}, result);
|
||||
var str_antwoord = JSON.stringify(resultdata, null, getQParam("pretty","0")=="1"?2:0);
|
||||
var str_antwoord = JSON.stringify(result, null, getQParam("pretty","0")=="1"?2:0);
|
||||
|
||||
var jsonp = getQParam("jsonp", getQParam("callback",""));
|
||||
if (jsonp)
|
||||
@@ -876,22 +525,7 @@ api2 = {
|
||||
Response.ContentType = "text/xml";
|
||||
var xml_antwoord = api2.json2xml(data, records_name, record_name, single);
|
||||
// TODO: Output XSL transform ondersteunen?
|
||||
if (getQParam("pretty","0")=="1")
|
||||
{
|
||||
var style = new ActiveXObject("MSXML2.DOMDocument.6.0");
|
||||
style.async = false;
|
||||
style.resolveExternals = false;
|
||||
style.load(Server.MapPath(rooturl + "/appl/shared/indent.xsl")); // De stylesheet laden. API's redeneren vanuit de root
|
||||
if (style.parseError.errorCode)
|
||||
{
|
||||
abort_with_warning("XSL error: " + style.parseError.reason + " @ " + style.parseError.line + "." + style.parseError.linepos );
|
||||
}
|
||||
var str_antwoord = xml_antwoord.transformNode(style); // terugstoppen in antwoord
|
||||
}
|
||||
else
|
||||
var str_antwoord = xml_antwoord.xml;
|
||||
//Response.ContentType = "application/json";
|
||||
//var str_antwoord = JSON.stringify(api2.xml2json(xml_antwoord), null, 2);;
|
||||
var str_antwoord = xml_antwoord.xml;
|
||||
break;
|
||||
default:
|
||||
WRONG_FORMAT;
|
||||
@@ -914,10 +548,9 @@ api2 = {
|
||||
},
|
||||
|
||||
// TODO: Wanneer attributes gebruiken en wanneer (sub)-elements?
|
||||
// Streven: data == xml2json(json2xml(data))
|
||||
json2xml: function _json2xml(data, rootname, record_name, single)
|
||||
{
|
||||
var xmlDoc = new ActiveXObject("MSXML2.DOMDocument.6.0");
|
||||
var xmlDoc = new ActiveXObject("MSXML2.DOMDocument.4.0");
|
||||
xmlDoc.appendChild(xmlDoc.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"utf-8\""));
|
||||
|
||||
var record2json = function(record, record_name)
|
||||
@@ -937,7 +570,7 @@ api2 = {
|
||||
elementField.appendChild(record2json(record[fld][i], "visitor")); // TODO Hardcoded
|
||||
}
|
||||
else if (record[fld] && typeof record[fld] == "object") // TODO: veronderstelt nog hardcoded dat dit foreign met name/key is
|
||||
{ // misschien && "id" in record[fld]
|
||||
{
|
||||
if ("name" in record[fld] && "id" in record[fld])
|
||||
{
|
||||
elementField.setAttribute("name", record[fld].name);
|
||||
@@ -969,160 +602,13 @@ api2 = {
|
||||
}
|
||||
return xmlDoc;
|
||||
},
|
||||
// Streven: data == json2xml(xml2json(xml))
|
||||
// http://davidwalsh.name/convert-xml-json maar @attributes er uit gehaald
|
||||
xml2json: function _xml2json(xml)
|
||||
{
|
||||
// Create the return object
|
||||
var obj = {};
|
||||
|
||||
if (xml.nodeType == 1)
|
||||
{ // element
|
||||
// do attributes
|
||||
if (xml.attributes.length > 0)
|
||||
{
|
||||
// JGL removed: obj["@attributes"] = {};
|
||||
for (var j = 0; j < xml.attributes.length; j++)
|
||||
{
|
||||
var attribute = xml.attributes.item(j);
|
||||
obj[attribute.nodeName] = attribute.nodeValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (xml.nodeType == 3)
|
||||
{ // text
|
||||
obj = xml.nodeValue;
|
||||
}
|
||||
|
||||
// do children
|
||||
if (xml.hasChildNodes())
|
||||
{
|
||||
for(var i = 0; i < xml.childNodes.length; i++)
|
||||
{
|
||||
var item = xml.childNodes.item(i);
|
||||
var nodeName = item.nodeName;
|
||||
if (typeof(obj[nodeName]) == "undefined")
|
||||
{
|
||||
// JGL Added: Only one Textnode is simplified. Autodetect data
|
||||
if (item.nodeType == 3 && xml.childNodes.length == 1)
|
||||
{
|
||||
var dt = myJSON.internal_parsedate(null, item.nodeValue);
|
||||
if (dt && dt instanceof Date)
|
||||
return dt;
|
||||
return item.nodeValue;
|
||||
}
|
||||
|
||||
obj[nodeName] = api2.xml2json(item);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (typeof(obj[nodeName].push) == "undefined")
|
||||
{
|
||||
var old = obj[nodeName];
|
||||
obj[nodeName] = [];
|
||||
obj[nodeName].push(old);
|
||||
}
|
||||
obj[nodeName].push(api2.xml2json(item));
|
||||
}
|
||||
}
|
||||
}
|
||||
return obj;
|
||||
},
|
||||
error: function (code, msg)
|
||||
{
|
||||
abort_with_warning(msg, code)
|
||||
},
|
||||
find_plugin: function()
|
||||
{
|
||||
var plugin_name = getQParamSafe("plugin", "").toLowerCase();
|
||||
if (!plugin_name)
|
||||
return {};
|
||||
var fso = new ActiveXObject("Scripting.FileSystemObject");
|
||||
var paths = ["/cust/" + customerId, "/cust", "/appl/api2"]; // Hieronder zoeken naar '/plugins' folder
|
||||
for (var p in paths)
|
||||
{
|
||||
var ppath = Server.MapPath(rooturl + paths[p] + "/plugins/" + plugin_name + ".wsc")
|
||||
//__Log(ppath);
|
||||
if (fso.FileExists(ppath))
|
||||
{
|
||||
try
|
||||
{
|
||||
var hook = GetObject("script:" + ppath);
|
||||
}
|
||||
catch(e)
|
||||
{
|
||||
api2.error(500, "Loading {0} failed: {1}".format(ppath, e.description));
|
||||
}
|
||||
hook.initialize({ S: S, Oracle: Oracle, customerId: customerId, safe: safe });
|
||||
return hook;
|
||||
}
|
||||
}
|
||||
api2.error(500, "Undefined plugin {0}".format(plugin_name));
|
||||
},
|
||||
plugin: {
|
||||
transform_filter: function(filter)
|
||||
{
|
||||
var outdata = filter;
|
||||
var hook = api2.find_plugin();
|
||||
if ("transform_filter" in hook)
|
||||
{
|
||||
outdata = hook.transform_filter(filter);
|
||||
}
|
||||
hook = null;
|
||||
return outdata;
|
||||
},
|
||||
transform_incoming: function(params, data)
|
||||
{
|
||||
var outdata = data;
|
||||
var hook = api2.find_plugin();
|
||||
if ("transform_incoming" in hook)
|
||||
{
|
||||
outdata = hook.transform_incoming(params, data);
|
||||
}
|
||||
hook = null;
|
||||
return outdata;
|
||||
},
|
||||
transform_outgoing: function(params, data)
|
||||
{
|
||||
var outdata = data;
|
||||
var hook = api2.find_plugin();
|
||||
if ("transform_outgoing" in hook)
|
||||
outdata = hook.transform_outgoing(params, data);
|
||||
hook = null;
|
||||
return outdata;
|
||||
}
|
||||
},
|
||||
find_fieldindex_by_dbsname: function(array, value)
|
||||
{
|
||||
for(var i = 0; i < array.length; i++)
|
||||
{
|
||||
if(array[i].hasOwnProperty("dbs") && array[i]["dbs"] === value)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
},
|
||||
field_delete: function(array, dbsname)
|
||||
{
|
||||
var index = api2.find_fieldindex_by_dbsname(array, dbsname);
|
||||
if (index != -1)
|
||||
array.splice(index,1);
|
||||
},
|
||||
field_alter: function(array, dbsname, newval)
|
||||
{
|
||||
var index = api2.find_fieldindex_by_dbsname(array, dbsname);
|
||||
var field = array[index];
|
||||
field.val = newval;
|
||||
},
|
||||
field_value: function(array, dbsname)
|
||||
{
|
||||
var index = api2.find_fieldindex_by_dbsname(array, dbsname);
|
||||
var field = array[index];
|
||||
return field.val;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// LET OP: Verwacht wordt dat de JSON-code in de body utf-8 encoded is, niet windows-1252!
|
||||
// (in de praktijk moet je *moeite* doen om windows-1252 te krijgen dus dit is handiger)
|
||||
function RequestJSON()
|
||||
@@ -1140,28 +626,10 @@ function RequestJSON()
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
__DoLog("JSON eval faalt met: {0}<br>{1}".format(e.description, jvraag), "ffff00");
|
||||
return { error: e.description };
|
||||
__DoLog("eval faalt met: {0}<br>{1}".format(e.description, jvraag), "ffff00");
|
||||
return null;
|
||||
}
|
||||
return { json: vraag };
|
||||
}
|
||||
|
||||
function RequestXML()
|
||||
{
|
||||
try
|
||||
{
|
||||
var inputXML = Server.CreateObject("MSXML2.DOMDocument.6.0");
|
||||
inputXML.load(Request);
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
return { error: e.description };
|
||||
}
|
||||
if (inputXML.parseError.errorCode)
|
||||
{
|
||||
return { error: inputXML.parseError.reason + " @ " + inputXML.parseError.line + "." + inputXML.parseError.linepos };
|
||||
}
|
||||
return { xml: inputXML };
|
||||
return vraag;
|
||||
}
|
||||
|
||||
function BytesToStr(bytes)
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
<%@ language = "JavaScript" %>
|
||||
<% /*
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File: api_apis.asp
|
||||
|
||||
Description: META API
|
||||
Parameters:
|
||||
Context: Door een remote systeem (geen persoon) om info uit FACILITOR te halen aan te roepen
|
||||
|
||||
Notes:
|
||||
*/
|
||||
DOCTYPE_Disable = true;
|
||||
ANONYMOUS_Allowed = 1; // Eigenlijk niet waar. We regelen echter alles zelf
|
||||
THIS_FILE = "appl/api/api_apis.asp";
|
||||
|
||||
// Session("logging")=1;
|
||||
|
||||
%>
|
||||
<!-- #include file="../Shared/common.inc" -->
|
||||
<!-- #include file="./api2.inc" -->
|
||||
<!-- #include file="../Shared/json2.js" -->
|
||||
<!-- #include file="./model_apis.inc" -->
|
||||
<%
|
||||
api2.process(model_apis);
|
||||
%>
|
||||
@@ -1,27 +0,0 @@
|
||||
<%@ language = "JavaScript" %>
|
||||
<% /*
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File: api_companies.asp
|
||||
|
||||
Description: PRS_BEDRIJF API
|
||||
Parameters:
|
||||
Context: Door een remote systeem (geen persoon) om info uit FACILITOR te halen aan te roepen
|
||||
|
||||
Notes:
|
||||
*/
|
||||
DOCTYPE_Disable = true;
|
||||
ANONYMOUS_Allowed = 1; // Eigenlijk niet waar. We regelen echter alles zelf
|
||||
THIS_FILE = "appl/api/api_companies.asp";
|
||||
|
||||
// Session("logging")=1;
|
||||
|
||||
%>
|
||||
<!-- #include file="../Shared/common.inc" -->
|
||||
<!-- #include file="./api2.inc" -->
|
||||
<!-- #include file="../Shared/json2.js" -->
|
||||
<!-- #include file="./model_companies.inc" -->
|
||||
<%
|
||||
api2.process(model_companies);
|
||||
%>
|
||||
@@ -1,27 +0,0 @@
|
||||
<%@ language = "JavaScript" %>
|
||||
<% /*
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File: api_contracts.asp
|
||||
|
||||
Description: CNT_CONTRACT API
|
||||
Parameters:
|
||||
Context: Door een remote systeem (geen persoon) om info uit FACILITOR te halen aan te roepen
|
||||
|
||||
Notes:
|
||||
*/
|
||||
DOCTYPE_Disable = true;
|
||||
ANONYMOUS_Allowed = 1; // Eigenlijk niet waar. We regelen echter alles zelf
|
||||
THIS_FILE = "appl/api/api_contracts.asp";
|
||||
|
||||
// Session("logging")=1;
|
||||
|
||||
%>
|
||||
<!-- #include file="../Shared/common.inc" -->
|
||||
<!-- #include file="./api2.inc" -->
|
||||
<!-- #include file="../Shared/json2.js" -->
|
||||
<!-- #include file="./model_contracts.inc" -->
|
||||
<%
|
||||
api2.process(model_contracts);
|
||||
%>
|
||||
@@ -1,27 +0,0 @@
|
||||
<%@ language = "JavaScript" %>
|
||||
<% /*
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File: api_floors.asp
|
||||
|
||||
Description: ALG_VERDIEPING API
|
||||
Parameters:
|
||||
Context: Door een remote systeem (geen persoon) om info uit FACILITOR te halen aan te roepen
|
||||
|
||||
Notes:
|
||||
*/
|
||||
DOCTYPE_Disable = true;
|
||||
ANONYMOUS_Allowed = 1; // Eigenlijk niet waar. We regelen echter alles zelf
|
||||
THIS_FILE = "appl/api/api_floors.asp";
|
||||
|
||||
// Session("logging")=1;
|
||||
|
||||
%>
|
||||
<!-- #include file="../Shared/common.inc" -->
|
||||
<!-- #include file="./api2.inc" -->
|
||||
<!-- #include file="../Shared/json2.js" -->
|
||||
<!-- #include file="./model_floors.inc" -->
|
||||
<%
|
||||
api2.process(model_floors);
|
||||
%>
|
||||
@@ -1,27 +0,0 @@
|
||||
<%@ language = "JavaScript" %>
|
||||
<% /*
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File: api_invoices.asp
|
||||
|
||||
Description: FIN_FACTUUR API
|
||||
Parameters:
|
||||
Context: Door een remote systeem (geen persoon) om info uit FACILITOR te halen aan te roepen
|
||||
|
||||
Notes:
|
||||
*/
|
||||
DOCTYPE_Disable = true;
|
||||
ANONYMOUS_Allowed = 1; // Eigenlijk niet waar. We regelen echter alles zelf
|
||||
THIS_FILE = "appl/api/api_invoices.asp";
|
||||
|
||||
// Session("logging")=1;
|
||||
|
||||
%>
|
||||
<!-- #include file="../Shared/common.inc" -->
|
||||
<!-- #include file="../Shared/json2.js" -->
|
||||
<!-- #include file="./api2.inc" -->
|
||||
<!-- #include file="./model_invoices.inc" -->
|
||||
<%
|
||||
api2.process(model_invoices);
|
||||
%>
|
||||
@@ -1,27 +0,0 @@
|
||||
<%@ language = "JavaScript" %>
|
||||
<% /*
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File: api_issues.asp
|
||||
|
||||
Description: MLD_MELDING API
|
||||
Parameters:
|
||||
Context: Door een remote systeem (geen persoon) om info uit FACILITOR te halen aan te roepen
|
||||
|
||||
Notes:
|
||||
*/
|
||||
DOCTYPE_Disable = true;
|
||||
ANONYMOUS_Allowed = 1; // Eigenlijk niet waar. We regelen echter alles zelf
|
||||
THIS_FILE = "appl/api/api_issues.asp";
|
||||
|
||||
// Session("logging")=1;
|
||||
|
||||
%>
|
||||
<!-- #include file="../Shared/common.inc" -->
|
||||
<!-- #include file="./api2.inc" -->
|
||||
<!-- #include file="../Shared/json2.js" -->
|
||||
<!-- #include file="./model_issues.inc" -->
|
||||
<%
|
||||
api2.process(model_issues);
|
||||
%>
|
||||
@@ -1,25 +0,0 @@
|
||||
<%@ language = "JavaScript" %>
|
||||
<% /*
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File: api_objects.asp
|
||||
|
||||
Description: INS_DEEL API
|
||||
Parameters:
|
||||
Context: Door een remote systeem (geen persoon) om info uit FACILITOR te halen aan te roepen
|
||||
|
||||
Notes:
|
||||
*/
|
||||
DOCTYPE_Disable = true;
|
||||
ANONYMOUS_Allowed = 1; // Eigenlijk niet waar. We regelen echter alles zelf
|
||||
THIS_FILE = "appl/api/api_objects.asp";
|
||||
|
||||
%>
|
||||
<!-- #include file="../Shared/common.inc" -->
|
||||
<!-- #include file="./api2.inc" -->
|
||||
<!-- #include file="../Shared/json2.js" -->
|
||||
<!-- #include file="./model_objects.inc" -->
|
||||
<%
|
||||
api2.process(model_objects);
|
||||
%>
|
||||
@@ -1,27 +0,0 @@
|
||||
<%@ language = "JavaScript" %>
|
||||
<% /*
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File: api_orders.asp
|
||||
|
||||
Description: MLD_OPDR API
|
||||
Parameters:
|
||||
Context: Door een remote systeem (geen persoon) om info uit FACILITOR te halen aan te roepen
|
||||
|
||||
Notes:
|
||||
*/
|
||||
DOCTYPE_Disable = true;
|
||||
ANONYMOUS_Allowed = 1; // Eigenlijk niet waar. We regelen echter alles zelf
|
||||
THIS_FILE = "appl/api/api_orders.asp";
|
||||
|
||||
// Session("logging")=1;
|
||||
|
||||
%>
|
||||
<!-- #include file="../Shared/common.inc" -->
|
||||
<!-- #include file="./api2.inc" -->
|
||||
<!-- #include file="../Shared/json2.js" -->
|
||||
<!-- #include file="./model_orders.inc" -->
|
||||
<%
|
||||
api2.process(model_orders);
|
||||
%>
|
||||
@@ -1,24 +0,0 @@
|
||||
<%@ language = "JavaScript" %>
|
||||
<% /*
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File: api_reservableconsumables.asp
|
||||
|
||||
Description: RES_ARTIKEL API
|
||||
Parameters:
|
||||
Context: Door een remote systeem (geen persoon) om info uit FACILITOR te halen aan te roepen
|
||||
|
||||
Notes:
|
||||
*/
|
||||
DOCTYPE_Disable = true;
|
||||
ANONYMOUS_Allowed = 1; // Eigenlijk niet waar. We regelen echter alles zelf
|
||||
THIS_FILE = "appl/api2/api_reservableconsumables.asp";
|
||||
%>
|
||||
<!-- #include file="../Shared/common.inc" -->
|
||||
<!-- #include file="../Shared/json2.js" -->
|
||||
<!-- #include file="./api2.inc" -->
|
||||
<!-- #include file="./model_reservableconsumables.inc" -->
|
||||
<%
|
||||
api2.process(model_reservableconsumables);
|
||||
%>
|
||||
@@ -1,25 +0,0 @@
|
||||
<%@ language = "JavaScript" %>
|
||||
<% /*
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File: api_reservableequipment.asp
|
||||
|
||||
Description: RES_DEEL API
|
||||
Parameters:
|
||||
Context: Door een remote systeem (geen persoon) om info uit FACILITOR te halen aan te roepen
|
||||
|
||||
Notes:
|
||||
*/
|
||||
DOCTYPE_Disable = true;
|
||||
ANONYMOUS_Allowed = 1; // Eigenlijk niet waar. We regelen echter alles zelf
|
||||
THIS_FILE = "appl/api/api_reservableequipment.asp";
|
||||
%>
|
||||
<!-- #include file="../Shared/common.inc" -->
|
||||
<!-- #include file="../Shared/json2.js" -->
|
||||
<!-- #include file="./api2.inc" -->
|
||||
<!-- #include file="../res/res.inc" -->
|
||||
<!-- #include file="./model_reservableequipment.inc" -->
|
||||
<%
|
||||
api2.process(model_reservableequipment);
|
||||
%>
|
||||
@@ -14,11 +14,13 @@
|
||||
DOCTYPE_Disable = true;
|
||||
ANONYMOUS_Allowed = 1; // Eigenlijk niet waar. We regelen echter alles zelf
|
||||
THIS_FILE = "appl/api/api_reservablerooms.asp";
|
||||
|
||||
// Session("logging")=1;
|
||||
|
||||
%>
|
||||
<!-- #include file="../Shared/common.inc" -->
|
||||
<!-- #include file="./api2.inc" -->
|
||||
<!-- #include file="../Shared/json2.js" -->
|
||||
<!-- #include file="../res/res.inc"-->
|
||||
<!-- #include file="./model_reservablerooms.inc" -->
|
||||
<%
|
||||
api2.process(model_reservablerooms);
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
<%@ language = "JavaScript" %>
|
||||
<% /*
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File: api_reservationconsumables.asp
|
||||
|
||||
Description: RES_RSV_ARTIKEL API
|
||||
Parameters:
|
||||
Context: Door een remote systeem (geen persoon) om info uit FACILITOR te halen aan te roepen
|
||||
|
||||
Notes:
|
||||
*/
|
||||
DOCTYPE_Disable = true;
|
||||
ANONYMOUS_Allowed = 1; // Eigenlijk niet waar. We regelen echter alles zelf
|
||||
THIS_FILE = "appl/api2/api_reservationconsumables.asp";
|
||||
%>
|
||||
<!-- #include file="../Shared/common.inc" -->
|
||||
<!-- #include file="../Shared/json2.js" -->
|
||||
<!-- #include file="./api2.inc" -->
|
||||
<!-- #include file="../res/res.inc"-->
|
||||
<!-- #include file="./model_reservationconsumables.inc" -->
|
||||
<%
|
||||
api2.process(model_reservationconsumables);
|
||||
%>
|
||||
@@ -1,25 +0,0 @@
|
||||
<%@ language = "JavaScript" %>
|
||||
<% /*
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File: api_reservationequipment.asp
|
||||
|
||||
Description: RES_RSV_DEEL API
|
||||
Parameters:
|
||||
Context: Door een remote systeem (geen persoon) om info uit FACILITOR te halen aan te roepen
|
||||
|
||||
Notes:
|
||||
*/
|
||||
DOCTYPE_Disable = true;
|
||||
ANONYMOUS_Allowed = 1; // Eigenlijk niet waar. We regelen echter alles zelf
|
||||
THIS_FILE = "appl/api2/api_reservationequipment.asp";
|
||||
%>
|
||||
<!-- #include file="../Shared/common.inc" -->
|
||||
<!-- #include file="../Shared/json2.js" -->
|
||||
<!-- #include file="./api2.inc" -->
|
||||
<!-- #include file="../res/res.inc"-->
|
||||
<!-- #include file="./model_reservationequipment.inc" -->
|
||||
<%
|
||||
api2.process(model_reservationequipment);
|
||||
%>
|
||||
@@ -19,8 +19,8 @@
|
||||
|
||||
%>
|
||||
<!-- #include file="../Shared/common.inc" -->
|
||||
<!-- #include file="../Shared/json2.js" -->
|
||||
<!-- #include file="./api2.inc" -->
|
||||
<!-- #include file="../Shared/json2.js" -->
|
||||
<!-- #include file="./model_reservations.inc" -->
|
||||
<%
|
||||
api2.process(model_reservations);
|
||||
|
||||
@@ -1,62 +0,0 @@
|
||||
<% /*
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File: model_apis.inc
|
||||
|
||||
Description: Api model. Dit bestand heeft niets met interfacing te maken
|
||||
maar werkt uitsluitend op JSON-data
|
||||
Parameters:
|
||||
Context:
|
||||
|
||||
Notes:
|
||||
*/
|
||||
|
||||
%>
|
||||
<%
|
||||
model_apis =
|
||||
{
|
||||
table: null,
|
||||
primary: null,
|
||||
records_name: "apis",
|
||||
record_name: "api",
|
||||
fields: [],
|
||||
REST_GET: function _GET(params)
|
||||
{
|
||||
var autfunction = "WEB_PRSSYS"; // is dit niet erg streng?
|
||||
params.authparams = user.checkAutorisation(autfunction, null, null, true); // pessimistisch
|
||||
|
||||
var api2_names = [];
|
||||
|
||||
var fullpath = Server.MapPath("./appl/api2");
|
||||
var objFso = new ActiveXObject("Scripting.FileSystemObject");
|
||||
var objFiles = objFso.GetFolder(fullpath);
|
||||
var allFiles = new Enumerator(objFiles.files);
|
||||
for (; !allFiles.atEnd(); allFiles.moveNext())
|
||||
{
|
||||
var attFile = allFiles.item();
|
||||
|
||||
var ext = objFso.GetExtensionName(attFile);
|
||||
if ((attFile.name.indexOf("api_") == 0) && (ext == "asp"))
|
||||
{
|
||||
var name = attFile.name.substring(4, attFile.name.indexOf(".asp"))
|
||||
api2_names.push({ id: name });
|
||||
}
|
||||
// Graag zou ik er ook info instoppen over het model zelf.
|
||||
// Dan moet ik echter alle model_xxxx.inc bestanden includen wat ik niet wil.
|
||||
// Daarom moet je zelf maar /api2/xxxx.api aanroepen voor de details
|
||||
}
|
||||
|
||||
return api2_names;
|
||||
},
|
||||
PUT: function (params) /* update api */
|
||||
{
|
||||
},
|
||||
POST: function (params) /* new api */
|
||||
{
|
||||
},
|
||||
DELETE: function (params) /* delete api */
|
||||
{
|
||||
}
|
||||
}
|
||||
%>
|
||||
@@ -14,18 +14,17 @@
|
||||
|
||||
%>
|
||||
<!-- #include file="../Shared/discxalg3d.inc"-->
|
||||
<!-- #include file="../bez/bez.inc" -->
|
||||
<!-- #include file="./model_visitors.inc" -->
|
||||
<%
|
||||
function afs_alg_onrgoed_keys(jsondata)
|
||||
{
|
||||
// TODO: key-check, auth check
|
||||
if (jsondata.room > 0)
|
||||
return jsondata.room;
|
||||
if (jsondata.floor > 0)
|
||||
return jsondata.floor;
|
||||
if (jsondata.building > 0)
|
||||
return jsondata.building;
|
||||
if (jsondata.room && jsondata.room.id > 0)
|
||||
return jsondata.room.id;
|
||||
if (jsondata.floor && jsondata.floor.id > 0)
|
||||
return jsondata.floor.id;
|
||||
if (jsondata.building && jsondata.building.id > 0)
|
||||
return jsondata.building.id;
|
||||
return null;
|
||||
};
|
||||
|
||||
@@ -37,8 +36,8 @@ model_appointments =
|
||||
records_name: "appointments",
|
||||
record_name: "appointment",
|
||||
fields: [{ name: "id", dbs: "bez_afspraak_key", typ: "key", filter: "exact" },
|
||||
{ name: "from", dbs: "bez_afspraak_datum", typ: "datetime", track: L("lcl_vis_start_date")},
|
||||
{ name: "to", dbs: "bez_afspraak_eind", typ: "datetime", track: L("lcl_vis_end_date") },
|
||||
{ name: "from", dbs: "bez_afspraak_datum", typ: "datetime"},
|
||||
{ name: "to", dbs: "bez_afspraak_eind", typ: "datetime"},
|
||||
{ name: "description", dbs: "bez_afspraak_opmerking", typ: "varchar"},
|
||||
{ name: "action", dbs: "bez_actie_key", typ: "key", foreign: "bez_actie"},
|
||||
{ name: "location", dbs: "alg_locatie_key", typ: "key", foreign: "alg_locatie"},
|
||||
@@ -62,8 +61,7 @@ model_appointments =
|
||||
var query = api2.sqlfields(params, model_appointments );
|
||||
query.wheres.push("(bez_afspraak_contact_key = " + user_key // Altijd fe vooralnog
|
||||
+ " OR bez_afspraak_host_key = " + user_key + ")");
|
||||
if (!params.filter.id)
|
||||
query.wheres.push("bez_afspraak_datum BETWEEN SYSDATE - " + S("facilitiespast_bez") + " AND SYSDATE + " + S("facilitiesfuture_bez"));
|
||||
query.wheres.push("bez_afspraak_datum BETWEEN SYSDATE - " + S("facilitiespast_bez") + " AND SYSDATE + " + S("facilitiesfuture_bez"));
|
||||
|
||||
query.tables.push("alg_v_allonroerendgoed");
|
||||
query.wheres.push("alg_v_allonroerendgoed.alg_onroerendgoed_keys(+) = bez_afspraak.alg_onrgoed_keys");
|
||||
@@ -75,52 +73,22 @@ model_appointments =
|
||||
+ " FROM " + query.tables.join(", ")
|
||||
+ " WHERE " + query.wheres.join(" AND " )
|
||||
+ " ORDER BY bez_afspraak_datum, bez_afspraak.bez_afspraak_key";
|
||||
|
||||
__DoLog(sql);
|
||||
var json = api2.sql2json (params, sql, model_appointments );
|
||||
|
||||
return json;
|
||||
},
|
||||
|
||||
_validate_fields: function (fields, params, jsondata) /* valideer fields, alle constraints die niet door de database worden afgevangen */
|
||||
{
|
||||
// TODO: vis_fe_afspraak_limiet en vis_afspraak_limiet controleren
|
||||
if (jsondata.appointment.from < new Date().midnight())
|
||||
abort_with_warning(L("lcl_vis_error_date"));
|
||||
if (jsondata.appointment.from >= jsondata.appointment.to)
|
||||
abort_with_warning(L("lcl_vis_error_date"));
|
||||
|
||||
if ("action" in jsondata.appointment)
|
||||
{
|
||||
// TODO: mag hij? Of controleren we dat in _validate_fields
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!params.isNew)
|
||||
{
|
||||
// Pak de default actie of de alfabetisch eerste
|
||||
var sqla = "SELECT bsez_actie_key"
|
||||
+ " , bez_actie_omschrijving"
|
||||
+ " FROM bez_actie"
|
||||
+ " ORDER BY bez_actie_default DESC NULLS LAST, bez_actie_omschrijving";
|
||||
|
||||
var oRs = Oracle.Execute(sqla);
|
||||
fields.push({ dbs: "bez_actie_key", typ: "key", val: oRs("bez_actie_key").Value });
|
||||
oRs.Close()
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
REST_PUT: function (params, jsondata, the_key) /* update appointment */
|
||||
{
|
||||
var fields = api2.update_fields(params, model_appointments, jsondata); // Build updater
|
||||
model_appointments._validate_fields(fields, params, jsondata);
|
||||
|
||||
// bezUpd heeft na afloop eventueel oldjsvals
|
||||
var wheres = [" bez_afspraak_key = " + the_key];
|
||||
wheres.push("(bez_afspraak_contact_key = " + user_key // Altijd fe vooralnog
|
||||
+ " OR bez_afspraak_host_key = " + user_key + ")");
|
||||
var bezUpd = buildTrackingUpdate("bez_afspraak", wheres.join(" AND " ), fields, { noValidateToken: true });
|
||||
__DoLog(bezUpd.sql);
|
||||
Oracle.Execute(bezUpd.sql);
|
||||
|
||||
var beztrack = api2.process_includes(params, model_appointments, jsondata, the_key);
|
||||
@@ -129,43 +97,38 @@ model_appointments =
|
||||
//var result = saveBezoekers(afspr_key, -1, { urole: urole, loctimechanged: changed });
|
||||
//if (result.beztrack && result.beztrack.length > 0)
|
||||
//bezUpd.trackarray.push(result.beztrack.join("\n"));
|
||||
if (bezUpd && bezUpd.trackarray && (bezUpd.trackarray.length)) {
|
||||
bez.trackafspraakupdate(the_key, L("lcl_bez_is_bezupdtrack").format(the_key) + "\n" + bezUpd.trackarray.join("\n"));
|
||||
}
|
||||
|
||||
return { key: the_key };
|
||||
return model_appointments.REST_GET(params); // resulterende data weer terug
|
||||
},
|
||||
REST_POST: function (params, jsondata) /* new appointment */
|
||||
{
|
||||
params.isNew = true; // negeer eventuele bestaande keys
|
||||
|
||||
var fields = api2.update_fields(params, model_appointments, jsondata); // Build updater
|
||||
model_appointments._validate_fields(fields, params, jsondata);
|
||||
|
||||
fields.push({ dbs: "bez_afspraak_key", typ: "key", seq: "bez_s_bez_afspraak_key" });
|
||||
fields.push({ dbs: "bez_afspraak_host_key", typ: "key", val: user_key });
|
||||
fields.push({ dbs: "bez_afspraak_contact_key", typ: "key", val: user_key });
|
||||
|
||||
var bezIns = buildInsert("bez_afspraak", fields, { noValidateToken: true });
|
||||
var afs_key = bezIns.sequences["bez_afspraak_key"];
|
||||
__DoLog(bezIns.sql);
|
||||
Oracle.Execute(bezIns.sql);
|
||||
|
||||
// TODO: Tracking
|
||||
params.isNew = true; // negeer eventuele bestaande keys
|
||||
var beztrack = api2.process_includes(params, model_appointments, jsondata, afs_key);
|
||||
|
||||
shared.trackaction("BEZMUT", afs_key); // Er bestaat geen echte BEZNEW tracking
|
||||
|
||||
return { key: afs_key };
|
||||
//var bezUpd = {trackarray: [L("lcl_bez_is_bezadd") + ": " + beznaam + "/" + bed]};
|
||||
params.filter.id = afs_key;
|
||||
return model_appointments.REST_GET(params); // resulterende data weer terug
|
||||
},
|
||||
REST_DELETE: function (params, jsondata, the_key) /* delete appointment */
|
||||
{
|
||||
{
|
||||
var wheres = [" bez_afspraak_key = " + the_key];
|
||||
wheres.push("(bez_afspraak_contact_key = " + user_key // Altijd fe vooralnog
|
||||
+ " OR bez_afspraak_host_key = " + user_key + ")");
|
||||
var sql = "DELETE FROM bez_afspraak"
|
||||
+ " WHERE " + wheres.join(" AND " );
|
||||
|
||||
__DoLog(sql);
|
||||
Oracle.Execute(sql);
|
||||
// Geen tracking (mogelijk) omdat het record echt is verwijderd
|
||||
}
|
||||
}
|
||||
}
|
||||
%>
|
||||
@@ -26,7 +26,7 @@ model_buildings =
|
||||
{ name: "name", dbs: "alg_gebouw_naam", typ: "varchar", filter: "like" },
|
||||
// is afgeleid gegeven { name: "description", dbs: "alg_gebouw_omschrijving", typ: "varchar"},
|
||||
{ name: "visitable" , dbs: "alg_gebouw_bez", typ: "check", filter: "exact"},
|
||||
{ name: "location", dbs: "alg_locatie_key", typ: "key", foreign: "alg_locatie", filter: "exact"},
|
||||
{ name: "location", dbs: "alg_locatie_key", typ: "key", foreign: "alg_locatie"},
|
||||
{ name: "coordinate_x", dbs: "alg_gebouw_x", typ: "number"},
|
||||
{ name: "coordinate_y", dbs: "alg_gebouw_y", typ: "number"},
|
||||
],
|
||||
|
||||
@@ -1,79 +0,0 @@
|
||||
<% /*
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File: model_companies.inc
|
||||
|
||||
Description: Bedrijven model. Dit bestand heeft niets met interfacing te maken
|
||||
maar werkt uitsluitend op JSON-data
|
||||
Parameters:
|
||||
Context:
|
||||
|
||||
Notes:
|
||||
*/
|
||||
|
||||
model_companies =
|
||||
{
|
||||
table: "prs_bedrijf",
|
||||
primary: "prs_bedrijf_key",
|
||||
records_name: "companies",
|
||||
record_name: "company",
|
||||
fields: [{ name: "id", dbs: "prs_bedrijf_key" , typ: "key", filter: "exact" },
|
||||
{ name: "name", dbs: "prs_bedrijf_naam" , typ: "varchar", filter: "like" },
|
||||
{ name: "postaddress", dbs: "prs_bedrijf_post_adres" , typ: "varchar", filter: "like" },
|
||||
{ name: "postzipcode", dbs: "prs_bedrijf_post_postcode" , typ: "varchar", filter: "like" },
|
||||
{ name: "postcity", dbs: "prs_bedrijf_post_plaats" , typ: "varchar", filter: "like" },
|
||||
{ name: "postcountry", dbs: "prs_bedrijf_post_land" , typ: "varchar", filter: "like" },
|
||||
{ name: "visitaddress", dbs: "prs_bedrijf_bezoek_adres" , typ: "varchar", filter: "like" },
|
||||
{ name: "visitzipcode", dbs: "prs_bedrijf_bezoek_postcode" , typ: "varchar", filter: "like" },
|
||||
{ name: "visitcity", dbs: "prs_bedrijf_bezoek_plaats" , typ: "varchar", filter: "like" },
|
||||
{ name: "visitcountry", dbs: "prs_bedrijf_bezoek_land" , typ: "varchar", filter: "like" },
|
||||
{ name: "phone", dbs: "prs_bedrijf_telefoon" , typ: "varchar", filter: "like" },
|
||||
{ name: "phone2", dbs: "prs_bedrijf_telefoon2" , typ: "varchar", filter: "like" }, /*?*/
|
||||
{ name: "contactname", dbs: "prs_bedrijf_contact_persoon" , typ: "varchar", filter: "like" },
|
||||
{ name: "contactphone", dbs: "prs_bedrijf_contact_telefoon", typ: "varchar", filter: "like" },
|
||||
{ name: "remark", dbs: "prs_bedrijf_opmerking" , typ: "varchar", filter: "like" },
|
||||
{ name: "remark2", dbs: "prs_bedrijf_opmerking2" , typ: "varchar", filter: "like" }, /*?*/
|
||||
{ name: "hourrate", dbs: "prs_bedrijf_uurloon" , typ: "float", filter: "like" },
|
||||
{ name: "code", dbs: "prs_leverancier_nr" , typ: "varchar", filter: "like" },
|
||||
{ name: "agreement", dbs: "prs_overeenkomst_nr" , typ: "varchar", filter: "like" },
|
||||
{ name: "agreementdate",dbs: "prs_overeenkomst_datum" , typ: "date", filter: "range" },
|
||||
{ name: "isinternal", dbs: "prs_bedrijf_intern" , typ: "varchar", filter: "exact" },
|
||||
{ name: "issupplier", dbs: "prs_bedrijf_leverancier" , typ: "varchar", filter: "exact" },
|
||||
{ name: "isexecutor", dbs: "prs_bedrijf_uitvoerende" , typ: "varchar", filter: "exact" }, /*naam?*/
|
||||
{ name: "iscontractor", dbs: "prs_bedrijf_contract" , typ: "varchar", filter: "exact" },
|
||||
{ name: "isrenter", dbs: "prs_bedrijf_huurder" , typ: "varchar", filter: "exact" },
|
||||
{ name: "email", dbs: "prs_bedrijf_email" , typ: "varchar", filter: "like" }
|
||||
],
|
||||
REST_GET: function _GET(params)
|
||||
{
|
||||
var autfunction = "WEB_RELMAN";
|
||||
params.authparams = user.checkAutorisation(autfunction, null, null, true); // pessimistisch
|
||||
|
||||
// TODO: Add authorization
|
||||
var query = api2.sqlfields(params, model_companies);
|
||||
query.wheres.push("prs_bedrijf_verwijder IS NULL");
|
||||
|
||||
var wheres = api2.sqlfilter(params, model_companies)
|
||||
query.wheres = query.wheres.concat(wheres);
|
||||
|
||||
var sql = "SELECT " + query.selects.join(", ")
|
||||
+ " FROM " + query.tables.join(", ")
|
||||
+ " WHERE " + query.wheres.join(" AND " )
|
||||
+ " ORDER BY prs_bedrijf_naam";
|
||||
|
||||
var json = api2.sql2json (params, sql, model_companies);
|
||||
|
||||
return json;
|
||||
},
|
||||
PUT: function (params) /* update company */
|
||||
{
|
||||
},
|
||||
POST: function (params) /* new company */
|
||||
{
|
||||
},
|
||||
DELETE: function (params) /* delete company */
|
||||
{
|
||||
}
|
||||
}
|
||||
%>
|
||||
@@ -1,112 +0,0 @@
|
||||
<% /*
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File: model_contracts.inc
|
||||
|
||||
Description: contract model. Dit bestand heeft niets met interfacing te maken
|
||||
maar werkt uitsluitend op JSON-data
|
||||
Parameters:
|
||||
Context:
|
||||
|
||||
Notes: Zonder filters worden de lopende actieve contracten opgeleverd (binnen scope)
|
||||
TODO: 3D autorisatie, ook fe/eigen conracten vs CNTUSE/CNTMAN
|
||||
*/
|
||||
%>
|
||||
<!-- #include file="../Shared/discx3d.inc" -->
|
||||
<!-- #include file="../cnt/cnt.inc" -->
|
||||
<%
|
||||
|
||||
model_contracts =
|
||||
{
|
||||
module: "CNT",
|
||||
table: "cnt_contract",
|
||||
primary: "cnt_contract_key",
|
||||
records_name: "contracts",
|
||||
record_name: "contract",
|
||||
fields: [{ name: "id", dbs: "cnt_contract_key", typ: "key", filter: "exact" },
|
||||
{ name: "name", dbs: "cnt_contract_nummer_intern", typ: "varchar", filter: "exact" },
|
||||
{ name: "description", dbs: "cnt_contract_omschrijving", typ: "varchar", filter: "like" },
|
||||
{ name: "startdate", dbs: "cnt_contract_looptijd_van", typ: "date", track: L("lcl_cnt_date_start"), filter: "range" },
|
||||
{ name: "reminderdate", dbs: "cnt_contract_rappeldatum", typ: "date", track: L("lcl_cnt_rappel_date"), filter: "range",
|
||||
sql: "cnt.cnt_getRappeldatum(cnt_contract.cnt_contract_key)" },
|
||||
{ name: "canceldate", dbs: "cnt_contract_opzegdatum", typ: "date", track: L("lcl_cnt_cancel_date"), filter: "range",
|
||||
sql: "cnt.cnt_getOpzegdatum(cnt_contract.cnt_contract_key)" },
|
||||
{ name: "enddate", dbs: "cnt_contract_looptijd_tot", typ: "date", track: L("lcl_cnt_enddate"), filter: "range" },
|
||||
{ name: "contractor", dbs: "cnt_prs_bedrijf_key", typ: "key", foreign: "prs_bedrijf", track: L("lcl_cnt_contractant"), filter: "exact" },
|
||||
{ name: "status", dbs: "cnt_contract_status", typ: "key", foreign: cnt.getcntstatustext, track: L("lcl_status"), filter: "exact" },
|
||||
{ name: "department", dbs: "prs_afdeling_key_eig", typ: "key", foreign: "prs_afdeling", track: L("lcl_cnt_owner"), filter: "exact" },
|
||||
{ name: "service", dbs: "prs_dienst_key", typ: "key", foreign: "prs_dienst", track: L("lcl_prs_companies_dienst"), filter: "exact" },
|
||||
{ name: "contracttype", dbs: "ins_discipline_key", typ: "key", foreign: "cnt_discipline", track: L("lcl_cnt_srttype"), filter: "exact" }
|
||||
],
|
||||
includes: {
|
||||
},
|
||||
|
||||
REST_GET: function _GET(params)
|
||||
{
|
||||
var scope = getQParamSafe("scope", "fe");
|
||||
var autfunction = { fe : "WEB_CNTUSE", fo : "WEB_CNTUSE", bo : "WEB_CNTMAN"} [scope]; /* gokje; fe hoefde vroeger geen rechten voor eigen contracten...*/
|
||||
params.authparams = user.checkAutorisation(autfunction, null, null, true); /* pessimistic */
|
||||
|
||||
// Hier kom je niet meer terecht als bovenstaande autorisatiecheck niet tot succes leidt.
|
||||
|
||||
var query = api2.sqlfields(params, model_contracts );
|
||||
query.wheres.push("cnt_contract_verwijder IS NULL");
|
||||
|
||||
if (scope == "fe")
|
||||
{
|
||||
query.wheres.push("prs_perslid_key_eig=" + user_key + " OR prs_perslid_key_beh=" + user_key);
|
||||
}
|
||||
|
||||
if (!params.filter.id)
|
||||
{
|
||||
if (!params.filter.status)
|
||||
{
|
||||
/* Limitation: if no status filter, then default to the active statusses (0) */
|
||||
query.wheres.push("cnt_contract_status = 0");
|
||||
}
|
||||
if (!(params.filter.startdate || params.filter.reminderdate || params.filter.canceldate || params.filter.enddate))
|
||||
{
|
||||
/* Limitation: if no date filters, then default to the active contracts */
|
||||
query.wheres.push("SYSDATE BETWEEN cnt_contract_looptijd_van AND cnt_contract_looptijd_tot");
|
||||
}
|
||||
}
|
||||
|
||||
// Ik zeg in deze versie: autorisatiescope op contractsoort (discipline) en nog maar ns niet op ALG of PRS. Akkoord?
|
||||
query.wheres.push("ins_discipline_key IN "
|
||||
+ "(SELECT ins_discipline_key FROM fac_v_webgebruiker"
|
||||
+ " WHERE fac_functie_key = (SELECT fac_functie_key FROM fac_functie WHERE fac_functie_code="+safe.quoted_sql(autfunction)+")"
|
||||
+ " AND prs_perslid_key="+user_key+" AND (fac_gebruiker_prs_level_read<9 OR fac_gebruiker_alg_level_read<9))");
|
||||
|
||||
var wheres = api2.sqlfilter(params, model_contracts);
|
||||
query.wheres = query.wheres.concat(wheres);
|
||||
|
||||
var sql = "SELECT " + query.selects.join(", ")
|
||||
+ " FROM " + query.tables.join(", ")
|
||||
+ " WHERE " + query.wheres.join(" AND " );
|
||||
|
||||
sql += " ORDER BY cnt_contract_key";
|
||||
|
||||
var json = api2.sql2json (params, sql, model_contracts );
|
||||
|
||||
return json;
|
||||
},
|
||||
_analyze_fields: function (fields, params, jsondata) /* analyseer inkomende data, common voor PUT en POST */
|
||||
{
|
||||
},
|
||||
_validate_fields: function (fields, params, jsondata) /* valideer fields, alle constraints die niet door de database worden afgevangen */
|
||||
{
|
||||
},
|
||||
|
||||
REST_PUT: function (params, jsondata, the_key) /* update contract */
|
||||
{
|
||||
},
|
||||
REST_POST: function (params, jsondata) /* new contract */
|
||||
{
|
||||
},
|
||||
|
||||
REST_DELETE: function (params, jsondata, the_key) /* delete contract */
|
||||
{
|
||||
}
|
||||
}
|
||||
%>
|
||||
@@ -1,13 +0,0 @@
|
||||
<% /*
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File: model_departments.inc
|
||||
|
||||
Description: department model. Dit bestand heeft niets met interfacing te maken
|
||||
maar werkt uitsluitend op JSON-data
|
||||
Parameters:
|
||||
Context:
|
||||
|
||||
Notes: Dummy placeholder
|
||||
*/
|
||||
@@ -22,6 +22,7 @@ model_districts =
|
||||
records_name: "districts",
|
||||
record_name: "district",
|
||||
fields: [{ name: "id", dbs: "alg_district_key", typ: "key", filter: "exact" },
|
||||
//{ name: "name", dbs: "alg_district_naam", typ: "varchar", filter: "like" },
|
||||
{ name: "name", dbs: "alg_district_omschrijving", typ: "varchar"},
|
||||
{ name: "region", dbs: "alg_regio_key", typ: "key", foreign: "alg_regio"}
|
||||
],
|
||||
|
||||
@@ -1,81 +0,0 @@
|
||||
<% /*
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File: model_floors.inc
|
||||
|
||||
Description: floor model. Dit bestand heeft niets met interfacing te maken
|
||||
maar werkt uitsluitend op JSON-data
|
||||
Parameters:
|
||||
Context:
|
||||
|
||||
Notes: Eerste opzet, (geaggregeerde) data als oppervlakte e.d. is voorstelbaar
|
||||
*/
|
||||
|
||||
%>
|
||||
<!-- #include file="../Shared/discxalg3d.inc"-->
|
||||
<%
|
||||
model_floors =
|
||||
{
|
||||
table: "alg_verdieping",
|
||||
primary: "alg_verdieping_key",
|
||||
records_name: "floors",
|
||||
record_name: "floor",
|
||||
fields: [{ name: "id", dbs: "alg_verdieping_key", typ: "key", filter: "exact" },
|
||||
{ name: "name", dbs: "alg_verdieping_omschrijving", typ: "varchar"},
|
||||
{ name: "code", dbs: "alg_verdieping_code", typ: "varchar", filter: "exact"},
|
||||
{ name: "sequence", dbs: "alg_verdieping_volgnr", typ: "number", filter: "exact"}, /* range zou ook kunnen */
|
||||
{ name: "building", dbs: "alg_gebouw_key", typ: "key", foreign: "alg_gebouw"}
|
||||
],
|
||||
REST_GET: function _GET(params)
|
||||
{
|
||||
var urole = "fe"; // TODO: Moet echt niet ter zake doen
|
||||
var autfunction = urole == "fe"? "WEB_ALGUSE" : "WEB_ALGMAN";
|
||||
params.authparams = user.checkAutorisation(autfunction, null, null, true); // pessimistisch
|
||||
|
||||
var query = api2.sqlfields(params, model_floors);
|
||||
query.wheres.push("alg_verdieping_verwijder IS NULL");
|
||||
|
||||
if ( params.authparams.ALGreadlevel > -1 )
|
||||
{ // Er is een scope-beperking van kracht
|
||||
query.wheres.push("alg_verdieping_key IN "
|
||||
+ "(SELECT alg_verdieping_key FROM fac_v_my_floors "
|
||||
+ "WHERE prs_perslid_key="+user_key
|
||||
+ " AND niveau=" + params.authparams.ALGreadlevel + ")");
|
||||
}
|
||||
|
||||
var wheres = api2.sqlfilter(params, model_floors)
|
||||
query.wheres = query.wheres.concat(wheres);
|
||||
|
||||
var sql = "SELECT " + query.selects.join(", ")
|
||||
+ " FROM " + query.tables.join(", ")
|
||||
+ " WHERE " + query.wheres.join(" AND " )
|
||||
+ " ORDER BY alg_verdieping_omschrijving";
|
||||
|
||||
var json = api2.sql2json (params, sql, model_floors);
|
||||
|
||||
return json;
|
||||
},
|
||||
PUT: function (params) /* update floor */
|
||||
{
|
||||
},
|
||||
POST: function (params) /* new floor */
|
||||
{
|
||||
},
|
||||
DELETE: function (params, jsondata, the_key) /* delete floor */
|
||||
{
|
||||
var autfunction = "WEB_ALGMAN";
|
||||
// TODO: echte autorisatie
|
||||
params.authparams = user.checkAutorisation(autfunction, null, null, true); // pessimistisch
|
||||
if (params.authparams.ALGwritelevel)
|
||||
{
|
||||
var wheres = [" alg_verdieping_key = " + the_key];
|
||||
var sql = "UPDATE alg_verdieping SET alg_verdieping_verwijder = SYSDATE "
|
||||
+ " WHERE " + wheres.join(" AND " )
|
||||
+ " AND alg_verdieping_verwijder IS NULL";
|
||||
|
||||
// Pas als het safe is: Oracle.Execute(sql);
|
||||
}
|
||||
}
|
||||
}
|
||||
%>
|
||||
@@ -1,227 +0,0 @@
|
||||
<% /*
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File: model_invoicelines.inc
|
||||
|
||||
Description: Factuurregel model. Dit bestand heeft niets met interfacing te maken
|
||||
maar werkt uitsluitend op JSON-data
|
||||
Parameters:
|
||||
Context:
|
||||
|
||||
Notes: TODO: autorisaties voor scope=fo|bo
|
||||
TODO on demand: PUT/POST/DELETE
|
||||
*/
|
||||
|
||||
%>
|
||||
<!-- #include file="../Shared/discxalg3d.inc"-->
|
||||
<!-- #include file="../fin/fin.inc" -->
|
||||
<%
|
||||
|
||||
model_invoicelines =
|
||||
{
|
||||
module: "FIN",
|
||||
table: "fin_factuurregel",
|
||||
primary: "fin_factuurregel_key",
|
||||
records_name: "invoicelines",
|
||||
record_name: "invoiceline",
|
||||
fields: [{ name: "id", dbs: "fin_factuurregel_key", typ: "key", filter: "exact" },
|
||||
{ name: "name", dbs: "fin_factuurregel_omschrijving", typ: "varchar", track: L("lcl_descr"), filter: "like" },
|
||||
{ name: "line", dbs: "fin_factuurregel_nr", typ: "number" },
|
||||
{ name: "total", dbs: "fin_factuurregel_totaal", typ: "float", track: L("lcl_fin_total_sum_exBTW") },
|
||||
{ name: "vat", dbs: "fin_factuurregel_btw", typ: "float", track: L("lcl_fin_total_sum_inBTW") },
|
||||
{ name: "reference", dbs: "fin_factuurregel_referentie", typ: "varchar", track: L("lcl_fin_referencecode"), filter: "like" },
|
||||
{ name: "vatvalue", dbs: "fin_btwtabelwaarde_key", typ: "key", foreign: "fin_btwtabelwaarde", track: L("lcl_fin_btwtarief"), filter: "exact" },
|
||||
{ name: "costtype", dbs: "prs_kostensoort_key", typ: "key", foreign: "prs_kostensoort", track: L("lcl_shared_charge_type"), filter: "exact" }
|
||||
// niet terug linken{ name: "factuur", dbs: "fin_factuur_key", typ: "key", foreign: "fac_factuur", filter: "exact" }
|
||||
],
|
||||
|
||||
_pre_analyze_fields: function (params, jsondata) /* analyseer inkomende jsondata, common voor PUT en POST */
|
||||
{
|
||||
delete jsondata.line; // factuurregelnummer niet door de gebruiker laten zetten.
|
||||
},
|
||||
|
||||
_analyze_fields: function (fields, params, jsondata) /* analyseer inkomende data, common voor PUT en POST */
|
||||
{
|
||||
},
|
||||
|
||||
_validate_fields: function (fields, params, jsondata) /* valideer fields, alle constraints die niet door de database worden afgevangen */
|
||||
{
|
||||
//__Logj(jsondata);
|
||||
//var factuurregel_key = parseInt(jsondata.invoiceline.id);
|
||||
},
|
||||
|
||||
_synchronize_totals_sql: function (factuur_key)
|
||||
{
|
||||
// Redundante info bijwerken. Door dat hier te doen hebben we redelijk consistentie-garantie.
|
||||
var sql = " UPDATE fin_factuur ff"
|
||||
+ " SET fin_factuur_totaal = (SELECT SUM(fin_factuurregel_totaal)"
|
||||
+ " FROM fin_factuurregel fr"
|
||||
+ " WHERE fr.fin_factuur_key = ff.fin_factuur_key)"
|
||||
+ " , fin_factuur_totaal_btw = (SELECT SUM(fin_factuurregel_btw)"
|
||||
+ " FROM fin_factuurregel fr"
|
||||
+ " WHERE fr.fin_factuur_key = ff.fin_factuur_key)"
|
||||
+ " WHERE fin_factuur_key = " + factuur_key;
|
||||
return sql;
|
||||
},
|
||||
|
||||
_renumber_invoicelines_sql: function (factuur_key)
|
||||
{
|
||||
// Regels hernummeren zodat ze weer opeenvolgend zijn.
|
||||
var sql = "UPDATE fin_factuurregel"
|
||||
+ " SET fin_factuurregel_nr = ROWNUM"
|
||||
+ " WHERE fin_factuur_key = " + factuur_key;
|
||||
return sql;
|
||||
},
|
||||
|
||||
|
||||
REST_GET: function _GET(params)
|
||||
{
|
||||
var scope = getQParamSafe("scope", "fe");
|
||||
var autfunction = { fe : "WEB_FINUSE", fo : "WEB_FINFOF", bo : "WEB_FINBOF" } [scope];
|
||||
params.authparams = user.checkAutorisation(autfunction, null, null, true); // pessimistisch
|
||||
|
||||
var query = api2.sqlfields(params, model_invoicelines );
|
||||
var parentexists = ["f.fin_factuur_verwijder IS NULL"];
|
||||
|
||||
if (scope == "fe")
|
||||
{
|
||||
parentexists.push("f.prs_perslid_key_user=" + user_key);
|
||||
}
|
||||
else
|
||||
{
|
||||
// TODO: disc3d conditie voor de geldendende autfunction toevoegen
|
||||
}
|
||||
|
||||
if (parentexists.length)
|
||||
{
|
||||
var sqlparent = " EXISTS (SELECT 1"
|
||||
+ " FROM fin_factuur f"
|
||||
+ " WHERE f.fin_factuur_key = fin_factuurregel.fin_factuur_key"
|
||||
+ " AND " + parentexists.join(" AND ") + ")";
|
||||
query.wheres.push(sqlparent);
|
||||
}
|
||||
|
||||
var wheres = api2.sqlfilter(params, model_invoicelines);
|
||||
query.wheres = query.wheres.concat(wheres);
|
||||
|
||||
var sql = "SELECT " + query.selects.join(", ")
|
||||
+ " FROM " + query.tables.join(", ")
|
||||
+ " WHERE " + query.wheres.join(" AND " )
|
||||
+ " ORDER BY fin_factuurregel_nr";
|
||||
var json = api2.sql2json (params, sql, model_invoicelines );
|
||||
|
||||
return json;
|
||||
},
|
||||
|
||||
REST_PUT: function (params, jsondata, the_key) /* update invoiceline */
|
||||
{
|
||||
var finregel_key = the_key;
|
||||
model_invoicelines._pre_analyze_fields(params, jsondata);
|
||||
var fields = api2.update_fields(params, model_invoicelines, jsondata); // Build updater
|
||||
model_invoicelines._analyze_fields(fields, params, jsondata);
|
||||
model_invoicelines._validate_fields(fields, params, jsondata);
|
||||
//
|
||||
var sql = "SELECT fin_factuur_key"
|
||||
+ " FROM fin_factuurregel"
|
||||
+ " WHERE fin_factuurregel_key = " + finregel_key;
|
||||
var oRs = Oracle.Execute(sql);
|
||||
var fin_factuur_key = oRs("fin_factuur_key").value;
|
||||
oRs.Close();
|
||||
|
||||
var this_fin = fin.func_enabled_factuur(fin_factuur_key);
|
||||
user.auth_required_or_abort(this_fin.canChange); // Geen wijzigingen toestaan bij onvoldoende rechten.
|
||||
|
||||
var wheres = [" fin_factuurregel_key = " + finregel_key];
|
||||
var finUpd = buildTrackingUpdate("fin_factuurregel", wheres.join(" AND " ), fields, { noValidateToken: true });
|
||||
|
||||
var sql = "BEGIN "
|
||||
+ finUpd.sql + ";"
|
||||
+ model_invoicelines._synchronize_totals_sql(fin_factuur_key) + ";"
|
||||
+ "END;";
|
||||
var err = Oracle.Execute(sql, true);
|
||||
if (err.friendlyMsg)
|
||||
abort_with_warning(err.friendlyMsg);
|
||||
|
||||
return { key: finregel_key };
|
||||
},
|
||||
|
||||
REST_POST: function (params, jsondata, parent_key) /* new invoiceline */
|
||||
{
|
||||
var trackarray = [];
|
||||
var factuur_key = parent_key;
|
||||
var this_fin = fin.func_enabled_factuur(factuur_key); // Wat heb ik zoal aan rechten op deze specifieke factuur
|
||||
user.auth_required_or_abort(this_fin.canChange); // Geen nieuwe factuurregels bij een verwerkte factuur en onvoldoende rechten.
|
||||
|
||||
model_invoicelines._pre_analyze_fields(params, jsondata);
|
||||
var fields = api2.update_fields(params, model_invoicelines, jsondata); // Build updater
|
||||
model_invoicelines._analyze_fields(fields, params, jsondata);
|
||||
model_invoicelines._validate_fields(fields, params, jsondata);
|
||||
|
||||
// Zet volgnummer van de nieuwe factuurregel.
|
||||
var sql = "SELECT MAX(fin_factuurregel_nr) volgnr"
|
||||
+ " FROM fin_factuurregel"
|
||||
+ " WHERE fin_factuur_key = " + factuur_key;
|
||||
var oRs = Oracle.Execute(sql);
|
||||
var volgnr = oRs("volgnr").value + 1;
|
||||
oRs.Close();
|
||||
|
||||
fields.push({ dbs: "fin_factuur_key", typ: "key", val: factuur_key });
|
||||
fields.push({ dbs: "fin_factuurregel_key", typ: "key", seq: "fin_s_fin_factuurregel_key" });
|
||||
fields.push({ dbs: "fin_factuurregel_nr", typ: "number", val: volgnr });
|
||||
|
||||
var finIns = buildInsert("fin_factuurregel", fields, { noValidateToken: true });
|
||||
var factuurregel_key = finIns.sequences["fin_factuurregel_key"];
|
||||
|
||||
var sql = "BEGIN "
|
||||
+ finIns.sql + ";"
|
||||
+ model_invoicelines._synchronize_totals_sql(factuur_key) + ";"
|
||||
+ "END;";
|
||||
var err = Oracle.Execute(sql, true);
|
||||
if (err.friendlyMsg)
|
||||
abort_with_warning(err.friendlyMsg);
|
||||
|
||||
// Tracking toevoegen.
|
||||
trackarray.push(L("lcl_fin_invoicerow_add") + ": " + safe.quoted_sql(jsondata.name) + "/" + jsondata.total);
|
||||
shared.trackaction("FINNEW", factuur_key, trackarray.join("\n"));
|
||||
//
|
||||
return { key: factuurregel_key };
|
||||
},
|
||||
|
||||
REST_DELETE: function (params, jsondata, the_key) /* delete invoiceline */
|
||||
{
|
||||
var trackarray = [];
|
||||
var factuurregel_key = the_key;
|
||||
|
||||
var sql = "SELECT fin_factuur_key"
|
||||
+ " , fin_factuurregel_omschrijving"
|
||||
+ " , fin_factuurregel_totaal"
|
||||
+ " FROM fin_factuurregel"
|
||||
+ " WHERE fin_factuurregel_key = " + factuurregel_key;
|
||||
var oRs = Oracle.Execute(sql);
|
||||
var factuur_key = oRs("fin_factuur_key").value;
|
||||
var desc = oRs("fin_factuurregel_omschrijving").value;
|
||||
var total = oRs("fin_factuurregel_totaal").value;
|
||||
oRs.Close();
|
||||
|
||||
var this_fin = fin.func_enabled_factuur(factuur_key);
|
||||
user.auth_required_or_abort(this_fin.canDelete);
|
||||
|
||||
// Alleen bij voldoende rechten op de factuur kan een factuurregel worden verwijderd.
|
||||
fin.deleteFactuurregel(factuurregel_key);
|
||||
|
||||
var sql = "BEGIN "
|
||||
+ model_invoicelines._synchronize_totals_sql(factuur_key) + ";"
|
||||
+ model_invoicelines._renumber_invoicelines_sql(factuur_key) + ";"
|
||||
+ "END;"
|
||||
var err = Oracle.Execute(sql, true);
|
||||
if (err.friendlyMsg)
|
||||
abort_with_warning(err.friendlyMsg);
|
||||
else
|
||||
{
|
||||
trackarray.push(L("lcl_fin_regel_del") + ": " + safe.quoted_sql(desc) + "/" + total);
|
||||
//shared.trackaction("FINDEL", factuur_key, trackarray.join("\n")); // srtnotificatie FINDEL bestaat (nog) niet
|
||||
}
|
||||
}
|
||||
}
|
||||
%>
|
||||
@@ -1,201 +0,0 @@
|
||||
<% /*
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File: model_invoices.inc
|
||||
|
||||
Description: Factuur model. Dit bestand heeft niets met interfacing te maken
|
||||
maar werkt uitsluitend op JSON-data
|
||||
Parameters:
|
||||
Context:
|
||||
|
||||
Notes: TODO: definitieve naamgeving verifieren
|
||||
TODO: autorisaties voor scope=fo|bo
|
||||
|
||||
We had a discussion. The references (order, contract, purchaseorder) are now present by their foreign nodes.
|
||||
We ourselves want the creditor of the invoice in the result, it is logically a property of an invoice
|
||||
which we technically do not store with the invoice. Formally the creditor should be obtained by a subsequent
|
||||
call to the corresponing API. Alternatively we could add those 3 optional nodes with an include option
|
||||
which is merely designed for 1:n relations, not n:1 like this one.
|
||||
We do not want to slide down from our purest REST forms (yet) so we made the compromise of these 2 readonly fields.
|
||||
Let's see how it holds.
|
||||
*/
|
||||
%>
|
||||
<!-- #include file="../Shared/discxalg3d.inc"-->
|
||||
<!-- #include file="../fin/fin.inc" -->
|
||||
<!-- #include file="./model_invoicelines.inc"-->
|
||||
<%
|
||||
|
||||
model_invoices =
|
||||
{
|
||||
module: "FIN",
|
||||
table: "fin_factuur",
|
||||
primary: "fin_factuur_key",
|
||||
records_name: "invoices",
|
||||
record_name: "invoice",
|
||||
|
||||
// Het interne factuurnr is de id, het externe nummer is name
|
||||
fields: [{ name: "id", dbs: "fin_factuur_key", typ: "key", filter: "exact" },
|
||||
{ name: "invoicedate", dbs: "fin_factuur_datum", typ: "datetime", track: L("lcl_fin_findate"), filter: "range" },
|
||||
/*readonly*/ { name: "creditor", dbs: "prs_bedrijf_key", typ: "key", foreign: "prs_bedrijf", track: L("lcl_ord_company_uit"), filter: "exact",
|
||||
sql: "COALESCE(mld_opdr.mld_uitvoerende_keys, bes_bestelopdr.prs_bedrijf_key, cnt_contract.cnt_prs_bedrijf_key)" },
|
||||
/*readonly*/ { name: "referencetype", dbs: "dummy", typ: "varchar", filter: "exact",
|
||||
sql: "DECODE(fin_factuur.mld_opdr_key, NULL, DECODE(fin_factuur.bes_bestelopdr_key, NULL, DECODE(fin_factuur.cnt_contract_key, NULL, '?', 'C'), 'B'), 'O')" },
|
||||
{ name: "name", dbs: "fin_factuur_nr", typ: "varchar", track: L("lcl_fin_invoice_nr_extern"), filter: "exact" },
|
||||
{ name: "order", dbs: "mld_opdr_key", typ: "key", foreign: "mld_opdr", filter: "exact"},
|
||||
{ name: "contract", dbs: "cnt_contract_key", typ: "key", foreign: "cnt_contract", filter: "exact"},
|
||||
{ name: "purchaseorder", dbs: "bes_bestelopdr_key", typ: "key", foreign: "bes_bestelopdr", filter: "exact"},
|
||||
{ name: "total", dbs: "fin_factuur_totaal", typ: "float", track: L("lcl_fin_totaal_bedrag"), filter: "range" },
|
||||
{ name: "vat", dbs: "fin_factuur_totaal_btw", typ: "float", track: L("lcl_fin_totaal_bedrag_btw"), filter: "range" },
|
||||
{ name: "status", dbs: "fin_factuur_statuses_key", typ: "key", foreign: fin.getfinstatustext, track: L("lcl_fin_fin_status"), filter: "exact" },
|
||||
{ name: "accountingperiod", dbs: "fin_factuur_boekmaand", typ: "varchar", track: L("lcl_fin_divide_period"), filter: "exact" },
|
||||
{ name: "reference", dbs: "fin_factuur_debiteur_nr", typ: "varchar", track: L("lcl_fin_debtor_nr"), filter: "like" },
|
||||
{ name: "costtype", dbs: "prs_kostensoort_key", typ: "key", foreign: "prs_kostensoort", track: L("lcl_shared_charge_type"), filter: "exact" },
|
||||
{ name: "contact", dbs: "prs_perslid_key_user", typ: "key", foreign: "prs_perslid", track: L("lcl_mld_name"), filter: "exact" },
|
||||
{ name: "remark", dbs: "fin_factuur_opmerking", typ: "varchar", track: L("lcl_fin_remark"), filter: "like" }
|
||||
],
|
||||
includes: {"invoicelines": { model: model_invoicelines,
|
||||
joinfield: "fin_factuur_key"
|
||||
}
|
||||
},
|
||||
|
||||
_pre_analyze_fields: function (params, jsondata) /* analyseer inkomende jsondata, common voor PUT en POST */
|
||||
{
|
||||
// De factuurbedragen worden berekend uit de factuurregels. Eventuele waarden die hier gezet zijn negeren.
|
||||
jsondata.invoice.total = 0;
|
||||
jsondata.invoice.vat = 0;
|
||||
|
||||
// Status van 3 (foute import) moet bij saven op 2 worden gezet.
|
||||
var fin_status_key = jsondata.invoice.status;
|
||||
if (fin_status_key == 3) fin_status_key = 2;
|
||||
|
||||
// Status 6 (Akkoord) moet bij saven op 2 (Ingevoerd) worden gezet. Factuur dient indien nodig weer gefiatteerd te worden.
|
||||
if (fin_status_key == 6) fin_status_key = 2;
|
||||
|
||||
jsondata.invoice.status = fin_status_key;
|
||||
},
|
||||
|
||||
_analyze_fields: function (fields, params, jsondata) /* analyseer inkomende data, common voor PUT en POST */
|
||||
{
|
||||
},
|
||||
|
||||
_validate_fields: function (fields, params, jsondata) /* valideer fields, alle constraints die niet door de database worden afgevangen */
|
||||
{
|
||||
},
|
||||
|
||||
REST_GET: function _GET(params)
|
||||
{
|
||||
var scope = getQParamSafe("scope", "fe");
|
||||
var autfunction = { fe : "WEB_FINUSE", fo : "WEB_FINFOF", bo : "WEB_FINBOF" } [scope];
|
||||
params.authparams = user.checkAutorisation(autfunction, null, null, true); // pessimistisch
|
||||
|
||||
var query = api2.sqlfields(params, model_invoices );
|
||||
query.wheres.push("fin_factuur_verwijder IS NULL");
|
||||
|
||||
if (/* self */ 0)
|
||||
{
|
||||
query.wheres.push("prs_perslid_key_user=" + user_key);
|
||||
}
|
||||
else
|
||||
{
|
||||
// TODO: disc3d conditie voor de geldendende autfunction toevoegen
|
||||
}
|
||||
|
||||
query.tables.push("mld_opdr");
|
||||
query.wheres.push("fin_factuur.mld_opdr_key = mld_opdr.mld_opdr_key(+)");
|
||||
query.tables.push("bes_bestelopdr");
|
||||
query.wheres.push("fin_factuur.bes_bestelopdr_key = bes_bestelopdr.bes_bestelopdr_key(+)");
|
||||
query.tables.push("cnt_contract");
|
||||
query.wheres.push("fin_factuur.cnt_contract_key = cnt_contract.cnt_contract_key(+)");
|
||||
|
||||
var wheres = api2.sqlfilter(params, model_invoices);
|
||||
query.wheres = query.wheres.concat(wheres);
|
||||
|
||||
var sql = "SELECT " + query.selects.join(", ")
|
||||
+ " FROM " + query.tables.join(", ")
|
||||
+ " WHERE " + query.wheres.join(" AND " )
|
||||
+ " ORDER BY fin_factuur_key";
|
||||
var json = api2.sql2json (params, sql, model_invoices );
|
||||
|
||||
return json;
|
||||
},
|
||||
|
||||
REST_PUT: function (params, jsondata, the_key) /* update invoice */
|
||||
{
|
||||
var fin_key = the_key;
|
||||
var this_fin = fin.func_enabled_factuur(fin_key);
|
||||
user.auth_required_or_abort(this_fin.canChange); // Geen wijzigingen toestaan bij onvoldoende rechten.
|
||||
//
|
||||
model_invoices._pre_analyze_fields(params, jsondata);
|
||||
var fields = api2.update_fields(params, model_invoices, jsondata); // Build updater
|
||||
model_invoices._analyze_fields(fields, params, jsondata);
|
||||
model_invoices._validate_fields(fields, params, jsondata);
|
||||
//
|
||||
var wheres = [" fin_factuur_key = " + fin_key];
|
||||
var finUpd = buildTrackingUpdate("fin_factuur", wheres.join(" AND " ), fields, { noValidateToken: true });
|
||||
var err = Oracle.Execute(finUpd.sql, true);
|
||||
if (err.friendlyMsg)
|
||||
abort_with_warning(err.friendlyMsg);
|
||||
|
||||
var fintrack = api2.process_includes(params, model_invoices, jsondata, the_key);
|
||||
|
||||
// update nog tracken
|
||||
if (fin_key > 0)
|
||||
{
|
||||
shared.trackaction("FINUPD",
|
||||
fin_key,
|
||||
L("lcl_fin_is_finupdtrack").format(fin_key) + (finUpd.trackarray.length > 0? "\n" : "") + finUpd.trackarray.join("\n"));
|
||||
};
|
||||
|
||||
return { key: fin_key };
|
||||
},
|
||||
|
||||
REST_POST: function (params, jsondata) /* new invoice */
|
||||
{
|
||||
var this_fin = fin.func_enabled_factuur(-1);
|
||||
user.auth_required_or_abort(this_fin.canChange); // Geen wijzigingen toestaan bij onvoldoende rechten.
|
||||
|
||||
params.isNew = true; // negeer eventuele bestaande keys
|
||||
|
||||
model_invoices._pre_analyze_fields(params, jsondata);
|
||||
var fields = api2.update_fields(params, model_invoices, jsondata); // Build updater
|
||||
model_invoices._analyze_fields(fields, params, jsondata);
|
||||
model_invoices._validate_fields(fields, params, jsondata);
|
||||
|
||||
fields.push({ dbs: "fin_factuur_key", typ: "key", seq: "fin_s_fin_factuur_key" });
|
||||
var finIns = buildInsert("fin_factuur", fields, { noValidateToken: true} );
|
||||
var factuur_key = finIns.sequences["fin_factuur_key"];
|
||||
|
||||
var sql = "BEGIN "
|
||||
+ finIns.sql +";"
|
||||
+ "END;";
|
||||
|
||||
var err = Oracle.Execute(sql, true);
|
||||
if (err.friendlyMsg)
|
||||
abort_with_warning(err.friendlyMsg);
|
||||
|
||||
var fintrack = api2.process_includes(params, model_invoices, jsondata, factuur_key);
|
||||
|
||||
shared.trackaction("FINNEW", factuur_key);
|
||||
|
||||
return { key: factuur_key };
|
||||
},
|
||||
|
||||
REST_DELETE: function (params, jsondata, the_key) /* delete invoice */
|
||||
{
|
||||
var factuur_key = the_key;
|
||||
|
||||
var this_fin = fin.func_enabled_factuur(factuur_key);
|
||||
user.auth_required_or_abort(this_fin.canDelete);
|
||||
if (this_fin.canDelete) // Dubbel op: bij canDelete=false komt hij hier niet meer.
|
||||
{
|
||||
// Verwijderdatum van de factuur zetten en niet fysiek verwijderen
|
||||
var sql = "UPDATE fin_factuur"
|
||||
+ " SET fin_factuur_verwijder = SYSDATE"
|
||||
+ " WHERE fin_factuur_verwijder IS NULL"
|
||||
+ " AND fin_factuur_key = " + factuur_key;
|
||||
oRs = Oracle.Execute(sql);
|
||||
}
|
||||
}
|
||||
}
|
||||
%>
|
||||
@@ -1,118 +0,0 @@
|
||||
<% /*
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File: model_issueobjects.inc
|
||||
|
||||
Description: Meldingobjecten model. Dit bestand heeft niets met interfacing te maken
|
||||
maar werkt uitsluitend op JSON-data
|
||||
Parameters:
|
||||
Context:
|
||||
|
||||
Notes:
|
||||
*/
|
||||
|
||||
%>
|
||||
<%
|
||||
model_issueobjects =
|
||||
{
|
||||
table: "mld_melding_object",
|
||||
primary: "mld_melding_object_key",
|
||||
records_name: "issueobjects",
|
||||
record_name: "issueobject",
|
||||
fields: [{ name: "id", dbs: "mld_melding_object_key", typ: "key", filter: "exact" },
|
||||
//{ name: "issue", dbs: "mld_melding_key", typ: "key", xforeign: "mld_melding" }, // niet teruglinken // mld_melding zit niet in save2db.foreignKeyTable()
|
||||
{ name: "object", dbs: "ins_deel_key", typ: "key", foreign: "ins_deel" }
|
||||
],
|
||||
|
||||
_analyze_fields: function (fields, params, jsondata) /* analyseer inkomende data, common voor PUT en POST */
|
||||
{
|
||||
if (jsondata.id)
|
||||
{
|
||||
// Bestaande mld_melding_object: PUT
|
||||
}
|
||||
else
|
||||
{ // Nieuwe mld_melding_object: POST
|
||||
// Controleer of de combinatie melding_key/object_key al bestaat. Zo ja, dan niet toevoegen.
|
||||
var mld_obj_key = -1;
|
||||
var sql = "SELECT mld_melding_object_key"
|
||||
+ " FROM mld_melding_object"
|
||||
+ " WHERE mld_melding_object_verwijder IS NULL"
|
||||
+ " AND mld_melding_key = " + params.filter.id
|
||||
+ " AND ins_deel_key = " + fields[0].val;
|
||||
var oRs = Oracle.Execute(sql);
|
||||
if (!oRs.eof)
|
||||
{
|
||||
mld_obj_key = oRs("mld_melding_object_key").Value;
|
||||
params.isNew = false;
|
||||
}
|
||||
oRs.Close();
|
||||
}
|
||||
},
|
||||
|
||||
_validate_fields: function (fields, params, jsondata) /* valideer fields, alle constraints die niet door de database worden afgevangen */
|
||||
{
|
||||
},
|
||||
|
||||
REST_GET: function _GET(params)
|
||||
{
|
||||
// Kan alleen vanuit model_issue aangeroepen worden. De autorisatie is daar al geregeld.
|
||||
var query = api2.sqlfields(params, model_issueobjects );
|
||||
|
||||
query.wheres.push("mld_melding_object_verwijder IS NULL");
|
||||
|
||||
var wheres = api2.sqlfilter(params, model_issueobjects);
|
||||
query.wheres = query.wheres.concat(wheres);
|
||||
|
||||
var sql = "SELECT " + query.selects.join(", ")
|
||||
+ " FROM " + query.tables.join(", ")
|
||||
+ " WHERE " + query.wheres.join(" AND " );
|
||||
|
||||
var json = api2.sql2json (params, sql, model_issueobjects );
|
||||
|
||||
return json;
|
||||
},
|
||||
|
||||
REST_PUT: function (params, jsondata, the_key) /* update object */
|
||||
{
|
||||
// Kan alleen vanuit model_issue aangeroepen worden. De autorisatie is daar al geregeld.
|
||||
var fields = api2.update_fields(params, model_issueobjects, jsondata); // Build updater
|
||||
model_issueobjects._analyze_fields(fields, params, jsondata);
|
||||
|
||||
var mldUpd = buildTrackingUpdate("mld_melding_object", " mld_melding_object_key = " + the_key, fields, { noValidateToken: true });
|
||||
Oracle.Execute(mldUpd.sql);
|
||||
|
||||
// Nu geen api2.process_includes() meer aanroepen, anders ga je de objecten zelf ook nog aanpassen.
|
||||
|
||||
return { key: the_key };
|
||||
},
|
||||
|
||||
REST_POST: function (params, jsondata, parent_key) /* new object */
|
||||
{
|
||||
// Kan alleen vanuit model_issue aangeroepen worden. De autorisatie is daar al geregeld.
|
||||
params.isNew = true; // negeer eventuele bestaande keys
|
||||
var fields = api2.update_fields(params, model_issueobjects, jsondata); // Build updater
|
||||
model_issueobjects._analyze_fields(fields, params, jsondata);
|
||||
|
||||
var new_key = null;
|
||||
if (params.isNew)
|
||||
{
|
||||
fields.push({ dbs: "mld_melding_key", typ: "key", val: parent_key });
|
||||
fields.push({ dbs: "mld_melding_object_key", typ: "key", seq: "mld_s_mld_object_key" });
|
||||
|
||||
var mldIns = buildInsert("mld_melding_object", fields, { noValidateToken: true });
|
||||
new_key = mldIns.sequences["mld_melding_object_key"];
|
||||
Oracle.Execute(mldIns.sql);
|
||||
}
|
||||
|
||||
return { key: new_key };
|
||||
},
|
||||
|
||||
REST_DELETE: function (params, jsondata, the_key) /* delete object */
|
||||
{
|
||||
// Kan alleen vanuit model_issue aangeroepen worden. De autorisatie is daar al geregeld.
|
||||
var sql = "DELETE FROM mld_melding_object WHERE mld_melding_object_key = " + the_key;
|
||||
Oracle.Execute(sql);
|
||||
}
|
||||
}
|
||||
%>
|
||||
@@ -1,516 +0,0 @@
|
||||
<% /*
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File: model_issues.inc
|
||||
|
||||
Description: Melding model. Dit bestand heeft niets met interfacing te maken
|
||||
maar werkt uitsluitend op JSON-data
|
||||
Parameters:
|
||||
Context:
|
||||
|
||||
Notes: TODO on demand: PUT/POST/DELETE
|
||||
TODO test autorisatie-toepassing (MGE?)
|
||||
*/
|
||||
|
||||
%>
|
||||
<!-- #include file="../Shared/discx3d.inc" -->
|
||||
<!-- #include file="../mld/mld.inc" -->
|
||||
<!-- #include file="model_issueobjects.inc"-->
|
||||
<!-- #include file="model_notes.inc"-->
|
||||
<!-- #include file="model_orders.inc"-->
|
||||
<%
|
||||
|
||||
model_issues =
|
||||
{
|
||||
module: "MLD",
|
||||
table: "mld_melding",
|
||||
// aliasprefix: "", // Deze prefix wordt voor fields.name gezet.
|
||||
primary: "mld_melding_key",
|
||||
records_name: "issues",
|
||||
record_name: "issue",
|
||||
fields: [{ name: "id", dbs: "mld_melding_key", typ: "key", filter: "exact" },
|
||||
{ name: "name", dbs: "mld_melding_id", typ: "varchar", sql: "ins_srtdiscipline.ins_srtdiscipline_prefix||mld_melding.mld_melding_key", filter: "exact" },
|
||||
{ name: "contact", dbs: "prs_perslid_key", typ: "key", foreign: "prs_perslid", track: L("lcl_mld_name"), filter: "exact" },
|
||||
{ name: "requestor", dbs: "prs_perslid_key_voor", typ: "key", foreign: "prs_perslid", track: L("lcl_mld_call_for"), filter: "exact" },
|
||||
{ name: "issuedate", dbs: "mld_melding_datum", typ: "datetime", track: L("lcl_mld_date_time"), filter: "range" },
|
||||
{ name: "enddate", dbs: "mld_melding_einddatum", typ: "datetime", track: L("lcl_mld_enddate")},
|
||||
{ name: "issuetype", dbs: "mld_stdmelding_key", typ: "key", foreign: "mld_stdmelding", track: L("lcl_complain"), filter: "exact" },
|
||||
{ name: "description", dbs: "mld_melding_omschrijving", typ: "varchar", track: L("lcl_descr"), filter: "like" },
|
||||
{ name: "remark", dbs: "mld_melding_opmerking", typ: "varchar", track: L("lcl_remark")},
|
||||
{ name: "status", dbs: "mld_melding_status", typ: "key", foreign: mld.getmldstatustext, track: L("lcl_status"), filter: "exact" },
|
||||
{ name: "flag", dbs: "mld_melding_flag", typ: "key", /* geen echte key, wel key-gedrag */ track: L("lcl_mld_flags"), filter: "exact" },
|
||||
{ name: "account", dbs: "prs_kostenplaats_key", typ: "key", foreign: "prs_kostenplaats", track: L("lcl_account"), filter: "exact" },
|
||||
{ name: "handler", dbs: "mld_melding_behandelaar_key", typ: "key", foreign: "prs_perslid", track: L("lcl_mld_behandelaar"), filter: "exact" },
|
||||
{ name: "location", dbs: "mld_alg_locatie_key", typ: "key", foreign: "alg_locatie", track: L("lcl_location"), filter: "exact" },
|
||||
{ name: "building", dbs: "alg_v_allonroerendgoed.alg_gebouw_key", typ: "key", foreign: "alg_gebouw", track: L("lcl_building"), filter: "exact" },
|
||||
{ name: "floor", dbs: "alg_v_allonroerendgoed.alg_verdieping_key", typ: "key", foreign: "alg_verdieping", track: L("lcl_floor"), filter: "exact" },
|
||||
{ name: "room", dbs: "alg_v_allonroerendgoed.alg_ruimte_key", typ: "key", foreign: "alg_ruimte", track: L("lcl_room"), filter: "exact" },
|
||||
{ name: "terrain", dbs: "alg_v_allonroerendgoed.alg_terreinsector_key", typ: "key", foreign: "alg_terreinsector", track: L("lcl_room"), filter: "exact" }
|
||||
],
|
||||
includes: {
|
||||
"issueobjects": {
|
||||
model: model_issueobjects,
|
||||
joinfield: "mld_melding_key",
|
||||
single_only: false
|
||||
},
|
||||
"notes": {
|
||||
model: model_notes,
|
||||
joinfield: "parent_key",
|
||||
single_only: false,
|
||||
joinfunction: function (params)
|
||||
{
|
||||
/* gaat uit dat die wordt geimplementeerd met een view fac_v_notes (module, key, columns....) */
|
||||
return "(module='MLD' OR module IS NULL) AND fac_v_notes.parent_key(+) = mld_melding.mld_melding_key";
|
||||
}
|
||||
},
|
||||
"orders": {
|
||||
model: model_orders,
|
||||
joinfield: "mld_melding_key",
|
||||
single_only: false,
|
||||
joinfunction: function (params)
|
||||
{
|
||||
return " mld_melding.mld_melding_key = mld_opdr.mld_melding_key(+) ";
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
REST_GET: function _GET(params)
|
||||
{
|
||||
var scope = getQParamSafe("scope", "fe");
|
||||
var autfunction = { fe : "WEB_MLDUSE", fo : "WEB_MLDFOF", bo : "WEB_MLDBOF", mi : "WEB_MLDBAC" } [scope];
|
||||
params.authparams = user.checkAutorisation(autfunction, null, null, true); /* pessimistic */
|
||||
|
||||
// Hier kom je niet meer terecht als bovenstaande autorisatiecheck niet tot succes leidt.
|
||||
|
||||
var alg3d = false;
|
||||
var prs3d = false;
|
||||
|
||||
var query = api2.sqlfields(params, model_issues );
|
||||
|
||||
if (scope == "fe")
|
||||
{
|
||||
query.wheres.push("mld_melding.prs_perslid_key=" + user_key);
|
||||
}
|
||||
|
||||
if (!params.filter.id)
|
||||
{
|
||||
/* You can't go any further back in time than the GUI could (ongeveer)*/
|
||||
/* Als er wel een start_issuedate is dan wordt deze toegevoegd in api2.sqlfilter() verderop. */
|
||||
if (!params.filter.start_issuedate && S("mld_max_history") > 0)
|
||||
{
|
||||
query.wheres.push("mld_melding_datum > SYSDATE - "+ S("mld_max_history"));
|
||||
}
|
||||
if (!params.filter.status)
|
||||
{
|
||||
/* Limitation: if no status filter, then default to the active statusses (all except 1,6,5) */
|
||||
// Zou zo kunnen, params.filter.status = [0,2,3,4,7];, maar eigenlijk is dit logischer
|
||||
query.wheres.push("mld_melding_status IN (0,2,3,4,7)");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/* we need the prefix for the name */
|
||||
query.tables.push("mld_stdmelding");
|
||||
query.wheres.push("mld_melding.mld_stdmelding_key = mld_stdmelding.mld_stdmelding_key");
|
||||
query.tables.push("ins_tab_discipline");
|
||||
query.wheres.push("mld_stdmelding.mld_ins_discipline_key = ins_tab_discipline.ins_discipline_key");
|
||||
query.tables.push("ins_srtdiscipline");
|
||||
query.wheres.push("ins_tab_discipline.ins_srtdiscipline_key = ins_srtdiscipline.ins_srtdiscipline_key");
|
||||
|
||||
query.tables.push("alg_v_allonroerendgoed");
|
||||
query.wheres.push("mld_melding.mld_alg_onroerendgoed_keys = alg_v_allonroerendgoed.alg_onroerendgoed_keys(+)");
|
||||
|
||||
if (params.authparams.ALGreadlevel > -1)
|
||||
{
|
||||
/* required for 3D ALG scopeing */
|
||||
alg3d = true;
|
||||
__Log("ALGreadlevel="+params.authparams.ALGreadlevel);
|
||||
query.tables.push("alg_locatie"); /* opletten: outerjoin denk ik? */
|
||||
query.wheres.push("mld_melding.mld_alg_onroerendgoed_keys = alg_locatie.alg_locatie_key(+)");
|
||||
query.tables.push("alg_district");
|
||||
query.wheres.push("alg_locatie.alg_district_key = alg_district.alg_district_key(+)");
|
||||
}
|
||||
if (params.authparams.PRSreadlevel > -1)
|
||||
{
|
||||
/* required for 3D PRS scopeing */
|
||||
prs3d = true;
|
||||
__Log("PRSreadlevel="+params.authparams.PRSreadlevel);
|
||||
query.tables.push("prs_v_afdeling");
|
||||
query.wheres.push("mld_melding.prs_perslid_key = prs_v_afdeling.prs_afdeling_key");
|
||||
}
|
||||
|
||||
var wheres = api2.sqlfilter(params, model_issues);
|
||||
query.wheres = query.wheres.concat(wheres);
|
||||
|
||||
var sql = "SELECT " + query.selects.join(", ")
|
||||
+ " FROM " + query.tables.join(", ")
|
||||
+ " WHERE " + query.wheres.join(" AND " );
|
||||
|
||||
// Over het resultaat moet nog de 3D rasp, altijd
|
||||
sql = discx3d (sql,
|
||||
"ins_tab_discipline.ins_discipline_key",
|
||||
(alg3d ? "alg_district.alg_regio_key" : null),
|
||||
(alg3d ? "alg_district.alg_district_key" : null),
|
||||
(alg3d ? "mld_melding.mld_alg_locatie_key" : null),
|
||||
(alg3d ? "alg_v_allonroerendgoed.alg_gebouw_key" : null),
|
||||
(alg3d ? "alg_v_allonroerendgoed.alg_verdieping_key" : null),
|
||||
(alg3d ? "alg_v_allonroerendgoed.alg_ruimte_key" : null),
|
||||
(prs3d ? "prs_bedrijf_key" : null),
|
||||
(prs3d ? "prs_afdeling_key" : null),
|
||||
autfunction,
|
||||
"", /* no additional discipline restrictions */
|
||||
(alg3d && prs3d ? 2 : prs3d ? 1 : 0)
|
||||
);
|
||||
|
||||
sql += " ORDER BY mld_melding_key";
|
||||
|
||||
var json = api2.sql2json (params, sql, model_issues );
|
||||
|
||||
return json;
|
||||
},
|
||||
|
||||
_pre_analyze_fields: function (params, jsondata) /* analyseer inkomende jsondata voor POST */
|
||||
{
|
||||
params.data = {};
|
||||
if (params.isNew)
|
||||
{ // analyseer inkomende jsondata voor POST
|
||||
var msgError = "";
|
||||
var hasError = true;
|
||||
//
|
||||
// Voor een nieuwe melding moet er een geldige stdmelding zijn.
|
||||
msgError = "Missing issuetype";
|
||||
if (jsondata.issue.issuetype)
|
||||
{
|
||||
msgError = "Invalid issuetype";
|
||||
var sql_stdm = "SELECT sm.mld_stdmelding_omschrijving"
|
||||
+ " , sm.mld_ins_discipline_key"
|
||||
+ " , md.ins_srtdiscipline_key"
|
||||
+ " , COALESCE(sm.mld_stdmelding_directklaar, dp.mld_disc_params_directklaar, 0) mld_directklaar"
|
||||
+ " FROM mld_stdmelding sm"
|
||||
+ " , mld_discipline md"
|
||||
+ " , mld_disc_params dp"
|
||||
+ " WHERE sm.mld_ins_discipline_key = md.ins_discipline_key"
|
||||
+ " AND sm.mld_ins_discipline_key = dp.mld_ins_discipline_key";
|
||||
+ " AND sm.mld_stdmelding_key = " + jsondata.issue.issuetype;
|
||||
var oRs_stdm = Oracle.Execute(sql_stdm);
|
||||
if (!oRs_stdm.eof)
|
||||
{
|
||||
params.data.mld_ins_discipline_key = oRs_stdm("mld_ins_discipline_key").Value;
|
||||
params.data.ins_srtdiscipline_key = oRs_stdm("ins_srtdiscipline_key").Value;
|
||||
params.data.mld_directklaar = oRs_stdm("mld_directklaar").Value;
|
||||
hasError = false;
|
||||
}
|
||||
oRs_stdm.Close();
|
||||
}
|
||||
if (hasError) api2.error(500, msgError);
|
||||
//
|
||||
|
||||
// Bepaal de kostenplaats, indien verplicht.
|
||||
var stdm_info = mld.mld_stdmeldinginfo(jsondata.issue.issuetype);
|
||||
var kpkey = (jsondata.issue.account ? jsondata.issue.account : -1);
|
||||
if (stdm_info.kpnverplicht && kpkey < 0)
|
||||
{ // Kostenplaats is verplicht, maar is niet meegegeven. Bepaal default kostenplaats.
|
||||
kpkey = (user.afdeling().prs_kostenplaats_key() || -1); // User kostenplaats key
|
||||
}
|
||||
if (stdm_info.kpnverplicht && kpkey < 0)
|
||||
{ // Kon ook geen default kostenplaats vinden.
|
||||
msgError = "Account could not be validated";
|
||||
api2.error(500, msgError);
|
||||
}
|
||||
jsondata.issue.account = kpkey;
|
||||
params.data.is_kto_antwoord = stdm_info.is_kto_antwoord;
|
||||
//
|
||||
|
||||
//
|
||||
if (!jsondata.issue.contact) jsondata.issue.contact = user_key; // Als er geen aanvrager opgegeven is, dan de huidige gebruiker invullen.
|
||||
// Als de setting niet is gezet is "Melding voor" gelijk aan contactpersoon.
|
||||
if (S("mld_allow_for_others") == 0)
|
||||
{
|
||||
jsondata.issue.requestor = jsondata.issue.contact;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Bestaande melding: Haal de gegevens op.
|
||||
var sql = "SELECT mld_stdmelding_key"
|
||||
+ " FROM mld_melding"
|
||||
+ " WHERE mld_melding_key = " + jsondata.issue.id;
|
||||
var oRs = Oracle.Execute(sql);
|
||||
jsondata.issue.issuetype = oRs("mld_stdmelding_key").Value;
|
||||
oRs.Close();
|
||||
|
||||
}
|
||||
//
|
||||
//
|
||||
var stdm_info = mld.mld_stdmeldinginfo(jsondata.issue.issuetype);
|
||||
// Startdatum: indien niet meegegeven, neem dan sysdate
|
||||
var startdate = (jsondata.issue.issuedate ? jsondata.issue.issuedate : new Date);
|
||||
var startwerkdag = parseFloat(S("fac_t_startofworkday"));
|
||||
var startwerkdag_uur = Math.floor(startwerkdag);
|
||||
var startwerkdag_min = (startwerkdag - Math.floor(startwerkdag)) * 60;
|
||||
var startdatebegin = new Date(startdate.getFullYear(), startdate.getMonth(), startdate.getDate(), startwerkdag_uur, startwerkdag_min);
|
||||
var sysdate = new Date();
|
||||
//
|
||||
if (stdm_info.startdatum)
|
||||
{ // Situatie 1: Einddatum = TRUNC(startdatum) + 8:00 uur + SLA
|
||||
// LET OP!!!: Als setting "mld_disc_params_startdatum" is gezet dan wordt eigenlijk verondersteld dat de SLA in dagen is en niet in uren.
|
||||
// Echter als de startdatum de registratiedatum (bij nieuwe melding dus sysdate) is moet wel voor de begintijd de registratietijd (registratiedatum) genomen worden tijdens het opslaan.
|
||||
// Anders geldt de acceptatietijd (in uren) onterecht al vanaf het begin van de dag.
|
||||
if (params.isNew)
|
||||
{ // Nieuwe melding.
|
||||
// Startdatum is vandaag: starttijd is huidige tijd.
|
||||
// Startdatum is niet vandaag: starttijd is begin werkdag.
|
||||
var startdate_is_today = (startdate.midnight().getTime() == sysdate.midnight().getTime());
|
||||
startdate = (startdate_is_today? sysdate : startdatebegin);
|
||||
}
|
||||
else
|
||||
{ // Bestaande melding
|
||||
var mld_key = jsondata.issue.id;
|
||||
sql = "SELECT mld_melding_datum"
|
||||
+ " FROM mld_melding"
|
||||
+ " WHERE mld_melding_key = " + mld_key;
|
||||
oRs = Oracle.Execute(sql);
|
||||
var oldstartdate = new Date(oRs("mld_melding_datum").Value);
|
||||
|
||||
// Alleen als datum veranderd is moet de starttijd worden aangepast.
|
||||
if (startdate.midnight().getTime() != oldstartdate.midnight().getTime())
|
||||
{ // Startdatum is aangepast.
|
||||
// Als de startdatum is aangepast in registratiedatum, dan wel weer de registratietijd (registratiedatum) pakken.
|
||||
// In alle andere gevallen begin van de werkdag pakken.
|
||||
sql = "SELECT fac.gettrackingdate('MLDNEW', " + mld_key + ") registratiedatum FROM DUAL"
|
||||
oRs_1 = Oracle.Execute(sql);
|
||||
var registratiedatum = new Date(oRs_1("registratiedatum").Value);
|
||||
oRs_1.Close();
|
||||
|
||||
var startdatum_is_registratiedatum = (startdate.midnight().getTime() == registratiedatum.midnight().getTime());
|
||||
startdate = (startdatum_is_registratiedatum? registratiedatum : startdatebegin);
|
||||
}
|
||||
else
|
||||
{ // else startdatum niet aanpassen.
|
||||
startdate = oldstartdate;
|
||||
}
|
||||
oRs.Close();
|
||||
}
|
||||
}
|
||||
else
|
||||
{ // Situatie 2: Einddatum = COALESCE(huidige waarde, sysdate) + SLA
|
||||
if (params.isNew)
|
||||
{
|
||||
startdate = new Date();
|
||||
}
|
||||
else
|
||||
{
|
||||
startdate = jsondata.issue.issuedate;
|
||||
}
|
||||
}
|
||||
jsondata.issue.issuedate = startdate;
|
||||
// De einddatum is de meegegeven einddatum, maar als die niet wordt meegegeven regelt de trigger dat wel, dus DAN MOET IK HEM NIET MEEGEVEN
|
||||
//
|
||||
|
||||
// Onroerendgoed_keys wordt de verfijnste van de opgegeven plaats
|
||||
var locatiekey = (jsondata.issue.location ? jsondata.issue.location : -1);
|
||||
var gebouwkey = (jsondata.issue.building ? jsondata.issue.building : -1);
|
||||
var verdiepingkey = (jsondata.issue.floor ? jsondata.issue.floor : -1);
|
||||
var ruimtekey = (jsondata.issue.room ? jsondata.issue.room : -1);
|
||||
var alg_onroerendgoed_keys = -1;
|
||||
|
||||
if (!S("mld_plaats_is_locatie_only"))
|
||||
{ // die specifiekere plaats moet dan leegblijven
|
||||
if (ruimtekey != -1)
|
||||
alg_onroerendgoed_keys = ruimtekey;
|
||||
else if (verdiepingkey != -1)
|
||||
alg_onroerendgoed_keys = verdiepingkey;
|
||||
else if (gebouwkey != -1)
|
||||
alg_onroerendgoed_keys = gebouwkey;
|
||||
}
|
||||
params.data.alg_onroerendgoed_keys = alg_onroerendgoed_keys;
|
||||
|
||||
if (!params.isNew)
|
||||
{ // Verwijder voor PUT wat niet gewijzigd mag worden.
|
||||
delete jsondata.issue.name;
|
||||
delete jsondata.issue.contact;
|
||||
delete jsondata.issue.requestor;
|
||||
delete jsondata.issue.issuetype;
|
||||
delete jsondata.issue.location;
|
||||
}
|
||||
},
|
||||
|
||||
_analyze_fields: function (fields, params, jsondata) /* analyseer inkomende data, common voor PUT en POST */
|
||||
{
|
||||
},
|
||||
|
||||
_validate_fields: function (fields, params, jsondata) /* valideer fields, alle constraints die niet door de database worden afgevangen */
|
||||
{
|
||||
// als einddatum ingevuld is moet deze groter/gelijk zijn aan de begindatum
|
||||
},
|
||||
|
||||
_validate_close: function (params, jsondata, the_key) /* uit: mld_close_save.asp */
|
||||
{
|
||||
var mld_key = the_key;
|
||||
var this_mld = mld.func_enabled_melding(mld_key);
|
||||
user.auth_required_or_abort(this_mld.canClose); // Als je mag accepteren mag je ook rejecten
|
||||
|
||||
params.data = {};
|
||||
params.data.tobeclosed = false;
|
||||
params.data.canCloseOpdrOfMld = [];
|
||||
var canCloseOpdr = [];
|
||||
var reqStatusEmpty = [];
|
||||
var noOpdrCloseAtAll = false;
|
||||
var futureOpdr = false;
|
||||
|
||||
// Zijn er nog kenmerken die nu wel verplicht zijn?
|
||||
var kvsAfwezig = mld.hasRequiredStatusEmpty(mld_key, 5);
|
||||
if (kvsAfwezig.length)
|
||||
{
|
||||
var mldnr = mld.mld_prefix(mld_key) + mld_key;
|
||||
reqStatusEmpty.push(L("lcl_mld_req_status_empty").format(kvsAfwezig.join(", "), mldnr) );
|
||||
}
|
||||
// Zijn er nog lopende opdrachten?
|
||||
var sql = "SELECT o.mld_opdr_key"
|
||||
+ " FROM mld_opdr o"
|
||||
+ " WHERE o.mld_melding_key = " + mld_key
|
||||
+ " AND o.mld_statusopdr_key NOT IN (1, 6, 7, 9)";
|
||||
var oRsOM = Oracle.Execute(sql);
|
||||
while (!oRsOM.eof)
|
||||
{ // Voor elke opdracht van een melding controleren of deze afgemeld mag worden
|
||||
var mld_opdr_key = oRsOM("mld_opdr_key").Value;
|
||||
sql = "SELECT mld_opdr_einddatum"
|
||||
+ " FROM mld_opdr o"
|
||||
+ " WHERE o.mld_opdr_key = " + mld_opdr_key;
|
||||
var oRs = Oracle.Execute(sql);
|
||||
// Als Setting S("mld_ord_afmeld_future") niet is gezet (0): Opdrachten waarvan de einddatum in de toekomst ligt mogen niet worden afgemeld.
|
||||
var this_opdr = mld.func_enabled_opdracht(mld_opdr_key);
|
||||
if (!this_opdr.canClose || (S("mld_ord_afmeld_future") != 1 && (oRs("mld_opdr_einddatum").value > new Date())))
|
||||
{ // Geen autorisatie om alle opdrachten van een melding af te melden of opdrachten in de toekomst
|
||||
// met setting S("mld_ord_afmeld_future") niet gezet-->dan geen enkele van die melding
|
||||
noOpdrCloseAtAll = true;
|
||||
if (S("mld_ord_afmeld_future") != 1 && (oRs("mld_opdr_einddatum").value > new Date()))
|
||||
futureOpdr = true; // Indien opdrachten in de toekomst en setting S("mld_ord_afmeld_future") niet gezet (0) dan mag je de melding niet afmelden
|
||||
}
|
||||
oRs.Close();
|
||||
params.data.canCloseOpdrOfMld.push(mld_opdr_key);
|
||||
oRsOM.MoveNext();
|
||||
}
|
||||
oRsOM.Close();
|
||||
|
||||
if (!futureOpdr && !noOpdrCloseAtAll)
|
||||
{ // Indien opdrachten in de toekomst en setting S("mld_ord_afmeld_future") niet gezet (0) dan mag je de melding niet afmelden
|
||||
// EN geen opdrachten of alle opdrachten mogen gesloten worden, dan kan de melding afgemeld worden
|
||||
params.data.tobeclosed = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
msgError = "Issue can not be closed";
|
||||
api2.error(500, msgError);
|
||||
}
|
||||
},
|
||||
|
||||
REST_PUT: function (params, jsondata, the_key) /* update call */
|
||||
{
|
||||
if (!jsondata.issue.id) jsondata.issue.id = the_key;
|
||||
var scope = getQParamSafe("scope", "fe");
|
||||
var autfunction = { fe : "WEB_MLDUSE", fo : "WEB_MLDFOF", bo : "WEB_MLDBOF", mi : "WEB_MLDBAC" } [scope];
|
||||
params.authparams = user.checkAutorisation(autfunction, null, null, true); /* pessimistic */
|
||||
|
||||
// Hier kom je niet meer terecht als bovenstaande autorisatiecheck niet tot succes leidt.
|
||||
|
||||
var mld_key = the_key;
|
||||
var this_mld = mld.func_enabled_melding(mld_key);
|
||||
user.auth_required_or_abort(this_mld.canChange); // Geen wijzigingen toestaan bij onvoldoende rechten.
|
||||
|
||||
model_issues._pre_analyze_fields(params, jsondata);
|
||||
var fields = api2.update_fields(params, model_issues, jsondata); // Build updater
|
||||
model_issues._analyze_fields(fields, params, jsondata);
|
||||
model_issues._validate_fields(fields, params, jsondata);
|
||||
|
||||
var wheres = [" mld_melding_key = " + mld_key];
|
||||
var mldUpd = buildTrackingUpdate("mld_melding", wheres.join(" AND " ), fields, { noValidateToken: true });
|
||||
|
||||
// Alle gegevens bijwerken.
|
||||
var sql = "BEGIN "
|
||||
+ mldUpd.sql + ";"
|
||||
+ " END;";
|
||||
|
||||
var err = Oracle.Execute(sql, true);
|
||||
if (err.friendlyMsg)
|
||||
abort_with_warning(err.friendlyMsg);
|
||||
|
||||
params.data.module = "MLD"; // model_notes moet weten bij wekle module de notes horen.
|
||||
var mldtrack = api2.process_includes(params, model_issues, jsondata, mld_key);
|
||||
|
||||
// update nog tracken
|
||||
if (mld_key > 0)
|
||||
{
|
||||
shared.trackaction("MLDUPD",
|
||||
mld_key,
|
||||
L("lcl_mld_is_mldupdtrack").format(mld_key) + (mldUpd.trackarray.length > 0? "\n" : "") + mldUpd.trackarray.join("\n"));
|
||||
};
|
||||
|
||||
return { key: mld_key };
|
||||
},
|
||||
|
||||
REST_POST: function (params, jsondata) /* new call */
|
||||
{
|
||||
var scope = getQParamSafe("scope", "fe");
|
||||
var autfunction = { fe : "WEB_MLDUSE", fo : "WEB_MLDFOF", bo : "WEB_MLDBOF", mi : "WEB_MLDBAC" } [scope];
|
||||
params.authparams = user.checkAutorisation(autfunction, null, null, true); /* pessimistic */
|
||||
|
||||
// Hier kom je niet meer terecht als bovenstaande autorisatiecheck niet tot succes leidt.
|
||||
params.isNew = true;
|
||||
model_issues._pre_analyze_fields(params, jsondata);
|
||||
|
||||
var this_mld = mld.func_enabled_mld(params.data.mld_ins_discipline_key, "D");
|
||||
user.auth_required_or_abort(this_mld.canFEwrite || this_mld.canFOwrite);
|
||||
//
|
||||
var fields = api2.update_fields(params, model_issues, jsondata); // Build updater
|
||||
model_issues._analyze_fields(fields, params, jsondata);
|
||||
model_issues._validate_fields(fields, params, jsondata);
|
||||
|
||||
fields.push({ dbs: "mld_alg_onroerendgoed_keys", typ: "key", val: (params.data.alg_onroerendgoed_keys==-1 ? null : params.data.alg_onroerendgoed_keys) });
|
||||
fields.push({ dbs: "mld_meldbron_key", typ: "key", val: S("mld_meldbron_key") });
|
||||
fields.push({ dbs: "mld_melding_module", typ: "varchar", val: "MLD" });
|
||||
fields.push({ dbs: "mld_melding_key", typ: "key", seq: "mld_s_mld_melding_key" });
|
||||
|
||||
var mldIns = buildInsert("mld_melding", fields, { noValidateToken: true });
|
||||
var new_key = mldIns.sequences["mld_melding_key"];
|
||||
var sql = "BEGIN "
|
||||
+ mldIns.sql + ";"
|
||||
+ "END;";
|
||||
Oracle.Execute(mldIns.sql);
|
||||
|
||||
mld.setmeldingstatus(new_key, (params.data.mld_directklaar? 0 : 2)); // Zorgt ook voor tracking & daarmee notificatie
|
||||
|
||||
if (params.data.is_kto_antwoord) // die direct afmelden
|
||||
mld.setmeldingstatus(new_key, 5);
|
||||
|
||||
params.data.module = "MLD"; // model_notes moet weten bij wekle module de notes horen.
|
||||
|
||||
return { key: new_key };
|
||||
},
|
||||
|
||||
REST_DELETE: function (params, jsondata, the_key) /* delete call */
|
||||
{
|
||||
// Een melding wordt niet verwijderd maar wordt afgesloten.
|
||||
var scope = getQParamSafe("scope", "fe");
|
||||
var autfunction = { fe : "WEB_MLDUSE", fo : "WEB_MLDFOF", bo : "WEB_MLDBOF", mi : "WEB_MLDBAC" } [scope];
|
||||
params.authparams = user.checkAutorisation(autfunction, null, null, true); /* pessimistic */
|
||||
|
||||
// Hier kom je niet meer terecht als bovenstaande autorisatiecheck niet tot succes leidt.
|
||||
|
||||
model_issues._validate_close(params, jsondata, the_key);
|
||||
// De melding en eventuele opdrachten mogen afgemeld worden.
|
||||
|
||||
// Ik had nog graag een L("lcl_mld_final_remark") toe willen voegen aan de melding, maar er is geen jsondata bij DELETE.
|
||||
|
||||
// Eventuele opdrachten afmelden.
|
||||
for (opdr_i in params.data.canCloseOpdrOfMld)
|
||||
{
|
||||
mld.setopdrachtstatus(canCloseOpdrOfMld[opdr_i], 6); // Technisch voltooid (TV) (Afgemeld)
|
||||
}
|
||||
|
||||
// De melding zelf afmelden.
|
||||
mld.setmeldingstatus(the_key, 5);
|
||||
}
|
||||
}
|
||||
%>
|
||||
@@ -23,10 +23,11 @@ model_locations =
|
||||
record_name: "location",
|
||||
fields: [{ name: "id", dbs: "alg_locatie_key", typ: "key", filter: "exact" },
|
||||
{ name: "code", dbs: "alg_locatie_code", typ: "varchar", filter: "like" },
|
||||
{ name: "name", dbs: "alg_locatie_omschrijving", typ: "varchar"},
|
||||
//{ name: "name", dbs: "alg_locatie_naam", typ: "varchar", filter: "like" },
|
||||
{ name: "description", dbs: "alg_locatie_omschrijving", typ: "varchar"},
|
||||
{ name: "district", dbs: "alg_district_key", typ: "key", foreign: "alg_district"},
|
||||
{ name: "coordinate_x", dbs: "alg_locatie_x", typ: "number"},
|
||||
{ name: "coordinate_y", dbs: "alg_locatie_y", typ: "number"}
|
||||
{ name: "coordinate_y", dbs: "alg_locatie_y", typ: "number"},
|
||||
],
|
||||
REST_GET: function _GET(params)
|
||||
{
|
||||
|
||||
@@ -1,195 +0,0 @@
|
||||
<% /*
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File: model_notes.inc
|
||||
|
||||
Description: notes model. Dit bestand heeft niets met interfacing te maken
|
||||
maar werkt uitsluitend op JSON-data
|
||||
Parameters:
|
||||
Context:
|
||||
|
||||
Notes: Dummy placeholder
|
||||
*/
|
||||
|
||||
/*
|
||||
alle notes in 1 view
|
||||
CREATE OR REPLACE VIEW fac_v_notes
|
||||
( module, key, parent_key, writer_key, aanmaak, omschrijving)
|
||||
AS
|
||||
SELECT 'MLD'
|
||||
, mld_melding_note_key
|
||||
, mld_melding_key
|
||||
, prs_perslid_key
|
||||
, mld_melding_note_aanmaak
|
||||
, mld_melding_note_omschrijving
|
||||
FROM mld_melding_note
|
||||
UNION
|
||||
SELECT 'ORD'
|
||||
, mld_opdr_note_key
|
||||
, mld_opdr_key
|
||||
, prs_perslid_key
|
||||
, mld_opdr_note_aanmaak
|
||||
, mld_opdr_note_omschrijving
|
||||
FROM mld_opdr_note
|
||||
UNION
|
||||
SELECT 'FIN'
|
||||
, fin_factuur_note_key
|
||||
, fin_factuur_key
|
||||
, prs_perslid_key
|
||||
, fin_factuur_note_aanmaak
|
||||
, fin_factuur_note_omschrijving
|
||||
FROM fin_factuur_note
|
||||
UNION
|
||||
SELECT 'CNT'
|
||||
, cnt_contract_note_key
|
||||
, cnt_contract_key
|
||||
, prs_perslid_key
|
||||
, cnt_contract_note_aanmaak
|
||||
, cnt_contract_note_omschrijving
|
||||
FROM cnt_contract_note
|
||||
UNION
|
||||
SELECT 'PRJ'
|
||||
, prj_scenario_note_key
|
||||
, prj_scenario_key
|
||||
, prs_perslid_key
|
||||
, prj_scenario_note_aanmaak
|
||||
, prj_scenario_note_omschrijving
|
||||
FROM prj_scenario_note
|
||||
*/
|
||||
|
||||
%>
|
||||
<!-- #include file="../mld/mld.inc" -->
|
||||
<!-- #include file="model_objects.inc"-->
|
||||
<%
|
||||
|
||||
model_notes =
|
||||
{
|
||||
module: "FAC",
|
||||
table: "fac_v_notes",
|
||||
primary: "key",
|
||||
records_name: "notes",
|
||||
record_name: "note",
|
||||
fields: [{ name: "id", dbs: "key", typ: "key", filter: "exact" },
|
||||
{ name: "writer", dbs: "writer_key", typ: "key", foreign: "prs_perslid", filter: "exact" },
|
||||
{ name: "description", dbs: "omschrijving", typ: "varchar", filter: "like" },
|
||||
{ name: "createdate", dbs: "aanmaak", typ: "datetime" }
|
||||
// { name: "module", dbs: "module", typ: "varchar", filter: "exact" }
|
||||
// { name: "parent", dbs: "parent_key", typ: "key", filter: "exact" } //niet terug linken
|
||||
],
|
||||
|
||||
|
||||
_analyze_fields: function (fields, params, jsondata) /* analyseer inkomende data, common voor PUT en POST */
|
||||
{
|
||||
},
|
||||
|
||||
_validate_fields: function (fields, params, jsondata) /* valideer fields, alle constraints die niet door de database worden afgevangen */
|
||||
{
|
||||
},
|
||||
|
||||
_getNoteTable: function (module)
|
||||
{
|
||||
var tabel = {}; // De tabel met notes die aangepast moet worden.
|
||||
switch (module)
|
||||
{
|
||||
case "MLD":
|
||||
{ tabel.naam = "mld_melding_note";
|
||||
tabel.seq = "mld_s_mld_melding_note_key";
|
||||
tabel.parent = "mld_melding";
|
||||
break;
|
||||
}
|
||||
case "ORD":
|
||||
{ tabel.naam = "mld_opdr_note";
|
||||
tabel.seq = "mld_s_mld_opdr_note_key";
|
||||
tabel.parent = "mld_opdr";
|
||||
break;
|
||||
}
|
||||
case "FIN":
|
||||
{ tabel.naam = "fin_factuur_note";
|
||||
tabel.seq = "fin_s_fin_factuur_note_key";
|
||||
tabel.parent = "fin_factuur";
|
||||
break;
|
||||
}
|
||||
case "CNT":
|
||||
{ tabel.naam = "cnt_contract_note";
|
||||
tabel.seq = "cnt_s_cnt_contract_note_key";
|
||||
tabel.parent = "cnt_contract";
|
||||
break;
|
||||
}
|
||||
case "PRJ":
|
||||
{ tabel.naam = "prj_scenario_note";
|
||||
tabel.seq = "prj_s_prj_scenario_note_key";
|
||||
tabel.parent = "prj_scenario";
|
||||
break;
|
||||
}
|
||||
}
|
||||
return tabel;
|
||||
},
|
||||
|
||||
REST_GET: function _GET(params)
|
||||
{
|
||||
var query = api2.sqlfields(params, model_notes );
|
||||
var wheres = api2.sqlfilter(params, model_notes);
|
||||
query.wheres = query.wheres.concat(wheres);
|
||||
|
||||
var sql = "SELECT " + query.selects.join(", ")
|
||||
+ " FROM " + query.tables.join(", ")
|
||||
+ (params.filter.id || params.filter.parent ? " WHERE " + query.wheres.join(" AND " ) : "");
|
||||
|
||||
var json = api2.sql2json (params, sql, model_notes );
|
||||
|
||||
return json;
|
||||
},
|
||||
|
||||
REST_PUT: function (params, jsondata, the_key) /* update note */
|
||||
{
|
||||
// Een note kan alleen worden aangepast door de persoon die hem geschreven heeft.
|
||||
// Alleen van de meest recente note bij een (melding/opdrachte/...) kan de omschrijving worden aangepast.
|
||||
//
|
||||
var fields = api2.update_fields(params, model_notes, jsondata); // Build updater
|
||||
|
||||
var xxx_tabel = model_notes._getNoteTable(params.data.module); // De tabel met notes die aangepast moet worden.
|
||||
// Wijzig de veldnamen overeenkomstig de te gebruiken tabel
|
||||
for (i in fields)
|
||||
{
|
||||
if (fields[i].dbs == "writer_key")
|
||||
fields[i].dbs = "prs_perslid_key";
|
||||
else
|
||||
fields[i].dbs = xxx_tabel.naam + "_" + fields[i].dbs;
|
||||
}
|
||||
var wheres = [ xxx_tabel.naam+"_key = " + the_key];
|
||||
var xxxUpd = buildTrackingUpdate(xxx_tabel.naam, wheres.join(" AND " ), fields, { noValidateToken: true });
|
||||
|
||||
Oracle.Execute(xxxUpd.sql);
|
||||
|
||||
return { key: the_key };
|
||||
},
|
||||
|
||||
REST_POST: function (params, jsondata) /* new note */
|
||||
{
|
||||
params.isNew = true;
|
||||
//
|
||||
var xxx_tabel = model_notes._getNoteTable(params.data.module); // De tabel met notes die aangepast moet worden.
|
||||
var fields = [];
|
||||
fields.push({ dbs: "prs_perslid_key", typ: "key", val: user_key });
|
||||
fields.push({ dbs: xxx_tabel.parent+"_key", typ: "key", val: params.filter.id });
|
||||
fields.push({ dbs: xxx_tabel.naam+"_aanmaak", typ: "datetime", val: new Date() });
|
||||
fields.push({ dbs: xxx_tabel.naam+"_omschrijving", typ: "varchar", val: jsondata.description });
|
||||
fields.push({ dbs: xxx_tabel.naam+"_key", typ: "key", seq: xxx_tabel.seq });
|
||||
|
||||
var xxxIns = buildInsert(xxx_tabel.naam, fields, { noValidateToken: true });
|
||||
var new_key = xxxIns.sequences[xxx_tabel.naam];
|
||||
|
||||
var sql = "BEGIN "
|
||||
+ xxxIns.sql + ";"
|
||||
+ "END;";
|
||||
Oracle.Execute(xxxIns.sql);
|
||||
|
||||
return { key: new_key };
|
||||
},
|
||||
|
||||
REST_DELETE: function (params, jsondata, the_key) /* delete note */
|
||||
{ // Niet van toepassing.
|
||||
}
|
||||
}
|
||||
%>
|
||||
@@ -1,93 +0,0 @@
|
||||
<% /*
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File: model_objects.inc
|
||||
|
||||
Description: Object model. Dit bestand heeft niets met interfacing te maken
|
||||
maar werkt uitsluitend op JSON-data
|
||||
Parameters:
|
||||
Context:
|
||||
|
||||
Notes: We ondersteunen vooralsnog uitsluitend ruimtegebonden objecten
|
||||
*/
|
||||
|
||||
%>
|
||||
<!-- #include file="../Shared/discxalg3d.inc"-->
|
||||
<%
|
||||
model_objects =
|
||||
{
|
||||
table: "ins_deel",
|
||||
primary: "ins_deel_key",
|
||||
records_name: "objects",
|
||||
record_name: "object",
|
||||
multi_update: true,
|
||||
fields: [{ name: "id", dbs: "ins_deel_key", typ: "key", filter: "exact" },
|
||||
//{ name: "code", dbs: "ins_deel_code", typ: "varchar", filter: "like" },
|
||||
{ name: "name", dbs: "ins_deel_omschrijving", typ: "varchar"},
|
||||
{ name: "type", dbs: "ins_srtdeel_key", typ: "key", filter: "exact", foreign: "ins_srtdeel"},
|
||||
{ name: "state", dbs: "ins_deel_state", typ: "varchar" },
|
||||
{ name: "statedate", dbs: "ins_deel_statedate", typ: "datetime" },
|
||||
{ name: "location", dbs: "alg_v_allonroerendgoed.alg_locatie_key", typ: "key", foreign: "alg_locatie"},
|
||||
{ name: "building", dbs: "alg_v_allonroerendgoed.alg_gebouw_key", typ: "key", foreign: "alg_gebouw" },
|
||||
{ name: "floor", dbs: "alg_v_allonroerendgoed.alg_verdieping_key", typ: "key", foreign: "alg_verdieping" },
|
||||
{ name: "room", dbs: "alg_v_allonroerendgoed.alg_ruimte_key", typ: "key", foreign: "alg_ruimte" },
|
||||
//{ name: "type", dbs: "ins_deel_statedate", typ: "key", filter: "exact", foreign: "ins_srtdeel"},
|
||||
|
||||
//{ name: "district", dbs: "alg_district_key", typ: "key", foreign: "alg_district"},
|
||||
//{ name: "coordinate_x", dbs: "ins_deel_x", typ: "number"},
|
||||
//{ name: "coordinate_y", dbs: "ins_deel_y", typ: "number"},
|
||||
],
|
||||
REST_GET: function _GET(params)
|
||||
{
|
||||
var urole = "fe"; // TODO: Moet echt niet ter zake doen
|
||||
var autfunction = urole == "fe"? "WEB_INSUSE" : "WEB_INSMAN";
|
||||
params.authparams = user.checkAutorisation(autfunction, null, null, true); // pessimistisch
|
||||
|
||||
// TODO: Add authorization
|
||||
var query = api2.sqlfields(params, model_objects);
|
||||
query.wheres.push("ins_deel_verwijder IS NULL");
|
||||
|
||||
// TODO: We ondersteunen uitsluitend ruimtegebonden objecten
|
||||
query.tables.push("alg_v_allonroerendgoed");
|
||||
query.wheres.push("'R' = ins_deel.ins_alg_ruimte_type");
|
||||
query.wheres.push("alg_v_allonroerendgoed.alg_onroerendgoed_keys(+) = ins_deel.ins_alg_ruimte_key");
|
||||
|
||||
var wheres = api2.sqlfilter(params, model_objects)
|
||||
query.wheres = query.wheres.concat(wheres);
|
||||
|
||||
var sql = "SELECT " + query.selects.join(", ")
|
||||
+ " FROM " + query.tables.join(", ")
|
||||
+ " WHERE " + query.wheres.join(" AND " )
|
||||
+ " ORDER BY ins_deel_omschrijving";
|
||||
|
||||
var json = api2.sql2json (params, sql, model_objects);
|
||||
|
||||
return json;
|
||||
},
|
||||
REST_PUT: function (params, jsondata, the_key) /* update object */
|
||||
{
|
||||
//__DoLogj(jsondata)
|
||||
var fields = api2.update_fields(params, model_objects, jsondata); // Build updater
|
||||
//model_objects._validate_fields(fields, params, jsondata);
|
||||
|
||||
// TODO: Autorization
|
||||
var wheres = [" ins_deel_key = " + the_key];
|
||||
var insUpd = buildTrackingUpdate("ins_deel", wheres.join(" AND " ), fields, { noValidateToken: true });
|
||||
// __DoLog(insUpd.sql);
|
||||
Oracle.Execute(insUpd.sql);
|
||||
|
||||
//var beztrack = api2.process_includes(params, model_objects, jsondata, the_key);
|
||||
|
||||
return { key: the_key };
|
||||
},
|
||||
xxx_POST: function (params) /* new object */
|
||||
{
|
||||
// Nog niet ondersteund
|
||||
},
|
||||
xxx_DELETE: function (params) /* delete object */
|
||||
{
|
||||
// Nog niet ondersteund
|
||||
}
|
||||
}
|
||||
%>
|
||||
@@ -1,121 +0,0 @@
|
||||
<% /*
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File: model_orders.inc
|
||||
|
||||
Description: Opdrachten model. Dit bestand heeft niets met interfacing te maken
|
||||
maar werkt uitsluitend op JSON-data
|
||||
Parameters:
|
||||
Context:
|
||||
|
||||
Notes: Ongeveer
|
||||
|
||||
TODO: disc3d conditie voor de geldendende autfunction toevoegen
|
||||
TODO: het bijhalen van de prefix is op deze manier veel te duur
|
||||
*/
|
||||
|
||||
%>
|
||||
<!-- #include file="../Shared/discxalg3d.inc"-->
|
||||
<!-- #include file="../shared/status.inc" -->
|
||||
<%
|
||||
|
||||
model_orders =
|
||||
{
|
||||
module: "MLD",
|
||||
table: "mld_opdr",
|
||||
primary: "mld_opdr_key",
|
||||
records_name: "orders",
|
||||
record_name: "order",
|
||||
// Dit zijn voorlopige namen!
|
||||
fields: [{ name: "id", dbs: "mld_opdr_key", typ: "key", filter: "exact" },
|
||||
{ name: "name", dbs: "mld_opdr_id", /* moet alias worden */ typ: "varchar", filter: "exact",
|
||||
sql: "COALESCE(mld_opdr_id, ins_srtdiscipline.ins_srtdiscipline_prefix||mld_opdr.mld_melding_key||'/'||mld_opdr_bedrijfopdr_volgnr)" },
|
||||
{ name: "contact", dbs: "prs_perslid_key", typ: "key", foreign: "prs_perslid", track: L("lcl_mld_behandelaar"), filter: "exact" },
|
||||
{ name: "supplier", dbs: "mld_uitvoerende_keys", typ: "key", foreign: "mld_uitvoerende", track: L("lcl_ord_company_uit"), filter: "exact" },
|
||||
{ name: "suppliercontact", dbs: "prs_contactpersoon_key", typ: "key", foreign: "prs_contactpersoon", track: L("lcl_contact_pers"), filter: "exact" },
|
||||
{ name: "ordertype", dbs: "mld_typeopdr_key", typ: "key", foreign: "mld_typeopdr", track: L("lcl_descr")},
|
||||
{ name: "description", dbs: "mld_opdr_omschrijving", typ: "varchar", track: L("lcl_mld_opdr_description"), filter: "like" },
|
||||
{ name: "remark", dbs: "mld_opdr_opmerking", typ: "varchar", track: L("lcl_mld_inf_Opmerking"), filter: "like" },
|
||||
{ name: "account", dbs: "prs_kostenplaats_key", typ: "key", foreign: "prs_kostenplaats", track: L("lcl_account"), filter: "exact" },
|
||||
{ name: "costs", dbs: "mld_opdr_kosten", typ: "number", track: L("lcl_total_cost")},
|
||||
{ name: "status", dbs: "mld_statusopdr_key", typ: "key", foreign: status.getopdrstatustext, track: L("lcl_status"), filter: "exact" },
|
||||
{ name: "orderdate", dbs: "mld_opdr_datumbegin", typ: "datetime", track: L("lcl_orderdate"), filter:"range"},
|
||||
{ name: "enddate", dbs: "mld_opdr_einddatum", typ: "datetime", track: L("lcl_opdr_enddate"), filter:"range"},
|
||||
{ name: "plandate", dbs: "mld_opdr_plandatum", typ: "datetime", track: L("lcl_opdr_plandate"), filter:"range"},
|
||||
{ name: "location", dbs: "alg_v_allonroerendgoed.alg_locatie_key", typ: "key", foreign: "alg_locatie", track: L("lcl_location"), filter: "exact" },
|
||||
{ name: "building", dbs: "alg_v_allonroerendgoed.alg_gebouw_key", typ: "key", foreign: "alg_gebouw", track: L("lcl_building"), filter: "exact" },
|
||||
{ name: "floor", dbs: "alg_v_allonroerendgoed.alg_verdieping_key", typ: "key", foreign: "alg_verdieping", track: L("lcl_floor"), filter: "exact" },
|
||||
{ name: "room", dbs: "alg_v_allonroerendgoed.alg_ruimte_key", typ: "key", foreign: "alg_ruimte", track: L("lcl_room"), filter: "exact" },
|
||||
{ name: "terrain", dbs: "alg_v_allonroerendgoed.alg_terreinsector_key", typ: "key", foreign: "alg_terreinsector", track: L("lcl_room"), filter: "exact" },
|
||||
{ name: "contract", dbs: "cnt_contract_key", typ: "key", foreign: "cnt_contract", track: L("lcl_contract"), filter: "exact" }
|
||||
],
|
||||
includes: {}, // notes?
|
||||
|
||||
REST_GET: function _GET(params)
|
||||
{
|
||||
var scope = getQParamSafe("scope", "fe");
|
||||
var autfunction = { fe : "WEB_MLDORD", fo : "WEB_ORDBOF", bo : "WEB_ORDBOF", mi : "WEB_MLDBAC" } [scope];
|
||||
params.authparams = user.checkAutorisation(autfunction, null, null, true); // pessimistisch
|
||||
|
||||
// TODO: Add authorization
|
||||
var query = api2.sqlfields(params, model_orders );
|
||||
|
||||
if (scope == "fe")
|
||||
{
|
||||
query.wheres.push("mld_uitvoerende_keys=" + user_key); // Is dit juiste interpretatie van fe?
|
||||
}
|
||||
|
||||
if (!params.filter.id)
|
||||
{
|
||||
// TODO Kiezen voor een redelijk defaultfilter
|
||||
}
|
||||
|
||||
/* we need the prefix for the id, costly! Scheelt 1100ms!! */
|
||||
query.tables.push("mld_melding");
|
||||
query.wheres.push("mld_opdr.mld_melding_key = mld_melding.mld_melding_key");
|
||||
query.tables.push("mld_stdmelding");
|
||||
query.wheres.push("mld_melding.mld_stdmelding_key = mld_stdmelding.mld_stdmelding_key");
|
||||
query.tables.push("ins_tab_discipline");
|
||||
query.wheres.push("mld_stdmelding.mld_ins_discipline_key = ins_tab_discipline.ins_discipline_key");
|
||||
query.tables.push("ins_srtdiscipline");
|
||||
query.wheres.push("ins_tab_discipline.ins_srtdiscipline_key = ins_srtdiscipline.ins_srtdiscipline_key");
|
||||
|
||||
// Opmerkelijk: we pakken niet de plaatsvelden van de opdracht (zijn nog niet (altijd) gevuld maar van de melding
|
||||
query.tables.push("alg_v_allonroerendgoed");
|
||||
query.wheres.push("mld_melding.mld_alg_onroerendgoed_keys = alg_v_allonroerendgoed.alg_onroerendgoed_keys(+)");
|
||||
|
||||
|
||||
var wheres = api2.sqlfilter(params, model_orders);
|
||||
query.wheres = query.wheres.concat(wheres);
|
||||
|
||||
var sql = "SELECT " + query.selects.join(", ")
|
||||
+ " FROM " + query.tables.join(", ")
|
||||
+ " WHERE " + query.wheres.join(" AND " )
|
||||
+ " ORDER BY mld_opdr_key";
|
||||
|
||||
// TODO: disc3d conditie voor de geldendende autfunction toevoegen
|
||||
|
||||
var json = api2.sql2json (params, sql, model_orders );
|
||||
|
||||
return json;
|
||||
},
|
||||
_analyze_fields: function (fields, params, jsondata) /* analyseer inkomende data, common voor PUT en POST */
|
||||
{
|
||||
},
|
||||
_validate_fields: function (fields, params, jsondata) /* valideer fields, alle constraints die niet door de database worden afgevangen */
|
||||
{
|
||||
},
|
||||
|
||||
REST_PUT: function (params, jsondata, the_key) /* update call */
|
||||
{
|
||||
},
|
||||
REST_POST: function (params, jsondata) /* new call */
|
||||
{
|
||||
},
|
||||
|
||||
REST_DELETE: function (params, jsondata, the_key) /* delete call */
|
||||
{
|
||||
}
|
||||
}
|
||||
%>
|
||||
@@ -9,46 +9,36 @@
|
||||
Parameters:
|
||||
Context:
|
||||
|
||||
- Notes: - We ondersteunen nog alleen opvragen van je eigen gegevens
|
||||
- Standaard voegen we de gegevens van de hoofdwerkplek toe
|
||||
- Ooit doen we er nog een include bij van alle werkplekken.
|
||||
Notes:
|
||||
*/
|
||||
|
||||
%>
|
||||
<!-- #include file="../Shared/discxalg3d.inc"-->
|
||||
<%
|
||||
|
||||
model_persons =
|
||||
{
|
||||
table: "prs_perslid",
|
||||
primary: "prs_perslid_key",
|
||||
records_name: "persons",
|
||||
record_name: "person",
|
||||
fields: [{ name: "id", dbs: "prs_perslid_key", typ: "key", filter: "exact"},
|
||||
{ name: "lastname", dbs: "prs_perslid_naam", typ: "varchar", filter: "exact"},
|
||||
{ name: "firstname", dbs: "prs_perslid_voornaam", typ: "varchar", filter: "exact"},
|
||||
{ name: "mail", dbs: "prs_perslid_email", typ: "varchar", filter: "exact"},
|
||||
{ name: "login", dbs: "prs_perslid_oslogin", typ: "varchar", filter: "exact"},
|
||||
{ name: "department", dbs: "prs_afdeling_key", typ: "key", foreign: "prs_afdeling"},
|
||||
{ name: "location", dbs: "prs_v_werkplek_gegevens.alg_locatie_key", typ: "key", foreign: "alg_locatie", filter: "exact"},
|
||||
{ name: "building", dbs: "prs_v_werkplek_gegevens.alg_gebouw_key", typ: "key", foreign: "alg_gebouw" },
|
||||
{ name: "floor", dbs: "prs_v_werkplek_gegevens.alg_verdieping_key", typ: "key", foreign: "alg_verdieping" },
|
||||
{ name: "room", dbs: "prs_v_werkplek_gegevens.alg_ruimte_key", typ: "key", foreign: "alg_ruimte" }
|
||||
fields: [{ name: "id", dbs: "prs_perslid_key", typ: "key", filter: "exact" },
|
||||
{ name: "lastname", dbs: "prs_perslid_naam", typ: "varchar"},
|
||||
{ name: "firstname", dbs: "prs_perslid_voornaam", typ: "varchar"},
|
||||
{ name: "mail", dbs: "prs_perslid_email", typ: "varchar"},
|
||||
{ name: "login", dbs: "prs_perslid_oslogin", typ: "varchar"},
|
||||
{ name: "department", dbs: "prs_afdeling_key", typ: "key", foreign: "prs_afdeling"}
|
||||
],
|
||||
|
||||
REST_GET: function _GET(params)
|
||||
{
|
||||
//var urole = "fe"; // TODO: Moet echt niet ter zake doen
|
||||
//var autfunction = urole == "fe"? "WEB_ALGUSE" : "WEB_ALGMAN";
|
||||
//params.authparams = user.checkAutorisation(autfunction, null, null, true); // pessimistisch
|
||||
var urole = "fe"; // TODO: Moet echt niet ter zake doen
|
||||
var autfunction = urole == "fe"? "WEB_ALGUSE" : "WEB_ALGMAN";
|
||||
params.authparams = user.checkAutorisation(autfunction, null, null, true); // pessimistisch
|
||||
|
||||
// TODO: Add authorization
|
||||
var query = api2.sqlfields(params, model_persons );
|
||||
query.tables.push("prs_v_werkplek_gegevens");
|
||||
query.tables.push("prs_v_hoofdperslidwerkplek");
|
||||
query.wheres.push("prs_v_hoofdperslidwerkplek.prs_perslid_key(+) = prs_perslid.prs_perslid_key");
|
||||
query.wheres.push("prs_v_hoofdperslidwerkplek.prs_werkplek_key = prs_v_werkplek_gegevens.prs_werkplek_key(+)");
|
||||
|
||||
query.wheres.push("prs_perslid.prs_perslid_key = " + user_key); // Altijd fe vooralnog, TODO: Add authorization
|
||||
query.wheres.push("prs_perslid_key = " + user_key); // Altijd fe vooralnog
|
||||
|
||||
var wheres = api2.sqlfilter(params, model_persons);
|
||||
query.wheres = query.wheres.concat(wheres);
|
||||
@@ -58,21 +48,20 @@ model_persons =
|
||||
+ " WHERE " + query.wheres.join(" AND " )
|
||||
+ " ORDER BY prs_perslid_naam, prs_perslid.prs_perslid_key";
|
||||
|
||||
__DoLog(sql);
|
||||
|
||||
var json = api2.sql2json (params, sql, model_persons );
|
||||
|
||||
return json;
|
||||
},
|
||||
PUT: function (params) /* update building */
|
||||
{
|
||||
// Nog niet ondersteund
|
||||
},
|
||||
POST: function (params) /* new building */
|
||||
{
|
||||
// Nog niet ondersteund
|
||||
},
|
||||
DELETE: function (params) /* delete building */
|
||||
{
|
||||
// Nog niet ondersteund
|
||||
}
|
||||
}
|
||||
%>
|
||||
@@ -22,6 +22,7 @@ model_regions =
|
||||
records_name: "regions",
|
||||
record_name: "region",
|
||||
fields: [{ name: "id", dbs: "alg_regio_key", typ: "key", filter: "exact" },
|
||||
//{ name: "name", dbs: "alg_region_naam", typ: "varchar", filter: "like" },
|
||||
{ name: "name", dbs: "alg_regio_omschrijving", typ: "varchar"}
|
||||
],
|
||||
REST_GET: function _GET(params)
|
||||
|
||||
@@ -1,74 +0,0 @@
|
||||
<% /*
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File: model_reservableconsumables.inc
|
||||
|
||||
Description: reserveerbare artikelen model. Dit bestand heeft niets met interfacing te maken
|
||||
maar werkt uitsluitend op JSON-data
|
||||
Parameters:
|
||||
Context:
|
||||
|
||||
Notes:
|
||||
*/
|
||||
|
||||
%>
|
||||
<!-- #include file="../Shared/discxalg3d.inc"-->
|
||||
<%
|
||||
|
||||
model_reservableconsumables =
|
||||
{
|
||||
table: "res_artikel",
|
||||
primary: "res_artikel_key",
|
||||
records_name: "reservableconsumables",
|
||||
record_name: "reservableconsumables",
|
||||
fields: [ { name: "id", dbs: "res_artikel_key", typ: "key", filter: "exact" },
|
||||
{ name: "name", dbs: "res_artikel_omschrijving", typ: "varchar", filter: "like" },
|
||||
{ name: "code", dbs: "res_artikel_nr", typ: "number", filter: "like" },
|
||||
{ name: "seqnr", dbs: "res_artikel_volgnummer", typ: "number" },
|
||||
{ name: "remark", dbs: "res_artikel_opmerking", typ: "varchar", filter: "like" },
|
||||
{ name: "unit", dbs: "res_artikel_eenheid", typ: "varchar", filter: "like" },
|
||||
{ name: "price", dbs: "res_artikel_prijs", typ: "float" },
|
||||
{ name: "fixed", dbs: "res_artikel_prijs_vast", typ: "check0", filter: "exact" },
|
||||
{ name: "purchase", dbs: "res_artikel_inkoopprijs", typ: "float"},
|
||||
{ name: "vat", dbs: "res_artikel_btw", typ: "float" },
|
||||
{ name: "employeecost", dbs: "res_artikel_kostenpersoneel", typ: "float" },
|
||||
{ name: "generalcost" , dbs: "res_artikel_kostenalgemeen", typ: "float" },
|
||||
{ name: "catalog", dbs: "res_discipline_key", typ: "key", foreign: "res_discipline" },
|
||||
{ name: "group", dbs: "res_artikel_groep", typ: "varchar", filter: "like" },
|
||||
{ name: "start", dbs: "res_artikel_ingangsdatum", typ: "date" },
|
||||
{ name: "expires", dbs: "res_artikel_vervaldatum", typ: "date" },
|
||||
{ name: "minimum", dbs: "res_artikel_minimum", typ: "number", filter: "exact" }
|
||||
],
|
||||
|
||||
REST_GET: function _GET(params)
|
||||
{
|
||||
var urole = "fe"; // TODO: Moet echt niet ter zake doen
|
||||
var autfunction = urole == "fe"? "WEB_RESUSE" : "WEB_RESMAN";
|
||||
params.authparams = user.checkAutorisation(autfunction, null, null, true); // pessimistisch
|
||||
|
||||
// TODO: Add authorization
|
||||
var query = api2.sqlfields(params, model_reservableconsumables);
|
||||
query.wheres.push("res_artikel_verwijder IS NULL");
|
||||
|
||||
var wheres = api2.sqlfilter(params, model_reservableconsumables);
|
||||
query.wheres = query.wheres.concat(wheres);
|
||||
|
||||
var sql = "SELECT " + query.selects.join(", ")
|
||||
+ " FROM " + query.tables.join(", ")
|
||||
+ " WHERE " + query.wheres.join(" AND " )
|
||||
+ " ORDER BY res_artikel_omschrijving";
|
||||
var json = api2.sql2json (params, sql, model_reservableconsumables);
|
||||
return json;
|
||||
},
|
||||
PUT: function (params) /* update reservable articles */
|
||||
{
|
||||
},
|
||||
POST: function (params) /* new reservable article */
|
||||
{
|
||||
},
|
||||
DELETE: function (params) /* delete reservable article */
|
||||
{
|
||||
}
|
||||
}
|
||||
%>
|
||||
@@ -1,208 +0,0 @@
|
||||
<% /*
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File: model_reservableequipment.inc
|
||||
|
||||
Description: reserveerbare delen model. Dit bestand heeft niets met interfacing te maken
|
||||
maar werkt uitsluitend op JSON-data
|
||||
Parameters:
|
||||
Context:
|
||||
|
||||
Notes:
|
||||
*/
|
||||
|
||||
%>
|
||||
<!-- #include file="../Shared/discxalg3d.inc"-->
|
||||
<%
|
||||
function alg_level(json)
|
||||
{
|
||||
var alg_level_id = json;
|
||||
var alg_level = "";
|
||||
switch (alg_level_id)
|
||||
{
|
||||
case -1: alg_level = "Alles"; break;
|
||||
case 0: alg_level = "Regio"; break;
|
||||
case 1: alg_level = "District"; break;
|
||||
case 2: alg_level = "Locatie"; break;
|
||||
case 3: alg_level = "Gebouw"; break;
|
||||
case 4: alg_level = "Verdieping"; break;
|
||||
case 5: alg_level = "Ruimte"; break;
|
||||
default: UNKNOWN_FORMAT_TYPE;
|
||||
}
|
||||
return alg_level;
|
||||
}
|
||||
|
||||
model_reservableequipment =
|
||||
{
|
||||
table: "res_deel",
|
||||
primary: "res_deel_key",
|
||||
records_name: "reservableequipment",
|
||||
record_name: "reservableequipment",
|
||||
fields: [ { name: "id", dbs: "res_deel_key", typ: "key", filter: "exact" },
|
||||
{ name: "name", dbs: "res_deel_omschrijving", typ: "varchar", filter: "like" },
|
||||
{ name: "remark", dbs: "res_deel_opmerking", typ: "varchar", filter: "like" },
|
||||
{ name: "unit", dbs: "res_deel_eenheid", typ: "varchar", filter: "like" },
|
||||
{ name: "price", dbs: "res_deel_prijs", typ: "float", filter: "like" },
|
||||
{ name: "fixed", dbs: "res_deel_prijs_vast", typ: "check0", filter: "exact" },
|
||||
{ name: "object", dbs: "res_ins_deel_key", typ: "key", foreign: "ins_deel" },
|
||||
{ name: "catalog", dbs: "res_discipline_key", typ: "key", foreign: "res_discipline", filter: "exact" },
|
||||
{ name: "scope", dbs: "res_deel_alg_level", typ: "key", foreign: alg_level }
|
||||
],
|
||||
// advanced filter
|
||||
filter: { prefunc: function _prefilterfunc(params)
|
||||
{
|
||||
return null;
|
||||
//__DoLog("getQParamISODate: " + getQParamISODate("res_van"));
|
||||
var res_room_key = getQParamInt("allowedinroom", -1);
|
||||
if (res_van && res_tot)
|
||||
{
|
||||
var params = {res_van: res_van, // TODO: Welke dag?
|
||||
res_tot: res_tot,
|
||||
loc: loc_key, // 71=alkw
|
||||
authparams : user.checkAutorisation("WEB_RESUSE", null, null, true),
|
||||
forSelectRoom: true
|
||||
}
|
||||
return res.plan_bezet_info(params); // wordt meegeven aan de volgende func
|
||||
}
|
||||
else
|
||||
return null;
|
||||
},
|
||||
func: function _filterfunc(oRs, params, prefuncdata)
|
||||
{
|
||||
if (!prefuncdata)
|
||||
return true;
|
||||
var res_room_key = getQParamInt("allowedinroom", -1);
|
||||
var key = oRs("res_ruimte_key").Value;
|
||||
var occupations = prefuncdata[key]
|
||||
prev_end = res_van.setFloatHours(S("res_t1")); // TODO: per ruimte?
|
||||
for (var i in occupations)
|
||||
{
|
||||
var occu = occupations[i];
|
||||
if (res_van < occu.res_tot && res_tot > occu.res_van)
|
||||
{
|
||||
return false; // Overlap
|
||||
}
|
||||
prev_end = occu.res_tot;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
},
|
||||
includes: {
|
||||
"occupations": { // prefunc om alles tegelijk op te halen
|
||||
prefunc: function _occupations(params)
|
||||
{
|
||||
var res_van = getQParamISODate("from", new Date());
|
||||
var res_tot = getQParamISODate("to", res_van);
|
||||
//var loc_key = parseInt(params.filter.location); // 71=alkw
|
||||
|
||||
// JGL: Eigenlijk wil ik hier res.plan_deel_bezet_info gaan gebruiken,
|
||||
// Die is echter zeer sterk gericht op het werken voor <20><>n
|
||||
// discipline tegelijk en dat durfde ik niet met 5.4.2b overhoop te halen
|
||||
// TODO: Nu ondersteunen we echter nog niet dat een ins_deel voor meerdere
|
||||
// res_delen gebruikt wordt (is wel mogelijk namelijk als dat
|
||||
// verschillende catalogi zijn)
|
||||
var sql = "SELECT rrd.res_rsv_deel_van"
|
||||
+ " , rrd.res_rsv_deel_tot"
|
||||
+ " , rd.res_deel_key"
|
||||
+ " , rrd.res_rsv_deel_key"
|
||||
+ " FROM res_v_aanwezigrsv_ruimte rr"
|
||||
+ " , res_v_aanwezigdeel rd"
|
||||
+ " , res_v_aanwezigrsv_deel rrd"
|
||||
+ " WHERE rrd.res_rsv_deel_tot >= " + res_van.beginToSQL()
|
||||
+ " AND rrd.res_rsv_deel_van <= " + res_tot.endToSQL()
|
||||
+ " AND rrd.res_deel_key = rd.res_deel_key"
|
||||
+ " AND rrd.res_rsv_ruimte_key = rr.res_rsv_ruimte_key"
|
||||
+ " AND rd.res_discipline_key <> " + S("vis_parking_key")
|
||||
+ " AND " + model_reservableequipment._autorized_discs_sql("rd.res_discipline_key");
|
||||
|
||||
var existing_res = {};
|
||||
var oRs = Oracle.Execute(sql);
|
||||
while (!oRs.Eof)
|
||||
{
|
||||
var res_deel_key = oRs("res_deel_key").value;
|
||||
if (!existing_res[res_deel_key]) existing_res[res_deel_key] = [];
|
||||
|
||||
var data = { id: oRs("res_rsv_deel_key").Value,
|
||||
from: new Date(oRs("res_rsv_deel_van").Value),
|
||||
to: new Date(oRs("res_rsv_deel_tot").Value)
|
||||
};
|
||||
existing_res[res_deel_key].push(data);
|
||||
oRs.MoveNext();
|
||||
}
|
||||
oRs.Close();
|
||||
//if (params.filter.allowedinresroom)
|
||||
// params.res_ruimte_key = params.filter.allowedinresroom;
|
||||
|
||||
return existing_res; // wordt meegeven aan de volgende func
|
||||
},
|
||||
func: function _occupations(key, params, oRs, record, prefuncdata)
|
||||
{
|
||||
var ins_deel_key = key; //record.object.id;
|
||||
// Het is al in het goede formaat
|
||||
return prefuncdata[ins_deel_key] ;
|
||||
}
|
||||
}
|
||||
},
|
||||
_autorized_discs_sql: function (field)
|
||||
{
|
||||
var urole = "fe"; // TODO: Moet echt niet ter zake doen
|
||||
var autfunction = urole == "fe"? "WEB_RESUSE" : "WEB_RESMAN";
|
||||
var sql = field + " IN ("
|
||||
+ " SELECT g.ins_discipline_key"
|
||||
+ " FROM fac_v_webgebruiker g, fac_functie f "
|
||||
+ " WHERE g.fac_functie_key = f.fac_functie_key "
|
||||
+ " AND f.fac_functie_code = " + safe.quoted_sql(autfunction)
|
||||
+ " AND g.fac_gebruiker_alg_level_read < 9"
|
||||
+ " AND g.prs_perslid_key = " + user_key
|
||||
+ " AND " + field + " = g.ins_discipline_key" // deze regel is redundant maar goed voor de performance
|
||||
+ " )";
|
||||
return sql;
|
||||
},
|
||||
REST_GET: function _GET(params)
|
||||
{
|
||||
var urole = "fe"; // TODO: Moet echt niet ter zake doen
|
||||
var autfunction = urole == "fe"? "WEB_RESUSE" : "WEB_RESMAN";
|
||||
params.authparams = user.checkAutorisation(autfunction, null, null, true); // pessimistisch
|
||||
|
||||
// TODO: Add authorization
|
||||
var query = api2.sqlfields(params, model_reservableequipment);
|
||||
query.wheres.push("res_deel_verwijder IS NULL");
|
||||
query.wheres.push(model_reservableequipment._autorized_discs_sql("res_discipline_key"));
|
||||
|
||||
var wheres = api2.sqlfilter(params, model_reservableequipment);
|
||||
query.wheres = query.wheres.concat(wheres);
|
||||
|
||||
if (params.filter.allowedinresroom)
|
||||
{
|
||||
var rparams = { res_ruimte_key : params.filter.allowedinresroom,
|
||||
select_fields : "r.res_deel_key",
|
||||
//sdisc : p_sdisc, // TODO?
|
||||
group_by : " GROUP BY r.res_deel_key",
|
||||
autfunction : autfunction
|
||||
};
|
||||
var sql = get_res_deel_sql ( rparams );
|
||||
query.wheres.push("res_deel_key IN (" + sql + ")");
|
||||
}
|
||||
|
||||
var sql = "SELECT " + query.selects.join(", ")
|
||||
+ " FROM " + query.tables.join(", ")
|
||||
+ " WHERE " + query.wheres.join(" AND " )
|
||||
+ " ORDER BY res_deel_omschrijving";
|
||||
var json = api2.sql2json (params, sql, model_reservableequipment);
|
||||
return json;
|
||||
},
|
||||
xxxREST_PUT: function (params, jsondata, the_key) /* update reservable equipment */
|
||||
{
|
||||
// Nog niet ondersteund
|
||||
},
|
||||
xxxREST_POST: function (params, jsondata, parent_key) /* new reservable object */
|
||||
{
|
||||
// Nog niet ondersteund
|
||||
},
|
||||
DELETE: function (params) /* delete reservable object */
|
||||
{
|
||||
// Nog niet ondersteund
|
||||
}
|
||||
}
|
||||
%>
|
||||
@@ -10,30 +10,14 @@
|
||||
Context:
|
||||
|
||||
Notes: // TODO: Koppelzalen?
|
||||
// TODO: getQParamISODate moet niet hier maar in api_
|
||||
|
||||
http://uwva.5iwork/Branch541/api2/reservablerooms.json?apikey=APIPFO&pretty=1&location=71&include=occupations&freefrom=2014-05-06T11:00:00Z&freeto=2014-05-06T13:00:00Z
|
||||
http://uwva.5iwork/Branch541/api2/reservablerooms.json?apikey=APIPFO&pretty=1&location=71&include=occupations&logging=0&freefrom=2014-05-06T11:00:00Z&freeto=2014-05-06T13:00:00Z
|
||||
*/
|
||||
|
||||
%>
|
||||
<!-- #include file="../Shared/discxalg3d.inc"-->
|
||||
<!-- #include file="model_reservableequipment.inc"-->
|
||||
|
||||
<!-- #include file="../res/res.inc"-->
|
||||
<%
|
||||
var sqlcap = "(SELECT MAX (res_ruimte_opstel_bezoekers) bmax"
|
||||
+ " FROM res_ruimte_opstelling"
|
||||
+ " WHERE res_ruimte_opstelling.res_ruimte_key = res_ruimte.res_ruimte_key)";
|
||||
|
||||
function fnFrom (oRs, field, model)
|
||||
{
|
||||
var tijd = oRs(field.dbs).Value || S("res_t1");
|
||||
return toTimeString(tijd);
|
||||
}
|
||||
function fnTo (oRs, field, model)
|
||||
{
|
||||
var tijd = oRs(field.dbs).Value || S("res_t2");
|
||||
return toTimeString(tijd);
|
||||
}
|
||||
model_reservablerooms =
|
||||
{
|
||||
table: "res_ruimte",
|
||||
@@ -43,25 +27,22 @@ model_reservablerooms =
|
||||
fields: [{ name: "id", dbs: "res_ruimte_key", typ: "key", filter: "exact" },
|
||||
{ name: "name", dbs: "res_ruimte_nr", typ: "varchar"},
|
||||
{ name: "description", dbs: "res_ruimte_omschrijving", typ: "varchar"},
|
||||
{ name: "open", dbs: "res_ruimte_begintijd", typ: "time", val: fnFrom },
|
||||
{ name: "close", dbs: "res_ruimte_eindtijd", typ: "time", val: fnTo },
|
||||
// { name: "open", dbs: "res_ruimte_begintijd", typ: "time"}, is geen echte 'time'
|
||||
{ name: "location", dbs: "alg_v_allonroerendgoed.alg_locatie_key", typ: "key", foreign: "alg_locatie", filter: "exact"},
|
||||
{ name: "capacity", dbs: "dummy", typ: "varchar", sql: sqlcap },
|
||||
{ name: "room", dbs: "res_alg_ruimte.res_alg_ruimte_key", typ: "key", foreign: "alg_ruimte"},
|
||||
{ name: "image", dbs: "res_ruimte_image", typ: "varchar" }
|
||||
],
|
||||
// advanced filter
|
||||
filter: { prefunc: function _prefilterfunc(params)
|
||||
{
|
||||
//__DoLog("getQParamISODate: " + getQParamISODate("res_van"));
|
||||
var res_van = getQParamISODate("freefrom", null);
|
||||
var res_tot = getQParamISODate("freeto", null);
|
||||
var loc_key = parseInt(params.filter.location);
|
||||
if (res_van && res_tot)
|
||||
{
|
||||
var params = {res_van: res_van, // TODO: Welke dag?
|
||||
res_tot: res_tot,
|
||||
loc: loc_key, // 71=alkw
|
||||
loc_key: 71, // alkw
|
||||
//res_ruimte_key: 8065, // even hard
|
||||
authparams : user.checkAutorisation("WEB_RESUSE", null, null, true),
|
||||
forSelectRoom: true
|
||||
}
|
||||
@@ -91,74 +72,30 @@ model_reservablerooms =
|
||||
return true;
|
||||
}
|
||||
},
|
||||
includes: {"reservableequipment": // Komt waarschijnlijk te vervallen: gebruik maar filter op model_reservableequipment
|
||||
{ model: model_reservableequipment,
|
||||
joinfield: "res_ruimte_key",
|
||||
single_only: true, // Zodat je alleen de mogelijke objecten van <20><>n ruimte kunt opvragen (performance)
|
||||
joinfunction: function (params) // Alleen objecten die zijn toegestaan in deze ruimte
|
||||
{
|
||||
var params = { res_ruimte_key : params.filter.id, // die is er dankzij single_only
|
||||
select_fields : "r.res_deel_key",
|
||||
//sdisc : p_sdisc, // TODO
|
||||
group_by : " GROUP BY r.res_deel_key",
|
||||
autfunction : autfunction
|
||||
};
|
||||
var sql = get_res_deel_sql ( params );
|
||||
return "res_deel_key IN (" + sql + ")"
|
||||
}
|
||||
},
|
||||
includes: {"availability": { //xmodel: model_visitors,
|
||||
xjoinfield: "bez_afspraak_key"
|
||||
},
|
||||
"occupations": { // prefunc om alles tegelijk op te halen
|
||||
prefunc: function _occupations(params)
|
||||
{
|
||||
var res_van = getQParamISODate("from", new Date());
|
||||
var res_tot = getQParamISODate("to", res_van);
|
||||
var loc_key = parseInt(params.filter.location); // 71=alkw
|
||||
|
||||
var params = { res_van: res_van,
|
||||
res_tot: res_tot,
|
||||
loc: loc_key,
|
||||
var params = {res_van: new Date(), // TODO: Welke dag?
|
||||
res_tot: new Date(),
|
||||
loc_key: 71, // alkw
|
||||
//res_ruimte_key: 8065, // even hard
|
||||
authparams : user.checkAutorisation("WEB_RESUSE", null, null, true),
|
||||
forSelectRoom: true
|
||||
}
|
||||
return res.plan_bezet_info(params); // wordt meegeven aan de volgende func
|
||||
},
|
||||
func: function _occupations(key, params, oRs, record, prefuncdata)
|
||||
func: function _occupations(key, params, prefuncdata)
|
||||
{
|
||||
var occupied = prefuncdata[key] ;
|
||||
if (!occupied)
|
||||
return null;
|
||||
|
||||
var bezet_info = occupied;
|
||||
// formatteren naar gewenste veldnamen
|
||||
var result = [];
|
||||
for (var bezet in bezet_info)
|
||||
{
|
||||
result.push({ from: bezet_info[bezet].res_van,
|
||||
to: bezet_info[bezet].res_tot,
|
||||
id: bezet_info[bezet].rsv_ruimte_key
|
||||
});
|
||||
}
|
||||
//return bezet_info;
|
||||
return result;
|
||||
}
|
||||
return occupied?occupied[0]:null;
|
||||
},
|
||||
xjoinfield: "bez_afspraak_key"
|
||||
}
|
||||
},
|
||||
|
||||
_autorized_discs_sql: function (field)
|
||||
{
|
||||
var urole = "fe"; // TODO: Moet echt niet ter zake doen
|
||||
var autfunction = urole == "fe"? "WEB_RESUSE" : "WEB_RESMAN";
|
||||
var sql = field + " IN ("
|
||||
+ " SELECT g.ins_discipline_key"
|
||||
+ " FROM fac_v_webgebruiker g, fac_functie f "
|
||||
+ " WHERE g.fac_functie_key = f.fac_functie_key "
|
||||
+ " AND f.fac_functie_code = " + safe.quoted_sql(autfunction)
|
||||
+ " AND g.fac_gebruiker_alg_level_write < 9"
|
||||
+ " AND g.prs_perslid_key = " + user_key
|
||||
+ " AND " + field + " = g.ins_discipline_key" // deze regel is redundant maar goed voor de performance
|
||||
+ " )";
|
||||
return sql;
|
||||
},
|
||||
REST_GET: function _GET(params)
|
||||
{
|
||||
var urole = "fe"; // TODO: Moet echt niet ter zake doen
|
||||
@@ -167,7 +104,6 @@ model_reservablerooms =
|
||||
|
||||
// TODO: Add authorization
|
||||
var query = api2.sqlfields(params, model_reservablerooms );
|
||||
query.wheres.push(model_reservablerooms._autorized_discs_sql("res_discipline_key"));
|
||||
|
||||
query.tables.push("res_alg_ruimte");
|
||||
|
||||
@@ -191,21 +127,44 @@ model_reservablerooms =
|
||||
+ " WHERE " + query.wheres.join(" AND " )
|
||||
+ " ORDER BY res_ruimte_nr";
|
||||
|
||||
__DoLog(sql);
|
||||
|
||||
var json = api2.sql2json (params, sql, model_reservablerooms );
|
||||
|
||||
return json;
|
||||
},
|
||||
xxxREST_PUT: function (params, jsondata, the_key) /* update reservablerooms */
|
||||
{
|
||||
// Nog niet ondersteund
|
||||
var fields = api2.update_fields(params, model_reservablerooms, jsondata); // Build updater
|
||||
|
||||
// bezUpd heeft na afloop eventueel oldjsvals
|
||||
var bezUpd = buildTrackingUpdate("bez_bezoekers", " bez_bezoekers_key = " + the_key, fields, { noValidateToken: true });
|
||||
__DoLog(bezUpd.sql);
|
||||
Oracle.Execute(bezUpd.sql);
|
||||
|
||||
var beztrack = api2.process_includes(params, model_reservablerooms, the_key, jsondata);
|
||||
|
||||
//var result = saveBezoekers(afspr_key, -1, { urole: urole, loctimechanged: changed });
|
||||
//if (result.beztrack && result.beztrack.length > 0)
|
||||
//bezUpd.trackarray.push(result.beztrack.join("\n"));
|
||||
|
||||
return model_reservablerooms.REST_GET(params); // resulterende data weer terug
|
||||
},
|
||||
xxxREST_POST: function (params, jsondata, parent_key) /* new reservablerooms */
|
||||
{
|
||||
// Nog niet ondersteund
|
||||
var fields = api2.update_fields(params, model_reservablerooms, jsondata); // Build updater
|
||||
fields.push({ dbs: "bez_bezoekers_key", typ: "key", seq: "bez_s_bez_bezoekers_key" });
|
||||
fields.push({ dbs: "bez_afspraak_key", typ: "key", val: parent_key });
|
||||
|
||||
var bezIns = buildInsert("bez_bezoekers", fields, { noValidateToken: true });
|
||||
var bez_key = bezIns.sequences["bez_bezoekers_key"];
|
||||
__DoLog(bezIns.sql);
|
||||
Oracle.Execute(bezIns.sql);
|
||||
//var bezUpd = {trackarray: [L("lcl_bez_is_bezadd") + ": " + beznaam + "/" + bed]};
|
||||
// TODO: Wat teruggeven?
|
||||
},
|
||||
xxxRES_DELETE: function (params) /* delete reservablerooms */
|
||||
DELETE: function (params) /* delete reservablerooms */
|
||||
{
|
||||
// Nog niet ondersteund
|
||||
}
|
||||
}
|
||||
%>
|
||||
@@ -1,81 +0,0 @@
|
||||
<% /*
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File: reservationconsumables.inc
|
||||
|
||||
Description: reserveren delen model. Dit bestand heeft niets met interfacing te maken
|
||||
maar werkt uitsluitend op JSON-data
|
||||
Parameters:
|
||||
Context:
|
||||
|
||||
Notes:
|
||||
*/
|
||||
|
||||
%>
|
||||
<!-- #include file="../Shared/discxalg3d.inc"-->
|
||||
<%
|
||||
function status_bo(json)
|
||||
{
|
||||
var status_bo_key = json;
|
||||
var status_bo = res.getbostatustext(status_bo_key) || "";
|
||||
|
||||
return status_bo;
|
||||
}
|
||||
|
||||
model_reservationconsumables =
|
||||
{
|
||||
table: "res_rsv_artikel",
|
||||
primary: "res_rsv_artikel_key",
|
||||
records_name: "reservationconsumables",
|
||||
record_name: "reservationconsumable",
|
||||
fields: [ { name: "id", dbs: "res_rsv_artikel_key", typ: "key", filter: "exact" },
|
||||
{ name: "consumable", dbs: "res_artikel_key", typ: "key", filter: "exact", foreign: "res_artikel" },
|
||||
{ name: "amount", dbs: "res_rsv_artikel_aantal", typ: "number"},
|
||||
{ name: "status", dbs: "res_status_bo_key", typ: "number", filter: "exact", foreign: status_bo },
|
||||
{ name: "reservation", dbs: "res_rsv_ruimte_key", typ: "key", filter: "exact", foreign: "res_rsv_ruimte" },
|
||||
{ name: "from", dbs: "res_rsv_artikel_levering", typ: "date", filter: "exact" },
|
||||
//{ name: "to", dbs: "res_rsv_artikel_tot", typ: "date" },
|
||||
{ name: "price", dbs: "res_rsv_artikel_prijs", typ: "float" },
|
||||
{ name: "processed", dbs: "res_rsv_artikel_verwerkt", typ: "datetime" },
|
||||
{ name: "closed", dbs: "res_rsv_artikel_afgemeld", typ: "datetime" },
|
||||
{ name: "changed", dbs: "res_rsv_artikel_mutatie", typ: "datetime" },
|
||||
{ name: "dirtlevel", dbs: "res_rsv_artikel_dirtlevel", typ: "number", filter: "exact" }
|
||||
],
|
||||
|
||||
REST_GET: function _GET(params)
|
||||
{
|
||||
var urole = "fe"; // TODO: Moet echt niet ter zake doen
|
||||
var autfunction = urole == "fe"? "WEB_RESUSE" : "WEB_RESMAN";
|
||||
params.authparams = user.checkAutorisation(autfunction, null, null, true); // pessimistisch
|
||||
|
||||
// TODO: Add authorization
|
||||
var query = api2.sqlfields(params, model_reservationconsumables);
|
||||
query.wheres.push("res_rsv_artikel_verwijder IS NULL");
|
||||
|
||||
query.tables.push("res_rsv_ruimte");
|
||||
query.wheres.push("res_rsv_ruimte.res_rsv_ruimte_key = res_rsv_artikel.res_rsv_ruimte_key");
|
||||
query.wheres.push(user_key + " IN (res_rsv_ruimte_host_key, res_rsv_ruimte_contact_key)"); // Altijd fe vooralnog
|
||||
query.wheres.push("res_rsv_ruimte_van BETWEEN SYSDATE - " + S("facilitiespast_res") + " AND SYSDATE + " + S("facilitiesfuture_res"));
|
||||
|
||||
var wheres = api2.sqlfilter(params, model_reservationconsumables);
|
||||
query.wheres = query.wheres.concat(wheres);
|
||||
|
||||
var sql = "SELECT " + query.selects.join(", ")
|
||||
+ " FROM " + query.tables.join(", ")
|
||||
+ " WHERE " + query.wheres.join(" AND " )
|
||||
+ " ORDER BY res_rsv_artikel_key";
|
||||
var json = api2.sql2json (params, sql, model_reservationconsumables);
|
||||
return json;
|
||||
},
|
||||
PUT: function (params) /* update reservable consumables */
|
||||
{
|
||||
},
|
||||
POST: function (params) /* new reservable object */
|
||||
{
|
||||
},
|
||||
DELETE: function (params) /* delete reservable object */
|
||||
{
|
||||
}
|
||||
}
|
||||
%>
|
||||
@@ -1,277 +0,0 @@
|
||||
<% /*
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File: reservationequipment.inc
|
||||
|
||||
Description: reserveren delen model. Dit bestand heeft niets met interfacing te maken
|
||||
maar werkt uitsluitend op JSON-data
|
||||
Parameters:
|
||||
Context:
|
||||
|
||||
Notes:
|
||||
*/
|
||||
%>
|
||||
<!-- #include file="../Shared/discxalg3d.inc"-->
|
||||
<%
|
||||
|
||||
var _disc_expires = []; // expire tijd per discipline
|
||||
function is_expired(disc_key, jsDate)
|
||||
{
|
||||
if (disc_key > 0)
|
||||
{
|
||||
if (!_disc_expires[disc_key])
|
||||
_disc_expires[disc_key] = res.discipline_expire(disc_key);
|
||||
return (jsDate < _disc_expires[disc_key]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
model_reservationequipment =
|
||||
{
|
||||
table: "res_rsv_deel",
|
||||
primary: "res_rsv_deel_key",
|
||||
records_name: "reservationequipment",
|
||||
record_name: "reservationequipment",
|
||||
fields: [ { name: "id", dbs: "res_rsv_deel_key", typ: "key", filter: "exact" },
|
||||
{ name: "equipment", dbs: "res_deel_key", typ: "key", filter: "exact", foreign: "res_deel" },
|
||||
{ name: "status", dbs: "res_status_bo_key", typ: "key", filter: "exact", foreign: res.getbostatustext },
|
||||
{ name: "from", dbs: "res_rsv_deel_van", typ: "datetime", filter: "exact" },
|
||||
{ name: "to", dbs: "res_rsv_deel_tot", typ: "datetime" },
|
||||
{ name: "price", dbs: "res_rsv_deel_prijs", typ: "float" },
|
||||
{ name: "processed", dbs: "res_rsv_deel_verwerkt", typ: "datetime" },
|
||||
{ name: "closed", dbs: "res_rsv_deel_afgemeld", typ: "datetime" },
|
||||
{ name: "changed", dbs: "res_rsv_deel_mutatie", typ: "datetime" },
|
||||
{ name: "dirtlevel", dbs: "res_rsv_deel_dirtlevel", typ: "number", filter: "exact" }
|
||||
// altijd 1 { name: "number", dbs: "res_rsv_deel_aantal", typ: "number", filter: "exact" }
|
||||
// niet terug linken { name: "reservation", dbs: "res_rsv_ruimte_key", typ: "key", filter: "exact", foreign: "res_rsv_ruimte" }
|
||||
],
|
||||
|
||||
REST_GET: function _GET(params)
|
||||
{
|
||||
var urole = "fe"; // TODO: Moet echt niet ter zake doen
|
||||
var autfunction = urole == "fe"? "WEB_RESUSE" : "WEB_RESMAN";
|
||||
params.authparams = user.checkAutorisation(autfunction, null, null, true); // pessimistisch
|
||||
|
||||
// TODO: Add authorization
|
||||
var query = api2.sqlfields(params, model_reservationequipment);
|
||||
query.wheres.push("res_rsv_deel_verwijder IS NULL");
|
||||
|
||||
query.tables.push("res_rsv_ruimte");
|
||||
query.wheres.push("res_rsv_ruimte.res_rsv_ruimte_key = res_rsv_deel.res_rsv_ruimte_key");
|
||||
query.wheres.push(user_key + " IN (res_rsv_ruimte_host_key, res_rsv_ruimte_contact_key)"); // Altijd fe vooralnog
|
||||
query.wheres.push("res_rsv_ruimte_van BETWEEN SYSDATE - " + S("facilitiespast_res") + " AND SYSDATE + " + S("facilitiesfuture_res"));
|
||||
|
||||
var wheres = api2.sqlfilter(params, model_reservationequipment);
|
||||
query.wheres = query.wheres.concat(wheres);
|
||||
|
||||
var sql = "SELECT " + query.selects.join(", ")
|
||||
+ " FROM " + query.tables.join(", ")
|
||||
+ " WHERE " + query.wheres.join(" AND " )
|
||||
+ " ORDER BY res_rsv_deel_key";
|
||||
var json = api2.sql2json (params, sql, model_reservationequipment);
|
||||
|
||||
return json;
|
||||
},
|
||||
|
||||
REST_PUT: function (params, jsondata, the_key) /* update reservable equipment */
|
||||
{
|
||||
var rsv_deel_key = the_key;
|
||||
var fields = api2.update_fields(params, model_reservationequipment, jsondata); // Build updater
|
||||
var res_deel_key = parseInt(jsondata.equipment);
|
||||
model_reservationequipment._analyze_fields(fields, params, jsondata);
|
||||
model_reservationequipment._validate_fields(fields, params, jsondata);
|
||||
|
||||
// De voorziening kan niet buiten de reservering van de ruimte geclaimd worden
|
||||
var sql = "SELECT r.res_rsv_ruimte_key"
|
||||
+ " , r.res_rsv_ruimte_van"
|
||||
+ " , r.res_rsv_ruimte_tot"
|
||||
+ " FROM res_rsv_ruimte r"
|
||||
+ " , res_rsv_deel d"
|
||||
+ " WHERE r.res_rsv_ruimte_key = d.res_rsv_ruimte_key"
|
||||
+ " AND d.res_rsv_deel_key = " + rsv_deel_key;
|
||||
var oRs = Oracle.Execute(sql);
|
||||
var rsv_ruimte_key = oRs("res_rsv_ruimte_key").value;
|
||||
var res_van = new Date(oRs("res_rsv_ruimte_van").value);
|
||||
var res_tot = new Date(oRs("res_rsv_ruimte_tot").value);
|
||||
oRs.Close();
|
||||
|
||||
var wheres = [" res_rsv_deel_key = " + rsv_deel_key];
|
||||
var resUpd = buildTrackingUpdate("res_rsv_deel", wheres.join(" AND " ), fields, { noValidateToken: true });
|
||||
var check_fail_sql = " if res.dirty_level_all(" + rsv_ruimte_key + ") <> 0 then"
|
||||
+ " raise_application_error (-20000, 'res_m999 " + L("lcl_res_fe_no_dirty") + "');"
|
||||
+ " end if;"
|
||||
var sql = "BEGIN "
|
||||
+ resUpd.sql + ";"
|
||||
+ " res.set_deel_dirty (" + rsv_deel_key + "); " // Zelf dirty geworden?
|
||||
+ " res.set_delen_clean (" + res_deel_key + "," + res_van.toSQL() + "," + res_tot.toSQL() +"); " //Anderen clean geworden?
|
||||
+ check_fail_sql
|
||||
+ "END;";
|
||||
var err = Oracle.Execute(sql, true);
|
||||
if (err.friendlyMsg)
|
||||
abort_with_warning(err.friendlyMsg);
|
||||
|
||||
return { key: rsv_deel_key };
|
||||
},
|
||||
|
||||
REST_POST: function (params, jsondata, parent_key) /* new reservable object */
|
||||
{
|
||||
params.isNew = true;
|
||||
var trackarray = [];
|
||||
var rsv_ruimte_key = parent_key;
|
||||
var this_res = res.func_enabled(rsv_ruimte_key); // Wat heb ik zoal aan rechten op deze specifieke reservering
|
||||
|
||||
var fields = api2.update_fields(params, model_reservationequipment, jsondata); // Build updater
|
||||
model_reservationequipment._analyze_fields(fields, params, jsondata);
|
||||
model_reservationequipment._validate_fields(fields, params, jsondata);
|
||||
|
||||
var sql = "SELECT res_reservering_key"
|
||||
+ " , res_rsv_ruimte_van"
|
||||
+ " , res_rsv_ruimte_tot"
|
||||
+ " , res_rsv_ruimte_volgnr"
|
||||
+ " FROM res_rsv_ruimte"
|
||||
+ " WHERE res_rsv_ruimte_key = " + rsv_ruimte_key;
|
||||
var oRs = Oracle.Execute(sql);
|
||||
var res_key = oRs("res_reservering_key").value;
|
||||
var res_volgnr = oRs("res_rsv_ruimte_volgnr").value;
|
||||
var res_van = new Date(oRs("res_rsv_ruimte_van").value);
|
||||
var res_tot = new Date(oRs("res_rsv_ruimte_tot").value);
|
||||
oRs.Close();
|
||||
|
||||
fields.push({ dbs: "res_rsv_deel_key", typ: "key", seq: "res_s_res_rsv_deel_key" });
|
||||
fields.push({ dbs: "res_rsv_ruimte_key", typ: "key", val: rsv_ruimte_key });
|
||||
fields.push({ dbs: "res_rsv_deel_van", typ: "datetime", val: res_van });
|
||||
fields.push({ dbs: "res_rsv_deel_tot", typ: "datetime", val: res_tot });
|
||||
fields.push({ dbs: "res_rsv_deel_aantal", typ: "number", val: 1 });
|
||||
|
||||
var resIns = buildInsert("res_rsv_deel", fields, { noValidateToken: true });
|
||||
var rsv_deel_key = resIns.sequences["res_rsv_deel_key"];
|
||||
|
||||
// Tracking toevoegen.
|
||||
var res_deel_key = parseInt(jsondata.equipment);
|
||||
var sql = "SELECT res_deel_omschrijving"
|
||||
+ " FROM res_deel"
|
||||
+ " WHERE res_deel_key = " + res_deel_key;
|
||||
var oRs = Oracle.Execute(sql);
|
||||
var res_deel_name = oRs("res_deel_omschrijving").value;
|
||||
__Log("added " + res_deel_name + " : " + res_deel_key);
|
||||
var inserttrack = res.trackobject(res_deel_key, "insert");
|
||||
trackarray.push(inserttrack);
|
||||
|
||||
// Check of er delen dirty zijn (geworden)
|
||||
var check_fail_sql = "";
|
||||
if (S("res_fe_allow_dirty") != 1 && this_res.canChangeFEOnly)
|
||||
{
|
||||
check_fail_sql = " if res.dirty_level_all(" + rsv_ruimte_key + ") <> 0 then"
|
||||
+ " raise_application_error (-20000, 'res_m960 "+L("lcl_res_fe_no_dirty")+"');"
|
||||
+ " end if;"
|
||||
}
|
||||
var sql = "BEGIN "
|
||||
+ resIns.sql + ";"
|
||||
+ " res.set_delen_dirty (" + rsv_deel_key + "); "
|
||||
+ check_fail_sql
|
||||
+ "END;";
|
||||
var err = Oracle.Execute(sql, true);
|
||||
if (err.friendlyMsg)
|
||||
abort_with_warning(err.friendlyMsg);
|
||||
else
|
||||
res.trackreserveringupdate(rsv_ruimte_key, trackarray.length? L("lcl_res_is_resupdtrack").format(res_key + "/" + res_volgnr) + "\n" + trackarray.join("\n") : null);
|
||||
|
||||
params.isNew = false; // Voorkom dat een volgende reservationequipment ook een insert wordt.
|
||||
return { key: rsv_deel_key };
|
||||
},
|
||||
|
||||
REST_DELETE: function (params, jsondata, the_key) /* delete reservable object */
|
||||
{
|
||||
var rsv_deel_key = the_key;
|
||||
var must_warn = false; // must I warn about last-minute?
|
||||
var trackarray = [];
|
||||
var urole = "fe";
|
||||
|
||||
var sql = "SELECT rr.res_reservering_key"
|
||||
+ " , rr.res_rsv_ruimte_key"
|
||||
+ " , rr.res_rsv_ruimte_van"
|
||||
+ " , rr.res_rsv_ruimte_tot"
|
||||
+ " , rr.res_rsv_ruimte_volgnr"
|
||||
+ " , d.res_deel_key"
|
||||
+ " , d.res_deel_omschrijving"
|
||||
+ " , d.res_discipline_key"
|
||||
+ " FROM res_rsv_ruimte rr"
|
||||
+ " , res_rsv_deel rd"
|
||||
+ " , res_deel d"
|
||||
+ " WHERE rr.res_rsv_ruimte_key = rd.res_rsv_ruimte_key"
|
||||
+ " AND rd.res_deel_key = d.res_deel_key"
|
||||
+ " AND rd.res_rsv_deel_key = " + rsv_deel_key;
|
||||
var oRs = Oracle.Execute(sql);
|
||||
var res_key = oRs("res_reservering_key").value;
|
||||
var res_volgnr = oRs("res_rsv_ruimte_volgnr").value;
|
||||
var res_van = new Date(oRs("res_rsv_ruimte_van").value);
|
||||
var res_tot = new Date(oRs("res_rsv_ruimte_tot").value);
|
||||
var rsv_ruimte_key = oRs("res_rsv_ruimte_key").value;
|
||||
var res_deel_key = oRs("res_deel_key").value;
|
||||
var res_deel_name = oRs("res_deel_omschrijving").value;
|
||||
var res_disc_key = oRs("res_discipline_key").value;
|
||||
oRs.Close();
|
||||
|
||||
// Expire check
|
||||
must_warn = must_warn || is_expired(res_disc_key, res_van);
|
||||
|
||||
var resDel = "DELETE from res_rsv_deel"
|
||||
+ " WHERE res_rsv_ruimte_key=" + rsv_ruimte_key
|
||||
+ " AND res_deel_key = " + res_deel_key; // eventuele dubbelen ook verwijderen.
|
||||
|
||||
__Log("removed " + res_deel_name + " : " + res_deel_key);
|
||||
// Tracking toevoegen.
|
||||
var deletetrack = res.trackobject(res_deel_key, "delete");
|
||||
trackarray.push(deletetrack);
|
||||
|
||||
var sql = "BEGIN "
|
||||
+ resDel + ";"
|
||||
+ " res.set_delen_clean (" + res_deel_key + "," + res_van.toSQL() + "," + res_tot.toSQL() +"); " // Anderen clean geworden?
|
||||
+ "END;";
|
||||
var err = Oracle.Execute(sql, true);
|
||||
if (err.friendlyMsg)
|
||||
abort_with_warning(err.friendlyMsg);
|
||||
else
|
||||
res.trackreserveringupdate(rsv_ruimte_key, trackarray.length? L("lcl_res_is_resupdtrack").format(res_key + "/" + res_volgnr) + "\n" + trackarray.join("\n") : null);
|
||||
|
||||
//
|
||||
if (must_warn && urole != "bo")
|
||||
{
|
||||
warning = L("lcl_res_obj_lastminute");
|
||||
}
|
||||
|
||||
},
|
||||
|
||||
|
||||
|
||||
|
||||
_analyze_fields: function (fields, params, jsondata) /* analyseer inkomende data, common voor PUT en POST */
|
||||
/* res_ruimte+config wordt bijvoorbeeld omgezet in res_ruimte_opstel_key */
|
||||
{
|
||||
__Logj(jsondata);
|
||||
if ("equipment" in jsondata)
|
||||
{
|
||||
// Mag/kan het deel gereserveerd worden in deze ruimte
|
||||
var res_deel_key = parseInt(jsondata.equipment);
|
||||
var sql = "SELECT res_ins_deel_key"
|
||||
+ " FROM res_deel"
|
||||
+ " WHERE res_deel_key = " + res_deel_key;
|
||||
var oRs = Oracle.Execute(sql);
|
||||
if (oRs.eof)
|
||||
api2.error(500, "Unknown equipment in input");
|
||||
oRs.Close();
|
||||
}
|
||||
else // moet er een res_deel zijn
|
||||
{
|
||||
api2.error(500, "Missing equipment in input");
|
||||
}
|
||||
},
|
||||
|
||||
_validate_fields: function (fields, params, jsondata) /* valideer fields, alle constraints die niet door de database worden afgevangen */
|
||||
{
|
||||
// testurl = http://uwva.5iwork/branch542/api2/reservations/3112748.json?pretty=1&logging=1&include=reservationequipment
|
||||
}
|
||||
|
||||
}
|
||||
%>
|
||||
@@ -13,15 +13,11 @@
|
||||
res_ruimte_opstel record (een geldige ruimte<->opstelling combinatie)
|
||||
In de API splitsen we dat in de meer natuurlijk aanvoelende res_ruimte_key
|
||||
en res_ruimte_opstel_key
|
||||
We ondersteunen nog niet het aanmaken van een tweede deelreservering
|
||||
onder een reservering.
|
||||
*/
|
||||
|
||||
%>
|
||||
<!-- #include file="../Shared/discxalg3d.inc"-->
|
||||
<!-- #include file="../res/res.inc" -->
|
||||
<!-- #include file="./model_reservationequipment.inc"-->
|
||||
<!-- #include file="./model_reservationconsumables.inc"-->
|
||||
<!-- #include file="../res/res.inc"-->
|
||||
<%
|
||||
var sqlro = "SELECT rg.res_ruimte_nr || CASE WHEN res_ruimte_opstel_default = 1 THEN '' ELSE ' (' || ro.res_opstelling_omschrijving || ')' END CASE"
|
||||
+ " FROM res_ruimte_opstelling rro"
|
||||
@@ -31,13 +27,6 @@ var sqlro = "SELECT rg.res_ruimte_nr || CASE WHEN res_ruimte_opstel_default = 1
|
||||
+ " AND rro.res_ruimte_key = rg.res_ruimte_key"
|
||||
+ " AND rro.res_ruimte_opstel_key = res_rsv_ruimte.res_ruimte_opstel_key";
|
||||
|
||||
function fndirtwarn(level)
|
||||
{
|
||||
if (level & res.dirtlevel.ruimte.notavailable)
|
||||
return L("lcl_res_dirtyroom");
|
||||
return null;
|
||||
}
|
||||
|
||||
model_reservations =
|
||||
{
|
||||
module: "RES",
|
||||
@@ -46,28 +35,19 @@ model_reservations =
|
||||
records_name: "reservations",
|
||||
record_name: "reservation",
|
||||
|
||||
fields: [{ name: "id", dbs: "res_rsv_ruimte_key", typ: "key", filter: "exact" },
|
||||
{ name: "name", dbs: "res_reservering_id", sql: "res_reservering_key||'/'||res_rsv_ruimte_volgnr", typ: "varchar"},
|
||||
{ name: "from", dbs: "res_rsv_ruimte_van", typ: "datetime", track: L("lcl_res_starttime")}, // TODO: Andere lcl voor catering
|
||||
{ name: "to", dbs: "res_rsv_ruimte_tot", typ: "datetime", track: L("lcl_res_endtime")},
|
||||
{ name: "description", dbs: "res_rsv_ruimte_omschrijving", typ: "varchar", track: L("lcl_descr")},
|
||||
{ name: "activity", dbs: "res_activiteit_key", typ: "key", foreign: "res_activiteit", track: L("lcl_activity") },
|
||||
{ name: "remark", dbs: "res_rsv_ruimte_opmerking", typ: "varchar", track: L("lcl_remark")},
|
||||
{ name: "host", dbs: "res_rsv_ruimte_host_key", typ: "key", foreign: "prs_perslid", track: L("lcl_host")},
|
||||
{ name: "contact", dbs: "res_rsv_ruimte_contact_key", typ: "key", foreign: "prs_perslid", track: L("lcl_name")},
|
||||
{ name: "visitorscount", dbs: "res_rsv_ruimte_bezoekers", typ: "number", track: L("lcl_visitors") },
|
||||
{ name: "status", dbs: "res_status_fo_key", typ: "key", foreign: res.getfostatustext },
|
||||
{ name: "resroom", dbs: "res_ruimte_opstelling.res_ruimte_key", typ: "key", foreign: "res_ruimte" },
|
||||
fields: [{ name: "id", dbs: "res_rsv_ruimte_key", typ: "key", filter: "exact" },
|
||||
{ name: "code", dbs: "res_reservering_id", sql: "res_reservering_key||'/'||res_rsv_ruimte_volgnr", typ: "varchar"},
|
||||
{ name: "from", dbs: "res_rsv_ruimte_van", typ: "datetime"},
|
||||
{ name: "to", dbs: "res_rsv_ruimte_tot", typ: "datetime"},
|
||||
{ name: "description", dbs: "res_rsv_ruimte_omschrijving", typ: "varchar"},
|
||||
{ name: "remark", dbs: "res_rsv_ruimte_opmerking", typ: "varchar"},
|
||||
{ name: "host", dbs: "res_rsv_ruimte_host_key", typ: "key", foreign: "prs_perslid"},
|
||||
{ name: "contact", dbs: "res_rsv_ruimte_contact_key", typ: "key", foreign: "prs_perslid"},
|
||||
{ name: "visitorscount", dbs: "res_rsv_ruimte_bezoekers", typ: "number" },
|
||||
{ name: "status", dbs: "res_status_fo_key", typ: "key", foreign: res.getfostatustext },
|
||||
{ name: "room", dbs: "res_ruimte_opstelling.res_ruimte_key", typ: "key", foreign: "res_ruimte" },
|
||||
{ name: "configuration", dbs: "res_ruimte_opstelling.res_opstelling_key", typ: "key", foreign: "res_opstelling" },
|
||||
{ name: "warning", dbs: "res_rsv_ruimte_dirtlevel", typ: "number", foreign: fndirtwarn, readonly: true },
|
||||
],
|
||||
includes: {"reservationequipment": { model: model_reservationequipment,
|
||||
joinfield: "res_rsv_ruimte_key"
|
||||
},
|
||||
"reservationconsumables": { model: model_reservationconsumables,
|
||||
joinfield: "res_rsv_ruimte_key"
|
||||
}
|
||||
},
|
||||
|
||||
impersonate_auth: "WEB_RESFOF",
|
||||
REST_GET: function _GET(params)
|
||||
@@ -80,8 +60,7 @@ model_reservations =
|
||||
var query = api2.sqlfields(params, model_reservations );
|
||||
|
||||
query.wheres.push(user_key + " IN (res_rsv_ruimte_host_key, res_rsv_ruimte_contact_key)"); // Altijd fe vooralnog
|
||||
if (!params.filter.id)
|
||||
query.wheres.push("res_rsv_ruimte_van BETWEEN SYSDATE - " + S("facilitiespast_res") + " AND SYSDATE + " + S("facilitiesfuture_res"));
|
||||
query.wheres.push("res_rsv_ruimte_van BETWEEN SYSDATE - " + S("facilitiespast_res") + " AND SYSDATE + " + S("facilitiesfuture_res"));
|
||||
|
||||
query.tables.push("res_ruimte_opstelling");
|
||||
query.wheres.push("res_rsv_ruimte.res_ruimte_opstel_key = res_ruimte_opstelling.res_ruimte_opstel_key");
|
||||
@@ -89,244 +68,25 @@ model_reservations =
|
||||
var wheres = api2.sqlfilter(params, model_reservations);
|
||||
query.wheres = query.wheres.concat(wheres);
|
||||
|
||||
query.wheres.push("res_rsv_ruimte_verwijder IS NULL");
|
||||
|
||||
var sql = "SELECT " + query.selects.join(", ")
|
||||
+ " FROM " + query.tables.join(", ")
|
||||
+ " WHERE " + query.wheres.join(" AND " )
|
||||
+ " ORDER BY res_rsv_ruimte_van, res_rsv_ruimte.res_rsv_ruimte_key";
|
||||
|
||||
__DoLog(sql);
|
||||
|
||||
var json = api2.sql2json (params, sql, model_reservations );
|
||||
|
||||
return json;
|
||||
},
|
||||
_analyze_fields: function (fields, params, jsondata) /* analyseer inkomende data, common voor PUT en POST */
|
||||
/* res_ruimte+config wordt bijvoorbeeld omgezet in res_ruimte_opstel_key */
|
||||
{
|
||||
if ("resroom" in jsondata.reservation)
|
||||
{
|
||||
var res_ruimte_key = parseInt(jsondata.reservation.resroom);
|
||||
var res_opstel_key = -1;
|
||||
if ("configuration" in jsondata.reservation) // Pas op: opstelling 'Standaard' heeft soms key 0
|
||||
res_opstel_key = parseInt(jsondata.reservation.configuration);
|
||||
|
||||
// De default komt bovenaan
|
||||
var sql = "SELECT rro.res_ruimte_opstel_key"
|
||||
+ " , COALESCE (rro.res_ruimte_opstel_default, 0)"
|
||||
+ " , rr.res_discipline_key"
|
||||
+ " FROM res_ruimte_opstelling rro"
|
||||
+ " , res_opstelling ro"
|
||||
+ " , res_ruimte rr"
|
||||
+ " WHERE rro.res_opstelling_key = ro.res_opstelling_key"
|
||||
+ " AND rr.res_ruimte_key = " + res_ruimte_key
|
||||
+ " AND rro.res_ruimte_key = " + res_ruimte_key
|
||||
+ (res_opstel_key>=0 ? " AND ro.res_opstelling_key = " + res_opstel_key: "")
|
||||
+ " ORDER BY COALESCE (rro.res_ruimte_opstel_default, 0)"
|
||||
+ " , res_opstelling_volgnr";
|
||||
var oRs = Oracle.Execute(sql);
|
||||
var res_disc_key = oRs("res_discipline_key").value;
|
||||
var soort = 0; // reserveerbare ruimtes
|
||||
fields.push({ dbs: "res_ruimte_opstel_key", typ: "key", val: oRs("res_ruimte_opstel_key").Value });
|
||||
fields.push({ dbs: "alg_ruimte_key", typ: "key", val: -1 });
|
||||
fields.push({ dbs: "res_status_bo_key", typ: "key", val: 2 }); // 'ingevoerd'. Altijd bij ruimte reserveringen
|
||||
oRs.Close();
|
||||
}
|
||||
else // moet er een alg_ruimte zijn
|
||||
{
|
||||
// TODO
|
||||
api2.error(500, "Missing room in input");
|
||||
// var res_disc_key = ...
|
||||
// var soort = 1; // algemene ruimtes
|
||||
}
|
||||
|
||||
if ("activity" in jsondata.reservation)
|
||||
{
|
||||
// TODO: mag hij? Of controleren we dat in _validate_fields
|
||||
}
|
||||
else
|
||||
{
|
||||
if (params.isNew)
|
||||
{
|
||||
// Er is nog niet het concept 'default activiteit' dus pak gewoon de laagste
|
||||
sql = " SELECT MIN (ra.res_activiteit_key) res_activiteit_key "
|
||||
+ " FROM res_activiteitdiscipline ad, "
|
||||
+ " res_activiteit ra,"
|
||||
+ " res_srtactiviteit rs"
|
||||
+ " WHERE ad.res_discipline_key = " + res_disc_key
|
||||
+ " AND ra.res_activiteit_key = ad.res_activiteit_key"
|
||||
+ " AND rs.res_srtactiviteit_key = ra.res_srtactiviteit_key"
|
||||
+ " AND res_srtactiviteit_soort = " + soort;
|
||||
oRs = Oracle.Execute(sql);
|
||||
//jsondata.reservation.activity = oRs("res_activiteit_key").Value;
|
||||
fields.push({ dbs: "res_activiteit_key", typ: "key", val: oRs("res_activiteit_key").Value });
|
||||
oRs.Close()
|
||||
}
|
||||
}
|
||||
},
|
||||
_validate_fields: function (fields, params, jsondata) /* valideer fields, alle constraints die niet door de database worden afgevangen */
|
||||
PUT: function (params) /* update reservation */
|
||||
{
|
||||
},
|
||||
|
||||
REST_PUT: function (params, jsondata, the_key) /* update reservation */
|
||||
{
|
||||
var rsv_ruimte_key = the_key;
|
||||
var fields = api2.update_fields(params, model_reservations, jsondata); // Build updater
|
||||
model_reservations._analyze_fields(fields, params, jsondata);
|
||||
model_reservations._validate_fields(fields, params, jsondata);
|
||||
// bezUpd heeft na afloop eventueel oldjsvals
|
||||
var wheres = [" res_rsv_ruimte_key = " + rsv_ruimte_key];
|
||||
wheres.push(user_key + " IN (res_rsv_ruimte_host_key, res_rsv_ruimte_contact_key)"); // Altijd fe vooralnog
|
||||
|
||||
// ons eigen tijdstip/zaal is mogelijk gewijzigd waardoor andere *dirty* reserveringen
|
||||
// clean wordt. Even onze oude datum onthouden zodat we niet *alles* hoeven te controleren
|
||||
// Ook even noshow onthouden
|
||||
oRs = Oracle.Execute("SELECT res_reservering_key"
|
||||
+ " , res_rsv_ruimte_van"
|
||||
+ " , res_rsv_ruimte_tot"
|
||||
+ " , res_rsv_ruimte_noshow"
|
||||
+ " , res_rsv_ruimte_volgnr"
|
||||
+ " FROM res_rsv_ruimte"
|
||||
+ " WHERE res_rsv_ruimte_key = " + rsv_ruimte_key);
|
||||
var reservering_key = oRs("res_reservering_key").Value;
|
||||
var oldvan = new Date(oRs("res_rsv_ruimte_van").Value);
|
||||
var oldtot = new Date(oRs("res_rsv_ruimte_tot").Value);
|
||||
var oldnoshow = oRs("res_rsv_ruimte_noshow").Value == 1;
|
||||
var volgnr = oRs("res_rsv_ruimte_volgnr").Value;
|
||||
|
||||
var resUpd = buildTrackingUpdate("res_rsv_ruimte", wheres.join(" AND " ), fields, { noValidateToken: true });
|
||||
var check_fail_sql = " if res.dirty_level_all(" + rsv_ruimte_key + ") <> 0 then"
|
||||
+ " raise_application_error (-20000, 'res_m999 " + L("lcl_res_fe_no_dirty") + "');"
|
||||
+ " end if;"
|
||||
var sql = "BEGIN "
|
||||
+ resUpd.sql + ";"
|
||||
+ " res.set_ruimte_dirty (" + rsv_ruimte_key + "); " // Zelf dirty geworden?
|
||||
+ " res.set_ruimtes_clean (" + oldvan.toSQL() + "); " // Anderen 'clean' geworden
|
||||
+ " res.follow_artikel (" + rsv_ruimte_key + ", " + oldvan.toSQL(true) + ", " + oldtot.toSQL(true) + "); " // catering mee verplaatsen
|
||||
+ " res.follow_deel (" + rsv_ruimte_key + ", " + oldvan.toSQL(true) + ", " + oldtot.toSQL(true) + "); " // objecten mee verplaatsen
|
||||
+ " res.follow_afspraak (" + rsv_ruimte_key + ", " + S("res_copy_to_bez") + "); " // bezoekers mee verplaatsen
|
||||
+ check_fail_sql
|
||||
+ "END;";
|
||||
var err = Oracle.Execute(sql, true);
|
||||
if (err.friendlyMsg)
|
||||
abort_with_warning(err.friendlyMsg);
|
||||
|
||||
var restrack = api2.process_includes(params, model_reservations, jsondata, the_key);
|
||||
|
||||
// TODO: Tracking
|
||||
// TODO: Bezoekers
|
||||
// TODO: Flex
|
||||
var flextrack = [];
|
||||
//var result = saveBezoekers(afspr_key, -1, { urole: urole, loctimechanged: changed });
|
||||
//if (result.beztrack && result.beztrack.length > 0)
|
||||
//bezUpd.trackarray.push(result.beztrack.join("\n"));
|
||||
res.trackreserveringupdate(rsv_ruimte_key, resUpd.trackarray.length || flextrack.length? L("lcl_res_is_resupdtrack").format(reservering_key + "/" + volgnr) + "\n" + resUpd.trackarray.concat(flextrack).join("\n") : null);
|
||||
|
||||
return { key: rsv_ruimte_key };
|
||||
},
|
||||
REST_POST: function (params, jsondata) /* new reservation */
|
||||
{
|
||||
params.isNew = true;
|
||||
var fields = api2.update_fields(params, model_reservations, jsondata); // Build updater
|
||||
model_reservations._analyze_fields(fields, params, jsondata);
|
||||
model_reservations._validate_fields(fields, params, jsondata);
|
||||
|
||||
// Eerst een nieuw res_reservering record aanmaken
|
||||
var resfields = [ { dbs: "res_reservering_key", typ: "key", seq: "res_s_res_reservering_key" },
|
||||
{ dbs: "res_reservering_aanmaak", typ: "datetime", val: new Date() }
|
||||
];
|
||||
var resIns = buildInsert("res_reservering", resfields, { noValidateToken: true });
|
||||
var reservering_key = resIns.sequences["res_reservering_key"];
|
||||
var volgnr = 1;
|
||||
Oracle.Execute(resIns.sql);
|
||||
|
||||
// Nu aan de slag met een res_rsv_ruimte record
|
||||
fields = fields.concat(
|
||||
[ { dbs: "res_rsv_ruimte_key", typ: "key", seq: "res_s_res_rsv_ruimte_key" },
|
||||
{ dbs: "res_reservering_key", typ: "key", val: reservering_key },
|
||||
{ dbs: "res_rsv_ruimte_volgnr", typ: "number", val: volgnr }
|
||||
]);
|
||||
fields.push({ dbs: "res_rsv_ruimte_host_key", typ: "key", val: user_key });
|
||||
fields.push({ dbs: "res_rsv_ruimte_contact_key", typ: "key", val: user_key });
|
||||
if (!jsondata.status)
|
||||
fields.push({ dbs: "res_status_fo_key", typ: "key", val: S("res_default_fe_status_key") });
|
||||
var resIns = buildInsert("res_rsv_ruimte", fields, { noValidateToken: true });
|
||||
var rsv_ruimte_key = resIns.sequences["res_rsv_ruimte_key"];
|
||||
|
||||
var check_fail_sql = " if res.dirty_level_all(" + rsv_ruimte_key + ") <> 0 then"
|
||||
+ " raise_application_error (-20000, 'res_m999 " + L("lcl_res_fe_no_dirty") + "');"
|
||||
+ " end if;"
|
||||
var sql = "BEGIN "
|
||||
+ resIns.sql + ";"
|
||||
//+ deel_sql
|
||||
+ " res.set_ruimte_dirty (" + rsv_ruimte_key + "); " // Zelf dirty geworden?
|
||||
// set_ruimtes_clean hoeft niet: wij zijn nieuw en kunnen daarmee nooit een ander clean maken
|
||||
+ check_fail_sql
|
||||
+ "END;";
|
||||
var err = Oracle.Execute(sql, true);
|
||||
if (err.friendlyMsg)
|
||||
abort_with_warning(err.friendlyMsg);
|
||||
|
||||
var restrack = api2.process_includes(params, model_reservations, jsondata, rsv_ruimte_key);
|
||||
|
||||
shared.trackaction("RESNEW", rsv_ruimte_key);
|
||||
|
||||
return { key: rsv_ruimte_key };
|
||||
},
|
||||
|
||||
REST_DELETE: function (params, jsondata, the_key) /* delete reservation */
|
||||
{
|
||||
// Sterk afgekeken van res_delete_save.asp. Die moet op termijn deze functie gaan
|
||||
// gebruiken maar dan moet de auth_required_or_abort mogelijk weer iets 'zachter'
|
||||
var cost_recharge = false; // TODO?
|
||||
var rsv_ruimte_key = the_key;
|
||||
|
||||
var this_res = res.func_enabled(rsv_ruimte_key); // Wat mag ik op deze deelreservering
|
||||
user.auth_required_or_abort(this_res.canDelete);
|
||||
|
||||
DeleteResAfspraak(rsv_ruimte_key);
|
||||
// update ruimte
|
||||
// equipment en articles are deleted automatically if the RES_RSV_RUIMTE is deleted
|
||||
// Deze velden altijd opslaan
|
||||
var fields = [ { dbs: "res_rsv_ruimte_opmerking", typ: "varchar", frm: "opmerk" },
|
||||
{ dbs: "res_status_fo_key", typ: "key", val: (cost_recharge? 4 : 1) }, // status 1=optie, 4=vervallen
|
||||
{ dbs: "res_rsv_ruimte_verwijder", typ: "sql", val: "SYSDATE" }
|
||||
];
|
||||
|
||||
var sql = buildUpdate("res_rsv_ruimte", fields)
|
||||
+ " res_rsv_ruimte_key = " + rsv_ruimte_key;
|
||||
|
||||
// ons eigen tijdstip/zaal is mogelijk gewijzigd waardoor andere *dirty* reserveringen
|
||||
// clean wordt. Even onze oude datum onthouden zodat we niet *alles* hoeven te controleren
|
||||
var oRs = Oracle.Execute("select res_rsv_ruimte_van,"
|
||||
+ " res_rsv_ruimte_tot"
|
||||
+ " from res_rsv_ruimte"
|
||||
+ " where res_rsv_ruimte_key = " + rsv_ruimte_key);
|
||||
var oldvan = new Date(oRs("res_rsv_ruimte_van").value);
|
||||
var oldtot = new Date(oRs("res_rsv_ruimte_tot").value);
|
||||
oRs.Close();
|
||||
|
||||
// Nu de echte update.
|
||||
// Daarbij ook diverse controles/ updates uitvoeren op 'andere zaken'
|
||||
sql = "BEGIN "
|
||||
+ sql + ";"
|
||||
+ " res.set_ruimte_dirty (" + rsv_ruimte_key + "); " // Zelf dirty geworden?
|
||||
+ " res.set_ruimtes_clean (" + oldvan.toSQL() + "); " // Anderen 'clean' geworden
|
||||
+ " res.follow_artikel (" + rsv_ruimte_key + ", " + oldvan.toSQL(true) + ", " + oldtot.toSQL(true) + "); " // catering mee verplaatsen
|
||||
+ " res.follow_deel (" + rsv_ruimte_key + ", " + oldvan.toSQL(true) + ", " + oldtot.toSQL(true) + "); " // objecten mee verplaatsen
|
||||
+ "END;";
|
||||
Oracle.Execute( sql );
|
||||
|
||||
shared.trackaction("RESDEL", rsv_ruimte_key);
|
||||
|
||||
// En tenslotte eventueel de reservering zelf nog
|
||||
sql = "UPDATE res_reservering "
|
||||
+ " SET res_reservering_verwijder=SYSDATE"
|
||||
+ " WHERE res_reservering_key="+this_res.res_reservering_key
|
||||
+ " AND NOT EXISTS (SELECT *"
|
||||
+ " FROM res_v_aanwezigrsv_ruimte"
|
||||
+ " WHERE res_reservering_key=" + this_res.res_reservering_key + ")"
|
||||
|
||||
Oracle.Execute( sql );
|
||||
}
|
||||
POST: function (params) /* new reservation */
|
||||
{
|
||||
},
|
||||
DELETE: function (params) /* delete reservation */
|
||||
{
|
||||
}
|
||||
}
|
||||
%>
|
||||
@@ -1,13 +0,0 @@
|
||||
<% /*
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File: model_rooms.inc
|
||||
|
||||
Description: room model. Dit bestand heeft niets met interfacing te maken
|
||||
maar werkt uitsluitend op JSON-data
|
||||
Parameters:
|
||||
Context:
|
||||
|
||||
Notes: Dummy placeholder
|
||||
*/
|
||||
@@ -53,6 +53,8 @@ model_visitors =
|
||||
+ " WHERE " + query.wheres.join(" AND " )
|
||||
+ " ORDER BY bez_afspraak_datum, bez_afspraak.bez_afspraak_key";
|
||||
|
||||
__DoLog(sql);
|
||||
|
||||
var json = api2.sql2json (params, sql, model_visitors );
|
||||
|
||||
return json;
|
||||
@@ -63,6 +65,7 @@ model_visitors =
|
||||
|
||||
// bezUpd heeft na afloop eventueel oldjsvals
|
||||
var bezUpd = buildTrackingUpdate("bez_bezoekers", " bez_bezoekers_key = " + the_key, fields, { noValidateToken: true });
|
||||
__DoLog(bezUpd.sql);
|
||||
Oracle.Execute(bezUpd.sql);
|
||||
|
||||
var beztrack = api2.process_includes(params, model_visitors, the_key, jsondata);
|
||||
@@ -71,7 +74,7 @@ model_visitors =
|
||||
//if (result.beztrack && result.beztrack.length > 0)
|
||||
//bezUpd.trackarray.push(result.beztrack.join("\n"));
|
||||
|
||||
return { key: the_key };
|
||||
return model_visitors.REST_GET(params); // resulterende data weer terug
|
||||
},
|
||||
REST_POST: function (params, jsondata, parent_key) /* new visitors */
|
||||
{
|
||||
@@ -81,10 +84,10 @@ model_visitors =
|
||||
|
||||
var bezIns = buildInsert("bez_bezoekers", fields, { noValidateToken: true });
|
||||
var bez_key = bezIns.sequences["bez_bezoekers_key"];
|
||||
__DoLog(bezIns.sql);
|
||||
Oracle.Execute(bezIns.sql);
|
||||
//var bezUpd = {trackarray: [L("lcl_bez_is_bezadd") + ": " + beznaam + "/" + bed]};
|
||||
// TODO: Wat teruggeven?
|
||||
return { key: bez_key };
|
||||
},
|
||||
REST_DELETE: function (params, jsondata, the_key) /* delete visitors */
|
||||
{
|
||||
@@ -95,6 +98,7 @@ model_visitors =
|
||||
var sql = "DELETE FROM bez_bezoekers"
|
||||
+ " WHERE " + wheres.join(" AND " );
|
||||
|
||||
__DoLog(sql);
|
||||
Oracle.Execute(sql);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
<% /*
|
||||
$Revision$
|
||||
$Id$
|
||||
|
||||
File: model_workplaces.inc
|
||||
|
||||
Description: workplace model. Dit bestand heeft niets met interfacing te maken
|
||||
maar werkt uitsluitend op JSON-data
|
||||
Parameters:
|
||||
Context:
|
||||
|
||||
Notes: Dummy placeholder
|
||||
*/
|
||||
@@ -40,9 +40,7 @@ DOCTYPE_Disable = 1;
|
||||
http_request.setOption(SXH_OPTION_SELECT_CLIENT_SSL_CERT, certificateName);
|
||||
}
|
||||
|
||||
var xmlReq = Server.CreateObject("MSXML2.DOMDocument.6.0");
|
||||
xmlReq.resolveExternals = false; // van mij hoef je geen DTD's te controleren
|
||||
xmlReq.validateOnParse = false; // van mij hoef je geen DTD's te controleren
|
||||
var xmlReq = Server.CreateObject("MSXML2.DOMDocument.4.0");
|
||||
|
||||
xmlReq.appendChild(xmlReq.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"UTF-8\""))
|
||||
|
||||
@@ -64,10 +62,8 @@ DOCTYPE_Disable = 1;
|
||||
// Transformeer met de leverancier specifieke stylesheet
|
||||
if (xslPath)
|
||||
{
|
||||
var xslDoc = Server.CreateObject("MSXML2.DOMDocument.6.0");
|
||||
var xslDoc = Server.CreateObject("MSXML2.DOMDocument.4.0");
|
||||
__Log("Loading xslPath: " + Server.MapPath(custpath + "/" + xslPath));
|
||||
xslDoc.resolveExternals = false; // van mij hoef je geen DTD's te controleren
|
||||
xslDoc.validateOnParse = false; // van mij hoef je geen DTD's te controleren
|
||||
xslDoc.load(Server.MapPath(custpath + "/" + xslPath));
|
||||
xmlReq.transformNodeToObject(xslDoc, xmlReq);
|
||||
}
|
||||
@@ -75,7 +71,7 @@ DOCTYPE_Disable = 1;
|
||||
__Log("Posting to url: " + xmlurl);
|
||||
http_request.open("POST", xmlurl, false); // Synchroon
|
||||
http_request.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
|
||||
__SafeLog("Posting naar leverancier:<br>" + Server.HTMLEncode(xmlReq.xml));
|
||||
__Log("Posting naar leverancier: " + Server.HTMLEncode(xmlReq.xml));
|
||||
http_request.send(xmlReq.xml);
|
||||
if (http_request.status != 200)
|
||||
{
|
||||
@@ -83,22 +79,19 @@ DOCTYPE_Disable = 1;
|
||||
return null;
|
||||
}
|
||||
|
||||
var xmlResp = Server.CreateObject("Msxml2.DOMDocument.6.0");
|
||||
xmlResp.resolveExternals = false; // van mij hoef je geen DTD's te controleren
|
||||
xmlResp.validateOnParse = false; // van mij hoef je geen DTD's te controleren
|
||||
var xmlResp = Server.CreateObject("Msxml2.DOMDocument.4.0");
|
||||
|
||||
xmlResp.loadXML(http_request.ResponseText); // for parsing
|
||||
|
||||
__SafeLog("Response van leverancier:<br>" + Server.HTMLEncode(xmlResp.xml));
|
||||
__Log("Response van leverancier: " + Server.HTMLEncode(xmlResp.xml));
|
||||
// Transformeer met de leverancier specifieke stylesheet
|
||||
if (xslPath)
|
||||
{
|
||||
var xslDoc = Server.CreateObject("MSXML2.DOMDocument.6.0");
|
||||
var xslDoc = Server.CreateObject("MSXML2.DOMDocument.4.0");
|
||||
__Log("Loading xslPath: " + Server.MapPath(custpath + "/" + xslPath));
|
||||
xslDoc.resolveExternals = false; // van mij hoef je geen DTD's te controleren
|
||||
xslDoc.validateOnParse = false; // van mij hoef je geen DTD's te controleren
|
||||
xslDoc.load(Server.MapPath(custpath + "/" + xslPath));
|
||||
xmlResp.transformNodeToObject(xslDoc, xmlResp);
|
||||
__SafeLog("Stock response transformed: " + Server.HTMLEncode(xmlResp.xml));
|
||||
__Log("Stock response transformed: " + Server.HTMLEncode(xmlResp.xml));
|
||||
}
|
||||
|
||||
// Zoek ons artikel terug in de response (voor het theoretische geval dat
|
||||
|
||||
228
APPL/BES/bes.inc
228
APPL/BES/bes.inc
@@ -76,8 +76,11 @@
|
||||
|
||||
trackbestellingaccepteren:
|
||||
function (opdr_key, ptxt)
|
||||
{
|
||||
shared.trackaction('BESACP', opdr_key, ptxt);
|
||||
{ // noot: shared.trackaction (fac.trackaction) genereert ook eventuele notificaties.
|
||||
if (ptxt)
|
||||
shared.trackaction('BESACP', opdr_key, ptxt);
|
||||
else
|
||||
shared.trackaction('BESACP', opdr_key);
|
||||
},
|
||||
|
||||
// Alle (BES) informatie van een disciplnie
|
||||
@@ -126,17 +129,16 @@
|
||||
disc_params_levopm_url : oRs("bes_disc_params_levopm_url").Value,
|
||||
disc_params_leverdagen : oRs("bes_disc_params_leverdagen").Value || 0,
|
||||
disc_params_punchouturl : oRs("bes_disc_params_punchouturl").Value,
|
||||
isFreeArticle : oRs("bes_disc_params_punchouturl").Value == "FREE",// met 2015.1 komt er een echt 'vinkje'
|
||||
disc_params_punch_bedr_key : oRs("bes_disc_params_punch_bedr_key").Value,
|
||||
disc_params_logo_url : oRs("bes_disc_params_logo_url").Value,
|
||||
disc_params_autoacceptrfo : oRs("bes_disc_params_autoacceptrfo").Value,
|
||||
disc_params_auto_order : oRs("bes_disc_params_auto_order").Value,
|
||||
disc_params_min_bedrag : oRs("bes_disc_params_min_bedrag").Value,
|
||||
disc_params_bestellimiet : oRs("bes_disc_params_bestellimiet").Value || 0,
|
||||
disc_params_bestellimiet2 : oRs("bes_disc_params_bestellimiet2").Value || 0,
|
||||
disc_params_bestellimiet3 : oRs("bes_disc_params_bestellimiet3").Value || 0,
|
||||
disc_params_bestellimiet4 : oRs("bes_disc_params_bestellimiet4").Value || 0,
|
||||
disc_params_bestellimiet5 : oRs("bes_disc_params_bestellimiet5").Value || 0,
|
||||
disc_params_bestellimiet : oRs("bes_disc_params_bestellimiet").Value,
|
||||
disc_params_bestellimiet2 : oRs("bes_disc_params_bestellimiet2").Value,
|
||||
disc_params_bestellimiet3 : oRs("bes_disc_params_bestellimiet3").Value,
|
||||
disc_params_bestellimiet4 : oRs("bes_disc_params_bestellimiet4").Value,
|
||||
disc_params_bestellimiet5 : oRs("bes_disc_params_bestellimiet5").Value,
|
||||
disc_params_pgb : oRs("bes_disc_params_pgb").Value,
|
||||
disc_params_herfiat : oRs("bes_disc_params_herfiat").Value || 0,
|
||||
disc_params_herfiatpct : oRs("bes_disc_params_herfiatpct").Value,
|
||||
@@ -156,8 +158,10 @@
|
||||
generateBesInfoBlock: function (bes_bestelling)
|
||||
{
|
||||
BLOCK_START("besInfo" , L("lcl_bes_key") + " " + S("bes_bestelling_prefix") + bes_bestelling.bes_key + (bes_bestelling.parent_key? "*" : ""));
|
||||
if (bes_bestelling.satisfaction)
|
||||
AFIELDTR("fld", L("lcl_res_beoordeling"), "", "", {rating: {score: bes_bestelling.satisfaction, note: bes_bestelling.satisfaction_op} });
|
||||
if (bes_bestelling.satisfaction && shared.satisfactionsymbol(bes_bestelling.satisfaction))
|
||||
{
|
||||
%><img id="satisfaction" src="<%=shared.satisfactionsymbol(bes_bestelling.satisfaction)%>" title="<%=safe.htmlattr(bes_bestelling.satisfaction_op)%>"><%
|
||||
}
|
||||
|
||||
ROFIELDTR("fld", L("lcl_bes_discipline"), bes_disc_info.discipline_omschrijving);
|
||||
|
||||
@@ -324,7 +328,7 @@
|
||||
BLOCK_END();
|
||||
},
|
||||
|
||||
bestelling_info: function _bestelling_info(bes_key)
|
||||
bestelling_info: function (bes_key)
|
||||
{
|
||||
var srtdeel_arr = [];
|
||||
var amount_arr = [];
|
||||
@@ -437,7 +441,6 @@
|
||||
+ ", SUM(bi.bes_bestelling_item_aantal * bi.bes_bestelling_item_prijs) totaal"
|
||||
+ ", SUM(bi.bes_bestelling_item_aantalontv) aantalontv"
|
||||
+ ", MAX(bsg.bes_srtgroep_key) bes_srtgroep_key" // Wordt gebruikt tbv. singlegroep en dan is er maar eentje
|
||||
+ ", MAX(bsd.prs_bedrijf_key) prs_bedrijf_key" // Wordt gebruikt tbv. free-artikel van <20><>n bedrijf
|
||||
+ ", MAX(bes_disc_params_singlegroep) singlegroep"
|
||||
+ ", MAX(ks.prs_kostensoort_btw) inclBTW"
|
||||
+ ", MAX(COALESCE(bes_srtdeel_wijzigdagen, 9999)) bes_srtdeel_wijzigdagen"
|
||||
@@ -463,7 +466,6 @@
|
||||
bes_bestelling.dis_key = oRs("ins_discipline_key").Value,
|
||||
bes_bestelling.srtgroep = oRs("bes_srtgroep_key").Value,
|
||||
bes_bestelling.singlegroep = oRs("singlegroep").Value == 1,
|
||||
bes_bestelling.bedrijf_key = oRs("prs_bedrijf_key").Value,
|
||||
bes_bestelling.inclBTW = oRs("inclBTW").Value || 0,
|
||||
bes_bestelling.totaal = oRs("totaal").Value || 0;
|
||||
bes_bestelling.aantalontv = oRs("aantalontv").Value || 0;
|
||||
@@ -595,7 +597,6 @@
|
||||
opdr_key : opdr_key,
|
||||
bestelopdr_id : oRs("bes_bestelopdr_id").Value,
|
||||
bes_key_str : bes_key_str,
|
||||
prs_bedrijf_key : oRs("prs_bedrijf_key").Value,
|
||||
prs_bedrijf_naam : oRs("prs_bedrijf_naam").Value,
|
||||
mld_adres_key_lev : oRs("mld_adres_key_lev").Value,
|
||||
mld_adres_key_fac : oRs("mld_adres_key_fac").Value,
|
||||
@@ -710,8 +711,7 @@
|
||||
bresult.canRetourURL = false; // (Deels) retour via site leverancier
|
||||
bresult.canRetourBES = false; // (Deels) retour via negatieve levering
|
||||
|
||||
bresult.isFreeArticle = bes_disc_info.disc_params_punchouturl == "FREE"; // met 2015.1 komt er een echt 'vinkje'
|
||||
var isPunchout = !bresult.isFreeArticle && bes_disc_info.disc_params_punchouturl;
|
||||
var isPunchout = bes_disc_info.disc_params_punchouturl? true : false;
|
||||
bresult.canMainChange = false; // 'Bovenste stuk', voormalig lower_part
|
||||
bresult.canItemsChange = false; // Mag ik toevoegen en aantallen verhogen
|
||||
|
||||
@@ -755,7 +755,7 @@
|
||||
(S("bes_approval_all") == 1 && t_cost <= bestellimiet2)) && // Zijn de kosten onder mijn limiet om volledig goed te keuren
|
||||
bes_approved <= bestellimiet; // Welke goedkeur? 1, 2, 3, 4 of 5?
|
||||
bresult.canAccept2 = bresult.canWrite("WEB_BESGO2") &&
|
||||
// Setting bes_approval_all is
|
||||
// Setting mld_opdr_approval_all is
|
||||
// 0: Het approved bedrag is eigen bestellimiet of vorige goedkeur niveau rechten heb ik al (dan direct niveau hoger)
|
||||
// 1: Het approved bedrag is kleiner of gelijk aan eigen bestellimiet
|
||||
((S("bes_approval_all") == 0 && t_cost >= bestellimiet2 && (bes_approved == bestellimiet2 || bresult.canAccept)) ||
|
||||
@@ -815,7 +815,7 @@
|
||||
bresult.canItemsChange = bresult.canMainChange && !isPunchout;
|
||||
break;
|
||||
case 6: // Geleverd (TV)
|
||||
bresult.canMainChange = bresult.canWrite("WEB_BESFOF")||user.checkAutorisation("WEB_ORDFIN", true); // Bijvoorbeeld kostenplaats te wijzigen
|
||||
bresult.canMainChange = bresult.canWrite("WEB_BESFOF"); // Bijvoorbeeld kostenplaats te wijzigen
|
||||
bresult.canRetourURL = _canRetour && (bes_disc_info.disc_params_retour_url != null);
|
||||
bresult.canRetourBES = _canRetour && !bresult.canRetourURL;
|
||||
break;
|
||||
@@ -900,7 +900,7 @@
|
||||
return bresult;
|
||||
},
|
||||
|
||||
staffel_info: function _staffel_info(srtdeel_keys, itemaantal_arr)
|
||||
staffel_info: function (srtdeel_keys, itemaantal_arr)
|
||||
{
|
||||
var lsgnaamstring = [];
|
||||
var lsgkeystring = [];
|
||||
@@ -951,9 +951,6 @@
|
||||
{
|
||||
// Oplaan bedrijf waar alle artikelen worden besteld. Moet voor elke artikel hetzelfde zijn.
|
||||
prs_bedrijf_key = oRs("prs_bedrijf_key").Value;
|
||||
if (!prs_bedrijf_key)
|
||||
__DoLog("Artikel wordt niet door een bedrijf geleverd.", "#FFFF00")
|
||||
|
||||
// Opslaan van staffelgroep van een item
|
||||
ItemArray.push({ item_key : srtdeel_keys[i],
|
||||
aantal : itemaantal_arr[i],
|
||||
@@ -981,7 +978,6 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
oRs.Close();
|
||||
}
|
||||
|
||||
// Nu kunnen we totale kortingen per staffelgroep uitrekenen
|
||||
@@ -1000,7 +996,6 @@
|
||||
litemprijsstring.push(oRs("kortingsprijs").Value);
|
||||
first = false;
|
||||
}
|
||||
oRs.Close();
|
||||
}
|
||||
else // geen staffelkortingen voor dit artikel. Wel in de itemprijsstring opnemen
|
||||
{
|
||||
@@ -1041,14 +1036,18 @@
|
||||
sql = "SELECT BES.calcopdrachtkortingbedrag(" + prs_bedrijf_key + ", " + subtotaal + ") opdrachtkortingbedrag"
|
||||
+ " FROM DUAL"
|
||||
var oRs = Oracle.Execute(sql);
|
||||
opdrachtkortingbedrag = oRs("opdrachtkortingbedrag").Value;
|
||||
oRs.Close();
|
||||
if (!oRs.eof)
|
||||
{
|
||||
opdrachtkortingbedrag = oRs("opdrachtkortingbedrag").Value;
|
||||
}
|
||||
|
||||
sql = "SELECT BES.calcopdrachtkorting(" + prs_bedrijf_key + ", " + subtotaal + ") opdrachtkorting FROM DUAL";
|
||||
oRs = Oracle.Execute(sql);
|
||||
// Korting tot grenswaarde
|
||||
opdrachtkorting = oRs("opdrachtkorting").Value;
|
||||
oRs.Close();
|
||||
if (!oRs.eof)
|
||||
{
|
||||
// Korting tot grenswaarde
|
||||
opdrachtkorting = oRs("opdrachtkorting").Value;
|
||||
}
|
||||
|
||||
// Nieuw subtotaal: Bestelbedrag - alle kortingen
|
||||
subtotaal = subtotaal - opdrachtkortingbedrag;
|
||||
@@ -1063,7 +1062,6 @@
|
||||
// Korting tot grenswaarde
|
||||
grenswaardetot = oRs("grenswaarde").Value;
|
||||
}
|
||||
oRs.Close();
|
||||
|
||||
// Nu grenswaarde bepalen vanaf
|
||||
sql = "SELECT COALESCE(MAX(prs_staffel_grenswaarde), 0) grenswaarde"
|
||||
@@ -1078,7 +1076,6 @@
|
||||
// Korting vanaf grenswaarde
|
||||
grenswaardevanaf = oRs("grenswaarde").Value;
|
||||
}
|
||||
oRs.Close();
|
||||
|
||||
// Extra (transport) kosten en onderlimiet bepalen
|
||||
sql = "SELECT CASE"
|
||||
@@ -1096,7 +1093,6 @@
|
||||
bes_kosten = oRs("bes_kosten").Value;
|
||||
bes_limiet = oRs("bes_limiet").Value;
|
||||
}
|
||||
oRs.Close();
|
||||
|
||||
// Totaalbedrag
|
||||
totaalbedrag = subtotaal + bes_kosten;
|
||||
@@ -1121,17 +1117,107 @@
|
||||
return result;
|
||||
},
|
||||
|
||||
besteed_budget_pgb: function (prs_key, dis_key, bes_key)
|
||||
{ // Besteed budget van meegegeven persoon dit jaar voor de meegegeven discipline i.v.m. Persoons Gebonden Budget (PGB)
|
||||
// Eventueel uitgezonderd (huidige) bestelling bes_key
|
||||
var budgetbesteld = 0;
|
||||
if (bes_disc_info.disc_params_pgb == 1 || bes_disc_info.disc_params_pgb == 3)
|
||||
{ // Totaalbedrag van eerder bestellingen dit jaar van de besteller i.v.m. Persoons Gebonden Budget (PGB)
|
||||
sql = "SELECT SUM(totaalbedrag) totaalbedrag"
|
||||
+ ", SUM(b.bes_bestelling_korting) korting"
|
||||
+ ", SUM(b.bes_bestelling_levkosten) levkosten"
|
||||
+ " FROM (SELECT SUM (bi.bes_bestelling_item_aantal * bi.bes_bestelling_item_prijs) totaalbedrag"
|
||||
+ ", b.bes_bestelling_key"
|
||||
+ " FROM bes_bestelling b"
|
||||
+ ", bes_bestelling_item bi"
|
||||
+ ", bes_srtdeel isd"
|
||||
+ ", bes_srtgroep isg"
|
||||
+ " WHERE b.bes_bestelling_key = bi.bes_bestelling_key"
|
||||
+ " AND bi.bes_srtdeel_key = isd.bes_srtdeel_key"
|
||||
+ " AND isd.bes_srtgroep_key = isg.bes_srtgroep_key"
|
||||
+ " AND b.prs_perslid_key = " + prs_key
|
||||
+ " AND isg.ins_discipline_key = " + dis_key
|
||||
+ (bes_key > -1
|
||||
? " AND b.bes_bestelling_key <> " + bes_key
|
||||
: "")
|
||||
+ " AND b.bes_bestelling_datum >= TRUNC (SYSDATE, 'YEAR')"
|
||||
+ " GROUP BY b.bes_bestelling_key) tot"
|
||||
+ ", bes_bestelling b"
|
||||
+ " WHERE b.bes_bestelling_key = tot.bes_bestelling_key"
|
||||
oRs = Oracle.Execute(sql);
|
||||
prstotaalbesteld = oRs("totaalbedrag").Value || 0;
|
||||
korting = oRs("korting").Value || 0;
|
||||
levkosten = oRs("levkosten").Value || 0;
|
||||
budgetbesteld = prstotaalbesteld - korting + levkosten;
|
||||
}
|
||||
return budgetbesteld;
|
||||
},
|
||||
|
||||
besteed_budget_agb: function (prs_key, bes_key)
|
||||
{ // Besteed budget van meegegeven persoon afgelopen periode i.v.m. Afdelings Gebonden Budget (AGB)
|
||||
// Eventueel uitgezonderd (huidige) bestelling bes_key
|
||||
var budgetbesteld = 0;
|
||||
if (bes_disc_info.disc_params_pgb == 2 || bes_disc_info.disc_params_pgb == 3)
|
||||
{ // Totaalbedrag van eerder bestellingen afgelopen periode van de besteller i.v.m. Afdelings Gebonden Budget (AGB)
|
||||
var sql = "SELECT prs.getkostenplaats(" + prs_key + ", " + S("prs_approvemethod") + ", -1) kostenplaats FROM DUAL";
|
||||
var oRs = Oracle.Execute(sql);
|
||||
var kp_key = oRs("kostenplaats").Value;
|
||||
|
||||
// Limietperiode kostenplaats (prs_kostenplaats_limietperiode): 0(of NULL)=geen(oneindig) (default), 1=maand, 2=jaar
|
||||
if (kp_key > 0)
|
||||
{ // Er is een kostenplaats gevonden
|
||||
var sql = "SELECT k.prs_kostenplaats_limietperiode"
|
||||
+ " FROM prs_kostenplaats k"
|
||||
+ " WHERE k.prs_kostenplaats_key = " + kp_key;
|
||||
var oRs = Oracle.Execute(sql);
|
||||
var kp_limietperiode = oRs("prs_kostenplaats_limietperiode").Value;
|
||||
var periode;
|
||||
if (kp_limietperiode == 1)
|
||||
periode = "MM"; // Maandelijks budget
|
||||
else if (kp_limietperiode == 2)
|
||||
periode = "YYYY"; // Jaarlijks budget
|
||||
|
||||
sql = "SELECT SUM(totaalbedrag) totaalbedrag"
|
||||
+ " , SUM(b.bes_bestelling_korting) korting"
|
||||
+ " , SUM(b.bes_bestelling_levkosten) levkosten"
|
||||
+ " FROM (SELECT SUM (bi.bes_bestelling_item_aantal * bi.bes_bestelling_item_prijs) totaalbedrag"
|
||||
+ " , b.bes_bestelling_key"
|
||||
+ " FROM bes_bestelling b"
|
||||
+ " , bes_bestelling_item bi"
|
||||
+ " WHERE b.bes_bestelling_key = bi.bes_bestelling_key"
|
||||
+ " AND b.prs_kostenplaats_key = " + kp_key
|
||||
+ (bes_key > -1
|
||||
? " AND b.bes_bestelling_key <> " + bes_key
|
||||
: "")
|
||||
+ (kp_limietperiode && kp_limietperiode > 0
|
||||
? " AND b.bes_bestelling_datum >= TRUNC (SYSDATE, " + safe.quoted_sql(periode) + ")" // De eerste van de deze maand of 1 januari dit jaar
|
||||
: "")
|
||||
+ " GROUP BY b.bes_bestelling_key) tot"
|
||||
+ ", bes_bestelling b"
|
||||
+ " WHERE b.bes_bestelling_key = tot.bes_bestelling_key"
|
||||
oRs = Oracle.Execute(sql);
|
||||
prstotaalbesteld = oRs("totaalbedrag").Value || 0;
|
||||
korting = oRs("korting").Value || 0;
|
||||
levkosten = oRs("levkosten").Value || 0;
|
||||
budgetbesteld = prstotaalbesteld - korting + levkosten;
|
||||
}
|
||||
}
|
||||
return budgetbesteld;
|
||||
},
|
||||
|
||||
// Geeft het PGB overschrijdingsbedrag van de PGB-limiet terug
|
||||
get_pgb_exceed_amount: function(bestelbedrag, prs_key, dis_key, bes_key)
|
||||
{
|
||||
var amount = bestelbedrag; // Indien geen pgblimiet dan gehele bestel bedrag
|
||||
|
||||
// Opvragen PGB limiet
|
||||
var pgblimiet = budget.get_pgblimiet(prs_key, dis_key);
|
||||
// Bepaal PGB limiet
|
||||
var sql = "SELECT prs.getprofiellimiet(" + prs_key + ", " + dis_key + ") pgblimiet FROM DUAL";
|
||||
var oRs = Oracle.Execute(sql);
|
||||
var pgblimiet = oRs("pgblimiet").Value;
|
||||
|
||||
if (pgblimiet != null)
|
||||
{ // Verschil PGB limiet met het besteed budget van persoon en desbetreffende discipline voor dit jaar inclusief bestelbedrag
|
||||
amount = (budget.besteed_budget_pgb(prs_key, dis_key, {bes_key: bes_key}) + bestelbedrag - pgblimiet);
|
||||
amount = (bes.besteed_budget_pgb(prs_key, dis_key, bes_key) + bestelbedrag - pgblimiet);
|
||||
}
|
||||
return amount;
|
||||
},
|
||||
@@ -1141,12 +1227,14 @@
|
||||
{
|
||||
var amount = bestelbedrag; // Indien geen agblimiet dan gehele bestel bedrag
|
||||
|
||||
// Opvragen AGB limiet
|
||||
var agblimiet = budget.get_agblimiet(prs_key, dis_key);
|
||||
// Bepaal AGB limiet
|
||||
var sql = "SELECT prs.getlimietagb(" + prs_key + ", " + S("prs_approvemethod") + ", " + dis_key + ") agblimiet FROM DUAL";
|
||||
var oRs = Oracle.Execute(sql);
|
||||
var agblimiet = oRs("agblimiet").Value;
|
||||
|
||||
if (agblimiet != null)
|
||||
{ // Verschil AGB limiet met het besteed budget van persoon en desbetreffende discipline voor dit jaar inclusief bestelbedrag
|
||||
amount = (budget.besteed_budget_agb(prs_key, {bes_key: bes_key}) + bestelbedrag - agblimiet);
|
||||
amount = (bes.besteed_budget_agb(prs_key, bes_key) + bestelbedrag - agblimiet);
|
||||
}
|
||||
return amount;
|
||||
},
|
||||
@@ -1159,10 +1247,11 @@
|
||||
|
||||
// Geeft true als het bestelde bedrag boven de PGB-limiet van prs_key uit komt
|
||||
// en dus (eventueel) goedkeuring vereist zal zijn.
|
||||
exceeds_pgb: function(bestelbedrag, prs_key, dis_key)
|
||||
// Negeer evt bestaand bestelbedrag van bes_key (indien > -1)
|
||||
exceeds_pgb: function(bestelbedrag, prs_key, dis_key, bes_key)
|
||||
{
|
||||
if (bes_disc_info.disc_params_pgb == 1 || bes_disc_info.disc_params_pgb == 3)
|
||||
return budget.exceeds_profiel(bestelbedrag + budget.besteed_budget_pgb(prs_key, dis_key), prs_key, dis_key);
|
||||
return shared.exceeds_profiel(bestelbedrag + bes.besteed_budget_pgb(prs_key, dis_key), prs_key, dis_key);
|
||||
else // Geen pgb. Dan kan je ook niet boven de pgb zitten
|
||||
return false;
|
||||
},
|
||||
@@ -1173,7 +1262,7 @@
|
||||
exceeds_agb: function(bestelbedrag, prs_key, dis_key, bes_key)
|
||||
{
|
||||
if (bes_disc_info.disc_params_pgb == 2 || bes_disc_info.disc_params_pgb == 3)
|
||||
return budget.exceeds_limietagb(bestelbedrag + budget.besteed_budget_agb(prs_key, {bes_key: bes_key}), prs_key, dis_key);
|
||||
return shared.exceeds_limietagb(bestelbedrag + bes.besteed_budget_agb(prs_key, bes_key), prs_key, dis_key);
|
||||
else // Geen agb. Dan kan je ook niet boven de agb zitten
|
||||
return false;
|
||||
},
|
||||
@@ -1298,73 +1387,22 @@
|
||||
// JGL: Is dat niet allemaal automatisch meegecascadeerd?
|
||||
// Verwijder bestelaanvraag items
|
||||
sql = "DELETE bes_bestelling_item WHERE bes_bestelling_key = " + bes_key;
|
||||
Oracle.Execute(sql);
|
||||
oRs = Oracle.Execute(sql);
|
||||
|
||||
// Indien een bestelopdracht aanwezig is dan bestelopdracht + bestelopdracht items verwijderen.
|
||||
if (bestelopdr_key > 0)
|
||||
{
|
||||
// Verwijder bestelopdracht items
|
||||
sql = "DELETE bes_bestelopdr_item WHERE bes_bestelopdr_key = " + bestelopdr_key;
|
||||
Oracle.Execute(sql);
|
||||
oRs = Oracle.Execute(sql);
|
||||
|
||||
// Verwijder bestelopdracht
|
||||
sql = "DELETE bes_bestelopdr WHERE bes_bestelopdr_key = " + bestelopdr_key
|
||||
Oracle.Execute(sql);
|
||||
oRs = Oracle.Execute(sql);
|
||||
}
|
||||
message = L("lcl_bes_deleted_1") + S("bes_bestelling_prefix") + bes_key + L("lcl_bes_deleted_2");
|
||||
}
|
||||
return message;
|
||||
},
|
||||
// returns bes_srtdeel_key
|
||||
upsert_deel: function _upsert_deel(dis_key, params)
|
||||
{
|
||||
if (!("srtdeel_btw" in params))
|
||||
params.srtdeel_btw = 21.0;
|
||||
if (!("srtgroep_omschrijving" in params) && params.srtgroep_key > 0)
|
||||
{ // upsert_srtdeel werkt alleen op basis van omschrijving, helaas (nog) niet op srtgroep_key
|
||||
var sql = "SELECT bes_srtgroep_omschrijving"
|
||||
+ " FROM bes_srtgroep"
|
||||
+ " WHERE bes_srtgroep_key = " + params.srtgroep_key;
|
||||
var oRs = Oracle.Execute(sql);
|
||||
params.srtgroep_omschrijving = oRs("bes_srtgroep_omschrijving").Value;;
|
||||
oRs.Close()
|
||||
}
|
||||
var sql = "BEGIN bes.upsert_srtdeel "
|
||||
+ " ( " + dis_key
|
||||
+ " , " + safe.quoted_sql(params.srtgroep_omschrijving, 60) // bes_srtgroep_omschrijving
|
||||
+ " , " + safe.quoted_sql(params.srtdeel_omschrijving, 100) // bes_srtdeel_omschrijving
|
||||
+ " , " + params.srtdeel_prijs
|
||||
+ " , " + params.srtdeel_btw
|
||||
+ " , " + safe.quoted_sql(params.srtdeel_eenheid, 30) // bes_srtdeel_eenheid
|
||||
+ " , " + safe.quoted_sql(params.srtdeel_nr, 32) // bes_srtdeel_nr
|
||||
+ " , " + (params.bedrijf_key || -1)
|
||||
+ " , NULL " // vervaldatum
|
||||
+ " , ''"
|
||||
+ " , 1 "
|
||||
+ " , " + safe.quoted_sql(params.opmerking, 2000) + "); END;";
|
||||
|
||||
Oracle.Execute(sql);
|
||||
// JGL: Het zou fijn zijn als upsert_srtdeel een functie wordt en gewoon
|
||||
// de bes_srtdeel_key oplevert. Dan wordt het volgende veel simpeler:
|
||||
// PF: Maar dat kan helemaal niet, want een select mag geen DML e.d doen.
|
||||
// Wel beter zou zijn bes.get_upsertkey(), nader te definieren.
|
||||
|
||||
// Zoek aangemaakte item terug.
|
||||
sql = "SELECT bes_srtdeel_key "
|
||||
+ " FROM bes_srtdeel sd, bes_srtgroep sg "
|
||||
+ " WHERE sg.ins_discipline_key = " + dis_key
|
||||
+ " AND sg.bes_srtgroep_key = sd.bes_srtgroep_key "
|
||||
+ " AND sg.bes_srtgroep_omschrijving = " + safe.quoted_sql(params.srtgroep_omschrijving, 60) /* NOXLAT */
|
||||
+ " AND UPPER(sd.bes_srtdeel_omschrijving) = " + safe.quoted_sql_upper(params.srtdeel_omschrijving, 100) /* NOXLAT */
|
||||
+ " AND sd.bes_srtdeel_eenheid " + (params.srtdeel_eenheid? "= " + safe.quoted_sql(params.srtdeel_eenheid, 30): " IS NULL")
|
||||
+ " AND sd.bes_srtdeel_nr = " + safe.quoted_sql(params.srtdeel_nr, 32)
|
||||
+ " ORDER BY sd.bes_srtdeel_key DESC ";
|
||||
|
||||
var oRs = Oracle.Execute(sql);
|
||||
var bes_srtdeel_key = oRs("bes_srtdeel_key").Value;
|
||||
oRs.Close();
|
||||
__Log("bes_srtdeel_key: " + bes_srtdeel_key);
|
||||
return bes_srtdeel_key;
|
||||
}
|
||||
}
|
||||
%>
|
||||
|
||||
@@ -108,7 +108,7 @@ for (var i = 0; i < ingesloten.length; i++)
|
||||
oRs = Oracle.Execute(sql);
|
||||
|
||||
if (!finalapproval)
|
||||
{ // Tracking en alle vierde goedkeurders een notificatie sturen.
|
||||
{ // Tracking en alle derde goedkeurders een notificatie sturen.
|
||||
bes.trackbestellingaccepteren(bes_key);
|
||||
}
|
||||
else
|
||||
@@ -126,7 +126,7 @@ for (var i = 0; i < ingesloten.length; i++)
|
||||
oRs = Oracle.Execute(sql);
|
||||
|
||||
if (!finalapproval)
|
||||
{ // Tracking en alle vijfde goedkeurders een notificatie sturen.
|
||||
{ // Tracking en alle derde goedkeurders een notificatie sturen.
|
||||
bes.trackbestellingaccepteren(bes_key);
|
||||
}
|
||||
else
|
||||
|
||||
@@ -17,7 +17,6 @@ DOCTYPE_Disable = 1;
|
||||
|
||||
<!-- #include file="../Shared/common.inc" -->
|
||||
<!-- #include file="../Shared/json2.js" -->
|
||||
<!-- #include file="../Shared/budget.inc" -->
|
||||
<!-- #include file="bes.inc" -->
|
||||
|
||||
<%
|
||||
@@ -40,7 +39,7 @@ for (var i = 0; i < bes_key_arr.length; i++)
|
||||
totaal: bes_bestelling.totaal,
|
||||
rfoBesKosten: bes_bestelling.rfoBesKosten,
|
||||
rfoLevKosten: bes_bestelling.rfoLevKosten,
|
||||
fiatteur_key: bes_bestelling.fiatteur_key, // LET OP: De huidige fiatteur wordt opgehaald (Ook als de user_key een vervanger is).
|
||||
fiatteur_key: bes_bestelling.fiatteur_key,
|
||||
dis_key: bes_bestelling.dis_key,
|
||||
perslid_key_voor: bes_bestelling.perslid_key_voor,
|
||||
disc_params_bestellimiet: bes_disc_info.disc_params_bestellimiet,
|
||||
@@ -60,9 +59,12 @@ for (var i = 0; i < ingesloten.length; i++)
|
||||
Oracle.Execute(sql);
|
||||
|
||||
var totaal = ingesloten[i].totaal - ingesloten[i].rfoBesKosten + ingesloten[i].rfoLevKosten;
|
||||
|
||||
//var message = L("lcl_mld_opdr_approved_1") + bes_key + L("lcl_mld_opdr_approved_2");
|
||||
|
||||
// als het valt binnen onze limiet (of eigenlijk: degene die nu moet fiatteren als we vervanger zijn) dan zijn we klaar
|
||||
// TODO in de volgende versie (zie docu PF) meerlaags fiattering met prs.getfiatteur() vgl opdr_approve.asp
|
||||
if (!budget.exceeds_profiel(totaal, ingesloten[i].fiatteur_key, ingesloten[i].dis_key))
|
||||
if (!shared.exceeds_profiel(totaal, ingesloten[i].fiatteur_key, ingesloten[i].dis_key))
|
||||
{
|
||||
bes.setbestellingstatus(ingesloten[i].bes_key, 3); // helemaal Gefiatteerd
|
||||
if (ingesloten[i].totaal <= ingesloten[i].disc_params_bestellimiet)
|
||||
@@ -82,14 +84,9 @@ for (var i = 0; i < ingesloten.length; i++)
|
||||
// vervolgens naar kostenplaatsgroep fiatteur sturen
|
||||
// Fiatteringsproces moet gevolgd worden op de naam van de "voor wie" (bestelling voor)
|
||||
// Als bes_disc_params_for_others niet is gezet zijn perslid_key en perslid_key_voor identiek
|
||||
// Haal de kostenplaatsgroep verantwoordelijke/fiatteur op. De kolom b.bes_bestelling_fiat_user is gevuld met de user_key).
|
||||
sql = "SELECT prs.getkpverantwoordelijke (b.prs_kostenplaats_key, 1, COALESCE (b.bes_bestelling_fiat_user, -1)) kpg_fiatteur_key"
|
||||
+ " FROM bes_bestelling b"
|
||||
+ " WHERE b.bes_bestelling_key = " + ingesloten[i].bes_key;
|
||||
var oRs = Oracle.Execute(sql);
|
||||
message = bes.sendNeedApprovalNotification(ingesloten[i].bes_key, oRs("kpg_fiatteur_key").Value);
|
||||
oRs.close();
|
||||
message = bes.sendNeedApprovalNotification(ingesloten[i].bes_key, ingesloten[i].fiatteur_key);
|
||||
}
|
||||
|
||||
result.success = true;
|
||||
}
|
||||
|
||||
|
||||
@@ -110,7 +110,7 @@ transitParam = buildTransitParam(["punch", "mld_key", "artikel_key", "ps", "pn",
|
||||
%>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<body id="editbody">
|
||||
<%
|
||||
var page = "";
|
||||
if (bes_key == -1)
|
||||
@@ -152,12 +152,15 @@ transitParam = buildTransitParam(["punch", "mld_key", "artikel_key", "ps", "pn",
|
||||
// Vooral met punchout is dat erg pijnlijk: je kwam wel bij de leverancier, kon alles kiezen
|
||||
// en later, pas bij terugkomst kreeg je melding dat je geen rechten had.
|
||||
user.auth_required_or_abort(authparams.PRSwritelevel < 9 && authparams.ALGwritelevel < 9);
|
||||
var bes_disc_info = bes.disc_info(dis_key);
|
||||
|
||||
sql = "SELECT bes_disc_params_punchouturl"
|
||||
+ " FROM bes_disc_params dp"
|
||||
+ " WHERE dp.bes_ins_discipline_key = " + dis_key;
|
||||
oRs = Oracle.Execute(sql);
|
||||
var purl = oRs("bes_disc_params_punchouturl").Value;
|
||||
var newWindow = false;
|
||||
if (!from_punch && bes_disc_info.disc_params_punchouturl && !bes_disc_info.isFreeArticle)
|
||||
if (!from_punch && purl)
|
||||
{
|
||||
var purl = bes_disc_info.disc_params_punchouturl;
|
||||
var hook_url = "bes_hook_punch.asp?urole="+urole+"&dis_key="+dis_key+transitParam;
|
||||
// Biedt de mogelijkheid de url te verrijken met gebruikers info
|
||||
var subst_table = { "RANDOM" : shared.random(16),
|
||||
|
||||
@@ -86,7 +86,6 @@ function show_item_details(bes_item_info)
|
||||
window.stock_info = {}; // even onbekend.
|
||||
|
||||
var imgObj = $("#photo")[0];
|
||||
if (imgObj == null) return; // free artikel
|
||||
|
||||
if (bes_item_info.srtdeel_image)
|
||||
{
|
||||
|
||||
@@ -24,9 +24,7 @@
|
||||
<!-- #include file="../Shared/persoonselector.inc" -->
|
||||
<!-- #include file="../Shared/artikelgroepselector.inc" -->
|
||||
<!-- #include file="../Shared/besitemselector.inc" -->
|
||||
<!-- #include file="../Shared/bedrijfselector.inc" -->
|
||||
<!-- #include file="../Shared/selector.inc" -->
|
||||
<!-- #include file="../Shared/rater.inc" -->
|
||||
<!-- #include file="../prs/prs.inc" -->
|
||||
<!-- #include file="../Shared/json2.js" -->
|
||||
<!-- #include file="bes_flexkenmerk.inc" -->
|
||||
@@ -126,12 +124,12 @@ else // nieuwe bestelling. Defaults bepalen
|
||||
if (S("prs_dep_default_kpn") == 0)
|
||||
{ // Niet standaard geautoriseerd voor eigen kostenplaats. Dit hier checken
|
||||
sql = "SELECT k.prs_kostenplaats_key kpkey"
|
||||
+ " FROM prs_perslidkostenplaats pk"
|
||||
+ " , prs_v_aanwezigkostenplaats k"
|
||||
+ " FROM prs_perslidkostenplaats pk"
|
||||
+ ", prs_v_aanwezigkostenplaats k"
|
||||
+ " WHERE pk.prs_kostenplaats_key = k.prs_kostenplaats_key(+)"
|
||||
+ " AND pk.prs_perslidkostenplaats_boeken = 1"
|
||||
+ " AND pk.prs_perslid_key = " + user_key
|
||||
+ " AND (k.prs_kostenplaats_key = " + (user.afdeling().prs_kostenplaats_key() || -1)
|
||||
+ " AND pk.prs_perslidkostenplaats_boeken = 1"
|
||||
+ " AND pk.prs_perslid_key = " + user_key
|
||||
+ " AND (k.prs_kostenplaats_key = " + (user.afdeling().prs_kostenplaats_key() || -1)
|
||||
+ " OR pk.prs_kostenplaats_key IS NULL)";
|
||||
oRs = Oracle.Execute(sql);
|
||||
authForOwnAcoount = (!oRs.eof);
|
||||
@@ -209,7 +207,6 @@ else // nieuwe bestelling. Defaults bepalen
|
||||
bes_bestelling.flex_defaults[nm] = val;
|
||||
}
|
||||
}
|
||||
|
||||
%>
|
||||
|
||||
<html>
|
||||
@@ -219,7 +216,7 @@ else // nieuwe bestelling. Defaults bepalen
|
||||
var details_Items = new Array(); // voor details.inc
|
||||
dis_key = <%=bes_bestelling.dis_key%>;
|
||||
var user_kpkey = <%=user.afdeling().prs_kostenplaats_key() || -1%>;
|
||||
var user_kpnaam = "<%=safe.jsstring(user.afdeling().kpn_naam())%>";
|
||||
var user_kpnaam = "<%=user.afdeling().kpn_naam()%>";
|
||||
var inclBTW = <%=bes_bestelling.inclBTW%> == 1;
|
||||
var maxartikel = <%=bes_disc_info.maxartikel%>;
|
||||
</script>
|
||||
@@ -338,7 +335,7 @@ else // nieuwe bestelling. Defaults bepalen
|
||||
<% var buttons = [];
|
||||
|
||||
if (bes_key < 0 && bes_bestelling.fac_activiteit_key == -1)
|
||||
buttons.push({title: L("lcl_bes_submit"), icon: "bestel.png", action: "MakeOrder(0)", singlepress: true, id: "btn_bes_submit"});
|
||||
buttons.push({title: L("lcl_bes_Submit"), icon: "bestel.png", action: "MakeOrder(0)", singlepress: true, id: "btn_bes_submit"});
|
||||
else
|
||||
buttons.push({title: L("lcl_submit"), icon: "opslaan.png", action: "MakeOrder(1)", singlepress: true, id: "btn_bes_submit"});
|
||||
|
||||
@@ -388,13 +385,13 @@ else // nieuwe bestelling. Defaults bepalen
|
||||
changeKostK(); // Even ordernr goed aan/uitzetten
|
||||
<% }
|
||||
}
|
||||
if (this_bes.canItemsChange && !bes_disc_info.isFreeArticle)
|
||||
if (this_bes.canItemsChange)
|
||||
{ %>
|
||||
sgBesItem.CheckJustOne();
|
||||
<% } %>
|
||||
|
||||
if (front_end)
|
||||
showPicture('<%=safe.jsstring(bes_disc_info.disc_params_logo_url)%>');
|
||||
showPicture('<%=bes_disc_info.disc_params_logo_url%>');
|
||||
|
||||
<% if (bes_key < 0 && artikel_key > 0) { %>
|
||||
load_item_info(<%=artikel_key%>, '<%=urole%>', 1); // AutoAdd eentje
|
||||
@@ -548,8 +545,8 @@ else // nieuwe bestelling. Defaults bepalen
|
||||
// Alleen aanpasbaar na klikken van 'pas aan' button
|
||||
// Bestelling voor alleen aanpasbaar als ook kostenplaats aanpasbaar is
|
||||
var kp_editable = ( (bes_bestelling.rfoStatus==null)
|
||||
|| (bes_bestelling.rfoStatus >= 3 && bes_bestelling.rfoStatus <= 6
|
||||
&& writeORDFIN && this_bes.canMainChange)
|
||||
|| (backo && bes_bestelling.rfoStatus >= 3 && bes_bestelling.rfoStatus <= 6
|
||||
&& this_bes.canWrite('WEB_ORDFIN') && this_bes.canMainChange)
|
||||
|| this_bes.canApprove
|
||||
);
|
||||
// Alleen aanpasbaar na klikken van 'pas aan' button, bij toevoegen van nieuwe bestelling en bij fiatteren
|
||||
@@ -602,9 +599,8 @@ else // nieuwe bestelling. Defaults bepalen
|
||||
var sql = "SELECT prs.getprofiellimiet(" + (S("prs_dep_default_kpn_voor") == 0? bes_bestelling.perslid_key : bes_bestelling.perslid_key_voor) + ", " + bes_bestelling.dis_key +") limiet FROM DUAL";
|
||||
var oRs = Oracle.Execute(sql);
|
||||
txt = oRs("limiet").value || ""; // zou alsnog leeg kunnen zijn
|
||||
oRs.Close();
|
||||
}
|
||||
RWFIELDTR ("bestellimiet", "fldprofiel", L("lcl_bes_orderlimit"), txt, { readonly: true});
|
||||
ROFIELDTR ("fldprofiel", L("lcl_bes_orderlimit"), txt, { id: "bestellimiet"});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -688,7 +684,7 @@ else // nieuwe bestelling. Defaults bepalen
|
||||
}
|
||||
|
||||
BLOCK_START("besFlex"+(S("bes_flexcolumns")!=1?"2":"") , L("lcl_bes_flexblok"));
|
||||
%><tr><td class="besflex"><%
|
||||
%><tr><td><%
|
||||
generateFlexKenmerkCode ({ urole: urole,
|
||||
bes_key: bes_bestelling.bes_key, // Bestelling key
|
||||
disc_key: bes_bestelling.dis_key,
|
||||
@@ -712,84 +708,55 @@ else // nieuwe bestelling. Defaults bepalen
|
||||
<% // ======== BLOCK om itemregels toe te voegen ========
|
||||
if (this_bes.canItemsChange)
|
||||
{
|
||||
BLOCK_START("besItemSel" , L("lcl_bes_selectieblok") + " " + safe.html(bes_disc_info.discipline_omschrijving) + " " + (bes_bestelling.inclBTW? L("lcl_shared_inclBTW") : L("lcl_shared_exclBTW")));
|
||||
BLOCK_START("besItemSel" , L("lcl_bes_selectieblok") + " " + bes_disc_info.discipline_omschrijving + " " + (bes_bestelling.inclBTW? L("lcl_shared_inclBTW") : L("lcl_shared_exclBTW")));
|
||||
|
||||
if (bes_disc_info.isFreeArticle)
|
||||
{
|
||||
FCLTbedrijfselector("lev_key", // Leverancier
|
||||
"sg_lev",
|
||||
{ companyKey: bes_bestelling.bedrijf_key||-1,
|
||||
label: L("lcl_bes_Supplier"),
|
||||
filtercode: "L",
|
||||
required: true,
|
||||
readonly: bes_bestelling.bedrijf_key > 0
|
||||
});
|
||||
RWFIELDTR("srtdeel_nr", "fld", L("lcl_bes_srtdeel_nr"), "", { required: true, maxlength: 32 });
|
||||
RWFIELDTR("omschrijving", "fld", L("lcl_bes_srtdeel_oms"), "", { required: true, maxlength: 100 })
|
||||
RWFIELDTR("unit", "fld", L("lcl_bes_unity"), "", { maxlength: 30 })
|
||||
RWFIELDTR("price", "fld currency", L("lcl_bes_price_per_unity"), "", { requiredor0: true, maxlength: 10 })
|
||||
RWFIELDTR("aantal_text", "fld", L("lcl_bes_amount"), "", { required: true, maxlength: 10 })
|
||||
%> <tr id="buttons_tr"><td colspan="2">
|
||||
<span class='labelextra'>
|
||||
<img class='details' title='<%=L("lcl_bes_add_btn")%>' src='../Pictures/cartx2.png' onclick="AddFreeArticleItem('<%=urole%>')">
|
||||
</span>
|
||||
</td></tr>
|
||||
FCLTartikelgroepselector("srtgroep",
|
||||
"sgSrtgroep",
|
||||
{ label: L("lcl_bes_srtgroup"),
|
||||
artikelgroepKey: bes_bestelling.srtgroep,
|
||||
disc_key: bes_bestelling.dis_key,
|
||||
onChange: "onChangeArtikelgroep",
|
||||
extraParamField: "singlegroep",
|
||||
extracode: "S",
|
||||
readonly: (bes_key > 0 && bes_bestelling.singlegroep)
|
||||
});
|
||||
|
||||
sql = " SELECT bs.bes_staffeltabel_key"
|
||||
+ ", bs.bes_staffeltabel_naam"
|
||||
+ " FROM bes_staffeltabel bs"
|
||||
+ " WHERE EXISTS (SELECT sd.bes_srtdeel_key"
|
||||
+ " FROM bes_v_aanwezigsrtgroep sg"
|
||||
+ ", bes_v_aanwezigsrtdeel sd"
|
||||
+ " WHERE sg.ins_discipline_key = " + bes_bestelling.dis_key
|
||||
+ " AND sg.bes_srtgroep_key = sd.bes_srtgroep_key"
|
||||
+ " AND sd.bes_staffeltabel_key = bs.bes_staffeltabel_key)"
|
||||
+ " ORDER BY 2";
|
||||
|
||||
oRs = Oracle.Execute(sql);
|
||||
if (!oRs.eof)
|
||||
FCLTselector("staffelgroep", sql, // filter op suggest besitem
|
||||
{ label: L("lcl_bes_staffelgroep"),
|
||||
emptyOption: ""
|
||||
}
|
||||
);
|
||||
else
|
||||
{ // Staffelgroep hidden weergeven met -1 als waarde (geen staffelgroep geselecteerd)
|
||||
%> <input type="hidden" id="staffelgroep" tabindex="-1" class="fldselect" value="-1">
|
||||
<% } %>
|
||||
<%
|
||||
}
|
||||
else // Gewoon artikel uit catalogus kiezen
|
||||
{
|
||||
FCLTartikelgroepselector("srtgroep",
|
||||
"sgSrtgroep",
|
||||
{ label: L("lcl_bes_srtgroup"),
|
||||
artikelgroepKey: bes_bestelling.srtgroep,
|
||||
disc_key: bes_bestelling.dis_key,
|
||||
onChange: bes_disc_info.isFreeArticle?null:"onChangeArtikelgroep",
|
||||
required: bes_disc_info.isFreeArticle,
|
||||
extraParamField: "singlegroep",
|
||||
extracode: "S",
|
||||
readonly: (bes_key > 0 && bes_bestelling.singlegroep)
|
||||
});
|
||||
|
||||
sql = " SELECT bs.bes_staffeltabel_key"
|
||||
+ ", bs.bes_staffeltabel_naam"
|
||||
+ " FROM bes_staffeltabel bs"
|
||||
+ " WHERE EXISTS (SELECT sd.bes_srtdeel_key"
|
||||
+ " FROM bes_v_aanwezigsrtgroep sg"
|
||||
+ ", bes_v_aanwezigsrtdeel sd"
|
||||
+ " WHERE sg.ins_discipline_key = " + bes_bestelling.dis_key
|
||||
+ " AND sg.bes_srtgroep_key = sd.bes_srtgroep_key"
|
||||
+ " AND sd.bes_staffeltabel_key = bs.bes_staffeltabel_key)"
|
||||
+ " ORDER BY 2";
|
||||
|
||||
oRs = Oracle.Execute(sql);
|
||||
if (!oRs.eof)
|
||||
{
|
||||
FCLTselector("staffelgroep", sql, // filter op suggest besitem
|
||||
{ label: L("lcl_bes_staffelgroep"),
|
||||
emptyOption: ""
|
||||
}
|
||||
);
|
||||
}
|
||||
else
|
||||
{ // Staffelgroep hidden weergeven met -1 als waarde (geen staffelgroep geselecteerd)
|
||||
%> <input type="hidden" id="staffelgroep" tabindex="-1" class="fldselect" value="-1">
|
||||
<% }
|
||||
oRs.Close();
|
||||
|
||||
FCLTbesitemselector("besitem",
|
||||
"sgBesItem",
|
||||
{ label: L("lcl_bes_srtdeel"),
|
||||
bessrtdeel_key: -1,
|
||||
disc_key: bes_bestelling.dis_key,
|
||||
readonly: !this_bes.canItemsChange,
|
||||
urlAdd: [{urlParam: "srtgroep_key", field: "srtgroep"},
|
||||
{urlParam: "staffel_key", field: "staffelgroep"}],
|
||||
onChange: "load_item_info",
|
||||
favouritelist: true
|
||||
});
|
||||
FCLTbesitemselector("besitem",
|
||||
"sgBesItem",
|
||||
{ label: L("lcl_bes_srtdeel"),
|
||||
bessrtdeel_key: -1,
|
||||
disc_key: bes_bestelling.dis_key,
|
||||
readonly: !this_bes.canItemsChange,
|
||||
urlAdd: [{urlParam: "srtgroep_key", field: "srtgroep"},
|
||||
{urlParam: "staffel_key", field: "staffelgroep"}],
|
||||
onChange: "load_item_info",
|
||||
favouritelist: true
|
||||
});
|
||||
// Het informatieblok van een geselecteerd artikel
|
||||
%>
|
||||
%>
|
||||
<tr><td class="label">
|
||||
<label><img class="besphoto"
|
||||
src="../Pictures/no_photo.gif"
|
||||
@@ -821,18 +788,17 @@ else // nieuwe bestelling. Defaults bepalen
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<% }
|
||||
BLOCK_END();
|
||||
<% BLOCK_END();
|
||||
} // this_bes.canItemsChange
|
||||
%>
|
||||
|
||||
BLOCK_START("besItems" , L("lcl_bes_geselecteerd") + " " + (bes_bestelling.inclBTW? L("lcl_shared_inclBTW") : L("lcl_shared_exclBTW"))); %>
|
||||
<% BLOCK_START("besItems" , L("lcl_bes_geselecteerd") + " " + (bes_bestelling.inclBTW? L("lcl_shared_inclBTW") : L("lcl_shared_exclBTW"))); %>
|
||||
<tr><td>
|
||||
<!-- SELECTED ITEMS -->
|
||||
<table width="100%" style='border:0px; padding:0px;' id="sel_items" class="rstable">
|
||||
<table width="100%" style='border:0px; paddding:0px;' id="sel_items" class="rstable">
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<!--<th><%=L("lcl_bes_srtgroup")%></th>-->
|
||||
<th><%=L("lcl_bes_srtdeel_nr")%></th>
|
||||
<th><%=L("lcl_bes_srtdeel")%></th>
|
||||
<th><%=L("lcl_bes_unity")%></th>
|
||||
@@ -877,8 +843,7 @@ else // nieuwe bestelling. Defaults bepalen
|
||||
</div>
|
||||
<% }
|
||||
%> </td></tr><%
|
||||
BLOCK_END();
|
||||
IFACE.FORM_END();
|
||||
BLOCK_END(); IFACE.FORM_END();
|
||||
%>
|
||||
</form>
|
||||
<iframe src="../Shared/empty.html"
|
||||
|
||||
@@ -16,10 +16,9 @@
|
||||
<!-- #include file="../Shared/common.inc" -->
|
||||
<!-- #include file="./bes.inc" -->
|
||||
<!-- #include file="../PRS/prs.inc" -->
|
||||
<!-- #include file="../Shared/save2db.inc" -->
|
||||
<!-- #include file="../Shared/kpl_ksrt_validate.inc" -->
|
||||
<!-- #include file="../shared/save2db.inc" -->
|
||||
<!-- #include file="../shared/kpl_ksrt_validate.inc" -->
|
||||
<!-- #include file="../Shared/kenmerk_common.inc" -->
|
||||
<!-- #include file="../Shared/budget.inc" -->
|
||||
|
||||
<%
|
||||
var bes_key = getQParamInt("bes_key", -1);
|
||||
@@ -37,43 +36,16 @@ var bes_disc_info = bes.disc_info(dis_key);
|
||||
var act_key = getFParamInt("act_key", -1);
|
||||
var act_mode = (act_key > 0);
|
||||
var kostenplaats_key = getFParamInt("kostenplaats",-1);
|
||||
var srtdeel_keys = getFParamIntArray("srtdeel_keys",[]);
|
||||
var amount_arr = getFParamIntArray("amount_string",[]);
|
||||
var item_keys_unsafe = getFParamArray("item_keys",[]); // kan ook 'new1' zijn voor nieuwe opdrachten
|
||||
var flexkey_string_arr = getFParamIntArray("flexkey_string",[]);
|
||||
var flexval_string_arr = getFParamArray("flexval_string",[]);
|
||||
var flexdeel_string_arr = getFParamArray("flexdeel_string",[]);
|
||||
var flexitem_string_unsafe = getFParamArray("flexitem_string",[]); // kan ook 'new1' zijn voor nieuwe opdrachten
|
||||
var srtdeel_keys = getFParamIntArray("srtdeel_keys",[]); // Bij isFree ook voor bewerken bestaande
|
||||
|
||||
if (bes_disc_info.isFreeArticle)
|
||||
{ // Moeten we de nieuwe srtdeel-en nog aanmaken
|
||||
for (var itemregelnr = 0; itemregelnr < item_keys_unsafe.length; itemregelnr++)
|
||||
{
|
||||
var srtdeel_nr = getFParam("srtdeel_nr_" + item_keys_unsafe[itemregelnr], ""); // Leeg bij bewerken bestaande;
|
||||
if (srtdeel_nr)
|
||||
{
|
||||
var data = { //srtgroep_key: getFParamInt("srtgroup_key_" + item_keys_unsafe[itemregelnr]),
|
||||
srtgroep_omschrijving: "Vrije artikel groep", // 2015.1 nog lcl van maken
|
||||
srtdeel_nr: srtdeel_nr,
|
||||
srtdeel_omschrijving: getFParam("srtdeel_omschrijving_" + item_keys_unsafe[itemregelnr]),
|
||||
srtdeel_prijs: getFParamFloat("price_" + item_keys_unsafe[itemregelnr]),
|
||||
srtdeel_eenheid: getFParam("eenheid_" + item_keys_unsafe[itemregelnr], ""),
|
||||
srtdeel_btw: 21,
|
||||
bedrijf_key: getFParamInt("lev_key_" + item_keys_unsafe[itemregelnr]),
|
||||
srtdeel_opmerking: "" //opmerking
|
||||
};
|
||||
try
|
||||
{
|
||||
var bes_srtdeel_key = bes.upsert_deel(dis_key, data);
|
||||
}
|
||||
catch (e)
|
||||
{
|
||||
abort_with_warning("Kan artikel '{0}' niet toevoegen. Dubbel artikelnummer is niet toegestaan.".format(srtdeel_nr));
|
||||
}
|
||||
srtdeel_keys[itemregelnr] = bes_srtdeel_key;
|
||||
}
|
||||
}
|
||||
}
|
||||
// staffel_info.totaalbedrag is erg handig
|
||||
var staffel_info = bes.staffel_info(srtdeel_keys, amount_arr);
|
||||
|
||||
var isNew = (bes_key == -1);
|
||||
var isChange = !isNew && bes_bestelling.parent_key > 0;
|
||||
@@ -112,8 +84,6 @@ for (i = 0; i < amount_arr.length; i++)
|
||||
item_coll[i] = parseInt(item_keys_unsafe[i], 10);
|
||||
}
|
||||
|
||||
// staffel_info.totaalbedrag is erg handig
|
||||
var staffel_info = bes.staffel_info(srtdeel_keys, amount_arr);
|
||||
itemprijsstring = staffel_info.itemprijsstring;
|
||||
|
||||
var strState = ""; // L("lcl_bes_RFO_regSuccess")
|
||||
@@ -167,7 +137,7 @@ else
|
||||
// S("prs_dep_default_kpn_voor") == 0: de contactpersoon prs_key
|
||||
// S("prs_dep_default_kpn_voor") == 1: de "voor wie" (bestelling voor) prs_key_voor
|
||||
// Als bes_disc_params_for_others niet is gezet zijn prs_key en prs_key_voor identiek
|
||||
var exceeds_pgb = bes.exceeds_pgb(staffel_info.totaalbedrag, (S("prs_dep_default_kpn_voor") == 0? prs_key : prs_key_voor), dis_key)
|
||||
var exceeds_pgb = bes.exceeds_pgb(staffel_info.totaalbedrag, (S("prs_dep_default_kpn_voor") == 0? prs_key : prs_key_voor), dis_key, bes_key)
|
||||
var exceeds_agb = bes.exceeds_agb(staffel_info.totaalbedrag, (S("prs_dep_default_kpn_voor") == 0? prs_key : prs_key_voor), dis_key, bes_key)
|
||||
if (exceeds_pgb || exceeds_agb)
|
||||
{
|
||||
@@ -175,20 +145,21 @@ else
|
||||
// Algemene fiatterings proces noodzakelijk naast PGB fiatering
|
||||
ter_finfiattering = true;
|
||||
else
|
||||
{ // Fiatteringsproces moet gevolgd worden op de naam van.
|
||||
// S("prs_dep_default_kpn_voor") == 0: de contactpersoon prs_key.
|
||||
// S("prs_dep_default_kpn_voor") == 1: de "voor wie" (bestelling voor) prs_key_voor.
|
||||
// Als bes_disc_params_for_others niet is gezet zijn prs_key en prs_key_voor identiek.
|
||||
var strState = (exceeds_pgb
|
||||
? L("lcl_bes_exceeds_pgb") + safe.curr(bes.get_pgb_exceed_amount(staffel_info.totaalbedrag, (S("prs_dep_default_kpn_voor") == 0? prs_key : prs_key_voor), dis_key, bes_key))
|
||||
: "")
|
||||
+ (exceeds_pgb && exceeds_agb
|
||||
? "\n" // Nieuwe regel.
|
||||
: "")
|
||||
+ (exceeds_agb
|
||||
? L("lcl_bes_exceeds_agb") + safe.curr(bes.get_agb_exceed_amount(staffel_info.totaalbedrag, (S("prs_dep_default_kpn_voor") == 0? prs_key : prs_key_voor), dis_key, bes_key))
|
||||
: "")
|
||||
+ "\n" + L("lcl_bes_adjust_order");
|
||||
{
|
||||
// Fiatteringsproces moet gevolgd worden op de naam van
|
||||
// S("prs_dep_default_kpn_voor") == 0: de contactpersoon prs_key
|
||||
// S("prs_dep_default_kpn_voor") == 1: de "voor wie" (bestelling voor) prs_key_voor
|
||||
// Als bes_disc_params_for_others niet is gezet zijn prs_key en prs_key_voor identiek
|
||||
strState = (exceeds_pgb
|
||||
? L("lcl_bes_exceeds_pgb") + safe.curr(bes.get_pgb_exceed_amount(staffel_info.totaalbedrag, (S("prs_dep_default_kpn_voor") == 0? prs_key : prs_key_voor), dis_key, bes_key))
|
||||
: "")
|
||||
+ (exceeds_pgb && exceeds_agb
|
||||
? "\n" // Nieuwe regel
|
||||
: "")
|
||||
+ (exceeds_agb
|
||||
? L("lcl_bes_exceeds_agb") + safe.curr(bes.get_agb_exceed_amount(staffel_info.totaalbedrag, (S("prs_dep_default_kpn_voor") == 0? prs_key : prs_key_voor), dis_key, bes_key))
|
||||
: "")
|
||||
+ "\n" + L("lcl_bes_adjust_order");
|
||||
abort_with_warning(strState);
|
||||
}
|
||||
}
|
||||
@@ -198,21 +169,21 @@ else
|
||||
}
|
||||
}
|
||||
else
|
||||
{ // Standaard fiatteringscontrole.
|
||||
{ // Standaard fiatteringscontrole
|
||||
// Fiatteringsproces moet gevolgd worden op de naam van
|
||||
// S("prs_dep_default_kpn_voor") == 0: de contactpersoon prs_key
|
||||
// S("prs_dep_default_kpn_voor") == 1: de "voor wie" (bestelling voor) prs_key_voor
|
||||
// Als bes_disc_params_for_others niet is gezet zijn prs_key en prs_key_voor identiek.
|
||||
// Als orgineel nog gefiatteerd moet worden door budgethouder (status is 2) dan zeker eerst fiatteren.
|
||||
// Als bes_disc_params_for_others niet is gezet zijn prs_key en prs_key_voor identiek
|
||||
// Als orgineel nog gefiatteerd moet worden door budgethouder (status is 2) dan zeker eerst fiatteren
|
||||
if (!act_mode
|
||||
&& !bes_disc_info.disc_params_autoacceptrfo
|
||||
&& budget.exceeds_profiel(staffel_info.totaalbedrag, (S("prs_dep_default_kpn_voor") == 0? prs_key : prs_key_voor), dis_key)
|
||||
&& shared.exceeds_profiel(staffel_info.totaalbedrag, (S("prs_dep_default_kpn_voor") == 0? prs_key : prs_key_voor), dis_key)
|
||||
&& (isNew || oldStatus == 2 || bes.herfiatteren(bes_bestelling, bes_disc_info, staffel_info.totaalbedrag)))
|
||||
// niet automatisch fiat(!)teren en profiel wordt overschreden.
|
||||
// niet automatisch fiat(!)teren en profiel wordt overschreden
|
||||
ter_finfiattering = true;
|
||||
}
|
||||
|
||||
// Als het boven mijn profiel is, of ik -als ik budgethouder ben/zou zijn- niet zelf mag goedkeuren.
|
||||
// Als het boven mijn profiel is, of ik -als ik budgethouder ben/zou zijn- niet zelf mag goedkeuren
|
||||
// Gaan we kijken wie dan wel.
|
||||
// Kan ik zelf fiatteren?: true: totaalbedrag <= can_selfapprove
|
||||
// false totaalbedrag > can_selfapprove
|
||||
@@ -225,13 +196,13 @@ else
|
||||
__Log('bestelling afgebroken');
|
||||
abort_with_warning(L("lcl_bes_no_fiatteur"));
|
||||
}
|
||||
if (budget.exceeds_profiel(staffel_info.totaalbedrag, approver_key, dis_key))
|
||||
if (shared.exceeds_profiel(staffel_info.totaalbedrag, approver_key, dis_key))
|
||||
{ // de gevonden fiatteur heeft onvoldoende profiel, is er een hogere (kpngroepverantwoordelijke)
|
||||
// Let wel: alleen controle of hij er bestaat. Wie het is doen we nog niets mee hier.
|
||||
__Log('voldoet niet');
|
||||
var nextapprover_key = prs.getKpVerantwoordelijkeExcept(kostenplaats_key, approver_key);
|
||||
__Log('Vervolgensgevonden fiatteur: ' + nextapprover_key);
|
||||
if (nextapprover_key == -1 || budget.exceeds_profiel(staffel_info.totaalbedrag, nextapprover_key, dis_key))
|
||||
if (nextapprover_key == -1 || shared.exceeds_profiel(staffel_info.totaalbedrag, nextapprover_key, dis_key))
|
||||
{
|
||||
__Log('voldoet ook niet');
|
||||
abort_with_warning(L("lcl_bes_exceed_limit"));
|
||||
@@ -443,8 +414,8 @@ if (status == 1 || status == 2|| status == 3 || status == 4 || status == 5)
|
||||
if (makechange) // in de originele tracking verwijzen we naar de change-request
|
||||
shared.trackaction("BESUPD", getQParamInt("bes_key"), L("lcl_bes_change") + S("bes_bestelling_prefix") + bes_key );
|
||||
|
||||
if (UseRemoteApproval)
|
||||
{
|
||||
if (UseRemoteApproval)
|
||||
{
|
||||
__Log("Requesting remote approval");
|
||||
var remoteResult = custfunc.bes_getremoteapproval(getQParamInt("bes_key", pResult)); // dis_key ook meegeven?
|
||||
// Track dat fiattering gevraagd wordt aan extern systeem (custfunc.bes_remoteapprovalSystemName(dis_key)?)
|
||||
@@ -456,7 +427,7 @@ if (status == 1 || status == 2|| status == 3 || status == 4 || status == 5)
|
||||
// if (!corsaResult)
|
||||
// strState = "Resultaat Corsa/Webservice: "+corsaError;
|
||||
//
|
||||
// var xmlTableDef = Server.CreateObject("MSXML2.DOMDocument.6.0");
|
||||
// var xmlTableDef = Server.CreateObject("MSXML2.DOMDocument.4.0");
|
||||
// var docNr = corsaCreateDoc(bes_key);
|
||||
// var caseID = corsaGetCase(docNr);
|
||||
// xmlTableDef = corsaVarTabGet(caseID);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user