From b1e035ce4b93d04b3db3ebdceadaa3ff73d97069 Mon Sep 17 00:00:00 2001 From: Maykel Geerdink Date: Wed, 9 Apr 2025 13:20:45 +0000 Subject: [PATCH] HEIN#88521: Filterprobleem in fiatteren facturen tabblad, toont alle locaties. svn path=/Website/branches/v2025.1/; revision=68706 --- APPL/FIN/fin_list.inc | 138 ++++++++++++++++++++++++------------------ 1 file changed, 78 insertions(+), 60 deletions(-) diff --git a/APPL/FIN/fin_list.inc b/APPL/FIN/fin_list.inc index d2585c9f42..fef7baa11e 100644 --- a/APPL/FIN/fin_list.inc +++ b/APPL/FIN/fin_list.inc @@ -598,17 +598,39 @@ function fin_list (params) if (kpgrp_key_arr) sql += " AND kpg.prs_kostenplaatsgrp_key IN (" + kpgrp_key_arr.join(", ") + ")"; - // Als bld_key een geldige waarde heeft, hebben loc_key, dis_key en reg_key ook een geldige waarde - if (reg_key) + // Het eindlevel van de FCLTplaatsselector is Gebouw(3). + // Het startlevel kan gekozen zijn (Regio(0), District(1), Locatie(1) of Gebouw(3)). + // Dus als bld_key een geldige waarde heeft, wil niet zeggen dat loc_key, dis_key en reg_key ook een geldige waarde hebben. + var dis_key_arr = []; + var loc_key_arr = []; + + if (bld_key) + { // Zoek de locatie die bij het gekozen gebouw hoort. + sqlb = "SELECT l.alg_locatie_key" + + " FROM alg_locatie l" + + " , alg_gebouw g" + + " WHERE l.alg_locatie_key = g.alg_locatie_key" + + " AND g.alg_gebouw_key = " + bld_key; + var oRsb = Oracle.Execute(sqlb); + while (!oRsb.eof) + { + loc_key_arr.push(oRsb("alg_locatie_key").Value); + oRsb.MoveNext(); + } + oRsb.Close(); + } + else if (loc_key) + { + loc_key_arr.push(loc_key); + } + else { - var dis_key_arr = []; if (dis_key) { dis_key_arr.push(dis_key); } - else - { - // Zoek alle districtn die bij het gekozen regio horen. + else if (reg_key) + { // Zoek alle districtn die bij het gekozen regio horen. sqld = "SELECT alg_district_key" + " FROM alg_district" + " WHERE alg_regio_key = " + reg_key; @@ -621,12 +643,7 @@ function fin_list (params) oRsd.Close(); } - var loc_key_arr = []; - if (loc_key) - { - loc_key_arr.push(loc_key); - } - else + if (dis_key_arr.length > 0) { // Zoek alle locaties die bij het gekozen regio/district horen. sqld = "SELECT alg_locatie_key" @@ -640,58 +657,59 @@ function fin_list (params) } oRsd.Close(); } + } - if (loc_key_arr.length > 0) + if (loc_key_arr.length > 0) + { + // Als alleen reg_key en/of dis_key bekend is dan zoeken voor alle loc_key bij deze reg_key en/of dis_key. + // 1) Het afleveradres van de locatie van de bestelling (bld_key is niet bekend/gedefinieerd) + sql1 = " (f.bes_bestelopdr_key IS NOT NULL " + + " AND bo.mld_adres_key_lev IN (" + + "SELECT m.mld_adres_key" + + " FROM mld_v_afleveradres m" + + " WHERE m.alg_locatie_key IN (" + loc_key_arr.join(",") + ")))"; + + // 2) De plaats van de bijbehorende melding van de opdracht + sql2 = " (f.mld_opdr_key IS NOT NULL " + + " AND EXISTS (SELECT m.mld_melding_key" + + " FROM alg_v_allonroerendgoed onrg" + + " WHERE m.mld_alg_onroerendgoed_keys = onrg.alg_onroerendgoed_keys(+)" + + " AND onrg.alg_locatie_key IN (" + loc_key_arr.join(",") + ")" + + (bld_key + ? " AND ( (onrg.alg_gebouw_key = " + bld_key + ")" + + " OR (onrg.alg_terreinsector_key = " + bld_key + ")" + + " )" + : "") + + " ))"; + + // Locatie/gebouw scope van het contract + sql3 = " (c.cnt_contract_key IN" + + " (SELECT cnt_contract_key" + + " FROM cnt_v_aanwezigcontract_plaats" + + " WHERE (cnt_alg_plaats_code = 'L' AND cnt_alg_plaats_key IN (" + loc_key_arr.join(",") + "))"; + if (bld_key) { - // Als alleen reg_key en/of dis_key bekend is dan zoeken voor alle loc_key bij deze reg_key en/of dis_key. - // 1) Het afleveradres van de locatie van de bestelling (bld_key is niet bekend/gedefinieerd) - sql1 = " (f.bes_bestelopdr_key IS NOT NULL " - + " AND bo.mld_adres_key_lev IN (" - + "SELECT m.mld_adres_key" - + " FROM mld_v_afleveradres m" - + " WHERE m.alg_locatie_key IN (" + loc_key_arr.join(",") + ")))"; - - // 2) De plaats van de bijbehorende melding van de opdracht - sql2 = " (f.mld_opdr_key IS NOT NULL " - + " AND EXISTS (SELECT m.mld_melding_key" - + " FROM alg_v_allonroerendgoed onrg" - + " WHERE m.mld_alg_onroerendgoed_keys = onrg.alg_onroerendgoed_keys(+)" - + " AND onrg.alg_locatie_key IN (" + loc_key_arr.join(",") + ")" - + (bld_key - ? " AND ( (onrg.alg_gebouw_key = " + bld_key + ")" - + " OR (onrg.alg_terreinsector_key = " + bld_key + ")" - + " )" - : "") - + " ))"; - - // Locatie/gebouw scope van het contract - sql3 = " (c.cnt_contract_key IN" - + " (SELECT cnt_contract_key" - + " FROM cnt_v_aanwezigcontract_plaats" - + " WHERE (cnt_alg_plaats_code = 'L' AND cnt_alg_plaats_key IN (" + loc_key_arr.join(",") + "))"; - if (bld_key) - { - sql3 += " OR (cnt_alg_plaats_code = 'G' AND cnt_alg_plaats_key = " + bld_key + ")" - + " OR (cnt_alg_plaats_code = 'T' AND cnt_alg_plaats_key = " + bld_key + ")"; - } - else - { - sql3 += " OR (cnt_alg_plaats_code = 'G' AND cnt_alg_plaats_key IN " - + " (SELECT alg_gebouw_key FROM alg_v_aanweziggebouw WHERE alg_locatie_key IN (" + loc_key_arr.join(",") + "))" - + " OR cnt_alg_plaats_code = 'T' AND cnt_alg_plaats_key IN " - + " (SELECT alg_terreinsector_key FROM alg_v_aanwezigterreinsector WHERE alg_locatie_key IN (" + loc_key_arr.join(",") + ")))"; - } - sql3 += " UNION" - + " SELECT cnt_contract_key" - + " FROM cnt_v_aanwezigcontract_object co" - + " , ins_v_aanwezigdeel ad" - + " WHERE cnt_ins_deel_key = ad.ins_deel_key AND ad.ins_alg_locatie_key IN (" + loc_key_arr.join(",") + ")))"; - - sql += "AND (" + sql1 + " OR " + sql2 + " OR " + sql3 + ")"; + sql3 += " OR (cnt_alg_plaats_code = 'G' AND cnt_alg_plaats_key = " + bld_key + ")" + + " OR (cnt_alg_plaats_code = 'T' AND cnt_alg_plaats_key = " + bld_key + ")"; } else - // Er is geen enkele locatie die bij het gekozen district hoort. Dan kunnen er ook geen resultaten zijn. - sql += " AND 1=0"; + { + sql3 += " OR (cnt_alg_plaats_code = 'G' AND cnt_alg_plaats_key IN " + + " (SELECT alg_gebouw_key FROM alg_v_aanweziggebouw WHERE alg_locatie_key IN (" + loc_key_arr.join(",") + "))" + + " OR cnt_alg_plaats_code = 'T' AND cnt_alg_plaats_key IN " + + " (SELECT alg_terreinsector_key FROM alg_v_aanwezigterreinsector WHERE alg_locatie_key IN (" + loc_key_arr.join(",") + ")))"; + } + sql3 += " UNION" + + " SELECT cnt_contract_key" + + " FROM cnt_v_aanwezigcontract_object co" + + " , ins_v_aanwezigdeel ad" + + " WHERE cnt_ins_deel_key = ad.ins_deel_key AND ad.ins_alg_locatie_key IN (" + loc_key_arr.join(",") + ")))"; + + sql += "AND (" + sql1 + " OR " + sql2 + " OR " + sql3 + ")"; + } + else if (reg_key > 0 || dis_key > 0) + { // Er is geen enkele locatie die bij het gekozen regio en/of district hoort. Dan kunnen er ook geen resultaten zijn. + sql += " AND 1=0"; } if (verantw_key)