<% /*
    $Revision$
    $Id$

    File:           resultset_flex.inc
    Description:    Functies die zorgen voor het printen van de flexkenmerken
                    in de printafdukken naar de printer, excel enz.
    Note:           Vooralsnog doen we alleen bij PRS (rudimentaire) autorisatiecontrole
*/ %>

<%

function getSqlFlex(flexModule, flexId, flexParams)
{
  switch(flexModule)
  {
     case "ALG": { sql_alg_kenmerkalg = "SELECT ak.alg_kenmerk_key"
                                      + ", a." + flexId // alg_district_key, alg_locatie_key, alg_gebouw_key, alg_terrein_key, alg_ruimte_key
                                      + ", (SELECT alg_onrgoedkenmerk_waarde"
                                      + " FROM alg_onrgoedkenmerk aok"
                                      + " WHERE aok.alg_onrgoed_key = a." + flexId // alg_district_key, alg_locatie_key, alg_gebouw_key, alg_terrein_key, alg_ruimte_key
                                      + " AND aok.alg_kenmerk_key = ak.alg_kenmerk_key"
                                      + " AND aok.alg_onrgoedkenmerk_verwijder IS NULL) alg_onrgoedkenmerk_waarde"
                                      + " FROM " + flexId.replace(/_key/g, "") + " a" // alg_district, alg_locatie, alg_gebouw, alg_terrein, alg_ruimte
                                      + ", alg_kenmerk ak"
                                      + " WHERE ak.alg_kenmerk_verwijder IS NULL";

                   sqlFlex = "SELECT "+lcl.xsql('k.alg_kenmerk_omschrijving', 'k.alg_kenmerk_key') +" omschrijving"
                            + ", ka." + flexId + " flexparentkey" // alg_district_key, alg_locatie_key, alg_gebouw_key, alg_terrein_key, alg_ruimte_key
                            + ", k.alg_kenmerk_key kenmerk_key"
                            + ", CASE"
                              + " WHEN k.alg_kenmerk_kenmerktype = 'R' OR k.alg_kenmerk_kenmerktype = 'S'"
                              + " THEN FAC.getdomeinwaarde(k.fac_kenmerkdomein_key, ka.alg_onrgoedkenmerk_waarde)"
                              + " WHEN k.alg_kenmerk_kenmerktype = 'D'"
                              + " THEN TO_CHAR(fac.safe_To_Date(ka.alg_onrgoedkenmerk_waarde, 'DD-MM-YYYY'), 'DD-MM-YYYY')"
                              + " ELSE ka.alg_onrgoedkenmerk_waarde"
                              + " END waarde"
                            + ", k.alg_kenmerk_kenmerktype kenmerktype"
                            + ", k.alg_kenmerk_nmin nmin"
                            + ", k.alg_kenmerk_nmax nmax"
                            + ", k.alg_kenmerk_volgnr volgnummer"
                            + ", " + lcl.xsql('k.alg_kenmerk_dimensie', 'k.alg_kenmerk_key') +" dimensie"
                            + ", k.alg_kenmerk_dec decimalen"
                            + ", k.alg_kenmerk_niveau niveau"
                            + " FROM (" + sql_alg_kenmerkalg + ") ka" // alg_kenmerk_key / alg_gebouw_key / alg_onrgoedkenmerk_waarde inclusief lege waarden
                            + ", alg_kenmerk k"
                            + " WHERE ka.alg_kenmerk_key = k.alg_kenmerk_key"
                            + " AND k.alg_kenmerk_verwijder IS NULL"
                            + " AND k.alg_kenmerk_niveau = " + safe.quoted_sql_upper(flexId.substr(4,1)) // D (District), L (Locatie), G (Gebouw), T (Terreinsector) en R (Ruimte).
                            + (!flexParams.readman? " AND alg_kenmerk_volgnr >= 100":"")
                            + (!flexParams.readuse? " AND alg_kenmerk_volgnr <= 100":"");

                   break;
                 }
    case "BES":  { sql_srtbes_kenmerkbes = "SELECT DISTINCT bk.bes_kenmerk_key" // Distinct i.v.m. meerdere item per bestelling
                                         + ", b.bes_bestelling_key"
                                         + ", (SELECT bes_kenmerkbestell_waarde"
                                         + " FROM bes_kenmerkbestell bkb"
                                         + " WHERE bkb.bes_bestelling_key = b.bes_bestelling_key"
                                         + " AND bkb.bes_kenmerk_key = bk.bes_kenmerk_key"
                                         + " AND bkb.bes_kenmerkbestell_verwijder IS NULL) bes_kenmerkbestell_waarde"
                                         + ", isg.ins_discipline_key"
                                         + " FROM bes_bestelling b"
                                         + ", bes_bestelling_item bi"
                                         + ", bes_srtdeel isd"
                                         + ", bes_srtgroep isg"
                                         + ", bes_kenmerk bk"
                                         + ", bes_srtkenmerk bsk"
                                         + " WHERE b.bes_bestelling_key = bi.bes_bestelling_key"
                                         + " AND bi.bes_srtdeel_key = isd.bes_srtdeel_key"
                                         + " AND isd.bes_srtgroep_key = isg.bes_srtgroep_key"
                                         + " AND isg.ins_discipline_key = bk.bes_srtinstallatie_key"
                                         + " AND bk.bes_srtkenmerk_key = bsk.bes_srtkenmerk_key"
                                         + " AND bk.bes_kenmerk_verwijder IS NULL"
                                         + " AND bk.bes_kenmerk_type = 'B'"
                                         + " AND bk.bes_kenmerk_niveau = 'D'"
                                         + " AND bsk.bes_srtkenmerk_verwijder IS NULL";

                   sqlFlex = "SELECT "+lcl.xsql('sk.bes_srtkenmerk_omschrijving', 'sk.bes_srtkenmerk_key') +" omschrijving"
                            + ", kb.bes_bestelling_key flexparentkey"
                            + ", k.bes_kenmerk_key kenmerk_key"
                            + ", CASE"
                              + " WHEN sk.bes_srtkenmerk_kenmerktype = 'R' OR sk.bes_srtkenmerk_kenmerktype = 'S'"
                              + " THEN FAC.getdomeinwaarde(sk.fac_kenmerkdomein_key, kb.bes_kenmerkbestell_waarde)"
                              + " WHEN sk.bes_srtkenmerk_kenmerktype = 'D'"
                              + " THEN TO_CHAR(fac.safe_To_Date(kb.bes_kenmerkbestell_waarde, 'DD-MM-YYYY'), 'DD-MM-YYYY')"
                              + " ELSE kb.bes_kenmerkbestell_waarde"
                              + " END waarde"
                            + ", sk.bes_srtkenmerk_kenmerktype kenmerktype"
                            + ", sk.bes_srtkenmerk_nmin nmin"
                            + ", sk.bes_srtkenmerk_nmax nmax"
                            + ", k.bes_kenmerk_volgnummer volgnummer"
                            + ", " + lcl.xsql('sk.bes_srtkenmerk_dimensie', 'sk.bes_srtkenmerk_key') +" dimensie"
                            + ", sk.bes_srtkenmerk_dec decimalen"
                            + ", k.bes_kenmerk_niveau niveau"
                            + " FROM bes_srtkenmerk sk"
                            + ", (" + sql_srtbes_kenmerkbes + ") kb" // bes_kenmerk_key / bes_bestelling_key / bes_kenmerkbestell_waarde inclusief lege waarden
                            + ", bes_kenmerk k"
                            + " WHERE sk.bes_srtkenmerk_key = k.bes_srtkenmerk_key"
                            + " AND kb.bes_kenmerk_key = k.bes_kenmerk_key"
                            + " AND sk.bes_srtkenmerk_verwijder IS NULL";

                   break;
                 }
    case "BEZ":  { sql_bez_kenmerkbez = "SELECT bk.bez_kenmerk_key"
                                      + ", b.bez_bezoekers_key"
                                      + ", (SELECT bez_kenmerkwaarde_waarde"
                                      + " FROM bez_kenmerkwaarde bkw"
                                      + " WHERE bkw.bez_bezoekers_key = b.bez_bezoekers_key"
                                      + " AND bkw.bez_kenmerk_key = bk.bez_kenmerk_key"
                                      + " AND bkw.bez_kenmerkwaarde_verwijder IS NULL) bez_kenmerkwaarde_waarde"
                                      + " FROM bez_bezoekers b"
                                      + ", bez_kenmerk bk"
                                      + " WHERE bk.bez_kenmerk_verwijder IS NULL";

                   sqlFlex = "SELECT "+lcl.xsql('k.bez_kenmerk_omschrijving', 'k.bez_kenmerk_key') +" omschrijving"
                            + ", kb.bez_bezoekers_key flexparentkey"
                            + ", k.bez_kenmerk_key kenmerk_key"
                            + ", CASE"
                              + " WHEN k.bez_kenmerk_kenmerktype = 'R' OR k.bez_kenmerk_kenmerktype = 'S'"
                              + " THEN FAC.getdomeinwaarde(k.fac_kenmerkdomein_key, kb.bez_kenmerkwaarde_waarde)"
                              + " WHEN k.bez_kenmerk_kenmerktype = 'D'"
                              + " THEN TO_CHAR(fac.safe_To_Date(kb.bez_kenmerkwaarde_waarde, 'DD-MM-YYYY'), 'DD-MM-YYYY')"
                              + " ELSE kb.bez_kenmerkwaarde_waarde"
                              + " END waarde"
                            + ", k.bez_kenmerk_kenmerktype kenmerktype"
                            + ", k.bez_kenmerk_nmin nmin"
                            + ", k.bez_kenmerk_nmax nmax"
                            + ", k.bez_kenmerk_volgnr volgnummer"
                            + ", " + lcl.xsql('k.bez_kenmerk_dimensie', 'k.bez_kenmerk_key') +" dimensie"
                            + ", k.bez_kenmerk_dec decimalen"
                            + ", NULL niveau"
                            + " FROM (" + sql_bez_kenmerkbez + ") kb" // bez_kenmerk_key / bez_bezoekers_key / bez_kenmerkwaarde_waarde inclusief lege waarden
                            + ", bez_kenmerk k"
                            + " WHERE kb.bez_kenmerk_key = k.bez_kenmerk_key"
                            + " AND k.bez_kenmerk_verwijder IS NULL";

                   break;
                 }
    case "CNT":  { sql_srtcnt_kenmerkcnt = "SELECT ck.cnt_kenmerk_key"
                                         + ", c.cnt_contract_key"
                                         + ", (SELECT cnt_kenmerkcontract_waarde"
                                         + " FROM cnt_kenmerkcontract ckc"
                                         + " WHERE ckc.cnt_contract_key = c.cnt_contract_key"
                                         + " AND ckc.cnt_kenmerk_key = ck.cnt_kenmerk_key"
                                         + " AND ckc.cnt_kenmerkcontract_verwijder IS NULL) cnt_kenmerkcontract_waarde"
                                         + " FROM cnt_contract c"
                                         + ", cnt_discipline cd"
                                         + ", cnt_kenmerk ck"
                                         + ", cnt_srtkenmerk csk"
                                         + " WHERE c.ins_discipline_key = cd.ins_discipline_key"
                                         + " AND ck.cnt_srtcontract_key = cd.ins_discipline_key"
                                         + " AND ck.cnt_srtkenmerk_key = csk.cnt_srtkenmerk_key"
                                         + " AND ck.cnt_kenmerk_verwijder IS NULL"
                                         + " AND csk.cnt_srtkenmerk_verwijder IS NULL";

                   sqlFlex = "SELECT "+lcl.xsql('sk.cnt_srtkenmerk_omschrijving', 'sk.cnt_srtkenmerk_key') +" omschrijving"
                            + ", kc.cnt_contract_key flexparentkey"
                            + ", k.cnt_kenmerk_key kenmerk_key"
                            + ", CASE"
                              + " WHEN sk.cnt_srtkenmerk_kenmerktype = 'R' OR sk.cnt_srtkenmerk_kenmerktype = 'S'"
                              + " THEN FAC.getdomeinwaarde(sk.fac_kenmerkdomein_key, kc.cnt_kenmerkcontract_waarde)"
                              + " WHEN sk.cnt_srtkenmerk_kenmerktype = 'D'"
                              + " THEN TO_CHAR(fac.safe_To_Date(kc.cnt_kenmerkcontract_waarde, 'DD-MM-YYYY'), 'DD-MM-YYYY')"
                              + " ELSE kc.cnt_kenmerkcontract_waarde"
                              + " END waarde"
                            + ", sk.cnt_srtkenmerk_kenmerktype kenmerktype"
                            + ", sk.cnt_srtkenmerk_nmin nmin"
                            + ", sk.cnt_srtkenmerk_nmax nmax"
                            + ", k.cnt_kenmerk_volgnummer volgnummer"
                            + ", " + lcl.xsql('sk.cnt_srtkenmerk_dimensie', 'sk.cnt_srtkenmerk_key') +" dimensie"
                            + ", sk.cnt_srtkenmerk_dec decimalen"
                            + ", k.cnt_kenmerk_niveau niveau"
                            + " FROM cnt_srtkenmerk sk" // TODO: cnt_v_aanwezigsrtkenmerk bestaat niet
                            + ", (" + sql_srtcnt_kenmerkcnt + ") kc" // cnt_kenmerk_key / cnt_contract_key / cnt_kenmerkcontract_waarde inclusief lege waarden
                            + ", cnt_kenmerk k"
                            + " WHERE sk.cnt_srtkenmerk_key = k.cnt_srtkenmerk_key"
                            + " AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key"
                            + " AND sk.cnt_srtkenmerk_verwijder IS NULL";

                   break;
                 }
    case "FAQ":  { sql_faq_kenmerkfaq = "SELECT fk.faq_kenmerk_key"
                                      + ", f.fac_faq_key"
                                      + ", (SELECT faq_kenmerkwaarde_waarde"
                                      + " FROM faq_kenmerkwaarde fkw"
                                      + " WHERE fkw.fac_faq_key = f.fac_faq_key"
                                      + " AND fkw.faq_kenmerk_key = fk.faq_kenmerk_key"
                                      + " AND fkw.faq_kenmerkwaarde_verwijder IS NULL) faq_kenmerkwaarde_waarde"
                                      + " FROM fac_faq f"
                                      + ", faq_kenmerk fk"
                                      + " WHERE fk.faq_kenmerk_verwijder IS NULL";

                   sqlFlex = "SELECT "+lcl.xsql('k.faq_kenmerk_omschrijving', 'k.faq_kenmerk_key') +" omschrijving"
                            + ", kf.fac_faq_key flexparentkey"
                            + ", k.faq_kenmerk_key kenmerk_key"
                            + ", CASE"
                              + " WHEN k.faq_kenmerk_kenmerktype = 'R' OR k.faq_kenmerk_kenmerktype = 'S'"
                              + " THEN FAC.getdomeinwaarde(k.fac_kenmerkdomein_key, kf.faq_kenmerkwaarde_waarde)"
                              + " WHEN k.faq_kenmerk_kenmerktype = 'D'"
                              + " THEN TO_CHAR(fac.safe_To_Date(kf.faq_kenmerkwaarde_waarde, 'DD-MM-YYYY'), 'DD-MM-YYYY')"
                              + " ELSE kf.faq_kenmerkwaarde_waarde"
                              + " END waarde"
                            + ", k.faq_kenmerk_kenmerktype kenmerktype"
                            + ", k.faq_kenmerk_nmin nmin"
                            + ", k.faq_kenmerk_nmax nmax"
                            + ", k.faq_kenmerk_volgnr volgnummer"
                            + ", " + lcl.xsql('k.faq_kenmerk_dimensie', 'k.faq_kenmerk_key') +" dimensie"
                            + ", k.faq_kenmerk_dec decimalen"
                            + ", NULL niveau"
                            + " FROM (" + sql_faq_kenmerkfaq + ") kf" // faq_kenmerk_key / fac_faq_key / faq_kenmerkwaarde_waarde inclusief lege waarden
                            + ", faq_kenmerk k"
                            + " WHERE kf.faq_kenmerk_key = k.faq_kenmerk_key"
                            + " AND k.faq_kenmerk_verwijder IS NULL";

                   break;
                 }
    case "FIN":  { sql_fin_kenmerkfin = "SELECT fk.fin_kenmerk_key"
                                      + ", f.fin_factuur_key"
                                      + ", (SELECT fin_kenmerkfactuur_waarde"
                                      + " FROM fin_kenmerkfactuur fkf"
                                      + " WHERE fkf.fin_factuur_key = f.fin_factuur_key"
                                      + " AND fkf.fin_kenmerk_key = fk.fin_kenmerk_key"
                                      + " AND fkf.fin_kenmerkfactuur_verwijder IS NULL) fin_kenmerkfactuur_waarde"
                                      + " FROM fin_factuur f"
                                      + ", fin_kenmerk fk"
                                      + " WHERE fk.fin_kenmerk_verwijder IS NULL";

                   sqlFlex = "SELECT "+lcl.xsql('k.fin_kenmerk_omschrijving', 'k.fin_kenmerk_key') +" omschrijving"
                            + ", kf.fin_factuur_key flexparentkey"
                            + ", k.fin_kenmerk_key kenmerk_key"
                            + ", CASE"
                              + " WHEN k.fin_kenmerk_kenmerktype = 'R' OR k.fin_kenmerk_kenmerktype = 'S'"
                              + " THEN FAC.getdomeinwaarde(k.fac_kenmerkdomein_key, kf.fin_kenmerkfactuur_waarde)"
                              + " WHEN k.fin_kenmerk_kenmerktype = 'D'"
                              + " THEN TO_CHAR(fac.safe_To_Date(kf.fin_kenmerkfactuur_waarde, 'DD-MM-YYYY'), 'DD-MM-YYYY')"
                              + " ELSE kf.fin_kenmerkfactuur_waarde"
                              + " END waarde"
                            + ", k.fin_kenmerk_kenmerktype kenmerktype"
                            + ", k.fin_kenmerk_nmin nmin"
                            + ", k.fin_kenmerk_nmax nmax"
                            + ", k.fin_kenmerk_volgnr volgnummer"
                            + ", " + lcl.xsql('k.fin_kenmerk_dimensie', 'k.fin_kenmerk_key') +" dimensie"
                            + ", k.fin_kenmerk_dec decimalen"
                            + ", NULL niveau"
                            + " FROM (" + sql_fin_kenmerkfin + ") kf" // fin_kenmerk_key / fin_factuur_key / fin_kenmerkfactuur_waarde inclusief lege waarden
                            + ", fin_kenmerk k"
                            + " WHERE kf.fin_kenmerk_key = k.fin_kenmerk_key"
                            + " AND k.fin_kenmerk_verwijder IS NULL";

                   break;
                 }
    case "FINR": { sql_fin_kenmerkfin = "SELECT fk.fin_kenmerk_key"
                                      + ", fr.fin_factuurregel_key"
                                      + ", (SELECT kfr.fin_kenmerkfactregel_waarde"
                                      + " FROM fin_kenmerkfactregel kfr"
                                      + " WHERE kfr.fin_factuurregel_key = fr.fin_factuurregel_key"
                                      + " AND kfr.fin_kenmerk_key = fk.fin_kenmerk_key"
                                      + " AND kfr.fin_kenmerkfactregel_verwijder IS NULL) fin_kenmerkfactregel_waarde"
                                      + " FROM fin_factuurregel fr"
                                      + ", fin_kenmerk fk"
                                      + " WHERE fk.fin_kenmerk_verwijder IS NULL";

                   sqlFlex = "SELECT "+lcl.xsql('k.fin_kenmerk_omschrijving', 'k.fin_kenmerk_key') +" omschrijving"
                            + ", kf.fin_factuurregel_key flexparentkey"
                            + ", k.fin_kenmerk_key kenmerk_key"
                            + ", CASE"
                              + " WHEN k.fin_kenmerk_kenmerktype = 'R' OR k.fin_kenmerk_kenmerktype = 'S'"
                              + " THEN FAC.getdomeinwaarde(k.fac_kenmerkdomein_key, kf.fin_kenmerkfactregel_waarde)"
                              + " WHEN k.fin_kenmerk_kenmerktype = 'L'"
                              + " THEN k.fin_kenmerk_default"
                              + " WHEN k.fin_kenmerk_kenmerktype = 'D'"
                              + " THEN TO_CHAR(fac.safe_To_Date(kf.fin_kenmerkfactregel_waarde, 'DD-MM-YYYY'), 'DD-MM-YYYY')"
                              + " ELSE kf.fin_kenmerkfactregel_waarde"
                              + " END waarde"
                            + ", k.fin_kenmerk_kenmerktype kenmerktype"
                            + ", k.fin_kenmerk_nmin nmin"
                            + ", k.fin_kenmerk_nmax nmax"
                            + ", k.fin_kenmerk_volgnr volgnummer"
                            + ", " + lcl.xsql('k.fin_kenmerk_dimensie', 'k.fin_kenmerk_key') +" dimensie"
                            + ", k.fin_kenmerk_dec decimalen"
                            + ", NULL niveau"
                            + " FROM (" + sql_fin_kenmerkfin + ") kf" // fin_kenmerk_key / fin_factuurregel_key / fin_kenmerkfactregel_waarde inclusief lege waarden
                            + ", fin_kenmerk k"
                            + " WHERE kf.fin_kenmerk_key = k.fin_kenmerk_key"
                            + " AND k.fin_kenmerk_verwijder IS NULL"
                            + " AND k.fin_kenmerk_type = 'R'";

                   break;
                 }
    case "INS":  { sqlFlex = "SELECT "+lcl.xsql('sk.ins_srtkenmerk_omschrijving', 'sk.ins_srtkenmerk_key') +" omschrijving"
                            + ", kd.ins_deel_key flexparentkey"
                            + ", k.ins_kenmerk_key kenmerk_key"
                            + ", CASE"
                              + " WHEN sk.ins_srtkenmerk_kenmerktype = 'R' OR sk.ins_srtkenmerk_kenmerktype = 'S'"
                              + " THEN FAC.getdomeinwaarde(sk.fac_kenmerkdomein_key, kd.ins_kenmerkdeel_waarde)"
                              + " WHEN sk.ins_srtkenmerk_kenmerktype = 'D'"
                              + " THEN TO_CHAR(fac.safe_To_Date(kd.ins_kenmerkdeel_waarde, 'DD-MM-YYYY'), 'DD-MM-YYYY')"
                              + " ELSE kd.ins_kenmerkdeel_waarde"
                              + " END waarde"
                            + ", sk.ins_srtkenmerk_kenmerktype kenmerktype"
                            + ", sk.ins_srtkenmerk_nmin nmin"
                            + ", sk.ins_srtkenmerk_nmax nmax"
                            + ", k.ins_kenmerk_volgnummer volgnummer"
                            + ", " + lcl.xsql('sk.ins_srtkenmerk_dimensie', 'sk.ins_srtkenmerk_key') +" dimensie"
                            + ", sk.ins_srtkenmerk_dec decimalen"
                            + ", k.ins_kenmerk_niveau niveau"
                            + " FROM ins_v_aanwezigsrtkenmerk sk"
                            + ", ins_v_srtdeel_kenmerkdeel kd" // For excel we cannot omit empty columns but we can filter away the empty values for print
                            + ", ins_kenmerk k"
                            + " WHERE sk.ins_srtkenmerk_key = k.ins_srtkenmerk_key"
                            + " AND kd.ins_kenmerk_key = k.ins_kenmerk_key";

                   break;
                 }
    case "MLD":  { sql_srtmld_kenmerkmld = "SELECT mk.mld_kenmerk_key"
                                         + ", m.mld_melding_key"
                                         + ", (SELECT mld_kenmerkmelding_waarde"
                                         + " FROM mld_kenmerkmelding mkm"
                                         + " WHERE mkm.mld_melding_key = m.mld_melding_key"
                                         + " AND mkm.mld_kenmerk_key = mk.mld_kenmerk_key"
                                         + " AND mkm.mld_kenmerkmelding_verwijder IS NULL) mld_kenmerkmelding_waarde"
                                         + " FROM mld_melding m"
                                         + ", mld_stdmelding msm"
                                         + ", mld_discipline d"
                                         + ", mld_kenmerk mk"
                                         + " WHERE m.mld_stdmelding_key = msm.mld_stdmelding_key"
                                         + " AND msm.mld_ins_discipline_key = d.ins_discipline_key"
                                         + " AND ((mk.mld_stdmelding_key = msm.mld_stdmelding_key"
                                             + " AND mk.mld_kenmerk_niveau = 'S')"
                                           + " OR (mk.mld_stdmelding_key = msm.mld_ins_discipline_key"
                                             + " AND mk.mld_kenmerk_niveau = 'D')"
                                           + " OR (mk.mld_stdmelding_key = d.ins_srtdiscipline_key"
                                             + " AND mk.mld_kenmerk_niveau = 'T'))"
                                         + " AND mk.mld_kenmerk_verwijder IS NULL";

                   sqlFlex = "SELECT "+lcl.xsql('sk.mld_srtkenmerk_omschrijving', 'sk.mld_srtkenmerk_key') +" omschrijving"
                            + ", km.mld_melding_key flexparentkey"
                            + ", k.mld_kenmerk_key kenmerk_key"
                            + ", CASE"
                              + " WHEN sk.mld_srtkenmerk_kenmerktype = 'R' OR sk.mld_srtkenmerk_kenmerktype = 'S'"
                              + " THEN FAC.getdomeinwaarde(sk.fac_kenmerkdomein_key, km.mld_kenmerkmelding_waarde)"
                              + " WHEN sk.mld_srtkenmerk_kenmerktype = 'D'"
                              + " THEN TO_CHAR(fac.safe_To_Date(km.mld_kenmerkmelding_waarde, 'DD-MM-YYYY'), 'DD-MM-YYYY')"
                              + " ELSE km.mld_kenmerkmelding_waarde"
                              + " END waarde"
                            + ", sk.mld_srtkenmerk_kenmerktype kenmerktype"
                            + ", sk.mld_srtkenmerk_nmin nmin"
                            + ", sk.mld_srtkenmerk_nmax nmax"
                            + ", k.mld_kenmerk_volgnummer volgnummer"
                            + ", "+ lcl.xsql('sk.mld_srtkenmerk_dimensie', 'sk.mld_srtkenmerk_key') + " dimensie"
                            + ", sk.mld_srtkenmerk_dec decimalen"
                            + ", k.mld_kenmerk_niveau niveau"
                            + " FROM mld_srtkenmerk sk"
                            + ", (" + sql_srtmld_kenmerkmld + ") km" // mld_kenmerk_key / mld_melding_key / mld_kenmerkmelding_waarde inclusief lege waarden
                            + ", mld_kenmerk k"
                            + " WHERE sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key"
                            + " AND km.mld_kenmerk_key = k.mld_kenmerk_key"
                            + " AND sk.mld_srtkenmerk_verwijder IS NULL"
                            + (flexParams && (flexParams.readuse || flexParams.readman)? " AND k.mld_kenmerk_volgnummer < 800":"");

                   break;
                 }
    case "OPDR": { sql_srtopdr_kenmerkopdr = "SELECT mk.mld_kenmerk_key"
                                           + ", o.mld_opdr_key"
                                           + ", (SELECT mld_kenmerkopdr_waarde"
                                           + " FROM mld_kenmerkopdr mko"
                                           + " WHERE mko.mld_opdr_key = o.mld_opdr_key"
                                           + " AND mko.mld_kenmerk_key = mk.mld_kenmerk_key"
                                           + " AND mko.mld_kenmerkopdr_verwijder IS NULL) mld_kenmerkopdr_waarde"
                                           + " FROM mld_opdr o"
                                           + ", mld_typeopdr mt"
                                           + ", mld_kenmerk mk"
                                           + ", mld_srtkenmerk msk"
                                           + " WHERE o.mld_typeopdr_key = mt.mld_typeopdr_key"
                                           + " AND (mk.mld_typeopdr_key = mt.mld_typeopdr_key"
                                             + " AND mk.mld_kenmerk_niveau = 'O')"
                                           + " AND mk.mld_srtkenmerk_key = msk.mld_srtkenmerk_key"
                                           + " AND mk.mld_kenmerk_verwijder IS NULL"
                                           + " AND msk.mld_srtkenmerk_verwijder IS NULL";

                   sqlFlex = "SELECT "+lcl.xsql('sk.mld_srtkenmerk_omschrijving', 'sk.mld_srtkenmerk_key') +" omschrijving"
                            + ", ko.mld_opdr_key flexparentkey"
                            + ", k.mld_kenmerk_key kenmerk_key"
                            + ", CASE"
                              + " WHEN sk.mld_srtkenmerk_kenmerktype = 'R' OR sk.mld_srtkenmerk_kenmerktype = 'S'"
                              + " THEN FAC.getdomeinwaarde(sk.fac_kenmerkdomein_key, ko.mld_kenmerkopdr_waarde)"
                              + " WHEN sk.mld_srtkenmerk_kenmerktype = 'D'"
                              + " THEN TO_CHAR(fac.safe_To_Date(ko.mld_kenmerkopdr_waarde, 'DD-MM-YYYY'), 'DD-MM-YYYY')"
                              + " ELSE ko.mld_kenmerkopdr_waarde"
                              + " END waarde"
                            + ", sk.mld_srtkenmerk_kenmerktype kenmerktype"
                            + ", sk.mld_srtkenmerk_nmin nmin"
                            + ", sk.mld_srtkenmerk_nmax nmax"
                            + ", k.mld_kenmerk_volgnummer volgnummer"
                            + ", "+ lcl.xsql('sk.mld_srtkenmerk_dimensie', 'sk.mld_srtkenmerk_key') + " dimensie"
                            + ", sk.mld_srtkenmerk_dec decimalen"
                            + ", k.mld_kenmerk_niveau niveau"
                            + " FROM mld_srtkenmerk sk" // TODO: mld_v_aanwezigsrtkenmerk bestaat niet
                            + ", (" + sql_srtopdr_kenmerkopdr + ") ko" // mld_kenmerk_key / mld_opdr_key / mld_kenmerkopdr_waarde inclusief lege waarden
                            + ", mld_kenmerk k"
                            + " WHERE sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key"
                            + " AND ko.mld_kenmerk_key = k.mld_kenmerk_key"
                            + " AND sk.mld_srtkenmerk_verwijder IS NULL";

                   break;
                 }
     case "PRS":  {
                   var where = [];
                   if (flexId.toLowerCase()=="prs_perslid_key")
                   {
                       var authparamsUSE = user.checkAutorisation("WEB_PRSUSE", true)||{PRSreadlevel: 9};
                       var authparamsMAN = user.checkAutorisation("WEB_PRSMAN", true)||{PRSreadlevel: 10};
                       // Als authparamsMAN en authparamsUSE verschillen zou het heel ingewikkeld worden.
                       // Daarom tonen we dan voor de veiligheid geen MAN meer.
                       if (authparamsMAN.PRSreadlevel > -1 && authparamsMAN.PRSreadlevel != authparamsUSE.PRSreadlevel)
                            where.push("prs_kenmerk_volgnr >= 100");
                       if (authparamsUSE.PRSreadlevel > -1)
                            where.push("prs_kenmerk_volgnr <= 100");
                   }

                   sql_prs_kenmerkprs = "SELECT pk.prs_kenmerk_key"
                                      + ", p." + flexId // prs_afdeling_key, prs_perslid_key
                                      + ", (SELECT prs_kenmerklink_waarde"
                                      + " FROM prs_kenmerklink pkl"
                                      + " WHERE pkl.prs_link_key = p." + flexId // prs_afdeling_key, prs_perslid_key
                                      + " AND pkl.prs_kenmerk_key = pk.prs_kenmerk_key"
                                      + " AND pkl.prs_kenmerklink_verwijder IS NULL) prs_kenmerklink_waarde"
                                      + " FROM " + flexId.replace(/_key/g, "") + " p" // prs_afdeling, prs_perslid
                                      + ", prs_kenmerk pk"
                                      + " WHERE pk.prs_kenmerk_verwijder IS NULL";

                   sqlFlex = "SELECT "+lcl.xsql('k.prs_kenmerk_omschrijving', 'k.prs_kenmerk_key') +" omschrijving"
                            + ", kp." + flexId + " flexparentkey" // prs_perslid_key, prs_afdeling_key
                            + ", k.prs_kenmerk_key kenmerk_key"
                            + ", CASE"
                              + " WHEN k.prs_kenmerk_kenmerktype = 'R' OR k.prs_kenmerk_kenmerktype = 'S'"
                              + " THEN FAC.getdomeinwaarde(k.fac_kenmerkdomein_key, kp.prs_kenmerklink_waarde)"
                              + " WHEN k.prs_kenmerk_kenmerktype = 'D'"
                              + " THEN TO_CHAR(fac.safe_To_Date(kp.prs_kenmerklink_waarde, 'DD-MM-YYYY'), 'DD-MM-YYYY')"
                              + " ELSE kp.prs_kenmerklink_waarde"
                              + " END waarde"
                            + ", k.prs_kenmerk_kenmerktype kenmerktype"
                            + ", k.prs_kenmerk_nmin nmin"
                            + ", k.prs_kenmerk_nmax nmax"
                            + ", k.prs_kenmerk_volgnr volgnummer"
                            + ", " + lcl.xsql('k.prs_kenmerk_dimensie', 'k.prs_kenmerk_key') +" dimensie"
                            + ", k.prs_kenmerk_dec decimalen"
                            + ", k.prs_kenmerk_niveau niveau"
                            + " FROM (" + sql_prs_kenmerkprs + ") kp" // prs_kenmerk_key / prs_gebouw_key / prs_kenmerklink_waarde inclusief lege waarden
                            + ", prs_kenmerk k"
                            + " WHERE kp.prs_kenmerk_key = k.prs_kenmerk_key"
                            + " AND k.prs_kenmerk_verwijder IS NULL"
                            + (where.length?" AND " + where.join(" AND ") + " ":"")
                            + " AND k.prs_kenmerk_niveau = " + safe.quoted_sql_upper(flexId.substr(4,1)); // A (Afdeling) en P (Persoon/Perslid)

                   break;
                 }
    case "RES":  { sql_srtres_kenmerkres = "SELECT rk.res_kenmerk_key"
                                         + ", rr.res_rsv_ruimte_key"
                                         + ", (SELECT res_kenmerkreservering_waarde"
                                         + " FROM res_kenmerkwaarde rkw"
                                         + " WHERE rkw.res_rsv_ruimte_key = rr.res_rsv_ruimte_key"
                                         + " AND rkw.res_kenmerk_key = rk.res_kenmerk_key"
                                         + " AND rkw.res_kenmerkwaarde_verwijder IS NULL) res_kenmerkreservering_waarde"
                                         + ", ra.res_activiteit_key"
                                         + " FROM res_rsv_ruimte rr"
                                         + ", res_activiteit ra"
                                         + ", res_kenmerk rk"
                                         + ", res_srtkenmerk rsk"
                                         + " WHERE rr.res_activiteit_key = ra.res_activiteit_key"
                                         + " AND ra.res_activiteit_key = rk.res_activiteit_key"
                                         + " AND rk.res_srtkenmerk_key = rsk.res_srtkenmerk_key"
                                         + " AND rk.res_kenmerk_verwijder IS NULL"
                                         + " AND rk.res_kenmerk_niveau = 'A'"
                                         + " AND rsk.res_srtkenmerk_verwijder IS NULL";

                   sqlFlex = "SELECT "+lcl.xsql('sk.res_srtkenmerk_omschrijving', 'sk.res_srtkenmerk_key') +" omschrijving"
                            + ", kr.res_rsv_ruimte_key flexparentkey"
                            + ", k.res_kenmerk_key kenmerk_key"
                            + ", CASE"
                              + " WHEN sk.res_srtkenmerk_kenmerktype = 'R' OR sk.res_srtkenmerk_kenmerktype = 'S'"
                              + " THEN FAC.getdomeinwaarde(sk.fac_kenmerkdomein_key, kr.res_kenmerkreservering_waarde)"
                              + " WHEN sk.res_srtkenmerk_kenmerktype = 'D'"
                              + " THEN TO_CHAR(fac.safe_To_Date(kr.res_kenmerkreservering_waarde, 'DD-MM-YYYY'), 'DD-MM-YYYY')"
                              + " ELSE kr.res_kenmerkreservering_waarde"
                              + " END waarde"
                            + ", sk.res_srtkenmerk_kenmerktype kenmerktype"
                            + ", sk.res_srtkenmerk_nmin nmin"
                            + ", sk.res_srtkenmerk_nmax nmax"
                            + ", k.res_kenmerk_volgnummer volgnummer"
                            + ", " + lcl.xsql('sk.res_srtkenmerk_dimensie', 'sk.res_srtkenmerk_key') +" dimensie"
                            + ", sk.res_srtkenmerk_dec decimalen"
                            + ", k.res_kenmerk_niveau niveau"
                            + " FROM res_srtkenmerk sk"
                            + ", (" + sql_srtres_kenmerkres + ") kr" // res_kenmerk_key / res_rsv_ruimte_key / res_kenmerkreservering_waarde inclusief lege waarden
                            + ", res_kenmerk k"
                            + " WHERE sk.res_srtkenmerk_key = k.res_srtkenmerk_key"
                            + " AND kr.res_kenmerk_key = k.res_kenmerk_key"
                            + " AND sk.res_srtkenmerk_verwijder IS NULL";

                   break;
                 }
    default:     { sqlFlex = "";
                   break;
                 }
  }

  return sqlFlex;
}

function flexHeader(oRsFlex)
{
  var flexHeader = (oRsFlex("omschrijving").value? oRsFlex("omschrijving").value : "")
                 + (('' + oRsFlex("dimensie").value != 'null') && ('' + oRsFlex("dimensie").value != 'xxx')
                   ? ' [' + oRsFlex("dimensie").value + ']'
                   : '');

  return flexHeader;
}

function flexValue(oRsFlex, showProperties)
{
  // We do never want dimension suffixed to the value. use it in the labels instead
  // Voor afdruk naar excel is de dimensies achter de kolom header geplakt.
  // Voor afdruk naar printer is de dimensie achter het label geplakt.
  var flexValue = "";
  if ('' + oRsFlex("waarde").value != 'null')
  {
    flexValue = oRsFlex("waarde").value;
    // Indien de waarde van het kenmerk numeriek is en alleen de waarden 0 of 1 kan bevatten, dan de text "Ja" of "Nee" tonen
    if (oRsFlex("kenmerktype").value == "N" && oRsFlex("nmin").value == 0 && oRsFlex("nmax").value == 1)
    {
      if (flexValue == 0)
        flexValue = L("lcl_check_0");
      else if (flexValue == 1)
        flexValue = L("lcl_check_1");
    }
    // Indien de waarde van het kenmerk numeriek is, dan juiste format tonen (punt of komma)
    else if ((oRsFlex("kenmerktype").value == "N" || oRsFlex("kenmerktype").value == "B") && oRsFlex("decimalen").value > 0)
      flexValue = ResultsetTable.formatValue(parseFloat(flexValue), { datatype: "float", decimals: oRsFlex("decimalen").value});
  }

  return flexValue;
}

function addFlexKenmerkHeader(oRsFlexData, lthis)
{
  with(lthis)
  { // Flexkenmerken tonen bij isPrinting of isExcel.
    var lhtml = "";
    if ((isPrinting || showProperties) && lthis.printFlex)
    {
      lhtml += "<th>" + L("lcl_properties") + "</th>";
    }
    else if (isExcel && lthis.printFlex)
    {
      for (var i=0; i < oRsFlexData.length; i++)
      {
        lhtml += "<th>" + oRsFlexData[i].header + "</th>";
      }
    }
  }
  return lhtml;
}

function addFlexKenmerkFooter(oRsFlexData, lthis)
{
  with(lthis)
  {
    var lhtml = "";
    if ((isPrinting || showProperties) && lthis.printFlex)
    {
      lhtml += "<td></td>";
    }
    else if (isExcel && lthis.printFlex)
    {
      for (var i=0; i < oRsFlexData.length; i++)
      {
        lhtml += "<td></td>";
      }
    }
  }
  return lhtml;
}

function OpenFlexFile(Module, Niveau, Key, Kenmerk_key, fname, params)
{
  params = params || {}
  // Lever code op voor tonen van een bepaalde flexfile streaming
  var s = "../shared/BijlagenStream.asp"
  s += "?module=" + Module
    +  "&key=" + Key
    + (Niveau? "&niveau=" + Niveau : "")
    +  "&kenmerk_key=" + Kenmerk_key
    +  "&filename=" + Server.URLencode(fname);
  if (params.mime_type)
    s += "&mime=" + params.mime_type;
  if (params.contentdp)
    s += "&contentdp=" + params.contentdp;
  return s;
}

function addFlexKenmerkKolommen(oRsFlexData, lthis, params)
{
  var lastRowKey = params.lastRowKey;
  var thisKey = params.thisKey;
  with(lthis)
  { // Flexkenmerken tonen bij isPrinting of isExcel
    var lhtml = [];
    var suppressFlex = suppressKeyRepeat && lastRowKey == thisKey;

    if ((isPrinting || showProperties) && printFlex)
    {
      if (!suppressFlex)
      {
          for (var i=0; i < oRsFlexData.length; i++)
          {
            var rec = oRsFlexData[i];

            var fValue = rec.value;
            if ((isPrinting || showProperties) && fValue != "")
            {
              if (rec.type == 'F') // Die maken we klikbaar
              {
                if (rec.dim == 'xxx')
                    var url = protectQS.create(OpenFlexFile(flexModule, rec.kenmerk_niveau, rec.key, rec.kenmerk_key, fValue, { mime_type: "image/png", contentdp: "inline" }));
                else
                    var url = protectQS.create(OpenFlexFile(flexModule, rec.kenmerk_niveau, rec.key, rec.kenmerk_key, fValue));
                lhtml.push(safe.html(rec.header) + ": <a href='" + safe.htmlattr(url) + "' target='_new'>" + safe.html(fValue) + "</a>")
              }
              else
                lhtml.push(safe.html(rec.header + ': ' + fValue));
            }
          }
      }
    }
    if (isExcel && printFlex)
    {
      for (var i=0; i < oRsFlexData.length; i++)
      {
        var rec = oRsFlexData[i];
        var fValue = rec.value;
        lhtml.push(fValue != null? safe.textarea(fValue) : "");
      }
    }
  }
  if (lhtml.length)
    return "<td>" + lhtml.join(isExcel?"</td><td>":"<br>") + "</td>";
  else
    if ((isPrinting || lthis.showProperties) && lthis.printFlex) // Altijd minstens lege td voor de kleuring
        return "<td></td>";
  return "";
}

function getFlexData(theSqlFlex, flexKey, showProperties)
{
    var completeSqlFlex = "SELECT * FROM (" + theSqlFlex + ")"
                        + " WHERE flexparentkey = " + flexKey // De flexKey invullen in de sqlFlex query
                        + " ORDER BY volgnummer, omschrijving";
    var oRs = Oracle.Execute(completeSqlFlex);
    var result = [];
    while (!oRs.EOF)
    {
        var kenmerktype = oRs("kenmerktype").Value
        // We kunnen niet met Blanco (Q), Label (L), Folder met bestanden (M), Bestand (F) en Encrypted bestand (E) en als het kenmerk volgnummer negatief is
        if (kenmerktype == 'Q' || kenmerktype == 'L' || kenmerktype == 'M' || (kenmerktype == 'F' && !showProperties) || kenmerktype == 'E' || oRs("volgnummer").value < 0)
        {
            oRs.MoveNext();
            continue; // daar kunnen we niet mee
        }
        var data = { value: flexValue(oRs),
                     type: kenmerktype,
                     key: flexKey,
                     kenmerk_key: oRs("kenmerk_key").value,
                     volgnummer: oRs("volgnummer").value,
                     niveau: oRs("niveau").value,
                     header: flexHeader(oRs),
                     kenmerk_niveau: oRs("niveau").value,
                     dim: oRs("dimensie").value
                   }
        result.push(data);
        oRs.MoveNext();
    }
    oRs.Close();
    return result;
}

%>