<% /*
    $Revision$
    $Id$

    File:           bez/bez_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)
                    reado                Readonly
                    advanced             Geadvanceerd
    Context:        Functie wordt aangeroepen door
                    1) load_kenmerk.asp
                    2) bez_edit_xxx.asp die initieel serverside deze html code invoegd.
    Note:           We ondersteunen vooralsnog geen *afspraak* kenmerken maar alleen per bezoeker.
*/ %>
<!-- #include file="../Shared/kenmerk_common.inc" -->
<%
function getSqlBezFlex(bez_key, filter)
{
    var filter = filter || [];
    // het filter geeft optioneel extra condities, voorheen bv op basis van het volgnummer
    // ik vermoed dat dat eigenlijk niet altijd meer nodig is als we hier de autorisatiecontrole 
    // sowieso doen maar dat laten we nog maar even intact.

     // Wat mag ik op  basis van mijn autorisatie (potentieel) zien, bepaal mijn rolcode-masker
    var myreadrolcode = 0 + (user.has("WEB_BEZUSE") ? 1 : 0)
                          + (user.has("WEB_BEZFOF") ? 2 : 0)
                          + (user.has("WEB_BEZBOF") ? 4 : 0);
 
    var sql = "SELECT k.bez_kenmerk_key              kenmerk_key"
             + "     , 1                              kenmerk_key_count"
             + "     , NULL                           srtkenmerk_key"
             + "     , " + lcl.xsql("k.bez_kenmerk_omschrijving", "k.bez_kenmerk_key") + " kenmerk_omschrijving"
             + "     , k.bez_kenmerk_kenmerktype      kenmerk_kenmerktype"
             + "     , k.fac_kenmerkdomein_key        kenmerkdomein_key"
             + "     , k.bez_kenmerk_lengte           kenmerk_lengte"
             + "     , k.bez_kenmerk_dec              kenmerk_dec"
             + "     , k.bez_kenmerk_nmin             kenmerk_nmin"
             + "     , k.bez_kenmerk_nmax             kenmerk_nmax"
             + "     , k.bez_kenmerk_systeem          kenmerk_systeem"
             + (bez_key > 0
               ? "   , (SELECT MAX(CASE WHEN k.bez_kenmerk_kenmerktype = 'M'"
                 + "                    THEN NULL"
                 + "                    ELSE v.bez_kenmerkwaarde_waarde"
                 + "                    END)"
                 + "      FROM bez_kenmerkwaarde v "
                 + "      WHERE v.bez_bezoekers_key = " + bez_key
                 + "      AND v.bez_kenmerk_key = k.bez_kenmerk_key"
                 + "      AND v.bez_kenmerkwaarde_verwijder IS NULL)"
               : "   , " + lcl.xsql("k.bez_kenmerk_default", "k.bez_kenmerk_key")
               ) + "                                    kenmerk_waarde"
             + "     , k.bez_kenmerk_volgnr           kenmerk_volgnr"
             + "     , k.bez_kenmerk_rolcode          kenmerk_rolcode"
             + "     , " + lcl.xsql("k.bez_kenmerk_dimensie", "k.bez_kenmerk_key") + " kenmerk_dimensie"
             + "     , " + lcl.xsql("k.bez_kenmerk_hint", "k.bez_kenmerk_key") + " kenmerk_hint"
             + "     , " + lcl.xsql("k.bez_kenmerk_default", "k.bez_kenmerk_key") + " kenmerk_default"
             + "     , k.bez_kenmerk_show_expr         	  kenmerk_show_expr"
             + "     , k.bez_kenmerk_verplicht        kenmerk_verplicht"
             + "     , k.bez_kenmerk_groep            kenmerk_groep"
             + "     , NULL otherpath"
             + "     , k.bez_kenmerk_toonbaar         kenmerk_toonbaar"
             + "     , k.bez_kenmerk_uniek            kenmerk_uniek"
             + "     , k.bez_kenmerk_regexp           kenmerk_regexp"
             + "     , k.fac_functie_key"
             + "  FROM bez_kenmerk k "
             + " WHERE k.bez_kenmerk_verwijder IS NULL "
             + "   AND BITAND(bez_kenmerk_rolcode, " + myreadrolcode + ") > 0 "
             + (filter.length > 0 ? " AND " + filter.join(" AND ") : "")
             + " ORDER BY k.bez_kenmerk_volgnr"
             + "        , " + lcl.xsql("k.bez_kenmerk_omschrijving", "k.bez_kenmerk_key");
    return sql;
}

function generateFlexKenmerkCode(params)
{
  var bez_key = params.bez_key? params.bez_key : -1; // bez_bezoekers_key
  var reado = params.reado; // Readonly
  var advanced = params.advanced; // Geavanceerd
  var prs_key = (params.prs_key? params.prs_key : -1); // Perslid key
  var cont_key = (params.cont_key? params.cont_key : -1); // Contactpersoon key
  var beznum = params.beznum; // Bezoeker nummer
  var requiredbyfield = params.requiredbyfield; // required flexkenmerken is alleen required als veld met name=requiredbyfield is ingevuld
  var flexstart = params.flexstart;
  var flexend = params.flexend;
  var notr = params.notr;
  var ispopup = params.ispopup;
  var nolabel = params.nolabel;
  var tmpfolder = params.tmpfolder;
  var filter = params.filter;
  var hidedefault = params.hidedefault;  // Afhandelingskenmerken >= 900 (rolcode&4) met een default waarde hidden maken.
  var hasfilter = params.hasfilter? params.hasfilter : null;

  function isReadonly (oRs)
  { 
    if (reado)
      return true;
    
    // Backo mag kenmerken < 900 wel zien maar niet wijzigen. 
    // Kenmerken > 900 mag hij wel wijzigen.
    // Dus ze worden readonly als ..
    // Dit kan logischer en beter: het is in feite als ik geen andere rechten heb enzo.
    //
    // Ik zou denken:  var my_bezrechten = user.func_enabled("BEZ") en dan de SCHRIJFrechten van de verschillende autorisaties
    // matchen met de kenmerk_rolcode. De bestaande aanpak was echter: als ik geen BEZFOF ben ik dus BEZBOF(-only)
    // en dan moeten de kenmerken 0xx readonly worden..in de popup.. Enfin, dat stond al in DJIN#37247
    // De specifieke intentie is hier dan: als je in De Binnenmeld-popup bent (impliceert al BEZBOF)
    // dan mag je de niet-binnenmeld-kenmerken niet invullen, dus die maak je readonly

    var rolcode = oRs("kenmerk_rolcode").value;

    var backo = !user.has("WEB_BEZFOF") && user.has("WEB_BEZBOF");
    // dit zou toch genoeg mogen zijn.. var backo = user.has("WEB_BEZBOF");
    return (ispopup && backo && !(rolcode&4) ) // vroeger volgnummmer < 900
  }

  function isHidden (rolcode, defaultval)
  { 
    // Afhandelingskenmerken met een default waarde hidden opnemen in het scherm
    // zodat ze wel opgeslagen worden (kenmerken >= 900 en default is niet null).
    return ((rolcode&4)==4 /*volgnummer >= 900*/ && defaultval != null);
  }

  var sql = getSqlBezFlex(bez_key, filter);

  listKenmerk(sql,
              "BEZ", // Module
              bez_key,
              {
                label_colspan: ((notr || ispopup) ? null : (params.mobile? 1 : (S("bez_sel_contactpersoon") > 0 || S("bez_sel_internpersoon")? 3 : 2)) ),
                kenmerk_search: advanced,
                fnIsReadonly: isReadonly,
                reado: reado,
                fnIsHidden: (hidedefault? isHidden : null),
                prs_key: prs_key, // Wordt alleen gebruikt als geldt (!kenmerk_search && !multiMode)
                cont_key: cont_key, // Wordt alleen gebruikt als geldt (!kenmerk_search && !multiMode)
                parentKey: bez_key,
                hideVervallen: bez_key < 0,
                nameprefix: "flex" + beznum + "_",
                mobile: params.mobile,
                requiredbyfield: requiredbyfield,
                serie: beznum, // Het serie nummer (onderscheid tussen bezoekers) voor dezelfde serie flexkenmerken
                extraserie: true,
                flexstart: flexstart,
                flexend: flexend,
                notr: notr,
                nolabel: nolabel,
                tmpfolder: tmpfolder,
                noblock: params.noblock,
                inline: params.inline,
                hasfilter: hasfilter
              }
             );
   }
%>

