Files
Facilitor/APPL/PRJ/rap_prj6.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

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>