Files
Facilitor/APPL/FAC/prodsearch.inc
Erik Groener ae7d101efc UWVA#88793 Datummogelijkheden verbruiksartikelen catalogus per locatie
- vervaldatum moet >= zijn

svn path=/Website/trunk/; revision=70488
2025-10-01 12:10:13 +00:00

580 lines
31 KiB
PHP

<% /*
$Revision$
$Id$
File: prodsearch.asp
Description: gemeenschappelijke code van FAC/prodsearch.asp en PDA/productsearch.asp
Parameters:
Note:
*/ %>
<!--#include file="../FAC/fac.inc" -->
<!--#include file="../Shared/discxalg3d.inc" -->
<%
FCLTHeader.Requires({js: []});
function escapeRegExp(str)
{
return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
}
// S("prodsearch_rank") bevat [faq,besartikel,resruimte,mldstdm,prsperslid,resartikel,resdeel] voor sortering
function ranknr (srt)
{
var rank;
for (rank in S("prodsearch_rank"))
{
if (srt == S("prodsearch_rank")[rank])
{
return Number(rank) + 1;
}
}
return 999;
}
function write_discs()
{
var write_discs = fac.mydisciplinessqlstring(user_key).write; // Kijkt algemeen naar de disciplines, onafhankelijk van fac_functie_code
return write_discs;
}
function prodsearch_queries(write_discs, filter)
{
var supper = filter.s.val.toUpperCase();
var reslocstr = ""; // zoek alleen op aangegeven locatie/gebouw/verdieping
if (filter.verdiepingKey > -1)
reslocstr = " AND v.alg_verdieping_key = " + filter.verdiepingKey;
else if (filter.gebouwKey > -1)
reslocstr = " AND g.alg_gebouw_key = " + filter.gebouwKey;
else if (filter.locatieKey > -1)
reslocstr = " AND l.alg_locatie_key = " + filter.locatieKey;
var queries = {};
// elke sql levert minimaal op: soort, product_key, product, vakgroep, disc_key, rang, foto, extra, prijs en xurl
// extra is voor als je nader de omschrijving wilt aanpassen (in plaats van 'Bestelling' toon je 'van der Most')
// daarnaast kan/zal de sql naar eigen inzicht nog meer kolommen opleveren die alleen gebruikt
// zullen/kunnen worden voor histogrammen als de soort fixed is
var write_discs_BESUSEFOF = fac.mydisciplinessqlstring(user_key, ["WEB_BESUSE", "WEB_BESFOF"]).write;
//63749: Upgrade naar fontawesome 6 //gaat dit wel goed straks?
queries['besartikel'] =
{ sql:
"SELECT bes_srtdeel_key product_key, "
+ lcl.xsql('sd.bes_srtdeel_omschrijving', 'sd.bes_srtdeel_key')+" product,"
+ " 'besartikel' soort, "
+ " " + ranknr('besartikel') + " rang, "
+ " bes.getsrtdeelprijs(bes_srtdeel_key, NULL) prijs,"
+ " p.prs_bedrijf_naam extra,"
+ " NULL extra2,"
+ " sg.ins_discipline_key disc_key, "
+ " d.ins_discipline_color kleur, "
+ " nvl2(sd.bes_srtdeel_image, p.prs_bedrijf_image_loc || sd.bes_srtdeel_image, null) foto,"
+ lcl.xsqla('d.ins_discipline_omschrijving', 'd.ins_discipline_key') + ","
+ lcl.xsqla('bes_srtgroep_omschrijving', 'sg.bes_srtgroep_key') + ","
+ " NULL xurl,"
+ " prs_bedrijf_naam,"
+ " NULL ishtmlsafe_extra"
+ " FROM bes_v_aanwezigsrtdeel sd, bes_srtgroep sg, bes_v_aanwezigdiscipline d, prs_bedrijf p"
+ " WHERE sd.bes_srtgroep_key=sg.bes_srtgroep_key"
+ " AND sg.ins_discipline_key = d.ins_discipline_key"
+ " AND (sd.bes_srtdeel_vervaldatum IS NULL OR sd.bes_srtdeel_vervaldatum > SYSDATE)"
+ " AND sd.prs_bedrijf_key IS NOT NULL"
+ " AND p.prs_bedrijf_verwijder IS NULL" // want ook die geven later een error en kunnen niet besteld worden
+ " AND sd.prs_bedrijf_key = p.prs_bedrijf_key"
+ " AND d.ins_discipline_key IN (" + write_discs_BESUSEFOF + ")"
+ " AND " + fac.createOrClause("UPPER("+ lcl.xsql('sd.bes_srtdeel_omschrijving', 'sd.bes_srtdeel_key') + "||','||"
+ lcl.xsql('d.ins_discipline_omschrijving', 'd.ins_discipline_key') + "||','||"
+ lcl.xsql('bes_srtgroep_omschrijving', 'sg.bes_srtgroep_key') + "||','||"
+ lcl.xsql('sd.bes_srtdeel_opmerking', 'sd.bes_srtdeel_key') + "||','||"
+ "bes_srtdeel_nr ||','||"
+ "p.prs_bedrijf_naam)", supper),
icon: "fa-shopping-cart",
vakgroep: L("lcl_bes_discipline"),
intern: L("lcl_srch_bestellingen"),
histogram: { "ins_discipline_omschrijving": { lcl: L("lcl_bes_discipline") },
"bes_srtgroep_omschrijving": { lcl: L("lcl_bes_srtgroep_oms") },
"prs_bedrijf_naam": { lcl: L("lcl_bes_Supplier") }
}
}
queries['mldstdm'] =
{ sql:
"SELECT mld_stdmelding_key product_key, "
+ lcl.xsql('mld_stdmelding_omschrijving','mld_stdmelding_key')+ " product,"
+ " 'mldstdm' soort,"
+ " " + ranknr('mldstdm') + " rang, "
+ " 0 prijs, "
+ lcl.xsql('sd.ins_srtdiscipline_omschrijving', 'sd.ins_srtdiscipline_key') +"||' - '||" + lcl.xsql('d.ins_discipline_omschrijving', 'd.ins_discipline_key') + " extra,"
+ " NULL extra2,"
+ " d.ins_discipline_key disc_key, "
+ lcl.xsqla('d.ins_discipline_omschrijving', 'd.ins_discipline_key') + " , "
+ " COALESCE(stdm.mld_stdmelding_color, d.ins_discipline_color, sd.ins_srtdiscipline_color) kleur, "
+ " mld_stdmelding_image foto,"
+ " COALESCE(prs_dienst_omschrijving, " + safe.quoted_sql(L("lcl_fac_geen_dienst")) + ") prs_dienst_omschrijving," // Een stdmelding kan ook geen "Te behandelen door dienst" ingevuld hebben.
+ " stdm.mld_stdmelding_externurl xurl,"
+ " NULL ishtmlsafe_extra"
+ " FROM mld_stdmelding stdm"
+ ", mld_v_aanwezigdiscipline d"
+ ", ins_srtdiscipline sd"
+ ", prs_dienst pd"
+ " WHERE d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key"
// Vervallen stdmeldingen niet tonen
+ " AND (mld_stdmelding_vervaldatum IS NULL OR"
+ " mld_stdmelding_vervaldatum > SYSDATE)"
+ " AND mld_ins_discipline_key = ins_discipline_key"
+ " AND stdm.prs_dienst_key = pd.prs_dienst_key(+)"
+ " AND sd.ins_srtdiscipline_verwijder IS NULL"
+ " AND mld_stdmelding_verwijder IS NULL"
+ " AND " + fac.createOrClause("UPPER("+lcl.xsql('mld_stdmelding_omschrijving','mld_stdmelding_key')+"||', '||"
+lcl.xsql('mld_stdmelding_hint','mld_stdmelding_key')+"||', '||"
+lcl.xsql('d.ins_discipline_omschrijving','d.ins_discipline_key') +"||', '||"
+lcl.xsql('sd.ins_srtdiscipline_omschrijving', 'sd.ins_srtdiscipline_key') +")", supper),
icon : "fa-comment",
vakgroep: L("lcl_vakgroup"),
intern: L("lcl_srch_meldingen"),
histogram: { "ins_srtdiscipline_omschrijving": { lcl: L("lcl_mld_vakgroeptype") },
"ins_discipline_omschrijving": { lcl: L("lcl_vakgroup") },
"prs_dienst_omschrijving": { lcl: L("lcl_prs_companies_dienst") }
}
}
// 3D authorization (zowel ALG and PRS) kun je pas toepassen op een melding. Hier wil je nog een melding aanmaken. Je kunt hier alleen naar de mogelijke disciplines kijken.
// Kijk dus voor de verschillende fac functie codes individueel voor welke disciplines je enige rechten hebt.
var write_discs_MLDUSE = fac.mydisciplinessqlstring(user_key, ["WEB_MLDUSE"]).write; // Kijkt specifiek naar de disciplines van fac_functie_code WEB_MLDUSE
var write_discs_MLDFOFBOF = fac.mydisciplinessqlstring(user_key, ["WEB_MLDFOF", "WEB_MLDFOF"]).write; // Kijkt specifiek naar de disciplines van fac_functie_codes WEB_MLDFOF en WEB_MLDFOF
queries['mldstdm'].sql = queries['mldstdm'].sql
+ " AND mld_stdmelding_notfrontend = 0" // Alleen frontend mag "mld_stdmelding_notfrontend == 1" meldingen niet zien
+ " AND d.ins_discipline_key IN (" + write_discs_MLDUSE + ")"
+ " UNION "
+ queries['mldstdm'].sql
+ " AND d.ins_discipline_key IN (" + write_discs_MLDFOFBOF + ")";
// doet 3d wel var reslocstr = fac.mylocatiesqlstring(user_key, ["WEB_RESUSE","WEB_RESFOF"]);
var sati_sql = " (SELECT AVG(res_rsv_ruimte_satisfaction) "
+ " FROM res_rsv_ruimte rrr"
+ " WHERE res_ruimte_opstel_key = rro.res_ruimte_opstel_key"
+ " AND res_rsv_ruimte_van > sysdate - 180)";
queries['resruimte'] =
{ sql:
"SELECT r.res_ruimte_key product_key, "
+ lcl.xsql('r.res_ruimte_nr','r.res_ruimte_key')
+"|| decode(rro.res_ruimte_opstel_default,1,'',' ('||ro.res_opstelling_omschrijving||')') product,"
+ " 'resruimte' soort,"
+ " " + ranknr('resruimte') + " rang, "
+ " r.res_ruimte_prijs prijs,"
+ lcl.xsql('r.res_ruimte_omschrijving','r.res_ruimte_key')+" extra, "
+ " NULL extra2,"
+ " l.alg_locatie_key,"
+ " r.res_discipline_key disc_key,"
+ lcl.xsqla('d.ins_discipline_omschrijving', 'd.ins_discipline_key') + ","
+ " d.ins_discipline_color kleur, "
+ " COALESCE(rro.res_ruimte_opstel_image, res_ruimte_image) foto,"
+ " alg_locatie_omschrijving,"
+ " alg_locatie_plaats,"
+ (filter.soort.val == "resruimte"? sati_sql + " satisfaction,":"")
+ " NULL xurl,"
+ " ro.res_opstelling_omschrijving,"
+ " " + (S("fac_html_strictness") ? 0 : 1) + " ishtmlsafe_extra"
+ " FROM res_v_aanwezigruimte r,"
+ " res_v_aanwezigdiscipline d,"
+ " res_alg_ruimte ar,"
+ " alg_ruimte r,"
+ " alg_verdieping v,"
+ " alg_district di,"
+ " alg_gebouw g,"
+ " alg_locatie l,"
+ " res_ruimte_opstelling rro, "
+ " res_opstelling ro"
+ " WHERE " + fac.createOrClause("UPPER("+lcl.xsql('r.res_ruimte_nr','r.res_ruimte_key')+"||','||"
+lcl.xsql('r.res_ruimte_omschrijving','r.res_ruimte_key')+"||','||"
+lcl.xsql('d.ins_discipline_omschrijving','d.ins_discipline_key') +"||', '||"
+"alg_locatie_omschrijving)", supper)
+ " AND r.res_discipline_key = d.ins_discipline_key"
+ " AND ar.res_ruimte_key = r.res_ruimte_key"
+ " AND (r.res_ruimte_startdatum IS NULL OR r.res_ruimte_startdatum <= SYSDATE)"
+ " AND (r.res_ruimte_vervaldatum IS NULL OR r.res_ruimte_vervaldatum >= SYSDATE)"
+ " AND r.alg_ruimte_key ="
+ " (SELECT MIN (rar.alg_ruimte_key)"
+ " FROM res_alg_ruimte rar"
+ " WHERE rar.res_alg_ruimte_verwijder IS NULL"
+ " AND rar.res_ruimte_key = r.res_ruimte_key)"
+ " AND v.alg_verdieping_key = r.alg_verdieping_key"
+ " AND g.alg_gebouw_key = v.alg_gebouw_key"
+ " AND l.alg_locatie_key = g.alg_locatie_key"
+ " AND di.alg_district_key = l.alg_district_key"
+ " AND rro.res_ruimte_key = r.res_ruimte_key" // TODO: Duplicates verwijderen?
+ " AND rro.res_opstelling_key = ro.res_opstelling_key"
+ " AND r.res_ruimte_extern_id IS NULL"
+ ((filter.soort.val == "resruimte" && filter.satisfaction.val > 0)?
" AND " + sati_sql + " >= " + filter.satisfaction.val :"")
+ reslocstr,
///doet de 3d wel + (reslocstr!=""?" AND g.alg_locatie_key IN ("+reslocstr+")":"")
icon : "fa-map-marker",
intern: L("lcl_srch_vergaderruimtes"),
histogram: { "ins_discipline_omschrijving": { lcl: L("lcl_res_roomcat") },
"alg_locatie_plaats": { lcl: L("lcl_location") },
"res_opstelling_omschrijving": { lcl: L("lcl_config") }
}
}
queries['resruimte'].sql =
discxalg3d(queries['resruimte'].sql,
"r.res_discipline_key",
"di.alg_regio_key",
"l.alg_district_key",
"l.alg_locatie_key",
"v.alg_gebouw_key",
"r.alg_verdieping_key",
"r.alg_ruimte_key",
"WEB_RESUSE", //autfunction,
write_discs,
true) // forwrite
+ " UNION " +
discxalg3d(queries['resruimte'].sql,
"r.res_discipline_key",
"di.alg_regio_key",
"l.alg_district_key",
"l.alg_locatie_key",
"v.alg_gebouw_key",
"r.alg_verdieping_key",
"r.alg_ruimte_key",
"WEB_RESFOF", //autfunction,
write_discs,
true); // forwrite
queries['resartikel'] =
{ sql: "WITH all_onrgoed_loc_keys AS"
+ " (SELECT alg_type"
+ " , alg_onroerendgoed_keys"
+ " , alg_locatie_key"
+ " , alg_terreinsector_key"
+ " , alg_gebouw_key"
+ " , alg_verdieping_key"
+ " , alg_ruimte_key"
+ " FROM alg_v_allonroerendgoed"
+ " UNION"
+ " SELECT 'L'"
+ " , alg_locatie_key"
+ " , alg_locatie_key, NULL, NULL, NULL, NULL"
+ " FROM alg_locatie"
+ " )"
+ " SELECT r.res_artikel_key product_key,"
+ lcl.xsql('r.res_artikel_omschrijving','r.res_artikel_key')+" product,"
+ " 'resartikel' soort,"
+ " " + ranknr('resartikel') + " rang,"
+ " r.res_artikel_prijs prijs,"
+ " '' extra,"
+ " NULL extra2,"
+ " NULL alg_locatie_key,"
+ " r.res_discipline_key disc_key,"
+ lcl.xsql('d.ins_discipline_omschrijving', 'd.ins_discipline_key') + " vakgroep,"
+ " NULL xurl,"
+ " d.ins_discipline_color kleur,"
+ " r.res_artikel_image foto,"
+ " NULL ishtmlsafe_extra"
+ " FROM res_v_aanwezigartikel r,"
+ " res_v_aanwezigdiscipline d,"
+ " res_srtartikel_onrgoed rsao"
+ " WHERE r.res_discipline_key = d.ins_discipline_key"
+ " AND d.ins_discipline_key = rsao.res_discipline_key"
+ " AND (rsao.alg_onrgoed_niveau, rsao.alg_onrgoed_key) IN"
+ " (SELECT alg_type, alg_onroerendgoed_keys"
+ " FROM all_onrgoed_loc_keys"
+ " WHERE alg_locatie_key = " + "(select coalesce(s.alg_locatie_key, m.alg_locatie_key)" // Beperk tot verbruiksartikelen van mijn locatie.
+ " from alg_v_my_location m"
+ " , (select p.prs_perslid_key"
+ " , o.alg_locatie_key"
+ " from alg_v_allonroerendgoed o"
+ " , prs_perslid p"
+ " where p.alg_onroerendgoed_type = o.alg_type(+)"
+ " and p.alg_onroerendgoed_keys = o.alg_onroerendgoed_keys(+)"
+ " ) s"
+ " where m.prs_perslid_key = s.prs_perslid_key"
+ " and m.prs_perslid_key = " + user_key
+ ")"
+ " )"
+ " AND COALESCE(rsao.res_srtartikel_og_ingangsdatum, r.res_artikel_ingangsdatum, SYSDATE) <= SYSDATE"
+ " AND COALESCE(rsao.res_srtartikel_og_vervaldatum, r.res_artikel_vervaldatum, SYSDATE) >= SYSDATE"
+ " AND " + fac.createOrClause("UPPER("+lcl.xsql('d.ins_discipline_omschrijving','d.ins_discipline_key') +"||', '||"
+lcl.xsql('res_artikel_omschrijving','res_artikel_key') +"||', '||"
+lcl.xsql('res_artikel_opmerking','res_artikel_key')+")", supper)
+ " AND r.res_discipline_key IN"
+ " (SELECT res_discipline_key"
+ " FROM res_activiteitdiscipline rad, res_activiteit ra, res_srtactiviteit rsa"
+ " WHERE rad.res_activiteit_key = ra.res_activiteit_key"
+ " AND ra.res_srtactiviteit_key = rsa.res_srtactiviteit_key"
+ " AND res_srtactiviteit_soort = 1)"
+ " AND d.ins_discipline_key IN"
+ " (SELECT res_discipline_key"
+ " FROM res_v_srtartikel_onrgoed rsao)", // Alleen CV
icon : "fa-utensils",
intern: L("lcl_srch_verbruiksartikelen")
}
queries['resdeel'] =
{ sql: "SELECT res_deel_key product_key, "
+ lcl.xsql('ins_deel_omschrijving','d.ins_deel_key')+" ||', '||"+ lcl.xsql('res_deel_opmerking','res_deel_key')+" product,"
+ " 'resdeel' soort,"
+ " " + ranknr('resdeel') + " rang, "
+ " res_deel_prijs prijs,"
+ " '' extra,"
+ " NULL extra2,"
+ " l.alg_locatie_key alg_locatie_key,"
+ " res_discipline_key disc_key,"
+ lcl.xsql('rd.ins_discipline_omschrijving', 'rd.ins_discipline_key') + " vakgroep,"
+ " NULL xurl,"
+ " rd.ins_discipline_color kleur, "
+ " res_deel_image foto,"
+ " NULL ishtmlsafe_extra"
+ " FROM res_v_aanwezigdeel r,"
+ " res_v_aanwezigdiscipline rd,"
+ " ins_deel d,"
+ " ins_srtdeel isd,"
+ " ins_srtgroep isg,"
+ " alg_ruimte rm,"
+ " alg_verdieping v,"
+ " alg_gebouw g,"
+ " alg_locatie l,"
+ " alg_district di"
+ " WHERE rd.ins_discipline_key = r.res_discipline_key"
+ " AND (r.res_deel_vervaldatum IS NULL OR r.res_deel_vervaldatum > SYSDATE)"
+ " AND res_ins_deel_key = d.ins_deel_key"
+ " AND isd.ins_srtdeel_key = d.ins_srtdeel_key"
+ " AND isg.ins_srtgroep_key = isd.ins_srtgroep_key"
+ " AND rm.alg_ruimte_key = d.ins_alg_ruimte_key"
+ " AND d.ins_alg_ruimte_type = 'R'"
+ " AND v.alg_verdieping_key = rm.alg_verdieping_key"
+ " AND g.alg_gebouw_key = v.alg_gebouw_key"
+ " AND l.alg_locatie_key = g.alg_locatie_key"
+ " AND di.alg_district_key = l.alg_district_key"
+ " AND " + fac.createOrClause("UPPER("+ lcl.xsql('res_deel_opmerking','res_deel_key')+"||', '||"
+ lcl.xsql('ins_deel_omschrijving','d.ins_deel_key')+"||', '||"
+ lcl.xsql('rd.ins_discipline_omschrijving','rd.ins_discipline_key') +"||', '||"
+ lcl.xsql('ins_srtdeel_omschrijving','d.ins_srtdeel_key')+"||', '||"
+ lcl.xsql('ins_srtgroep_omschrijving','isg.ins_srtgroep_key')+")", supper)
+ " AND r.res_discipline_key IN (SELECT res_discipline_key"
+ " FROM res_activiteitdiscipline rad, res_activiteit ra, res_srtactiviteit rsa"
+ " WHERE rad.res_activiteit_key = ra.res_activiteit_key"
+ " AND ra.res_srtactiviteit_key = rsa.res_srtactiviteit_key"
+ " AND ra.res_activiteit_master_key IS NULL"
+ " AND res_srtactiviteit_soort = 1)" // Alleen CV
+ reslocstr,
///doet de 3d wel + (reslocstr!=""?" AND g.alg_locatie_key IN ("+reslocstr+")":"")
icon : "fa-calendar-alt",
intern: L("lcl_srch_resdeel")
}
queries['resdeel'].sql =
discxalg3d(queries['resdeel'].sql,
"r.res_discipline_key",
"di.alg_regio_key",
"l.alg_district_key",
"l.alg_locatie_key",
"v.alg_gebouw_key",
"v.alg_verdieping_key",
"rm.alg_ruimte_key",
"WEB_RESUSE", //autfunction,
write_discs,
true) // forwrite
+ " UNION " +
discxalg3d(queries['resdeel'].sql,
"r.res_discipline_key",
"di.alg_regio_key",
"l.alg_district_key",
"l.alg_locatie_key",
"v.alg_gebouw_key",
"v.alg_verdieping_key",
"rm.alg_ruimte_key",
"WEB_RESFOF", //autfunction,
write_discs,
true); // forwrite
var authparamsPHB = user.checkAutorisation("WEB_PHONEB", true);
if (authparamsPHB)
{
queries['prsperslid'] =
{ sql: "SELECT p.prs_perslid_key product_key, "
+ " " + S("prs_pers_string") + " product,"
+ " 'prsperslid' soort,"
+ " " + ranknr('prsperslid') + " rang, "
+ " NULL prijs, "
+ " " + S("prs_dep_string") + " extra,"
+ " NULL extra2,"
+ " -1 disc_key,"
+ " NULL kleur, "
+ " NULL foto,"
+ " NULL xurl,"
+ " prs_srtperslid_omschrijving,"
+ " NULL ishtmlsafe_extra"
+ " FROM prs_v_aanwezigperslid p"
+ " , prs_v_aanwezigafdeling d"
+ " , prs_srtperslid psp"
+ (authparamsPHB.ALGreadlevel > -1 // De werkplek tabellen alleen erbij joinen indien je niet alle rechten hebt.
? " , prs_perslidwerkplek pw"
+ " , prs_v_werkplek_gegevens pwg"
: "")
+ " WHERE p.prs_afdeling_key = d.prs_afdeling_key"
+ " AND p.prs_srtperslid_key = psp.prs_srtperslid_key(+)"
+ " AND p.prs_perslid_ingids = 1"
+ (authparamsPHB.ALGreadlevel > -1 // De werkplek tabellen alleen erbij joinen indien je niet alle rechten hebt.
? " AND p.prs_perslid_key = pw.prs_perslid_key"
+ " AND pw.prs_werkplek_key = pwg.prs_werkplek_key"
: "")
+ " AND " + fac.createOrClause("UPPER(p.prs_perslid_naam||','||prs_perslid_voornaam||','||d.prs_afdeling_omschrijving||','||"+ lcl.xsql('prs_srtperslid_omschrijving','psp.prs_srtperslid_key')+")", supper)
+ (authparamsPHB.PRSreadlevel == 0 // Zit de afdeling van de persoon in mijn scope
? " AND d.prs_afdeling_key IN"
+ " (SELECT a.prs_afdeling_key FROM prs_v_afdeling a "
+ " WHERE a.prs_bedrijf_key = " + user.afdeling().prs_bedrijf_key() + ")"
: "")
+ (authparamsPHB.PRSreadlevel > 0 // Zit de afdeling van de persoon in mijn scope
? " AND D.prs_afdeling_key IN "
+ " (SELECT prs_afdeling_key FROM prs_v_afdeling_familie a"
+ " WHERE a.prs_afdeling_elder_key IN"
+ " (SELECT aa.prs_afdeling_elder_key"
+ " FROM prs_v_afdeling_familie aa"
+ " WHERE aa.prs_afdeling_key = " + user.prs_afdeling_key()
+ " AND aa.niveau = " + authparamsPHB.PRSreadlevel + "))"
: "")
+ (authparamsPHB.ALGreadlevel > -1 // Zit de werkplek van de persoon in mijn scope
? " AND pwg.alg_ruimte_key IN"
+ " (SELECT alg_ruimte_key FROM fac_v_my_rooms"
+ " WHERE prs_perslid_key = " + user_key
+ " AND niveau = " + authparamsPHB.ALGreadlevel + ")"
: "")
+ " GROUP BY p.prs_perslid_key" // Er kunnen meerdere werkplekken zijn die dezelfde resultatenopleveren.
+ " , "+S("prs_pers_string")
+ " , "+S("prs_dep_string")
+ " , prs_srtperslid_omschrijving",
icon : "fa-user",
intern: L("lcl_srch_personen"),
histogram: { "extra": { lcl: L("lcl_department") },
"prs_srtperslid_omschrijving": { lcl: L("lcl_prs_person_function") }
}
}
}
if (S("faq_enabled") == 1)
{
var fieldstrarr = ["UPPER(fac_faq_hint)"];
if (S("faq_search_hints_only") <= 0) fieldstrarr.push("UPPER(fac_faq_question)","UPPER(fac_faq_answer)","UPPER(fac_faq_answer2)");
fsql = "SELECT ff.fac_faq_key product_key,"
+ " ff.fac_faq_question product,"
+ " 'faq' soort,"
+ " " + ranknr('faq') + " rang, "
+ " NULL prijs,"
+ " ff.fac_faq_answer extra,"
+ " ff.fac_faq_answer2 extra2,"
+ " NULL alg_locatie_key,"
+ " -1 disc_key,"
+ lcl.xsql('d.ins_discipline_omschrijving', 'd.ins_discipline_key') + " vakgroep,"
+ " ff.fac_faq_url xurl,"
+ " d.ins_discipline_color kleur, "
+ " d.ins_discipline_image foto,"
+ " NULL ishtmlsafe_extra"
+ " FROM fac_faq ff, faq_v_aanwezigdiscipline d"
+ " WHERE " + fac.createOrClause2(fieldstrarr, supper)
+ " AND ff.faq_ins_discipline_key = d.ins_discipline_key"
+ " AND (fac_functie_key IS NULL"
+ " OR fac_functie_key IN "
+ " (SELECT fac_functie_key FROM fac_v_webgebruiker"
+ " WHERE prs_perslid_key = " + user_key + "))"
+ " AND ROWNUM < " + S("faq_max_results")
+ " AND (ff.fac_faq_lang = " + safe.quoted_sql(user.lang()) + " OR ff.fac_faq_lang IS NULL)"
+ " AND ff.fac_faq_datum < SYSDATE" // zelf ingevoerd zie je hier niet per se terug
+ " AND (ff.fac_faq_vervaldatum IS NULL OR ff.fac_faq_vervaldatum > SYSDATE)";
fsql += " AND ( ff.faq_ins_discipline_key IN "
+ " (SELECT ins_discipline_key FROM fac_v_webgebruiker"
+ " WHERE prs_perslid_key = " + user_key
+ " AND fac_functie_key = " + F("WEB_FAQBOF") + ")"
+ " OR BITAND (fac_faq_level, 2) = 2" // Zichtbaar frontoffice
+ " AND ff.faq_ins_discipline_key IN "
+ " (SELECT ins_discipline_key FROM fac_v_webgebruiker"
+ " WHERE prs_perslid_key = " + user_key
+ " AND fac_functie_key = " + F("WEB_FAQFOF") + ")"
+ " OR BITAND (fac_faq_level, 1) = 1" // Zichtbaar frontend
+ " AND ff.faq_ins_discipline_key IN "
+ " (SELECT ins_discipline_key FROM fac_v_webgebruiker"
+ " WHERE prs_perslid_key = " + user_key
+ " AND fac_functie_key = " + F("WEB_FAQUSE") + ")"
+ " )"
fsql += " ORDER BY fac_faq_rank DESC, fac_faq_datum DESC";
//TODO + (urole=="fe" ? " AND fac_faq_level < 2" : "")
queries['faq'] =
{ sql: fsql
, icon : "fa-book"
, intern : L("lcl_faq_item")
}
}
return queries;
}
function incArray(s, arr)
{
var found = false;
if (arr)
{
for (var i=0; i<arr.length; i++)
{
if (s == arr[i])
{
found = true;
break;
}
}
}
return found;
}
// TODO: als inc_queries resruimte is en er zijn externe catalogi, dan die erbij halen....
function prodsearch_sql(filter, queries, write_discs, q_items, inc_queries)
{
var qq = [];
if (filter.soort.val) // er is misschien uit een histogram gekozen
{
sqln = queries[filter.soort.val].sql;
var histoWhere = [];
for (item in queries[filter.soort.val].histogram)
{
var qq = q_items[item]; //getQParam(item, "");
if (qq && qq != "" && qq != "-1")
{
histoWhere.push(item + " = " + safe.quoted_sql(qq));
filter[item] = { val: qq, txt: qq, lcl: queries[filter.soort.val].histogram[item].lcl };
}
}
if (histoWhere.length)
sqln = "SELECT * FROM (" + sqln + ") WHERE " + histoWhere.join(" AND ");
}
else // als we soort nog niet weten moeten we alle queries gebruiken
{
for (item in queries)
{
if (incArray(item, inc_queries))
{
sql = "SELECT soort, product_key, product, rang, kleur, foto, prijs, extra, extra2, disc_key, xurl, ishtmlsafe_extra"
+ " FROM (" + queries[item].sql + ")"
qq.push(sql);
}
}
sqln = qq.join(" UNION ALL ")
}
// Add authorisation (only on disciplines possible):
sqln = "SELECT * FROM ("+sqln+") WHERE disc_key IN ("+write_discs+")"
+ " ORDER BY rang, product, foto";
return sqln;
}
%>