<% /*
     $Revision$
     $Id$

     File:               RES/res_flexkenmerk.inc
     Description:        Functie die html code genereert voor de presentatie van de flexvelden
     Parameters:         urole                Rol van de gebruiker (frontend, frontoffice, backoffice, management info)
                         act_key              Activiteit
                         act_change           Activiteit is gewijzigd
                         reado                Readonly
                         flexcolumns          aantal kolommen voor flexkenmerken
                         advanced             Geadvanceerd
                         reqId                Perslid key
                         defaults             { bsn: "12345678", plaats: "Enschede", postcode:"1234AB" } altijd lowercase namen
     Context:            Functie wordt aangeroepen door
                         1) res/load_kenmerk.asp
                         2) res/res_edit_rsv_ruimte.asp die initieel serverside deze html code invoegd.
     Note:
*/ %>
<!-- #include file="../Shared/kenmerk_common.inc" -->
<%
function generateFlexKenmerkBlock(params)
{
    if (!params.fnpre) // Mobile geeft die zelf mee
    {
        if (params.advanced)
        {
            params.fnpre = function () { BLOCK_START("resAdvancedFlex"); };
            params.fnpost = BLOCK_END;
        }
        else
        {
            params.fnpre = function () { BLOCK_START( "resFlex"+(S("res_flexcolumns")!=1?"2":"")
                                                    , L("lcl_res_flexblok")
                                                    , null
                                                    , params.hide
                                                    );
                                       };
            params.fnpost = BLOCK_END;
        }
    }

      var urole = params.urole;
      var fronto = (urole == "fo");
      var backo = (urole == "bo");
      var minfo = (urole == "mi");
      var frontend = (urole == "fe" || (!fronto & !backo & !minfo));

      var act_key = params.act_key; // Activiteit key
      var act_change = params.act_change; // Activiteit is gewijzigd
      var rsv_ruimte_key = params.rsv_ruimte_key; // Rsv ruimte key
      var serie = params.serie; // Serie reservering
      var reado = params.reado; // Readonly
      var readofe = params.readofe;
      var flexcolumns = params.flexcolumns;
      var advanced = params.advanced; // Geavanceerd
      var reqId = params.reqId; // Perslid key (!search && multiMode)

      var autfunction = "";
      switch(urole)
      {
        case "fe": autfunction = "WEB_RESUSE";
                   break;
        case "fo": autfunction = "WEB_RESFOF";
                   break;
        case "bo": autfunction = "WEB_RESBOF";
                   break;
        case "mi": autfunction = "WEB_RESBAC";
                   break;
      }

      // De functie checkAutorisation(autfunction) geeft een Response.End indien er geen autorisatie voor autfunction wordt gevonden
      var authparams = user.checkAutorisation(autfunction);

      disc_key_arr = [];
      var discs = "SELECT DISTINCT ra.res_discipline_key"
                + "  FROM res_rsv_artikel rra"
                + "     , res_artikel ra"
                + " WHERE rra.res_artikel_key = ra.res_artikel_key"
                + "   AND rra.res_rsv_ruimte_key = " + rsv_ruimte_key
                + " UNION " // geen dubbelen nodig
                + "SELECT rd.res_discipline_key"
                + "  FROM res_deel rd"
                + "     , res_rsv_deel rrd"
                + " WHERE rd.res_deel_key = rrd.res_deel_key"
                + "   AND rd.res_discipline_key <> " + S("vis_parking_key") // Een gereserveerde parkeerplaats moet ik niet toevoegen.
                + "   AND rrd.res_rsv_ruimte_key = " + rsv_ruimte_key
                + " UNION " // geen dubbelen nodig
                + "SELECT rr.res_discipline_key"
                + "  FROM res_ruimte rr"
                + "     , res_ruimte_opstelling ro"
                + "     , res_rsv_ruimte rrr"
                + " WHERE rr.res_ruimte_key = ro.res_ruimte_key"
                + "   AND ro.res_ruimte_opstel_key = rrr.res_ruimte_opstel_key"
                + "   AND rrr.res_rsv_ruimte_key = " + rsv_ruimte_key;
      var oRs = Oracle.Execute(discs);
      while (!oRs.eof)
      {
        // Dicipline toevoegen
        disc_key_arr.push(oRs("res_discipline_key").Value);
        oRs.MoveNext();
      }
      oRs.Close();
      var my_resrechten = user.func_enabled2("RES", {ins_discipline_key: disc_key_arr.join(",")}); // res.func_enabled(rsv_ruimte_key) is overkill?

      function isReadonly (volgnummer)
      { // Mag ik de kenmerken wijzigen?
        if (reado) return true;  // Als meegegeven dan altijd readonly

        if (volgnummer < 100) // FO && BO altijd, FE alleen buiten de expire-tijden
        {
          if (my_resrechten.canWrite("WEB_RESFOF") || my_resrechten.canWrite("WEB_RESBOF"))
            return false; // die mogen altijd

          return readofe; // als ik via de FE-uitzondering binnen ben wordt <100 readonly
        }
        else if (volgnummer >= 100 && volgnummer <= 800) // FE && FO && BO
        {
          return false; // Zonder FE||FO||BO was je hier echt nooit gekomen
        }
        else if (volgnummer > 800 && volgnummer < 900) // FO
          return !my_resrechten.canWrite("WEB_RESFOF");
        else if (volgnummer == 900) // FO && BO
          return !my_resrechten.canWrite("WEB_RESFOF") && !my_resrechten.canWrite("WEB_RESBOF");
        else if (volgnummer > 900) // BO
          return !my_resrechten.canWrite("WEB_RESBOF");
      }

      if (act_change)
        sql_waarde = " (SELECT v.res_kenmerkreservering_waarde"
                   + " FROM res_kenmerkwaarde v"
                   + "    , res_kenmerk vk"
                   + " WHERE v.res_rsv_ruimte_key = " + rsv_ruimte_key
                   + "   AND v.res_kenmerk_key = vk.res_kenmerk_key"
                   + "   AND vk.res_srtkenmerk_key = k.res_srtkenmerk_key"
                   // Ik kan een flexkenmerk twee keer aanmaken onder een ander groep. Dan is res_srtkenmerk_key niet meer uniek. Daarom goep ook meenemen.
                   + "   AND vk.res_kenmerk_groep = k.res_kenmerk_groep"
                   + "   AND vk.res_kenmerk_key = v.res_kenmerk_key"
                   + "   AND v.res_kenmerkwaarde_verwijder IS NULL)";
      else
        sql_waarde = " (SELECT v.res_kenmerkreservering_waarde"
                   + " FROM res_kenmerkwaarde v"
                   + " WHERE v.res_rsv_ruimte_key = " + rsv_ruimte_key
                   + "   AND v.res_kenmerk_key = k.res_kenmerk_key" // res_kenmerk_key is uniek
                   + "   AND v.res_kenmerkwaarde_verwijder IS NULL)";


      sql = "SELECT k.res_kenmerk_key                 kenmerk_key, "
          + lcl.xsql('t.res_srtkenmerk_omschrijving', 't.res_srtkenmerk_key') +" kenmerk_omschrijving, "
          + " t.res_srtkenmerk_kenmerktype            kenmerk_kenmerktype, "
          + " t.fac_kenmerkdomein_key                 kenmerkdomein_key, "
          + " t.res_srtkenmerk_lengte                 kenmerk_lengte, "
          + " t.res_srtkenmerk_dec                    kenmerk_dec, "
          + " t.res_srtkenmerk_nmin                   kenmerk_nmin, "
          + " t.res_srtkenmerk_nmax                   kenmerk_nmax, "
          + (rsv_ruimte_key > 0 && !serie
            ? sql_waarde
            : lcl.xsql('k.res_kenmerk_default', 'k.res_kenmerk_key')
               ) + "                                  kenmerk_waarde, "
          + " k.res_kenmerk_volgnummer                kenmerk_volgnr, "
          + lcl.xsql('t.res_srtkenmerk_dimensie', 't.res_srtkenmerk_key') + " kenmerk_dimensie, "
          + lcl.xsql('k.res_kenmerk_hint', 'k.res_kenmerk_key') + " kenmerk_hint, "
          + lcl.xsql('k.res_kenmerk_default', 'k.res_kenmerk_key') + " kenmerk_default, "
          + " k.res_kenmerk_verplicht                 kenmerk_verplicht, "
          + " k.res_kenmerk_groep                     kenmerk_groep, "
          + " NULL otherpath, "
          + " k.res_kenmerk_toonbaar                  kenmerk_toonbaar,"
          + " k.res_kenmerk_uniek                     kenmerk_uniek,"
          + " k.res_kenmerk_regexp                    kenmerk_regexp"
          + " FROM res_srtkenmerk t"
          + ", res_kenmerk k"
          + ", res_activiteit s"
          + " WHERE s.res_activiteit_key = " + act_key
          + " AND (k.res_activiteit_key = s.res_activiteit_key"
          + " AND k.res_kenmerk_niveau = 'A')"
          + " AND k.res_kenmerk_verwijder IS NULL"
          + " AND k.res_srtkenmerk_key = t.res_srtkenmerk_key"
          + " AND t.res_srtkenmerk_verwijder IS NULL";

      // Voor *nieuwe* reserveringen negeren we RESBAC en RESBOF nog even.
      // Omdat we (meestal) nog geen catalogus/discipline hebben op dit moment zie je anders
      // als je maar *ergens* RESBAC of RESBOF al te veel kenmerken
      if (!my_resrechten.canRead("WEB_RESBAC") || (rsv_ruimte_key < 0 && !params.advanced))
      { // Ik heb geen RESBAC rechten
        // Dan mag ik alleen nog met RESBOF rechten reservering flexkenmerken boven de 900 zien.
        if (!my_resrechten.canRead("WEB_RESBOF") || (rsv_ruimte_key < 0 && !params.advanced))
        { // Ik heb geen RESBOF rechten
          // Dan mag ik alleen nog met RESFOF rechten reservering flexkenmerken tussen de 800 en de 900 zien.
          if (!my_resrechten.canRead("WEB_RESFOF"))
          { // Ik heb geen RESFOF rechten.
            // Dan mag ik alleen nog met RESUSE rechten reservering flexkenmerken onder de 800 zien.
            if (!my_resrechten.canRead("WEB_RESUSE"))
              // Ik mag geen enkel kenmerk zien.
              sql += " AND 1 = 0"; // Ik mag geen enkel kenmerk zien.
            else
              // Met WEB_RESUSErechten mag ik kenmerken <=800 zien.
              sql += " AND (k.res_kenmerk_volgnummer <= 800)";
          }
          else
            // Ik heb RESFOF rechten
            sql += " AND k.res_kenmerk_volgnummer <= 900";
        }
      }

      sql += " ORDER BY k.res_kenmerk_volgnummer"
          + ", UPPER(" + lcl.xsql('t.res_srtkenmerk_omschrijving', 't.res_srtkenmerk_key') + ")";

      var trn = 0;

      listKenmerk(sql,
                  "RES",
                  rsv_ruimte_key,
                  { flexcolumns: flexcolumns,
                    kenmerk_search: advanced,
                    defaults: params.defaults,
                    fnIsReadonly: isReadonly,
                    fnpre: params.fnpre,
                    fnpost: params.fnpost,
                    mobile: params.mobile,
                    hideVervallen: rsv_ruimte_key<0,
                    parentKey: rsv_ruimte_key }
                 );
} %>
