580 lines
31 KiB
PHP
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;
|
|
}
|
|
|
|
%> |