102 lines
4.3 KiB
Plaintext
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
|
|
%>
|