Files
Facilitor/APPL/MLD/mld.inc
Jos Groot Lipman 990431765d Merge 5.3.1 Gold C patches
svn path=/Website/trunk/; revision=18165
2013-06-13 10:21:34 +00:00

2765 lines
174 KiB
C++
Raw Blame History

<% /*
$Revision$
$Id$
*/ %>
<%
mld = {setmeldingstatus:
function (mld_key, mld_status_key)
{
var sql = "BEGIN mld.setmeldingstatus(" + mld_key + ", " + mld_status_key + ", " + user_key + "); END;"
Oracle.Execute(sql);
// Deze zet de status en doet dan bijpassende tracking en notificatie
// zou leuk zijn om true of false op te leveren naar gelang de status echt anders is geworden
},
setopdrachtstatus:
function (opdr_key, opdr_status_key, uitvoerende)
{
// Deze zet de status en doet dan bijpassende tracking en notificatie
var sql = "BEGIN mld.setopdrachtstatus(" + opdr_key + ", " + opdr_status_key + ", " + user_key + "); END;"
Oracle.Execute(sql);
// Nu nog "ORDMLI" (interne uitvoerder) of "ORDMLE" (externe uitvoerder) tracking indien status op uitgegeven (5) wordt gezet
if (opdr_status_key == 5 && uitvoerende > 0) // Status wordt op 5 gezet indien opdracht niet ter fiattering wordt aangeboden
mld.trackuitvoerende(opdr_key, uitvoerende);
},
updatemeldingstatus:
function (mld_key, closeit)
{
// Functie MLD.updatemeldingstatus(mld_key, close_call, user_key) moet aangeroepen worden na veranderingen in mld_opdr
// en als de melding nog niet wordt afgemeld. We weten nog niet of de melding wordt afgemeld of al is afgemeld
// Als er open opdrachten zijn wordt de melding op Uitgegeven gezet als dat al niet zo was
// Als er uitsluitend Verwerkte opdrachten zijn, dan worden de melding ook verwerkt als dat al niet zo was
var sql = "BEGIN mld.updatemeldingstatus (" + mld_key + ", "+closeit+", " + user_key + "); END;";
Oracle.Execute(sql);
},
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;
}
}
%>