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

    File:           ins_inspect_end.asp
    Description:    Afmelddatum van inspectie opgeven.
    Parameters:     ins_key (geen verschil).

    Context:        Inline actie ins_list.inc of actie ins_inspect_list
    Note:           Parameter mobile doet niets met navigatie, sluiten enzo, die submit gewoon.
                    Resultaat van een submit is een json object

*/
%>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/iface.inc" -->
<!-- #include file="../Shared/kenmerk_common.inc" -->
<!-- #include file="../Shared/calendar.inc" -->
<!-- #include file="../Shared/save2db.inc" -->
<!-- #include file="../Shared/selector.inc" -->
<!-- #include file="../Shared/json2.js" -->
<!-- #include file="ins_flexkenmerksrtcontrole.inc" -->
<!-- #include file="ins.inc" -->

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

var ins_key_arr = getQParamIntArray("ins_keys");
var srtcont_key_arr = getQParamIntArray("srtcont_keys");
var dlsrtcont_key_arr = getQParamIntArray("dlsrtcont_keys");
var multi = ins_key_arr.length > 1;

var tobeended = 0;
var ingesloten = [];
var ingeslotensc = [];
var ingeslotendsc = [];
// Bepaal de objecten/delen in de selectie die
// ook echt ingepland kunnen of mogen worden.
for (var i = 0; i < ins_key_arr.length; i++)
{
  var this_ins = ins.func_enabled_deel(ins_key_arr[i]);
  // Als ik mag inspecteren mag ik ook inplannen.
  if (this_ins.canInspect)
  { // Alle Arrays zijn even groot.
    ingesloten.push(ins_key_arr[i]);
    ingeslotensc.push(srtcont_key_arr[i]);
    ingeslotendsc.push(dlsrtcont_key_arr[i]);
    tobeended++;
  }
}
user.anything_todo_or_abort(tobeended > 0); // We klagen niet over enkele wel en enkele niet

%>

<html class="likemodal">
  <head>
<%  FCLTHeader.Generate(); %>

<%
      var eenheid = -1;
      var scmode = 1; // 0 = Momentmode, 1 = Intervalmode.
      var sctype = -1;
      var info = "";
      sql = "SELECT *"
          + "  FROM (WITH defined_inspect AS (SELECT isc.ins_srtcontrole_key"
          + "                                      , isc.ins_srtcontrole_eenheid"
          + "                                      , isc.ins_srtcontrole_periode"
          + "                                      , isc.ins_srtcontrole_mode"
          + "                                      , id.ins_deel_key"
          + "                                      , isc.ins_srtcontrole_info"
          + "                                      , isc.ins_srtcontrole_type"
          + "                                   FROM ins_deel id"
          + "                                      , ins_srtdeel s"
          + "                                      , ins_srtcontrole isc"
          + "                                  WHERE s.ins_srtdeel_key = id.ins_srtdeel_key"
          + "                                    AND (isc.ins_srtcontrole_niveau = 'S'"
          + "                                     AND isc.ins_srtinstallatie_key = id.ins_srtdeel_key"
          + "                                      OR isc.ins_srtcontrole_niveau = 'G'"
          + "                                     AND isc.ins_srtinstallatie_key = s.ins_srtgroep_key"
          + "                                      OR isc.ins_srtcontrole_niveau = 'D'"
          + "                                     AND isc.ins_srtinstallatie_key = id.ins_discipline_key)"
          + "                                    AND id.ins_deel_key IN (" + ingesloten.join(",") + "))"
          + "        SELECT DISTINCT COALESCE (xcp.ins_srtcontroledl_xcp_eenheid, di.ins_srtcontrole_eenheid) eenheid"
          + "             , di.ins_srtcontrole_info info"
          + "             , di.ins_srtcontrole_mode scmode"
          + "             , di.ins_srtcontrole_type sctype"
          + "          FROM defined_inspect di"
          + "             , ins_srtcontroledl_xcp xcp"
          + "             , ins_deelsrtcontrole idsc"
          + "         WHERE di.ins_srtcontrole_key = xcp.ins_srtcontrole_key(+)"
          + "           AND di.ins_deel_key = xcp.ins_deel_key(+)"
          + "           AND di.ins_srtcontrole_key = idsc.ins_srtcontrole_key(+)" // Er kan nog voor de eerste keer geinspecteerd moeten worden.
          + "           AND di.ins_deel_key IN (" + ingesloten.join(",") + ")"
          + "           AND idsc.ins_deel_key(+) IN (" + ingesloten.join(",") + ")"
          + "           AND COALESCE (xcp.ins_srtcontroledl_xcp_periode, di.ins_srtcontrole_periode) > 0"
          + "           AND di.ins_srtcontrole_key IN (" + ingeslotensc.join(",") + ")"
          + "           AND (xcp.ins_srtcontroledl_xcp_eind(+) IS NULL OR xcp.ins_srtcontroledl_xcp_eind(+) > TRUNC(SYSDATE, 'DD'))" + ")";
      var oRs = Oracle.Execute(sql);
      eenheid = oRs("eenheid").Value;
      info = oRs("info").Value;
      scmode = oRs("scmode").Value;
      sctype = oRs("sctype").Value;
      oRs.MoveNext();
      while (!oRs.eof)
      {
        if (eenheid != oRs("eenheid").Value)
          eenheid = -1;
        if (scmode != oRs("scmode").Value)
          scmode = -1;
        if (sctype != oRs("sctype").Value)
        {
          info = "";
          sctype = -1; // Er zijn inspecties met verschillende soort ocntroles. Dan maar -1.
        }
        oRs.MoveNext();
      }
%>
    <script type="text/javascript">
      var inspected_srtcontroles = new Array();
      var eenheid = -1;
<%
      if (sctype < 0)
        abort_with_warning(L("lcl_ins_no_same_srtcontrole"));

      // Als er meerdere inspecties zijn dan hebben bovenstaande variablen alleen een geldige waarde als het voor alle inspecties hetzelfde is.

      if (ingesloten.length == 1)
      {
        // Is er op de inspectiedatum of op het inspectieuur al geinspecteerd voor deze objecten?
        sql = "SELECT idsc.ins_srtcontrole_key"
            + "     , idsc.ins_deelsrtcontrole_datum"
            + "     , COALESCE(xcp.ins_srtcontroledl_xcp_eenheid, isc.ins_srtcontrole_eenheid) eenheid"
            + "     , isc.ins_srtcontrole_mode"
            + "  FROM ins_deelsrtcontrole idsc"
            + "     , ins_srtcontrole isc"
            + "     , ins_srtcontroledl_xcp xcp"
            + " WHERE idsc.ins_srtcontrole_key = isc.ins_srtcontrole_key"
            + "   AND idsc.ins_srtcontrole_key = xcp.ins_srtcontrole_key(+)"
            + "   AND idsc.ins_deel_key = xcp.ins_deel_key(+)"
            + "   AND idsc.ins_deel_key IN (" + ingesloten.join(",") + ")"
            + "   AND COALESCE(xcp.ins_srtcontroledl_xcp_periode, isc.ins_srtcontrole_periode) > 0"
            + "   AND idsc.ins_srtcontrole_key = " + ingeslotensc.join(",");
        var oRs = Oracle.Execute(sql);
        while (!oRs.eof)
        { %>
          inspected_srtcontroles[inspected_srtcontroles.length] = { srtcontrole_key: <%=oRs("ins_srtcontrole_key").Value%>,
                                                                    datum: <%=new Date(oRs("ins_deelsrtcontrole_datum").Value).getTime()%>,
                                                                    eenheid: <%=oRs("eenheid").Value%>,
                                                                    mode: <%=oRs("ins_srtcontrole_mode").Value%>};
<%        oRs.MoveNext();
        }
      }
%>
      function ins_submit(finish)
      {
        // Controle verplichte velden.
        if (!validateForm("u2"))
          return false;

        // Controleren voor uren inspectie of inspectie uitvoerdatum na de laatste uitvoerdatum ligt.
        // Bij multi geldt de laatste uitvoerdatum van alle objecten.
        if (lastinspectdatum && new Date(parseInt($("#deelsrtcontrole_datum").val())) <= lastinspectdatum)
        {
          alert(L("lcl_ins_controle_after_lastinspect"));
          return false;
        }

        // Controleren voor uren inspectie of inspectie in toekomst of respijtdatum in verleden ligt.
        // Dit kan voorkomen omdat de uren voor vandaag de hele dag ingevuld kunnen worden.
        // Het zou dus eigenlijk alleen voor uren inspecties voor kunnen komen.
        // Alleen controleren als eenheid is uren. Bij invoer kies je dan ook een bepaald uur.
        if (eenheid == 0 && new Date(parseInt($("#deelsrtcontrole_datum").val())) > new Date())
        { // Invoeren inspecteren.
          alert(L("lcl_ins_controle_not_future")); // Controledatum mag niet in de toekomst liggen!
          return false;
        }

        for (var i = 0; i < inspected_srtcontroles.length; i++)
        {
          // Voor multi objecten is inspected_srtcontroles leeg.
          // In het save script worden die inspecties er dan wel uitgefilterd/overgeslagen.
          if (inspected_srtcontroles[i].srtcontrole_key == $("#sel_srtcontrole").val())
          {
            // Controle of er op de inspectiedatum of op het inspectieuur al inspecties zijn geweest
            // TODO: Wat te doen met extra inspecties. En per week/maand/jaar enz.
            var controle_datum_midnight = new Date(parseInt($("#deelsrtcontrole_datum").val())).midnight().getTime()
            var controle_datum_uur = new Date(new Date(parseInt($("#deelsrtcontrole_datum").val())).setMinutes(0,0,0)).getTime()
            var controle_datum = new Date(parseInt($("#deelsrtcontrole_datum").val())).getTime()

            if (controle_datum_midnight == new Date(parseInt(inspected_srtcontroles[i].datum)).midnight().getTime() &&
                inspected_srtcontroles[i].eenheid > 0 &&
                inspected_srtcontroles[i].mode == 0) // Geldt alleen voor momentmodus.
            { // Op dezelfde dag mag niet.
              alert(L("lcl_ins_double_inspection_today"));
              return false;
            }
            else if (controle_datum_uur == new Date(new Date(parseInt(inspected_srtcontroles[i].datum)).setMinutes(0,0,0)).getTime() &&
                     inspected_srtcontroles[i].eenheid == 0 &&
                     inspected_srtcontroles[i].mode == 0) // Geldt alleen voor momentmodus.
            { // In hetzelfde uur mag niet.
              alert(L("lcl_ins_double_inspection_hour"));
              return false;
            }
            else if (controle_datum == new Date(parseInt(inspected_srtcontroles[i].datum)).getTime() &&
                     inspected_srtcontroles[i].mode == 1) // Dat respijtdatum hetzelfde is als inspectiedatum is niet mogelijk omdat anders ook de check "respijtdatum < nudatum" geldt (zie hierboen). Er moet gelden: inspectiedatum < nu en respijtdatum > nu.
            { // Een inspectie doen op dezelfde datumtijd (controledatum hetzelfde) mag niet omdat je daarna dan niet meer de volgende inspectie kunt doen.
              // De geplande _org tijd is dan hetzelfde als de laatste inspectie omdat de volgende inspectie dan niet opgeschoven is.
              // Inspecties op dezelfde datumtijd moeten dus afgevangen worden.
              // Dit kan alleen voorkomen in de interval mode.
              alert(L("lcl_ins_double_inspection"));
              return false;
            }
          }
        }

        $("#finish").val(finish);
        $.post($("form[name=u2]")[0].action, $("[name=u2]").serialize(), FcltCallbackClose, "json");
      }

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

      function onChangeDeelsrtcdatum(id)
      {
        if (id == "T") return;
        selecteddate = new Date(parseInt($("#deelsrtcontrole_datum").val())).midnight().getTime();
        if (selecteddate < new Date().midnight().getTime() && (eenheid > 0))
        { // Eenheid is geen uren.
          // Tijd op "0:00 uur zetten.
          $("#show_deelsrtcontrole_datum").datepicker("setDate", new Date(selecteddate));
          $("#deelsrtcontrole_datum").val(selecteddate);
          $("#time_from_deelsrtcontrole_datum").val(toTimeString(new Date(selecteddate)));
        }
        else if (selecteddate == new Date().midnight().getTime() && (eenheid > 0))
        { // Eenheid is geen uren.
          // Tijd op huidige tijd zetten.
          $("#show_deelsrtcontrole_datum").datepicker("setDate", new Date());
          $("#deelsrtcontrole_datum").val(new Date().getTime());
          $("#time_from_deelsrtcontrole_datum").val(toTimeString(new Date()));
        }
      }
    </script>
  </head>

  <body id="editbody" class="likemodal">
<%  var buttons =  [{title: L("lcl_ins_close"), icon: "finish.png", action:"ins_submit(0)"},
                    {title: L("lcl_ins_finish"), icon: "close.png", action: "ins_submit(1)"},
                    {title: L("lcl_cancel"), icon: "undo.png", action: "ins_cancel()"}];
    var titletext;
    switch(sctype)
    {
      case 1:  titletext = L("lcl_ins_srtcontrole_insp"); break;
      case 2:  titletext = L("lcl_ins_srtcontrole_repl"); break;
      case 3:  titletext = L("lcl_ins_srtcontrole_cert"); break;
      default: titletext = L("lcl_menu_ins_controle"); break;
    }
    IFRAMER_HEADER(titletext, buttons);
%>
    <form name="u2" action="ins_inspect_save.asp?ins_keys=<%=ingesloten.join(",")%>&srtcont_key_arr=<%=ingeslotensc.join(",")%>&dlsrtcont_key_arr=<%=ingeslotendsc.join(",")%>" method="post">
      <input type="hidden" name="ins_keys" id="ins_keys" value="<%=ingesloten.join(",")%>">
      <input type="hidden" name="srtcont_key_arr" id="srtcont_key_arr" value="<%=ingeslotensc.join(",")%>">
      <input type="hidden" name="dlsrtcont_key_arr" id="dlsrtcont_key_arr" value="<%=ingeslotendsc.join(",")%>">
      <input type="hidden" name="finish" id="finish" value="0">
<%    BLOCK_START("insMultiEdit", L("lcl_ins_schedule"))
        var insstatus = -1;
        var status_str = "";
        if (ingeslotendsc.join(",").search("-2") < 0)
        { // Allemaal bestaande inspecties met de status Gepland(0) of In Behandeling(2).
          // Is de status voor elke inspectie hetzelfde.
          var sql = "SELECT MIN(ins_deelsrtcontrole_status) minstatus"
                  + "     , MAX(ins_deelsrtcontrole_status) maxstatus"
                  + "  FROM ins_deelsrtcontrole"
                  + " WHERE ins_deelsrtcontrole_key IN (" + ingeslotendsc.join(",") + ")";
          var oRs = Oracle.Execute(sql);
          if (oRs("minstatus").Value == oRs("maxstatus").Value)
          { // De statussen van alle inspecties zijn hetzelfde. Dan kan ik deze tonen.
            insstatus = oRs("minstatus").Value;
            status_str = ins.getinsstatustext(oRs("minstatus").Value);
          }

        }

        if (!multi)
        { // Inspecteren van één object met één of meerdere soortcontroles
          var sql = "SELECT *"
                  + "  FROM (WITH defined_inspect AS (SELECT id.ins_srtdeel_key srtdeel_key"
                  + "                                      , isc.ins_srtcontrole_key"
                  + "                                      , isc.ins_srtcontrole_omschrijving"
                  + "                                      , isc.ins_srtcontrole_info"
                  + "                                      , isc.ins_srtcontrole_eenheid"
                  + "                                      , isc.ins_srtcontrole_periode"
                  + "                                      , isc.ins_srtcontrole_eind"
                  + "                                      , id.ins_deel_key"
                  + "                                   FROM ins_deel id"
                  + "                                      , ins_srtdeel s"
                  + "                                      , ins_srtcontrole isc"
                  + "                                  WHERE s.ins_srtdeel_key = id.ins_srtdeel_key"
                  + "                                    AND (isc.ins_srtcontrole_niveau = 'S'"
                  + "                                         AND isc.ins_srtinstallatie_key = id.ins_srtdeel_key"
                  + "                                      OR isc.ins_srtcontrole_niveau = 'G'"
                  + "                                         AND isc.ins_srtinstallatie_key = s.ins_srtgroep_key"
                  + "                                      OR isc.ins_srtcontrole_niveau = 'D'"
                  + "                                         AND isc.ins_srtinstallatie_key = id.ins_discipline_key)"
                  + "                                    AND id.ins_deel_key = " + ingesloten[0] + ")"
                  + "      SELECT di.ins_srtcontrole_key"
                  + "           , " + lcl.xsqla('di.ins_srtcontrole_omschrijving', 'di.ins_srtcontrole_key')
                  + "           , di.ins_srtcontrole_info info"
                  + "           , COALESCE(xcp.ins_srtcontroledl_xcp_eenheid, di.ins_srtcontrole_eenheid) eenheid"
                  + "           , ins.nextcyclusdate(di.ins_deel_key, di.ins_srtcontrole_key, 1) nextcyclusdate"
                  + "           , fac.getdatemillisec(ins.nextcyclusdate(di.ins_deel_key, di.ins_srtcontrole_key, 1)) nextcyclusdatems"
                  + "           , fac.getdatemillisec(ins.nextcyclusdate(di.ins_deel_key, di.ins_srtcontrole_key)) nextcyclusdatems_n"
                  + "        FROM defined_inspect di"
                  + "           , ins_srtcontroledl_xcp xcp"
                  + "       WHERE di.ins_srtcontrole_key = xcp.ins_srtcontrole_key(+)"
                  + "         AND di.ins_deel_key = xcp.ins_deel_key(+)"
                  + "         AND di.ins_deel_key IN (" + ingesloten[0] + ")"
                  + "         AND COALESCE (xcp.ins_srtcontroledl_xcp_periode, di.ins_srtcontrole_periode) > 0"
                  + "         AND (COALESCE (xcp.ins_srtcontroledl_xcp_eind, di.ins_srtcontrole_eind) >= TRUNC(SYSDATE, 'DD')"
                  + "              OR COALESCE (xcp.ins_srtcontroledl_xcp_eind, di.ins_srtcontrole_eind) IS NULL)"
                  + "       AND di.ins_srtcontrole_key = " + ingeslotensc[0]
                  + "       GROUP BY di.ins_srtcontrole_key"
                  + "              , di.ins_srtcontrole_omschrijving"
                  + "              , di.ins_srtcontrole_info"
                  + "              , di.ins_srtcontrole_eenheid"
                  + "              , di.ins_srtcontrole_periode"
                  + "              , di.ins_deel_key"
                  + "              , xcp.ins_srtcontroledl_xcp_eenheid"
                  //+ "      HAVING COUNT(*) = " + 1 // Als multi dan alleen de inspecties die voor *alle* objecten gelden
                  + ")";

          FCLTselector("sel_srtcontrole_show",
                       sql,
                       { label: L("lcl_ins_controle"),
                         initKey: ingeslotensc[0],
                         emptyOption: L("lcl_select_srtcontrole"),
                         readonly: true, // dan wordtie niet gesubmit
                         required: true,
                         extraParamValue: "eenheid, info, nextcyclusdatems, nextcyclusdatems_n",
                         extraParamValueInit: "-1, , 0, 0"
                        });
%>
          <input type="hidden" name="sel_srtcontrole" id="sel_srtcontrole" value="<%=ingeslotensc[0]%>">
<%

          ROTEXTAREATR("fldtxt", L("lcl_ins_info"), info, {html: "rows='3'", trclass: "invoerinsp", id: "srtcontrole_info", suppressEmpty: true });
        }

        // Status tonen.
        var params = {};
        if (!multi && ingeslotendsc[0] > 0)
        {
          params = { infoPointer: { Url: "appl/shared/status_info.asp?insc_key=" + ingeslotendsc[0] + "&urole=bo",
                                    Title: L("lcl_status_details") + " " + ingeslotendsc[0]
                                  }
                   }
        }
        ROFIELDTR("fld", L("lcl_ins_status"), status_str, params);


        // Men mag alleen een inspectie-uitvoerdatum invoeren die later is dan de laatste inspectie-uitvoerdatum.
        // Bij multi ook de laatste uitvoerdatum bepalen.
        // Bij alleen uren inspecties de laatste uitvoerdatum tonen als minimale datum, anders een dag later.
        sql = "SELECT MAX(idsc.ins_deelsrtcontrole_datum) lastinspectdatum"
            + "     , MAX(idsc.ins_deelsrtcontrole_datum + 1) dag_na_lastinspectdatum"
            + "     , SUM (CASE"
            + "            WHEN COALESCE(xcp.ins_srtcontroledl_xcp_eenheid, isc.ins_srtcontrole_eenheid) != 0" // Geen tijd eenheid maar dag, maand of jaar.
            + "            THEN 1" // Dag, maand of jaar.
            + "            ELSE 0" // Tijd.
            + "            END) aantal_dmj_eenheid"
            //+ "     , isc.ins_srtcontrole_type"
            + "  FROM ins_deelsrtcontrole idsc"
            + "     , ins_srtcontrole isc"
            + "     , ins_srtcontroledl_xcp xcp"
            + " WHERE idsc.ins_srtcontrole_key = isc.ins_srtcontrole_key"
            + "   AND idsc.ins_srtcontrole_key = xcp.ins_srtcontrole_key(+)"
            + "   AND idsc.ins_deel_key = xcp.ins_deel_key(+)"
            + "   AND COALESCE(xcp.ins_srtcontroledl_xcp_periode, isc.ins_srtcontrole_periode) > 0"
            //+ "   AND idsc.ins_deelsrtcontrole_status IN (5, 6)"
            + "   AND idsc.ins_deel_key IN (" + ingesloten.join(",") + ")"
            + "   AND idsc.ins_srtcontrole_key IN (" + ingeslotensc.join(",") + ")"
            + " GROUP BY isc.ins_srtcontrole_mode";
            //+ "        ,ins_srtcontrole_type";
        var oRs = Oracle.Execute(sql);
        var lastinspectdatum;
        var dag_na_lastinspectdatum;
        var aantal_dmj_eenheid;
        var minDate = new Date();
        if (!oRs.eof)
        {
          lastinspectdatum = new Date(oRs("lastinspectdatum").Value); // Kan uiterlijk vandaag zijn.
          dag_na_lastinspectdatum = new Date(oRs("dag_na_lastinspectdatum").Value); // Kan uiterlijk morgen zijn.
          aantal_dmj_eenheid = oRs("aantal_dmj_eenheid").Value;
          minDate = aantal_dmj_eenheid? dag_na_lastinspectdatum : lastinspectdatum;
%>
          <script type="text/javascript">
            var lastinspectdatum = new Date(<%=lastinspectdatum.getTime()%>);
          </script>
<%
        }
        else
        {
%>
          <script type="text/javascript">
            var lastinspectdatum = null;
          </script>
<%
        }

        var dsc_is_afgemeld = false;
        var multidsc_has_afgemeld = false;
        if (!multi && ingeslotendsc[0] > 0)
        {
          var sql = "SELECT ins_deelsrtcontrole_datum"
                  + "     , ins_controlemode_key"
                  + "     , ins_deelsrtcontrole_opmerking"
                  + "     , ins_deelsrtcontrole_plandatum"
                  + "     , ins_deelsrtcontrole_status"
                  + "  FROM ins_deelsrtcontrole"
                  + " WHERE ins_deelsrtcontrole_key = " + ingeslotendsc[0];
          var oRs = Oracle.Execute(sql);
          inspect_data = {deelsrtcontrole_datum: oRs("ins_deelsrtcontrole_datum").Value? new Date(oRs("ins_deelsrtcontrole_datum").Value): new Date(),
                          controlemode_key: oRs("ins_controlemode_key").Value,
                          deelsrtcontrole_opmerking: oRs("ins_deelsrtcontrole_opmerking").Value,
                          deelsrtcontrole_plandatum: oRs("ins_deelsrtcontrole_plandatum").Value != null? new Date(oRs("ins_deelsrtcontrole_plandatum").Value) : null,
                          deelsrtcontrole_status: oRs("ins_deelsrtcontrole_status").Value,
                          deelsrtcontrole_status_str: ins.getinsstatustext(oRs("ins_deelsrtcontrole_status").Value)}
          // Als de tijd van de datum NIET middennacht (00:00) is dan mag je de datum niet wijzigen. Daarom tijd bepalen voor FCLTcalendar.
          // Wijzigen zet datum op middennacht wat problemen met een constraint kan geven.
          var hours = inspect_data.deelsrtcontrole_datum.getHours();
          var minutes = inspect_data.deelsrtcontrole_datum.getMinutes();
          dsc_is_afgemeld = inspect_data.deelsrtcontrole_status >= 5;
        }
        else
        {
          inspect_data = {deelsrtcontrole_datum: new Date(),
                          deelsrtcontrole_plandatum: null,
                          srtcontrole_opmerking: "",
                          deelsrtcontrole_status: insstatus,
                          deelsrtcontrole_status_str: status_str};

          // Als er afgemelde inspecties tussen zitten dan mag de inspectiedatum niet meer worden aangepast.
          if (multi)
          {
            for (var i = 0; i < ingeslotendsc.length; i++)
            {
              var sql = "SELECT ins_deelsrtcontrole_status"
                      + "  FROM ins_deelsrtcontrole"
                      + " WHERE ins_deelsrtcontrole_key = " + ingeslotendsc[i]
                      + "   AND ins_deelsrtcontrole_status >= 5";
              var oRs = Oracle.Execute(sql);
              if (!oRs.eof)
              { // Er is er één gevonden en dan kunnen we stoppen met zoeken.
                multidsc_has_afgemeld = true;
                break;
              }
            }
          }
        }

        FCLTcalendar("deelsrtcontrole_plandatum",
                     { label: L("lcl_ins_controle_plandate"),
                       datum: inspect_data.deelsrtcontrole_plandatum,
                       trclass: "invoerinsp",
                       timeField: true,
                       timeStep: 60,
                       startTime: 0,
                       endTime: 23.75,
                       readonly: true,
                       suppressEmpty: true
                     });
        FCLTcalendar("deelsrtcontrole_datum",
                     { label: L("lcl_ins_controle_datum"),
                       datum: inspect_data.deelsrtcontrole_datum? inspect_data.deelsrtcontrole_datum : new Date(),
                       minDate: minDate,
                       maxDate: new Date(),
                       required: true,
                       trclass: "invoerinsp",
                       timeField: true,
                       timeStep: 60,
                       startTime: 0,
                       endTime: 23.75,
                       onChangeDate: "onChangeDeelsrtcdatum('D')",
                       onChangeTime: "onChangeDeelsrtcdatum('T')",
                       readonly: (multidsc_has_afgemeld || (dsc_is_afgemeld && (hours > 0 || minutes > 0)? true : false))
                     });

        sql = "SELECT ins_controlemode_key"
            + "     , " + lcl.xsqla('ins_controlemode_oms', 'ins_controlemode_key')
            + "  FROM ins_controlemode"
            + "  WHERE ins_srtcontrole_type = " + sctype
            + "  ORDER BY 2";

        FCLTselector("sel_controlemode",
                     sql,
                     { label: L("lcl_ins_controle_mode"),
                       initKey: scmode, // Als de controle mode bij multi verschillend is, dan is deze waarde -1.
                       emptyOption: L("lcl_select_controlemode"),
                       required: true
                     });

        RWTEXTAREATR("opmerk", "fldremark", L("lcl_remark"), inspect_data.srtcontrole_opmerking, {html: "rows='8'", trclass: "invoerinsp", maxlength: 2000});
%>
        <script type="text/javascript">
          //var nextinspectdatum = new Date(< %=nextinspectdatum.getTime()% >);

          // In de interval mode moet de tijd bij de respijtdatum altijd invulbaar zijn.
          // In de moment mode moet de tijd bij de plandatum alleen invulbaar zijn als de eenheid in uren(0) is.
          eenheid = <%=eenheid%>;
          var scmode = <%=scmode%>;
          if (scmode == 0 && eenheid != 0)
            $("#time_from_plandatum").hide();
        </script>
<%
      BLOCK_END();
%>
        </td>
      </tr>
      <tr>
        <td>
<%
      if (!multi)
      {
        BLOCK_START("insFlex2", L("lcl_ins_additional_details")); //block over gehele breedte
        %><div id='insFlexList'><% // Wrapper div voor dynamisch herladen

          generateFlexKenmerkBlock({deelsrtcontrole_key: (!multi && ingeslotendsc[0] > 0? ingeslotendsc[0] : null),
                                    srtcontrole_key: ingeslotensc[0],
                                    reado: false,
                                    flexcolumns: 1
                                  });
        %></div><%
        BLOCK_END();
      }

      IFACE.FORM_END();
%>
    </form>
  </body>
</html>
