382 lines
18 KiB
C++
382 lines
18 KiB
C++
<% /*
|
|
$Revision$
|
|
$Id$
|
|
|
|
File: get_objecten_sql.inc
|
|
Parameters:
|
|
Context: Vanuit ins EN mld
|
|
|
|
*/
|
|
%>
|
|
|
|
<!-- #include file="./Suggest/objectFilter.inc" -->
|
|
|
|
<%
|
|
// 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, params)
|
|
{
|
|
if (dept_key > 0 && stdmld_key > 0)
|
|
UNEXEPECTED_get_objecten_sql;
|
|
|
|
params = params || {};
|
|
var obj_sqls = [];
|
|
|
|
// Plaatsgebonden objecten
|
|
if (stdmld_key > 0) // Melding objecten
|
|
{
|
|
var org_onrgoed_niveau = "";
|
|
var org_obj_niveau = 8;
|
|
var is_afdobj = true;
|
|
var is_prsobj = false;
|
|
|
|
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;
|
|
is_afdobj = ((oRs("mld_stdmelding_prsafdobj").Value & 1) == 1);
|
|
is_prsobj = ((oRs("mld_stdmelding_prsafdobj").Value & 2) == 2);
|
|
oRs.Close();
|
|
|
|
var alg_niveau_sql = !(stdmld_key > 0) || org_onrgoed_niveau != "" ? get_alg_niveau_sql(alg_niveau, alg_key, org_onrgoed_niveau) : ""; // plaatsgebonden objecten
|
|
var afdeling_sql = (is_afdobj ? get_afdeling_sql(org_obj_niveau, prs_key): ""); // organisatie afdelingsgebonden objecten
|
|
var persoon_sql = (is_prsobj ? get_persoon_sql(org_obj_niveau, prs_key) : ""); // organisatie persoonsgebonden objecten
|
|
|
|
// 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], "", params);
|
|
}
|
|
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(", ")), params);
|
|
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(", ")), params);
|
|
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(", ")), params);
|
|
obj_sqls = obj_sqls.concat(sqls);
|
|
}
|
|
}
|
|
oRs.Close();
|
|
}
|
|
else // Contract objecten
|
|
{
|
|
var org_onrgoed_niveau="";
|
|
var alg_niveau_sql = (((alg_key > 0) || (alg_key < 0 && dept_key < 0)) ? get_alg_niveau_sql(alg_niveau, alg_key, org_onrgoed_niveau) : "1=0");
|
|
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], "", params);
|
|
}
|
|
|
|
if (obj_sqls.length)
|
|
return obj_sqls.join(" UNION ") + " ORDER BY 2";
|
|
else
|
|
return "SELECT 1 FROM DUAL WHERE 1=0";
|
|
}
|
|
|
|
function get_alg_niveau_sql(p_alg_niveau, p_alg_key, p_org_onrgoed_niveau)
|
|
{
|
|
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") && p_alg_key > 0)
|
|
{
|
|
// 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 + ")";
|
|
|
|
}
|
|
else if (p_org_onrgoed_niveau && p_org_onrgoed_niveau == "A") // all objects when no location selected
|
|
{
|
|
v_alg_niveau_sql = " ins_alg_ruimte_type IN ('R', 'V', 'G', 'L', 'B', 'T') "
|
|
}
|
|
return v_alg_niveau_sql;
|
|
}
|
|
|
|
function get_scope_sql(p_org_obj_niveau, p_prs_key)
|
|
{
|
|
var scope_sql = "-1";
|
|
if (p_prs_key > 0)
|
|
{
|
|
// voor p_org_obj_niveau = 8 en -1 hier niets doen (Alleen persoonsgebonden objecten van de melder, of alle objecten).
|
|
if (p_org_obj_niveau == 3) // Alle persoonsgebonden objecten op hetzelfde account als de melder
|
|
{
|
|
scope_sql = "SELECT ac.prs_afdeling_key"
|
|
+ " FROM prs_afdeling ac"
|
|
+ " , prs_afdeling af"
|
|
+ " , prs_perslid pl"
|
|
+ " WHERE af.prs_afdeling_key = pl.prs_afdeling_key"
|
|
+ " AND af.prs_kostenplaats_key = ac.prs_kostenplaats_key"
|
|
+ " AND pl.prs_perslid_key = " + p_prs_key;
|
|
}
|
|
else if (p_org_obj_niveau == 2) // Alle persoonsgebonden objecten op dezelfde afdeling als melder (ongeacht eigenaar)
|
|
{
|
|
scope_sql = "SELECT b.prs_afdeling_key1"
|
|
+ " FROM prs_perslid p"
|
|
+ " , prs_v_afdeling_boom b"
|
|
+ " WHERE p.prs_afdeling_key = b.prs_afdeling_key"
|
|
+ " AND p.prs_perslid_key = " + p_prs_key;
|
|
}
|
|
else if (p_org_obj_niveau == 1) // Alle persoonsgebonden objecten binnen dezelfde businessunit als de melder
|
|
{
|
|
scope_sql = "SELECT f.prs_afdeling_key"
|
|
+ " FROM prs_v_afdeling_boom f"
|
|
+ " WHERE f.prs_afdeling_key1 IN"
|
|
+ " (SELECT b.prs_afdeling_key1"
|
|
+ " FROM prs_perslid p"
|
|
+ " , prs_v_afdeling_boom b"
|
|
+ " WHERE p.prs_afdeling_key = b.prs_afdeling_key"
|
|
+ " AND p.prs_perslid_key = " + p_prs_key
|
|
+ " )";
|
|
}
|
|
else if (p_org_obj_niveau == 0) // Alle persoonsgebonden objecten binnen hetzelfde bedrijf als de melder
|
|
{
|
|
scope_sql = "SELECT afd_b.prs_afdeling_key"
|
|
+ " FROM prs_afdeling afd_b"
|
|
+ " WHERE afd_b.prs_afdeling_verwijder IS NULL"
|
|
+ " AND afd_b.prs_afdeling_parentkey IN"
|
|
+ " (SELECT afd_u.prs_afdeling_key"
|
|
+ " FROM prs_v_afdeling_boom u"
|
|
+ " , prs_afdeling afd_u"
|
|
+ " WHERE afd_u.prs_afdeling_verwijder IS NULL"
|
|
+ " AND u.prs_afdeling_key = afd_u.prs_afdeling_key"
|
|
+ " AND u.niveau = 1"
|
|
+ " AND u.prs_bedrijf_key IN"
|
|
+ " (SELECT prs_bedrijf_key"
|
|
+ " FROM prs_perslid p"
|
|
+ " , prs_v_afdeling_boom afd_p"
|
|
+ " WHERE p.prs_afdeling_key = afd_p.prs_afdeling_key"
|
|
+ " AND p.prs_perslid_key = " + p_prs_key
|
|
+ " )"
|
|
+ " )";
|
|
}
|
|
}
|
|
return scope_sql;
|
|
}
|
|
|
|
function get_persoon_sql(p_org_obj_niveau, p_prs_key)
|
|
{
|
|
var scope_sql = get_scope_sql(p_org_obj_niveau, p_prs_key);
|
|
var persoon_sql = "";
|
|
|
|
if (p_org_obj_niveau == -1) // Alle persoonsgebonden objecten ongeacht de melder
|
|
{
|
|
persoon_sql = " ins_alg_ruimte_type = 'P'";
|
|
}
|
|
else if ( p_org_obj_niveau == 8) // Alle persoonsgebonden objecten van deze melder
|
|
{
|
|
persoon_sql = " ins_alg_ruimte_type = 'P'"
|
|
+ " AND ins_alg_ruimte_key = " + p_prs_key;
|
|
}
|
|
else if ( p_org_obj_niveau == 2 // Alle persoonsgebonden objecten op dezelfde afdeling als melder
|
|
|| p_org_obj_niveau == 1 // Alle persoonsgebonden objecten binnen dezelfde businessunit als de melder
|
|
|| p_org_obj_niveau == 0 // Alle persoonsgebonden objecten binnen hetzelfde bedrijf als de melder
|
|
)
|
|
{
|
|
persoon_sql = " ins_alg_ruimte_type = 'P'"
|
|
+ " AND ins_alg_ruimte_key IN"
|
|
+ " (SELECT a.prs_perslid_key"
|
|
+ " FROM prs_perslid a"
|
|
+ " WHERE a.prs_perslid_verwijder IS NULL"
|
|
+ " AND a.prs_afdeling_key IN (" + scope_sql + ")"
|
|
+ " )";
|
|
}
|
|
|
|
return persoon_sql;
|
|
}
|
|
|
|
function get_afdeling_sql(p_org_obj_niveau, p_prs_key)
|
|
{
|
|
// p_org_obj_niveau is het afdelingsobjecten niveau (stdmelding.alg_org_obj_niveau) van waaruit objecten gekozen kunnen worden (null=alle, 0=bedrijf, ...., 9=geen).
|
|
|
|
var scope_sql = get_scope_sql(p_org_obj_niveau, p_prs_key);
|
|
var afdeling_sql = "";
|
|
|
|
if (p_org_obj_niveau == -1) // Alle afdelingsgebonden objecten
|
|
{
|
|
afdeling_sql = " ins_alg_ruimte_type = 'A'";
|
|
}
|
|
else if ( p_org_obj_niveau == 8) // Alle afdelingsgebonden objecten van deze melder: kan niet!
|
|
{
|
|
afdeling_sql = "";
|
|
}
|
|
else if ( p_org_obj_niveau == 2 // Alle afdelingsgebonden objecten op dezelfde afdeling als melder
|
|
|| p_org_obj_niveau == 1 // Alle afdelingsgebonden objecten binnen dezelfde businessunit als de melder
|
|
|| p_org_obj_niveau == 0 // afdelingsgebonden objecten binnen hetzelfde bedrijf als de melder
|
|
|| p_org_obj_niveau == 3 // afdelingsgebonden objecten binnen hetzelfde account (kostensoort)
|
|
)
|
|
{
|
|
afdeling_sql = " ins_alg_ruimte_type = 'A'"
|
|
+ " AND d.ins_alg_ruimte_key IN (" + scope_sql + ")";
|
|
}
|
|
|
|
return afdeling_sql;
|
|
}
|
|
|
|
|
|
// Per installatiesoort uit mld_stdmelding_srtinst
|
|
function get_stdmelding_sql(p_alg_niveau_sql, arr_sql, p_installatie_where, params)
|
|
{
|
|
params = params || {};
|
|
var element_description;
|
|
var wpprefix;
|
|
if (S("ins_element_description") == "")
|
|
{
|
|
var parentdeel = "CASE WHEN d.ins_deel_parent_key IS NOT NULL"
|
|
+ " THEN (SELECT p.ins_deel_omschrijving"
|
|
+ " FROM ins_deel p"
|
|
+ " WHERE p.ins_deel_key = d.ins_deel_parent_key"
|
|
+ " ) ||' / '"
|
|
+ " ELSE ''"
|
|
+ "END ";
|
|
wpprefix = S("prs_wpprefix_objectid") == 1;
|
|
var plaatsaanduiding = (wpprefix
|
|
? " CASE"
|
|
+ " WHEN d.ins_alg_ruimte_type = 'W' AND wp.prs_werkplek_omschrijving IS NOT NULL"
|
|
+ " THEN ' ' || wp.prs_werkplek_omschrijving"
|
|
+ " ELSE ''"
|
|
+ " END"
|
|
: "''");
|
|
element_description = ", " + parentdeel + "|| d.ins_deel_omschrijving || " + plaatsaanduiding
|
|
+ " || ' (' || " + lcl.xsql("s.ins_srtdeel_omschrijving", "s.ins_srtdeel_key")
|
|
+ " || ') ' || d.ins_deel_opmerking ";
|
|
}
|
|
else
|
|
{
|
|
element_description = ", " + S("ins_element_description");
|
|
}
|
|
|
|
var extraInf = getExtraInfObject(params.extracode);
|
|
var sqls = [];
|
|
var searchColumn = element_description.substr(2); // Strip leading comma
|
|
if (p_alg_niveau_sql || params.disc_key > -1 || params.srtgrp_key > -1 || params.grp_key > -1)
|
|
{
|
|
var alg_niveau_sql = (p_alg_niveau_sql == "" ? "1=1" : p_alg_niveau_sql);
|
|
sqls.push("SELECT d.ins_deel_key"
|
|
+ element_description + " deel"
|
|
+ " , 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
|
|
+ extraInf.selectstr
|
|
+ " FROM ins_deel d"
|
|
+ " , alg_v_aanwezigruimte a"
|
|
+ " , ins_srtdeel s"
|
|
+ " , ins_srtgroep g"
|
|
+ " , ins_tab_discipline dis"
|
|
+ (wpprefix ? " , prs_werkplek wp" : "")
|
|
+ extraInf.fromstr
|
|
+ " WHERE d.ins_deel_verwijder IS NULL"
|
|
+ " AND (" + 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"
|
|
+ (wpprefix ? " AND d.ins_alg_ruimte_key = wp.prs_werkplek_key(+)" : "")
|
|
+ (params.disc_key > -1 ? " AND g.ins_discipline_key = " + params.disc_key : "")
|
|
+ (params.srtgrp_key > -1 ? " AND s.ins_srtgroep_key = " + params.srtgrp_key : "")
|
|
+ (params.grp_key > -1 ? " AND d.ins_srtdeel_key = " + params.grp_key : "")
|
|
+ (params.search
|
|
? " AND UPPER(" + searchColumn + ") LIKE " + safe.quoted_sql_wild2(params.search)
|
|
: "")
|
|
+ p_installatie_where
|
|
+ extraInf.wherestr);
|
|
}
|
|
|
|
// Nu de objecten zonder plaats-scope
|
|
for (var i in arr_sql)
|
|
{
|
|
if (arr_sql[i])
|
|
sqls.push("SELECT d.ins_deel_key"
|
|
+ element_description + " deel"
|
|
+ " , d.ins_alg_ruimte_key"
|
|
+ " , d.ins_alg_ruimte_type"
|
|
+ " , NULL alg_ruimte_nr"
|
|
+ extraInf.selectstr
|
|
+ " FROM ins_v_aanwezigdeel d"
|
|
+ " , ins_srtdeel s"
|
|
+ " , ins_srtgroep g"
|
|
+ " , ins_tab_discipline dis"
|
|
+ (wpprefix ? " , prs_werkplek wp" : "")
|
|
+ extraInf.fromstr
|
|
+ " 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"
|
|
+ (wpprefix ? " AND d.ins_alg_ruimte_key = wp.prs_werkplek_key(+)" : "")
|
|
+ (params.disc_key > -1 ? " AND g.ins_discipline_key = " + params.disc_key : "")
|
|
+ (params.srtgrp_key > -1 ? " AND s.ins_srtgroep_key = " + params.srtgrp_key : "")
|
|
+ (params.grp_key > -1 ? " AND d.ins_srtdeel_key = " + params.grp_key : "")
|
|
+ (params.search
|
|
? " AND UPPER(" + searchColumn + ") LIKE " + safe.quoted_sql_wild2(params.search)
|
|
: "")
|
|
+ p_installatie_where
|
|
+ extraInf.wherestr);
|
|
}
|
|
|
|
return sqls;
|
|
}
|
|
|
|
%> |