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

     File:          opdr_close_confirm.asp.asp
     Description:   Meldt een specifieke opdracht af, eventueel met optie afmeldtijdstip in te vullen
                    ('alle opdrachten van een melding' gebeurt in mld_close_confirm.asp)
     Parameters:
         opdr_key   Opdracht key van de opdracht die moet worden afgemeld
     Context:
     Note:          A Rechtstreeks vanuit overzicht opdrachten
                      LET OP: in multi-mode wordt dit aangeroepen via $.post en doen we geen interactie
                              er wordt dan ook geen opmerking gevraagd
                    B Rechtstreeks vanuit showmode opdracht

*/ %>

<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/iface.inc" -->
<!-- #include file="../Shared/calendar.inc" -->
<!-- #include file="../Shared/json2.js" -->
<!-- #include file="../Shared/save2db.inc" -->
<!-- #include file="mld.inc" -->
<%

FCLTHeader.Requires({plugins: ["jQuery"],
                          js: ["date.js", "jquery.timepicker-table.js"],
                         css: ["timePicker-table.css"]});

var opdr_key_arr = getQParamIntArray("opdr_key");
var reqStatusEmptyMelding = [];
var reqStatusEmptyOpdr = [];
var ingesloten = [];
var result = {};
var maychangeopm = false;
var vraag_sluitmelding = false;

if (opdr_key_arr.length == 1)
{
  // Haal de gegevens van de opdracht op.
  var this_opdr = mld.func_enabled_opdracht(opdr_key_arr[0]); // wat mag ik zoal op deze opdracht
  var mld_opdr = mld.mld_opdr_info(opdr_key_arr[0]);
  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;
  user.auth_required_or_abort(!(kosten_verplicht_afm && opdr_kosten == 0) && this_opdr.canClose, L("lcl_mld_opdr_kosten_verpl_afm")); // Dan zijn we vlug klaar.

  var sql = "SELECT o.mld_opdr_einddatum"
          + "     , o.mld_melding_key"
          + "     , mto.mld_typeopdr_sluitmelding"
          + "  FROM mld_opdr o"
          + "     , mld_typeopdr mto"
          + " WHERE o.mld_typeopdr_key = mto.mld_typeopdr_key"
          + "   AND o.mld_opdr_key = " + opdr_key_arr[0];
  var oRs = Oracle.Execute(sql);
  var mld_key = oRs("mld_melding_key").value;
  var mld_opdr_einddatum = oRs("mld_opdr_einddatum").value;
  var typeopdr_sluitmelding = oRs("mld_typeopdr_sluitmelding").value;
  oRs.Close();

  // Als Setting S("mld_ord_afmeld_future") niet is gezet: Opdrachten waarvan de einddatum in de toekomst ligt mogen niet worden afgemeld.
  user.auth_required_or_abort((S("mld_ord_afmeld_future") == 1 || (mld_opdr_einddatum < new Date())), L("lcl_mld_einddatum_to_late_opdr"));
  ingesloten.push(opdr_key_arr[0]);

  if (!maychangeopm && this_opdr.canOpmChange)
    maychangeopm = true; // Ik mag voor de opdracht de opmerking aanpassen

  // Zijn bij deze opdracht alle verplichte kenmerken ingevuld?
  reqStatusEmptyOpdr = mld.getReqStatusEmptyOpdr(reqStatusEmptyOpdr, opdr_key_arr[0], 6); // Opdracht status "Technisch Voltooid(6)"

  // Zijn bij de melding van deze opdracht alle verplichte kenmerken ingevuld?
  reqStatusEmptyMelding = mld.getReqStatusEmptyMelding(reqStatusEmptyMelding, mld_key, 5); // Melding status "Afgemeld(5)"

  // Hoeveel opdrachten staan er open bij deze melding.
  var sql = "SELECT COUNT(mld_opdr_key) nrOpen"
          + "  FROM mld_opdr o"
          + " WHERE o.mld_melding_key = " + mld_key
          + "   AND o.mld_statusopdr_key NOT IN (1, 6, 7, 9)";
  var oRs = Oracle.Execute(sql);
  var nrOpen = oRs("nrOpen").Value;
  oRs.Close();

  if (nrOpen == 1 && typeopdr_sluitmelding == 2)
  {
    // Dit is de laatste opdracht bij de melding EN de melding mag na sluiten van de opdracht ook gesloten worden.
    user.anything_todo_or_abort(!reqStatusEmptyMelding.length, reqStatusEmptyMelding.join("<br />"));
  }
  var this_mld = mld.func_enabled_melding(mld_key);  // Wat heb ik zoal aan rechten op deze specifieke melding.
}
else
{
  // Bepaal de opdrachten in de selectie die
  // ook echt afgemeld kunnen of mogen worden.
  for (var i = 0; i < opdr_key_arr.length; i++)
  {
    var this_opdr = mld.func_enabled_opdracht(opdr_key_arr[i]); // wat mag ik zoal op deze opdracht
    var mld_opdr = mld.mld_opdr_info(opdr_key_arr[i]);
    var sql = "SELECT o.mld_opdr_einddatum"
            + "  FROM mld_opdr o"
            + "     , mld_typeopdr mto"
            + " WHERE o.mld_typeopdr_key = mto.mld_typeopdr_key"
            + "   AND o.mld_opdr_key = " + opdr_key_arr[i];
    var oRs = Oracle.Execute(sql);
    var mld_opdr_einddatum = oRs("mld_opdr_einddatum").value;
    oRs.Close();

    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;

    // Zijn bij deze opdracht alle verplichte kenmerken ingevuld?
    reqStatusEmptyOpdr = mld.getReqStatusEmptyOpdr(reqStatusEmptyOpdr, opdr_key_arr[i], 6); // Opdracht status "Technisch Voltooid(6)"

    // Als Setting S("mld_ord_afmeld_future") niet is gezet (0): Opdrachten waarvan de einddatum in de toekomst ligt mogen niet worden afgemeld.
    if ((S("mld_ord_afmeld_future") == 1 || (mld_opdr_einddatum < new Date())) &&
        this_opdr.canClose &&
        !(kosten_verplicht_afm && opdr_kosten == 0) &&
        !reqStatusEmptyOpdr.length)
    {
      ingesloten.push(opdr_key_arr[i]);

      if (!maychangeopm && this_opdr.canOpmChange)
        maychangeopm = true; // Ik mag voor zeker 1 opdracht de opmerking aanpassen
    }
  }
  vraag_sluitmelding = (ingesloten.length > 1); // Bij meerdere opdrachten sluiten vragen we of de meldingen ook meemoeten
}

user.anything_todo_or_abort(ingesloten.length > 0); // We klagen niet over enkele wel en enkele niet

var result = { opdr_key: ingesloten.join(","), message: "", success: false, canCloseMld: false };
var mld_opdr = mld.mld_opdr_info(ingesloten[0]); // Neem voor informatie de eerste opdracht.
lcl.set_dialect(mld_opdr.opdr_type, "MLD_TYPEOPDR_KEY");

%>
<html>
  <head>
<%  FCLTHeader.Generate(); %>

      <script type="text/javascript">
        function mld_cancel()
        {
          FcltMgr.closeDetail(window, { cancel: true } );
        }

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

          // Zijn er opdrachtkenmerken die alleen verplicht zijn bij het afmelden en niet zijn ingevuld?
          if (<%=reqStatusEmptyOpdr.length%> != 0)
          {
            alert("<%=safe.jsstring(reqStatusEmptyOpdr.join('\n'))%>");
            return false;
          }

          // Alleen vergeten verplichte kenmerken vermelden als die er zijn en aangevinkt is dat de melding evt. afgemeld moet worden.
          // Voorwaarde "aantal nog openstaande opdrachten = 1" kan niet ivm batchmode.
          if ($("#mld_close").is(":checked") && (<%=reqStatusEmptyMelding.length%> != 0))
          {
            alert("<%=safe.jsstring(reqStatusEmptyMelding.join('\n'))%>");
            return false;
          }

          $.post($("form[name=closeform]")[0].action, $("[name=closeform]").serialize(), FcltCallbackClose, "json");

          return true; // disable button
        }
        $(document).ready(function() { FcltMgr.fixActiveelementError();
                                       $("#opdr_opm").focus();
                                     });
      </script>
  </head>

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

    <form id="closeform" name="closeform" action="opdr_close_save.asp?opdr_key=<%=opdr_key_arr.join(",")%>" method="post">
<%
      var nu = new Date;
      if (ingesloten.length == 1)
      {
        var ttl = L("lcl_mld_opdr_number") + " " + (mld_opdr.srtdiscprefix||"") + mld_opdr.mld_key + "/" + mld_opdr.mld_opdr_bedrijfopdr_volgnr;
      } else {
        var ttl = L("lcl_mld_opdr_close");
      }

      BLOCK_START("mldClose", ttl);

      // Calendar boven de opmerking houden zodat genoeg ruimte voor uitklappen
      FCLTcalendar("date_from",
                   { datum    : nu,
                     label    : L("lcl_opdr_closeafwijk"),
                     maxPast  : (ingesloten.length == 1? mld_opdr.typeopdr_afmeldmarge : 0),
                     maxFuture: 0,
                     timeField: true,
                     timeStep : 30, // fixed half uur. Je mag eventueel wel iets anders intikken
                     startTime: S("res_t1"),
                     endTime  : S("res_t2"),
                     readonly : ingesloten.length > 1 || mld_opdr.typeopdr_afmeldmarge == 0, // Datum is niet wijzigbaar bij bulk acties
                     required : true
                   });
      RWTEXTAREATR("opdr_opm",
                   "fldomschr" + (mld_opdr.typeopdr_afhandeling == 1? " required" : ""),
                   L("lcl_mld_inf_Opmerking"),
                   (ingesloten.length > 1? "" : mld_opdr.opdr_opmerking),
                   {html: "rows='8'" + (!maychangeopm? " readonly" : "")});

      if (vraag_sluitmelding)
      {
        %><tr><td colspan="2">
            <% CHECKBOX("fldmldclose", "mld_close"); %>
            <label for="mld_close"><%=L("lcl_mld_mld_close_try")%></label>
          </td></tr>
        <%
      }
      BLOCK_END();
      %><input type='hidden' name='orgdate' value='<%=nu.getTime()%>'><%
      var buttons =  [ {title: L("lcl_close"), icon: "accept.png", action: "mld_close()", singlepress: true, id: "btn_close_submit" },
                       {title: L("lcl_cancel"), icon: "cancel.png", action: "mld_cancel()" } ];
      CreateButtons(buttons);
      IFACE.FORM_END();
%>
    </form>
  </body>
</html>

