Files
Facilitor/APPL/INS/ins.inc
Maykel Geerdink 3d0c496cec HCAS#36946: Afgeronde taak nog kunnen aanpassen/verwijderen.
svn path=/Website/trunk/; revision=30020
2016-07-12 10:24:42 +00:00

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;
}
}
%>