DJIN#36870: Scoping Uitleenregistratie werkt niet correct.

svn path=/Website/trunk/; revision=31177
This commit is contained in:
Maykel Geerdink
2016-10-20 13:47:46 +00:00
parent 8900dcda98
commit cba6f0f630
2 changed files with 189 additions and 104 deletions

View File

@@ -840,7 +840,7 @@ ins = {checkAutLevel:
var dist_key = params.dist_key;
var loc_key = params.loc_key;
var bld_key = params.bld_key;
var terr_key = params.terr_key;
var terr_key = params.terr_key; // FGII parameters
var flr_key = params.flr_key;
var room_key = params.room_key;
var wpl_key = params.wpl_key;
@@ -858,12 +858,12 @@ ins = {checkAutLevel:
var cpersoon_key = params.cpersoon_key;
var cnt_bedrijf_key = params.cnt_bedrijf_key;
var mld_key = params.mld_key;
var fgraph = params.fgraph;
var ins_key_arr = params.ins_key_arr;
var fgraph = params.fgraph; // FGII parameters
var ins_key_arr = params.ins_key_arr; // FGII parameters
var parent_key = params.parent_key;
var koppel_key = params.koppel_key;
var room_key_arr = params.room_key_arr;
var comp_key = params.comp_key;
var room_key_arr = params.room_key_arr; // FGII parameters
var comp_key = params.comp_key; // FGII parameters
var insObjIncl = params.insObjIncl;
var expObjIncl = params.expObjIncl;
var insLentOut = params.insLentOut;
@@ -943,20 +943,20 @@ ins = {checkAutLevel:
if (fronto)
{
sqlLentOutFrom = "CASE WHEN i.ins_alg_ruimte_type_org = 'A'"
+ " THEN (SELECT " + S("prs_dep_string")
+ " FROM prs_v_afdeling d"
+ " WHERE d.prs_afdeling_key = i.ins_alg_ruimte_key_org)"
+ " WHEN i.ins_alg_ruimte_type_org = 'P'"
+ " THEN (SELECT " + S("prs_pers_string")
+ " FROM prs_perslid p"
+ " WHERE p.prs_perslid_key = i.ins_alg_ruimte_key_org)"
+ " WHEN i.ins_alg_ruimte_type_org IN ('R', 'T', 'W')"
+ " THEN (SELECT o.alg_plaatsaanduiding"
+ " FROM ins_v_alg_overzicht o"
+ " WHERE o.alg_onroerendgoed_keys = i.ins_alg_ruimte_key_org"
+ " AND o.alg_onroerendgoed_type = i.ins_alg_ruimte_type_org)"
+ " ELSE NULL"
+ " END";
+ " THEN (SELECT " + S("prs_dep_string")
+ " FROM prs_v_afdeling d"
+ " WHERE d.prs_afdeling_key = i.ins_alg_ruimte_key_org)"
+ " WHEN i.ins_alg_ruimte_type_org = 'P'"
+ " THEN (SELECT " + S("prs_pers_string")
+ " FROM prs_perslid p"
+ " WHERE p.prs_perslid_key = i.ins_alg_ruimte_key_org)"
+ " WHEN i.ins_alg_ruimte_type_org IN ('R', 'T', 'W')"
+ " THEN (SELECT o.alg_plaatsaanduiding"
+ " FROM ins_v_alg_overzicht o"
+ " WHERE o.alg_onroerendgoed_keys = i.ins_alg_ruimte_key_org"
+ " AND o.alg_onroerendgoed_type = i.ins_alg_ruimte_type_org)"
+ " ELSE NULL"
+ " END";
}
else
{
@@ -1235,11 +1235,22 @@ ins = {checkAutLevel:
sqlKenmerkBewerkbaar_where = "";
}
// Dit betekent dus dat de feitelijke eigenaar dus als de normale eigenaar wordt beschouwd
// d.i. de lener == de eigenaar !
// Setting ins_auth_obj_lendout: Authorization scope for objects which are lended out {0=owner(borrower) (default) | 1=basic place/owner}
//
// Voor UITGELEENDE objecten geldt: ins_alg_ruimte_type = 'P' en ins_alg_ruimte_type_org IN ('A', 'P', 'C', 'T', 'R', 'W')
// 0=owner(borrower): De feitelijke eigenaar wordt als de normale eigenaar beschouwd (lener = eigenaar) => autorisatie op ins_alg_ruimte_key.
// 1=basic place/owner: De oorsprokelijke plaats/eigenaar wordt als de normale plaats/eigenaar beschouwd => autorisatie op ins_alg_ruimte_key_org.
//
// Voor NIET UITGELEENDE objecten is er geen verschil => ins_alg_ruimte_type IN ('A', 'P', 'C', 'T', 'R', 'W') en ins_alg_ruimte_type_org IS NULL
// altijd autorisatie op ins_alg_ruimte_key.
//
// Autorisatie op de basis plaats/eigenaar (ins_alg_ruimte_key_org) toepassen.
// Alleen 1) als de Setting ins_auth_obj_lendout = 1.
// 2) bij uitleenregistratie (fronto).
// 3) als het object is uitgeleend (insLentOut).
var auth_org = S("ins_auth_obj_lendout") == 1 && fronto && insLentOut;
if (!hasPosition || fronto)
{ // Position filter would imply only place-objects
sqlOwner_select = "SELECT TO_CHAR(NULL) plaats"
+ ", " + lcl.xsql('s.ins_srtdeel_omschrijving', 's.ins_srtdeel_key')+" soort"
+ ", i.ins_deel_omschrijving"
@@ -1330,7 +1341,12 @@ ins = {checkAutLevel:
? sqlKenmerkBewerkbaar_select
+ ", b.prs_bedrijf_key prs_bedrijf_key" // bedrijf key
+ ", d.prs_afdeling_key1"
+ ", (SELECT " + S("prs_dep_string") + " FROM prs_v_afdeling d WHERE prs_afdeling_key = i.ins_alg_ruimte_key) eigenaar"
+ ", CASE WHEN i.ins_alg_ruimte_type_org IS NOT NULL"
+ " THEN (SELECT " + S("prs_pers_string")
+ " FROM prs_perslid p"
+ " WHERE p.prs_perslid_key = i.ins_alg_ruimte_key)"
+ " ELSE (SELECT " + S("prs_dep_string") + " FROM prs_v_afdeling d WHERE prs_afdeling_key = i.ins_alg_ruimte_key)"
+ " END uitgeleend_aan"
+ ", NULL alg_ruimte_key " // person key
+ ", i.ins_alg_ruimte_key prs_afdeling_key" // department key
+ (koppel_key? ", ins_deelkoppeling_omschrijving, ins_deelkoppeling_van_key, ins_deelkoppeling_naar_key" : "")
@@ -1342,16 +1358,25 @@ ins = {checkAutLevel:
+ (koppel_key? ", ins_deelkoppeling idk" : "")
+ sqlOwner_where
+ sqlKenmerkBewerkbaar_where
+ " AND i.ins_alg_ruimte_key = d.prs_afdeling_key"
+ " AND d.prs_bedrijf_key = b.prs_bedrijf_key"
+ " AND i.ins_alg_ruimte_type = 'A'";
+ " AND d.prs_bedrijf_key = b.prs_bedrijf_key";
if (auth_org)
// Object is uitgeleend.
sqlOwnerA_org = sqlOwnerA
+ " AND i.ins_alg_ruimte_key_org = d.prs_afdeling_key"
+ " AND i.ins_alg_ruimte_type_org = 'A'";
sqlOwnerA += " AND i.ins_alg_ruimte_key = d.prs_afdeling_key"
+ " AND i.ins_alg_ruimte_type = 'A'"; // Object is NIET uitgeleend, anders was het type 'P'.
sqlOwnerP = sqlOwner_select
+ (!mobile
? sqlKenmerkBewerkbaar_select
+ ", b.prs_bedrijf_key prs_bedrijf_key " // bedrijf key
+ ", d.prs_afdeling_key1"
+ ", " + S("prs_pers_string") + " eigenaar"
+ ", " + S("prs_pers_string") + " uitgeleend_aan"
+ ", i.ins_alg_ruimte_key alg_ruimte_key " // person key
+ ", p.prs_afdeling_key prs_afdeling_key" // department key
+ (koppel_key? ", ins_deelkoppeling_omschrijving, ins_deelkoppeling_van_key, ins_deelkoppeling_naar_key" : "")
@@ -1364,17 +1389,26 @@ ins = {checkAutLevel:
+ (koppel_key? ", ins_deelkoppeling idk" : "")
+ sqlOwner_where
+ sqlKenmerkBewerkbaar_where
+ " AND i.ins_alg_ruimte_key = p.prs_perslid_key"
+ " AND p.prs_afdeling_key = d.prs_afdeling_key"
+ " AND d.prs_bedrijf_key = b.prs_bedrijf_key"
+ " AND i.ins_alg_ruimte_type = 'P'";
+ " AND i.ins_alg_ruimte_key = p.prs_perslid_key";
if (auth_org)
// Object is uitgeleend.
sqlOwnerP_org = sqlOwnerP
+ " AND i.ins_alg_ruimte_type_org = 'P'";
sqlOwnerP += " AND i.ins_alg_ruimte_type = 'P'" // Object is wel of niet uitgeleend.
+ (S("ins_auth_obj_lendout") == 1
? " AND i.ins_alg_ruimte_key_org IS NULL" // Dit deel kijkt naar NIET uitgeleende objecten. sqlOwnerA_org naar uitgeleende objecten.
: "");
sqlOwnerCP = sqlOwner_select
+ (!mobile
? sqlKenmerkBewerkbaar_select
+ ", (SELECT c.prs_bedrijf_key FROM prs_contactpersoon c WHERE c.prs_contactpersoon_key = i.ins_alg_ruimte_key) prs_bedrijf_key" // bedrijf key
+ ", 0 dummy1" // department key
+ ", c.prs_contactpersoon_naam eigenaar"
+ ", c.prs_contactpersoon_naam uitgeleend_aan"
+ ", i.ins_alg_ruimte_key alg_ruimte_key" // person key
+ ", NULL prs_afdeling_key" // department key
+ (koppel_key? ", ins_deelkoppeling_omschrijving, ins_deelkoppeling_van_key, ins_deelkoppeling_naar_key" : "")
@@ -1386,46 +1420,20 @@ ins = {checkAutLevel:
+ (koppel_key? ", ins_deelkoppeling idk" : "")
+ sqlOwner_where
+ sqlKenmerkBewerkbaar_where
+ " AND i.ins_alg_ruimte_key = c.prs_contactpersoon_key"
+ " AND c.prs_bedrijf_key = b.prs_bedrijf_key"
+ " AND i.ins_alg_ruimte_type = 'C'";
+ " AND i.ins_alg_ruimte_key = c.prs_contactpersoon_key";
if (auth_org)
// Object is uitgeleend.
sqlOwnerCP_org = sqlOwnerCP
+ " AND i.ins_alg_ruimte_type_org = 'C'";
sqlOwnerCP += " AND i.ins_alg_ruimte_type = 'C'"; // Object is NIET uitgeleend, anders was het type 'P'.
}
if (!hasOwner)
{ // Owner filter would imply only owned objects
sqlOwner_select = "SELECT TO_CHAR(NULL) plaats"
+ ", " + lcl.xsql('s.ins_srtdeel_omschrijving', 's.ins_srtdeel_key')+" soort"
+ ", i.ins_deel_omschrijving"
+ ", (SELECT ins_discipline_omschrijving"
+ " FROM ins_discipline idc"
+ " WHERE i.ins_discipline_key = idc.ins_discipline_key) ins_disc_oms"
+ ", (SELECT ins_srtgroep_omschrijving"
+ " FROM ins_srtgroep idc"
+ " WHERE s.ins_srtgroep_key = idc.ins_srtgroep_key) ins_groep_oms"
+ ", i.ins_deel_key"
+ ", i.ins_alg_ruimte_type"
+ ", " + sqlInspectie_select
+ (!mobile
? ", s.ins_srtdeel_code"
+ ", i.ins_deel_opmerking"
+ ", s.ins_srtdeel_key"
+ ", s.ins_srtdeel_upper"
+ ", i.ins_deel_getekend"
+ ", i.ins_discipline_key"
+ ", -1 district"
+ ", i.ins_deel_x" // is coordinaat bekend?
+ ", i.ins_deel_dwgx" // is dwg coordinaat bekend?
+ ", ins_srtgroep_key"
+ ", ins_deel_upper"
+ ", s.ins_srtdeel_uitleenbaar"
+ ", i.ins_alg_ruimte_key_org"
+ ", i.ins_alg_ruimte_type_org"
+ ", " + sqlLentOutFrom + " uitgegeven_vanuit"
+ ", rd.res_deel_key"
+ ", rd.res_deel_opmerking"
+ ", i.ins_deel_vervaldatum"
+ ", i.ins_deel_actief"
: "");
sqlPosition = (terr_key
? "SELECT t.alg_terreinsector_omschrijving"
: "SELECT o.alg_plaatsaanduiding"
@@ -1464,9 +1472,14 @@ ins = {checkAutLevel:
+ ", i.ins_deel_vervaldatum"
+ ", i.ins_deel_actief"
+ sqlKenmerkBewerkbaar_select
+ ", null prs_bedrijf_key"
+ ", null prs_afdeling_key1"
+ ", null eigenaar"
+ ", NULL prs_bedrijf_key"
+ ", NULL prs_afdeling_key1"
+ ", CASE WHEN i.ins_alg_ruimte_type_org IS NOT NULL"
+ " THEN (SELECT " + S("prs_pers_string")
+ " FROM prs_perslid p"
+ " WHERE p.prs_perslid_key = i.ins_alg_ruimte_key)"
+ " ELSE NULL"
+ " END uitgeleend_aan"
+ ", i.ins_alg_ruimte_key alg_ruimte_key"
+ ", 0 dummy1" // department key
+ (koppel_key? ", ins_deelkoppeling_omschrijving, ins_deelkoppeling_van_key, ins_deelkoppeling_naar_key" : "")
@@ -1501,15 +1514,6 @@ ins = {checkAutLevel:
+ sql_objincl
+ sqlInspectie_where
+ sqlKenmerkBewerkbaar_where
+ (terr_key
? " AND t.alg_terreinsector_key = i.ins_alg_ruimte_key"
+ " AND i.ins_alg_ruimte_type = 'T'"
+ " AND t.alg_locatie_key = l.alg_locatie_key"
: " AND o.alg_onroerendgoed_keys = i.ins_alg_ruimte_key"
+ " AND o.alg_onroerendgoed_type = i.ins_alg_ruimte_type"
+ " AND i.ins_alg_ruimte_type IN ('T','R','W')"
+ " AND o.alg_locatie_key = l.alg_locatie_key" // PF: de redundante ins_alg_locatie_key is niet nodig
)
+ " AND l.alg_district_key = di.alg_district_key"
+ " AND s.ins_srtdeel_key = i.ins_srtdeel_key"
+ (fronto
@@ -1550,29 +1554,52 @@ ins = {checkAutLevel:
else if (!terr_key && fgraph)
sqlPosition += " AND i.ins_alg_ruimte_key = -1"; // geen terreinen bij fgraph => geen objecten om te laten zien
}
}
if (sqlPosition != "" && ins_key_arr)
{
sqlPosition += " AND i.ins_deel_key IN (" + ins_key_arr.join(",") + ")";
}
else if (sqlPosition != "" && parent_key)
{
sqlPosition += " AND i.ins_deel_parent_key IN (" + parent_key + ")";
}
else if (sqlPosition != "" && koppel_key)
{
sqlPosition += " AND idk.ins_deelkoppeling_verwijder IS NULL"
+ " AND (( i.ins_deel_key = idk.ins_deelkoppeling_naar_key"
+ " AND idk.ins_deelkoppeling_van_key=" + koppel_key
+ " )"
+ " OR ( i.ins_deel_key = idk.ins_deelkoppeling_van_key"
+ " AND idk.ins_deelkoppeling_naar_key=" + koppel_key + "))";
if (ins_key_arr)
{
sqlPosition += " AND i.ins_deel_key IN (" + ins_key_arr.join(",") + ")";
}
else if (parent_key)
{
sqlPosition += " AND i.ins_deel_parent_key IN (" + parent_key + ")";
}
else if (koppel_key)
{
sqlPosition += " AND idk.ins_deelkoppeling_verwijder IS NULL"
+ " AND (( i.ins_deel_key = idk.ins_deelkoppeling_naar_key"
+ " AND idk.ins_deelkoppeling_van_key=" + koppel_key
+ " )"
+ " OR ( i.ins_deel_key = idk.ins_deelkoppeling_van_key"
+ " AND idk.ins_deelkoppeling_naar_key=" + koppel_key + "))";
}
if (auth_org)
// Object is uitgeleend.
// terr_key is een FGII parameters, dus bij uitlenen nooit gevuld. Gebruik alg_terreinsector_key hoeft niet overwogen te worden zoals hieronder.
// Object is uitgeleend en i.ins_alg_ruimte_type = 'P'.
// Eventuele zoekfilters op plaats worden dan ook toegepast op de oorspronkelijke plaats (ins_alg_ruimte_key_org).
sqlPosition_org = sqlPosition
+ " AND o.alg_onroerendgoed_keys = i.ins_alg_ruimte_key_org"
+ " AND o.alg_onroerendgoed_type = i.ins_alg_ruimte_type_org"
+ " AND i.ins_alg_ruimte_type_org IN ('T','R','W')"
+ " AND o.alg_locatie_key = l.alg_locatie_key";
sqlPosition += (terr_key
? " AND t.alg_terreinsector_key = i.ins_alg_ruimte_key"
+ " AND i.ins_alg_ruimte_type = 'T'" // Object is NIET uitgeleend, anders was het type 'P'.
+ " AND t.alg_locatie_key = l.alg_locatie_key"
: " AND o.alg_onroerendgoed_keys = i.ins_alg_ruimte_key"
+ " AND o.alg_onroerendgoed_type = i.ins_alg_ruimte_type"
+ " AND i.ins_alg_ruimte_type IN ('T','R','W')" // Object is NIET uitgeleend, anders was het type 'P'.
+ " AND o.alg_locatie_key = l.alg_locatie_key" // PF: de redundante ins_alg_locatie_key is niet nodig
)
}
// And some more conditions that apply for both modes:
// And some more conditions that apply for both modes (sqlPosition(_org) and hasOwner(_org)):
var sql_ex = "";
if (mld_key)
sql_ex += " AND i.ins_deel_key IN (SELECT ins_deel_key FROM mld_melding_object WHERE mld_melding_key="+mld_key+")";
sql_ex += " AND i.ins_deel_key IN (SELECT ins_deel_key FROM mld_melding_object WHERE mld_melding_key=" + mld_key + ")";
if (objsrt_key)
sql_ex += " AND s.ins_srtdeel_key IN (" + objsrt_key.join(",") + ")";
else if (insgroup_key)
@@ -1599,10 +1626,11 @@ ins = {checkAutLevel:
sql_ex += getKenmerkSql("INS", "i.ins_deel_key");
if (sqlPosition != "")
{
sqlPosition += sql_ex;
if (sqlPosition != "")
sqlPosition += sql_ex;
if (auth_org)
sqlPosition_org += sql_ex;
}
if (sqlPosition != "")
{ // we must consider this: if we know that a room is defined (by filter), we must be
@@ -1621,6 +1649,21 @@ ins = {checkAutLevel:
pautfunction,
(disc_key? disc_key : ''),
0); // AKZA#430/PF, AKZA#496/MGE
if (auth_org)
sqlPosition_org = discx3d (sqlPosition_org,
"i.ins_discipline_key",
"di.alg_regio_key",
"l.alg_district_key",
"l.alg_locatie_key",
"o.alg_gebouw_key",
"o.alg_verdieping_key",
"o.alg_ruimte_key",
"", // b.prs_bedrijf_key: not used because algprs == 0
"", // d.prs_afdeling_key: not used because algprs == 0
pautfunction,
(disc_key? disc_key : ''),
0); // AKZA#430/PF, AKZA#496/MGE
}
if (sqlOwnerA != "" && sqlOwnerP != "" && sqlOwnerCP != "")
@@ -1638,6 +1681,22 @@ ins = {checkAutLevel:
pautfunction,
(disc_key? disc_key : ''),
1); // AKZA#430/PF, AKZA#496/MGE
if (auth_org)
sqlOwnerA_org = discx3d (sqlOwnerA_org,
"ins_discipline_key",
"", // di.alg_regio_key: not used because algprs == 0
"", // l.alg_district_key: not used because algprs == 0
"", // o.alg_locatie_key: not used because algprs == 0
"", // o.alg_gebouw_key: not used because algprs == 0
"", // o.alg_verdieping_key: not used because algprs == 0
"", // o.alg_ruimte_key: not used because algprs == 0
"b.prs_bedrijf_key",
"d.prs_afdeling_key",
pautfunction,
(disc_key? disc_key : ''),
1); // AKZA#430/PF, AKZA#496/MGE
sqlOwnerP = discx3d (sqlOwnerP,
"ins_discipline_key",
"", // di.alg_regio_key: not used because algprs == 0
@@ -1653,7 +1712,29 @@ ins = {checkAutLevel:
1); // AKZA#430/PF, AKZA#496/MGE
// Geen autorisatie bij externe bedrijven (prs_bedrijf)
sqlOwner = sqlOwnerA + sql_ex + " UNION " + sqlOwnerP + sql_ex + " UNION " + sqlOwnerCP + sql_ex;
if (auth_org)
sqlOwnerP_org = discx3d (sqlOwnerP_org,
"ins_discipline_key",
"", // di.alg_regio_key: not used because algprs == 0
"", // l.alg_district_key: not used because algprs == 0
"", // o.alg_locatie_key: not used because algprs == 0
"", // o.alg_gebouw_key: not used because algprs == 0
"", // o.alg_verdieping_key: not used because algprs == 0
"", // o.alg_ruimte_key: not used because algprs == 0
"b.prs_bedrijf_key",
"d.prs_afdeling_key",
pautfunction,
(disc_key? disc_key : ''),
1); // AKZA#430/PF, AKZA#496/MGE
// Deelqueries sqlOwnerA en sqlOwnerCP leveren alleen resultaat op als "Beschikbaar" (insAvail) is aangevinkt.
sqlOwner = (insAvail
? sqlOwnerA + sql_ex + " UNION " + sqlOwnerCP + sql_ex + " UNION "
: "")
+ sqlOwnerP + sql_ex
+ (auth_org // S("ins_auth_obj_lendout") == 1 && fronto && insLentOut
? " UNION " + sqlOwnerA_org + sql_ex + " UNION " + sqlOwnerP_org + sql_ex + " UNION " + sqlOwnerCP_org + sql_ex
: "");
// Now apply user filtering on this query:
if (persoon_key)
@@ -1677,7 +1758,10 @@ ins = {checkAutLevel:
sql = (sqlOwner != ""
? sqlOwner + (sqlPosition != ""? " UNION ALL " : "")
: "")
+ sqlPosition;
+ sqlPosition
+ (auth_org && sqlPosition != ""
? " UNION " + sqlPosition_org
: "");
if (inspect)
{

View File

@@ -516,7 +516,8 @@ function ins_list (pautfunction, params)
place = oRs("uitgegeven_vanuit");
else
if (oRs("ins_alg_ruimte_type").value == 'P' || oRs("ins_alg_ruimte_type").value == 'A')
place = oRs("eigenaar").value;
// Object niet uitgeleend. Uitgeleend aan is eigenlijk de plaats.
place = oRs("uitgeleend_aan").value;
else
place = oRs("plaats").value;
@@ -527,7 +528,7 @@ function ins_list (pautfunction, params)
{
var lentOutTo
if (oRs("ins_alg_ruimte_type_org").value != null)
lentOutTo = oRs("eigenaar").value;
lentOutTo = oRs("uitgeleend_aan").value;
else
lentOutTo = "";
@@ -812,7 +813,7 @@ function ins_list (pautfunction, params)
if (!parent_key) {
rst.addColumn(new Column({caption: L("lcl_obj_position"), content: "plaats"}));
if (!fgraph)
rst.addColumn(new Column({caption: L("lcl_obj_owner"), content: "eigenaar", combine: true}));
rst.addColumn(new Column({caption: L("lcl_obj_owner"), content: "uitgeleend_aan", combine: true}));
}
if (params.mjob)
{