PZEE#88371 Notifybedrijven vaker rekening houden met discipline

FCLT#88913 Uitzondering van ORDNEW in notificatiequeue uitfaseren

svn path=/Database/trunk/; revision=69068
This commit is contained in:
Jos Groot Lipman
2025-05-20 13:20:38 +00:00
parent 41b058cf5b
commit 48477de89f
5 changed files with 38 additions and 47 deletions

View File

@@ -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;

View File

@@ -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 <20><>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',

View File

@@ -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 <20><>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

View File

@@ -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;

View File

@@ -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;