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

    File:               prs_edit_dienstlocs.asp
    Description:        (Modal)dialoog om aan een bedrijf en dienst een scope (locaties en/of gebouwen) te koppelen
    Globalen:
        bedrijf_key     Bedrijf key
        dienst_key      Dienst key
    Context:
    Note:
*/
%>

<!--#include file="../Shared/common.inc"-->
<!--#include file="../Shared/selector.inc"-->
<!--#include file="../Shared/iface.inc"-->
<!--#include file="../Shared/Suggest/plaatsFilter.inc"-->

<%
FCLTHeader.Requires({ plugins: ["jQuery"] })

var bedrijf_key = getQParamInt("bedrijf_key");
var dienst_key = getQParamInt("dienst_key");
var immediate = getQParamInt("immediate", 0) == 1;
%>
<html>
  <head>
<%  FCLTHeader.Generate();

    var submitting = getQParamInt("submit", 0) == 1;
    if (submitting)
    {
      protectRequest.validateToken();
      var loc_keys = getFParamIntArray("locExist", []);
      var geb_keys = getFParamIntArray("gebExist", []);
      // Verwijderen alle oude waarden die niet gaan terugkomen.
      sql = "DELETE prs_bedrijfdienstlocatie"
          + " WHERE prs_bedrijf_key = " + bedrijf_key
          + "   AND prs_dienst_key = " + dienst_key
      if (loc_keys.length) {
        if (loc_keys.length > 999) {
          var loc_key_tuples = [];
          for (i in loc_keys) {
            loc_key_tuples.push("('', " + loc_keys[i] + ")");
          }
          sql += "   AND (alg_locatie_key IS NULL OR ('', alg_locatie_key) NOT IN ({0}))".format(loc_key_tuples.join(", "));
        } else {
          sql += "   AND (alg_locatie_key IS NULL OR alg_locatie_key NOT IN ({0}))".format(loc_keys.join(", "));
        }
      }
      if (geb_keys.length) {
        if (geb_keys.length > 999) {
          var geb_key_tuples = [];
          for (i in geb_keys) {
            geb_key_tuples.push("('', " + geb_keys[i] + ")");
          }
          sql += "   AND (alg_gebouw_key IS NULL OR ('', alg_gebouw_key) NOT IN ({0}))".format(geb_key_tuples.join(", "));
        } else {
          sql += "   AND (alg_gebouw_key IS NULL OR alg_gebouw_key NOT IN ({0}))".format(geb_keys.join(", "));
        }
      }
      Oracle.Execute(sql);

      if (loc_keys.length > 0 || geb_keys.length > 0)
      { // Er zijn locaties en/of gebouwen geselecteerd.
        for (i in loc_keys)
        {
          var loc_key = loc_keys[i];
          var sql = "INSERT INTO prs_bedrijfdienstlocatie (prs_bedrijf_key, prs_dienst_key, alg_locatie_key)"
                  + " SELECT " +  bedrijf_key + ", " + dienst_key + ", " + loc_key + " FROM DUAL"
                  + " WHERE (" +  bedrijf_key + ", " + dienst_key + ", " + loc_key + ")"
                  + "            NOT IN (SELECT prs_bedrijf_key, prs_dienst_key, alg_locatie_key"
                  + "                      FROM prs_bedrijfdienstlocatie"
                  + "                     WHERE alg_locatie_key IS NOT NULL)";
          Oracle.Execute(sql);
        }

        for (i in geb_keys)
        {
          var bld_key = geb_keys[i];
          var sql = "INSERT INTO prs_bedrijfdienstlocatie (prs_bedrijf_key, prs_dienst_key, alg_gebouw_key)"
                  + " SELECT " +  bedrijf_key + ", " + dienst_key + ", " + bld_key + " FROM DUAL"
                  + " WHERE (" +  bedrijf_key + ", " + dienst_key + ", " + bld_key + ")"
                  + "            NOT IN (SELECT prs_bedrijf_key, prs_dienst_key, alg_gebouw_key"
                  + "                      FROM prs_bedrijfdienstlocatie"
                  + "                     WHERE alg_gebouw_key IS NOT NULL)";
          Oracle.Execute(sql);
        }
      }
      else
      { // Er zijn geen locaties of gebouwen geselecteerd. Dan nemen we 'Alle'. Anders moet je maar de gehele dienst(locatie) verwijderen.
        var sql = "INSERT INTO prs_bedrijfdienstlocatie (prs_bedrijf_key, prs_dienst_key)"
                + " VALUES (" +  bedrijf_key + ", " + dienst_key + ")";
        Oracle.Execute(sql);
      }
%>
      <script>
          FcltMgr.closeDetail(parent.window, { refresh: true });
      </script>
<%
      Response.End;
    }

    //
    // Einde submit, nu de gewone dialoog
    //
%>
    <script>
      function moveRightLoc(obj)
      {
        if ($("#locPossible option:selected")[0])
        {
          // Toevoegen
          $("#locPossible option:selected").clone().prependTo("#locExist");
          $("#locPossible option:selected").remove();
        }
      }

      function moveRightGeb(obj)
      {
        $("#gebPossible option:selected").each(function(i, selected)
                                               {
                                                 // Als de locatie van dit gebouw geselecteerd is, moet deze verwijderd worden in de geselecteerde locaties lijst.
                                                 var loc_key = $(selected)[0].alg_locatie_key;
                                                 $("#locExist option").each(function(i, selected2)
                                                                            {
                                                                              if (loc_key == $(selected2).val())
                                                                              {
                                                                              	$(this).clone().prependTo("#locPossible");
                                                                                $(this).remove();
                                                                              }
                                                                            });
                                               })

        // Toevoegen
        $("#gebPossible option:selected").clone().prependTo("#gebExist");
        $("#gebPossible option:selected").remove();
      }

      function removeLoc(obj)
      {
        $("#locExist option:selected").clone().prependTo("#locPossible");
        $("#locExist option:selected").remove();
      }

      function removeGeb(obj)
      {
        $("#gebExist option:selected").clone().prependTo("#gebPossible");
        $("#gebExist option:selected").remove();
      }

      function bdl_submit()
      {
        $("#gebExist>option").prop("selected", true); // alles submitten
        $("#locExist>option").prop("selected", true); // alles submitten
        document.forms.u2.submit();
      }
    </script>
  </head>
  <body class="fclt-modal" id="mod_bedrijfdienstlocatie">
<%  MODAL_START(); %>
    <form name="u2" action="prs_edit_dienstlocs.asp?submit=1&bedrijf_key=<%=bedrijf_key%>&dienst_key=<%=dienst_key%>" method="post">
      <%MODAL_BLOCK_START("loc", L("lcl_location"), { icon: "fa-location-arrow" });%>
      </table>
      <div class="bedrijfdienstloc-wrapper">
        <div class="bedrijfdienstloc-select">
<%
          var existing_loc_sql =
                "SELECT dl.alg_locatie_key"
              + "     , l.alg_locatie_omschrijving"
              + "     , 'L' locorgeb"
              + "  FROM prs_bedrijfdienstlocatie dl"
              + "     , alg_locatie l"
              + " WHERE dl.alg_locatie_key = l.alg_locatie_key"
              + "   AND dl.prs_dienst_key = " + dienst_key
              + "   AND dl.prs_bedrijf_key = " + bedrijf_key
              + "   AND dl.alg_locatie_key IS NOT NULL"
              + "   AND (  l.alg_locatie_vervaldatum IS NULL"
              + "       OR l.alg_locatie_vervaldatum > TRUNC(SYSDATE)"
              + "       )"
              + getFiltClauseLocatie("EXP").where;

          var loc_sql =
                "SELECT l.alg_locatie_key"
              + "     , l.alg_locatie_omschrijving"
              + "     , 'L' locorgeb"
              + "  FROM alg_v_aanweziglocatie l"
              + " WHERE (  l.alg_locatie_vervaldatum IS NULL"
              + "       OR l.alg_locatie_vervaldatum > TRUNC(SYSDATE)"
              + "       )"
              + getFiltClauseLocatie("EXP").where;

          FCLTselector("locPossible", loc_sql + " MINUS " + existing_loc_sql + " ORDER BY 2",
                  {   startmulti: true,
                      size: 10,
                      extraParamValue: "locorgeb"
                  } );
%>
        </div>
        <div class="bedrijfdienstloc-button">
          <div class="mv r nowrap" onclick="moveRightLoc()"><%=I("fa-chevron-right")%><%=L("lcl_add")%></div>
          <div class="mv l nowrap" onclick="removeLoc()"><%=L("lcl_delete")%><%=I("fa-chevron-left")%></div>
        </div>
        <div class="bedrijfdienstloc-select">
          <label for="locExist"><%=L("lcl_prs_loc_selected")%></label>
<%        FCLTselector("locExist", existing_loc_sql+ " ORDER BY 2" ,
                {   startmulti: true,
                    size: 10,
                    extraParamValue: "locorgeb"
                }); %>
        </div>
      </div>
      <%MODAL_BLOCK_END();%>
      <%MODAL_BLOCK_START("build", L("lcl_building"), { icon: "fa-building" });%>
      </table>
      <div class="bedrijfdienstloc-wrapper">
        <div class="bedrijfdienstloc-select">
<%        var existing_geb_sql = "SELECT dl.alg_gebouw_key"
                               + "     , l.alg_locatie_code||'-'||g.alg_gebouw_code || ' -  ' || g.alg_gebouw_naam"
                               + "     , 'G' locorgeb"
                               + "     , l.alg_locatie_key"
                               + "  FROM prs_bedrijfdienstlocatie dl"
                               + "     , alg_gebouw g"
                               + "     , alg_locatie l"
                               //+ "     , alg_srtgebouw sg"
                               + " WHERE dl.alg_gebouw_key = g.alg_gebouw_key"
                               + "   AND g.alg_locatie_key = l.alg_locatie_key"
                               //+ "   AND g.alg_srtgebouw_key = sg.alg_srtgebouw_key(+)"
                               + "   AND dl.prs_dienst_key = " + dienst_key
                               + "   AND dl.prs_bedrijf_key = " + bedrijf_key
                               + "   AND dl.alg_gebouw_key IS NOT NULL";

          var geb_sql = "SELECT g.alg_gebouw_key"
                      + "     , l.alg_locatie_code||'-'|| g.alg_gebouw_code || ' -  ' || g.alg_gebouw_naam"
                      + "     , 'G' locorgeb"
                      + "     , l.alg_locatie_key"
                      + "  FROM alg_v_aanweziggebouw g"
                      + "     , alg_locatie l"
                      + "     , alg_srtgebouw sg"
                      + " WHERE l.alg_locatie_key = g.alg_locatie_key"
                      + "   AND g.alg_srtgebouw_key = sg.alg_srtgebouw_key(+)"
                      + "   AND (l.alg_locatie_vervaldatum IS NULL OR l.alg_locatie_vervaldatum > TRUNC(SYSDATE))"
                      + "   AND (g.alg_gebouw_vervaldatum IS NULL OR g.alg_gebouw_vervaldatum > TRUNC (SYSDATE))"
                      + "   AND sg.alg_srtgebouw_passief IS NULL";

        FCLTselector("gebPossible", geb_sql + " MINUS " + existing_geb_sql + " ORDER BY 2",
                       { startmulti: true,
                         size: 10,
                         extraParamValue: "alg_locatie_key"
                       });
%>
        </div>
        <div class="bedrijfdienstloc-button">
          <div class="mv r nowrap" onclick="moveRightGeb()"><%=I("fa-chevron-right")%><%=L("lcl_add")%></div>
          <div class="mv l nowrap" onclick="removeGeb()"><%=L("lcl_delete")%><%=I("fa-chevron-left")%></div>
        </div>
        <div class="bedrijfdienstloc-select">
          <label for="gebExist"><%=L("lcl_prs_bld_selected")%></label><%
          FCLTselector("gebExist", existing_geb_sql+ " ORDER BY 2" ,
                       { startmulti: true,
                         size: 10,
                         extraParamValue: "alg_locatie_key"
                       }); %>
        </div>
      </div>
<%      MODAL_BLOCK_END();
        SIMPLE_BLOCK_START();
            var buttons = [ { title: L("lcl_submit"), icon: "fa-fclt-save",   action: "bdl_submit()"},
                            { title: L("lcl_cancel"), icon: "fa-fclt-cancel", action: "FcltMgr.closeDetail(window, { cancel: true })"}];
            CreateButtons(buttons);
        SIMPLE_BLOCK_END();
    IFACE.FORM_END(); %>
    </form>
<%  MODAL_END(); %>
  </body>
</html>
<% ASPPAGE_END(); %>
