FSN#39567: Van MJOB naar MJOP/R. Zoiets bedoelde ik :-)

svn path=/Website/trunk/; revision=34915
This commit is contained in:
Peter Feij
2017-08-11 13:00:48 +00:00
parent 94e80f19d0
commit 6e7398ddad
2 changed files with 73 additions and 145 deletions

View File

@@ -4,12 +4,13 @@
$Id$
File: mjb_search_list_curr.asp
Description:
Description: Overview of the execution and progression of the approved MJOB tasks
Shows all active and frozen budgets until they are closed.
Parameters:
Context:
Note:
Note: Vlotte kopie van mjb_search_list. Hier kan tzt nog wel wat opgeruimd worden
*/ %>
<!-- #include file="../Shared/common.inc" -->
@@ -20,9 +21,6 @@
FCLTHeader.Requires({plugins: ["jQuery"],
js : ["jquery-ui.js", "../ins/ins_list.js"]}); // Voor slepen en acties.
var urole = getQParamSafe("urole", ""); // Indien niet meegegeven, veronderstel dan frontend gebruik
// FORM parameters: de waarde indien aanwezig, anders null
// Vaak is een lege selectie ook een -1, dus dan is-ie wel aanwezig, maar hoeft niet
// als filter te worden toegepast. Dan is null dus gelijk aan -1, qua betekenis,
@@ -51,6 +49,10 @@ var hasReadALGUSE = authparamsALGUSE && authparamsALGUSE.ALGreadlevel < 9 && aut
var authparamsALGMAN = user.checkAutorisation("WEB_ALGMAN", true);
var hasReadALGMAN = authparamsALGMAN && authparamsALGMAN.ALGreadlevel < 9 && authparamsALGMAN.PRSreadlevel < 9;
// Rechten om de realisatie te bekijken
var authparamsMLD = user.checkAutorisation("WEB_MLDBOF", true);
var hasReadMLD = authparamsMLD && authparamsMLD.ALGreadlevel < 9 && authparamsMLD.PRSreadlevel < 9;
var mjb_start_year = S("mjb_start_year");
var mjb_freeze_year = S("mjb_freeze_year");
@@ -108,16 +110,12 @@ var transitParam = buildTransitParam(["disc", "srtgroep", "srtdeel", "srtcontrol
%>
<html>
<head>
<style>
div#timetip {position:absolute;border:1px solid #666;background-color:#fff;padding:2px;z-index:999;display:none;}
</style>
<%
FCLTHeader.Generate({ outputmode: outputmode });
if (outputmode == 0) {
%>
<script type="text/javascript">
var urole = "<%=urole%>";
var fulldetails = <%=fulldetails? 1 : 0%> == 1;
function naargebouw(bld_key, deze)
@@ -135,6 +133,12 @@ var transitParam = buildTransitParam(["disc", "srtgroep", "srtdeel", "srtcontrol
FcltMgr.openDetail(url, $(deze).text());
}
function naarmelding(isdc_key, deze)
{
var url = "appl/mld/mld_melding.asp?kto_type=T&kto_key="+isdc_key;
FcltMgr.openDetail(url, $(deze).text());
}
function exception(ins_key, srtcont_key, scen_key, ttl)
{
var url = "../ins/ins_xcp.asp?ins_key=" + ins_key + "&srtcont_key=" + srtcont_key + "&scen_key=" + scen_key + "&urole=bo";
@@ -146,17 +150,10 @@ var transitParam = buildTransitParam(["disc", "srtgroep", "srtdeel", "srtcontrol
%>
</head>
<body id="listbody">
<div id='timetip'></div>
<%
// De datum (jaar) van de *eerstvolgende* onderhoudsbeurt volgt uit:
// Datum laatste (/laatste geplande) inspectie
// of anders: ins_deel_aanmaak
// waarbij verondersteld wordt dat inspecties in het verleden wel zijn uitgevoerd
// SQL van soort controles die nog een bevroren nog lopende taak hebben in het freeze jaar en eventuele jaren ervoor.
var sql_from = " FROM ins_deelsrtcontrole dsc"
+ " , ins_v_defined_inspect_xcp xcp"
+ " , ins_v_aanwezigdeel dl"
@@ -243,7 +240,7 @@ var transitParam = buildTransitParam(["disc", "srtgroep", "srtdeel", "srtcontrol
+ sql_where;
var sql_list_years = "SELECT LISTAGG(freezedate, ',') WITHIN GROUP (ORDER BY freezedate) listfdjaar"
+ " FROM (" + sql_years + ")";
+ " FROM (" + sql_years + ")";
var oRs = Oracle.Execute(sql_list_years);
var listfdjaar = oRs("listfdjaar").Value || -1;
if (listfdjaar == -1)
@@ -277,21 +274,26 @@ var transitParam = buildTransitParam(["disc", "srtgroep", "srtdeel", "srtcontrol
if (ins_xcp_active_cost & 8) costarray.push("COALESCE(xcp.ins_srtcontrole_materiaal, 0)");
var sqlcost = "";
if (costarray.length > 0)
sqlcost = "(" + costarray.join(" + ") + ") *";
sqlcost = "(" + costarray.join(" + ") + ") *";
// vermenigvuldigingsfactor om zo nodig incl BTW te krijgen
var btw = (incbtw
? " (1 + COALESCE((SELECT fbtw.fin_btwtabelwaarde_perc"
+ " FROM fin_btwtabelwaarde fbtw"
+ " WHERE fbtw.fin_btwtabelwaarde_key = xcp.fin_btwtabelwaarde_key) / 100"
+ " , 0)) *"
: "")
+ " , 0)) "
: "1")
// om het wat leesbaar te houden
// om het wat leesbaar te houden een functietje
function SumTaskOrdersSQL(fase)
{
// fase: 1 klare opdrachten, 0: lopende opdrachten
// MLD: Geraamd: Uitgegeven(5), Technisch voltooid(6) en Geaccepteerd(8)
// Definitief: Verwerkt(7) en Kosten voltooid(9)
// Geraamd: Uitgegeven(5), Technisch voltooid(6) en Geaccepteerd(8)
// Definitief: Verwerkt(7) en Kosten voltooid(9)
// TODO: uitwerken hoe dat precies met BTW zit; als de Kostensoort van de melding/opdracht Incl BTW is,
// dan is het bedrag van mld_opdr_kosten in principe al met BTW en zou mld_opdr_kosten_btw (nieuw)
// het btw-deel daarvan voorstellen. Dan hoef je dat er dus niet meer bij op te tellen. Nu kijken we
// hier nog helemaal niet naar de kostensoort, en de precieze werken is tbd. Te zijner tijd.
var osql = "SELECT SUM(mld_opdr_kosten)" + (incbtw ? "+SUM(mld_opdr_kosten_btw)" : "")
+ " FROM mld_opdr o, mld_melding m"
+ " WHERE m.mld_melding_key = o.mld_melding_key"
@@ -343,16 +345,11 @@ var transitParam = buildTransitParam(["disc", "srtgroep", "srtdeel", "srtcontrol
+ " , ins_srtcontroledl_xcp_key"
+ " , COALESCE(dsc.ins_deelsrtcontrole_datum, dsc.ins_deelsrtcontrole_freezedate) freezedatum"
+ " , EXTRACT(YEAR FROM COALESCE(ins_deelsrtcontrole_datum, ins_deelsrtcontrole_freezedate)) freezejaar"
+ " , COALESCE (xcp.ins_deel_aantal *"
+ " " + sqlcost
+ " (COALESCE(xcp.ins_srtcontrole_percentage, 100) / 100) *"
+ " " + btw
+ " POWER(1 , EXTRACT(YEAR FROM COALESCE(ins_deelsrtcontrole_datum, ins_deelsrtcontrole_freezedate)) - EXTRACT(YEAR FROM SYSDATE))" // Bevriezen van het kalenderjaar S("mjb_freeze_year").
+ " , 0) begrootbedrag"
+ " , EXTRACT(YEAR FROM COALESCE(ins_deelsrtcontrole_datum, ins_deelsrtcontrole_freezedate)) freezedatejaar"
+ " , " + btw + " dsc.ins_deelsrtcontrole_freezecost ins_deelsrtcontrole_freezecost"
+ " , " + SumTaskOrdersSQL(1) + "besteed"
+ " , " + SumTaskOrdersSQL(0) + "geraamd"
+ " , " + btw + " * dsc.ins_deelsrtcontrole_freezecost ins_deelsrtcontrole_freezecost"
+ " , " + btw + " * dsc.ins_deelsrtcontrole_freezecost begrootbedrag" // hetzelfde, maar dan buiten de pivot
+ " , " + SumTaskOrdersSQL(1) + "besteedbedrag"
+ " , " + SumTaskOrdersSQL(0) + "geraamdbedrag"
+ sql_from
+ sql_where
+ " AND EXTRACT(YEAR FROM ins_deelsrtcontrole_freezedate) IN (" + listfdjaar + ")";
@@ -379,6 +376,8 @@ var transitParam = buildTransitParam(["disc", "srtgroep", "srtdeel", "srtcontrol
? " , ins_deel_opmerking"
: "")
+ " , SUM(ins_deelsrtcontrole_freezecost) ins_deelsrtcontrole_freezecost"
+ " , SUM(besteedbedrag) besteedbedrag"
+ " , SUM(geraamdbedrag) geraamdbedrag"
+ " , SUM(begrootbedrag) begrootbedrag"
+ " , freezedatejaar"
+ " FROM (" + sql_cost + ")"
@@ -397,24 +396,8 @@ var transitParam = buildTransitParam(["disc", "srtgroep", "srtdeel", "srtcontrol
+ " FROM (" + sql_cost + ") c"
+ " PIVOT (SUM(ins_deelsrtcontrole_freezecost) FOR freezedatejaar IN (" + listfdjaar + "))";
var sqlArray = [];
if (mjbMoved) // Aangepast.
{
sqlArray.push("isPlanned = 1");
}
if (mjbFreezed) // In behandeling (Bevroren).
{
sqlArray.push("ins_deelsrtcontrole_freezedate IS NOT NULL AND ins_deelsrtcontrole_status = 2");
}
if (mjbXcped) // Aangepast.
{
sqlArray.push("ins_srtcontroledl_xcp_key IS NOT NULL AND ins_scenario_key = 1");
}
if (sqlArray.length)
sql += " WHERE (" + sqlArray.join(" OR ") + ")";
sql += " ORDER BY 1";
for (var i = 2; i <= groupby; i++)
{
sql += "," + String(i)
@@ -438,8 +421,6 @@ var transitParam = buildTransitParam(["disc", "srtgroep", "srtdeel", "srtcontrol
data.insKey = oRs("ins_deel_key").Value;
data.insSrtControleKey = oRs("ins_srtcontrole_key").Value;
data.insDeelSrtContrKey = oRs("ins_deelsrtcontrole_key").Value? oRs("ins_deelsrtcontrole_key").Value : -1;
//data.insNexdate0 = new Date(oRs("org_nexdate_0").Value).getFullYear(); // Eerstaankomende vandaag of in de toekomst.
//data.insCtrControleType = oRs("ctr_controle_type").Value;
data.insScenKey = oRs("ins_scenario_key").Value;
}
@@ -448,47 +429,18 @@ var transitParam = buildTransitParam(["disc", "srtgroep", "srtdeel", "srtcontrol
function fnrowClass(oRs)
{
if (!fulldetails)
return "";
//var scen_key = oRs("ins_scenario_key").Value;
var lclass = oRs("ins_srtcontroledl_xcp_key").Value != null? "mjbxcp" : "mjbstd";
//if (scen_key > 1)
// lclass += " scenerized1";
//if (oRs("isPlanned").Value == 1)
// lclass += " mjbplanned";
return lclass;
// Ooit nog eens: een gradient oid van groen naar rood evenredig met de procentuele uitnutting
var busy = oRs("besteedbedrag").Value + oRs("geraamdbedrag").Value != 0;
var saldo = oRs("begrootbedrag").Value - oRs("besteedbedrag").Value - oRs("geraamdbedrag").Value;
var lclass = "";
if (saldo < 0)
lclass = "mjbexpired";
else
lclass= (busy ? "mjbbusy" : "mjbwaiting");
return lclass;
}
function fnrowActionEnabler(oRs)
{
var data = {};
//var eShowInsp = false;
var ePlan = false;
var eStart = false;
var eClose = false;
var eFinish = false;
var eAddScen = false;
if (fulldetails)
{ // Functie ins.func_enabled_deel kost tijd om voor elke regel uit te voeren.
// Query uit ins.func_enabled_deel samenvoegen met query van dit overzicht is bijna niet te doen.
// Inspectie acties alleen zichtbaar in het overzicht gegroepeerd naar Taken. Het gebouw filter is dan al vaak ingevuld.
var this_ins = ins.func_enabled_deel(oRs("ins_deel_key").Value,
{ srtcont_key: oRs("ins_srtcontrole_key").Value,
deelsrtcont_key: oRs("ins_deelsrtcontrole_key").Value? oRs("ins_deelsrtcontrole_key").Value : -1,
scen_key: oRs("ins_scenario_key").Value
});
ePlan = this_ins.canInspPlan;
eStart = this_ins.canInspStart;
eClose = this_ins.canInspClose;
eFinish = this_ins.canInspFinish;
eFreeze = this_ins.canInspFreeze;
eAddScen = true;
}
var data = {ePlan: ePlan, eStart: eStart, eClose: eClose, eFinish: eFinish, eFreeze: eFreeze};
return data;
}
function fnGebouw(oRs)
{
if (hasReadALGUSE || hasReadALGMAN)
@@ -524,7 +476,8 @@ var transitParam = buildTransitParam(["disc", "srtgroep", "srtdeel", "srtcontrol
oRs("ins_srtcontrole_key").Value,
oRs("ins_scenario_key").Value,
safe.jsstring(oRs("ins_deel_omschrijving").Value));
return "<span>{1}</span>" // TODO, maar we willen zeker niet kunnen overrulen. Naar de bijbehorende melding.asp if mjb_operation_external
// return "<span class='details' onclick='{0}'>{1}</span>" // TODO, maar we willen zeker niet kunnen overrulen, wel zien. ins_xcp moet dat frozen zijn herkennen
return "<span>{1}</span>"
.format(safe.htmlattr(fncall),
safe.html(oRs("ins_srtcontrole_omschrijving").Value));
}
@@ -562,23 +515,18 @@ var transitParam = buildTransitParam(["disc", "srtgroep", "srtdeel", "srtcontrol
{
if (oRs(jaar).Value == null)
return "";
var v = Math.round(oRs(jaar).Value);
var v_gb = Math.round(oRs("begrootbedrag").Value);
if (v == 0) // (jaar >= vervaljaar) //
if (authparamsMLD) // dan kun je klikken naar de melding
{
var vervaljaar = oRs("vervaljaar").Value;
var afbouwtijd = oRs("afbouwtijd").Value || 0;
if (vervaljaar != null && jaar > vervaljaar - afbouwtijd) // Als 2022 vervaljaar is en afbouwtijd is 2 jaar, dan 2020 nog 0 tonen.
return "";
}
//if (v != v_gb) {
if (v == 0) {
if (outputmode == 0) {
v = "<span class='mjborgbedrag' title='{1}'>{0}</span>".format(safe.curr(v, true), L('lcl_valutasign') + safe.curr(v_gb, true));
} else {
v = "{0}".format(safe.curr(v, true));
}
}
// TODO: m<>cht de melding er nog niet zijn dan die laten aanmaken (zoals een melding bij een inspectie)?
var fncall = "naarmelding({0})"
.format(oRs("ins_deelsrtcontrole_key").Value);
return "<span class='details' onclick='{0}'>{1}</span>"
.format(safe.htmlattr(fncall),
safe.curr(v, true));
}
else
return safe.curr(v, true);
}
}
@@ -587,60 +535,34 @@ var transitParam = buildTransitParam(["disc", "srtgroep", "srtdeel", "srtcontrol
{
return function (oRs)
{
if (fulldetails)
{
var vervaljaar = oRs("vervaljaar").Value;
var afbouwtijd = oRs("afbouwtijd").Value || 0;
var freezeclass = "";
if (jaar > vervaljaar - afbouwtijd) // Afzien van taken/vervanging/inspecties. Geen kosten meer.
{
if (vervaljaar != null && afbouwtijd != null && jaar > vervaljaar - afbouwtijd && jaar <= vervaljaar)
return "mjbjaar mjbafbouw" + freezeclass;
else if (vervaljaar != null && jaar > vervaljaar)
return "mjbjaar mjbverval";
}
else
{
var freezejaar = oRs("freezejaar").Value;
if (jaar == freezejaar && oRs("ins_deelsrtcontrole_freezedate").Value != null && oRs("ins_deelsrtcontrole_status").Value == 2)
freezeclass = " mjbfreezed";
}
}
return "mjbjaar" + freezeclass;
return "";
}
}
function fnGeraamdClass(oRs)
{
return "mjbgeraamd";
}
function fnBegrootBedrag(oRs)
{
return safe.curr(Math.round(oRs("begrootbedrag").Value), true);
}
function fnBesteedBedrag(oRs)
{
return safe.curr(Math.round(oRs("besteed").Value), true);
return safe.curr(Math.round(oRs("besteedbedrag").Value), true);
}
function fnGeraamdBedrag(oRs)
{
return safe.curr(Math.round(oRs("geraamd").Value), true);
return safe.curr(Math.round(oRs("geraamdbedrag").Value), true);
}
function fnResteertBedrag(oRs)
{
return safe.curr(Math.round(oRs("begrootbedrag").Value-oRs("besteed").Value-oRs("geraamd").Value), true);
return safe.curr(Math.round(oRs("begrootbedrag").Value-oRs("besteedbedrag").Value-oRs("geraamdbedrag").Value), true);
}
function fnResteertBedragAmount(oRs)
{
return Math.round(oRs("begrootbedrag").Value-oRs("besteed").Value-oRs("geraamd").Value);
return Math.round(oRs("begrootbedrag").Value-oRs("besteedbedrag").Value-oRs("geraamdbedrag").Value);
}
var buttons = [];
//buttons.push({ icon: "plus.png", title: L("lcl_mjb_incl_scen"), action: 'insAddTCScen()' });
//buttons.push({ icon: "plus.png", title: L("lcl_mjb_inst_scen"), action: 'insInstituteScen()' });
buttons.push({ icon: "page_refresh.png", title: L("lcl_refresh"), action: "FcltMgr.reload()" });
buttons.push({ icon: "legenda.png", title: L("lcl_ins_controle_legenda"), action: 'openLegenda()' });
@@ -650,7 +572,6 @@ var transitParam = buildTransitParam(["disc", "srtgroep", "srtdeel", "srtcontrol
rowData: fnrowData,
rowClass: fnrowClass,
//suppressKeyRepeat: "alg_locatie_omschrijving",
rowActionEnabler: fnrowActionEnabler,
totalShow: totalShow,
flexModule: "INS",
multiple: true,
@@ -661,8 +582,6 @@ var transitParam = buildTransitParam(["disc", "srtgroep", "srtdeel", "srtcontrol
buttons: buttons
});
//if (fulldetails && scenario == 1)
// rst.addColumn(new Column({caption: "<span title='{0}'>".format(safe.htmlattr(L("lcl_mjb_scenarios"))) + I("fa-clone") + "</span>", content: fnHasScenario }));
rst.addColumn(new Column({caption: L("lcl_district"), content: "alg_district_omschrijving", purpose: (dist_key > -1 && groupby != 1? PRINTING_ONLY : PRINT_AND_VIEW)}));
if (groupby > 1)
rst.addColumn(new Column({caption: L("lcl_building"), content: fnGebouw }));
@@ -681,7 +600,9 @@ var transitParam = buildTransitParam(["disc", "srtgroep", "srtdeel", "srtcontrol
if (fulldetails)
{
rst.addColumn(new Column({caption: L("lcl_ins_controle_srt"), content: fnSrtcontrole, tooltip: "ins_srtcontrole_opmerking"}));
rst.addColumn(new Column({caption: L("lcl_ins_status"), content: fnStatus})); // PF: twijfel
// PF: deze status wordt pas zinvol wanneer er meerdere statussen kunnen zijn hier
// dus wanneer er een statusfilter oid komt waarmee je ook nog naar de historie kunt, ooit.
//rst.addColumn(new Column({caption: L("lcl_ins_status"), content: fnStatus}));
}
for (var j = 0; j < jaren.length; j++)
{
@@ -690,11 +611,11 @@ var transitParam = buildTransitParam(["disc", "srtgroep", "srtdeel", "srtcontrol
else
var content = fnfnBedrag(String(jaren[j]));
// Het bevroren budget
// Het bevroren budget per jaar
rst.addColumn(new Column({caption: String(L("lcl_mjb_begroot") + " " + jaren[j]),
datatype: "number",
content: content,
columnClass: fnfncolClass(String(jaren[j])), // tdClass dan niet meer nodig.
columnClass: fnfncolClass(String(jaren[j])),
total: true,
fnAmount: fnfnBedragNumber(String(jaren[j]))
}));
@@ -706,14 +627,14 @@ var transitParam = buildTransitParam(["disc", "srtgroep", "srtdeel", "srtcontrol
datatype: "number",
content: fnBesteedBedrag,
total: true,
fnAmount: fnfnBedragNumber("besteed")
fnAmount: fnfnBedragNumber("besteedbedrag")
}));
// De som van de bijbehorende lopende opdrachten
rst.addColumn(new Column({caption: L("lcl_mjb_geraamd"),
datatype: "number",
content: fnGeraamdBedrag,
total: true,
fnAmount: fnfnBedragNumber("geraamd")
fnAmount: fnfnBedragNumber("geraamdbedrag")
}));
// het saldo budget-besteed-geraamd
rst.addColumn(new Column({caption: L("lcl_mjb_resteert"),

View File

@@ -1871,7 +1871,7 @@ span.expired2 {
background: linear-gradient(to top, rgba(255, 254, 156, 1), rgba(255, 254, 156, 0.8) 100%); /* Standard syntax */
color: #9C6500;
}
.cntopzeg td, .expired2 td {
.cntopzeg td, .expired2 td, .mjbexpired td {
background: linear-gradient(to top, rgba(255, 199, 207, 1), rgba(255, 199, 207, 0.8) 50%); /*#FFC7CE*/
color: #9C0006;
}
@@ -4498,6 +4498,13 @@ td.kpidetails {
.mjbxcp td {
opacity: 1.0;
}
.mjbbusy td{
}
.mjbwaiting td {
background-color: #F0F0FA;
}
span.mjborgbedrag {
color: #ccc;
font-size: 0.9em;