2765 lines
174 KiB
C++
2765 lines
174 KiB
C++
<% /*
|
||
$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);
|
||
},
|
||
|
||
trackbehandelaar:
|
||
function (mld_key, behandelaar_key)
|
||
{
|
||
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("MLDBEH", mld_key, behandelaar_str);
|
||
},
|
||
|
||
trackmeldingupdate:
|
||
// Let op: dit moet wellicht niet altijd (aangeroepen na save)
|
||
function (mld_key, ptxt)
|
||
{
|
||
if (ptxt)
|
||
shared.trackaction("MLDUPD", mld_key, ptxt);
|
||
else
|
||
shared.trackaction("MLDUPD", mld_key);
|
||
},
|
||
|
||
trackaddnote:
|
||
// Let op: dit moet wellicht niet altijd (aangeroepen na save)
|
||
function (mld_key, ptxt)
|
||
{
|
||
if (ptxt)
|
||
shared.trackaction("MLDNOT", mld_key, ptxt);
|
||
else
|
||
shared.trackaction("MLDNOT", mld_key);
|
||
},
|
||
|
||
trackuitvoerende:
|
||
function (opdr_key, uitvoerende)
|
||
{
|
||
// Is uitvoerende intern of extern?
|
||
sql = "SELECT u.type"
|
||
+ " FROM mld_v_uitvoerende u"
|
||
+ " WHERE u.mld_uitvoerende_key = " + uitvoerende
|
||
var oRs = Oracle.Execute(sql);
|
||
var intern = (oRs("type").value == "P"); // type "P" (persoon) is intern en type "B" (bedrijf) is extern
|
||
oRs.close();
|
||
|
||
shared.trackaction((intern? "ORDMLI" : "ORDMLE"), opdr_key);
|
||
},
|
||
|
||
trackopdrachtupdate:
|
||
function (opd_key, ptxt)
|
||
{
|
||
if (ptxt)
|
||
shared.trackaction("ORDUPD", opd_key, ptxt);
|
||
else
|
||
shared.trackaction("ORDUPD", opd_key);
|
||
},
|
||
|
||
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) + ")";
|
||
},
|
||
|
||
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;
|
||
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;
|
||
|
||
<<<<<<< .mine if (nrOpen == 0)
|
||
======= if (nrOpen == 0)
|
||
>>>>>>> .theirs { // 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;
|
||
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;
|
||
|
||
// 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;
|
||
// 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;
|
||
},
|
||
|
||
// berkeken de SLA-einddatum gegeven onderstaande info
|
||
geteinddatum:
|
||
function (startdate, stdm_key, prio, geb_key)
|
||
{
|
||
if (geb_key < 0)
|
||
geb_key = 'NULL';
|
||
var sql = "SELECT mld.geteinddatum(" + startdate.toSQL(true) + ", " + stdm_key + ", " + prio + "," + geb_key + ")"
|
||
+ " FROM DUAL";
|
||
var oRs = Oracle.Execute(sql);
|
||
var einddatum = new Date(oRs(0).Value)
|
||
oRs.Close();
|
||
return einddatum;
|
||
},
|
||
|
||
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 ";
|
||
|
||
var subfolder = "MLD/" + subfolderKey("M", mld_key)
|
||
RenameFlexFolders(subfolder, flexsql);
|
||
}
|
||
},
|
||
|
||
getStatusSql:
|
||
function(mldstatus_str)
|
||
{
|
||
var sql="";
|
||
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.
|
||
// Openstaande opdrachten en offertes hebben de status 10, 3, 4, 5 of 6
|
||
// Openstaande offertes hebben de status 10, 3, 4, 5 of 6 als
|
||
// 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 = m.mld_melding_key)"
|
||
+ " WHEN 0"
|
||
+ " THEN -1"
|
||
+ " ELSE (SELECT COUNT (o.mld_statusopdr_key)"
|
||
+ " FROM mld_opdr o"
|
||
+ " WHERE mld_melding_key = m.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 = m.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 = m.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 = m.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 = m.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 = m.mld_melding_key"
|
||
+ " AND o.mld_opdr_key = (SELECT MAX(o1.mld_opdr_key)"
|
||
+ " FROM mld_opdr o1"
|
||
+ " WHERE o1.mld_melding_key = m.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 = " AND m.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 = " AND (m.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 (m.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 = " AND (" + sql_opdr_be_open + " = 0 AND (" + sql_offertes_afgerond + " != 0 OR " + sql_offertes_toaccept + " = 0 OR " + sql_last_is_offertes + " = 0))"
|
||
+ " AND (m.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 = " AND (m.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 (m.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 = " AND ((" + sql_opdr_be_open + " = -1 OR (" + sql_offertes_afgerond + " = 0 AND " + sql_offertes_toaccept + " > 0 AND " + sql_last_is_offertes + " = 1))"
|
||
+ " AND (m.mld_melding_status = 4))";
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return sql;
|
||
},
|
||
|
||
getfromwherelist_sql:
|
||
function(pautfunction, params)
|
||
{
|
||
var mld_key = params.mld_key;
|
||
var opdr_key = params.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 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 datefrom = params.datefrom;
|
||
var dateto = params.dateto;
|
||
var groepering_key = params.groepering_key;
|
||
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 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"
|
||
+ ", prs_perslid p"
|
||
+ ", mld_stdmelding std"
|
||
+ ((add_prs_restrict)? ", prs_v_afdeling_boom b" : "")
|
||
+ (perform && srtdisc_key
|
||
? ", ins_srtdiscipline sd"
|
||
: "")
|
||
+ (!perform
|
||
? ", ins_srtdiscipline sd"
|
||
+ ", ( SELECT -1 mld_melding_key," // Even tooltip effectief *uitgeschakeld*. Impact mogelijk veel te hoog.
|
||
+" 'X' naam,"
|
||
+" 1 nrnaam"
|
||
+" FROM DUAL) oo"
|
||
: "")
|
||
+ ((handler_key || opdrtype_key || contact_key || opdr_key || opdrstatus_arr || 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"
|
||
: "");
|
||
|
||
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"
|
||
+ (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"
|
||
+ " AND oo.mld_melding_key(+) = m.mld_melding_key"
|
||
: "")
|
||
+ ((handler_key || opdrtype_key || contact_key || opdr_key || opdrstatus_arr || 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)"
|
||
: "");
|
||
|
||
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 (opdr_key)
|
||
{ // Selectie op nummer negeert alle andere filters
|
||
sqln += " AND o.mld_melding_key = " + opdr_key; // seems odd, but is right -PF
|
||
}
|
||
|
||
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;
|
||
|
||
sqln += mld.getStatusSql(mldstatus_arr);
|
||
|
||
if (opdrstatus_arr)
|
||
{
|
||
sqln += " AND o.mld_statusopdr_key IN (" + opdrstatus_arr.join(",") + ")";
|
||
}
|
||
if (params.flags && params.flags.length > 0 && params.flags.length < S('mld_melding_flags'))
|
||
{
|
||
sqln += " AND m.mld_melding_flag IN (" + params.flags.join(",") + ")";
|
||
}
|
||
|
||
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_opmerking) LIKE " + safe.quoted_sql_wild("%" + searchtekst + "%")
|
||
+ " 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 (caller_key)
|
||
sqln += " AND m.prs_perslid_key = " + caller_key;
|
||
|
||
if (behandel_key)
|
||
sqln += " AND m.mld_melding_behandelaar_key = " + behandel_key;
|
||
|
||
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 (handler_key)
|
||
sqln += " AND o.mld_uitvoerende_keys = " + handler_key;
|
||
|
||
if (contact_key)
|
||
sqln += " AND o.prs_perslid_key = " + contact_key;
|
||
|
||
if (meldbron_key)
|
||
sqln += " AND m.mld_meldbron_key = " + meldbron_key;
|
||
|
||
if (opdrtype_key)
|
||
sqln += " AND o.mld_typeopdr_key = " + opdrtype_key;
|
||
|
||
if (kp)
|
||
sqln += (toon_opdr_overz
|
||
? " AND o.prs_kostenplaats_key IN"
|
||
: " AND m.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)
|
||
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.
|
||
sql_to_late_accept = " CASE SIGN (mld_melding_acceptdatum_std - COALESCE(fac.gettrackingdate ('MLDACP', m.mld_melding_key)," // Geaccepteerde meldingen
|
||
+ " fac.gettrackingdate ('MLDREJ', m.mld_melding_key)," // Direct afgewezen meldingen
|
||
+ " fac.gettrackingdate ('MLDAFM', m.mld_melding_key)," // Direct afgemelde meldingen
|
||
+ " SYSDATE))"
|
||
+ " WHEN -1"
|
||
+ " THEN 1"
|
||
+ " ELSE 0"
|
||
+ " END";
|
||
|
||
sql_to_late_run = " CASE"
|
||
+ " WHEN fac.gettrackingdate('MLDAFM', m.mld_melding_key) IS NULL"
|
||
+ " THEN CASE"
|
||
+ " WHEN fac.gettrackingdate('MLDREJ', m.mld_melding_key) IS NULL"
|
||
+ " THEN CASE SIGN(mld_melding_einddatum_std - SYSDATE)"
|
||
+ " WHEN -1"
|
||
+ " THEN 1"
|
||
+ " ELSE 0"
|
||
+ " END"
|
||
+ " ELSE 0"
|
||
+ " END"
|
||
+ " ELSE CASE SIGN(mld_melding_einddatum_std - fac.gettrackingdate('MLDAFM', m.mld_melding_key))"
|
||
+ " WHEN -1"
|
||
+ " THEN 1"
|
||
+ " ELSE 0"
|
||
+ " END"
|
||
+ " END";
|
||
|
||
if (chkAcceptEx)
|
||
{
|
||
sqln += " AND " + sql_to_late_accept + " = 1";
|
||
}
|
||
|
||
if (chkRunEx)
|
||
{
|
||
sqln += " AND " + sql_to_late_run + " = 1";
|
||
}
|
||
|
||
if (chkSpoed)
|
||
{
|
||
sqln += " AND m.mld_melding_spoed < 3";
|
||
}
|
||
|
||
if (datefrom && dateto)
|
||
{
|
||
var ora_date1 = datefrom.beginToSQL();
|
||
var ora_date2 = dateto.endToSQL();
|
||
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)
|
||
{
|
||
prsKeys = "" + user_key;
|
||
if (S("prs_collegas_used") == 1)
|
||
{
|
||
// String met collega keys voor de tijd bepalen want sql string duurde te lang.
|
||
sql_collegas = " SELECT prs_perslid_key"
|
||
+ " FROM prs_collega"
|
||
+ " WHERE prs_perslid_key_alt = " + user_key;
|
||
oRs = Oracle.Execute(sql_collegas);
|
||
while (!oRs.eof)
|
||
{
|
||
prsKeys += "," + oRs(0).value;
|
||
oRs.MoveNext();
|
||
}
|
||
}
|
||
sqln += " AND m.prs_perslid_key IN (" + prsKeys + ")"
|
||
}
|
||
|
||
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;
|
||
if (xmlnode == "melding")
|
||
{
|
||
sqln += "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"
|
||
+ (params.prs_tracking > 0?" AND ft.prs_perslid_key = " + params.prs_tracking:"")
|
||
+ " )";
|
||
}
|
||
else if (xmlnode == "opdracht")
|
||
{
|
||
sqln += "AND EXISTS"
|
||
+ " (SELECT 1"
|
||
+ " FROM fac_tracking ft, mld_opdr o"
|
||
+ " WHERE ft.fac_srtnotificatie_key = " + fac_srtnotificatie_key
|
||
+ " AND ft.fac_tracking_refkey = o.mld_opdr_key"
|
||
+ (params.prs_tracking > 0?" AND ft.prs_perslid_key = " + params.prs_tracking:"")
|
||
+ " AND o.mld_melding_key = m.mld_melding_key" + ")";
|
||
}
|
||
}
|
||
if (params.prs_tracking > 0 && params.srt_tracking == "-1")
|
||
{
|
||
|
||
sqln += "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" + "))";
|
||
}
|
||
|
||
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
|
||
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 builder = "";
|
||
var sql = "SELECT k.mld_kenmerk_key"
|
||
+", "+lcl.xsqla('t.mld_srtkenmerk_omschrijving', 't.mld_srtkenmerk_key')
|
||
+ ", t.mld_srtkenmerk_kenmerktype"
|
||
+ ", t.mld_srtkenmerk_nmin nmin"
|
||
+ ", t.mld_srtkenmerk_nmax nmax"
|
||
+ ", r.fac_kenmerkdomein_objectnaam"
|
||
+ ", r.fac_kenmerkdomein_kolomnaam"
|
||
+ ", r.fac_kenmerkdomein_kolomtxt"
|
||
+ ", r.fac_usrtab_key"
|
||
+ ", k.mld_kenmerk_volgnummer"
|
||
+", "+lcl.xsqla('t.mld_srtkenmerk_dimensie', 't.mld_srtkenmerk_key')
|
||
+ ", v.mld_kenmerkmelding_waarde"
|
||
+ " FROM mld_srtkenmerk t"
|
||
+ ", mld_kenmerk k"
|
||
+ ", mld_kenmerkmelding v"
|
||
+ ", fac_kenmerkdomein r"
|
||
+ " WHERE v.mld_kenmerk_key = k.mld_kenmerk_key"
|
||
+ " AND k.mld_srtkenmerk_key = t.mld_srtkenmerk_key"
|
||
+ " AND t.fac_kenmerkdomein_key = r.fac_kenmerkdomein_key(+)"
|
||
+ " AND k.mld_kenmerk_verwijder IS NULL"
|
||
+ " AND t.mld_srtkenmerk_verwijder IS NULL"
|
||
+ " AND v.mld_melding_key = " + melding_key
|
||
+ " ORDER BY k.mld_kenmerk_volgnummer"
|
||
+ ", UPPER("+lcl.xsql('t.mld_srtkenmerk_omschrijving', 't.mld_srtkenmerk_key')+")";
|
||
var oRs = Oracle.Execute(sql);
|
||
while (!oRs.Eof)
|
||
{
|
||
var val = oRs("mld_kenmerkmelding_waarde").value;
|
||
if (val != null && val != '' && val != -1)
|
||
{
|
||
var ktype = oRs("mld_srtkenmerk_kenmerktype").value;
|
||
var val = val.toString();
|
||
if (ktype == "N" && oRs("nmin").value == 0 && oRs("nmax").value == 1)
|
||
{
|
||
if (val == 0)
|
||
val = L("lcl_check_0");
|
||
else if (val == 1)
|
||
val = L("lcl_check_1");
|
||
}
|
||
else if (ktype == "R" || ktype == "S")
|
||
{
|
||
var FAC_USRTAB_KEY = oRs("fac_usrtab_key").value;
|
||
var where = '';
|
||
if (oRs("fac_kenmerkdomein_objectnaam").value == "FAC_USRDATA" && FAC_USRTAB_KEY)
|
||
{
|
||
where = "fac_usrtab_key = " + FAC_USRTAB_KEY + " AND fac_usrdata_verwijder IS NULL";
|
||
}
|
||
where = (where? where + ' AND ' : '') + oRs("fac_kenmerkdomein_kolomnaam").value + " = " + val;
|
||
sql = "SELECT " + oRs("fac_kenmerkdomein_kolomtxt").value
|
||
+ " FROM " + oRs("fac_kenmerkdomein_objectnaam").value
|
||
+ " WHERE " + where
|
||
oRs2 = Oracle.Execute(sql);
|
||
val = '';
|
||
if (!oRs2.eof)
|
||
{
|
||
val = '' + oRs2(0).value;
|
||
}
|
||
oRs2.close();
|
||
}
|
||
builder += "\n" + oRs("mld_srtkenmerk_omschrijving") + ": " + val;
|
||
}
|
||
oRs.MoveNext();
|
||
}
|
||
oRs.Close();
|
||
return builder;
|
||
},
|
||
|
||
// 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)
|
||
{
|
||
switch(ptype)
|
||
{
|
||
case "R":
|
||
var sql = "SELECT res_reservering_key, res_rsv_ruimte_volgnr"
|
||
+ " FROM res_rsv_ruimte"
|
||
+ " WHERE res_rsv_ruimte_key = " + pkey;
|
||
var oRs = Oracle.Execute(sql);
|
||
var rnum = oRs("res_reservering_key").Value + "/" + oRs("res_rsv_ruimte_volgnr").Value;
|
||
var params = { infoPointer: { Url: "appl/res/res_reservering.asp?urole="+urole+"&rsv_ruimte_key=" + pkey }};
|
||
ROFIELDTR("fld", plabel, L("lcl_reservation") + " " + rnum, params);
|
||
break;
|
||
case "M":
|
||
var params = { infoPointer: { Url: "appl/mld/mld_melding.asp?urole="+urole+"&mld_key=" + pkey}};
|
||
ROFIELDTR("fld", plabel, L("lcl_complain") + " " + mld.mld_prefix(pkey) + pkey, params);
|
||
break;
|
||
case "B":
|
||
var params = { infoPointer: { Url: "appl/bes/bes_bestelling.asp?urole="+urole+"&bes_key=" + pkey}};
|
||
ROFIELDTR("fld", plabel, L("lcl_bes_bestelling") + " " + S("bes_bestelling_prefix") + pkey, params);
|
||
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);
|
||
var rnum = oRs("mld_melding_key").Value + "/" + oRs("mld_opdr_bedrijfopdr_volgnr").Value;
|
||
var params = { infoPointer: { Url: "appl/mld/mld_opdr.asp?urole="+urole+"&opdr_key=" + pkey}};
|
||
ROFIELDTR("fld", plabel, L("lcl_shared_order") + " " + rnum, params);
|
||
break;
|
||
case "C":
|
||
var params = { infoPointer: { Url: "appl/cnt/cnt_contract.asp?urole="+urole+"&cnt_key=" + pkey}};
|
||
ROFIELDTR("fld", plabel, L("lcl_contract") + " " + pkey, params);
|
||
break;
|
||
case "F":
|
||
var sql = "SELECT fin_factuur_nr"
|
||
+ " FROM fin_factuur"
|
||
+ " WHERE fin_factuur_key = " + pkey;
|
||
var oRs = Oracle.Execute(sql);
|
||
var rnum = oRs("fin_factuur_nr").Value;
|
||
var params = { infoPointer: { Url: "appl/fin/fin_factuur.asp?urole="+urole+"&fin_key=" + pkey}};
|
||
ROFIELDTR("fld", plabel, L("lcl_fin_invoice") + " " + rnum, params);
|
||
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_datum"
|
||
+ ", s.mld_ins_discipline_key"
|
||
+ ", m.mld_stdmelding_key"
|
||
+ ", mld_alg_onroerendgoed_keys"
|
||
+ ", m.mld_melding_uitvoertijd"
|
||
+ ", s.mld_stdmelding_uitvoertijd"
|
||
+ ", m.mld_melding_einddatum"
|
||
+ ", 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_alg_onroerendgoed_keys"
|
||
+ ", m.mld_melding_status"
|
||
+ ", m.mld_melding_respijt"
|
||
+ ", m.mld_meldbron_key" // nr vergeten we nog even
|
||
+ ", 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"
|
||
+ ", 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"
|
||
+ ", (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"
|
||
+ ", m.mld_melding_kto_type"
|
||
+ ", m.mld_melding_kto_key"
|
||
+ ", m.mld_melding_kto" // kto over mijzelf?
|
||
+ ", m.mld_melding_kto_verstuurd"
|
||
+ ", s.mld_stdmelding_kto" // misschien kto over mijzelf?
|
||
+ ", (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"
|
||
+ ", m.mld_melding_flag"
|
||
+ ", 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"
|
||
+ " 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(+)";
|
||
oRs = Oracle.Execute(sql);
|
||
|
||
var result = { mld_key: mld_key,
|
||
mld_omschr: oRs("mld_melding_omschrijving").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("mld_melding_uitvoertijd").value,
|
||
einddatum: new Date(oRs("mld_melding_einddatum").value),
|
||
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("mld_melding_respijt").value,
|
||
meldbron_key: oRs("mld_meldbron_key").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,
|
||
show_alg: oRs("ins_srtdiscipline_alg").value == 1,
|
||
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,
|
||
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,
|
||
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,
|
||
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,
|
||
kto_opt: oRs("mld_stdmelding_kto").value || 0,
|
||
aantal_objects: oRs("aantal_objects").value,
|
||
haschild: oRs("aantal_childs").value > 0,
|
||
flag: oRs("mld_melding_flag").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
|
||
};
|
||
|
||
// Als de melding kinderen heeft, haal ze dan op
|
||
if (result.haschild)
|
||
{
|
||
function ChildItem(key, nr)
|
||
{
|
||
this.key = key;
|
||
this.nr = nr;
|
||
}
|
||
|
||
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;
|
||
oRsC = Oracle.Execute(sql);
|
||
result.childs = new Array();
|
||
while (!oRsC.eof)
|
||
{
|
||
result.childs[result.childs.length] = new ChildItem(oRsC("mld_melding_key").value, oRsC("ins_srtdiscipline_prefix").value + oRsC("mld_melding_key").value) ;
|
||
oRsC.MoveNext();
|
||
}
|
||
}
|
||
|
||
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_materiaal"
|
||
+ ", o.mld_opdr_kosten"
|
||
+ ", o.mld_uitvoerende_keys"
|
||
+ ", c.cnt_contract_nummer_intern"
|
||
+ ", c.cnt_contract_omschrijving"
|
||
+ ", o.cnt_contract_key"
|
||
+ ", COALESCE(o.mld_opdr_uurloon, 0) mld_opdr_uurloon"
|
||
+ ", o.mld_typeopdr_key"
|
||
+ ", " + lcl.xsqla('mto.mld_typeopdr_omschrijving', 'mto.mld_typeopdr_key')
|
||
+ ", mto.mld_typeopdr_matchtype"
|
||
+ ", 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"
|
||
+ ", o.prs_perslid_key mld_opdr_contact_key" // key van de interne contactpersoon
|
||
+ ", o.prs_contactpersoon_key"
|
||
+ ", o.mld_statusopdr_key"
|
||
+ ", 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"
|
||
+ ", 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"
|
||
+ ", 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"
|
||
+ ", mdp.mld_disc_params_offerteauto"
|
||
+ ", (SELECT COALESCE(sum(mld_opdr_uren_besteed),0)"
|
||
+ " FROM mld_opdr_uren"
|
||
+ " WHERE mld_opdr_key = o.mld_opdr_key) mld_opdr_uren_besteed"
|
||
+ " 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;
|
||
oRs = Oracle.Execute(sql);
|
||
|
||
|
||
// Numeric values are used (only) here to calculate corr_cost.
|
||
var hours = (oRs("mld_opdr_uren").value || 0);
|
||
var m_cost = parseFloat((oRs("mld_opdr_materiaal").value || 0).toFixed(2));
|
||
var t_cost = parseFloat((oRs("mld_opdr_kosten").value || 0).toFixed(2));
|
||
var h_rate = parseFloat((oRs("mld_opdr_uurloon").value || 0).toFixed(2));
|
||
var corr_cost = (t_cost - m_cost - parseFloat((h_rate * hours).toFixed(2)));
|
||
|
||
var result = { 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,
|
||
m_cost: m_cost,
|
||
t_cost: t_cost,
|
||
uitvoerende_key: oRs("mld_uitvoerende_keys").value,
|
||
contract_naam: oRs("cnt_contract_key").value
|
||
? oRs("cnt_contract_nummer_intern").value + " " + oRs("cnt_contract_omschrijving").value
|
||
: "",
|
||
contract_key: oRs("cnt_contract_key").value || -1,
|
||
h_rate: h_rate,
|
||
opdr_type: oRs("mld_typeopdr_key").value,
|
||
opdr_type_omschr: oRs("mld_typeopdr_omschrijving").value,
|
||
typeopdr_matchtype: oRs("mld_typeopdr_matchtype").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 opdrachten een contract moet (3), kan (2) of niet kan (0) worden opgegeven
|
||
contactpers_key: oRs("mld_opdr_contact_key").value || -1,
|
||
contactpersuitv_key: oRs("prs_contactpersoon_key").value,
|
||
opdr_status: oRs("mld_statusopdr_key").value,
|
||
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,
|
||
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,
|
||
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,
|
||
corr_cost: corr_cost,
|
||
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
|
||
};
|
||
oRs.close();
|
||
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");
|
||
mld.dialectIsSet = true;
|
||
},
|
||
|
||
mld_stdmeldinginfo:
|
||
function _mld_stdmelding(mld_stdmelding_key) {
|
||
var sql = "SELECT ins_discipline_key"
|
||
+ " , DECODE(COALESCE(sd.ins_srtdiscipline_prefix, ''), '', '', sd.ins_srtdiscipline_prefix) prefix"
|
||
+ " , " + lcl.xsqla('md.ins_discipline_omschrijving', 'md.ins_discipline_key')
|
||
+ " , ms.mld_stdmelding_uitvoertijd" // Uitvoertijd is in werkdagen
|
||
+ " , ms.mld_stdmelding_uitvoertijd_pr1" // Uitvoertijd is in werkdagen
|
||
+ " , ms.mld_stdmelding_uitvoertijd_pr2"
|
||
+ " , ms.mld_stdmelding_uitvoertijd_pr4" // Uitvoertijd is in werkdagen
|
||
+ " , ms.mld_stdmelding_urgentie"
|
||
+ " , 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_startdatum"
|
||
+ " , ms.mld_stdmelding_freetext"
|
||
+ " , ms.ins_srtinst_verplicht"
|
||
+ " , ms.alg_onrgoed_niveau"
|
||
+ " , ms.alg_onrgoed_obj_niveau"
|
||
+ " , mld_stdmelding_doublecheck"
|
||
+ " , mld_stdmelding_regime"
|
||
+ " , mld_stdmelding_kto"
|
||
+ " , mld_stdmelding_kanverwijzen"
|
||
+ " , (SELECT COUNT(*)"
|
||
+ " FROM fac_faq ff"
|
||
+ " WHERE (ff.mld_stdmelding_key = ms.mld_stdmelding_key"
|
||
+ " OR (ff.mld_stdmelding_key IS NULL"
|
||
+ " AND ff.ins_discipline_key = ms.mld_ins_discipline_key))"
|
||
+ " AND BITAND (fac_faq_level, 1) = 1" // Voor fe
|
||
+ " AND fac_faq_datum < SYSDATE"
|
||
+ " AND (fac_faq_lang = '" + user_lang + "' OR fac_faq_lang IS NULL)) aantal_fefaq"
|
||
+ " , (SELECT COUNT(*)"
|
||
+ " FROM fac_faq ff"
|
||
+ " WHERE (ff.mld_stdmelding_key = ms.mld_stdmelding_key"
|
||
+ " OR (ff.mld_stdmelding_key IS NULL"
|
||
+ " AND ff.ins_discipline_key = ms.mld_ins_discipline_key))"
|
||
+ " AND BITAND (fac_faq_level, 2) = 2" // Voor fo
|
||
+ " AND fac_faq_datum < SYSDATE"
|
||
+ " AND (fac_faq_lang = '" + user_lang + "' OR fac_faq_lang IS NULL)) aantal_fofaq"
|
||
+ " 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("mld_stdmelding_uitvoertijd").Value
|
||
};
|
||
if (oRs("mld_stdmelding_uitvoertijd_pr1").Value)
|
||
prios[1] = { text: L("lcl_mld_urg_kritiek"),
|
||
key: 1,
|
||
uitvoertijd: oRs("mld_stdmelding_uitvoertijd_pr1").Value
|
||
};
|
||
if (oRs("mld_stdmelding_uitvoertijd_pr2").Value)
|
||
prios[2] = { text: L("lcl_mld_urg_hoog"),
|
||
key: 2,
|
||
uitvoertijd: oRs("mld_stdmelding_uitvoertijd_pr2").Value
|
||
};
|
||
if (oRs("mld_stdmelding_uitvoertijd_pr4").Value)
|
||
prios[4] = { text: L("lcl_mld_urg_laag"),
|
||
key: 4,
|
||
uitvoertijd: oRs("mld_stdmelding_uitvoertijd_pr4").Value
|
||
};
|
||
|
||
var result = { mld_stdmelding_key: mld_stdmelding_key,
|
||
ins_discipline_key: oRs("ins_discipline_key").Value,
|
||
ins_srtdiscipline_key: oRs("ins_srtdiscipline_key").Value,
|
||
ins_srtdiscipline_alg: oRs("ins_srtdiscipline_alg").Value == 1,
|
||
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,
|
||
discipline_omschrijving: oRs("ins_discipline_omschrijving").Value,
|
||
prioriteiten: prios,
|
||
frontendprio: oRs("mld_disc_params_frontendprio").Value,
|
||
startdatum: oRs("mld_disc_params_startdatum").Value == 1,
|
||
urgentie: oRs("mld_stdmelding_urgentie").Value,
|
||
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,
|
||
freetext: oRs("mld_stdmelding_freetext").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 || "",
|
||
doublecheck: oRs("mld_stdmelding_doublecheck").Value||0,
|
||
regime: oRs("mld_stdmelding_regime").Value||1, // 1 is kantoortijden
|
||
stdmelding_kto: oRs("mld_stdmelding_kto").Value||0,
|
||
kanverwijzen: oRs("mld_stdmelding_kanverwijzen").Value,
|
||
aantal_fefaq: oRs("aantal_fefaq").Value,
|
||
aantal_fofaq: oRs("aantal_fofaq").Value
|
||
};
|
||
if (result.aantal_fefaq > 0)
|
||
{
|
||
result.canFAQUSEread = user.checkAutorisation("WEB_FAQUSE", true)!=null;
|
||
}
|
||
if (result.aantal_fofaq > 0)
|
||
{
|
||
result.canFAQFOFread = user.checkAutorisation("WEB_FAQFOF", true)!=null;
|
||
}
|
||
oRs.Close();
|
||
|
||
return result;
|
||
},
|
||
|
||
func_enabled_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();
|
||
}
|
||
}
|
||
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 && moRs("prs_perslid_key").value == user_key;
|
||
|
||
mresult.canFOread = mresult.canRead("WEB_MLDFOF");
|
||
mresult.canBOread = mresult.canRead("WEB_MLDBOF");
|
||
mresult.canFEread = mresult.canRead("WEB_MLDUSE");
|
||
|
||
// 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)
|
||
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();
|
||
}
|
||
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_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
|
||
+ " 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;
|
||
// 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 = (melder_key == user_key || 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?
|
||
prs_key: moRs("prs_perslid_key").value,
|
||
knownread: params.knownread
|
||
}
|
||
);
|
||
|
||
|
||
mresult.canFEread = mresult.canRead("WEB_MLDUSE") && moRs("prs_perslid_key").value == user_key;
|
||
mresult.canFEwrite = mresult.canWrite("WEB_MLDUSE") && moRs("prs_perslid_key").value == user_key;
|
||
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.canReadNotes = (mresult.canRead("WEB_MLDFOF") || mresult.canRead("WEB_MLDBOF") || (mresult.canRead("WEB_MLDUSE") && fenotes > 0));
|
||
mresult.canWriteNotes = mresult.canReadNotes;
|
||
mresult.haveOnlyFErights = (!mresult.canRead("WEB_MLDFOF") && !mresult.canRead("WEB_MLDBOF") && mresult.canRead("WEB_MLDUSE"));
|
||
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);
|
||
mresult.canAdd2Faq = false; // Voordragen voor kennisbank
|
||
|
||
// 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.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
|
||
{
|
||
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)));
|
||
mresult.canDoorzet = mresult.canWrite("WEB_MLDFOF");
|
||
mresult.canClose = mresult.canWrite("WEB_MLDFOF") && !is_wf_root;
|
||
mresult.canVakgChange = mresult.canWrite("WEB_MLDFOF");
|
||
mresult.canStdmChange = mresult.canWrite("WEB_MLDFOF");
|
||
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");
|
||
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"); //mldfof_write;
|
||
mresult.canVakgChange = mresult.canWrite("WEB_MLDFOF");
|
||
mresult.canStdmChange = true;
|
||
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") || mresult.canWrite("WEB_MLDBO3"));
|
||
mresult.canReject = (mresult.canWrite("WEB_MLDBOF") || mresult.canWrite("WEB_MLDBO3")) && (!is_wf_step || (is_wf_step && mld.wfIsRejectable(wfstep)));
|
||
mresult.canForward = (mresult.canWrite("WEB_MLDBOF"));
|
||
mresult.canClose = (mresult.canWrite("WEB_MLDBOF") || (mresult.canWrite("WEB_MLDFOF") && (params && params.verynew)) && !is_wf_root);
|
||
mresult.canVakgChange = (mresult.canWrite("WEB_MLDFOF") || mresult.canFEwrite || mresult.canWrite("WEB_MLDBOF"));
|
||
mresult.canStdmChange = true;
|
||
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"));
|
||
// 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));
|
||
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") || mresult.canWrite("WEB_MLDFOF"));
|
||
mresult.canChangeUrole = mresult.canWrite("WEB_MLDBOF")? 'bo' : 'fo';
|
||
mresult.canAccept = (mresult.canWrite("WEB_MLDBOF") || mresult.canWrite("WEB_MLDBO3"));
|
||
mresult.canReject = (mresult.canWrite("WEB_MLDBOF") || mresult.canWrite("WEB_MLDBO3")) && (!is_wf_step || (is_wf_step && mld.wfIsRejectable(wfstep)));
|
||
mresult.canForward = (mresult.canWrite("WEB_MLDBOF")); // willekeurige vakgroep
|
||
mresult.canClose = (mresult.canWrite("WEB_MLDBOF") && !is_wf_root);
|
||
mresult.canVakgChange = (mresult.canWrite("WEB_MLDBOF")); // vakgroep waar je zelf schrijfrechten op hebt
|
||
mresult.canStdmChange = (mresult.canWrite("WEB_MLDBOF") || mresult.canWrite("WEB_MLDBO3"));
|
||
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"));
|
||
// 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"));
|
||
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"));
|
||
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"))
|
||
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 = (!is_wf_root && is_fo_melding && mresult.canWrite("WEB_MLDBOF"));
|
||
/* GEEN BREAK !! */
|
||
case 7: // Uitgegeven
|
||
/* Waarden hierna gelden dus voor zowel 4 als 7 */
|
||
// 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 && !hasopenopdrachten)) && mresult.canWrite("WEB_MLDBOF"));
|
||
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;
|
||
mresult.canContinue = mresult.canWrite("WEB_MLDFOF"); //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"));
|
||
break;
|
||
case 5: // Afgemeld
|
||
mresult.canContinue = mresult.canWrite("WEB_MLDFOF"); //mldfof_write;
|
||
var authFaq = (S("faq_enabled")==1) && user.checkAutorisation("WEB_FAQFOF", true);
|
||
mresult.canAdd2Faq = (authFaq && authFaq.PRSwritelevel<9); // Voordragen voor kennisbank
|
||
break;
|
||
case 6: // Admin voltooid
|
||
mresult.canContinue = mresult.canWrite("WEB_MLDFOF"); //mldfof_write;
|
||
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) // 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;
|
||
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"
|
||
// 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"
|
||
+ " , o.mld_uitvoerende_keys"
|
||
+ " , fac.gettrackinguserkey('ORDFOK', " + pmld_opdr_key + ") fiat_trackinguser_key"
|
||
+ " , o.mld_opdr_kosten"
|
||
+ " , mto.mld_typeopdr_zichtbaarfe"
|
||
+ " , o.mld_opdr_teverzenden"
|
||
+ " , o.mld_opdr_verzonden"
|
||
+ " , mdp.mld_disc_params_offerteauto"
|
||
+ " , sm.mld_stdmelding_opdrtypevast"
|
||
+ " , m.mld_melding_key"
|
||
+ " , o.mld_opdr_bedrijfopdr_volgnr"
|
||
+ " 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"
|
||
+ " 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"
|
||
+ " AND k.prs_kostenplaatsgrp_key = kg.prs_kostenplaatsgrp_key(+)"
|
||
+ " AND o.mld_uitvoerende_keys = mu.mld_uitvoerende_key"
|
||
+ " 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_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 || 0;
|
||
var mld_opdr_teverzenden = moRs("mld_opdr_teverzenden").value == 1; // Dan stuurt PutOrders deze
|
||
var mld_opdr_verzonden = moRs("mld_opdr_verzonden").value;
|
||
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 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;
|
||
|
||
// 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)
|
||
{ // Geen tracking
|
||
if (fiatteur_kp_key) // Als KP (A) aanwezig (desnoods via n-laagsmethode via afdelingsboom) dan KP testen als isVerantwoordelijke
|
||
isVerantwoordelijke = (fiatteur_kp_key == user_key || user.isCollega(fiatteur_kp_key));
|
||
else if (fiatteur_kpg_key) // Als alleen KPN (B) aanwezig dan KPN testen als isVerantwoordelijke
|
||
isVerantwoordelijke = (fiatteur_kpg_key == user_key || user.isCollega(fiatteur_kpg_key));
|
||
}
|
||
else
|
||
{ // tracking aanwezig
|
||
if (fiatteur_kp_key) // Als KP (A) aanwezig dan KPN (B) testen als isVerantwoordelijke
|
||
isVerantwoordelijke = (fiatteur_kpg_key == user_key || user.isCollega(fiatteur_kpg_key) && fiat_trackinguser_key != fiatteur_kpg_key && !user.isCollega(fiat_trackinguser_key) );
|
||
// Kostenplaats(groep)verantwoordelijke mag na approven de bestelopdracht inzien.
|
||
isApprovedRead = ((fiatteur_kp_key == user_key || user.isCollega(fiatteur_kp_key)) ||
|
||
(fiatteur_kpg_key == user_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") && moRs("prs_perslid_key").value == user_key;
|
||
mresult.canFEwrite = mresult.canWrite("WEB_ORDUSE") && moRs("prs_perslid_key").value == user_key;
|
||
// Daarnaast zichtbaarfe te zetten voor willekeurige opdrachttypes.
|
||
// Hier moet ik de melding aangemaakt hebben
|
||
if (moRs("mld_typeopdr_zichtbaarfe").Value == 1 && moRs("melding_user_key").value == user_key)
|
||
{
|
||
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;
|
||
}
|
||
}
|
||
|
||
// -- CONTROLE LEESRECHTEN --
|
||
mresult.canReadAny = mresult.canRead("WEB_ORDBOF") ||
|
||
mresult.canRead("WEB_ORDBO2") ||
|
||
mresult.canRead("WEB_ORDAFR") ||
|
||
mresult.canRead("WEB_ORDFIN") ||
|
||
mresult.canRead("WEB_ORDGOE") ||
|
||
mresult.canRead("WEB_ORDSUP") ||
|
||
(mresult.canRead("WEB_MLDORD") && (uitv_key == user_key || user.isCollega(uitv_key))) ||
|
||
mresult.canFEread ||
|
||
isVerantwoordelijke ||
|
||
isApprovedRead;
|
||
|
||
mresult.canReadBOF = mresult.canRead("WEB_ORDBOF");
|
||
mresult.canReadORD = mresult.canRead("WEB_MLDORD");
|
||
|
||
// Als ik enige leesrechten of schrijfrechten heb (bij schrijfrechten heb ik ook leesrechten) en ik ben geen fiatteur dan mag ik opdracht notities wijzigen/toevoegen.
|
||
mresult.canShowOpdrNote = mresult.canReadAny && !isVerantwoordelijke; // Als ik enige leesrechten heb en ik ben geen fiatteur.
|
||
mresult.canEditOpdrNote = mresult.canShowOpdrNote;
|
||
|
||
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
|
||
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.canFinish = false; // Afronden
|
||
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.canOpdrTypeChange = false; // Opdrachttype: canVeldChange maar van offertopdrachten mag je het opdrachttype niet aanpassen (!isofferte).
|
||
|
||
mresult.iamBedrijfContact = false; // Aan bedrijf toegekend en ik ben contactpersoon van dat bedrijf? Bijv. vertaaldiensten UWVA
|
||
if (uitv_type == 'B')
|
||
{
|
||
mresult.iamBedrijfContact = mld.iamContact(); // nog ongeacht uitv_key
|
||
}
|
||
// Mag ik dankzij BO2 afmelden (en een beetje bewerken)
|
||
var myBO2Change = mresult.canWrite("WEB_ORDBO2"); // dat is wel het minste
|
||
|
||
if (myBO2Change && uitv_type == "B" && afmelden_extern < 2 && !mresult.iamBedrijfContact)
|
||
myBO2Change = false;
|
||
__Log("myBO2Change: " + myBO2Change);
|
||
|
||
switch (opdr_status)
|
||
{
|
||
case 1: // Afgewezen
|
||
mresult.canChange = (mresult.canWrite("WEB_ORDBOF"));
|
||
mresult.canChangeUrole = "bo";
|
||
mresult.canCopy = (mresult.canWrite("WEB_ORDBOF"));
|
||
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.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"));
|
||
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.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);
|
||
mresult.canReject = (isVerantwoordelijke);
|
||
mresult.canCopy = (mresult.canWrite("WEB_ORDBOF"));
|
||
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.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; // Handmatig versturen (als Putorders dat niet doet)
|
||
mresult.canChangeUrole = "bo";
|
||
mresult.canCopy = (mresult.canWrite("WEB_ORDBOF"));
|
||
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.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 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") && (uitv_key == user_key || user.isCollega(uitv_key))));
|
||
mresult.canSend = (mresult.canWrite("WEB_ORDBOF") && // Handmatig versturen (als Putorders dat niet doet)
|
||
uitv_type == "B" &&
|
||
mld_opdr_verzonden == null &&
|
||
!mld_opdr_teverzenden)
|
||
// GEEN break!
|
||
case 8: // en geaccepteerd
|
||
mresult.canChange = (mresult.canWrite("WEB_ORDBOF") && (decentraal < 2) ||
|
||
(mresult.canWrite("WEB_ORDBO2") && myBO2Change) ||
|
||
(mresult.canWrite("WEB_MLDORD") && (uitv_key == user_key || user.isCollega(uitv_key))));
|
||
if (mresult.canWrite("WEB_ORDBOF")) mresult.canChangeUrole = "bo";
|
||
mresult.canCancel = (mresult.canWrite("WEB_ORDBOF") ||
|
||
(mresult.canWrite("WEB_ORDBO2") && myBO2Change)); /* AAFM#23455 */
|
||
mresult.canClose = (mresult.canWrite("WEB_ORDBOF") && (decentraal < 2) ||
|
||
(mresult.canWrite("WEB_ORDBO2") && myBO2Change) ||
|
||
(mresult.canWrite("WEB_MLDORD") && (uitv_key == user_key || user.isCollega(uitv_key))));
|
||
mresult.canCopy = (mresult.canWrite("WEB_ORDBOF"));
|
||
mresult.canVeldChange = (mresult.canWrite("WEB_ORDBOF"));
|
||
mresult.canFlexChange = (mresult.canWrite("WEB_ORDBOF") || mresult.canWrite("WEB_ORDBO2"));
|
||
mresult.canUitvChange = (mresult.canWrite("WEB_ORDBOF"));
|
||
mresult.canDatesChange = (mresult.canWrite("WEB_ORDBOF"));
|
||
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") && (uitv_key == user_key || user.isCollega(uitv_key))));
|
||
mresult.canUrenMatChange = (mresult.canWrite("WEB_ORDBOF") ||
|
||
(mresult.canWrite("WEB_ORDBO2") && myBO2Change) ||
|
||
(mresult.canWrite("WEB_MLDORD") && (uitv_key == user_key || 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") && (uitv_key == user_key || user.isCollega(uitv_key))));
|
||
mresult.canCopy = (mresult.canWrite("WEB_ORDBOF"));
|
||
mresult.canFlexChange = (mresult.haveORDFINrights || mresult.haveORDSUPrights) ||
|
||
(myBO2Change && mresult.canWrite("WEB_ORDAFR")); /* AANS#22655 */
|
||
mresult.canKostChange = (mresult.haveORDFINrights && S("mld_ord_show_kostenplaats") == 1);
|
||
mresult.canFinish = (!isofferte && typehas_cost && mresult.canWrite("WEB_ORDAFR"));
|
||
mresult.canAcceptOffer = (isofferte && (!lopende_offertes || !offerteauto) && mresult.haveORDOAPrights && mresult.canRead("WEB_ORDBOF") && !(uitvOpdrNaOfferte && offerteauto));
|
||
mresult.canRejectOffer = (isofferte && mresult.haveORDOAPrights && mresult.canRead("WEB_ORDBOF") && !(uitvOpdrNaOfferte && offerteauto));
|
||
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.couldClose = (mresult.canWrite("WEB_ORDBOF") && (decentraal < 2) ||
|
||
(mresult.canWrite("WEB_ORDBO2") && myBO2Change) ||
|
||
(mresult.canWrite("WEB_MLDORD") && (uitv_key == user_key || user.isCollega(uitv_key))));
|
||
mresult.canCopy = (mresult.canWrite("WEB_ORDBOF"));
|
||
mresult.canFlexChange = (mresult.haveORDFINrights || mresult.haveORDSUPrights);
|
||
mresult.canKostChange = (mresult.haveORDFINrights && S("mld_ord_show_kostenplaats") == 1);
|
||
mresult.canUrenMatChange = (mresult.haveORDFINrights);
|
||
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"));
|
||
mresult.canReject = (mresult.canWrite("WEB_ORDGOE"));
|
||
mresult.canCopy = (mresult.canWrite("WEB_ORDBOF"));
|
||
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.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 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;
|
||
},
|
||
|
||
// 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
|
||
// 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 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 (S("mld_plaats_is_locatie_only"))
|
||
alg_onroerendgoed_keys = user.alg_locatie_key();
|
||
else
|
||
alg_onroerendgoed_keys = 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(user_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;
|
||
}
|
||
}
|
||
}
|
||
// 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: user_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_uitvoertijd", typ: "number", val: prio.uitvoertijd },
|
||
{ 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 }
|
||
);
|
||
}
|
||
|
||
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)
|
||
iamContact: function _iamContact()
|
||
{
|
||
var sql = "SELECT prs_bedrijf_key"
|
||
+ " FROM prs_contactpersoon"
|
||
+ " WHERE prs_perslid_key = " + user_key
|
||
+ " AND prs_contactpersoon_verwijder IS NULL";
|
||
var oRs = Oracle.Execute(sql);
|
||
return !oRs.Eof;
|
||
},
|
||
|
||
// levert een te tonen berichtstring op
|
||
sendNeedApprovalNotification: function (opdr_key, requestor, 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;
|
||
}
|
||
|
||
// 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 = oRs("fac_srtnotificatie_oms").Value;
|
||
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);
|
||
return L("lcl_mld_opdr_regApprov") + oRs("prs_perslid_naam_full").value;
|
||
},
|
||
|
||
generate_relobject_block: function (mld_key)
|
||
{
|
||
var sql = "SELECT d.ins_deel_key"
|
||
+ ", ins_deel_omschrijving||' ('||"+lcl.xsql('s.ins_srtdeel_omschrijving', 's.ins_srtdeel_key')+"||')' deel "
|
||
+ " FROM ins_deel d, ins_srtdeel s, mld_melding_object m"
|
||
+ " 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"
|
||
+ " ORDER BY 2";
|
||
oRs = Oracle.Execute( sql );
|
||
if (!oRs.Eof)
|
||
{
|
||
BLOCK_START("mldIns", L("lcl_gerelateerdeobjecten"));
|
||
%>
|
||
<tr><td class="label"><label><%=L("lcl_mld_objects")+':'%></label><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(prs_bedrijf_key) prs_bedrijf_key, COUNT(DISTINCT prs_bedrijf_key) aantal"
|
||
+ " FROM prs_bedrijfdienstlocatie"
|
||
+ " WHERE prs_dienst_key = " + prs_dienst_key;
|
||
if (gebouwkey > 0)
|
||
sql += " AND (alg_gebouw_key = " + gebouwkey + " OR alg_locatie_key =" + locatiekey + ")";
|
||
else if (locatiekey > 0) // <20>berhaupt plaatsgegevens?
|
||
sql += " AND alg_locatie_key = " + locatiekey;
|
||
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 (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
|
||
{
|
||
sql = "SELECT 1"
|
||
+ " FROM mld_dienstpakket mdp, "
|
||
+ " alg_ruimte ar,"
|
||
+ " alg_verdieping av,"
|
||
+ " alg_gebouw ag,"
|
||
+ " alg_locatie al"
|
||
+ " WHERE mld_stdmelding_key = " + stdm_key
|
||
+ " AND mdp.mld_dienstniveau_key = COALESCE(ar.mld_dienstniveau_key, "
|
||
+ " av.mld_dienstniveau_key, "
|
||
+ " ag.mld_dienstniveau_key, "
|
||
+ " al.mld_dienstniveau_key)"
|
||
+ " AND 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";
|
||
oRs = Oracle.Execute(sql);
|
||
if (oRs.Eof) // er zit een beperking op deze melding
|
||
abort_with_warning(L("lcl_mld_dienst_not_for_room"));
|
||
}
|
||
|
||
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);
|
||
mld.trackmeldingupdate(child_key, L("lcl_linked_to") + parent_key); // TODO: prefix
|
||
|
||
// 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;
|
||
// 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 "";
|
||
},
|
||
|
||
hasRequiredStatusEmpty: 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"
|
||
+ " , S.mld_stdmelding_key"
|
||
+ " , D.ins_discipline_key"
|
||
+ " , K.mld_kenmerk_key"
|
||
+ " , V.mld_srtkenmerk_key"
|
||
+ " , V.mld_srtkenmerk_omschrijving"
|
||
+ " , K.mld_kenmerk_verplicht_status"
|
||
+ " , K.mld_kenmerk_niveau"
|
||
+ " 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;
|
||
},
|
||
|
||
// Zet eventueel automatisch status van gefiatteerd naar uitgegeven
|
||
// Alleen voor *interne* uitvoerenden. Die gaan niet automatisch met
|
||
// putorders en kunnen niet met mld/opdr_setsend.asp
|
||
auto_set_uitgegeven: function (opdr_key)
|
||
{
|
||
var sql = "SELECT mld_statusopdr_key, mld_opdr_teverzenden,"
|
||
+ " mld_uitvoerende_keys, mu.type"
|
||
+ " FROM mld_opdr o, mld_v_uitvoerende mu"
|
||
+ " WHERE mld_opdr_key = " + opdr_key
|
||
+ " AND o.mld_uitvoerende_keys = mu.mld_uitvoerende_key"
|
||
var oRs = Oracle.Execute( sql);
|
||
if (oRs("mld_statusopdr_key").Value == 4 // gefiatteeerd
|
||
&& oRs("type").value == 'P' // interne
|
||
&& (oRs("mld_opdr_teverzenden").Value||0) != 1) // Het gaat niet automatisch met putorders
|
||
{
|
||
var uitvoerende = oRs("mld_uitvoerende_keys").Value;
|
||
mld.setopdrachtstatus(opdr_key, 5, uitvoerende); // Uitgegeven
|
||
}
|
||
oRs.Close()
|
||
},
|
||
|
||
srtdisc_sql: function (autfunction, params)
|
||
{
|
||
params = params || {};
|
||
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 I "
|
||
+ " where i.ins_srtdiscipline_key = sd.ins_srtdiscipline_key"
|
||
+ " 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 = " + safe.quoted_sql(autfunction)
|
||
+ " AND (g.fac_gebruiker_alg_level_write < 9 AND g.fac_gebruiker_prs_level_write < 9)"
|
||
+ " AND g.prs_perslid_key = " + user_key + ")"
|
||
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 i.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"
|
||
+ " 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 += " )";
|
||
+ " ORDER BY ins_srtdiscipline_omschrijving";
|
||
return mySRTsql;
|
||
}
|
||
}
|
||
|
||
%>
|