Files
Facilitor/APPL/MARX/api_prs_inzetbaar.asp

140 lines
6.5 KiB
Plaintext

<%@ language = "JavaScript" %>
<% /*
$Revision$
$Id$
File: api_prs_inzetbaar.asp
Description: API voor Mareon om GEO-werkgebied van een vakman X voor dag Y te registreren
INSERT werkgebied als prs_perslid_inzetbaar voor X op Y nog niet bestaat
UPDATE werkgebied als prs_perslid_inzetbaar voor X op Y nog wel bestaat
RESET werkgebied als voor radius 0 wordt meegegeven.
Parameters: v_perslid_key (Int, key van prs_perslid)
v_days_ahead (Int, 0 = vandaag, 1 = morgen, 2 = overmorgen etc, kortweg bepalen van de dag = SYSDATE + v_days_ahead
v_lat (Real, latitude van centrum van werkgebied)
v_lng (Real, longitude van centrum van wekrgebied)
v_rad (Real, straal van werkgebied)
Context: vanuit PlanningGoogleMap.asp
*/
DOCTYPE_Disable = 1;
THIS_FILE = "appl/marx/api_prs_inzetbaar.asp";
%>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/xml_converter.inc" -->
<!-- #include file="../api/api.inc" -->
<%
// We sturen het antwoord in UTF-8.
Session.Codepage = 65001;
Response.Charset = 'utf-8';
var l_result;
l_result = "<xml><result>1</result><action>noop</action><reason></reason></xml>";
var authparams = user.checkAutorisation("WEB_RESFOF", true);
user.auth_required_or_abort(authparams);
var v_perslid_key = getQParamInt("v_perslid_key", -1); // Default geen perslid (-1)
var v_days_ahead = getQParamInt("v_days_ahead", -1); // Default aantal dagen geleden = 0 (= vandaag), 1 = morgen, 2 = overmorgen etc, kortweg bepalen van de dag = SYSDATE + v_days_ahead
var v_lat = getQParam("v_lat", "-1");
var v_lng = getQParam("v_lng", "-1");
var v_rad = getQParamInt("v_rad", -1);
__Log("v_perslid_key: " + v_perslid_key);
__Log("v_days_ahead: " + v_days_ahead);
__Log("v_lat: " + v_lat);
__Log("v_lng: " + v_lng);
__Log("v_rad: " + v_rad);
if (v_perslid_key != -1 && v_days_ahead != -1 && v_lat != "-1" && v_lng != "-1" && v_rad != -1)
{
//Update vakgebied in bezetbaarheid van persoon, en is alleen toegstaan indien de persoon contractpersoon is van (leveranciers)bedrijf waar user_key ook contactpersoon is.
// Eerst checken of de persoon met v_perslid_key wel contractpersoon is van (leveranciers)bedrijf waar user_key ook contactpersoon is.
// l_zelfde_bedrijf wordt 0 (dan niet geautoriseerd) of >0 (dan wel geautoriseerd)....
var l_zelfde_bedrijf = 0;
var sql = " SELECT COUNT(*) aantal FROM prs_contactpersoon cp"
+ " WHERE cp.prs_perslid_key = " + v_perslid_key
+ " AND cp.prs_contactpersoon_verwijder IS NULL"
+ " AND EXISTS (SELECT 'x' FROM prs_contactpersoon cp2"
+ " WHERE cp2.prs_perslid_key = " + user_key
+ " AND cp2.prs_contactpersoon_verwijder IS NULL"
+ " AND cp2.prs_bedrijf_key = cp.prs_bedrijf_key)";
var oRs = Oracle.Execute(sql);
if (!oRs.eof)
{
l_zelfde_bedrijf = oRs("aantal").Value;
}
oRs.close();
__Log("l_zelfde_bedrijf: " + l_zelfde_bedrijf);
if (l_zelfde_bedrijf != 0)
{
//Van hetzelfde bedrijf, derhalve wel geautoriseerd
// insert of update
// l_prs_perslid_inzetbaar_key wordt -1 (dan insert) en anders de key (dan update)....
var l_prs_perslid_inzetbaar_key = 0;
var sql = " SELECT COALESCE(MAX(prs_perslid_inzetbaar_key), -1) prs_perslid_inzetbaar_key"
+ " FROM prs_perslid_inzetbaar pi"
+ " WHERE pi.prs_perslid_key = " + v_perslid_key
+ " AND pi.prs_perslid_inzetbaar_dag = to_char(SYSDATE + " + v_days_ahead + ",'D') - 1";
var oRs = Oracle.Execute(sql);
if (!oRs.eof)
{
l_prs_perslid_inzetbaar_key = oRs("prs_perslid_inzetbaar_key").Value;
}
oRs.close();
__Log("l_prs_perslid_inzetbaar_key: " + l_prs_perslid_inzetbaar_key);
if (l_prs_perslid_inzetbaar_key == -1 && v_rad != 0)
{
//insert, kan alleen als werkgebied een postieve straal >0 heeft...
var l_prs_t1 = S("prs_t1")*60;
var l_prs_t2 = S("prs_t2")*60;
var sql = " INSERT INTO prs_perslid_inzetbaar(prs_perslid_key, prs_perslid_inzetbaar_van, prs_perslid_inzetbaar_tot, prs_perslid_inzetbaar_dag, prs_perslid_inzetbaar_plaats_x, prs_perslid_inzetbaar_plaats_y, prs_perslid_inzetbaar_radius)"
+ " VALUES(" + v_perslid_key + "," + "ROUND(" + l_prs_t1 + ")" + "," + "ROUND(" + l_prs_t2 + ")" + "," + "to_char(SYSDATE + " + v_days_ahead + ",'D') - 1" + ","
+ " ROUND(fac.safe_to_number(" + v_lat + "),6)" + "," + "ROUND(fac.safe_to_number(" + v_lng + "),6)" +"," + "ROUND(" + v_rad + ")" + ")";
Oracle.Execute(sql);
l_result = "<xml><result>1</result><action>new record inserted</action><reason></reason></xml>";
}
else
{
//update
if (v_rad != 0)
{ // Positieve radius > 0, dan update werkgebied
var sql = " UPDATE prs_perslid_inzetbaar pi"
+ " SET pi.prs_perslid_inzetbaar_plaats_x = ROUND(fac.safe_to_number(" + v_lat + "),6)"
+ " ,pi.prs_perslid_inzetbaar_plaats_y = ROUND(fac.safe_to_number(" + v_lng + "),6)"
+ " ,pi.prs_perslid_inzetbaar_radius = ROUND(" + v_rad + ")"
+ " WHERE pi.prs_perslid_inzetbaar_key = " + l_prs_perslid_inzetbaar_key;
l_result = "<xml><result>1</result><action>working area updated</action><reason></reason></xml>";
}
else
{
// Radius = 0, dan werkgebied resetten
var sql = " UPDATE prs_perslid_inzetbaar pi"
+ " SET pi.prs_perslid_inzetbaar_plaats_x = NULL"
+ " ,pi.prs_perslid_inzetbaar_plaats_y = NULL"
+ " ,pi.prs_perslid_inzetbaar_radius = NULL"
+ " WHERE pi.prs_perslid_inzetbaar_key = " + l_prs_perslid_inzetbaar_key;
l_result = "<xml><result>1</result><action>reset of working area</action><reason></reason></xml>";
}
Oracle.Execute(sql);
}
}
else
{
//Niet van hetzelfde bedrijf, derhalve niet geautoriseerd
l_result = "<xml><result>0</result><action>Noop</action><reason>Not autorized</reason></xml>";
}
}
// Mareon adapter verwacht wel een response bericht (ook al doet die er nu niets mee).
// We retourneren het oorspronkelijke XML berichtje..
Response.Write(l_result)
%>
<% ASPPAGE_END(); %>