183 lines
8.1 KiB
C++
183 lines
8.1 KiB
C++
<% /*
|
|
$Revision$
|
|
$Id$
|
|
|
|
File: get_objecten_sql.inc
|
|
Parameters:
|
|
Context: Vanuit ins EN mld
|
|
|
|
*/
|
|
|
|
function get_objecten_sql(alg_key, alg_niveau, prs_key, dept_key, stdmld_key)
|
|
{
|
|
// Het aantal objecten kan ook ingeperkt worden door mld_stdmelding.ins_srtinst_key
|
|
var inst_key = -1;
|
|
var inst_type = "";
|
|
var org_obj_niveau = 9;
|
|
if (stdmld_key != -1)
|
|
{
|
|
sql = "SELECT ins_srtinst_key"
|
|
+ ", ins_srtinst_niveau"
|
|
+ ", alg_org_obj_niveau"
|
|
+ " FROM mld_stdmelding"
|
|
+ " WHERE mld_stdmelding_key = " + stdmld_key;
|
|
|
|
oRs = Oracle.Execute(sql);
|
|
if (!oRs.eof)
|
|
{
|
|
inst_key = oRs("ins_srtinst_key").Value;
|
|
inst_type = oRs("ins_srtinst_niveau").Value;
|
|
org_obj_niveau = oRs("alg_org_obj_niveau").Value;
|
|
}
|
|
}
|
|
|
|
if (alg_niveau == "R" || alg_niveau == "V" || alg_niveau == "G" || alg_niveau == "L")
|
|
{
|
|
// In welke ruimtes keuren we objecten goed?
|
|
var roomsql = "SELECT -1 FROM DUAL";
|
|
if (alg_niveau == "R")
|
|
roomsql = "SELECT " + alg_key + " FROM DUAL";
|
|
else if (alg_niveau == "V")
|
|
roomsql = "SELECT alg_ruimte_key"
|
|
+ " FROM alg_ruimte"
|
|
+ " WHERE alg_verdieping_key = " + alg_key;
|
|
else if (alg_niveau == "G") // 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 = " + alg_key;
|
|
else if (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 = " + alg_key;
|
|
}
|
|
|
|
if (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 = org_obj_niveau;
|
|
|
|
if (autlevel == 0)
|
|
var departmentsql = "SELECT a.prs_afdeling_key"
|
|
+ " FROM prs_v_afdeling a"
|
|
+ " WHERE a.prs_bedrijf_key = " + 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 = " + 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";
|
|
}
|
|
|
|
var plaatsaanduiding = (S("prs_wpprefix_objectid") == 1
|
|
? " CASE"
|
|
+ " WHEN o.prs_werkplek_omschrijving IS NOT NULL"
|
|
+ " THEN ' ' || o.prs_werkplek_omschrijving"
|
|
+ " ELSE ''"
|
|
+ " END"
|
|
: "''");
|
|
sql = "SELECT d.ins_deel_key"
|
|
+ " , d.ins_deel_omschrijving || " + plaatsaanduiding + " || ' (' || " + lcl.xsql('s.ins_srtdeel_omschrijving', 's.ins_srtdeel_key') + " || ') ' || d.ins_deel_opmerking deel"
|
|
+ " , d.ins_alg_ruimte_key"
|
|
+ " , d.ins_alg_ruimte_type"
|
|
+ " , a.alg_ruimte_nr" // JGL: Ik vermoed dat deze effectief niet gebruikt wordt
|
|
+ " , 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_v_alg_overzicht o"
|
|
+ " WHERE (" // let op het haakje hier
|
|
if (alg_niveau == "R" || alg_niveau == "V" || alg_niveau == "G" || alg_niveau == "L")
|
|
{
|
|
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"
|
|
+ " (SELECT prs_werkplek_key FROM prs_werkplek "
|
|
+ " WHERE prs_alg_ruimte_key IN (" + roomsql + ")))";
|
|
}
|
|
else
|
|
sql += " (1 = 0)";
|
|
sql += (alg_niveau == "G" // Gebouw kan ook een Terrein zijn
|
|
? " OR (ins_alg_ruimte_type = 'T' AND ins_alg_ruimte_key = " + alg_key + ")"
|
|
: "")
|
|
+ (prs_key != -1
|
|
? " OR (ins_alg_ruimte_type = 'P' AND ins_alg_ruimte_key = " + prs_key + ")"
|
|
: "")
|
|
+ ")" // en het sluithaakje hier
|
|
+ " AND (d.ins_deel_vervaldatum IS NULL OR d.ins_deel_vervaldatum > TRUNC(SYSDATE))"
|
|
+ " AND d.ins_alg_ruimte_key = a.alg_ruimte_key(+)" // outer join voor werkplekken (en locatie-objecten?)
|
|
+ " AND d.ins_srtdeel_key = s.ins_srtdeel_key"
|
|
+ " AND s.ins_srtgroep_key = g.ins_srtgroep_key"
|
|
+ " AND d.ins_alg_ruimte_key = o.alg_onroerendgoed_keys(+)"
|
|
+ " AND d.ins_alg_ruimte_type = o.alg_onroerendgoed_type(+)"
|
|
+ " AND d.ins_alg_locatie_key = o.alg_locatie_key(+)";
|
|
if (inst_type == 'D')
|
|
sql += " AND g.ins_discipline_key = " + inst_key;
|
|
else if (inst_type == 'G')
|
|
sql += " AND s.ins_srtgroep_key = " + inst_key;
|
|
else if (inst_type == 'S')
|
|
sql += " AND d.ins_srtdeel_key = " + inst_key;
|
|
|
|
// Als persoons key is meegegeven dan niet meer eigen afdeling bepalen.
|
|
// Eigen afdelings objecten worden nu meegenomen in autorisatie van departmentsql
|
|
if (org_obj_niveau < 9 || prs_key != -1 || (dept_key && dept_key > 0))
|
|
{
|
|
sql += " UNION"
|
|
+ " SELECT d.ins_deel_key"
|
|
+ " , d.ins_deel_omschrijving || " + plaatsaanduiding + " || ' (' || " + lcl.xsql('s.ins_srtdeel_omschrijving', 's.ins_srtdeel_key') + " || ')' deel"
|
|
+ " , 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_v_alg_overzicht o"
|
|
+ " WHERE (" // let op het haakje hier
|
|
+ (org_obj_niveau < 9
|
|
? " (ins_alg_ruimte_type = 'A' AND d.ins_alg_ruimte_key IN (" + departmentsql + "))"
|
|
+ (prs_key != -1 || (dept_key && dept_key > 0)? " OR" : "")
|
|
: "")
|
|
+ (prs_key != -1
|
|
? " (ins_alg_ruimte_type = 'P' AND ins_alg_ruimte_key = " + prs_key + ")"
|
|
+ (dept_key && dept_key > 0? " OR" : "")
|
|
: "")
|
|
+ (dept_key && dept_key > 0
|
|
? " (ins_alg_ruimte_type = 'A' AND ins_alg_ruimte_key = " + dept_key + ")"
|
|
: "")
|
|
+ ")" // en het sluithaakje hier
|
|
+ " 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 d.ins_alg_ruimte_key = o.alg_onroerendgoed_keys(+)"
|
|
+ " AND d.ins_alg_ruimte_type = o.alg_onroerendgoed_type(+)"
|
|
+ " AND d.ins_alg_locatie_key = o.alg_locatie_key(+)";
|
|
if (inst_type == 'D')
|
|
sql += " AND g.ins_discipline_key = " + inst_key;
|
|
else if (inst_type == 'G')
|
|
sql += " AND s.ins_srtgroep_key = " + inst_key;
|
|
else if (inst_type == 'S')
|
|
sql += " AND d.ins_srtdeel_key = " + inst_key;
|
|
}
|
|
sql += " ORDER BY 2";
|
|
|
|
return sql;
|
|
}
|
|
%> |