229 lines
9.7 KiB
Plaintext
229 lines
9.7 KiB
Plaintext
<%@ language="javascript"%>
|
||
<% /*
|
||
$Revision$
|
||
$Id$
|
||
|
||
Zwervenden
|
||
|
||
Geeft een overzicht van de personen die in dit scenario een rol zouden kunnen spelen
|
||
en niet op een andere manier in het project terecht kunnen komen, of zo.
|
||
|
||
Dit zijn:
|
||
- Personen waarbij de totale nieuwe bezetting kleiner zou worden dan hun dienstverband
|
||
(of S("prs_werkplek_implicit")==1-->personen zonder werkplek)
|
||
|
||
- personen zonder werkplek in de werkelijkheid
|
||
Te overwegen om toe te voegen (om betrokkenen ook niet grafisch in de buffer te plaatsen):
|
||
- personen met een werkplek op een verdieping behorend tot dit scenario
|
||
- TODO: Personen die in werkelijkheid een werkplek hadden maar nu niet meer
|
||
(feitelijk: dat zijn de personen die ontkoppeld zijn van hun werkplek)
|
||
|
||
IN: scenario_key
|
||
*/%>
|
||
<!-- #include file="../Shared/common.inc" -->
|
||
<!-- #include file="../Shared/resultset_table_v2.inc" -->
|
||
<!-- #include file="../CAD/FGII.inc" -->
|
||
<%
|
||
FCLTHeader.Requires({ js: ["../cad/draganddrop.js"]});
|
||
|
||
var sql = "";
|
||
var scenario_key = getQParamInt("scenario_key");
|
||
var outputmode = getQParamInt("outputmode", 0);
|
||
var showall = getQParamInt("showall", 0) == 1;
|
||
var doMove = getQParamInt("doMove", 0) == 1;
|
||
|
||
// ==========================
|
||
// Actie Plaatsen persoon
|
||
// ==========================
|
||
if (doMove)
|
||
{
|
||
perslid_key = getQParamInt("perslid_key"); // PRS_PERSLID
|
||
room_key = getQParamInt("room_key");
|
||
if (S("prs_werkplek_implicit")==0)
|
||
{
|
||
wpKey = getQParamInt("wpKey","NULL"); // evt exact gedropt op voorkeur werkplek
|
||
droppwpKey = getQParamInt("pwpKey","NULL"); // evt exact gedropt op voorkeur perslidwerkplek
|
||
// Daar zoeken we dan (als voorkeur) de werkplek bij
|
||
|
||
if (droppwpKey != "NULL") // Gedropt op een persoon. Zoek de werkplek van die persoon
|
||
{
|
||
sql = "SELECT prj_werkplek_key"
|
||
+ " FROM prj_perslidwerkplek"
|
||
+ " WHERE prj_perslidwerkplek_key = " + droppwpKey
|
||
oRs = Oracle.Execute(sql);
|
||
if (!oRs.eof)
|
||
wpKey = oRs("prj_werkplek_key");
|
||
}
|
||
sql = "BEGIN prj.prj_move_perslid ("+perslid_key+","+(room_key>0?room_key:"NULL")+","+wpKey+"); END;";
|
||
}
|
||
else // Impliciet
|
||
{
|
||
sql = "BEGIN prj.prj_move_perslid2 ("+perslid_key+","+room_key+"); END;";
|
||
}
|
||
|
||
try
|
||
{
|
||
Oracle.Execute(sql);
|
||
}
|
||
catch (e1)
|
||
{
|
||
%><div id=myerror>Verplaatsen niet gelukt: <%=e1.description%></div><script>alert(myerror.innerHTML)</script><%
|
||
}
|
||
}
|
||
|
||
// Lastig is dat er personen kunnen zijn met twee werkplekken waarvan <20><>n binnen en
|
||
// <20><>n buiten het project
|
||
// Toekomstige bezetting = (totale realbezetting) sqlA
|
||
// -(realbezetting via werkplekken op verdiepingen
|
||
// die bij het project betrokken zijn) sqlB
|
||
// +(projectbezetting via werkplekken op verdiepingen sqlC
|
||
// die bij het project betrokken zijn)
|
||
|
||
// Eerst: alle personen die (volgens hun dienstverband) niet voldoende werkplek hebben
|
||
// TODO: Binnen je/de scope
|
||
|
||
// Bij implicit is bezetting don't care en rekenen we hier met 100 zodat we weten
|
||
// of er netto minstens <20><>n werkplek overblijft
|
||
|
||
sqlA = "SELECT pwp.prs_perslid_key, "
|
||
+ (S("prs_werkplek_implicit")==0?"pwp.prs_perslidwerkplek_bezetting ":"100 prs_perslidwerkplek_bezetting")
|
||
+ " FROM prs_perslidwerkplek pwp";
|
||
|
||
sqlB = "SELECT pwp.prs_perslid_key, "
|
||
+ (S("prs_werkplek_implicit")==0?"pswp.prs_perslidwerkplek_bezetting ":"-100")
|
||
+ " FROM prs_perslidwerkplek pswp, "
|
||
+ " prj_perslidwerkplek pwp, "
|
||
+ " prj_werkplek pw, "
|
||
+ " prj_ruimte pr "
|
||
+ " WHERE pswp.prs_perslidwerkplek_key = pwp.prs_perslidwerkplek_key "
|
||
+ " AND pwp.prj_werkplek_key = pw.prj_werkplek_key "
|
||
+ " AND pw.prj_ruimte_key = pr.prj_ruimte_key "
|
||
+ " AND pr.prj_scenario_key = " + scenario_key
|
||
|
||
sqlC = "SELECT pwp.prs_perslid_key, "
|
||
+ (S("prs_werkplek_implicit")==0?"pwp.prj_perslidwerkplek_bezetting ":"100")
|
||
+ " FROM prj_perslidwerkplek pwp, "
|
||
+ " prj_werkplek pw, "
|
||
+ " prj_ruimte pr "
|
||
+ " WHERE pwp.prj_werkplek_key = pw.prj_werkplek_key "
|
||
+ " AND pw.prj_ruimte_key = pr.prj_ruimte_key "
|
||
+ " AND pwp.prj_perslidwerkplek_verwijder IS NULL "
|
||
+ " AND pr.prj_scenario_key = " + scenario_key
|
||
|
||
|
||
sqlAll = "SELECT prs_perslid_key, sum(prs_perslidwerkplek_bezetting) bezetting"
|
||
+ " FROM (" + sqlA + " UNION ALL " + sqlB + " UNION ALL " + sqlC + ") GROUP BY prs_perslid_key"
|
||
|
||
// Nu informatie bij de prs_perslid_key zoeken
|
||
sql = " SELECT p.prs_perslid_key, "+ S("prs_pers_string") +" naam,"
|
||
+ " p.prs_perslid_telefoonnr, p.prs_perslid_email email, "+S("prs_dep_string")+" afd,"
|
||
+ " "+ lcl.xsqla('p.prs_srtperslid_omschrijving','prs_v_aanwezigperslid.prs_srtperslid_key') +", p.prs_perslid_upper, "
|
||
+ " prs_perslid_dienstverband, sel.bezetting"
|
||
+ " FROM prs_v_aanwezigperslid, prs_v_perslid_gegevens p, "
|
||
+ " prs_v_afdeling d,"
|
||
+ " (" + sqlAll + ") sel"
|
||
+ " WHERE p.prs_perslid_key = prs_v_aanwezigperslid.prs_perslid_key"
|
||
+ " AND p.prs_perslid_key = sel.prs_perslid_key(+)"
|
||
+ " AND p.prs_afdeling_key = d.prs_afdeling_key"
|
||
+ " AND p.prs_perslid_upper NOT LIKE '[%'"
|
||
+ " AND p.prs_perslid_upper NOT LIKE 'LEEG [%'"
|
||
+ " AND (bezetting is null OR "
|
||
+ " bezetting < "+(S("prs_werkplek_implicit")==0?"prs_perslid_dienstverband":"100")
|
||
+ " ) ORDER BY prs_perslid_upper" ;
|
||
|
||
|
||
%>
|
||
<html>
|
||
<head>
|
||
<% FCLTHeader.Generate({ outputmode: outputmode }); %>
|
||
|
||
<script type="text/javascript">
|
||
function initDragger()
|
||
{
|
||
if (window.draginit) draginit();
|
||
}
|
||
|
||
// drag Event when dragged outside our frame
|
||
function drag_onMouseOut(dragElement)
|
||
{
|
||
myHTML="<div style='color:red;font-family:Verdana;font-size:8pt;cursor:move;'>" + dragElement.innerText + "</div>"
|
||
parent.EnableDragAndDrop(notifyDrop, myHTML);
|
||
}
|
||
|
||
// Callback functie: er is iets gedropt op het plaatje
|
||
function notifyDrop(SlnkEvent)
|
||
{
|
||
if (SlnkEvent.Key && SlnkEvent.ContourLayer == "SLNK Contours") // "PRJ_RUIMTE"
|
||
{
|
||
document.u2.action="rap_prj9.asp?domove=1&scenario_key=<%=scenario_key%>"+
|
||
"&perslid_key="+dragElement.getAttribute("perslid_key")+"&room_key="+SlnkEvent.Key;
|
||
document.u2.submit();
|
||
}
|
||
else if (SlnkEvent.Key && SlnkEvent.Key.match(/^W:/)) // PRJ_WERKPLEK
|
||
{
|
||
var wpKey = SlnkEvent.Key.substring(2);
|
||
document.u2.action="rap_prj9.asp?domove=1&scenario_key=<%=scenario_key%>"+
|
||
"&perslid_key="+dragElement.getAttribute("perslid_key")+"&room_key=-1"+
|
||
"&wpKey="+wpKey;
|
||
document.u2.submit();
|
||
}
|
||
else if (SlnkEvent.Soort == "PRJ_PERSLIDWERKPLEK")
|
||
{ // Gedropt op een bestaande persoon. Mogelijk past hij op de werkplek van die persoon bij
|
||
pwpKey = SlnkEvent.Key;
|
||
document.u2.action="rap_prj9.asp?domove=1&scenario_key=<%=scenario_key%>"+
|
||
"&perslid_key="+dragElement.getAttribute("perslid_key")+"&room_key="+SlnkEvent.Key+
|
||
"&pwpKey="+pwpKey;
|
||
document.u2.submit();
|
||
}
|
||
else if (typeof(SlnkEvent.Soort) != "undefined")
|
||
alert("Sorry: droppen op " + SlnkEvent.Soort + "(key "+SlnkEvent.Key+") nog niet ondersteund");
|
||
dragend();
|
||
}
|
||
|
||
function PerhapsRefresh()
|
||
{
|
||
<%if (doMove) { %>
|
||
parent.myRefresh();
|
||
<%} %>
|
||
}
|
||
</script>
|
||
</head>
|
||
|
||
<body class="prjtabpage" onLoad="PerhapsRefresh();initDragger()">
|
||
<form name='u2' action="rap_prj9.asp" method="post" target="_self">
|
||
<%
|
||
function DraggableName(oRs)
|
||
{
|
||
var nm = safe.htmlattr(oRs("naam").value);
|
||
return "<div class='draggable' perslid_key=" + oRs("prs_perslid_key").value + ">" + nm + "</div>";
|
||
}
|
||
|
||
function DraggablePercent(oRs)
|
||
{
|
||
var in_te_delen = oRs("prs_perslid_dienstverband").value - oRs("bezetting").value;
|
||
return in_te_delen;
|
||
}
|
||
|
||
var rst = new ResultsetTable({ keyColumn: "prs_perslid_key",
|
||
sql: sql,
|
||
ID: "workTable",
|
||
outputmode: outputmode,
|
||
title: L("lcl_prj_verhuis_scenarios"),
|
||
showAll: showall
|
||
});
|
||
|
||
rst.addColumn(new Column({caption: L("lcl_prj_draggable_name"), content: DraggableName, title: L("lcl_draggable")}));
|
||
if (S("prs_werkplek_implicit") == 0)
|
||
rst.addColumn(new Column({caption: L("lcl_prj_to_assign_perc"), content: DraggablePercent, datatype: "number"}));
|
||
rst.addColumn(new Column({caption: L("lcl_prs_person_dienstverband_perc"), content: "prs_perslid_dienstverband", datatype: "number"}));
|
||
rst.addColumn(new Column({caption: L("lcl_phone"), content: "prs_perslid_telefoonnr"}));
|
||
rst.addColumn(new Column({caption: L("lcl_prs_organisatie"), content: "afd"}));
|
||
rst.addColumn(new Column({caption: L("lcl_fg_func_names"), content: "prs_srtperslid_omschrijving"}));
|
||
|
||
var cnt = rst.processResultset();
|
||
%>
|
||
</form>
|
||
</body>
|
||
</html>
|
||
|