From 709892b3474d2a354d969ccbd18e82d40ebb318f Mon Sep 17 00:00:00 2001 From: Jos Groot Lipman Date: Thu, 14 Nov 2024 16:05:17 +0000 Subject: [PATCH] FCLT#85890 Orderqueue en notificatiequeue savepoint svn path=/Database/trunk/; revision=67045 --- BES/BES_PAC.SRC | 45 +++++++++++++++ CNT/CNT_PAC.SRC | 75 +++++++++++++++++++++++++ FAC/FAC_PAC.SRC | 146 +++++++++++++++++++++++++++++++++--------------- FAC/FAC_TRI.SRC | 1 + FAC/FAC_VIE.SRC | 98 ++++---------------------------- MLD/MLD_PAC.SRC | 61 +++++++++++++++----- PRS/PRS_TAB.SRC | 2 +- RES/RES_PAC.SRC | 46 +++++++++++++++ 8 files changed, 326 insertions(+), 148 deletions(-) diff --git a/BES/BES_PAC.SRC b/BES/BES_PAC.SRC index a83981cc..873308e0 100644 --- a/BES/BES_PAC.SRC +++ b/BES/BES_PAC.SRC @@ -64,6 +64,13 @@ AS RETURN NUMBER; FUNCTION bes_besteed_budget_agb (p_kp_key IN NUMBER) RETURN NUMBER; + + PROCEDURE notifybestellingbedrijven (pbestelkey NUMBER, + ptrackingkey NUMBER); + + PROCEDURE notifybestelopdrbedrijven (pbestelopdrkey NUMBER, + ptrackingkey NUMBER); + END bes; / @@ -2216,6 +2223,44 @@ AS RETURN l_budgetbesteld; END; + PROCEDURE notifybestellingbedrijven (pbestelkey NUMBER, + ptrackingkey NUMBER) + AS + BEGIN + NULL; -- TODO? + END; + + PROCEDURE notifybestelopdrbedrijven (pbestelopdrkey NUMBER, + ptrackingkey NUMBER) + AS + BEGIN + FOR bedrijfrec IN (SELECT b.prs_bedrijf_key, + CASE WHEN b.prs_bedrijf_key = o.prs_bedrijf_key THEN 'BO' ELSE 'BOG' END bedrijfadres_type, + l.alg_locatie_key, + o.bes_bestelopdr_id + FROM prs_bedrijf b, + bes_bestelopdr o, + mld_adres ma, + alg_locatie l + WHERE o.bes_bestelopdr_key = pbestelopdrkey + AND b.prs_bedrijf_key = o.prs_bedrijf_key + AND o.mld_adres_key_lev = ma.mld_adres_key + AND ma.alg_locatie_key = l.alg_locatie_key(+) + AND ( b.prs_bedrijf_key = o.prs_bedrijf_key -- type 'B' + OR EXISTS + (SELECT 1 + FROM prs_bedrijfadres ba + WHERE ba.prs_bedrijf_key = b.prs_bedrijf_key AND ba.prs_bedrijfadres_type = 'BOG'))) + LOOP + fac.notifybedrijf (pbedrijf_key => bedrijfrec.prs_bedrijf_key, + pbedrijfadres_type => bedrijfrec.bedrijfadres_type, + prefkey => pbestelopdrkey, + ptrackingkey => ptrackingkey, + preference => bedrijfrec.bes_bestelopdr_id, + plocatie_key => bedrijfrec.alg_locatie_key); + END LOOP; + END; + END bes; / diff --git a/CNT/CNT_PAC.SRC b/CNT/CNT_PAC.SRC index 7fab72c4..9cd22483 100644 --- a/CNT/CNT_PAC.SRC +++ b/CNT/CNT_PAC.SRC @@ -20,6 +20,9 @@ CREATE OR REPLACE PACKAGE cnt AS FUNCTION sprintf (ps IN VARCHAR2 , p_contract_key IN NUMBER) RETURN VARCHAR2; PROCEDURE remove(p_contract_key IN NUMBER); + PROCEDURE notifycontractbedrijven (pcntkey NUMBER, + ptrackingkey NUMBER); + PRAGMA RESTRICT_REFERENCES (cnt_contract_status, WNDS, WNPS); END cnt; / @@ -652,6 +655,78 @@ CREATE OR REPLACE PACKAGE BODY cnt AS -- In geen enkele omgeving is cnt_contract_key in deze tabel ingevuld. END; + PROCEDURE notifycontractbedrijven (pcntkey NUMBER, + ptrackingkey NUMBER) + AS + BEGIN + FOR bedrijfrec + IN (SELECT b.prs_bedrijf_key, + l.alg_locatie_key, + CASE WHEN b.prs_bedrijf_key = c.cnt_prs_bedrijf_key THEN 'C' ELSE 'CG' END bedrijfadres_type, + cnt_contract_nummer_intern, + COALESCE (l.alg_locatie_email, ins_discipline_email) + FROM prs_bedrijf b, + cnt_contract c, + ins_tab_discipline d, + alg_locatie l, + ( SELECT cnt_contract_key, + DECODE (MIN (cp1.cnt_alg_plaats_code), + 'L', MIN (cp1.cnt_alg_plaats_key), + MIN (alg_boom.alg_locatie_key)) + cnt_locatie_key + FROM cnt_contract_plaats cp1, + (SELECT alg_r.alg_ruimte_key, + alg_r.alg_verdieping_key, + alg_v.alg_gebouw_key, + alg_g.alg_locatie_key, + 'R' alg_type + FROM alg_ruimte alg_r, alg_verdieping alg_v, alg_gebouw alg_g + WHERE alg_r.alg_verdieping_key = alg_v.alg_verdieping_key + AND alg_v.alg_gebouw_key = alg_g.alg_gebouw_key + UNION + SELECT TO_NUMBER (NULL), + alg_v.alg_verdieping_key, + alg_v.alg_gebouw_key, + alg_g.alg_locatie_key, + 'V' alg_type + FROM alg_verdieping alg_v, alg_gebouw alg_g + WHERE alg_v.alg_gebouw_key = alg_g.alg_gebouw_key + UNION + SELECT TO_NUMBER (NULL), + TO_NUMBER (NULL), + alg_g.alg_gebouw_key, + alg_g.alg_locatie_key, + 'G' alg_type + FROM alg_gebouw alg_g) alg_boom + WHERE cp1.cnt_alg_plaats_key = + CASE cp1.cnt_alg_plaats_code + WHEN 'G' THEN alg_boom.alg_gebouw_key(+) + WHEN 'V' THEN alg_boom.alg_verdieping_key(+) + WHEN 'R' THEN alg_boom.alg_ruimte_key(+) + END + AND cp1.cnt_alg_plaats_code = alg_boom.alg_type(+) + AND cp1.cnt_contract_plaats_verwijder IS NULL + GROUP BY cnt_contract_key + HAVING COUNT (1) = 1) cp + WHERE c.cnt_contract_key = pcntkey + 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 ( b.prs_bedrijf_key = c.cnt_prs_bedrijf_key -- type 'C' + OR EXISTS + (SELECT 1 + FROM prs_bedrijfadres ba + WHERE ba.prs_bedrijf_key = b.prs_bedrijf_key AND ba.prs_bedrijfadres_type = 'CG'))) + LOOP + fac.notifybedrijf (pbedrijf_key => bedrijfrec.prs_bedrijf_key, + pbedrijfadres_type => bedrijfrec.bedrijfadres_type, + prefkey => pcntkey, + ptrackingkey => ptrackingkey, + preference => bedrijfrec.cnt_contract_nummer_intern, + plocatie_key => bedrijfrec.alg_locatie_key); + END LOOP; + END; + END cnt; / diff --git a/FAC/FAC_PAC.SRC b/FAC/FAC_PAC.SRC index 2dcbf147..28e8781c 100644 --- a/FAC/FAC_PAC.SRC +++ b/FAC/FAC_PAC.SRC @@ -147,16 +147,16 @@ CREATE OR REPLACE PACKAGE fac PROCEDURE trackaction_withkey (pcode VARCHAR2, prefkey NUMBER, puserkey NUMBER, pdatum DATE, poms VARCHAR2, psubjectkey NUMBER, new_fac_tracking_key OUT NUMBER); PROCEDURE backtrackaction (pcode VARCHAR2, prefkey NUMBER, puserkey NUMBER, pdatum DATE); PROCEDURE notifytracking(psrtnotificatiekey NUMBER, pperslid_key NUMBER, ptracking_oms VARCHAR2, prefkey NUMBER, ptrackingkey NUMBER DEFAULT NULL); + PROCEDURE notifytrackingbedrijven(ptrackingkey NUMBER); PROCEDURE notifybedrijf(pbedrijf_key NUMBER, pbedrijfadres_type VARCHAR2, - psrtnotificatie_key NUMBER, prefkey NUMBER, + ptrackingkey NUMBER, ptracking_oms VARCHAR2 DEFAULT NULL, pperslid_key NUMBER DEFAULT NULL, pxrefkey NUMBER DEFAULT NULL, preference VARCHAR2 DEFAULT NULL, psender VARCHAR2 DEFAULT NULL, - ptrackingkey NUMBER DEFAULT NULL, plocatie_key NUMBER DEFAULT NULL, pdiscipline_key NUMBER DEFAULT NULL, ptypeopdr_key NUMBER DEFAULT NULL, @@ -4059,8 +4059,6 @@ CREATE OR REPLACE PACKAGE BODY fac AS bericht := mld.opdrsprintf (loms, prefkey); END IF; - mld.notifyopdrbedrijven(psrtnotificatiekey, prefkey, pperslid_key, ptracking_oms, ptrackingkey); - -- In 4i notificeerden we alleen toekenning aan de uitvoerder -- In 5i tracken we veel meer, en is er dus ook de mogelijkheid -- tot notificeren van tracking @@ -4772,16 +4770,72 @@ CREATE OR REPLACE PACKAGE BODY fac AS END; -- Notificeren via een technisch adres + PROCEDURE notifytrackingbedrijven (ptrackingkey NUMBER) + AS + lxmlnode fac_srtnotificatie.fac_srtnotificatie_xmlnode%TYPE; + lcode fac_srtnotificatie.fac_srtnotificatie_code%TYPE; + l_refkey fac_tracking.fac_tracking_refkey%TYPE; + BEGIN + SELECT fac_srtnotificatie_xmlnode, + fac_srtnotificatie_code, + fac_tracking_refkey + INTO lxmlnode, + lcode, + l_refkey + FROM fac_tracking ft, fac_srtnotificatie fsn + WHERE ft.fac_srtnotificatie_key = fsn.fac_srtnotificatie_key; + -- we maken een uitstapje naar een module specifieke mld.notifymeldingbedrijven + -- die bijvoorbeeld locatie_key, opdrachttype en afzender kan bepalen + -- Daarmee worden we vervolgens weer doorgeleid naar PROCEDURE notifybedrijf (iets verderop) + CASE + WHEN lxmlnode = 'melding' + THEN + mld.notifymeldingbedrijven(l_refkey, ptrackingkey); + WHEN lxmlnode = 'opdracht' + THEN + mld.notifyopdrbedrijven(l_refkey, ptrackingkey); + WHEN lxmlnode = 'reservering' OR lxmlnode = 'xreservering' + THEN + res.notifyreserveringbedrijven(l_refkey, ptrackingkey); + WHEN lxmlnode = 'bestelling' + THEN + bes.notifybestellingbedrijven(l_refkey, ptrackingkey); + WHEN lxmlnode = 'bestelopdr' + THEN + bes.notifybestelopdrbedrijven(l_refkey, ptrackingkey); + WHEN lxmlnode = 'afspraak' OR lxmlnode = 'bezoeker' + THEN + NULL; -- let op dat je bij bezoeker de afspraak_key moet zoeken? + WHEN lxmlnode = 'deel' + THEN + NULL; + WHEN lxmlnode = 'controle' + THEN + NULL; + WHEN lxmlnode = 'contract' + THEN + cnt.notifycontractbedrijven(l_refkey, ptrackingkey); + WHEN lxmlnode = 'perslid' + THEN + NULL; + WHEN lxmlnode = 'message' + THEN + NULL; -- kan nog niet via tracking worden veroorzaakt (later: ontvangstbericht?) + ELSE + NULL; -- force error? + END CASE; + END; + + -- Notificeren tracking naar een specifiek bedrijf via een technisch adres PROCEDURE notifybedrijf (pbedrijf_key NUMBER, pbedrijfadres_type VARCHAR2, - psrtnotificatie_key NUMBER, prefkey NUMBER, + ptrackingkey NUMBER, ptracking_oms VARCHAR2 DEFAULT NULL, pperslid_key NUMBER DEFAULT NULL, pxrefkey NUMBER DEFAULT NULL, preference VARCHAR2 DEFAULT NULL, psender VARCHAR2 DEFAULT NULL, - ptrackingkey NUMBER DEFAULT NULL, plocatie_key NUMBER DEFAULT NULL, pdiscipline_key NUMBER DEFAULT NULL, ptypeopdr_key NUMBER DEFAULT NULL, @@ -4790,6 +4844,7 @@ CREATE OR REPLACE PACKAGE BODY fac AS l_bdradr_key prs_bedrijfadres.prs_bedrijfadres_key%TYPE; l_basrt_key prs_bedrijfadres_srtnoti.prs_bedrijfadres_srtnoti_key%TYPE; l_srtnoti_code fac_srtnotificatie.fac_srtnotificatie_code%TYPE; + l_srtnoti_key fac_srtnotificatie.fac_srtnotificatie_key%TYPE; nn_noti NUMBER (10); BEGIN -- Merk op: per bedrijf notificeren we hooguit één enkel technisch adres @@ -4800,29 +4855,29 @@ CREATE OR REPLACE PACKAGE BODY fac AS -- 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) - INTO l_bdradr_key, nn_noti - FROM prs_bedrijfadres ba - WHERE ba.prs_bedrijf_key = pbedrijf_key - AND ba.prs_bedrijfadres_type = pbedrijfadres_type - AND prs_bedrijfadres_startdatum <= SYSDATE - AND (ba.mld_typeopdr_key = ptypeopdr_key OR ba.mld_typeopdr_key IS NULL) - 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.alg_locatie_key = plocatie_key OR ba.alg_locatie_key IS NULL) - AND ( ba.alg_district_key = (SELECT d.alg_district_key - FROM alg_locatie d - WHERE d.alg_locatie_key = plocatie_key) - OR ba.alg_district_key IS NULL) - ORDER BY ba.mld_typeopdr_key NULLS LAST, -- door de NULLS LAST heeft een specifieke altijd voorkeur - ba.ins_discipline_key NULLS LAST, - ba.alg_locatie_key NULLS LAST, - ba.alg_district_key NULLS LAST, - ba.prs_bedrijf_key2 NULLS LAST, - ba.prs_bedrijfadres_startdatum DESC + SELECT ba.prs_bedrijfadres_key, + (SELECT COUNT (*) + FROM prs_bedrijfadres_srtnoti basrt + WHERE basrt.prs_bedrijfadres_key = ba.prs_bedrijfadres_key) + INTO l_bdradr_key, nn_noti + FROM prs_bedrijfadres ba + WHERE ba.prs_bedrijf_key = pbedrijf_key + AND ba.prs_bedrijfadres_type = pbedrijfadres_type + AND prs_bedrijfadres_startdatum <= SYSDATE + AND (ba.mld_typeopdr_key = ptypeopdr_key OR ba.mld_typeopdr_key IS NULL) + 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.alg_locatie_key = plocatie_key OR ba.alg_locatie_key IS NULL) + AND ( ba.alg_district_key = (SELECT d.alg_district_key + FROM alg_locatie d + WHERE d.alg_locatie_key = plocatie_key) + OR ba.alg_district_key IS NULL) + ORDER BY ba.mld_typeopdr_key NULLS LAST, -- door de NULLS LAST heeft een specifieke altijd voorkeur + ba.ins_discipline_key NULLS LAST, + ba.alg_locatie_key NULLS LAST, + ba.alg_district_key NULLS LAST, + ba.prs_bedrijf_key2 NULLS LAST, + ba.prs_bedrijfadres_startdatum DESC FETCH FIRST 1 ROW ONLY; EXCEPTION WHEN NO_DATA_FOUND @@ -4834,12 +4889,13 @@ CREATE OR REPLACE PACKAGE BODY fac AS DBMS_OUTPUT.Put_line ('Gevonden technisch adres key ' || l_bdradr_key); -- Nu de srtnotifictie zoeken - SELECT basrt.prs_bedrijfadres_srtnoti_key, srtnoti.fac_srtnotificatie_code - INTO l_basrt_key, l_srtnoti_code - FROM prs_bedrijfadres_srtnoti basrt, fac_srtnotificatie srtnoti + SELECT basrt.prs_bedrijfadres_srtnoti_key, srtnoti.fac_srtnotificatie_code, srtnoti.fac_srtnotificatie_key + INTO l_basrt_key, l_srtnoti_code, l_srtnoti_key + FROM prs_bedrijfadres_srtnoti basrt, fac_srtnotificatie srtnoti, fac_tracking ft WHERE basrt.prs_bedrijfadres_key(+) = l_bdradr_key AND basrt.fac_srtnotificatie_key(+) = srtnoti.fac_srtnotificatie_key - AND srtnoti.fac_srtnotificatie_key = psrtnotificatie_key; + AND srtnoti.fac_srtnotificatie_key = ft.fac_srtnotificatie_key + AND ft.fac_tracking_key = ptrackingkey; IF (l_basrt_key IS NULL) THEN @@ -4848,31 +4904,31 @@ CREATE OR REPLACE PACKAGE BODY fac AS OR (pbedrijfadres_type = 'C' AND l_srtnoti_code = 'CNTNEW') OR (pbedrijfadres_type = 'R' AND l_srtnoti_code = 'RESNEW') THEN - NULL; -- backwards compatible: als geen enkel technisch adres dan is er default een xxxNEW + NULL; -- backwards compatible: als geen enkel prs_bedrijfadres_srtnoti is dan is er default een xxxNEW ELSE - DBMS_OUTPUT.Put_line ('Technisch adres luistert niet naar notificatie ' || psrtnotificatie_key); + DBMS_OUTPUT.Put_line ('Technisch adres onder bedrijf ' || pbedrijf_key || ' luistert niet naar notificatie ' || l_srtnoti_code); RETURN; END IF; END IF; - -- Ok, het technisch adres luister naar onze notificatie! + -- Ok, het technisch adres luistert naar onze notificatie! -- Geen putnotificationsrtprio. Die is veel te agressief met ontdubbelen INSERT INTO fac_notificatie (fac_srtnotificatie_key, fac_notificatie_oms, fac_notificatie_refkey, fac_notificatie_extrakey, fac_notificatie_sender_email, - fac_notificatie_status, -- don't care + fac_notificatie_status, -- don't care by prs_bedrijfadres_key prs_bedrijfadres_key, fac_notificatie_notbefore) - VALUES (psrtnotificatie_key, - ptracking_oms, - prefkey, - pxrefkey, - psender, - 0, - l_bdradr_key, - teverzenden_datum); + VALUES (l_srtnoti_key, + ptracking_oms, + prefkey, + pxrefkey, + psender, + 0, + l_bdradr_key, + teverzenden_datum); END; -- Levert de (nieuwste) datum op van een getrackt event op key diff --git a/FAC/FAC_TRI.SRC b/FAC/FAC_TRI.SRC index 74f07c37..b07e0461 100644 --- a/FAC/FAC_TRI.SRC +++ b/FAC/FAC_TRI.SRC @@ -570,6 +570,7 @@ BEGIN ELSE fac.notifytracking(:new.fac_srtnotificatie_key, :new.prs_perslid_key, :new.fac_tracking_oms, :new.fac_tracking_refkey, :new.fac_tracking_key); END IF; + fac.notifytrackingbedrijven(:new.fac_tracking_key); -- deze doen we altijd onvoorwaardelijk END; / diff --git a/FAC/FAC_VIE.SRC b/FAC/FAC_VIE.SRC index 2aa15fbd..5a33ea5d 100644 --- a/FAC/FAC_VIE.SRC +++ b/FAC/FAC_VIE.SRC @@ -728,94 +728,18 @@ SELECT fac_notificatie_receiver_email, fac_notificatie_receiver_phone, fac_notif LEFT OUTER JOIN fac_srtnotificatie sn ON n.fac_srtnotificatie_key = sn.fac_srtnotificatie_key; -- Queue met naar leveranciers te verzenden opdrachten tbv PutOrders: wat-moet-naar-wie-en-hoe +-- Tijdelijke dummy die niets oplevert, droppen met DB51 CREATE_VIEW(fac_v_orderqueue, 0) -(prs_bedrijf_key, alg_locatie_key, xmlnode, key, reference, sender, teverzenden_datum) -AS -- (bestel)opdrachten - SELECT b.prs_bedrijf_key, l.alg_locatie_key, 'bestelopdr', o.bes_bestelopdr_key, - o.bes_bestelopdr_id, alg_locatie_email, NULL teverzenden_datum - FROM prs_bedrijf b, bes_bestelopdr o, mld_adres ma, alg_locatie l - WHERE b.prs_bedrijf_key = o.prs_bedrijf_key - AND o.mld_adres_key_lev = ma.mld_adres_key - AND ma.alg_locatie_key = l.alg_locatie_key(+) - AND EXISTS (SELECT '' FROM prs_bedrijfadres ba WHERE ba.prs_bedrijf_key = b.prs_bedrijf_key AND ba.prs_bedrijfadres_type = 'B') - AND o.bes_bestelopdr_status = 3 - UNION ALL -- (melding)opdachten - SELECT b.prs_bedrijf_key, COALESCE (l1.alg_locatie_key, l2.alg_locatie_key), 'opdracht', o.mld_opdr_key, - o.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr, COALESCE (l1.alg_locatie_email, l2.alg_locatie_email), o.mld_opdr_teverzenden_datum - FROM prs_bedrijf b, mld_opdr o, mld_melding m, mld_adres ma, alg_locatie l1, alg_locatie l2 - WHERE b.prs_bedrijf_key = o.mld_uitvoerende_keys - AND o.mld_melding_key = m.mld_melding_key - AND m.mld_adres_key = ma.mld_adres_key(+) - AND ma.alg_locatie_key = l1.alg_locatie_key(+) - AND m.mld_alg_locatie_key = l2.alg_locatie_key(+) - AND EXISTS (SELECT '' FROM prs_bedrijfadres ba WHERE ba.prs_bedrijf_key = b.prs_bedrijf_key AND ba.prs_bedrijfadres_type = 'O') - AND (((o.mld_statusopdr_key = 5 OR o.mld_statusopdr_key = 4) AND o.mld_opdr_teverzenden = 1) - OR (o.mld_opdr_teverzenden = 2)) - AND o.mld_opdr_verzonden IS NULL - UNION ALL -- contracten - SELECT b.prs_bedrijf_key, l.alg_locatie_key, 'contract', c.cnt_contract_key, - cnt_contract_nummer_intern, COALESCE (l.alg_locatie_email, ins_discipline_email), NULL teverzenden_datum - FROM prs_bedrijf b, cnt_contract c, ins_tab_discipline d, alg_locatie l, - ( SELECT cnt_contract_key, - DECODE (MIN (cp1.cnt_alg_plaats_code), - 'L', MIN (cp1.cnt_alg_plaats_key), - MIN (alg_boom.alg_locatie_key)) cnt_locatie_key - FROM cnt_contract_plaats cp1, - (SELECT alg_r.alg_ruimte_key, alg_r.alg_verdieping_key, alg_v.alg_gebouw_key, alg_g.alg_locatie_key, 'R' alg_type - FROM alg_ruimte alg_r, alg_verdieping alg_v, alg_gebouw alg_g - WHERE alg_r.alg_verdieping_key = alg_v.alg_verdieping_key AND alg_v.alg_gebouw_key = alg_g.alg_gebouw_key - UNION - SELECT TO_NUMBER (NULL), alg_v.alg_verdieping_key, alg_v.alg_gebouw_key, alg_g.alg_locatie_key, 'V' alg_type - FROM alg_verdieping alg_v, alg_gebouw alg_g - WHERE alg_v.alg_gebouw_key = alg_g.alg_gebouw_key - UNION - SELECT TO_NUMBER (NULL), TO_NUMBER (NULL), alg_g.alg_gebouw_key, alg_g.alg_locatie_key, 'G' alg_type - FROM alg_gebouw alg_g) alg_boom - WHERE cp1.cnt_alg_plaats_key = - CASE cp1.cnt_alg_plaats_code - WHEN 'G' THEN alg_boom.alg_gebouw_key(+) - WHEN 'V' THEN alg_boom.alg_verdieping_key(+) - WHEN 'R' THEN alg_boom.alg_ruimte_key(+) - END - AND cp1.cnt_alg_plaats_code = alg_boom.alg_type(+) - AND cp1.cnt_contract_plaats_verwijder IS NULL - GROUP BY cnt_contract_key HAVING COUNT (1) = 1) cp - WHERE b.prs_bedrijf_key = c.cnt_prs_bedrijf_key - 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 EXISTS (SELECT '' FROM prs_bedrijfadres ba WHERE ba.prs_bedrijf_key = b.prs_bedrijf_key AND ba.prs_bedrijfadres_type = 'C') - AND c.cnt_contract_verwijder IS NULL - AND c.cnt_contract_looptijd_tot > SYSDATE - AND c.cnt_contract_teverzenden = 1 - UNION ALL -- reserveringen, res_rsv_ruimte_key komt in extrakey - SELECT b.prs_bedrijf_key, l.alg_locatie_key, 'reservering', rrr.res_rsv_ruimte_key, - rrr.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr, NULL sender, NULL teverzenden_datum - FROM prs_bedrijf b, res_rsv_ruimte rrr, alg_locatie l, alg_v_ruimte_gegevens_all ruimte_geg - , (SELECT res_ruimte_opstel_key, rr.res_ruimte_nr res_ruimte_nr - , rr.res_ruimte_key - , MIN (alg_ruimte_key) alg_ruimte_key - FROM res_ruimte_opstelling rro - , res_alg_ruimte rar - , res_ruimte rr - WHERE rro.res_ruimte_key = rar.res_ruimte_key - AND rr.res_ruimte_key = rar.res_ruimte_key - AND rar.res_alg_ruimte_verwijder IS NULL - GROUP BY res_ruimte_opstel_key - , rr.res_ruimte_nr - , rr.res_ruimte_key) opstelalg - WHERE rrr.res_rsv_ruimte_teverzenden IN (1, 2) -- nieuw/update - AND rrr.res_rsv_ruimte_verzonden IS NULL - 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 b.prs_bedrijf_key = (SELECT MAX(rrd.prs_bedrijf_key) -- artikelen van verschillende leveranciers is unsupported - FROM res_disc_params rrd, res_artikel ra, res_rsv_artikel rra - WHERE rrd.res_ins_discipline_key = ra.res_discipline_key - AND rra.res_artikel_key = ra.res_artikel_key - AND rra.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key) - AND rrr.res_rsv_ruimte_verwijder IS NULL - AND ruimte_geg.alg_locatie_key = l.alg_locatie_key - AND EXISTS (SELECT '' FROM prs_bedrijfadres ba WHERE ba.prs_bedrijf_key = b.prs_bedrijf_key AND ba.prs_bedrijfadres_type = 'R'); +AS + SELECT -1 prs_bedrijf_key, + -1 alg_locatie_key, + 'dontcare' xmlnode, + -1 key, + -1 reference, + '' sender, + SYSDATE teverzenden_datum + FROM DUAL + WHERE 0 = 1; // PLANMATIG ONDERHOUDS views (OPROGNOSE) -- Basisview voor intern gebruik diff --git a/MLD/MLD_PAC.SRC b/MLD/MLD_PAC.SRC index 5cecd750..bc8dc4ae 100644 --- a/MLD/MLD_PAC.SRC +++ b/MLD/MLD_PAC.SRC @@ -20,11 +20,10 @@ CREATE OR REPLACE PACKAGE mld AS PROCEDURE notifybehandelaar (pto IN NUMBER, pcode IN VARCHAR2, pmeldingkey IN NUMBER); PROCEDURE notifyprio (pmeldingkey IN NUMBER, prio IN NUMBER, pperslid_key IN NUMBER, pdisc_level IN NUMBER DEFAULT 1); PROCEDURE notifyopdrgoedkeurders (popdrkey IN NUMBER); - PROCEDURE notifyopdrbedrijven (psrtnotificatiekey NUMBER, - popdrkey NUMBER, - pperslid_key NUMBER, - ptracking_oms VARCHAR2, - ptrackingkey NUMBER DEFAULT NULL); + PROCEDURE notifyopdrbedrijven (popdrkey NUMBER, + ptrackingkey NUMBER); + PROCEDURE notifymeldingbedrijven (pmldkey NUMBER, + ptrackingkey NUMBER); FUNCTION getinstemmer (pmldkey IN NUMBER) RETURN NUMBER; PROCEDURE notifyinstemmer (pmldkey IN NUMBER); FUNCTION mld_besteed_budget_pgb (p_prs_key IN NUMBER, p_disc_key IN NUMBER) @@ -1393,11 +1392,8 @@ CREATE OR REPLACE PACKAGE BODY mld AS -- Stuur notificatie psrtnotificatiekey naar diverse bedrijven -- in het bijzonder de uitvoerende maar het mag ook een -- ander 'subscribed' bedrijf zijn (bedrijfadres_type 'OG'). - PROCEDURE notifyopdrbedrijven (psrtnotificatiekey NUMBER, - popdrkey NUMBER, - pperslid_key NUMBER, - ptracking_oms VARCHAR2, - ptrackingkey NUMBER DEFAULT NULL) + PROCEDURE notifyopdrbedrijven (popdrkey NUMBER, + ptrackingkey NUMBER) AS BEGIN FOR bedrijfrec @@ -1430,17 +1426,52 @@ CREATE OR REPLACE PACKAGE BODY mld AS AND d.prs_afdeling_key = p.prs_afdeling_key AND p.prs_perslid_key = m.prs_perslid_key) LOOP - -- Roep daarmee (en de eigen parameters) fac.notifybedrijf aan fac.notifybedrijf (pbedrijf_key => bedrijfrec.prs_bedrijf_key, pbedrijfadres_type => bedrijfrec.bedrijfadres_type, - psrtnotificatie_key => psrtnotificatiekey, - pperslid_key => pperslid_key, - ptracking_oms => ptracking_oms, prefkey => popdrkey, + ptrackingkey => ptrackingkey, preference => bedrijfrec.reference, ptypeopdr_key => bedrijfrec.mld_typeopdr_key, plocatie_key => bedrijfrec.alg_locatie_key, - ptrackingkey => ptrackingkey); + teverzenden_datum => bedrijfrec.mld_opdr_teverzenden_datum); + END LOOP; + END; + + PROCEDURE notifymeldingbedrijven (pmldkey NUMBER, + ptrackingkey NUMBER) + AS + BEGIN + FOR bedrijfrec + IN (SELECT b.prs_bedrijf_key, + 'MG' bedrijfadres_type, -- Meldingen generiek + COALESCE (l1.alg_locatie_key, l2.alg_locatie_key) alg_locatie_key, + COALESCE (l1.alg_locatie_email, l2.alg_locatie_email) alg_locatie_email, + m.mld_melding_key reference, + d.prs_bedrijf_key persoon_bedrijf_key -- van de melder, niet de uitvoerende + FROM mld_melding m, + mld_adres ma, + alg_locatie l1, + alg_locatie l2, + prs_perslid p, + prs_v_afdeling d, + prs_bedrijf b + WHERE m.mld_melding_key = pmldkey + AND EXISTS + (SELECT 1 + FROM prs_bedrijfadres ba + WHERE ba.prs_bedrijf_key = b.prs_bedrijf_key AND ba.prs_bedrijfadres_type = 'MG') + AND m.mld_adres_key = ma.mld_adres_key(+) + AND ma.alg_locatie_key = l1.alg_locatie_key(+) + AND m.mld_alg_locatie_key = l2.alg_locatie_key(+) + AND d.prs_afdeling_key = p.prs_afdeling_key + AND p.prs_perslid_key = m.prs_perslid_key) + LOOP + fac.notifybedrijf (pbedrijf_key => bedrijfrec.prs_bedrijf_key, + pbedrijfadres_type => bedrijfrec.bedrijfadres_type, + prefkey => pmldkey, + ptrackingkey => ptrackingkey, + preference => bedrijfrec.reference, + plocatie_key => bedrijfrec.alg_locatie_key); END LOOP; END; diff --git a/PRS/PRS_TAB.SRC b/PRS/PRS_TAB.SRC index 31739452..ee84bf6a 100644 --- a/PRS/PRS_TAB.SRC +++ b/PRS/PRS_TAB.SRC @@ -250,7 +250,7 @@ CREATE_TABLE(prs_bedrijfadres, 0) ( NUMBER(10) CONSTRAINT ins_r_ins_discipline_key REFERENCES ins_tab_discipline(ins_discipline_key) ON DELETE CASCADE, prs_bedrijfadres_type /* O=Order, B=Bestelling, V=Voorraadinfo, C=Contract, N=Notificatie, I=IOT, R=Catering, E=ERP (Mareon) */ - VARCHAR2(2), /* OG=Order generiek enz. */ + VARCHAR2(3), /* OG=Order generiek, BOF BestelOrderGeneriek enz. */ -- In MLD_TAB.SRC: -- mld_typeopdr_key -- NUMBER(10) CONSTRAINT prs_r_mld_typeopdr_key REFERENCES mld_typeopdr(mld_typeopdr_key) ON DELETE CASCADE, diff --git a/RES/RES_PAC.SRC b/RES/RES_PAC.SRC index d7f267c8..1ad5466a 100644 --- a/RES/RES_PAC.SRC +++ b/RES/RES_PAC.SRC @@ -42,6 +42,8 @@ CREATE OR REPLACE PACKAGE res AS FUNCTION notifypool (pbez_bezoeker_key IN NUMBER, pcode IN VARCHAR2) RETURN NUMBER; PROCEDURE notifybackoffice (prsvkey IN NUMBER, pcode IN VARCHAR2, ptype IN VARCHAR2 DEFAULT NULL, pkey IN NUMBER DEFAULT NULL); PROCEDURE remove(p_rsv_ruimte_key IN NUMBER); + PROCEDURE notifyreserveringbedrijven (prsvkey NUMBER, ptrackingkey NUMBER); + END res; / @@ -2549,6 +2551,50 @@ AS -- Geen tracking op res_reservering. END; + PROCEDURE notifyreserveringbedrijven (prsvkey NUMBER, + ptrackingkey NUMBER) + AS + BEGIN + FOR bedrijfrec + IN (SELECT b.prs_bedrijf_key, + l.alg_locatie_key, + CASE WHEN b.prs_bedrijf_key = resbedrijf.prs_bedrijf_key THEN 'R' ELSE 'GR' END bedrijfadres_type, + rrr.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr reference + FROM prs_bedrijf b, + res_rsv_ruimte rrr, + alg_locatie l, + alg_v_ruimte_gegevens_all ruimte_geg, + ( SELECT res_ruimte_opstel_key, + rr.res_ruimte_key, + MIN (alg_ruimte_key) alg_ruimte_key + FROM res_ruimte_opstelling rro, res_alg_ruimte rar, res_ruimte rr + WHERE rro.res_ruimte_key = rar.res_ruimte_key + AND rr.res_ruimte_key = rar.res_ruimte_key + AND rar.res_alg_ruimte_verwijder IS NULL + GROUP BY res_ruimte_opstel_key, rr.res_ruimte_key) opstelalg, + (SELECT res_rsv_ruimte_key, MAX (rrd.prs_bedrijf_key) prs_bedrijf_key -- artikelen van verschillende leveranciers is unsupported + FROM res_disc_params rrd, res_artikel ra, res_rsv_artikel rra + WHERE rrd.res_ins_discipline_key = ra.res_discipline_key + AND rra.res_artikel_key = ra.res_artikel_key) resbedrijf + WHERE rrr.res_rsv_ruimte_key = prsvkey + AND resbedrijf.res_rsv_ruimte_key = prsvkey + 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 ( b.prs_bedrijf_key = resbedrijf.prs_bedrijf_key -- type 'R' + OR EXISTS + (SELECT 1 + FROM prs_bedrijfadres ba + WHERE ba.prs_bedrijf_key = b.prs_bedrijf_key AND ba.prs_bedrijfadres_type = 'RG'))) + LOOP + fac.notifybedrijf (pbedrijf_key => bedrijfrec.prs_bedrijf_key, + pbedrijfadres_type => bedrijfrec.bedrijfadres_type, + prefkey => prsvkey, + ptrackingkey => ptrackingkey, + preference => bedrijfrec.reference, + plocatie_key => bedrijfrec.alg_locatie_key); + END LOOP; + END; END res; /