1090 lines
54 KiB
C++
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")+" "+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") + " (" + L("lcl_valutasign") + ")", content: "mld_opdr_uurloon", datatype: "currency", total: true, showDefault: (groepering_key == 16) }));
|
|
rst.addColumn(new Column({ caption: L("lcl_mater_cost") + " (" + L("lcl_valutasign") + ")", content: "mld_opdr_materiaal", datatype: "currency", total: true, showDefault: (groepering_key == 16) }));
|
|
rst.addColumn(new Column({ caption: L("lcl_correct") + " (" + L("lcl_valutasign") + ")", content: "correctie", datatype: "currency", total: true, showDefault: (groepering_key == 16) }));
|
|
rst.addColumn(new Column({ caption: L("lcl_opdr_kosten") + " (" + 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") + " (" + 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>
|
|
<%=L("lcl_opdr_flag"+flagkey)%></td></tr><%
|
|
}
|
|
%>
|
|
</table>
|
|
</div>
|
|
<%
|
|
}
|
|
%>
|
|
</body>
|
|
</html>
|
|
<%
|
|
}
|
|
%>
|