367 lines
16 KiB
Plaintext
367 lines
16 KiB
Plaintext
<%@ language="javascript"%>
|
||
<% /*
|
||
$Revision$
|
||
$Id$
|
||
|
||
File: CAD/showGebouw.asp (beter:Verdiepingscherm.asp oid?)
|
||
Description: Toont een verdiepingstekening (evt met verdiepingsnavigator-balk) en
|
||
presenteer daarin
|
||
1) de objecten van gedefinieerde discipline(s)
|
||
2) of sta toe dat ruimtes worden geselecteerd
|
||
Op de onclick wordt ../pda/reserveringen.asp voor dat object/die ruimte aangeroepen
|
||
Kan o.a. toegepast worden voor Grafisch kiezen "werkplek" als een wp als reserveerbaar object
|
||
is gemodelleerd), maar deze pagina weet zelf niet zoveel van de uiteindelijke toepassing
|
||
Parameters:
|
||
geb_key
|
||
floor_key optional, default verdieping
|
||
disc_key optional, de discipline voor objecten, leeg voor ruimtes selecteren.
|
||
discs optional, de extra te tonen disciplines.
|
||
thema_key optional, het te tonen kleur thema
|
||
label_key optional, het te tonen label thema
|
||
hidenav optional, geen verdieping selector tonen
|
||
refresh optional, autorefresh. default 600 seconds
|
||
zoomDWGX
|
||
zoomDWGY
|
||
zoomScale Zoomt initieel in op deel van de verdieping. Pixel per mm, begin eens met 0.0250
|
||
Context:
|
||
Note: Als disc_key meegegeven dan worden alleen de verdiepingen tonen waarop die objecten voorkomen
|
||
Bij een refresh wordt altijd teruggesprongen naar de default verdieping.
|
||
zoomDWGX etc. is niet per verdieping. Zorg dus dat ze identiek zijn als je er meerdere hebt
|
||
Nauwkeurig DWGX DWGY etc bepalen:
|
||
- Resize je scherm naar de gewenste grootte en bepaal pixelX (breedte plaatje)
|
||
- Zoom in naar het gewenste plattegrond deel
|
||
- Rechtsklikken op de tekening voor 'About' SLNDKWF
|
||
- Dit toont (x0, y0)-(x1, y1)=sizeX,sizeY: de exacte DWG coordinaten in beeld
|
||
- Nu: zoomDWGX = x0+(sizeX/2)
|
||
zoomDWGY = y0+(sizeY/2)
|
||
zoomScale = pixelX / sizeX
|
||
|
||
|
||
*/
|
||
%>
|
||
<!-- #include file="../Shared/common.inc" -->
|
||
<!-- #include file="../Shared/iface.inc" -->
|
||
<!-- #include file="FGII.inc" -->
|
||
|
||
<%
|
||
FCLTHeader.Requires({ js: ["jquery-ui.js"]
|
||
});
|
||
|
||
var geb_key = getQParamInt("geb_key", user.alg_gebouw_key());
|
||
var disc_key = getQParamInt("disc_key", -1) // De *object* discipline
|
||
var discs = getQParamIntArray("discs", []) // Te tonen disciplines (ondergrond bijvoorbeeld)
|
||
if (disc_key > 0)
|
||
discs.push(disc_key);
|
||
|
||
var thema_key = getQParamInt("thema_key", -1); // Thema daarop
|
||
var label_key = getQParamInt("label_key", -1);
|
||
|
||
var floor_key = def_floor_key = getQParamInt("floor_key", user.alg_verdieping_key()); // current floor
|
||
var hidenav = getQParamInt("hidenav", 0); // optie: toon geen floornavigator
|
||
var refresh = getQParamInt("refresh", 600); // optie: refresh in secondes
|
||
|
||
var zoomScale = getQParamFloat("zoomScale", -1);
|
||
if (zoomScale > 0)
|
||
{
|
||
var zoomDWGX = getQParamFloat("zoomDWGX");
|
||
var zoomDWGY = getQParamFloat("zoomDWGY");
|
||
}
|
||
|
||
var my_cadrechten = user.func_enabled("CAD"); // negeer scope, we kunnen zo maar van verdieping wisselen
|
||
var autfunction= "WEB_CADUSE";
|
||
var authparams = user.checkAutorisation(autfunction); // voor kiezen *andere* verdiepingen
|
||
|
||
%>
|
||
<html>
|
||
<head>
|
||
<% FCLTHeader.Generate(); %>
|
||
<title><%= L("lcl_graphics") %> </title>
|
||
|
||
<script type="text/javascript">
|
||
var floor_key = <%=floor_key%>;
|
||
var autozoomed = false;
|
||
function OnFloorChanged(deze, fkey)
|
||
{
|
||
$("input[type=button]").removeClass("selected");
|
||
$(deze).addClass("selected");
|
||
floor_key = -1; // Eventkes invalid
|
||
resetMap();
|
||
floor_key = fkey;
|
||
window.autozoomed = false;
|
||
myRefresh();
|
||
}
|
||
|
||
/************************************************************\
|
||
* We know all we need. Now refresh the image on the right
|
||
\************************************************************/
|
||
function myRefresh()
|
||
{
|
||
MMap.SetCustomParameters(getCustomParameters())
|
||
MMap.Refresh(); // Try not to zoom extents
|
||
resetReload();
|
||
}
|
||
|
||
function getCustomParameters()
|
||
{
|
||
return "&vKey=" + floor_key +
|
||
"&discs=<%=discs%>" +
|
||
"&thema=<%=thema_key%>" +
|
||
"&label=<%=label_key%>" +
|
||
"&highlight=" + window.alg_ruimte_key +
|
||
"&ins_key=" + window.ins_key; // zojuist gereserveerd
|
||
}
|
||
|
||
/************************************************************\
|
||
* This event gets fired by the SLNKDWF viewer after the user
|
||
* clicked on the drawing.
|
||
* Note that by now myFindInIMG.asp has already translated
|
||
* the room-label or object-label into a ALG_RUIMTE_KEY
|
||
* or INS_DEEL_KEY
|
||
\************************************************************/
|
||
window.ins_key = -1;
|
||
window.alg_ruimte_key = -1;
|
||
function callback_reserved(json)
|
||
{
|
||
if (json.cancel)
|
||
{
|
||
window.ins_key = -1;
|
||
window.alg_ruimte_key = -1;
|
||
}
|
||
myRefresh();
|
||
}
|
||
|
||
function MMap_onClick(SlnkEvent)
|
||
{
|
||
resetReload();
|
||
switch (SlnkEvent.Param)
|
||
{
|
||
case "onclick":
|
||
case "ondblclick":
|
||
{
|
||
if (SlnkEvent.Key)
|
||
{ // Zoek het object/ ruimte
|
||
<% if (disc_key > 0) { %>
|
||
if (SlnkEvent.Key.match(/^I:/)) // INS_DEEL
|
||
{
|
||
var intKey = parseInt(SlnkEvent.Key.substring(2),10);
|
||
window.ins_key = intKey; // onthouden
|
||
window.alg_ruimte_key = -1
|
||
myRefresh();
|
||
var url = "../pda/reserveringen.asp?qrc=1&ins_key=" + intKey;
|
||
MMap.noAutoResize(true); // rustiger
|
||
FcltMgr.openModalDetail(url, "", { callback: callback_reserved, alwaysCallback: true, xnoClose: true });
|
||
MMap.noAutoResize(false);
|
||
}
|
||
<% } else { %>
|
||
if (SlnkEvent.Key > 0 && SlnkEvent.ContourLayer == "SLNK Contours") // RUIMTE
|
||
{
|
||
var alg_ruimte_key = SlnkEvent.Key;
|
||
window.ins_key = -1;
|
||
window.alg_ruimte_key = alg_ruimte_key; // onthouden
|
||
myRefresh();
|
||
var url = "../pda/reserveringen.asp?qrc=1&alg_ruimte_key=" + alg_ruimte_key;
|
||
MMap.noAutoResize(true); // rustiger
|
||
FcltMgr.openModalDetail(url, "", { callback: callback_reserved, alwaysCallbackParams: {}, xnoClose: true });
|
||
MMap.noAutoResize(false);
|
||
}
|
||
<% } %>
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
<% if (zoomScale > 0) { %>
|
||
// Liefst zou ik de autozoom direct doen.
|
||
// De DLL kan echter pas met DWG-coordinaten werken *na* de eerste keer tonen
|
||
// Daarom in de onMapperLoad
|
||
function MMap_onMapperLoad(pSLNKEvent)
|
||
{
|
||
if (window.autozoomed)
|
||
return; // niet nog een keer
|
||
MMap.zoom2DWG(<%=safe.jsfloat(zoomDWGX)%>, <%=safe.jsfloat(zoomDWGY)%>, <%=safe.jsfloat(zoomScale)%>);
|
||
window.autozoomed = true;
|
||
}
|
||
<% } %>
|
||
|
||
function resetMap()
|
||
{
|
||
if (!MMap || !MMap.Reset)
|
||
return; // Safari: te vroeg
|
||
MMap.Reset();
|
||
MMap.SetLabelPosition(<%=S("fg_labelPosition")%>);
|
||
MMap.SetIMGGenerator("../CAD/mySlnk2IMG.asp");
|
||
MMap.SetPaperColor(<%=S("fg_paperColor")%>);
|
||
}
|
||
|
||
function resizeIframes()
|
||
{
|
||
var height = parseInt(document.documentElement.clientHeight)-3;
|
||
if (document.getElementById('MMap').style.height != height + "px")
|
||
{
|
||
document.getElementById('MMap').style.height = height + "px";
|
||
document.getElementById('mapCell').style.height = height + "px";
|
||
document.getElementById('navigationCell').style.height = height + "px";
|
||
}
|
||
};
|
||
|
||
var /*global*/ reloadTimerID=null;
|
||
function resetReload()
|
||
{
|
||
if (window.reloadTimerID) clearTimeout(window.reloadTimerID);
|
||
window.reloadTimerID = setTimeout(FcltMgr.reload, <%=refresh%> * 1000);
|
||
}
|
||
|
||
var /*global*/ resizeTimerID=null;
|
||
function init()
|
||
{
|
||
resetReload();
|
||
resizeIframes();
|
||
resetMap();
|
||
myRefresh();
|
||
|
||
window.onresize = function()
|
||
{
|
||
if (window.resizeTimerID) clearTimeout(window.resizeTimerID);
|
||
window.resizeTimerID = setTimeout(resizeIframes, 100);// use a delay for IE because the resize event fires repeatly
|
||
}
|
||
<% if (thema_key > 0) { %>
|
||
$("#legenda").load("Legenda.asp?thema=<%=thema_key%>&scenario_key=0&parentKey="+floor_key+"&mode=0&LegendaFilter=L");
|
||
<% } %>
|
||
}
|
||
</script>
|
||
</head>
|
||
|
||
<body id="floorscreen">
|
||
|
||
<div id='navigationCell'>
|
||
<%
|
||
sql = "SELECT alg_locatie_omschrijving"
|
||
+ " , alg_gebouw_naam"
|
||
+ " FROM alg_v_gebouw_gegevens ag"
|
||
+ " WHERE ag.alg_gebouw_key = " + geb_key;
|
||
var oRs = Oracle.Execute(sql);
|
||
Response.Write("<h2>" + safe.html(oRs("alg_locatie_omschrijving").value) + "</h2>");
|
||
Response.Write("<h1>" + safe.html(oRs("alg_gebouw_naam").value) + "</h1>");
|
||
oRs.Close();
|
||
|
||
sql = "SELECT cad_thema_view, cad_legenda_key"
|
||
+ " FROM cad_thema"
|
||
+ " WHERE cad_thema_key = " + thema_key;
|
||
var oRs = Oracle.Execute(sql);
|
||
var thema_view = oRs("cad_thema_view").Value;
|
||
var legenda_key = oRs("cad_legenda_key").Value;
|
||
oRs.Close();
|
||
|
||
if (disc_key > 0)
|
||
{
|
||
var sqlMaxKleur = "SELECT ar.alg_verdieping_key, MAX(thema.waarde) waarde, ti.cad_legendawaarde_rgb, count(*) aantal "
|
||
+ " FROM ins_deel id, "
|
||
+ " ins_srtdeel isd, "
|
||
+ " alg_ruimte ar, "
|
||
+ " ( "+ thema_view + ") THEMA, "
|
||
+ " cad_legendawaarde TI "
|
||
+ " WHERE id.ins_alg_ruimte_key = ar.alg_ruimte_key "
|
||
+ " AND id.ins_srtdeel_key = isd.ins_srtdeel_key "
|
||
+ " AND ins_deel_verwijder IS NULL "
|
||
+ " AND (ins_deel_vervaldatum IS NULL OR ins_deel_vervaldatum > TRUNC(SYSDATE))"
|
||
+ " AND ins_deel_parent_key IS NULL "
|
||
+ " AND ins_srtdeel_acadsymbol is not null "
|
||
+ " AND id.ins_discipline_key = " + disc_key
|
||
+ " AND THEMA.ins_deel_key = id.ins_deel_key "
|
||
+ " AND thema.waarde >= ti.cad_legendawaarde_value"
|
||
+ " AND NOT EXISTS" // geen grotere waarde waar hij onder zou vallen
|
||
+ " (SELECT '1' FROM cad_legendawaarde ti2"
|
||
+ " WHERE ti2.cad_legendawaarde_value > ti.cad_legendawaarde_value"
|
||
+ " AND thema.waarde >= ti2.cad_legendawaarde_value"
|
||
+ " AND ti2.cad_legenda_key = " + legenda_key + ")"
|
||
+ " AND ti.cad_legenda_key = " + legenda_key
|
||
+ " GROUP BY ar.alg_verdieping_key, ti.cad_legendawaarde_rgb, ti.cad_legendawaarde_rgb";
|
||
}
|
||
else // Ruimte mode
|
||
{
|
||
var sqlMaxKleur = "SELECT ar.alg_verdieping_key, MAX(thema.waarde) waarde, ti.cad_legendawaarde_rgb, count(*) aantal "
|
||
+ " FROM alg_ruimte ar, "
|
||
+ " ( "+ thema_view + ") THEMA, "
|
||
+ " cad_legendawaarde TI "
|
||
+ " WHERE THEMA.alg_ruimte_key = ar.alg_ruimte_key "
|
||
+ " AND thema.waarde >= ti.cad_legendawaarde_value"
|
||
+ " AND NOT EXISTS"
|
||
+ " (SELECT '1' FROM cad_legendawaarde ti2"
|
||
+ " WHERE ti2.cad_legendawaarde_value > ti.cad_legendawaarde_value"
|
||
+ " AND thema.waarde >= ti2.cad_legendawaarde_value"
|
||
+ " AND ti2.cad_legenda_key = " + legenda_key + ")"
|
||
+ " AND ti.cad_legenda_key = " + legenda_key
|
||
+ " GROUP BY ar.alg_verdieping_key, ti.cad_legendawaarde_rgb, ti.cad_legendawaarde_rgb";
|
||
}
|
||
|
||
// TODO: Query optimalizeren zodat alleen <20><>n record met de hoogste 'waarde' er uit komen?
|
||
// Nu zijn we nog lui en sorteren de hoogste vooraan en negeren in de loop de rest.
|
||
sql = "SELECT v.alg_verdieping_key, v.alg_verdieping_code"
|
||
+ " , v.alg_verdieping_omschrijving"
|
||
+ " , maxkleur.cad_legendawaarde_rgb"
|
||
+ " , maxkleur.waarde"
|
||
+ " , aantal"
|
||
+ " FROM alg_v_aanwezigverdieping v, "
|
||
+ " cad_tekening ct," // er moet wel een tekenig voor zijn
|
||
+ " (" + sqlMaxKleur + ") maxkleur"
|
||
+ " WHERE v.alg_gebouw_key = " + geb_key
|
||
+ " AND v.alg_verdieping_key = maxkleur.alg_verdieping_key"
|
||
+ " AND ct.alg_verdieping_key = v.alg_verdieping_key";
|
||
if (disc_key > 0)
|
||
{
|
||
sql += " AND EXISTS"
|
||
+ " (SELECT ar.alg_verdieping_key"
|
||
+ " FROM ins_v_aanwezigdeel idd,"
|
||
+ " ins_srtdeel isd,"
|
||
+ " alg_ruimte ar"
|
||
+ " WHERE idd.ins_discipline_key = " + disc_key
|
||
+ " AND idd.ins_srtdeel_key = isd.ins_srtdeel_key"
|
||
+ " AND isd.ins_srtdeel_acadsymbol IS NOT NULL"
|
||
+ " AND idd.ins_alg_ruimte_type = 'R'"
|
||
+ " AND idd.ins_alg_ruimte_key = ar.alg_ruimte_key"
|
||
+ " AND ar.alg_verdieping_key = v.alg_verdieping_key"
|
||
+ " AND (idd.ins_deel_vervaldatum IS NULL OR idd.ins_deel_vervaldatum > TRUNC(SYSDATE))"
|
||
+ ")"
|
||
}
|
||
sql += " ORDER BY v.alg_verdieping_volgnr, maxkleur.waarde DESC"; // 'Hoogste' waarde vooraan
|
||
var oRs = Oracle.Execute(sql);
|
||
Response.Write("<div id='verdiepingen' style='"+(hidenav ? 'display:none': '')+"'>");
|
||
var last_floor_key = -1;
|
||
while (!oRs.Eof)
|
||
{
|
||
if (last_floor_key == oRs("alg_verdieping_key").Value)
|
||
{
|
||
oRs.MoveNext();
|
||
continue;
|
||
}
|
||
var desc = oRs("alg_verdieping_code").Value + " - " + oRs("alg_verdieping_omschrijving").Value;
|
||
if (oRs("aantal").Value > 0 && oRs("waarde").Value > 0)
|
||
desc += " ("+oRs("aantal").Value+ ")";
|
||
Response.Write("\n<input type='button' value='" + safe.htmlattr(desc) + "'"
|
||
+ (oRs("alg_verdieping_key").Value == floor_key?" class='selected'":"")
|
||
+ (oRs("cad_legendawaarde_rgb").Value ? " style='background-color:#" + oRs("cad_legendawaarde_rgb") + "'":"")
|
||
+ " onclick='OnFloorChanged(this, "+oRs("alg_verdieping_key").Value+")'"
|
||
+">");
|
||
last_floor_key = oRs("alg_verdieping_key").Value;
|
||
oRs.MoveNext();
|
||
}
|
||
oRs.Close()
|
||
Response.Write("</div>");
|
||
%>
|
||
</div>
|
||
|
||
<!-- ==========================
|
||
HET plaatje
|
||
============================ -->
|
||
<div id='legenda'></div>
|
||
<div id = 'mapCell'>
|
||
<iframe id=MMap name=MMap src="../SlnkDWF/ToonIMG.asp"
|
||
frameborder='0' framespacing='0' scrolling='no'
|
||
onLoad='init();'
|
||
width="100%" height="100%">
|
||
</iframe>
|
||
</div>
|
||
</body>
|
||
</html>
|