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

    File:               kpn_edit_mandate_save
    Description:        SUBMIT-form

    Parameters:
        keys            String van prs_perslidkostenplaats keys (dan multi-edit kostenplaatsen)
                        of: form kpn_kpnkey voor ondermandateren?
    Context:
    Note:

     SUBMIT-form
*/ %>

<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../shared/save2db.inc" -->

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

var kpnman_keys = getQParamIntArray("keys", []);

var authparams = user.checkAutorisation("WEB_FINMSU", true);
if (authparams && authparams.ALGwritelevel < 9)
{
  var filtercode = "A"; // alles, mandateren
}
else
{
  var filtercode = "B"; // kostenplaatsverantwoordelijke, ondermandateren

  var authparams = user.checkAutorisation("WEB_FACMAN");
  // Voor WEB_FACMAN kijken naar prs write rechten, fac_functie_min_level = 7, lezen en schrijven organisatie (Let op dat alg write rechten dan altijd -1 zijn, ook bij geen write rechten)
  // Dus alleen kijken naar prs write rechten
  var canSave = (authparams.PRSwritelevel < 9);
  user.auth_required_or_abort(canSave);

  if (kpnman_keys.length > 0 && kpnman_keys[0] > -1)
  { // Het is geen nieuwe mandate
    var tobesaved = 0;
    var ingesloten = [];
    for (var i = 0; i < kpnman_keys.length; i++)
    {
      if (canSave)
      { // De rechten heb je
        sql = "SELECT prs_perslidkostenplaats_key"
            + "     , prs_kostenplaats_key"
            + "  FROM prs_perslidkostenplaats"
            + " WHERE prs_perslidkostenplaats_key = " + kpnman_keys[i]
        var oRs = Oracle.Execute(sql);
        if (oRs.eof)
          shared.record_not_found("<!--" + kpnman_keys[i] + "-->");

        if (!oRs.eof && oRs("prs_kostenplaats_key").value)
        { // prs_kostenplaats_key heeft een waarde
          ingesloten.push(kpnman_keys[i]);
          tobesaved++;
        }
        oRs.Close();
      }
    }
    user.auth_required_or_abort(tobesaved > 0); // We klagen niet over enkele wel en enkele niet
    kpnman_keys = ingesloten;
  }
}

var multi = kpnman_keys.length > 1;

var fields =  [ { dbs: "prs_perslidkostenplaats_boeken", typ: "check", frm: "kpn_kpnbk" },
                { dbs: "prs_perslidkostenplaats_inzage", typ: "check", frm: "kpn_kpninz" }];

var closetab = false;
var warning = "";
if (multi)
{ // Multi update
  var boeken = (Request.Form("has_kpn_kpnbk").count == 1 && Request.Form("kpn_kpnbk").count == 1)
  var inzage = (Request.Form("has_kpn_kpninz").count == 1 && Request.Form("kpn_kpninz").count == 1)

  if (boeken || inzage)
  {
    sql = buildUpdate("prs_perslidkostenplaats", fields)
        + " prs_perslidkostenplaats_key IN (" + kpnman_keys.join(",") + ")";
  }
  else
  {
    sql = "DELETE FROM prs_perslidkostenplaats WHERE prs_perslidkostenplaats_key IN (" + kpnman_keys.join(",") + ")";
  }

  var err = Oracle.Execute(sql, true);
  if (err.friendlyMsg)
    warning = err.friendlyMsg;
}
else if (kpnman_keys[0] > 0)
{ // Update
  var boeken = (Request.Form("has_kpn_kpnbk").count == 1 && Request.Form("kpn_kpnbk").count == 1)
  var inzage = (Request.Form("has_kpn_kpninz").count == 1 && Request.Form("kpn_kpninz").count == 1)

  if (boeken || inzage)
  {
    sql = buildUpdate("prs_perslidkostenplaats", fields)
        + " prs_perslidkostenplaats_key = " + kpnman_keys[0];
  }
  else
  {
    sql = "DELETE FROM prs_perslidkostenplaats WHERE prs_perslidkostenplaats_key = " + kpnman_keys[0]
    closetab = true;
  }
  var err = Oracle.Execute(sql, true);
  if (err.friendlyMsg)
    warning = err.friendlyMsg;
}
else // kpnman_keys == -1
{ // Insert nieuwe perslidkostenplaatsen
  fields.push({ dbs: "prs_perslid_key", typ: "key", frm: "kpn_prskey" });
  fields.push({ dbs: "prs_perslidkostenplaats_key", typ: "key", seq: "prs_s_prs_perslidkp_key" });

  var kpn_kpnkeys = getFParamIntArray("kpn_kpnkey", []);
  if (kpn_kpnkeys.length == 0 && filtercode != 'A')
  {
      warning = "U moet kostenplaatsen selecteren.";
  }
  else
  {
      var kpn_prskey = getFParamInt("kpn_prskey"); // Gemandateerde persoon.
      kpnman_keys = [];

      // Als "Alle" (kostenplaatsen) is geselecteerd samen met andere kostenplaatsen, dan zijn andere geselecteerde kostenplaatsen niet meer interessant.
      if (kpn_kpnkeys.join(",").indexOf("-1") != -1)
        kpn_kpnkeys = [-1];
      // Als de array leeg is dan is "Alle" (kostenplaatsen) geselecteerd geweest.
      if (kpn_kpnkeys.length == 0)
        kpn_kpnkeys = [-1];

      for (var i = 0; i < kpn_kpnkeys.length; i++)
      {
        // Controleer of de informatie al in de tabel aanwezig is
        // (Of de persoon al rechten heeft voor de kostenplaats)
        sql = "SELECT COALESCE(pk.prs_kostenplaats_key, -1)"
            + " FROM prs_perslidkostenplaats pk"
            + " WHERE COALESCE(pk.prs_kostenplaats_key, -1) = " + kpn_kpnkeys[i]
            + " AND pk.prs_perslid_key = " + kpn_prskey
            + " ORDER BY 1";
        var oRsKP = Oracle.Execute(sql);
        var present = (1 == 0);
        if (!oRsKP.eof)
        {
          present = (1 == 1); // Informatie is aanwezig
        }

        if (!present)
        { // Informatie is niet aanwezig, dus voeg nieuwe relatie toe
          if (kpn_kpnkeys[i] == -1)
          { // Als de nieuwe rechten voor alle kostenplaatsen zijn, verwijder de aanwezige relaties
            sql = "DELETE prs_perslidkostenplaats"
                + " WHERE prs_perslid_key = " + kpn_prskey;
            Oracle.Execute(sql);
          }
          else
          { // Verwijder rechten voor alle kostenplaatsen indien aanwezig
            sql = "DELETE prs_perslidkostenplaats"
                + " WHERE prs_perslid_key = " + kpn_prskey
                + " AND prs_kostenplaats_key IS NULL";
            Oracle.Execute(sql);
          }

          fields.push({ dbs: "prs_kostenplaats_key", typ: "key", val: kpn_kpnkeys[i] });

          var regIns = buildInsert("prs_perslidkostenplaats", fields);
          kpnman_keys[kpnman_keys.length] = regIns.sequences["prs_perslidkostenplaats_key"];
          sql = regIns.sql;
          var err = Oracle.Execute(sql, true);
          if (err.friendlyMsg)
            warning += err.friendlyMsg;

          fields.pop(); // Haal de prs_kostenplaats_key (laatste fields item) er weer vanaf
        }
        oRsKP.Close();
      }
  }
}
%>
<html>
  <head>
    <%  FCLTHeader.Generate() %>
    <script>
      $(document).ready(function () {
          FcltMgr.closeDetail(window, { kpnman_keys: "<%=kpnman_keys.join(",")%>",
                                        warning: "<%=safe.jsstring(warning)%>",
                                        keepForm: <%=warning?"true":"false"%>,
                                        close: <%=closetab || multi?"true":"false"%>,
                                        refresh: true
                                       }); } );
    </script>
  </head>
  <body>
  </body>
</html>
