2 Commits

Author SHA1 Message Date
Jos Groot Lipman
76a5c63d4d Die hoort weg te zijn
svn path=/Website/branches/v5.4.1/; revision=22097
2014-07-08 11:20:56 +00:00
Daniëlle Tolner
760eeb16c9 PNBR#29793: Nieuw logo op bonnen
svn path=/Website/branches/v5.4.1/; revision=22059
2014-07-02 11:44:36 +00:00
1876 changed files with 66492 additions and 97161 deletions

View File

@@ -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
{

View File

@@ -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];

View File

@@ -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

View File

@@ -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" -->

View File

@@ -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)

View File

@@ -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>

View File

@@ -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 });

View File

@@ -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" },

View File

@@ -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)

View File

@@ -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,

View File

@@ -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

View File

@@ -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)

View File

@@ -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" },

View File

@@ -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" },

View File

@@ -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" },

View File

@@ -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,"

View File

@@ -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

View File

@@ -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>
<%
} %>
<%}%>

View File

@@ -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 -->

View File

@@ -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),

View File

@@ -65,7 +65,7 @@ else
}
</script>
</head>
<body>
<body id="editbody">
<%
if (loc_key == -1)
var page="alg_edit_locatie.asp"; // Maak een nieuw

View File

@@ -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

View File

@@ -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" -->

View File

@@ -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

View File

@@ -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)

View File

@@ -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)

View File

@@ -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">

View File

@@ -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>

View File

@@ -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" });
}

View File

@@ -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>

View File

@@ -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>

View File

@@ -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>

View File

@@ -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

View File

@@ -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})
}

View File

@@ -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

View File

@@ -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" -->

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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");

View File

@@ -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

View File

@@ -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)

View File

@@ -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");

View File

@@ -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.

View File

@@ -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

View File

@@ -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;
%>

View File

@@ -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);
}
%>

View File

@@ -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

View File

@@ -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);
}

View File

@@ -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)

View File

@@ -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);
%>

View File

@@ -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);
%>

View File

@@ -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);
%>

View File

@@ -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);
%>

View File

@@ -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);
%>

View File

@@ -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);
%>

View File

@@ -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);
%>

View File

@@ -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);
%>

View File

@@ -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);
%>

View File

@@ -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);
%>

View File

@@ -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);

View File

@@ -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);
%>

View File

@@ -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);
%>

View File

@@ -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);

View File

@@ -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 */
{
}
}
%>

View File

@@ -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
}
}
}
%>

View File

@@ -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"},
],

View File

@@ -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 */
{
}
}
%>

View File

@@ -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 */
{
}
}
%>

View File

@@ -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
*/

View File

@@ -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"}
],

View File

@@ -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);
}
}
}
%>

View File

@@ -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
}
}
}
%>

View File

@@ -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);
}
}
}
%>

View File

@@ -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);
}
}
%>

View File

@@ -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);
}
}
%>

View File

@@ -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)
{

View File

@@ -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.
}
}
%>

View File

@@ -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
}
}
%>

View File

@@ -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 */
{
}
}
%>

View File

@@ -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
}
}
%>

View File

@@ -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)

View File

@@ -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 */
{
}
}
%>

View File

@@ -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
}
}
%>

View File

@@ -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
}
}
%>

View File

@@ -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 */
{
}
}
%>

View File

@@ -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
}
}
%>

View File

@@ -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 */
{
}
}
%>

View File

@@ -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
*/

View File

@@ -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);
}
}

View File

@@ -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
*/

View File

@@ -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

View File

@@ -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") + "&nbsp;" + 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;
}
}
%>

View File

@@ -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

View File

@@ -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;
}

View File

@@ -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),

View File

@@ -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)
{

View File

@@ -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"

View File

@@ -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