<% /*
    $Revision$
    $Id$

    File:           res/res_flexkenmerk_art.inc
    Description:    Functie die html code genereert voor de presentatie van de flexvelden van reserveringsartikelen
    Parameters:     reado                Readonly
                    advanced             Geadvanceerd

    Context:        Functie wordt aangeroepen door
                    1) res_cat.inc

    Note:           We ondersteunen ook reserverings kenmerken bij een rsv_ruimte.
*/ %>
<!-- #include file="../Shared/kenmerk_common.inc" -->
<%
function generateFlexKenmerkCodeArt(params)
{
  var rsv_artikel_key = params.rsv_artikel_key? params.rsv_artikel_key : -1; // res_rsv_artikel_key
  var artikel_key = params.artikel_key? params.artikel_key : -1; // artikel_key
  var discipline_key = params.discipline_key;
  var inline = params.inline || false; // Inline
  var reado = params.reado; // Readonly
  var rownum = params.rownum; // Regel nummer (Artikel)
  var requiredbyfield = params.requiredbyfield; // required flexkenmerken is alleen required als veld met name=requiredbyfield is ingevuld

  var my_resrechten = user.func_enabled2("RES", {ins_discipline_key: discipline_key}); // res.func_enabled(rsv_ruimte_key) is overkill?

  function isReadonly (oRs)
  {
    // Als meegegeven dan altijd readonly
    if (reado)
      return true;

    var rolcode = oRs("kenmerk_rolcode").value;
    var canWrite = ( ((rolcode&1) && !params.readofe)
                  || ((rolcode&2) && my_resrechten.canWrite("WEB_RESFOF"))
                  || ((rolcode&4) && my_resrechten.canWrite("WEB_RESBOF")));

    return !canWrite;
  }

  var myreadrolcode = 0
  // Wat mag ik op  basis van mijn autorisatie (potentieel) zien, bepaal mijn rolcode-masker
  // Met WEB_RESBAC mag ik alles zien
  if (my_resrechten.canRead("WEB_RESBAC")) {
    myreadrolcode = 7;
  } else {
    myreadrolcode = 0 + (my_resrechten.canRead("WEB_RESUSE") ? 1 : 0)
                      + (my_resrechten.canRead("WEB_RESFOF") ? 2 : 0)
                      + (my_resrechten.canRead("WEB_RESBOF") ? 4 : 0);
  }

  // Voor *nieuwe* reserveringen negeren we RESBOF nog even.
  // Omdat we (meestal) nog geen catalogus/discipline hebben op dit moment zie je anders
  // als je maar *ergens* RESBOF voor hebt al te veel kenmerken
  if (rsv_ruimte_key < 0 && !params.advanced)  // kennelijk niet bij zoeken
    myreadrolcode = myreadrolcode - 4;

  var sql = "SELECT k.res_kenmerk_key                  kenmerk_key"
          + "     , 1                                  kenmerk_key_count"
          + "     , sk.res_srtkenmerk_key               srtkenmerk_key"
          + "     , COALESCE (" + lcl.xsql("k.res_kenmerk_omschrijving", "k.res_kenmerk_key")
          + "              ,  " + lcl.xsql("sk.res_srtkenmerk_omschrijving", "sk.res_srtkenmerk_key") + ") kenmerk_omschrijving"
          + "     , sk.res_srtkenmerk_kenmerktype      kenmerk_kenmerktype"
          + "     , sk.fac_kenmerkdomein_key           kenmerkdomein_key"
          + "     , sk.res_srtkenmerk_lengte           kenmerk_lengte"
          + "     , sk.res_srtkenmerk_dec              kenmerk_dec"
          + "     , sk.res_srtkenmerk_nmin             kenmerk_nmin"
          + "     , sk.res_srtkenmerk_nmax             kenmerk_nmax"
          + "     , sk.res_srtkenmerk_systeem          kenmerk_systeem"
          + (rsv_artikel_key > 0
            ? "   , (SELECT MAX(CASE WHEN sk.res_srtkenmerk_kenmerktype = 'M'"
              + "                    THEN NULL"
              + "                    ELSE v.res_kenmerkartikel_waarde"
              + "                    END)"
              + "      FROM res_kenmerkartikel v "
              + "      WHERE v.res_rsv_artikel_key = " + rsv_artikel_key
              + "      AND v.res_kenmerk_key = k.res_kenmerk_key"
              + "      AND v.res_kenmerkartikel_verwijder IS NULL)"
            : "   , " + lcl.xsql("k.res_kenmerk_default", "k.res_kenmerk_key")) + " kenmerk_waarde"
          + "     , k.res_kenmerk_volgnummer           kenmerk_volgnr"
          + "     , k.res_kenmerk_rolcode              kenmerk_rolcode"
          + "     , " + lcl.xsql("sk.res_srtkenmerk_dimensie", "k.res_kenmerk_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_show_expr         	 kenmerk_show_expr "
          + "     , 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"
          + "     , k.fac_functie_key"
          + "  FROM res_kenmerk k "
          + "     , res_srtkenmerk sk"
          + " WHERE k.res_srtkenmerk_key = sk.res_srtkenmerk_key"
          + "   AND k.res_kenmerk_verwijder IS NULL"
          + "   AND sk.res_srtkenmerk_verwijder IS NULL"
          + "   AND BITAND(k.res_kenmerk_rolcode, " + myreadrolcode + ") > 0 "
          + "   AND (k.res_artikel_key = " + artikel_key + " OR k.res_discipline_key = " + discipline_key + ")"
          + " ORDER BY k.res_kenmerk_volgnummer"
          + "        , UPPER( COALESCE (" + lcl.xsql("k.res_kenmerk_omschrijving", "k.res_kenmerk_key")
          + "                        ,  " + lcl.xsql("sk.res_srtkenmerk_omschrijving", "sk.res_srtkenmerk_key") + "))";
  var nameprefix = "art" + artikel_key + "_" + rsv_artikel_key + "_";
  if (artikel_key < 0 || rsv_artikel_key < 0)
      nameprefix = nameprefix.replace("-", "_");

  listKenmerk(sql,
              "RES", // Module
              rsv_artikel_key,
              {
                kenmerk_search: false,
                defaults: params.defaults,
                inline: inline,
                fnIsReadonly: isReadonly,
                hideVervallen: rsv_artikel_key < 0,
                parentKey: rsv_artikel_key,
                nameprefix: nameprefix,
                extraserie: true,
                requiredbyfield: requiredbyfield, // Aan dit veld de onChange="checkRequiredGroup('10S< %=artikel_key% >');"> toevoegen.
                requiredbyemptyval: 0,
                serie: artikel_key // Het serie nummer (onderscheid tussen artikelen). Nodig voor requiredbyfield verplichte kenmerken.
              }
             );
} %>
