Files
Facilitor/APPL/INS/ins.inc
Maykel Geerdink f5463873fa ASFC#34371: Start en stopmoment bij schoonmaak via inspecties kunnen vastleggen.
UWVA#35539: ins: kan gedane inspectie aanpassen.

svn path=/Website/trunk/; revision=28990
2016-04-18 12:46:11 +00:00

624 lines
33 KiB
C++

<% /*
$Revision$
$Id$
*/
%>
<!-- #include file="../PRS/prs.inc" -->
<%
var BIND_RUIMTE = 0x01;
var BIND_WERKPL = 0x02;
var BIND_TERREI = 0x04;
var BIND_AFDELI = 0x08;
var BIND_PERSOO = 0x10;
var BIND_INSDEE = 0x20; // Onderdeel
ins = {checkAutLevel:
function (pAutfunction, pUser_key)
{
// De DISTINCT in het volgende statement is erg belangrijk
// We staan multiedit toe van objecten van verschillende disciplines
// echter alleen als de gebruiker voor al die disciplines exact dezelfde
// alg_level_write en prs_level_write heeft. Anders wordt het véél te complex.
var sql = "SELECT distinct fac_gebruiker_alg_level_write, fac_gebruiker_prs_level_write "
+ " FROM fac_v_webgebruiker w, fac_functie f, ins_deel idd "
+ " WHERE w.ins_discipline_key = idd.ins_discipline_key "
+ " AND w.fac_functie_key = f.fac_functie_key "
+ " AND w.prs_perslid_key = " + pUser_key
+ " AND fac_functie_code = '"+pAutfunction+"' "
+ " AND ins_deel_key IN (" + inskeystring + ")"
var oRs = Oracle.Execute(sql)
if (oRs.eof)
return false;
/*globaal*/ alg_level = oRs("fac_gebruiker_alg_level_write").Value;
/*globaal*/ prs_level = oRs("fac_gebruiker_prs_level_write").Value;
if (alg_level==9 && prs_level==9)
return false; // Alleen leesrechten op *alle* objecten blijkbaar
oRs.MoveNext();
if (!oRs.eof)
return false; // "Autorisatie te complex! Kies alleen objecten van dezelfde discipline");
return true; // Okido
},
setinspectstatus:
function (deelsrtcontrole_key, ins_inspect_status_key, uitvoerende)
{ // Zet de status en geef de bijpassende tracking en notificatie.
var sql = "BEGIN ins.setinspectstatus(" + deelsrtcontrole_key + ", " + ins_inspect_status_key + ", " + user_key + "); END;"
Oracle.Execute(sql);
},
trackinspectupdate:
// Let op: dit moet wellicht niet altijd (aangeroepen na save)
function (deelsrtcontrole_key, ptxt)
{
shared.trackaction("INSCUP", deelsrtcontrole_key, ptxt);
},
getBindingItemString:
function(bind, bind_key, parent_key)
{
var binding_item = L("lcl_unknown");
switch (bind)
{
case 'A':
{
sql = "SELECT " + S("prs_dep_string")
+ " FROM prs_v_afdeling d"
+ " WHERE d.prs_afdeling_key = " + bind_key;
break;
}
case 'P':
{
sql = "SELECT prs_perslid_naam_full"
+ " FROM prs_v_perslid_fullnames_all pf"
+ " WHERE pf.prs_perslid_key = " + bind_key;
break;
}
case 'C':
{
sql = "SELECT cp.prs_contactpersoon_naam"
+ " FROM prs_contactpersoon cp"
+ " WHERE cp.prs_contactpersoon_key = " + bind_key;
break;
}
case 'R':
{
sql = "SELECT o.alg_plaatsaanduiding || DECODE(o.alg_plaatsomschrijving, '','' ,' (' || o.alg_plaatsomschrijving || ')')"
+ " FROM ins_v_alg_overzicht o "
+ " WHERE o.alg_ruimte_key = " + bind_key;
break;
}
case 'W':
{
sql = "SELECT pa.alg_plaatsaanduiding || DECODE(a.alg_ruimte_omschrijving,NULL,'',' (' || a.alg_ruimte_omschrijving || ')')"
+ " FROM alg_ruimte a"
+ ", ins_v_alg_overzicht pa"
+ " WHERE a.alg_ruimte_key = pa.alg_ruimte_key"
+ " AND pa.prs_werkplek_key = " + bind_key;
break;
}
case 'T':
{
sql = "SELECT pa.alg_plaatsaanduiding || DECODE(t.alg_terreinsector_omschrijving,NULL,'',' (' || t.alg_terreinsector_omschrijving || ')')"
+ " FROM alg_terreinsector t"
+ ", ins_v_alg_overzicht pa"
+ " WHERE t.alg_terreinsector_key = pa.alg_onroerendgoed_keys"
+ " AND t.alg_terreinsector_key = " + bind_key;
break;
}
case 'I':
{
sql = "SELECT ins_deel_omschrijving"
+ " FROM ins_deel d"
+ " WHERE d.ins_deel_key = " + parent_key;
break;
}
}
oRs = Oracle.Execute(sql);
if (!oRs.eof)
binding_item = oRs(0).Value;
return binding_item;
},
getGGD:
function(obj_keys)
{
if (obj_keys.length > 0)
{
var sql = "SELECT dg.prs_perslid_key"
+ " , dg.prs_afdeling_key"
+ " , dg.alg_locatie_key"
+ " , dg.alg_gebouw_key"
+ " , dg.alg_terreinsector_key"
+ " , dg.alg_verdieping_key"
+ " , dg.alg_ruimte_key"
+ " , " + S("alg_loc_string") + " loc_oms"
+ " , g.alg_gebouw_code || ' ' || g.alg_gebouw_naam" + " geb_oms"
+ " , t.alg_terreinsector_code || ' ' || t.alg_terreinsector_naam" + " ter_oms"
+ " , v.alg_verdieping_omschrijving ver_oms"
+ " , g.alg_gebouw_code || '-' || v.alg_verdieping_code || '-' || r.alg_ruimte_nr rui_oms"
+ " FROM ins_v_deel_gegevens_keys dg"
+ " , alg_v_aanweziglocatie l"
+ " , alg_v_aanweziggebouw g"
+ " , alg_v_aanwezigterreinsector t"
+ " , alg_v_aanwezigverdieping v"
+ " , alg_v_aanwezigruimte r"
+ " WHERE dg.alg_locatie_key = l.alg_locatie_key(+)"
+ " AND dg.alg_gebouw_key = g.alg_gebouw_key(+)"
+ " AND dg.alg_terreinsector_key = t.alg_terreinsector_key(+)"
+ " AND dg.alg_verdieping_key = v.alg_verdieping_key(+)"
+ " AND dg.alg_ruimte_key = r.alg_ruimte_key(+)"
+ " AND dg.ins_deel_key IN (" + obj_keys.join(",") + ")"
+ " ORDER BY prs_perslid_key DESC"; // Eerst de plaatsgebonden objecten.
var oRs = Oracle.Execute(sql);
var nrPlaatsGebondenObjects = 0;
var diffL = false; // Meegegeven objecten bevinden zich op verschillende locaties.
var diffG = false; // Meegegeven objecten bevinden zich in verschillende gebouwen.
var diffT = false; // Meegegeven objecten bevinden zich in verschillende terreinen.
var diffV = false; // Meegegeven objecten bevinden zich op verschillende verdiepingen.
var diffR = false; // Meegegeven objecten bevinden zich in verschillende ruimten.
var prs_key = oRs("prs_perslid_key").Value;
var afd_key = oRs("prs_afdeling_key").Value;
var loc_key = oRs("alg_locatie_key").Value;
var geb_key = oRs("alg_gebouw_key").Value;
var ter_key = oRs("alg_terreinsector_key").Value;
var ver_key = oRs("alg_verdieping_key").Value;
var rui_key = oRs("alg_ruimte_key").Value;
var loc_oms = oRs("loc_oms").Value;
var geb_oms = oRs("geb_oms").Value;
var ter_oms = oRs("ter_oms").Value;
var ver_oms = oRs("ver_oms").Value;
var rui_oms = oRs("rui_oms").Value;
if (prs_key == null && afd_key == null)
nrPlaatsGebondenObjects++;
oRs.MoveNext();
while (!oRs.eof)
{
if (oRs("prs_perslid_key").Value == null && oRs("prs_afdeling_key").Value == null)
{ // Object is niet persoons- of afdelingsgebonden.
nrPlaatsGebondenObjects++;
if (!diffL && loc_key != oRs("alg_locatie_key").Value)
diffL = diffG = diffV = diffR = true;
else if (!diffG && (geb_key != oRs("alg_gebouw_key").Value || oRs("alg_gebouw_key").Value == null))
diffG = diffV = diffR = true;
if (!diffT && (ter_key != oRs("alg_terreinsector_key").Value || oRs("alg_terreinsector_key").Value == null))
diffT = true;
if (!diffV && ver_key != oRs("alg_verdieping_key").Value)
diffV = diffR = true;
else if (!diffR && rui_key != oRs("alg_ruimte_key").Value)
diffR = true;
}
oRs.MoveNext();
}
oRs.Close();
if (nrPlaatsGebondenObjects == 0)
return null; // Er zijn geen plaatsgebonden objecten gevonden.
else if (!diffR)
return {alg_key: rui_key, alg_type: "R", alg_oms: rui_oms, ver_key: ver_key, ver_oms: ver_oms, geb_key: geb_key, geb_oms: geb_oms, loc_key: loc_key, loc_oms: loc_oms};
else if (!diffV)
return {alg_key: ver_key, alg_type: "V", alg_oms: ver_oms, geb_key: geb_key, geb_oms: geb_oms, loc_key: loc_key, loc_oms: loc_oms};
else if (!diffT)
return {alg_key: ter_key, alg_type: "T", alg_oms: ter_oms, loc_key: loc_key, loc_oms: loc_oms};
else if (!diffG)
return {alg_key: geb_key, alg_type: "G", alg_oms: geb_oms, loc_key: loc_key, loc_oms: loc_oms};
else if (!diffL)
return {alg_key: loc_key, alg_type: "L", alg_oms: loc_oms};
else
return null;
}
else
return null;
},
getinsstatustext:
function (p)
{
var statustekst = "??";
var s = parseInt(p, 10);
switch (s) {
case 0: { statustekst = L("lcl_ins_controle_pending"); break; }
case 2: { statustekst = L("lcl_ins_controle_gestart"); break; }
case 5: { statustekst = L("lcl_ins_controle_afgemeld"); break; }
case 6: { statustekst = L("lcl_ins_controle_afgerond"); break; }
}
if (Session("logging")>0)
statustekst += " ("+String(p)+")";
return statustekst;
},
updateKenmerkdeel:
function(ins_key, params)
{ // Wijzigbare flexkenmerken altijd opslaan
params = params || [];
currentKenmerkenSQL = "SELECT v.ins_kenmerk_key, v.ins_kenmerkdeel_waarde"
+ " FROM ins_kenmerkdeel v"
+ " WHERE v.ins_kenmerkdeel_verwijder IS NULL"
+ " AND v.ins_deel_key = " + ins_key;
allKenmerkenSQL = "SELECT " + lcl.xsql('isk.ins_srtkenmerk_omschrijving', 'isk.ins_srtkenmerk_key') + " kenmerk_omschrijving"
+ ", isk.ins_srtkenmerk_key srtkenmerk_key"
+ ", fac_kenmerkdomein_key"
+ " FROM ins_kenmerk ik, "
+ " ins_srtkenmerk isk"
+ " WHERE ik.ins_srtkenmerk_key = isk.ins_srtkenmerk_key"
+ " AND ik.ins_kenmerk_key = "; /* wordt in saveFlexkenmerken uitgebreid */
var flextrack = saveFlexKenmerken(ins_key,
{ kenmerkTable: "ins_kenmerkdeel",
kenmerkParentKey : "ins_deel_key",
kenmerkWaarde: "ins_kenmerkdeel_waarde",
kenmerkKey: "ins_kenmerk_key",
currentKenmerkenSQL: currentKenmerkenSQL,
allKenmerkenSQL: allKenmerkenSQL,
requestQF: Request.Form,
isNew: params.isnew,
flexPath: "INS/I",
multiMode: params.multimode,
tracking: true,
module: "INS"
});
return flextrack;
},
isSleCil:
// Niveau kan de volgende waarden hebben:
// null : ins_deel (niet meegegeven)
// 'S' : ins_srtdeel
// 'G' : ins_srtgroup (Not used yet)
// 'D' : ins_discipline
function(key, niveau)
{ // Is de key een ins_deel_key of ins_srtdeel_key vsleutel of een cilinder
var isSC;
switch (niveau)
{
case "S": // ins_srtdeel
var sql = "SELECT sd.ins_srtgroep_key"
+ " FROM ins_srtdeel sd"
+ " WHERE sd.ins_srtdeel_key = " + key;
break;
case "G": // ins_srtgroep
var sql = "SELECT sg.ins_srtgroep_key"
+ " FROM ins_srtgroep sg"
+ " WHERE sg.ins_srtgroep_key = " + key;
break;
case "D": // ins_discipline
var sql = "SELECT sg.ins_srtgroep_key"
+ " FROM ins_srtgroep sg"
+ " WHERE sg.ins_discipline_key = " + key;
break;
default: // ins_deel
var sql = "SELECT sd.ins_srtgroep_key"
+ " FROM ins_deel d"
+ " , ins_srtdeel sd"
+ " WHERE d.ins_srtdeel_key = sd.ins_srtdeel_key"
+ " AND d.ins_deel_key = " + key;
}
var oRs = Oracle.Execute(sql);
var groep_key = oRs("ins_srtgroep_key").Value;
oRs.Close;
return (groep_key == S("sle_ins_srt_groep_key") || groep_key == S("cil_ins_srt_groep_key"));
},
//PF: idee om dit te versnellen door voorkennis te vergaren. De selecties zijn erg zwaar
// eerste stap: in singlerecordmode zo weinig mogelijk query doen.
// Bepaalt of we op het één object schrijfrechten hebben
// return True als het mag, false als het niet mag
// Pas op: parameter alg_key kan ook prs_perslid of afdeling zijn afhankelijk van bind!!
checkAutSQL:
function (pUser_key, bind, alg_key, disc_key)
{
// Helaas, we moeten 'ingewikkeld' gaan controleren
// We weten ondertussen al de fac_gebruiker_alg_level_write dus het volgende kan
// heel efficient.....
// Alle ruimtes op maximaal afstand 'alg_level' van *mij*
var fac_v_my_disc_onrgoed_write = ""
+ "SELECT a.alg_ruimte_key"
+ " FROM alg_v_onrgoed_familie a,"
+ " alg_v_onrgoed_familie aa,"
+ " alg_v_my_room mr"
+ " WHERE mr.alg_ruimte_key = aa.alg_ruimte_key"
+ " AND mr.prs_perslid_key = " + pUser_key
+ " AND a.alg_onrgoed_elder_key = aa.alg_onrgoed_elder_key"
+ " AND aa.niveau = a.niveau" // Noodzakelijk want ALG_LOCATIE heeft eigen sequence
+ " AND aa.niveau >= " + alg_level
// Alle afdelingen op maximaal afstand 'alg_level' van *mij*
var fac_v_my_disc_afdelingen_write = ""
+ "SELECT a.prs_afdeling_key "
+ " FROM prs_v_afdeling_familie a, "
+ " prs_v_afdeling_familie aa "
+ " WHERE aa.prs_afdeling_key = " + user.prs_afdeling_key()
+ " AND a.prs_afdeling_elder_key = aa.prs_afdeling_elder_key "
+ " AND aa.niveau = a.niveau "
+ " AND aa.niveau >= " + prs_level
switch (bind)
{
case 'R':
case 'W':
case 'T':
if (alg_level == 9) return false; // Zeker niet op basis van alg_scope
if (alg_level == -1) return true; // Zeker wel op basis van alg_scope
if (bind == 'T') // Speciaal geval voor terreinsectoren
{
if (alg_level > 2) return false; // Zeker niet op basis van alg_scope
rsql = " SELECT 1"
+ " FROM alg_v_my_location avml, alg_terreinsector ats"
+ " WHERE avml.alg_locatie_key = ats.alg_locatie_key"
+ " AND avml.prs_perslid_key = " + pUser_key
+ " AND ats.alg_terreinsector_key = " + alg_key
}
else
rsql = " SELECT 1" // plaatsgebonden en gebruiker heeft een plaats (werkplek)
+ " FROM ("+fac_v_my_disc_onrgoed_write+") oga"
+ " WHERE oga.alg_ruimte_key = " + alg_key
break;
case 'P':
if (prs_level == 9) return false; // Zeker niet op basis van prs_scope
if (prs_level == -1) return true; // Zeker wel op basis van prs_scope
rsql= " SELECT 2" // persoonsgebonden
+ " FROM ("+fac_v_my_disc_afdelingen_write+") aa, prs_perslid p"
+ " WHERE p.prs_perslid_key = " + alg_key
+ " AND aa.prs_afdeling_key = p.prs_afdeling_key"
+ " AND rownum=1";
break;
case 'A':
if (prs_level == 9) return false; // Zeker niet op basis van prs_scope
if (prs_level == -1) return true; // Zeker wel op basis van prs_scope
rsql= " SELECT 3" // afdelingsgebonden
+ " FROM ("+fac_v_my_disc_afdelingen_write+") aa"
+ " WHERE aa.prs_afdeling_key = " + alg_key
+ " AND rownum=1";
break;
}
return !(Oracle.Execute(rsql).eof);
},
// Check de autorisatie van alle objecten. We eisen overal schrijfrechten op
// We testen per unieke ins_alg_ruimte_type, ins_alg_ruimte_key, ins_discipline_key
// waardoor er een sterke performanceverbetering is als bijvoorbeeld
// alle objecten van dezelfde discipline zijn en van dezelfde ruimte/persoon/afdeling
checkAutSQLMultiple:
function (autfunction)
{
var sql, oRs;
sql = "SELECT ins_alg_ruimte_type, ins_alg_ruimte_key, ins_discipline_key "
+ " FROM ins_deel WHERE ins_deel_key IN (" + inskeystring + ")"
+ " GROUP BY ins_alg_ruimte_type, ins_alg_ruimte_key, ins_discipline_key";
oRs = Oracle.Execute( sql );
while (mayEdit && !oRs.Eof)
{
var bind = oRs("ins_alg_ruimte_type").Value;
var alg_key = oRs("ins_alg_ruimte_key").Value; // Kan ook prs_perslid of afdeling zijn!!
var disc_key = oRs("ins_discipline_key").Value;
mayEdit = ins.checkAutSQL(user_key, bind, alg_key, disc_key);
oRs.moveNext();
}
return mayEdit;
},
ins_disciplineinfo:
function _ins_disciplineinfo(ins_discipline_key) {
var sql = "SELECT ins_discipline_key"
+ " , (SELECT COUNT(*)"
+ " FROM fac_faq ff"
+ " , mld_stdmeldingfaq sf"
+ " WHERE ff.fac_faq_key = sf.fac_faq_key"
+ " AND sf.ins_discipline_key = md.ins_discipline_key"
+ " AND BITAND (fac_faq_level, 1) = 1" // Voor fe
+ " AND fac_faq_datum < SYSDATE"
+ " AND (fac_faq_lang = " + safe.quoted_sql(user_lang) + " OR fac_faq_lang IS NULL)) aantal_fefaq"
+ " , (SELECT COUNT(*)"
+ " FROM fac_faq ff"
+ " , mld_stdmeldingfaq sf"
+ " WHERE ff.fac_faq_key = sf.fac_faq_key"
+ " and sf.ins_discipline_key = md.ins_discipline_key"
+ " AND BITAND (fac_faq_level, 2) = 2" // Voor fo
+ " AND fac_faq_datum < SYSDATE"
+ " AND (fac_faq_lang = " + safe.quoted_sql(user_lang) + " OR fac_faq_lang IS NULL)) aantal_fofaq"
+ " , ins_discipline_module"
+ " , ins_discipline_omschrijving"
+ " , ins_discipline_min_level"
+ " , ins_srtdiscipline_key"
+ " , ins_discipline_kpnverplicht"
+ " , prs_kostensoort_key"
+ " , ins_discipline_email"
+ " , ins_discipline_btw"
+ " , ins_discipline_opmerking"
+ " , ins_discipline_ktopercentage"
+ " , ins_discipline_ktodrempel"
+ " , ins_discipline_volgnr"
+ " FROM mld_discipline md"
+ " WHERE md.ins_discipline_key = " + ins_discipline_key;
var oRs = Oracle.Execute(sql);
var result = { ins_discipline_key: oRs("ins_discipline_key").Value,
aantal_fefaq: oRs("aantal_fefaq").Value,
aantal_fofaq: oRs("aantal_fofaq").Value,
module: oRs("ins_discipline_module").Value,
omschrijving: oRs("ins_discipline_omschrijving").Value,
min_level: oRs("ins_discipline_min_level").Value,
ins_srtdiscipline_key: oRs("ins_srtdiscipline_key").Value,
kpnverplicht: oRs("ins_discipline_kpnverplicht").Value,
prs_kostensoort_key: oRs("prs_kostensoort_key").Value,
email: oRs("ins_discipline_email").Value,
btw: oRs("ins_discipline_btw").Value,
opmerking: oRs("ins_discipline_opmerking").Value,
ktopercentage: oRs("ins_discipline_ktopercentage").Value,
ktodrempel: oRs("ins_discipline_ktodrempel").Value,
volgnr: oRs("ins_discipline_volgnr").Value
};
if (result.aantal_fefaq > 0)
{
result.canFAQUSEread = user.checkAutorisation("WEB_FAQUSE", true)!=null;
}
if (result.aantal_fofaq > 0)
{
result.canFAQFOFread = user.checkAutorisation("WEB_FAQFOF", true)!=null;
}
oRs.Close();
return result;
},
func_enabled_deel: // Wat mag ik zoal op dit specifieke object?
// autodetect sleutels
function (pins_deel_key, params)
{
var isql = "SELECT d.ins_discipline_key"
+ ", d.ins_alg_ruimte_key"
+ ", d.ins_alg_ruimte_type"
+ ", d.ins_alg_ruimte_key_org"
+ ", d.ins_alg_ruimte_type_org"
+ ", isd.ins_srtgroep_key"
+ " FROM ins_deel d, ins_srtdeel isd"
+ " WHERE d.ins_srtdeel_key = isd.ins_srtdeel_key"
+ " AND d.ins_deel_key = " + pins_deel_key;
var ioRs = Oracle.Execute(isql);
var srtgroep_key = ioRs("ins_srtgroep_key").Value;
var isSleCil = (srtgroep_key == S("sle_ins_srt_groep_key") || srtgroep_key == S("cil_ins_srt_groep_key"));
if (isSleCil)
{
var alg_key = ioRs("ins_alg_ruimte_key_org").Value? ioRs("ins_alg_ruimte_key_org").Value : ioRs("ins_alg_ruimte_key").Value;
var iresult = user.func_enabled("SLE",
null, // ins_discipline doet niet ter zake
alg_key, // alg_key
null); // hier zou alleen een prs_key in mogen, we testen zo afzonderlijk
var readslebof = iresult.canRead("WEB_SLEBOF");
iresult.readslebof = readslebof;
iresult.canRead = readslebof; // Lezen
var writeslebof = iresult.canWrite("WEB_SLEBOF");
var writeslefof = iresult.canWrite("WEB_SLEFOF");
iresult.canChange = readslebof; // Wijzigen
iresult.writeslefof = writeslefof;
iresult.canDelete = writeslebof; // Verwijderen
iresult.canChange = writeslebof; // Wijzigen
iresult.canChangeAlg = iresult.canChange; // Wijzigen algemene gegevens
iresult.canCopy = writeslebof; // Kopiëren
iresult.isSleCil = true;
}
else // Gewone objecten
{
var iresult = ins.func_enabled_scope(ioRs("ins_discipline_key").Value,
ioRs("ins_alg_ruimte_type").Value,
ioRs("ins_alg_ruimte_key").Value);
user.auth_required_or_abort(iresult);
}
ioRs.Close();
return iresult;
},
func_enabled_scope: // Wat mag ik zoal op deze specifieke scope?
// levert null als zelfs nog geen leesrechten
function (ins_discipline_key, ins_alg_ruimte_type, ins_alg_ruimte_key)
{
var iresult = {canDelete: false, canChange: false}; // Verwijderen en Wijzigen
if (ins_alg_ruimte_type == "A")
{
var afd_key = ins_alg_ruimte_key;
var iresult = user.func_enabled("INS",
ins_discipline_key,
null, // alg_key is nvt
null, // hier zou alleen een prs_key in mogen, we testen zo afzonderlijk
false, // pessimist
true); // nog even optional
if (!iresult || !iresult.anyfound)
return null;
var canWriteINSMAN = prs.canWriteAfdeling(afd_key, "WEB_INSMAN");
var canWriteINSUSE = prs.canWriteAfdeling(afd_key, "WEB_INSUSE");
iresult.writeman = canWriteINSMAN;
iresult.writeuse = canWriteINSUSE;
iresult.canDelete = canWriteINSMAN; // Verwijderen
iresult.canChange = canWriteINSMAN || canWriteINSUSE; // Wijzigen
iresult.canChangeAlg = canWriteINSMAN; // Wijzigen algemene gegevens
iresult.canCopy = canWriteINSMAN; // Kopiëren
}
else if (ins_alg_ruimte_type == "P")
{
var iresult = user.func_enabled("INS",
ins_discipline_key,
null, // alg_key is nvt
ins_alg_ruimte_key,
false, // pessimist
true); // nog even optional
if (!iresult || !iresult.anyfound)
return null;
iresult.writeman = iresult.canWrite("WEB_INSMAN");
iresult.writeuse = iresult.canWrite("WEB_INSUSE");
iresult.canDelete = iresult.canWrite("WEB_INSMAN"); // Verwijderen
iresult.canChange = iresult.canWrite("WEB_INSMAN") || iresult.canWrite("WEB_INSUSE"); // Wijzigen
iresult.canChangeAlg = iresult.canWrite("WEB_INSMAN"); // Wijzigen algemene gegevens
iresult.canCopy = iresult.canWrite("WEB_INSMAN"); // Kopiëren
}
else
{
var alg_ruimte_key = ins_alg_ruimte_key;
var alg_ruimte_type = ins_alg_ruimte_type;
if (alg_ruimte_type == "W")
{
var sql = "SELECT w.prs_alg_ruimte_key"
+ " FROM prs_werkplek w"
+ " WHERE w.prs_werkplek_key = " + alg_ruimte_key;
var oRs = Oracle.Execute(sql);
alg_ruimte_key = oRs("prs_alg_ruimte_key").Value;
oRs.Close();
}
else if (alg_ruimte_type == "T")
{
var sql = "SELECT t.alg_locatie_key"
+ " FROM alg_terreinsector t"
+ " WHERE t.alg_terreinsector_key = " + alg_ruimte_key;
var oRs = Oracle.Execute(sql);
alg_ruimte_key = oRs("alg_locatie_key").Value;
oRs.Close();
}
// Voor alg_ruimte_type = "P" heeft alg_ruimte_key al de juiste waarde
var iresult = user.func_enabled("INS",
ins_discipline_key,
alg_ruimte_key,
null,
false, // Pessimist.
true);
if (!iresult || !iresult.anyfound)
return null;
// Alleen backoffice mag verwijderen, dus "WEB_INSMAN" als autorisatie functie nemen.
iresult.writeman = iresult.canWrite("WEB_INSMAN");
iresult.writeuse = iresult.canWrite("WEB_INSUSE");
iresult.canDelete = iresult.canWrite("WEB_INSMAN"); // Verwijderen.
iresult.canChange = iresult.canWrite("WEB_INSMAN") || iresult.canWrite("WEB_INSUSE"); // Wijzigen.
iresult.canChangeAlg = iresult.canWrite("WEB_INSMAN"); // Wijzigen algemene gegevens.
iresult.canCopy = iresult.canWrite("WEB_INSMAN"); // Kopiëren.
}
iresult.canInspect = iresult.canWrite("WEB_INSUSE"); // Kopiëren.
iresult.canShowInsp = iresult.canRead("WEB_INSUSE"); // Inzien.
iresult.canChangeXcp = iresult.canWrite("WEB_INSMAN"); // Interval kenmerken/parameters wijzigen (waarden in ins_srtcontroledl_xcp tabel).
return iresult;
}
}
%>