Files
Facilitor/APPL/PDA/getLocation.asp
Jos Groot Lipman ed0faa6885 FSN#29607 Set location sql-statement had te veel plusjes
svn path=/Website/branches/v5.4.1/; revision=21581
2014-05-14 10:23:23 +00:00

102 lines
4.3 KiB
Plaintext

<%@ language = "JavaScript" %>
<% /*
$Revision$
$Id$
File: pda/getLocation.asp
Gets the nearest alg-key of systemselected ALG-level based on the given latitude,longitude
that is within the scope of this user
SO result.alg_key depends on Level:
L: alg_location_key
G: alg_gebouw_key
V: alg_verdieping_key (lowest floor of selected building)
Status: Ready
Context: vanaf setlocation.asp
Parameters:
lat, lng
*/
%>
<%
JSON_Result = 1;
%>
<!-- #include file="../Shared/common.inc" -->
<!--#include file="../Shared/json2.js" -->
<%
var lat = getQParamFloat("lat");
var lng = getQParamFloat("lng");
var lvl = S("mobile_alg_level");
var result = {};
// Kies heel ruim waar je autorisatie op hebt (uit: setlocation.asp)
// Let op dat je hier alleen autorisaties met plaats-component toevoegt (fac_functie_minlevel & 8)
var sql = "SELECT COALESCE(MIN(fac_gebruiker_alg_level_write), 9) writelevel"
+ " FROM fac_v_webgebruiker g, fac_functie f "
+ " WHERE g.fac_functie_key = f.fac_functie_key "
+ " AND f.fac_functie_code IN ('WEB_MLDUSE', 'WEB_INSMAN', 'WEB_INSUSE', 'WEB_ALGMAN', 'WEB_ALGUSE', 'WEB_MLDBO2', 'WEB_ORDBO2', 'WEB_MLDBOF', 'WEB_BEZUSE', 'WEB_RESUSE', 'WEB_MLDUSE')"
+ " AND g.prs_perslid_key = " + user_key;
var oRs = Oracle.Execute(sql);
var autlevel = oRs("writelevel").Value; // Pas op: kan ook '0' zijn (regio)
oRs.Close();
sql = "";
if (lvl == 'L') {
sql = "SELECT alg_locatie_key alg_key"
+ " FROM alg_locatie"
+ " WHERE alg_locatie_verwijder IS NULL"
+ " AND alg_locatie_x IS NOT NULL"
+ " AND alg_locatie_y IS NOT NULL";
if (autlevel >= 0)
sql += " AND alg_locatie_key IN"
+ " (SELECT alg_locatie_key FROM fac_v_my_locations"
+ " WHERE prs_perslid_key = " + user_key
+ " AND niveau = " + autlevel + ")";
sql += " ORDER BY SQRT (POWER (alg_locatie_x - " + lat + ", 2) + POWER (alg_locatie_y - " + lng + ", 2))";
} else if (lvl == 'G' || lvl == 'V') {
sql = "SELECT g.alg_gebouw_key alg_key"
+ " FROM alg_gebouw g, alg_srtgebouw sg, alg_locatie l"
+ " WHERE sg.alg_srtgebouw_key = g.alg_srtgebouw_key"
+ " AND g.alg_locatie_key = l.alg_locatie_key"
+ " AND sg.alg_srtgebouw_passief IS NULL" // Alleen de facilitair actieve gebouwen
+ " AND g.alg_gebouw_verwijder IS NULL"
+ " AND alg_gebouw_x IS NOT NULL"
+ " AND alg_gebouw_y IS NOT NULL";
if (autlevel >= 0)
sql += " AND g.alg_gebouw_key IN"
+ " (SELECT alg_gebouw_key FROM fac_v_my_buildings"
+ " WHERE prs_perslid_key = " + user_key
+ " AND niveau = " + autlevel + ")";
sql += " ORDER BY SQRT (POWER (alg_gebouw_x - " + lat + ", 2) + POWER (alg_gebouw_y - " + lng + ", 2))";
}
// Het eerste record moet het dichtsbijzijnde zijn van alles waarvan de plaats bekend is
if (sql != "") {
oRs = Oracle.Execute(sql);
if (!oRs.eof) {
result.alg_key = oRs("alg_key").value;
if (lvl == 'V' && result.alg_key) {
// Er wordt een verdiepingskey gevraagd, pak de laagste niet-kelder dan maar
// (ik besef me dat deze variabelen hierdoor herbruikt worden)
sql = "SELECT alg_verdieping_key "
+ " FROM alg_verdieping"
+ " WHERE alg_gebouw_key = " + result.alg_key
+ " AND alg_verdieping_verwijder IS NULL"
+ " ORDER BY ABS (alg_verdieping_volgnr), alg_verdieping_volgnr DESC";
oRs = Oracle.Execute(sql);
if (!oRs.eof) {
result.alg_key = oRs("alg_verdieping_key").value;
}
else {
// ik heb wel een GPS, maar geen geldige verdiepingkey, en die wordt gevraagd
result.alg_key = -1;
}
}
}
}
Response.Write(JSON.stringify(result)); //key van het gevraagde type, anders -1
%>