<%@ LANGUAGE = JavaScript %>
<% /*
     $Revision$
     $Id$

    File:               bez_edit_afspraak.asp
    Description:        Laat een nieuwe bezoeker registreren of bestaand bezoek wijzigen
    Parameters:
        fronto
        backo
        afspr_key
    Context:            Rechtstreeks vanuit de portal of een bestaande afspraak
                        Het formulier submit naar register.asp
    Note:               Bezoekers zitten altijd onder een BEZ_AFSPRAAK. Deze staat los
                        (afspr_key is gedefinieerd) of zit onder een
                        RES_RESERVERING
*/

%>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/iface.inc" -->
<!-- #include file="../Shared/calendar.inc" -->
<!-- #include file="../Shared/selector.inc" -->
<!-- #include file="../Shared/plaatsselector.inc" -->
<!-- #include file="../Shared/persoonselector.inc" -->
<!-- #include file="./bez.inc" -->
<!-- #include file="../fac/faq.inc" -->
<!-- #include file="../mld/mld.inc" -->
<!-- #include file="../prs/prs.inc" -->
<!-- #include file="./bez_edit_bezoekers.inc" -->

<%
FCLTHeader.Requires({ js: ["./bez_edit_afspraak.js", "jquery.timepicker-table.js", "../bez/bez.js", "../fac/faq.js"],
                      css: ["timePicker-table.css"] });

var afspr_key = getQParamInt("afspr_key", -1);
if (afspr_key > 0)
    var urole = getQParamSafe("urole", "fe");
else
    var urole = getQParamSafe("urole");

var fronto = urole == "fo";
var backo  = urole == "bo";
var frontend = (!fronto && !backo);

var autfunction = fronto? "WEB_BEZFOF" : backo? "WEB_BEZBOF" : "WEB_BEZUSE";
var contactonly = getQParamInt("contactonly", 0);

// cache.whenTrue(afspr_key == -1);

var authparams = user.checkAutorisation(autfunction);

if (afspr_key > 0)
{
  var this_bez = bez.func_enabled_afspraak(afspr_key);
  user.auth_required_or_abort(this_bez.canChange);
}
else
{
  user.auth_required_or_abort(authparams.ALGwritelevel < 9);
  this_bez = {canChangeDate: true};
}


var timeBeginInitEmpty = false;
var timeEindInitEmpty = false;
if (afspr_key < 0)
{ // defaults zetten
  var mld_opdr_key = getQParamInt("mld_opdr_key", -1);
  var isMldOpdracht = (mld_opdr_key > 0);
  if (isMldOpdracht)
  {
    var mld_opdr = mld.mld_opdr_info(mld_opdr_key);
    var stdm_info = mld.mld_stdmeldinginfo(mld_opdr.stdm_key);
    var mld_key = mld_opdr.mld_key;
    var mld_info = mld.mld_melding_info(mld_key);

    var this_opdr = mld.func_enabled_mld(mld_info.disc_key, "D"); // wat mag ik zoal op de melding en opdracht.

    // Afspraken toevoegen aan de opdracht. Dan heb ik ORDBOF write rechten nodig.
    user.auth_required_or_abort(this_opdr.canORDBOFwrite);
  }

  var bld_key = (isMldOpdracht? mld_info.bld_key : user.alg_gebouw_key());
  var actiegrp_key = bez.bez_getactiegroep(bld_key);

  var bez_afspraak = {contact_key: urole == "fe" || S("bez_fo_default_user") ? user_key : -1,
                      aanvrager: user.naam(),
                      telf_nr: user.prs_perslid_telefoonnr(),
                      actie_key: bez.default_actie(actiegrp_key), // Is er een default actie.
                      locatie_key: isMldOpdracht? mld_info.loc_key : user.alg_locatie_key({ "withcurrent": true, "currentIsOptional": true }),
                      gebouw_key : isMldOpdracht? mld_info.bld_key : user.alg_gebouw_key({ "withcurrent": true, "currentIsOptional": true }),
                      verdieping_key: isMldOpdracht? mld_info.flr_key : user.alg_verdieping_key({ "withcurrent": true, "currentIsOptional": true }),
                      ruimte_key: isMldOpdracht? mld_info.room_key : user.alg_ruimte_key({ "withcurrent": true, "currentIsOptional": true }),
                      mld_opdr_key: mld_opdr_key,
                      mld_opdr_id: (isMldOpdracht? (mld_opdr.srtdiscprefix || "") + mld_key + "/" + mld_opdr.mld_opdr_bedrijfopdr_volgnr : null),
                      stdmelding_omschrijving: (isMldOpdracht? stdm_info.stdmelding_omschrijving : null)
                     };

  if (S("vis_afspraak_onrgoed_uses_keys") == 0)
  {
    if (isMldOpdracht)
    {
      var sql = "SELECT alg_plaatsaanduiding"
              + "  FROM alg_v_onroerendgoed_gegevens"
              + " WHERE alg_onroerendgoed_keys = " + mld_info.mld_alg_onroerendgoed_keys;
      var oRs = Oracle.Execute(sql);
      if (!oRs.eof)
        bez_afspraak.ruimte = oRs("alg_plaatsaanduiding").Value;
      else bez_afspraak.ruimte = "";
      oRs.Close();
    }
    else
    {
      var prs_info = prs.prs_perslid(user_key, { withWP: true, withAflever: true });
      bez_afspraak.ruimte = prs_info.afleverruimte;
    }
  }

  if (isMldOpdracht)
  {
    bez_afspraak.gastheer_key = mld_info.melder_key;
    var sql = "SELECT " + S("prs_pers_string") + " gastheer"
            + "  FROM prs_perslid p"
            + " WHERE p.prs_perslid_key = " + mld_info.melder_key;
    var oRs = Oracle.Execute(sql);
    bez_afspraak.gastheer = oRs("gastheer").Value;
    oRs.Close();
    bez_afspraak.contact_key = mld_opdr.contactpers_key
  }
  // controleer of de inlogcode met een _ begint. Dan wordt deze niet als default voor de gastheer gebruikt.
  else if (user.oslogin() && user.oslogin().substr(0,1) == "_")
  {
    bez_afspraak.gastheer = "";
    bez_afspraak.gastheer_key = -1;
  }
  else
  {
    bez_afspraak.gastheer = bez_afspraak.aanvrager;
    bez_afspraak.gastheer_key = bez_afspraak.contact_key;
  }

  bez_afspraak_datum = new Date();
  if (S("vis_t1_std") > 0)
  {
    if (urole != 'bo') // alleen backo default 'nu', anderen vis_t1_std
    {
      bez_afspraak_datum.setHours(Math.floor(S("vis_t1_std")));
      bez_afspraak_datum.setMinutes((S("vis_t1_std") - Math.floor(S("vis_t1_std"))) * 60, 0, 0);
    }
  }
  else
  { // S("vis_t1_std") < 0
    if (urole != 'bo')
    {
      timeBeginInitEmpty = true;
      bez_afspraak_datum.setHours(0);
      bez_afspraak_datum.setMinutes(0, 0, 0);
    }
    //else bez_afspraak_datum = nu (new Date())
  }
  bez_afspraak_eind = new Date(bez_afspraak_datum);
  if (S("vis_t2_std") > 0)
  {
    bez_afspraak_eind.setHours(Math.floor(S("vis_t2_std")));
    bez_afspraak_eind.setMinutes((S("vis_t2_std") - Math.floor(S("vis_t2_std"))) * 60);
  }
  else
  {
    timeEindInitEmpty = true;
  }
  bez_afspraak.bez_afspraak_datum = bez_afspraak_datum;
  bez_afspraak.bez_afspraak_eind = bez_afspraak_eind;
}
else
{
  var bez_afspraak = bez.bez_afspraak_info(afspr_key);
  var isMldOpdracht = (bez_afspraak.mld_opdr_key > 0);
  if (isMldOpdracht)
    var mld_opdr = mld.mld_opdr_info(bez_afspraak.mld_opdr_key);

  var faq_info = bez.faq_info(bez_afspraak.locatie_key,bez_afspraak.alg_onrg_key,-1,-1);
  for (i in faq_info.fixed_faq)
  {
    faq_info.fixed_faq[i].safe_answer = safe.fclthtml(faq_info.fixed_faq[i].answer);
    faq_info.fixed_faq[i].safe_answer2 = safe.fclthtml(faq_info.fixed_faq[i].answer2);
  }
}
var titel = "";
if (S("bez_sel_contactpersoon") > 0 && S("bez_sel_internpersoon") == 1)
  titel = L("lcl_bez_select_cntprsbezoeker");
else
  if (S("bez_sel_contactpersoon") > 0)
    titel = L("lcl_bez_select_cntbezoeker");
  else
    titel = L("lcl_bez_select_prsbezoeker");

// Niet selecteerbaar maken van vrije dagen uitschakelen als er meerdere (gebouw) kalenders bestaan.
// bez_use_buildinghours: 0= Alle dagen te selecteren, 1= vrije dagen niet te selecteren
//                      , 2= weekends niet te selecteren, 3= vrije dagen en weekends niet te selecteren
var cal_selectableDays = ((S("bez_use_buildinghours") & 2) ? 3 : 0);
if (cal_selectableDays != 0)
{
  var sql = "SELECT COUNT(DISTINCT mld_vrije_dagen_id) aantal"
          + "  FROM mld_vrije_dagen";
  var oRs = Oracle.Execute(sql);
  var cal_selectableDays = oRs("aantal").Value > 1 ? 0 : cal_selectableDays;
  oRs.Close();
}

%>
<html>
  <head>
    <%  FCLTHeader.Generate() %>
    <script type="text/javascript">

      var titel = "<%=safe.jsstring(titel)%>";
      var faq_max_results_bez  = "<%=S("faq_max_results_bez")%>";
      
      $(function()
      {
        if (afspr_key > 0)
        {
          var JSONdataFaq = "<%=safe.jsstring(JSON.stringify(faq_info?faq_info.fixed_faq:null))%>";
          show_fixed_faq("bezFaq", -1, JSON.parse(JSONdataFaq), faq_max_results_bez);
        }
        $('textarea').resize(function () { FcltMgr.resized(window) } );
        $('textarea').autogrow();
        $("#prktype").on("changed", showRequireAll); // trigger showRequireAll when parking info has changed
        get_freeprk_info(1);
      });

    </script>
  </head>


  <body class="editmode">
  <% SUBFRAME_START(); %>
<%  var buttons =  [ {title: L("lcl_submit"), icon: "fa-fclt-save", action:"bez_submit()", singlepress: true, id:"btn_bez_submit"},
                     {title: L("lcl_cancel"), icon: "fa-fclt-cancel", action:"bez_cancel()"} ];
    IFRAMER_HEADER(L("lcl_bez_frame"), buttons);
%>
<%
      maxPast = ((urole == "fe")? 0 : S("vis_afspraak_limiet"));
      maxFuture = ((urole == "fe" && S("vis_fe_afspraak_limiet") > 0)? S("vis_fe_afspraak_limiet") : S("vis_afspraak_limiet"));
      vis_fobo_default_locatie_empty = (((backo || fronto) && afspr_key == -1) ? S("vis_fobo_default_locatie_empty") : false);

      // Als er een gebouwkey is ingevuld wordt direct onChangeGebouw() uitgevoerd die uiteindelijk via loadCalendar direct deze initiële calender vervangt.
      // Daarom in dat geval autoopen hier uit, en in bez_edit_afspraak.js (initëel) aan (indien uberhaupt van toepassing)
      var init_calendar_autoopen = (afspr_key < 0 && urole != "bo");
      if (init_calendar_autoopen && S("vis_afspraak_onrgoed_uses_keys") == 1
          && inArray((S("vis_show_alg_level") || ""), ["G", "V", "R"]) && bez_afspraak.gebouw_key > 0)
        init_calendar_autoopen = false;
%>
      <script type="text/javascript">
        var urole = "<%=urole%>";
        var vis_afspraak_host_uses_keys = <%=S("vis_afspraak_host_uses_keys")%>;
        var vis_afspraak_onrgoed_uses_keys = <%=S("vis_afspraak_onrgoed_uses_keys")%>;
        var vis_fobo_default_locatie_empty = (<%=vis_fobo_default_locatie_empty?1:0%> == 1);
        var bez_multiday = <%=S("bez_multiday")%>;
        var bez_max_flex_on_line = <%=S("bez_max_flex_on_line")%>;
        var bez_use_buildinghours = <%=S("bez_use_buildinghours")%>;
        var cal_selectableDays = <%=cal_selectableDays%>;
        var vis_afspraak_tel_required = <%=S("vis_afspraak_tel_required")%>;
        var vis_t1 = "<%=safe.jsfloat(fronto && S("vis_t1_fo") >= 0 ? S("vis_t1_fo") : S("vis_t1"))%>";
        var vis_t2 = "<%=safe.jsfloat(fronto && S("vis_t2_fo") >= 0 ? S("vis_t2_fo") : S("vis_t2"))%>";
        var vis_h = "<%=safe.jsfloat(S("vis_h"))%>";
        var afspr_key = <%=afspr_key%>;
<%      if (afspr_key > -1) { %>
        var var_date_from = new Date(<%=bez_afspraak.bez_afspraak_datum.getTime()%>);
        var var_date_to = new Date(<%=bez_afspraak.bez_afspraak_eind.getTime()%>);
<%      } %>
        var maxPast = <%=!isMldOpdracht? maxPast : "null"%>;
        var maxFuture = <%=!isMldOpdracht? maxFuture : "null"%>;
        var timeBeginInitEmpty = (<%=timeBeginInitEmpty? 1 : 0%> == 1);
        var timeEindInitEmpty = (<%=timeEindInitEmpty? 1 : 0%> == 1);
        var init_calendar_autoopen = <%=(/* inverted voor de vervangende calendar dus */!init_calendar_autoopen && afspr_key < 0 && urole != "bo") ? 1 : 0%>;
      </script>

      <form name="u2" action="bez_edit_afspraak_save.asp?urole=<%=urole%>&afspr_key=<%=afspr_key%>" method="post" onsubmit="bez_submit();return false;">
        <input type="hidden"id="vrije_dagen_id" name="vrije_dagen_id" value="Default">
<%      if (isMldOpdracht)
        { %>
          <input type="hidden" name="mld_opdr_key" id="mld_opdr_key" value="<%=bez_afspraak.mld_opdr_key%>">
<%      } %>

<%      BLOCK_START("bezAfspraak", L("lcl_date_time"), {icon: "fa-clock"});

        var vis_t1 = (fronto && S("vis_t1_fo") >= 0 ? S("vis_t1_fo") : S("vis_t1"));
        var vis_t2 = (fronto && S("vis_t2_fo") >= 0 ? S("vis_t2_fo") : S("vis_t2"));
        if ((S("bez_use_buildinghours") & 1) && bez_afspraak.gebouw_key > 0)
        { // Gebouwtijden als tijdgrenzen van afspraken gebruiken.
          sql = "SELECT COALESCE(g.alg_gebouw_beginuur, -1) alg_gebouw_beginuur"
              + "     , COALESCE(g.alg_gebouw_einduur, -1) alg_gebouw_einduur"
              + "  FROM alg_gebouw g"
              + " WHERE g.alg_gebouw_key = " + bez_afspraak.gebouw_key;
          oRs = Oracle.Execute(sql);
          if (!oRs.eof)
          {
            if (oRs("alg_gebouw_beginuur").Value > 0)
              vis_t1 = oRs("alg_gebouw_beginuur").Value;
            if (oRs("alg_gebouw_einduur").Value > 0)
              vis_t2 = oRs("alg_gebouw_einduur").Value;
          }
          oRs.Close();
        }

        FCLTcalendar( "date_from",
                      { label : L("lcl_vis_start_date"),
                        datum: bez_afspraak.bez_afspraak_datum,
                        minDate: isMldOpdracht? mld_opdr.mld_opdr_datumbegin : null,
                        maxDate: isMldOpdracht? mld_opdr.mld_opdr_einddatum : null,
                        maxPast  : !isMldOpdracht? maxPast : null,
                        maxFuture: !isMldOpdracht? maxFuture : null,
                        selectableDays: cal_selectableDays,
                        onChange: "get_freeprk_info();",
                        calendars: (afspr_key < 0? 2 : 1),
                        autoopen : init_calendar_autoopen,
                        initTimeEmpty: timeBeginInitEmpty,
                        initEmpty: (afspr_key < 0 && urole != "bo"),
                        timeField: true,
                        timeStep: S("vis_h") * 60,
                        startTime: vis_t1,
                        endTime: vis_t2,
                        required: true,
                        readonly: !this_bez.canChangeDate,
                        volgnr: 1
                      });

          FCLTcalendar( "date_to",
                        { label : L("lcl_vis_end_date"),
                          datum: bez_afspraak.bez_afspraak_eind,
                          maxFuture: ((urole == "fe" && S("vis_fe_afspraak_limiet") > 0)? S("vis_fe_afspraak_limiet") : S("vis_afspraak_limiet")),
                          onChange: "get_freeprk_info();",
                          initTimeEmpty: timeEindInitEmpty,
                          timeField: true,
                          timeStep: S("vis_h") * 60,
                          startTime: vis_t1,
                          endTime: vis_t2,
                          required: true,
                          readonly: !this_bez.canChangeDate,
                          volgnr: 2,
                          hidden: S("bez_multiday") != 1 // de *datum* is dan verborgen, tijd blijft zichtbaar
                        });
      BLOCK_END();

      BLOCK_START("bezAfspraak", L("lcl_vis_visit"), {ishtmlsafe: true, icon: "fa-user-tie"});
        FCLTpersoonselector( "person",
                             "sgPerson",
                             {label: L("lcl_vis_contactperson"),
                              perslidKey: bez_afspraak.contact_key,
                              onChange: "changeName",
                              moreinfo: urole != 'fe',
                              autlevel: authparams.PRSwritelevel,
                              required: true,
                              readonly: frontend
                             });
        //======= FIELD 'Gastheer/host' =======
        if ((S("vis_afspraak_host_uses_keys") & 1) == 1)
        {
           FCLTpersoonselector( "personH",
                                "sgPersonH",
                                {label: L("lcl_vis_visit"),
                                 perslidKey: bez_afspraak.gastheer_key,
                                 onChange: "onChangeHost",
                                 moreinfo: urole != 'fe',
                                 autlevel: authparams.PRSwritelevel,
                                 required: true // (S("vis_afspraak_host_uses_keys") & 2) == 2
                                });
        }
        else
        {
            RWFIELDTR("personH", "fld", L("lcl_vis_visit"), bez_afspraak.gastheer.substr(0, 50), {maxlength : 50, required: (S("vis_afspraak_host_uses_keys") & 2) == 2 })
        }
        var verplicht = (S("vis_afspraak_tel_required") & 1) == 1;
        var vullen = (S("vis_afspraak_tel_required") & 2) == 0;
        RWFIELDTR("phone", "fld", L("lcl_phone"), (vullen || afspr_key > 0)? bez_afspraak.telf_nr : "", {maxlength : 20, required: verplicht });

        RWTEXTAREATR("remark", "fldtxt", L("lcl_vis_remark"), afspr_key == -1? "" : bez_afspraak.opm, { maxlength: 320 });
      BLOCK_END();

      if (isMldOpdracht)
      {
        var blockid = "bezOpdrAfspraak";
        var blocktitle = afspr_key < 0? mld_opdr.opdr_type_omschr : bez_afspraak.typeopdr_omschrijving;
        var blockicon = afspr_key < 0? mld_opdr.typeopdr_image : bez_afspraak.mld_typeopdr_image;
      }
      else
      {
        var blockid = "bezAfspraak";
        var blocktitle = L("lcl_place");
        var blockicon = "fa-map-marker";
      }
      BLOCK_START(blockid, blocktitle, {icon: blockicon});
        if (isMldOpdracht)
        {
          var params = { infoPointer: { Url: "appl/mld/mld_opdr.asp?urole=" + urole + "&opdr_key=" + bez_afspraak.mld_opdr_key,
                                        Title: bez_afspraak.mld_opdr_id
                                      },
                         suppressEmpty: true
                     };
          ROFIELDTR("fld", L("lcl_mld_opdr_number"), bez_afspraak.mld_opdr_id + ", " + bez_afspraak.stdmelding_omschrijving, params); // Referentienr.
        }

        if (S("vis_afspraak_onrgoed_uses_keys") == 1)
        {
          var requiredlevel = -1;
          switch (S("vis_mandatory_alg_level"))
          {
            case "L" : requiredlevel = 2; break;
            case "G" : requiredlevel = 3; break;
            case "V" : requiredlevel = 4; break;
            case "R" : requiredlevel = 5; break;
          }
          var eindlevel_nr = 5;
          switch (S("vis_show_alg_level"))
          {
            case "L": eindlevel_nr = 2; break;
            case "G": eindlevel_nr = 3; break;
            case "V": eindlevel_nr = 4; break;
            case "R": eindlevel_nr = 5; break;
          }
          if (eindlevel_nr < requiredlevel)
            eindlevel_nr = requiredlevel; // Minimaal tonen wat ook verplicht is.

          FCLTplaatsselector(authparams.ALGreadlevel, { locatiekey: bez_afspraak.locatie_key,
                                                        gebouwkey: (eindlevel_nr > 2 ? bez_afspraak.gebouw_key : null),
                                                        verdiepingkey: (eindlevel_nr > 3 ? bez_afspraak.verdieping_key : null),
                                                        ruimtekey: (eindlevel_nr > 4 ? bez_afspraak.ruimte_key : null),
                                                        onLocChange: "onChangeLocatie();",
                                                        onGebChange: "onChangeGebouw();",
                                                        onVerChange: "onChangeVerdieping();",
                                                        onRuiChange: "onChangeRuimte();",
                                                        escalateOnChUp: true, // Als hoger plaatsveld verandert (wordt ingevuld) als gevolg van lager plaatsveld dan ook onChange acties uitvoeren
                                                        startlevel: 2, /*locatie*/
                                                        eindlevel: eindlevel_nr,
                                                        requiredlevel: requiredlevel,
                                                        filtercode: "BEZ",
                                                        no_table: true
                                                      });
        }
        else
        { // geen keys, locatie wel verplicht
          FCLTplaatsselector(authparams.ALGreadlevel, { locatiekey: bez_afspraak.locatie_key,
                                                        onLocChange: "onChangeLocatie()",
                                                        startlevel: 2, /*locatie*/
                                                        eindlevel: 2, /*locatie*/
                                                        requiredlevel: 2,
                                                        filtercode: "BEZ",
                                                        no_table: true
                                                      });
          if (S("vis_mandatory_alg_level") != "L")
          {
            var roomlcl = "";
            switch (S("vis_mandatory_alg_level"))
            {
              case "G" : roomlcl = L("lcl_building"); break;
              case "V" : roomlcl = L("lcl_floor"); break;
              case "R" : roomlcl = L("lcl_room"); break;
            }
            RWFIELDTR("room", "fld", roomlcl, bez_afspraak.ruimte, {maxlength : 30})
          }
        }

        var bld_key_arr = bez_afspraak.gebouw_key  > 0 ? [bez_afspraak.gebouw_key] : [];
        var loc_key_arr = bez_afspraak.locatie_key > 0 ? [bez_afspraak.locatie_key] : [];
        sql = bez.bez_getacties(loc_key_arr, bld_key_arr, false).sql;
        FCLTselector("actie",
                     sql,
                     { label: L("lcl_action"),
                       initKey: bez_afspraak.actie_key,
                       emptyOption: afspr_key < 0 && bez_afspraak.actie_key < 0? "" : null,
                       required: true
                     }
                    )
        BLOCK_END();

        BLOCK_START("bezFaq", L("lcl_faq_kennisbank"), { hidden: true, icon:"fa-book" });
          // Hier komen vaste aanwijzingen
        BLOCK_END();

        BLOCK_START("bezBezoekers", L("lcl_vis_visitors"), { wide: true, nopadding: true, icon: "fa-users" });
%>      <tr>
          <td>
<%         var params = { contactonly: contactonly };
           if (isMldOpdracht)
           {
             params.nrBez = 1;
             params.bedrijf = mld_opdr.uitv_naam;
           }
           bez_edit_bezoekers(afspr_key,
                               bez_afspraak.bez_afspraak_datum,
                               bez_afspraak.bez_afspraak_eind,
                               bez_afspraak.locatie_key, // Voeg het bezoekerblokje in
                               params)
%>        </td>
        </tr>
<%      BLOCK_END();
        IFACE.FORM_END();
%>
    </form>
    <% SUBFRAME_END(); %>
  </body>
</html>
<% ASPPAGE_END(); %>
