Files
Facilitor/APPL/MLD/opdr_plan.inc
Maykel Geerdink 7a72f490d7 ARAI#40653: Tonen Vakgroep/meldingsgroep in planningsconsole.
svn path=/Website/branches/v2017.1/; revision=34037
2017-05-29 13:34:55 +00:00

939 lines
50 KiB
HTML

<% /*
$Revision$
$Id$
File: opdr_plan.inc
Description: Definieert de serverside functie opdr_plan() die een planbord 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: vanuit opdr_search_list.asp
Note:
*/ %>
<!-- #include file="../Shared/iface.inc" -->
<!-- #include file="../Shared/discx3d.inc" -->
<!-- #include file="../Shared/json2.js" -->
<!-- #include file="../mld/mld.inc" -->
<%
FCLTHeader.Requires({plugins: ["jQuery"],
js: ["./mld.js",
"jquery-ui.js"], // Voor het slepen.
css: ["../mld/mld.css"]
});
// Om planbord kaarten in een kaartenbak te groeperen.
var __cardboxactive__ = false;
function CARDBOX_START(id, params)
{
params = params || {};
if (__cardboxactive__) ERROR_NESTED_BLOCK_START_DETECTED;
__cardboxactive__ = true;
%><!-- CARDBOX_START <%=id%> -->
<td><div id="<%=id%>" style="display:inline-block" class="fcltcardbox <%=params.cardclass? params.cardclass : ""%>" <%=params.hidden? ' style="display:none"' : ''%> <%=params.html? " " + params.html : ""%>><%
}
function CARDBOX_END()
{
if (!__cardboxactive__) ERROR_BLOCK_END_WITHOUT_BLOCKSTART;
__cardboxactive__ = false;
%></div></td>
<!-- CARDBOX_END --><%
}
// Om velden in een planbord kaart te groeperen.
var __cardactive__ = false;
function CARD_START(id, params)
{
params = params || {};
if (__cardactive__) ERROR_NESTED_BLOCK_START_DETECTED;
__cardactive__ = true;
%><!-- CARD_START <%=id%> -->
<div id="<%=id%>" class="fcltcard <%=params.cardclass? params.cardclass : ""%>" <%=params.hidden? ' style="display:none"' : ''%> <%=params.html? " " + params.html : ""%>>
<table class="fcltcardtab" width="100%"><%
}
function CARD_END()
{
if (!__cardactive__) ERROR_BLOCK_END_WITHOUT_BLOCKSTART;
__cardactive__ = false;
%> </table>
</div>
<!-- CARD_END --><%
}
function opdr_plan(params)
{
var urole = params.urole;
var fronto = (urole == "fo");
var backo = (urole == "bo");
var frontend = (urole == "fe");
var bgtmode = (urole == "bgt");
// Voor resulttable de globalen zetten; zou ng anders moeten.
var outputmode = params.outputmode; // print to 0 = screen, 1 = printer, 2 = excel, etc.
var isPrinting = (outputmode == 1 || outputmode == 5);
var isExcel = (outputmode == 2 || outputmode == 6);
var showAll = params.showall;
var mld_key = params.mld_key;
var mldstpen = params.mldstpen;
var mldstnew = params.mldstnew;
var mldsting = params.mldsting;
var mldstacc = params.mldstacc;
var mldstuit = params.mldstuit;
var mldstrej = params.mldstrej;
var mldstafm = params.mldstafm;
var mldstver = params.mldstver;
var mldnieto = params.mldnieto;
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 (mldsting) showstatus = (showstatus == ""? "" : showstatus + ",") + "3";
if (mldstacc) showstatus = (showstatus == ""? "" : showstatus + ",") + "4";
if (mldstafm) showstatus = (showstatus == ""? "" : showstatus + ",") + "5";
if (mldstver) showstatus = (showstatus == ""? "" : showstatus + ",") + "6";
if (mldstuit) showstatus = (showstatus == ""? "" : showstatus + ",") + "7";
if (mldnieto) showstatus = (showstatus == ""? "" : showstatus + ",") + "99";
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 (mld_key)
var pautfunction = "WEB_MLDUSE";
else
{
var pautfunction = "WEB_MLDORD";
params.uitvoerder = true;
}
}
else if (from_mld)
var pautfunction = ["WEB_ORDBO2","WEB_ORDBOF"];
else if (urole == 'b2')
var pautfunction = "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);
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.
var mld_melding = mld.mld_melding_info(mld_key);
lcl.set_dialect(mld_melding.srtdisc, "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;
}
}
%>
<html id="planhtml">
<head>
<% FCLTHeader.Generate({ outputmode: params.outputmode }); %>
<script type="text/javascript">
function sort(pcardboxid)
{
var sortableList = $("#" + pcardboxid);
var listitems = $("div", sortableList);
listitems.sort(function (a, b)
{ // Sorteervolgorde: 1) Active opdrachten (active == 1) bovenaan. Daar zijn ze mee bezig. (Beheerder is ook actief).
// 2) Onderbroken.
// 3) Einddatum, wat het eerst klaar moet zijn staat boven aan (kleinste waarde bovenaan).
// 4) Meldingnummer (A12345/1) (kleinste waarde bovenaan).
return (($(a).attr("active") == "1"? "0" : "1") + $(a).attr("halt") + $(a).attr("einddatum") + "/" + $(a).attr("opdracht") > ($(b).attr("active") == "1"? "0" : "1") + $(b).attr("halt") + $(b).attr("einddatum") + "/" + $(b).attr("opdracht")) ? 1 : -1;
});
sortableList.append(listitems);
}
var mld_show_cards = <%=S("mld_show_cards")%>;
function showMaxCards(pcardbehid, pshowall)
{
lcard = $("#" + pcardbehid).next();
lteller = 0;
while (lcard.length == 1)
{
if (lcard.attr("id") == "cardasc" || lcard.attr("id") == "carddesc")
{
if ((pshowall && lcard.attr("id") == "cardasc") || (!pshowall && lcard.attr("id") == "carddesc"))
lcard.show();
else
lcard.hide();
}
else
{
lteller++;
if (pshowall || lteller <= mld_show_cards)
lcard.show();
else
lcard.hide();
}
lcard = lcard.next();
}
}
var selectedCard;
var selectedCurrentCard;
var lastClickedCardboxid;
var lastClickedCard;
var received = false;
var prs_key_received = -1;
var uitv_key_received = -1;
var uitv_type_received = "";
var cardboxid_received = "";
var selectedCardArray = [];
$(document).ready(function()
{
$("div.cardbox").on("mousedown",
"div.cardorders",
function (e)
{
if ($(this).hasClass("disable-sort-item"))
return;
var cardboxid_clicked = $(this).parent().attr("id");
if (lastClickedCardboxid && lastClickedCardboxid != cardboxid_clicked)
lastClickedCard = null; // Laatste aangeklikte kaart was in een andere kolom. Dan wordt lastClickedCard null.
// Deselecteer alle kaarten van andere rijen.
$(".ui-sortable div.cardorders").not($(this).parent().find("div.cardorders"), ".legenda").removeClass("selectedcard");
if (selectedCurrentCard != undefined &&
selectedCurrentCard.text() != $(this).text() &&
!selectedCurrentCard.next("div.cardorders").hasClass("pholder") &&
selectedCurrentCard.hasClass("selectedcard") &&
($(this).hasClass("selectedcard") || (e.ctrlKey || e.metaKey))
)
{
// Voeg een clone kaart toe aan de kaart die hiervoor WAS geselecteerd (selectedCurrentCard).
selectedCurrentCard.after(selectedCurrentCard.clone().removeClass("selectedcard").addClass("pholder").hide());
}
// Als shift key is ingedrukt dan voorgaande geselecteerde kaart tot aangeklikte kaart selecteren.
if (e.shiftKey)
{ // Shift key is aan geklikt. Dan alle kaarten selecteren tussen huidige kaart en lastClickedCard.
// Als lastClickedCard null is dan is de laatste kaart niet in deze kolom aangeklikt.
if (lastClickedCard == null)
lastClickedCard = $(this).parents().children("div.cardorders").first(); // De eerste kaart in de kolom.
if (lastClickedCard.attr("sortid") < $(this).attr("sortid"))
{
start = lastClickedCard;
end = $(this);
}
else
{
start = $(this);
end = lastClickedCard;
}
// Alle kaarten deselecteren en alle clonen verwijderen.
$(".selectedcard").not(".legenda").removeClass("selectedcard");
$(".pholder").remove();
// Nu de juiste kaarten selecteren.
var icard = start; // iterator kaarten.
while (icard.prop("tagName") == "DIV" && icard.attr("sortid") != end.attr("sortid"))
{
// Geblokkeerde kaarten en clonen overslaan.
if (!icard.hasClass("disable-sort-item") && !icard.hasClass("pholder"))
{
if (icard.next("div.cardorders").hasClass("pholder"))
{
//$(this).next("div.cardorders").remove();
}
else
icard.after(icard.clone().addClass("pholder").hide());
icard.addClass("selectedcard");
}
icard = icard.next();
}
icard.after(icard.clone().addClass("pholder").hide());
icard.addClass("selectedcard");
}
else if (e.ctrlKey || e.metaKey)
{ // Ctrl key is aangeklikt.
// Verwijder alle clonen van andere rijen.
$(".ui-sortable div.cardorders.pholder").not($(this).parent().find("div.cardorders")).remove();
// Als de kaart al geselecteerd is dan deselecteren, anders alsnog selecteren.
if ($(this).next("div.cardorders").hasClass("pholder"))
$(this).next("div.cardorders").remove();
else
$(this).after($(this).clone().addClass("pholder").hide());
$(this).toggleClass("selectedcard");
}
else
{
// Pas in de mousup alle clonen verwijderen en daarna pas clone van geselecteerde kaart aanmaken.
// Anders is in de mouseup de $(this) de clone en niet het orgineel.
}
selectedCurrentCard = $(this); // De aangeklikte kaart.
selectedCard = $(this).clone().removeClass("selectedcard"); // De clone van de aangeklikte kaart.
lastClickedCardboxid = cardboxid_clicked;
lastClickedCard = $(this);
});
$("div.cardbox").on("mouseup",
"div.cardorders",
function (e)
{ // Receive en stop worden na de mousup uitgevoerd.
if ($(this).hasClass("disable-sort-item"))
return;
if (e.shiftKey || e.ctrlKey || e.metaKey)
{
}
else
{
// Deselecteer alle gesleept kopie kaarten, behalve diegene die gesleept/aangeklikt is. Die wordt vanzelf verwijderd/gedeselecteerd.
$(this).addClass("selectedcard").siblings().removeClass("selectedcard");
// Alle clonen verwijdern.
$(".pholder").remove();
// Nu wel een clone aanmaken voor de net geselecteerde kaart.
$(this).after($(this).clone().removeClass("selectedcard").addClass("pholder").hide());
}
});
$("div.cardbox").on("dblclick",
"div.cardorders",
function (e)
{
var opdr_key_dblclick = $(this).attr("opdr_key");
var url = "appl/mld/mld_opdr.asp?urole=bo&opdr_key=" + opdr_key_dblclick;
FcltMgr.openDetail(url, { reuse: true });
});
$("div.cardbox").on("dblclick",
"div.cardbeheerder",
function (e)
{
var uitv_key_dblclick = $(this).attr("uitv_key");
var prs_key_dblclick = $(this).attr("prs_key");
if ($(this).hasClass("uitvpi"))
var url = "appl/prs/prs_perslid.asp?prs_key=" + uitv_key_dblclick;
else if ($(this).hasClass("uitvbi"))
var url = "appl/prs/prs_perslid.asp?prs_key=" + (prs_key_dblclick > 0? prs_key_dblclick : uitv_key_dblclick);
else
var url = "appl/prs/prs_bedrijf.asp?bedrijf_key=" + uitv_key_dblclick;
FcltMgr.openDetail(url, { reuse: true });
});
$("div.cardbox").on("click",
"div.cardasc",
function (e)
{
showMaxCards($(this).parent().children(".cardbeheerder").first().attr("id"), false);
FcltMgr.resized(window);
window.parent.$("#workFrame").height(window.parent.$("#workFrame").height() + 100);
});
$("div.cardbox").on("click",
"div.carddesc",
function (e)
{
showMaxCards($(this).parent().children(".cardbeheerder").first().attr("id"), true);
FcltMgr.resized(window);
window.parent.$("#workFrame").height(window.parent.$("#workFrame").height() + 100);
});
});
function cardboxbehSortable(uitv_type, uitv_key, prs_key)
{
if (uitv_type != "BE")
{
$(function() {
$("#cardboxbeh" + uitv_key + (uitv_type == "BI"? "_" + prs_key : "")).sortable({
items: '.sortable:not(.disable-sort-item)',
connectWith: ".cardbox",
opacity: 0.7,
cursor: "move",
delay: 150, // Nodig om te voorkomen dat per ongeluk wordt gesleept, wanneer wordt geprobeerd om te selecteren.
revert: 0,
placeholder: "placeholderclass",
forcePlaceholderSize: true,
tolerance: "pointer",
helper: function (e, item)
{
// In principe, als je een unhighlighted item sleept, moeten alle andere items geunhighlighted worden.
// Behalve als de Ctrl of Shift toets ook was ingedrukt.
if (!item.hasClass("selectedcard"))
{
//item.addClass("selectedcard").siblings().removeClass("selectedcard");
if (e.shiftKey || e.ctrlKey || e.metaKey)
{
}
else
{
// Deselecteer alle gesleept kopie kaarten, behalve diegene die gesleept/aangeklikt is. Die wordt vanzelf verwijderd/gedeselecteerd.
item.addClass("selectedcard").siblings().removeClass("selectedcard");
// Alle clonen verwijdern.
$(".pholder").remove();
// Nu wel een clone aanmaken voor de net geselecteerde kaart.
item.after(item.clone().removeClass("selectedcard").addClass("pholder").hide());
}
}
///////////////////////////////////////////////////////////////////
// Nu de geselecteerde kaarten doorgeven aan de "stop()" functie //
///////////////////////////////////////////////////////////////////
// Clone de geselecteerde kaarten in een array elements.
var elements = item.parent().children(".selectedcard").clone();
// Voeg een property "multidrag" met de elements toe aan "item" die de geselecteerde elementen bevat van de orginele/bron lijst.
item.data("multidrag", elements).siblings(".selectedcard").remove();
// De geselecteerde kaarten in het geheugen bestaan nu en zijn aan het "item" is gekoppeld,
// dus kunnen we ze later benaderen waneer we in de "stop()" callback functie zijn.
// Create the helper. De kaarten als een DOM element meegeven.
var helper = $("<div/>");
return helper.append(elements);
},
start: function (e, ui)
{ // Wordt uitgevoerd door de bronlijst als het slepen start.
// De geselecteerde kaarten zijn normaal tijdens het slepen niet meer zichtbaar.
// Daarom de clonen laten zien. Wel zorgen dat ze dezelfde kleur hebben.
//ui.item.show(); // Laat de orginele kaart (waar op geklikt is) zien tijdens het slepen.
$(".pholder").hide(); // Laat de clonen zien.
},
stop: function (e, ui)
{ // Wordt uitgevoerd door de bronlijst als het slepen stopt.
// Mouseup en receive worden voor de stop uitgevoerd.
// De originele highlighted kaart waar op geklikt is verdwijnt vanzelf.
// De originele highlighted kaarten waar niet op geklikt is, moeten nog verwijderd worden.
// Ook alle clonen verwijderen.
//selectedCard.remove();
//$(".pholder").remove();
// Nu benaderen we de kaarten die we opgeslagen hebben in "item"'s data!
// Haal de elementen uit de helper.
var elements = ui.item.data("multidrag");
var cardbox_src = this;
// Met de class "cardmoved" aangeven dat de kaarten zijn verplaatst.
// Als de kaarten naar de eigen lijst zijn versleept dan class "cardmoved" niet toevoegen
if (received)
elements.addClass("cardmoved");
// "elements" bevat nu de originele geselecteerde items vanuit de orginele lijst (de gesleepte items)!!
// Uiteindelijk voeg ik de geselecteerde items toe achter "het item" (aangeklikte en gesleepte item) in de nieuwe lijst.
// Daarna "het item" in de lijst verwijderen omdat het net ook (dubbel) is toegevoegd.
ui.item.after(elements).remove();
// Alle kaarten deselecteren. Het (gekopieerde) aangeklikte en gesleepte item (die in elements zat) waren nog geselecteerd.
// Mocht er een cardnotmoved kaart tussen zitten, dan kan de class er nu weer af.
$(".selectedcard").not(".legenda").removeClass("selectedcard").removeClass("cardnotmoved");
if (received)
{ // Sorteer de lijst waar de items aan zijn toegevoegd.
sort(cardboxid_received);
// Nu werkelijk de behandelaar aanpassen van de verschoven opdrachten.
var opdr_key_array = [];;
for (var i = 0; i < elements.length; i++)
{
opdr_key_array.push(elements.eq(i).attr("opdr_key"));
}
// Bepaal de uitv_key en prs_key van de lijst waar de items naar toe worden gekopieerd (destination).
var uitv_key_dest = uitv_key_received;
var prs_key_dest = prs_key_received;
var uitv_type_dest = uitv_type_received;
var uitv_key_src = uitv_key;
var prs_key_src = prs_key;
var data = { uitv_key: uitv_key_dest,
prs_key: prs_key_dest,
uitv_type: uitv_type_dest,
opdr_key_arr: opdr_key_array.join(",") };
protectRequest.dataToken(data);
$.post("../mld/opdr_handlerchange.asp",
data,
FcltCallbackAndThen(function (data)
{
var notmoved_opdrkeys = [];
if (data.notmoved != "")
notmoved_opdrkeys = data.notmoved.split(",");
for (var i = 0; i < notmoved_opdrkeys.length; i++)
{
for (var j = 0; j < elements.length; j++)
{
var element_opdrkey = elements[j].id.substr(8); // "opdrcard" eraf halen en je houdt de opdracht key over.
if (element_opdrkey == notmoved_opdrkeys[i])
{ // Element terug plaatsen.
// cardbox_src.lastChild.after(elements[j]); werkt wel voor Firefox maar niet voor IE11.
// In IE11 is de functie after() niet gedefinieerd als je de lastChild opvraagt.
// Blijkbaar in IE11 levert lastChild geen jquery object op.
// Dan maar eerst een jquery object er van maken.
$("#" + cardbox_src.lastChild.id).after(elements[j]);
$(cardbox_src.lastChild).removeClass("cardmoved").addClass("cardnotmoved");
break;
}
}
}
if (notmoved_opdrkeys.length > 0)
{
sort("cardboxbeh" + uitv_key + (uitv_type == "BI"? "_" + prs_key : ""));
FcltMgr.alert(L("lcl_opdr_notmovedintern").format(notmoved_opdrkeys.length));
}
}),
"json");
}
else
// Verplaats naar de eigen lijst. Wel weer even sorteren.
sort("cardboxbeh" + uitv_key + (uitv_type == "BI"? "_" + prs_key : ""));
received = false;
},
receive: function (e, ui)
{ // Wordt uitgevoerd door de lijst die ontvangt. Wordt niet uitgevoerd als het dezelfde lijst is als de zender.
// Mouseup en stop worden voor de receive uitgevoerd.
received = true;
prs_key_received = prs_key;
uitv_key_received = uitv_key;
uitv_type_received = uitv_type;
cardboxid_received = "cardboxbeh" + uitv_key + (uitv_type == "BI"? "_" + prs_key : "");
},
create: function (event, ui)
{
sort("cardboxbeh" + uitv_key + (uitv_type == "BI"? "_" + prs_key : ""));
},
over: function (event, ui)
{
$(".cardbeheerder", this).toggleClass("goto");
},
out: function (event, ui)
{
$(".cardbeheerder", this).toggleClass("goto");
},
sort: function (event, ui)
{
//if (!ui.helper.parent().is('body')) {
// ui.helper.appendTo($('body'));
//}
ui.helper.offset(ui.offset); // JQuery bug: helper/placeholder verschuift t.o.v. muis bij scrollable scherm. Deze regel verhelpt dat.
}
});
});
}
else
{
// Bedrijven Extern (BE) alleen even sorteren en daarna mogen ze niet meer sortable zijn. Minimale sortable code nodig.
$(function() {
$("#cardboxbeh" + uitv_key).sortable({
items: '.sortable:not(.disable-sort-item)',
create: function (event, ui)
{
sort("cardboxbeh" + uitv_key);
}
});
$("#cardboxbeh" + uitv_key).sortable("disable");
});
}
}
</script>
</head>
<body id="planbody">
<%
var buttons = [];
buttons.push({ icon: "legenda.png", title: L("lcl_res_legenda"), action: "openLegenda()" });
// PF: bang van niet.. buttons.push({ icon: "print.png", title: L("lcl_print_table"), action: "opdr_print()" });
IFRAMER_HEADER(L("lcl_orders"), buttons);
%>
<div id='pbMaxHistoryB'><span id='pbMaxHistoryInfoB'><div></div></span></div>
<div id="collapseblock">
<div id="planbodylist"><table><tr>
<%
// TODO width van planbodylist gebruiken om horizontale scrollbar te verkrijgen.
// jquery scrollbar kun je nog gebruiken? jQuery('.textarea-scrollbar').scrollbar();??
var sql = mld.getopdroverzicht_sql(pautfunction, params);
oRs = Oracle.Execute(sql);
var prs_key = -1; // Melder key.
var uitv_key = -1;
var uitv_type = "";
var olduitv_key = -2;
var oldprs_key = -2;
var nrCardBoxes = 0;
var aantal_int = 0;
var aantal_ext = 0;
var nrCardsInCardbox = 0;
for (var cnt = 0; (cnt < S("qp_maxrows") || showAll) &&
(cnt < S("qp_maxrows2") || isExcel) && // Naar excel altijd alle regels (meer dan S("qp_maxrows2")) weergeven.
!oRs.eof; cnt++)
{
uitv_key = oRs("uitv_key").Value || -1;
uitv_type = oRs("uitv_type").Value;
prs_key = uitv_type == "BI"? oRs("prs_perslid_key").Value || -1 : -1; // Behandelaar
var opdr_key = oRs("mld_opdr_key").Value;
var behandelaar = oRs("behandelaar").Value; // Behandelaar
var B_OF_P = oRs("B_OF_P").Value;
var uitv_naam = oRs("uitv_naam").Value;
var opdracht = oRs("ins_srtdiscipline_prefix").Value + oRs("mld_melding_key").Value + "/" + oRs("mld_opdr_bedrijfopdr_volgnr").Value;
// Voor einddatum de COALESCE van plandatum en einddatum. COALESCE(mld_opdr_plandatum, mld_opdr_einddatum)
var einddatum = oRs("mld_opdr_plandatum").Value != null? new Date(oRs("mld_opdr_plandatum").Value).getTime() : new Date(oRs("mld_opdr_einddatum").Value).getTime();
var now = new Date().getTime();
var mld_statusopdr_key = oRs("mld_statusopdr_key").Value;
var mld_opdr_omschrijving = oRs("mld_opdr_omschrijving").Value || "";
var plaatsmelding = oRs("plaatsmelding").Value || "";
var meldinggroep = oRs("mld_stdmeldinggroep_naam").Value || "";
var vakgroep = oRs("ins_discipline_omschrijving").Value || "";
var uitvclass = uitv_type;
if (uitv_type == "BE")
aantal_ext++;
else
aantal_int++;
if (uitv_type == "BI" && prs_key < 0)
uitvclass = "NT" // Niet Toegewezen.
// Ik wil weten of ik de opdracht mag wijzigen.
// Als de opdracht niet te wijzigen is, dan mag ik deze niet slepen.
// Een niet te wijzigen opdracht heeft ook een icon "fa-lock" voor het opdrachtnummer.
// Voor externe bedrijven hoef ik de rechten niet op te vragen. Ik mag toch niet wijzigen/slepen in dit scherm.
if (uitv_type == "BE")
var this_opdr = { canChange: false };
else
var this_opdr = mld.func_enabled_opdracht(opdr_key); // Wat mag ik zoal op deze opdracht?
if ((uitv_type != "BI" && uitv_key != olduitv_key) ||
(uitv_type == "BI" && (uitv_key != olduitv_key || prs_key != oldprs_key)))
{
CARDBOX_START("cardboxbeh" + uitv_key + (uitv_type == "BI"? "_" + prs_key : ""),
{cardclass: "cardbox cbsortable uitv" + uitvclass.toLowerCase(),
html: "uitv_key=" + uitv_key + " prs_key=" + (uitv_type == "BI"? prs_key : "-1")
});
nrCardBoxes++;
nrCardsInCardbox = 0;
%>
<script type="text/javascript">
cardboxbehSortable("<%=uitv_type%>", <%=uitv_key%>, <%=prs_key%>);
</script>
<%
CARD_START("cardbeh" + uitv_key + (uitv_type == "BI"? "_" + prs_key : ""),
{ cardclass: "cardbeheerder uitv" + uitvclass.toLowerCase(),
html: "uitv_key='" + uitv_key + "' prs_key='" + prs_key + "' opdr_key='-1'" + " einddatum='-1'" + " opdracht='-1' active='1' halt='0'"
});
switch(uitv_type)
{
case "BI": if (prs_key < 0)
{ // Niet Toegewezen.
%> <tr><td><span class="readonly cardname"><%=L("lcl_opdr_unassigned") + " " + safe.html(uitv_naam)%></span></td></tr>
<% }
else
{ // Toegewezen.
var thisUser = new Perslid(prs_key); // geeft ook handige informatie
%> <tr>
<td rowspan="2" class='profile'><img id='photo' class='profile' src='<%=thisUser.photoinfo().photopaththumb %>'></td>
<td><span class="readonly cardname"><%=safe.html(uitv_naam)%><br><%=safe.html(behandelaar)%></span></td>
</tr>
<tr>
<td><span class="readonly cardsubname">
<%= safe.html(thisUser.prs_srtperslid())%>
<%= thisUser.prs_perslid_telefoonnr() ? "<br><i class='fa fa-phone'></i>&nbsp;"+safe.html(thisUser.prs_perslid_telefoonnr()) : "" %>
</span></td>
</tr>
<%
}
break;
case "PI": var thisUser = new Perslid(uitv_key); // geeft ook handige informatie
%> <tr>
<td rowspan="2" class='profile'><img id='photo' class='profile' src='<%=thisUser.photoinfo().photopaththumb %>'></td>
<td><span class="readonly cardname"><%=safe.html(thisUser.naam())%></span></td>
</tr>
<tr>
<td><span class="readonly cardsubname">
<%= safe.html(thisUser.prs_srtperslid())+"<br>"%>
<%= thisUser.prs_perslid_telefoonnr() ? "<i class='fa fa-phone'></i>&nbsp;"+safe.html(thisUser.prs_perslid_telefoonnr()) : "" %>
</span></td>
</tr>
<% break;
case "BE":
var bsql = "SELECT COALESCE(prs_bedrijf_bezoek_plaats, prs_bedrijf_post_plaats) plaats"
+ " , COALESCE(prs_bedrijf_contact_telefoon, prs_bedrijf_telefoon, prs_bedrijf_telefoon2) telefoon "
+ " FROM prs_bedrijf WHERE prs_bedrijf_key = " + uitv_key;
boRs = Oracle.Execute(bsql);
var uitv_plaats = "";
var uitv_telefoon = "";
if (!boRs.eof) {
uitv_plaats = boRs("plaats").value;
uitv_telefoon = boRs("telefoon").value;
}
boRs.close();
%>
<tr>
<td><span class="readonly cardname"><%=safe.html(uitv_naam)%></span></td>
</tr>
<tr>
<td><span class="readonly cardsubname">
<%= uitv_plaats ? safe.html(uitv_plaats) + "<br>" : ""%>
<%= uitv_telefoon ? "<i class='fa fa-phone'></i>&nbsp;"+safe.html(uitv_telefoon) : "" %>
</span></td>
</tr>
<% break;
}
CARD_END();
if (S("mld_show_cards") > 0)
{ %>
<script type="text/javascript">
$(document).ready(function()
{
showMaxCards("cardbeh" + "<%=uitv_key + (uitv_type == "BI"? "_" + prs_key : "")%>", false);
});
</script>
<% }
}
if (isPrinting || S("rs_maxchar") < 0 || mld_opdr_omschrijving.length < S("rs_maxchar") * 1.20) // 'Meer' moet minstens 20% extra tekst opleveren.
var safe_mld_opdr_omschrijving = safe.html(oRs("mld_opdr_omschrijving").Value); // simpelweg hele tekst
else
{
// Oke, op scherm afkappen na S("rs_maxchar") karakters.
// Probeer op de eerste spatie maar die moet wel binnen 20% karakters komen
var full_mld_opdr_omschrijving = mld_opdr_omschrijving;
var spatie = String(mld_opdr_omschrijving).substr(S("rs_maxchar")).indexOf(" ");
if (spatie < 0 || spatie > S("rs_maxchar")/5)
spatie = 0;
var part_mld_opdr_omschrijving = full_mld_opdr_omschrijving.substr(0, S("rs_maxchar") + spatie + 1);
// pas op: val is al 'html-safe' terwijl we dat voor afkappen niet kunnen hebben?
// in ieder geval geen safe.htmlattr.
var safe_mld_opdr_omschrijving = safe.html(part_mld_opdr_omschrijving)
+ "<span class='rsTruncmore' " // Dubbel encoderen hieronder, anders html-injections was achter de Meer... mogelijk
+ " resttxt='" + safe.htmlattr(safe.html(full_mld_opdr_omschrijving.substr(S("rs_maxchar") + spatie + 1))) + "'"
+ " title='" + L("lcl_rs_truncmore") + "'"
+ " onclick='return expandTruncate(event, this)'"
+ ">" + L("lcl_rs_truncated") + "</span>";
}
var extended_opdr_status = mld.getextendedopdrstatus(mld_statusopdr_key, opdr_key);
nrCardsInCardbox++;
CARD_START("opdrcard" + opdr_key,
{ cardclass: "cardorders" + (!this_opdr.canChange || mld_statusopdr_key == 8 || uitv_type == "BE"? "" : " sortable") +
(!this_opdr.canChange || mld_statusopdr_key == 8 || uitv_type == "BE"? " disable-sort-item" : "") +
(mld_statusopdr_key == 8? " activecard" + (extended_opdr_status == 81? " halt" : ""): "") +
(einddatum < now? " latecard" : ""),
html: "opdr_key='" + opdr_key + "'"
+ " opdracht='" + safe.html(opdracht) + "'"
+ " einddatum='" + einddatum + "'"
+ " active='" + (mld_statusopdr_key == 8? "1" : "0") + "'"
+ " halt='" + (extended_opdr_status == 81? "1" : "0") + "'"
+ " sortid='" + (mld_statusopdr_key == 8? "0" : "1") + einddatum + "/" + opdracht + "'",
hidden: S("mld_show_cards") > 0? true : false
});
%> <tr>
<td>
<% if (!this_opdr.canChange)
{ %>
<i class="fa fa-lock cardopdrnochange" aria-hidden="true"></i>
<% }
else if (mld_statusopdr_key == 8)
{
if (extended_opdr_status == 81)
{ %>
<i class="fa fa-pause" aria-hidden="true"></i>
<% }
else
{ %>
<i class="fa fa-hourglass-half" aria-hidden="true"></i>
<% }
}
else
{ %>
<i class="fa fa-chevron-right" aria-hidden="true"></i>
<% } %>
<span class="readonly cardopdrnr"><%=safe.html(opdracht)%></span>
<% if (oRs("mld_opdr_plandatum").Value != null)
{
%><span class="carddate"><i class="fa fa-clock-o fa-fw"></i><%=toDateTimeString(oRs("mld_opdr_plandatum").Value, false,false, true)%></span><%
} else { // straks ook de startdatum
%><span class="carddate"><i class="fa fa-calendar-check-o fa-fw"></i><%=toDateTimeString(oRs("mld_opdr_einddatum").Value, false,false, true)%></span><%
}
if (plaatsmelding) {
%><br><span class="cardplace"><i class="fa fa-map-marker fa-fw"></i>&nbsp;<%=plaatsmelding.length < 40 ? safe.html(plaatsmelding) : safe.html(plaatsmelding.substr(0,36)) + "&hellip;" %>
</span><%
}
var mvarray = [];
if (meldinggroep) mvarray.push(meldinggroep.length < 20 ? safe.html(meldinggroep) : safe.html(meldinggroep.substr(0,16)) + "&hellip;");
if (vakgroep) mvarray.push(vakgroep.length < 20 ? safe.html(vakgroep) : safe.html(vakgroep.substr(0,16)) + "&hellip;");
%><br><span class="cardgroep"><i class="fa fa-object-group fa-fw"></i>&nbsp;<%=mvarray.join(" / ")%>
</span>
</td></tr>
<tr><td><span class="readonly cardopdrtxt"><%=safe_mld_opdr_omschrijving%></span></td></tr>
<% CARD_END();
if (S("mld_show_cards") > 0 && nrCardsInCardbox == (S("mld_show_cards") + 1))
{
CARD_START("cardasc",
{ cardclass: "cardasc disable-sort-item",
html: "opdr_key='-1' opdracht='-1' einddatum='0' active='0' halt='2'",
hidden: true
});
%>
<tr>
<td width="100%">
<center><i class="fa fa-sort-asc" aria-hidden="true"></i></center>
</td>
</tr>
<% CARD_END();
CARD_START("carddesc",
{ cardclass: "carddesc disable-sort-item",
html: "opdr_key='-1' opdracht='-1' einddatum='-1' active='0' halt='3'"
});
%>
<tr>
<td width="100%">
<center><i class="fa fa-sort-desc" aria-hidden="true"></i></center>
</td>
</tr>
<% CARD_END();
}
olduitv_key = uitv_key;
oldprs_key = prs_key;
oRs.MoveNext();
if (oRs.eof || ((uitv_type != "BI" && (oRs("uitv_key").Value || -1) != olduitv_key) ||
(uitv_type == "BI" && ((oRs("uitv_key").Value || -1) != olduitv_key || (oRs("prs_perslid_key").Value || -1) != oldprs_key))))
CARDBOX_END();
}
%>
</tr></table></div>
</div>
<% if (S("mld_show_cards") > 0)
{ %>
<script type="text/javascript">
$(document).ready(function()
{
showMaxCards("cardbeh" + "<%=uitv_key + (uitv_type == "BI"? "_" + prs_key : "")%>", false);
});
</script>
<% } %>
<div id='pbMaxHistoryE'><span id='pbMaxHistoryInfoE'><div></div></span></div>
<%
var hisInfo = "empty";
if (!oRs.eof)
{
var a_element = "<a href='" + safe.jsstring(Request.ServerVariables("SCRIPT_NAME") + "?showall=1" + transitQS()) + "' target='_self" + "'>"
+ L("lcl_qp_maxcards1").format(S("qp_maxrows"))
+ "</a>";
hisInfo = (cnt <= S("qp_maxrows")
? a_element
: L("lcl_qp_maxcards2").format(S("qp_maxrows2")))
}
var extraTitle = [];
if (aantal_int > 0)
extraTitle.push(L("lcl_opdr_internuit") + " " + aantal_int);
if (aantal_ext > 0)
extraTitle.push(L("lcl_opdr_externuit") + " " + aantal_ext);
%>
<script type="text/javascript">
$(document).ready(function()
{
if ("<%=hisInfo%>" == "empty")
{
$("#pbMaxHistoryB").hide();
$("#pbMaxHistoryE").hide();
}
else
{
$("#pbMaxHistoryInfoB")[0].innerHTML = "<%=hisInfo%>";
$("#pbMaxHistoryInfoE")[0].innerHTML = "<%=hisInfo%>";
}
FcltMgr.setHeaderExtraTitle("<%=safe.html(extraTitle.join(", "))%>");
// Breedte van het scherm zetten. Elke cardbox (kolom) is 200 pixels breed plus 2 maal border van 10 pixels plus 5 pixels tussenruimte = 225.
FcltMgr.resized(window);
window.parent.$("#workFrame").height(window.parent.$("#workFrame").height() + 100);
});
</script>
<!-- LEGENDA -->
<script type="text/javascript">
function openLegenda()
{
params = { width: 220,
resizable: false,
position: {my: "right top", at: "right top+30"},
title: "<%=L("lcl_res_legenda")%>"
}
$('div#legenda').dialog(params).dialog('open');
}
</script>
<div id="legenda" style="display:none; line-height: 30px;">
<table id="opdrachtlegenda">
<tr><td colspan="2"><div class="legenda selectedcard"><%=I("fa-chevron-right")%>&nbsp;<%= L("lcl_opdr_selected") %></div></td></tr>
<tr><td><div class="cardmoved"><%=I("fa-chevron-right")%>&nbsp;<%= L("lcl_opdr_moved") %></div></td></tr>
<tr><td><div class="activecard"><%=I("fa-hourglass-half")%>&nbsp;<%= L("lcl_opdr_active") %></div></td></tr>
<tr><td><div class="activecard halt"><%=I("fa-pause")%>&nbsp;<%= L("lcl_mld_ord_hlt") %></div></td></tr>
<tr><td><div class="latecard"><%=I("fa-chevron-right")%>&nbsp;<%= L("lcl_opdr_late") %></div></td></tr>
<tr><td><div class="cardnotmoved"><%=I("fa-chevron-right")%>&nbsp;<%= L("lcl_opdr_notmoved") %></div></td></tr>
<tr><td><div class="disable-sort-item"><%=I("fa-lock cardopdrnochange")%>&nbsp;<%= L("lcl_blokkade") %></div></td></tr>
<tr><td><div class="legendaleft">Ctrl + Click:&nbsp;</div><div class="legenda legendaright selectedcard"><%="Multi select"%></div></td></tr>
<tr><td><div class="legendaleft">Shift + Click:&nbsp;</div><div class="legenda legendaright selectedcard"><%="Multi select"%></div></td></tr>
</table>
</div>
</body>
</html>
<%
}
%>