<% /*
     $Revision$
     $Id$

    File:        imp_list.inc
    Description: Definieert de serverside functie imp_list() die een lijst van importfuncties toont die
                 voldoen aan de gegeven parameters/criteria, binnen de readautorisaties van de user.
                 We ondersteunen twee modes
                    historie=false
                        Je ziet per importfunctie altijd exact één regel
                            (regel per FAC_IMPORT_APP)
                        Hij toont eventueel de laatst uitgevoerd import/verwerk
                        Er is een inline actie 'inlezen'
                        Default actie is rapporteren (of gewoon default?)
                 en
                    historie=true
                        Je ziet alle imports die voor de importfunctie ooit zijn gedaan
                            (regel per FAC_IMPORT)
                        Er zijn geen inline-acties
                        Default actie is rapporteren
    Parameters:  -
    Context:     -

    Note:        -

*/ %>
<!-- #include file="../Shared/json2.js" -->
<!-- #include file="../Shared/resultset_table_v2.inc" -->
<!-- #include file="imp.inc" -->

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

function imp_list(params)
{
  var import_app_key = params.import_app_key;
  var import_date = params.import_date;
%>

  <html>
    <head>
<%
      FCLTHeader.Generate({ outputmode: outputmode });
%>
    </head>

    <body id="listbody">
<%
      var sql = "SELECT fia.fac_import_app_key"
              + "     , fia.fac_import_app_code"
              + "     , fia.fac_import_app_oms"
              + "     , fi.fac_import_key"
              + "     , fac_import_datum_gelezen gelezen"
              + "     , fac_import_datum_verwerkt verwerkt"
              + "     , (SELECT MAX(fi2.fac_import_key)"
              + "         FROM fac_import fi2"
              + "        WHERE fi2.fac_import_app_key = fia.fac_import_app_key) laatste"
              + "     , (SELECT d.ins_discipline_omschrijving"
              + "          FROM ins_tab_discipline d"
              + "         WHERE d.ins_discipline_key = fia.ins_discipline_key) discipline"
              + "     , (SELECT MAX (CASE"
              + "                    WHEN wg.fac_gebruiker_alg_level_write < 9 AND wg.fac_gebruiker_prs_level_write < 9"
              + "                    THEN 1"
              + "                    ELSE 0"
              + "                    END)"
              + "          FROM fac_v_webgebruiker wg"
              + "         WHERE wg.prs_perslid_key = " + user_key
              + "           AND wg.fac_functie_key = fia.fac_functie_key) can_write"
              + "     , (SELECT b.prs_bedrijf_naam"
              + "          FROM prs_bedrijf b"
              + "         WHERE b.prs_bedrijf_key = fia.prs_bedrijf_key) prs_bedrijf_naam"
              + "     , (SELECT " + S("prs_pers_string")
              + "          FROM prs_perslid p"
              + "         WHERE p.prs_perslid_key = fi.prs_perslid_key) uitvoerder"
              + "  FROM fac_import fi"
              + "     , fac_import_app fia"
              + " WHERE fia.fac_import_app_key = fi.fac_import_app_key(+)"
              + "   AND fia.fac_functie_key IN (SELECT wg.fac_functie_key"
              + "                                FROM fac_v_webgebruiker wg"
              + "                               WHERE wg.prs_perslid_key = " + user_key
              + "                                 AND wg.fac_gebruiker_alg_level_read < 9"
              + "                                 AND wg.fac_gebruiker_prs_level_read < 9)"
              + (import_app_key
                ? " AND fia.fac_import_app_key = " + import_app_key
                : "")
              + (params.catonly
                ? " AND fia.fac_import_app_code='CATALOGUS'"
                : "")
              + (import_date
                ? " AND trunc(fi.fac_import_datum_gelezen) = " + import_date.toSQL(false)
                : "")
if (!params.historie)
{
    sql += "AND COALESCE(fi.fac_import_key,-1) = "
         + "   (SELECT COALESCE(MAX(fi2.fac_import_key),-1)"
         + "      FROM fac_import fi2"
         + "     WHERE fi2.fac_import_app_key = fia.fac_import_app_key)";
}
    sql +=      " ORDER BY fac_import_app_oms"
              + "        , gelezen DESC";

      /**********************************
       * Callback functies ResultsetTable
       *********************************/

      // Extra data voor de client.
      function fnrowData(oRs)
      {
        var importfunctie = oRs("fac_import_app_oms").value + (oRs("discipline").value? " " + oRs("discipline").value : "");
        var importcode = oRs("fac_import_app_code").value;
        var import_key = oRs("fac_import_key").value||-1; // Leeg als nog nooit ingelezen

        var data = { importfunctie: importfunctie,
                     importcode: importcode,
                     import_key: import_key };
        return JSON.stringify(data);
      }

      function fnrowActionEnabler(oRs)
      {
        // Acties zijn te allen tijd alleen mogelijk op de laatste
        if (oRs("laatste").Value > 0 && oRs("laatste").Value != oRs("fac_import_key").Value)
            return {};

        // Bepaal of de vereiste rechten voor de acties aanwezig zijn voor DIT record.
        var gelezen = oRs("gelezen").value;
        var verwerkt = oRs("verwerkt").value;
        var canWrite = oRs("can_write").value == 1; // Alleen nodig voor Inlezen en Verwerken. Leesrechten voor Rapportage heb je als want je ben tot zover gekomen

        // Actie "Inlezen" en "Verwerken" indien verwerkt null is.
        // Actie "Inlezen" ook indien verwerkt is ingevuld, maar dan wordt er een nieuw record aangemaakt (nieuwe inlezen) en moet er dus een bestand aangegeven worden.
        // Actie "Rapportage" indien verwerkt is ingevuld.
        var eReadIn = false;  // Inlezen
        var eReReadIn = false;  // Inlezen (terwijl vorige nog niet verwerkt)
        var eProcess = false; // Verwerken

        if (canWrite)
        {
            if (gelezen == null || verwerkt != null)
              eReadIn = true;
            else
              eReReadIn = true;
            if (gelezen != null && verwerkt == null)
              eProcess = true; // Import kan ingelezen worden
        }

        var data = { eReadIn: eReadIn,
                     eReReadIn: eReReadIn,
                     eProcess: eProcess
                   };
        return data;
      }

      var rst = new ResultsetTable({ keyColumn: "fac_import_app_key", // Importfunctie key is ROWKEY
                                     sql: sql,
                                     ID: "imptable",
                                     rowData: fnrowData,
                                     rowActionEnabler: fnrowActionEnabler,
                                     filterParams: params,
                                     outputmode: params.outputmode,
                                     title: L("lcl_imp_imports"),
                                     showAll: params.showall
                                    });

      rst.addColumn(new Column({caption: L("lcl_imp_app_code"), content: "fac_import_app_code"}));
      rst.addColumn(new Column({caption: L("lcl_imp_app_oms"), content: "fac_import_app_oms"}));
      rst.addColumn(new Column({caption: L("lcl_discipline"), content: "discipline"}));
      rst.addColumn(new Column({caption: L("lcl_imp_supplier"), content: "prs_bedrijf_naam"}));
      //rst.addColumn(new Column({caption: L("lcl_imp_date_version"), content: "fac_import_versie"}));
      rst.addColumn(new Column({caption: L("lcl_imp_date_readin"), content: "gelezen", datatype: "datetime", nowrap: true}));
      rst.addColumn(new Column({caption: L("lcl_imp_date_processed"), content: "verwerkt", datatype: "datetime", nowrap: true}));
      rst.addColumn(new Column({caption: L("lcl_imp_import_by"), content: "uitvoerder"}));

      /* de mogelijke acties */
      rst.addAction({ action: "imp_readin", caption: L("lcl_imp_lezen"), enabler: "eReadIn" });     // Inlezen
      rst.addAction({ action: "imp_readin", caption: L("lcl_imp_herlezen"), enabler: "eReReadIn" });     // Inlezen
      rst.addAction({ action: "imp_process", caption: L("lcl_imp_verwerk"), enabler: "eProcess" }); // Verwerken

      rst.addAction({ action: "imp_report", caption: L("lcl_imp_report"), isDefault: true });    // Rapportage

      var cnt = rst.processResultset();
}
%>