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

    File:               fac_fiattering_list.asp
    Description:        Overzicht fiatteringsverzoeken   UNDER CONSTRUCTION voor INSTEMMEN
    Parameters:
    Context:            Vanuit fac_fiattering_search.asp
    Requires:           WEB_ORDOAP autorisatie

            Ik moet fiatteren als:
                BES) bes_disc_info.disc_params_fiatflow == 0 && bes_bestelling_status == 2
                     bes_disc_info.disc_params_fiatflow == 1 && bes_bestelling_status == 4 AND
                     A1) bes_bestelling_fiat_user IS NULL AND
                         ik ben NVL(kostenplaatsverantwoordelijke, kostenplaatsgroepverantwoordelijke)
                     A2) of: bes_bestelling_fiat_user IS NOT NULL AND
                         ik ben de kostenplaatsgroepverantwoordelijke of
                CNT) cnt_contract_status == 3 AND
                     A1) Ik heb WEB_CNTGO1 rechten AND
                         cnt_info.kosten > S("cnt_contract_limit1") AND  // Zijn de kosten hoger als de limiet
                         cnt_info.approved <= S("cnt_contract_limit1") // Welke goedkeur? 1, 2 of 3?
                     A2) Ik heb CNTGO2 rechten AND
                         cnt_info.kosten > S("cnt_contract_limit2") AND
                         cnt_info.approved <= S("cnt_contract_limit2")
                         cnt_info.approved > S("cnt_contract_limit1") // Eerste goedkeuring is geweest
                     A3) Ik heb CNTGO3 rechten AND
                         cnt_info.kosten > S("cnt_contract_limit3") AND
                         cnt_info.approved <= S("cnt_contract_limit3")
                         cnt_info.approved > S("cnt_contract_limit2") // Tweede goedkeuring is geweest
                     A4) Ik heb CNTGO4 rechten AND
                         cnt_info.kosten > S("cnt_contract_limit4") AND
                         cnt_info.approved <= S("cnt_contract_limit4")
                         cnt_info.approved > S("cnt_contract_limit3") // Derde goedkeuring is geweest
                     A5) Ik heb CNTGO5 rechten AND
                         cnt_info.kosten > S("cnt_contract_limit5") AND
                         cnt_info.approved <= S("cnt_contract_limit5")
                         cnt_info.approved > S("cnt_contract_limit4")
                MLDIN) Instemmen met melding  mld_melding_conceptstatus > 0 en ik ben de instemmer (zie mld.getinstemmer())
                MLD) Fiatteren opdracht)  mld_statusopdr_key == 3 AND
                                          A1) fac.gettrackinguserkey('ORDFOK', op.mld_opdr_key) IS NULL AND
                                              ik ben NVL(kostenplaatsverantwoordelijke, kostenplaatsgroepverantwoordelijke)
                                          A2) of: fac.gettrackinguserkey('ORDFOK', op.mld_opdr_key) IS NOT NULL AND
                                              ik ben de kostenplaatsgroepverantwoordelijke
                     Goedkeuren opdracht) mld_statusopdr_key == 10 AND (Eisen GOE t/m GO5) AND (PRS/ALG rechten) AND ...
                     Accepten Opdracht)   mld_statusopdr_key == 6 AND (aantal opdrachten IS NULL OR offerte is later als laatste opdracht)
                FIN) Fiatteren)  fin_factuur_statuses_key == 2 AND (ik ben budgethouder van de BrOC-kostenplaats (in collegakeylist) OR
                                                                    ik heb write rechten op de locatie van het afleveradres (in collegakeylist) OR
                                                                    ik heb write rechten op de plaats van de bijbehorende melding (in collegakeylist) OR
                                                                    ik ben contracteigenaar (in collegakeylist))
                     Goedkeuren) fin_factuur_statuses_key == 5 AND prs_perslid_key_goedkeur in Collegakeylist (AND S("fin_enable_goedkeuren") != 0 geldt al omdat anders de status niet "Ter goedkeuring(5)" kan zijn)
                RES) Er artikelregels zijn die nog niet gefiatteerd zijn (res_rsv_artikel_approved = 0) AND
                     De BO status (res_status_bo_key) Nieuw(2) is (COALESCE(res_rsv_ruimte.res_status_bo_key, res_rsv_artikel.res_status_bo_key) = 2) AND
                     Voor een catalogus geldt: SUM(res.getartikelprijs(res_rsv_artikel.res_rsv_artikel_key)) > res_disc_params.cat_threshold
            Ik heb gefiatteerd of afgewezen als er tracking is geweest
                BES) gefiateerd:  'BESFIT' (kostenplaatsverantwoordelijke) of 'BESACP'" (kostenplaatsgroepverantwoordelijke)
                     afgewezen:   'BESREJ'
                CNT) gefiateerd:  'CNTFIT'
                     afgewezen:   'CNTREJ'
              MLDIN) ingestemd:   'MLDUPD' // Vlak voor de MLDNEW.
                     afgewezen:   .MLDREJ'
                MLD) gefiateerd:  'ORDFOK'
                     afgewezen:   'ORDREJ'
                FIN) gefiateerd:  'FINGOE'
                     afgewezen bij fiatteren:  'FINFNO'
                     goedgekeurd: 'FINFOK'
                     afgewezen bij goedkeuren: 'FINGNO'
                RES) gefiateerd:  'RESFOK'
                     afgewezen:   'RESFNO'

*/
%>

<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/status.inc" -->
<!-- #include file="../Shared/resultset_table_v2.inc" -->
<!-- #include file="../BES/bes.inc" -->
<!-- #include file="../CNT/cnt.inc" -->
<!-- #include file="fac.inc" -->
<!-- #include file="../MLD/mld.inc" -->
<!-- #include file="../FAC/fac_fiattering_list.inc" -->
<!-- #include file="../FIN/fin.inc" -->
<!-- #include file="../RES/res.inc" -->

<%
var prsKeys = "" + user_key;
var outputmode = getQParamInt("outputmode", 0); //  0 = screen, 1 = print, 2 = excel etc
var showall = getQParamInt("showall", 0) == 1;
var getOpen = getQParamInt("open", 0) == 1;
var getClosed = getQParamInt("close", 0) == 1;
var getRejected = getQParamInt("reject", 0) == 1;
var opdrtype_key = getQParamInt("opdrtype_key", -1); // Opdrachttype
var kpgrp_key_arr = getQParamIntArray("kpgrp_key_arr", [-1]); // Kostenplaatsgroep
var dist_key_arr = getQParamKeyArray("districtkey", []); // District
var loc_key_arr = getQParamKeyArray("locatiekey", []); // Locatie
var bld_key_arr = getQParamKeyArray("gebouwkey", []); // Gebouw
var betreft = getQParamArray("betreft", []); // Betreft module BES, CNT, FIN, MLDOF of MLDOP.

if (!getOpen && !getClosed && !getRejected)
    getOpen = true;

if (dist_key_arr.length > 0)
{
  if (loc_key_arr.length == 0)
  { // Geen locatie geselecteerd.
    // Zoek alle locaties die bij het gekozen district horen.
    sqld = "SELECT alg_locatie_key"
         + "  FROM alg_locatie"
         + " WHERE alg_district_key IN (" + dist_key_arr.join(",") + ")";  // geen alg_locatie_verwijder is null??
    var oRsd = Oracle.Execute(sqld);
    while (!oRsd.eof)
    {
      loc_key_arr.push(oRsd("alg_locatie_key").value);
      oRsd.MoveNext();
    }
    oRsd.Close();
  }
}

var params = { getopen: getOpen
             , getclosed: getClosed
             , getrejected: getRejected
             , opdrtype_key: (opdrtype_key != -1? opdrtype_key : null)
             , kpgrp_key_arr: (kpgrp_key_arr.length > 0 && kpgrp_key_arr.join(",").indexOf("-1") == -1? kpgrp_key_arr : null)
             , dist_key_arr: (dist_key_arr.length > 0? dist_key_arr : null)
             , loc_key_arr: (loc_key_arr.length > 0? loc_key_arr : null)
             , bld_key_arr: (bld_key_arr.length > 0? bld_key_arr : null)
             , betreft: (betreft.length? betreft : null)
             }

FCLTHeader.Requires({ plugins: ["jQuery"], js: ["jquery-ui.js"] });
%>

<html>
  <head>
<%  FCLTHeader.Generate({outputmode: outputmode}) %>
    <script>
      var todo_list = { BES: [],
                        CNT: [],
                        MLD: [],
                        MLDIN: [],
                        GOED: [],
                        OFFERTE: [],
                        RES: [],
                        FIN: [],
                        FIN2: []
                      }

      function one_done(module)
      {
        todo_list[module] = [];
        var all_done = true;
        for (var m in todo_list)
        {
            if (todo_list[m].length > 0)
                all_done = false;
        }
        if (all_done)
            FcltMgr.reload();
      }

      function one_post(key_param, data, url, module)
      {
          if (todo_list[module].length == 0)
          {
            one_done(module);
            return;
          }

          var data = data || {};
          data[key_param] = todo_list[module].join(",")
          <% protectRequest.dataToken("data"); %>
          $.post(url,
                 data,
                 function(json, textStatus)
                 {
                    one_done(module);
                 },
                 "json");
      }

      function fac_edit(row)
      {
        var facData = JSON.parse(row.getAttribute("ROWDATA"));
        var item_key = row.getAttribute("ROWKEY");
        var module = facData.module;
        // We geven urole=fe mee omdat dat de lading het best dekt
        switch (module)
        {
          case "BES":
          {
            FcltMgr.openDetail("appl/bes/bes_bestelling.asp?urole=fe&bes_key=" + item_key);
            break;
          }
          case "CNT":
          {
            FcltMgr.openDetail("appl/cnt/cnt_contract.asp?urole=fe&cnt_key=" + item_key, L("lcl_cnt_contract") + " " + item_key);
            break;
          }
          case "MLDIN":
          {
            FcltMgr.openDetail("appl/mld/mld_melding.asp?mld_key=" + item_key);
            break;
          }
          case "MLD":
          case "GOED":
          case "OFFERTE":
          {
            FcltMgr.openDetail("appl/mld/mld_opdr.asp?opdr_key=" + item_key); // Urole zoekt mld_opdr_edit.asp zelf wel uit.
            break;
          }
          case "RES":
          {
            FcltMgr.openDetail("appl/res/res_reservering.asp?urole=fe&rsv_ruimte_key=" + item_key);
            break;
          }
          case "FIN":
          case "FIN2":
          {
            FcltMgr.openDetail("appl/fin/fin_factuur.asp?fin_key=" + item_key, L("lcl_fin_invoice") + " " + item_key);
            break;
          }
          default: INTERNAL_ERROR;
        }
      }

      // Knop fiatteer gedrukt
      function fac_approve(rowArray, isMulti, goedkeuren)
      {
        function opdrAcceptOfferCallback(json, textStatus)
        {
          function showVervolgOpdracht(json1, textStatus1)
          {
            // Automatisch een vervolg uitvoeringsopdracht (opdr_type is mld_typeopdr_typeopdr_key) aanmaken
            // Als er een typeopdr_key is gedefinieerd voor de offerte, wordt er automatisch een opdracht aangemaakt. Anders refresh offerte.
            if (json.typeopdr_key > 0)
            {
              var url = "appl/mld/mld_opdr.asp?urole=bo" // Om een opdracht te kunnen kopieëren heb ik altijd "ORDBOF" rechten voor nodig. Dan kan ik ook urole=bo meegeven.
                      + "&opdr_key=" + json.opdr_key
                      + "&opdr_type=" + json.typeopdr_key
                      + "&opdr_copy=1";
              FcltMgr.openDetail(url, L("lcl_mld_opdr_uitvoeringopdracht")); // in nieuw tabje
              FcltCallbackRefresh(json, textStatus); // van onzelf
            }
            else
              FcltCallbackRefresh(json, textStatus);
          }

          one_done("OFFERTE");
          if (json.success)
          {
            if (json.afwijsArray && json.afwijsArray.length > 0)
            {
              var data = { opdr_key: json.afwijsArray.join(","),
                           opdr_opm: L("lcl_mld_opdr_alternatief")
                         };
              <% protectRequest.dataToken("data"); %>
              $.post("../mld/opdr_reject_offer.asp?submit=1",
                     data,
                     function(json1, textStatus1)
                     {
                       showVervolgOpdracht(json1, textStatus1)
                     });
            }
            else
              showVervolgOpdracht(json, textStatus);
          }
          else
            FcltCallback(json, textStatus);
        }

        function off_accept(off_key_array)
        {
          // Alleen de eerste accepteren. Multi kan niet.
          FcltMgr.openModalDetail("../mld/opdr_accept_offer.asp?opdr_key=" + off_key_array[0],
                                  L("lcl_mld_accept"),
                                  { callback: opdrAcceptOfferCallback });

        }

        var theData = JSON.parse(rowArray[0].getAttribute("ROWDATA"));
        var module = theData.module;

        var autoConf = isMulti || module == "OFFERTE" || ((module == "FIN2" || module == "GOED") && goedkeuren);
        var moduleBoo = (module == "FIN2" || module == "GOED"); // !moduleBoo == (module != "FIN2" && module != "GOED")

        /* if (isMulti || module == "OFFERTE" ||
            ((module == "FIN2" || module == "GOED") && goedkeuren) ||
            ((module != "FIN2" && module != "GOED") && confirm(L("lcl_approve") + "?")))
        //if (isMulti || module == "OFFERTE" || confirm(L("lcl_approve") + "?")) */

        if (autoConf || !moduleBoo) {

          FcltMgr.confirm(L("lcl_approve") + "?", { autoconfirm: autoConf }, function() {
              todo_list[module] = [];
              for (var i = 0; i < rowArray.length; i++)
              {
                var item_key = rowArray[i].getAttribute("ROWKEY")
                theData = JSON.parse(rowArray[i].getAttribute("ROWDATA"));
                module = theData.module;
                todo_list[module].push(item_key);
              }

              var data = {};
              if (goedkeuren && !(<%=S("mld_opdr_refiat_preference")%> == 0 && isMulti))
              {
                var fiat = $("#has_sendforapproval").length == 0 || ($("#has_sendforapproval").length && $("#sendforapproval")[0].checked)? 1 : 0;
                data.dofiat = fiat;
              }

              // Parallel opstarten
              one_post("bes_key", {}, "../bes/bes_approve.asp", "BES");
              one_post("cnt_key", {}, "../cnt/cnt_approve.asp", "CNT");
              one_post("opdr_key", {}, "../mld/opdr_approve.asp", "MLD");
              one_post("opdr_key", data, "../mld/opdr_goedkeur.asp", "GOED");
              one_post("rsv_ruimte_key", {}, "../res/res_fiatteren.asp?", "RES");
              one_post("fin_key", {}, "../fin/fin_approve.asp?a=1", "FIN");
              one_post("fin_key", {}, "../fin/fin_goedkeur.asp?a=1", "FIN2");

              if (todo_list["OFFERTE"].length > 0)
                  off_accept(todo_list["OFFERTE"]);
          });
        }
      }

      // Knop afwijzen gedrukt.
      function fac_reject(rowArray, isMulti)
      {
        function bes_reject(bes_key_array)
        {
          url = "../bes/bes_reject.asp?bes_key=" + bes_key_array.join(",");
          FcltMgr.openModalDetail(url,
                                  L("lcl_bes_reject"),
                                  { callback: function(json, textStatus)
                                              {
                                                one_done("BES");
                                                var data = { opmerk: json.opmerk }; // Reden ook voor de rest gebruiken.
                                                one_post("opdr_key", data, "../mld/opdr_reject_save.asp", "MLD");
                                                one_post("opdr_key", data, "../mld/opdr_reject_save.asp", "GOED");
                                                one_post("cnt_key", data, "../cnt/cnt_reject_save.asp", "CNT");
                                                one_post("rsv_ruimte_key", data, "../res/res_afwijzen_save.asp?", "RES");
                                                one_post("fin_key", data, "../fin/fin_approve.asp?r=1", "FIN");
                                                one_post("fin_key", data, "../fin/fin_goedkeur.asp?r=1", "FIN2");
                                                one_post("mld_key", data, "../mld/mld_reject.asp", "MLDIN");
                                              }}
                                 );

        }

        function opdr_reject(opdr_key_array, module)
        {
          url = "../mld/opdr_reject.asp?opdr_key=" + opdr_key_array.join(",");
          FcltMgr.openModalDetail(url,
                                  L("lcl_mld_reject"),
                                  { callback: function(json, textStatus)
                                              {
                                                one_done(module);
                                                var data = { opmerk: json.opmerk }; // Reden ook voor de rest gebruiken.
                                                if (module != "GOED") // dan moet die nog
                                                  one_post("opdr_key", data, "../mld/opdr_reject_save.asp", "GOED");
                                                one_post("cnt_key", data, "../cnt/cnt_reject_save.asp", "CNT");
                                                one_post("rsv_ruimte_key", data, "../res/res_afwijzen_save.asp?", "RES");
                                                one_post("fin_key", data, "../fin/fin_approve.asp?r=1", "FIN");
                                                one_post("fin_key", data, "../fin/fin_goedkeur.asp?r=1", "FIN2");
                                                one_post("mld_key", data, "../mld/mld_reject.asp", "MLDIN");
                                              }}
                                 );
        }

        function cnt_reject(cnt_key_array)
        {
          url = "../cnt/cnt_reject.asp?cnt_key=" + cnt_key_array.join(",");
          FcltMgr.openModalDetail(url,
                                  L("lcl_cnt_reject"),
                                  { callback: function(json, textStatus)
                                              {
                                                one_done(module);
                                                var data = { opmerk: json.opmerk }; // Reden ook voor de rest gebruiken.
                                                one_post("rsv_ruimte_key", data, "../res/res_afwijzen_save.asp?", "RES");
                                                one_post("fin_key", data, "../fin/fin_approve.asp?r=1", "FIN");
                                                one_post("fin_key", data, "../fin/fin_goedkeur.asp?r=1", "FIN2");
                                                one_post("mld_key", data, "../mld/mld_reject.asp", "MLDIN");
                                              }}
                                 );
        }

        function res_reject(rsv_ruimte_key_array)
        {
          url = "../res/res_afwijzen.asp?rsv_ruimte_key=" + rsv_ruimte_key_array.join(",");
          FcltMgr.openModalDetail(url,
                                  L("lcl_res_reject"),
                                  { callback: function(json, textStatus)
                                              {
                                                one_done(module);
                                                var data = { opmerk: json.opmerk }; // Reden ook voor de rest gebruiken.
                                                one_post("fin_key", data, "../fin/fin_approve.asp?r=1", "FIN");
                                                one_post("fin_key", data, "../fin/fin_goedkeur.asp?r=1", "FIN2");
                                                one_post("mld_key", data, "../mld/mld_reject.asp", "MLDIN");
                                              }}
                                 );
        }

        function fin_reject(fin_key_array)
        {
          FcltMgr.confirm(L("lcl_reject") + "?", function() {
            var data = { fin_key: fin_key_array.join(",") };
            protectRequest.dataToken(data);
            $.post("../fin/fin_approve.asp?r=1",
                   data,
                   function(json, textStatus)
                   {
                     var data = { opmerk: json.opmerk }; // Reden ook voor de rest gebruiken.
                     one_done(module);
                     one_post("mld_key", data, "../mld/mld_reject.asp", "MLDIN");
                   },
                   "json");
          });
        }

        function mld_reject(mld_key_array, module)
        {
          url = "../mld/mld_reject.asp?mld_key=" + mld_key_array.join(",");
          FcltMgr.openModalDetail(url,
                                  L("lcl_mld_reject"),
                                  { callback: function(json, textStatus)
                                              {
                                                one_done(module);
                                                if (todo_list["OFFERTE"].length == 0)
                                                  FcltCallbackRefresh(json, textStatus);
                                              }}
                                 );
        }

        function off_reject(off_key_array)
        { // Alleen de eerste afwijzen. Multi kan niet.
          FcltMgr.openModalDetail("../mld/opdr_reject_offer.asp?opdr_key=" + off_key_array[0],
                                  L("lcl_mld_reject"),
                                  { callback: FcltCallbackRefresh });
        }

        for (var i = 0; i < rowArray.length; i++)
        {
          var item_key = rowArray[i].getAttribute("ROWKEY")
          var theData = JSON.parse(rowArray[i].getAttribute("ROWDATA"));
          var module = theData.module;
          if (i == 0) // Als er voor de tweede keer gefiatteerd of afgewezen wordt dan de todo lijst weer leeg maken.
            todo_list[module] = [];
          todo_list[module].push(item_key);
        }

        // De eerste zal een dialoog tonen met vraag om reden.
        // De anderen krijgen allemaal dezelfde reden
        if (todo_list["BES"].length > 0)
          bes_reject(todo_list["BES"]);
        else if (todo_list["MLD"].length > 0)
          opdr_reject(todo_list["MLD"], "MLD");
        else if (todo_list["GOED"].length > 0)
          opdr_reject(todo_list["GOED"], "GOED");
        else if (todo_list["CNT"].length > 0)
          cnt_reject(todo_list["CNT"]);
        else if (todo_list["RES"].length > 0)
          res_reject(todo_list["RES"]);
        else if (todo_list["FIN"].length > 0)
          fin_reject(todo_list["FIN"]);
        else if (todo_list["FIN2"].length > 0)
          fin_reject(todo_list["FIN2"]);
        else if (todo_list["MLDIN"].length > 0)
          mld_reject(todo_list["MLDIN"]);
        if (todo_list["OFFERTE"].length > 0)
          off_reject(todo_list["OFFERTE"]);
      }

      function mld_instem(rowArray, isMulti)
      {
        var mldKeyString = getKeyString(rowArray);
        FcltMgr.confirm(L("lcl_instem") + "?", { autoconfirm: isMulti }, function() {
            var data = { mld_key: mldKeyString };
            protectRequest.dataToken(data);
            $.post("../mld/mld_instemmen.asp",
                data,
                FcltCallbackRefresh,  // TODO, maar die doet hetzelfde volgens mij?
                "json");
        });
      }

      function mld_show_goedkeurmodal(rowArray, isMulti)
      {
        if (<%=S("mld_opdr_refiat_preference")%> == 0 && isMulti)
          fac_approve(rowArray, isMulti, true);
        else
        {
          $("#sendforapproval").prop('checked', true); // Checkbox weer zetten indien die was uitgeschakeld.
          params = { width: "auto",
                     height: "auto",
                     modal: true,
                     resizable: false,
                     position: { my: "center", at: "center", of: window },
                     title: L("lcl_message"),
                     buttons: { "<%=safe.jsstring(L("lcl_goedkeur"))%>": function () { $("#dmodal").dialog('close'); fac_approve(rowArray, isMulti, true); },
                                "<%=safe.jsstring(L("lcl_cancel"))%>"  : function () { $("#dmodal").dialog('close'); }
                              },
                     create: FcltMgr.fnCreateCloseButton("div#dmodal")
                   }
          $("div#dmodal").dialog(params).dialog("open");
        }
      }
    </script>
  </head>

  <body id="listbody">
<%  var buttons_rp = [];
    buttons_rp.push({ title: L("lcl_goedkeur"), action: "$('div#dmodal').dialog('close').remove();", icon: "fa-fclt-save" });
    buttons_rp.push({ title: L("lcl_cancel"), action: "$('div#dmodal').dialog('close').remove();", icon: "fa-fclt-cancel" });
%>
    <form name="u2" onSubmit="return false;">
      <div id="dmodal" style="display:none">
        <div>
<%      ROFIELDTR("fld", "", L("lcl_goedkeur") + "?", {id: "modalsfatext"}); %>
      </div>
<%    if (S("mld_opdr_refiat_preference") == 1)
        RWCHECKBOXTR("sendforapproval", "fldcheck", L("lcl_mld_sendfor_approval"), 1, {boxfirst: true}); %>
      </div>
<%
      function fnrowActionEnabler(oRs)
      {
        //var this_mld = mld.func_enabled_melding(oRs("mld_melding_key").Value);
        var openStatus = oRs("fiatstatus").Value == "open";
        var module = oRs("module").Value;
        var eReject = openStatus && S("fin_enable_afwijzen") == 1;  // Afwijzen.
        var data = { eReject: eReject };

        if (openStatus)
        {
            switch (module)
            {
              case "BES":
              case "CNT":
              case "FIN":
              case "MLD":
              case "RES":  data.eApprove = true; break;    // Fiatteren bestelling, contract, factuur, melding opdracht, reservering.
              case "FIN2":
              case "GOED": data.eGoedkeur = true; break;  // Goedkeuren melding opdracht, factuur.
              case "OFFERTE": data.eAccept = true; break; // Accepteren melding offerte.
              case "MLDIN": data.eInstem = true; break;   // Instemmen met melding.
              default: INTERNAL_ERROR;
            }
        }

        return data;
      }

      function allowFiat(oRs)
      { // op basis van de status geef ik aan of fiatteren/afwijzen mogelijk is (-1) of niet (0)
        return (oRs("module").Value == "BES"? (oRs("statuskey").Value != 2? -1 : 0) : (oRs("module").Value == "RES"? (oRs("statuskey").Value == 2? -1 : 0) : (oRs("statuskey").Value != 3? -1 : 0)));
      }

      function prepareTotal(oRs)
      {
          return safe.curr(oRs("bedrag").Value);
      }

      function prepareModule(oRs)
      {
          switch (oRs("module").Value)
          {
            case "BES": return L("lcl_bes_bestelling"); break;
            case "CNT": return L("lcl_cnt_contract"); break;
            case "MLD":
            case "GOED": return L("lcl_shared_order") + ":&nbsp;" + safe.html(oRs("type").Value); break;
            case "OFFERTE": return safe.html(oRs("type").Value); break;
            case "RES": return L("lcl_res_reservation"); break;
            case "FIN":
            case "FIN2": return (oRs("type").Value ? L("lcl_fin_factuur_type") + ":&nbsp;" + safe.html((oRs("type").Value)) :L("lcl_fin_invoice")); break;
            case "MLDIN": return L("lcl_mld_concept") + ":&nbsp;" + safe.html(oRs("type").Value); break;
            default: INTERNAL_ERROR;
          }
      }

      function fnrowData(oRs)
      {
          var data = { module: oRs("module").Value,
                       prefix: oRs("prefix").Value,
                       aanvraagnummer: oRs("aanvraagnummer").Value };
          return JSON.stringify(data);
      }

      function fncolBesNr(oRs)
      { // Eigenlijk wil je een markering bij de parent, niet bij het child TODO
        return safe.html((oRs("module").Value == "BES"? S("bes_bestelling_prefix") : "") + (oRs.fields("bes_bestelling_parentkey").Value > 0 ? oRs.fields("bes_bestelling_parentkey").Value + "*" : oRs.fields("aanvraagnummer").Value));
      }

      function fncolStatus(oRs)
      {
        switch (oRs.fields("module").Value)
        {
          case "BES":     { return bes.getbesbestellingstatustext(oRs.fields("statuskey").Value); break; }
          case "CNT":     { return cnt.getcntstatustext(oRs.fields("statuskey").Value); break; }
          case "MLD":
          case "GOED":    { return status.getopdrstatustext(oRs.fields("statuskey").Value); break; }
          case "OFFERTE": { return L("lcl_mld_ter_acceptatie"); break; }
          case "RES":     { var fiatstatus = ""
                            switch (oRs.fields("fiatstatus").Value)
                            {
                              case "open":   fiatstatus = L("lcl_res_ter_fiat");    // Resultaat uit de open catering bestellingen query.
                                             break;
                              case "close":  fiatstatus = L("lcl_res_goedgekeurd"); // Resultaat uit de gefiatteerde catering bestellingen query.
                                             break;
                              case "reject": fiatstatus = L("lcl_res_afgewezen");   // Resultaat uit de afgewezen catering bestellingen query.
                                             break;
                            }
                            return fiatstatus;
                            break;
                          }
          case "FIN":
          case "FIN2":    { return fin.getfinstatustext(oRs.fields("statuskey").Value); break; }
          case "MLDIN":   { return mld.getmldstatustext(oRs.fields("statuskey").Value, oRs.fields("extra1").Value); break; }
        }
      }

      function fncolfiatteur(oRs)
      {
        switch (oRs.fields("module").Value)
        {
          case "BES":
          case "MLD":
          case "MLDIN":
          case "GOED":
          case "OFFERTE":
          case "RES":
          case "FIN":
          case "FIN2":    { return oRs.fields("fiatteur").Value; break; }
          case "CNT":     { switch (oRs.fields("fiatteur").Value)
                            {
                              case "0": { return ''; break; } // Kan eigenlijk niet voorkomen.
                              case "1": { return L("lcl_cnt_approved_upto").format(S("cnt_contract_limit1")); break; }
                              case "2": { return L("lcl_cnt_approved_upto").format(S("cnt_contract_limit2")); break; }
                              case "3": { return L("lcl_cnt_approved_upto").format(S("cnt_contract_limit3")); break; }
                            }
                          }
        }
      }

      function fncolGebouwTerrein(oRs)
      {
        if (oRs.fields("gebouw").Value == " " || oRs.fields("gebouw").Value == null)
          if (oRs.fields("terrein").Value == " " || oRs.fields("terrein").Value == null)
            return "";
          else return oRs.fields("terrein").Value;
        else return oRs.fields("gebouw").Value;
      }

      var sql = fiattering_sql(params);
      var rst = new ResultsetTable({keyColumn: "request_key",
                                    ID: "rfoTable",
                                    sql: sql,
                                    rowData: fnrowData,
                                    rowActionEnabler: fnrowActionEnabler,
                                    outputmode: outputmode,
                                    filterParams: params,
                                    showAll: showall,
                                    emptySetString: L("lcl_rfo_no_items_to_approve")});

      rst.addColumn(new Column({caption: "dummy", content: allowFiat, hidden: true}));
      rst.addColumn(new Column({caption: "dummy", content: "module", hidden: true}));
      rst.addColumn(new Column({caption: L("lcl_request_key"), content: fncolBesNr}));
      rst.addColumn(new Column({caption: L("lcl_date"), content: "datum", datatype: "date"}));
      rst.addColumn(new Column({caption: L("lcl_rfo_requestor"), content: "prs_perslid_naam_full", hasActions: true }));
      rst.addColumn(new Column({caption: L("lcl_rfo_total_sum"), content: prepareTotal, datatype: "currency"}));
      rst.addColumn(new Column({caption: L("lcl_rfo_type"), content: prepareModule}));
      rst.addColumn(new Column({caption: L("lcl_handler"), content: "uitvoerende"}));
      rst.addColumn(new Column({caption: L("lcl_rfo_category"), content: "categorie"}));
      rst.addColumn(new Column({caption: L("lcl_bes_RFO_status"), content: fncolStatus}));
      if (user.hasCollegas())
        rst.addColumn(new Column({caption: L("lcl_bes_approver"), content: fncolfiatteur}));
      rst.addColumn(new Column({caption: L("lcl_location"), content: "locatie"}));
      rst.addColumn(new Column({caption: L("lcl_bld_terra"), content: fncolGebouwTerrein, combine: true}));
      rst.addColumn(new Column({caption: L("lcl_descr"), content: "omschrijving"}));

      rst.addAction({action: "fac_edit", caption: L("lcl_details"), isDefault: true});
      rst.addAction({action: "fac_approve", caption: L("lcl_approve"), enabler: "eApprove",  multi: true, multiOnce: true});
      rst.addAction({action: "mld_show_goedkeurmodal", caption: L("lcl_goedkeur"), enabler: "eGoedkeur",  multi: true, multiOnce: true});
      rst.addAction({action: "fac_approve", caption: L("lcl_accept"), enabler: "eAccept",  multi: true, multiOnce: true});
      rst.addAction({action: "fac_reject", caption: L("lcl_reject"), enabler: "eReject", multi: true, multiOnce: true});
      rst.addAction({action: "mld_instem", caption: L("lcl_instem"), enabler: "eInstem", multi: true, multiOnce: true});


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