Files
Facilitor/APPL/ALG/alg.inc
2024-07-08 11:12:33 +00:00

572 lines
25 KiB
PHP

<% /*
$Revision$
$Id$
File: alg.inc
Status:
Description: defines usefull functions (both serverside and clientside)
Globals defined:
Context:
Note: Met betrekking tot werkplekken:
ALGUSE schrijfrechten==>je mag PRS_WERKPLEK records aanmaken/muteren/verwijderen
PRSBOF schrijfrechten==>je mag PRS_PERSLIDWERKPLEK records aanmaken/muteren/verwijderen
en/of PRS_RUIMTEAFDELING records
Met betrekking tot ruimtes
ALGMAN schrijfrechten==>je mag ALG_RUIMTE records aanmaken etc.
ALGUSE schrijfrechten==>je mag flexkenmerken boven de 100 en afhankelijk van <<== werkt nog niet
S("alg_ruimtenr_aut_use") ook nog ruimtenummer/omschrijving
PAS OP: De diverse canWriteRegio etc. functies heten eigenlijk verkeerd.
RegioInScope etc. zou een beel betere benaming zijn geweest
*/
alg = {
// merk op: ALGMAN heeft geen PRS-scope, ALGUSE wel maar die negeren we
checkAutorisation: function (isOptional)
{
var autfunction = "WEB_ALGMAN";
var authparams = user.checkAutorisation(autfunction, true);
if (authparams) {
var mALGreadlevel = authparams.ALGreadlevel;
var mALGwritelevel = authparams.ALGwritelevel;
}
else {
var mALGreadlevel = 9;
var mALGwritelevel = 9;
}
var autfunction = "WEB_ALGUSE";
var authparams = user.checkAutorisation(autfunction, isOptional);
if (authparams)
{
var uALGreadlevel = authparams.ALGreadlevel;
var uALGwritelevel = authparams.ALGwritelevel;
}
else
{
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
});
},
func_enabled: function alg_func_enabled (alg_key, p_onrgoedlvl)
{
var onrgoedlvl = (p_onrgoedlvl ? p_onrgoedlvl.toUpperCase() : "");
if (alg_key < 0 ||
onrgoedlvl == "G" || onrgoedlvl == "T" || onrgoedlvl == "V" || onrgoedlvl == "R")
{
var rresult = user.func_enabled("ALG",
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);
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.readmgt = rresult.canRead("WEB_ALGMGT");
rresult.writemgt = rresult.canWrite("WEB_ALGMGT");
rresult.writeman = rresult.canWrite(autfunctionMAN);
if (onrgoedlvl != "T")
rresult.writeuse = rresult.canWrite(autfunctionUSE);
else
rresult.writeuse = false;
}
else // iets meer werk
{
var rresult = user.func_enabled("ALG",
null, // geen disciplines
null, // deze werkt niet voor alg_key van regio's, districten en locaties
null); // nooit prs-scope
var sql= "SELECT -1 FROM DUAL"; // hoe 'ver' weg is alg_key?
switch (onrgoedlvl)
{
case "L":
sql = "SELECT MAX(niveau) FROM fac_v_my_locations "
+ "WHERE prs_perslid_key = " + user_key
+ " AND alg_locatie_key = " + alg_key;
break;
case "D":
sql = "SELECT MAX(niveau) FROM fac_v_my_districts "
+ "WHERE prs_perslid_key = " + user_key
+ " AND alg_district_key = " + alg_key;
break;
case "RG":
sql = "SELECT MAX(niveau) FROM fac_v_my_regions "
+ "WHERE prs_perslid_key = " + user_key
+ " AND alg_regio_key = " + alg_key;
break;
}
var oRs = Oracle.Execute(sql);
var level = (oRs(0).Value==null)?-1:oRs(0).Value;
oRs.Close();
rresult.readmgt = rresult.authparams("WEB_ALGMGT").ALGreadlevel <= level;
rresult.writemgt = rresult.authparams("WEB_ALGMGT").ALGwritelevel <= level;
rresult.readman = rresult.authparams("WEB_ALGMAN").ALGreadlevel <= level;
rresult.writeman = rresult.authparams("WEB_ALGMAN").ALGwritelevel <= level;
rresult.readuse = rresult.authparams("WEB_ALGUSE").ALGreadlevel <= level;
rresult.writeuse = rresult.authparams("WEB_ALGUSE").ALGwritelevel <= level;
}
rresult.canCndAggr = rresult.writeuse;
rresult.canReadNotes = (rresult.readuse || rresult.readman);
rresult.canWriteNotes = rresult.canReadNotes;
return rresult;
},
canWriteRegio: function (pregio_key, pniveau)
{
if (pniveau <= -1)
{
return true;
}
else
{
var sql = "SELECT alg_regio_key FROM fac_v_my_regions "
+ "WHERE prs_perslid_key = " + user_key
+ " AND alg_regio_key = " + pregio_key
+ " AND niveau = " + pniveau;
var oRs = Oracle.Execute(sql);
var res = !oRs.eof;
oRs.Close();
return (res);
}
},
canWriteDistrict: function (pdistrict_key, pniveau)
{
if (pniveau <= -1)
{
return true;
}
else
{
var sql = "SELECT alg_district_key FROM fac_v_my_districts "
+ "WHERE prs_perslid_key = " + user_key
+ " AND alg_district_key = " + pdistrict_key
+ " AND niveau = " + pniveau;
var oRs = Oracle.Execute(sql);
var res = !oRs.eof;
oRs.Close();
return (res);
}
},
canWriteLocatie: function (plocatie_key, pniveau)
{
if (pniveau <= -1)
{
return true;
}
else
{
var sql = "SELECT alg_locatie_key FROM fac_v_my_locations "
+ "WHERE prs_perslid_key = " + user_key
+ " AND alg_locatie_key = " + plocatie_key
+ " AND niveau = " + pniveau;
var oRs = Oracle.Execute(sql);
var res = !oRs.eof;
oRs.Close();
return (res);
}
},
canWriteGebouw: function (pgebouw_key, pniveau)
{
if (pniveau <= -1)
{
return true;
}
else
{
var sql = "SELECT alg_gebouw_key FROM fac_v_my_buildings "
+ "WHERE prs_perslid_key = " + user_key
+ " AND alg_gebouw_key = " + pgebouw_key
+ " AND niveau = " + pniveau;
var oRs = Oracle.Execute(sql);
var res = !oRs.eof;
oRs.Close();
return (res);
}
},
canWriteVerdieping: function (pverdieping_key, pniveau)
{
if (pniveau <= -1)
{
return true;
}
else
{
var sql = "SELECT alg_verdieping_key FROM fac_v_my_floors "
+ "WHERE prs_perslid_key = " + user_key
+ " AND alg_verdieping_key = " + pverdieping_key
+ " AND niveau = " + pniveau;
var oRs = Oracle.Execute(sql);
var res = !oRs.eof;
oRs.Close();
return (res);
}
},
canWriteRuimte: function (pruimte_key, pniveau)
{
if (pniveau <= -1)
{
return true;
}
else
{
var sql = "SELECT alg_ruimte_key FROM fac_v_my_rooms "
+ "WHERE prs_perslid_key = " + user_key
+ " AND alg_ruimte_key = " + pruimte_key
+ " AND niveau = " + pniveau
var oRs = Oracle.Execute(sql);
var res = !oRs.eof;
oRs.Close();
return (res);
}
},
alg_gebouwinfo: function _alg_gebouw(alg_gebouw_key)
{
var sql = "SELECT g.alg_gebouw_naam"
+ " , g.alg_gebouw_toon_telefoon"
+ " , g.alg_gebouw_toon_email"
+ " , g.alg_gebouw_toon_kenteken"
+ " , g.alg_gebouw_code"
+ " , g.alg_gebouw_omschrijving"
+ " , g.alg_srtgebouw_key"
+ " , g.prs_kostenplaats_key"
+ " , g.mld_adres_key"
+ " , g.alg_gebouw_opmerking"
+ " , g.alg_gebouw_ordernr"
+ " , g.alg_gebouw_bez"
+ " , g.alg_gebouw_mld"
+ " , g.alg_locatie_key"
+ " , k.prs_kostenplaats_module"
+ " , " + S("prs_kpn_string") + " kpstring"
+ " , " + S("prs_pers_string") + " budgethouder"
+ " , p.prs_perslid_key"
+ " , COALESCE(g.alg_gebouw_beginuur, -1) alg_gebouw_beginuur"
+ " , COALESCE(g.alg_gebouw_einduur, -1) alg_gebouw_einduur"
+ " FROM alg_gebouw g"
+ " , prs_kostenplaats k"
+ " , prs_perslid p"
+ " WHERE g.prs_kostenplaats_key = k.prs_kostenplaats_key(+)"
+ " AND k.prs_perslid_key = p.prs_perslid_key(+)"
+ " AND g.alg_gebouw_key = " + alg_gebouw_key;
var oRs = Oracle.Execute(sql);
var result = {};
if (!oRs.eof)
{
result = { alg_gebouw_key: alg_gebouw_key,
alg_gebouw_naam: oRs("alg_gebouw_naam").Value,
alg_gebouw_toon_telefoon: oRs("alg_gebouw_toon_telefoon").Value,
alg_gebouw_toon_email: oRs("alg_gebouw_toon_email").Value,
alg_gebouw_toon_kenteken: oRs("alg_gebouw_toon_kenteken").Value,
alg_gebouw_code: oRs("alg_gebouw_code").Value,
alg_gebouw_omschrijving: oRs("alg_gebouw_omschrijving").Value,
alg_srtgebouw_key: oRs("alg_srtgebouw_key").Value,
alg_kostenplaats_key: oRs("prs_kostenplaats_key").Value,
mld_adres_key: oRs("mld_adres_key").Value,
alg_gebouw_opmerking: oRs("alg_gebouw_opmerking").Value,
alg_gebouw_ordernr: oRs("alg_gebouw_ordernr").Value,
alg_gebouw_bez: oRs("alg_gebouw_bez").Value == "1",
alg_gebouw_mld: oRs("alg_gebouw_mld").Value == "1",
alg_locatie_key: oRs("alg_locatie_key").Value,
kostenplaats_omschrijving: oRs("kpstring").Value,
kostenplaats_module: oRs("prs_kostenplaats_module").Value,
kostenplaats_budgethouder_key: oRs("prs_perslid_key").Value,
kostenplaats_budgethouder: oRs("budgethouder").Value,
gebouw_beginuur: oRs("alg_gebouw_beginuur").Value,
gebouw_einduur: oRs("alg_gebouw_einduur").Value
};
}
oRs.Close();
return result;
},
alg_terreinsectorinfo: function _alg_terreinsector(alg_terreinsector_key)
{
var sql = "SELECT g.alg_terreinsector_naam"
+ ", g.alg_terreinsector_code"
+ ", g.alg_terreinsector_omschrijving"
+ ", g.alg_srtterreinsector_key"
+ ", g.prs_kostenplaats_key"
+ ", g.alg_terreinsector_ordernr"
+ ", g.alg_locatie_key"
+ ", k.prs_kostenplaats_module"
+ ", " + S("prs_kpn_string") + " kpstring"
+ ", " + S("prs_pers_string") + " budgethouder"
+ ", p.prs_perslid_key"
+ " FROM alg_terreinsector g"
+ ", prs_kostenplaats k"
+ ", prs_perslid p"
+ " WHERE g.prs_kostenplaats_key = k.prs_kostenplaats_key"
+ " AND k.prs_perslid_key = p.prs_perslid_key"
+ " AND g.alg_terreinsector_key = " + alg_terreinsector_key;
var oRs = Oracle.Execute(sql);
var result = {};
if (!oRs.eof)
{
result = { alg_terreinsector_key: alg_terreinsector_key,
alg_terreinsector_naam: oRs("alg_terreinsector_naam").Value,
alg_terreinsector_code: oRs("alg_terreinsector_code").Value,
alg_terreinsector_omschrijving: oRs("alg_terreinsector_omschrijving").Value,
alg_srtterreinsector_key: oRs("alg_srtterreinsector_key").Value,
alg_kostenplaats_key: oRs("prs_kostenplaats_key").Value,
alg_terreinsector_ordernr: oRs("alg_terreinsector_ordernr").Value,
alg_locatie_key: oRs("alg_locatie_key").Value,
kostenplaats_omschrijving: oRs("kpstring").Value,
kostenplaats_module: oRs("prs_kostenplaats_module").Value,
kostenplaats_budgethouder_key: oRs("prs_perslid_key").Value,
kostenplaats_budgethouder: oRs("budgethouder").Value
};
}
oRs.Close();
return result;
},
func_enabled_ruimte: // Wat mag ik zoal op deze specifieke ruimte?
function _func_enabled_ruimte(pruimte_key) // kan ook gebruikt worden met verdieping_key
{
// WEB_PRSBOF is onderdeel van de PRS module
var aresult = user.func_enabled("PRS",
-1, // ins_discipline_key
pruimte_key, // alg_key
user_key, // prs_key
false, // checkOptimistic
true); // isOptional
aresult.canPRSBOFwrite = aresult.canWrite("WEB_PRSBOF"); // werkplekbeheer
return aresult;
},
calc_algm2: function _calc_algm2(alg_key, lvl)
{
var sql = "SELECT SUM (alg_ruimte_bruto_vloeropp) opp1, "
+ " MAX(alg_verdieping_bruto_vloeropp) opp_bruto, "
+ " SUM (alg_ruimte_opp_alt1) opp2, "
+ " SUM (alg_ruimte_opp_alt2) opp3 "
+ " FROM alg_v_aanwezigruimte r, alg_verdieping v "
+ " WHERE v.alg_verdieping_key = r.alg_verdieping_key(+)";
if (lvl == "G") {
sql += " AND alg_gebouw_key = " + alg_key
} else if (lvl == "V") {
sql += " AND v.alg_verdieping_key = " + alg_key
}
sql += " GROUP BY v.alg_verdieping_key";
if (lvl == "G") {
sql = "SELECT SUM(opp1) opp1"
+ " , SUM(opp_bruto) opp_floors"
+ " , SUM(opp2) opp2"
+ " , SUM(opp3) opp3"
+ " FROM (" + sql + ")";
}
var oRs = Oracle.Execute(sql);
var algm2 = { opprooms: oRs("opp1").Value, oppalt1: oRs("opp2").Value, oppalt2: oRs("opp3").Value }
if (lvl == "V") {
algm2.oppfloor = oRs("opp_bruto").Value;
} else if (lvl == "G") {
algm2.oppfloors = oRs("opp_floors").Value;
}
oRs.Close();
return algm2;
},
alg_onroerendgoed_flex_params: function(p_niveau)
{
var sql = "SELECT DISTINCT " + lcl.xsqla("k.alg_kenmerk_omschrijving", "k.alg_kenmerk_key")
+ " , k.alg_kenmerk_kenmerktype"
+ " FROM alg_kenmerk k"
+ " WHERE (BITAND(alg_kenmerk_inlijst, 1) = 1)"
+ " AND (BITAND(alg_kenmerk_systeem, 4) = 0 OR k.alg_kenmerk_systeem IS NULL)"
+ " AND k.alg_kenmerk_niveau = " + safe.quoted_sql_upper(p_niveau)
+ " AND k.alg_kenmerk_verwijder IS NULL";
var oRs = Oracle.Execute(sql);
var v_flexParams = { anyflex: !oRs.eof};
if (v_flexParams.anyflex)
{
var multiflex = false;
v_flexParams.bijlageflex = (oRs("alg_kenmerk_kenmerktype").Value == "M");
v_flexParams.flexlabel = oRs("alg_kenmerk_omschrijving").Value;
oRs.MoveNext();
if (!oRs.eof)
{
multiflex = true;
v_flexParams.flexlabel = L("lcl_flexlist");
while (!oRs.eof)
{
if (oRs("alg_kenmerk_kenmerktype").Value == "M")
v_flexParams.bijlageflex = true;
oRs.MoveNext();
}
}
}
oRs.Close();
var onrgoed_fld = "";
switch (p_niveau)
{
case "D": onrgoed_fld = "d.alg_district_key"; break;
case "L": onrgoed_fld = "l.alg_locatie_key"; break;
case "T": onrgoed_fld = "g.alg_terreinsector_key"; break;
case "G": onrgoed_fld = "g.alg_gebouw_key"; break;
case "V": onrgoed_fld = "v.alg_verdieping_key"; break;
case "R": onrgoed_fld = "r.alg_ruimte_key"; break;
}
v_flexParams.sql = ( v_flexParams.anyflex
? " , (SELECT LISTAGG(" + ( multiflex
? lcl.xsql("k.alg_kenmerk_omschrijving", "k.alg_kenmerk_key") + " || ':' || chr(160) || "
: ""
)
+ " CASE WHEN k.alg_kenmerk_kenmerktype = 'R' OR k.alg_kenmerk_kenmerktype = 'r' OR k.alg_kenmerk_kenmerktype = 'S'"
+ " THEN flx.getdomeinwaarde(k.fac_kenmerkdomein_key, km.alg_onrgoedkenmerk_waarde)"
+ " WHEN ( ( k.alg_kenmerk_kenmerktype = 'N'"
+ " AND k.alg_kenmerk_lengte = 1"
+ " AND k.alg_kenmerk_nmin = 0"
+ " AND k.alg_kenmerk_nmax = 1"
+ " AND (k.alg_kenmerk_dec = 0 OR k.alg_kenmerk_dec IS NULL)"
+ " )"
+ " OR (k.alg_kenmerk_kenmerktype = 'V')"
+ " )"
+ " THEN DECODE( km.alg_onrgoedkenmerk_waarde"
+ " , 0, " + safe.qL("lcl_check_0")
+ " , 1, " + safe.qL("lcl_check_1")
+ " , km.alg_onrgoedkenmerk_waarde"
+ " )"
+ " ELSE km.alg_onrgoedkenmerk_waarde"
+ " END"
+ " , CHR(13)"
+ " )"
+ " WITHIN GROUP (ORDER BY k.alg_kenmerk_volgnr)"
+ " FROM alg_kenmerk k"
+ " , alg_onrgoedkenmerk km"
+ " WHERE km.alg_onrgoed_key = " + onrgoed_fld
+ " AND km.alg_onrgoed_niveau = " + safe.quoted_sql_upper(p_niveau)
+ " AND k.alg_kenmerk_key = km.alg_kenmerk_key"
+ " AND (BITAND(k.alg_kenmerk_inlijst,1) = 1)"
+ " AND (BITAND(k.alg_kenmerk_systeem,4) = 0 OR k.alg_kenmerk_systeem IS NULL)" // -- niet als vertrouwelijk
+ " AND k.alg_kenmerk_verwijder IS NULL"
+ " AND km.alg_onrgoedkenmerk_verwijder IS NULL"
+ " ) flex"
: ""
)
return v_flexParams;
},
alg_onroerendgoed_flex_bijlagen: function(p_niveau, p_alg_key)
{
var bijlagen_aantal = 0;
var bijlagen_oms = "";
var bijlagen_lijst = [];
var sql_k = "SELECT k.alg_kenmerk_key"
+ " , " + lcl.xsqla("k.alg_kenmerk_omschrijving", "k.alg_kenmerk_key")
+ " , CASE WHEN BITAND(k.alg_kenmerk_inlijst, 1) = 1"
+ " THEN 1"
+ " ELSE 0"
+ " END in_overzicht_tonen"
+ " FROM alg_kenmerk k"
+ " WHERE k.alg_kenmerk_verwijder IS NULL"
+ " AND k.alg_kenmerk_kenmerktype= 'M'"
+ " AND k.alg_kenmerk_niveau = " + safe.quoted_sql_upper(p_niveau);
var oRs_k = Oracle.Execute(sql_k);
while (!oRs_k.eof)
{
if (oRs_k("in_overzicht_tonen").Value == 1)
{
var kenmerk_key = oRs_k("alg_kenmerk_key").Value;
var bijlagen_oms = oRs_k("alg_kenmerk_omschrijving").Value;
var bestanden = flexProps("ALG", p_alg_key, kenmerk_key, "A", {getFiles: true});
var km_aantal = bestanden.files.length;
for (var i=0; i<km_aantal; i++)
{
bijlagen_lijst.push(bestanden.files[i].name);
}
bijlagen_aantal += km_aantal;
}
oRs_k.MoveNext();
}
oRs_k.Close();
return ( bijlagen_aantal > 0
? "<span title='" + safe.htmlattr(bijlagen_lijst.join("\n")) + "'>"
+ safe.html(bijlagen_oms) + ": " + bijlagen_aantal
+ "</span>"
: ""
);
}
}
%>