Files
Facilitor/APPL/PRJ/rap_prj9.asp
Jos Groot Lipman e34857125a FSN#35769 Consequent 'number' in plaats van 'integer'
svn path=/Website/trunk/; revision=28470
2016-03-14 10:32:29 +00:00

229 lines
9.7 KiB
Plaintext
Raw Blame History

<%@ 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>