217 lines
8.8 KiB
C++
217 lines
8.8 KiB
C++
<% /*
|
|
$Revision$
|
|
$Id$
|
|
|
|
File: getkenmerksql.inc
|
|
Description: Functie die de sql oplevert van ingevulde kenmerk filters
|
|
Parameters:
|
|
Context: Vanuit xxx_list.inc
|
|
Note:
|
|
*/ %>
|
|
|
|
<%
|
|
function getKenmerkSql(pmodule, pkeyColumn, prequestForm)
|
|
{
|
|
var ktable = "";
|
|
var slecil = 0;
|
|
switch(pmodule)
|
|
{
|
|
case "ALG": ktable = "alg_onrgoedkenmerk";
|
|
break;
|
|
case "BES": ktable = "bes_kenmerkbestell";
|
|
break;
|
|
case "CNT": ktable = "cnt_kenmerkcontract";
|
|
break;
|
|
case "FAQ": ktable = "faq_kenmerkwaarde";
|
|
break;
|
|
case "FIN": ktable = "fin_kenmerkfactuur"; // TBD
|
|
break;
|
|
case "CIL":
|
|
case "SLE": ktable = "ins_kenmerkdeel";
|
|
slecil = (pmodule == "CIL"? 1 : 2);
|
|
pmodule = "INS";
|
|
break;
|
|
case "INS": ktable = "ins_kenmerkdeel";
|
|
break;
|
|
case "MLD": ktable = "mld_kenmerkmelding";
|
|
break;
|
|
case "OPD": ktable = "mld_kenmerkopdr";
|
|
pmodule = "MLD";
|
|
break;
|
|
case "PRS": ktable = "prs_kenmerklink";
|
|
break;
|
|
case "RES": ktable = "res_kenmerkwaarde";
|
|
break;
|
|
}
|
|
var kverwijder = ktable + "_verwijder"; // bes_kenmerkbestell_verwijder
|
|
var kwaarde = ktable + "_waarde"; // bes_kenmerkbestell_waarde
|
|
if (pmodule == "RES") kwaarde = "res_kenmerkreservering_waarde"; // RES is uitzondering
|
|
|
|
// b.bes_bestelling_key => tableref = "b" en tablekey = bes_bestelling_key
|
|
var pkeyColumn = pkeyColumn.split('.');
|
|
var tableref = pkeyColumn[0];
|
|
var tablekey = pkeyColumn[1];
|
|
|
|
var sql_k = "";
|
|
var where = "";
|
|
var k_all = (prequestForm? getFParamInt("k_all", -1) : getQParamInt("k_all", -1)); // Aantal kenmerken
|
|
if (!isNaN(k_all) && k_all > 0)
|
|
{
|
|
for (kenmerk = 1; kenmerk <= k_all; kenmerk++)
|
|
{
|
|
var kk = (prequestForm
|
|
? getFParamInt("k" + kenmerk + "key", -1)
|
|
: getQParamInt("k" + kenmerk + "key", -1)); // kenmerk key of bij INS: srtkenmerk_key
|
|
var kv = new String(
|
|
(prequestForm
|
|
? getFParam("k" + kenmerk + "val", "")
|
|
: getQParam("k" + kenmerk + "val", ""))); // kenmerk waarde
|
|
var ko = new String(
|
|
(prequestForm
|
|
? getFParam("ko" + kenmerk, "")
|
|
: getQParam("ko" + kenmerk, ""))); // kenmerk operand
|
|
var kt = (prequestForm
|
|
? getFParam("k" + kenmerk + "t", null)
|
|
: getQParam("k" + kenmerk + "t", null)); // kenmerk type
|
|
|
|
if ((kt == "S" || kt == "R") && kv == "-1") kv = "";
|
|
if (kk > 0 && (kv != "" || ko == "IS NOT NULL" || ko == "IS NULL"))
|
|
{
|
|
var where1 = kwaarde;
|
|
var where2 = ko;
|
|
var where3 = "";
|
|
var add_b = true;
|
|
where = "";
|
|
|
|
var tablekey2 = tablekey;
|
|
var andALG = "";
|
|
var andPRS = "";
|
|
// Voor ALG en PRS tablekey2 aanpassen en extra AND conditie(s) toevoegen
|
|
if (pmodule == "ALG")
|
|
{
|
|
tablekey2 = "alg_onrgoed_key"
|
|
andALG = " AND alg_onrgoed_niveau = "
|
|
if (tablekey == "alg_regio_key")
|
|
andALG += "'R'"; // Regio
|
|
if (tablekey == "alg_district_key")
|
|
andALG += "'D'"; // District
|
|
if (tablekey == "alg_locatie_key")
|
|
andALG += "'L'"; // Locatie
|
|
if (tablekey == "alg_gebouw_key")
|
|
andALG += "'G'"; // Gebouw
|
|
if (tablekey == "alg_verdieping_key")
|
|
andALG += "'V'"; // Verdieping
|
|
if (tablekey == "alg_ruimte_key")
|
|
andALG += "'R'"; // Ruimte
|
|
andALG += " AND " + tableref + "." + tablekey + " = alg_onrgoed_key"
|
|
}
|
|
if (pmodule == "PRS")
|
|
{
|
|
tablekey2 = "prs_link_key"
|
|
andPRS = " AND prs_kenmerklink_niveau = "
|
|
if (tablekey == "prs_afdeling_key")
|
|
andPRS += "'A'"; // Afdeling
|
|
if (tablekey == "prs_perslid_key")
|
|
andPRS += "'P'"; // Persoon
|
|
if (tablekey == "prs_bedrijf_key")
|
|
andPRS += "'B'"; // Bedrijf
|
|
if (tablekey == "prs_contactpersoon_key")
|
|
andPRS += "'C'"; // Contactpersoon (FSN#15407)
|
|
}
|
|
if (slecil > 0)
|
|
{
|
|
tablekey2 = "ins_deel_key";
|
|
where3 = " AND ik.ins_srtinstallatie_key = " + (slecil == 1? S("cil_ins_srt_groep_key") : S("sle_ins_srt_groep_key"));
|
|
}
|
|
|
|
if (ko != 'IS NOT NULL' && ko != 'IS NULL')
|
|
{
|
|
add_b = false;
|
|
if (ko == 'LIKE' || ko == 'NOT LIKE')
|
|
{
|
|
where1 = "UPPER(" + where1 + ")";
|
|
kv = safe.quoted_sql_wild("%" + kv + "%");
|
|
}
|
|
else
|
|
{
|
|
if (kt == 'D') // Beide kanten naar DATE converteren om te kunnen vergelijken '<' en '>'
|
|
{
|
|
if (kv.indexOf('-'))
|
|
{ // assume '-' format
|
|
kv = " fac.safe_to_date(" + safe.quoted_sql(kv) + ",'DD-MM-YYYY')";
|
|
where1 = " fac.safe_to_date(" + where1 + ",'DD-MM-YYYY')";
|
|
}
|
|
else
|
|
{ // assume '/' format
|
|
kv = " fac.safe_to_date(" + safe.quoted_sql(kv) + ",'DD/MM/YYYY')";
|
|
where1 = " fac.safe_to_date(" + where1 + ",'DD/MM/YYYY')";
|
|
}
|
|
}
|
|
else if (kt == 'N') // Beide kanten naar NUMBER converteren om te kunnen vergelijken '<' en '>'
|
|
{ // Een numeriek "N" kenmerk kan ook een checkbox zijn.
|
|
if (kv == "on") kv = "1";
|
|
kv = " fac.safe_to_number(" + safe.quoted_sql(kv.replace(',', '.')) + ")" ; // Bij "Geavanceerd" kan het numerieke getal met de komma i.p.v. punt zijn ingevuld.
|
|
where1 = " fac.safe_to_number(" + where1 + ")" ;
|
|
}
|
|
else // kt=='C', 'S', ..
|
|
{
|
|
if (kt != 'R' && kt != 'S') // Listbox en suggestbox zijn keys. Upper is dan niet nodig. Wordt de query alleen maar trager van.
|
|
where1 = "UPPER(" + where1 + ")";
|
|
kv = safe.quoted_sql(kv.toUpperCase());
|
|
}
|
|
}
|
|
|
|
where2 += " " + kv;
|
|
}
|
|
else
|
|
{
|
|
// add_b blijft true trouwens
|
|
|
|
// Bij INS bevat kk een ins_srtkenmerk_key, niet een ins_kenmerk_key zoals de rest.
|
|
// Dat is zo geregeld in INS/ins_flexkenmerk.inc
|
|
// We moeten nu wel de tabel ins_kenmerk er bij slepen
|
|
// Zelfde truc ook voor MLD
|
|
|
|
where = "(" + ((ko == "IS NULL") ? " NOT " : "")
|
|
+ " EXISTS (SELECT 'x'"
|
|
+ " FROM " + ktable
|
|
+ (pmodule == "INS"? ", ins_kenmerk ik":"")
|
|
+ (pmodule == "MLD"? ", mld_kenmerk mk":"")
|
|
+ " WHERE "
|
|
+ (pmodule == "INS"? " ik.ins_srtkenmerk_key = " + kk + " AND ik.ins_kenmerk_key = ins_kenmerkdeel.ins_kenmerk_key":"")
|
|
+ (pmodule == "MLD"? " mk.mld_srtkenmerk_key = " + kk + " AND mk.mld_kenmerk_key = "+ktable+".mld_kenmerk_key":"")
|
|
+ (pmodule != "INS" && pmodule != "MLD" ? pmodule.toLowerCase() + "_kenmerk_key = " + kk:"")
|
|
+ " AND " + tablekey2 + " = " + tableref + "." + tablekey
|
|
+ " AND " + where1 + " IS NOT NULL "
|
|
+ andALG + andPRS
|
|
+ where3
|
|
+ " AND " + kverwijder + " IS NULL) ";
|
|
}
|
|
|
|
// Ik zeg: een wat gekke constructie zo
|
|
sql_k += " AND " + where;
|
|
// voor filter Geen Waarde zou ook nog: Wel een record maar met een NULL waarde kunnen gelden
|
|
// die nemen we ook nog mee. Alleen bij "Gevuld" (verwerkt in 'where') hoeven we niet verder naar de waarden te kijken
|
|
// in alle andere gevallen komt hier de conditie 'kenmerk=waarde' erbij
|
|
if (ko != "IS NOT NULL") {
|
|
sql_k +=(add_b ? " OR " : "")
|
|
+ " " + tableref + "." + tablekey + " IN (SELECT " + tablekey2
|
|
+ " FROM " + ktable
|
|
+ (pmodule == "INS"? ", ins_kenmerk ik":"")
|
|
+ (pmodule == "MLD"? ", mld_kenmerk mk":"")
|
|
+ " WHERE "
|
|
+ (pmodule == "INS"? " ik.ins_srtkenmerk_key = " + kk + " AND ik.ins_kenmerk_key = ins_kenmerkdeel.ins_kenmerk_key":"")
|
|
+ (pmodule == "MLD"? " mk.mld_srtkenmerk_key = " + kk + " AND mk.mld_kenmerk_key = "+ktable+".mld_kenmerk_key":"")
|
|
+ (pmodule != "INS" && pmodule != "MLD" ? pmodule.toLowerCase() + "_kenmerk_key = " + kk:"")
|
|
+ " AND " + where1 + " " + where2
|
|
+ andALG + andPRS
|
|
+ where3
|
|
+ " AND " + kverwijder + " IS NULL)";
|
|
}
|
|
sql_k += (add_b ? ")" : "");
|
|
}
|
|
}
|
|
}
|
|
return sql_k;
|
|
}
|
|
%> |