Files
Facilitor/APPL/Shared/get_objecten_sql.inc
Jos Groot Lipman 15ef90c853 FCLT#56891 AiAi op tonen object bij melding: deel-alias
svn path=/Website/trunk/; revision=41510
2019-03-12 13:20:54 +00:00

286 lines
13 KiB
C++

<% /*
$Revision$
$Id$
File: get_objecten_sql.inc
Parameters:
Context: Vanuit ins EN mld
*/
// Vanuit CNT\loadRuimteObjecten.asp is stdmld_key niet in gebruik
// Uitsluitend vanuit CNT\loadRuimteObjecten.asp is dept_key in gebruik
function get_objecten_sql(alg_key, alg_niveau, prs_key, dept_key, stdmld_key)
{
if (dept_key > 0 && stdmld_key > 0)
UNEXEPECTED_get_objecten_sql;
var obj_sqls = [];
var org_onrgoed_niveau = "";
var org_obj_niveau = 9;
var is_prsafdobj = false;
if (stdmld_key > 0) // Melding objecten
{
var sql = "SELECT msm.alg_onrgoed_obj_niveau"
+ " , msm.alg_org_obj_niveau"
+ " , msm.mld_stdmelding_prsafdobj"
+ " FROM mld_stdmelding msm"
+ " WHERE msm.mld_stdmelding_key = " + stdmld_key;
var oRs = Oracle.Execute(sql);
org_onrgoed_niveau = oRs("alg_onrgoed_obj_niveau").Value || "";
org_obj_niveau = oRs("alg_org_obj_niveau").Value || 9;
is_prsafdobj = oRs("mld_stdmelding_prsafdobj").Value == 1;
oRs.Close();
}
// Plaatsgebonden objecten
var alg_niveau_sql = !(stdmld_key > 0) || org_onrgoed_niveau != "" ? get_alg_niveau_sql(alg_niveau, alg_key) : "";
if (stdmld_key > 0) // Melding objecten
{
var afdeling_sql = get_afdeling_sql(org_obj_niveau, prs_key);
var persoon_sql = get_persoon_sql(prs_key, is_prsafdobj);
// Het aantal objecten kan ook ingeperkt worden door mld_stdmelding_srtinst.ins_srtinstallatie_key
var sql = "SELECT msi.ins_srtinstallatie_key"
+ " , msi.ins_srtinstallatie_niveau"
+ " FROM mld_stdmelding_srtinst msi"
+ " WHERE msi.mld_stdmelding_key = " + stdmld_key;
var oRs = Oracle.Execute(sql);
if (oRs.Eof) // Geen objectsoort beperking
{
obj_sqls = get_stdmelding_sql(alg_niveau_sql, [afdeling_sql, persoon_sql], "");
}
else
{
var disc_keys = [];
var group_keys = [];
var srt_keys = [];
while (!oRs.eof)
{
var inst_key = oRs("ins_srtinstallatie_key").Value;
var inst_type = oRs("ins_srtinstallatie_niveau").Value;
if (inst_key && inst_type) // Onzinnig als ze leeg zijn maar de interface ging het met 2017.3 nog niet tegen
{
switch (inst_type)
{
case "D": disc_keys.push(inst_key); break;
case "G": group_keys.push(inst_key); break;
case "S": srt_keys.push(inst_key); break;
}
}
oRs.MoveNext();
}
if (disc_keys.length)
{
var sqls = get_stdmelding_sql(alg_niveau_sql, [afdeling_sql, persoon_sql], " AND g.ins_discipline_key IN ({0})".format(disc_keys.join(", ")));
obj_sqls = obj_sqls.concat(sqls);
}
if (group_keys.length)
{
var sqls = get_stdmelding_sql(alg_niveau_sql, [afdeling_sql, persoon_sql], " AND s.ins_srtgroep_key IN ({0})".format(group_keys.join(", ")));
obj_sqls = obj_sqls.concat(sqls);
}
if (srt_keys.length)
{
var sqls = get_stdmelding_sql(alg_niveau_sql, [afdeling_sql, persoon_sql], " AND d.ins_srtdeel_key IN ({0})".format(srt_keys.join(", ")));
obj_sqls = obj_sqls.concat(sqls);
}
}
oRs.Close();
}
else // Contract objecten
{
var afdeling_sql = (dept_key > 0) ? " ins_alg_ruimte_type = 'A' AND ins_alg_ruimte_key = " + dept_key : "";
var persoon_sql = (prs_key > 0) ? " ins_alg_ruimte_type = 'P' AND ins_alg_ruimte_key = " + prs_key : "";
obj_sqls = get_stdmelding_sql(alg_niveau_sql, [persoon_sql, afdeling_sql], "");
}
if (obj_sqls.length)
return obj_sqls.join(" UNION ") + " ORDER BY 2";
else
return "SELECT 1 FROM DUAL WHERE 1=0";
}
// Afdelingsgebonden objecten
function get_afdeling_sql(p_org_obj_niveau, p_prs_key)
{
var v_org_niveau_sql = "";
if (p_prs_key > 0 && p_org_obj_niveau < 9)
{ // Autlevel is het afdelingsobjecten niveau (stdmelding.alg_org_obj_niveau) van waaruit objecten gekozen kunnen worden (null=alle, 0=bedrijf, ...., 9=geen).
var autlevel = p_org_obj_niveau;
var melder_user = new Perslid(p_prs_key);
if (autlevel == 0)
var departmentsql = "SELECT a.prs_afdeling_key"
+ " FROM prs_v_afdeling a"
+ " WHERE a.prs_bedrijf_key = " + melder_user.afdeling().prs_bedrijf_key();
else if (autlevel > 0)
var departmentsql = "SELECT prs_afdeling_key"
+ " FROM prs_v_afdeling_familie a"
+ " WHERE a.prs_afdeling_elder_key IN"
+ " (SELECT aa.prs_afdeling_elder_key"
+ " FROM prs_v_afdeling_familie aa"
+ " WHERE aa.prs_afdeling_key = " + melder_user.prs_afdeling_key()
+ " AND aa.niveau = " + autlevel
+ " )"
+ " AND a.prs_afdeling_key = d.ins_alg_ruimte_key";
else
var departmentsql = "d.ins_alg_ruimte_key";
v_org_niveau_sql = " ins_alg_ruimte_type = 'A' AND d.ins_alg_ruimte_key IN (" + departmentsql + ")";
}
return v_org_niveau_sql;
}
function get_alg_niveau_sql(p_alg_niveau, p_alg_key)
{
var v_alg_niveau_sql = "";
if (p_alg_niveau == "R" || p_alg_niveau == "V" || p_alg_niveau == "G" || p_alg_niveau == "L" || p_alg_niveau == "B" || p_alg_niveau == "T")
{
// In welke ruimtes keuren we objecten goed?
var roomsql = "SELECT -1 FROM DUAL";
if (p_alg_niveau == "R")
roomsql = "SELECT " + p_alg_key + " FROM DUAL";
else if (p_alg_niveau == "V")
roomsql = "SELECT alg_ruimte_key"
+ " FROM alg_ruimte"
+ " WHERE alg_verdieping_key = " + p_alg_key;
else if (p_alg_niveau == "G" || p_alg_niveau == "B" || p_alg_niveau == "T") // en !isTerra?
roomsql = "SELECT alg_ruimte_key"
+ " FROM alg_ruimte ar"
+ " , alg_verdieping av"
+ " WHERE ar.alg_verdieping_key = av.alg_verdieping_key"
+ " AND alg_gebouw_key = " + p_alg_key;
else if (p_alg_niveau == "L") // en !isTerra?
roomsql = "SELECT alg_ruimte_key"
+ " FROM alg_ruimte ar"
+ " , alg_verdieping av"
+ " , alg_gebouw ag"
+ " WHERE ar.alg_verdieping_key = av.alg_verdieping_key"
+ " AND av.alg_gebouw_key = ag.alg_gebouw_key"
+ " AND alg_locatie_key = " + p_alg_key;
var werkpleksql = "SELECT prs_werkplek_key"
+ " FROM prs_werkplek"
+ " WHERE prs_alg_ruimte_key IN (" + roomsql + ")";
v_alg_niveau_sql = " ins_alg_ruimte_type = 'R' AND ins_alg_ruimte_key IN (" + roomsql + ")"
+ " OR ins_alg_ruimte_type = 'W' AND ins_alg_ruimte_key IN (" + werkpleksql + ")"
if ( p_alg_niveau == "G" || p_alg_niveau == "T")// Gebouw kan ook een Terrein zijn
v_alg_niveau_sql += " OR (ins_alg_ruimte_type = 'T' AND ins_alg_ruimte_key = " + p_alg_key + ")";
}
return v_alg_niveau_sql;
}
function get_persoon_sql(p_prs_key, p_is_prsafdobj)
{
if (p_prs_key > 0)
return " ins_alg_ruimte_type = 'P'"
+ " AND ins_alg_ruimte_key IN"
+ " ("
+ ( p_is_prsafdobj
? "SELECT a.prs_perslid_key"
+ " FROM prs_perslid a"
+ " WHERE a.prs_afdeling_key IN"
+ " (SELECT af.prs_afdeling_key"
+ " FROM prs_v_afdeling_familie af"
+ " , prs_afdeling pa"
+ " , prs_perslid pp"
+ " WHERE af.prs_afdeling_elder_key = pp.prs_afdeling_key"
+ " AND pa.prs_afdeling_key = af.prs_afdeling_key"
+ " AND pa.prs_afdeling_verwijder IS NULL"
+ " AND pp.prs_perslid_key = " + p_prs_key
+ " )"
: p_prs_key
)
+ " )"
else
return "";
}
// Per installatiesoort uit mld_stdmelding_srtinst
function get_stdmelding_sql(p_alg_niveau_sql, arr_sql, p_installatie_where)
{
//var plaatsaanduiding = ( S("prs_wpprefix_objectid") == 1
// ? " CASE"
// + " WHEN o.prs_werkplek_omschrijving IS NOT NULL"
// + " THEN ' ' || o.prs_werkplek_omschrijving"
// + " ELSE ''"
// + " END"
// : "''");
// JGL: bovenstaande even uitgeschakeld en ins_v_alg_overzicht niet meer joinen
// !!! Dat joinen nekte de performance namelijk. Bovendien toch overkill voor uitsluitend een prs_werkplek_omschrijving
var plaatsaanduiding;
if (S("ins_element_description") == "")
{
plaatsaanduiding = ", d.ins_deel_omschrijving "
+ " || ' (' || " + lcl.xsql("s.ins_srtdeel_omschrijving", "s.ins_srtdeel_key")
+ " || ') ' || d.ins_deel_opmerking ";
}
else
{
plaatsaanduiding = ", " + S("ins_element_description");
}
var sqls = [];
if (p_alg_niveau_sql)
{
sqls.push("SELECT d.ins_deel_key"
+ plaatsaanduiding + " deel"
+ " , s.ins_srtdeel_omschrijving" // Voor gebruik in FCLTobjectselector
+ " , d.ins_alg_ruimte_key"
+ " , d.ins_alg_ruimte_type"
+ " , a.alg_ruimte_nr" // gebruikt in mld_edit_melding.js/process_object_info om automatisch de ruimte te kiezen
+ " , CASE"
+ " WHEN d.ins_deel_t_uitvoertijd.eenheid = 'U'"
+ " THEN d.ins_deel_t_uitvoertijd.tijdsduur / 24"
+ " ELSE d.ins_deel_t_uitvoertijd.tijdsduur"
+ " END uitvoertijd" // Uitvoertijd in dagen.
+ " FROM ins_v_aanwezigdeel d"
+ " , alg_v_aanwezigruimte a"
+ " , ins_srtdeel s"
+ " , ins_srtgroep g"
+ " , ins_tab_discipline dis"
+ " WHERE (" + p_alg_niveau_sql + " )"
+ " AND d.ins_alg_ruimte_key = a.alg_ruimte_key(+)" // outer join voor werkplekken (en locatie-objecten?)
+ " AND (d.ins_deel_vervaldatum IS NULL OR d.ins_deel_vervaldatum > TRUNC(SYSDATE))"
+ " AND d.ins_srtdeel_key = s.ins_srtdeel_key"
+ " AND s.ins_srtgroep_key = g.ins_srtgroep_key"
+ " AND g.ins_discipline_key = dis.ins_discipline_key"
+ p_installatie_where);
}
// Nu de objecten zonder plaats-scope
for (var i in arr_sql)
{
if (arr_sql[i])
sqls.push("SELECT d.ins_deel_key"
+ plaatsaanduiding + " deel"
+ " , s.ins_srtdeel_omschrijving"
+ " , d.ins_alg_ruimte_key"
+ " , d.ins_alg_ruimte_type"
+ " , NULL alg_ruimte_nr"
+ " , CASE"
+ " WHEN d.ins_deel_t_uitvoertijd.eenheid = 'U'"
+ " THEN d.ins_deel_t_uitvoertijd.tijdsduur / 24"
+ " ELSE d.ins_deel_t_uitvoertijd.tijdsduur"
+ " END uitvoertijd" // Uitvoertijd in dagen.
+ " FROM ins_v_aanwezigdeel d"
+ " , ins_srtdeel s"
+ " , ins_srtgroep g"
+ " , ins_tab_discipline dis"
+ " WHERE " + arr_sql[i]
+ " AND (d.ins_deel_vervaldatum IS NULL OR d.ins_deel_vervaldatum > TRUNC(SYSDATE))"
+ " AND d.ins_srtdeel_key = s.ins_srtdeel_key"
+ " AND s.ins_srtgroep_key = g.ins_srtgroep_key"
+ " AND g.ins_discipline_key = dis.ins_discipline_key"
+ p_installatie_where);
}
return sqls;
}
%>