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

     File:          mld_close_confirm.asp
     Description:   Afmelden van een melding. maar dan met een bevestiging
     Parameters:    mld_key    Meldingnummer array (keys)
     Context:       A Rechtstreeks vanuit overzicht meldingen
                    B Rechtstreeks vanuit showmode melding
                    C Vanuit mld_show_melding als soort 'directklaar'
                    D Na afsluiten van laatste opdracht en eventueel 'autoclose' melding
                    Bij A en B ook eventueel checkbox of alle opdrachten ook dicht moeten

*/ %>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/iface.inc" -->
<!-- #include file="../Shared/json2.js" -->
<!-- #include file="../Shared/selector.inc" -->
<!-- #include file="mld.inc" -->
<%
// LET OP: Het eerste stuk komt (nog) letterlijk ook zo terug bij mld_close_save.asp

var mld_key_arr = getQParamIntArray("mld_key");

var verynew = getQParamInt("verynew", 0) == 1;
var lastopdr = (getQParamInt("lastopdr", 0) == 1)
var TransitParam = buildTransitParam(["mld_key", "verynew", "lastopdr"]);

var opmerk = getFParam("opmerk", "");

var has_opdr_opm = getQParamInt("has_opdr_opm", 0) == 1;

var result = {};
var tobeclosed = 0;
var ingesloten = [];
var canCloseOpdr = [];
var reqStatusEmptyMelding = [];
var futureOpdr = false;
// Bepaal de meldingen in de selectie die
// ook echt afgemeld kunnen of mogen worden.

for (var i = 0; i < mld_key_arr.length; i++)
{
  var this_mld = mld.func_enabled_melding(mld_key_arr[i], { verynew: verynew });
  if (this_mld.canClose) // Als je mag accepteren mag je ook rejecten
  {
    // Zijn er nog kenmerken die nu wel verplicht zijn?
    var kvsAfwezig = mld.hasRequiredStatusEmptyMelding(mld_key_arr[i], 5); // Melding status "Afgemeld(5)"
    if (kvsAfwezig.length)
    {
        var mldnr = mld.mld_prefix(mld_key_arr[i]) + mld_key_arr[i];
        reqStatusEmptyMelding.push(L("lcl_mld_req_status_empty").format(kvsAfwezig.join(", "), mldnr) );
    }
    // Zijn er nog lopende opdrachten?
    var canCloseOpdrOfMld = [];
    var sql = "SELECT o.mld_opdr_key"
            + "  FROM mld_opdr o"
            + " WHERE o.mld_melding_key IN (" + mld_key_arr[i] + ")"
            + "   AND o.mld_statusopdr_key NOT IN (1, 6, 7, 9)"
    var oRsOM = Oracle.Execute(sql);
    var noOpdrCloseAtAll = false;
    futureOpdr = false;
    while (!oRsOM.eof)
    { // Voor elke opdracht van een melding controleren of deze afgemeld mag worden
      var this_opdr = mld.func_enabled_opdracht(oRsOM("mld_opdr_key").Value);
      var mld_opdr = mld.mld_opdr_info(oRsOM("mld_opdr_key").Value);
      sql = "SELECT mld_opdr_einddatum"
          + " FROM mld_opdr o"
          + " WHERE o.mld_opdr_key = " + oRsOM("mld_opdr_key").Value;
      var oRs = Oracle.Execute(sql);

      var kosten_verplicht_afm = mld_opdr.typeopdr_matchtype != 4 && (mld_opdr.typeopdr_kosten_verplicht & 2 || (mld_opdr.typeopdr_kosten_verplicht == 0 && mld_opdr.opdrkosten_verplicht & 2));
      var opdr_kosten = mld_opdr.t_cost;

      // Als Setting S("mld_ord_afmeld_future") niet is gezet (0): Opdrachten waarvan de einddatum in de toekomst ligt mogen niet worden afgemeld.
      if (!this_opdr.canClose || (S("mld_ord_afmeld_future") != 1 && (oRs("mld_opdr_einddatum").Value > new Date())) || (kosten_verplicht_afm && opdr_kosten == 0))
      { // Geen autorisatie om alle opdrachten van een melding af te melden of opdrachten in de toekomst met setting S("mld_ord_afmeld_future") niet gezet-->dan geen enkele van die melding
        noOpdrCloseAtAll = true;
        if (S("mld_ord_afmeld_future") != 1 && (oRs("mld_opdr_einddatum").Value > new Date()))
          futureOpdr = true; // Indien opdrachten in de toekomst en setting S("mld_ord_afmeld_future") niet gezet (0) dan mag je de melding niet afmelden
      }
      oRs.Close();
      canCloseOpdrOfMld.push(oRsOM("mld_opdr_key").Value);
      oRsOM.MoveNext();
    }
    oRsOM.Close();
    // Geen autorisatie om alle opdrachten van een melding af te melden of opdrachten in de toekomst met setting S("mld_ord_afmeld_future") niet gezet (0)
    // --> dan geen enkele van die melding
    if (!noOpdrCloseAtAll)
    {
      for (var j = 0; j < canCloseOpdrOfMld.length; j++)
      {
        canCloseOpdr.push(canCloseOpdrOfMld[j]);
      }
    }

    if (!futureOpdr)
    { // Indien opdrachten in de toekomst en setting S("mld_ord_afmeld_future") niet gezet (0) dan mag je de melding niet afmelden
      ingesloten.push(mld_key_arr[i]);
      tobeclosed++;
    }
  }
}
user.anything_todo_or_abort(!reqStatusEmptyMelding.length, reqStatusEmptyMelding.join("<br />"));
user.auth_required_or_abort(!(mld_key_arr.length == 1 && futureOpdr), L("lcl_mld_einddatum_to_late_mld")); // Bij enkele melding met toekomstige opdrachten een aparte melding geven
user.anything_todo_or_abort(tobeclosed > 0); // We klagen niet over enkele wel en enkele niet

var mld_melding = mld.mld_melding_info(ingesloten[0]); // Neem voor informatie de eerste melding.
lcl.set_dialect(mld_melding.srtdisc, "MLD_SRTDISCIPLINE_KEY");

%>
<html>
  <head>
<%  FCLTHeader.Generate(); %>
      <script type="text/javascript">
        function mld_opmpaste()
        {
            var params = FcltMgr.dialogArguments()||{};
            $("#opmerk").val($("#opmerk").val() + params.opdr_opm);
            $("#opmpaste").css("visibility", "hidden"); // icon na invoegen opmerking onzichtbaar maken zodat geen tweede keer toegevoegd kan worden.
        }

        function mld_cancel()
        {
            FcltMgr.closeDetail(window, { cancel: true } );
        }

        function mld_close(close)
        {
          if (!validateForm("u2"))
            return false;

          $.post($("form[name=closeform]")[0].action, $("[name=closeform]").serialize(), FcltCallbackClose, "json");
          return true; // disable button
        }

        function PasteFromClipboard()
        {
          $("#opmerk").focus();
          var PastedText = $("#opmerk")[0].createTextRange();
          PastedText.execCommand("Paste");
        }

        function PasteFromSelectbox()
        {
          if ($("#stdopmerk :selected").val() > -1)
          {
            $("#opmerk").focus();
            var PastedText = $("#stdopmerk :selected")[0].getAttribute("afmeldtekstoms");
            $("#opmerk").val($("#opmerk").val() + ($("#opmerk").val() != ""? "\n" : "") + PastedText);
          }
        }

        FcltMgr.fixActiveelementError();
        $(document).ready(function() {
                                       $("#opmerk").focus();
                                    <% if (has_opdr_opm && S("mld_add_mldopmerk_on_opdrclose") == 1)
                                       { %>
                                         mld_opmpaste();
                                    <% } %>
                                     });
      </script>
  </head>

  <body class="modal" id="mod_mldclose">

    <form id="closeform" name="closeform" action="mld_close_save.asp?x=x<%=TransitParam%>" method="post">
<%
      var prefix = "";
      var oldRemark = "";
      var req = false;
      var stdmld_arr = [];
      var disc_arr = [];

      sql = "SELECT DISTINCT mld_stdmelding_afmeldtext"
          + "     , mld_melding_opmerking"
          + "     , ins_srtdiscipline_prefix"
          + "     , std.mld_stdmelding_key"
          + "     , md.ins_discipline_key"
          + "  FROM mld_melding mm"
          + "     , mld_stdmelding std"
          + "     , mld_discipline md"
          + "     , ins_srtdiscipline sd"
          + " WHERE mld_melding_key IN (" + ingesloten.join(",") + ")"
          + "   AND mm.mld_stdmelding_key = std.mld_stdmelding_key"
          + "   AND std.mld_ins_discipline_key = md.ins_discipline_key"
          + "   AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key";
      oRs = Oracle.Execute(sql);
      while (!oRs.eof)
      {
        prefix = oRs("ins_srtdiscipline_prefix").Value || "";
        oldRemark = oRs("mld_melding_opmerking").Value;
        req = req || ((S("mld_afhandeling_required_for_close") || oRs("mld_stdmelding_afmeldtext").value == 2) && (oldRemark == null));
        stdmld_arr[stdmld_arr.length] = oRs("mld_stdmelding_key").Value;
        disc_arr[disc_arr.length] = oRs("ins_discipline_key").Value;
        oRs.MoveNext();
      }

      var txt = "";
      if (lastopdr)
        txt = L("lcl_mld_close_order_close_call") + "<br>";

      // Mag ik kennisbank raadplegen en standaard-antwoorden knippen/plakken
      var authFaq = (S("faq_enabled") == 1) && user.checkAutorisation("WEB_FAQFOF", true);
      if (authFaq && authFaq.PRSwritelevel < 9) // schrijfrechten op WEB_FAQFOF nodig
      {
        var _imgsrcstr2 = 'src="../Pictures/book_open.png" ';
        var _imgonclickstr2 = "FcltMgr.openDetail('/appl/fac/fac_faq_search.asp?urole=bo&autosearch=1'"
                            + "+'&stdm_str='+'" + stdmld_arr.join(",") + "'"
                            + "+'&disc_key_str='+'" + disc_arr.join(",") + "'"
                            + ", '" + L("lcl_faq_kennisbank") + "') ";
        var _imgstr2 = '<img class="details" id="goegel" title="' + L("lcl_fac_filterblok") + '" ' + _imgsrcstr2
                     + ' onclick="' + _imgonclickstr2 + '">'
                     + " <a class='details' onClick='PasteFromClipboard()'>[" + L("lcl_mld_paste") +"]</a>" ;
      }
      else
        var _imgstr2 = '';

      BLOCK_START("mldClose", txt + L("lcl_mld_finish_close") + (ingesloten.length == 1? " " + prefix + ingesloten[0]: "") + _imgstr2);
        var sql_from_t = "  FROM mld_afmeldtekst"
                       + " WHERE (mld_stdmelding_key IN (" + stdmld_arr.join(",") + ") )"
                       + "    OR (mld_stdmelding_key IS NULL AND mld_ins_discipline_key IN (" + disc_arr.join(",") + ") )"
                       + "    OR (mld_stdmelding_key IS NULL AND mld_ins_discipline_key IS NULL)";

        var sql_from_o = "  FROM mld_opdr mo"
                       + " WHERE mo.mld_melding_key = " + ingesloten[0]
                       + "   AND mo.mld_statusopdr_key = 6" // status=afgemeld
                       + "   AND mo.mld_opdr_opmerking IS NOT NULL";

        var sql = "SELECT 1"
                + sql_from_t
                + (ingesloten.length == 1
                  ? " UNION SELECT 1" + sql_from_o
                  : ""
                  );
        oRs = Oracle.Execute(sql);
        if (!oRs.eof)
        {
          sql = "SELECT mld_afmeldtekst_key"
              + "     , " + lcl.xsqla('mld_afmeldtekst_naam', 'mld_afmeldtekst_key')
              + "     , " + lcl.xsql('mld_afmeldtekst_omschrijving', 'mld_afmeldtekst_key') + " afmeldtekstoms"
              + "     , 2 src"
              + sql_from_t;
          if (ingesloten.length == 1)
          {
            sql += " UNION "
                 + "SELECT mo.mld_opdr_key"
                 + "     ," + safe.quoted_sql(L("lcl_opdr_closeremark") + " /") +"|| mo.mld_opdr_bedrijfopdr_volgnr"
                 + "     , mo.mld_opdr_opmerking"
                 + "     , 1"
                 + sql_from_o
          }
          sql += " ORDER BY 4,2";
          FCLTselector("stdopmerk",
                       sql,
                       { label: L("lcl_mld_inf_std_opm"),
                         initKey: -1,
                         emptyOption: "",
                         extraParamValue: "afmeldtekstoms",
                         onChange: "PasteFromSelectbox()"});
        }

        // tekstveld waarin informatie over de afhandeling vermeld kan worden
        if (ingesloten.length == 1 && oldRemark)
        {
            %><div><%=safe.html(oldRemark)%></div><%
        }

        RWTEXTAREATR("opmerk", "fldremark" + (req?" required":""), "", "", { tdhtml_ta: "colspan='2'", html: "rows='8'" });
        if (canCloseOpdr.length)
        {
            %><tr><td colspan="2">
                <% CHECKBOX("fldopdrclose", "opdr_close", S("mld_close_opdr_default")); %>
                <label for="opdr_close"><%=canCloseOpdr.length + L("lcl_mld_ord_close_all")%></label>
              </td></tr>
            <%
        }
      BLOCK_END();
      buttons = [];
      if (has_opdr_opm)
        buttons.push({title: L("lcl_mld_opm_paste"), icon: "paste_plain.png", action: "mld_opmpaste()", id: "opmpaste", showIcon: true});

      buttons.push({title: L("lcl_close"), icon: "accept.png", action: "mld_close()", singlepress: true, id: "btn_close_submit"  })
      buttons.push({title: L("lcl_cancel"), icon: "cancel.png", action: "mld_cancel()" });
      CreateButtons(buttons);
IFACE.FORM_END();
%>
    </form>
  </body>
</html>
