752 lines
43 KiB
C++
752 lines
43 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"
|
|
+ " , d.ins_deel_actief"
|
|
+ " 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 actief = ioRs("ins_deel_actief").Value == 1;
|
|
|
|
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);
|
|
|
|
if (params && params.srtcont_key > 0)
|
|
{
|
|
var sql = "SELECT idsc.ins_deelsrtcontrole_key"
|
|
+ " FROM ins_deelsrtcontrole idsc"
|
|
+ " WHERE idsc.ins_deel_key = " + pins_deel_key
|
|
+ " AND idsc.ins_srtcontrole_key = " + params.srtcont_key
|
|
+ " AND idsc.ins_deelsrtcontrole_status IN (6)";
|
|
var oRs = Oracle.Execute(sql);
|
|
var hasInspect = !oRs.eof;
|
|
oRs.Close();
|
|
|
|
var sql = "SELECT insp.ins_deelsrtcontrole_key"
|
|
+ " , insp.ins_deelsrtcontrole_status"
|
|
+ " , insp.vervaldatum"
|
|
+ " , insp.isc_mode"
|
|
// Moment inspectie pas kunnen opslaan op of na geplande inspectiedatum.
|
|
// Is in de moment modus de invoer na het volgende berekende inspectietijdstip? Voor interval modus is dit altijd het geval.
|
|
// Als er nog nooit is geinspecteerd en er is er nog geen ingepland dan is het ook ok.
|
|
// Als de inspectie gestart of gereed gemeld is dan is het ook ok, want anders had de inspectie nooit begonnen mogen worden.
|
|
+ " , CASE"
|
|
+ " WHEN insp.isc_mode = 1"
|
|
+ " THEN 1"
|
|
+ " WHEN (insp.ins_deelsrtcontrole_status IS NULL AND 1 = " + (hasInspect? 0 : 1) + ") OR" // Er is nog nooit geinspecteerd en er is er geen ingepland.
|
|
+ " insp.ins_deelsrtcontrole_status = 2 OR"
|
|
+ " insp.ins_deelsrtcontrole_status = 5"
|
|
+ " THEN 1"
|
|
+ " WHEN insp.ins_deelsrtcontrole_status = 6 AND" // insp.isc_mode = 0 want anders is de vorige when geldig.
|
|
+ " SYSDATE >= CASE insp.eenheid"
|
|
+ " WHEN 0"
|
|
+ " THEN TRUNC (insp.inspectie_next, 'HH')"
|
|
+ " ELSE TRUNC (insp.inspectie_next, 'DD')"
|
|
+ " END"
|
|
+ " THEN 1"
|
|
+ " WHEN insp.ins_deelsrtcontrole_status = 0 AND"
|
|
+ " SYSDATE >= COALESCE (CASE insp.eenheid" // insp.isc_mode = 0 want anders is de vorige when geldig.
|
|
+ " WHEN 0"
|
|
+ " THEN TRUNC (insp.plandatum, 'HH')"
|
|
+ " ELSE TRUNC (insp.plandatum, 'DD') END"
|
|
+ " , CASE insp.eenheid"
|
|
+ " WHEN 0"
|
|
+ " THEN TRUNC (insp.inspectie_next, 'HH')"
|
|
+ " ELSE TRUNC (insp.inspectie_next, 'DD')"
|
|
+ " END)"
|
|
+ " THEN 1"
|
|
+ " ELSE 0"
|
|
+ " END invoerAfterNext"
|
|
+ " FROM (SELECT idsc.ins_deelsrtcontrole_key"
|
|
+ " , ins_deelsrtcontrole_datum"
|
|
+ " , idsc.ins_deelsrtcontrole_status"
|
|
+ " , xcp.ins_srtcontroledl_xcp_eind vervaldatum"
|
|
+ " , isc.ins_srtcontrole_mode isc_mode"
|
|
+ " , COALESCE (xcp.ins_srtcontroledl_xcp_eenheid, isc.ins_srtcontrole_eenheid) eenheid"
|
|
+ " , idsc.ins_deelsrtcontrole_plandatum plandatum"
|
|
+ " , CASE"
|
|
+ " WHEN 1 = " + (hasInspect? 0 : 1) // lastinspect IS NULL
|
|
+ " THEN (SELECT d.ins_deel_aanmaak FROM ins_deel d WHERE d.ins_deel_key = " + pins_deel_key + ")"
|
|
+ " WHEN idsc.ins_deelsrtcontrole_status IN (0, 2)"
|
|
+ " THEN ins_deelsrtcontrole_datum_org"
|
|
+ " ELSE fac.nextcyclusdate(CASE"
|
|
+ " WHEN isc.ins_srtcontrole_mode = 0"
|
|
+ " THEN idsc.ins_deelsrtcontrole_datum_org" // Moment modus (0). Uitgaan van eigenlijke/orginele inspectiedatum.
|
|
+ " ELSE idsc.ins_deelsrtcontrole_datum" // Interval modus (1). Uitgaan van werkelijke inspectiedatum.
|
|
+ " END"
|
|
+ " , isc.ins_srtcontrole_mode"
|
|
+ " , COALESCE(xcp.ins_srtcontroledl_xcp_eenheid, isc.ins_srtcontrole_eenheid)"
|
|
+ " , COALESCE(xcp.ins_srtcontroledl_xcp_periode, isc.ins_srtcontrole_periode)"
|
|
+ " , COALESCE(xcp.ins_srtcontroledl_xcp_bits, isc.ins_srtcontrole_bits)"
|
|
+ " , 1)"
|
|
+ " END inspectie_next"
|
|
+ " FROM ins_srtcontrole isc"
|
|
+ " , ins_deelsrtcontrole idsc"
|
|
+ " , ins_srtcontroledl_xcp xcp"
|
|
+ " WHERE isc.ins_srtcontrole_key = idsc.ins_srtcontrole_key(+)" // Er kan nog voor de eerste keer geinspecteerd moeten worden.
|
|
+ " AND isc.ins_srtcontrole_key = xcp.ins_srtcontrole_key(+)"
|
|
+ " AND xcp.ins_deel_key(+) = " + pins_deel_key
|
|
+ " AND idsc.ins_deel_key(+) = " + pins_deel_key
|
|
+ " AND isc.ins_srtcontrole_key = " + params.srtcont_key
|
|
+ (params.deelsrtcont_key > 0
|
|
? " AND idsc.ins_deelsrtcontrole_key = " + params.deelsrtcont_key
|
|
: " AND (idsc.ins_deelsrtcontrole_key IS NULL OR"
|
|
+ " idsc.ins_deelsrtcontrole_key = (SELECT MAX(idsc2.ins_deelsrtcontrole_key)"
|
|
+ " FROM ins_deelsrtcontrole idsc2"
|
|
+ " WHERE idsc2.ins_deel_key = " + pins_deel_key
|
|
+ " AND idsc2.ins_srtcontrole_key = " + params.srtcont_key + "))")
|
|
+ " ) insp"
|
|
+ " ORDER BY insp.ins_deelsrtcontrole_datum DESC";
|
|
var oRs = Oracle.Execute(sql);
|
|
// Waarden moeten aanwezig zijn. Mocht dat niet zo zijn dan is er iets fout.
|
|
// Als er nog nooit een inspectie is geweest wordt de status -1.
|
|
// Als de laatste inspectie is afgerond (stutus is 6) moet er een nieuwe inspectie gestart worden.
|
|
var ins_deelsrtcontrole_status = oRs("ins_deelsrtcontrole_status").Value != null? oRs("ins_deelsrtcontrole_status").Value : -1;
|
|
var vervaldatum = oRs("vervaldatum").Value != null? new Date(oRs("vervaldatum").Value) : null;
|
|
var vervallen = vervaldatum != null && vervaldatum < new Date();
|
|
var invoerAfterNext = oRs("invoerAfterNext").Value == 1;
|
|
oRs.Close();
|
|
|
|
iresult.invoerAfterNext = invoerAfterNext;
|
|
|
|
// Als de inspectie vervallen is moet je alleen nog de lopende inspecties (ingepland of later) kunnen gereedmelden en/of afronden,
|
|
// zodat deze inspectie afgerond kan worden. Nieuwe inspectie kunnen nooit meer beginnen.
|
|
// Eerste inspectie of verwerkte inspectie kan niet gewijzigd worden.
|
|
iresult.canInspEdit = ((iresult.canInspect && ins_deelsrtcontrole_status != -1 && ins_deelsrtcontrole_status != 6) ||
|
|
(iresult.canChangeAfg && ins_deelsrtcontrole_status == 6)) &&
|
|
!vervallen && actief;
|
|
iresult.canInspShow = iresult.readuse && !vervallen && (ins_deelsrtcontrole_status >= 0);
|
|
// Bij eerste inspectie of verwerkte inspectie kan er gepland worden.
|
|
iresult.canInspPlan = iresult.canInspect && !vervallen && (ins_deelsrtcontrole_status == -1 || ins_deelsrtcontrole_status == 6) && actief;
|
|
// Bij eerste inspectie, geplande inspectie of verwerkte inspectie kan er gestart worden.
|
|
iresult.canInspStart = iresult.canInspect && invoerAfterNext && !vervallen &&
|
|
(ins_deelsrtcontrole_status <= 0 || ins_deelsrtcontrole_status == 6) && actief;
|
|
// Bij eerste inspectie, geplande inspectie, gestarte inspectie of verwerkte inspectie kan er gereedgemeld/afgerond worden.
|
|
iresult.canInspClose = iresult.canInspect && invoerAfterNext &&
|
|
((!vervallen && (ins_deelsrtcontrole_status < 5 || ins_deelsrtcontrole_status == 6)) ||
|
|
(ins_deelsrtcontrole_status == 0 || ins_deelsrtcontrole_status == 2)) &&
|
|
actief;
|
|
// Alleen als de inspectie gereedgemeld is kan afgerond worden.
|
|
iresult.canInspFinish = iresult.canInspect && invoerAfterNext && ins_deelsrtcontrole_status == 5 && actief;
|
|
}
|
|
else
|
|
iresult.invoerAfterNext = true;
|
|
}
|
|
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;
|
|
|
|
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")
|
|
{
|
|
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
|
|
|
|
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.
|
|
// Let op: WEB_INSMSU is niet discipline gebonden en zit dus niet in iresult
|
|
var autparamsINSMSU = user.checkAutorisation("WEB_INSMSU", true);
|
|
iresult.canChangeAfg = autparamsINSMSU && autparamsINSMSU.PRSwritelevel < 9 && autparamsINSMSU.ALGwritelevel < 9; // Wijzigen Afgeronde gegevens.
|
|
iresult.readuse = iresult.canRead("WEB_INSUSE"); // Inzien.
|
|
iresult.canChangeXcp = iresult.canWrite("WEB_INSMAN"); // Interval kenmerken/parameters wijzigen (waarden in ins_srtcontroledl_xcp tabel).
|
|
return iresult;
|
|
}
|
|
}
|
|
%> |