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

    File:
    Description:
    Parameters:
    Note:

*/
%>

<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/selector.inc" -->
<!-- #include file="../ins/ins.inc" -->
<!-- #include file="../ins/ins_flexkenmerksrtcontrole.inc" -->
<!-- #include file="./mobile.inc" -->
<!-- #include file="./iface.inc" -->
<!-- #include file="./resultset_table.inc" -->

<%
// Get parameters
var ins_key = getQParamInt("ins_key", -1);
var today = getQParamInt("today", -1);
var alg_ruimte_key = getQParamInt("alg_ruimte_key", -1);
var srtcontrole_key = getQParamInt("srtcontrole_key", -1);
var deelsrtcont_key = getQParamInt("deelsrtcont_key", -1); // Bestaande inspectie
var defaultmode_key = getQParamInt("defaultmode", -1); // Default controlemode

if (alg_ruimte_key > 0)
{
  var sql = "SELECT COALESCE(MIN(ins_deel_key), -1) ins_deel_key"
          + "  FROM ins_v_deel_gegevens dg,"
          + "       ins_srtcontrole sc"
          + " WHERE dg.ins_srtdeel_key = sc.ins_srtinstallatie_key"
          + "    AND (sc.ins_srtcontrole_niveau = 'S'"
          + "     AND sc.ins_srtinstallatie_key = dg.ins_srtdeel_key"
          + "      OR sc.ins_srtcontrole_niveau = 'G'"
          + "     AND sc.ins_srtinstallatie_key = dg.ins_srtgroep_key"
          + "      OR sc.ins_srtcontrole_niveau = 'D'"
          + "     AND sc.ins_srtinstallatie_key = dg.ins_discipline_key)"
          + "    AND dg.alg_ruimte_key = " + alg_ruimte_key
//          + "    AND dg.ins_alg_ruimte_type = 'R'";
  var oRs = Oracle.Execute(sql);
  var ins_key = oRs("ins_deel_key").Value;
}

if (ins_key > 0)
{ // Probeer alg_ruimte_key te achterhalen.
  var sql = "SELECT ins_alg_ruimte_key"
          + "  FROM ins_deel"
          + " WHERE ins_deel_key = " + ins_key;
  var oRs = Oracle.Execute(sql);
  var alg_ruimte_key = oRs("ins_alg_ruimte_key").Value;
}

if (ins_key < 0)
{
   shared.simpel_page(L("lcl_pda_ins_noinspect"));
}

var this_ins = ins.func_enabled_deel(ins_key);
user.auth_required_or_abort(this_ins.canInspect);

var qrc = getQParamInt("qrc", 0) != 0;

if (srtcontrole_key < 0)
{ // De soort controles moet vooraf bekend zijn zodat ook de kenmerken direct getoond kunnen worden (niet clientside).
  // Als er meerdere mogelijk zijn, dan eerst een keuze laten maken.
  var sql = "SELECT COUNT (isc.ins_srtcontrole_key) aantal_srtcontoles"
          + "     , MIN(isc.ins_srtcontrole_key) min_srtcontrole_key"
          + "     , id.ins_deel_omschrijving"
          + "  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 = " + ins_key
          + (today != -1 ? " AND TRUNC(FAC.nextcyclusdatedeel (id.ins_deel_key, isc.ins_srtcontrole_key, 1)) <= TRUNC(sysdate) " : "")
          + " GROUP BY id.ins_deel_omschrijving";
  var oRs = Oracle.Execute(sql);
  if (oRs.Eof) // er is niets over
  {
    //shared.simpel_page(L("lcl_pda_ins_noinspect"));
    %>
    <html>
    <head>
<%    FCLTMHeader.Generate({}); %>
    </head>
    <body>
      <script>
        FcltMgr.closeDetail(window);
      </script>
    </body>
    <%
    Response.End;
  }

  var aantal_srtcontoles = oRs("aantal_srtcontoles").Value;
  var ins_deel_omschrijving = oRs("ins_deel_omschrijving").Value;
  if (aantal_srtcontoles == 1)
    srtcontrole_key = oRs("min_srtcontrole_key").Value;
  oRs.close();
}

if (srtcontrole_key < 0 || defaultmode_key > 0)
{ // Eerst een soort controle bepalen.
%>
  <html>
    <head>
<%    FCLTMHeader.Generate({}); %>
      <style>
        .prefixcol { height: 40px;
                     background-color: #66C2AF;
                     padding: 7px;
                   }
        .ui-listview > .ui-li-has-thumb > .ui-btn,
        .ui-listview > .ui-li-static.ui-li-has-thumb {
        	min-height: auto;
        	padding-left: 60px;
        }
      </style>
    </head>
    <body>
<%
  PAGE_START();
  HEADER({title: L("lcl_ins_controle_choose_srt") + " (" + ins_deel_omschrijving + ")", back:!qrc});
  CONTENT_START();

  function fncolLink(oRs)
  {
    return "../pda/ins_inspect.asp?ins_key=" + ins_key + "&srtcontrole_key=" + oRs("ins_srtcontrole_key").Value;
  };

  // Eerst een soort controle bepalen.
  var sql = "SELECT i.ins_srtcontrole_key"
          + "     , " + lcl.xsqla('i.ins_srtcontrole_omschrijving', 'i.ins_srtcontrole_key')
          + "  FROM ( SELECT isc.ins_srtcontrole_key"
          + "              , isc.ins_srtcontrole_eenheid"
          + "              , isc.ins_srtcontrole_omschrijving"
          + "              , 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 = " + ins_key + ") i"
          + "      LEFT JOIN"
          + "        ( SELECT ins_srtcontroledl_xcp_eenheid"
          + "              , ins_srtcontrole_key"
          + "              , ins_deel_key"
          + "           FROM ins_srtcontroledl_xcp xcp"
          + "          WHERE xcp.ins_srtcontroledl_xcp_eind IS NULL"
          + "             OR xcp.ins_srtcontroledl_xcp_eind > TRUNC(SYSDATE, 'DD'))xcp"
          + "      ON     i.ins_deel_key = xcp.ins_deel_key"
          + "         AND i.ins_srtcontrole_key = xcp.ins_srtcontrole_key"
          + " WHERE COALESCE (ins_srtcontroledl_xcp_eenheid, ins_srtcontrole_eenheid) <> 0"
          + (today != -1 ? " AND TRUNC(FAC.nextcyclusdatedeel (i.ins_deel_key, i.ins_srtcontrole_key, 1)) <= TRUNC(sysdate) " : "");

  function fnPrefix(oRs, params)
  {
    return "<img src='../Pictures/check.png' onclick='default_inspect({0});return false;' class='prefixcol'>".format(oRs.Fields("ins_srtcontrole_key").Value)
  }

  var rst = new ResultsetTable({sql: sql,
                                keyColumn: "ins_srtcontrole_key",
                                linkColumn: fncolLink,
                                prefixColumn: defaultmode_key > 0?fnPrefix:null,
                                detailColumn: "ins_srtcontrole_omschrijving",
                                ID: "srtcontroletable",
                                showAll: true,
                                noSearch: true
                                });

  var cnt = rst.processResultset();

  CONTENT_END();
  FOOTER();
  PAGE_END();
%>
    <script>
        function ins_submit_callback(json)
        {
          if (json.success)
          {
            jqToast(L("lcl_mobile_data_saved"));
            FcltMgr.reload();
          }
        }
        function default_inspect(deelsrtcont_key)
        {
            var data = { ins_keys: <%=ins_key%>,
                          srtcont_key_arr: deelsrtcont_key,
                          sel_controlemode: <%=defaultmode_key%>
                        };
            <% protectRequest.dataToken("data"); %>

            $.post("../ins/ins_inspect_save.asp",
                 data,
                 McltCallbackAndThen(ins_submit_callback),
                 "json");

        }
    </script>
    </body>
  </html>
<%
}
else
{ // Er is een soort controle key
  var sql = "SELECT id.ins_deel_omschrijving"
          + "  FROM ins_deel id"
          + " WHERE id.ins_deel_key = " + ins_key;
  var oRs = Oracle.Execute(sql);
  var subject = oRs("ins_deel_omschrijving").Value;
  oRs.Close();

  var sql = "SELECT idsc.ins_deelsrtcontrole_key"
          + "     , idsc.ins_deelsrtcontrole_status"
          + "     , idsc.ins_controlemode_key"
          + "     , idsc.ins_deelsrtcontrole_opmerking"
          + "  FROM ins_srtcontrole isc"
          + "     , ins_deelsrtcontrole idsc"
          + " WHERE isc.ins_srtcontrole_key = idsc.ins_srtcontrole_key(+)" // Er kan nog voor de eerste keer geinspecteerd moeten worden.
          + "   AND idsc.ins_deel_key(+) = " + ins_key
          + "   AND isc.ins_srtcontrole_key = " + srtcontrole_key
          + (deelsrtcont_key > 0
            ? "   AND idsc.ins_deelsrtcontrole_key = " + deelsrtcont_key
            : "")
          + " ORDER BY ins_deelsrtcontrole_datum DESC";
  var oRs = Oracle.Execute(sql);
  // Waarden moeten aanwezig zijn. Mocht dat niet zo zijn dan is er iets fout.
  var deelsrtcont_key = oRs("ins_deelsrtcontrole_key").Value != null? oRs("ins_deelsrtcontrole_key").Value : -1;
  var ins_deelsrtcontrole_status = oRs("ins_deelsrtcontrole_status").Value != null? oRs("ins_deelsrtcontrole_status").Value : -1;
  var status_str = "";
  switch (ins_deelsrtcontrole_status)
  {
    case -1: status_str = L("lcl_ins_controle_first");
             break;
    case 6:  status_str = L("lcl_ins_controle_new");
             break;
    case 0:
    case 2:
    case 5:  status_str = ins.getinsstatustext(ins_deelsrtcontrole_status);
             break;
  }
  var ins_controlemode_key = oRs("ins_controlemode_key").Value != null && ins_deelsrtcontrole_status != 6? oRs("ins_controlemode_key").Value : -1;
  var ins_deelsrtcontrole_opmerking = oRs("ins_deelsrtcontrole_opmerking").Value != null && ins_deelsrtcontrole_status != 6? oRs("ins_deelsrtcontrole_opmerking").Value : "";
  %>

  <html>
    <head>
<%    FCLTMHeader.Generate({title: subject}); %>
    </head>
    <body>
<%
      PAGE_START();
      HEADER({title: L("lcl_mobile_inspecties")+ " " + subject, back:!qrc, home: !qrc});
      CONTENT_START();
        deelsrtcontrole_datum = new Date();
%>
      <script type="text/javascript">
        var inspected_srtcontroles = new Array();
<%
        // Is er op de inspectiedatum of op het inspectieuur al geinspecteerd voor deze objecten?
        sql = "SELECT idsc.ins_deelsrtcontrole_datum"
            + "     , idsc.ins_deelsrtcontrole_key"
            + "     , 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 (" + ins_key + ")"
            + "   AND isc.ins_srtcontrole_key = " + srtcontrole_key
            + "   AND COALESCE(isc.ins_srtcontrole_periode, xcp.ins_srtcontroledl_xcp_periode) > 0";
        var oRs = Oracle.Execute(sql);
        while (!oRs.eof)
        {
%>
          inspected_srtcontroles[inspected_srtcontroles.length] = { srtcontrole_key: <%=srtcontrole_key%>,
                                                                    datum: <%=new Date(oRs("ins_deelsrtcontrole_datum").Value).getTime()%>,
                                                                    eenheid: <%=oRs("eenheid").Value%>,
                                                                    mode: <%=oRs("ins_srtcontrole_mode").Value%>
//                                                                    deelsrtcontrole_key: <%=oRs("ins_deelsrtcontrole_key").Value%>
                                                                  };
<%
          oRs.MoveNext();
        }
%>
        // Na de insert moet een tweede opslaan een update doen. Dan deelsrtcont_key meegeven.
        var deelsrtcont_key = -1;
        function ins_callback(json)
        {
          if (json.success)
          {
            jqToast(L("lcl_mobile_data_saved"));

            if (json.start || json.finish || json.savemode != "E")
              FcltMgr.reload();
          }
        }

        function ins_submit(action)
        {
          var controlemodeField = (action == "E"? ["sel_controlemode"] : null);
          if (!validateForm("u2", { checkNot: controlemodeField }))
              return false;

          if (action == "C")
          {
            // De uitvoerdatum van de inspectie is nu. Daardoor ligt deze na de laatste uitvoerdatum en niet in de toekomst.

            for (i = 0; i < inspected_srtcontroles.length; i++)
            {
              if (inspected_srtcontroles[i].srtcontrole_key == $("#srtcont_key_arr").val())
              {
                // Controle of er op de inspectiedatum (Vandaag) of op het inspectieuur (Dit uur) al inspecties zijn geweest.
                if (new Date().midnight().getTime() == 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 (new Date(new Date().setMinutes(0,0,0)).getTime() == 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 (new Date(new Date().setSeconds(0, 0)).getTime() == new Date(parseInt(inspected_srtcontroles[i].datum)).getTime() &&
                         inspected_srtcontroles[i].mode == 1)
                { // 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;
                }
              }
            }
          }

          $("#savemode").val(action); // Vul savemode met "E": Wijzigen (Edit) of "C": Afmelden/Afronden (Close).

          $.post($("form[name=u2]")[0].action + "&deelsrtcont_key=" + deelsrtcont_key,
                 $("form[name=u2]").serialize(),
                 McltCallbackAndThen(ins_callback),
                 "json");
          return false;
        }

        function ins_start()
        { // Geen verplichte velden.
          if (confirm(L("lcl_ins_starting")))
          {
            var data = $("form[name=u2]").serialize();
            protectRequest.dataToken(data);
            $.post( "../ins/ins_inspect_start.asp"
                  , data
                  , McltCallbackAndThen(ins_callback)
                  , "json"
                  );
          }
        }

        function ins_finish()
        { // Controle verplichte veld "Methode".
          if (!validateForm("u2"))
            return false;

          if (confirm(L("lcl_ins_finishing")))
          {
            var data = $("form[name=u2]").serialize();
            protectRequest.dataToken(data);
            $.post( "../ins/ins_inspect_finish.asp"
                  , data
                  , McltCallbackAndThen(ins_callback)
                  , "json"
                  );
          }
        }

        function onChangeSrtControle()
        {
          var s = "../ins/load_kenmerksrtcontrole.asp?srtcont_key=" + $("#srtcont_key_arr").val() + "&mobile=1";
          $("#insFlexList").load(s, function(data)
                              {
                                FcltMgr.resized(window);
                              });
        }
      </script>




      <form name="u2" action="../ins/ins_inspect_save.asp?ins_keys=<%=ins_key%>" method="post">
        <input type="hidden" name="ins_keys" id="ins_keys" value="<%=ins_key%>">
        <input type="hidden" name="dlsrtcont_key_arr" id="dlsrtcont_key_arr" value="<%=deelsrtcont_key%>">
        <input type="hidden" name="srtcont_key_arr" id="srtcont_key_arr" value="<%=srtcontrole_key%>">
        <input type="hidden" name="savemode" id="savemode" value="E">
<%      ROFIELD("fld", L("lcl_ins_status"), status_str);

        // Ik wil de vorige controle + opmerking tonen; optie is nog class expired2 toe te voegen als te laat
        // (misschien dat ook al bij de button als er binnen een dag een inspectie moet of zo)
        // Let op: deze datum hangt af van de srtcontrole, als dat er meer dan 1 is vind ik het nu de moeite nog niet waard.
        var sql = "SELECT idsc.ins_deelsrtcontrole_datum"
                + "     , idsc.ins_deelsrtcontrole_opmerking"
                + "     , idsc.ins_deelsrtcontrole_plandatum"
                + "  FROM ins_deelsrtcontrole idsc"
                + " WHERE idsc.ins_deel_key = " + ins_key
                + "   AND idsc.ins_deelsrtcontrole_status = 6"
                + " ORDER BY ins_deelsrtcontrole_datum DESC";
        var oRs = Oracle.Execute(sql);
        if (!oRs.eof)
        {
          ROFIELD("fld", L("lcl_ins_controle_last"), toDateTimeString(oRs("ins_deelsrtcontrole_datum").Value) + " " + (oRs("ins_deelsrtcontrole_opmerking").Value || ""));

          var sql = "SELECT idsc.ins_deelsrtcontrole_plandatum"
                  + "  FROM ins_deelsrtcontrole idsc"
                  + " WHERE idsc.ins_deel_key = " + ins_key
                  + "   AND idsc.ins_deelsrtcontrole_status != 6";
          var oRs = Oracle.Execute(sql);

          if (!oRs.eof && oRs("ins_deelsrtcontrole_plandatum").Value != null)
            ROFIELD("fld", L("lcl_opdr_plandate"), toDateTimeString(oRs("ins_deelsrtcontrole_plandatum").Value));
        }

        sql = "SELECT " + lcl.xsqla('isc.ins_srtcontrole_omschrijving', 'isc.ins_srtcontrole_key')
            + "     , ins_srtcontrole_type"
            + "  FROM ins_srtcontrole isc"
            + " WHERE ins_srtcontrole_key = " + srtcontrole_key;
        oRs = Oracle.Execute(sql);
        var srtcontrole_oms = oRs("ins_srtcontrole_omschrijving").Value;
        var srtcontrole_type = oRs("ins_srtcontrole_type").Value;
        ROFIELD("sel_srtcontrole_oms", L("lcl_ins_controle"), srtcontrole_oms, {});

        sql = "SELECT cm.ins_controlemode_key"
            + "     , " + lcl.xsqla('cm.ins_controlemode_oms', 'cm.ins_controlemode_key')
            + "  FROM ins_controlemode cm"
            + " WHERE ins_srtcontrole_type = " + srtcontrole_type;
        FCLTselector("sel_controlemode",
                     sql,
                     { initKey: ins_controlemode_key,
                       label: L("lcl_ins_controle_mode"),
                       emptyOption: L("lcl_select_controlemode"),
                       required: true,
                       mobile: true
                     }
                    );

        RWFIELD("opmerk", L("lcl_remark"), ins_deelsrtcontrole_opmerking, {multi: true});

        %><div id="insFlexList"><% // Wrapper div voor dynamisch herladen
          generateFlexKenmerkBlock({fnpre    : function () {},
                                    fnpost   : "",
                                    deelsrtcontrole_key: deelsrtcont_key,
                                    srtcontrole_key: srtcontrole_key,
                                    reado: false,
                                    flexcolumns: 1,
                                    mobile: true
                                  });
        %></div><%

        CONTROLGROUP_START();
        switch (ins_deelsrtcontrole_status)
        {
          case -1:
          case 6:  // Geen inplannen van inspecties bij mobiel.
          case 0:  BUTTON(L("lcl_ins_start"), {click: "ins_start()", dataicon: "check"});
                   BUTTON(L("lcl_ins_close"), {click: "ins_submit('C')", dataicon: "check"});
                   break;
          case 2:  BUTTON(L("lcl_submit"), {click: "ins_submit('E')", dataicon: "check"});
                   BUTTON(L("lcl_ins_close"), {click: "ins_submit('C')", dataicon: "check"});
                   //BUTTON(L("lcl_ins_finish"), {click: "ins_finish()", dataicon: "check"});
                   break;
          case 5:  BUTTON(L("lcl_submit"), {click: "ins_submit('E')", dataicon: "check"});
                   BUTTON(L("lcl_ins_finish"), {click: "ins_finish()", dataicon: "check"});
                   break;
        }
        BUTTON(L("lcl_mld_addmld"), {linkid: "./melding.asp?mld_key=-1" + (ins_key > -1? "&ins_key=" + ins_key : "") + (alg_ruimte_key > -1? "&ruimte_key=" + alg_ruimte_key : "") , dataicon: "alert"});
        CONTROLGROUP_END();
        IFACE.FORM_END();
  %></form><%
      CONTENT_END();
      FOOTER();
      PAGE_END();
%>
    </body>
  </html>
<%
}
%>