Files
Facilitor/APPL/CAD/Symbols.inc
2023-04-13 22:29:26 +00:00

780 lines
40 KiB
C++

<% /*
$Revision$
$Id$
File: symbols.inc
Description: Functies om symbolen (ins_deel) te tekenen
Parameters:
Context:
Note:
*/
var datumfilter = getQParamDate("datumfilter", null);
var deel2res = getQParamInt("deel2res", 0); // is het een reserveerbaar deel
// Result: false: ik mag niet schrijven
// true: ik mag wel schrijven
// Veronderstel dat autorisatie minimaal verdieping is, ruimte wordt niet ondersteund
function canWriteInsDeel(deel_key, vKey, scenario_key)
{
// Hebben we wel schrijfrechten op dit symbool op deze verdieping?
// bepaal eerst de discipline
if (scenario_key > 0)
{
var sql = "SELECT ins_discipline_key"
+ " FROM prj_deel pdd,"
+ " ins_srtdeel isd,"
+ " ins_srtgroep isg"
+ " WHERE pdd.ins_srtdeel_key = isd.ins_srtdeel_key"
+ " AND isd.ins_srtgroep_key = isg.ins_srtgroep_key"
+ " AND prj_deel_key = " + deel_key;
}
else
{
var sql = "SELECT ins_discipline_key"
+ " FROM ins_deel idd"
+ " WHERE ins_deel_key = " + deel_key;
}
var oRs = Oracle.Execute(sql);
var disc_key = oRs("ins_discipline_key").value;
oRs.Close();
var sql = "SELECT MIN(fac_gebruiker_alg_level_write) lvl"
+ " FROM fac_v_webgebruiker w, fac_functie f "
+ " WHERE w.ins_discipline_key = " + disc_key
+ " AND w.fac_functie_key = f.fac_functie_key "
+ " AND w.prs_perslid_key = " + user_key
+ " AND fac_functie_code = " + safe.quoted_sql(scenario_key <= 0? 'WEB_INSMAN' : 'WEB_INSPRJ');
var oRs = Oracle.Execute(sql);
if (oRs.eof)
return false; // Geen rechten
var ALGWriteLevel = oRs("lvl").value;
oRs.Close();
if (ALGWriteLevel == 9)
return false; // Geen rechten
if (ALGWriteLevel < 0)
return true; // Alle rechten
var fac_v_my_disc_onrgoed_write = ""
+ "SELECT a.alg_ruimte_key"
+ " FROM alg_v_onrgoed_familie a,"
+ " alg_v_onrgoed_familie aa,"
+ " alg_v_my_room mr"
+ " WHERE mr.alg_ruimte_key = aa.alg_ruimte_key"
+ " AND mr.prs_perslid_key = " + user_key
+ " AND a.alg_onrgoed_elder_key = aa.alg_onrgoed_elder_key"
+ " AND aa.niveau = a.niveau" // Noodzakelijk want ALG_LOCATIE heeft eigen sequence
+ " AND aa.niveau >= " + ALGWriteLevel
var rsql = " SELECT 1" // plaatsgebonden en gebruiker heeft een plaats (werkplek)
+ " FROM (" + fac_v_my_disc_onrgoed_write + ") oga, alg_ruimte ar"
+ " WHERE oga.alg_ruimte_key = ar.alg_ruimte_key"
+ " AND ar.alg_verdieping_key = " + vKey
return !(Oracle.Execute(rsql).eof);
}
/************************************************************\
* Voeg alle symbolen van de huidige discipline(s) toe aan
* de tekening
* Een en ander altijd binnen te tonen disciplines waarbij
* een ins_srtdeel_acadsymbol is ingevuld
*
* Merk op dat een dobbelsteen verschillende symbolen kan bevatten
*
* LOOP: Per ruimte/aantal binnen verdieping met objecten zonder XY
* - Bepaal linksboven van de dobbelsteen
* LOOP: Per srtdeel binnen te tonen disciplines
* - Maak een symbool aan
* - LOOP: per object van deze soort in deze ruimte
* Teken een symbool van dit object volgens
* volgende positie dobbelpatroon
* LOOP: Per srtdeel
* - Maak een symbool aan
* - LOOP: per object met ingevulde XY
* - Teken het symbool op XY
*
\************************************************************/
var _symbolDefs = []; // Welke hebben we al gedefinieerd.
var fa_symbol_codes = null; // fontawesome --> @1234 coding
function DefineSymbol(cHandle, acadSymbol, acadInsertion)
{
var symbolname = acadSymbol;
if (symbolname in _symbolDefs)
return symbolname; // Direct klaar
if (symbolname.substr(0, 3) == "fa-")
{
if (!fa_symbol_codes)
{
cHandle.SetSymbolFont(S("fg_symbolfont"));
// scannen gebeurt elke page-request opnieuw maar duurt zo'n 20ms, acceptabel.
var cssfile = Server.MapPath("../FontAwesome/css/fontawesome.min.css");
__Log("Scanning " + cssfile);
fa_symbol_codes = {};
var fso = new ActiveXObject("Scripting.FileSystemObject");
var fread = fso.OpenTextFile(cssfile, 1); // For Reading
var css = fread.ReadAll();
fread.Close()
// .fa-coffee:before{content:"\f0f4"} versie 5
// .fa-coffee:before,.fa-mug-saucer:before{content:"\f0f4"} versie 6
//var re2 = /\.(fa-[a-z\-]+)\:before\{content\:\"\\([0-9a-f]+)\"\}/g;
var re2 = /(\.fa-[a-z\d\-]+\:before)(?:\,(\.fa-[a-z\d\-]+\:before))*\{content\:\"\\([0-9a-f]+)\"\}/g;
var cnt = 0;
var match = re2.exec(css);
while (match != null)
{
for (var i = 1; i < match.length - 1; i++)
{
var name = match[i];
if (name)
{
cnt++;
fa_symbol_codes[name.split(":")[0].substring(1)] = match[match.length - 1];
}
}
match = re2.exec(css);
}
__Log("Found {0} FontAwesome symbols".format(cnt));
}
return "@" + (fa_symbol_codes[symbolname] || "f128"); // f128 is Question mark/not found
}
if (symbolname.substr(0, 1) == "@")
{
//_symbolDefs[symbolname] = true;
return symbolname;
}
//Maak symbool definitie
var symbolFile = S("flexfilespath") + "/cad/symbols/" + acadSymbol + ".dwf"
var fso = new ActiveXObject("Scripting.FileSystemObject");
if (!fso.FileExists(symbolFile))
var symbolFile = Server.MapPath("../shared/" + acadSymbol + ".dwf"); // Fallback naar shared
if (fso.FileExists(symbolFile))
{
if (S("fg_move_origin") & 2) // ellipse1.dwf van YKPN gaf overflow bij draggen
{
var xd = new ActiveXObject("SLNKDWF.DWFFile");
xd.Open(symbolFile);
var y = new ActiveXObject("SLNKDWF.WhipFile");
y.SetLayers("NotExist", "NotExist");
if (xd.EplotSections.Count == 0)
y.Load(symbolFile);
else
{
var epl = xd.EplotSections.Item(0);
y.LoadStream(epl);
}
var tmp_dwf = shared.tempFolder() + "/CAD_" + acadSymbol +".w2d";
symbolFile = tmp_dwf; // wordt na 24 uur in fgii.inc/cleanup_tempfolder wel opgeruimd
y.SaveAs(symbolFile);
}
var xs = new ActiveXObject("SLNKDWF.DWFFile")
xs.Open(symbolFile);
try
{ // De DLL ondersteunt dat een DWG een symbool bibliotheek is met een symbool
// per pagina. In de praktijk ondersteunen we dat hier niet en pakken altijd het
// ene eerste symbool
if (xs.EplotSections.Count > 0)
var symcnt = cHandle.DefineSymbol(symbolname, xs.EplotSections.Item(0));
else
var symcnt = cHandle.DefineW2DSymbol(symbolname, symbolFile); // ook als S("fg_move_origin") op 2 staat
}
catch (ee)
{
throw "Error defining symbol " + acadSymbol
+ "\n" + ee.description;
}
var oAbout = new ActiveXObject("SLNKDWF.About");
if (oAbout.VersionString >= "4,24")
{
if (acadInsertion && acadInsertion.orgx != null && acadInsertion.orgy != null)
{
cHandle.SymbolOrigin(symbolname, acadInsertion.orgx, acadInsertion.orgy);
}
}
// Boundingbox overrulen
// Commentaarregels daarin met # begonnen vallen er vanzelf uit
if (fso.FileExists(symbolFile + ".bounds"))
{
var f = fso.OpenTextFile(symbolFile + ".bounds");
while (!f.AtEndOfStream)
{
var r = f.ReadLine();
var xy = r.split(",");
if (xy.length == 2 && !isNaN(parseFloat(xy[0])) && !isNaN(parseFloat(xy[1])))
symcnt.AddPoint(parseFloat(xy[0]), parseFloat(xy[1]));
}
f.Close();
}
}
else
{
// Symbool bestand niet gevonden. Later wordt dit vanzelf een *STAR symbool
}
_symbolDefs[symbolname] = true;
return symbolname;
}
// Callbackunctie om een OCTAGON achter een object te leggen
function fnHighlight(rs, cHandle, dwgX, dwgY, scl, params)
{
if ("I:"+params.highlight_ins_deel_key == rs(0).value)
{
var scl = scl||1;
var star = cHandle.AddSymbol(dwgX, dwgY,"*OCTAGON"); // TODO: meer cirkel of punaise?
star.scale = 1.5*scl;
//star.Contour.Label = "[cff0000]"+safe.nvl(rs("oms").Value);
star.Contour.SetoutlineColor(S("fg_hilitebordercolor"), 232);
star.Contour.SetColor(S("fg_hilitesymbolfillcolor"), 128);
}
}
// Voeg alle symbolen (INS_DEEL) toe aan de tekening
// Gelukkig bevat pDiscs_arr alleen disciplines waar we leesrechten op hebben dus
// dat hoeven we niet meer te controleren.
// Globalen als colKey etc. zijn al gezet
function addObjecten(cHandle, highlight_ins_deel_key)
{
if ( (pDiscs_arr.length == 0 || pDiscs_arr.join(",").indexOf("-1") != -1)
&& (pSrtG_arr.length == 0 || pSrtG_arr.join(",").indexOf("-1") != -1)
&& (pSrtD_arr.length == 0 || pSrtD_arr.join(",").indexOf("-1") != -1)
)
return;
var symbolArray = []; // Hierin onthouden we even onze symbolen om later labels te kunnen zetten
//
// Bepaal afmeting dobbelsteen
// Tel per ruimte over alle disciplines heen waar symboolnaam in ingevuld
// Dat aantal moeten we van te voren weten om linksboven de dobbel te
// kunnen beginnen
sql = "SELECT ins_alg_ruimte_key alg_ruimte_key, count(*) aantal"
+ " FROM ins_deel id, ins_srtdeel isd, ins_srtgroep isg, " + dbTable + " SYNC"
+ " WHERE id.ins_alg_ruimte_key = SYNC." + colKey
// + " AND id.ins_alg_ruimte_type = 'R'"
+ " AND id.ins_srtdeel_key = isd.ins_srtdeel_key"
+ " AND ins_deel_dwgx IS NULL AND ins_deel_dwgy IS NULL"
+ " AND "+syncParent+" = " + pvKey
+ " 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 isd.ins_srtgroep_key = isg.ins_srtgroep_key"
+ " AND ins_srtdeel_acadsymbol IS NOT NULL"
+ " AND ( 1=0"
+ (pDiscs_arr.length ? " OR id.ins_discipline_key IN (" + pDiscs_arr.join(",") +")" : "")
+ (pSrtG_arr.length ? " OR isg.ins_srtgroep_key IN (" + pSrtG_arr.join(",") +")" : "")
+ (pSrtD_arr.length ? " OR isd.ins_srtdeel_key IN (" + pSrtD_arr.join(",") +")" : "")
+ " )"
+ " GROUP BY ins_alg_ruimte_key"
oRsRuimte = Oracle.Execute(sql);
while (!oRsRuimte.EOF)
{
var symbols =
buildDobbel(cHandle,
{ aantal: oRsRuimte("aantal").value, // Zoveel symbolen voor onze dobbelsteen
ruimte: oRsRuimte("alg_ruimte_key").value,
highlight_ins_deel_key: highlight_ins_deel_key,
fnPreProcess: fnHighlight,
fnLabel: function (rs)
{
if (!(rs("ins_disc_params_type").Value & 16)) // Hide default label
return "";
return "[c][S"+S("fg_dobbelScale")*S("fg_inINSLabelSize")+"][c808080]" + safe.nvl(rs("oms").Value);
},
sql : "SELECT 'I:'||ins_deel_key key, ins_deel_omschrijving oms,"
+ " ins_srtdeel_acadsymbol symbolname, ins_disc_params_type,"
+ " ins_srtdeel_acadsymbol_dwgx orgx, ins_srtdeel_acadsymbol_dwgy orgy, di.ins_discipline_color color"
+ " FROM ins_deel id, ins_srtdeel isd, ins_srtgroep isg,"
+ " ins_disc_params isdp, ins_tab_discipline di"
+ " WHERE id.ins_alg_ruimte_key = " + oRsRuimte("alg_ruimte_key").Value
+ " AND id.ins_srtdeel_key = isd.ins_srtdeel_key"
+ " AND ins_deel_dwgx IS NULL AND ins_deel_dwgy IS NULL"
+ " AND isd.ins_srtgroep_key = isg.ins_srtgroep_key"
+ " AND ins_srtdeel_acadsymbol IS NOT NULL"
+ " AND isdp.ins_discipline_key = id.ins_discipline_key"
+ " AND di.ins_discipline_key = id.ins_discipline_key"
+ " AND di.ins_discipline_verwijder IS NULL"
+ " AND ( 1=0"
+ (pDiscs_arr.length ? " OR id.ins_discipline_key IN (" + pDiscs_arr.join(",") +")" : "")
+ (pSrtG_arr.length ? " OR isg.ins_srtgroep_key IN (" + pSrtG_arr.join(",") +")" : "")
+ (pSrtD_arr.length ? " OR isd.ins_srtdeel_key IN (" + pSrtD_arr.join(",") +")" : "")
+ " )"
+ " 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"
+ " ORDER BY isg.ins_discipline_key, isg.ins_srtgroep_key, "
+ " isd.ins_srtdeel_key, ins_deel_omschrijving"
}
)
for (var xx in symbols)
symbolArray[xx] = symbols[xx];
oRsRuimte.MoveNext();
}
oRsRuimte.Close();
//
// Nu nog de ins_deel met ingevulde XY
//
sql = "SELECT 'I:'||ins_deel_key key, ins_deel_omschrijving oms, "+ lcl.xsqla('isd.ins_srtdeel_omschrijving', 'isd.ins_srtdeel_key')+","
+ " ins_deel_dwgx dwgx, ins_deel_dwgy dwgy,"
+ " ins_deel_dwgrotatie rot, ins_deel_dwgschaal scl,"
+ " ins_srtdeel_acadsymbol symbolname, " + dbLabel + " dblabel,"
+ " ins_srtdeel_acadsymbol_dwgx orgx, ins_srtdeel_acadsymbol_dwgy orgy,"
+ " ins_srtdeel_acadlabelpos lpos, ins_srtdeel_acadlabelsize lsize,"
+ " id.ins_alg_ruimte_key cadkey, ins_disc_params_type, di.ins_discipline_color color"
+ " FROM ins_deel id, ins_srtdeel isd, ins_srtgroep isg, "+dbTable+" SYNC,"
+ " ins_disc_params isdp, ins_tab_discipline di"
+ " WHERE id.ins_alg_ruimte_key = SYNC."+colKey
+ " AND id.ins_srtdeel_key = isd.ins_srtdeel_key"
// + " AND id.ins_alg_ruimte_type = 'R'"
+ " AND ins_deel_dwgx IS NOT NULL"
+ " AND "+syncParent+" = " + pvKey
+ " 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 isd.ins_srtgroep_key = isg.ins_srtgroep_key"
+ " AND INS_SRTDEEL_ACADSYMBOL IS NOT NULL"
+ " AND di.ins_discipline_key = id.ins_discipline_key"
+ " AND di.ins_discipline_verwijder IS NULL"
+ " AND isdp.ins_discipline_key = id.ins_discipline_key"
+ " AND ( 1=0"
+ (pDiscs_arr.length ? " OR id.ins_discipline_key IN (" + pDiscs_arr.join(",") +")" : "")
+ (pSrtG_arr.length ? " OR isg.ins_srtgroep_key IN (" + pSrtG_arr.join(",") +")" : "")
+ (pSrtD_arr.length ? " OR isd.ins_srtdeel_key IN (" + pSrtD_arr.join(",") +")" : "")
+ " )"
+ " ORDER BY isd.ins_srtdeel_key"
symbols = buildSymbols(cHandle, { sql : sql,
fnLabel: function (rs)
{
if (!(rs("ins_disc_params_type").Value & 16)) // Hide default label; kan nu beter via ins_srtdeel_acadlabelsize=0
return "";
if ("I:"+highlight_ins_deel_key == rs("key").value)
return "[cff0000][S"+4*S("fg_inINSLabelSize")+"]" + safe.nvl(rs("oms").Value); // TODO waarom rood; er ligt al een octagon achter?
if (rs("lsize").Value == null || rs("lsize").Value > 0)
{
return "[c][S"+(rs("lsize").Value||S("fg_inINSLabelSize"))+"]"
+"[c"+toHexValue(rs("color").Value, { autobackground: true })+"]"
+ safe.nvl(rs("oms").Value);
}
},
highlight_ins_deel_key: highlight_ins_deel_key,
fnPreProcess: fnHighlight
}
);
for (var xx in symbols)
symbolArray[xx] = symbols[xx];
themaProps={ symbols: symbolArray,
labelThema_key: pLabel_key,
kleurThema_key: pThema_key,
fnSql: function (viewName)
{
return "SELECT 'I:'||id.ins_deel_key key, thema.*"
+ " FROM ins_deel id, ins_srtdeel isd, ins_srtgroep isg, "+dbTable+" SYNC, " + viewName + " THEMA"
+ " WHERE id.ins_alg_ruimte_key = SYNC."+colKey
+ " AND id.ins_srtdeel_key = isd.ins_srtdeel_key"
+ " AND "+syncParent+" = " + pvKey
+ " 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 isd.ins_srtgroep_key = isg.ins_srtgroep_key"
+ " AND ins_srtdeel_acadsymbol IS NOT NULL"
+ " AND ( 1=0"
+ (pDiscs_arr.length ? " OR id.ins_discipline_key IN (" + pDiscs_arr.join(",") +")" : "")
+ (pSrtG_arr.length ? " OR isg.ins_srtgroep_key IN (" + pSrtG_arr.join(",") +")" : "")
+ (pSrtD_arr.length ? " OR isd.ins_srtdeel_key IN (" + pSrtD_arr.join(",") +")" : "")
+ " )"
+ " AND THEMA.ins_deel_key = id.ins_deel_key"
+ (datumfilter && hasColumn(viewName, 'fclt_f_datum', 'DATE') ? " AND THEMA.fclt_f_datum = " + datumfilter.toSQL():"")
+ (hasColumn(viewName, 'fclt_f_3d_user_key', 'NUMBER') ? " AND THEMA.fclt_f_3d_user_key = " + user_key:"")
+ " ORDER BY isd.ins_srtdeel_key"
}
}
// Symbool kleur thema's
if ((themaType & 0x18) == 0x10) // Bit 4/5 moet 10 zijn voor objecten
kleurThema(cHandle, themaProps)
if (pThemaI_key > 0)
{
themaProps.kleurThema_key = pThemaI_key;
kleurThema(cHandle, themaProps);
}
// Symbool label thema's, komen bewust na de kleurthema's zodat evt. labeltooltip prevaleert
if ((labelType & 0x18) == 0x10) // Bit 4/5 moet 10 zijn voor objecten
labelThema(cHandle, themaProps)
if (pLabelI_key > 0)
{
themaProps.labelThema_key = pLabelI_key;
labelThema(cHandle, themaProps);
}
}
// INS_DEELen die gekoppeld zijn aan werkplekken ('inventaris');
// We tonen ze alleen als ze XY hebben
function addWerkplekObjecten(cHandle)
{
if (pDiscs_arr.length == 0 || pDiscs_arr.join(",").indexOf("-1") != -1)
return;
//
// Nu nog de gewone objecten met XY
//
sql = "SELECT ins_deel_key, ins_deel_omschrijving oms, "+ lcl.xsqla('isd.ins_srtdeel_omschrijving', 'isd.ins_srtdeel_key')+","
+ " coalesce(ins_deel_dwgx,0) dwgx, coalesce(ins_deel_dwgy,0) dwgy, "
+ " coalesce(ins_deel_dwgrotatie,0)ins_deel_dwgrotatie, coalesce(ins_deel_dwgschaal,1.0)ins_deel_dwgschaal,"
+ " prs_werkplek_dwgx wdwgx, prs_werkplek_dwgy wdwgy,"
+ " prs_werkplek_dwgrotatie, prs_werkplek_dwgschaal,"
+ " isd.ins_srtdeel_key, ins_srtdeel_acadsymbol, " + dbLabel + " dblabel,"
+ " ins_srtdeel_acadsymbol_dwgx orgx, ins_srtdeel_acadsymbol_dwgy orgy,"
+ " '#000000' color" //zwart?
+ " FROM ins_deel id, ins_srtdeel isd, ins_srtgroep isg, alg_ruimte ar,"
+ " prs_werkplek pw"
+ " WHERE pw.prs_alg_ruimte_key = ar.alg_ruimte_key"
+ " AND id.ins_alg_ruimte_key = pw.prs_werkplek_key"
+ " AND id.ins_alg_ruimte_type = 'W'"
+ " AND id.ins_srtdeel_key = isd.ins_srtdeel_key"
+ " AND prs_werkplek_dwgx IS NOT NULL" // werkplek moet wel geplaatst zijn
+ " AND alg_verdieping_key = " + pvKey
+ " AND isg.ins_discipline_key in (" + pDiscs_arr.join(",") +")"
+ " 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 isd.ins_srtgroep_key = isg.ins_srtgroep_key"
+ " AND ins_srtdeel_acadsymbol IS NOT NULL"
+ " ORDER BY isd.ins_srtdeel_key"
var oRs = Oracle.Execute(sql);
var symbolArray = [];
while (!oRs.EOF)
{
var insertionpoint = ( (oRs("orgx").Value === null && oRs("orgy").Value === null)
? null
: {orgx: oRs("orgx").Value, orgy: oRs("orgy").Value}
);
var symbolName = DefineSymbol(cHandle, oRs("ins_srtdeel_acadsymbol").Value, insertionpoint);
var wRot = oRs("prs_werkplek_dwgrotatie").value;
if (wRot==null) wRot=0;
dwRot = wRot*3.1415926/180;
var scl = 1.0;
if (oRs("prs_werkplek_dwgschaal").value != null)
scl=oRs("prs_werkplek_dwgschaal").value;
var insX=oRs("wdwgX").Value+scl*(Math.cos(dwRot)*oRs("dwgX").Value-Math.sin(dwRot)*oRs("dwgY").Value);
var insY=oRs("wdwgY").Value+scl*(Math.cos(dwRot)*oRs("dwgY").Value+Math.sin(dwRot)*oRs("dwgX").Value);
var symbol = cHandle.AddSymbol(insX, insY, oRs("ins_srtdeel_acadsymbol").Value);
if (oRs("ins_deel_dwgrotatie").value != null)
symbol.rotation = (wRot+oRs("ins_deel_dwgrotatie").Value+360)%360;
var scl = 1.0;
if (oRs("ins_deel_dwgschaal").value != null)
scl = oRs("ins_deel_dwgschaal").value;
symbol.scale = scl;
symbol.Contour.Key = "IW:"+oRs("ins_deel_key").Value;
symbolArray[symbol.Contour.Key] = symbol; // Onthouden voor later
symbol.Contour.Label = "[c][S"+S("fg_inINSLabelSize")+"][c"+toHexValue(oRs("color").Value)+"]"+safe.nvl(oRs("oms").Value);
symbol.Contour.SetUrl("", safe.nvl(oRs("oms").Value));
//symbol.Contour.SetColor(0x0000FF, 64);
//symbol.SetColor(0xFF0000,255); // Maak onzichtbaar
oRs.MoveNext();
}
oRs.Close();
// thema's
themaProps={ symbols: symbolArray,
labelThema_key: pLabel_key,
kleurThema_key: pThema_key,
fnSql: function (viewName)
{
return "SELECT 'IW:'||id.ins_deel_key key, waarde"
+ " FROM ins_deel id, ins_srtdeel isd, ins_srtgroep isg, "
+ " alg_ruimte SYNC, " + viewName + " THEMA,"
+ " prs_werkplek pw"
+ " WHERE pw.prs_alg_ruimte_key = SYNC.alg_ruimte_key"
+ " AND id.ins_alg_ruimte_key = pw.prs_werkplek_key"
+ " AND id.ins_alg_ruimte_type = 'W'"
+ " AND id.ins_srtdeel_key = isd.ins_srtdeel_key"
+ " AND alg_verdieping_key = " + pvKey
+ " 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 isd.ins_srtgroep_key = isg.ins_srtgroep_key"
+ " AND ins_srtdeel_acadsymbol IS NOT NULL"
+ " AND isg.ins_discipline_key in (" + pDiscs_arr.join(",") +")"
+ " AND THEMA.ins_deel_key = id.ins_deel_key"
+ (datumfilter && hasColumn(viewName, 'fclt_f_datum', 'DATE') ? " AND THEMA.fclt_f_datum = " + datumfilter.toSQL():"")
+ (hasColumn(viewName, 'fclt_f_3d_user_key', 'NUMBER') ? " AND THEMA.fclt_f_3d_user_key = " + user_key:"")
+ " ORDER BY isd.ins_srtdeel_key"
}
}
// Symbool label thema's
if ((labelType & 0x18) == 0x10) // Bit 4/5 moet 10 zijn voor objecten
labelThema(cHandle, themaProps)
// Symbool kleur thema's
if ((themaType & 0x18) == 0x10) // Bit 4/5 moet 10 zijn voor objecten
kleurThema(cHandle, themaProps)
}
// Plaats de ruimtegebonden objecten (werkplekgebonden gebeurt in addPRJWerkplekObjecten)
function addPRJObjecten(cHandle)
{
if (pDiscs_arr.length == 0 || pDiscs_arr.join(",").indexOf("-1") != -1)
return;
var symbolArray = []; // Hierin onthouden we even onze symbolen om later labels te kunnen zetten
//
// Bepaal afmeting dobbelsteen
// Tel per ruimte over alle disciplines heen waar symboolnaam in ingevuld
// Dat aantal moeten we van te voren weten om linksboven de dobbel te
// kunnen beginnen
sql = "SELECT id.prj_ruimte_key, count(*) aantal"
+ " FROM prj_deel id, ins_srtdeel isd, ins_srtgroep isg, "+dbTable+" SYNC"
+ " WHERE id.prj_ruimte_key = SYNC."+colKey
+ " AND id.prj_werkplek_key is null"
+ " AND id.ins_srtdeel_key = isd.ins_srtdeel_key"
+ " AND prj_deel_dwgx IS NULL AND prj_deel_dwgy IS NULL"
+ " AND "+syncParent+" = " + pvKey
+ " AND prj_deel_verwijder IS NULL"
+ " AND isd.ins_srtgroep_key = isg.ins_srtgroep_key"
+ " AND ins_srtdeel_acadsymbol IS NOT NULL"
+ " AND isg.ins_discipline_key in (" + pDiscs_arr.join(",") +")"
+ " AND prj_scenario_key = " + scenario_key
+ " GROUP BY id.prj_ruimte_key"
oRsRuimte = Oracle.Execute(sql);
while (!oRsRuimte.EOF)
{
var symbols =
buildDobbel(cHandle,
{ aantal: oRsRuimte("aantal").value, // Zoveel symbolen voor onze dobbelsteen
ruimte: oRsRuimte("prj_ruimte_key").Value,
fnLabel: function (rs)
{ return "[c][S"+S("fg_dobbelScale")*S("fg_inINSLabelSize")+"][c808080]" + safe.nvl(rs("oms").Value);
},
sql : "SELECT 'P:'||prj_deel_key key, prj_deel_omschrijving oms, "+ lcl.xsqla('isd.ins_srtdeel_omschrijving', 'isd.ins_srtdeel_key')+","
+ " NULL dwgx, NULL dwgy,"
+ " NULL rot, NULL scl,"
+ " ins_srtdeel_acadsymbol symbolname,"
+ " ins_srtdeel_acadsymbol_dwgx orgx, ins_srtdeel_acadsymbol_dwgy orgy,"
+ " id.prj_ruimte_key cadkey, "
+ " prj_deel_verwijder, di.ins_discipline_color color"
+ " FROM prj_deel id, ins_srtdeel isd, ins_srtgroep isg, ins_tab_discipline di"
+ " WHERE id.prj_ruimte_key = " + oRsRuimte("prj_ruimte_key").Value
+ " AND id.prj_werkplek_key is null"
+ " AND id.ins_srtdeel_key = isd.ins_srtdeel_key"
+ " AND prj_deel_dwgx IS NULL AND prj_deel_dwgy IS NULL"
+ " AND isd.ins_srtgroep_key = isg.ins_srtgroep_key"
+ " AND di.ins_discipline_key = isg.ins_discipline_key"
+ " AND ins_srtdeel_acadsymbol IS NOT NULL"
+ " AND isg.ins_discipline_key in (" + pDiscs_arr.join(",") + ")"
+ " AND prj_deel_verwijder IS NULL"
+ " ORDER BY isg.ins_discipline_key, isg.ins_srtgroep_key, "
+ " isd.ins_srtdeel_key, prj_deel_omschrijving"
}
)
for (var xx in symbols)
symbolArray[xx] = symbols[xx];
oRsRuimte.MoveNext();
}
oRsRuimte.Close();
//
// Nu nog de prj_deel met ingevulde XY
//
sql = "SELECT 'P:'||prj_deel_key key, prj_deel_omschrijving oms, "+ lcl.xsqla('isd.ins_srtdeel_omschrijving', 'isd.ins_srtdeel_key')+","
+ " prj_deel_dwgx dwgx, prj_deel_dwgy dwgy,"
+ " prj_deel_dwgrotatie rot, prj_deel_dwgschaal scl,"
+ " ins_srtdeel_acadsymbol symbolname, " + dbLabel + " dblabel,"
+ " ins_srtdeel_acadsymbol_dwgx orgx, ins_srtdeel_acadsymbol_dwgy orgy,"
+ " ins_srtdeel_acadlabelpos lpos, ins_srtdeel_acadlabelsize lsize,"
+ " id.prj_ruimte_key cadkey, "
+ " prj_deel_verwijder, di.ins_discipline_color color"
+ " FROM prj_deel id, ins_srtdeel isd, ins_srtgroep isg, " + dbTable + " SYNC, ins_tab_discipline di"
+ " WHERE id.prj_ruimte_key = SYNC."+colKey
+ " AND id.ins_srtdeel_key = isd.ins_srtdeel_key"
+ " AND prj_deel_dwgx IS NOT NULL"
+ " AND "+syncParent+" = " + pvKey
// + " AND prj_deel_verwijder IS NULL"
+ " AND isd.ins_srtgroep_key = isg.ins_srtgroep_key"
+ " AND INS_SRTDEEL_ACADSYMBOL IS NOT NULL"
+ " AND di.ins_discipline_key = isg.ins_discipline_key"
+ " AND di.ins_discipline_verwijder IS NULL"
+ " AND isg.ins_discipline_key in (" + pDiscs_arr.join(",") +")"
+ " AND prj_scenario_key = " + scenario_key
+ " ORDER BY isd.ins_srtdeel_key"
symbols = buildSymbols(cHandle, { sql : sql,
fnLabel: function (rs)
{ if (rs("prj_deel_verwijder").Value == null)
return "[c][s30][c"+toHexValue(rs("color").Value)+"]" + safe.nvl(rs("oms").Value);
else
return "[c][s30][c404040]"
+ L("lcl_fg_obj_deleted")
+ "\n[c][s30][c404040]" + safe.nvl(rs("oms").Value);
},
fnProcess: function (symbol, rs)
{
//symbol.Contour.Hatch = 3;
//symbol.Contour.SetColor(0xFF00FF, 64); // Blauwe achtergrond
if (rs("prj_deel_verwijder").Value != null)
symbol.SetColor(0x404040, 255); // grijs maken
}
}
);
for (var xx in symbols)
symbolArray[xx] = symbols[xx];
themaProps= { symbols: symbolArray,
labelThema_key: pLabel_key,
kleurThema_key: pThema_key,
fnSql:function (viewName)
{
return "SELECT 'P:'||id.prj_deel_key key, waarde"
+ " FROM prj_deel id, ins_srtdeel isd, ins_srtgroep isg, "
+ " PRJ_RUIMTE SYNC, " + viewName + " THEMA"
+ " WHERE id.prj_ruimte_key = SYNC.prj_ruimte_key"
+ " AND id.prj_werkplek_key is null"
+ " AND id.ins_srtdeel_key = isd.ins_srtdeel_key"
+ " AND alg_verdieping_key = " + pvKey
+ " AND prj_deel_verwijder IS NULL"
+ " AND isd.ins_srtgroep_key = isg.ins_srtgroep_key"
+ " AND ins_srtdeel_acadsymbol IS NOT NULL"
+ " AND isg.ins_discipline_key in (" + pDiscs_arr.join(",") +")"
+ " AND THEMA.prj_deel_key = id.prj_deel_key"
+ " AND prj_scenario_key = " + scenario_key
+ (datumfilter && hasColumn(viewName, 'fclt_f_datum', 'DATE') ? " AND THEMA.fclt_f_datum = " + datumfilter.toSQL():"")
+ (hasColumn(viewName, 'fclt_f_3d_user_key', 'NUMBER') ? " AND THEMA.fclt_f_3d_user_key = " + user_key:"")
+ " ORDER BY isd.ins_srtdeel_key"
}
}
// Symbool label thema's
if ((labelType & 0x18) == 0x10) // Bit 4/5 moet 10 zijn voor objecten
labelThema(cHandle, themaProps);
// Symbool kleur thema's
if ((themaType & 0x18) == 0x10) // Bit 4/5 moet 10 zijn voor objecten
kleurThema(cHandle, themaProps)
}
// INS_DEELen die gekoppeld zijn aan werkplekken ('inventaris')
// voor werkplek gebonden objecten doen we (nog) geen dobbelsteen
function addPRJWerkplekObjecten(cHandle)
{
if (pDiscs_arr.length == 0 || pDiscs_arr.join(",").indexOf("-1") != -1)
return;
//
// Nu nog de gewone objecten met XY
//
sql = "SELECT prj_deel_key, prj_deel_omschrijving oms, "+ lcl.xsqla('isd.ins_srtdeel_omschrijving', 'isd.ins_srtdeel_key')+","
+ " coalesce(prj_deel_dwgx,0) dwgx, coalesce(prj_deel_dwgy,0) dwgy, "
+ " coalesce(prj_deel_dwgrotatie,0) rot, coalesce(prj_deel_dwgschaal,1.0) scl,"
+ " prj_werkplek_dwgx wdwgx, prj_werkplek_dwgy wdwgy,"
+ " prj_werkplek_dwgrotatie wrot, prj_werkplek_dwgschaal wscl,"
+ " isd.ins_srtdeel_key, ins_srtdeel_acadsymbol, " + dbLabel + " dblabel,"
+ " ins_srtdeel_acadsymbol_dwgx orgx, ins_srtdeel_acadsymbol_dwgy orgy,"
+ " '#000000' color" // zwart?
+ " FROM prj_deel id, ins_srtdeel isd, ins_srtgroep isg, prj_ruimte SYNC,"
+ " prj_werkplek pw"
+ " WHERE pw.prj_ruimte_key = SYNC.prj_ruimte_key"
+ " AND id.prj_werkplek_key = pw.prj_werkplek_key"
+ " AND id.ins_srtdeel_key = isd.ins_srtdeel_key"
+ " AND prj_werkplek_dwgx IS NOT NULL" // werkplek moet wel geplaatst zijn
+ " AND alg_verdieping_key = " + pvKey
+ " AND isg.ins_discipline_key in (" + pDiscs_arr.join(",") +")"
+ " AND prj_deel_verwijder IS NULL"
+ " AND isd.ins_srtgroep_key = isg.ins_srtgroep_key"
+ " AND ins_srtdeel_acadsymbol IS NOT NULL"
+ " AND prj_scenario_key = " + scenario_key
+ " ORDER BY isd.ins_srtdeel_key"
var oRs = Oracle.Execute(sql);
var symbolArray = [];
while (!oRs.EOF)
{
var insertionpoint = ( (oRs("orgx").Value === null && oRs("orgy").Value === null)
? null
: {orgx: oRs("orgx").Value, orgy: oRs("orgy").Value}
);
var symbolName = DefineSymbol(cHandle, oRs("ins_srtdeel_acadsymbol").Value, insertionpoint);
var wRot = oRs("wrot").value;
if (wRot==null) wRot=0;
var dwRot = wRot*3.1415926/180;
var scl = 1.0;
if (oRs("wscl").value != null)
scl=oRs("wscl").value;
var insX=oRs("wdwgX").Value+scl*(Math.cos(dwRot)*oRs("dwgX").Value-Math.sin(dwRot)*oRs("dwgY").Value);
var insY=oRs("wdwgY").Value+scl*(Math.cos(dwRot)*oRs("dwgY").Value+Math.sin(dwRot)*oRs("dwgX").Value);
var symbol = cHandle.AddSymbol(insX, insY, oRs("ins_srtdeel_acadsymbol").Value);
if (oRs("rot").value != null)
symbol.rotation = (wRot+oRs("rot").Value+360)%360;
var scl = 1.0;
if (oRs("scl").value != null)
scl = oRs("scl").value;
symbol.scale = scl;
symbol.Contour.Key = "IW:"+oRs("prj_deel_key").Value;
symbolArray[symbol.Contour.Key] = symbol; // Onthouden voor later
symbol.Contour.Label = "[c][s20][c"+toHexValue(rs("color").Value)+"]"+safe.nvl(rs("oms").Value);
symbol.Contour.SetUrl("", safe.nvl(rs("oms").Value));
//symbol.Contour.SetColor(0x0000FF, 64);
//symbol.SetColor(0xFF0000,255); // Maak onzichtbaar
oRs.MoveNext();
}
oRs.Close();
// thema's
themaProps={ symbols: symbolArray,
labelThema_key: pLabel_key,
kleurThema_key: pThema_key,
fnSql: function (viewName)
{
return "SELECT 'IW:'||id.prj_deel_key key, waarde"
+ " FROM prj_deel id, ins_srtdeel isd, ins_srtgroep isg, "
+ " prj_RUIMTE SYNC, " + viewName + " THEMA,"
+ " prj_werkplek pw"
+ " WHERE pw.prj_ruimte_key = SYNC.prj_ruimte_key"
+ " AND id.prj_werkplek_key = pw.prj_werkplek_key"
+ " AND id.ins_srtdeel_key = isd.ins_srtdeel_key"
+ " AND alg_verdieping_key = " + pvKey
+ " AND prj_deel_verwijder IS NULL" // leuke thema's
+ " AND isd.ins_srtgroep_key = isg.ins_srtgroep_key"
+ " AND ins_srtdeel_acadsymbol IS NOT NULL"
+ " AND isg.ins_discipline_key in (" + pDiscs_arr.join(",") +")"
+ " AND THEMA.prj_deel_key = id.prj_deel_key"
+ (datumfilter && hasColumn(viewName, 'fclt_f_datum', 'DATE') ? " AND THEMA.fclt_f_datum = " + datumfilter.toSQL():"")
+ (hasColumn(viewName, 'fclt_f_3d_user_key', 'NUMBER') ? " AND THEMA.fclt_f_3d_user_key = " + user_key:"")
+ " ORDER BY isd.ins_srtdeel_key"
}
}
// Symbool label thema's
if ((labelType & 0x18) == 0x10) // Bit 4/5 moet 10 zijn voor objecten
labelThema(cHandle, themaProps)
// Symbool kleur thema's
if ((themaType & 0x18) == 0x10) // Bit 4/5 moet 10 zijn voor objecten
kleurThema(cHandle, themaProps)
}
%>