<%@language = "javascript" %>
<%
/*  $Revision$
    $Id$

    File:         ins_change_plaatseigenaar.asp
    Description:  Verander de plaats of eigenaar
                  Impliciet: ins_deel.ins_srtdeel_key wordt aangepast
                  Expliciet:
    Parameters:
      ins_key       deel key
      submitting    Mode {0=invoer / 1=opslaan}

    Context:      ins_edit_deel.asp  wijzigen object
    Note:

*/ %>

<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/iface.inc" -->
<!-- #include file="../Shared/save2db.inc" -->
<!-- #include file="../Shared/afdelingselector.inc" -->
<!-- #include file="../Shared/persoonselector.inc" -->
<!-- #include file="../Shared/plaatsselector.inc" -->
<!-- #include file="../Shared/contactpersoonselector.inc" -->
<!-- #include file="./ins.inc" -->

<%
FCLTHeader.Requires({ plugins:["jQuery"]
                    , js: ["../ins/ins_edit_deel.js", "../ins/bind.js"]
                    });

var autfunction = "WEB_INSMAN";
var authparams = user.checkAutorisation(autfunction);

var ins_key = getQParamInt("ins_key"); // Het te wijzigen object.

var sql = "SELECT d.ins_deel_parent_key"
        + "     , s.ins_srtdeel_binding"
        + "     , g.ins_discipline_key"
        + "     , COALESCE(d.ins_alg_ruimte_type, d_parent.ins_alg_ruimte_type) bind"
        + "     , COALESCE(d.ins_alg_ruimte_key, d_parent.ins_alg_ruimte_key) bind_key"
        + "     , d_parent.ins_alg_ruimte_type pbind"
        + "     , d_parent.ins_alg_ruimte_key pbind_key"
        + "     , d.ins_alg_ruimte_key_org"
        + "     , d_parent.ins_deel_omschrijving"
        + "  FROM ins_deel d"
        + "     , ins_deel d_parent"
        + "     , ins_srtdeel s"
        + "     , ins_srtgroep g"
        + " WHERE d.ins_deel_parent_key = d_parent.ins_deel_key"
        + "   AND d.ins_srtdeel_key = s.ins_srtdeel_key"
        + "   AND s.ins_srtgroep_key = g.ins_srtgroep_key"
        + "   AND d.ins_deel_key = " + ins_key;
var oRs = Oracle.Execute(sql);
var parent_key = oRs("ins_deel_parent_key").Value;
var srtdeel_binding = oRs("ins_srtdeel_binding").Value;
var disc_key = oRs("ins_discipline_key").Value;
var bind = oRs("bind").Value;
var bind_key = oRs("bind_key").Value;
var pbind = oRs("pbind").Value;
var pbind_key = oRs("pbind_key").Value;
var isLendOut = (oRs("ins_alg_ruimte_key_org").Value != null);
var parent_oms = oRs("ins_deel_omschrijving").Value;
oRs.Close();

// Bepaal of het object ook echt gewijzigd kan of mag worden.
// De velden mogen niet wijzigen
// 1) zonder canChangeAlg rechten (Zonder canChangeAlg rechten zijn de velden in de edit mode readonly) of
// 2) als het object is uitgeleend.
this_ins = ins.func_enabled_deel(ins_key);
user.anything_todo_or_abort(this_ins.canChange && this_ins.canChangeAlg && !isLendOut);

// Bepaal de plaats of eigenaar van het object.
var o_loc_key = -1;
var o_bld_key = -1;
var o_floor_key = -1;
var o_room_key = -1;
var o_workpl_key = -1;
var o_dep_key = -1;
var o_perslid_key = -1;
var o_cntpers_key = -1;

if (bind == 'R' || bind == 'W' || bind == 'T')
{
  sql = "SELECT alg_locatie_key"
      + "     , COALESCE(alg_gebouw_key, alg_terreinsector_key) alg_gebouw_key"
      + "     , alg_verdieping_key"
      + "     , alg_ruimte_key"
      + "     , prs_werkplek_key"
      + "  FROM ins_v_xdeel_gegevens_keys"
      + " WHERE ins_deel_key=" + (parent_key? parent_key : ins_key);

  oRs = Oracle.Execute(sql);
  if (!oRs.eof)
  {
    o_loc_key     = oRs("alg_locatie_key").Value;
    o_bld_key     = oRs("alg_gebouw_key").Value;
    o_floor_key   = oRs("alg_verdieping_key").Value;
    o_room_key    = oRs("alg_ruimte_key").Value;
    o_workpl_key  = oRs("prs_werkplek_key").Value;

    // gracefull terugvallen nav. DHLN#18851
    // In theorie kan dit ook een probleem zijn voor andere bindings
    // maar daar kan ik geen logische terugvaloptie bedenken.
    if (!(srtdeel_binding & BIND_WERKPL) && bind == 'W')
    {
      bind = "R";
    }
    oRs.close();
  }
}
else // Persoon/afdeling gebonden
{
  if (bind == 'A')
    o_dep_key = bind_key;
  if (bind == 'P')
     o_perslid_key = bind_key;
  if (bind == 'C')
    o_cntpers_key = bind_key;
}

// Bij de bepaling van invalid_binding weet ik dat het object niet uitgeleend is (isLendOut = false).
var invalid_binding = ((!(srtdeel_binding & (BIND_AFDELI)) && o_dep_key > 0) ||
                       (!(srtdeel_binding & (BIND_PERSOO)) && o_perslid_key > 0) ||
                       (!(srtdeel_binding & (BIND_TERREI)) && o_bld_key > 0 && !(srtdeel_binding & (BIND_RUIMTE)) && !(srtdeel_binding & (BIND_WERKPL))) ||
                       (!(srtdeel_binding & (BIND_RUIMTE)) && o_room_key > 0 && !(srtdeel_binding & (BIND_WERKPL))) ||
                       (!(srtdeel_binding & (BIND_WERKPL)) && o_workpl_key > 0));

lcl.set_dialect(disc_key, "INS_DISCIPLINE_KEY");
%>

<html>
  <head>
<%  FCLTHeader.Generate();
    var submitting = getQParamInt("submit", 0) == 1;
    if (submitting)
    {
      protectRequest.validateToken();
      var success = false;
      var asparent = getFParamInt("asparent", 0) == 1; // Plaats/eigenaar gelijk aan de parent maken.
      var ins_alg_ruimte_key;
      var ins_alg_ruimte_type;
      var empty_loc = false;
      if (asparent)
      { // Er is op de button "gelijk aan de {parent}" geklikt.
        ins_alg_ruimte_key = "NULL";
        ins_alg_ruimte_type = "NULL";
        empty_loc = true;
      }
      else
      {
        var dept_key = getFParamInt("sDept", -1); // Afdeling.
        var prs_key = getFParamInt("SPerson", -1); // Persoon.
        var bld_key = getFParamInt("gebouwkey", -1); // Gebouw/Terrein.
        var room_key = getFParamInt("ruimtekey", -1); // Ruimte.
        var workpl_key = getFParamInt("werkplekkey", -1); // Werkplek.

        if (dept_key > 0)
        {
          ins_alg_ruimte_key = dept_key;
          ins_alg_ruimte_type = "A";
        }
        else if (prs_key > 0)
        {
          ins_alg_ruimte_key = prs_key;
          ins_alg_ruimte_type = "P";
        }
        else if (workpl_key > 0)
        {
          ins_alg_ruimte_key = workpl_key;
          ins_alg_ruimte_type = "W";
        }
        else if (room_key > 0)
        {
          ins_alg_ruimte_key = room_key;
          ins_alg_ruimte_type = "R";
        }
        else if (bld_key > 0)
        {
          ins_alg_ruimte_key = bld_key;
          ins_alg_ruimte_type = "T";
        }

        // Als de ingevulde plaats/eigenaar hetzelfde is als die van de parent, dan NULL opslaan.
        if (parent_key && ins_alg_ruimte_key && ins_alg_ruimte_type && pbind_key == ins_alg_ruimte_key && pbind == ins_alg_ruimte_type)
        {
          ins_alg_ruimte_key = "NULL";
          ins_alg_ruimte_type = "NULL";
          empty_loc = true;
        }
        else {
          ins_alg_ruimte_type = "'" + ins_alg_ruimte_type + "'";
        }
      }

      var sql = "UPDATE ins_deel"
              + "   SET ins_alg_ruimte_key = " + ins_alg_ruimte_key
              + "     , ins_alg_ruimte_type = " + ins_alg_ruimte_type
              + (empty_loc
                ? "   , ins_alg_locatie_key = NULL"
                : "")
              + " WHERE ins_deel_key = " + ins_key;
      Oracle.Execute(sql);
%>
      <script type="text/javascript">
        FcltMgr.closeDetail(window, { success: true, refresh: true });
      </script>
<%    Response.End;
    }
%>
    <script type="text/javascript">
      var bindingBits = <%=srtdeel_binding%>;

      async function ins_submit()
      {
        document.activeElement.blur(); // trigger laatste onChanges
        if (!await validateForm("u2"))
          return false;

        var f = document.u2;
        var msg = L("lcl_po_missed_dsc");
        var status = false;
<%      if (!isLendOut && !invalid_binding)
        { %>
          // Controleer of er wel iets gekozen is.
          msg = L("lcl_obj_bind_mandatory") + "\n";
          if (bindingBits & BIND_AFDELI)
            if (f.sDept.value > 0)
              status = true;
            else
              msg += L("lcl_obj_bind_a") + " of ";

          if (bindingBits & BIND_PERSOO)
<%          if (this_ins.canChangeAlg || alg_ruimte_type == "P") // Zonder canChangeAlg geen persoonselector
            { %>
                if (f.sPerson.value > 0)
                  status = true;
                else
<%          } %>
            msg += L("lcl_obj_bind_p") + " of ";

<%        if (!isLendOut || (isLendOut && alg_ruimte_type == "R"))
          { %>
            if ((bindingBits & BIND_TERREI) && f.gebouwkey)
              if (f.gebouwkey.value > 0 && f.bttype.value == 'T')
                status = true;
              else
                msg += L("lcl_obj_bind_t") + " of ";

            if ((bindingBits & BIND_RUIMTE) && f.ruimtekey)

              if(f.ruimtekey.value > 0)
                status = true;
              else
                msg += L("lcl_obj_bind_r") + " of ";

            if ((bindingBits & BIND_WERKPL) && f.werkplekkey)

              if (f.werkplekkey.value > 0)
                status = true;
              else
                msg += L("lcl_obj_bind_w") + " of ";
<%        } %>
          msg = msg.substring(0, msg.length - 3);
<%      } %>

        if (status)
        {
          document.forms.u2.submit();
        }
        else
        {
          FcltMgr.alert(msg);
          return false;
        }
      }

      async function ins_same_as_parent()
      {
        $("#asparent").val(1);
        document.forms.u2.submit();
      }

      function ins_cancel()
      {
        FcltMgr.closeDetail(window);
      }
    </script>

  </head>

  <body class="fclt-modal" id="mod_changedeel">
    <% MODAL_START(); %>
    <form name="u2"
          action="ins_change_plaatseigenaar.asp?submit=1<%=buildTransitParam(["ins_key"])%>"
          method="post"
          onSubmit="ins_submit();">
    <input type="hidden" id="asparent" name="asparent" value="0">
<%


      MODAL_BLOCK_START("srtdeelInfo", L("lcl_select_placeowner"), { icon: "fa-file-signature" });
      if ((srtdeel_binding & (BIND_AFDELI)) && !invalid_binding)
      {
        FCLTafdelingselector("sDept",
                               "sDept",
                              { departmentKey: o_dep_key,
                                label: L("lcl_prs_organisatie"),
                                autlevel: authparams.PRSwritelevel,
                                onChange: "onChangeDept"
                              });
      }

      if ((srtdeel_binding & (BIND_PERSOO)) && !invalid_binding)
      {
        FCLTpersoonselector("sPerson", // requestor
                             "sgPerson",
                             { perslidKey: o_perslid_key,
                               label: L("lcl_name"),
                               autlevel: authparams.PRSwritelevel,
                               onChange: "onChangePerson"
                             });
      }

      // Als het Object is uitgeleend dan behoort het object aan een contactpersoon. Voor het uitlenen behoorde het object tot een persoon, afdeling of plek.
      // Aangezien we de velden niet mogen wijzigen als het object is uitgeleed, hoeven we het contactpersoon hier niet te tonen.

      if (!invalid_binding)
      {
        var maxlevel = -1;
        var change = "";
%>
        <script>
          function change1()
          {
            setBind('T');
          }

          function change2(p_key)
          {
            setBind('R');
          }

          function change3(p_key)
          {
            setBind('W');
          }
        </script>
<%
        if (srtdeel_binding & (BIND_TERREI | BIND_RUIMTE | BIND_WERKPL))
        {
          change = "change1()";
          maxlevel = 3;
        }

        if (srtdeel_binding & (BIND_RUIMTE | BIND_WERKPL))
        {
          change = "change2()";
          maxlevel = 5;
        }

        if (srtdeel_binding & (BIND_WERKPL))
        {
          change = "change3()";
          maxlevel = 6;
        }

        if (maxlevel >= 2)
          FCLTplaatsselector(authparams.ALGwritelevel, { locatiekey: o_loc_key,
                                                         verdiepingkey: o_floor_key,
                                                         gebouwkey: o_bld_key,
                                                         ruimtekey: o_room_key,
                                                         werkplekkey: o_workpl_key,
                                                         startlevel: 2, // locatie
                                                         eindlevel: maxlevel,
                                                         terrein: true,
                                                         autoselect: true,
                                                         filtercode: "INCVR",
                                                         onLocChange: change,
                                                         cadSelect: true,
                                                         cadShowdiscfn: true,
                                                         escalateOnChUp: true // ook onLocChange als je gebouw wijzigt
                                                       });
      }
      MODAL_BLOCK_END();
      SIMPLE_BLOCK_START();
      CreateButtons([{ title: L("lcl_submit"), action: "ins_submit()", icon: "fa-fclt-save", importance: 1},
                     { title: L("lcl_ins_same_as_parent").format(parent_oms), action: "ins_same_as_parent()", icon: "fa-fclt-copy", importance: 3},
                     { title: L("lcl_cancel"), action: "ins_cancel()", icon: "fa-fclt-cancel", importance: 3}]);
      SIMPLE_BLOCK_END();
IFACE.FORM_END();
%>
    </form>
    <% MODAL_END(); %>
  </body>
</html>
<% ASPPAGE_END(); %>
