<% /*
     $Revision$
     $Id$

    File:        prs_contactpersoon_list.inc
    Description: Vangt de parameters van prs_contactpersoon_search op en verwerkt die in een lijst
    Parameters:  -
    Context:     Vanuit prs_contactpersoon_search_list.asp (of wie maar wil)
    Note:

                wat doet de 'intern' parameter nog?
*/ %>

<!-- #include file="../Shared/iface.inc" -->
<!-- #include file="../Shared/resultset_table_v2.inc" -->
<!-- #include file="../Shared/getkenmerksql.inc" -->

<%
FCLTHeader.Requires({ plugins:["jQuery"],
                      js: []
                    })
function contactpersoon_list (params)
{
  // Valid and supported parameters are:
  // params.outputmode    : print to 0 = screen, 1 = printer, 2 = excel, etc.
  // params.showall       : boolean (true | false)
  // params.intern        : boolean (true | false)
  // params.search        : boolean (true | false)
  // params.bedrijf_key   : key
  // params.contact_name  : wildcard string
  // params.loc_key       : key
  // params.bld_key       : key
  var autparamsRELMAN = user.checkAutorisation("WEB_RELMAN", true);
  var deleteCp = autparamsRELMAN && autparamsRELMAN.PRSwritelevel < 9 && autparamsRELMAN.ALGwritelevel < 9; // Can delete contact person even when this person is employee

  if (intern)
  {
    var authparams = user.checkAutorisation('WEB_PRSMAN')
    var canAdd = (authparams.ALGwritelevel < 9);
  }
  else
  {
    var autfunction = ["WEB_RELUSE"];
    if (user.iamContact())
      autfunction.push("WEB_EXTREL");

    var authparams = user.checkAutorisation(autfunction, true);
    user.auth_required_or_abort(authparams);
    var canAdd = (authparams && authparams.ALGwritelevel < 9); // Alleen met WEB_RELUSE rechten mag ik contactpersonen toevoegen en wijzigen.
  }
  var canImport = (user.checkAutorisation("WEB_IMPORT", true) != null);

  // Voor resulttable de globalen zetten.
  var outputmode = params.outputmode; // print to 0 = screen, 1 = printer, 2 = excel, etc.
  var print = (outputmode == 1 || outputmode == 5);
  var excel = (outputmode == 2 || outputmode == 6);
  var showall = params.showall;

  var intern = params.intern;
  var search = params.search;
  var bedrijf_key = params.bedrijf_key;
  var contact_name = params.contact_name;
  var loc_key = params.loc_key;
  var bld_key = params.bld_key;
%>
  <html>
    <head>
<%    FCLTHeader.Generate({ outputmode: outputmode }); %>
      <script>
        var autosearch = 1; // automatisch laden van resultaat op search pagina
        function refreshall(data)
        {
          if (data.refresh)
              window.location.reload();
        }

        function contactPersoonEdit(row)
        {
          var cprs_key = row.getAttribute("ROWKEY");
          var url = "appl/prs/prs_contactpersoon.asp?mode=viewUpdate&key=" + cprs_key;
          FcltMgr.openDetail(url, L("lcl_person"), {callback: refreshall});
        }

        function contactPersoonDelete(row)
        {
          FcltMgr.confirm(L("lcl_prs_del_txt_contactpers"), function() {
              var cprs_key = row.getAttribute("ROWKEY");
              var data = {
                  key: cprs_key,
                  level: "C"
              };
              protectRequest.dataToken(data);
              $.post("prs_delete.asp",
                  data,
                  FcltCallbackRefresh,
                  "json");
          });
        }
      </script>
    </head>

    <body id="listbody">
<%

    // Fast check to see if we have any listable flex at all, to prevent superfluous column
    var sql = "SELECT "
            + lcl.xsql('k.prs_kenmerk_omschrijving', 'k.prs_kenmerk_key') +" prs_kenmerk_omschrijving  "
            + "     , k.prs_kenmerk_kenmerktype"
            + "  FROM prs_kenmerk k"
            + " WHERE BITAND (prs_kenmerk_inlijst, 1) = 1"
            + "   AND BITAND (prs_kenmerk_systeem, 4) = 0"  // niet als vertrouwelijk
            + "   AND k.prs_kenmerk_niveau = 'C'"
            + "   AND k.prs_kenmerk_verwijder IS NULL";
    var oRs = Oracle.Execute(sql);
    var anyflex = !oRs.eof;
    if (anyflex)
      {
          var multiflex = false;
          var bijlageflex = (oRs("prs_kenmerk_kenmerktype").Value == "M");
          var flexlabel = oRs("prs_kenmerk_omschrijving").Value;
          oRs.MoveNext();
          if (!oRs.Eof)
          {
              multiflex = true;
              flexlabel = L("lcl_flexlist");

              while (!oRs.eof)
              {
                  if (oRs("prs_kenmerk_kenmerktype").Value == "M")
                      bijlageflex = true;
                  oRs.MoveNext();
              }
          }
      }
      oRs.close();

      var sql = "SELECT n.prs_contactpersoon_locatie_key"
              + "     , b.prs_bedrijf_naam"
              + "     , "+ S("prs_contactpers_string") +" prs_contactpersoon_naam"
              + "     , l.alg_locatie_omschrijving"
              + "     , cp.prs_contactpersoon_telefoon_1"
              + "     , cp.prs_contactpersoon_telefoon_2"
              + "     , cp.prs_contactpersoon_fax"
              + "     , cp.prs_contactpersoon_email"
              + "     , cp.prs_contactpersoon_key"
              + "     , cp.prs_contactpersoon_functie"
              + "     , cp.prs_perslid_key"
              + (anyflex
                ? ", (SELECT LISTAGG("
                  + (multiflex ? lcl.xsql("k.prs_kenmerk_omschrijving", "k.prs_kenmerk_key")
                        + " || ':'|| CHR(160) ||"
                      : "")
                  + "            CASE"
                  + "            WHEN k.prs_kenmerk_kenmerktype = 'R' OR k.prs_kenmerk_kenmerktype = 'r' OR k.prs_kenmerk_kenmerktype = 'S'"
                  + "            THEN flx.getdomeinwaarde (k.fac_kenmerkdomein_key, km.prs_kenmerklink_waarde)"
                  + "            WHEN k.prs_kenmerk_kenmerktype = 'N'"
                  + "             AND k.prs_kenmerk_lengte = 1 "
                  + "             AND k.prs_kenmerk_nmin = 0 "
                  + "             AND k.prs_kenmerk_nmax = 1 "
                  + "             AND (k.prs_kenmerk_dec = 0 OR k.prs_kenmerk_dec IS NULL) "
                  + "            THEN DECODE (km.prs_kenmerklink_waarde, "
                  + "                         0, "+safe.qL("lcl_check_0")+", "
                  + "                         1, "+safe.qL("lcl_check_1")+", "
                  + "                         km.prs_kenmerklink_waarde)"
                  + "            ELSE km.prs_kenmerklink_waarde"
                  + "            END, CHR(13)) "
                  + "           WITHIN GROUP (ORDER BY prs_kenmerk_volgnr) "
                  + "  FROM prs_kenmerk k, prs_kenmerklink km"
                  + " WHERE km.prs_link_key = cp.prs_contactpersoon_key"
                  + "   AND k.prs_kenmerk_key = km.prs_kenmerk_key"
                  + "   AND BITAND(k.prs_kenmerk_inlijst,1) = 1"
                  + "   AND BITAND(k.prs_kenmerk_systeem,4) = 0"  // niet als vertrouwelijk
                  + "   AND k.prs_kenmerk_niveau='C'"
                  + "   AND k.prs_kenmerk_verwijder IS NULL"
                  + "   AND km.prs_kenmerklink_verwijder IS NULL) flex"
                : "")
              + "  FROM alg_locatie l"
              + "     , prs_contactpersoon cp"
              + "     , prs_contactpersoon_locatie n"
              + "     , prs_bedrijf b"
              + (bld_key > 0
                ? "   , alg_gebouw g"
                : "")
              + " WHERE n.alg_locatie_key = l.alg_locatie_key(+)"
              + (bld_key > 0
                ? " AND l.alg_locatie_key = g.alg_locatie_key(+)"
                : "")
              + "   AND b.prs_bedrijf_key = cp.prs_bedrijf_key"
              + "   AND b.prs_bedrijf_verwijder IS NULL"
              + "   AND cp.prs_contactpersoon_key = n.prs_contactpersoon_key(+)"
              + "   AND cp.prs_contactpersoon_verwijder IS NULL";

      if (bedrijf_key > 0)
        sql += "    AND b.prs_bedrijf_key = " + bedrijf_key;

      if (user.iamContact()) // een stukje autorisatie, als ik contactpersoon ben dan moet ik het ook van dit bedrijf zijn
        sql += "    AND b.prs_bedrijf_key IN"
            +  "  (SELECT prs_bedrijf_key"
            +  "                   FROM prs_contactpersoon"
            +  "                  WHERE prs_perslid_key = " + user_key
            +  "                    AND prs_contactpersoon_verwijder IS NULL)";

      if (!search)
      {
        if (intern)
          sql += "  AND b.prs_bedrijf_intern IS NOT NULL";
        else
          sql += "  AND (b.prs_bedrijf_intern IS NULL)";
      }

      if (contact_name)
        sql += " AND UPPER("+ S("prs_contactpers_string") +") LIKE " + safe.quoted_sql_wild("%" + contact_name + "%");

      if (loc_key > 0)
        sql += "    AND l.alg_locatie_key = " + loc_key;

      if (bld_key > 0)
        sql += "    AND g.alg_gebouw_key = " + bld_key;

      var ALGreadlevel = (authparams? authparams.ALGreadlevel : 9);
      if (ALGreadlevel > -1)
      { // Er is een scope-beperking van kracht
        sql += " AND l.alg_locatie_key IN "
             + "(SELECT alg_locatie_key FROM fac_v_my_locations "
             + "  WHERE prs_perslid_key = " + user_key
             + "    AND niveau = " + ALGreadlevel + ")";
      }

      // Nu filtercondities voor flexkenmerken toevoegen
      sql += getKenmerkSql("PRS", "cp.prs_contactpersoon_key");

      sql += " ORDER BY b.prs_bedrijf_naam_upper ASC"
           + (!search
             ? "      , l.alg_locatie_upper ASC"
             : "")
           + "        , cp.prs_contactpersoon_naam";
      function fnrowActionEnabler(oRs)
      {
        var eDelete = (!user.iamContact() || !oRs("prs_perslid_key").Value || deleteCp);
        var data = {eDelete: eDelete};
        return data;
      }

      function fncolFlexBijlagen(oRs)
      {
        var flexval = oRs("flex").Value;
        var bijlagen_aantal = 0;
        if (bijlageflex)
        {
            var cp_key = oRs("prs_contactpersoon_key").Value;
            var bijlagen_oms = "";
            var bijlagen_lijst = [];

            var sql = "SELECT k.prs_kenmerk_key, "
                    + lcl.xsql("k.prs_kenmerk_omschrijving", "k.prs_kenmerk_key")
                    + "     , CASE"
                    + "       WHEN BITAND(k.prs_kenmerk_inlijst,1) = 1"
                      + "     THEN 1"
                      + "     ELSE 0"
                    + "       END in_overzicht_tonen"
                    + "  FROM prs_kenmerk k"
                    + " WHERE k.prs_kenmerk_niveau='C'"
                    + "   AND k.prs_kenmerk_kenmerktype = 'M'"
                    + "   AND k.prs_kenmerk_verwijder IS NULL";
            var oRs_k = Oracle.Execute(sql);

            while (!oRs_k.eof)
            {
                if (oRs_k("in_overzicht_tonen").Value == 1)
                {
                    var kenmerk_key = oRs_k("prs_kenmerk_key").Value;
                    var bijlagen_oms = oRs_k("prs_kenmerk_omschrijving").Value;
                    var bestanden = flexProps("PRS", cp_key, kenmerk_key, "C", {getFiles: true});
                    var km_aantal = bestanden.files.length;
                    for (i=0; i<km_aantal; i++)
                    {
                        bijlagen_lijst.push(bestanden.files[i].name);
                    }
                    bijlagen_aantal += km_aantal;
                }
                oRs_k.MoveNext();
            }

            oRs_k.Close();
        }
        return (flexval ? safe.html(flexval.replace(/\r/g, "\n")+ "\n") : "")
             + ( bijlagen_aantal > 0
               ?   "<span title='" +  safe.htmlattr(bijlagen_lijst.join("\n"))  + "'>"
                 + safe.html(bijlagen_oms) + ": " + bijlagen_aantal
                 + "</span>"
               : ""
               );
      }



      var buttons = [];
      var addurl = "appl/prs/prs_contactpersoon.asp" + (bedrijf_key? "?bedrijf_key=" + bedrijf_key : "");
      if (canAdd)
      {
        buttons.push({ icon: "fa-fclt-refresh", title: L("lcl_refresh"), action: "FcltMgr.reload()" });
        buttons.push({ icon: "fa-plus", title: L("lcl_add"), action: "FcltMgr.openDetail('" + addurl + "', '" + safe.jsstring(L("lcl_add")) + "')" });
      }

      var rst = new ResultsetTable({ sql: sql,
                                     keyColumn: "prs_contactpersoon_key",
                                     rowActionEnabler: fnrowActionEnabler,
                                     outputmode: outputmode,
                                     ID: "contacttable",
                                     buttons: buttons,
                                     roundtripCode: (canImport ? "CONTACTPERSOON" : ""),
                                     showAll: showall,
                                     title: L("lcl_prs_companies_contact_title"),
                                     flexModule: "PRS",
                                     flexId: "prs_contactpersoon_key",
                                     filterParams: params
                                   });

      if (search || bedrijf_key == -1)
        rst.addColumn(new Column({caption: L("lcl_prs_companies_name"), content: "prs_bedrijf_naam"}));
      rst.addColumn(new Column({caption: L("lcl_location"), content: "alg_locatie_omschrijving"}));
      rst.addColumn(new Column({caption: L("lcl_prs_companies_contact_naam"), content: "PRS_CONTACTPERSOON_NAAM"})); //TODO totale naam als in oude situatie?
      rst.addColumn(new Column({caption: L("lcl_prs_companies_contact_functie"), content: "prs_contactpersoon_functie"}));
      rst.addColumn(new Column({caption: L("lcl_prs_companies_contact_tel1"), content: "prs_contactpersoon_telefoon_1"}));
      rst.addColumn(new Column({caption: L("lcl_prs_companies_contact_tel2"), content: "prs_contactpersoon_telefoon_2"}));
      rst.addColumn(new Column({caption: L("lcl_prs_companies_contact_fax1"), content: "prs_contactpersoon_fax"}));
      rst.addColumn(new Column({caption: L("lcl_prs_companies_contact_email"), content: "prs_contactpersoon_email"}));
      if (anyflex)
      {
        rst.addColumn(new Column({caption: flexlabel, content: fncolFlexBijlagen, colName: "fncolFlexBijlagen" }));
      }

      rst.addAction({ action: "contactPersoonEdit", caption: L("lcl_edit"), isDefault: true});
      if (canAdd)
        rst.addAction({ action: "contactPersoonDelete", enabler: "eDelete", caption: L("lcl_delete")});

      rst.processResultset();
%>
    </body>
  </html>
<%
}
%>