431 lines
20 KiB
Plaintext
431 lines
20 KiB
Plaintext
<%@ language="javascript"%>
|
|
<% /*
|
|
$Revision$
|
|
$Id$
|
|
|
|
Personen/werkplek buffer projecten module
|
|
|
|
Als een toepasselijk label thema in de tekening aan staat (CAD_V_PRJ_LABEL_BEWONER)
|
|
dan kan de gebruiker daar namen aanklikken. De werkplek van die persoon
|
|
komt dan in de buffer (PRJ_SELECTIE) terecht.
|
|
|
|
Die buffer wordt getoond.
|
|
|
|
Vanuit die buffer kunnen namen (eventueel op een andere verdieping) gedropt worden.
|
|
|
|
Als S("prs_werkplek_implicit")==0 dan kunnen effectief alleen PRJ_WERKPLEK'ken verplaatst
|
|
worden naar een andere ruimte (inclusief de persoon er op) of personen in ruimtes geplaatst
|
|
(negeer eventueel bestaande werkplek waar op gedropt, altijd een nieuwe werkplek
|
|
*/%>
|
|
|
|
<!-- #include file="../Shared/common.inc" -->
|
|
<!-- #include file="../Shared/resultset_table_v2.inc" -->
|
|
<!-- #include file="../CAD/FGII.inc" -->
|
|
<!-- #include file="../Shared/json2.js" -->
|
|
|
|
<%
|
|
FCLTHeader.Requires({ js: ["../cad/draganddrop.js"] });
|
|
|
|
// Globaal voor deze file
|
|
var scenario_key = getQParamInt("scenario_key");
|
|
var TransitParams = "scenario_key=" + scenario_key
|
|
var outputmode = getQParamInt("outputmode", 0);
|
|
var showall = getQParamInt("showall", 0) == 1;
|
|
|
|
// ==========================
|
|
// Eventueel buffer bijwerken na (dubbel)klikken op plaatje
|
|
// ==========================
|
|
var objKeys = getQParamArray("obj", []); // Selected object (PRS_PERSLID_KEY). Optional
|
|
if (objKeys.length > 0)
|
|
{
|
|
var soorten = getQParamArray("soort", []); // Soort selected object (PRJ_WERKPLEK)
|
|
for (i = 0; i < objKeys.length; i++)
|
|
AddToSelectionBuffer(soorten[i], objKeys[i]);
|
|
}
|
|
|
|
var highlight = getQParamIntArray("highlight", []); // Comma-separated room_key_list
|
|
if (S("prs_werkplek_implicit") == 1) // Dan voegt selecteren (klikken in) ruimte alles toe aan buffer
|
|
{
|
|
if (highlight.length > 0)
|
|
{
|
|
var sql = "SELECT PRJ_WERKPLEK_KEY"
|
|
+ " FROM PRJ_WERKPLEK prj_w,"
|
|
+ " prj_ruimte prj_r"
|
|
+ " WHERE prj_werkplek_verwijder IS NULL"
|
|
+ " AND prj_w.prj_ruimte_key = prj_r.prj_ruimte_key"
|
|
+ " AND prj_r.prj_scenario_key = " + scenario_key
|
|
+ " AND prj_w.prj_ruimte_key IN (" + highlight + ")";
|
|
var oRs = Oracle.Execute(sql);
|
|
while (!oRs.Eof)
|
|
{
|
|
AddToSelectionBuffer("PRJ_WERKPLEK", oRs("PRJ_WERKPLEK_KEY").value);
|
|
oRs.MoveNext();
|
|
}
|
|
}
|
|
}
|
|
|
|
// Voeg iets toe aan PRJ_SELECTIE of (als het er was) update de tijd
|
|
function AddToSelectionBuffer(prj_selectie_tabelnaam, prj_selectie_tabelkey)
|
|
{
|
|
// NB: Deze functie staat ook in rap_prj6_save.asp.
|
|
if (String(prj_selectie_tabelkey).match(/^W:/))
|
|
{
|
|
prj_selectie_tabelnaam = "PRJ_WERKPLEK";
|
|
prj_selectie_tabelkey=prj_selectie_tabelkey.substring(2);
|
|
}
|
|
var sql = "SELECT * FROM prj_selectie "
|
|
+ " WHERE prj_scenario_key = " + scenario_key
|
|
+ " AND prs_perslid_key = " + user_key
|
|
+ " AND prj_selectie_tabelnaam = " + safe.quoted_sql(prj_selectie_tabelnaam)
|
|
+ " AND prj_selectie_tabelkey = " + prj_selectie_tabelkey;
|
|
if (Oracle.Execute(sql).eof)
|
|
sql = "INSERT INTO prj_selectie"
|
|
+ " (prj_scenario_key, prs_perslid_key, prj_selectie_tabelnaam, prj_selectie_tabelkey)"
|
|
+ " VALUES (" + scenario_key + "," + user_key + ", " + safe.quoted_sql(prj_selectie_tabelnaam) + ", " + prj_selectie_tabelkey + ")"
|
|
else // wel buffertime aanpassen: komtie in ieder geval bovenaan
|
|
sql = "UPDATE prj_selectie"
|
|
+ " SET prj_selectie_aanmaak = SYSDATE"
|
|
+ " WHERE prj_scenario_key = " + scenario_key
|
|
+ " AND prs_perslid_key = " + user_key
|
|
+ " AND prj_selectie_tabelnaam = " + safe.quoted_sql(prj_selectie_tabelnaam)
|
|
+ " AND prj_selectie_tabelkey = " + prj_selectie_tabelkey;
|
|
Oracle.Execute(sql)
|
|
}
|
|
|
|
// ==========================
|
|
// Nu maken lijst met gegevens in de buffer
|
|
// ==========================
|
|
// De buffer kan bevatten:
|
|
// PRS_PERSLID: dan tonen we alle(!) werkplekken van deze persoon, of alleen de persoon
|
|
// PRJ_PERSLIDWERKPLEK: dan tonen we een specieke werkplekbezetting met persoon of afdeling
|
|
// PRJ_WERKPLEK: dan tonen we alle(!) personen/afdelingen op deze werkplek of een losse werkplek
|
|
// in dit laatste geval kan de werkplek verwijderd worden.
|
|
// eerst: subselect met de records die we willen zien
|
|
// Meestal voldoet aanwezig_perslidwerkplek omdat we via andere paden wel op scenario filteren.
|
|
var aanwezig_perslidwerkplek = "(select * from prj_perslidwerkplek where prj_perslidwerkplek_verwijder is null)"
|
|
// Bij personen zoeken we via een andere weg en moet de volgende zwaardere versie gebruikt worden
|
|
var aanwezig_scenario_perslidwerkplek = "(SELECT prs_perslid_key, prj_pwp.prj_werkplek_key,"
|
|
+ " prj_perslidwerkplek_key, prj_perslidwerkplek_bezetting"
|
|
+ " FROM prj_perslidwerkplek prj_pwp,"
|
|
+ " prj_werkplek prj_w,"
|
|
+ " prj_ruimte prj_r"
|
|
+ " WHERE prj_perslidwerkplek_verwijder IS NULL"
|
|
+ " AND prj_pwp.prj_werkplek_key = prj_w.prj_werkplek_key"
|
|
+ " AND prj_w.prj_ruimte_key = prj_r.prj_ruimte_key"
|
|
+ " AND prj_r.prj_scenario_key = " + scenario_key + ")";
|
|
|
|
var select_sql = " SELECT " // Losse personen evt. met (alle andere) werkplekken TODO: IN DIT SCENARIO!
|
|
+ " prj_selectie_key, prj_selectie_tabelnaam, prj_selectie_tabelkey, "
|
|
+ " prj_selectie_aanmaak, "
|
|
+ " pw.prj_werkplek_key, pw.prj_perslidwerkplek_key, "
|
|
+ " p.prs_perslid_key, p.prs_afdeling_key, pw.prj_perslidwerkplek_bezetting "
|
|
+ " FROM prj_selectie s, prs_perslid p, "+aanwezig_scenario_perslidwerkplek+" pw "
|
|
+ " WHERE s.prj_scenario_key = " + scenario_key
|
|
+ " AND s.prs_perslid_key = " + user_key
|
|
+ " AND prj_selectie_tabelnaam = 'PRS_PERSLID' "
|
|
+ " AND p.prs_perslid_key = s.prj_selectie_tabelkey "
|
|
+ " AND pw.prs_perslid_key(+) = p.prs_perslid_key "
|
|
+ " UNION ALL "
|
|
+ " SELECT " // Personen gekoppeld aan werkplek
|
|
+ " prj_selectie_key, prj_selectie_tabelnaam, prj_selectie_tabelkey, "
|
|
+ " prj_selectie_aanmaak, "
|
|
+ " pw.prj_werkplek_key, pw.prj_perslidwerkplek_key, "
|
|
+ " p.prs_perslid_key, p.prs_afdeling_key, pw.prj_perslidwerkplek_bezetting "
|
|
+ " FROM prj_selectie s, prs_perslid p, "+aanwezig_perslidwerkplek+" pw "
|
|
+ " WHERE s.prj_scenario_key = " + scenario_key
|
|
+ " AND s.prs_perslid_key = " + user_key
|
|
+ " AND prj_selectie_tabelnaam = 'PRJ_PERSLIDWERKPLEK' "
|
|
+ " AND pw.prj_perslidwerkplek_key = s.prj_selectie_tabelkey "
|
|
+ " AND pw.prs_perslid_key = p.prs_perslid_key "
|
|
+ " UNION ALL " // Werkplekken evt. met bezettende personen/afdelingen
|
|
+ " SELECT prj_selectie_key, prj_selectie_tabelnaam, prj_selectie_tabelkey, "
|
|
+ " prj_selectie_aanmaak, "
|
|
+ " s.prj_selectie_tabelkey prj_werkplek_key, pw.prj_perslidwerkplek_key, "
|
|
+ " pw.prs_perslid_key, dp.prs_afdeling_key prs_afdeling_key, "
|
|
+ " nvl(pw.prj_perslidwerkplek_bezetting,0) "
|
|
+ " FROM prj_selectie s, prs_perslid p, "
|
|
+ " prs_afdeling dp, "
|
|
+ aanwezig_perslidwerkplek + " pw"
|
|
+ " WHERE s.prj_scenario_key = " + scenario_key
|
|
+ " AND s.prs_perslid_key = " + user_key // Persoons gebonden buffer
|
|
+ " AND prj_selectie_tabelnaam = 'PRJ_WERKPLEK'"
|
|
+ " AND pw.prj_werkplek_key(+) = s.prj_selectie_tabelkey"
|
|
+ " AND dp.prs_afdeling_key(+) = p.prs_afdeling_key "
|
|
+ " AND pw.prs_perslid_key = p.prs_perslid_key(+)";
|
|
|
|
// Nu wat info er bij/omheen zoeken
|
|
sql = "SELECT prj_selectie_key, prj_selectie_tabelkey, prj_selectie_tabelnaam,"
|
|
+ " w.prj_werkplek_key, prj_perslidwerkplek_key, prj_perslidwerkplek_bezetting, "
|
|
+ " selectie.prs_perslid_key, selectie.prs_afdeling_key, "
|
|
+ " alg_l.alg_locatie_code || ' - ' "
|
|
+ " || alg_g.alg_gebouw_code || ' - ' "
|
|
+ " || alg_v.alg_verdieping_code || ' - ' "
|
|
+ " || w.prj_werkplek_omschrijving plaats, "
|
|
+ S("prs_pers_string") + " naam, " + S("prs_dep_string") + " afdnaam,"
|
|
+ " prj_selectie_aanmaak"
|
|
+ " FROM alg_locatie alg_l, "
|
|
+ " alg_gebouw alg_g, "
|
|
+ " alg_verdieping alg_v, "
|
|
+ " prj_ruimte prj_r, "
|
|
+ " prj_werkplek w, "
|
|
+ " prs_v_afdeling d, "
|
|
+ " prs_perslid p, "
|
|
+ " (" + select_sql + ") selectie"
|
|
+ " WHERE alg_v.alg_verdieping_key(+) = prj_r.alg_verdieping_key "
|
|
+ " AND alg_g.alg_gebouw_key(+) = alg_v.alg_gebouw_key "
|
|
+ " AND alg_l.alg_locatie_key(+) = alg_g.alg_locatie_key "
|
|
+ " AND prj_r.prj_ruimte_key(+) = w.prj_ruimte_key "
|
|
+ " AND w.prj_werkplek_key(+) = selectie.prj_werkplek_key "
|
|
+ " AND w.prj_werkplek_verwijder IS NULL "
|
|
+ " AND d.prs_afdeling_key (+) = selectie.prs_afdeling_key"
|
|
+ " AND p.prs_perslid_key (+) = selectie.prs_perslid_key"
|
|
+ " ORDER BY prj_selectie_aanmaak DESC, prj_selectie_key DESC";
|
|
%>
|
|
|
|
<html>
|
|
<head>
|
|
<% FCLTHeader.Generate({ outputmode: outputmode }); %>
|
|
<script type="text/javascript">
|
|
|
|
$(document).ready(function()
|
|
{
|
|
onLoad_prj6();
|
|
});
|
|
|
|
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)
|
|
{
|
|
var dwgX = SlnkEvent.dwgX;
|
|
var dwgY = SlnkEvent.dwgY;
|
|
var data = null;
|
|
|
|
if (SlnkEvent.Key && SlnkEvent.ContourLayer == "SLNK Contours") // PRJ_RUIMTE
|
|
{
|
|
var data = { actie : "domove"
|
|
, selKey : dragElement.getAttribute("selKey")
|
|
, tablekey : dragElement.getAttribute("tblKey")
|
|
, tablename : dragElement.getAttribute("tblName")
|
|
, room_key : SlnkEvent.Key
|
|
, dwgX : dwgX
|
|
, dwgY : dwgY
|
|
};
|
|
}
|
|
else if (SlnkEvent.Key && SlnkEvent.Key.match(/^W:/)) // op "PRJ_WERKPLEK"
|
|
{
|
|
var wpKey = SlnkEvent.Key.substring(2);
|
|
var data = { actie : "domove"
|
|
, selKey : dragElement.getAttribute("selKey")
|
|
, tablekey : dragElement.getAttribute("tblKey")
|
|
, tablename : dragElement.getAttribute("tblName")
|
|
, room_key : -1
|
|
, wpKey : wpKey
|
|
};
|
|
}
|
|
else if (SlnkEvent.Soort == "PRJ_PERSLIDWERKPLEK")
|
|
{ // Gedropt op een bestaande persoon. Mogelijk past hij op de werkplek van die persoon bij
|
|
var pwpKey = SlnkEvent.Key;
|
|
var data = { actie : "domove"
|
|
, selKey : dragElement.getAttribute("selKey")
|
|
, tablekey : dragElement.getAttribute("tblKey")
|
|
, tablename : dragElement.getAttribute("tblName")
|
|
, room_key : SlnkEvent.Key
|
|
, pwpKey : pwpKey
|
|
};
|
|
}
|
|
else if (typeof(SlnkEvent.Soort) != "undefined")
|
|
{
|
|
alert(L("lcl_prj_drop_invalid").format(SlnkEvent.Soort, SlnkEvent.Key));
|
|
};
|
|
|
|
if (data)
|
|
{
|
|
data.scenario_key = <%=scenario_key %>;
|
|
<% protectRequest.dataToken("data"); %>
|
|
$.post("rap_prj6_save.asp",
|
|
data,
|
|
FcltCallbackAndThen(parent.myRefresh),
|
|
"json");
|
|
};
|
|
dragend();
|
|
}
|
|
|
|
function emptyBuffer()
|
|
{
|
|
if (confirm(L("lcl_prj_clearbuffer")))
|
|
{
|
|
var data = { actie : "emptybuffer"
|
|
, scenario_key : <%=scenario_key%>
|
|
};
|
|
<% protectRequest.dataToken("data"); %>
|
|
$.post("rap_prj6_save.asp",
|
|
data,
|
|
FcltCallbackAndThen(parent.myRefresh),
|
|
"json");
|
|
}
|
|
}
|
|
|
|
function fillBuffer()
|
|
{
|
|
if (confirm("<%=L("lcl_prj_fillbufferQ").format(highlight.length)%>?"))
|
|
{
|
|
var data = { actie : "fillbuffer"
|
|
, highlight : "<%=highlight.join(",")%>"
|
|
, scenario_key : <%=scenario_key%>
|
|
};
|
|
<% protectRequest.dataToken("data"); %>
|
|
$.post("rap_prj6_save.asp",
|
|
data,
|
|
FcltCallbackAndThen(parent.myRefresh),
|
|
"json");
|
|
}
|
|
}
|
|
|
|
function DetachWP(selKey, tblName, prjWPkey, prsKey, wpKey)
|
|
{
|
|
if (confirm("<%=L("lcl_prj_ontkoppelen")%>" /* + tblName + " " + prjWPkey + " (prj_selectie " + selKey + ")"*/))
|
|
{
|
|
var data = { actie : "detachwp"
|
|
, selKey : selKey
|
|
, prjWPkey : prjWPkey
|
|
, prskey : prsKey
|
|
, wpkey : wpKey
|
|
, tablename : tblName
|
|
, scenario_key : <%=scenario_key%>
|
|
};
|
|
<% protectRequest.dataToken("data"); %>
|
|
$.post("rap_prj6_save.asp",
|
|
data,
|
|
FcltCallbackAndThen(parent.myRefresh),
|
|
"json");
|
|
}
|
|
}
|
|
|
|
function RemoveWP(selKey, wpKey)
|
|
{
|
|
// Verwijder een (reeds lege) werkplek geheel
|
|
if (confirm("<%= L("lcl_prj_deletewp")%>?" /* + wpKey + " (prj_selectie " + selKey + ")"*/))
|
|
{
|
|
var data = { actie : "removewp"
|
|
, selKey : selKey
|
|
, wpkey : wpKey
|
|
, scenario_key : <%=scenario_key%>
|
|
};
|
|
<% protectRequest.dataToken("data"); %>
|
|
$.post("rap_prj6_save.asp",
|
|
data,
|
|
FcltCallbackAndThen(parent.myRefresh),
|
|
"json");
|
|
}
|
|
}
|
|
|
|
function onLoad_prj6()
|
|
{
|
|
<%if (objKeys.length > 0 ) { %>
|
|
{
|
|
parent.myRefresh(); // Iets is misschien veranderd. Pas plaatje aan
|
|
}
|
|
<%} else { // Geen initDragger als nog een pending refresh().
|
|
// Zou risico op 'freed script' error geven
|
|
%>
|
|
initDragger();
|
|
<%} %>
|
|
}
|
|
</script>
|
|
</head>
|
|
|
|
<body class="prjtabpage">
|
|
<form name='u2'>
|
|
<%
|
|
function DraggableName(oRs)
|
|
{
|
|
var nm = safe.htmlattr(oRs("naam").value);
|
|
if (oRs("prs_afdeling_key").value == null) // Lege werkplek is niet draggable op naam
|
|
return L("lcl_free");
|
|
if (oRs("prs_perslid_key").value == null) // Afdeling gebonden werkplek
|
|
return "";
|
|
else
|
|
if (oRs("prj_werkplek_key").value == null) // Persoon zonder werkplek
|
|
return "<font color=red class='draggable'"
|
|
+ " selKey=" + oRs("prj_selectie_key").value
|
|
+ " tblKey=" + oRs("prs_perslid_key").value
|
|
+ " tblName='PRS_PERSLID'>" + nm + "</font>";
|
|
else // Persoon of afdeling met werkplek
|
|
if (S("prs_werkplek_implicit")==0) // expliciet: bezetting kan verplaatst worden
|
|
return "<font color=red class='draggable'"
|
|
+ " selKey=" + oRs("prj_selectie_key").value
|
|
+ " tblKey=" + oRs("prj_perslidwerkplek_key").value
|
|
+ " tblName='PRJ_PERSLIDWERKPLEK'>" + nm + "</font>";
|
|
else // Impliciet: hele werkplek altijd verplaatsen
|
|
return "<font color=red class='draggable'"
|
|
+ " selKey=" + oRs("prj_selectie_key").value
|
|
+ " tblKey=" + oRs("prj_werkplek_key").value
|
|
+ " tblName='PRJ_WERKPLEK'>" + nm + "</font>";
|
|
}
|
|
|
|
function DraggableWP(oRs)
|
|
{
|
|
if (oRs("prj_werkplek_key").value == null) // 'Geen' werkplek is niet draggable
|
|
return L("lcl_prj_geenwerkplek");
|
|
else if (S("prs_werkplek_implicit") == 1)
|
|
return safe.html(oRs("plaats").value);
|
|
else
|
|
return "<font color=red class='draggable'"
|
|
+ " selKey=" + oRs("prj_selectie_key").value
|
|
+ " tblKey=" + oRs("prj_werkplek_key").value
|
|
+ " tblName='PRJ_WERKPLEK'>" + safe.htmlattr(oRs("plaats").value) + "</font>";
|
|
}
|
|
|
|
function DetachWP(oRs)
|
|
{
|
|
if (oRs("prs_afdeling_key").value == null) // Lege werkplek, zelfs geen afdeling
|
|
return "<img onclick='RemoveWP(" + oRs("prj_selectie_key").value + ", " + oRs("prj_werkplek_key").value + ")'"
|
|
+ " src='../pictures/delete.gif' title='" + L("lcl_prj_delete_empty_wp") + "'>";
|
|
else
|
|
if (oRs("prj_perslidwerkplek_key").value != null) // perslid met werkplek
|
|
return "<img onclick='DetachWP(" + oRs("prj_selectie_key").value + ", this.getAttribute(\"tblName\"), "
|
|
+ oRs("prj_perslidwerkplek_key").value + ","
|
|
+ oRs("prs_perslid_key").value + ","
|
|
+ oRs("prj_werkplek_key").value + ")'"
|
|
+ " tblName='"+ oRs("prj_selectie_tabelnaam").value + "'" // Kan PRJ_WERKPLEK of PRS_PERSLIDWERKPLEK zijn
|
|
+ " src='../pictures/delete.gif' title='" + L("lcl_prj_deletename") + "'>";
|
|
else // Losse persoon is niet te verwijderen
|
|
return "";
|
|
}
|
|
|
|
var rst = new ResultsetTable({ keyColumn: "prj_selectie_key",
|
|
sql: sql,
|
|
ID: "workTable",
|
|
outputmode: outputmode,
|
|
showAll: showall
|
|
});
|
|
|
|
rst.addColumn(new Column({caption: L("lcl_prj_draggable_wp"), content: DraggableWP, title: L("lcl_draggable")}));
|
|
rst.addColumn(new Column({caption: "", content: DetachWP}));
|
|
if (S("prs_werkplek_implicit") == 0)
|
|
rst.addColumn(new Column({caption: L("lcl_prj_bezettingpct"), content: "prj_perslidwerkplek_bezetting", datatype: "number"}));
|
|
rst.addColumn(new Column({caption: L("lcl_prj_draggable_name"), content: DraggableName, title: L("lcl_draggable")}));
|
|
rst.addColumn(new Column({caption: L("lcl_department"), content: "afdnaam"}));
|
|
rst.addColumn(new Column({caption: L("lcl_prj_buffered_at"), content: "prj_selectie_aanmaak", datatype: "datetime"}));
|
|
|
|
var cnt = rst.processResultset();
|
|
%>
|
|
<input type=button value='<%=L("lcl_prj_bufferclear")%>' onClick='emptyBuffer();'>
|
|
<% if (S("prs_werkplek_implicit") == 0 && highlight.length > 0) { %>
|
|
<input type=button value='<%=L("lcl_prj_fillbuffer")%>' onClick='fillBuffer();'>
|
|
<% } %>
|
|
</form>
|
|
</body>
|
|
</html>
|