Files
Facilitor/APPL/MJB/mjb_search_list.asp
Maykel Geerdink 52207d8d17 FSN#33999: Realisatie TMJ module voor TobiasAX obv Inspectiemodule.
svn path=/Website/trunk/; revision=30490
2016-09-01 09:43:23 +00:00

845 lines
39 KiB
Plaintext

<%@language = "javascript" %>
<% /*
$Revision$
$Id$
File: mjb_search_list.asp
Description:
Parameters:
Context:
Note:
*/ %>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/resultset_table_v2.inc" -->
<!-- #include file="../Shared/json2.js" -->
<!-- #include file="../ins/ins.inc" -->
<%
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,
// Vandaar dat een default van -1 ipv null ook mag
// In eerste instantie identificeren we elk veld gewoon 1-op-1.
var outputmode = getQParamInt("outputmode", 0); // 0 = screen, 1 = print, 2 = excel etc
var print = (outputmode == 1 || outputmode == 5);
var excel = (outputmode == 2 || outputmode == 6);
var showall = getQParamInt("showall", 0) == 1;
// Er zijn INSUSE en CTRUSE rechten nodig.
var autfunctionINSUSE = "WEB_INSUSE";
var authparamsINSUSE = user.checkAutorisation(autfunctionINSUSE);
var autfunctionCTRUSE = "WEB_CTRUSE";
var authparamsCTRUSE = user.checkAutorisation(autfunctionCTRUSE);
var authparamsCTRUSE = user.checkAutorisation(autfunctionCTRUSE, true, null, true); // Pessimistic.
var hasReadCTRUSE = authparamsCTRUSE && authparamsCTRUSE.ALGreadlevel < 9 && authparamsCTRUSE.PRSreadlevel < 9;
var hasWriteCTRUSE = authparamsCTRUSE && authparamsCTRUSE.ALGwritelevel < 9 && authparamsCTRUSE.PRSwritelevel < 9;
// Rechten om exception (xcp) waarden van de inspectie/taaak te kunnen zien en om details van het object te kunnen zien.
var autfunctionINSMAN = "WEB_INSMAN";
var authparamsINSMAN = user.checkAutorisation(autfunctionINSMAN, true, null, true); // Pessimistic.
var hasReadINSMAN = authparamsINSMAN && authparamsINSMAN.ALGreadlevel < 9 && authparamsINSMAN.PRSreadlevel < 9;
var hasWriteINSMAN = authparamsINSMAN && authparamsINSMAN.ALGwritelevel < 9 && authparamsINSMAN.PRSwritelevel < 9;
// Rechten om alg (locatie) details te kunnen zien.
var autfunctionALGUSE = "WEB_ALGUSE";
var authparamsALGUSE = user.checkAutorisation(autfunctionALGUSE, true, null, true); // Pessimistic.
var hasReadALGUSE = authparamsALGUSE && authparamsALGUSE.ALGreadlevel < 9 && authparamsALGUSE.PRSreadlevel < 9;
var autfunctionALGMAN = "WEB_ALGMAN";
var authparamsALGMAN = user.checkAutorisation(autfunctionALGMAN, true, null, true); // Pessimistic.
var hasReadALGMAN = authparamsALGMAN && authparamsALGMAN.ALGreadlevel < 9 && authparamsALGMAN.PRSreadlevel < 9;
var groupby = getQParamInt("groupby");
var fulldetails = (groupby == 7); // Geen aggregate, dan kun je van alles manipuleren
var fromyear = getQParamInt("fromyear", new Date().getFullYear());
var toyear = getQParamInt("toyear");
//var reg_key = getQParamInt("regiokey", -1); // Regio
var dist_key = getQParamInt("districtkey", -1);
var loc_key = getQParamInt("locatiekey", -1); // Locatie
var bld_key = getQParamInt("gebouwkey", -1); // Gebouw
var disc_key = getQParamInt("disc", -1);
var srtgroep_key = getQParamInt("srtgroep", -1);
var srtdeel_key = getQParamInt("srtdeel", -1);
var srtcontrole = getQParamIntArray("srtcontrole", []); // Taak
var inflatiepct = getQParamFloat("inflatie", 1.0);
var inflatiefactor = 1 + (inflatiepct / 100);
var frequentie = getQParamIntArray("frequentie", []); // Array met frequenties.
var incbtw = getQParamInt("incbtw", 0) == 1; // Lijst inclusief BTW weergeven
var params = { dist_key: dist_key,
loc_key: loc_key,
bld_key: bld_key,
disc_key: disc_key,
insgroup_key: srtgroep_key,
objsrt_key_arr: srtdeel_key,
mjbgroup: groupby,
mjbtoyear: toyear,
mjbsrtcontr: srtcontrole.join(","),
mjbinfl_pct: inflatiepct,
mjbfreq: frequentie.join(","),
mjbincbtw: incbtw
}
var transitParam = buildTransitParam(["disc", "srtgroep", "srtdeel", "srtcontrole", "inflatie", "frequentie", "incbtw", "toyear"]);
// lcl.set_dialect(1 /* ctr_discipline */, "CTR_DISCIPLINE_KEY");
%>
<html>
<head>
<%
FCLTHeader.Generate({ outputmode: outputmode });
%>
<script type="text/javascript">
var urole = "<%=urole%>";
var fulldetails = <%=fulldetails? 1 : 0%> == 1;
function naargebouw(bld_key, deze)
{
if (fulldetails)
var url = "appl/alg/alg_gebouw.asp?key=" + bld_key;
else
var url = "appl/mjb/mjb_search.asp?autosearch=1&groupby=7<%=transitParam%>&gebouw_key=" + bld_key;
FcltMgr.openDetail(url, $(deze).text());
}
function naardeel(ins_key, deze)
{
var url = "appl/ins/ins_deel.asp?ins_key=" + ins_key + "&urole=bo";
FcltMgr.openDetail(url, $(deze).text());
}
function exception(ins_key, srtcont_key, ttl)
{
var url = "../ins/ins_xcp.asp?ins_key=" + ins_key + "&srtcont_key=" + srtcont_key + "&urole=bo";
FcltMgr.openModalDetail(url, { titel: ttl, callback: <%=bld_key > 0? "FcltMgr.reload ": "null"%> });
}
function moveplan(evt, ins_key, srtcont_key, jaar)
{
FcltMgr.stopPropagation(evt);
if (!jaar)
return;
var data = { savemode: "P", // plan-mode
ins_keys: ins_key,
srtcont_key_arr: srtcont_key,
plandatum: new Date(jaar, 11, 31).getTime(),
mjob: 1
};
protectRequest.dataToken(data);
$.post("../ins/ins_inspect_save.asp"
, data
, <%=bld_key > 0? "FcltCallbackRefresh" : "FcltCallback"%>
, "json"
);
}
$(function ()
{
$('td.mjbjaar').droppable(
{ drop: function(event, ui)
{
$td = $(this);
// Zoek de TH erbij. Daarin staat het drop-jaartal
var $th = $td.closest('table').find('th').eq($td.index()); // werkt omdat we geen colspan's hebben
var row = $td.closest('tr')[0];
var insData = eval("(" + row.getAttribute("ROWDATA") + ")");
moveplan(null, insData.insKey, insData.insSrtControleKey, $th.text());
}
});
$('span.draggable').each(function ()
{
var element = $(this);
element.draggable(
{
scroll: false,
axis: "x",
revert: true
});
});
})
var mjbDeelKeyArray = [];
var mjbSrtContrKeyArray = [];
function dragDropCallback(json, textStatus, tweede)
{
for (var i = 0; i < mjbDeelKeyArray.length; i++)
{
moveplan(null, mjbDeelKeyArray[i], mjbSrtContrKeyArray[i], json.year)
}
FcltCallbackRefresh(json, textStatus);
};
function mjb_dragdrop(rowArray, isMulti)
{
var key;
for (var i = 0; i < rowArray.length; i++)
{
rowdata = eval('(' + rowArray[i].getAttribute("ROWDATA") + ')');
mjbDeelKeyArray.push(rowdata.insKey);
mjbSrtContrKeyArray.push(rowdata.insSrtControleKey);
}
url = "../mjb/mjb_dragdropyear.asp";
FcltMgr.openModalDetail(url, L("lcl_mjb_dragdrop_years"), {callback: dragDropCallback});
}
</script>
</head>
<body id="listbody">
<%
// 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 objecten met hun eerste vervanging
var sql_componenten =
"SELECT e.ins_deel_key"
+ " , e.ins_srtcontroledl_xcp_key"
+ " , e.ins_srtcontrole_key"
+ " , e.ins_srtcontrole_level"
+ " , e.ins_srtcontrole_omschrijving"
+ " , e.ins_srtcontrole_kosten"
+ " , e.ins_srtcontrole_kosten2"
+ " , e.ins_srtcontrole_kosten3"
+ " , e.ins_srtcontrole_materiaal"
+ " , e.ins_srtcontrole_periode"
+ " , e.ins_srtcontrole_percentage"
+ " , e.ins_srtcontrole_opmerking"
+ " , EXTRACT (YEAR FROM COALESCE(c.plandatum"
+ " , COALESCE(c.laatste, e.ins_deel_aanmaak) + e.ins_srtcontrole_periode)) vervangingsjaar"
+ " , e.ins_deel_aantal"
+ " , e.ins_srtcontrole_eind"
+ " , e.ins_srtcontrole_afbouwtijd"
+ " , e.fin_btwtabelwaarde_key"
+ " , e.ins_srtcontroledl_xcp_eind"
+ " FROM (SELECT el.ins_deel_key"
+ " , el.ins_srtcontroledl_xcp_key"
+ " , el.ins_srtcontrole_omschrijving"
+ " , el.ins_srtcontrole_kosten"
+ " , el.ins_srtcontrole_kosten2"
+ " , el.ins_srtcontrole_kosten3"
+ " , el.ins_srtcontrole_materiaal"
+ " , el.ins_deel_aanmaak"
+ " , el.ins_srtcontrole_periode"
+ " , el.ins_srtcontrole_percentage"
+ " , el.ins_srtcontrole_opmerking"
+ " , el.ins_srtcontrole_key"
+ " , el.ins_srtcontrole_level"
+ " , el.ins_deel_aantal"
+ " , el.ins_srtcontrole_eind"
+ " , el.ins_srtcontrole_afbouwtijd"
+ " , el.fin_btwtabelwaarde_key"
+ " , el.ins_srtcontroledl_xcp_eind"
+ " FROM ins_v_defined_inspect_xcp el"
+ " WHERE el.ins_srtcontrole_type = 2" // TODO Altijd 'Vervanging' ?
// Vroeg filteren is *heel* goed voor performance
+ (dist_key > 0
? " AND el.ins_alg_locatie_key IN (SELECT alg_locatie_key FROM alg_locatie WHERE alg_district_key = " + dist_key + ")"
: "")
+ (loc_key > 0
? " AND el.ins_alg_locatie_key = " + loc_key
: "")
+ (bld_key > 0
? " AND el.ins_alg_locatie_key = (SELECT alg_locatie_key FROM alg_gebouw WHERE alg_gebouw_key = " + bld_key + ")"
: "")
+ (disc_key > 0
? " AND el.ins_discipline_key = " + disc_key
: "")
+ (srtgroep_key > 0
? " AND el.ins_srtgroep_key = " + srtgroep_key
: "")
+ (srtdeel_key > 0
? " AND el.ins_srtdeel_key = " + srtdeel_key
: "")
+ " AND el.ins_srtcontrole_periode > 0"
+ " AND el.ctr_ismjob = 1"
// Je moet read CTRUSE rechten hebben op de CTR disciplines om de taken te kunnen zien.
+ " AND el.ctr_discipline_key IN (SELECT w.ins_discipline_key"
+ " FROM fac_v_webgebruiker w"
+ " , fac_functie f"
+ " WHERE w.fac_functie_key = f.fac_functie_key "
+ " AND f.fac_functie_code = 'WEB_CTRUSE'"
+ " AND w.fac_gebruiker_prs_level_read < 9"
+ " AND w.fac_gebruiker_alg_level_read < 9"
+ " AND w.prs_perslid_key = " + user_key + ")"
+ (srtcontrole.length > 0
? " AND el.ins_srtcontrole_key IN (" + srtcontrole.join(",") + ")"
: "")
+ (frequentie.length > 0
? " AND el.ins_srtcontrole_periode IN (" + frequentie.join(",") + ")"
: "")
+ " ) e"
+ " LEFT OUTER JOIN" // uitgevoerde taken
+ " (SELECT dsc.ins_srtcontrole_key"
+ " , dsc.ins_deel_key"
+ " , MAX((SELECT dsc1.ins_deelsrtcontrole_plandatum"
+ " FROM ins_deelsrtcontrole dsc1"
+ " WHERE dsc1.ins_deel_key = dsc.ins_deel_key"
+ " AND dsc1.ins_srtcontrole_key = dsc.ins_srtcontrole_key"
+ " AND dsc1.ins_deelsrtcontrole_status < 5)) plandatum"
+ " , MAX(dsc.ins_deelsrtcontrole_datum) laatste"
+ " FROM ins_deelsrtcontrole dsc"
+ " GROUP BY dsc.ins_srtcontrole_key, dsc.ins_deel_key) c"
+ " ON e.ins_deel_key = c.ins_deel_key"
+ " AND e.ins_srtcontrole_key = c.ins_srtcontrole_key"
var ins_xcp_active_cost = S("ins_xcp_active_cost");
var costarray = [];
if (ins_xcp_active_cost & 1) costarray.push("COALESCE(comp.ins_srtcontrole_kosten, 0)");
if (ins_xcp_active_cost & 2) costarray.push("COALESCE(comp.ins_srtcontrole_kosten2, 0)");
if (ins_xcp_active_cost & 4) costarray.push("COALESCE(comp.ins_srtcontrole_kosten3, 0)");
if (ins_xcp_active_cost & 8) costarray.push("COALESCE(comp.ins_srtcontrole_materiaal, 0)");
var sqlcost = "";
if (costarray.length > 0)
sqlcost = "(" + costarray.join(" + ") + ") *";
var sql_yearcost =
"SELECT comp.ins_deel_key"
+ " , comp.ins_srtcontroledl_xcp_key"
+ " , comp.ins_srtcontrole_key"
+ " , comp.ins_srtcontrole_level"
+ " , comp.ins_srtcontrole_omschrijving"
+ " , comp.vervangingsjaar"
+ " , comp.ins_srtcontrole_periode"
+ " , comp.ins_srtcontrole_opmerking"
+ " , COALESCE (comp.ins_deel_aantal *"
+ sqlcost
+ " (comp.ins_srtcontrole_percentage / 100) *"
+ (incbtw
? " (1 + COALESCE((SELECT fbtw.fin_btwtabelwaarde_perc"
+ " FROM fin_btwtabelwaarde fbtw"
+ " WHERE fbtw.fin_btwtabelwaarde_key = comp.fin_btwtabelwaarde_key) / 100"
+ " , 0)) *"
: "")
+ " POWER(" + inflatiefactor + " , comp.vervangingsjaar - EXTRACT(YEAR FROM SYSDATE))"
+ " , 0) bedrag"
+ " , hierlevel"
+ " , comp.ins_deel_aantal"
+ " , comp.ins_srtcontrole_eind"
+ " , comp.ins_srtcontrole_afbouwtijd"
+ " , comp.fin_btwtabelwaarde_key"
+ " , comp.ins_srtcontroledl_xcp_eind"
+ " FROM (WITH comps (ins_deel_key" // Recursive WITH statement om het volgende vervangingsjaar te vinden (m.vervangingsjaar + m.ins_srtcontrole_periode).
+ " , ins_srtcontroledl_xcp_key"
+ " , ins_srtcontrole_key"
+ " , ins_srtcontrole_level"
+ " , ins_srtcontrole_omschrijving"
+ " , ins_srtcontrole_kosten"
+ " , ins_srtcontrole_kosten2"
+ " , ins_srtcontrole_kosten3"
+ " , ins_srtcontrole_materiaal"
+ " , ins_srtcontrole_periode"
+ " , ins_srtcontrole_percentage"
+ " , ins_srtcontrole_opmerking"
+ " , vervangingsjaar"
+ " , hierlevel"
+ " , ins_deel_aantal"
+ " , ins_srtcontrole_eind"
+ " , ins_srtcontrole_afbouwtijd"
+ " , fin_btwtabelwaarde_key"
+ " , ins_srtcontroledl_xcp_eind)"
+ " AS (SELECT ins_deel_key"
+ " , ins_srtcontroledl_xcp_key"
+ " , ins_srtcontrole_key"
+ " , ins_srtcontrole_level"
+ " , ins_srtcontrole_omschrijving"
+ " , ins_srtcontrole_kosten"
+ " , ins_srtcontrole_kosten2"
+ " , ins_srtcontrole_kosten3"
+ " , ins_srtcontrole_materiaal"
+ " , ins_srtcontrole_periode"
+ " , ins_srtcontrole_percentage"
+ " , ins_srtcontrole_opmerking"
+ " , vervangingsjaar"
+ " , 1 hierlevel"
+ " , ins_deel_aantal"
+ " , ins_srtcontrole_eind"
+ " , ins_srtcontrole_afbouwtijd"
+ " , fin_btwtabelwaarde_key"
+ " , ins_srtcontroledl_xcp_eind"
+ " FROM (" + sql_componenten + ")"
+ " WHERE vervangingsjaar IS NOT NULL"
+ " UNION ALL" // latere jaren
+ " SELECT m.ins_deel_key"
+ " , m.ins_srtcontroledl_xcp_key"
+ " , m.ins_srtcontrole_key"
+ " , m.ins_srtcontrole_level"
+ " , m.ins_srtcontrole_omschrijving"
+ " , m.ins_srtcontrole_kosten"
+ " , m.ins_srtcontrole_kosten2"
+ " , m.ins_srtcontrole_kosten3"
+ " , m.ins_srtcontrole_materiaal"
+ " , m.ins_srtcontrole_periode"
+ " , m.ins_srtcontrole_percentage"
+ " , m.ins_srtcontrole_opmerking"
+ " , m.vervangingsjaar + m.ins_srtcontrole_periode"
+ " , m.hierlevel + 1"
+ " , m.ins_deel_aantal"
+ " , m.ins_srtcontrole_eind"
+ " , m.ins_srtcontrole_afbouwtijd"
+ " , m.fin_btwtabelwaarde_key"
+ " , m.ins_srtcontroledl_xcp_eind"
+ " FROM comps m"
+ " WHERE (m.vervangingsjaar + m.ins_srtcontrole_periode <= " + toyear + "))"
+ " SELECT *"
+ " FROM comps"
+ " ) comp"
var jaren = [];
for (var i = fromyear; i <= toyear; i++)
jaren.push(i);
var keyColomn = "";
switch (groupby)
{
case 1: keyColumn = "d.alg_district_key";
break;
case 2: keyColumn = "dg.alg_gebouw_key";
break;
case 3: keyColumn = "dg.ins_discipline_key";
break;
case 4: keyColumn = "dg.ins_srtgroep_key";
break;
case 5: keyColumn = "dg.ins_srtdeel_key";
break;
case 6:
case 7: keyColumn = "dg.ins_deel_key";
break;
}
var sql_cost_verval = "SELECT d.alg_district_key"
+ " , d.alg_district_omschrijving"
+ " , g.alg_gebouw_omschrijving"
+ " , g.alg_gebouw_key"
+ " , dg.ins_deel_omschrijving"
+ " , dg.ins_discipline_omschrijving"
+ " , dg.ins_srtgroep_omschrijving"
+ " , dg.ins_srtdeel_omschrijving"
+ " , cy.ins_srtcontrole_omschrijving"
+ " , cy.ins_deel_key"
+ " , " + keyColumn + " keyColumn"
+ " , cy.ins_srtcontroledl_xcp_key"
+ " , cy.ins_srtcontrole_key"
+ " , cy.ins_srtcontrole_periode"
+ " , cy.ins_srtcontrole_opmerking"
+ " , cy.ins_srtcontrole_level"
+ " , g.alg_gebouw_vervaldatum"
+ " , dg.ins_deel_vervaldatum"
+ " , cy.ins_srtcontroledl_xcp_eind"
+ " , cy.ins_srtcontrole_eind"
+ " , EXTRACT(YEAR FROM LEAST (COALESCE(g.alg_gebouw_vervaldatum"
+ " , dg.ins_deel_vervaldatum"
+ " , COALESCE(cy.ins_srtcontroledl_xcp_eind, cy.ins_srtcontrole_eind))"
+ " , COALESCE(COALESCE(cy.ins_srtcontroledl_xcp_eind, cy.ins_srtcontrole_eind)"
+ " , g.alg_gebouw_vervaldatum"
+ " , dg.ins_deel_vervaldatum)"
+ " , COALESCE(dg.ins_deel_vervaldatum"
+ " , COALESCE(cy.ins_srtcontroledl_xcp_eind, cy.ins_srtcontrole_eind)"
+ " , g.alg_gebouw_vervaldatum))"
+ " ) vervaljaar"
+ " , vervangingsjaar"
+ " , ins_srtcontrole_afbouwtijd afbouwtijd"
+ " , bedrag"
+ " FROM (" + sql_yearcost + ") cy"
+ " , ins_v_deel_gegevens dg"
+ " , alg_district d"
+ " , alg_locatie l"
+ " , alg_gebouw g"
+ " WHERE cy.ins_deel_key = dg.ins_deel_key"
+ " AND dg.alg_locatie_key = l.alg_locatie_key"
+ " AND d.alg_district_key = l.alg_district_key"
+ " AND dg.alg_gebouw_key = g.alg_gebouw_key";
var sql_cost = "SELECT cv.alg_district_key"
+ " , cv.alg_district_omschrijving"
+ " , cv.alg_gebouw_omschrijving"
+ " , cv.alg_gebouw_key"
+ " , cv.ins_deel_omschrijving"
+ " , cv.ins_discipline_omschrijving"
+ " , cv.ins_srtgroep_omschrijving"
+ " , cv.ins_srtdeel_omschrijving"
+ " , cv.ins_srtcontrole_omschrijving"
+ " , cv.ins_deel_key"
+ " , cv.keyColumn"
+ " , cv.ins_srtcontroledl_xcp_key"
+ " , cv.ins_srtcontrole_key"
+ " , cv.ins_srtcontrole_periode"
+ " , cv.ins_srtcontrole_opmerking"
+ " , cv.ins_srtcontrole_level"
+ " , cv.vervaljaar"
+ " , cv.vervangingsjaar"
+ " , cv.afbouwtijd"
+ " , CASE"
+ " WHEN (SELECT idsc.ins_deelsrtcontrole_key"
+ " FROM ins_deelsrtcontrole idsc"
+ " WHERE idsc.ins_deel_key = cv.ins_deel_key"
+ " AND idsc.ins_srtcontrole_key = cv.ins_srtcontrole_key"
+ " AND idsc.ins_deelsrtcontrole_status IN (0)) IS NOT NULL"
+ " THEN 1"
+ " ELSE 0"
+ " END isPlanned"
+ " , CASE"
+ " WHEN (SELECT idsc.ins_deelsrtcontrole_key"
+ " FROM ins_deelsrtcontrole idsc"
+ " WHERE idsc.ins_deel_key = cv.ins_deel_key"
+ " AND idsc.ins_srtcontrole_key = cv.ins_srtcontrole_key"
+ " AND idsc.ins_deelsrtcontrole_status IN (2, 5)) IS NOT NULL"
+ " THEN 0"
+ " ELSE 1"
+ " END canBePlanned"
+ " , COALESCE((SELECT MAX(idsc2.ins_deelsrtcontrole_key)"
+ " FROM ins_deelsrtcontrole idsc2"
+ " WHERE idsc2.ins_deel_key = cv.ins_deel_key"
+ " AND idsc2.ins_srtcontrole_key = cv.ins_srtcontrole_key)"
+ " , -1) ins_deelsrtcontrole_key"
+ " , cv.bedrag AS orgbedrag"
// Als er een andere inspectie is met een lagere ins_srtcontrole_level
// in hetzelfde jaar dan springt ons bedrag op 0
+ " , CASE WHEN MIN(cv.ins_srtcontrole_level) KEEP (DENSE_RANK FIRST ORDER BY cv.ins_srtcontrole_level) "
+ " OVER (PARTITION BY cv.ins_deel_key, cv.vervangingsjaar) < cv.ins_srtcontrole_level"
+ " OR"
+ " cv.vervaljaar - COALESCE(cv.afbouwtijd, 0) < cv.vervangingsjaar"
+ " THEN 0 "
+ " ELSE cv.bedrag "
+ " END bedrag"
+ " FROM (" + sql_cost_verval + ") cv";
if (!fulldetails)
{
var fields = ["alg_district_omschrijving", "alg_gebouw_omschrijving", "ins_discipline_omschrijving",
"ins_srtgroep_omschrijving", "ins_srtdeel_omschrijving", "ins_deel_omschrijving"];
while (fields.length > groupby)
fields.pop();
var sql_cost = "SELECT " + fields.join(", ")
+ (groupby > 1
? " , alg_gebouw_key"
: "")
+ " , keyColumn"
+ " , vervangingsjaar"
+ " , SUM(bedrag) bedrag"
+ " , SUM(orgbedrag) orgbedrag"
+ " FROM (" + sql_cost + ")"
+ " GROUP BY " + fields.join(", ")
+ (groupby > 1
? " , alg_gebouw_key"
: "" )
+ " , keyColumn"
+ " , vervangingsjaar";
}
var sql = "SELECT *"
+ " FROM ("
+ sql_cost
+ ") PIVOT (SUM(bedrag), SUM(orgbedrag) AS orgbedrag "
+ " FOR vervangingsjaar IN (" + jaren.join(",") + ") )"
+ " ORDER BY 1"
for (var i = 2; i <= groupby; i++)
{
sql += "," + String(i)
}
function fnkeyFunction(oRs)
{
if (fulldetails)
return oRs("ins_deel_key").Value; // + "-" + oRs("ins_srtcontrole_key").Value;
else
return oRs("keyColumn").Value;
}
function fnrowData(oRs)
{
var data = {};
if (fulldetails)
{
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;
}
return JSON.stringify(data);
}
function fnrowClass(oRs)
{
if (!fulldetails)
return "";
var lclass = oRs("ins_srtcontroledl_xcp_key").Value != null? "mjbxcp" : "";
if (oRs("isPlanned").Value == 1)
lclass += " mjbplanned"
return lclass;
}
function fnrowActionEnabler(oRs)
{
var data = {};
//var eShowInsp = false;
var ePlan = false;
var eStart = false;
var eClose = false;
var eFinish = false;
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});
ePlan = this_ins.canInspPlan;
eStart = this_ins.canInspStart;
eClose = this_ins.canInspClose;
eFinish = this_ins.canInspFinish;
var data = {ePlan: ePlan, eStart: eStart, eClose: eClose, eFinish: eFinish};
return data;
}
function fnGebouw(oRs)
{
if (hasReadALGUSE || hasReadALGMAN)
{
return "<span class='details' onclick='naargebouw({0}, this)'>{1}</span>".format(oRs("alg_gebouw_key").Value, safe.html(oRs("alg_gebouw_omschrijving").Value));
}
else
return safe.html(oRs("alg_gebouw_omschrijving").Value);
}
function fnDeel(oRs)
{ // Alleen voor groupby Element(6) en Taak(7)
if (hasReadINSMAN)
{
return "<span class='details' onclick='naardeel({0}, this)'>{1}</span>".format(oRs("keyColumn").Value, safe.html(oRs("ins_deel_omschrijving").Value));
}
else
return safe.html(oRs("ins_deel_omschrijving").Value);
}
function fnSrtcontrole(oRs)
{
var hasXcp = oRs("ins_srtcontroledl_xcp_key").Value != null;
if ((hasXcp && hasReadCTRUSE && hasReadINSMAN) || (hasWriteCTRUSE && hasWriteINSMAN))
{
var fncall = "exception({0}, {1}, '{2}')"
.format(oRs("ins_deel_key").Value,
oRs("ins_srtcontrole_key").Value,
safe.jsstring(oRs("ins_deel_omschrijving").Value));
return "<span class='details' onclick='{0}'>{1}</span>"
.format(safe.htmlattr(fncall),
safe.html(oRs("ins_srtcontrole_omschrijving").Value));
}
else
return safe.html(oRs("ins_srtcontrole_omschrijving").Value);
}
function fnfnBedrag(jaar) // altijd afronden
{
return function (oRs)
{
var v = safe.curr(Math.round(oRs(jaar).Value), true);
return v? v : "";
}
}
function fnfnBedragNumber(jaar) // Voor optellen
{
return function (oRs)
{
return oRs(jaar).Value;
}
}
function totalShow(column, rowNum)
{
return safe.curr(Math.round(column.totalsum), true);
}
// Voor de laatste kolom
function fnTotal(oRs)
{
var s = 0;
for (var j = 0; j < jaren.length; j++)
{
s = s + oRs(String(jaren[j])).Value;
}
return s;
}
function fnTotalText(oRs)
{
return safe.curr(fnTotal(oRs), true);
}
var doneclik = {}; // Altijd alleen de eerste klikken
function fnfnClickBedrag(jaar) // altijd afronden
{
return function (oRs)
{
if (oRs(jaar).Value == null)
return "";
var v = Math.round(oRs(jaar).Value);
var org_v = Math.round(oRs(jaar + "_ORGBEDRAG").Value);
if (v == 0) // (jaar >= vervaljaar) //
{
var vervaljaar = oRs("vervaljaar").Value;
var afbouwtijd = oRs("afbouwtijd").Value || 0;
if (vervaljaar != null && jaar >= vervaljaar - afbouwtijd)
//return "<span class='mjbxcp'></span>";
return "";
}
if (v != org_v)
v = "<span class='mjborgbedrag'>({1})</span>{0}".format(safe.curr(v, true), safe.curr(org_v, true));
var deel_key = oRs("ins_deel_key").Value;
var srtcont_key = oRs("ins_srtcontrole_key").Value;
if ((deel_key + ":" + srtcont_key) in doneclik )
return safe.curr(v, true);
doneclik[deel_key + ":" + srtcont_key] = 1;
// INSUSE read rechten heb je al nodig om dit overzicht te zien.
// Inspecties in de status gestart(2) of gereedgemeld(5) mogen niet drag en drop zijn. Planningsdatum is daarvan niet aan te passen.
return "<span" + (hasWriteCTRUSE? " class='" + (oRs("canBePlanned").Value == 1? "details draggable" : "") + "'" : "") + ">{0}</span>".format(safe.curr(v, true))
/* experimenteel inline schuiven
var fnprev = "moveplan(event, {0}, {1}, {2}-1)".format(deel_key, srtcont_key, jaar);
var fnnext = "moveplan(event, {0}, {1}, {2}+1)".format(deel_key, srtcont_key, jaar);
return "<span class='details' onclick='{0}'>&lt;</span>".format(fnprev)
+ String(v)
+ "<span class='details' onclick='{0}'>&gt;</span>".format(fnnext);
*/
}
}
function fnfncolClass(jaar)
{
return function (oRs)
{
var v = Math.round(oRs(jaar).Value);
if (fulldetails)
{
var vervaljaar = oRs("vervaljaar").Value;
var afbouwtijd = oRs("afbouwtijd").Value || 0;
if (jaar > vervaljaar - afbouwtijd) // Afzien van taken/vervangeing/inspecties. Geen kosten meer.
{
if (vervaljaar != null && afbouwtijd != null && jaar > vervaljaar - afbouwtijd && jaar <= vervaljaar)
return "mjbjaar mjbafbouw";
else if (vervaljaar != null && jaar > vervaljaar)
return "mjbjaar mjbverval";
}
}
return "mjbjaar";
}
}
var buttons = [];
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()' });
var rst = new ResultsetTable({ keyColumn: fnkeyFunction,
sql: sql,
ID: "mjobtable",
rowData: fnrowData,
rowClass: fnrowClass,
//suppressKeyRepeat: "alg_locatie_omschrijving",
rowActionEnabler: fnrowActionEnabler,
totalShow: totalShow,
flexModule: "INS",
multiple: true,
filterParams: params,
outputmode: outputmode,
//title: (parent_key? L("lcl_subobjects") : (koppel_key? L("lcl_ins_koppelobjects") : (inspect? L("lcl_ins_planned_activities"): L("lcl_ins_objects")))),
showAll: showall,
buttons: buttons
});
//rst.addColumn(new Column({caption: L("level"), content: "ins_srtcontrole_level" /*, hasActions: true*/}));
rst.addColumn(new Column({caption: L("lcl_district"), content: "alg_district_omschrijving"}));
if (groupby > 1)
rst.addColumn(new Column({caption: L("lcl_building"), content: fnGebouw }));
if (!fulldetails)
{
if (groupby > 2) rst.addColumn(new Column({caption: L("lcl_discipline"), content: "ins_discipline_omschrijving"}));
if (groupby > 3) rst.addColumn(new Column({caption: L("lcl_obj_group"), content: "ins_srtgroep_omschrijving"}));
if (groupby > 4) rst.addColumn(new Column({caption: L("lcl_obj_sort"), content: "ins_srtdeel_omschrijving"}));
}
if (groupby > 5) rst.addColumn(new Column({caption: L("lcl_ins_object"), content: fnDeel}));
if (fulldetails)
{
rst.addColumn(new Column({caption: L("lcl_ins_controle_srt"), content: fnSrtcontrole, tooltip: "ins_srtcontrole_opmerking"}));
}
for (var j = 0; j < jaren.length; j++)
{
if (fulldetails)
var content = fnfnClickBedrag(String(jaren[j]));
else
var content = fnfnBedrag(String(jaren[j]));
rst.addColumn(new Column({caption: String(jaren[j]), datatype: "number",
content: content,
columnClass: fnfncolClass(String(jaren[j])), // tdClass dan niet meer nodig.
total: true,
fnAmount: fnfnBedragNumber(String(jaren[j]))
}));
}
rst.addColumn(new Column({caption: L("lcl_Total"), datatype: "number",
tdClass: "mjbtotal",
content: fnTotalText,
fnAmount: fnTotal,
total: true
}));
/* de mogelijke acties */
if (fulldetails)
{
rst.addAction({ action: "mjb_dragdrop", caption: L("lcl_mjb_dragdrop"), multi: true, multiOnce: true, onlyMulti: true } );
rst.addAction({ action: "insPlan", caption: L("lcl_ins_schedule"), multi: true, multiOnce: true, enabler: "ePlan", onlyMulti: true });
rst.addAction({ action: "insStart", caption: L("lcl_ins_start"), multi: true, multiOnce: true, enabler: "eStart", onlyMulti: true });
rst.addAction({ action: "insClose", caption: L("lcl_ins_close") + "/" + L("lcl_ins_finish"), multi: true, multiOnce: true, enabler: "eClose", onlyMulti: true });
rst.addAction({ action: "insFinish", caption: L("lcl_ins_finish"), multi: true, multiOnce: true, enabler: "eFinish", onlyMulti: true });
}
var count = rst.processResultset();
if (!excel && !print)
{
%>
<!-- LEGENDA -->
<script type="text/javascript">
function openLegenda()
{
params = { width: 300,
minWidth: 250,
minHeight: 10,
resizable: false,
position: {my: "right top", at: "right top + 30"},
title: "<%=L("lcl_ins_controle_legenda")%>"
}
$('div#legenda').dialog(params).dialog('open');
FcltMgr.resized();
}
</script>
<div id="legenda" style="display:none; line-height: 30px;">
<table id="inslegenda">
<tr class="mjbplanned">
<td title="<%= L("lcl_ins_controle_plan") %>"><%= L("lcl_ins_controle_plan") %></td>
</tr>
<tr class="mjbafbouw">
<td title="<%= L("lcl_mjb_phasingout") %>"><%= L("lcl_mjb_phasingout") %></td>
</tr>
<tr class="mjbverval">
<td title="<%= L("lcl_mjb_becancelled") %>"><%= L("lcl_mjb_becancelled") %></td>
</tr>
<tr class="mjbxcp">
<td title="<%= L("lcl_mjb_overruled_xcp") %>"><%= L("lcl_mjb_overruled_xcp") %></td>
</tr>
</table>
</div>
<%
}
%>
</body>
</html>