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

    File:           ins_show_inspect.asp
    Description:    Details van een inpectie.
    Parameters:     deelsrtcont_key (geen verschil).

    Context:        Inline actie ins_list.inc of actie ins_inspect_list
    Note:

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

<%
FCLTHeader.Requires({ plugins: ["jQuery", "suggest", "kenmerk"] });

var deelsrtcont_key = getQParamInt("deelsrtcont_key", -1); // Bestaande inspectie indien meegegeven.
if (deelsrtcont_key == -1)
{
    var ins_key = getQParamInt("ins_key");
    var srtcont_key = getQParamInt("srtcont_key");
}

if (deelsrtcont_key != -1)
{
    // existing task
    var sql = "SELECT ins_deelsrtcontrole_datum"
            + "     , ins_controlemode_key"
            + "     , ins_deelsrtcontrole_opmerking"
            + "     , ins_deelsrtcontrole_plandatum"
            + "     , ins_deelsrtcontrole_status"
            + "     , ins_deel_key"
            + "     , ins_srtcontrole_key"
            + "  FROM ins_deelsrtcontrole"
            + " WHERE ins_deelsrtcontrole_key = " + deelsrtcont_key;
    var oRs = Oracle.Execute(sql);
    var deelsrtcontrole_datum = oRs("ins_deelsrtcontrole_datum").Value != null? new Date(oRs("ins_deelsrtcontrole_datum").Value): null;
    var controlemode_key = oRs("ins_controlemode_key").Value;
    var deelsrtcontrole_opmerking = oRs("ins_deelsrtcontrole_opmerking").Value;
    var deelsrtcontrole_plandatum = oRs("ins_deelsrtcontrole_plandatum").Value != null? new Date(oRs("ins_deelsrtcontrole_plandatum").Value) : null;
    var deelsrtcontrole_status = oRs("ins_deelsrtcontrole_status").Value;
    var deelsrtcontrole_status_str = ins.getinspectstatustext(oRs("ins_deelsrtcontrole_status").Value);
    // We know this better than the eventual parameters:
    ins_key = oRs("ins_deel_key").Value;
    srtcont_key = oRs("ins_srtcontrole_key").Value;
    oRs.close();
}

var this_ins = ins.func_enabled_deel(ins_key,
                                     {srtcont_key: srtcont_key,
                                      deelsrtcont_key: deelsrtcont_key
                                     });
user.auth_required_or_abort(this_ins.canInspShow);

%>
<html>
  <head>
<%  FCLTHeader.Generate(); %>
<%
    var eenheid = -1;
    var scmode = 1; // 0 = Momentmode, 1 = Intervalmode.
    var sctype = -1;
    var vervaldatum = null;
    var vervallen = false;
    var info = "";

    sql = "SELECT *"
        + "  FROM (SELECT DISTINCT xcp.ins_srtcontrole_eenheid eenheid"
        + "             , xcp.ins_srtcontrole_info info"
        + "             , xcp.ins_srtcontrole_mode scmode"
        + "             , xcp.ctr_controle_type sctype"
        + "             , xcp.ins_srtcontroledl_xcp_eind vervaldatum"
        + "             , xcp.ctr_discipline_key"
        + "          FROM ins_v_defined_inspect_xcp xcp"
        + "             , ins_deelsrtcontrole idsc"
        + "         WHERE xcp.ins_srtcontrole_key = idsc.ins_srtcontrole_key" // Er kan nog voor de eerste keer geinspecteerd moeten worden.
        + "           AND idsc.ins_deel_key = xcp.ins_deel_key"
        //+ "           AND xcp.ins_srtcontrole_periode > 0"                  // Bestaande inspectie altijd tonen ook al is de periode ondertussen op 0 gezet.
        + "           AND xcp.ins_deel_key IN (" + ins_key + ")"
        + "           AND idsc.ins_deelsrtcontrole_key = " + deelsrtcont_key
        + "       )";
    var oRs = Oracle.Execute(sql);

    var ctrdisc_key = oRs("ctr_discipline_key").Value;
    lcl.set_dialect(ctrdisc_key, "CTR_DISCIPLINE_KEY");

    eenheid = oRs("eenheid").Value;
    info = oRs("info").Value;
    scmode = oRs("scmode").Value;
    sctype = oRs("sctype").Value;
    vervaldatum = oRs("vervaldatum").Value != null? new Date(oRs("vervaldatum").Value) : null;
    vervallen = vervaldatum != null && vervaldatum < new Date();
    oRs.Close();

    sql = "SELECT d.ins_deel_omschrijving"      // identificatie
        + "     , s.ins_srtdeel_code"
        + "     , " + lcl.xsqla("s.ins_srtdeel_omschrijving", "s.ins_srtdeel_key")
        + "     , " + lcl.xsqla("g.ins_srtgroep_omschrijving", "g.ins_srtgroep_key")
        + "  FROM ins_deel d"
        + "     , ins_srtdeel s"
        + "     , ins_srtgroep g"
         + " WHERE ins_deel_key = " + ins_key
        + "   AND d.ins_srtdeel_key = s.ins_srtdeel_key"
        + "   AND s.ins_srtgroep_key = g.ins_srtgroep_key";
    oRs = Oracle.Execute(sql);
    var desc    = oRs("ins_deel_omschrijving").Value;
    var srtcode = oRs("ins_srtdeel_code").Value;
    var sort    = oRs("ins_srtdeel_omschrijving").Value;
    var group   = oRs("ins_srtgroep_omschrijving").Value;
    oRs.Close();

    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;
    }

%>
    <script type="text/javascript">
      function ins_start()
      {
        FcltMgr.confirm(L("lcl_ins_starting"), function() {
            var data = {
                ins_keys: <%=ins_key%>,
                srtcont_key_arr: <%=srtcont_key%>
            };

            protectRequest.dataToken(data);
            $.post("ins_inspect_start.asp", data, FcltCallbackRefresh, "json");
        });
      }

      function ins_edit(actie)
      {
        if (FcltMgr.startEdit(window))
          window.location.href = "ins_edit_inspect.asp?ins_keys=<%=ins_key%>&srtcont_keys=<%=srtcont_key%>&deelsrtcont_keys=<%=deelsrtcont_key%>"
                               + (actie == "P"? "&plan=1" : "")
                               + (actie == "C"? "&close=1" : "")
                               + (actie == "F"? "&finish=1" : "");
      }

      function ins_finish()
      {
        // We gaan naar de edit mode. Dan hoeft er geen confirm (FcltMgr.confirm) te komen.
        ins_edit("F");
      }

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


      function ins_melding()
      { // Meldbron "Inspection" meegeven (mld_meldbron_key = 10). De urole wordt bij mld_melding.asp bepaald.
        FcltMgr.openDetail("appl/mld/mld_melding.asp?meldbronkey=10&ins_key=<%=ins_key%>&deelsrtcont_key=<%=deelsrtcont_key%>", L("lcl_add"));
      }

       //var title = params.srtcontrole_type == 1? L("lcl_ins_srtcontrole_insp") : (params.srtcontrole_type == 2? L("lcl_ins_srtcontrole_repl") : L("lcl_ins_srtcontrole_cert"));

      FcltMgr.setTitle("<%=safe.jsstring(titletext) + " " + safe.jsstring(desc)%>", {hot: false});

    </script>
  </head>

  <body class="showmode">
    <% SUBFRAME_START(); %>
<%  // Melding aanmaakbaar? Alleen meldingen die enigzins beperkt zijn tot onze object(soort/groep)
    var canMelding = false;

    var sql = "SELECT COUNT(*) aantal"
            + "  FROM mld_stdmelding msm"
            + "     , mld_v_mld_stdmelding_srtinst mss"
            + "     , ins_tab_discipline itd"
            + "     , ins_srtdiscipline isd"
            + " WHERE msm.mld_stdmelding_key = mss.mld_stdmelding_key"
            + "   AND msm.mld_ins_discipline_key = itd.ins_discipline_key"
            + "   AND msm.mld_stdmelding_verwijder IS NULL"
            + "   AND (  (msm.mld_stdmelding_vervaldatum IS NULL)"
            + "       OR (msm.mld_stdmelding_vervaldatum > SYSDATE)"
            + "       )"
            + "   AND EXISTS"
                    + " (SELECT fw.ins_discipline_key"
                    + "    FROM fac_v_webgebruiker fw"
                    + "       , fac_functie ff"
                    + "   WHERE msm.mld_ins_discipline_key = fw.ins_discipline_key"
                    + "     AND fw.prs_perslid_key = " + user_key
                    + "     AND fw.fac_functie_key = ff.fac_functie_key"
                    + "     AND ff.fac_functie_code IN ('WEB_MLDUSE', 'WEB_MLDFOF')"// Backo mag geen meldingen aanmaken
                    + "     AND fw.fac_gebruiker_alg_level_write < 9"// In theorie zouden we ook nog kunnen ALG-scopen...
                    + " )"
            + "   AND itd.ins_srtdiscipline_key = isd.ins_srtdiscipline_key"
            + "   AND isd.ins_srtdiscipline_ins = 1"
            + "   AND mss.ins_deel_key = " + ins_key;
    var oRs = Oracle.Execute(sql);
    canMelding = (oRs("aantal").Value > 0);
    oRs.Close();

    // Gedaande inspecties kunnen alleen geedit worden.
    // Ik zie alleen objecten waar ik read rechten (3d) op heb. Dan mag ik ze ook verder inzien.
    // Bestaande inspectie die al afgerond is kan niet nog een keer worden afgerond.
    var canEdit = this_ins.canInspEdit;
    var canPlan = this_ins.canInspPlan && deelsrtcontrole_status != 6;
    var canStart = this_ins.canInspStart && deelsrtcontrole_status != 6;
    var canClose = this_ins.canInspClose && deelsrtcontrole_status != 6;
    var canFinish = this_ins.canInspFinish && deelsrtcontrole_status != 6;
    var canFastFinish = !canClose && this_ins.canInspFastFinish; // canInspFastFinish kan al alleen vanuit status 5.

    var buttons = [];
    if (canEdit)
      buttons.push({title: L("lcl_change"), action: "ins_edit()", icon: "fa-fclt-edit" });
    if (canStart)
      buttons.push({title: L("lcl_ins_start"), action: "ins_start()", icon: "fa-play" });
    if (canPlan)
      buttons.push({title: L("lcl_ins_schedule"), action: "ins_edit('P')", icon: "fa-calendar-alt" });
    if (canClose || (canFinish && !canFastFinish))
      buttons.push({title: (canClose? L("lcl_ins_stop") : L("lcl_ins_finish")), action: "ins_edit('C')", icon: "fa-flag-checkered" }); // Gereedmelden (canClose) kan uit (niet aangezet() zijn.
    if (canFastFinish)
      buttons.push({title: L("lcl_ins_finish"), action: "ins_finish()", icon: "fa-flag-checkered" });
    if (canMelding)
      buttons.push({title: L("lcl_do_amelding"), tooltip: L("lcl_do_amelding_hint"), action: "ins_melding()", icon: "fa-wand-magic-sparkles" });

    //buttons.push({title: L("lcl_cancel"),       icon: "fa-fclt-cancel",   action: "ins_cancel()"});

    IFRAMER_HEADER(titletext + " " + desc, buttons);
%>
    <form name="u2" onSubmit="return false;">
<%    BLOCK_START("insShow", L("lcl_ins_controle_srt"), {icon: "fa-calendar-check"});

        ROFIELDTR("fld", L("lcl_obj_group"), group);
        ROFIELDTR("fld", L("lcl_obj_sort"), sort);

        var sql = "SELECT " + lcl.xsqla("d.ins_discipline_omschrijving", "d.ins_discipline_key")
                + "  FROM ctr_v_aanwezigdiscipline d"
                + " WHERE d.ins_discipline_key = " + ctrdisc_key;
        var oRs = Oracle.Execute(sql);
        var ctrdisc_omschr = oRs("ins_discipline_omschrijving").Value;
        oRs.Close();
        ROFIELDTR("fld", L("ctr_discipline"), ctrdisc_omschr);

        var sql = " SELECT isc.ins_srtcontrole_key"
                + "      , " + lcl.xsqla('isc.ins_srtcontrole_omschrijving', 'isc.ins_srtcontrole_key')
                + "   FROM ins_srtcontrole isc"
                + "  WHERE isc.ins_srtcontrole_key = " + srtcont_key;
        var oRs = Oracle.Execute(sql);
        var ins_srtcontrole_oms = oRs("ins_srtcontrole_omschrijving").Value;
        oRs.Close();

        ROTEXTAREATR("fldtxt", L("lcl_ins_controle"), ins_srtcontrole_oms, {suppressEmpty: true });

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


        ROFIELDTR("fld", L("lcl_ins_status"), deelsrtcontrole_status_str, {suppressEmpty : true});

        if (deelsrtcontrole_status == 0 || deelsrtcontrole_status == 2 || deelsrtcontrole_status == 3)
          if (deelsrtcontrole_plandatum)
            ROFIELDTR("plandatum", L("lcl_opdr_plandate"), toDateTimeString(deelsrtcontrole_plandatum));

        if (deelsrtcontrole_status >= 5)
        {
          if (deelsrtcontrole_plandatum)
            ROFIELDTR("plandatum", L("lcl_ins_controle_plandate"), toDateTimeString(deelsrtcontrole_plandatum));
          if (deelsrtcontrole_datum)
            ROFIELDTR("plandatum", L("lcl_ins_controle_datum"), toDateTimeString(deelsrtcontrole_datum));

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

          // Methode is voor de status Afgemeld(5) en Historie/Verwerkt(6) altijd ingevuld.
          FCLTselector("sel_controlemode",
                       sql,
                       { label: L("lcl_ins_controle_mode"),
                         initKey: controlemode_key, // Als de controle mode bij multi verschillend is, dan is deze waarde -1.
                         //emptyOption: L("lcl_select_controlemode"),
                         readonly: true
                       });
        }

        ROTEXTAREATR("fldtxt",
                     L("lcl_remark"),
                     deelsrtcontrole_opmerking,
                     { html: "rows='8'",
                       trclass: "invoerinsp",
                       maxlength: 2000,
                       suppressEmpty: true
                     });
%>
        <script type="text/javascript">
          // 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.
          var eenheid = <%=eenheid%>;
          var scmode = <%=scmode%>;
          if (scmode == 0 && eenheid != 0)
            $("#time_from_plandatum").hide();
        </script>
<%
      BLOCK_END();

      generateFlexKenmerkBlock({deelsrtcontrole_key: deelsrtcont_key,
                                srtcontrole_key: srtcont_key,
                                nodefaults: true,
                                reado: true
                              });

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