Files
Facilitor/APPL/MLD/mld.inc

5357 lines
325 KiB
C++
Raw Blame History

<% /*
$Revision$
$Id$
*/ %>
<%
mld = {setmeldingstatus:
function (mld_key, mld_status_key)
{
var sql = "BEGIN mld.setmeldingstatus(" + mld_key + ", " + mld_status_key + ", " + user_key + "); END;"
Oracle.Execute(sql);
// Deze zet de status en doet dan bijpassende tracking en notificatie
// zou leuk zijn om true of false op te leveren naar gelang de status echt anders is geworden
},
setopdrachtstatus:
function (opdr_key, opdr_status_key, uitvoerende)
{
// Deze zet de status en doet dan bijpassende tracking en notificatie
var sql = "BEGIN mld.setopdrachtstatus(" + opdr_key + ", " + opdr_status_key + ", " + user_key + "); END;"
Oracle.Execute(sql);
// Nu nog "ORDMLI" (interne uitvoerder) of "ORDMLE" (externe uitvoerder) tracking indien status op uitgegeven (5) wordt gezet
if (opdr_status_key == 5 && uitvoerende > 0) // Status wordt op 5 gezet indien opdracht niet ter fiattering wordt aangeboden
mld.trackuitvoerende(opdr_key, uitvoerende);
},
updatemeldingstatus:
function (mld_key, closeit)
{
// Functie MLD.updatemeldingstatus(mld_key, close_call, user_key) moet aangeroepen worden na veranderingen in mld_opdr
// en als de melding nog niet wordt afgemeld. We weten nog niet of de melding wordt afgemeld of al is afgemeld
// Als er open opdrachten zijn wordt de melding op Uitgegeven gezet als dat al niet zo was
// Als er uitsluitend Verwerkte opdrachten zijn, dan worden de melding ook verwerkt als dat al niet zo was
var sql = "BEGIN mld.updatemeldingstatus (" + mld_key + ", "+closeit+", " + user_key + "); END;";
Oracle.Execute(sql);
},
autoapprovefactuur:
function (opdr_key)
{ // Zijn er bijbehorende facturen die al zijn ingevoerd met de status "Ingevoerd(2)" die nog geapproved moeten worden?
sql = "SELECT f.fin_factuur_key"
+ " FROM fin_factuur f"
+ " WHERE f.mld_opdr_key = " + opdr_key
+ " AND f.fin_factuur_statuses_key = 2"
+ " ORDER BY f.fin_factuur_key";
var oRs = Oracle.Execute(sql);
while (!oRs.eof)
{ // Autofiatteer de facturen als dat zo ingesteld is.
// Functie kijkt zelf of autofiatteren aanstaat.
sql = "BEGIN fin.autoapprovefactuur(" + oRs("fin_factuur_key").Value + "); END;";
Oracle.Execute(sql);
oRs.MoveNext();
}
oRs.Close();
},
// Afronden insert/update van een melding.
finishmeldingiu:
function (mld_key)
{ // Eventuele (gewijzigde) objecten zijn nu ook opgeslagen.
// Nu kan de definitieve mld_melding.mld_melding_einddatum_std en mld_melding.mld_melding_t_uitvoertijd bepaald en gezet worden.
// 1) Eerst de mld_melding_einddatum_std
// In update mag database functie mld.geteinddatum() zelf niet gebruikt worden omdat deze ook in de trigger wordt aangeroepen.
// De foutmelding is dan: ORA-04091: table UWVA.MLD_MELDING is mutating, trigger/function may not see it, ORA-06512: at "UWVA.MLD", line 966
// Daarom eerst bepalen en dan zetten.
var sql = "SELECT mld.geteinddatum(mld_melding_key) einddatum"
+ " , mld_melding_einddatum_std"
+ " FROM mld_melding"
+ " WHERE mld_melding_key = " + mld_key;
var oRs = Oracle.Execute(sql);
var einddatum = new Date(oRs("einddatum").Value);
oRs.Close();
sql = "UPDATE mld_melding"
+ " SET mld_melding_einddatum_std = " + einddatum.toSQL(true)
+ " WHERE mld_melding_key = " + mld_key;
Oracle.Execute(sql);
// 2) Nu de mld_melding_t_uitvoertijd
sql = "SELECT uitv.std_uitv_type.tijdsduur std_tijdsduur"
+ " , uitv.std_uitv_type.eenheid std_eenheid"
+ " , uitv.uitv_type.tijdsduur old_tijdsduur"
+ " , uitv.uitv_type.eenheid old_eenheid"
+ " FROM (SELECT mld.getstduitvoer (mld_melding_key) std_uitv_type"
+ " , mld_melding_t_uitvoertijd uitv_type"
+ " FROM mld_melding"
+ " WHERE mld_melding_key = " + mld_key + ") uitv";
oRs = Oracle.Execute(sql);
var std_uitvoertijd = oRs("std_tijdsduur").Value;
var std_uitvoertijd_eenheid = oRs("std_eenheid").Value;
var old_uitvoertijd = oRs("old_tijdsduur").Value;
var old_uitvoertijd_eenheid = oRs("old_eenheid").Value;
oRs.Close();
sql = "UPDATE mld_melding m"
+ " SET m.mld_melding_t_uitvoertijd.tijdsduur = " + std_uitvoertijd
+ " , m.mld_melding_t_uitvoertijd.eenheid = " + safe.quoted_sql(std_uitvoertijd_eenheid)
+ " WHERE m.mld_melding_key = " + mld_key;
Oracle.Execute(sql);
},
trackbehandelaar:
function (mld_key, behandelaar_key, nonoti) // Nonoti onderdrukt notificatie
{
var sql = "SELECT pf.prs_perslid_naam_full FROM prs_v_perslid_fullnames_all pf "
+ "WHERE prs_perslid_key = " + behandelaar_key;
var loRs = Oracle.Execute(sql);
if ( !loRs.eof )
var behandelaar_str = L("lcl_mld_is_mldbeh_to") + loRs(0).Value;
else
var behandelaar_str = L("lcl_mld_is_mldbeh_none");
loRs.close();
shared.trackaction((nonoti?"#":"") + "MLDBEH", mld_key, behandelaar_str);
},
trackmeldingupdate:
// Let op: dit moet wellicht niet altijd (aangeroepen na save)
function (mld_key, ptxt)
{
shared.trackaction("MLDUPD", mld_key, ptxt);
},
trackaddnote:
// Let op: dit moet wellicht niet altijd (aangeroepen na save)
function (mld_key, ptxt)
{
shared.trackaction("MLDNOT", mld_key, ptxt);
},
trackuitvoerende:
function (opdr_key, uitvoerende)
{
// Is uitvoerende intern of extern?
sql = "SELECT u.intern"
+ " FROM mld_v_uitvoerende u"
+ " WHERE u.mld_uitvoerende_key = " + uitvoerende
var oRs = Oracle.Execute(sql);
// type "P" (persoon) is intern en type "B" (bedrijf) is afhankelijk van "prs_bedrijf_intern" intern of extern.
var intern = (oRs("intern").Value);
oRs.close();
shared.trackaction((intern? "ORDMLI" : "ORDMLE"), opdr_key);
},
trackopdrachtupdate:
function (opdr_key, ptxt)
{
shared.trackaction("ORDUPD", opdr_key, ptxt);
},
trackopdreinddatumupdate:
function (opdr_key, ptxt)
{
shared.trackaction("ORDDAT", opdr_key, ptxt);
},
trackmeldingafronden:
function (mld_key, ptxt)
{
shared.trackaction("MLDAFR", mld_key, ptxt);
},
opdr_hltrsm:
function (opdr_key, params)
{
if (params.resume)
{ // Als er al een opdracht actief is en sequentieel is aangevinkt, dan moet de actieve opdracht onderbroken worden.
// Als de opdrachten niet sequentieel uitgevoerd moeten worden, dan wordt er ook geen actieve opdracht gevonden.
var activeopdr = mld.getactiveopdracht(opdr_key);
if (activeopdr.opdr_key > 0)
{ // De actieve opdracht onderbreken.
shared.trackaction("ORDHLT", activeopdr.opdr_key);
Oracle.Execute("UPDATE mld_opdr SET mld_opdr_halted = 1 WHERE mld_opdr_key = " + activeopdr.opdr_key);
}
}
var sql = "SELECT mld_opdr_halted"
+ " FROM mld_opdr"
+ " WHERE mld_opdr_key = " + opdr_key;
var oRs = Oracle.Execute(sql);
var halted = oRs("mld_opdr_halted").Value == 1;
oRs.Close();
if (params.halt && !halted)
{
shared.trackaction("ORDHLT", opdr_key);
Oracle.Execute("UPDATE mld_opdr SET mld_opdr_halted = 1 WHERE mld_opdr_key = " + opdr_key);
}
if (params.resume && halted)
{
shared.trackaction("ORDRSM", opdr_key);
Oracle.Execute("UPDATE mld_opdr SET mld_opdr_halted = 0 WHERE mld_opdr_key = " + opdr_key);
}
},
saveobjects:
function (mld_key, obj_arr)
{ // Objecten die worden verwijderd bepalen i.v.m. tracking.
var plaatsaanduiding = (S("prs_wpprefix_objectid") == 1
? " CASE"
+ " WHEN o.prs_werkplek_omschrijving IS NOT NULL"
+ " THEN ' ' || o.prs_werkplek_omschrijving"
+ " ELSE ''"
+ " END"
: "''");
var sql = "SELECT ins_deel_omschrijving || " + plaatsaanduiding + " || ' (' || " + lcl.xsql('s.ins_srtdeel_omschrijving', 's.ins_srtdeel_key') + " || ')' deel "
+ " FROM mld_melding_object mo"
+ " , ins_deel d"
+ " , ins_srtdeel s"
+ " , ins_v_alg_overzicht o"
+ " WHERE mo.ins_deel_key = d.ins_deel_key"
+ " AND d.ins_srtdeel_key = s.ins_srtdeel_key"
+ " AND d.ins_alg_ruimte_key = o.alg_onroerendgoed_keys(+)"
+ " AND d.ins_alg_ruimte_type = o.alg_onroerendgoed_type(+)"
+ " AND d.ins_alg_locatie_key = o.alg_locatie_key(+)"
+ " AND mo.mld_melding_key = " + mld_key
+ (obj_arr.length > 0
? " AND d.ins_deel_key NOT IN (" + obj_arr.join(",") + ")"
: "");
var oRs = Oracle.Execute(sql);
var first = true;
var deleted_objects = "";
while(!oRs.eof)
{
if (first)
{
deleted_objects = L("lcl_mld_del_obj") + ": ";
first = false;
}
else
deleted_objects += ",\n";
deleted_objects += oRs("deel").Value;
oRs.MoveNext();
}
oRs.Close();
var added_objects = "";
if (obj_arr.length > 0)
{
// Objecten die worden toegevoegd bepalen i.v.m. tracking.
sql = "SELECT ins_deel_omschrijving || " + plaatsaanduiding + " || ' (' || " + lcl.xsql('s.ins_srtdeel_omschrijving', 's.ins_srtdeel_key') + " || ')' deel "
+ " FROM ins_deel d"
+ " , ins_srtdeel s"
+ " , ins_v_alg_overzicht o"
+ " WHERE d.ins_srtdeel_key = s.ins_srtdeel_key"
+ " AND d.ins_deel_key NOT IN (SELECT mo.ins_deel_key FROM mld_melding_object mo WHERE mo.mld_melding_key = " + mld_key + ")"
+ " AND d.ins_alg_ruimte_key = o.alg_onroerendgoed_keys(+)"
+ " AND d.ins_alg_ruimte_type = o.alg_onroerendgoed_type(+)"
+ " AND d.ins_alg_locatie_key = o.alg_locatie_key(+)"
+ (obj_arr.length > 0
? " AND d.ins_deel_key IN (" + obj_arr.join(",") + ")"
: "");
oRs = Oracle.Execute(sql);
first = true;
while(!oRs.eof)
{
if (first)
{
added_objects = L("lcl_mld_add_obj") + ": ";
first = false;
}
else
added_objects += ",\n";
added_objects += oRs("deel").Value;
oRs.MoveNext();
}
oRs.Close();
}
// Objecten verwijderen.
sql = " DELETE mld_melding_object"
+ " WHERE mld_melding_key = " + mld_key
+ (obj_arr.length != 0
? " AND ins_deel_key NOT IN (" + obj_arr.join(",") + ")"
: "")
Oracle.Execute(sql);
// Objecten opslaan.
if (obj_arr.length != 0)
{
sql = "INSERT INTO mld_melding_object"
+ " (mld_melding_key, ins_deel_key)"
+ " SELECT " + mld_key
+ " , ins_deel_key"
+ " FROM ins_v_aanwezigdeel"
+ " WHERE ins_deel_key IN (" + obj_arr.join(",") + ")"
+ " AND (ins_deel_vervaldatum IS NULL OR ins_deel_vervaldatum > TRUNC(SYSDATE))"
+ " AND ins_deel_key NOT IN"
+ " (SELECT ins_deel_key FROM mld_v_aanwezigmelding_object WHERE mld_melding_key = " + mld_key + ")";
Oracle.Execute(sql);
}
// Track tekst teruggeven.
return (deleted_objects != ""? deleted_objects + "\n" : "") + added_objects;
},
notifyopdrachtgoedkeuren:
function (opdr_key)
{ // Alle goedkeurders een notificatie (ORD2GO) sturen voor de volgend goedkeuring.
Oracle.Execute("BEGIN mld.notifyopdrgoedkeurders(" + opdr_key + "); END;");
},
nextworkflowstep:
// Proceed with the next step of the workflow
// p_mld_key: key of the call to be continued
// p_success gives state of the executed call:
// 0 = rejected (deprecated since 4.70)
// 1 = completed
// -1 = initial (the originating call)
function (p_mld_key, p_success)
{
if (S("mld_enable_workflow") == 1) {
var sql = "BEGIN mld.mld_nextworkflowstep (" + p_mld_key + ", " + p_success + "); END;";
Oracle.Execute(sql);
}
},
gettrackdate_sql:
function (tcode)
{
return "(SELECT t.fac_tracking_datum "
+ " FROM fac_tracking t, fac_srtnotificatie st"
+ " WHERE t.fac_srtnotificatie_key = st.fac_srtnotificatie_key"
+ " AND t.fac_tracking_refkey = m.mld_melding_key"
+ " AND st.fac_srtnotificatie_code = " + safe.quoted_sql(tcode) + ")";
},
gettrackuser_sql:
function (tcode)
{
return " (SELECT t.prs_perslid_key "
+ " FROM fac_tracking t, fac_srtnotificatie st"
+ " WHERE t.fac_srtnotificatie_key = st.fac_srtnotificatie_key"
+ " AND t.fac_tracking_refkey = m.mld_melding_key"
+ " AND st.fac_srtnotificatie_code = " + safe.quoted_sql(tcode) + ")";
},
getFirstApprover:
function (mld_info, mld_opdr)
{
// Bepalen eerste persoon om te fiatteren.
var approver_key = -1;
var prsname = "";
var pkey = -1;
var for_approval = false;
// Als de kostenplaats bij de opdracht overruled is dan wordt altijd tegen het profiel van de BO-medewerker getest.
if (mld_info.mld_kk == 1 && mld_info.kostenpl_key == mld_opdr.kp_key)
pkey = mld_info.melder_key; // Melder van de melding.
else
{ // Terugzoeken wie *oorspronkelijk* de opdrachtaanmaker was (De user op dat moment).
var sql = "SELECT fac.gettrackinguserkey('ORDNEW', " + mld_opdr.opdr_key + ") opdrachtaanmaker FROM DUAL";
var oRs = Oracle.Execute(sql);
pkey = oRs("opdrachtaanmaker").Value || mld_info.behandel_key || user_key;
oRs.Close();
}
if ((S("mld_use_order_approval") &&
mld_opdr.t_cost > 0 &&
(mld_opdr.t_cost > S("can_selfapprove") || budget.exceeds_profiel(mld_opdr.t_cost, pkey, mld_info.disc))) // Ik kan niet zelf fiatteren of kosten overschrijden het profiel
)
{ // niet automatisch fiat(!)teren en profiel wordt overschreden.
for_approval = true;
}
if (mld_opdr.opdr_handfiat || // Vrijwillig. Wel even checken of er een fiatteur gevonden kan worden.
for_approval ||
(S("mld_use_order_approval") &&
mld_opdr.t_cost > 0 &&
(mld_opdr.t_cost > S("can_selfapprove"))) // Ik kan niet zelf fiatteren of kosten overschrijden het profiel.
)
{
for_approval = true;
// Wie moet op verzoek goedkeuren voor deze kostenplaats, terwijl het bedrag wellicht onbekend is?
// Eerste fiatteur (pkey) mag niet fiatteren want het zit boven zijn profiel limiet.
// De melder melding of the opdrachtaanmaker van de melding (pkey) mag niet zelf goedkeuren boven het bedrag can_selfapprove.
// totaalbedrag > can_selfapprove => prs_key als exclude key meegeven.
if (mld_opdr.t_cost > S("can_selfapprove"))
approver_key = prs.getKpVerantwoordelijkeExcept(mld_opdr.kp_key, pkey);
else
approver_key = prs.getKpVerantwoordelijke(mld_opdr.kp_key);
if (approver_key > -1)
{
var sql = "SELECT prs_perslid_naam_full FROM prs_v_perslid_fullnames_all WHERE prs_perslid_key = " + approver_key;
var oRs = Oracle.Execute(sql);
var prsname = oRs("prs_perslid_naam_full").Value;
oRs.Close();
}
}
return {for_approval: for_approval, approver_key: approver_key, approver_name: prsname}
},
getrefmoduletext:
// Lever de string behorend bij kanverwijzen bit
function (p)
{
var ps = "??";
p = parseInt(p, 10);
switch (p) {
case 1: { ps = L("lcl_mld_stdmelding_own"); break; } // Melding (M)
case 2: { ps = L("lcl_opdr_info"); break; } // Opdracht [O]
case 4: { ps = L("lcl_res_reservation"); break; } // Reservering (R)
case 8: { ps = L("lcl_bes_bestelling"); break; } // Bestelling (B)
case 16: { ps = L("lcl_bes_bestelopdracht"); break; } // Bestelopdr [X] /* reserved for future use */
case 32: { ps = L("lcl_contract"); break; } // Contract [C] /* reserved for future use */
case 64: { ps = L("lcl_fin_invoice"); break; } // Factuur [F] /* reserved for future use */
case 128: { ps = L("lcl_mld_stdmelding_all"); break; } // Alle meldingen [M]
}
return ps;
},
getpriotext:
// Lever de string behorend bij prioriteit p
function (p)
{
var ps = "??";
p = parseInt(p, 10);
switch (p) {
case 1: { ps = L("lcl_mld_urg_kritiek"); break; }
case 2: { ps = L("lcl_mld_urg_hoog"); break; }
case 3: { ps = L("lcl_mld_urg_normaal"); break; }
case 4: { ps = L("lcl_mld_urg_laag"); break; }
}
return ps;
},
getmldstatustext:
function (p)
{
var statustekst = "??";
var s = parseInt(p, 10);
switch (s) {
case 0: { statustekst = L("lcl_mld_pending"); break; }
case 1: { statustekst = L("lcl_mld_afgewezen"); break; }
case 2: { statustekst = L("lcl_mld_ingevoerd"); break; }
case 3: { statustekst = L("lcl_mld_ingezien"); break; }
case 4: { statustekst = L("lcl_mld_geaccepteerd"); break; }
case 5: { statustekst = L("lcl_mld_afgemeld"); break; }
case 6: { statustekst = L("lcl_mld_verwerkt"); break; }
case 7: { statustekst = L("lcl_mld_uitgegeven"); break; }
case 99: { statustekst = L("lcl_mld_not_solved"); break; }
case 991: { statustekst = L("lcl_mld_offerte_accept"); break; }
case 992: { statustekst = L("lcl_mld_offerte_is_accept"); break; }
}
if (Session("logging")>0)
statustekst += " ("+String(p)+")";
return statustekst;
},
// geeft de meldingstatus terug, maar checkt bij status 4 of dat nieuw(4) of oud(99) is.
// mld_key geef ik mee omdat ik die toch altijd al weet; ik had daarmee de status natuurlijk
// hier ook zelf kunnen bepalen.
getextendedmldstatus:
function (s, pmld_key)
{
var result = s;
if (s == 4)
{ // Status is nu 4 (Geaccepteerd). Als er opdrachten zijn maar geen open opdrachten, dan wordt de status 99 (Niet opgelost).
var result = 4;
var sql = "SELECT COUNT(mld_opdr_key) nrOrders FROM mld_opdr WHERE mld_melding_key = " + pmld_key;
var oRs = Oracle.Execute(sql);
var nrOrders = oRs("nrOrders").Value;
oRs.Close();
if (nrOrders > 0)
{ // Aantal lopende opdrachten
sql = "SELECT COUNT(mld_opdr_key) nrOpen"
+ " FROM mld_opdr o"
+ " WHERE mld_melding_key = " + pmld_key
+ " AND o.mld_statusopdr_key NOT IN (1, 2, 6, 7, 9)";
oRs = Oracle.Execute(sql);
var nrOpen = oRs("nrOpen").Value;
oRs.Close();
if (nrOpen == 0)
{ // Status is nu 99 (Niet opgelost).
// Als de laatste opdrachten een offerte is dan wordt de status 991 of 992 (Offerte acceptatie of Offerte geaccepteerd).
// De status is dan afhankelijk van het aantal geaccepteerde offertes.
result = 99;
sql = "SELECT mo.mld_typeopdr_isofferte"
+ " FROM mld_opdr o1"
+ " , mld_typeopdr mo"
+ " WHERE o1.mld_typeopdr_key = mo.mld_typeopdr_key"
+ " AND o1.mld_opdr_key = (SELECT MAX(o2.mld_opdr_key)"
+ " FROM mld_opdr o2"
+ " WHERE o2.mld_melding_key = " + pmld_key + ")";
oRs = Oracle.Execute(sql);
var lastOpdrIsOff = oRs("mld_typeopdr_isofferte").Value == 1;
oRs.Close();
if (lastOpdrIsOff)
{ // 99 = Niet opgelost
// 991 = Offerte acceptatie
// 992 = Offerte geaccepteerd
// Voorbeeld status van de melding met twee offerte opdrachten:
// Statussen
// Offerte 1: 6 6 2 2
// Offerte 2: 6 9 9 2
// nrToAccept: 2 1 0 0
// nrAccept: 0 1 1 0
// Melding status: 991 992 992 99
// Aantal te accepteren offertes
sql = "SELECT COUNT(o.mld_statusopdr_key) nrToAccept"
+ " FROM mld_opdr o"
+ " WHERE mld_melding_key = " + pmld_key
+ " AND o.mld_statusopdr_key = 6"
+ " AND o.mld_opdr_key > COALESCE((SELECT MAX (o1.mld_opdr_key)"
+ " FROM mld_opdr o1"
+ " , mld_typeopdr mo1"
+ " WHERE o1.mld_typeopdr_key = mo1.mld_typeopdr_key"
+ " AND mo1.mld_typeopdr_isofferte = 0"
+ " AND o1.mld_melding_key = " + pmld_key + "), 0)"
oRs = Oracle.Execute(sql);
var nrToAccept = oRs("nrToAccept").Value;
oRs.Close();
// Aantal geaccepteerde offertes
sql = "SELECT COUNT(o.mld_statusopdr_key) nrAccept"
+ " FROM mld_opdr o"
+ " WHERE mld_melding_key = " + pmld_key
+ " AND o.mld_statusopdr_key = 9"
+ " AND o.mld_opdr_key > COALESCE((SELECT MAX (o1.mld_opdr_key)"
+ " FROM mld_opdr o1"
+ " , mld_typeopdr mo1"
+ " WHERE o1.mld_typeopdr_key = mo1.mld_typeopdr_key"
+ " AND mo1.mld_typeopdr_isofferte = 0"
+ " AND o1.mld_melding_key = " + pmld_key + "), 0)"
oRs = Oracle.Execute(sql);
var nrAccept = oRs("nrAccept").Value;
oRs.Close();
// Als een offerte is geaccepteerd dan status 992.
// Als er geen offerte is geaccepteerd dan kijken of er nog offerte afgemeld zijn die geaccepteerd/afgewezen kunnen worden, dan status 991 anders 99
result = (nrAccept == 1? 992 : (nrToAccept > 0? 991 : 99));
}
}
}
}
return result;
},
getextendedmldstatustext:
function (pstatus, pmld_key)
{
var xstatus = mld.getextendedmldstatus(pstatus, pmld_key);
return mld.getmldstatustext(xstatus);
},
// Geeft de opdrachtstatus terug, maar checkt bij status 5 en 8, of de behandeling onderbroken/hervat is (ORDHLT/ORDRSM).
// De opdr_key geef ik mee omdat ik die toch altijd al weet; ik had daarmee de status natuurlijk hier ook zelf kunnen bepalen.
getextendedopdrstatus:
function (pstatus, popdr_key)
{
var result = pstatus;
if (pstatus == 8)
{
var sql = "SELECT fac.gettrackingdate ('ORDHLT', " + popdr_key + ") trackdatehlt"
+ " , fac.gettrackingdate ('ORDRSM', " + popdr_key + ") trackdatersm"
+ " FROM DUAL";
var oRs = Oracle.Execute(sql);
var trackdateHLT = oRs("trackdatehlt").Value != null? new Date(oRs("trackdatehlt").Value) : null;
var trackdateRSM = oRs("trackdatersm").Value != null? new Date(oRs("trackdatersm").Value) : null;
oRs.Close();
if (trackdateHLT != null && (trackdateRSM == null || trackdateHLT > trackdateRSM))
result = 81; // Onderbroken.
if (trackdateRSM != null && trackdateHLT < trackdateRSM)
result = 82; // Hervat.
}
return result;
},
getextendedopdrstatustext:
function (pstatus, popdr_key)
{
var xstatus = mld.getextendedopdrstatus(pstatus, popdr_key);
return status.getopdrstatustext(xstatus);
},
// bereken de SLA-einddatum gegeven onderstaande info
geteinddatum:
function (startdate, stdm_key, prio, geb_key, ruimte_key, obj_key)
{
var alg_key = 'NULL';
if (ruimte_key > 0)
alg_key = ruimte_key;
else
{
if (geb_key > 0)
alg_key = geb_key;
}
var sql = "SELECT mld.geteinddatum(" + startdate.toSQL(true) + ", " + stdm_key + ", " + prio + "," + alg_key + "," + (obj_key > 0? obj_key : "NULL") + ")"
+ " FROM DUAL";
var oRs = Oracle.Execute(sql);
var einddatum = new Date(oRs(0).Value);
oRs.Close();
return einddatum;
},
// bereken de SLA-einddatum gegeven onderstaande info
geteinddatumopdracht:
function _geteinddatumopdracht(mld_key, uitvoertijd, startdatum, sla_mode)
{
var sql = "SELECT mld_melding_einddatum"
+ " FROM mld_melding"
+ " WHERE mld_melding_key = " + mld_key;
var oRs = Oracle.Execute(sql);
var mld_einddatum = new Date(oRs("mld_melding_einddatum").Value);
oRs.Close();
if (uitvoertijd)
{
var sql = "SELECT mld.geteinddatum(" + mld_key + ", MLD_T_UITVOERTIJD(" + uitvoertijd.tijdsduur + ", " + safe.quoted_sql(uitvoertijd.eenheid) + "), " + startdatum.toSQL(true) + ")"
+ " FROM DUAL";
var oRs = Oracle.Execute(sql);
var einddatum = new Date(oRs(0).Value);
oRs.Close();
if (sla_mode == 1)
{
// Als setting mld_enforce_orderdates = 1, dan moeten de datums van de opdracht binnen de datums van de melding liggen.
if (S("mld_enforce_orderdates") == 1 && mld_einddatum.midnight() < einddatum.midnight())
einddatum = mld_einddatum;
}
}
else
{ // Uitvoerdatum is null of 0.
var einddatum = mld_einddatum; // De einddatum van de opdracht ligt nu binnen de datums van de melding.
// Voor nieuwe opdrachten is de default Einddatum gelijk aan de einddatum van de melding,
// tenzij die in het verleden ligt, dan is het de opdrachtstartdatum.
// Als setting mld_enforce_orderdates = 1, dan moeten de datums van de opdracht binnen de datums van de melding liggen.
if (S("mld_enforce_orderdates") != 1 && mld_einddatum.midnight() < new Date(startdatum).midnight())
einddatum = new Date(startdatum);
}
return einddatum;
},
getbedrijfuitvoertijd:
function (uitv_key)
{
var sql = "SELECT b.prs_bedrijf_t_uitvoertijd.tijdsduur tijdsduur"
+ " , b.prs_bedrijf_t_uitvoertijd.eenheid eenheid"
+ " FROM prs_bedrijf b"
+ " WHERE b.prs_bedrijf_key = " + uitv_key;
var oRs = Oracle.Execute(sql);
if (oRs.Eof || oRs("tijdsduur").Value == null) // oRs.Eof: Waarschijnlijk persoon
var uitvoertijd = null;
else
var uitvoertijd = {tijdsduur: oRs("tijdsduur").Value, eenheid: oRs("eenheid").Value};
oRs.Close();
return uitvoertijd;
},
getmeldinguitvoertijd:
function (mld_key)
{
var sql = "SELECT m.mld_melding_t_uitvoertijd.tijdsduur tijdsduur"
+ " , m.mld_melding_t_uitvoertijd.eenheid eenheid"
+ " FROM mld_melding m"
+ " WHERE m.mld_melding_key = " + mld_key;
var oRs = Oracle.Execute(sql);
if (oRs.eof || oRs("tijdsduur").Value == null)
var uitvoertijd = null;
else
var uitvoertijd = {tijdsduur: oRs("tijdsduur").Value, eenheid: oRs("eenheid").Value};
oRs.Close();
return uitvoertijd;
},
getactivehltopdracht:
function (popdr_key, mode, pprs_key, puitv_key)
{
// Is er een actieve opdracht of zijn er onderbroken opdrachten die sequentieel uigevoerd moeten worden.
var sql = "SELECT MAX(mld_opdr_key) mld_opdr_key"
+ " , MAX(sd.ins_srtdiscipline_prefix || o.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr) opdracht"
+ " , COUNT(mld_opdr_key) aantalopdr"
+ " FROM mld_opdr o"
+ " , mld_melding m"
+ " , mld_stdmelding s"
+ " , mld_discipline md"
+ " , ins_srtdiscipline sd"
+ " , mld_typeopdr top"
+ " , mld_v_uitvoerende mu"
+ " WHERE o.mld_melding_key = m.mld_melding_key"
+ " AND m.mld_stdmelding_key = s.mld_stdmelding_key"
+ " AND s.mld_ins_discipline_key = md.ins_discipline_key"
+ " AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key"
+ " AND o.mld_typeopdr_key = top.mld_typeopdr_key"
+ " AND o.mld_uitvoerende_keys = mu.mld_uitvoerende_key"
+ " AND o.prs_perslid_key = " + (pprs_key > 0? pprs_key : "(SELECT o2.prs_perslid_key FROM mld_opdr o2 WHERE o2.mld_opdr_key = " + popdr_key + ")")
+ " AND o.mld_uitvoerende_keys = " + (puitv_key > 0? puitv_key : "(SELECT o2.mld_uitvoerende_keys FROM mld_opdr o2 WHERE o2.mld_opdr_key = " + popdr_key + ")")
+ " AND o.mld_statusopdr_key = 8" // Alleen Actieve (Status Geaccepteerd(8)) opdrachten.
+ " AND top.mld_typeopdr_sequential = 1" // Alleen opdrachten die sequentieel uitgevoerd moeten worden.
+ (mode == "A"
? " AND o.mld_opdr_halted = 0"
: " AND o.mld_opdr_halted = 1")
+ " AND mu.intern = 1" // Alleen interne uitvoerders.
+ " AND mld_opdr_key != " + popdr_key;
var oRs = Oracle.Execute(sql);
var result = { opdr_key: oRs("mld_opdr_key").Value? oRs("mld_opdr_key").Value : -1,
opdracht: oRs("opdracht").Value? oRs("opdracht").Value : "",
aantal: oRs("aantalopdr").Value };
oRs.Close();
return result;
},
getactiveopdracht:
function (popdr_key)
{
return mld.getactivehltopdracht(popdr_key, "A"); // Mode "Actief"
},
getactiveopdracht:
function (popdr_key, pprs_key, puitv_key)
{
return mld.getactivehltopdracht(popdr_key, "A", pprs_key, puitv_key); // Mode "Actief"
},
gethltopdrachten:
function (popdr_key)
{
return mld.getactivehltopdracht(popdr_key, "H"); // Mode "Onderbroken"
},
keepFlexDocuments:
function(mld_key, old_stdm, stdmelding)
{
/* Match de srtkenmerk_key-s van de oude en nieuwe mld_stdmelding */
if (old_stdm != stdmelding)
{
__Log("Old MLD_STDMELDING_KEY: " + old_stdm + " New: " + stdmelding);
// pas op dat zelfs de vakgroep (mld_ins_discipline_key) gewijzigd kan zijn
var flexsql = "SELECT k_old.mld_kenmerk_key k_old"
+ " , k_new.mld_kenmerk_key k_new"
+ " FROM mld_srtkenmerk t"
+ " , mld_kenmerk k_old"
+ " , mld_kenmerk k_new"
+ " , mld_stdmelding s_old"
+ " , mld_stdmelding s_new"
+ " , mld_discipline d_new"
+ " , mld_discipline d_old"
+ " WHERE s_old.mld_stdmelding_key = " + old_stdm
+ " AND s_new.mld_stdmelding_key = " + stdmelding
+ " AND s_old.mld_ins_discipline_key = d_old.ins_discipline_key"
+ " AND s_new.mld_ins_discipline_key = d_new.ins_discipline_key"
+ " AND t.mld_srtkenmerk_kenmerktype IN ('F', 'E', 'M')"
+ " AND ( ( k_old.mld_stdmelding_key = s_old.mld_stdmelding_key"
+ " AND k_old.mld_kenmerk_niveau = 'S'"
+ " )"
+ " OR ( k_old.mld_stdmelding_key = s_old.mld_ins_discipline_key"
+ " AND k_old.mld_kenmerk_niveau = 'D'"
+ " )"
+ " OR ( k_old.mld_stdmelding_key = d_old.ins_srtdiscipline_key"
+ " AND k_old.mld_kenmerk_niveau = 'T'"
+ " )"
+ " )"
+ " AND ( ( k_new.mld_stdmelding_key = s_new.mld_stdmelding_key"
+ " AND k_new.mld_kenmerk_niveau = 'S'"
+ " )"
+ " OR ( k_new.mld_stdmelding_key = s_new.mld_ins_discipline_key"
+ " AND k_new.mld_kenmerk_niveau = 'D'"
+ " )"
+ " OR ( k_new.mld_stdmelding_key = d_new.ins_srtdiscipline_key"
+ " AND k_new.mld_kenmerk_niveau = 'T'"
+ " )"
+ " )"
+ " AND k_old.mld_kenmerk_verwijder IS NULL"
+ " AND k_new.mld_kenmerk_verwijder IS NULL"
+ " AND k_old.mld_srtkenmerk_key = t.mld_srtkenmerk_key"
+ " AND k_new.mld_srtkenmerk_key = t.mld_srtkenmerk_key"
+ " AND t.mld_srtkenmerk_verwijder IS NULL"
+ " AND k_old.mld_kenmerk_groep = k_new.mld_kenmerk_groep";
var subfolder = "MLD/" + subfolderKey("M", mld_key)
RenameFlexFolders(subfolder, flexsql);
}
},
getStatusSql:
function(mldstatus_str, alias)
{
var sql = "";
alias = alias || "mld_melding";
mldstatus_str = String(mldstatus_str);
if (mldstatus_str)
{
// Aantal openstaande opdrachten of offertes
// Openstaande opdrachten hebben de status 10, 3, 4 of 5.
// Openstaande offertes hebben de status 10, 3, 4, 5 of 6.
// Offerte Acceptatie: offerte met een opdracht status 6 ook als open zien.
var sql_opdr_be_open = " CASE (SELECT COUNT(o.mld_opdr_key)"
+ " FROM mld_opdr o"
+ " WHERE mld_melding_key = " + alias + ".mld_melding_key)"
+ " WHEN 0"
+ " THEN -1"
+ " ELSE (SELECT COUNT (o.mld_statusopdr_key)"
+ " FROM mld_opdr o"
+ " WHERE mld_melding_key = " + alias + ".mld_melding_key"
+ " AND o.mld_statusopdr_key NOT IN (1, 2, 6, 7, 9))"
+ " END";
// Aantal offertes niet in de status Afgewezen(1), Afgekeurd(2), Afgemeld(6) of Verwerkt(7).
// Omdat de sql_offertes_afgerond en sql_offertes_toaccept altijd worden gebruikt
// in combinatie met "AND sql_opdr_be_open = 0" en/of "AND m.mld_melding_status = 4" is "o.mld_statusopdr_key = 9"
// ook mogelijk i.p.v. o.mld_statusopdr_key NOT IN (1, 2, 6, 7). De statusen voor open opdrachten vallen er dan toch buiten.
// Een offerte die afgemeld, afgekeurd, afgewezen of verwerkt wordt, veranderd de status van de melding niet.
// Een offerte die afgerond(9) wordt veranderd de status van de melding van "Offerte acceptatie" naar "Offerte geaccepteerd".
// a) Aantal afgeronde(9) offertes (die niet status 1, 2, 6 en/of 7 hebben)
// (Er zijn geen opdrachten) => AND mld_opdr_key > 0
// b) Aantal afgeronde(9) offertes/opdrachten (die geen status 1, 2, 6 en/of 7 hebben)
// (Er zijn opdrachten van eerdere offertes) => AND mld_opdr_key > MAX(o1.mld_opdr_key)
var sql_offertes_afgerond = " (SELECT COUNT(o.mld_statusopdr_key)"
+ " FROM mld_opdr o"
+ " , mld_typeopdr mo"
+ " WHERE o.mld_typeopdr_key = mo.mld_typeopdr_key"
+ " AND o.mld_melding_key = " + alias + ".mld_melding_key"
+ " AND mo.mld_typeopdr_isofferte = 1"
+ " AND o.mld_statusopdr_key = 9" // AND o.mld_statusopdr_key NOT IN (1, 2, 6, 7)
+ " AND o.mld_opdr_key > COALESCE ((SELECT MAX(o1.mld_opdr_key)"
+ " FROM mld_opdr o1"
+ " , mld_typeopdr mo1"
+ " WHERE o1.mld_typeopdr_key = mo1.mld_typeopdr_key"
+ " AND mo1.mld_typeopdr_isofferte = 0"
+ " AND o1.mld_melding_key = " + alias + ".mld_melding_key), 0))";
// Als alle offertes zijn afgewezen of afgekeurd en er zijn geen te accepteren offertes meer dan is de melding status "Niet opgelost"
var sql_offertes_toaccept = " (SELECT COUNT(o.mld_statusopdr_key)"
+ " FROM mld_opdr o"
+ " , mld_typeopdr mo"
+ " WHERE o.mld_typeopdr_key = mo.mld_typeopdr_key"
+ " AND o.mld_melding_key = " + alias + ".mld_melding_key"
+ " AND mo.mld_typeopdr_isofferte = 1"
+ " AND o.mld_statusopdr_key = 6" // AND o.mld_statusopdr_key NOT IN (1, 2, 6, 7)
+ " AND o.mld_opdr_key > COALESCE ((SELECT MAX(o1.mld_opdr_key)"
+ " FROM mld_opdr o1"
+ " , mld_typeopdr mo1"
+ " WHERE o1.mld_typeopdr_key = mo1.mld_typeopdr_key"
+ " AND mo1.mld_typeopdr_isofferte = 0"
+ " AND o1.mld_melding_key = " + alias + ".mld_melding_key), 0))";
// Is de laatste opdracht bij de melding een offerte?
var sql_last_is_offertes = " COALESCE((SELECT 1"
+ " FROM mld_opdr o"
+ " , mld_typeopdr mo"
+ " WHERE o.mld_typeopdr_key = mo.mld_typeopdr_key"
+ " AND mo.mld_typeopdr_isofferte = 1"
+ " AND o.mld_melding_key = " + alias + ".mld_melding_key"
+ " AND o.mld_opdr_key = (SELECT MAX(o1.mld_opdr_key)"
+ " FROM mld_opdr o1"
+ " WHERE o1.mld_melding_key = " + alias + ".mld_melding_key)), 0)";
// In mldstatus_str kan de waarde 99 "Niet opgelost" voorkomen. Dit is geen bestaande status.
if (mldstatus_str.indexOf("-1") == -1)
{ // Als alle(-1) niet is geselecteerd
// status | aantal opdrachten | aantal open opdrachten | status key
// ____________________________________________________________________________
// geaccepteerd | 0 | 0 | 4
// niet opgelost | >0 | 0 | 4 (99)
// uitgegeven | >0 | >0 | 7
// Alleen bij niet opgelost en uitgegeven moet er gekeken worden naar het aantal (open) opdrachten
// sql_opdr_be_open is -1 als aantal opdrachten 0 is
// sql_opdr_be_open is 0 als aantal opdrachten > 0 waarvan 0 open
// sql_opdr_be_open is >0 als aantal opdrachten > 0 waarvan >0 open
// Alleen voor status 4 komen twee statussen voor geaccepteerd en niet opgelost
if ((mldstatus_str.indexOf("4") == -1 && mldstatus_str.indexOf("99") == -1) ||
(mldstatus_str.indexOf("4") != -1 && mldstatus_str.indexOf("99") != -1))
{ // Als geaccepteerd(4) en niet opgelost(99) beiden wel of niet zijn geselecteerd
var status_split = mldstatus_str.split(',');
if (mldstatus_str.indexOf("4") != -1 && mldstatus_str.indexOf("99") != -1)
{ // verwijder 99 uit de mldstatus_str
mldstatus_str = "";
for (i = 0; i < status_split.length; i++)
{
if (status_split[i] != "99")
mldstatus_str += (mldstatus_str == ""? "" : ", ") + status_split[i];
}
}
sql = " " + alias + ".mld_melding_status IN (" + mldstatus_str + ")";
}
else if (mldstatus_str.indexOf("99") != -1)
{ // Als niet opgelost(99) is geselecteerd en geaccepteerd(4) is niet geselecteerd => Als Te behandelen (99) is aangevinkt
var status_split = mldstatus_str.split(',');
if (status_split.length > 1)
{ // verwijder 99 uit de mldstatus_str
mldstatus_str = "";
for (i = 0; i < status_split.length; i++)
{
if (status_split[i] != "99")
mldstatus_str += (mldstatus_str == ""? "" : ", ") + status_split[i];
}
sql = " (" + alias + ".mld_melding_status IN (" + mldstatus_str + ")"
// Voor meldingstatus 4 geldt dat er geen open opdrachten zijn.
// En daarnaast geldt:
// Opdrachten: De laatste opdracht is geen offerte.
// Offertes: Offertes met niet afgemelde (6) offertes niet tonen (laatste opdracht is een offerte).
+ " OR ((" + sql_opdr_be_open + " = 0 AND (" + sql_offertes_afgerond + " != 0 OR " + sql_offertes_toaccept + " = 0 OR " + sql_last_is_offertes + " = 0))"
+ " AND (" + alias + ".mld_melding_status = 4)))";
}
else
{ // Voor meldingstatus 4 geldt dat er geen open opdrachten zijn.
// En daarnaast geldt:
// Opdrachten: De laatste opdracht is geen offerte.
// Offertes: Offertes met niet afgemelde (6) offertes niet tonen (laatste opdracht is een offerte).
sql = " (" + sql_opdr_be_open + " = 0 AND (" + sql_offertes_afgerond + " != 0 OR " + sql_offertes_toaccept + " = 0 OR " + sql_last_is_offertes + " = 0))"
+ " AND (" + alias + ".mld_melding_status = 4)";
}
}
else if (mldstatus_str.indexOf("4") != -1)
{ // Als geaccepteerd(4) is geselecteerd en niet opgelost(99) is niet geselecteerd => Als In behandeling (4) is aangevinkt
var status_split = mldstatus_str.split(',');
if (status_split.length > 1)
{ // verwijder 4 uit de mldstatus_str
mldstatus_str = "";
for (i = 0; i < status_split.length; i++)
{
if (status_split[i] != "4")
mldstatus_str += (mldstatus_str == ""? "" : ", ") + status_split[i];
}
sql = " (" + alias + ".mld_melding_status IN (" + mldstatus_str + ")"
// Voor meldingstatus 4 geldt.
// Opdrachten: Er zijn geen opdrachten.
// Offertes: Alle offertes staan ter acceptatie (zijn afgemeld (6)) (laatste opdracht is een offerte)
+ " OR ((" + sql_opdr_be_open + " = -1 OR (" + sql_offertes_afgerond + " = 0 AND " + sql_offertes_toaccept + " > 0 AND " + sql_last_is_offertes + " = 1))"
+ " AND (" + alias + ".mld_melding_status = 4)))";
}
else
{ // Voor meldingstatus 4 geldt.
// Opdrachten: Er zijn geen opdrachten.
// Offertes: Alle offertes staan ter acceptatie (zijn afgemeld (6)) (laatste opdracht is een offerte)
sql = " ((" + sql_opdr_be_open + " = -1 OR (" + sql_offertes_afgerond + " = 0 AND " + sql_offertes_toaccept + " > 0 AND " + sql_last_is_offertes + " = 1))"
+ " AND (" + alias + ".mld_melding_status = 4))";
}
}
//
// Als meldingstatus Te behandelen(2) is aangevinkt EN spoedmeldingen moeten bij Te behandelen worden getoond,
// voeg dan de spoedmeldingen toe.
// Ook als de melding in Uitgegeven(7) en er is een opdracht Toegekend(5).
if (S("mld_show_urgent_as_new") && mldstatus_str.indexOf("2") != -1)
{
var add_spoed = " OR ( (" + alias + ".mld_melding_spoed < 3)"
+ " AND ( (" + alias + ".mld_melding_status IN (2, 3, 4))"
+ " OR ( (" + alias + ".mld_melding_status = 7)"
+ " AND ( (SELECT COUNT (o.mld_statusopdr_key)"
+ " FROM mld_opdr o"
+ " WHERE mld_melding_key = " + alias + ".mld_melding_key"
+ " AND o.mld_statusopdr_key = 5"
+ ") > 0)"
+ " )"
+ " )"
+ " )";
sql = " (" + sql + add_spoed + ")";
}
}
}
return sql;
},
// Meldingen worden soms niet geaccepteerd maar direct afgewezen of afgemeld.
// Als dit binnen de acceptatietijd gebeurd dan is die melding niet te laat geaccepteerd.
getwhere_to_late_accept_sql:
function(mtable)
{
var sql = " CASE WHEN " + mtable + ".mld_melding_acceptdatum_std"
+ " < COALESCE(fac.gettrackingdate ('MLDACP', " + mtable + ".mld_melding_key)," // Geaccepteerde meldingen
+ " fac.gettrackingdate ('MLDREJ', " + mtable + ".mld_melding_key)," // Direct afgewezen meldingen
+ " fac.gettrackingdate ('MLDAFM', " + mtable + ".mld_melding_key)," // Direct afgemelde meldingen
+ " SYSDATE)"
+ " THEN 1"
+ " ELSE 0"
+ " END";
return sql;
},
// Meldingen worden soms niet geaccepteerd maar direct afgewezen of afgemeld.
// Als dit binnen de acceptatietijd gebeurd dan is die melding niet te laat geaccepteerd.
getwhere_to_late_run_sql:
function(mtable, stdtable, MorO)
{ // Ook meldingen waarvoor geldt dat mld_stdmelding_slabewaken = 0 of mld_melding_indult = 1,
// moeten worden meegenomen in de query omdat in hetzelfde overzicht de 'Uitvoering op tijd (Afspraak) (%)' ook wordt weergegeven.
// Deze meldingen worden dan niet meegenomen in de berekening van 'Uitvoering op tijd (SLA) (%)'.
var sql = " CASE"
+ " WHEN fac.gettrackingdate('MLDAFM', " + mtable + ".mld_melding_key) IS NULL"
+ " THEN CASE"
+ " WHEN(CASE "
+ " WHEN " + stdtable + ".mld_stdmelding_slabewaken = 1"
+ " AND NOT " + mtable + ".mld_melding_indult = 1"
// Als de respijtdatum null(0) is dan direct de einddatum nemen (anders wordt de stdmelding uitvoertijd er nog een keer bij opgeteld).
+ " AND " + mtable + (MorO == "M"? ".mld_melding_t_respijt" : "") + ".tijdsduur IS NOT NULL"
+ " AND " + mtable + (MorO == "M"? ".mld_melding_t_respijt" : "") + ".eenheid IS NOT NULL"
+ " THEN mld.geteinddatum(" + mtable + ".mld_melding_einddatum_std,"
+ stdtable + ".mld_stdmelding_key,"
+ mtable + ".mld_melding_spoed,"
+ " NULL,"
+ " NULL,"
+ " MLD_T_UITVOERTIJD(COALESCE(" + mtable + (MorO == "M"? ".mld_melding_t_respijt" : "") + ".tijdsduur, 0), " + mtable + (MorO == "M"? ".mld_melding_t_respijt" : "") + ".eenheid))" // Rekening houden met respijt dagen.
+ " WHEN " + stdtable + ".mld_stdmelding_slabewaken = 1"
+ " THEN mld.geteinddatum(" + mtable + ".mld_melding_key)" // Geen rekening houden met respijt. Einddatum is aanmeldingsdatum/begindatum + SLA tijd.
+ " ELSE " + mtable + ".mld_melding_einddatum" // Geen rekening houden met respijt. Einddatum is ingevoerde einddatum.
+ " END) < COALESCE(fac.gettrackingdate('MLDREJ', " + mtable + ".mld_melding_key), SYSDATE)"
+ " THEN 1"
+ " ELSE 0"
+ " END"
+ " ELSE CASE WHEN(CASE "
+ " WHEN " + stdtable + ".mld_stdmelding_slabewaken = 1"
+ " AND NOT " + mtable + ".mld_melding_indult = 1"
// Als de respijtdatum null(0) is dan direct de einddatum nemen (anders wordt de stdmelding uitvoertijd er nog een keer bij opgeteld).
+ " AND " + mtable + (MorO == "M"? ".mld_melding_t_respijt" : "") + ".tijdsduur IS NOT NULL"
+ " AND " + mtable + (MorO == "M"? ".mld_melding_t_respijt" : "") + ".eenheid IS NOT NULL"
+ " THEN mld.geteinddatum(" + mtable + ".mld_melding_einddatum_std,"
+ stdtable + ".mld_stdmelding_key,"
+ mtable + ".mld_melding_spoed,"
+ " NULL,"
+ " NULL,"
+ " MLD_T_UITVOERTIJD(COALESCE(" + mtable + (MorO == "M"? ".mld_melding_t_respijt" : "") + ".tijdsduur, 0), " + mtable + (MorO == "M"? ".mld_melding_t_respijt" : "") + ".eenheid))" // Rekening houden met respijt dagen.
+ " WHEN " + stdtable + ".mld_stdmelding_slabewaken = 1"
+ " THEN mld.geteinddatum(" + mtable + ".mld_melding_key)" // Geen rekening houden met respijt. Einddatum is aanmeldingsdatum/begindatum + SLA tijd.
+ " ELSE " + mtable + ".mld_melding_einddatum" // Geen rekening houden met respijt. Einddatum is ingevoerde einddatum.
+ " END) < fac.gettrackingdate('MLDAFM', " + mtable + ".mld_melding_key)"
+ " THEN 1"
+ " ELSE 0"
+ " END"
+ " END";
return sql;
},
getwhereSrttracking:
function(params)
{
var datefrom = params.actiondatefrom;
var dateto = params.actiondateto;
var sqln = "";
if (datefrom && dateto)
{
var ora_date1 = datefrom.beginToSQL();
var ora_date2 = dateto.endToSQL();
sqln = " AND fac_tracking_datum BETWEEN " + ora_date1 + " AND " + ora_date2;
}
else if (datefrom)
{
var ora_date1 = datefrom.beginToSQL();
sqln = " AND fac_tracking_datum >= " + ora_date1;
}
else if (dateto)
{
var ora_date2 = dateto.endToSQL();
sqln = " AND fac_tracking_datum < " + ora_date2;
}
var sql = "";
if (params.srt_tracking && params.srt_tracking != "-1")
{
var ssql = "SELECT fac_srtnotificatie_xmlnode, "
+ " fac_srtnotificatie_key"
+ " FROM fac_srtnotificatie"
+ " WHERE fac_srtnotificatie_code = " + safe.quoted_sql(params.srt_tracking);
var oRs = Oracle.Execute(ssql);
var xmlnode = oRs("fac_srtnotificatie_xmlnode").Value;
var fac_srtnotificatie_key = oRs("fac_srtnotificatie_key").Value;
oRs.Close();
if (xmlnode == "melding")
{
sql += " AND EXISTS"
+ " (SELECT 1"
+ " FROM fac_tracking ft"
+ " WHERE ft.fac_srtnotificatie_key = " + fac_srtnotificatie_key
+ " AND ft.fac_tracking_refkey = m.mld_melding_key"
+ sqln
+ (params.prs_tracking > 0?" AND ft.prs_perslid_key = " + params.prs_tracking:"")
+ " )";
}
else if (xmlnode == "opdracht")
{
var groep_opdr = (params.groepering_key == 2 || params.groepering_key == 16);
sql += " AND EXISTS"
+ " (SELECT 1"
+ " FROM fac_tracking ft"
+ (!groep_opdr?" , mld_opdr o":"")
+ " WHERE ft.fac_srtnotificatie_key = " + fac_srtnotificatie_key
+ " AND ft.fac_tracking_refkey = o.mld_opdr_key"
+ sqln
+ (params.prs_tracking > 0?" AND ft.prs_perslid_key = " + params.prs_tracking:"")
+ (!groep_opdr?" AND o.mld_melding_key = m.mld_melding_key":"")
+ " )";
}
}
return sql;
},
getwherePrstracking:
function(params)
{
var sql = "";
if (params.prs_tracking > 0 && params.srt_tracking == "-1")
{
sql += " AND (EXISTS"
+ " (SELECT 1"
+ " FROM fac_tracking ft, fac_srtnotificatie sn"
+ " WHERE ft.fac_tracking_refkey = m.mld_melding_key"
+ " AND ft.fac_srtnotificatie_key = sn.fac_srtnotificatie_key"
+ " AND sn.fac_srtnotificatie_xmlnode = 'melding'"
+ " AND ft.prs_perslid_key = " + params.prs_tracking + ")"
+ " OR EXISTS"
+ " (SELECT 1"
+ " FROM fac_tracking ft, mld_opdr o, fac_srtnotificatie sn"
+ " WHERE ft.fac_tracking_refkey = o.mld_opdr_key"
+ " AND ft.fac_srtnotificatie_key = sn.fac_srtnotificatie_key"
+ " AND sn.fac_srtnotificatie_xmlnode = 'opdracht'"
+ " AND ft.prs_perslid_key = " + params.prs_tracking
+ " AND o.mld_melding_key = m.mld_melding_key" + "))";
}
return sql;
},
getfromwherelist_sql:
function(pautfunction, params)
{
var mld_key = params.mld_key;
var opdr_key = params.opdr_key; // de zichtbare opdrachtkey (eigenlijk meldingkey)
var intopdr_key = params.intopdr_key; // de technische echte mld_opdr_key
var mldstatus_arr = params.mldstatus_arr;
var opdrstatus_arr = params.opdrstatus_arr;
var caller_key = params.caller_key;
var comp_key = params.comp_key;
var org_key = params.org_key;
var ref_key = params.ref_key;
var ref_type = params.ref_type;
var reg_key = params.reg_key;
var dist_key = params.dist_key;
var loc_key = params.loc_key;
var bld_key = params.bld_key;
var flr_key = params.flr_key;
var room_key = params.room_key;
var behandel_key = params.behandel_key;
var srtdisc_key = params.srtdisc_key;
var disc_key_arr = params.disc_key_arr;
var meldinggrp_key = params.meldinggrp_key;
var behandelgrp_key = params.behandelgrp_key;
var stdm_key_arr = params.stdm_key_arr;
var kp = params.kp;
var handler_key = params.handler_key;
var contact_key = params.contact_key;
var opdrtype_key = params.opdrtype_key;
var searchtekst = params.searchtekst;
var omschr = params.omschr;
var disc_key = params.disc_key;
var insgroup_key = params.insgroup_key;
var objsrt_key_str = params.objsrt_key_str;
var objectoms = params.objectoms;
var chkAcceptEx = params.chkAcceptEx;
var chkRunEx = params.chkRunEx;
var chkSpoed = params.chkSpoed;
var chkAfgerond = params.chkAfgerond;
var datefrom = params.datefrom;
var dateto = params.dateto;
var groepering_key = params.groepering_key;
// JGL: Volgens mij komen 2 en 16 hier nooit, die zijn naar opdr_list geleid
var toon_opdr_overz = (groepering_key == 2 || groepering_key == 10 || groepering_key == 11 || groepering_key == 16 || groepering_key == 17);
var offertes = params.offertes;
var meldbron_key = params.meldbron_key;
var ingevoerd = params.ingevoerd;
var verantw_key = params.verantw_key;
//var dienst_key = params.dienst_key;
var deel_key = params.deel_key;
var rsv_ruimte_key = params.rsv_ruimte_key;
//var stdm_key = params.stdm_key; // Ondersteunen we dit nog
var mldstpen = params.mldstpen;
var mldstnew = params.mldstnew;
var mldsting = params.mldsting;
var mldstacc = params.mldstacc;
var mldstuit = params.mldstuit;
var mldstrej = params.mldstrej;
var mldstafm = params.mldstafm;
var mldstver = params.mldstver;
var mldnieto = params.mldnieto;
// Dit lijkt me om te kunnen bepalen of ik uberhaupt naar de PRS-autorisatie hoef te kijken
var add_prs_restrict = prshasrestrict(pautfunction);
var sqln = "";
sqln += " FROM mld_melding m"
+ ", mld_discipline md"
+ ", mld_disc_params mdp"
+ ", alg_v_allonrgoed_gegevens v"
+ ", alg_locatie l"
+ ", alg_district di"
+ ", (SELECT m1.mld_melding_key"
+ " , mld.getactualuitvoer (m1.mld_melding_key) actualuitvoertijd"
+ " FROM mld_melding m1) gau"
+ (verantw_key
? ", alg_gebouw g"
: "")
+ ", prs_perslid p"
+ ", mld_stdmelding std"
+ ((add_prs_restrict)? ", prs_v_afdeling_boom b" : "")
+ (perform && srtdisc_key
? ", ins_srtdiscipline sd"
: "")
+ (!perform
? ", ins_srtdiscipline sd"
: "")
+ (toon_opdr_overz
? ", mld_opdr o"
: "")
+ (offertes
? ", (SELECT o1.mld_melding_key" // Meldingen met zijn aantal offertes
+ " , COUNT (o1.mld_opdr_key) aantal_offertes"
+ " , MAX(o1.mld_opdr_bedrijfopdr_volgnr) lastoffertevolgnr"
+ " FROM mld_opdr o1"
+ " , mld_typeopdr mto"
+ " WHERE o1.mld_typeopdr_key = mto.mld_typeopdr_key"
+ " AND mto.mld_typeopdr_isofferte = 1"
+ " GROUP BY o1.mld_melding_key) offerte"
// Nodig om extra class orderready toe te kunnen toevoegen dat aangeeft dat er actie nodig is (uitvoeringsopdracht aanmaken, nieuwe offerte aanmaken of melding afmelden).
+ ", (SELECT o2.mld_melding_key" // Meldingen met aantal offertes met de status Afgewezen (1), Afgekeurd (2) en/of Technisch Voltooid/Afgemeld (6)
+ " , COUNT (o2.mld_opdr_key) aantal_offready"
+ " FROM mld_opdr o2"
+ " , mld_typeopdr mto"
+ " WHERE o2.mld_typeopdr_key = mto.mld_typeopdr_key"
+ " AND mto.mld_typeopdr_isofferte = 1"
+ " AND o2.mld_statusopdr_key IN (1, 2, 6)"
+ " GROUP BY o2.mld_melding_key) offready"
// Nodig om meldingen met alleen afgewezen en afgekeurde opdrachten niet meer te tonen als melding in offerte traject
+ ", (SELECT o3.mld_melding_key" // Meldingen met aantal offertes met de status Afgewezen (1) en/of Afgekeurd (2).
+ " , COUNT (o3.mld_opdr_key) aantal_offallnok"
+ " FROM mld_opdr o3"
+ " , mld_typeopdr mto"
+ " WHERE o3.mld_typeopdr_key = mto.mld_typeopdr_key"
+ " AND mto.mld_typeopdr_isofferte = 1"
+ " AND o3.mld_statusopdr_key IN (1, 2)"
+ " GROUP BY o3.mld_melding_key) offallnok"
+ ", (SELECT o4.mld_melding_key" // Meldingen zonder opdrachten
+ " , COUNT (o4.mld_opdr_key) aantal_opdrachten"
+ " , MAX(o4.mld_opdr_bedrijfopdr_volgnr) lastopdrachtvolgnr"
+ " FROM mld_opdr o4"
+ " , mld_typeopdr mto"
+ " WHERE o4.mld_typeopdr_key = mto.mld_typeopdr_key"
+ " AND mto.mld_typeopdr_isofferte = 0"
+ " GROUP BY o4.mld_melding_key) opdracht"
: "");
if (ingevoerd)
{
sqln += " , (SELECT prs_perslid_key"
+ " , fac_tracking_refkey mld_melding_key"
+ " FROM fac_tracking t"
+ " , fac_srtnotificatie sn"
+ " WHERE t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key"
+ " AND sn.fac_srtnotificatie_code = 'MLDNEW') invoerder";
}
sqln += " WHERE m.mld_alg_locatie_key = l.alg_locatie_key(+)"
+ " AND l.alg_district_key = di.alg_district_key(+)"
+ " AND m.mld_alg_onroerendgoed_keys = v.alg_onroerendgoed_keys(+)"
+ " AND m.prs_perslid_key = p.prs_perslid_key"
+ " AND md.ins_discipline_key = mdp.mld_ins_discipline_key"
+ " AND md.ins_discipline_key = std.mld_ins_discipline_key"
+ ((add_prs_restrict)
? " AND p.prs_afdeling_key = b.prs_afdeling_key"
: "")
+ " AND std.mld_stdmelding_key = m.mld_stdmelding_key"
+ " AND m.mld_melding_key = gau.mld_melding_key"
+ (perform && srtdisc_key
? " AND sd.ins_srtdiscipline_key = md.ins_srtdiscipline_key"
: "")
+ (!perform
? " AND m.fac_activiteit_key IS NULL"
+ " AND sd.ins_srtdiscipline_key = md.ins_srtdiscipline_key"
: "")
+ (toon_opdr_overz
? " AND m.mld_melding_key = o.mld_melding_key(+)"
: "")
+ (offertes
? " AND offerte.mld_melding_key = m.mld_melding_key"
+ " AND offerte.mld_melding_key = opdracht.mld_melding_key(+)"
+ " AND offerte.mld_melding_key = offready.mld_melding_key(+)"
+ " AND offerte.mld_melding_key = offallnok.mld_melding_key(+)"
+ " AND offerte.aantal_offertes > 0"
+ " AND offerte.aantal_offertes != COALESCE(offallnok.aantal_offallnok , 0)" // offertes met alleen afgekeurde/afgewezen opdrachten niet tonen
+ " AND (opdracht.aantal_opdrachten IS NULL"
+ " OR opdracht.lastopdrachtvolgnr < offerte.lastoffertevolgnr)"
: "")
+ (ingevoerd
? " AND m.mld_melding_key = invoerder.mld_melding_key"
: "");
if (handler_key || opdrtype_key || contact_key || opdr_key || opdrstatus_arr || intopdr_key)
{ // meldingen filter je op 'die een opdracht hebben met xxxxxx'
// opdrachten filter je rechtstreeks
if (!toon_opdr_overz)
sqln += " AND EXISTS"
+ " (SELECT o.mld_opdr_key"
+ " FROM mld_opdr o"
+ " WHERE m.mld_melding_key = o.mld_melding_key(+)"
sqln += (handler_key
? " AND o.mld_uitvoerende_keys = " + handler_key
: "")
+ (opdrtype_key
? " AND o.mld_typeopdr_key = " + opdrtype_key
: "")
+ (contact_key
? " AND o.prs_perslid_key = " + contact_key
: "")
+ (opdr_key // Selectie op nummer negeert alle andere filters (Andere waarde zijn niet doorgegeven
? " AND o.mld_melding_key = " + opdr_key // seems odd, but is right -PF
: "")
+ (intopdr_key // de interne (echte) opdrachtkey
? " AND o.mld_opdr_key = " + intopdr_key
: "")
+ (opdrstatus_arr
? " AND o.mld_statusopdr_key IN (" + opdrstatus_arr.join(",") + ")"
: "")
if (!toon_opdr_overz)
sqln += ")"
}
no_old_closed_calls = ((S("mld_max_history") > 0) && (mldstrej || mldstafm || mldstver));
// Apply the selections onto the query
if (mld_key)
{ // Selectie op nummer negeert alle andere filters
sqln += " AND m.mld_melding_key = " + mld_key;
}
if (rsv_ruimte_key)
{ // Selectie op nummer negeert alle andere filters
sqln += " AND m.res_rsv_ruimte_key = " + rsv_ruimte_key;
}
var showstatus = "";
if (mldstpen) showstatus = (showstatus == ""? "" : showstatus + ",") + "0";
if (mldstrej) showstatus = (showstatus == ""? "" : showstatus + ",") + "1";
if (mldstnew) showstatus = (showstatus == ""? "" : showstatus + ",") + "2";
if (mldsting) showstatus = (showstatus == ""? "" : showstatus + ",") + "3";
if (mldstacc) showstatus = (showstatus == ""? "" : showstatus + ",") + "4";
if (mldstafm) showstatus = (showstatus == ""? "" : showstatus + ",") + "5";
if (mldstver) showstatus = (showstatus == ""? "" : showstatus + ",") + "6";
if (mldstuit) showstatus = (showstatus == ""? "" : showstatus + ",") + "7";
if (mldnieto) showstatus = (showstatus == ""? "" : showstatus + ",") + "99";
// PF: ik was meer een voorstander van dit, maar kennelijk kan er ook
// een kantenklare string meekomen
//if (showstatus != "")
// sqln += " AND m.mld_melding_status IN (" + showstatus + ")";
if (mldstatus_arr)
mldstatus_arr = mldstatus_arr.join(",")
else
mldstatus_arr = showstatus;
var sql_status = mld.getStatusSql(mldstatus_arr, "m");
if (sql_status)
sqln += " AND" + sql_status;
if (params.flags && params.flags.length > 0 && params.flags.length < S('mld_melding_flags'))
{
var filterNull = false;
for (var i=0; i< params.flags.length; i++)
{
if (params.flags[i] === 0)
{
filterNull = true;
}
}
sqln += " AND (m.mld_melding_flag IN (" + params.flags.join(",") + ")";
if (filterNull)
sqln += " or m.mld_melding_flag is null";
sqln += ")";
}
if (deel_key)
{ // selectie op nummer negeert alle andere filters
sqln += " AND m.mld_melding_key IN (SELECT mld_melding_key FROM mld_melding_object WHERE ins_deel_key = " + deel_key + ")";
}
if (no_old_closed_calls)
sqln += " AND (m.mld_melding_datum >= SYSDATE - " + S("mld_max_history") + ")";
// Hier wordt gezocht in de omschrijving, opmerking, de notities en de eventuele (tekst-)kenmerken
// Dit is een potentieel en onvermijdelijk dure zoekactie.
if (searchtekst)
{
sqln += " AND (UPPER(mld_melding_omschrijving) LIKE " + safe.quoted_sql_wild("%" + searchtekst + "%")
+ " OR UPPER(mld_melding_onderwerp) LIKE " + safe.quoted_sql_wild("%" + searchtekst + "%")
+ " OR UPPER(mld_melding_opmerking) LIKE " + safe.quoted_sql_wild("%" + searchtekst + "%")
+ " OR UPPER(mld_melding_externnr) LIKE " + safe.quoted_sql_wild(searchtekst) // wildcards doe je zelf maar.
+ " OR EXISTS (SELECT mld_melding_key"
+ " FROM mld_kenmerkmelding km"
+ " WHERE km.mld_melding_key = m.mld_melding_key"
+ " AND km.mld_kenmerkmelding_verwijder IS NULL"
+ " AND UPPER(km.mld_kenmerkmelding_waarde) LIKE " + safe.quoted_sql_wild("%" + searchtekst + "%") + ")"
+ " OR EXISTS (SELECT mld_melding_key"
+ " FROM mld_melding_note n"
+ " WHERE n.mld_melding_key = m.mld_melding_key "
+ " AND UPPER(n.mld_melding_note_omschrijving) LIKE " + safe.quoted_sql_wild("%" + searchtekst + "%") + "))";
}
if (omschr)
{
sqln += " AND UPPER(mld_melding_omschrijving) LIKE "+ safe.quoted_sql_wild("%" + omschr + "%");
}
if (verantw_key)
sqln += " AND v.alg_gebouw_key = g.alg_gebouw_key(+)"
+ " AND (g.prs_perslid_key_verantw = " + verantw_key
+ " OR g.prs_perslid_key_verantw2 = " + verantw_key + ")";
if (caller_key)
sqln += " AND m.prs_perslid_key = " + caller_key;
if (behandel_key)
sqln += " AND m.mld_melding_behandelaar_key = " + behandel_key;
if (ref_key && ref_type)
sqln += " AND m.mld_melding_kto_key = " + ref_key
+ " AND m.mld_melding_kto_type LIKE " + safe.quoted_sql(ref_type);
if (room_key)
sqln += " AND v.alg_ruimte_key = " + room_key;
else if (flr_key)
sqln += " AND v.alg_verdieping_key = " + flr_key;
else if (bld_key)
sqln += " AND (v.alg_gebouw_key IN (" + bld_key + ") OR v.alg_terreinsector_key IN (" + bld_key + ")) ";
else if (loc_key)
sqln += " AND m.mld_alg_locatie_key = " + loc_key; // daarvoor hebben we v niet nodig, die is alleen voor de details
else if (dist_key)
sqln += " AND di.alg_district_key = " + dist_key;
else if (reg_key)
sqln += " AND di.alg_regio_key = " + reg_key;
if (meldbron_key)
sqln += " AND m.mld_meldbron_key = " + meldbron_key;
if (kp) // PCHD#40076
sqln += (toon_opdr_overz
? " AND o.prs_kostenplaats_key = "
: " AND m.prs_kostenplaats_key = ")
+ kp;
if (org_key)
sqln += " AND p.prs_afdeling_key IN"
+ " (SELECT a.prs_afdeling_key"
+ " FROM prs_v_afdeling_familie a"
+ " WHERE a.prs_afdeling_elder_key = " + org_key + ")";
else if (comp_key)
sqln += " AND p.prs_afdeling_key IN"
+ " (SELECT a.prs_afdeling_key"
+ " FROM prs_v_afdeling a"
+ " WHERE a.prs_bedrijf_key = " + comp_key + ")";
// Soort melding, productgroep, meldinggroep, melding
if (stdm_key_arr || meldinggrp_key)
{
if (stdm_key_arr)
sqln += " AND m.mld_stdmelding_key IN (" + stdm_key_arr.join(",") + ")";
if (meldinggrp_key)
sqln += " AND std.mld_stdmeldinggroep_key IN (" + meldinggrp_key + ")";
}
else if (disc_key_arr)
sqln += " AND std.mld_ins_discipline_key IN (" + disc_key_arr.join(",") + ")" ;
else if (srtdisc_key)
sqln += " AND sd.ins_srtdiscipline_key IN (" + srtdisc_key + ") ";
// Behandelgroep
if (behandelgrp_key)
sqln += " AND mdp.mld_behandelgroep_key = " + behandelgrp_key;
// Discipline, group, objectsoort
if (disc_key || insgroup_key || objsrt_key_str)
{
sqln += " AND m.mld_melding_key IN"
+ " (SELECT mld_melding_key"
+ " FROM mld_melding_object"
+ " WHERE ins_deel_key IN"
+ " (SELECT ins_deel_key"
+ " FROM ins_deel WHERE";
if (objsrt_key_str)
sqln += " ins_srtdeel_key IN"
+ " (SELECT ins_srtdeel_key"
+ " FROM ins_srtdeel"
+ " WHERE ins_srtdeel_key IN (" + objsrt_key_str.join(",") + "))";
else if (insgroup_key)
sqln += " ins_srtdeel_key IN"
+ " (SELECT ins_srtdeel_key"
+ " FROM ins_srtdeel"
+ " WHERE ins_srtgroep_key = " + insgroup_key + ")";
else if (disc_key)
sqln += " ins_discipline_key = " + disc_key;
sqln += ") AND mld_melding_object_verwijder IS NULL)";
}
if (objectoms)
{
sqln += " AND m.mld_melding_key IN"
+ " (SELECT mld_melding_key"
+ " FROM mld_melding_object mo"
+ " , ins_deel d"
+ " , ins_srtdeel sd"
+ " WHERE mo.ins_deel_key = d.ins_deel_key"
+ " AND d.ins_srtdeel_key = sd.ins_srtdeel_key"
+ " AND (ins_srtdeel_upper LIKE " + safe.quoted_sql_wild("%" + objectoms + "%")
+ " OR ins_deel_upper LIKE " + safe.quoted_sql_wild("%" + objectoms + "%") + ")"
+ " AND mo.mld_melding_object_verwijder IS NULL)";
}
// Meldingen worden soms niet geaccepteerd maar direct afgewezen of afgemeld.
// Als dit binnen de acceptatietijd gebeurd dan is die melding niet te laat geaccepteerd.
if (chkAcceptEx)
{
sqln += " AND " + mld.getwhere_to_late_accept_sql("m") + " = 1";
}
if (chkRunEx)
{
sqln += " AND " + mld.getwhere_to_late_run_sql("m", "std", "M") + " = 1";
}
if (chkSpoed)
{
sqln += " AND m.mld_melding_spoed < 3";
}
if (chkAfgerond)
{
sqln += " AND m.mld_melding_afgerond = 1";
}
if (datefrom && dateto)
{
var ora_date1 = datefrom.toSQL(true);
var ora_date2 = dateto.toSQL(true);
if (toon_opdr_overz)
sqln += " AND o.mld_opdr_datumbegin BETWEEN " + ora_date1 + " AND " + ora_date2;
else
sqln += " AND m.mld_melding_datum BETWEEN " + ora_date1 + " AND " + ora_date2;
}
else if (datefrom)
{
var ora_date1 = datefrom.beginToSQL();
if (toon_opdr_overz)
sqln += " AND o.mld_opdr_datumbegin >= " + ora_date1;
else
sqln += " AND m.mld_melding_datum >= " + ora_date1;
}
else if (dateto)
{
var ora_date2 = dateto.endToSQL();
if (toon_opdr_overz)
sqln += " AND o.mld_opdr_datumbegin < " + ora_date2;
else
sqln += " AND m.mld_melding_datum < " + ora_date2;
}
if (frontend)
{
var prsKeys = user.collegakeylist();
sqln += " AND m.prs_perslid_key IN (" + prsKeys + ")"
}
sqln += mld.getwhereSrttracking(params);
sqln += mld.getwherePrstracking(params);
if (!params.minfo || groepering_key == 1 || (groepering_key > 2 && groepering_key < 16) || groepering_key >= 18)
{ // Meldingen
sqln += getKenmerkSql("MLD", "m.mld_melding_key");
}
else if (groepering_key == 2 || groepering_key == 17 || groepering_key == 16)
{ // Opdrachten JGL: Volgens mij kom je hier nooit, dit gebeurt via ins_list
sqln += getKenmerkSql("OPD", "o.mld_opdr_key");
}
return sqln;
},
// Lever tekstueel alle flexkenmerken van een melding op.
// Dat gaat als default in de omschrijving van de opdrachten
getFlexSummary:
function(melding_key)
{
var sql = "SELECT mld.mldflexsummary("+melding_key+") FROM DUAL";
var oRs = Oracle.Execute(sql);
var summarystring = oRs(0).Value||"";
oRs.Close();
return summarystring;
},
// Levert een veld (label + waarde) met een klikbare verwijzing naar een gerefereerde entiteit
// Dat is de entiteit waarop deze melding betrekking heeft, bijvoorbeeld bij klachten of KTO.
referentielink:
function (ptype, pkey, plabel)
{
var lbl = mld.referentielabel(ptype, pkey); // 'Reservering 1234'
var params = null;
switch(ptype)
{
case "R":
var params = { infoPointer: { Url: "appl/res/res_reservering.asp?urole="+urole+"&rsv_ruimte_key=" + pkey }};
break;
case "M":
var params = { infoPointer: { Url: "appl/mld/mld_melding.asp?urole="+urole+"&mld_key=" + pkey}};
break;
case "B":
var params = { infoPointer: { Url: "appl/bes/bes_bestelling.asp?urole="+urole+"&bes_key=" + pkey}};
break;
case "X":
var params = { infoPointer: { Url: "appl/bes/bes_opdr.asp?urole="+urole+"&ordernr=" + pkey}};
break;
case "O":
var params = { infoPointer: { Url: "appl/mld/mld_opdr.asp?urole="+urole+"&opdr_key=" + pkey}};
break;
case "C":
var params = { infoPointer: { Url: "appl/cnt/cnt_contract.asp?urole="+urole+"&cnt_key=" + pkey}};
break;
case "F":
var params = { infoPointer: { Url: "appl/fin/fin_factuur.asp?urole="+urole+"&fin_key=" + pkey}};
break;
case "T":
var params = { infoPointer: { Url: "appl/ins/ins_inspect.asp?deelsrtcont_key=" + pkey }};
break;
}
if (params)
ROFIELDTR("fld", plabel, lbl, params);
},
// Levert een label op voor een bepaald referentie type
referentielabel:
function (ptype, pkey)
{
switch(ptype)
{
case "R":
var sql = "SELECT res_reservering_key, res_rsv_ruimte_volgnr, res_rsv_ruimte_omschrijving"
+ " FROM res_rsv_ruimte"
+ " WHERE res_rsv_ruimte_key = " + pkey;
var oRs = Oracle.Execute(sql);
return L("lcl_reservation") + " " + oRs("res_reservering_key").Value + "/" + oRs("res_rsv_ruimte_volgnr").Value + (oRs("res_rsv_ruimte_omschrijving").Value ? " "+oRs("res_rsv_ruimte_omschrijving").Value : "");
break;
case "M":
return L("lcl_complain") + " " + mld.mld_prefix(pkey) + pkey;
break;
case "B":
return L("lcl_bes_bestelling") + " " + S("bes_bestelling_prefix") + pkey;
break;
case "X":
return L("lcl_bes_bestelopdracht") + " " + S("bes_bestelling_prefix") + pkey;
break;
case "O":
var sql = "SELECT mld_melding_key, mld_opdr_bedrijfopdr_volgnr"
+ " FROM mld_opdr"
+ " WHERE mld_opdr_key = " + pkey;
var oRs = Oracle.Execute(sql);
return L("lcl_shared_order") + " " + oRs("mld_melding_key").Value + "/" + oRs("mld_opdr_bedrijfopdr_volgnr").Value;
break;
case "C":
return L("lcl_contract") + " " + pkey;
break;
case "F":
return L("lcl_fin_invoice") + " " + pkey;
break;
case "T":
var sql = "SELECT lcl.x ('c.ins_discipline_omschrijving', c.ins_discipline_key, c.ins_discipline_omschrijving) ins_discipline_omschrijving"
+ ", dsc.ins_deelsrtcontrole_opmerking"
+ ", dsc.ins_deelsrtcontrole_datum"
+ " FROM ins_deelsrtcontrole dsc, ins_srtcontrole sc, ctr_discipline c"
+ " WHERE dsc.ins_srtcontrole_key = sc.ins_srtcontrole_key"
+ " AND sc.ctr_discipline_key = c.ins_discipline_key"
+ " AND ins_deelsrtcontrole_key = " + pkey;
var oRs = Oracle.Execute(sql);
return (oRs.eof
? "x"
: oRs("ins_discipline_omschrijving").value + " " + (oRs("ins_deelsrtcontrole_datum").value != "" ? toDateString(oRs("ins_deelsrtcontrole_datum").value) : "x")
);
break;
}
},
mld_prefix: // handig als je moet presenteren
function (mld_key)
{
var sql = "SELECT sd.ins_srtdiscipline_prefix"
+ " FROM mld_melding m"
+ ", mld_stdmelding s"
+ ", mld_discipline md"
+ ", ins_srtdiscipline sd"
+ " WHERE mld_melding_key = " + mld_key
+ " AND s.mld_stdmelding_key = m.mld_stdmelding_key"
+ " AND sd.ins_srtdiscipline_key = md.ins_srtdiscipline_key"
+ " AND md.ins_discipline_key = s.mld_ins_discipline_key";
var oRs = Oracle.Execute(sql);
var result = oRs("ins_srtdiscipline_prefix").Value || "";
oRs.Close();
return result;
},
mld_melding_info:
function (mld_key)
{
// TODO: mld_melding_info bevat ook heel veel std_melding/discipline info
// Dat kan beter opgehaald worden met:
// var mld_info = mld.mld_melding_info(mld_key);
// var stdm_info = mld.mld_stdmeldinginfo(mld_info.stdm);
// of desnoods mld_info.stdm_info = mld.mld_stdmeldinginfo(mld_info.stdm)
// Dan kan deze functie veel compacter
// INITIALISATIE MET DE INITIEEL WEER TE GEVEN GEGEVENS
sql = "SELECT mld_melding_omschrijving"
+ " , mld_melding_onderwerp"
+ " , mld_melding_datum"
+ " , s.mld_ins_discipline_key"
+ " , m.mld_stdmelding_key"
+ " , m.mld_alg_onroerendgoed_keys"
+ " , m.mld_melding_t_uitvoertijd.tijdsduur uitvoertijd_tijdsduur"
+ " , m.mld_melding_t_uitvoertijd.eenheid uitvoertijd_eenheid"
+ " , m.mld_melding_einddatum"
+ " , m.mld_melding_einddatum_std"
+ " , au.actualuitvoertijd.tijdsduur actualuitvoertijd_tijdsduur"
+ " , au.actualuitvoertijd.eenheid actualuitvoertijd_eenheid"
+ " , m.mld_kosten_klant"
+ " , m.prs_kostenplaats_key"
+ " , s.prs_kostensoort_key"
+ " , p.prs_afdeling_key"
+ " , m.mld_melding_opmerking"
+ " , m.prs_perslid_key"
+ " , m.prs_perslid_key_voor"
+ " , m.mld_melding_status"
+ " , m.mld_melding_t_respijt.tijdsduur respijt_tijdsduur"
+ " , m.mld_melding_t_respijt.eenheid respijt_eenheid"
+ " , m.mld_meldbron_key"
+ " , m.mld_meldbron_nr"
+ " , m.mld_melding_externnr"
+ " , sd.ins_srtdiscipline_prefix"
+ " , md.ins_srtdiscipline_key"
+ " , m.mld_adres_key"
+ " , m.mld_melding_spoed"
+ " , m.mld_melding_ordernr"
+ " , m.mld_melding_parentkey"
+ " , sd.ins_srtdiscipline_alg"
+ " , sd.ins_srtdiscipline_ins"
+ " , sd.ins_srtdiscipline_bes"
+ " , " + lcl.xsqla('sd.ins_srtdiscipline_omschrijving', 'sd.ins_srtdiscipline_key')
+ " , COALESCE(m.mld_alg_locatie_key, -1) alg_locatie_key"
+ " , COALESCE(g.alg_gebouw_key, g.alg_terreinsector_key, -1) alg_gebouw_key"
+ " , COALESCE(g.alg_verdieping_key, -1) alg_verdieping_key"
+ " , COALESCE(g.alg_ruimte_key, -1) alg_ruimte_key"
+ " , (SELECT 'B'"
+ " FROM alg_gebouw"
+ " WHERE alg_gebouw_key = g.alg_gebouw_key"
+ " UNION"
+ " SELECT 'T'"
+ " FROM alg_terreinsector"
+ " WHERE alg_terreinsector_key = g.alg_terreinsector_key) bttype"
+ " , m.mld_workflowstep_key workflow"
+ " , m.mld_melding_start_key"
+ " , m.mld_melding_behandelaar_key behandelaar"
+ " , " + lcl.xsqla('md.ins_discipline_omschrijving', 'md.ins_discipline_key')
+ " , " + lcl.xsqla('s.mld_stdmelding_omschrijving','s.mld_stdmelding_key')
+ " , COALESCE(s.mld_stdmelding_directklaar, mdp.mld_disc_params_directklaar, 0) mld_directklaar"
+ " , mdp.mld_disc_params_frontendprio"
+ " , mdp.mld_disc_params_startdatum"
+ " , mdp.mld_disc_params_bestellimiet"
+ " , m.fac_activiteit_key"
+ " , s.mld_stdmelding_freetext"
+ " , s.mld_stdmelding_subject"
+ " , (SELECT k.prs_kostenplaats_module"
+ " FROM prs_kostenplaats k"
+ " WHERE k.prs_kostenplaats_key = m.prs_kostenplaats_key) module"
+ " , s.mld_stdmelding_planbaar"
+ " , s.alg_onrgoed_niveau"
+ " , md.ins_discipline_kpnverplicht"
+ " , s.ins_srtinst_verplicht"
+ " , mdp.mld_disc_params_eigen_kp"
+ " , mdp.mld_disc_params_fenotes"
+ " , mdp.mld_disc_params_keten"
+ " , mdp.mld_disc_params_bonotify"
+ " , m.mld_melding_kto_type"
+ " , m.mld_melding_kto_key"
+ " , m.mld_melding_kto" // kto over mijzelf?
+ " , m.mld_melding_kto_verstuurd"
+ " , m.mld_melding_satisfaction"
+ " , m.mld_melding_satisfaction_op"
+ " , s.mld_stdmelding_kto" // misschien kto over mijzelf?
+ " , m.mld_melding_indult"
+ " , m.mld_melding_afgerond"
+ " , (SELECT COUNT(mo.ins_deel_key)"
+ " FROM mld_melding_object mo"
+ " WHERE mo.mld_melding_key = " + mld_key + ") aantal_objects"
+ " , (SELECT COUNT(m1.mld_melding_key)"
+ " FROM mld_melding m1"
+ " WHERE m1.mld_melding_parentkey = " + mld_key + ") aantal_childs"
+ " , (SELECT COUNT(m2.mld_melding_key)"
+ " FROM mld_melding m2"
+ " WHERE m2.mld_melding_kto_key = " + mld_key + ") aantal_references"
+ " , m.mld_melding_flag"
+ " , m.mld_melding_locked_user_key"
+ " , m.mld_melding_locked_date"
+ " , m.res_rsv_ruimte_key"
+ " , rr.res_rsv_ruimte_volgnr"
+ " , rr.res_reservering_key"
+ " FROM mld_melding m"
+ " , mld_stdmelding s"
+ " , alg_v_allonrgoed_gegevens g"
+ " , prs_perslid p"
+ " , mld_discipline md"
+ " , mld_disc_params mdp"
+ " , ins_srtdiscipline sd"
+ " , res_rsv_ruimte rr"
+ " , (SELECT mld.getactualuitvoer(" + mld_key + ") actualuitvoertijd FROM DUAL) au"
+ " WHERE mld_melding_key = " + mld_key
+ " AND s.mld_stdmelding_key = m.mld_stdmelding_key"
+ " AND m.mld_alg_onroerendgoed_keys = g.alg_onroerendgoed_keys(+)"
+ " AND m.prs_perslid_key = p.prs_perslid_key"
+ " AND sd.ins_srtdiscipline_key = md.ins_srtdiscipline_key"
+ " AND md.ins_discipline_key = s.mld_ins_discipline_key"
+ " AND mdp.mld_ins_discipline_key = s.mld_ins_discipline_key"
+ " AND m.res_rsv_ruimte_key = rr.res_rsv_ruimte_key(+)";
var oRs = Oracle.Execute(sql);
if (oRs.Eof)
{
shared.record_not_found(L("lcl_complain") + " " +mld_key);
}
var alg_level = 0;
switch (oRs("ins_srtdiscipline_alg").Value)
{
case 1: alg_level = 5; break; // Ruimte
case 3: alg_level = 4; break; // Verdieping
case 5: alg_level = 3; break; // Gebouw
case 7: alg_level = 2; break; // Locatie
default: alg_level = 0; // niet tonen
}
var result = { mld_key: mld_key,
mld_omschr: oRs("mld_melding_omschrijving").Value,
mld_onderwerp: oRs("mld_melding_onderwerp").Value,
melddatum: new Date( oRs("mld_melding_datum").Value),
disc: oRs("mld_ins_discipline_key").Value,
stdm: oRs("mld_stdmelding_key").Value,
place: oRs("mld_alg_onroerendgoed_keys").Value,
uitvoertijd: oRs("uitvoertijd_tijdsduur").Value,
uitvoertijd_eenheid: oRs("uitvoertijd_eenheid").Value || 'D',
actualuitvoertijd: oRs("actualuitvoertijd_tijdsduur").Value,
actualuitvoertijd_eenheid: oRs("actualuitvoertijd_eenheid").Value,
einddatum: new Date(oRs("mld_melding_einddatum").Value), // Gepland
einddatum_std: new Date(oRs("mld_melding_einddatum_std").Value), // Zou moeten volgens SLA
mld_kk: oRs("mld_kosten_klant").Value,
kostenpl_key: oRs("prs_kostenplaats_key").Value || -1,
stdm_ksrt_key: oRs("prs_kostensoort_key").Value,
mld_ordernr: oRs("mld_melding_ordernr").Value,
parent_key: oRs("mld_melding_parentkey").Value,
melder_key: oRs("prs_perslid_key").Value,
perslid_key_voor: oRs("prs_perslid_key_voor").Value,
remark: oRs("mld_melding_opmerking").Value,
alg_ruimte: oRs("mld_alg_onroerendgoed_keys").Value || -1,
mld_status: oRs("mld_melding_status").Value,
mld_status_str: mld.getmldstatustext(mld.getextendedmldstatus(oRs("mld_melding_status").Value, mld_key)),
respijt: oRs("respijt_tijdsduur").Value || 0,
respijt_eenheid: oRs("respijt_eenheid").Value || (oRs("uitvoertijd_eenheid").Value || 'D'),
meldbron_key: oRs("mld_meldbron_key").Value,
meldbron_nr: oRs("mld_meldbron_nr").Value,
externnr: oRs("mld_melding_externnr").Value,
prefix: oRs("ins_srtdiscipline_prefix").Value, // null for no prefix
srtdisc: oRs("ins_srtdiscipline_key").Value,
deladdress: oRs("mld_adres_key").Value,
mprio: oRs("mld_melding_spoed").Value,
alg_level: alg_level,
show_alg: alg_level > 0,
show_ins: oRs("ins_srtdiscipline_ins").Value == 1,
show_bes: oRs("ins_srtdiscipline_bes").Value == 1,
srtdisc_oms: oRs("ins_srtdiscipline_omschrijving").Value,
loc_key: oRs("alg_locatie_key").Value,
bld_key: oRs("alg_gebouw_key").Value,
flr_key: oRs("alg_verdieping_key").Value,
room_key: oRs("alg_ruimte_key").Value,
bttype: oRs("bttype").Value? oRs("bttype").Value : "",
noWorkflow: (oRs("workflow").Value == null),
Startkey: oRs("mld_melding_start_key").Value,
behandel_key: oRs("behandelaar").Value,
ins_discipline_omschrijving: oRs("ins_discipline_omschrijving").Value,
mld_stdmelding_omschrijving: oRs("mld_stdmelding_omschrijving").Value,
is_fo_melding: oRs("mld_directklaar").Value > 0, // Welke knoppen mag ik zien?
directklaar: oRs("mld_directklaar").Value,
show_start_date: oRs("mld_disc_params_startdatum").Value == 1,
bestellimiet: oRs("mld_disc_params_bestellimiet").Value,
frontendprio: (oRs("mld_disc_params_frontendprio").Value == 1),
act_key: oRs("fac_activiteit_key").Value,
freetext: oRs("mld_stdmelding_freetext").Value,
subject: oRs("mld_stdmelding_subject").Value,
module: oRs("module").Value,
srtinst_verplicht: (oRs("ins_srtinst_verplicht").Value == 1),
planbaar: (oRs("mld_stdmelding_planbaar").Value == 1),
alg_onrgoed_niveau: oRs("alg_onrgoed_niveau").Value,
kpnverplicht: (oRs("ins_discipline_kpnverplicht").Value == 1),
show_eigen_kp: (oRs("mld_disc_params_eigen_kp").Value == 1),
fenotes: oRs("mld_disc_params_fenotes").Value,
keten: oRs("mld_disc_params_keten").Value,
bonotify: oRs("mld_disc_params_bonotify").Value,
kto_type: oRs("mld_melding_kto_type").Value,
kto_key: oRs("mld_melding_kto_key").Value || -1,
kto: oRs("mld_melding_kto").Value == 1,
kto_verstuurd: oRs("mld_melding_kto_verstuurd").Value,
satisfaction: oRs("mld_melding_satisfaction").Value,
satisfaction_op: oRs("mld_melding_satisfaction_op").Value,
kto_opt: oRs("mld_stdmelding_kto").Value || 0,
indult: oRs("mld_melding_indult").Value == 1, // 0=normaal, 1=indult=vrijgewaard=telt niet mee
afgerond: oRs("mld_melding_afgerond").Value == 1, // 0=niet afgerond, 1=afgerond
aantal_objects: oRs("aantal_objects").Value,
haschild: oRs("aantal_childs").Value > 0,
hasreference: oRs("aantal_references").Value > 0,
flag: oRs("mld_melding_flag").Value,
locked_user_key: oRs("mld_melding_locked_user_key").Value,
locked_date: new Date(oRs("mld_melding_locked_date").Value),
rsv_ruimte_key: oRs("res_rsv_ruimte_key").Value,
rsv_ruimte_volgnr: oRs("res_rsv_ruimte_volgnr").Value,
res_key: oRs("res_reservering_key").Value
};
if (result.locked_user_key)
{
var expire = new Date;
expire.setMinutes(expire.getMinutes() - S("mld_locked_expire"));
if (result.locked_date < expire)
{ // In de database laten we het lock gewoon staan ter analyse achteraf welke locks niet worden vrijgegeven.
result.locked_user_key = null;
result.locked_date = null;
}
}
if (result.uitvoertijd_eenheid == "D")
result.uitvoertijdtxt = result.uitvoertijd + " " + L("lcl_mld_days");
else
result.uitvoertijdtxt = Math.round(result.uitvoertijd * 100) / 100 + " " + L("lcl_mld_hours");
if (result.actualuitvoertijd_eenheid == "D")
result.actualuitvoertijdtxt = Math.round(result.actualuitvoertijd * 100) / 100 + " " + L("lcl_mld_days");
else
result.actualuitvoertijdtxt = Math.round(result.actualuitvoertijd * 100) / 100 + " " + L("lcl_mld_hours");
if (result.respijt_eenheid == "D")
result.respijttxt = result.respijt + " " + L("lcl_mld_days");
else
result.respijttxt = Math.round(result.respijt * 100) / 100 + " " + L("lcl_mld_hours");
// Als de melding kinderen heeft, haal ze dan op
if (result.haschild)
{
sql = "SELECT m.mld_melding_key"
+ " , sd.ins_srtdiscipline_prefix"
+ " FROM mld_melding m"
+ " , mld_stdmelding s"
+ " , mld_discipline md"
+ " , ins_srtdiscipline sd"
+ " WHERE m.mld_stdmelding_key = s.mld_stdmelding_key"
+ " AND s.mld_ins_discipline_key = md.ins_discipline_key"
+ " AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key"
+ " AND m.mld_melding_parentkey = " + mld_key;
var oRsC = Oracle.Execute(sql);
result.childs = new Array();
while (!oRsC.eof)
{
result.childs.push({key: oRsC("mld_melding_key").Value,
nr: oRsC("ins_srtdiscipline_prefix").Value || "" + oRsC("mld_melding_key").Value
});
oRsC.MoveNext();
}
oRsC.Close();
}
// Als naar deze melding wordt verwezen in andere meldingen, haal ze dan op
if (result.hasreference)
{
sql = "SELECT m.mld_melding_key"
+ " , sd.ins_srtdiscipline_prefix"
+ " FROM mld_melding m"
+ " , mld_stdmelding s"
+ " , mld_discipline md"
+ " , ins_srtdiscipline sd"
+ " WHERE m.mld_stdmelding_key = s.mld_stdmelding_key"
+ " AND s.mld_ins_discipline_key = md.ins_discipline_key"
+ " AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key"
+ " AND m.mld_melding_kto_key = " + mld_key;
oRsR = Oracle.Execute(sql);
result.references = new Array();
while (!oRsR.eof)
{
result.references.push({key: oRsR("mld_melding_key").Value,
nr: oRsR("ins_srtdiscipline_prefix").Value || "" + oRsR("mld_melding_key").Value
});
oRsR.MoveNext();
}
oRsR.Close();
}
sql = "SELECT ins_deel_key FROM mld_v_aanwezigmelding_object"
+ " WHERE mld_melding_key = " + mld_key;
oRs = Oracle.Execute(sql);
result.room_obj_arr = new Array;
while (!oRs.eof)
{
result.room_obj_arr.push(oRs("ins_deel_key").Value);
oRs.MoveNext();
}
oRs.close();
return result;
},
mld_opdr_info:
function _mld_opdr_info(opdr_key)
{
// TODO: mld_opdr_info bevat ook heel veel melding/contract info
// Dat kan beter opgehaald worden met:
// var mld_opdr = mld.mld_opdr_info(opdr_key);
// var mld_info = mld.mld_melding_info(mld_opdr.mld_key);
// Dan kan deze functie veel compacter
var sql = "SELECT mld_opdr_datumbegin"
+ " , o.mld_melding_key"
+ " , o.mld_opdr_contactpersoon"
+ " , o.mld_opdr_omschrijving"
+ " , fac.count_Work_Days(mld_opdr_datumbegin, mld_opdr_einddatum) aantal_dagen"
+ " , o.mld_opdr_uren"
+ " , o.mld_opdr_uren_refiat"
+ " , o.mld_opdr_materiaal"
+ " , o.mld_opdr_materiaal_refiat"
+ " , o.mld_opdr_kosten"
+ " , o.mld_opdr_kosten_refiat"
+ " , o.mld_uitvoerende_keys"
+ " , c.cnt_contract_nummer_intern"
+ " || CASE WHEN c.cnt_contract_versie IS NOT NULL THEN '.'||c.cnt_contract_versie END"
+ " || '-' || c.cnt_contract_omschrijving cnt_name"
+ " , o.cnt_contract_key"
+ " , COALESCE(o.mld_opdr_uurloon, 0) mld_opdr_uurloon"
+ " , COALESCE(o.mld_opdr_uurloon_refiat, 0) mld_opdr_uurloon_refiat"
+ " , o.mld_typeopdr_key"
+ " , " + lcl.xsqla('mto.mld_typeopdr_omschrijving', 'mto.mld_typeopdr_key')
+ " , mto.mld_typeopdr_matchtype"
+ " , mto.mld_typeopdr_slamode"
+ " , mto.mld_typeopdr_kosten"
+ " , mto.mld_typeopdr_sluitmelding"
+ " , mto.mld_typeopdr_afmeldmarge"
+ " , mto.mld_typeopdr_offertelimiet"
+ " , mto.mld_typeopdr_isofferte"
+ " , mto.mld_typeopdr_typeopdr_key"
+ " , mto.mld_typeopdr_contract"
+ " , mto.mld_typeopdr_afhandeling"
+ " , mto.mld_typeopdr_kosten_verplicht"
+ " , mto.mld_typeopdr_sequential"
+ " , o.prs_perslid_key mld_opdr_contact_key" // key van de interne contactpersoon
+ " , (SELECT p.prs_perslid_naam_full FROM prs_v_perslid_fullnames_all p WHERE p.prs_perslid_key = o.prs_perslid_key) mld_opdr_contact_naam"
+ " , o.prs_contactpersoon_key"
+ " , o.mld_statusopdr_key"
+ " , o.mld_statusopdr_key_refiat"
+ " , m.mld_stdmelding_key"
+ " , m.prs_perslid_key"
+ " , CASE WHEN sd.ins_srtdiscipline_prefix IS NULL"
+ " THEN ''"
+ " ELSE sd.ins_srtdiscipline_prefix || '-'"
+ " END"
+ " || " + lcl.xsqla('d.ins_discipline_omschrijving', 'd.ins_discipline_key')
+ " , m.mld_kosten_klant"
+ " , o.prs_kostenplaats_key"
+ " , (SELECT k.prs_kostenplaats_fiat"
+ " FROM prs_kostenplaats k"
+ " WHERE k.prs_kostenplaats_key = o.prs_kostenplaats_key) kp_fiat"
+ " , o.mld_opdr_opmerking_fiat"
+ " , o.mld_opdr_bedrijfopdr_volgnr"
+ " , o.mld_opdr_ordernr"
+ " , mdp.mld_disc_params_opdr_kosten"
+ " , o.mld_opdr_opmerking"
+ " , mld_opdr_einddatum"
+ " , sd.ins_srtdiscipline_bes"
+ " , sd.ins_srtdiscipline_prefix"
+ " , o.fac_activiteit_key"
+ " , mu.type"
+ " , mu.intern"
+ " , p2.prs_perslid_key fiatteur_kp_key"
+ " , (SELECT kg.prs_perslid_key"
+ " FROM prs_kostenplaats k"
+ " , prs_kostenplaatsgrp kg"
+ " WHERE k.prs_kostenplaatsgrp_key = kg.prs_kostenplaatsgrp_key"
+ " AND k.prs_kostenplaats_key = o.prs_kostenplaats_key) fiatteur_kpg_key"
+ " , d.ins_discipline_key"
+ " , (SELECT COALESCE(ks.prs_kostensoort_btw, 0)"
+ " FROM prs_kostensoort ks"
+ " WHERE ks.prs_kostensoort_key = d.prs_kostensoort_key) inclBTW"
+ " , fac.gettrackinguserkey('ORDFOK', o.mld_opdr_key) mld_opdr_fiat_user"
+ " , o.mld_opdr_approved"
+ " , o.mld_opdr_approved_refiat"
+ " , fac.gettrackingdate('ORDFIA', o.mld_opdr_key) trackdateFIA"
+ " , fac.gettrackingdate('ORDFOK', o.mld_opdr_key) trackdateFOK"
+ " , mdp.mld_disc_params_offerteauto"
+ " , mdp.mld_disc_params_bestellimiet"
+ " , mdp.mld_disc_params_bestellimiet2"
+ " , mdp.mld_disc_params_bestellimiet3"
+ " , mdp.mld_disc_params_bestellimiet4"
+ " , mdp.mld_disc_params_bestellimiet5"
+ " , mdp.mld_disc_params_pgb"
+ " , (SELECT COALESCE(sum(mld_opdr_uren_besteed),0)"
+ " FROM mld_opdr_uren"
+ " WHERE mld_opdr_key = o.mld_opdr_key) mld_opdr_uren_besteed"
+ " , o.mld_opdr_plandatum"
+ " , o.mld_opdr_id"
+ " , o.mld_opdr_handfiat"
+ " FROM mld_opdr o"
+ " , mld_melding m"
+ " , mld_stdmelding sm"
+ " , ins_tab_discipline d"
+ " , mld_disc_params mdp"
+ " , ins_srtdiscipline sd"
+ " , mld_typeopdr mto"
+ " , cnt_v_aanwezigcontract c"
+ " , mld_v_uitvoerende mu"
+ " , prs_v_perslid_fullnames_all p2"
+ " WHERE o.mld_melding_key = m.mld_melding_key"
+ " AND m.mld_stdmelding_key = sm.mld_stdmelding_key"
+ " AND sm.mld_ins_discipline_key = d.ins_discipline_key"
+ " AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key(+)"
+ " AND d.ins_discipline_key = mdp.mld_ins_discipline_key"
+ " AND o.mld_typeopdr_key = mto.mld_typeopdr_key"
+ " AND o.cnt_contract_key = c.cnt_contract_key(+)"
+ " AND o.mld_uitvoerende_keys = mu.mld_uitvoerende_key"
+ " AND p2.prs_perslid_key(+) = prs.getkpverantwoordelijke (o.prs_kostenplaats_key, " + S("prs_approvemethod") + ", -1)"
+ " AND o.mld_opdr_key = " + opdr_key;
var oRs = Oracle.Execute(sql);
// Numeric values are used (only) here to calculate corr_cost.
var hours = oRs("mld_opdr_uren").Value;
var hours_refiat = oRs("mld_opdr_uren_refiat").Value;
var m_cost = oRs("mld_opdr_materiaal").Value;
var m_cost_refiat = oRs("mld_opdr_materiaal_refiat").Value;
var t_cost = oRs("mld_opdr_kosten").Value;
var t_cost_refiat = oRs("mld_opdr_kosten_refiat").Value;
var h_rate = oRs("mld_opdr_uurloon").Value;
var h_rate_refiat = oRs("mld_opdr_uurloon_refiat").Value;
var corr_cost = null;
if (t_cost != null || m_cost != null || ( (h_rate != null) && (hours != null) ))
{
corr_cost = ((t_cost || 0) - (m_cost || 0) - ((h_rate || 0) * (hours || 0)));
corr_cost = (corr_cost == 0 ? null : corr_cost);
}
var corr_cost_refiat = null;
if (t_cost_refiat != null || m_cost_refiat != null || ( (h_rate_refiat != null) && (hours_refiat != null) ))
{
corr_cost_refiat = ((t_cost_refiat || 0) - (m_cost_refiat || 0) - ((h_rate_refiat || 0) * (hours_refiat || 0)));
corr_cost_refiat = (corr_cost_refiat == 0 ? null : corr_cost_refiat);
}
var result = { opdr_key: opdr_key,
mld_opdr_datumbegin: new Date(oRs("mld_opdr_datumbegin").Value),
mld_key: oRs("mld_melding_key").Value,
contactpers: oRs("mld_opdr_contactpersoon").Value,
opdr_omschr: oRs("mld_opdr_omschrijving").Value,
period: oRs("aantal_dagen").Value || 0,
hours: hours,
hours_refiat: hours_refiat,
m_cost: m_cost,
m_cost_refiat: m_cost_refiat,
t_cost: t_cost,
t_cost_refiat: t_cost_refiat,
uitvoerende_key: oRs("mld_uitvoerende_keys").Value,
contract_naam: oRs("cnt_contract_key").Value
? oRs("cnt_name").Value
: "",
contract_key: oRs("cnt_contract_key").Value || -1,
h_rate: h_rate,
h_rate_refiat: h_rate_refiat,
opdr_type: oRs("mld_typeopdr_key").Value,
opdr_type_omschr: oRs("mld_typeopdr_omschrijving").Value,
typeopdr_matchtype: oRs("mld_typeopdr_matchtype").Value,
typeopdr_slamode: oRs("mld_typeopdr_slamode").Value,
typeopdr_kosten: oRs("mld_typeopdr_kosten").Value,
typeopdr_sluitmelding: oRs("mld_typeopdr_sluitmelding").Value,
typeopdr_afmeldmarge: oRs("mld_typeopdr_afmeldmarge").Value || 0,
typeopdr_offertelimiet: oRs("mld_typeopdr_offertelimiet").Value || -1, // Boven dit bedrag is een offerte vereist (met name voor niet-offerteopdrachten)
typeopdr_isofferte: oRs("mld_typeopdr_isofferte").Value, // Of deze opdracht een offerte is
typeopdr_typeopdr_key: oRs("mld_typeopdr_typeopdr_key").Value, // De mld_typeopdr_key voor vervolgopdracht (indien dit een offerte was)
typeopdr_contract: oRs("mld_typeopdr_contract").Value, // Of bij deze opdracht een contract moet (3), kan (2) of niet kan (0) worden opgegeven
typeopdr_afhandeling: oRs("mld_typeopdr_afhandeling").Value, // Afhandeling verplicht bij afmelden opdracht van dit opdrachttype (0=Nee/1=Ja)
typeopdr_kosten_verplicht: oRs("mld_typeopdr_kosten_verplicht").Value || 0, // Opdracht kosten verplicht (bitwise) bij (0 = niet verplicht, 1 = save + 2 = afmelden, 4 = afronden).
typeopdr_sequential: oRs("mld_typeopdr_sequential").Value == 1,
contactpers_key: oRs("mld_opdr_contact_key").Value || -1,
contactpers_naam: oRs("mld_opdr_contact_naam").Value,
contactpersuitv_key: oRs("prs_contactpersoon_key").Value,
opdr_status: oRs("mld_statusopdr_key").Value,
extended_opdr_status: mld.getextendedopdrstatus(oRs("mld_statusopdr_key").Value, opdr_key),
opdr_status_refiat: oRs("mld_statusopdr_key_refiat").Value || 0,
mld_opdr_fiat_user: oRs("mld_opdr_fiat_user").Value, // Laatste fiatteur die gefiatteerd heeft
stdm_key: oRs("mld_stdmelding_key").Value,
perslidkey: oRs("prs_perslid_key").Value,
vakgroep: oRs("ins_discipline_omschrijving").Value,
kosten_klant: oRs("mld_kosten_klant").Value,
kp_key: oRs("prs_kostenplaats_key").Value,
kp_fiat: oRs("kp_fiat").Value == 1,
mld_opdr_opmerking_fiat: oRs("mld_opdr_opmerking_fiat").Value,
mld_opdr_bedrijfopdr_volgnr: oRs("mld_opdr_bedrijfopdr_volgnr").Value,
volgnr: oRs("mld_opdr_bedrijfopdr_volgnr").Value,
mld_opdr_ordernr: oRs("mld_opdr_ordernr").Value,
opdrkosten_verplicht: oRs("mld_disc_params_opdr_kosten").Value || 0,
opdr_opmerking: oRs("mld_opdr_opmerking").Value,
mld_opdr_einddatum: new Date(oRs("mld_opdr_einddatum").Value),
srtdiscbes: (oRs("ins_srtdiscipline_bes").Value == 1),
srtdiscprefix: oRs("ins_srtdiscipline_prefix").Value,
act_key: oRs("fac_activiteit_key").Value || -1,
uitv_type: oRs("type").Value,
uitv_intern: oRs("intern").Value == 1,
corr_cost: corr_cost,
corr_cost_refiat: corr_cost_refiat,
fiatteur_kp_key: oRs("fiatteur_kp_key").Value || -1,
fiatteur_kpg_key: oRs("fiatteur_kpg_key").Value || -1,
dis_key: oRs("ins_discipline_key").Value,
inclBTW: oRs("inclBTW").Value,
aanvrager: oRs("ins_discipline_key").Value,
offerteauto: oRs("mld_disc_params_offerteauto").Value == 1,
booked: oRs("mld_opdr_uren_besteed").Value,
approved: oRs("mld_opdr_approved").Value || -1,
approved_refiat: oRs("mld_opdr_approved_refiat").Value || -1,
refiat_is_approvedby_kp: (oRs("mld_statusopdr_key_refiat").Value || 0) > 0 && // Refiat van de opdracht
oRs("mld_statusopdr_key").Value == 3 && // Opdracht staat "Ter fiattering"
oRs("trackdateFIA").Value != null && oRs("trackdateFOK").Value != null && // Er is al eens gefiatteerd
oRs("trackdateFIA").Value < oRs("trackdateFOK").Value, // De eerste fiatteur heeft opnieuw gefiatteerd.
bestellimiet: oRs("mld_disc_params_bestellimiet").Value || 0,
bestellimiet2: oRs("mld_disc_params_bestellimiet2").Value || 0,
bestellimiet3: oRs("mld_disc_params_bestellimiet3").Value || 0,
bestellimiet4: oRs("mld_disc_params_bestellimiet4").Value || 0,
bestellimiet5: oRs("mld_disc_params_bestellimiet5").Value || 0,
disc_params_pgb: oRs("mld_disc_params_pgb").Value || 0,
mld_opdr_plandatum: oRs("mld_opdr_plandatum").Value != null ? new Date(oRs("mld_opdr_plandatum").Value) : null,
mld_opdr_id: oRs("mld_opdr_id").Value,
opdr_handfiat: oRs("mld_opdr_handfiat").Value == 1 // Vrijwillig fiatteren.
};
oRs.close();
// Uitvoertijd.
if (result.uitvoerende_key > 0)
result.uitvoertijd = mld.getbedrijfuitvoertijd(result.uitvoerende_key);
return result;
},
mld_opdr_info_new:
function _mld_opdr_info_new(mld_key, opdr_type, params)
{
params = params || {};
var uitvoerende_key = params.uitvoerende_key || -1;
var cnt_key = params.cnt_key || -1;
var opdr_copy_key = params.opdr_copy_key || -1;
var act_key = params.act_key || -1;
//
var copy = (opdr_copy_key > -1);
if (copy)
{
// Haal de opdrachtgegevens op van de opdracht
result = mld.mld_opdr_info(opdr_copy_key);
if (result.typeopdr_matchtype == 5) // Origineel materiaal is niet meegekopieerd dus de kosten ook niet
{
result.t_cost = 0;
result.m_cost = 0;
result.corr_cost = 0;
result.h_rate = 0;
}
result.opdr_type_org = result.opdr_type; // As in/from database. Flexkenmerken overnemen van gekopieerde opdracht
mld_key = result.mld_key;
//
if (result.contactpersuitv_key == null)
result.contactpersuitv_key = -1;
}
else // echt nieuw
{
result = { mld_key: mld_key,
t_cost: 0,
m_cost: 0,
corr_cost: 0,
h_rate: 0,
contactpersuitv_key: -1,
opdr_status: -1,
contract_key: cnt_key,
opdr_opmerking: "",
period: 0, // Te laat is altijd 0
hours: 0,
uitvoerende_key: uitvoerende_key,
contactpers_key: -1,
opdr_type_org: -1, // As in/from database
kp_key: -1,
kp_fiat: true,
mld_opdr_ordernr: ""
};
// Onderscheid uitvoerders m.b.t. initi<74>le waarde beheerder:
// 1) Extern bedrijf: Beheerder is default de user (invoerder).
// 2) Interne persoon: Beheerder is default de user (invoerder).
// 3) Intern bedrijf: Beheerder is default leeg.
if (result.uitvoerende_key > 0)
{
var sql = "SELECT b.prs_bedrijf_uurloon"
+ ", b.prs_bedrijf_naam"
+ ", COALESCE (prs_bedrijf_intern, 0) intern"
+ " FROM prs_bedrijf b"
+ " WHERE b.prs_bedrijf_key = " + result.uitvoerende_key;
var oRs = Oracle.Execute(sql);
if (!oRs.eof) // Had in theorie ook een persoon kunnen zijn?
{
result.uitv_type = 'B';
result.h_rate = oRs("prs_bedrijf_uurloon").Value;
result.uitvoerende = oRs("prs_bedrijf_naam").Value;
result.uitv_intern = oRs("intern").Value == 1;
}
else
{
result.uitv_type = 'B';
result.uitv_intern = 1;
}
oRs.Close();
}
//
sql = "SELECT m.mld_stdmelding_key"
+ " , CASE"
+ " WHEN sd.ins_srtdiscipline_prefix IS NULL"
+ " THEN ''"
+ " ELSE sd.ins_srtdiscipline_prefix || '-'"
+ " END"
+ " || " + lcl.xsqla('d.ins_discipline_omschrijving', 'd.ins_discipline_key')
+ " , mdp.mld_disc_params_opdr_kosten"
+ " , sd.ins_srtdiscipline_prefix"
+ " , sd.ins_srtdiscipline_bes"
+ " , m.mld_melding_datum"
+ " , m.mld_melding_einddatum"
+ " , m.mld_melding_omschrijving"
+ " , (SELECT COALESCE(ks.prs_kostensoort_btw, 0)"
+ " FROM prs_kostensoort ks"
+ " WHERE ks.prs_kostensoort_key = d.prs_kostensoort_key) inclBTW"
+ " , mdp.mld_disc_params_pgb"
+ " , d.ins_discipline_key"
+ " FROM mld_melding m"
+ " , mld_stdmelding sm"
+ " , ins_tab_discipline d"
+ " , mld_disc_params mdp"
+ " , ins_srtdiscipline sd"
+ " WHERE d.ins_discipline_key = mdp.mld_ins_discipline_key"
+ " AND m.mld_stdmelding_key = sm.mld_stdmelding_key"
+ " AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key(+)"
+ " AND sm.mld_ins_discipline_key = d.ins_discipline_key"
+ " AND m.mld_melding_key = " + mld_key;
oRs = Oracle.Execute(sql);
//
result.stdm_key = oRs("mld_stdmelding_key").Value;
result.vakgroep = oRs("ins_discipline_omschrijving").Value;
result.opdr_omschr = oRs("mld_melding_omschrijving").Value;
result.opdrkosten_verplicht = oRs("mld_disc_params_opdr_kosten").Value;
result.srtdiscprefix = oRs("ins_srtdiscipline_prefix").Value;
result.srtdiscbes = (oRs("ins_srtdiscipline_bes").Value == 1);
result.inclBTW = oRs("inclBTW").Value;
result.disc_params_pgb = oRs("mld_disc_params_pgb").Value || 0;
result.dis_key = oRs("ins_discipline_key").Value;
result.act_key = (act_key > 0 ? act_key : -1); // fac_activiteit_key vanuit BES?
oRs.Close();
}
// ---
// mld_opdr is nu al deels gevuld. Rest zowel voor nieuw als voor copy
// ---
// Er hoeft nu niet meer een mogelijk default opdrachttype bepaalt te worden. In het popupscherm is een opdrachttype gekozen.
// Neem de opdrachttype key/omschrijving/matchtype/kosten van het opdrachttype dat in het popupscherm is gekozen.
sql = "SELECT " + lcl.xsqla("t.mld_typeopdr_omschrijving", "t.mld_typeopdr_key")
+ " , t.mld_typeopdr_matchtype"
+ " , t.mld_typeopdr_slamode"
+ " , t.mld_typeopdr_kosten"
+ " , t.mld_typeopdr_offertelimiet"
+ " , t.mld_typeopdr_isofferte"
+ " , t.mld_typeopdr_typeopdr_key"
+ " , t.mld_typeopdr_contract"
+ " , t.mld_typeopdr_kosten_verplicht"
+ " FROM mld_typeopdr t"
+ " WHERE t.mld_typeopdr_key = " + opdr_type;
oRs = Oracle.Execute(sql);
//
result.opdr_type = opdr_type;
result.opdr_type_omschr = oRs("mld_typeopdr_omschrijving").Value;
result.typeopdr_matchtype = oRs("mld_typeopdr_matchtype").Value;
result.typeopdr_slamode = oRs("mld_typeopdr_slamode").Value;
result.typeopdr_kosten = oRs("mld_typeopdr_kosten").Value;
result.typeopdr_offertelimiet = oRs("mld_typeopdr_offertelimiet").Value || -1; // Boven dit bedrag is een offerte vereist (met name voor niet-offerteopdrachten)
result.typeopdr_isofferte = oRs("mld_typeopdr_isofferte").Value; // Of deze opdracht een offerte is
result.typeopdr_typeopdr_key = oRs("mld_typeopdr_typeopdr_key").Value; // De mld_typeopdr_key voor vervolgopdracht (indien dit een offerte was)
result.typeopdr_contract = oRs("mld_typeopdr_contract").Value;
result.typeopdr_kosten_verplicht = oRs("mld_typeopdr_kosten_verplicht").Value || 0; // Opdracht kosten verplicht (bitwise) bij (0 = niet verplicht, 1 = save + 2 = afmelden, 4 = afronden).
if (copy)
{
if (result.typeopdr_matchtype == 3 ||
result.typeopdr_matchtype == 4 ||
result.typeopdr_matchtype == 5)
{ // Het nieuwe type kent geen kosten dus wissen
result.m_cost = 0;
result.corr_cost = 0;
result.h_rate = 0;
}
if (result.typeopdr_matchtype == 4)
{
result.t_cost = 0;
}
}
//
sql = "SELECT mld.bepaalopdrmeldingvolgnr(" + mld_key + ") volg"
+ " FROM DUAL";
oRs = Oracle.Execute(sql);
result.mld_opdr_bedrijfopdr_volgnr = oRs("volg").Value;
oRs.Close();
//
if (result.typeopdr_slamode == 2) // Melding-SLA
{
result.uitvoertijd = mld.getmeldinguitvoertijd(mld_key);
}
return result;
},
dialectIsSet : false,
mld_set_dialect:
function (mld_key)
{
var sql = "SELECT md.ins_srtdiscipline_key"
+ " FROM mld_melding mm, mld_stdmelding ms, mld_discipline md"
+ " WHERE mm.mld_melding_key = " + mld_key
+ " AND ms.mld_stdmelding_key = mm.mld_stdmelding_key"
+ " AND ms.mld_ins_discipline_key = md.ins_discipline_key";
var oRs = Oracle.Execute(sql);
lcl.set_dialect(oRs("ins_srtdiscipline_key").Value, "MLD_SRTDISCIPLINE_KEY");
oRs.Close();
mld.dialectIsSet = true;
},
mld_stdmeldinginfo:
function _mld_stdmelding(mld_stdmelding_key) {
var sql = "SELECT " + lcl.xsqla('ms.mld_stdmelding_omschrijving','ms.mld_stdmelding_key')
+ " , mld_stdmelding_omschrijving mld_stdm_omschrijving_dblang"
+ " , mld_stdmelding_volgnr"
+ " , ins_discipline_key"
+ " , mld_stdmeldinggroep_key"
+ " , DECODE(COALESCE(sd.ins_srtdiscipline_prefix, ''), '', '', sd.ins_srtdiscipline_prefix) prefix"
+ ", "+ lcl.xsqla('sd.ins_srtdiscipline_omschrijving', 'sd.ins_srtdiscipline_key')
+ " , " + lcl.xsqla('md.ins_discipline_omschrijving', 'md.ins_discipline_key')
+ " , ms.mld_stdmelding_t_uitvoertijd.tijdsduur uitvoertijd" // Uitvoertijd Normaal
+ " , ms.mld_stdmelding_t_uitvtijd_pr1.tijdsduur uitvoertijd1" // Uitvoertijd Kritisch
+ " , ms.mld_stdmelding_t_uitvtijd_pr2.tijdsduur uitvoertijd2" // Uitvoertijd Hoog
+ " , ms.mld_stdmelding_t_uitvtijd_pr4.tijdsduur uitvoertijd4" // Uitvoertijd Laag
+ " , ms.mld_stdmelding_t_uitvoertijd.eenheid eenheid" // Eenheid uitvoertijd Normaal
+ " , ms.mld_stdmelding_t_uitvtijd_pr1.eenheid eenheid1" // Eenheid uitvoertijd Kritisch
+ " , ms.mld_stdmelding_t_uitvtijd_pr2.eenheid eenheid2" // Eenheid uitvoertijd Hoog
+ " , ms.mld_stdmelding_t_uitvtijd_pr4.eenheid eenheid4" // Eenheid uitvoertijd Laag
+ " , ms.mld_stdmelding_t_accepttijd.tijdsduur accepttijd_t"
+ " , ms.mld_stdmelding_t_accepttijd.eenheid accepttijd_e"
+ " , ms.mld_stdmelding_planbaar"
+ " , ms.ins_srtinst_key"
+ " , ms.ins_srtinst_niveau"
+ " , md.ins_srtdiscipline_key"
+ " , md.ins_discipline_kpnverplicht"
+ " , sd.ins_srtdiscipline_kostenklant"
+ " , sd.ins_srtdiscipline_alg"
+ " , sd.ins_srtdiscipline_ins"
+ " , sd.ins_srtdiscipline_bes"
+ " , COALESCE(ms.mld_stdmelding_directklaar, dp.mld_disc_params_directklaar, 0) mld_directklaar" // is wel/geen FO-vakgroep
+ " , dp.mld_disc_params_frontendprio"
+ " , dp.mld_disc_params_eigen_kp"
+ " , ms.mld_stdmelding_notfrontend"
+ " , mld_stdmelding_notify"
+ " , ms.prs_kostensoort_key"
+ " , dp.mld_disc_params_startdatum"
+ " , ms.mld_stdmelding_freetext"
+ " , ms.mld_stdmelding_subject"
+ " , ms.mld_stdmelding_afmeldtext"
+ " , ms.ins_srtinst_verplicht"
+ " , ms.alg_onrgoed_niveau"
+ " , ms.alg_onrgoed_obj_niveau"
+ " , ms.alg_org_obj_niveau"
+ " , ms.mld_stdmelding_prseigen"
+ " , " + lcl.xsqla('ms.mld_stdmelding_hint', 'ms.mld_stdmelding_key')
+ " , ms.mld_stdmelding_hint mld_stdmelding_hint_dblang"
+ " , ms.mld_stdmelding_image"
+ " , ms.prs_dienst_key"
+ " , ms.mld_stdmelding_vereisdienst"
+ " , ms.mld_stdmelding_opdrtypevast"
+ " , ms.mld_typeopdr_key"
+ " , ms.mld_stdmelding_autoorder"
+ " , ms.bes_ins_discipline_key"
+ " , ms.mld_stdmelding_kopieerbaar"
+ " , ms.mld_stdmelding_doublecheck"
+ " , ms.mld_stdmelding_regime"
+ " , ms.mld_stdmelding_malusbasis"
+ " , ms.mld_stdmelding_malus"
+ " , ms.mld_stdmelding_afhankelijk"
+ " , ms.mld_stdmelding_kto"
+ " , ms.mld_stdmelding_vervaldatum"
+ " , ms.mld_stdmelding_kanverwijzen"
+ " , ms.mld_stdmelding_slabewaken"
+ " , ms.mld_stdmelding_externurl"
+ " , (SELECT COUNT(*)"
+ " FROM fac_faq ff"
+ " , mld_stdmeldingfaq sf"
+ " WHERE ff.fac_faq_key = sf.fac_faq_key"
+ " AND (sf.mld_stdmelding_key = ms.mld_stdmelding_key"
+ " OR (sf.mld_stdmelding_key IS NULL"
+ " AND sf.ins_discipline_key = ms.mld_ins_discipline_key))"
+ " AND fac_faq_datum < SYSDATE"
+ " AND (fac_faq_lang = " + safe.quoted_sql(user_lang) + " OR fac_faq_lang IS NULL)) aantal_faq"
+ " FROM mld_stdmelding ms, mld_discipline md"
+ " , mld_disc_params dp, ins_srtdiscipline sd"
+ " WHERE ms.mld_stdmelding_key = " + mld_stdmelding_key
+ " AND ms.mld_ins_discipline_key = md.ins_discipline_key"
+ " AND md.ins_discipline_key = dp.mld_ins_discipline_key"
+ " AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key(+) " // TODO JGL: Waarom outer join?
var oRs = Oracle.Execute(sql);
if (!mld.dialectIsSet) // Belangrijk voor prio-teksten
lcl.set_dialect(oRs("ins_srtdiscipline_key").Value, "MLD_SRTDISCIPLINE_KEY");
var prios = {}; // let op: geen array dus maar object!
// Normaal (3) is er altijd, desnoods met de default-default waarden.
prios[3] = { text: L("lcl_mld_urg_normaal"),
key: 3,
uitvoertijd: oRs("uitvoertijd").Value? oRs("uitvoertijd").Value : "",
eenheid: oRs("eenheid").Value || 'D'
};
if (oRs("uitvoertijd1").Value)
prios[1] = { text: L("lcl_mld_urg_kritiek"),
key: 1,
uitvoertijd: oRs("uitvoertijd1").Value? oRs("uitvoertijd1").Value : "",
eenheid: oRs("eenheid1").Value || 'D'
};
if (oRs("uitvoertijd2").Value)
prios[2] = { text: L("lcl_mld_urg_hoog"),
key: 2,
uitvoertijd: oRs("uitvoertijd2").Value? oRs("uitvoertijd2").Value : "",
eenheid: oRs("eenheid2").Value || 'D'
};
if (oRs("uitvoertijd4").Value)
prios[4] = { text: L("lcl_mld_urg_laag"),
key: 4,
uitvoertijd: oRs("uitvoertijd4").Value? oRs("uitvoertijd4").Value : "",
eenheid: oRs("eenheid4").Value || 'D'
};
var alg_level = 0;
switch (oRs("ins_srtdiscipline_alg").Value)
{
case 1: alg_level = 5; break; // Ruimte
case 3: alg_level = 4; break; // Verdieping
case 5: alg_level = 3; break; // Gebouw
case 7: alg_level = 2; break; // Locatie
default: alg_level = 0; // niet tonen
}
var result = { mld_stdmelding_key: mld_stdmelding_key,
stdmelding_omschrijving: oRs("mld_stdmelding_omschrijving").Value,
stdmelding_omschrijving_dblang: oRs("mld_stdm_omschrijving_dblang").Value,
stdmelding_volgnr: oRs("mld_stdmelding_volgnr").Value,
ins_discipline_key: oRs("ins_discipline_key").Value,
stdmeldinggroep_key: oRs("mld_stdmeldinggroep_key").Value,
srtdisc_oms: oRs("ins_srtdiscipline_omschrijving").Value,
ins_srtdiscipline_key: oRs("ins_srtdiscipline_key").Value,
ins_srtdiscipline_alglevel: alg_level,
ins_srtdiscipline_alg: alg_level > 0,
ins_srtdiscipline_ins: oRs("ins_srtdiscipline_ins").Value == 1,
ins_srtdiscipline_bes: oRs("ins_srtdiscipline_bes").Value == 1,
directklaar: oRs("mld_directklaar").Value,
ins_srtdiscipline_prefix: oRs("prefix").Value,
ins_srtdiscipline_kostenklant: oRs("ins_srtdiscipline_kostenklant") == 1,
hide_kostenplaats_fe: oRs("ins_srtdiscipline_kostenklant") == 2,
discipline_omschrijving: oRs("ins_discipline_omschrijving").Value,
prioriteiten: prios,
frontendprio: oRs("mld_disc_params_frontendprio").Value,
notfrontend: oRs("mld_stdmelding_notfrontend").Value,
notify: oRs("mld_stdmelding_notify").Value,
kostensoort: oRs("prs_kostensoort_key").Value,
startdatum: oRs("mld_disc_params_startdatum").Value == 1,
accepttijd: oRs("accepttijd_t").Value,
eenheid_accepttijd: oRs("accepttijd_e").Value || 'D',
ins_srtinst_key: oRs("ins_srtinst_key").Value,
ins_srtinst_niveau: oRs("ins_srtinst_niveau").Value,
planbaar: oRs("mld_stdmelding_planbaar").Value == 1,
kpnverplicht: oRs("ins_discipline_kpnverplicht").Value,
show_eigen_kp: (oRs("mld_disc_params_eigen_kp").Value == 1),
freetext: oRs("mld_stdmelding_freetext").Value,
subject: oRs("mld_stdmelding_subject").Value,
afmeldtext: oRs("mld_stdmelding_afmeldtext").Value,
srtinst_verplicht: oRs("ins_srtinst_verplicht").Value == 1,
alg_onrgoed_niveau: oRs("alg_onrgoed_niveau").Value,
alg_onrgoed_obj_niveau: oRs("alg_onrgoed_obj_niveau").Value || "",
alg_org_obj_niveau: oRs("alg_org_obj_niveau").Value,
prseigen: oRs("mld_stdmelding_prseigen").Value == 1,
hint: oRs("mld_stdmelding_hint").Value,
hint_dblang: oRs("mld_stdmelding_hint_dblang").Value,
image: oRs("mld_stdmelding_image").Value,
prs_dienst_key: oRs("prs_dienst_key").Value,
vereisdienst: oRs("mld_stdmelding_vereisdienst").Value == 1,
opdrtypevast: oRs("mld_stdmelding_opdrtypevast").Value == 1,
typeopdr_key: oRs("mld_typeopdr_key").Value,
autoorder: oRs("mld_stdmelding_autoorder").Value,
bes_ins_discipline_key: oRs("bes_ins_discipline_key").Value,
kopieerbaar: oRs("mld_stdmelding_kopieerbaar").Value,
doublecheck: oRs("mld_stdmelding_doublecheck").Value || 0,
regime: oRs("mld_stdmelding_regime").Value || 1, // 1 is kantoortijden
malusbasis: oRs("mld_stdmelding_malusbasis").Value,
malus: oRs("mld_stdmelding_malus").Value,
afhankelijk: oRs("mld_stdmelding_afhankelijk").Value,
stdmelding_kto: oRs("mld_stdmelding_kto").Value || 0,
vervaldatum: oRs("mld_stdmelding_vervaldatum").Value != null? new Date(oRs("mld_stdmelding_vervaldatum").Value) : oRs("mld_stdmelding_vervaldatum").Value,
kanverwijzen: oRs("mld_stdmelding_kanverwijzen").Value,
slabewaken: oRs("mld_stdmelding_slabewaken").Value == 1,
externurl: oRs("mld_stdmelding_externurl").Value,
aantal_faq: oRs("aantal_faq").Value, // Totaal aantal
fixed_faq: [], // deze worden altijd getoond
popup_faq: false, // Popupje tonen?
is_kto_antwoord: oRs("ins_srtdiscipline_key").Value == S("kto_srtdiscipline_key") // dan bevriest een en ander
};
oRs.Close();
if (result.aantal_faq > 0)
{
var canFAQUSEread = user.checkAutorisation("WEB_FAQUSE", true);
var canFAQFOFread = user.checkAutorisation("WEB_FAQFOF", true);
var faq_bits = 0;
if (canFAQUSEread)
faq_bits += 1;
if (canFAQFOFread)
faq_bits += 2;
var sql = "SELECT ff.fac_faq_key, "
+ " fac_faq_question, "
+ " fac_faq_answer, "
+ " fac_faq_url, "
+ " fac_faq_level, "
+ " fac_faq_displaymode"
+ " FROM fac_faq ff"
+ " , mld_stdmeldingfaq sf"
+ " WHERE ff.fac_faq_key = sf.fac_faq_key"
+ " AND (sf.mld_stdmelding_key = " + mld_stdmelding_key
+ " OR (sf.mld_stdmelding_key IS NULL"
+ " AND sf.ins_discipline_key = " + result.ins_discipline_key + "))"
+ " AND BITAND(fac_faq_level," + faq_bits + ") <> 0"
+ " AND fac_faq_datum < SYSDATE"
+ " AND (fac_faq_lang = " + safe.quoted_sql(user_lang) + " OR fac_faq_lang IS NULL)"
+ " ORDER BY fac_faq_rank DESC NULLS LAST"
+ " , fac_faq_datum DESC"
+ " , fac_faq_question";
var oRs = Oracle.Execute(sql);
result.popup_faq = false;
while (!oRs.EOF)
{
var displaymode = oRs("fac_faq_displaymode").Value;
if (displaymode == 0) // Auto
{
if ( ((S("faq_kennisbank_popup") & 1) && canFAQUSEread) // Voor FE
|| ((S("faq_kennisbank_popup") & 2) && canFAQFOFread)) // Voor FO
result.popup_faq = true
}
else
{
var data = { question: oRs("fac_faq_question").Value,
answer: safe.fclthtml(oRs("fac_faq_answer").Value),
displaymode: oRs("fac_faq_displaymode").Value
};
var fac_url = oRs("fac_faq_url").value;
if (fac_url)
{
var arr = fac_url.split("|");
var hurl = arr[0];
data.hlnk = arr.length>1?arr[1]:hurl;
if (hurl.slice(0,4) == "http") // extern
data.hurl = hurl;
else // in cust subdir
data.hurl = custpath + "/" + hurl;
}
result.fixed_faq.push(data);
}
oRs.MoveNext();
}
oRs.Close();
}
return result;
},
alg_algfaq_info:
function _alg_faq(loc_key, alg_key) {
if (!loc_key || loc_key == -1) return; // Minimal requirement
var sql = "SELECT NVL(o.alg_type, 'L') scope"
+ " , l.alg_locatie_code ||"
+ " DECODE(o.alg_plaatsaanduiding, NULL, NULL, '-' || o.alg_plaatsaanduiding) plaats"
+ " FROM alg_locatie l"
+ " , alg_v_onroerendgoed_gegevens o"
+ " WHERE l.alg_locatie_key = o.alg_locatie_key(+)"
+ " AND l.alg_locatie_key = " + loc_key
+ " AND " + ((alg_key && alg_key != -1) ? alg_key : "-1") + " = o.alg_onroerendgoed_keys(+)";
var oRs = Oracle.Execute(sql);
var ret = { scope: oRs("scope").Value, plaats: safe.fclthtml(oRs("plaats").Value) };
oRs.Close();
return ret;
},
faq_info:
function _alg_faq(loc_key, alg_key_arr, ins_disc_key, stdm_key) {
if ((!loc_key || loc_key == -1) &&
(!ins_disc_key || ins_disc_key == -1)) // Minimal requirement
return;
var canFAQUSEread = user.checkAutorisation("WEB_FAQUSE", true);
var canFAQFOFread = user.checkAutorisation("WEB_FAQFOF", true);
var faq_bits = 0;
if (canFAQUSEread)
faq_bits += 1;
if (canFAQFOFread)
faq_bits += 2;
var filtFROM = ""
var filtWHERE = "";
var faq_type = "faq_";
if (ins_disc_key && ins_disc_key != -1)
{
filtFROM += " , mld_stdmeldingfaq sf";
filtWHERE += " AND ff.fac_faq_key = sf.fac_faq_key"
+ " AND sf.ins_discipline_key = " + ins_disc_key;
if (stdm_key && stdm_key != -1)
{
faq_type += "S";
filtWHERE += " AND sf.mld_stdmelding_key = " + stdm_key;
}
else
{
faq_type += "I";
filtWHERE += " AND sf.mld_stdmelding_key IS NULL";
}
}
else
{
filtWHERE += " AND NOT EXISTS ("
+ " SELECT ''"
+ " FROM mld_stdmeldingfaq sf"
+ " WHERE ff.fac_faq_key = sf.fac_faq_key"
+ " )";
}
if (loc_key && loc_key != -1)
{
filtFROM += " , alg_algfaq af";
filtWHERE += " AND ff.fac_faq_key = af.fac_faq_key"
+ " AND af.alg_locatie_key = " + loc_key;
if (alg_key_arr == [-1]) // check only loc
{
filtWHERE += " AND af.alg_onroerendgoed_keys IS NULL";
}
else if (alg_key_arr.length > 0)
{
filtWHERE += " AND (af.alg_onroerendgoed_keys IN (" + alg_key_arr + ")";
// if (alg_key_arr.indexOf("-1") > 0)
// filtWHERE += " OR af.alg_onroerendgoed_keys IS NULL";
filtWHERE += " )";
}
}
else
{
filtWHERE += " AND NOT EXISTS ("
+ " SELECT ''"
+ " FROM alg_algfaq af"
+ " WHERE ff.fac_faq_key = af.fac_faq_key"
+ " )";
}
var sql = "SELECT ff.fac_faq_key, "
+ " fac_faq_question, "
+ " fac_faq_answer, "
+ " fac_faq_url, "
+ " fac_faq_level, "
+ " fac_faq_displaymode"
+ " FROM fac_faq ff"
+ filtFROM
+ " WHERE fac_faq_datum < SYSDATE"
+ " AND BITAND(fac_faq_level," + faq_bits + ") <> 0"
+ " AND (fac_faq_lang = " + safe.quoted_sql(user_lang) + " OR fac_faq_lang IS NULL)"
+ filtWHERE
+ " ORDER BY fac_faq_rank DESC NULLS LAST"
+ " , fac_faq_datum DESC"
+ " , fac_faq_question";
var oRs = Oracle.Execute(sql);
var result = { fixed_faq: [],
popup_faq: false,
loc_key: loc_key,
alg_key_arr: alg_key_arr,
stdm_key: stdm_key,
ins_disc_key: ins_disc_key,
faq_type: faq_type
};
while (!oRs.EOF)
{
var displaymode = oRs("fac_faq_displaymode").Value;
if (displaymode == 0) // Auto
{
if ( ((S("faq_kennisbank_popup") & 1) && canFAQUSEread) // Voor FE
|| ((S("faq_kennisbank_popup") & 2) && canFAQFOFread)) // Voor FO
result.popup_faq = true;
result.loc_key = loc_key || -1;
result.alg_key_arr = alg_key_arr || [];
result.stdm_key = stdm_key || -1;
result.ins_disc_key = ins_disc_key || -1;
}
else
{
var data = { question: oRs("fac_faq_question").Value,
answer: safe.fclthtml(oRs("fac_faq_answer").Value),
displaymode: oRs("fac_faq_displaymode").Value
};
var fac_url = oRs("fac_faq_url").value;
if (fac_url)
{
var arr = fac_url.split("|");
var hurl = arr[0];
data.hlnk = arr.length>1?arr[1]:hurl;
if (hurl.slice(0,4) == "http") // extern
data.hurl = hurl;
else // in cust subdir
data.hurl = custpath + "/" + hurl;
}
result.fixed_faq.push(data);
}
oRs.MoveNext();
}
oRs.Close();
return result;
},
func_enabled_mld: // Heb ik als FO, BO, of FE, enige write rechten voor een discipline binnen de meegekregen discipline string
function _func_enabled_mld(pkey, ptype) {
// is pkey een srtdiscipline of discipline
if (ptype == "S")
{
var sql = "SELECT md.ins_discipline_key"
+ " FROM mld_discipline md"
+ " WHERE md.ins_discipline_verwijder IS NULL"
+ " AND md.ins_srtdiscipline_key = " + pkey;
var oRs = Oracle.Execute(sql);
var lins_discipline_string = "";
while (!oRs.eof)
{
lins_discipline_string += (lins_discipline_string == ""? "" : ", ") + oRs("ins_discipline_key").Value;
oRs.MoveNext();
}
oRs.Close();
}
else // ptype == "D"
var lins_discipline_string = "" + pkey;
var mresult = user.func_enabled("MLD",
lins_discipline_string,
-1, //moRs("mld_alg_onroerendgoed_keys").Value, // TODO: Wat als geen INS_SRTDISCIPLINE_ALG?
user_key,
true); // Check optimistisch: je moet de rechten van minstens <20><>n discipline hebben!
// melding
// Algemeen niveau
mresult.canFOwrite = mresult.canWrite("WEB_MLDFOF");
mresult.canBOwrite = mresult.canWrite("WEB_MLDBOF") || mresult.canWrite("WEB_MLDBO3");
mresult.canFEwrite = mresult.canWrite("WEB_MLDUSE"); // nieuwe melding dus nog geen && user.isCollega(moRs("prs_perslid_key").Value);
mresult.canFOread = mresult.canRead("WEB_MLDFOF");
mresult.canBOread = mresult.canRead("WEB_MLDBOF");
mresult.canFEread = mresult.canRead("WEB_MLDUSE");
mresult.canMIread = mresult.canRead("WEB_MLDBAC");
mresult.canReadAny = mresult.canFORead || mresult.canBORead || mresult.canFERead || mresult.canMIread;
mresult.canReadFEOnly = ((mresult.canReadAny && !mresult.canFOread && !mresult.canBOread && !mresult.canMIread) ? true : false);
// opdracht
// Algemeen niveau
mresult.canORDBOFwrite = mresult.canWrite("WEB_ORDBOF");
mresult.canORDBOFread = mresult.canRead("WEB_ORDBOF");
mresult.haveORDSUPrights = user.checkAutorisation("WEB_ORDSUP", true) != null;
mresult.haveORDFINrights = user.checkAutorisation("WEB_ORDFIN", true) != null;
return mresult;
},
// Functie die bepaald of de meegegeven workflowstep afgewezen mag worden
// De functie bepaald de start workflowstep en van daaruit wordt gekeken of in elke tak de flowstep gevonden kan worden,
// ofwel of de workflowstep in een sequentiele of parallelle tak aanwezig is.
// Wordt de wfstep in elke tak van de tree gevonden (sequentieel) dan wordt true teruggegeven anders fals (parallel)
// De te vinden workflowstep moet meegegeven worden aan de functie.
wfIsRejectable:
function _wfIsRejectable(wfstep) {
// Recursieve functie die kijkt of de volgende stap de te vinden flowstep is, anders kijkt die verder in de tree met een recursieve aanroep.
// Wordt de wfstep gevonden dan wordt true teruggegeven.
// Wordt de wfstep niet gevonden als de functie eindigt aan de eind van de tak zonder de wfstep te vinden. In dat geval wordt false teruggegeven.
function findFlowstepInEveryTree(wfstartkey, wfstep)
{
var wfsql = "SELECT wr.mld_workflowstep_next_key"
+ " FROM mld_workflowrule wr"
+ " WHERE wr.mld_workflowstep_key = " + wfstartkey;
var wfoRs = Oracle.Execute(wfsql);
if (wfoRs.eof)
{
wfoRs.Close();
return false;
}
var wfstepInTree = true;
while (!wfoRs.eof)
{
var wfnextkey = wfoRs("mld_workflowstep_next_key").Value;
wfstepInTree = wfstepInTree && ((wfnextkey == wfstep) || findFlowstepInEveryTree(wfnextkey, wfstep));
if (!wfstepInTree)
break;
wfoRs.MoveNext();
}
wfoRs.Close();
return wfstepInTree;
}
// vindt de start workflowstep
var fsql = "SELECT ws.mld_workflowstep_start_key"
+ " FROM mld_workflowstep ws"
+ " WHERE ws.mld_workflowstep_key = " + wfstep;
var foRs = Oracle.Execute(fsql);
var wfstartkey = foRs("mld_workflowstep_start_key").Value;
var wf_is_rejectable = findFlowstepInEveryTree(wfstartkey, wfstep)
foRs.Close();
return wf_is_rejectable;
},
func_enabled_melding: // Wat mag ik zoal op deze specifieke melding?
function _func_enabled_melding(pmld_melding_key, params) {
params = params || {};
var msql = "SELECT sm.mld_ins_discipline_key"
+ " , m.mld_alg_onroerendgoed_keys"
+ " , m.mld_alg_locatie_key"
+ " , m.mld_melding_status"
+ " , m.prs_perslid_key"
+ " , m.mld_workflowstep_key"
+ " , m.mld_melding_start_key"
+ " , m.mld_melding_parentkey"
+ " , COALESCE(sm.mld_stdmelding_directklaar, mdp.mld_disc_params_directklaar) mld_directklaar"
+ " , mdp.mld_disc_params_frontendprio"
+ " , mld_stdmelding_kopieerbaar"
+ " , mld_stdmelding_doublecheck"
+ " , mdp.mld_disc_params_fenotes"
+ " , mdp.mld_disc_params_keten"
+ " , sm.mld_stdmelding_planbaar"
+ " , (SELECT COUNT(o.mld_opdr_key)"
+ " FROM mld_opdr o"
+ " WHERE o.mld_melding_key = " + pmld_melding_key
+ " AND o.mld_statusopdr_key NOT IN (1, 6, 7, 9)) openopdrachten" // 1=afgewezen, 6=Technisch Voltooid/Afgemeld, 7=Verwerkt en 9= Kosten Voltooid
+ " , (SELECT COUNT(o.mld_opdr_key)"
+ " FROM mld_opdr o"
+ " WHERE o.mld_melding_key = " + pmld_melding_key
+ " AND o.mld_statusopdr_key IN (1, 6, 7, 9)) closedopdrachten" // 1=afgewezen, 6=Technisch Voltooid/Afgemeld, 7=Verwerkt en 9= Kosten Voltooid
+ " , m.fac_activiteit_key mld_action"
+ " , (SELECT COUNT (o.mld_opdr_key)"
+ " FROM mld_opdr o "
+ " WHERE o.mld_melding_key = " + pmld_melding_key
+ " AND o.fac_activiteit_key IS NOT NULL) opdr_action"
+ " , (SELECT MAX (fa.fac_activiteit_aantal)"
+ " FROM mld_opdr o"
+ " , fac_activiteit fa"
+ " WHERE o.fac_activiteit_key = fa.fac_activiteit_key"
+ " AND o.mld_melding_key = " + pmld_melding_key
+ " AND o.fac_activiteit_key IS NOT NULL) opdr_action_aantal"
+ " , m.mld_melding_afgerond"
+ " , mdp.mld_disc_params_bonotify"
+ " FROM mld_melding m"
+ ", mld_stdmelding sm"
+ ", mld_disc_params mdp"
+ " WHERE mld_melding_key = " + pmld_melding_key
+ " AND m.mld_stdmelding_key = sm.mld_stdmelding_key"
+ " AND mdp.mld_ins_discipline_key = sm.mld_ins_discipline_key";
var moRs = Oracle.Execute(msql);
var mld_status = moRs("mld_melding_status").Value;
var is_fo_melding = moRs("mld_directklaar").Value > 0;
var frontendprio = moRs("mld_disc_params_frontendprio").Value == 1;
var is_wf_step = !(moRs("mld_workflowstep_key").Value == null);
var is_wf_root = is_wf_step && (moRs("mld_melding_start_key").Value == pmld_melding_key);
var is_kopieerbaar = moRs("mld_stdmelding_kopieerbaar").Value == 1;
var wfstep = moRs("mld_workflowstep_key").Value;
var melder_key = moRs("prs_perslid_key").Value;
var parent_key = moRs("mld_melding_parentkey").Value;
var doublecheck = moRs("mld_stdmelding_doublecheck").Value;
var fenotes = moRs("mld_disc_params_fenotes").Value;
var keten = moRs("mld_disc_params_keten").Value == 1;
var planbaar = moRs("mld_stdmelding_planbaar").Value == 1;
var hasopenopdrachten = moRs("openopdrachten").Value > 0;
var hasclosedopdrachten = moRs("closedopdrachten").Value > 0;
var hasopdrachten = hasopenopdrachten || hasclosedopdrachten;
var is_planned_action = moRs("mld_action").Value != null || moRs("opdr_action").Value > 0;
var opdr_action_aantal = moRs("opdr_action_aantal").Value;
var mld_afgerond = moRs("mld_melding_afgerond").Value == 1;
var bonotify = moRs("mld_disc_params_bonotify").Value;
// MLDBO3 accept notificatie, sturing puur op basis van mld_disc_params_bonotify.
// Alleen voor mld_disc_params_bonotify is 2 (bo3) of 3 (bo3+bof) is er MLDBO3 accept notificatie (activeMLDBO3).
var activeMLDBO3 = bonotify > 1;
// fenotes is afhankelijk van de discipline (vakgroep) en geeft aan of FE notities mag zien.
// 00 (0) Notitie is default niet zichtbaar voor FE (&1 == 0)
// 01 (1) Notitie is default wel zichtbaar voor FE (&1 == 1)
// 10 (2) Door FOBO te kiezen (per notitie) of FE notitie mag zien. Default waarde volgens &1 is niet zien (&2 == 1 en &1 == 0)
// 11 (3) Door FOBO te kiezen (per notitie) of FE notitie mag zien. Default waarde volgens &1 is wel zien (&2 == 1 en &1 == 1)
// Ben ik ook verantwoordelijk voor meldingen als vervanger van de melder
var isVerantwoordelijke = (user.isCollega(melder_key));
var mresult = user.func_enabled2("MLD",
{ ins_discipline_key: moRs("mld_ins_discipline_key").Value,
alg_key: moRs("mld_alg_onroerendgoed_keys").Value, // TODO: Wat als geen INS_SRTDISCIRPLINE_ALG?
loc_key: moRs("mld_alg_onroerendgoed_keys").Value == null? moRs("mld_alg_locatie_key").Value : null,
prs_key: moRs("prs_perslid_key").Value,
knownread: params.knownread
}
);
var mresult_no_disc = user.func_enabled2("MLD",
{ alg_key: moRs("mld_alg_onroerendgoed_keys").Value, // TODO: Wat als geen INS_SRTDISCIRPLINE_ALG?
loc_key: moRs("mld_alg_onroerendgoed_keys").Value == null? moRs("mld_alg_locatie_key").Value : null,
prs_key: moRs("prs_perslid_key").Value,
knownread: params.knownread
}
);
mresult.canFEread = mresult.canRead("WEB_MLDUSE") && user.isCollega(moRs("prs_perslid_key").Value);
mresult.canFEwrite = mresult.canWrite("WEB_MLDUSE") && user.isCollega(moRs("prs_perslid_key").Value);
moRs.Close();
// -- CONTROLE LEESRECHTEN --
mresult.canReadAny = mresult.canRead("WEB_MLDFOF") ||
mresult.canRead("WEB_MLDBOF") ||
mresult.canRead("WEB_MLDBO2") ||
mresult.canRead("WEB_MLDBO3") ||
mresult.canRead("WEB_MLDBAC") ||
mresult.canFEread ||
isVerantwoordelijke;
if (!mresult.canReadAny) // laatste kans: heb ik een child die verwijst naar mij als parent?
{
var sql = "SELECT mld_melding_key"
+ " FROM mld_melding"
+ " WHERE mld_melding_parentkey = " + pmld_melding_key
+ " AND prs_perslid_key = " + user_key;
var oRs = Oracle.Execute(sql);
if (!oRs.Eof)
mresult.canReadAny = mresult.canFEread = true;
oRs.Close();
}
// JGL: Kan hier al user.auth_required_or_abort(this_mld.canReadAny)?
// Mogelijk nog niet ivm. fiatteerders?
// Doen we wel in mld_show_melding
// Speciaal voor Continue button FO: die is onafhankelijk van de rechten op de *huidige* melding
//var authparamsMLDFOF = user.checkAutorisation("WEB_MLDFOF", true);
//var mldfof_write = authparamsMLDFOF && (authparamsMLDFOF.PRSwritelevel < 9 && authparamsMLDFOF.ALGwritelevel < 9);
// Algemeen niveau
mresult.canFOread = mresult.canRead("WEB_MLDFOF");
mresult.canBOread = mresult.canRead("WEB_MLDBOF") || mresult.canRead("WEB_MLDBO3");
mresult.canMIread = mresult.canRead("WEB_MLDBAC");
mresult.canFOwrite = mresult.canWrite("WEB_MLDFOF");
mresult.canBOwrite = mresult.canWrite("WEB_MLDBOF") || mresult.canWrite("WEB_MLDBO3");
// Voor notities geldt ja/nee autorisatie voor de WEB_MLDXXX autorisatie functies.
mresult.canWriteNotes = (mresult.canRead("WEB_MLDFOF") ||
mresult.canRead("WEB_MLDBOF") ||
mresult.canRead("WEB_MLDBO3") ||
(mresult.canFEread && fenotes > 0) ||
mresult.canRead("WEB_MLDBAC"));
// In de newstyle mode moet ik in ieder geval ook rechten hebben om de melding te kunnen zien.
mresult.canReadNotes = mresult.canWriteNotes || (S("mld_note_mode") == 2 && mresult.canReadAny);
mresult.haveOnlyFErights = (!mresult.canRead("WEB_MLDFOF") && !mresult.canRead("WEB_MLDBOF") && mresult.canFEread);
mresult.canWriteFlags = mresult.canWrite("WEB_MLDBOF") || mresult.canWrite("WEB_MLDFOF"); // Kan ik flags aanpassen
// Op button niveau
mresult.canChange = false; // Wijzig knop tonen
mresult.canChangeUrole = (typeof urole == "undefined" ? "" : urole); // (mld_close kent deze niet, en change-t ook niet interactief)
mresult.canAccept = false; // Accepteren
mresult.canReject = false; // Afwijzen
mresult.canForward = false; // Doorsturen
mresult.canClose = false; // Afmelden
mresult.canContinue = false; // Vervolg ('kopie')
mresult.canDoorzet = false; // Doorzetten naar backoffice
mresult.canTerugzet = false; // Terugzetten naar frontoffice
mresult.canCopy = is_kopieerbaar && (mresult.canFEwrite || mresult.canFOwrite || mresult.canBOwrite) && !is_planned_action;
mresult.canAdd2Faq = false; // Voordragen voor kennisbank
mresult.canAfrond = false; // SLA-technisch goedkeuren
mresult.canAddOpdr = false;
// Op invoerveld niveau
mresult.canVakgChange = false; // Vakgroep (discipline): ((mld_status == 1) && fronto) || (mld_status == 2 && !backo)
mresult.canStdmChange = false; // Melding (stdmelding): mld_status == 1 || mld_status == 2 || ((mld_status != 5 && mld_status != 6 && mld_status != 7) && backo)
mresult.canKostChange = false; // Kosten (kostenplaats, kosten klant en ordernummer): (mld_status == 1 || mld_status == 2 || ((mld_status != 5 && mld_status != 6 && mld_status != 7) && backo) && !fronto)
mresult.canFlexChange = false; // Flexkenmerken: (mld_status == 1 || mld_status == 2 || ((mld_status != 5 && mld_status != 6 && mld_status != 7) && backo))
mresult.canPlaatsChange = false; // Plaats (locatie, gebouw, verdieping, ruimte): (mld_status == 1 || mld_status == 2 || ((mld_status != 5 && mld_status != 6 && mld_status != 7) && backo))
mresult.canAflChange = false; // Afleveradres: (mld_status == 1 || mld_status == 2 || ((mld_status != 5 && mld_status != 6 && mld_status != 7) && backo))
mresult.canPersChange = false; // Persooon (naam melder): fronto && (mld_status != 1 && mld_status < 4)
mresult.canPrioChange = false; // Prioriteit
mresult.canOmsChange = false; // Omschrijving: Aan te passen als mld_status <= 3 en voor frontoffice als status nog actief is (Pending(0), Ingevoerd(2), Ingezien(3), Geaccepteerd(4), Uitgegeven(7))
mresult.canAfhandChange = false; // Afhandeling gegevens
mresult.canSLAChange = false; // SLA (respijt)
mresult.canWriteDatums = false; // Datums (start/eind datum)
mresult.canUnlink = false;
mresult.canLink = false;
// TODO: Voor sommige acties hoef je niet noodzakelijk fronto rechten te hebben op de *huidige* melding?
if (parent_key)
{ // dan mag je praktisch niets meer
switch (mld_status)
{
case 0: // Pending, welbeschouwd zag de backo deze al nooit
mresult.canUnlink = mresult.canWrite("WEB_MLDFOF");
break;
case 1: // Afgewezen
mresult.canUnlink = mresult.canWrite("WEB_MLDFOF") && S("mld_rejected_is_open") == 1;
break;
case 2: // Ingevoerd ('nieuw'), bo heeft er nog niet naar omgezien
mresult.canUnlink = mresult.canWrite("WEB_MLDFOF");
break;
case 3: // Ingezien ('te accepteren') komt alleen nog voor als BO op edit drukt maar niet saved
mresult.canUnlink = mresult.canWrite("WEB_MLDBOF");
break;
case 4: // Geaccepteerd ('In behandeling') (expliciet mld_accept_save_save.asp of als backoffice bewerkt en opslaat)
mresult.canUnlink = mresult.canWrite("WEB_MLDBOF") || mresult.canWrite("WEB_MLDBO3");
break;
case 7: // Uitgegeven
mresult.canUnlink = mresult.canWrite("WEB_MLDBOF");
break;
case 5: // Afgemeld
mresult.canUnlink = mresult.canWrite("WEB_MLDFOF"); //mldfof_write;
break;
case 6: // Admin voltooid
mresult.canUnlink = false;
break;
}
}
else
{
// Let op: WEB_MLDMSU is niet discipline gebonden en zit dus niet in mresult
mresult.canFixSLA = user.checkAutorisation("WEB_MLDMSU", true) && !is_planned_action; // Bijna status onafhankelijk
switch (mld_status)
{
case 0: // Pending, welbeschouwd zag de backo deze al nooit
mresult.canChange = mresult.canWrite("WEB_MLDFOF");
mresult.canChangeUrole = 'fo';
mresult.canReject = mresult.canWrite("WEB_MLDFOF") &&
(!is_wf_step || (is_wf_step && mld.wfIsRejectable(wfstep))) &&
!is_planned_action;
mresult.canDoorzet = mresult.canWrite("WEB_MLDFOF") && !is_planned_action;
mresult.canClose = mresult.canWrite("WEB_MLDFOF") && !is_wf_root && !is_planned_action;
mresult.canVakgChange = mresult.canWrite("WEB_MLDFOF");
mresult.canStdmChange = mresult.canWrite("WEB_MLDFOF") && !is_wf_root;
mresult.canKostChange = mresult.canWrite("WEB_MLDFOF");
mresult.canFlexChange = mresult.canWrite("WEB_MLDFOF");
mresult.canPlaatsChange = mresult.canWrite("WEB_MLDFOF");
mresult.canAflChange = mresult.canWrite("WEB_MLDFOF");
mresult.canPersChange = mresult.canWrite("WEB_MLDFOF");
mresult.canOmsChange = mresult.canWrite("WEB_MLDFOF");
mresult.canAfhandChange = mresult.canWrite("WEB_MLDFOF");
mresult.canWriteDatums = mresult.canWrite("WEB_MLDFOF");
mresult.canAddOpdr = mresult.canWrite("WEB_ORDBOF");
break;
case 1: // Afgewezen
mresult.canChange = (mresult.canWrite("WEB_MLDFOF") && S("mld_rejected_is_open") == 1);
mresult.canChangeUrole = 'fo';
mresult.canContinue = (mresult.canWrite("WEB_MLDFOF") || mresult.canWrite("WEB_MLDBOF")) && mresult_no_disc.canWrite("WEB_MLDFOF") && !is_planned_action && !S("mld_disable_continuation"); //mldfof_write;
mresult.canVakgChange = mresult.canWrite("WEB_MLDFOF");
mresult.canStdmChange = !is_wf_root;
mresult.canKostChange = (mresult.canWrite("WEB_MLDBOF") || mresult.canWrite("WEB_MLDBO3") || mresult.canFEwrite);
mresult.canFlexChange = true;
mresult.canPlaatsChange = true;
mresult.canAflChange = true;
// Alleen FO kan melding aanpassen. FE toevoegen voor canPrioChange heeft geen zin.
mresult.canPrioChange = (!planbaar && mresult.canWrite("WEB_MLDFOF"));
mresult.canOmsChange = mresult.canWrite("WEB_MLDFOF");
mresult.canAfhandChange = mresult.canWrite("WEB_MLDFOF");
mresult.canWriteDatums = mresult.canWrite("WEB_MLDFOF");
break;
case 2: // Ingevoerd ('nieuw'), bo heeft er nog niet naar omgezien
mresult.canChange = mresult.canWrite("WEB_MLDFOF") || mresult.canFEwrite;
mresult.canChangeUrole = mresult.canWrite("WEB_MLDFOF")?'fo':'fe'; // Bij deze status (2) impliceert wijzigen altijd de FO-rol, ook als mijn rol nu BO is.
mresult.canAccept = ((mresult.canWrite("WEB_MLDBOF") && !activeMLDBO3) || mresult.canWrite("WEB_MLDBO3")) && !is_planned_action;
mresult.canReject = ((mresult.canWrite("WEB_MLDBOF") && !activeMLDBO3) || mresult.canWrite("WEB_MLDBO3")) &&
(!is_wf_step || (is_wf_step && mld.wfIsRejectable(wfstep))) &&
!is_planned_action;
mresult.canForward = (mresult.canWrite("WEB_MLDBOF") && !is_planned_action);
mresult.canClose = (mresult.canWrite("WEB_MLDBOF") || (mresult.canWrite("WEB_MLDFOF") && (params && params.verynew))) && !is_wf_root && !is_planned_action;
mresult.canContinue = (mresult.canWrite("WEB_MLDFOF") || mresult.canWrite("WEB_MLDBOF")) && mresult_no_disc.canWrite("WEB_MLDFOF") && !is_planned_action && !S("mld_disable_continuation"); //mldfof_write;
mresult.canVakgChange = (mresult.canWrite("WEB_MLDFOF") || mresult.canFEwrite || mresult.canWrite("WEB_MLDBOF"));
mresult.canStdmChange = !is_wf_root;
mresult.canKostChange = (mresult.canWrite("WEB_MLDFOF") || mresult.canWrite("WEB_MLDBOF") || mresult.canWrite("WEB_MLDBO3") || mresult.canFEwrite);
mresult.canFlexChange = true;
mresult.canPlaatsChange = true;
mresult.canAflChange = true;
mresult.canPersChange = mresult.canWrite("WEB_MLDFOF");
mresult.canPrioChange = (!planbaar && mresult.canWrite("WEB_MLDFOF") || (mresult.canFEwrite && frontendprio));
mresult.canTerugzet = (is_fo_melding && mresult.canWrite("WEB_MLDBOF") && !is_planned_action);
// Alleen FO en FE kan melding aanpassen. BOF/BO3 toevoegen heeft voor volgende twee geen zin
mresult.canOmsChange = mresult.canWrite("WEB_MLDFOF") || mresult.canFEwrite;
mresult.canAfhandChange = mresult.canWrite("WEB_MLDFOF");
mresult.canWriteDatums = (mresult.canWrite("WEB_MLDFOF") || (mresult.canFEwrite && planbaar));
mresult.canAddOpdr = mresult.canWrite("WEB_ORDBOF");
mresult.canSLAChange = mresult.canWrite("WEB_MLDBOF");
break;
case 3: // Ingezien ('te accepteren') komt alleen nog voor als BO op edit drukt maar niet saved
// FO kan alleen omschrijving aanpassen
mresult.canChange = ((mresult.canWrite("WEB_MLDBOF") && !activeMLDBO3) || mresult.canWrite("WEB_MLDFOF"));
mresult.canChangeUrole = mresult.canWrite("WEB_MLDBOF")? 'bo' : 'fo';
mresult.canAccept = ((mresult.canWrite("WEB_MLDBOF") && !activeMLDBO3) || mresult.canWrite("WEB_MLDBO3")) && !is_planned_action;
mresult.canReject = ((mresult.canWrite("WEB_MLDBOF") && !activeMLDBO3) || mresult.canWrite("WEB_MLDBO3")) &&
(!is_wf_step || (is_wf_step && mld.wfIsRejectable(wfstep))) &&
!is_planned_action;
mresult.canForward = (mresult.canWrite("WEB_MLDBOF") && !is_planned_action); // willekeurige vakgroep
mresult.canClose = (mresult.canWrite("WEB_MLDBOF") && !is_wf_root && !is_planned_action);
mresult.canContinue = (mresult.canWrite("WEB_MLDFOF") || mresult.canWrite("WEB_MLDBOF")) && mresult_no_disc.canWrite("WEB_MLDFOF") && !is_planned_action && !S("mld_disable_continuation"); //mldfof_write;
mresult.canVakgChange = (mresult.canWrite("WEB_MLDBOF")); // vakgroep waar je zelf schrijfrechten op hebt
mresult.canStdmChange = (mresult.canWrite("WEB_MLDBOF") || mresult.canWrite("WEB_MLDBO3")) && !is_wf_root;
mresult.canKostChange = (mresult.canWrite("WEB_MLDBOF") || mresult.canWrite("WEB_MLDBO3"));
mresult.canFlexChange = (mresult.canWrite("WEB_MLDBOF") || mresult.canWrite("WEB_MLDBO3"));
mresult.canPlaatsChange = (mresult.canWrite("WEB_MLDBOF") || mresult.canWrite("WEB_MLDBO3"));
mresult.canAflChange = (mresult.canWrite("WEB_MLDBOF") || mresult.canWrite("WEB_MLDBO3"));
mresult.canPersChange = mresult.canWrite("WEB_MLDFOF");
// Alleen BO/FO kan melding aanpassen. FE toevoegen voor canPrioChange heeft geen zin.
mresult.canPrioChange = (!planbaar && (mresult.canWrite("WEB_MLDBOF") || mresult.canWrite("WEB_MLDBO3")));
mresult.canTerugzet = (is_fo_melding && mresult.canWrite("WEB_MLDBOF") && !is_planned_action);
mresult.canOmsChange = (mresult.canWrite("WEB_MLDFOF") || mresult.canWrite("WEB_MLDBOF")|| mresult.canWrite("WEB_MLDBO3"));
mresult.canAfhandChange = mresult.canWrite("WEB_MLDBOF");
mresult.canWriteDatums = (mresult.canWrite("WEB_MLDBOF") || mresult.canWrite("WEB_MLDBO3"));
mresult.canAddOpdr = mresult.canWrite("WEB_ORDBOF");
mresult.canSLAChange = mresult.canWrite("WEB_MLDBOF");
break;
case 4: // Geaccepteerd ('In behandeling') (expliciet mld_accept_save.asp of als backoffice bewerkt en opslaat)
mresult.canStdmChange = (mresult.canWrite("WEB_MLDBOF") || mresult.canWrite("WEB_MLDBO3")) && !is_wf_root
mresult.canKostChange = (mresult.canWrite("WEB_MLDBOF") || mresult.canWrite("WEB_MLDBO3") || mresult.canFEwrite);
mresult.canFlexChange = (mresult.canWrite("WEB_MLDBOF") || mresult.canWrite("WEB_MLDBO3"));
mresult.canPlaatsChange = (mresult.canWrite("WEB_MLDBOF") || mresult.canWrite("WEB_MLDBO3"));
mresult.canAflChange = (mresult.canWrite("WEB_MLDBOF") || mresult.canWrite("WEB_MLDBO3"));
// Alleen BO/FO kan melding aanpassen. FE toevoegen voor canPrioChange heeft geen zin.
mresult.canPrioChange = (!planbaar && mresult.canStdmChange);
mresult.canTerugzet = (!hasclosedopdrachten && !is_wf_root && is_fo_melding && mresult.canWrite("WEB_MLDBOF") && !is_planned_action);
/* GEEN BREAK !! */
case 7: // Uitgegeven
/* Waarden hierna gelden dus voor zowel 4 als 7 */
mresult.canPersChange = user.checkAutorisation("WEB_PRSSYS", true); // kans op onverwachte wijzigingen groot, daarom alleen voor beheer
// FO kan alleen omschrijving aanpassen
mresult.canChange = (mresult.canWrite("WEB_MLDBOF") || mresult.canWrite("WEB_MLDFOF"));
mresult.canChangeUrole = mresult.canWrite("WEB_MLDBOF")? 'bo' : 'fo';
mresult.canForward = (!is_wf_root &&
(S("mld_forward_if_active") == 1 || (keten && !hasopdrachten)) && // Een melding met opdrachten mag niet meer doorgestuurd worden (MAYF#36363).
mresult.canWrite("WEB_MLDBOF") &&
!is_planned_action);
mresult.canForwardKeten = (!is_wf_root && S("mld_forward_if_active") == 0 && mresult.canForward); // is het echt vanwege keten?
mresult.canClose = (mresult.canWrite("WEB_MLDBOF") || mresult.canWrite("WEB_MLDBO2")) &&
!is_wf_root && (!is_planned_action || (is_planned_action && opdr_action_aantal == 0)); // Als de laatste geplande actie is geweest mag de melding afgemeld worden.
mresult.canContinue = (mresult.canWrite("WEB_MLDFOF") || mresult.canWrite("WEB_MLDBOF")) && mresult_no_disc.canWrite("WEB_MLDFOF") && !is_planned_action && !S("mld_disable_continuation"); //mldfof_write;
mresult.canFlexChange = (mresult.canWrite("WEB_MLDBOF"));
// FOF kan alleen omschrijving aanpassen
mresult.canOmsChange = mresult.canWrite("WEB_MLDFOF");
mresult.canAfhandChange = mresult.canWrite("WEB_MLDBOF");
mresult.canWriteDatums = (mresult.canWrite("WEB_MLDBOF") || mresult.canWrite("WEB_MLDBO3"));
mresult.canAddOpdr = mresult.canWrite("WEB_ORDBOF");
mresult.canSLAChange = mresult.canWrite("WEB_MLDBOF");
break;
case 5: // Afgemeld
mresult.canAfrond = mresult.canWrite("WEB_MLDAFR") && !hasopenopdrachten;
mresult.canFlexChange = mresult.canWrite("WEB_MLDAFR") && S("mld_afrond_canflex");
mresult.canSLAChange = mresult.canAfrond;
mresult.canFixMelding = mresult.canFixSLA;
mresult.canChange = mresult.canAfrond;
mresult.canContinue = (mresult.canWrite("WEB_MLDFOF") || mresult.canWrite("WEB_MLDBOF")) && mresult_no_disc.canWrite("WEB_MLDFOF") && !is_planned_action && !S("mld_disable_continuation");
var authFaq = (S("faq_enabled")==1) && user.checkAutorisation("WEB_FAQFOF", true);
mresult.canAdd2Faq = (authFaq && authFaq.PRSwritelevel < 9 && !is_planned_action); // Voordragen voor kennisbank
mresult.canAddOpdr = mresult.canWrite("WEB_ORDBOF") && !mld_afgerond;
break;
case 6: // Admin voltooid
mresult.canContinue = (mresult.canWrite("WEB_MLDFOF") || mresult.canWrite("WEB_MLDBOF")) && mresult_no_disc.canWrite("WEB_MLDFOF") && !is_planned_action && !S("mld_disable_continuation");
mresult.canFixSLA = false;
break;
}
}
// (dure) controle uitschakelbaar door { dontcarelink: true } mee te geven
// Je mag dus niet linken, tenzij (i) deze check wordt uitgevoerd en (ii) geen resultaat oplevert.
// Een workflow meldingen mag niet gekoppeld worden.
if (!params.dontcarelink && !is_wf_step && (mresult.canFOwrite || mresult.canBOwrite) &&
mresult.canChange && !is_planned_action) // misschien canLink als nog geen opdrachten of bestellingen
{
var sql = "SELECT 1 FROM mld_opdr WHERE mld_melding_key = " + pmld_melding_key
+ " UNION ALL SELECT 1 FROM bes_bestelling WHERE mld_melding_key = " + pmld_melding_key
+ " UNION ALL SELECT 1 FROM mld_melding m WHERE m.mld_melding_parentkey = " + pmld_melding_key;
var oRs = Oracle.Execute(sql);
mresult.canLink = (oRs.Eof);
oRs.Close();
}
return mresult;
},
func_enabled_opdracht: // Wat mag ik zoal op deze specifieke opdracht?
function _func_enabled_opdracht(pmld_opdr_key) {
var msql = "SELECT sm.mld_ins_discipline_key"
+ " , m.mld_alg_onroerendgoed_keys"
+ " , o.mld_statusopdr_key"
+ " , o.prs_perslid_key"
+ " , m.prs_perslid_key melding_user_key"
+ " , mto.mld_typeopdr_kosten"
+ " , mto.mld_typeopdr_decentraal"
+ " , mto.mld_typeopdr_isofferte"
+ " , mld_typeopdr_afmelden_extern"
+ " , mto.mld_typeopdr_matchtype"
+ " , mto.mld_typeopdr_kosten_verplicht"
// Als de opdracht geen kostenplaats heeft, ga dan uit van de kostenplaats van de melding
+ " , prs.getkpverantwoordelijke (o.prs_kostenplaats_key, " + S("prs_approvemethod") + ", -1) fiatteur_kp_key"
+ " , (SELECT kg.prs_perslid_key"
+ " FROM prs_kostenplaats k"
+ " , prs_kostenplaatsgrp kg"
+ " WHERE k.prs_kostenplaatsgrp_key = kg.prs_kostenplaatsgrp_key(+)"
+ " AND k.prs_kostenplaats_key = o.prs_kostenplaats_key) fiatteur_kpg_key"
+ " , mu.type"
+ " , mu.intern"
+ " , o.mld_uitvoerende_keys"
+ " , fac.gettrackinguserkey('ORDFOK', " + pmld_opdr_key + ") fiat_trackinguser_key"
+ " , fac.gettrackingdate('ORDFIA', o.mld_opdr_key) trackdateFIA"
+ " , fac.gettrackingdate('ORDFOK', o.mld_opdr_key) trackdateFOK"
+ " , o.mld_opdr_halted"
+ " , o.mld_opdr_kosten"
+ " , mto.mld_typeopdr_zichtbaarfe"
+ " , o.mld_opdr_teverzenden"
+ " , o.mld_opdr_verzonden"
+ " , o.mld_statusopdr_key_refiat"
+ " , o.mld_opdr_approved"
+ " , o.mld_opdr_approved_refiat"
+ " , mdp.mld_disc_params_offerteauto"
+ " , sm.mld_stdmelding_opdrtypevast"
+ " , m.mld_melding_key"
+ " , o.mld_opdr_bedrijfopdr_volgnr"
+ " , o.fac_activiteit_key"
+ " , o.mld_opdr_approved"
+ " , mto.mld_typeopdr_gvs"
+ " , mdp.mld_disc_params_opdr_kosten"
+ " , mdp.mld_disc_params_bestellimiet"
+ " , mdp.mld_disc_params_bestellimiet2"
+ " , mdp.mld_disc_params_bestellimiet3"
+ " , mdp.mld_disc_params_bestellimiet4"
+ " , mdp.mld_disc_params_bestellimiet5"
//Opdracht mag niet meer gecanceld worden indien de opdracht een actuele factuur heeft met de status Ingevoerd(2), Akkoord(6) of Verwerkt(7).
+ " , (SELECT MIN(f.fin_factuur_statuses_key)"
+ " FROM fin_factuur f"
+ " WHERE o.mld_opdr_key = f.mld_opdr_key"
+ " AND f.fin_factuur_verwijder IS NULL"
+ " AND f.fin_factuur_statuses_key IN (2,6,7)) noCancel"
+ " , (SELECT COUNT(f.fin_factuur_key)"
+ " FROM fin_factuur f"
+ " WHERE f.mld_opdr_key = o.mld_opdr_key"
+ " AND f.fin_factuur_verwijder IS NULL) aantal_facturen"
+ " , m.mld_melding_afgerond"
+ " FROM mld_opdr o"
+ " , mld_typeopdr mto"
+ " , mld_melding m"
+ " , mld_stdmelding sm"
+ " , ins_tab_discipline d"
+ " , mld_disc_params mdp"
+ " , prs_kostenplaats k"
+ " , prs_kostenplaatsgrp kg"
+ " , mld_v_uitvoerende mu"
+ " WHERE o.mld_melding_key = m.mld_melding_key(+)" // bij bgt-mode: opdracht zonder melding
+ " AND m.mld_stdmelding_key = sm.mld_stdmelding_key(+)"
+ " AND sm.mld_ins_discipline_key = d.ins_discipline_key(+)"
+ " AND d.ins_discipline_key = mdp.mld_ins_discipline_key(+)"
+ " AND o.prs_kostenplaats_key = k.prs_kostenplaats_key(+)" // kostenplaats van de opdracht kan leeg zijn
+ " AND o.mld_typeopdr_key = mto.mld_typeopdr_key" // required
+ " AND k.prs_kostenplaatsgrp_key = kg.prs_kostenplaatsgrp_key(+)"
+ " AND o.mld_uitvoerende_keys = mu.mld_uitvoerende_key" // required
+ " AND o.mld_opdr_key = " + pmld_opdr_key
var moRs = Oracle.Execute(msql);
var opdr_status = moRs("mld_statusopdr_key").Value;
var fiatteur_kp_key = moRs("fiatteur_kp_key").Value;
var fiatteur_kpg_key = moRs("fiatteur_kpg_key").Value;
var uitv_type = moRs("type").Value;
var uitv_intern = moRs("intern").Value == 1;
var uitv_key = moRs("mld_uitvoerende_keys").Value;
var fiat_trackinguser_key = moRs("fiat_trackinguser_key").Value;
var tracking_present = moRs("fiat_trackinguser_key").Value? true : false;
var t_cost = moRs("mld_opdr_kosten").Value;
var mld_opdr_teverzenden = moRs("mld_opdr_teverzenden").Value == 1; // Dan stuurt PutOrders deze
var mld_opdr_verzonden = moRs("mld_opdr_verzonden").Value;
var refiat = (moRs("mld_statusopdr_key_refiat").Value || 0) > 0;
var approved = moRs("mld_opdr_approved").Value;
var approved_refiat = moRs("mld_opdr_approved_refiat").Value;
// Is er tijdens de refiat al door de budgethouder (kostenplaatverantwoordelijke) gefiatteerd.
var refiat_is_approvedby_kp = refiat && // Refiat van de opdracht
opdr_status == 3 && // Opdracht staat "Ter fiattering"
moRs("trackdateFIA").Value != null && moRs("trackdateFOK").Value != null && // Er is al gefiatteerd
moRs("trackdateFIA").Value < moRs("trackdateFOK").Value; // De eerste fiatteur heeft opnieuw gefiatteerd.
var halted = moRs("mld_opdr_halted").Value == 1;
var typehas_cost = moRs("mld_typeopdr_kosten").Value == 1;
var decentraal = moRs("mld_typeopdr_decentraal").Value;
var isofferte = moRs("mld_typeopdr_isofferte").Value == 1;
var afmelden_extern = moRs("mld_typeopdr_afmelden_extern").Value;
var typeopdr_matchtype = moRs("mld_typeopdr_matchtype").Value;
var typeopdr_kosten_verplicht = moRs("mld_typeopdr_kosten_verplicht").Value || 0; // Opdracht kosten verplicht (bitwise) bij (0 = niet verplicht, 1 = save + 2 = afmelden, 4 = afronden).
var opdrkosten_verplicht = moRs("mld_disc_params_opdr_kosten").Value || 0;
var offerteauto = moRs("mld_disc_params_offerteauto").Value == 1;
var opdrtypevast = moRs("mld_stdmelding_opdrtypevast").Value == 1;
var mld_key = moRs("mld_melding_key").Value;
var mld_opdr_bedrijfopdr_volgnr = moRs("mld_opdr_bedrijfopdr_volgnr").Value;
var is_planned_action = moRs("fac_activiteit_key").Value != null;
var opdr_approved = moRs("mld_opdr_approved").Value || -1;
var gvs = moRs("mld_typeopdr_gvs").Value || 0;
var bestellimiet = moRs("mld_disc_params_bestellimiet").Value || 0;
var bestellimiet2 = moRs("mld_disc_params_bestellimiet2").Value || 0;
var bestellimiet3 = moRs("mld_disc_params_bestellimiet3").Value || 0;
var bestellimiet4 = moRs("mld_disc_params_bestellimiet4").Value || 0;
var bestellimiet5 = moRs("mld_disc_params_bestellimiet5").Value || 0;
var noCancel = moRs("noCancel").Value > 0; // Er zijn actuele facturen met de status Ingevoerd(2), Akkoord(6) of Verwerkt(7).
var has_facturen = moRs("aantal_facturen").Value > 0; // De opdracht heeft facturen.
var mld_afgerond = moRs("mld_melding_afgerond").Value == 1;
// tracking_present KP KPN Verantwoordelijke
// Nee - - Niemand
// Nee A - A
// Ja A - Niemand (de status is dan al gefiateerd of verder)
// Nee - B B
// Ja - B Niemand (de status is dan al gefiateerd of verder)
// Nee A B A
// Ja A B B of Niemand (de status is dan al gefiateerd of verder)
// Nee A A A
// Ja A A Niemand (de status is dan al gefiateerd of verder)
// isVerantwoordelijke wordt alleen gebruikt als status "Ter fiattering"
var isVerantwoordelijke = false;
var isApprovedRead = false;
if (!tracking_present || (S("mld_opdr_refiat_preference") == 1 && refiat && !refiat_is_approvedby_kp))
{ // Geen tracking of als nieuw fiatteren bij refiat als setting is gezet.
if (fiatteur_kp_key) // Als KP (A) aanwezig (desnoods via n-laagsmethode via afdelingsboom) dan KP testen als isVerantwoordelijke
isVerantwoordelijke = (user.isCollega(fiatteur_kp_key));
else if (fiatteur_kpg_key) // Als alleen KPN (B) aanwezig dan KPN testen als isVerantwoordelijke
isVerantwoordelijke = (user.isCollega(fiatteur_kpg_key));
}
else
{ // tracking aanwezig
if (fiatteur_kp_key) // Als KP (A) aanwezig dan KPN (B) testen als isVerantwoordelijke
isVerantwoordelijke = (user.isCollega(fiatteur_kpg_key) && fiat_trackinguser_key != fiatteur_kpg_key);
// Kostenplaats(groep)verantwoordelijke mag na approven de bestelopdracht inzien.
isApprovedRead = (user.isCollega(fiatteur_kp_key) || user.isCollega(fiatteur_kpg_key));
}
var mresult = user.func_enabled("MLD",
moRs("mld_ins_discipline_key").Value,
moRs("mld_alg_onroerendgoed_keys").Value, // TODO: Wat als geen INS_SRTDISCIPLINE_ALG?
moRs("prs_perslid_key").Value,
false, // pessimist
isVerantwoordelijke); // isVerantwoordelijke dan optional
// Algemeen niveau
mresult.haveORDSUPrights = user.checkAutorisation("WEB_ORDSUP", true) != null;
mresult.haveORDFINrights = user.checkAutorisation("WEB_ORDFIN", true) != null;
mresult.haveORDOAPrights = user.checkAutorisation("WEB_ORDOAP", true) != null;
// Op button niveau
// ORDUSE zijn meldrachten: heb ik de (melding en) opdracht aangemaakt?
mresult.canFEread = mresult.canRead("WEB_ORDUSE") && user.isCollega(moRs("prs_perslid_key").Value);
mresult.canFEwrite = mresult.canWrite("WEB_ORDUSE") && user.isCollega(moRs("prs_perslid_key").Value);
// Als ik de melder ben of de vervanger van de melder en het type opdracht is zichtbaar voor de fe (mld_typeopdr_zichtbaarfe == 1),
// dan mag ik de opdracht ook zien/wijzigen met WEB_MLDUSE lees/schrijf rechten.
if (moRs("mld_typeopdr_zichtbaarfe").Value == 1 && user.isCollega(moRs("melding_user_key").Value))
{
mresult.canFEread |= mresult.canRead("WEB_MLDUSE");
mresult.canFEwrite |= mresult.canWrite("WEB_MLDUSE");
}
moRs.Close();
var lopende_offertes = false;
var uitvOpdrNaOfferte = false;
if (isofferte)
{ // Alleen voor offerte opdrachten uitvoeren
// Zijn er nog lopende offertes die nog niet Technisch Voltooid/Afgemeld (6) zijn.
// Als er nog lopende offertes zijn dan kan ik nog geen offerte accepteren.
var osql = "SELECT COUNT(o.mld_opdr_key) aantal"
+ " FROM mld_opdr o"
+ " , mld_typeopdr mto"
+ " WHERE o.mld_typeopdr_key = mto.mld_typeopdr_key"
+ " AND mto.mld_typeopdr_isofferte = 1"
+ " AND o.mld_melding_key = (SELECT mld_melding_key FROM mld_opdr WHERE mld_opdr_key = " + pmld_opdr_key + ")"
+ " AND o.mld_typeopdr_key = (SELECT mld_typeopdr_key FROM mld_opdr WHERE mld_opdr_key = " + pmld_opdr_key + ")"
+ " AND o.mld_opdr_key != " + pmld_opdr_key
+ " AND o.mld_statusopdr_key IN (3, 4, 5, 8, 10)"
var ooRs = Oracle.Execute(osql);
lopende_offertes = ooRs("aantal").Value > 0;
// Laatste opdracht volgnummer van een melding ophalen. Om te checken of er na de offerteaanvraag nog een uitvoeringsopdracht is gekomen.
var osql = "SELECT MAX (mld_opdr_bedrijfopdr_volgnr) lastopdrachtvolgnr"
+ " FROM mld_opdr o"
+ " , mld_typeopdr mto"
+ " WHERE o.mld_typeopdr_key = mto.mld_typeopdr_key"
+ " AND mto.mld_typeopdr_isofferte = 0"
+ " AND o.mld_melding_key = " + mld_key
+ " GROUP BY o.mld_melding_key"
var ooRs = Oracle.Execute(osql);
if (!ooRs.eof)
{ // Er kan een uitvoeringsopdracht zijn na de offerteaanvraag. Dit m.b.v. de volgnummers checken.
var lastopdrachtvolgnr = ooRs("lastopdrachtvolgnr").Value;
uitvOpdrNaOfferte = lastopdrachtvolgnr > mld_opdr_bedrijfopdr_volgnr;
}
ooRs.Close();
}
// -- CONTROLE LEESRECHTEN --
// Al ik een contactpersoon ben dan heb ik alleen rechten om mijn eigen opdrachten van mijn eigen bedrijf te zien/wijzigen
mresult.iamContact = mld.iamContact(); // Ben ik een contactpersoon?
mresult.iamBedrijfContact = false; // Aan bedrijf toegekend en ik ben contactpersoon van dat bedrijf? Bijv. vertaaldiensten UWVA
if (mresult.iamContact && !uitv_intern) // Extern Bedrijf.
{ // Ik ga er van uit dat je NIET als vervanger van een contactpersoon van een ander bedrijf wordt aangewezen.
mresult.iamBedrijfContact = mld.iamContact(uitv_key); // Ben ik contactpersoon van het uitvoerende bedrijf?
}
mresult.canReadAny = mresult.canRead("WEB_ORDBOF") ||
(mresult.iamContact? (mresult.canRead("WEB_ORDBO2") && mresult.iamBedrijfContact) : mresult.canRead("WEB_ORDBO2")) ||
mresult.canRead("WEB_ORDAFR") ||
mresult.canRead("WEB_ORDFIN") ||
mresult.canRead("WEB_ORDSUP") ||
(mresult.canRead("WEB_MLDORD") && user.isCollega(uitv_key)) ||
mresult.canFEread ||
isVerantwoordelijke ||
isApprovedRead;
mresult.canReadBOF = mresult.canRead("WEB_ORDBOF");
mresult.canReadORD = mresult.canRead("WEB_MLDORD");
mresult.canReadBO2 = mresult.canRead("WEB_ORDBO2");
// Als ik enige leesrechten of schrijfrechten heb (bij schrijfrechten heb ik ook leesrechten) dan mag ik opdracht notities wijzigen/toevoegen.
mresult.canShowOpdrNote = mresult.canReadAny; // Als ik enige leesrechten heb (ook als fiatteur).
mresult.canEditOpdrNote = mresult.canShowOpdrNote;
// Factuur rechten
var authparamsFINUSE = user.checkAutorisation("WEB_FINUSE", true);
var authparamsFINFOF = user.checkAutorisation("WEB_FINFOF", true);
var authparamsFINBOF = user.checkAutorisation("WEB_FINBOF", true);
// Alleen PRSreadlevel en PRSwritelevel van belang want fac_functie_min_level = 7 (lezen en schrijven organisatie)
// Alleen FE (als contactpersoon) of FO kan aanmaken.
mresult.canAddFactuur = typehas_cost && !has_facturen && ((authparamsFINUSE && authparamsFINUSE.PRSwritelevel < 9) || (authparamsFINFOF && authparamsFINFOF.PRSwritelevel)); // Kan rechtstreeks vanuit opdrachten een factuur aanmaken.
mresult.canListFactuur = typehas_cost && has_facturen && (authparamsFINUSE || authparamsFINFOF || authparamsFINBOF || user.isBudgethouder()); // Mag lijst met facturen zien die bij deze opdracht horen.
mresult.canChange = false; // Wijzig knop tonen
mresult.canChangeUrole = (typeof urole == "undefined" ? "" : urole); // (mld_close kent deze niet, en change-t ook niet interactief)
mresult.canGoedkeur = false; // Goedkeuren niveau 1
mresult.canGoedkeur2 = false; // Goedkeuren niveau 2
mresult.canGoedkeur3 = false; // Goedkeuren niveau 3
mresult.canGoedkeur4 = false; // Goedkeuren niveau 4
mresult.canGoedkeur5 = false; // Goedkeuren niveau 5
mresult.finalapproval = false; // Is dit de laatste goedkeur actie.
mresult.canApprove = false; // Fiatteren
mresult.canSend = false; // Handmatig versturen (als Putorders dat niet doet)
mresult.canAccept = false; // Accepteren (door uitvoerder)
mresult.canReject = false; // Afwijzen
mresult.canCancel = false; // Annuleren
mresult.canClose = false; // Afmelden
mresult.canOnderbreken = false; // Onderbreken
mresult.canHervatten = false; // Hervatten
mresult.canFinish = false; // Afronden
mresult.hadFinishRights = false; // Had ik in status "Technisch Voltooid/Afgemeld(6)" de rechten om de opdracht financieel te voltooien.
mresult.couldClose = false; // Kon de opdracht afmelden of heb hem afgemeld (Kan in show mode close kenmerken zien)
mresult.canCopy = false; // Kopi<70>ren
mresult.canAcceptOffer = false; // Accepteren offerte
mresult.canRejectOffer = false; // Afwijzen offerte
mresult.canSeeARFlex = false; // Kan accepteren/afwijzen kenmerken zien voor offertes
mresult.canChangeARFlex = false; // Kan accepteren/afwijzen kenmerken wijzigen voor offertes
// Ter leering ende vermaeck: ..Onderstaande code regel gelijk aan:
// (mresult.canWrite("WEB_ORDBO2") && afmelden_extern == 2 && uitv_type == "B") ||
// (mresult.canWrite("WEB_ORDBO2") && uitv_type == "P")
// Op invoerveld niveau
mresult.canVeldChange = false; // Invoervelden uitgezonderd uitvoerende, dienst, kostenplaats, opdrachtdatum en einddatum: (opdr_status!=6 || authparamsORDFIN)
mresult.canFlexChange = false; // Flexkenmerken: zie canVeldChange met de toevoeging dat je ook in de status uitgegeven mag aanpassen als je "WEB_MLDBO2" rechten hebt.
mresult.canUitvChange = false; // Uitvoerende en dienst: ((opdr_status!=6 || mresult.canWrite("WEB_ORDFIN")) && (mresult.canWrite("WEB_ORDBOF")) && (mresult.canWrite("WEB_MLDBOF") || mresult.canWrite("WEB_MLDBO3")))
mresult.canDatesChange = false; // Opdrachtdatum en einddatum: opdr_status!=6
mresult.canKostChange = false; // Kostenplaats: !this_opdr.canVeldChange && S("mld_ord_show_kostenplaats") == 1
mresult.canOpmChange = false; // Opmerking: (opdr_status!=6 || authparamsORDFIN). Met ORDBO2 rechten mag je dit veld ook aanpassen
mresult.canUrenMatChange = false; // Uren en materialen: (opdr_status!=6 || authparamsORDFIN). Met ORDBO2 en MLDORD rechten mag je dit veld ook aanpassen
mresult.hadUrenMatChange = false; // Had ik in status "Technisch Voltooid/Afgemeld(6)" de rechten om Uren en materialen te wijzigen.
mresult.canOpdrTypeChange = false; // Opdrachttype: canVeldChange maar van offertopdrachten mag je het opdrachttype niet aanpassen (!isofferte).
// Mag ik dankzij BO2 afmelden (en een beetje bewerken)
var myBO2Change = mresult.canWrite("WEB_ORDBO2"); // dat is wel het minste
// Setting mld_typeopdr_afmelden_extern: Afmelder (ORDBO2) mag externe opdrachten (0=Niet zien, 1=Zien, 2=Afmelden)
// Als ik een interne (decentraal/intern) uitvoerder ben mag ik de externe opdrachten niet zien als mld_typeopdr_afmelden_extern==0.
// De voorwaarde en setting geldt niet als:
// 1) de opdracht toegekend is aan een persoon. Dan mag ik alleen eigen opdrachten zien.
// 2) de opdracht toegekend is aan het eigen bedrijf. Opdrachten van het eigen bedrijf mag ik alleen zien.
// 3) ik de contactpersoon ben van het uitvoerende externe bedrijf. Dan mag ik alleen opdrachten van mijn eigen bedrijf zien.
// Let op!!! Deze voorwaarde geldt dus alleen voor de WEB_ORDBO2 rechten.
if (mresult.iamContact)
myBO2Change = myBO2Change && mresult.iamBedrijfContact
else if (myBO2Change && !uitv_intern && afmelden_extern < 2 && !mresult.iamBedrijfContact)
myBO2Change = false;
var myBO2FieldChange = (myBO2Change && !mresult.iamBedrijfContact);
__Log("myBO2Change: " + myBO2Change);
switch (opdr_status)
{
case 1: // Afgewezen
mresult.canChange = (mresult.canWrite("WEB_ORDBOF"));
mresult.canChangeUrole = "bo";
mresult.canCopy = (mresult.canWrite("WEB_ORDBOF") && !is_planned_action && !mld_afgerond);
mresult.canVeldChange = (mresult.canWrite("WEB_ORDBOF"));
mresult.canFlexChange = (mresult.canWrite("WEB_ORDBOF"));
mresult.canUitvChange = (mresult.canWrite("WEB_ORDBOF"));
mresult.canDatesChange = (mresult.canWrite("WEB_ORDBOF") || mresult.canWrite("WEB_ORDBO2") || mresult.canWrite("WEB_MLDORD"));
mresult.canKostChange = (mresult.canWrite("WEB_ORDBOF") && S("mld_ord_show_kostenplaats") == 1);
mresult.canOpmChange = (mresult.canWrite("WEB_ORDBOF"));
mresult.canUrenMatChange = (mresult.canWrite("WEB_ORDBOF"));
mresult.canOpdrTypeChange = (mresult.canWrite("WEB_ORDBOF") && !isofferte && !opdrtypevast);
break;
case 2: // Niet akkoord
mresult.canChange = (mresult.canWrite("WEB_ORDBOF"));
mresult.canChangeUrole = "bo";
mresult.canCopy = (mresult.canWrite("WEB_ORDBOF") && !is_planned_action && !mld_afgerond);
mresult.canVeldChange = (mresult.canWrite("WEB_ORDBOF"));
mresult.canFlexChange = (mresult.canWrite("WEB_ORDBOF"));
mresult.canUitvChange = (mresult.canWrite("WEB_ORDBOF"));
mresult.canDatesChange = (mresult.canWrite("WEB_ORDBOF") || mresult.canWrite("WEB_ORDBO2") || mresult.canWrite("WEB_MLDORD"));
mresult.canKostChange = (mresult.canWrite("WEB_ORDBOF") && S("mld_ord_show_kostenplaats") == 1);
mresult.canOpmChange = (mresult.canWrite("WEB_ORDBOF"));
mresult.canUrenMatChange = (mresult.canWrite("WEB_ORDBOF"));
mresult.canSeeARFlex = (isofferte && mresult.haveORDSUPrights);
mresult.canOpdrTypeChange = (mresult.canWrite("WEB_ORDBOF") && !isofferte && !opdrtypevast);
break;
case 3: // Ter fiattering
mresult.canChange = (mresult.canWrite("WEB_ORDBOF"));
mresult.canChangeUrole = "bo";
mresult.canApprove = (isVerantwoordelijke && !is_planned_action);
mresult.canReject = (isVerantwoordelijke && !is_planned_action);
mresult.canCopy = (mresult.canWrite("WEB_ORDBOF") && !is_planned_action && !mld_afgerond);
mresult.canVeldChange = (mresult.canWrite("WEB_ORDBOF"));
mresult.canFlexChange = (mresult.canWrite("WEB_ORDBOF"));
mresult.canUitvChange = (mresult.canWrite("WEB_ORDBOF"));
mresult.canDatesChange = (mresult.canWrite("WEB_ORDBOF") || mresult.canWrite("WEB_ORDBO2") || mresult.canWrite("WEB_MLDORD"));
mresult.canKostChange = (mresult.canWrite("WEB_ORDBOF") && S("mld_ord_show_kostenplaats") == 1);
mresult.canOpmChange = (mresult.canWrite("WEB_ORDBOF"));
mresult.canUrenMatChange = (mresult.canWrite("WEB_ORDBOF"));
mresult.canOpdrTypeChange = (mresult.canWrite("WEB_ORDBOF") && !isofferte && !opdrtypevast);
break;
case 4: // Gefiatteerd
mresult.canChange = (mresult.canWrite("WEB_ORDBOF"));
mresult.canSend = (mresult.canWrite("WEB_ORDBOF")) && uitv_type == "B" && !mld_opdr_teverzenden && !is_planned_action; // Handmatig versturen (als Putorders dat niet doet)
mresult.canChangeUrole = "bo";
mresult.canCopy = (mresult.canWrite("WEB_ORDBOF") && !is_planned_action && !mld_afgerond);
mresult.canVeldChange = (mresult.canWrite("WEB_ORDBOF"));
mresult.canFlexChange = (mresult.canWrite("WEB_ORDBOF"));
mresult.canUitvChange = (mresult.canWrite("WEB_ORDBOF"));
mresult.canDatesChange = (mresult.canWrite("WEB_ORDBOF") || mresult.canWrite("WEB_ORDBO2") || mresult.canWrite("WEB_MLDORD"));
mresult.canKostChange = (mresult.canWrite("WEB_ORDBOF") && S("mld_ord_show_kostenplaats") == 1);
mresult.canOpmChange = (mresult.canWrite("WEB_ORDBOF"));
mresult.canOpdrTypeChange = (mresult.canWrite("WEB_ORDBOF") && !isofferte && !opdrtypevast);
// mresult.canUrenMatChange: Kosten (uren en materiaal) niet wijzigbaar.
// Status gaat in de meeste gevallen door het script putorders direct door naar Uitgegeven(5).
// Het is daarnaast ook ongewoon om in deze status net na het fiatteren de kosten aan te passen.
// Het is daarnaast geen probleem om de kosten velden readonly te maken.
break;
case 5: // Uitgegeven
// Leveranciers kunnen de opdrachten accepteren zodat ze kunnen zien of de opdrachten al in behandeling zijn genomen
mresult.canAccept = (mresult.canWrite("WEB_ORDBOF") && (decentraal < 2) ||
(mresult.canWrite("WEB_ORDBO2") && myBO2Change) ||
(mresult.canWrite("WEB_MLDORD") && user.isCollega(uitv_key))) &&
!is_planned_action;
mresult.canSend = (mresult.canWrite("WEB_ORDBOF") && // Handmatig versturen (als Putorders dat niet doet)
uitv_type == "B" &&
mld_opdr_verzonden == null &&
!mld_opdr_teverzenden &&
!is_planned_action)
// GEEN break!
case 8: // en geaccepteerd
mresult.canChange = (mresult.canWrite("WEB_ORDBOF") && (decentraal < 2) ||
(mresult.canWrite("WEB_ORDBO2") && myBO2Change) ||
(mresult.canWrite("WEB_MLDORD") && user.isCollega(uitv_key)));
if (mresult.canWrite("WEB_ORDBOF")) mresult.canChangeUrole = "bo";
mresult.canCancel = (mresult.canWrite("WEB_ORDBOF") ||
(mresult.canWrite("WEB_ORDBO2") && myBO2Change)) &&
!is_planned_action && /* AAFM#23455 */
!noCancel; /* AAZC#28894 */
mresult.canCloseRights = (mresult.canWrite("WEB_ORDBOF") && (decentraal < 2) ||
(mresult.canWrite("WEB_ORDBO2") && myBO2Change) ||
(mresult.canWrite("WEB_MLDORD") && user.isCollega(uitv_key))) &&
!is_planned_action;
mresult.canOnderbreken = mresult.canCloseRights && opdr_status == 8 && !halted;
mresult.canHervatten = mresult.canCloseRights && opdr_status == 8 && halted;
mresult.canClose = mresult.canCloseRights && !mresult.canHervatten;
mresult.canCopy = (mresult.canWrite("WEB_ORDBOF") && !is_planned_action && !mld_afgerond);
mresult.canVeldChange = (mresult.canWrite("WEB_ORDBOF") ||
(mresult.canWrite("WEB_ORDBO2") && myBO2FieldChange));
mresult.canFlexChange = (mresult.canWrite("WEB_ORDBOF") || mresult.canWrite("WEB_ORDBO2"));
mresult.canUitvChange = (mresult.canWrite("WEB_ORDBOF"));
mresult.canDatesChange = (mresult.canWrite("WEB_ORDBOF") || mresult.canWrite("WEB_ORDBO2") || mresult.canWrite("WEB_MLDORD"));
mresult.canKostChange = (mresult.canWrite("WEB_ORDBOF") && S("mld_ord_show_kostenplaats") == 1);
mresult.canOpmChange = (mresult.canWrite("WEB_ORDBOF") ||
(mresult.canWrite("WEB_ORDBO2") && myBO2Change) ||
(mresult.canWrite("WEB_MLDORD") && user.isCollega(uitv_key)));
mresult.canUrenMatChange = (mresult.canWrite("WEB_ORDBOF") ||
(mresult.canWrite("WEB_ORDBO2") && myBO2Change) ||
(mresult.canWrite("WEB_MLDORD") && user.isCollega(uitv_key)));
mresult.canSeeARFlex = (isofferte && mresult.haveORDSUPrights);
mresult.canChangeARFlex = (isofferte && mresult.haveORDSUPrights);
mresult.canOpdrTypeChange = (mresult.canWrite("WEB_ORDBOF") && !isofferte && !opdrtypevast);
break;
case 6: // Technisch Voltooid/Afgemeld
mresult.canChange = (mresult.haveORDFINrights || mresult.haveORDSUPrights ||
(myBO2Change && mresult.canWrite("WEB_ORDAFR")) || /* AANS#22655 */
(typehas_cost && mresult.canWrite("WEB_ORDAFR")) ||
(isofferte && mresult.canRead("WEB_ORDBOF") && mresult.haveORDOAPrights));
mresult.couldClose = (mresult.canWrite("WEB_ORDBOF") && (decentraal < 2) ||
(mresult.canWrite("WEB_ORDBO2") && myBO2Change) ||
(mresult.canWrite("WEB_MLDORD") && user.isCollega(uitv_key)));
mresult.canCopy = (mresult.canWrite("WEB_ORDBOF") && !is_planned_action && !mld_afgerond);
mresult.canFlexChange = (mresult.haveORDFINrights || mresult.haveORDSUPrights) ||
(myBO2Change && mresult.canWrite("WEB_ORDAFR") && !isofferte); /* AANS#22655 */
mresult.canKostChange = (mresult.haveORDFINrights && S("mld_ord_show_kostenplaats") == 1);
mresult.canFinish = (!isofferte && typehas_cost && mresult.canWrite("WEB_ORDAFR") && !is_planned_action);
mresult.canAcceptOffer = (isofferte && (!lopende_offertes || !offerteauto) &&
mresult.haveORDOAPrights && mresult.canRead("WEB_ORDBOF") &&
!(uitvOpdrNaOfferte && offerteauto) && !is_planned_action);
mresult.canRejectOffer = (isofferte && mresult.haveORDOAPrights &&
mresult.canRead("WEB_ORDBOF") && !(uitvOpdrNaOfferte && offerteauto) &&
!is_planned_action);
mresult.canOpmChange = (mresult.haveORDSUPrights || mresult.canAcceptOffer || mresult.canRejectOffer) ||
(myBO2Change && mresult.canWrite("WEB_ORDAFR")); /* AANS#22655 */
mresult.canUrenMatChange = (mresult.canFinish || mresult.haveORDFINrights) ||
(myBO2Change && mresult.canWrite("WEB_ORDAFR")); /* AANS#22655 */
mresult.canSeeARFlex = (isofferte && (mresult.haveORDSUPrights || (mresult.canRead("WEB_ORDBOF") && mresult.haveORDOAPrights)));
mresult.canChangeARFlex = (isofferte && (mresult.haveORDSUPrights || (mresult.canRead("WEB_ORDBOF") && mresult.haveORDOAPrights)));
break;
case 9: // Kostentechnisch voltooid gemeld (doorgaans door uitvoerende)
mresult.canChange = (mresult.haveORDFINrights || mresult.haveORDSUPrights ||
(isofferte && mresult.canRead("WEB_ORDBOF") && mresult.haveORDOAPrights));
mresult.hadFinishRights = (!isofferte && typehas_cost && mresult.canWrite("WEB_ORDAFR") && !is_planned_action);
mresult.couldClose = (mresult.canWrite("WEB_ORDBOF") && (decentraal < 2) ||
(mresult.canWrite("WEB_ORDBO2") && myBO2Change) ||
(mresult.canWrite("WEB_MLDORD") && user.isCollega(uitv_key)));
mresult.canCopy = (mresult.canWrite("WEB_ORDBOF") && !is_planned_action && !mld_afgerond);
mresult.canFlexChange = (mresult.haveORDFINrights || mresult.haveORDSUPrights);
mresult.canKostChange = (mresult.haveORDFINrights && S("mld_ord_show_kostenplaats") == 1);
mresult.canUrenMatChange = (mresult.haveORDFINrights);
mresult.hadUrenMatChange = (mresult.canFinish || mresult.haveORDFINrights) ||
(myBO2Change && mresult.canWrite("WEB_ORDAFR"));
if (mresult.iamBedrijfContact && mresult.hadUrenMatChange)
{
if (t_cost > S("mld_max_kosten_extern"))
mresult.hadUrenMatChange = false;
}
mresult.canSeeARFlex = (isofferte && (mresult.haveORDSUPrights || (mresult.canRead("WEB_ORDBOF") && mresult.haveORDOAPrights)));
mresult.canChangeARFlex = (isofferte && (mresult.haveORDSUPrights || (mresult.canRead("WEB_ORDBOF") && mresult.haveORDOAPrights)));
break;
case 10: // Nog goedkeur
mresult.canChange = (mresult.canWrite("WEB_ORDBOF"));
mresult.canChangeUrole = "bo";
mresult.canGoedkeur = mresult.canWrite("WEB_ORDGOE") && !is_planned_action && // Heb ik de rechten om goed te keuren op dit niveau 1?
(((S("mld_opdr_approval_all") == 0 && t_cost >= bestellimiet) ||
(S("mld_opdr_approval_all") == 1 && t_cost <= bestellimiet2)) &&
((!refiat && opdr_approved <= bestellimiet) || (refiat && t_cost >= gvs && opdr_approved < 0)));
mresult.canGoedkeur2 = mresult.canWrite("WEB_ORDGO2") && !is_planned_action &&
// Setting mld_opdr_approval_all is
// 0: Het approved bedrag is eigen bestellimiet of vorige goedkeur niveau rechten heb ik al (dan direct niveau hoger)
// 1: Het approved bedrag is kleiner of gelijk aan eigen bestellimiet
((S("mld_opdr_approval_all") == 0 && t_cost >= bestellimiet2 && (opdr_approved == bestellimiet2 || mresult.canGoedkeur)) ||
(S("mld_opdr_approval_all") == 1 && t_cost <= bestellimiet3 && ((!refiat && opdr_approved <= bestellimiet2) || (refiat && t_cost >= gvs && opdr_approved < 0))));
mresult.canGoedkeur3 = mresult.canWrite("WEB_ORDGO3") && !is_planned_action &&
((S("mld_opdr_approval_all") == 0 && t_cost >= bestellimiet3 && (opdr_approved == bestellimiet3 || mresult.canGoedkeur2)) ||
(S("mld_opdr_approval_all") == 1 && t_cost <= bestellimiet4 && (!refiat && opdr_approved <= bestellimiet3 || (refiat && t_cost >= gvs && opdr_approved < 0))));
mresult.canGoedkeur4 = mresult.canWrite("WEB_ORDGO4") && !is_planned_action &&
((S("mld_opdr_approval_all") == 0 && t_cost >= bestellimiet4 && (opdr_approved == bestellimiet4 || mresult.canGoedkeur3)) ||
(S("mld_opdr_approval_all") == 1 && t_cost <= bestellimiet5 && (!refiat && opdr_approved <= bestellimiet4 || (refiat && t_cost >= gvs && opdr_approved < 0))));
mresult.canGoedkeur5 = mresult.canWrite("WEB_ORDGO5") && !is_planned_action &&
((S("mld_opdr_approval_all") == 0 && t_cost >= bestellimiet5 && (opdr_approved >= bestellimiet5 || mresult.canGoedkeur4)) ||
(S("mld_opdr_approval_all") == 1 && t_cost > bestellimiet5 && (!refiat && opdr_approved <= bestellimiet5 || (refiat && t_cost >= gvs && opdr_approved < 0)))) &&
t_cost > opdr_approved;
mresult.canReject = (mresult.canGoedkeur ||
mresult.canGoedkeur2 ||
mresult.canGoedkeur3 ||
mresult.canGoedkeur4 ||
mresult.canGoedkeur5);
mresult.canCopy = (mresult.canWrite("WEB_ORDBOF") && !is_planned_action && !mld_afgerond);
mresult.canVeldChange = (mresult.canWrite("WEB_ORDBOF"));
mresult.canFlexChange = (mresult.canWrite("WEB_ORDBOF"));
mresult.canUitvChange = (mresult.canWrite("WEB_ORDBOF"));
mresult.canDatesChange = (mresult.canWrite("WEB_ORDBOF") || mresult.canWrite("WEB_ORDBO2") || mresult.canWrite("WEB_MLDORD"));
mresult.canKostChange = (mresult.canWrite("WEB_ORDBOF") && S("mld_ord_show_kostenplaats") == 1);
mresult.canOpmChange = (mresult.canWrite("WEB_ORDBOF"));
mresult.canUrenMatChange = (mresult.canWrite("WEB_ORDBOF"));
mresult.canOpdrTypeChange = (mresult.canWrite("WEB_ORDBOF") && !isofferte && !opdrtypevast);
if (mresult.canGoedkeur && (S("mld_opdr_approval_all") == 1 || !mresult.canGoedkeur2)) // Kan ik deze opdracht goedkeuren tot de eerste limiet? Als ik ook al tot de tweede limiet goed kan keuren dan direct maar tot de tweede limiet (volgende if).
mresult.finalapproval = (S("mld_opdr_approval_all") == 1 || t_cost <= bestellimiet2 || opdr_approved > bestellimiet2);
else if (mresult.canGoedkeur2 && (S("mld_opdr_approval_all") == 1 || mresult.canGoedkeur3)) // Kan ik deze opdracht goedkeuren tot de tweede limiet? Als ik ook boven de derde limiet goed kan keuren dan direct maar tot de derde limiet (volgende if).
mresult.finalapproval = (S("mld_opdr_approval_all") == 1 || t_cost <= bestellimiet3 || opdr_approved > bestellimiet3);
else if (mresult.canGoedkeur3 && (S("mld_opdr_approval_all") == 1 || !mresult.canGoedkeur4)) // Kan ik deze opdracht goedkeuren tot de derde limiet? Als ik ook boven de vierde limiet goed kan keuren dan direct maar tot de vierde limiet (volgende if).
mresult.finalapproval = (S("mld_opdr_approval_all") == 1 || t_cost <= bestellimiet4 || opdr_approved > bestellimiet4);
else if (mresult.canGoedkeur4 && (S("mld_opdr_approval_all") == 1 || !mresult.canGoedkeur5)) // Kan ik deze opdracht goedkeuren tot de vierde limiet? Als ik ook boven de vijfde limiet goed kan keuren dan direct maar tot de vijfde limiet (volgende if).
mresult.finalapproval = (S("mld_opdr_approval_all") == 1 || t_cost <= bestellimiet5 || opdr_approved > bestellimiet5);
else if (mresult.canGoedkeur5) // Kan ik dit contract volledig fiatteren en acfief maken?
mresult.finalapproval = true;
break;
case 7: // Verwerkt
mresult.couldClose = (mresult.canWrite("WEB_ORDBOF") ||
(mresult.canWrite("WEB_ORDBO2") && myBO2Change));
mresult.canSeeARFlex = (isofferte && (mresult.haveORDSUPrights || (mresult.canRead("WEB_ORDBOF") && mresult.haveORDOAPrights)));
break;
}
if (mresult.iamBedrijfContact && mresult.canUrenMatChange)
{
if (t_cost > S("mld_max_kosten_extern"))
mresult.canUrenMatChange = false;
}
return mresult;
},
// Geeft het PGB overschrijdingsbedrag van de PGB-limiet terug
get_pgb_exceed_amount: function(opdrachtbedrag, prs_key, dis_key, opdr_key)
{
var amount = opdrachtbedrag; // Indien geen pgblimiet dan gehele opdracht bedrag
// Opvragen PGB limiet
var pgblimiet = budget.get_pgblimiet(prs_key, dis_key);
if (pgblimiet != null)
{ // Verschil PGB limiet met het besteed budget van persoon en desbetreffende discipline voor dit jaar inclusief opdrachtbedrag
amount = (budget.besteed_budget_pgb(prs_key, dis_key, {opdr_key: opdr_key}) + opdrachtbedrag - pgblimiet);
}
return amount;
},
// Geeft het AGB overschrijdingsbedrag van de AGB-limiet terug
get_agb_exceed_amount: function(opdrachtbedrag, kp_key, dis_key, opdr_key)
{
var amount = opdrachtbedrag; // Indien geen agblimiet dan gehele bestel bedrag
// Opvragen AGB limiet
var agblimiet = budget.get_agblimiet(kp_key, dis_key);
if (agblimiet != null)
{ // Verschil AGB limiet met het besteed budget van persoon en desbetreffende discipline voor dit jaar inclusief opdrachtbedrag
amount = (budget.besteed_budget_agb(kp_key, {opdr_key: opdr_key}) + opdrachtbedrag - agblimiet);
}
return amount;
},
// Persoonlijk Gebonden Budget (PGB) en/of Afdeling Gebonden Budget (AGB) controle
// mld_opdr.disc_params_pgb: 0 = Geen van beiden
// 1 = Alleen pgb
// 2 = Alleen agb
// 3 = Beiden, pgb en agb
// Geeft true als het opdracht bedrag boven de PGB-limiet van prs_key uit komt
// en dus (eventueel) goedkeuring vereist zal zijn.
exceeds_pgb: function(opdrachtbedrag, prs_key, dis_key)
{
if (mld_opdr.disc_params_pgb == 1 || mld_opdr.disc_params_pgb == 3)
return budget.exceeds_profiel(opdrachtbedrag + budget.besteed_budget_pgb(prs_key, dis_key), prs_key, dis_key);
else // Geen pgb. Dan kan je ook niet boven de pgb zitten
return false;
},
// Geeft true als het opdracht bedrag boven de AGB-limiet van prs_key uit komt
// en dus (eventueel) goedkeuring vereist zal zijn.
// Negeer evt bestaand opdrachtbedrag van opdr_key (indien > -1)
exceeds_agb: function(opdrachtbedrag, kp_key, dis_key, opdr_key)
{
if (mld_opdr.disc_params_pgb == 2 || mld_opdr.disc_params_pgb == 3)
return budget.exceeds_limietagb(opdrachtbedrag + budget.besteed_budget_agb(kp_key, {opdr_key: opdr_key}), kp_key, dis_key);
else // Geen agb. Dan kan je ook niet boven de agb zitten
return false;
},
// maak een nieuwe melding aan. Resultaat mld_key
// params = { fields: (array als voor save2db)
// alg_onroerendgoed_keys optioneel
// locatie_key optioneel
// kostenplaats_key optioneel
// mld_adres_key optioneel
// perslid_key optioneel (anders user_key)
// prio optioneel, default 3
// }
// Context: - meldracht
// - Logboek mode
// - (API/api_mldsoap.asp zou dit ook moeten gebruiken?)
insertmelding:
function(stdm_key, params)
{
// Dit is nog ongeacht de melding
// Eerst controleren of ik MLDFOF rechten heb. Is dat niet het geval
// dan heb ik in ieder geval MLDUSE rechten nodig voor het aanmaken van een melding.
// Dit is nog ongeacht de melding
if (!user.checkAutorisation("WEB_MLDFOF", true) && !user.checkAutorisation("WEB_ORDUSE", true))
user.checkAutorisation("WEB_MLDUSE");
var voor_key = params.perslid_key || user_key;
var voor_user = user;
if (params.perslid_key != user_key)
voor_user = new Perslid(voor_key);
var fields = params.fields || [];
var stdm_info = mld.mld_stdmeldinginfo(stdm_key);
var locatiekey = params.locatiekey||-1;
var prio = stdm_info.prioriteiten[params.prio||3]; // normaal
if (stdm_info.ins_srtdiscipline_alg)
{
var alg_onroerendgoed_keys = params.alg_onroerendgoed_keys||-1;
if (alg_onroerendgoed_keys==-1)
{
if (stdm_info.alg_level == 2)
alg_onroerendgoed_keys = voor_user.alg_locatie_key();
else
alg_onroerendgoed_keys = voor_user.alg_ruimte_key();
}
fields.push({ dbs: "mld_alg_onroerendgoed_keys", typ: "key", val: alg_onroerendgoed_keys });
}
if (stdm_info.ins_srtdiscipline_bes)
{
var mld_adres_key = params.mld_adres_key||-1;
if (mld_adres_key==-1)
{
var prs_info = new prs.prs_perslid(voor_key, { withAflever: true });
mld_adres_key = prs_info.mld_adres_key;
}
fields.push( { dbs: "mld_adres_key", typ: "key", val: mld_adres_key } );
if (locatiekey==-1 && mld_adres_key>0)
{
var oRs = Oracle.Execute('SELECT alg_locatie_key FROM mld_adres WHERE mld_adres_key = ' + mld_adres_key);
if (!oRs.eof && oRs(0).Value)
{
locatiekey = oRs(0).Value;
}
oRs.Close();
}
}
// Dit is de datum volgens de SLA:
var enddate_std = mld.geteinddatum(new Date(), stdm_key, prio.key, -1);
fields = fields.concat(
[ { dbs: "mld_melding_key", typ: "key", seq: "mld_s_mld_melding_key" },
{ dbs: "mld_meldbron_key", typ: "key", val: S("mld_meldbron_key") },
{ dbs: "mld_melding_module", typ: "varchar", val: "MLD" },
{ dbs: "mld_melding_spoed", typ: "key", val: params.prio||3 }, // default normaal
{ dbs: "prs_perslid_key", typ: "key", val: voor_key },
{ dbs: "mld_stdmelding_key", typ: "key", val: stdm_key},
{ dbs: "mld_melding_datum", typ: "datetime", val: new Date() },
{ dbs: "mld_melding_einddatum", typ: "datetime", val: enddate_std },
{ dbs: "mld_melding_t_uitvoertijd.tijdsduur",
obj: "MLD_T_UITVOERTIJD", typ: "float", val: prio.uitvoertijd },
{ dbs: "mld_melding_t_uitvoertijd.eenheid",
obj: "MLD_T_UITVOERTIJD", typ: "varchar", val: prio.eenheid },
{ dbs: "mld_alg_locatie_key", typ: "key", val: locatiekey }
]);
if (stdm_info.kpnverplicht || params.kostenplaats_key)
{
var kostenplaats_key = params.kostenplaats_key || user.afdeling().prs_kostenplaats_key() || -1;
fields.push({ dbs: "prs_kostenplaats_key", typ: "key", val: kostenplaats_key },
{ dbs: "mld_kosten_klant", typ: "check", val: stdm_info.ins_srtdiscipline_kostenklant==1?1:0 }
);
}
var mldIns = buildInsert("mld_melding", fields, { noValidateToken: true });
var mld_key = mldIns.sequences["mld_melding_key"];
Oracle.Execute(mldIns.sql);
mld.setmeldingstatus(mld_key, 2); // Zorgt ook voor tracking & daarmee notificatie
return mld_key;
},
// Ben ik contactpersoon van *een* bedrijf (maakt niet uit welke)
// of specifiek van bedrijf_key
_user_is_contact: null, // Caching versie zonder bedrijf voor performance
iamContact: function _iamContact(bedrijf_key)
{
if (!bedrijf_key && mld._user_is_contact !== null)
return mld._user_is_contact;
var sql = "SELECT prs_bedrijf_key"
+ " FROM prs_contactpersoon"
+ " WHERE prs_perslid_key = " + user_key
+ " AND prs_contactpersoon_verwijder IS NULL";
if (bedrijf_key)
sql += " AND prs_bedrijf_key = " + bedrijf_key;
var oRs = Oracle.Execute(sql);
var isEof = oRs.Eof;
oRs.Close();
if (!bedrijf_key)
mld._user_is_contact = !isEof;
return !isEof;
},
// levert een te tonen berichtstring op
sendNeedApprovalNotification: function (opdr_key, approver_key)
{
var lsender;
if (approver_key == null || approver_key == -1)
return false;
// These notifications are now sent on behalf of the system, what might be the local FM organisation
var sql = "SELECT COALESCE (l1.alg_locatie_email, l2.alg_locatie_email)"
+ " FROM mld_opdr o, mld_melding m, mld_adres ma, alg_locatie l1, alg_locatie l2"
+ " WHERE m.mld_adres_key = ma.mld_adres_key(+)"
+ " AND ma.alg_locatie_key = l1.alg_locatie_key(+)"
+ " AND m.mld_alg_locatie_key = l2.alg_locatie_key(+)"
+ " AND m.mld_melding_key = o.mld_melding_key"
+ " AND o.mld_opdr_key = " + opdr_key;
var oRs = Oracle.Execute(sql);
if (!oRs.eof) {
lsender = oRs(0).Value;
} else {
lsender = null;
}
oRs.Close();
// notify approver by message & mail as configured in fac_srtnotificatie with MLDAP1
// putnotificationsrtprio doet geen vertaling van ##OPDR_KEY## (notify_tracking zou dat wel doen)
// dus doen we het hier zelf maar.
var omssql = "SELECT fac_srtnotificatie_oms"
+ " FROM fac_srtnotificatie"
+ " WHERE fac_srtnotificatie_code = 'MLDAP1'";
var oRs = Oracle.Execute(omssql);
var oms = L(oRs("fac_srtnotificatie_oms").Value, { autolcl: true });
oRs.Close();
Oracle.Execute("BEGIN fac.putnotificationsrtprio(NULL"
+ ", " + approver_key
+ ", 'MLDAP1'"
+ ", " + opdr_key
+ ", mld.opdrsprintf(" + safe.quoted_sql(oms) + ", " + opdr_key + ")"
+ ", NULL, NULL, NULL, NULL, 2"
+ ", " + (lsender ? safe.quoted_sql(lsender) : "NULL") + "); END;");
var sql = "SELECT prs_perslid_naam_full FROM prs_v_perslid_fullnames_all WHERE prs_perslid_key = " + approver_key;
var oRs = Oracle.Execute(sql);
var prsname = oRs("prs_perslid_naam_full").Value;
oRs.Close();
return L("lcl_mld_opdr_regApprov") + prsname;
},
lock: function (mld_key)
{
var sql = "UPDATE mld_melding"
+ " SET mld_melding_locked_user_key = " + user_key
+ " , mld_melding_locked_date = SYSDATE"
+ " WHERE mld_melding_key = " + mld_key;
Oracle.Execute(sql);
},
unlock: function (mld_key)
{
var sql = "UPDATE mld_melding"
+ " SET mld_melding_locked_user_key = NULL"
+ " , mld_melding_locked_date = SYSDATE"
+ " WHERE mld_melding_key = " + mld_key
+ " AND mld_melding_locked_user_key = " + user_key; // Alleen als we zelf het lock hadden
Oracle.Execute(sql);
},
generate_relobject_editblock: function (mld_key, params)
{ // Als we met <20><>n object binnenkomen tonen we de knop niet
if (params.ins_key < 0 && (mld_key <= 0 || params.canChange))
{
var rwparams = { datatype: "button",
html: "title='" + L("lcl_mld_objects_select") + "' onclick='" + params.onclickobj + "'" + (params.disableobjects? " disabled" : ""),
endicon: "fa-hand-pointer-o fa-inverse hasIcon",
iconClick: "inherit"
}
RWFIELDTR("r_objs_button", "button", L("lcl_mld_objects"), L("lcl_mld_objects") + "(" + params.aantalobj + ")", rwparams);
}
%>
<tr>
<td>
</td>
<td>
<%
var plaatsaanduiding = (S("prs_wpprefix_objectid") == 1
? " CASE"
+ " WHEN o.prs_werkplek_omschrijving IS NOT NULL"
+ " THEN ' ' || o.prs_werkplek_omschrijving"
+ " ELSE ''"
+ " END"
: "''");
if (mld_key > 0)
{
var sql = "SELECT d.ins_deel_key"
+ " , ins_deel_omschrijving || " + plaatsaanduiding + " || ' (' || " + lcl.xsql('s.ins_srtdeel_omschrijving', 's.ins_srtdeel_key') + " || ')' deel "
+ " , CASE"
+ " WHEN d.ins_deel_t_uitvoertijd.eenheid = 'U'"
+ " THEN d.ins_deel_t_uitvoertijd.tijdsduur / 24"
+ " ELSE d.ins_deel_t_uitvoertijd.tijdsduur"
+ " END uitvoertijd" // Uitvoertijd is in dagn.
+ " FROM ins_v_aanwezigdeel d"
+ " , ins_srtdeel s"
+ " , mld_melding_object m"
+ " , ins_v_alg_overzicht o"
+ " WHERE m.mld_melding_key = " + mld_key
+ " AND d.ins_deel_key = m.ins_deel_key"
+ " AND d.ins_srtdeel_key = s.ins_srtdeel_key"
+ " AND d.ins_alg_ruimte_key = o.alg_onroerendgoed_keys(+)"
+ " AND d.ins_alg_ruimte_type = o.alg_onroerendgoed_type(+)"
+ " AND d.ins_alg_locatie_key = o.alg_locatie_key(+)"
+ " ORDER BY deel";
}
else // mogelijk voorgeselecteerd object
{
var sql = "SELECT d.ins_deel_key"
+ " , ins_deel_omschrijving || " + plaatsaanduiding + " || ' (' || " + lcl.xsql('s.ins_srtdeel_omschrijving', 's.ins_srtdeel_key') + " || ')' deel "
+ " , CASE"
+ " WHEN d.ins_deel_t_uitvoertijd.eenheid = 'U'"
+ " THEN d.ins_deel_t_uitvoertijd.tijdsduur / 24"
+ " ELSE d.ins_deel_t_uitvoertijd.tijdsduur"
+ " END uitvoertijd" // Uitvoertijd is in dagn.
+ " FROM ins_v_aanwezigdeel d"
+ " , ins_srtdeel s"
+ " , ins_v_alg_overzicht o"
+ " WHERE d.ins_deel_key = " + params.ins_key
+ " AND d.ins_srtdeel_key = s.ins_srtdeel_key"
+ " AND (d.ins_deel_vervaldatum IS NULL OR d.ins_deel_vervaldatum > TRUNC(SYSDATE))"
+ " AND d.ins_alg_ruimte_key = o.alg_onroerendgoed_keys(+)"
+ " AND d.ins_alg_ruimte_type = o.alg_onroerendgoed_type(+)"
+ " AND d.ins_alg_locatie_key = o.alg_locatie_key(+)"
+ " ORDER BY deel";
}
// showObjDetail alleen in show-mode
FCLTselector("r_objs",
sql,
{ label: "", //L("lcl_mld_objects"),
multi: true,
size: 1,
required: mld_melding.srtinst_verplicht,
extraParamValue: "uitvoertijd" // uitvoertijd is hier in uren
});
%> <input type='hidden' name='has_r_objs' value='1'>
</td>
</tr>
<script>
$(document).ready(function ()
{
$('#r_objs').attr("size", ($("#r_objs")[0].options.length == 0? 1 : $("#r_objs")[0].options.length));
});
</script>
<% },
generate_relobject_block: function (mld_key)
{
var plaatsaanduiding = (S("prs_wpprefix_objectid") == 1
? " CASE"
+ " WHEN o.prs_werkplek_omschrijving IS NOT NULL"
+ " THEN ' ' || o.prs_werkplek_omschrijving"
+ " ELSE ''"
+ " END"
: "''");
var sql = "SELECT d.ins_deel_key"
+ " , ins_deel_omschrijving || " + plaatsaanduiding + " || ' (' || " + lcl.xsql('s.ins_srtdeel_omschrijving', 's.ins_srtdeel_key') + " || ')' deel "
+ " FROM ins_deel d"
+ " , ins_srtdeel s"
+ " , mld_melding_object m"
+ " , ins_v_alg_overzicht o"
+ " WHERE m.mld_melding_key = " + mld_key
+ " AND d.ins_deel_key = m.ins_deel_key"
+ " AND d.ins_srtdeel_key = s.ins_srtdeel_key"
+ " AND d.ins_alg_ruimte_key = o.alg_onroerendgoed_keys(+)"
+ " AND d.ins_alg_ruimte_type = o.alg_onroerendgoed_type(+)"
+ " AND d.ins_alg_locatie_key = o.alg_locatie_key(+)"
+ " ORDER BY 2";
var oRs = Oracle.Execute(sql);
if (!oRs.Eof)
{
BLOCK_START("mldIns", L("lcl_gerelateerdeobjecten"));
var clikker = "";
if (user.checkAutorisation("WEB_INSMAN", true))
clikker = "onclick='showObjListTab({0})'".format(mld_key);
%>
<tr><td class="label"><span class="<%=clikker?"details":""%>" <%=clikker%>><%=L("lcl_mld_objects")+':'%></span><td>
<%
while( !oRs.eof ) {
%><input class="fld details" readonly value="<%=safe.htmlattr(oRs("deel").Value)%>" onclick='showObjDetail(<%=oRs("ins_deel_key").Value%>, "bo")'><%
oRs.MoveNext();
if (!oRs.eof)
Response.Write("<br/>");
}
BLOCK_END();
}
oRs.close();
},
dienst_controle: function (stdm_key, locatiekey, gebouwkey, ruimtekey, prs_key_voor)
{
var sql;
sql = "SELECT ms.mld_stdmelding_vereisdienst"
+ " , ms.prs_dienst_key"
+ " , ms.mld_stdmelding_prseigen"
+ " , " + lcl.xsqla('pd.prs_dienst_omschrijving', 'pd.prs_dienst_key')
+ " FROM mld_stdmelding ms"
+ " , prs_dienst pd"
+ " WHERE mld_stdmelding_key = " + stdm_key
+ " AND pd.prs_dienst_key(+) = ms.prs_dienst_key";
var oRs = Oracle.Execute(sql);
var vereisdienst = oRs("mld_stdmelding_vereisdienst").Value == 1;
var eigenprs = oRs("mld_stdmelding_prseigen").Value == 1;
var prs_dienst_key = oRs("prs_dienst_key").Value;
var prs_dienst_desc = oRs("prs_dienst_omschrijving").Value; // 'Schoonmaken'
var prs_bedrijf_key = -1;
if (prs_dienst_key)
{ // Controleer of er een/<2F><>n bedrijf is dat deze dienst levert op deze locatie/dit gebouw
sql = "SELECT MIN(bdl.prs_bedrijf_key) prs_bedrijf_key, COUNT(DISTINCT bdl.prs_bedrijf_key) aantal"
+ " FROM prs_bedrijfdienstlocatie bdl"
+ " , prs_v_aanwezigbedrijf b"
+ " WHERE bdl.prs_bedrijf_key = b.prs_bedrijf_key"
+ " AND bdl.prs_dienst_key = " + prs_dienst_key;
// Als in de tabel de alg_gebouw_key en/of alg_locatie_key NULL is dan levert het bedrijf de dienst op ALLE gebouwen en/of locaties.
if (gebouwkey > 0)
sql += " AND ((bdl.alg_gebouw_key = " + gebouwkey + " OR bdl.alg_gebouw_key IS NULL) AND"
+ " (bdl.alg_locatie_key = " + locatiekey + " OR bdl.alg_locatie_key IS NULL)" + ")";
else if (locatiekey > 0) // <20>berhaupt plaatsgegevens?
sql += " AND (bdl.alg_locatie_key = " + locatiekey + " OR bdl.alg_locatie_key IS NULL)";
oRs = Oracle.Execute(sql);
if (vereisdienst && oRs("aantal") == 0)
abort_with_warning(L("lcl_mld_dienstunavailablehere") + prs_dienst_desc);
if (oRs("aantal") == 1)
prs_bedrijf_key = oRs("prs_bedrijf_key").Value; // straks mogelijk vanzelf opdracht
}
if (locatiekey > 0 || gebouwkey > 0 || ruimtekey > 0)
{
// Als de melding onderdeel is van *een* dienstniveau dan moet bij de
// ruimte een niveau ingevuld zijn waar deze melding onderdeel van is
sql = "SELECT COUNT(*) aantal"
+ " FROM mld_dienstpakket"
+ " WHERE mld_stdmelding_key = " + stdm_key;
oRs = Oracle.Execute(sql);
if (oRs("aantal").Value > 0) // er zit een beperking op deze melding
{
// Zoek de scherptst gedefinieerde dienstniveau
if (ruimtekey > 0)
sql = "SELECT COALESCE(ar.mld_dienstniveau_key,"
+ " av.mld_dienstniveau_key,"
+ " ag.mld_dienstniveau_key,"
+ " al.mld_dienstniveau_key) mld_dienstniveau_key"
+ " FROM alg_ruimte ar,"
+ " alg_verdieping av,"
+ " alg_gebouw ag,"
+ " alg_locatie al"
+ " WHERE ar.alg_ruimte_key = " + ruimtekey
+ " AND ar.alg_verdieping_key = av.alg_verdieping_key"
+ " AND av.alg_gebouw_key = ag.alg_gebouw_key"
+ " AND ag.alg_locatie_key = al.alg_locatie_key";
else if (gebouwkey > 0)
sql = "SELECT COALESCE(ag.mld_dienstniveau_key, "
+ " al.mld_dienstniveau_key) mld_dienstniveau_key"
+ " FROM alg_gebouw ag,"
+ " alg_locatie al"
+ " WHERE ag.alg_gebouw_key = " + gebouwkey
+ " AND ag.alg_locatie_key = al.alg_locatie_key";
else if (locatiekey > 0)
sql = "SELECT al.mld_dienstniveau_key"
+ " FROM alg_locatie al"
+ " WHERE al.alg_locatie_key = " + locatiekey;
var oRs = Oracle.Execute(sql);
var dienstniveau_key = oRs("mld_dienstniveau_key").Value || -1;
oRs.Close;
// Zit onze melding in dienstniveau_key pakket?
sql = "SELECT 1"
+ " FROM mld_dienstpakket mdp"
+ " WHERE mld_stdmelding_key = " + stdm_key
+ " AND mdp.mld_dienstniveau_key = " + dienstniveau_key
oRs = Oracle.Execute(sql);
if (oRs.Eof) // er zit een beperking op deze melding
abort_with_warning(L("lcl_mld_dienst_not_for_room"));
oRs.Close();
}
if (prs_key_voor > 0)
{
// Als bij de melding is aangegeven dat hij alleen voor de eigen organisatie mag dan
// moet die ruimte (via PRS_RUIMTEAFDELING) gehuurd worden door 'eigen' afdeling
// 'eigen' is gedefinieerd als een afdeling die ons als parent heeft
// of een afdeling die een parent van ons is
if (eigenprs) // er zit een beperking op deze melding
{
var uservoor = new Perslid(prs_key_voor);
// TODO: kan dit met een nog goedkopere view?
sql = "SELECT 1"
+ " FROM prs_ruimteafdeling"
+ " WHERE alg_ruimte_key = " + ruimtekey
+ " AND prs_afdeling_key IN "
+ " (SELECT prs_afdeling_key FROM prs_v_afdeling_familie a"
+ " WHERE a.prs_afdeling_elder_key ="+uservoor.prs_afdeling_key()
+ " UNION ALL"
+ " SELECT prs_afdeling_elder_key FROM prs_v_afdeling_familie a"
+ " WHERE a.prs_afdeling_key ="+uservoor.prs_afdeling_key() + ")";
oRs = Oracle.Execute(sql);
if (oRs.Eof) // er zit een beperking op deze melding
abort_with_warning(L("lcl_mld_dienst_not_for_org"));
}
}
}
return prs_bedrijf_key;
},
link_child_to_parent: function(child_key, parent_key)
{
var sql = "UPDATE mld_melding"
+ " SET mld_melding_parentkey = " + parent_key
+ " WHERE mld_melding_key = " + child_key;
Oracle.Execute(sql);
var track_oms = L("lcl_linked_to").format(mld.mld_prefix(child_key)+child_key, mld.mld_prefix(parent_key)+parent_key);
mld.trackmeldingupdate(child_key, track_oms);
// Probeer de status gelijk aan die van de parent te zetten
// Merk op dat de trigger ook nog kan ingrijpen: als je hem op 7 probeert
// te zetten kan het zo maar 4 worden.
var sql = "SELECT mld_melding_status"
+ " FROM mld_melding m"
+ " WHERE mld_melding_key = " + parent_key;
var oRs = Oracle.Execute(sql);
var mldstatus = oRs("mld_melding_status").Value;
oRs.Close();
// pikt de package niet altijd (2 naar 7) mld.setmeldingstatus(child_key, mldstatus);
sql = "UPDATE mld_melding"
+ " SET mld_melding_status = " + (mldstatus==6?5:mldstatus) // niet rechtstreeks verwerkt
+ " WHERE mld_melding_key = " + child_key;
//fac.trackaction (eventcode, r.mld_melding_key, puserkey, NULL, NULL);
var err = Oracle.Execute(sql, true);
if (err.friendlyMsg)
return err.friendlyMsg;
else
return "";
},
hasRequiredStatusEmptyMelding: function(mld_key, status)
{
var sql = "SELECT *"
+ " FROM (SELECT mk.*"
+ " , (SELECT km.mld_kenmerkmelding_waarde"
+ " FROM mld_kenmerkmelding km"
+ " WHERE km.mld_kenmerk_key = mk.mld_kenmerk_key"
+ " AND km.mld_melding_key = mk.mld_melding_key) waarde"
+ " FROM (SELECT m.mld_melding_key"
+ " , k.mld_kenmerk_key"
+ " , v.mld_srtkenmerk_omschrijving"
+ " , k.mld_kenmerk_verplicht_status"
+ " FROM mld_kenmerk k"
+ " , mld_melding m"
+ " , mld_stdmelding s"
+ " , mld_discipline d"
+ " , mld_srtkenmerk v"
+ " WHERE k.mld_srtkenmerk_key = v.mld_srtkenmerk_key"
+ " AND s.mld_stdmelding_key = m.mld_stdmelding_key"
+ " AND s.mld_ins_discipline_key = d.ins_discipline_key"
+ " AND ((k.mld_stdmelding_key = s.mld_stdmelding_key AND k.mld_kenmerk_niveau = 'S')"
+ " OR (k.mld_stdmelding_key = s.mld_ins_discipline_key AND k.mld_kenmerk_niveau = 'D')"
+ " OR (k.mld_stdmelding_key = d.ins_srtdiscipline_key AND k.mld_kenmerk_niveau = 'T'))"
+ " AND v.mld_srtkenmerk_kenmerktype <> 'M'"
+ " AND v.mld_srtkenmerk_verwijder IS NULL"
+ " AND k.mld_kenmerk_verwijder IS NULL"
+ " ) mk"
+ " ) mkw"
+ " WHERE mkw.mld_melding_key = " + mld_key
+ " AND mkw.mld_kenmerk_verplicht_status = " + status
+ " AND mkw.waarde IS NULL";
var oRs = Oracle.Execute(sql);
var ontbreekt = [];
while (!oRs.eof)
{
ontbreekt.push(oRs("mld_srtkenmerk_omschrijving").Value);
oRs.MoveNext();
}
oRs.Close();
// Levert array op met kenmerken die ingevuld hadden moeten zijn.
return ontbreekt;
},
hasRequiredStatusEmptyOpdr: function(opdr_key, status)
{
var sql = "SELECT *"
+ " FROM (SELECT ok.*"
+ " , (SELECT ko.mld_kenmerkopdr_waarde"
+ " FROM mld_kenmerkopdr ko"
+ " WHERE ko.mld_kenmerk_key = ok.mld_kenmerk_key"
+ " AND ko.mld_opdr_key = ok.mld_opdr_key) waarde"
+ " FROM (SELECT o.mld_opdr_key"
+ " , k.mld_kenmerk_key"
+ " , v.mld_srtkenmerk_omschrijving"
+ " , k.mld_kenmerk_verplicht_status"
+ " FROM mld_kenmerk k"
+ " , mld_srtkenmerk v"
+ " , mld_opdr o"
+ " , mld_typeopdr t"
+ " WHERE k.mld_srtkenmerk_key = v.mld_srtkenmerk_key"
+ " AND o.mld_typeopdr_key = t.mld_typeopdr_key"
+ " AND k.mld_typeopdr_key = t.mld_typeopdr_key"
+ " AND k.mld_kenmerk_niveau = 'O'"
+ " AND v.mld_srtkenmerk_kenmerktype <> 'O'"
+ " AND v.mld_srtkenmerk_verwijder IS NULL"
+ " AND k.mld_kenmerk_verwijder IS NULL"
+ " ) ok"
+ " ) okw"
+ " WHERE okw.mld_opdr_key = " + opdr_key
+ " AND okw.mld_kenmerk_verplicht_status = " + status
+ " AND okw.waarde IS NULL";
var oRs = Oracle.Execute(sql);
var ontbreekt = [];
while (!oRs.eof)
{
ontbreekt.push(oRs("mld_srtkenmerk_omschrijving").Value);
oRs.MoveNext();
}
oRs.Close();
// Levert array op met kenmerken die ingevuld hadden moeten zijn.
return ontbreekt;
},
srtdisc_sql: function (autfunction, params)
{
params = params || {};
autfunc = ((typeof autfunction == "object" && autfunction instanceof Array)
? safe.quoted_sql_join(autfunction)
: safe.quoted_sql(autfunction)
);
var mySRTsql = // All ins_srtdiscipline with any ins_discipline beneath it we have write-rights for
"SELECT sd.ins_srtdiscipline_key"
+ ", "+ lcl.xsqla('sd.ins_srtdiscipline_omschrijving', 'ins_srtdiscipline_key')
+ " FROM ins_v_aanwezigsrtdiscipline sd"
+ " WHERE ins_srtdiscipline_module = 'MLD'"
+ " AND EXISTS (SELECT ''"
+ " FROM mld_discipline td"
+ (params.filter_from ? params.filter_from : "")
+ " WHERE td.ins_srtdiscipline_key = sd.ins_srtdiscipline_key"
+ (params.filter_where ? params.filter_where : "")
+ " AND ins_discipline_key IN("
+ " SELECT ins_discipline_key"
+ " FROM fac_v_webgebruiker g, fac_functie f "
+ " WHERE g.fac_functie_key = f.fac_functie_key "
+ " AND f.fac_functie_code IN (" + autfunc + ")"
+ " AND (g.fac_gebruiker_alg_level_write < 9 AND g.fac_gebruiker_prs_level_write < 9)"
+ " AND g.prs_perslid_key = " + user_key + ")"
+ " AND td.ins_discipline_key IN("
+ " SELECT mld_ins_discipline_key"
+ " FROM mld_stdmelding "
+ " WHERE mld_stdmelding_verwijder IS NULL "
+ " AND (mld_stdmelding_vervaldatum IS NULL "
+ " OR mld_stdmelding_vervaldatum > TRUNC (SYSDATE)) "
+ (autfunction == "WEB_MLDUSE" ? " AND mld_stdmelding_notfrontend = 0) " : ")")
if (ins_key > 0) // dan moet die discipline ook nog meldingen hebben die betrekking *kunnen*
{ // hebben op ons object. In theorie zouden we ook nog kunnen ALG-scopen...
mySRTsql += " AND sd.ins_srtdiscipline_ins = 1"
+ " AND td.ins_discipline_key IN (SELECT msm.mld_ins_discipline_key"
+ " FROM mld_stdmelding msm,"
+ " ins_srtgroep isg,"
+ " ins_srtdeel isd,"
+ " ins_deel insd"
+ " WHERE mld_stdmelding_verwijder IS NULL"
+ " AND insd.ins_deel_key = " + params.ins_key
+ " AND isd.ins_srtdeel_key = insd.ins_srtdeel_key"
+ " AND isg.ins_srtgroep_key = isd.ins_srtgroep_key"
+ (autfunction == "WEB_MLDUSE" ? " AND mld_stdmelding_notfrontend = 0 " : "")
+ " AND ( msm.ins_srtinst_niveau = 'S' AND ins_srtinst_key = insd.ins_srtdeel_key"
+ " OR msm.ins_srtinst_niveau = 'G' AND ins_srtinst_key = isg.ins_srtgroep_key"
+ " OR msm.ins_srtinst_niveau = 'D' AND ins_srtinst_key = isg.ins_discipline_key"
// + " OR msm.ins_srtinst_niveau IS NULL" // is wel h<><68>l algemeen
+ " )"
+ " )";
}
mySRTsql += " )"
+ " AND sd.ins_srtdiscipline_key <> " + S("kto_srtdiscipline_key")
+ " ORDER BY 2";
return mySRTsql;
},
suggest_uitvoerende_sql: // Maak de sql voor de lijst met uitvoerenden
function _suggest_uitvoerende_sql(filtClause, params)
{ // Zie ook Shared/Suggest/SuggestUitvoerende.asp en Shared/Suggest/uitvoerendeFilter.inc.
filtClause = filtClause || {};
params = params || {};
var chars = params.chars;
var dienst = params.dienst;
var loc_key = params.loc_key;
var bld_key = params.bld_key;
var lutype = params.lutype;
var externonly = params.externonly;
var exhandler = params.exhandler;
var chars = chars.replace(/\*/g,"%");
var filtClause = getFiltClauseUitvoerende(params.filtcode, params);
// De uitvoerende. CONN#15546 vindt dat voor BES-meldingen er ook beter
// uit leveranciers kan worden gekozen dan uit uitvoerenden.
// Kan dit nog zuiverder? Bijvoorbeeld tegelijk MLD en BES?
if (lutype == "L")
var uitvtabel = "prs_v_leverancierbedrijf"; // prs_bedrijf_leverancier = 1
else if (lutype == "U")
var uitvtabel = "prs_v_uitvoerendebedrijf"; // prs_bedrijf_uitvoerende = 1
else // lutype == "B"
var uitvtabel = "prs_v_aanwezigbedrijf"; // aanwezig prs_bedrijf
// Let op de bijzonder manier om prs_bedrijfdienstlocatie mee te nemen: hier interesseren me
// slechts de verschillende diensten, de plaats doet er niet toe.
// Geen autorisatie bij externe bedrijven (prs_bedrijf met prs_bedrijf_uitvoerende = 1 of prs_bedrijf_leverancier = 1)
// Niet persoon of plaats afhankelijk
sqlD = " SELECT b.prs_bedrijf_key uitv_key"
+ ", " + safe.quoted_sql(L("lcl_mld_bedrijf_prefix")) + " || b.prs_bedrijf_naam naam"
+ ", '' dienst"
+ ", 'B' extra"
+ ", 10"
+ ", prs_bedrijf_naam_upper"
+ " FROM " + uitvtabel + " b"
+ " WHERE 1 = 1"
+ filtClause.bedrijf
+ " AND UPPER(b.prs_bedrijf_naam) LIKE " + safe.quoted_sql_wild("%" + chars + "%")
sqlP = " SELECT p.prs_perslid_key uitv_key"
+ ", " + safe.quoted_sql(L("lcl_mld_person_prefix")) + " || " + S("prs_pers_string") + " naam"
+ ", " + safe.quoted_sql(L("lcl_mld_intern")) + " dienst"
+ ", 'P' extra"
+ ", 99"
+ ", prs_perslid_upper"
+ " FROM prs_v_aanwezigperslid p"
+ " WHERE (UPPER(" + safe.quoted_sql(L("lcl_mld_person_prefix")) + " || " + S("prs_pers_string") + ") LIKE " + safe.quoted_sql_wild(chars + "%")
+ " OR UPPER(" + safe.quoted_sql(L("lcl_mld_intern")) + ") LIKE " + safe.quoted_sql_wild(chars + "%")+")"
+ filtClause.perslid
sqlL = filtClause.locatie;
sqlG = filtClause.gebouw;
sqlarr = [sqlD];
if (loc_key > 0) sqlarr.push(sqlL);
if (bld_key > 0) sqlarr.push(sqlG);
if (dienst == -1 && !externonly && !exhandler) sqlarr.push(sqlP); // Personen voldoen nooit aan een dienst
sql = sqlarr.join(" UNION ALL ");
sql = "SELECT * FROM(" + sql + ") ORDER BY 5, 6";
return sql;
},
reject_offerte:
function _reject_offerte(opdr_key, opmerk)
{
var mld_opdr = mld.mld_opdr_info(opdr_key);
lcl.set_dialect(mld_opdr.opdr_type, "MLD_TYPEOPDR_KEY");
// Nog de afmeld opmerking opslaan.
var this_opdr = mld.func_enabled_opdracht(opdr_key); // wat mag ik zoal op deze opdracht
if (this_opdr.canOpmChange && opmerk)
{
var fields = [ { dbs: "mld_opdr_opmerking", typ: "varchar", val: opmerk, track: L("lcl_mld_inf_Opmerking") } ];
var mldUpd = buildTrackingUpdate("mld_opdr", "mld_opdr_key = " + opdr_key, fields);
if (mldUpd && mldUpd.trackarray.length)
{
Oracle.Execute(mldUpd.sql);
var ins_srtdiscipline_prefix = mld.mld_prefix(mld_opdr.mld_key);
var formattedID = ins_srtdiscipline_prefix + mld_opdr.mld_key + "/" + mld_opdr.volgnr;
mld.trackopdrachtupdate(opdr_key, L("lcl_ord_is_ordupdtrack").format(formattedID) + "\n" + mldUpd.trackarray.join("\n"));
}
}
// Zetten van de status en afhandelen van de tracking van het afwijzen (reject).
mld.setopdrachtstatus(opdr_key, 2); // Afgekeurd
// De status van de melding zou gewijzigd kunnen/moeten worden hierdoor
mld.updatemeldingstatus(mld_opdr.mld_key, 0);
},
getReqStatusEmptyMelding:
function _getReqStatusEmptyMelding(kenmerkEmpty, mld_key, status)
{ // Zijn er nog kenmerken die nu wel verplicht zijn?
var kvsAfwezig = mld.hasRequiredStatusEmptyMelding(mld_key, status);
if (kvsAfwezig.length)
{
var mldnr = mld.mld_prefix(mld_key) + mld_key;
kenmerkEmpty.push(L("lcl_mld_req_status_empty").format(kvsAfwezig.join(", "), mldnr) );
}
return kenmerkEmpty;
},
getReqStatusEmptyOpdr:
function _getReqStatusEmptyOpdr(kenmerkEmpty, opdr_key, status)
{ // Zijn er nog kenmerken die nu wel verplicht zijn?
var kvsAfwezig = mld.hasRequiredStatusEmptyOpdr(opdr_key, status);
if (kvsAfwezig.length)
{
var mld_opdr = mld.mld_opdr_info(opdr_key);
var mldnr = mld.mld_prefix(mld_opdr.mld_key) + mld_opdr.mld_key + "/" + mld_opdr.volgnr;
kenmerkEmpty.push(L("lcl_mld_opdr_req_status_empty").format(kvsAfwezig.join(", "), mldnr) );
}
return kenmerkEmpty;
},
getEmptyRequiredFields:
function _getEmptyRequiredFields(mld_melding)
{
var emptyRequiredFields = false;
// Plaatsgegevens.
if (mld_melding.show_alg)
{
switch (mld_melding.alg_onrgoed_niveau)
{
case "R": emptyRequiredFields = (mld_melding.bttype != "T" && mld_melding.room_key == -1);
break;
case "V": emptyRequiredFields = (mld_melding.bttype != "T" && mld_melding.flr_key == -1);
break;
case "G": emptyRequiredFields = (mld_melding.bld_key == -1);
break;
case "L": emptyRequiredFields = (mld_melding.loc_key == -1);
break;
}
}
// Dan de velden kostenplaats, afleveradres en objecten ook maar testen of ze, als ze verplicht zijn, zijn ingevuld.
// Kostenplaats.
emptyRequiredFields = emptyRequiredFields || (mld_melding.kpnverplicht && mld_melding.kostenpl_key == -1);
// Afleveradres.
emptyRequiredFields = emptyRequiredFields || (mld_melding.show_bes && !mld_melding.deladdress);
// Objecten.
if (mld_melding.show_ins && mld_melding.srtinst_verplicht)
{ // Verplicht een objecten te selecteren.
var sql = "SELECT COUNT(*) aantal FROM mld_melding_object WHERE mld_melding_key = " + mld_melding.mld_key;
var oRs = Oracle.Execute(sql);
var noObjSelected = oRs("aantal").Value == 0;
oRs.close();
emptyRequiredFields = emptyRequiredFields || noObjSelected;
}
// Omschrijving melding.
emptyRequiredFields = emptyRequiredFields || (mld_melding.freetext == 2 && !mld_melding.mld_omschr);
return emptyRequiredFields;
},
getMldKenmerk_sql:
function _getMldKenmerk_sql(pmld_key, pfiltClause)
{
var filtClause = pfiltClause || {};
var where = "";
if (filtClause.wheres && filtClause.wheres.length > 0)
where = " AND " + filtClause.wheres.join(" AND ");
var sql = "SELECT mkm.mld_kenmerk_key"
+ " , mkm.mld_kenmerk_niveau"
+ " , mkm.mld_kenmerk_volgnummer"
+ " , msk.mld_srtkenmerk_omschrijving"
+ " , msk.mld_srtkenmerk_kenmerktype"
+ " , mkm.mld_srtkenmerk_key"
+ " FROM mld_kenmerk mkm"
+ " , mld_srtkenmerk msk"
+ " , mld_melding mm"
+ " , mld_stdmelding sm"
+ " , mld_discipline md"
+ " , (SELECT 'S' mld_kenmerk_niveau"
+ " , mld_stdmelding_key ref_mld_stdmelding_key"
+ " , mld_stdmelding_key"
+ " , ins_discipline_key"
+ " , m2.ins_srtdiscipline_key"
+ " FROM mld_stdmelding md"
+ " , mld_discipline m2"
+ " WHERE md.mld_ins_discipline_key = m2.ins_discipline_key"
+ " UNION ALL"
+ " SELECT 'D' mld_kenmerk_niveau"
+ " , ins_discipline_key ref_mld_stdmelding_key"
+ " , NULL mld_stdmelding_key"
+ " , ins_discipline_key ins_discipline_key"
+ " , ins_srtdiscipline_key"
+ " FROM mld_discipline m2"
+ " UNION ALL"
+ " SELECT 'T' mld_kenmerk_niveau"
+ " , ins_srtdiscipline_key ref_mld_stdmelding_key"
+ " , NULL mld_stdmelding_key"
+ " , NULL ins_discipline_key"
+ " , ins_srtdiscipline_key"
+ " FROM ins_srtdiscipline m2"
+ " ) s"
+ " WHERE mkm.mld_kenmerk_verwijder IS NULL"
+ " AND mkm.mld_stdmelding_key = s.ref_mld_stdmelding_key"
+ " AND mkm.mld_kenmerk_niveau = s.mld_kenmerk_niveau"
+ " AND mkm.mld_srtkenmerk_key = msk.mld_srtkenmerk_key"
+ " AND mm.mld_stdmelding_key = sm.mld_stdmelding_key"
+ " AND md.ins_discipline_key = sm.mld_ins_discipline_key"
+ " AND ( (s.ins_discipline_key = sm.mld_ins_discipline_key)"
+ " OR ('T' = mkm.mld_kenmerk_niveau AND s.ins_srtdiscipline_key = md.ins_srtdiscipline_key)"
+ " )"
+ " AND ( (s.mld_stdmelding_key = sm.mld_stdmelding_key)"
+ " OR ('D' = mkm.mld_kenmerk_niveau AND s.ins_discipline_key = sm.mld_ins_discipline_key)"
+ " OR ('T' = mkm.mld_kenmerk_niveau AND s.ins_srtdiscipline_key = md.ins_srtdiscipline_key)"
+ " )"
+ " AND mm.mld_melding_key = " + pmld_key
+ where
+ " ORDER BY mkm.mld_kenmerk_volgnummer DESC";
return sql;
},
getopdroverzicht_sql:
function (pautfunction, params)
{ // Lever opdrachten overzicht sql op.
var urole = params.urole;
var fronto = (urole == "fo");
var backo = (urole == "bo");
var frontend = (urole == "fe");
var bgtmode = (urole == "bgt");
// Voor resulttable de globalen zetten; zou ng anders moeten.
var outputmode = params.outputmode; // print to 0 = screen, 1 = printer, 2 = excel, etc.
var print = (outputmode == 1 || outputmode == 5);
var excel = (outputmode == 2 || outputmode == 6);
var showall = params.showall;
var mld_key = params.mld_key;
var ks_key = params.ks_key;
var opdr_key = params.opdr_key; // opdracht nummer is voor de gebruiker hetzelfde als mld_key
var intopdr_key = params.intopdr_key; // de technische echte mld_opdr_key
var behandel_key = params.behandel_key;
var beh_key_arr = params.beh_key_arr; // Array met keys (e.g. [3, 4, 5])
var srtdisc_key = params.srtdisc_key;
var searchtekst = params.searchtekst;
var reg_key = params.reg_key;
var dist_key = params.dist_key;
var adr_key = params.adr_key;
var loc_key = params.loc_key;
var bld_key = params.bld_key;
var verantw_key = params.verantw_key;
var caller_key = params.caller_key;
var org_key = params.org_key;
var srtdisc_key = params.srtdisc_key;
var disc_key_arr = params.disc_key_arr; // Array met keys (e.g. [3, 4, 5])
var meldinggrp_key = params.meldinggrp_key;
var behandelgrp_key = params.behandelgrp_key;
var stdm_key_arr = params.stdm_key_arr;
var kp = params.kp;
var handler_key = params.handler_key;
var internuit = params.internuit;
var externuit = params.externuit;
var mldstatus_arr = params.mldstatus_arr;
var opdrstatus_arr = params.opdrstatus_arr;
var chkAcceptEx = params.chkAcceptEx;
var chkRunEx = params.chkRunEx;
var chkSpoed = params.chkSpoed;
var chkAfgerond = params.chkAfgerond;
var datefrom = params.datefrom;
var dateto = params.dateto;
var opdrtype_key = params.opdrtype_key
var contract = params.contract
var cnt_key = params.cnt_key;
var offerte = params.offerte; // Opdrachttype is een offerteaanvraag. Kan -1:don't care, 0:niet, 1:wel zijn.
if (params.offertes) // Helaas geeft mld_search_list.asp het meervoud door
offerte = 1;
// Er kunen twee contract keys meegegeven worden. Een extra contract key die bij contract hoort.
// Als cnt_key en contract_key verschillen kun het nooit een resultaat opleveren
if (contract > 0)
cnt_key = cnt_key + (cnt_key != ""? ", " : "") + contract;
var uitvoerder = params.uitvoerder;
var planb = params.planb;
var bes = params.bes;
var tiny = params.tiny;
var inline = params.inline;
var from_mld = params.from_mld;
var showstatus = params.showstatus;
var showopdrstatus = params.showopdrstatus;
var mldopdrstrej = params.mldopdrstrej;
var mldopdrstafm = params.mldopdrstafm;
var mldopdrstver = params.mldopdrstver;
var groepering_key = params.groepering_key; // Voor maninfo. 2 en 16 ondersteund
// AUTORISATIES
// Autorisatie check is al gedaan in mld_search_list.asp
// Dit lijkt me om te kunnen bepalen of ik uberhaupt naar de PRS-autorisatie hoef te kijken
var add_prs_restrict = prshasrestrict(pautfunction);
if (from_mld)
{
var functiecode = "'WEB_MLDBOF'";
for (var i = 0; i < pautfunction.length; i++)
{
functiecode += "," + safe.quoted_sql(pautfunction[i]);
}
}
else
var functiecode = safe.quoted_sql(pautfunction);
// check if user has a building or lower scope. If so we have to include onroerendgoed view.
sql2 = "SELECT fac_groeprechten_key "
+ " FROM fac_functie f"
+ " , fac_groeprechten gr"
+ " , fac_gebruikersgroep gg"
+ " WHERE gg.prs_perslid_key = " + user_key
+ " AND gr.fac_groep_key = gg.fac_groep_key"
+ " AND gr.fac_functie_key = f.fac_functie_key"
+ " AND (f.fac_functie_code IN (" + functiecode + "))"
+ " AND ( ( gr.fac_gebruiker_alg_level_read < 9 "
+ " AND gr.fac_gebruiker_alg_level_read > 2 "
+ " ) "
+ " OR ( gr.fac_gebruiker_alg_level_write < 9 "
+ " AND gr.fac_gebruiker_alg_level_write > 2 "
+ " ) "
+ " ) ";
bld_scope = false;
oRs2 = Oracle.Execute(sql2);
if (!oRs2.eof)
{
bld_scope = true;
}
var sqltrack = (groepering_key == 2 || groepering_key == 16 // Minfo groepering Opdracht(2) en Opdracht + Kosten(16).
? ", TO_DATE('01-01-1970', 'DD-MM-YYYY')"
: ", (SELECT MAX(t.fac_tracking_datum)"
+ " FROM fac_tracking t"
+ " , fac_srtnotificatie sn"
+ " WHERE t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key"
+ " AND t.fac_tracking_refkey = o.mld_opdr_key" // opdracht key uit "sql"
+ " AND sn.fac_srtnotificatie_xmlnode = 'opdracht')")
+ " recentdatum";
var uitv_type = " CASE"
+ " WHEN COALESCE ( (SELECT 'B'"
+ " FROM prs_bedrijf"
+ " WHERE prs_bedrijf_key = o.mld_uitvoerende_keys)"
+ " , (SELECT 'P'"
+ " FROM prs_perslid"
+ " WHERE prs_perslid_key = o.mld_uitvoerende_keys)) = 'B'"
+ " THEN"
+ " CASE"
+ " WHEN (SELECT u.intern"
+ " FROM mld_v_uitvoerende u"
+ " WHERE u.mld_uitvoerende_key = o.mld_uitvoerende_keys) = 1"
+ " THEN"
+ " 'BI'"
+ " ELSE"
+ " 'BE'"
+ " END"
+ " ELSE"
+ " 'PI'"
+ " END"
var whereUs = ""; // straks voor de statussen
sql = "SELECT o.mld_melding_key"
+ " , o.mld_opdr_bedrijfopdr_volgnr"
+ " , o.mld_opdr_id"
+ " , o.mld_opdr_einddatum"
+ " , l.alg_locatie_code "
+ " ||(SELECT DECODE(v.alg_plaatsaanduiding, '', ' ('||l.alg_locatie_omschrijving||')',"
+ " '-'||v.alg_plaatsaanduiding || DECODE(v.alg_plaatsomschrijving, '','' ,"
+ "' (' || v.alg_plaatsomschrijving || ')'))"
+ " FROM alg_v_allonrgoed_gegevens v"
+ " WHERE m.mld_alg_onroerendgoed_keys = v.alg_onroerendgoed_keys"
+ " AND rownum = 1"
+ " ) plaatsmelding"
+ " , l.alg_locatie_adres"
+ (S("mld_print_loc_address") == 2
? " , (SELECT geg.alg_gebouw_naam"
+ " FROM alg_v_allonrgoed_gegevens geg"
+ " WHERE geg.alg_onroerendgoed_keys = m.mld_alg_onroerendgoed_keys) alg_gebouw_naam"
: "")
+ " , di.alg_district_omschrijving"
+ " , (SELECT u.naam FROM mld_v_uitvoerende u WHERE U.mld_uitvoerende_key = O.mld_uitvoerende_keys) uitv_naam"
+ " , o.mld_uitvoerende_keys uitv_key"
+ " , o.prs_perslid_key"
+ " , (SELECT pf.prs_perslid_naam_friendly FROM prs_v_perslid_fullnames_all pf "
+ " WHERE pf.prs_perslid_key = o.prs_perslid_key) behandelaar"
+ " , (SELECT " + S("prs_kpn_string")
+ " FROM prs_kostenplaats k"
+ " WHERE k.prs_kostenplaats_key = o.prs_kostenplaats_key) kpstring"
+ " , o.mld_opdr_key"
+ " , c.cnt_contract_key"
+ " , c.cnt_contract_nummer"
+ " , c.cnt_contract_nummer_intern"
+ " , c.cnt_contract_versie"
+ " , o.mld_opdr_datumbegin"
+ " , o.mld_opdr_plandatum"
+ " , " + lcl.xsqla('t.mld_typeopdr_omschrijving', 't.mld_typeopdr_key')
+ " , t.mld_typeopdr_decentraal"
+ " , t.mld_typeopdr_afmelden_extern"
+ " , sd.ins_srtdiscipline_prefix"
+ " , sd.ins_srtdiscipline_omschrijving"
+ " , " + lcl.xsqla('std.mld_stdmelding_omschrijving','std.mld_stdmelding_key')
+ " , " + S("prs_pers_string") + " melder"
+ " , SYSDATE nu"
+ " , o.mld_opdr_kosten"
+ (urole == 'mi'
? " , COALESCE((SELECT SUM(f.fin_factuur_totaal)"
+ " FROM fin_factuur f"
+ " WHERE f.mld_opdr_key = o.mld_opdr_key "
+ " AND f.fin_factuur_statuses_key <> 1"
+ " AND f.fin_factuur_verwijder IS NULL), 0) gefactureerd"
: "")
+ " , o.mld_opdr_uren"
+ " , o.mld_opdr_materiaal"
+ " , o.mld_opdr_uurloon"
+ " , o.mld_opdr_kosten - ((mld_opdr_uren * mld_opdr_uurloon) + mld_opdr_materiaal) correctie"
+ " , o.mld_opdr_opmerking"
+ " , (SELECT " + S("prs_pers_string")
+ " FROM prs_perslid p"
+ " WHERE p.prs_perslid_key = m.prs_perslid_key_voor) aanvrager"
+ " , COALESCE((SELECT 'B'"
+ " FROM prs_bedrijf"
+ " WHERE prs_bedrijf_key = o.mld_uitvoerende_keys)"
+ " , (SELECT 'P'"
+ " FROM prs_perslid"
+ " WHERE prs_perslid_key = o.mld_uitvoerende_keys)) B_OF_P"
+ " , " + uitv_type + " uitv_type"
+ " , CASE"
+ " WHEN COALESCE ( (SELECT 'B'"
+ " FROM prs_bedrijf"
+ " WHERE prs_bedrijf_key = o.mld_uitvoerende_keys)"
+ " , (SELECT 'P'"
+ " FROM prs_perslid"
+ " WHERE prs_perslid_key = o.mld_uitvoerende_keys)) = 'B'"
+ " THEN"
+ " CASE"
+ " WHEN (SELECT u.intern"
+ " FROM mld_v_uitvoerende u"
+ " WHERE u.mld_uitvoerende_key = o.mld_uitvoerende_keys) = 1"
+ " THEN"
+ " 1"
+ " ELSE"
+ " 3"
+ " END"
+ " ELSE"
+ " 2"
+ " END uitv_type_order"
+ " , m.mld_melding_spoed"
+ " , m.mld_melding_acceptdatum_std"
+ " , m.mld_melding_einddatum_std"
+ " , m.mld_melding_status"
+ " , m.mld_melding_einddatum"
+ " , std.mld_stdmelding_slabewaken"
+ " , m.mld_melding_indult"
+ " , m.mld_melding_parentkey"
+ " , (SELECT COUNT(o1.mld_opdr_key)"
+ " FROM mld_opdr o1"
+ " WHERE o1.mld_melding_key = m.mld_melding_key) nrOrders"
+ " , (SELECT COUNT(o2.mld_statusopdr_key)"
+ " FROM mld_opdr o2"
+ " WHERE o2.mld_melding_key = m.mld_melding_key"
+ " AND o2.mld_statusopdr_key NOT IN (1, 2, 6, 7, 9)) nrActief"
+ " , o.mld_opdr_omschrijving"
+ " , o.mld_statusopdr_key"
+ " , o.mld_opdr_verzonden"
+ " , t.mld_typeopdr_key" // Voor flexGroupId
+ " , " + lcl.xsqla('md.ins_discipline_omschrijving', 'md.ins_discipline_key')
+ " , pfiat.prs_perslid_naam_full fiatteur"
+ " , (SELECT COUNT (o.mld_opdr_key)"
+ " FROM mld_opdr o "
+ " WHERE o.mld_melding_key = mld_melding_key"
+ " AND o.fac_activiteit_key IS NOT NULL) opdr_action"
+ " , m.fac_activiteit_key mld_action"
+ " , t.mld_typeopdr_kosten"
+ " , t.mld_typeopdr_isofferte"
+ " , t.mld_typeopdr_matchtype"
+ " , t.mld_typeopdr_kosten_verplicht"
+ " , mdp.mld_disc_params_opdr_kosten"
+ sqltrack
+ " , m.mld_melding_t_respijt.tijdsduur tijdsduur"
+ " , m.mld_melding_t_respijt.eenheid eenheid"
+ " , std.mld_stdmelding_key"
+ " , (SELECT COUNT(f.fin_factuur_key)"
+ " FROM fin_factuur f"
+ " WHERE f.mld_opdr_key = o.mld_opdr_key"
+ " AND f.fin_factuur_verwijder IS NULL) aantal_facturen"
+ (!internuit || !externuit
? " , mu.intern"
: "")
+ (params.anyflex
? ", (SELECT LISTAGG(mld_srtkenmerk_omschrijving || ':'|| CHR(160) || "
+ " CASE"
+ " WHEN skm.mld_srtkenmerk_kenmerktype = 'R' OR skm.mld_srtkenmerk_kenmerktype = 'S'"
+ " THEN"
+ " flx.getdomeinwaarde (skm.fac_kenmerkdomein_key, km.mld_kenmerkopdr_waarde)"
+ " ELSE"
+ " km.mld_kenmerkopdr_waarde"
+ " END, CHR(13)) "
+ " WITHIN GROUP (ORDER BY mld_kenmerk_volgnummer) "
+ " FROM mld_srtkenmerk skm, mld_kenmerk k, mld_kenmerkopdr km"
+ " WHERE km.mld_opdr_key = o.mld_opdr_key"
+ " AND k.mld_kenmerk_key = km.mld_kenmerk_key"
+ " AND BITAND(skm.mld_srtkenmerk_systeem,2) = 2"
+ " AND skm.mld_srtkenmerk_key = k.mld_srtkenmerk_key) flex"
: "")
+ " FROM mld_opdr o"
+ " , cnt_v_aanwezigcontract c"
+ " , mld_stdmelding std"
+ " , mld_melding m"
+ (bld_key || bld_scope || verantw_key
? " , alg_v_allonrgoed_gegevens g"
: "")
+ " , alg_locatie l"
+ (verantw_key ? ", alg_gebouw gg" : "")
+ " , alg_district di"
+ " , mld_discipline md"
+ " , mld_disc_params mdp"
+ " , ins_srtdiscipline sd"
+ (add_prs_restrict
? " , prs_v_afdeling_boom b"
: "")
// and more here
+ " , mld_typeopdr t"
+ " , prs_v_perslid_fullnames_all pfiat"
+ " , prs_perslid p" // de melder
+ (!internuit || !externuit
? " , mld_v_uitvoerende mu"
: "")
+ " WHERE o.mld_melding_key = m.mld_melding_key" + (urole == 'bgt' ? '(+)' : '')
+ " AND pfiat.prs_perslid_key(+) = prs.getkpverantwoordelijke(o.prs_kostenplaats_key, " + S("prs_approvemethod") + ", -1)"
+ " AND m.mld_alg_locatie_key = l.alg_locatie_key(+)"
+ " AND l.alg_district_key = di.alg_district_key(+)"
+ " AND std.mld_ins_discipline_key = md.ins_discipline_key" + (urole == 'bgt' ? '(+)' : '')
+ " AND md.ins_discipline_key = mdp.mld_ins_discipline_key" + (urole == 'bgt' ? '(+)' : '')
+ " AND o.fac_activiteit_key IS NULL"
+ " AND o.cnt_contract_key = c.cnt_contract_key(+)"
+ " AND m.mld_stdmelding_key = std.mld_stdmelding_key" + (urole == 'bgt' ? '(+)' : '')
+ " AND m.prs_perslid_key = p.prs_perslid_key"+ (urole == 'bgt' ? '(+)' : '')
+ " AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key" + (urole == 'bgt' ? '(+)' : '')
+ " AND o.mld_typeopdr_key = t.mld_typeopdr_key";
if (add_prs_restrict)
sql += " AND p.prs_afdeling_key = b.prs_afdeling_key";
if (bld_key || bld_scope || verantw_key)
sql += " AND m.mld_alg_onroerendgoed_keys = g.alg_onroerendgoed_keys(+)";
if (urole == 'b2')
sql += " AND (o.mld_statusopdr_key NOT IN (3, 10) OR o.mld_statusopdr_key_refiat IS NOT NULL)"
if (frontend && mld_key)
sql += " AND t.mld_typeopdr_zichtbaarfe = 1";
if (mld_key)
{
sql += " AND o.mld_melding_key = " + mld_key;
}
else if (opdr_key)
{
sql += " AND o.mld_melding_key = " + opdr_key; // opdracht nummer is voor de gebruiker hetzelfde als mld_key
}
else if (intopdr_key)
{
sql += " AND o.mld_opdr_key = " + intopdr_key; // de echte opdrachtkey
}
else
{ //
if (offerte >= 0)
sql += " AND t.mld_typeopdr_isofferte = " + offerte;
// --------- De statussen ------
// Meldingstatus
if (mldstatus_arr && ((mldstatus_arr.length > 1) || (mldstatus_arr != -1)))
{
mldstatus_arr = mldstatus_arr.join(",");
}
else
{
mldstatus_arr = showstatus;
}
var sql_status = mld.getStatusSql(mldstatus_arr, "m");
if (sql_status)
sql += " AND" + sql_status;
// Opdrachtstatus
if (opdrstatus_arr && ((opdrstatus_arr.length > 1) || (opdrstatus_arr != -1)))
{
sql += " AND o.mld_statusopdr_key IN (" + opdrstatus_arr.join(",") + ")";
} else {
if (showopdrstatus != "")
sql += " AND o.mld_statusopdr_key IN (" + showopdrstatus + ")";
}
// Spoed
if (chkSpoed)
sql += " AND m.mld_melding_spoed < 3";
// Afgerond
if (chkAfgerond)
sql += " AND m.mld_melding_afgerond = 1";
// Actie/door
sql += mld.getwhereSrttracking(params);
sql += mld.getwherePrstracking(params);
//
// Overschrijding acceptatietijd
if (chkAcceptEx)
{
whereUs += " WHERE " + mld.getwhere_to_late_accept_sql("us") + " = 1";
}
// Overschijding doorlooptijd
if (chkRunEx)
{
var whereT = mld.getwhere_to_late_run_sql("us", "us", "O") + " = 1";
if (whereUs.length > 0)
whereUs += " AND " + whereT;
else
whereUs = " WHERE " + whereT;
}
if (S("mld_max_history") > 0 && (mldopdrstafm || mldopdrstver)) // was alleen als je in de history keek
sql += " AND (o.mld_opdr_datumbegin >= SYSDATE - " + S("mld_max_history") + ")";
// Hier wordt gezocht in de omschrijving, opmerking en de eventuele (tekst-)kenmerken
// Dit is een potentieel en onvermijdelijk dure zoekactie.
// Conform meldingen
if (searchtekst)
sql += " AND (UPPER(mld_opdr_omschrijving) LIKE " + safe.quoted_sql_wild("%" + searchtekst + "%")
+ " OR UPPER(mld_opdr_opmerking) LIKE " + safe.quoted_sql_wild("%" + searchtekst + "%")
+ " OR UPPER(mld_opdr_id) LIKE " + safe.quoted_sql_wild("%" + searchtekst + "%")
+ " OR EXISTS (SELECT mld_opdr_key"
+ " FROM mld_kenmerkopdr ko"
+ " WHERE ko.mld_opdr_key = o.mld_opdr_key"
+ " AND ko.mld_kenmerkopdr_verwijder IS NULL"
+ " AND UPPER(ko.mld_kenmerkopdr_waarde) LIKE " + safe.quoted_sql_wild("%" + searchtekst + "%") + "))";
if (bld_key)
sql += " AND (g.alg_gebouw_key = " + bld_key + " OR g.alg_terreinsector_key = " + bld_key + ")";
else if (loc_key)
sql += " AND m.mld_alg_locatie_key = " + loc_key;
else if (dist_key)
sql += " AND di.alg_district_key = " + dist_key;
else if (reg_key)
sql += " AND di.alg_regio_key = " + reg_key;
if (adr_key)
{ // opdrachten van een bepaald afleveradres
sql += " AND m.mld_adres_key = " + adr_key;
}
if (ks_key)
sql += " AND o.prs_kostensoort_key = " + ks_key; // nog ff geen array dus
if (kp)
sql += " AND o.prs_kostenplaats_key IN"
+ " (SELECT k.prs_kostenplaats_key"
+ " FROM prs_kostenplaats k"
+ " WHERE (UPPER(k.prs_kostenplaats_omschrijving) LIKE " + safe.quoted_sql_wild(kp+"%")
+ " OR UPPER(k.prs_kostenplaats_nr) LIKE " + safe.quoted_sql_wild(kp+"%") + "))";
if (org_key)
sql += " AND p.prs_afdeling_key IN"
+ " (SELECT a.prs_afdeling_key"
+ " FROM prs_v_afdeling_familie a"
+ " WHERE a.prs_afdeling_elder_key = " + org_key + ")";
if (verantw_key)
sql += " AND g.alg_gebouw_key = gg.alg_gebouw_key(+)"
+ " AND (gg.prs_perslid_key_verantw = " + verantw_key
+ " OR gg.prs_perslid_key_verantw2 = " + verantw_key + ")";
if (caller_key)
sql += " AND m.prs_perslid_key = " + caller_key;
if (behandel_key)
sql += " AND o.prs_perslid_key = " + behandel_key;
if (beh_key_arr)
//sql += " AND (o.prs_perslid_key IN (" + beh_key_arr.join(",") + ") OR o.prs_perslid_key IS NULL)";
// Niet toegewezen (prs_perslid_key IS NULL) opdrachten van het opdrachttype Bedrijf Intern (BI) moeten ook getoond worden.
sql += " AND (o.prs_perslid_key IN (" + beh_key_arr.join(",") + ") OR (o.prs_perslid_key IS NULL AND (" + uitv_type + ") = 'BI'))";
if (opdrtype_key)
sql += " AND o.mld_typeopdr_key = " + opdrtype_key;
// Soort melding, productgroep, melding (stdmelding), meldinggroep
if (stdm_key_arr || meldinggrp_key)
{
if (stdm_key_arr)
sql += " AND m.mld_stdmelding_key IN (" + stdm_key_arr.join(",") + ")";
if (meldinggrp_key)
sql += " AND std.mld_stdmeldinggroep_key IN (" + meldinggrp_key + ")";
}
else if (disc_key_arr)
sql += " AND std.mld_ins_discipline_key IN (" + disc_key_arr.join(",") + ")" ;
else if (srtdisc_key)
sql += " AND sd.ins_srtdiscipline_key IN (" + srtdisc_key + ") ";
// Behandelgroep
if (behandelgrp_key)
sql += " AND mdp.mld_behandelgroep_key = " + behandelgrp_key;
if (cnt_key)
sql += " AND o.cnt_contract_key IN (" + cnt_key + ")";
if (urole == 'b2') // decentraal
sql += " AND t.mld_typeopdr_decentraal <> 0";
if (bes)
sql += " AND sd.ins_srtdiscipline_bes = 1";
if (datefrom)
{
if (planb)
sql += " AND COALESCE(o.mld_opdr_plandatum, o.mld_opdr_einddatum) >= " + datefrom.beginToSQL();
else
sql += " AND o.mld_opdr_datumbegin >= " + datefrom.beginToSQL();
}
if (dateto)
{
if (planb)
sql += " AND COALESCE(o.mld_opdr_plandatum, o.mld_opdr_einddatum) < " + dateto.endToSQL();
else
sql += " AND o.mld_opdr_datumbegin < " + dateto.endToSQL();
}
if (offerte >= 0)
sql += " AND t.mld_typeopdr_isofferte = " + offerte;
}
// Als ik uitvoerder ben dan mag ik de aan mij toegekende opdrachten zien.
if (uitvoerder)
{ // Ben ik misschien nog plaatsvervanger
var prsKeys = user.collegakeylist();
sql += " AND o.mld_uitvoerende_keys IN (" + prsKeys + ")";
}
// Setting mld_typeopdr_afmelden_extern: Afmelder (ORDBO2) mag externe opdrachten (0=Niet zien, 1=Zien, 2=Afmelden)
// Als ik een interne (decentraal/intern) uitvoerder ben mag ik de externe opdrachten niet zien als mld_typeopdr_afmelden_extern==0.
// De voorwaarde geldt niet als
// 1) de opdracht toegekend is aan een persoon. Eigen opdrachten mag ik altijd zien.
// 2) de opdracht toegekend is aan het eigen bedrijf. Opdrachten van het eigen bedrijf mag ik altijd zien.
// 3) ik de contactpersoon ben van het uitvoerende externe bedrijf. Opdrachten van eigen bedrijf mag ik altijd zien.
// Let op!!! Deze voorwaarde geldt dus alleen voor de WEB_ORDBO2 rechten.
var exhandler = mld.iamContact(); // Later nodig voor bepaling eClose.
if (exhandler) // Dan mag ik *echt* alleen opdrachten toegekend aan mijn bedrijf zien
{ // De andere helft van deze if is dan niet genoeg en bovendien *extreem* traag (FSN#29867)
var sql_extern = " AND EXISTS (SELECT 'X' " // Ben ik contactpersoon van het uitvoerende externe bedrijf
+ " FROM prs_contactpersoon"
+ " WHERE prs_perslid_key = " + user_key
+ " AND prs_contactpersoon_verwijder IS NULL"
+ " AND prs_bedrijf_key = o.mld_uitvoerende_keys)";
}
else
{
var sql_extern = " AND (mld_typeopdr_afmelden_extern IN (1, 2)"
+ " OR EXISTS (SELECT 'X'" // Toegekend aan een persoon
+ " FROM prs_perslid"
+ " WHERE prs_perslid_key = o.mld_uitvoerende_keys)"
+ " OR EXISTS (SELECT 'X'" // Toegekend aan het EIGEN interne bedrijf
+ " FROM prs_bedrijf b"
+ " , prs_perslid p"
+ " , prs_v_afdeling a"
+ " WHERE b.prs_bedrijf_key = a.prs_bedrijf_key"
+ " AND p.prs_afdeling_key = a.prs_afdeling_key"
+ " AND b.prs_bedrijf_intern = 1"
+ " AND b.prs_bedrijf_key = o.mld_uitvoerende_keys"
+ " AND p.prs_perslid_key = " + user_key + ")"
+ " OR EXISTS (SELECT 'X'" // Ben ik contactpersoon van het uitvoerende externe bedrijf
+ " FROM prs_contactpersoon"
+ " WHERE prs_perslid_key = " + user_key
+ " AND prs_contactpersoon_verwijder IS NULL"
+ " AND prs_bedrijf_key = o.mld_uitvoerende_keys)"
+ " )";
}
// Hier zijn nu alle meegegeven condities verwerkt, dat is:
// Ofwel het nummer, ofwel de andere criteria.
// We weten echter ook dat uitvoerende kan worden gehanteerd als een soort autorisatie
// dus moeten we die ook checken, zelfs als er een nummer werd opgegeven.
// De 3D autorisatie komt daar nog eens overheen.
if (handler_key)
sql = sql + " AND o.mld_uitvoerende_keys = " + handler_key;
if (!internuit || !externuit)
{
sql += " AND o.mld_uitvoerende_keys = mu.mld_uitvoerende_key"
+ " AND mu.intern = " + (internuit? "1" : "0");
}
// Als er multicompany-achtige relatiebeperkingen gelden, dan moet dat ook hier worden afgedwongen
var lsql = "SELECT '' FROM prs_bedrijf_bedrijf pbb "
+ " WHERE prs_bedrijf_key1 = " + user.afdeling().prs_bedrijf_key()
+ " OR prs_bedrijf_key2 = "+ user.afdeling().prs_bedrijf_key();
var loRs = Oracle.Execute(lsql);
if (!loRs.eof)
{
sql += " AND o.mld_uitvoerende_keys IN (SELECT prs_bedrijf_key2 FROM prs_bedrijf_bedrijf WHERE prs_bedrijf_key1 = "+ user.afdeling().prs_bedrijf_key()
+ " UNION SELECT prs_bedrijf_key1 FROM prs_bedrijf_bedrijf WHERE prs_bedrijf_key2 = "+ user.afdeling().prs_bedrijf_key() + ")";
}
sql += getKenmerkSql("OPD", "o.mld_opdr_key");
var sqlA = sql;
if (from_mld)
{ // Dan moeten we het opdracht overzicht tonen voor het meldingen backoffice overzicht "Afhandelen Meldingen".
// Dan wil ik alleen die opdrachten zien van de meldingen waar ik rechten voor heb. Dan moet ik WEB_MLDBOF rechten hebben voor de meldingen
// apply 3D authorization to the locations and to the organisations (both ALG and PRS)
sqlA = discx3d (sql,
"md.ins_discipline_key",
"di.alg_regio_key",
"l.alg_district_key",
"l.alg_locatie_key",
"g.alg_gebouw_key",
"g.alg_verdieping_key",
"g.alg_ruimte_key",
"b.prs_bedrijf_key",
"b.prs_afdeling_key",
"WEB_MLDBOF",
(!mld_key && disc_key_arr ? disc_key_arr.join(",") : ""),
2);
}
// Indien sqlA uit meerdere delen (UNION ALL) bestaat dan al deze delen combineren met de pautfunction rechten.
sqlA = sqlA.split("UNION ALL");
if (typeof pautfunction != "object" || !(pautfunction instanceof Array))
// Maak van de String een Array
pautfunction = [pautfunction];
var sqlAB = "";
if (urole != 'bgt')
{
for (var jj = 0; jj < sqlA.length; jj++)
{
// pautfunction is nu altijd een Array met webfuncties
for (var ii = 0; ii < pautfunction.length; ii++)
{
// Voorwaarde sql_extern t.b.v. setting mld_typeopdr_afmelden_extern alleen toevoegen voor WEB_ORDBO2 rechten.
var sql3d = sqlA[jj] + (pautfunction[ii] == "WEB_ORDBO2"? sql_extern : "");
// apply 3D authorization to the locations and to the organisations (both ALG and PRS)
// if "disc == 0" or disc is not defined then disc should be ""
// otherwise de 3d authorization adds a "AND (1=0)" line to the query and you will have never a result
sqlB = (ii > 0? sqlB + " UNION " : "") + discx3d (sql3d,
"md.ins_discipline_key",
"di.alg_regio_key",
"l.alg_district_key",
"l.alg_locatie_key",
"g.alg_gebouw_key",
"g.alg_verdieping_key",
"g.alg_ruimte_key",
"b.prs_bedrijf_key",
"b.prs_afdeling_key",
pautfunction[ii],
(!(mld_key || opdr_key) && disc_key_arr ? disc_key_arr.join(",") : ""),
(add_prs_restrict ? 2 : 0)
);
}
sqlAB = sqlAB + (jj > 0? " UNION " : "") + sqlB;
}
if (pautfunction.length > 1)
{ // We hebben dan rechten van meerdere autorisatie functies. Daardoor kan door discx3d() " UNION ALL " gebruikt worden om verschillende SELECT aan elkaar te plakken.
// In dat geval krijgen we dan dubbele resultataten.
// We moeten daarom deze UNION ALL's vervangen door UNION's.
sqlAB = sqlAB.replace(/UNION ALL/g, "UNION");
}
// Voeg laatste tracking datum toe
sql = "SELECT * FROM (" + sqlAB + ") us"
+ whereUs
+ " ORDER BY" // ins_discipline_omschrijving is hier al vertaald
+ (planb? " uitv_type_order, uitv_naam, prs_perslid_key NULLS FIRST," : "")
+ (excel? " UPPER(ins_discipline_omschrijving), mld_typeopdr_key," : "") // Flexkenmerken verschillen per opdrachttype (mld_typeopdr_key)
+ " mld_opdr_einddatum, mld_opdr_bedrijfopdr_volgnr";
}
return sql;
}
}
%>