Files
Facilitor/APPL/MLD/opdr_list.inc
Koen Reefman e7b952f56a Merge 2025.2 RC2 patches (ongoing)
svn path=/Website/trunk/; revision=69511
2025-06-23 07:36:36 +00:00

1090 lines
54 KiB
C++

<% /*
$Revision$
$Id$
File: opdr_list.inc
Description: Definieert de serverside functie opdr_list() die een lijst van opdrachten toont die
voldoen aan de gegeven parameters/criteria.
Zoals altijd wordt hierbij wel autorisatie betrokken,
maar verder geen contextafhankelijke zaken; dat behoort de aanroeper te doen.
Parameters: -
Context: Word sinds 5.3.1 ook gebruikt vanuit Maninfo als je groepering 2 (opdrachten)
of 16 (opdrachten-->kosten) kiest. Overigens is deze laatste geen andere groepering maar
toont hij alleen iets meer kolommen dan 2
Note: -
*/ %>
<!-- #include file="../Shared/iface.inc" -->
<!-- #include file="../Shared/discx3d.inc" -->
<!-- #include file="../Shared/status.inc" -->
<!-- #include file="../Shared/resultset_table_v2.inc" -->
<!-- #include file="../Shared/getkenmerksql.inc" -->
<!-- #include file="../MLD/mld.inc" -->
<!-- #include file="../Shared/flexfiles.inc" -->
<%
FCLTHeader.Requires({ plugins:["jQuery"],
js: ["./opdr_list.js", "./mld.js", "jquery-ui.js"]});
function opdr_list(params)
{
// VALIDATE AND PREPARE
// Als een parameter niet gedefinieerd of null is, dan doet-ie niks
// anders wordt die verondersteld een zinvolle waarde te hebben
// NB: -1 is vaak geen zinvolle waarde; null had het dan moeten zijn!
// Valid and supported parameters are:
// params.urole : the usuals two-letter lowercase string
// params.print : true | false
// params.excel : true | false
// params.cnt_key : key
// params.bes : true | false
// params.offerte(s) : -1, 0 or 1
// params.withflex : boolean
// if a parameter has a value of -1, then it is assumed not to be set and to be ignored.
/// Deze functie toont de opdrachten, en kan op diverse manieren gebruikt worden:
///
/// a. als overzicht van opdrachten die IK uit moet voeren (En kan aanpassen en afmelden).
/// urole == 'fe', interne uitvoerder
///
/// b. als overzicht van opdrachten die decentraal door mij afgehandeld kunnen worden
/// urole=b2, interne uitvoerder decentraal of externe uitvoerder
/// dit zijn dan opdrachten met opdrachttype.decentraal = 1 die binnen mijn WEB_ORDBOF scope vallen
/// (melding.ins_discipline: afdeling in PRS scope en plaats in ALG scope)
///
/// c. als overzicht van opdrachten die centraal door mij beheerd (ingevoerd en/of afgemeld) kunnen worden
/// urole == 'bo'
/// dit zijn opdrachten die binnen mijn WEB_ORDBOF scope vallen
/// Om een opdracht te kunnen maken moet de melding aan mijn MLDBOF [en ORDBOF] scope voldoen
/// de minima van beides scope gelden hier dan
///
/// d. tiny: Als passief overzicht (geen event op rows) van opdrachten behorende bij melding, geen headers en dergelijke
/// inline: samen met tiny: Dit is een inline overzicht, Samen met tiny, ook geen headers en dergelijke
///
var urole = params.urole;
var fronto = (urole == "fo");
var backo = (urole == "bo");
var frontend = (urole == "fe");
// Voor resulttable de globalen zetten; zou ng anders moeten.
var outputmode = params.outputmode; // print to 0 = screen, 1 = printer, 2 = excel, etc.
var print = (outputmode == 1 || outputmode == 5);
var excel = (outputmode == 2 || outputmode == 6);
var showall = params.showall;
var mld_key = params.mld_key;
var contract = params.contract
var cnt_key = params.cnt_key;
var ks_key = params.ks_key;
var intopdr_key = params.intopdr_key;
// Er kunen twee contract keys meegegeven worden. Een extra contract key die bij contract hoort.
// Als cnt_key en contract_key verschillen kun het nooit een resultaat opleveren
if (contract > 0)
cnt_key = cnt_key + (cnt_key != ""? ", " : "") + contract;
var bes = params.bes;
var tiny = params.tiny;
var inline = params.inline;
//var justClose = params.justClose;
var mldstpen = params.mldstpen;
var mldstnew = params.mldstnew;
var mldstacc = params.mldstacc;
var mldstuit = params.mldstuit;
var mldstrej = params.mldstrej;
var mldstafm = params.mldstafm;
var mldstver = params.mldstver;
var mldnieto = params.mldnieto;
var mldopdrstrej = params.mldopdrstrej;
var mldopdrstnak = params.mldopdrstnak;
var mldopdrsttfi = params.mldopdrsttfi;
var mldopdrstfia = params.mldopdrstfia;
var mldopdrstuit = params.mldopdrstuit;
var mldopdrstafm = params.mldopdrstafm;
var mldopdrstver = params.mldopdrstver;
var mldopdrstacp = params.mldopdrstacp;
var mldopdrstafr = params.mldopdrstafr;
var mldopdrstgoe = params.mldopdrstgoe;
var showstatus = "";
if (mldstpen) showstatus = (showstatus == ""? "" : showstatus + ",") + "0";
if (mldstrej) showstatus = (showstatus == ""? "" : showstatus + ",") + "1";
if (mldstnew) showstatus = (showstatus == ""? "" : showstatus + ",") + "2";
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";
var from_mld = (showstatus != "");
params.showstatus = showstatus;
params.from_mld = from_mld;
var showopdrstatus = "";
if (mldopdrstrej) showopdrstatus = (showopdrstatus == ""? "" : showopdrstatus + ",") + "1";
if (mldopdrstnak) showopdrstatus = (showopdrstatus == ""? "" : showopdrstatus + ",") + "2";
if (mldopdrsttfi) showopdrstatus = (showopdrstatus == ""? "" : showopdrstatus + ",") + "3"; // Verderop wordt wel bepaald of 'b2' status 3 mag zien
if (mldopdrstfia) showopdrstatus = (showopdrstatus == ""? "" : showopdrstatus + ",") + "4";
if (mldopdrstuit) showopdrstatus = (showopdrstatus == ""? "" : showopdrstatus + ",") + "5";
if (mldopdrstafm) showopdrstatus = (showopdrstatus == ""? "" : showopdrstatus + ",") + "6";
if (mldopdrstver) showopdrstatus = (showopdrstatus == ""? "" : showopdrstatus + ",") + "7";
if (mldopdrstacp) showopdrstatus = (showopdrstatus == ""? "" : showopdrstatus + ",") + "8";
if (mldopdrstafr) showopdrstatus = (showopdrstatus == ""? "" : showopdrstatus + ",") + "9";
if (mldopdrstgoe) showopdrstatus = (showopdrstatus == ""? "" : showopdrstatus + ",") + "10"; // Verderop wordt wel bepaald of 'b2' status 10 mag zien
params.showopdrstatus = showopdrstatus;
params.mldopdrstrej = mldopdrstrej;
params.mldopdrstafm = mldopdrstafm;
params.mldopdrstver = mldopdrstver;
var groepering_key = params.groepering_key; // Voor maninfo. 2 en 16 ondersteund
params.uitvoerder = false;
if (frontend)
{
// Dan zijn het alleen opdrachten van *mijn* meldingen waarop ik MLDUSE-read rechten heb
// en van het type waarbij mld_typeopdr_zichtbaarfe = 1 als ik een mld_key heb
// Omdat uitsluitend vanuit subframe van mld_melding wordt aangeroepen in deze mode veronderstellen we dat geregeld.
// OF het zijn de opdrachten waarvan ik uitvoerende ben (MLDORD)
if (params.mld_key)
var pautfunction = "WEB_MLDUSE";
else
{
var pautfunction = "WEB_MLDORD";
params.uitvoerder = true;
}
}
else if (from_mld)
var pautfunction = ["WEB_EXTORD","WEB_ORDBO2","WEB_ORDBOF"];
else if (urole == 'b2')
var pautfunction = ["WEB_EXTORD","WEB_ORDBO2"];
else if (urole == 'bgt')
var pautfunction = "WEB_BGTORD";
else
var pautfunction = "WEB_ORDBOF";
// De functie checkAutorisation(autfunction) geeft een Response.End indien er geen autorisatie voor autfunction wordt gevonden
var authparams = user.checkAutorisation(pautfunction);
var srtdisc_key = -1;
// Even een simplistische 'ben ik -externe- uitvoerder'-check
var exhandler = urole == "b2" && !(user.checkAutorisation("WEB_ORDBO2", true)) && user.iamContact();
var mld_melding = { isTemplate: false };
if (mld_key)
{ // Bestaat de gezochte melding?
var sql = "SELECT '1' FROM mld_melding WHERE mld_melding_key = " + mld_key;
oRs = Oracle.Execute(sql);
if (!oRs.eof)
{ // Melding bestaat. Dan kan de info opgevraagd worden.
mld_melding = mld.mld_melding_info(mld_key);
srtdisc_key = mld_melding.srtdisc_key;
lcl.set_dialect(srtdisc_key, "MLD_SRTDISCIPLINE_KEY");
// Moet hier eigenlijk niet ook gecontroleerd worden of ik de opdrachten van deze melding wel mag zien?
// var this_mld = mld.func_enabled_melding(mld_key, {verynew: verynew}); // Wat heb ik zoal aan rechten op deze specifieke melding
// var hasFOBOread = this_mld.canFOread || this_mld.canBOread;
}
oRs.Close();
// Als de melding een fac_activiteit_key heeft dan is de melding een sjabloon of een geplande actie.
if (mld_melding.act_key > -1)
{
var sql = "SELECT fac_activiteit_eenheid"
+ " FROM fac_activiteit"
+ " WHERE fac_activiteit_key = " + mld_melding.act_key;
var oRs = Oracle.Execute(sql);
mld_melding.isTemplate = (oRs("fac_activiteit_eenheid").Value == 5);
oRs.Close();
}
}
params.isTemplate = mld_melding.isTemplate;
if (params.withflex && !excel && !print)
{
// Fast check to see if we have any listable flex at all, to prevent superfluous empty column
var sql = "SELECT COALESCE (" + lcl.xsql("k.mld_kenmerk_omschrijving", "k.mld_kenmerk_key")
+ " , " + lcl.xsql("sk.mld_srtkenmerk_omschrijving", "sk.mld_srtkenmerk_key") + ") mld_kenmerk_omschrijving"
+" , sk.mld_srtkenmerk_kenmerktype"
+" FROM mld_srtkenmerk sk, mld_kenmerk k"
+" WHERE BITAND (mld_kenmerk_inlijst, 1) = 1"
+" AND BITAND (mld_srtkenmerk_systeem, 4) = 0" // niet als vertrouwelijk
+" AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key"
+" AND k.mld_kenmerk_niveau IN ('P', 'O')"
+" AND k.mld_kenmerk_verwijder IS NULL"
+" AND sk.mld_srtkenmerk_verwijder IS NULL";
var oRs = Oracle.Execute(sql);
params.anyflex = !oRs.eof;
if (params.anyflex)
{
params.multiflex = false;
params.bijlageflex = (oRs("mld_srtkenmerk_kenmerktype").Value == "M");
var flexlabel = oRs("mld_kenmerk_omschrijving").Value;
oRs.MoveNext();
if (!oRs.Eof)
{
params.multiflex = true;
flexlabel = L("lcl_flexlist");
while (!oRs.eof)
{
if (oRs("mld_srtkenmerk_kenmerktype").Value == "M")
params.bijlageflex = true;
oRs.MoveNext();
}
}
}
oRs.close();
}
// We really need to suppress columns that are obviously irrelevant for this configuration
// Fast check to see if we have anything to do with geographics
var algsql= "SELECT COUNT(*) FROM ins_srtdiscipline WHERE ins_srtdiscipline_alg > 0 AND ins_srtdiscipline_verwijder IS NULL";
var algoRs = Oracle.Execute(algsql);
var anyalg = algoRs(0).value > 0;
algoRs.close();
// Fast check to see if we have just one opdrachttype
var otsql= "SELECT COUNT(*) FROM mld_typeopdr";
var otoRs = Oracle.Execute(otsql);
var singleOT = otoRs(0).value == 1;
otoRs.close();
// Fast check to see if we have any vakgroeptypes
var inssql = "SELECT 1 FROM ins_srtdiscipline WHERE ins_srtdiscipline_ins = 1"
+ (srtdisc_key > 0 ? " AND ins_srtdiscipline_key = " + srtdisc_key : "")
+ " AND ROWNUM = 1 AND ins_srtdiscipline_verwijder IS NULL";
var insoRs = Oracle.Execute(inssql);
params.anyins = !insoRs.eof;
insoRs.close();
// Fast check to see if we are using 'urenregistratie'
var opdrtypesql = "SELECT COUNT(*) aantal"
+ " FROM mld_typeopdr"
+ " WHERE mld_typeopdr_uren IN (3, 4, 5)";
var opdrtypeoRs = Oracle.Execute(opdrtypesql);
params.includeHours = opdrtypeoRs("aantal").Value > 0;
opdrtypeoRs.Close();
%>
<html>
<head>
<%
if (!params.inline)
FCLTHeader.Generate({ outputmode: params.outputmode });
%>
<script type="text/javascript">
// Text strings used by opdr_list.js
var urole = "<%=urole%>";
var mld_key = "<%=mld_key%>";
var opdr_key = "<%=params.opdr_parent_key%>";
var setting_mld_accept_confirm = <%=S("mld_accept_confirm")?1:0%>;
</script>
</head>
<body id="listbody">
<%
var prefix = ';-)'; // even if no result it must have a value
var sql = mld.getopdroverzicht_sql(pautfunction, params);
var status_oms = new Array();
var status_cnt = new Array();
/**********************************
* Callback functies ResultsetTable
*********************************/
var recent = new Date();
recent.setMinutes(recent.getMinutes() - S("mld_opdracht_recent"));
function fnrowClass(oRs)
{
if (mld_melding.isTemplate)
{ // Geen class zetten bij sjablonen
class1 = "";
}
else
{
if (oRs("mld_opdr_einddatum").Value > oRs("nu").Value ||
oRs("mld_statusopdr_key").Value == 1 ||
oRs("mld_statusopdr_key").Value == 2 ||
oRs("mld_statusopdr_key").Value == 6 ||
oRs("mld_statusopdr_key").Value == 7 ||
oRs("mld_statusopdr_key").Value == 9)
{ // Alleen open opdrachten kunnen een rode kleur krijgen.
class1 = "";
}
else
{
class1 = " expired2";
}
var laatstgewijzigd = new Date(oRs("mld_opdr_laatstgewijzigd").Value);
var laatstgezien = new Date(oRs("mld_opdr_laatstgezien").Value);
var mld_recent = new Date(oRs("recentdatum").Value);
if (mld_recent > recent)
{
class1 += " updated";
}
if (laatstgewijzigd > laatstgezien)
{
class1 += " recentlychangedopdr";
}
}
return class1;
}
// Extra data voor de client om daar dynamisch buttons te kunnen activeren.
function fnrowData(oRs)
{
var mldKey = oRs("mld_melding_key").Value;
var mldPrefix = oRs("ins_srtdiscipline_prefix").Value ? oRs("ins_srtdiscipline_prefix").Value : "";
var mldVolgnr = oRs("mld_opdr_bedrijfopdr_volgnr").Value;
var act_key = oRs("mld_action").Value || -1;
var opdrKey = oRs("mld_opdr_key").Value;
var data = {mldKey: mldKey, mldPrefix: mldPrefix, mldVolgnr: mldVolgnr, act_key: act_key, opdrKey: opdrKey};
return JSON.stringify(data);
}
// Opdracht rechten.
var my_mldrechten = user.func_enabled("MLD");
var canWriteORDBOF = my_mldrechten.canWrite("WEB_ORDBOF");
var canReadORDBOF = my_mldrechten.canRead("WEB_ORDBOF");
var canWriteORDAFR = my_mldrechten.canWrite("WEB_ORDAFR");
var canWriteEXTORD = my_mldrechten.canWrite("WEB_EXTORD");
var canWriteORDBO2 = my_mldrechten.canWrite("WEB_ORDBO2");
// Factuur rechten.
var authparamsEXTORD = user.checkAutorisation("WEB_EXTORD", true);
var authparamsEXTFIN = user.checkAutorisation("WEB_EXTFIN", true);
var authparamsFINFOF = user.checkAutorisation("WEB_FINFOF", true);
var authparamsFINBOF = user.checkAutorisation("WEB_FINBOF", true);
var authparamsMLDFIN = user.checkAutorisation("WEB_MLDFIN", true);
// Alleen ALGreadlevel en ALGwritelevel van belang want fac_functie_min_level = 3 (lezen en schrijven plaats)
var hasAddFactuurRightsFINFOF = (authparamsFINFOF && authparamsFINFOF.ALGwritelevel < 9);
var hasListFactuurRights = ((user.iamContact() && authparamsEXTFIN) ||
authparamsFINFOF ||
authparamsFINBOF ||
user.isBudgethouder() ||
authparamsMLDFIN);
function fnrowActionEnabler(oRs)
{
var o_stat = oRs("mld_statusopdr_key").Value;
eAdd = (urole == "bo") && canWriteORDBOF /* && TODO melding binnen scope daarvan maar dat maakt de query erg ingewikkeld */;
var eClose = (o_stat == 5 || o_stat == 8) && authparams.ALGwritelevel < 9;
// Een afmelder (EXTORD of ORDBO2) mag externe opdrachten afmelden onder bepaalde voorwaarden:
// EXTORD: Hij mag opdrachten zien/afmelden van externe bedrijven waar hij contactpersoon van is,
// als hij ALG read/write rechten (WEB_EXTORD) heeft op de plaats van de bijbehorende melding van de opdracht.
// ORDBO2: Setting mld_typeopdr_afmelden_extern: Afmelder (ORDBO2) mag externe opdrachten (0=Niet zien, 1=Zien, 2=Afmelden)
// Als hij een interne (decentraal/intern) uitvoerder is mag hij de externe opdrachten afmelden als mld_typeopdr_afmelden_extern==2.
// De voorwaarde en setting geldt niet als:
// 1) de opdracht toegekend is aan een (intern) persoon (P). Dan mag hij alleen eigen opdrachten zien.
// 2) de opdracht toegekend is aan het eigen (intern) bedrijf (BI). Opdrachten van het eigen bedrijf mag hij alleen zien.
var iamBedrijfContact = oRs("uitv_type").Value == "BE" && user.iamContact(oRs("uitv_key").Value); // Ben ik contactpersoon van het externe uitvoerende bedrijf?
var BOXCanClose = iamBedrijfContact && canWriteEXTORD; // Contactpersoon extern bedrijf (BE) + canWrite.
var BO2CanClose = (canWriteORDBO2 &&
(oRs("mld_typeopdr_afmelden_extern").Value == 2 || // Setting mld_typeopdr_afmelden_extern 2=Afmelden.
(oRs("uitv_type").Value != "BE" && // Intern.
((oRs("B_OF_P").Value == "P" && oRs("uitv_key").Value == user_key) || // Intern persoon (P).
(oRs("B_OF_P").Value == "B" && oRs("uitv_key").Value == user.afdeling().prs_bedrijf_key()))) // Intern bedrijf (BI).
));
if (urole == "b2" && !BOXCanClose && !BO2CanClose)
eClose = false;
if (urole == "bo" && oRs("mld_typeopdr_decentraal").Value == 2)
eClose = false; // Exclusief decentraal
// Als kosten bij afmelden verplicht zijn:
var tonen_totaal = !(oRs("mld_typeopdr_uren").Value == 0 &&
oRs("mld_typeopdr_materiaal").Value == 0 &&
oRs("mld_typeopdr_totaal").Value);
var req_type = oRs("mld_typeopdr_kosten_verplicht").Value;
var req_opdr = oRs("mld_disc_params_opdr_kosten").Value || 0;
var kosten_verplicht_afm = (tonen_totaal && (req_type & 2 || (req_type == 0 && req_opdr & 2))? 1 : 0) == 1;
var opdr_kosten = oRs("mld_opdr_kosten").Value;
if (kosten_verplicht_afm && opdr_kosten == null)
eClose = false;
var eVerwerk = (o_stat == 6 || o_stat == 9) && S("mld_opdr_archive_by_gui") && canWriteORDAFR && canReadORDBOF;
// Voor het accepteren van meldingen gelden bijna dezelfde conditites als voor het sluiten
// Alleen mag dat natuurlijk niet als een melding al is geaccepteerd.
// And the order-type is explicitily accepted
var eAccept = eClose && o_stat == 5 && oRs("mld_typeopdr_accept").Value == 1;
var eCopy = eAdd;
var isofferte = oRs("mld_typeopdr_isofferte").Value == 1;
var typehas_cost = oRs("mld_typeopdr_kosten").Value == 1;
var is_planned_action = oRs("mld_action").Value != null || oRs("opdr_action").Value > 0;
var eFinish = (o_stat == 6 && // Opdracht status Afgemeld(6)
!isofferte &&
typehas_cost &&
canWriteORDAFR &&
!is_planned_action);
var has_facturen = oRs("aantal_facturen").Value > 0; // De opdracht heeft facturen.
// Kan rechtstreeks vanuit deze opdracht een factuur aanmaken.
var eAddFactuur = typehas_cost && !has_facturen &&
o_stat != 1 && o_stat != 2 && o_stat != 3 && o_stat != 10 &&
((iamBedrijfContact && authparamsEXTFIN && authparamsEXTFIN.ALGwritelevel < 9) ||
hasAddFactuurRightsFINFOF);
// Mag lijst met facturen zien die bij deze opdracht horen.
var eListFactuur = typehas_cost && has_facturen &&
((iamBedrijfContact && authparamsEXTFIN) ||
authparamsFINFOF ||
authparamsFINBOF ||
user.isBudgethouder() ||
authparamsMLDFIN);
var data = {eAdd: eAdd, eClose: eClose, eVerwerk: eVerwerk, eCopy: eCopy, eAccept: eAccept, eFinish: eFinish, eAddFactuur: eAddFactuur, eListFactuur: eListFactuur};
return data;
}
function fncolSpoed(oRs) // kopie van mld_list.inc
{
var priolevel = oRs("mld_melding_spoed").Value;
var displ = mld.getpriotext(priolevel);
var hprio = "<div style='display:none'>" + priolevel + "</div>"; // for sorting i presume
if (outputmode == 0)
{ // maak er dan nog een leuk plaatje van
displ = "<span class='pricon' id='urg_prio"+priolevel+"' title='" + displ+"'>" + hprio + I(mld.getpriocon(priolevel)) + "</span>";
}
return displ;
}
function fncolKey(oRs)
{
return oRs("ins_srtdiscipline_prefix").Value + oRs("mld_melding_key").Value + "/" + oRs("mld_opdr_bedrijfopdr_volgnr").Value;
}
function fnMldStatus(oRs)
{
if (oRs("mld_melding_parentkey").Value > 0)
return L("lcl_mld_parent_status").format(oRs("mld_melding_parentkey").Value); // default leeg
var mldStatus = parseInt(oRs("mld_melding_status").Value);
var nrOrders = oRs("nrOrders").Value;
var nrActief = oRs("nrActief").Value;
// Een melding is nog niet opgelost als er opdrachten/offertes zijn bij de melding en waarvan er geen enkele meer actief is.
// De status voor deze meldingen is geaccepteerd(4).
var not_solved = nrOrders > 0 && oRs("nrActief").Value == 0 && backo && mldStatus == 4;
if (not_solved)
{ // Checkt bij status 4 of dat nieuw(4) of oud(99) is
var mldkey = oRs("mld_melding_key").Value;
mldStatus = mld.getextendedmldstatus(mldStatus, mldkey)
}
var mld_status = mld.getmldstatustext(mldStatus);
return mld_status;
}
function fnOpdrStatus(oRs)
{
var txt = mld.getextendedopdrstatustext(oRs("mld_statusopdr_key").Value, oRs("mld_opdr_key").Value);
if (oRs("mld_opdr_verzonden").Value == null && L("lcl_mld_opdr_notyetsent"))
txt += "<br>" + L("lcl_mld_opdr_notyetsent");
return txt;
}
function fncolNote(oRs)
{
if (oRs("notitie").Value == null)
return "";
else
return rst.truncMore(shared.stripbbcodes(oRs("notitie").Value), {isPrinting: print, isExcel: excel}); // Zorgt voor het afkappen van de tekst en het toevoegen van ... meer.
}
function fncolObject(oRs)
{
if (oRs("objCount").Value > 20)
return "<span class=\"nowrap\">" + (outputmode == 0 ? I("fa-hand-point-right") + " " : "") + "(" + oRs("objCount").Value + " " + L("lcl_mld_objects") + ")</span>";
else if (oRs("object").Value == null)
return "";
var obj = oRs("object").Value;
var ret = (outputmode == 0 ? I("fa-hand-point-right") + " " : "") + obj.format(", ");
if (obj.indexOf("{0}") == -1) // single object
return "<span class=\"nowrap\">" + ret + "</span>";
else
return ret;
}
var summaryParams = { status_oms: new Array(),
status_cnt : new Array()
};
function fnsummaryCalc(oRs)
{
with (summaryParams)
{
var opd_status = status.getopdrstatustext(oRs("mld_statusopdr_key").Value);
var order = oRs("mld_statusopdr_key").Value;
if (status_oms[order])
{
status_cnt[order] = status_cnt[order] + 1;
}
else
{
status_oms[order] = opd_status;
status_cnt[order] = 1;
}
}
return;
}
function fnsummaryShow()
{
with (summaryParams)
{
status_row = "";
status_row += (status_oms[10] != undefined ? status_oms[10] + "<span class='summary-badge'>" + status_cnt[10] + "</span>" : "");
status_row += (status_oms[3] != undefined ? status_oms[3] + "<span class='summary-badge'>" + status_cnt[3] + "</span>" : "");
status_row += (status_oms[4] != undefined ? status_oms[4] + "<span class='summary-badge'>" + status_cnt[4] + "</span>" : "");
status_row += (status_oms[8] != undefined ? status_oms[8] + "<span class='summary-badge'>" + status_cnt[8] + "</span>" : "");
status_row += (status_oms[6] != undefined ? status_oms[6] + "<span class='summary-badge'>" + status_cnt[6] + "</span>" : "");
status_row += (status_oms[9] != undefined ? status_oms[9] + "<span class='summary-badge'>" + status_cnt[9] + "</span>" : "");
status_row += (status_oms[5] != undefined ? status_oms[5] + "<span class='summary-badge'>" + status_cnt[5] + "</span>" : "");
status_row += (status_oms[7] != undefined ? status_oms[7] + "<span class='summary-badge'>" + status_cnt[7] + "</span>" : "");
status_row += (status_oms[1] != undefined ? status_oms[1] + "<span class='summary-badge'>" + status_cnt[1] + "</span>" : "");
status_row += (status_oms[2] != undefined ? status_oms[2] + "<span class='summary-badge'>" + status_cnt[2] + "</span>" : "");
//status_row = status_row.substr(2);
}
return status_row;
}
function fnendText()
{
var endText = "";
if (S("mld_max_history") > 0 && (mldopdrstrej || mldopdrstafm || mldopdrstver) && !mld_key)
endText = L("lcl_newrows1") + S("mld_max_history") + L("lcl_newrows2");
return endText;
}
var buttons = [];
if (params.opdr_parent_key)
{ // Niet eerder nodig? Dan hier maar;
var this_opdr = mld.func_enabled_opdracht(params.opdr_parent_key);
if (this_opdr.canCopy)
buttons.push({ title: L("lcl_add"), icon: "fa-plus", action: "opdr_continue()" });
}
var addallowed = false;
if (mld_key)
{
var sqlm = "SELECT COUNT(*) aantal FROM mld_melding WHERE mld_melding_key = " + mld_key;
var oRs3 = Oracle.Execute(sqlm);
if (oRs3("aantal").Value == 1) // De mld_key moet ook echt bestaan.
{
var this_mld = mld.func_enabled_melding(mld_key);
addallowed = this_mld.canAddOpdr;
var canAccept = this_mld.canAccept;
}
oRs3.Close();
if (addallowed)
{
if (!params.opdr_parent_key)
buttons.push({ icon: "fa-plus", title: L("lcl_add"), action: "add_opdracht("+(canAccept?1:0)+")" });
if (!inline)
buttons.push({ icon: "fa-fclt-refresh", title: L("lcl_refresh"), action: "FcltMgr.reload()" });
// else ooit eens testen/ netjes
// buttons.push({ icon: "fa-fclt-refresh", title: L("lcl_refresh"), action: "parent.$('#tdinline').load(window.location.href, resizeWhenInIFrame);" });
}
}
if (Request.ServerVariables("REQUEST_METHOD") == "POST") {
// Bij GET wordt deze knop automatisch door CreateButtons al wel ingevoegd
// Bij de POST (vanuit mld_search.asp) moeten we hem expliciet zelf toevoegen want er is een clientside afhankelijkheid (toegang tot mld_search.asp)
buttons.push({ icon: "fa-fclt-refresh", title: L("lcl_refresh"), action: "FcltMgr.reload()" });
}
// Een kalender met opdrachten tonen; dit is niet zinvol als ik embedded ben
// Je kunt dit bv afmeten aan tiny of aan het gedefinieerd zijn van een meldingkey
// In b2 mode zie je minder opdrachten (alleen waar je ORDBO2 voor hebt), dan is de relatie
// met de kalender verwarrend, dus dan ook liever weg.
if (!mld_key && urole != 'b2' && urole != 'mi') {
// Dit is het OCP filter van de persoonselector: *ik* kan een interne contactpersoon zijn
// Dan is er een kalenderknop om mijn lopende in een overzicht te zien
// Goedkoper is wellicht of er een exist is van mld_opdr.prs_perslid_key = me
var csql = "SELECT prs_perslid_key"
+ " FROM fac_v_webgebruiker f"
+ ", fac_functie ff"
+ " WHERE f.fac_functie_key = ff.fac_functie_key"
+ " AND prs_perslid_key = " + user_key
+ " AND (fac_functie_code = 'WEB_MLDBOF' OR fac_functie_code = 'WEB_MLDBO3')"
+ " AND f.fac_gebruiker_prs_level_write <9"
+ " AND f.fac_gebruiker_alg_level_write <9";
var coRs = Oracle.Execute(csql);
if (!coRs.eof) {
var calendarurl = 'appl/shared/fullcalendar.asp?worker=opdrlist';
buttons.push ({ icon: "fa-calendar", title: L("lcl_calendar"), action: "FcltMgr.openDetail('" + calendarurl + "', '" + L("lcl_mld_opdr_lopende") + "')" });
}
coRs.Close();
}
if (!mld_melding.isTemplate) {
buttons.push({ icon: "fa-list-ul", title: L("lcl_mld_legenda"), action: "openOpdrLegenda(" + (inline ? mld_key : '') + ")" });
}
if (!inline)
buttons.push({ icon: "fa-columns", title: L("lcl_scf_columns"), action: "openColumns()"});
function fncolFiatteur(oRs)
{
if (oRs("mld_statusopdr_key").Value == 3)
return oRs("fiatteur").Value;
else
return "";
}
function fncolContractnr(oRs)
{
var cnt_nr = oRs("cnt_contract_nummer_intern").Value;
if (oRs("cnt_contract_versie").Value) {
cnt_nr += "." + oRs("cnt_contract_versie").Value;
}
return safe.html(cnt_nr);
}
function fncolActiecode(oRs)
{
var actiecode = oRs("mld_opdr_actiecode").Value;
var res = "";
var iAmUitv = exhandler
|| oRs("uitv_key").Value == user_key
|| (oRs("B_OF_P").Value === "B"
? user.iamContact(oRs("uitv_key").Value)
: user.isCollega(oRs("uitv_key").Value));
if (iAmUitv) { // Uitvoerder ziet een signaal als de bal bij de BO ligt
if (actiecode & 512) { // Attentie bij Uitvoerder
res = L("lcl_mld_actiecodeATT");
if (outputmode == 0) {
res = "<span class='ac512' title='"+res+"'>"
+ I("fa-bell fa-lg", { fastyle: "fas" })
+ "</span>";
}
} else if (S("mld_opdr_actiecode") > 0 && (actiecode & 1) && (actiecode & 128)) { // Actie & Attentie bij BO
res = L("lcl_opdr_actiecodeBO");
if (outputmode == 0) {
res = "<span class='ac' title='"+res+"'>"
+ I("fa-user-cog fa-lg", { fastyle: "fas" })
+ "</span>";
}
} else if (S("mld_opdr_actiecode") > 0 && (actiecode & 1)) { // Actie bij BO
res = L("lcl_opdr_actiecodeBO");
if (outputmode == 0) {
res = "<span class='ac' title='"+res+"'>"
+ I("fa-user-cog fa-lg", { fastyle: "fal" })
+ "</span>";
}
}
} else { // Niet-uitvoerders (altijd FOBO?)
if (outputmode == 0) {
if (actiecode & 128) { // Attentie bij FOBO
res = "<span class='ac128' title='"+L("lcl_mld_actiecodeATT")+"'>"
+ I("fa-bell fa-lg", { fastyle: "fas" })
+ "</span>";
} else if (S("mld_opdr_actiecode") > 0 && (actiecode & 1)) { // Actie bij BO
res = "<span class='ac' title='"+L("lcl_opdr_actiecodeBO")+"'>"
+ I("fa-bell fa-lg", { fastyle: "fal" })
+ "</span>";
}
} else {
if (actiecode & 128) { // Attentie bij FOBO
res = L("lcl_mld_actiecodeATT");
} else if (S("mld_opdr_actiecode") > 0 && (actiecode & 1)) { // Actie bij BO
res = L("lcl_opdr_actiecodeBO");
}
}
}
return res;
}
function fncolFlags(oRs)
{
var opdrkey = oRs("mld_opdr_key").Value;
var flagkey = oRs("mld_opdr_flag").Value || 0;
var ttl = L("lcl_opdr_flag" + flagkey);
var displ = "";
if (print || excel)
{
if (flagkey != 0) displ = safe.html(ttl); // else blijft-ie gewoon leeg
}
else // maak er dan nog leuke plaatjes van
{
var flagIcon = I("fa-fclt-flag" + (flagkey == 0 ? "0" : ""));
// Met hidden flagkey voor sortering. 999 zorgt dat bij 1 keer sorteren de gevlagde direct bovenaan staan
displ = "<div class='clickParent' " + ((urole == "bo" || urole == "fo" || S("mld_performer_can_change_flags")) ? "onclick='toggleOpdrFlag(event, "+ opdrkey +");'":"")
+ " title='"+safe.htmlattr(ttl)+"'>"
+ "<span id='opdrflag"+opdrkey+"' class='opdrflag"+flagkey+"' flagkey='"+flagkey+"'>" + flagIcon + "</span>"
+ "<span style='display:none'>"+(flagkey||999)+"</span></div>";
}
return displ;
}
function fncolFlexBijlagen(oRs)
{
var flexval = oRs("flex").Value;
var bijlagen_aantal = 0;
if (params.bijlageflex)
{
var opdr_key = oRs("mld_opdr_key").Value;
var bijlagen_oms = "";
var bijlagen_lijst = [];
var sql = "SELECT k.mld_kenmerk_key"
+ " , t.mld_srtkenmerk_omschrijving" // suspect
+ " , CASE WHEN BITAND(k.mld_kenmerk_inlijst,1) = 1"
+ " THEN 1"
+ " ELSE 0"
+ " END in_overzicht_tonen"
+ " FROM mld_opdr o"
+ " , mld_srtkenmerk t"
+ " , mld_kenmerk k"
+ " WHERE o.mld_typeopdr_key = k.mld_typeopdr_key"
+ " AND k.mld_srtkenmerk_key = t.mld_srtkenmerk_key"
+ " AND t.mld_srtkenmerk_kenmerktype = 'M'"
+ " AND k.mld_kenmerk_verwijder IS NULL"
+ " AND t.mld_srtkenmerk_verwijder IS NULL"
+ " AND o.mld_opdr_key = " + opdr_key;
var oRs_k = Oracle.Execute(sql);
while (!oRs_k.eof)
{
if (oRs_k("in_overzicht_tonen").Value == 1)
{
var kenmerk_key = oRs_k("mld_kenmerk_key").Value;
var bijlagen_oms = oRs_k("mld_srtkenmerk_omschrijving").Value; // suspect
var bestanden = flexProps("MLD", opdr_key, kenmerk_key, "O", {getFiles: true});
var km_aantal = bestanden.files.length;
for (i=0; i<km_aantal; i++)
{
bijlagen_lijst.push(bestanden.files[i].name);
}
bijlagen_aantal += km_aantal;
}
oRs_k.MoveNext();
}
oRs_k.Close();
}
return (flexval ? safe.html(flexval.replace(/\r/g, "\n")+ "\n") : "")
+ ( bijlagen_aantal > 0
? "<span title='" + safe.htmlattr(bijlagen_lijst.join("\n")) + "'>"
+ safe.html(bijlagen_oms) + ": " + bijlagen_aantal
+ "</span>"
: ""
);
}
function fncolLaatsteActieDatum(oRs)
{
var laatste_actie = oRs("recentdatum").Value != null? new Date(oRs("recentdatum").Value) : null;
var datumbegin = new Date(oRs("mld_opdr_datumbegin").Value);
if (excel)
return laatste_actie != null? laatste_actie : datumbegin;
else
return toDateString(laatste_actie != null? laatste_actie : datumbegin);
}
function fncolLaatsteActieTijd(oRs)
{
var laatste_actie = oRs("recentdatum").Value != null? new Date(oRs("recentdatum").Value) : null;
var datumbegin = new Date(oRs("mld_opdr_datumbegin").Value);
return toTimeString(laatste_actie != null? laatste_actie : datumbegin);
}
var rst = new ResultsetTable({ keyColumn: "mld_opdr_key",
ID: "opdrtable",
tabs_code: "opdr_list-" + urole,
rowClass: fnrowClass,
rowData: fnrowData,
rowActionEnabler: fnrowActionEnabler,
sql: sql,
flexModule: "OPDR",
flexId: "mld_opdr_key",
flexGroupId: "mld_typeopdr_key", // Flexkenmerken verschillen per opdrachttype (mld_typeopdr_key)
filterParams: params,
outputmode: outputmode,
title: (!params.opdr_parent_key ? L("lcl_orders") : L("frm_vervolgopdrlistframe")),
inline: inline,
summaryCalc: (!tiny ? fnsummaryCalc : null),
summaryShow: (!tiny ? fnsummaryShow : null),
summaryId : (!tiny && mld_key ? mld_key : null),
endText: fnendText,
showAll: showall,
buttons: buttons
});
// Gebruik (!tiny) om bepaalde kolommen in compacte mode niet te tonen,
// handig voor (meldings)info die al in een ander frame staat
var hasMLDFOBO = user.has(["WEB_MLDBOF","WEB_MLDFOF"]);
var hasFINFOBO = user.has(["WEB_FINBOF","WEB_FINFOF"]); // moet misschien nog anders
var nrtooltip = (!tiny ? "mld_typeopdr_omschrijving" : null);
// Wat bolletjes en markeringen
rst.addColumn(new Column({caption: (outputmode == 0 ? I("fa-bell", { fastyle: "fas" }) : L("lcl_mld_actiecode")), content: fncolActiecode, colName: "fncolActiecode", colText: L("lcl_mld_actiecode"), align: "center"}));
if (S("mld_opdracht_flags") > 0) // mag ook best voor de fe (uitvoerende) zichtbaar toch?
rst.addColumn(new Column({caption: (outputmode == 0 ? I("fa-fclt-flag0") : L("lcl_opdr_flags")), colText: L("lcl_opdr_flags"), content: fncolFlags, colName: "fncolFlags", align: "center"}));
rst.addColumn(new Column({caption: I("fa-exclamation-triangle"), colText: L("lcl_mld_urg"), content: fncolSpoed, colName: "fncolSpoed"}));
// de identificatie
rst.addColumn(new Column({caption: L("lcl_shared_order"), content: fncolKey, colName: "fncolKey", tooltip: nrtooltip, hasActions: true }));
rst.addColumn(new Column({caption: L("lcl_opdr_id"), content: "mld_opdr_id", combine: true, showDefault: !tiny }));
// wat typering
if (!singleOT) // niet nodig als je uberhaupt maar 1 type hebt
rst.addColumn(new Column({caption: L("lcl_mld_typeopdr"), content: "mld_typeopdr_omschrijving", showDefault: !tiny }));
if (excel)
{
rst.addColumn(new Column({caption: L("lcl_vakgroup_type"), content: "ins_srtdiscipline_omschrijving"}));
rst.addColumn(new Column({caption: L("lcl_vakgroup"), content: "ins_discipline_omschrijving"}));
}
rst.addColumn(new Column({caption: (cnt_key? L("lcl_cnt_service_name") : L("lcl_complain")), content: "mld_stdmelding_omschrijving", showDefault: tiny }));
// De herkomst, purpose-setting: {0=no | 1=print only | 2=view only | 3=both}
rst.addColumn(new Column({caption: L("lcl_requestor"), content: "aanvrager", purpose: S("mld_opdr_show_requestor_in_list"), showDefault: !tiny }));
// de plaats
if (anyalg && !tiny)
{
rst.addColumn(new Column({caption: L("lcl_district"), content: "alg_district_omschrijving", purpose: PRINTING_ONLY}));
// zou aardig zijn om hier nog kolommen voor locatie, gebouw, verdieping, ruimte voor PRINTING_ONLY op te nemen
rst.addColumn(new Column({caption: L("lcl_place"), content: "plaatsmelding"}));
}
// betreffende objecten combined
if (params.anyins && !tiny)
{
rst.addColumn(new Column({caption: L("lcl_mld_nr_objects"), content: fncolObject, colName: "fncolObject", combine: anyalg}));
}
// verder met de plaats
if (anyalg && !tiny)
{
if (S("mld_print_loc_address") == 1) // serviceadres op de print
{
rst.addColumn(new Column({caption: L("lcl_prs_address_bezoek_adres"), content: "alg_locatie_adres", purpose: PRINTING_ONLY}));
rst.addColumn(new Column({caption: L("lcl_prs_address_bezoek_plaats"), content: "alg_locatie_plaats", purpose: PRINTING_ONLY}));
}
if (S("mld_print_loc_address") == 2 || S("mld_print_loc_address") == 3)
{
rst.addColumn(new Column({caption: L("lcl_prs_address_bezoek_adres"), content: "alg_locatie_adres", combine: false}));
rst.addColumn(new Column({caption: L("lcl_prs_address_bezoek_postcode"), content: "alg_locatie_postcode", combine: false}));
if (S("mld_print_loc_address") == 2)
rst.addColumn(new Column({caption: L("lcl_estate_gebouw_man_name"), content: "alg_gebouw_naam", colName: "alg_gebouw_naam", combine: true}));
else // dus S("mld_print_loc_address") == 3
rst.addColumn(new Column({caption: L("lcl_prs_address_bezoek_plaats"), content: "alg_locatie_plaats", colName: "alg_locatie_plaats", combine: true}));
}
}
// de opdrachttekst
rst.addColumn(new Column({caption: L("lcl_mld_opdr_description"), content: "mld_opdr_omschrijving"}));
if (!mld_melding.isTemplate)
{ // timing and statusses
rst.addColumn(new Column({caption: L("lcl_orderdate"), content: "mld_opdr_datumbegin", datatype: "date", nowrap: true, showDefault: !tiny }));
rst.addColumn(new Column({caption: L("lcl_time"), content: "mld_opdr_datumbegin", colName: "mld_opdr_datumbegin_time", datatype: "time", combine: true, nomidnight: true, showDefault: !tiny }));
// statussen; tooltips op voorwaardelijke en gecombineerde kolommen is ingewikkeld, alleen de tooltip van de eerste waarde doet wat, daarom allemaal
rst.addColumn(new Column({caption: L("lcl_mld_mldstatus"), content: fnMldStatus, colName: "fnMldStatus", showDefault: !tiny }));
rst.addColumn(new Column({caption: L("lcl_mld_opdr_status"), content: fnOpdrStatus, colName: "fnOpdrStatus", combine: !tiny }));
// Notities
if (!frontend)
rst.addColumn(new Column({caption: I("fa-comment")+"&nbsp;"+L("lcl_mld_note"), colText: L("lcl_mld_note"), content: fncolNote, colName: "fncolNote"}));
// Plandata
rst.addColumn(new Column({caption: L("lcl_opdr_plandate"), content: "mld_opdr_plandatum", datatype: "date", nowrap: true}));
rst.addColumn(new Column({caption: L("lcl_time"), content: "mld_opdr_plandatum", colName: "mld_opdr_plandatum_time", datatype: "time", combine: true, nomidnight: true}));
rst.addColumn(new Column({caption: L("lcl_opdr_plandate2"), content: "mld_opdr_plandatum2", datatype: "date", nowrap: true, showDefault: (S("mld_use_plandate2") & 1) }));
rst.addColumn(new Column({caption: L("lcl_time"), content: "mld_opdr_plandatum2", colName: "mld_opdr_plandatum2_time", datatype: "time", combine: true, nomidnight: true, showDefault: (S("mld_use_plandate2") & 1) }));
rst.addColumn(new Column({caption: L("lcl_opdr_enddate"), content: "mld_opdr_einddatum", datatype: "date", nowrap: true}));
rst.addColumn(new Column({caption: L("lcl_time"), content: "mld_opdr_einddatum", colName: "mld_opdr_einddatum_time", datatype: "time", combine: true, nomidnight: true}));
}
// de uitvoerder enzo (onderdrukken indien meegegeven)
if (params.handler_key > 0)
rst.addColumn(new Column({caption: L("lcl_handler"), content: "uitv_naam", purpose: PRINTING_ONLY}));
else
rst.addColumn(new Column({caption: L("lcl_handler"), content: "uitv_naam"}));
if (params.behandel_key_arr && params.behandel_key_arr.length)
rst.addColumn(new Column({caption: L("lcl_mld_behandelaar"), content: "behandelaar", colName: "behandelaar", combine: (!params.handler_key > 0), purpose: PRINTING_ONLY}));
else
rst.addColumn(new Column({caption: L("lcl_mld_behandelaar"), content: "behandelaar", colName: "behandelaar", combine: (!params.handler_key > 0)}));
rst.addColumn(new Column({caption: L("lcl_mld_contactpersoon"), content: "contactpersoon"}));
// Contractnummer. Erg zinloos als frame onder het contract, als print dan maar
if (cnt_key)
{
rst.addColumn(new Column({caption: L("lcl_cnt_contractnr"), content: "cnt_contract_nummer", purpose: PRINTING_ONLY}));
rst.addColumn(new Column({caption: L("lcl_cnt_intern_nr"), content: fncolContractnr, colName: "fncolContractnr", purpose: PRINTING_ONLY}));
}
rst.addColumn(new Column({ caption: L("lcl_mld_inf_Opmerking"), content: "mld_opdr_opmerking"}));
if (!mld_melding.isTemplate)
{ // Bedragen, geld enz
rst.addColumn(new Column({ caption: L("lcl_account"), content: "kpstring", showDefault: (groepering_key == 16) }));
rst.addColumn(new Column({ caption: L("lcl_hours"), content: "mld_opdr_uren", datatype: "currency", total: true, showDefault: (tiny || groepering_key == 16) }));
if (params.includeHours) {
rst.addColumn(new Column({caption: L("lcl_mlduren_booked"), content: "mld_opdr_uren_besteed", datatype: "currency", total: true}));
}
rst.addColumn(new Column({ caption: L("lcl_hour_rate") + "&nbsp;(" + L("lcl_valutasign") + ")", content: "mld_opdr_uurloon", datatype: "currency", total: true, showDefault: (groepering_key == 16) }));
rst.addColumn(new Column({ caption: L("lcl_mater_cost") + "&nbsp;(" + L("lcl_valutasign") + ")", content: "mld_opdr_materiaal", datatype: "currency", total: true, showDefault: (groepering_key == 16) }));
rst.addColumn(new Column({ caption: L("lcl_correct") + "&nbsp;(" + L("lcl_valutasign") + ")", content: "correctie", datatype: "currency", total: true, showDefault: (groepering_key == 16) }));
rst.addColumn(new Column({ caption: L("lcl_opdr_kosten") + "&nbsp;(" + L("lcl_valutasign") + ")", colText: L("lcl_opdr_kosten"), content: "mld_opdr_kosten", datatype: "currency", total: true, showDefault: (!tiny || groepering_key == 16) }));
}
// Voor de profs: wie is de fiatteur?
if (fronto || backo)
rst.addColumn(new Column({ caption: L("lcl_mld_approver"), content: fncolFiatteur, colName: "fncolFiatteur" }));
// Gefactureerd bedrag
if (hasFINFOBO) // zou ik zeggen
rst.addColumn(new Column({ caption: L("lcl_mld_invoiced") + "&nbsp;(" + L("lcl_valutasign") + ")", content: "gefactureerd", datatype: "currency", total: true, showDefault: (groepering_key == 16) }));
// flex
if (params.anyflex)
{
rst.addColumn(new Column({caption: flexlabel, content: fncolFlexBijlagen, colName: "fncolFlexBijlagen"}));
}
// laatste actiedatum. Groepering opdracht en opdracht+kosten hebben de datum niet berekend dus onderdrukken
if (!frontend && groepering_key != 2 && groepering_key != 16 && !mld_melding.isTemplate)
{
rst.addColumn(new Column({caption: L("lcl_mld_laatste_actie"), content: fncolLaatsteActieDatum, colName: "fncolLaatsteActieDatum", datatype: "date", nowrap: true}));
rst.addColumn(new Column({caption: L("lcl_time"), content: fncolLaatsteActieTijd, colName: "fncolLaatsteActieTijd", datatype: "time", nowrap: true, combine: true}));
}
// actions
rst.addAction({ action: "opdr_edit", caption: L("lcl_details"), isDefault: true });
if (!mld_melding.isTemplate)
{
if (urole=="fo" || urole =="bo" || urole =="b2")
{
if (!mld_key || addallowed)
rst.addAction({ action: "opdr_copy", caption: L("lcl_mld_copy"), enabler: "eCopy" });
if (S("mld_opdr_close") == 0)
{
if (tiny)
rst.addAction({ action: "opdr_close_one", caption: L("lcl_close"), enabler: "eClose", multi: false });
else
rst.addAction({ action: "opdr_close", caption: L("lcl_close"), enabler: "eClose", multi: true, multiOnce: true });
}
rst.addAction({ action: "opdr_accept", caption: L("lcl_accept"), enabler: "eAccept", multi: true, multiOnce: true });
rst.addAction({ action: "opdr_finish", caption: L("lcl_opdr_closekosten"), enabler: "eFinish", multi: true, multiOnce: true });
rst.addAction({ action: "opdr_verwerk", caption: L("lcl_mld_opdr_verwerk"), enabler: "eVerwerk", multi: true, multiOnce: true });
}
rst.addAction({ action: "opdr_add_invoice", caption: L("lcl_mld_invoicing"), enabler: "eAddFactuur" });
rst.addAction({ action: "opdr_list_invoice", caption: L("lcl_mld_invoicing"), enabler: "eListFactuur" });
}
var count = rst.processResultset();
if (!excel && !print)
{
%>
<!-- LEGENDA -->
<script type="text/javascript">
<% if (Request.ServerVariables("REQUEST_METHOD") == "POST") { %>
if (FcltMgr._frmaccessible(parent) && FcltMgr._safe_parent() !== window && typeof parent.window.doSubmit === "function") {
var fnReloadByPost = parent.window.doSubmit.bind(null, 0);
}
<% } %>
$(function() {
if ($(".clickParent").parent().attr("click")) // to fix infinite click events in case there is no click event on the parent
$(".clickParent").parent().on("click", function(e) { e.stopPropagation(); $(this).find("> .clickParent").trigger("click"); });
});
<% if (mld_key > 0 && mld_melding) {
%>
function add_opdracht(canAccept)
{
var act_key = <%=mld_melding.act_key%>;
if (act_key > -1)
{ // opdracht bij meldingsjabloon
var addurl = "appl/mld/mld_opdr.asp?urole=bo&mld_key=<%=mld_key%>&act_key=" + act_key;
FcltMgr.openDetail(addurl, L("lcl_add"));
}
else
{
var addurl = "appl/mld/mld_opdr.asp?urole=bo&mld_key=<%=mld_key%>";
if (canAccept) // we negeren S("mld_accept_confirm") verder en slaan accept-dialoog over.
{
doAccept( { mld_key : mld_key,
prefix : "<%=safe.jsstring(mld_melding.prefix)%>",
autoConfirm : false
},
function()
{
if (window.parent.mldframe && window.parent.mldframe.mld_melding_reload)
window.parent.mldframe.mld_melding_reload(mld_key)
FcltMgr.openDetail(addurl, L("lcl_add"));
}
);
}
else
FcltMgr.openDetail(addurl, L("lcl_add"));
}
}
<% }
%>
function openOpdrLegenda(id)
{
params = { width: 250,
minWidth: 250,
//height: 130,
minHeight: 10,
resizable: false,
position: {my: "right top", at: "right top+30"},
title: L("lcl_mld_legenda"),
create: FcltMgr.fnCreateCloseButton("div#legenda"+(id || ""))
}
$('div#legenda'+(id || "")).dialog(params).dialog('open');
FcltMgr.resized();
}
</script>
<div id="legenda<%=(inline ? mld_key : "")%>" style="display:none; line-height: 30px;">
<table id="opdrachtlegenda">
<tr>
<td title="<%=safe.htmlattr(L("lcl_mld_legenda_normal_tt"))%>"><%= L("lcl_mld_legenda_normal") %></td>
</tr>
<tr class="expired2">
<td title="<%=safe.htmlattr(L("lcl_mld_legenda_expired2_tt"))%>"><%= L("lcl_mld_legenda_expired2") %></td>
</tr>
<tr class="updated">
<td title="<%=safe.htmlattr(L("lcl_mld_legenda_updated_tt"))%>"><%= L("lcl_mld_legenda_updated") %></td>
</tr>
<tr class="recentlychangedopdr">
<td title="<%=safe.htmlattr(L("lcl_mld_legenda_unviewed_tt"))%>"><%= L("lcl_mld_legenda_unviewed") %></td>
</tr>
<tr class="expired2 updated">
<td title="<%=safe.htmlattr(L("lcl_mld_legenda_expired2_tt"))%>/<%=safe.htmlattr(L("lcl_mld_legenda_updated_tt"))%>"><%= L("lcl_mld_legenda_expired2") %>/<%= L("lcl_mld_legenda_updated") %></td>
</tr>
<% // Vlag 0 tonen we niet
for (var flagkey = 1; flagkey < S("mld_opdracht_flags"); flagkey++)
{ %>
<tr><td>
<span class="opdrflag<%=flagkey%>">
<%=I("fa-fclt-flag")%>
</span>
&nbsp;<%=L("lcl_opdr_flag"+flagkey)%></td></tr><%
}
%>
</table>
</div>
<%
}
%>
</body>
</html>
<%
}
%>