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

    File:           ins_inspect_list.asp
    Description:    Toont alle inspecties van een object
    Parameters:     ins_key
    Context:        embedded in ins_deel frame
    Noot:           We tonen een outer join van inspecties: ook degene die nog nooit
                    zijn uitgevoerd worden getoond.

*/ %>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/iface.inc" -->
<!-- #include file="../Shared/resultset_table_v2.inc" -->
<!-- #include file="../ins/ins.inc" -->
<!-- #include file="../ins/ins_inspect_list.inc" -->
<%
FCLTHeader.Requires({ js: ["jquery-ui.js"]});

var ins_key = getQParamInt("ins_key", -1);
var mld_key = getQParamInt("mld_key", -1);
var outputmode = getQParamInt("outputmode", 0);
var showall = getQParamInt("showall", 0) == 1;
var print = (outputmode == 1 || outputmode == 5);
var excel = (outputmode == 2 || outputmode == 6);

// Vooralsnog gebruiken we de relatieve INSUSE als rechtenbeperking voor insepecties
// Merk op dat de scope nog wordt genegeerd.
var authparams = user.checkAutorisation("WEB_INSUSE");
var canImport = (user.checkAutorisation("WEB_IMPORT", true) != null);

%>

<html>
  <head>
<%  FCLTHeader.Generate({outputmode: outputmode}); %>
    <script>
      function insShow(row)
      {
        $(row).addClass('dirty');
        var ins_key = row.getAttribute("ROWKEY");
        var rowdata = JSON.parse(row.getAttribute("ROWDATA"));
        if (rowdata)
        {
          var srtcontrolekey = rowdata.insSrtControleKey;
          var srtcontroletype = rowdata.insSrtControleType;
          // Meegeven welke afgeronde inspectie getoond moet worden.
          var deellsrtcontkey = rowdata.insDeelSrtContrKey;
          var url = "appl/ins/ins_inspect.asp?ins_keys=" + ins_key + "&srtcont_keys=" + srtcontrolekey + "&deelsrtcont_key=" + deellsrtcontkey;
          var title = "";
          switch (srtcontroletype)
          {
            case 1: title = L("lcl_ins_srtcontrole_insp"); break;
            case 2: title = L("lcl_ins_srtcontrole_repl"); break;
            case 3: title = L("lcl_ins_srtcontrole_cert"); break;
          }
          FcltMgr.openDetail(url, title + " " + deellsrtcontkey);
        }
      }

      function insPlan(row)
      {
        $(row).addClass('dirty');
        var inskey = row.getAttribute("ROWKEY");
        var rowdata = JSON.parse(row.getAttribute("ROWDATA"));
        if (rowdata)
        {
          var srtcontrolekey = rowdata.insSrtControleKey;
          // Als je wilt inplannen is er nog geen inspectie record (ins_deelsrtcontrole_key). De insDeelSrtContrKey is dan -2.
          var deellsrtcontkey = rowdata.insDeelSrtContrKey;
          var url = "appl/ins/ins_edit_inspect.asp?plan=1&ins_keys=" + inskey + "&srtcont_keys=" + srtcontrolekey + "&deelsrtcont_keys=" + deellsrtcontkey;
          FcltMgr.openDetail(url, L("lcl_ins_schedule"));
        }
      }

      function insStart(row)
      {
        FcltMgr.confirm(L("lcl_ins_starting"), function() {
            var inskey = row.getAttribute("ROWKEY");
            var rowdata = JSON.parse(row.getAttribute("ROWDATA"));
            if (rowdata) {
                var srtcontrolekey = rowdata.insSrtControleKey;
                var ismjob = rowdata.insCtrIsMJOB

                var data = {
                    ins_keys: inskey,
                    srtcont_key_arr: srtcontrolekey
                };
                if (ismjob)
                  data.freeze = 1;

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

      function insUnfreeze(row)
      {

        FcltMgr.confirm(L("lcl_ins_unexecuting"), function() {
            var inskey = row.getAttribute("ROWKEY");
            var rowdata = JSON.parse(row.getAttribute("ROWDATA"));
            if (rowdata)
            {
              var srtcontrolekey = rowdata.insSrtControleKey;
              var deelSrtContrKey = rowdata.insDeelSrtContrKey;
              var ismjob = rowdata.insCtrIsMJOB

              var data = { ins_keys: inskey,
                           srtcont_key_arr: srtcontrolekey,
                           deelsrtcont_key_arr: deelSrtContrKey
                         };

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

      function insUnexecute(row)
      {

        FcltMgr.confirm(L("lcl_ins_unexecuting"), function() {
            var inskey = row.getAttribute("ROWKEY");
            var rowdata = JSON.parse(row.getAttribute("ROWDATA"));
            if (rowdata)
            {
              var srtcontrolekey = rowdata.insSrtControleKey;
              var deelSrtContrKey = rowdata.insDeelSrtContrKey;

              var data = { mld_key: <%=mld_key%>,
                           ins_key: inskey,
                           srtcont_key: srtcontrolekey,
                           deelsrtcont_key: deelSrtContrKey
                         };

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

      function insClose(row, fromfinish)
      {
        $(row).addClass('dirty');
        var inskey = row.getAttribute("ROWKEY");
        var rowdata = JSON.parse(row.getAttribute("ROWDATA"));
        if (rowdata)
        {
          var srtcontrolekey = rowdata.insSrtControleKey;
          var deellsrtcontkey = rowdata.insDeelSrtContrKey;
          var url = "appl/ins/ins_edit_inspect.asp?close=1&ins_keys=" + inskey
                  + "&srtcont_keys="
                  + srtcontrolekey
                  + "&deelsrtcont_keys="
                  + deellsrtcontkey
                  + (fromfinish
                    ? "&fromfinish=1"
                    : "");
          FcltMgr.openDetail(url, L("lcl_ins_close"));
        }
      }

      function insFinish(row)
      {
        // We gaan naar de edit mode. Dan hoeft er geen confirm (FcltMgr.confirm) te komen.
        var inskey = row.getAttribute("ROWKEY");
        var rowdata = JSON.parse(row.getAttribute("ROWDATA"));
        if (rowdata)
        {
          deellsrtcontkey = rowdata.insDeelSrtContrKey;
          isc_options = rowdata.insSrtControleOpt;
          isc_status = rowdata.ins_status;
          if (isc_status != 5)  // Als ((isc_options & 4) != 4) geldt dan geldt zeker (isc_status != 5).
          { // Er is nog niet Gereed gemeld(5) of er kan niet Gereed gemeld(5) worden.
            // Dan moet ik de gegevens invullen via insClose.
            insClose(row, true); // fromfinish is true;
          }
          else
          { // Eerst de taak gegevens aanpassen, dan voltooien.
            var srtcontrolekey = rowdata.insSrtControleKey;
            var srtcontroletype = rowdata.insSrtControleType;
            var deellsrtcontkey = rowdata.insDeelSrtContrKey;
            var url = "appl/ins/ins_inspect.asp?ins_keys=" + inskey
                    + "&srtcont_keys=" + srtcontrolekey
                    + "&deelsrtcont_key=" + deellsrtcontkey
                    + "&finish=1";
            var title = "";
            switch (srtcontroletype)
            {
              case 1: title = L("lcl_ins_srtcontrole_insp"); break;
              case 2: title = L("lcl_ins_srtcontrole_repl"); break;
              case 3: title = L("lcl_ins_srtcontrole_cert"); break;
            }
            FcltMgr.openDetail(url, title + " " + deellsrtcontkey);
          }
        }
      }
    </script>
  </head>

  <body id="listbody">
<%
    var insFlexParams;
    if (!excel && !print)
    {
      insFlexParams = ins.ins_deel_flex_params(1, {inspect: true, ins_key: ins_key, ins_deelsrtcontrole: "idsc"}); // 1=Taken overzicht bij object.
    }

    // Twee queries achter elkaar.
    // Eerst de inspecties die gaan komen.
    // Dan de inspecties die gedaan zijn.

    // Als de controlesoort niet meer geldig is dan kunnen er geen inspecties meer komen.
    // Een object kan meerdere controlesoorten hebben. Alleen die controlesoorten laten zien die nog geldig zijn.
    var sql = insp.list_sql(ins_key, mld_key, {past: true, present: true, future: mld_key < 0, insFlexParams: insFlexParams});

    function fnrowData(oRs)
    {
      var insKey = oRs("ins_deel_key").Value;
      var insSrtControleKey = oRs("ins_srtcontrole_key").Value;
      var insSrtControleType = oRs("ctr_controle_type").Value;
      var insSrtControleOpt = oRs("options").Value;
      var insCtrIsMJOB = oRs("ctr_ismjob").Value;

      // Als de status Verwerkt(6) is dan kan/moet er weer een nieuw inspectie gestart worden. Dan geen ins_deelsrtcontrole_key meegegeven (-2).
      var istatus = oRs("ins_deelsrtcontrole_status").Value;
      var insDeelSrtContrKey = oRs("ins_deelsrtcontrole_key").Value != null? oRs("ins_deelsrtcontrole_key").Value : -2;

      var data = { insKey: insKey, insSrtControleKey: insSrtControleKey, insSrtControleType: insSrtControleType,
                   insSrtControleOpt: insSrtControleOpt, insCtrIsMJOB: insCtrIsMJOB, insDeelSrtContrKey: insDeelSrtContrKey, ins_status: istatus};
      return JSON.stringify(data);
    }

    var this_ins;
    if (ins_key > 0)
      this_ins = ins.func_enabled_deel(ins_key); // De ins_key is voor alle regels in de lijst hetzelfde.
    function fnrowActionEnabler(oRs)
    {
      // Als object is vervallen dan kun je niet meer inspecteren en uitstellen.
      var insKey = oRs("ins_deel_key").Value;
      var vervallen = (oRs("inspectie_eind").Value != null && new Date(oRs("inspectie_eind").Value).getTime() < new Date().midnight());
      var istatus = oRs("ins_deelsrtcontrole_status").Value != null? oRs("ins_deelsrtcontrole_status").Value : -1;

      // In het taken tabje bij een object (ins_key > 0) alleen acties op de periodieke taken. Op MJOB taken mogen hier geen acties worden uitgevoerd.
      // In het taken tabje bij een melding (mld_key > 0) alleen de unexecute actie op (MJOB) taken.
      var eEdit = false;
      var ePlan = false;
      var eStart = false;
      var eStartD = false;
      //var eUnstart = false; // Terugzetten kan alleen bij MJOB taken. In de taken lijst bij object of melding mag geen (MJOB) taak worden terug gezet.
      var eClose = false;
      var eFinish = false;
      var eUnexecute = false; // De actie uitvoeren ongedaan maken kan alleen bij MJOB taken. De actie mag en kan alleen in het taken tabje bij melding (mld_key > 0).
      var mjb_freeze_year = Math.max(S("mjb_freeze_year"), new Date().getFullYear());

      if (ins_key < 0)
        this_ins = ins.func_enabled_deel(insKey); // Bij een melding hoeft de ins_key voor alle regels in de lijst niet hetzelfde te zijn.
      // De inspecties van vervallen taken moeten nog ingezien kunnen worden. De actie eShow dus niet afhankelijk van vervallen maken.
      var eShow = istatus >= 0 && this_ins.readuse; // this_ins.canInspShow niet gebruikt zodat ins.func_enabled_deel niet hoeft te worden aangeroepen voor status = 6.
      // Elke afgeronde inspectie (status Afgerond(6)) is in dit geval een regel. Die afgeronde inspecties mogen niet ingepland worden.
      if (istatus != 6)
      {
        var insSrtControleKey = oRs("ins_srtcontrole_key").Value;
        var insDeelSrtContrKey = oRs("ins_deelsrtcontrole_key").Value;
        var lthis_ins = ins.func_enabled_deel(insKey,
                                             {srtcont_key: insSrtControleKey,
                                              deelsrtcont_key: insDeelSrtContrKey
                                             }); // De ins_key is voor alle regels in de lijst hetzelfde indien er geen mld_key is meegegeven.

        // Gedaande inspecties kunnen alleen geedit worden.
        // Ik zie alleen objecten waar ik read rechten (3d) op heb. Dan mag ik ze ook verder inzien.
        eEdit = lthis_ins.canInspEdit;
        ePlan = lthis_ins.canInspPlan;
        eStart = lthis_ins.canInspStart;                   // Start een nieuwe inspectie m.b.v. een inline button actie.
        eStartD = lthis_ins.canInspStart && (istatus < 0); // Start een nieuwe inspectie m.b.v. een default inline actie (op regel klikken).
        eUnexecute = mld_key > 0 && lthis_ins.canInspUnexecute; //
        eClose = lthis_ins.canInspClose;
        // Als er nog niet gereed gemeld/afgemeld is dan wordt die butten wel getoond.
        eFinish = !lthis_ins.canInspClose && lthis_ins.canInspFinish;
      }

      var data = {eEdit: eEdit, eShow: eShow, ePlan: ePlan, eStart: eStart, eStartD: eStartD, eUnexecute: eUnexecute, eClose: eClose, eFinish: eFinish};
      return data;
    }

    function fnrowClass(oRs)
    {
      var lclass = "";
      var istatus = oRs("ins_deelsrtcontrole_status").Value != null? oRs("ins_deelsrtcontrole_status").Value : -1;
      var eenheid = oRs("eenheid").Value;
      var mode = oRs("isc_mode").Value;

      if (istatus == 2 || istatus == 3)
        lclass = "pending";
      if (istatus == 5)
        lclass = "unsolved";

      if (oRs("seq").Value == 2 && istatus > 0) // klaar
          return lclass;

      var dt = new Date(oRs("inspectie_next").Value);
      dt.setHours(0,0,0,0);     // trunc datum
      var dtsoon = new Date();
      dtsoon.setDate(dtsoon.getDate() + S("ins_inspect_soon_days"));
       dtsoon.setHours(0,0,0,0);     // trunc datum
      var dtlate = new Date(new Date().setHours(0,0,0,0));

      // Als de aanmaakdatum en/of de startdatum na dtsoon (dus ook na today) ligt dan kan dt (inspectie_next) genomen worden.
      // Die heeft dan de juiste waarde.

      var dt1 = new Date(dt);
      var dt2 = new Date(dt);
      if (eenheid == 4 && mode == 0)
      { // Jaarlijks in een bepaalde maand (moment mode). Inspecteren kan dan van de eerste dag van de maand tot de eerste dag van de volgende maand.
        dt1 = new Date(dt1.setDate(1));                   // Eerste van de maand.
        dt2 = new Date(new Date(dt2.setDate(1)).setMonth(dt2.getMonth() + 1)); // Eerste van de volgende maand.
      }

      if (dt1 >= dtsoon)
        return lclass; // meer dan 30 dagen in de toekomst

      if (dt2 >= dtlate)
        return lclass + " expired1"; // Binnenkort.

      return lclass + " expired2"; // Te laat.
    }

    function fnControleDatum(oRs)
    {
      var controledatum = oRs("ins_deelsrtcontrole_datum").value;
      if (oRs("eenheid").Value == 0)
        return toDateTimeString(controledatum); // Datum + tijd tonen.
      else
        return toDateString(controledatum); // Alleen datum tonen.
    }

    function fnCMSuccess(oRs)
    {
      var res = "";
      if (oRs("ins_deelsrtcontrole_status").Value == 5 || oRs("ins_deelsrtcontrole_status").Value == 6) {
          if (oRs("ins_controlemode_success").Value == 0)
            res = I("fa-exclamation-triangle");
          else
            res = I("fa-check");
      }
      return res;
    }

    // Word gebruikt in fnKosten voor de inflatie-berekening
    var thisCostYear;
    function fnVolgende(oRs)
    {
      var ismjob = oRs("ctr_ismjob").Value == 1;
      if (oRs("seq").Value == 2)  // Uitgevoerde inspecties op dit object of (indien present) lopende inspecties (ingepland(0), gestart(2), ter uitvoering(3) of gereedgemeld(5)).
      {
        var dt = typeof oRs("inspectie_org").Value == "date"? new Date(oRs("inspectie_org").Value) : null;
        if (ismjob)
          dtstring = dt.getFullYear(); // Voor MJOB is alleen het jaar van belang.
        else
          var dtstring = (typeof dt == "date" && oRs("eenheid").value == 0? toDateTimeString(dt) : toDateString(dt));
        dtstring += (oRs("isrespijt").Value == 1? " " + L("lcl_ins_respijt") : "");

        thisCostYear = dt == null ? NULL_DATE_ERROR : dt.getFullYear();
        return dtstring;
      }

      var dt = new Date(oRs("inspectie_next").Value);
      thisCostYear = dt.getFullYear();
      var plandatum = oRs("plandatum").Value != null? " " + L("lcl_ins_respijt") : "";
      if (ismjob)
        dt = dt.getFullYear(); // Voor MJOB is alleen het jaar van belang.
      else
      {
        dt = (oRs("eenheid").value == 0? toDateTimeString(dt) : toDateString(dt));   // Nog even afstemmen: altijd doen of alleen voor korte periode?
        if (oRs("isc_mode").Value == 0 && oRs("inspectie_steps").Value && oRs("inspectie_steps").Value > 1)
          dt += " (" + (parseInt(oRs("inspectie_steps").Value) - 1) + ")";
      }
      return dt + plandatum;
    }

    function fnKosten(oRs)
    {
      var frozen = oRs("frozen").Value == 1;
      var kosten = oRs("kosten").Value || 0;
      var inflatiepct     = S("mjb_inflation");
      var inflatiefactor  = 1 + (inflatiepct / 100);

      // Inflatie
      if (!frozen && kosten > 0 && inflatiefactor != 1)
      {
          var huidigJaar  = new Date().getFullYear();
          var geplandJaar = thisCostYear;
          if (geplandJaar > huidigJaar)
              kosten = kosten * Math.pow(inflatiefactor, geplandJaar - huidigJaar);
      }

      return kosten > 0 ? safe.curr(kosten) : null;
    }

    function fncolFlexBijlagen(oRs)
    {
      var flexval = oRs("insflex").Value;
      var ins_deelsrtcontrole_key = oRs("ins_deelsrtcontrole_key").Value;
      var result = ( flexval
                     ? safe.html(flexval.replace(/\r/g, "\n")+ "\n")
                     : ""
                   );
      // Als er nog geen inspectierecord is (ins_deelsrtcontrole_key IS NULL), dan zijn er ook nog geen bijlage kenmerken.
      if (insFlexParams.bijlageflex && ins_deelsrtcontrole_key)
      {
        result += ins.ins_deel_flex_bijlagen(ins_deelsrtcontrole_key, 1, true); // 1=Objectebeheer overzicht.
      }
      return result;
    }

    var buttons = [];
    if (ins_key > 0 && this_ins.canChange)
    {
      var addurl_add = "../ins/ins_xcp.asp?ins_key=" + ins_key + "&urole=bo&add=1";
      var addurl_editxcp = "../ins/ins_xcp.asp?ins_key=" + ins_key + "&urole=bo";
      // Zijn er inactieve soort controles (periode = 0) die ook gelden voor het object. Dan de "Toevoegen" knop tonen.
      var bsql = "SELECT COUNT(*) aantal"
               + "  FROM (SELECT xcp.ins_srtcontrole_key"
               + "          FROM ins_v_defined_inspect_xcp xcp"
               + "         WHERE xcp.ins_deel_key = " + ins_key
               + "           AND xcp.ins_srtcontrole_periode <= 0" // Inactieve soort controles tonen.
               + "           AND xcp.ins_srtcontroledl_xcp_periode IS NULL"                                     // Soort controles die niet overruled zijn tonen.
               + "           AND xcp.ins_scenario_key = 1"
               + "           AND xcp.ctr_discipline_key IN (SELECT w.ins_discipline_key"                         // Alleen van de disciplines waar ik schrijf rechten op heb meetellen.
               + "                                           FROM fac_v_webgebruiker w"
               + "                                              , fac_functie f"
               + "                                          WHERE w.fac_functie_key = f.fac_functie_key "
               + "                                            AND f.fac_functie_code = 'WEB_CTRUSE'"
               + "                                            AND w.fac_gebruiker_prs_level_write < 9"
               + "                                            AND w.fac_gebruiker_alg_level_write < 9"
               + "                                            AND w.prs_perslid_key = " + user_key + ")"
               + "         GROUP BY xcp.ins_srtcontrole_key"
               + "                , xcp.ins_deel_key)";
      var boRs = Oracle.Execute(bsql);
      var add = boRs("aantal").Value > 0;
      boRs.close();

      buttons.push({ icon: "fa-fclt-refresh", title: L("lcl_refresh"), action: "FcltMgr.reload()" });
      if (this_ins.canChangeXcp || this_ins.hasAnyWriteXcp)
      { // Het xcp scherm werkt erg slecht in readonly mode. Vooralsnog gewoon onderdrukken.
        if (add)
            buttons.push({ icon: "fa-plus", title: L("lcl_add"), action: "FcltMgr.openModalDetail('" + addurl_add + "', '" + safe.jsstring(L("lcl_add")) + "', {callback: FcltMgr.reload })" })
        buttons.push({ icon: "fa-fclt-edit", title: L("lcl_ins_change_xcp"), action: "FcltMgr.openModalDetail('" + addurl_editxcp + "', '" + safe.jsstring(L("lcl_ins_change_xcp")) + "', {callback: FcltMgr.reload })" })
      }
    }

    var rst = new ResultsetTable({ keyColumn: "ins_deel_key",   //dummy
                                   sql: sql,
                                   ID: "inspecttable",
                                   rowData: fnrowData,
                                   rowActionEnabler: fnrowActionEnabler,
                                   rowClass: fnrowClass,
                                   showAll: showall,
                                   outputmode: outputmode,
                                   title: L("lcl_ins_planned_activities"),
                                   buttons: buttons,
                                   roundtripCode: (canImport ? "INSPECTIE" : "")
                                 });

    rst.addColumn(new Column({caption: L("lcl_obj_identification"), content: "ins_deel_omschrijving"}));
    rst.addColumn(new Column({caption: L("ctr_discipline"), content: "ins_discipline_omschrijving"}));
    rst.addColumn(new Column({caption: L("lcl_ins_controle_plandate"), content: fnVolgende}));
    rst.addColumn(new Column({caption: L("lcl_ins_controle_datum"), content: fnControleDatum}));
    rst.addColumn(new Column({caption: L("ins_controlemode_success"), content: fnCMSuccess}));
    rst.addColumn(new Column({caption: L("lcl_ins_controle_srt"), content: "ins_srtcontrole_omschrijving"}));
    rst.addColumn(new Column({caption: L("lcl_ins_controle_cat"), content: "ins_srtcontrole_groep"}));
    rst.addColumn(new Column({caption: L("lcl_ins_kosten") + "&nbsp;(" + L("lcl_valutasign") + ")", content: fnKosten, datatype: "currency"}));
    rst.addColumn(new Column({caption: L("ins_srtcontrole_opmerking"), content: "ins_srtcontrole_opmerking"}));
    rst.addColumn(new Column({caption: "" /*L("lcl_ins_controle_opm")*/, content: "ins_deelsrtcontrole_opmerking", combine: true}));
    rst.addColumn(new Column({caption: L("lcl_ins_inspecteur"), content: "inspecteur"}));
    rst.addAction({ action: "insShow", caption: L("lcl_edit"), enabler: "eShow", isDefault: true });
    // Op een tablet zijn geen inline acties.
    // Daarom kun je, als de laatste inspectie afgerond is en geen inspectierecord aanwezig is, door op de regel te klikken een inspectie starten.
    rst.addAction({ action: "insStart", caption: L("lcl_ins_start"), enabler: "eStartD", isDefault: true });
    rst.addAction({ action: "insPlan", caption: L("lcl_ins_schedule"), enabler: "ePlan" });
    rst.addAction({ action: "insStart", caption: L("lcl_ins_start"), enabler: "eStart" });
    rst.addAction({ action: "insUnfreeze", caption: L("lcl_ins_unstart"), enabler: "eUnstart" });
    if (mld_key > 0) {
      rst.addAction({ action: "insUnexecute", caption: L("lcl_ins_unexecute"), enabler: "eUnexecute", tooltip: L("lcl_ins_unexecute_task") });
    }
    rst.addAction({ action: "insClose", caption: L("lcl_ins_stop"), enabler: "eClose" });
    rst.addAction({ action: "insFinish", caption: L("lcl_ins_finish"), enabler: "eFinish" });
    if (!excel && !print && insFlexParams.anyflex) {
      rst.addColumn(new Column({caption: insFlexParams.flexlabel, content: fncolFlexBijlagen, colName: "fncolFlexBijlagen"}));
    }

    var cnt = rst.processResultset();
%>
  </body>
</html>
<% ASPPAGE_END(); %>
