Files
Facilitor/APPL/CAD/showGebouw.asp
Jos Groot Lipman cd11aa3b3f FSN#39809 Onnodige cust.css verwijzigen verwijderd
svn path=/Website/trunk/; revision=33416
2017-04-05 16:00:05 +00:00

367 lines
16 KiB
Plaintext
Raw Blame History

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