Files
Facilitor/APPL/CAD/cad_scan_dwf.inc
2024-02-22 14:41:34 +00:00

176 lines
7.5 KiB
C++

<% /*
$Revision$
$Id$
File: cad_scan_dwf.inc
Description: Scant een DWF en sla de gevonden contouren op
in de tabel CAD_IMP_CONTOUR
Daar kunnen andere schermen dan rapporten op definieren.
Context:
Note: ContoursXML is niet meer nodig sinds SlnkDWF.DLL 2.60: daar kun je
ContourCount en ContourItem gebruiken om te itereren over de contouren
*/ %>
<!--#include file="../SlnkDWF/DWFProperties.inc" -->
<%
// Als concept==1 dan wordt onder de concept folder gezocht en opgeslagen in cad_contour met concept=1
function scanDWF(ctKey, concept)
{
var sql;
// is bij aanroepers al wel geweest protectRequest.validateToken();
if (1) // Inout
{
sql = "SELECT ct.cad_tekening_key" // Concept tekeningnaam is altijd dezelfde als actueel
+ " , ct.cad_tekening_filenaam"
+ " , ct.cad_tekening_type"
+ " , ct.cad_tekening_key"
+ " , v.alg_verdieping_code"
+ " FROM cad_tekening ct"
+ " , alg_v_aanwezigverdieping v"
+ " WHERE ct.cad_tekening_verwijder IS NULL"
+ " AND ct.cad_tekening_type = 'P'"
+ " AND ct.alg_verdieping_key = v.alg_verdieping_key(+)"
+ " AND ct.cad_tekening_key = " + ctKey;
}
var oRs = Oracle.Execute(sql);
var fso, f1;
var fso = new ActiveXObject("Scripting.FileSystemObject");
var msg;
if (!oRs.Eof)
{
var teknaam = oRs("cad_tekening_filenaam").value + ".DWF";
var verdieping_code = oRs("alg_verdieping_code").Value;
if (concept)
teknaam = S("flexfilespath") + "/cad/concept/" + teknaam;
else
teknaam = S("flexfilespath") + "/cad/" + teknaam;
if (!fso.FileExists(teknaam))
{
msg = L("lcl_fg_drawingnotfound") + ":" + teknaam;
__Log(msg);
}
else
{
var nnOpp = 0;
var nnLabel = 0;
var oOpp;
// Oude contouren altijd opruimen
Oracle.Execute("DELETE FROM CAD_IMP_CONTOUR"
+ " WHERE cad_tekening_key = " + ctKey
+ " AND cad_imp_contour_concept = " + concept);
if (S("fg_contourlayers_floor"))
{
__Log("Inscannen " + teknaam);
var verContour = GetContoursHandle(teknaam, S("fg_contourlayers_floor"));
// Als we 1 verdieping hebben gevonden, voeg die dan hieronder in
if (verContour.ContourCount === 1) {
var cont = verContour.ContourItem(0);
oOpp = cont.Area;
if (oOpp) {
nnOpp = (cont.Area/1e6);
nnLabel = 1;
sql = "INSERT INTO CAD_IMP_CONTOUR (cad_tekening_key, cad_imp_contour_nr, cad_imp_contour_opp, cad_imp_contour_concept)"
+ " VALUES(" + ctKey + ", " + safe.quoted_sql(L("lcl_floor") + " (" + verdieping_code + ")") + ", " + nnOpp + ", " + concept + ")";
Oracle.Execute(sql);
}
}
else
__Log("{0} verdieping contour(en) gevonden op laag {1}, BVO niet ingelezen".format(verContour.ContourCount, S("fg_contourlayers_floor")));
}
else
{
verContour = { ContourCount: 0 };
}
var dwfHandle = GetContoursHandle(teknaam, S("fg_contourlayers"), S("fg_labellayers"),
{ minArea: S("fg_contour_minArea")
, minmergedistance: S("fg_minmergedistance")
, flags: S("fg_slnkdwf_flags")
}
);
for (var i = 0; i < dwfHandle.ContourCount; i++)
{
var cont = dwfHandle.ContourItem(i);
oLabel = cont.Label;
if (oLabel) {
oOpp = cont.Area;
if (oOpp) {
nnLabel++;
nnOpp += (oOpp/1e6);
sql = "INSERT INTO CAD_IMP_CONTOUR (cad_tekening_key, cad_imp_contour_nr, cad_imp_contour_opp, cad_imp_contour_concept)"
+ " VALUES(" + ctKey + ", " + safe.quoted_sql(oLabel, 30) + " ," + oOpp/1e6 + " ," + concept + ")";
Oracle.Execute(sql);
}
}
}
var foundRooms = verContour.ContourCount + dwfHandle.ContourCount;
__Log("Scannen tekening " + teknaam + " met " + foundRooms + " contouren")
// Nu nog een tweede slag voor de eventuele alternatieve contourlagen
// Let wel: alleen contour-labels die we met de eerste slag gevonden hebben
// tellen we mee, we doen geen nieuwe inserts
if (S("fg_contourlayers_alt1")!="" && S("fg_labellayers_alt1")!="")
{
var dwfHandle = GetContoursHandle(teknaam, S("fg_contourlayers_alt1"), S("fg_labellayers_alt1"),
{ minArea: S("fg_contour_minArea")
, minmergedistance: S("fg_minmergedistance")
, flags: S("fg_slnkdwf_flags")
});
for (var i=0; i < dwfHandle.ContourCount; i++)
{
var cont = dwfHandle.ContourItem(i);
oLabel = cont.Label;
if (oLabel)
{
oOpp = cont.Area;
if (oOpp)
{
sql = "UPDATE CAD_IMP_CONTOUR "
+" SET cad_imp_contour_opp_alt1 = " + oOpp/1e6
+" WHERE cad_tekening_key = " + ctKey
+" AND cad_imp_contour_concept = " + concept
+" AND cad_imp_contour_nr = " + safe.quoted_sql(oLabel, 30)
Oracle.Execute(sql);
}
}
}
}
sql = "UPDATE cad_tekening "
+ " SET cad_tekening_geimporteerd = SYSDATE"
+ " WHERE cad_tekening_key = " + ctKey;
Oracle.Execute(sql);
// Zoek dubbeleen
sql = "SELECT cad_imp_contour_nr"
+ " , COUNT(*) "
+ " FROM cad_imp_contour"
+ " WHERE cad_tekening_key = " + ctKey
+ " AND cad_imp_contour_concept = " + concept
+ " GROUP BY cad_imp_contour_nr HAVING COUNT(*) > 1"
var oRs2 = Oracle.Execute(sql);
if (oRs2.eof) {
msg = L("lcl_fg_tek_scannen").format(oRs("cad_tekening_filenaam").value, foundRooms, nnLabel, nnOpp.toFixed(1) );
} else {
msg = L("lcl_fg_tek_scandbl"); // Pas op: dubbelen
}
oRs2.Close();
}
// Kan er maar een zijn oRs.MoveNext();
}
oRs.Close();
return msg;
}
%>