From 48477de89f3d24c955f2c08845e84923efca54bb Mon Sep 17 00:00:00 2001 From: Jos Groot Lipman Date: Tue, 20 May 2025 13:20:38 +0000 Subject: [PATCH] PZEE#88371 Notifybedrijven vaker rekening houden met discipline FCLT#88913 Uitzondering van ORDNEW in notificatiequeue uitfaseren svn path=/Database/trunk/; revision=69068 --- CNT/CNT_PAC.SRC | 18 +++++++++++++----- FAC/FAC_PAC.SRC | 41 +++++++---------------------------------- MLD/MLD_PAC.SRC | 13 +++++++------ MLD/MLD_TRI.SRC | 2 +- RES/RES_PAC.SRC | 11 ++++++++++- 5 files changed, 38 insertions(+), 47 deletions(-) diff --git a/CNT/CNT_PAC.SRC b/CNT/CNT_PAC.SRC index b34bf167..e4283d3b 100644 --- a/CNT/CNT_PAC.SRC +++ b/CNT/CNT_PAC.SRC @@ -111,14 +111,14 @@ CREATE OR REPLACE PACKAGE BODY cnt AS FROM cnt_verlengschema WHERE cnt_verlengschema_volgnr <= volgnr AND cnt_contract_key = cnt_key; - + einddatum DATE := startdatum; BEGIN FOR c IN c_verleng LOOP einddatum := cnt.cnt_getTermijndatum(einddatum, c.cnt_verlengschema_verlengtermijn, 1); END LOOP; - + RETURN einddatum; END; @@ -313,8 +313,8 @@ CREATE OR REPLACE PACKAGE BODY cnt AS fac.trackaction ('CNTUPD', cnt_verloopt.cnt_contract_key, NULL, NULL, tracking); -- Heeft dit automatisch verlengbaar contract een verlengschema? BEGIN - SELECT this_schema_key - , next_schema_key + SELECT this_schema_key + , next_schema_key INTO this_verlengschema_key , next_verlengschema_key FROM ( SELECT cnt_verlengschema_key AS this_schema_key @@ -781,11 +781,15 @@ CREATE OR REPLACE PACKAGE BODY cnt AS l.alg_locatie_key, CASE WHEN b.prs_bedrijf_key = c.cnt_prs_bedrijf_key THEN 'C' ELSE 'G' END bedrijfadres_type, cnt_contract_nummer_intern, - COALESCE (l.alg_locatie_email, ins_discipline_email) + c.ins_discipline_key, + COALESCE (l.alg_locatie_email, ins_discipline_email), + d.prs_bedrijf_key persoon_bedrijf_key -- van de melder, niet de uitvoerende FROM prs_bedrijf b, cnt_contract c, ins_tab_discipline d, alg_locatie l, + prs_perslid p, + prs_v_afdeling d, ( SELECT cnt_contract_key, DECODE (MIN (cp1.cnt_alg_plaats_code), 'L', MIN (cp1.cnt_alg_plaats_key), @@ -829,6 +833,8 @@ CREATE OR REPLACE PACKAGE BODY cnt AS AND d.ins_discipline_key = c.ins_discipline_key AND c.cnt_contract_key = cp.cnt_contract_key(+) AND cp.cnt_locatie_key = l.alg_locatie_key(+) + AND d.prs_afdeling_key = p.prs_afdeling_key + AND p.prs_perslid_key = c.prs_perslid_key_beh AND ( b.prs_bedrijf_key = c.cnt_prs_bedrijf_key -- type 'C' OR EXISTS (SELECT 1 @@ -842,7 +848,9 @@ CREATE OR REPLACE PACKAGE BODY cnt AS prefkey => pcntkey, ptrackingkey => ptrackingkey, preference => bedrijfrec.cnt_contract_nummer_intern, + pdiscipline_key => bedrijfrec.ins_discipline_key, plocatie_key => bedrijfrec.alg_locatie_key, + pbedrijf_key2 => bedrijfrec.persoon_bedrijf_key, pnotidelay => pnotidelay); END LOOP; END; diff --git a/FAC/FAC_PAC.SRC b/FAC/FAC_PAC.SRC index 3042046d..a4ed52ab 100644 --- a/FAC/FAC_PAC.SRC +++ b/FAC/FAC_PAC.SRC @@ -163,8 +163,7 @@ CREATE OR REPLACE PACKAGE fac plocatie_key NUMBER DEFAULT NULL, pdiscipline_key NUMBER DEFAULT NULL, ptypeopdr_key NUMBER DEFAULT NULL, - pbedrijf_key2 NUMBER DEFAULT NULL, - pdisc_key NUMBER DEFAULT NULL); + pbedrijf_key2 NUMBER DEFAULT NULL); FUNCTION gettrackingdate (peventcode IN VARCHAR2, pkey IN number) RETURN date; FUNCTION gettrackinguserkey (peventcode IN VARCHAR2, pkey IN number) RETURN number; PROCEDURE initsession (flcode IN VARCHAR2); @@ -2998,7 +2997,7 @@ CREATE OR REPLACE PACKAGE BODY fac AS AND k.mld_kenmerk_default LIKE '%##SQL##%' AND k.mld_kenmerk_verplicht = 1 AND t.mld_srtkenmerk_verwijder IS NULL - AND k.mld_kenmerk_volgnummer <= 900 + AND BITAND(k.mld_kenmerk_rolcode, 3) > 0 AND NOT EXISTS (SELECT '' FROM mld_kenmerkmelding km @@ -3890,6 +3889,7 @@ CREATE OR REPLACE PACKAGE BODY fac AS VALUES (prefkey, puserkey, tkey, loms, psubjectkey ) RETURNING fac_tracking_key INTO new_fac_tracking_key; + -- LET OP: Dit activeert fac_t_fac_tracking_b_i aan waar fac.notifytracking wordt aangeroepen. ELSE INSERT INTO fac_tracking (fac_tracking_refkey, prs_perslid_key, fac_srtnotificatie_key, fac_tracking_datum, fac_tracking_oms, fac_tracking_subject_refkey ) @@ -4996,8 +4996,7 @@ CREATE OR REPLACE PACKAGE BODY fac AS plocatie_key NUMBER DEFAULT NULL, pdiscipline_key NUMBER DEFAULT NULL, ptypeopdr_key NUMBER DEFAULT NULL, - pbedrijf_key2 NUMBER DEFAULT NULL, - pdisc_key NUMBER DEFAULT NULL) -- future use + pbedrijf_key2 NUMBER DEFAULT NULL) AS l_bdradr_key prs_bedrijfadres.prs_bedrijfadres_key%TYPE; l_basrt_key prs_bedrijfadres_srtnoti.prs_bedrijfadres_srtnoti_key%TYPE; @@ -5009,7 +5008,6 @@ CREATE OR REPLACE PACKAGE BODY fac AS l_oms fac_notificatie.fac_notificatie_oms%TYPE; l_perslid_key fac_tracking.prs_perslid_key%TYPE; l_extra_key fac_tracking.fac_tracking_subject_refkey%TYPE; - nn_noti NUMBER (10); aantal NUMBER (10); dummy VARCHAR2 (1); notbefore fac_notificatie.fac_notificatie_notbefore%TYPE; @@ -5060,20 +5058,14 @@ CREATE OR REPLACE PACKAGE BODY fac AS -- Merk op: per bedrijf notificeren we hooguit één enkel technisch adres -- Dat adres wordt eerst bepaald op basis van locatie/district/opdrachttype/discipline/bedrijfadres_type - -- Als er meerdere adressen zijn die aan zo'n combinatie voldoen moet je er altijd srtnotificaties aan hangen - -- Alleen als er maar een enkel adres is mag dat eventueel zonder srtnotificatie - -- (dat werkt alleen voor ORDNEW, BES2NE en CNTNEW voor backwards compatibiliteit) + -- Als er meerdere adressen zijn die aan zo'n combinatie wordt gekeken welke srtnotificaties er aan hangen -- Dit is om het begrijpbaar te houden. -- Ook: je kunt onder een bedrijf een adres maken voor alle locaties maar specifiek opdrachttype -- en eentje voor specifieke locatie en algemene opdracht -- Dat ondersteunen we niet en geeft ongedefinieerd gedrag. BEGIN - SELECT ba.prs_bedrijfadres_key, - (SELECT COUNT (*) - FROM prs_bedrijfadres_srtnoti basrt - WHERE basrt.prs_bedrijfadres_key = ba.prs_bedrijfadres_key - AND basrt.fac_srtnotificatie_key = l_srtnoti_key) - INTO l_bdradr_key, nn_noti + SELECT ba.prs_bedrijfadres_key + INTO l_bdradr_key FROM prs_bedrijfadres ba WHERE ba.prs_bedrijf_key = pbedrijf_key AND ba.prs_bedrijfadres_type = pbedrijfadres_type @@ -5082,7 +5074,6 @@ CREATE OR REPLACE PACKAGE BODY fac AS AND (ba.ins_discipline_key = pdiscipline_key OR ba.ins_discipline_key IS NULL) AND (ba.alg_locatie_key = plocatie_key OR ba.alg_locatie_key IS NULL) AND (ba.prs_bedrijf_key2 = pbedrijf_key2 OR ba.prs_bedrijf_key2 IS NULL) - AND (ba.ins_discipline_key = pdisc_key OR ba.ins_discipline_key IS NULL) AND ( ba.alg_district_key = (SELECT d.alg_district_key FROM alg_locatie d WHERE d.alg_locatie_key = plocatie_key) @@ -5090,9 +5081,6 @@ CREATE OR REPLACE PACKAGE BODY fac AS AND (l_srtnoti_key IN (SELECT basrt.fac_srtnotificatie_key FROM prs_bedrijfadres_srtnoti basrt WHERE basrt.prs_bedrijfadres_key = ba.prs_bedrijfadres_key) - OR NOT EXISTS (SELECT 1 -- backwards compatible: technische adressen zonder srtnoti werken nog steeds voor ORDNEW - FROM prs_bedrijfadres_srtnoti basrt - WHERE basrt.prs_bedrijfadres_key = ba.prs_bedrijfadres_key) ) ORDER BY ba.mld_typeopdr_key NULLS LAST, -- door de NULLS LAST heeft een specifieke altijd voorkeur ba.ins_discipline_key NULLS LAST, @@ -5124,21 +5112,6 @@ CREATE OR REPLACE PACKAGE BODY fac AS AND basrt.fac_srtnotificatie_key(+) = srtnoti.fac_srtnotificatie_key AND srtnoti.fac_srtnotificatie_key = l_srtnoti_key; - IF (nn_noti = 0) // geen specifiek record gevonden - THEN - IF (pbedrijfadres_type = 'O' AND l_srtnoti_code = 'ORDNEW') - OR (pbedrijfadres_type = 'O' AND l_srtnoti_code = 'ORDUPD' AND ptrackingkey IS NULL) -- vanuit trigger mld_t_mld_opdr_B_IU toen teverzenden op 2 is gezet - OR (pbedrijfadres_type = 'B' AND l_srtnoti_code = 'BES2NE') -- bestelopdracht aangemaakt - OR (pbedrijfadres_type = 'C' AND l_srtnoti_code = 'CNTNEW') - -- RESNEW nooit automatisch OR (pbedrijfadres_type = 'R' AND l_srtnoti_code = 'RESNEW') - THEN - NULL; -- backwards compatible: als geen enkel prs_bedrijfadres_srtnoti is dan is er default een xxxNEW - ELSE - DBMS_OUTPUT.Put_line ('Technisch adres onder bedrijf ' || pbedrijf_key || ' luistert niet naar notificatie ' || l_srtnoti_code); - RETURN; - END IF; - END IF; - -- ORDUPD of wat dan ook sturen we niet als er nog geen ORDNEW tracking (en naar we aannamen notificatie) is geweest -- (DECODE mag alleen binnen een SELECT, domme Oracle) SELECT DECODE(l_srtnoti_xmlnode, 'opdracht', 'ORDNEW', diff --git a/MLD/MLD_PAC.SRC b/MLD/MLD_PAC.SRC index 6a7d1030..e2808ad3 100644 --- a/MLD/MLD_PAC.SRC +++ b/MLD/MLD_PAC.SRC @@ -1485,7 +1485,7 @@ CREATE OR REPLACE PACKAGE BODY mld AS preference => bedrijfrec.reference, ptypeopdr_key => bedrijfrec.mld_typeopdr_key, plocatie_key => bedrijfrec.alg_locatie_key, - pdisc_key => bedrijfrec.mld_opdr_discipline_key, + pdiscipline_key => bedrijfrec.mld_opdr_discipline_key, psender => bedrijfrec.alg_locatie_email, pbedrijf_key2 => bedrijfrec.persoon_bedrijf_key, pnotidelay => pnotidelay); @@ -1532,8 +1532,9 @@ CREATE OR REPLACE PACKAGE BODY mld AS ptrackingkey => ptrackingkey, preference => bedrijfrec.reference, plocatie_key => bedrijfrec.alg_locatie_key, - pdisc_key => bedrijfrec.mld_ins_discipline_key, + pdiscipline_key => bedrijfrec.mld_ins_discipline_key, psender => bedrijfrec.alg_locatie_email, + pbedrijf_key2 => bedrijfrec.persoon_bedrijf_key, pnotidelay => pnotidelay); END LOOP; END; @@ -2134,7 +2135,7 @@ CREATE OR REPLACE PACKAGE BODY mld AS THEN l_prs_bedrijf_key := NULL; END IF; - -- + -- -- Controleer of er één bedrijf is dat deze dienst levert (op deze locatie/dit gebouw) via cnt_contract_plaats IF l_aantal <> 1 THEN @@ -2143,7 +2144,7 @@ CREATE OR REPLACE PACKAGE BODY mld AS SELECT MIN(c.cnt_prs_bedrijf_key) cnt_prs_bedrijf_key , MIN(cp.cnt_contract_key) cnt_contract_key , COUNT(DISTINCT c.cnt_prs_bedrijf_key) aantal - INTO l_prs_bedrijf_key + INTO l_prs_bedrijf_key , l_cnt_contract_key , l_aantal FROM cnt_contract c @@ -2162,9 +2163,9 @@ CREATE OR REPLACE PACKAGE BODY mld AS SELECT MIN(c.cnt_prs_bedrijf_key) cnt_prs_bedrijf_key , MIN(cp.cnt_contract_key) cnt_contract_key , COUNT(DISTINCT c.cnt_prs_bedrijf_key) aantal - INTO l_prs_bedrijf_key + INTO l_prs_bedrijf_key , l_cnt_contract_key - , l_aantal + , l_aantal FROM cnt_contract c , cnt_contract_plaats cp , cnt_disc_params cd diff --git a/MLD/MLD_TRI.SRC b/MLD/MLD_TRI.SRC index 15eeef16..676d98b7 100644 --- a/MLD/MLD_TRI.SRC +++ b/MLD/MLD_TRI.SRC @@ -464,7 +464,7 @@ BEGIN preference => bedrijfrec.reference, ptypeopdr_key => :NEW.mld_typeopdr_key, plocatie_key => bedrijfrec.alg_locatie_key, - pdisc_key => :NEW.mld_opdr_discipline_key, + pdiscipline_key => :NEW.mld_opdr_discipline_key, pbedrijf_key2 => bedrijfrec.persoon_bedrijf_key, psender => bedrijfrec.alg_locatie_email); END LOOP; diff --git a/RES/RES_PAC.SRC b/RES/RES_PAC.SRC index c2b1d9f0..80986edf 100644 --- a/RES/RES_PAC.SRC +++ b/RES/RES_PAC.SRC @@ -2549,14 +2549,20 @@ AS AS BEGIN FOR bedrijfrec + -- JGL: Vooralsnog geen ondersteuning van technische adressen per discipline + -- Dat wordt te ingewikkeld omdat onderstaande loop dan per discipline fac.notifybedrijf + -- gaat aanroepen waardoor je altijd een notificatie per catalogus krijgt wat je misschien helemaal niet wilt IN (SELECT b.prs_bedrijf_key, l.alg_locatie_key, CASE WHEN b.prs_bedrijf_key = resbedrijf.prs_bedrijf_key THEN 'R' ELSE 'G' END bedrijfadres_type, - rrr.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr reference + rrr.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr reference, + d.prs_bedrijf_key persoon_bedrijf_key -- van de melder, niet de uitvoerende FROM prs_bedrijf b, res_rsv_ruimte rrr, alg_locatie l, alg_v_ruimte_gegevens_all ruimte_geg, + prs_perslid p, + prs_v_afdeling d, ( SELECT res_ruimte_opstel_key, rr.res_ruimte_key, MIN (alg_ruimte_key) alg_ruimte_key @@ -2575,6 +2581,8 @@ AS AND rrr.res_ruimte_opstel_key = opstelalg.res_ruimte_opstel_key(+) AND ruimte_geg.alg_ruimte_key = COALESCE (rrr.alg_ruimte_key, opstelalg.alg_ruimte_key) AND ruimte_geg.alg_locatie_key = l.alg_locatie_key + AND d.prs_afdeling_key = p.prs_afdeling_key + AND p.prs_perslid_key = rrr.res_rsv_ruimte_host_key AND ( b.prs_bedrijf_key = resbedrijf.prs_bedrijf_key -- type 'R' OR EXISTS (SELECT 1 @@ -2589,6 +2597,7 @@ AS ptrackingkey => ptrackingkey, preference => bedrijfrec.reference, plocatie_key => bedrijfrec.alg_locatie_key, + pbedrijf_key2 => bedrijfrec.persoon_bedrijf_key, pnotidelay => pnotidelay); END LOOP; END;