<%@ 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(); %>
