MNNL#51566 Objecten in de App (problematisch als meer dan 1000)

svn path=/Website/trunk/; revision=36789
This commit is contained in:
Jos Groot Lipman
2018-01-31 11:38:53 +00:00
parent 33bc1b546f
commit ab6ba5450b

View File

@@ -3,8 +3,8 @@
$Revision$
$Id$
Description: List of objects (Mobile version)
Parameters: ins_key (bv via QRC) en nog meer optionele keys om te kunnen filteren binnen een context
Resultaat wordt standaard beperkt tot CurrenPosition
Parameters: ins_key (bv via QRC, JGL: Echt waar?????) en nog meer optionele keys om te kunnen filteren binnen een context
Resultaat wordt standaard beperkt tot CurrentPosition
maar om flexibel te zijn is dat te overrulen (bv voor een QRC met objecten in Harderwijk?)
Je kunt clauses onderdrukken als je weet dat dat kan tbv performance door a|p|t|w = 0 te zetten
@@ -136,17 +136,13 @@ else
// Let op: sortering (en groepering) op eerste 3 kolomen
// Ruimtegebonden objecten
var sqlR = " SELECT ins_deel_omschrijving"
+ " , " + lcl.xsqla('sd.ins_srtdeel_omschrijving', 'sd.ins_srtdeel_key')
+ " , " + lcl.xsqla('sg.ins_srtgroep_omschrijving', 'sg.ins_srtgroep_key')
+ " , ins_srtgroep_omschrijving org_srtgroep_omschrijving"
+ " , ins_srtdeel_key"
+ " , aog.alg_gebouw_code || '-' || aog.alg_verdieping_code || '-' || aog.alg_ruimte_nr plaats_eigenaar"
+ " , id.ins_deel_key"
+ " , (SELECT MAX('R') FROM res_deel rd, res_activiteitdiscipline rad WHERE rd.res_deel_verwijder IS NULL AND rd.res_discipline_key = rad.res_discipline_key AND rd.res_ins_deel_key = id.ins_deel_key AND rad.res_discipline_key != " + S("vis_parking_key") + ") reserveerbaar"
+ " , id.ins_alg_ruimte_type"
+ " FROM alg_v_onroerendgoed_gegevens aog"
+ " , ins_deel id"
+ " , ins_srtdeel sd"
+ " , ins_srtgroep sg"
+ " , alg_locatie l"
+ " , alg_district di"
+ " WHERE id.ins_alg_ruimte_key = aog.alg_ruimte_key"
@@ -154,17 +150,12 @@ else
+ " AND l.alg_district_key = di.alg_district_key"
+ " AND id.ins_alg_ruimte_type = 'R'"
+ " AND id.ins_deel_parent_key " + ((ins_parent_key > -1)? " = " + ins_parent_key : "IS NULL")
+ " AND sd.ins_srtdeel_key = id.ins_srtdeel_key"
+ " AND sd.ins_srtgroep_key = sg.ins_srtgroep_key"
+ " AND id.ins_deel_verwijder IS NULL"
+ " AND (id.ins_deel_vervaldatum IS NULL OR id.ins_deel_vervaldatum > TRUNC(SYSDATE))"
+ " AND sd.ins_srtgroep_key NOT IN (" + S("sle_ins_srt_groep_key") + ", " + S("cil_ins_srt_groep_key") + ")"
+ ((locatie_key > -1) ? " AND aog.alg_locatie_key = " + locatie_key : "")
+ ((gebouw_key > -1) ? " AND aog.alg_gebouw_key = " + gebouw_key : "")
+ ((verdieping_key > -1) ? " AND aog.alg_verdieping_key = " + verdieping_key : "")
+ ((ruimte_key > -1) ? " AND aog.alg_ruimte_key = " + ruimte_key : "")
+ ((mld_key > -1) ? " AND ins_deel_key IN (SELECT ins_deel_key FROM mld_melding_object WHERE mld_melding_object_verwijder IS NULL AND mld_melding_key = " + mld_key + ")" : "")
+ ((ins_key > -1) ? " AND id.ins_deel_key = " + ins_key : "");
+ ((ruimte_key > -1) ? " AND aog.alg_ruimte_key = " + ruimte_key : "");
sqlR = discx3d (sqlR,
"id.ins_discipline_key",
"di.alg_regio_key",
@@ -181,17 +172,13 @@ else
// Terreingebonden objecten
var sqlT = " SELECT ins_deel_omschrijving"
+ " , " + lcl.xsqla('sd.ins_srtdeel_omschrijving', 'sd.ins_srtdeel_key')
+ " , " + lcl.xsqla('sg.ins_srtgroep_omschrijving', 'sg.ins_srtgroep_key')
+ " , ins_srtgroep_omschrijving org_srtgroep_omschrijving"
+ " , ins_srtdeel_key"
+ " , aog.alg_terreinsector_code || '-' || aog.alg_terreinsector_naam plaats_eigenaar"
+ " , id.ins_deel_key"
+ " , (SELECT MAX('R') FROM res_deel rd WHERE rd.res_deel_verwijder IS NULL AND rd.res_ins_deel_key = id.ins_deel_key) reserveerbaar"
+ " , id.ins_alg_ruimte_type"
+ " FROM alg_v_onroerendgoed_gegevens aog"
+ " , ins_deel id"
+ " , ins_srtdeel sd"
+ " , ins_srtgroep sg"
+ " , alg_locatie l"
+ " , alg_district di"
+ " WHERE id.ins_alg_ruimte_key = aog.alg_terreinsector_key"
@@ -199,15 +186,10 @@ else
+ " AND l.alg_district_key = di.alg_district_key"
+ " AND id.ins_alg_ruimte_type = 'T'"
+ " AND id.ins_deel_parent_key " + ((ins_parent_key > -1)? " = " + ins_parent_key : "IS NULL")
+ " AND sd.ins_srtdeel_key = id.ins_srtdeel_key"
+ " AND sd.ins_srtgroep_key = sg.ins_srtgroep_key"
+ " AND id.ins_deel_verwijder IS NULL"
+ " AND (id.ins_deel_vervaldatum IS NULL OR id.ins_deel_vervaldatum > TRUNC(SYSDATE))"
+ " AND sd.ins_srtgroep_key NOT IN (" + S("sle_ins_srt_groep_key") + ", " + S("cil_ins_srt_groep_key") + ")"
+ ((locatie_key > -1) ? " AND aog.alg_locatie_key = " + locatie_key : "")
+ ((terrein_key > -1) ? " AND aog.alg_terreinsector_key = " + terrein_key : "")
+ ((mld_key > -1) ? " AND ins_deel_key IN (SELECT ins_deel_key FROM mld_melding_object WHERE mld_melding_object_verwijder IS NULL AND mld_melding_key = " + mld_key + ")" : "")
+ ((ins_key > -1) ? " AND id.ins_deel_key = " + ins_key : "");
+ ((terrein_key > -1) ? " AND aog.alg_terreinsector_key = " + terrein_key : "");
sqlT = discx3d (sqlT,
"id.ins_discipline_key",
"di.alg_regio_key",
@@ -224,9 +206,7 @@ else
// Werkplekgebonden objecten
var sqlW = " SELECT ins_deel_omschrijving"
+ " , " + lcl.xsqla('sd.ins_srtdeel_omschrijving', 'sd.ins_srtdeel_key')
+ " , " + lcl.xsqla('sg.ins_srtgroep_omschrijving', 'sg.ins_srtgroep_key')
+ " , ins_srtgroep_omschrijving org_srtgroep_omschrijving"
+ " , ins_srtdeel_key"
+ " , aog.alg_gebouw_code || '-' || aog.alg_verdieping_code || '-' || aog.alg_ruimte_nr || '/' || w.prs_werkplek_volgnr plaats_eigenaar"
+ " , id.ins_deel_key"
+ " , (SELECT MAX('R') FROM res_deel rd WHERE rd.res_deel_verwijder IS NULL AND rd.res_ins_deel_key = id.ins_deel_key) reserveerbaar"
@@ -234,8 +214,6 @@ else
+ " FROM alg_v_onroerendgoed_gegevens aog"
+ " , prs_werkplek w"
+ " , ins_deel id"
+ " , ins_srtdeel sd"
+ " , ins_srtgroep sg"
+ " , alg_locatie l"
+ " , alg_district di"
+ " WHERE id.ins_alg_ruimte_key = w.prs_werkplek_key"
@@ -244,16 +222,11 @@ else
+ " AND l.alg_district_key = di.alg_district_key"
+ " AND id.ins_alg_ruimte_type = 'W'"
+ " AND id.ins_deel_parent_key " + ((ins_parent_key > -1) ? "="+ins_parent_key : "IS NULL")
+ " AND sd.ins_srtdeel_key = id.ins_srtdeel_key"
+ " AND sd.ins_srtgroep_key = sg.ins_srtgroep_key"
+ " AND id.ins_deel_verwijder IS NULL"
+ " AND sd.ins_srtgroep_key NOT IN (" + S("sle_ins_srt_groep_key") + ", " + S("cil_ins_srt_groep_key") + ")"
+ ((locatie_key > -1) ? " AND aog.alg_locatie_key = " + locatie_key : "")
+ ((gebouw_key > -1) ? " AND aog.alg_gebouw_key = " + gebouw_key : "")
+ ((verdieping_key > -1) ? " AND aog.alg_verdieping_key = " + verdieping_key : "")
+ ((ruimte_key > -1) ? " AND aog.alg_ruimte_key = " + ruimte_key : "")
+ ((mld_key > -1) ? " AND ins_deel_key IN (SELECT ins_deel_key FROM mld_melding_object WHERE mld_melding_object_verwijder IS NULL AND mld_melding_key = " + mld_key + ")" : "")
+ ((ins_key > -1) ? " AND id.ins_deel_key = " + ins_key : "")
+ ((ruimte_key > -1) ? " AND aog.alg_ruimte_key = " + ruimte_key : "");
sqlW = discx3d (sqlW,
"id.ins_discipline_key",
@@ -273,16 +246,12 @@ else
// Afdelingsgebonden objecten, niet in alle gevallen meenemen
// TODO (ooit): beperken tot afdelingen met personen met werkplekken binnen de scope.
var sqlA = " SELECT ins_deel_omschrijving"
+ " , " + lcl.xsqla('sd.ins_srtdeel_omschrijving', 'sd.ins_srtdeel_key')
+ " , " + lcl.xsqla('sg.ins_srtgroep_omschrijving', 'sg.ins_srtgroep_key')
+ " , ins_srtgroep_omschrijving org_srtgroep_omschrijving"
+ " , ins_srtdeel_key"
+ " , a.prs_afdeling_omschrijving plaats_eigenaar"
+ " , id.ins_deel_key"
+ " , (SELECT MAX('R') FROM res_deel rd WHERE rd.res_deel_verwijder IS NULL AND rd.res_ins_deel_key = id.ins_deel_key) reserveerbaar"
+ " , id.ins_alg_ruimte_type"
+ " FROM ins_deel id"
+ " , ins_srtdeel sd"
+ " , ins_srtgroep sg"
+ " , prs_v_afdeling a"
+ " , prs_v_afdeling_boom boom"
+ " , prs_bedrijf b"
@@ -291,13 +260,8 @@ else
+ " AND a.prs_afdeling_key = boom.prs_afdeling_key"
+ " AND id.ins_alg_ruimte_type = 'A'"
+ " AND id.ins_deel_parent_key " + ((ins_parent_key > -1)? " = " + ins_parent_key : "IS NULL")
+ " AND sd.ins_srtdeel_key = id.ins_srtdeel_key"
+ " AND sd.ins_srtgroep_key = sg.ins_srtgroep_key"
+ " AND id.ins_deel_verwijder IS NULL"
+ " AND (id.ins_deel_vervaldatum IS NULL OR id.ins_deel_vervaldatum > TRUNC(SYSDATE))"
+ " AND sd.ins_srtgroep_key NOT IN (" + S("sle_ins_srt_groep_key") + ", " + S("cil_ins_srt_groep_key") + ")"
+ ((mld_key > -1) ? " AND ins_deel_key IN (SELECT ins_deel_key FROM mld_melding_object WHERE mld_melding_object_verwijder IS NULL AND mld_melding_key = " + mld_key+")" : "")
+ ((ins_key > -1) ? " AND id.ins_deel_key = " + ins_key : "")
+ ((afd_key > -1) ? " AND id.ins_alg_ruimte_key = " + afd_key : "");
sqlA = discx3d (sqlA,
"id.ins_discipline_key",
@@ -318,16 +282,12 @@ else
// Neemt de ORG-scope mee, maar ook de plaatscope via de werkplekken:
// als de persoon binnen de scope een wp heeft, dan wordt die getoond
var sqlP = " SELECT ins_deel_omschrijving"
+ " , " + lcl.xsqla('sd.ins_srtdeel_omschrijving', 'sd.ins_srtdeel_key')
+ " , " + lcl.xsqla('sg.ins_srtgroep_omschrijving', 'sg.ins_srtgroep_key')
+ " , ins_srtgroep_omschrijving org_srtgroep_omschrijving"
+ " , ins_srtdeel_key"
+ " , pf.prs_perslid_naam_friendly plaats_eigenaar"
+ " , id.ins_deel_key"
+ " , (SELECT MAX('R') FROM res_deel rd WHERE rd.res_deel_verwijder IS NULL AND rd.res_ins_deel_key = id.ins_deel_key) reserveerbaar"
+ " , id.ins_alg_ruimte_type"
+ " FROM ins_deel id"
+ " , ins_srtdeel sd"
+ " , ins_srtgroep sg"
+ " , prs_v_perslid_fullnames_all pf"
+ " , prs_perslid p"
+ " , prs_v_afdeling_boom boom"
@@ -341,8 +301,6 @@ else
+ " AND id.ins_alg_ruimte_type = 'P'"
+ " AND p.prs_afdeling_key = boom.prs_afdeling_key"
+ " AND boom.prs_bedrijf_key = b.prs_bedrijf_key"
+ " AND sd.ins_srtdeel_key = id.ins_srtdeel_key"
+ " AND sd.ins_srtgroep_key = sg.ins_srtgroep_key"
+ " AND p.prs_perslid_key = pf.prs_perslid_key"
+ " AND p.prs_perslid_key = pwp.prs_perslid_key"
+ " AND pwp.prs_werkplek_key = w.prs_werkplek_key"
@@ -351,10 +309,7 @@ else
+ " AND l.alg_district_key = di.alg_district_key"
+ " AND id.ins_deel_verwijder IS NULL"
+ " AND (id.ins_deel_vervaldatum IS NULL OR id.ins_deel_vervaldatum > TRUNC(SYSDATE))"
+ " AND sd.ins_srtgroep_key NOT IN (" + S("sle_ins_srt_groep_key") + ", " + S("cil_ins_srt_groep_key") + ")"
+ " AND id.ins_deel_parent_key " + ((ins_parent_key > -1)? " = " + ins_parent_key : "IS NULL")
+ ((mld_key > -1) ? " AND ins_deel_key IN (SELECT ins_deel_key FROM mld_melding_object WHERE mld_melding_object_verwijder IS NULL AND mld_melding_key = " + mld_key+")" : "")
+ ((ins_key > -1) ? " AND id.ins_deel_key = " + ins_key : "")
+ ((prs_key > -1) ? " AND id.ins_alg_ruimte_key = " + prs_key : "")
+ ((locatie_key > -1) ? " AND aog.alg_locatie_key = " + locatie_key : "")
+ ((gebouw_key > -1) ? " AND aog.alg_gebouw_key = " + gebouw_key : "")
@@ -374,30 +329,49 @@ else
"", // disc_key
1);
sql = "SELECT * FROM ("
sql = "SELECT recs.* "
+ " , " + lcl.xsqla('sd.ins_srtdeel_omschrijving', 'sd.ins_srtdeel_key')
+ " , " + lcl.xsqla('sg.ins_srtgroep_omschrijving', 'sg.ins_srtgroep_key')
+ " , " + lcl.xsqla('ins_discipline_omschrijving', 'ins_discipline_key')
+ " , sg.ins_discipline_key"
+ " FROM ("
+ sqlR
+ (metWerkplekgebonden ? " UNION " + sqlW : "")
+ (metPersoonsgebonden ? " UNION " + sqlP : "")
+ (metAfdelingsgebonden ? " UNION " + sqlA : "")
+ (metTerreingebonden ? " UNION " + sqlT : "")
+ ")"
+ (grp_sel==""
? ""
: " WHERE org_srtgroep_omschrijving = " + safe.quoted_sql(grp_sel)
);
sql += " ORDER BY 3, 2, 1";
+ ") recs"
+ " , ins_srtdeel sd"
+ " , ins_srtgroep sg"
+ " , ins_discipline disc"
+ " WHERE sd.ins_srtdeel_key = recs.ins_srtdeel_key"
+ " AND sd.ins_srtgroep_key = sg.ins_srtgroep_key"
+ " AND sg.ins_discipline_key = disc.ins_discipline_key"
+ ((mld_key > -1) ? " AND ins_deel_key IN (SELECT ins_deel_key FROM mld_melding_object WHERE mld_melding_object_verwijder IS NULL AND mld_melding_key = " + mld_key + ")" : "")
+ ((ins_key > -1) ? " AND id.ins_deel_key = " + ins_key : "")
if (grp_sel)
{
sql += " AND ins_discipline_omschrijving || ' ' || ins_srtgroep_omschrijving = " + safe.quoted_sql(grp_sel)
+ " ORDER BY 3, 2, 1"
}
else
{
sql = "SELECT COUNT(*) numberInGroup"
+ " , ins_discipline_omschrijving || ' ' || ins_srtgroep_omschrijving ins_srtgroep_omschrijving"
+ " FROM (" + sql + ")"
+ " GROUP BY ins_discipline_omschrijving, ins_srtgroep_omschrijving"
+ " ORDER BY ins_discipline_omschrijving, ins_srtgroep_omschrijving"
}
var rst = new ResultsetTable({sql: sql,
keyColumn: "ins_deel_key",
linkColumn: fncolLink,
groupColumn: ((ins_parent_key == -1)? fncolGroup : ""),
groupSelect: grp_sel,
detailColumn: fncolHeader,
headerColumn: "ins_deel_omschrijving",
asideColumn: fnAside,
subheaderColumn: fncolsubHeader,
groupColumn: ((ins_parent_key == -1 && !grp_sel)? fncolGroup : ""),
groupSelect: grp_sel,
numberInGroup: grp_sel?null:"numberInGroup",
detailColumn: grp_sel?fncolHeader:null,
headerColumn: grp_sel?"ins_deel_omschrijving":"",
asideColumn: grp_sel?fnAside:null,
subheaderColumn: grp_sel?fncolsubHeader:"",
ID: "deelstable",
showAll: true
});