Files
Customer/onces/UWVA/uwva#27133.sql
Peter Koerhuis 3b8d7f1dcc Migratie once-scripts van /branch naar /onces
svn path=/Customer/; revision=21207
2014-04-02 13:57:31 +00:00

380 lines
17 KiB
SQL

-- Customer specific once-script UWVA#27133.
--
-- (c) 2013 SG|facilitor bv
-- $Revision$
-- $Id$
--
-- Support: +31 53 4800700
SET ECHO ON
SPOOL xuwva#27133.lst
SET DEFINE OFF
CREATE OR REPLACE PROCEDURE fac_select_kto_kandidaten (
p_applname IN VARCHAR2, p_applrun IN VARCHAR2
)
AS
-- NIET via de koninklijke route fac.gettrackingdate vanwege enorme performance-killer!
-- Alle reserveringscatalogi met hun percentage, drempel en het aantal afgemelde reserveringen van de afgelopen periode
-- tot en met 'gisteren' (dus nog niet die van vandaag), of de afgelopen week als het de eerste keer is
-- NOOT: Alleen ruimte-reserveringen vooralsnog!
CURSOR c_cluster_r
IS
SELECT d.ins_discipline_key,
d.ins_discipline_ktopercentage perc,
COALESCE (d.ins_discipline_ktodrempel, 0) drempel,
COUNT (res_rsv_ruimte_key) aantal
FROM res_rsv_ruimte rrr,
res_ruimte_opstelling ro,
res_ruimte rr,
ins_tab_discipline d
WHERE rrr.res_rsv_ruimte_verwijder IS NULL
AND rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key
AND ro.res_ruimte_key = rr.res_ruimte_key
AND rr.res_discipline_key = d.ins_discipline_key
AND rrr.res_rsv_ruimte_tot > (SELECT COALESCE(MAX(res_rsv_ruimte_kto_verstuurd), SYSDATE-7)
FROM res_rsv_ruimte irrr,
res_ruimte_opstelling iro,
res_ruimte irr
WHERE irrr.res_ruimte_opstel_key = iro.res_ruimte_opstel_key
AND iro.res_ruimte_key = irr.res_ruimte_key
AND irr.res_discipline_key = d.ins_discipline_key)
AND rrr.res_rsv_ruimte_tot < SYSDATE
AND res_rsv_ruimte_kto_verstuurd IS NULL
AND ins_discipline_ktopercentage > 0
GROUP BY d.ins_discipline_key,
d.ins_discipline_ktopercentage,
d.ins_discipline_ktodrempel;
CURSOR c_lijst_r (
p_ins_discipline_key NUMBER
)
IS
SELECT rrr.res_rsv_ruimte_key,
SYSDATE ts
FROM res_rsv_ruimte rrr,
res_ruimte_opstelling ro,
res_ruimte rr,
res_discipline d,
prs_perslid p
WHERE rrr.res_rsv_ruimte_verwijder IS NULL
AND rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key
AND ro.res_ruimte_key = rr.res_ruimte_key
AND rr.res_discipline_key = d.ins_discipline_key
AND d.ins_discipline_key = p_ins_discipline_key
-- Contactpersoon van reservering heeft mail-adres
AND rrr.res_rsv_ruimte_contact_key = p.prs_perslid_key
AND p.prs_perslid_email IS NOT NULL
AND rrr.res_rsv_ruimte_tot > (SELECT COALESCE(MAX(res_rsv_ruimte_kto_verstuurd), SYSDATE-7)
FROM res_rsv_ruimte irrr,
res_ruimte_opstelling iro,
res_ruimte irr
WHERE irrr.res_ruimte_opstel_key = iro.res_ruimte_opstel_key
AND iro.res_ruimte_key = irr.res_ruimte_key
AND irr.res_discipline_key = d.ins_discipline_key)
AND rrr.res_rsv_ruimte_tot < SYSDATE
AND res_rsv_ruimte_kto_verstuurd IS NULL
ORDER BY DBMS_RANDOM.VALUE;
-- NIET via de koninklijke route fac.gettrackingdate vanwege enorme performance-killer!
-- Alle vakgroepen met hun percentage, drempel en het aantal afgemelde meldingen van de afgelopen periode
CURSOR c_cluster_m
IS
SELECT d.ins_discipline_key,
d.ins_discipline_ktopercentage perc,
COALESCE (d.ins_discipline_ktodrempel, 0) drempel,
COUNT (mld_melding_key) aantal
FROM mld_melding m,
mld_stdmelding std,
mld_discipline d,
fac_tracking t,
fac_srtnotificatie sn
WHERE m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = d.ins_discipline_key
-- Afgemelde meldingen van afgelopen periode
AND m.mld_melding_key = t.fac_tracking_refkey
AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'MLDAFM'
AND t.fac_tracking_datum > (SELECT COALESCE(MAX(mld_melding_kto_verstuurd), SYSDATE-7)
FROM mld_melding im,
mld_stdmelding istd
WHERE im.mld_stdmelding_key = istd.mld_stdmelding_key
AND istd.mld_ins_discipline_key = d.ins_discipline_key)
AND mld_melding_kto_verstuurd IS NULL
AND ins_discipline_ktopercentage > 0
GROUP BY d.ins_discipline_key,
d.ins_discipline_ktopercentage,
d.ins_discipline_ktodrempel;
CURSOR c_lijst_m (
p_ins_discipline_key NUMBER
)
IS
SELECT m.mld_melding_key,
SYSDATE ts
FROM mld_melding m,
mld_stdmelding std,
mld_discipline d,
prs_perslid p,
fac_tracking t,
fac_srtnotificatie sn
WHERE m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = d.ins_discipline_key
AND d.ins_discipline_key = p_ins_discipline_key
-- Persoon van melding heeft mail-adres
AND m.prs_perslid_key = p.prs_perslid_key
AND p.prs_perslid_email IS NOT NULL
AND m.mld_melding_kto = 1
-- Afgemelde meldingen van afgelopen periode
AND m.mld_melding_key = t.fac_tracking_refkey
AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'MLDAFM'
AND t.fac_tracking_datum > (SELECT COALESCE(MAX(mld_melding_kto_verstuurd), SYSDATE-7)
FROM mld_melding im,
mld_stdmelding istd
WHERE im.mld_stdmelding_key = istd.mld_stdmelding_key
AND istd.mld_ins_discipline_key = d.ins_discipline_key)
AND mld_melding_kto_verstuurd IS NULL
ORDER BY DBMS_RANDOM.VALUE;
-- NIET via de koninklijke route fac.gettrackingdate vanwege enorme performance-killer!
-- Alle bestelcatalogi met hun percentage, drempel en het aantal afgemelde bestellingen van de afgelopen periode
CURSOR c_cluster_b
IS
SELECT d.ins_discipline_key,
d.ins_discipline_ktopercentage perc,
COALESCE (d.ins_discipline_ktodrempel, 0) drempel,
COUNT (b.bes_bestelling_key) aantal
FROM bes_bestelling b,
bes_bestelling_item bi,
bes_srtdeel sd,
bes_srtgroep sg,
bes_discipline d,
fac_tracking t,
fac_srtnotificatie sn
WHERE b.bes_bestelling_key = bi.bes_bestelling_key
AND bi.bes_srtdeel_key = sd.bes_srtdeel_key
AND sd.bes_srtgroep_key = sg.bes_srtgroep_key
AND sg.ins_discipline_key = d.ins_discipline_key
-- Afgemelde bestellingen van afgelopen periode
AND b.bes_bestelling_key = t.fac_tracking_refkey
AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'BESOTV'
AND t.fac_tracking_datum > (SELECT COALESCE(MAX(bes_bestelling_kto_verstuurd), SYSDATE-7)
FROM bes_bestelling ib,
bes_bestelling_item ibi,
bes_srtdeel isd,
bes_srtgroep isg
WHERE ib.bes_bestelling_key = ibi.bes_bestelling_key
AND ibi.bes_srtdeel_key = isd.bes_srtdeel_key
AND isd.bes_srtgroep_key = isg.bes_srtgroep_key
AND isg.ins_discipline_key = d.ins_discipline_key)
AND bes_bestelling_kto_verstuurd IS NULL
AND ins_discipline_ktopercentage > 0
GROUP BY d.ins_discipline_key,
d.ins_discipline_ktopercentage,
d.ins_discipline_ktodrempel;
CURSOR c_lijst_b (
p_ins_discipline_key NUMBER
)
IS
SELECT DISTINCT b.bes_bestelling_key,
SYSDATE ts
FROM bes_bestelling b,
bes_bestelling_item bi,
bes_srtdeel sd,
bes_srtgroep sg,
bes_discipline d,
prs_perslid p,
fac_tracking t,
fac_srtnotificatie sn
WHERE b.bes_bestelling_key = bi.bes_bestelling_key
AND bi.bes_srtdeel_key = sd.bes_srtdeel_key
AND sd.bes_srtgroep_key = sg.bes_srtgroep_key
AND sg.ins_discipline_key = d.ins_discipline_key
AND d.ins_discipline_key = p_ins_discipline_key
-- Persoon van melding heeft mail-adres
AND b.prs_perslid_key = p.prs_perslid_key
AND p.prs_perslid_email IS NOT NULL
-- Afgemelde bestellingen van afgelopen periode
AND b.bes_bestelling_key = t.fac_tracking_refkey
AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'BESOTV'
AND t.fac_tracking_datum > (SELECT COALESCE(MAX(bes_bestelling_kto_verstuurd), SYSDATE-7)
FROM bes_bestelling ib,
bes_bestelling_item ibi,
bes_srtdeel isd,
bes_srtgroep isg
WHERE ib.bes_bestelling_key = ibi.bes_bestelling_key
AND ibi.bes_srtdeel_key = isd.bes_srtdeel_key
AND isd.bes_srtgroep_key = isg.bes_srtgroep_key
AND isg.ins_discipline_key = d.ins_discipline_key)
AND bes_bestelling_kto_verstuurd IS NULL
ORDER BY DBMS_RANDOM.VALUE;
v_aantal_kto NUMBER;
v_count_upd NUMBER;
v_count NUMBER;
v_errorhint VARCHAR2(200);
v_omschrijving VARCHAR2(4000);
v_errormsg VARCHAR (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
BEGIN
-- KTO's op meldingen
v_errorhint := 'Doorloop de vakgroepen';
FOR rec1 IN c_cluster_m
LOOP
BEGIN
IF (rec1.perc <> 0 OR rec1.drempel <> 0) AND rec1.aantal > 0
THEN
-- Vakgroep heeft afgemelde meldingen in de voorgaande periode,
-- en het is een vakgroep waarop KTO van toepassing is (volgens ingesteld percentage en/of een drempel)
v_aantal_kto := TRUNC ( (rec1.perc * rec1.aantal) / 100);
IF v_aantal_kto < rec1.drempel
THEN
v_aantal_kto := rec1.drempel;
END IF;
v_count_upd := 1;
FOR rec2 IN c_lijst_m (rec1.ins_discipline_key)
LOOP
BEGIN
IF v_count_upd <= v_aantal_kto
THEN
v_errorhint := 'Toevoegen meldingen kto-notificatie';
UPDATE mld_melding
SET mld_melding_kto_verstuurd = rec2.ts
WHERE mld_melding_key = rec2.mld_melding_key;
fac.trackaction('MLDKTO', rec2.mld_melding_key, NULL, rec2.ts, NULL);
END IF;
v_count_upd := v_count_upd + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'Exception ' || oracle_err_mes;
fac.writelog (
p_applname,
'W',
v_errormsg,
'Aanmaken Melding KTO: ' || rec2.mld_melding_key
);
COMMIT;
END;
END LOOP;
END IF;
END;
END LOOP;
-- KTO's op reserveringen
v_errorhint := 'Doorloop de reserveerbare ruimtecatalogi';
FOR rec1 IN c_cluster_r
LOOP
BEGIN
IF (rec1.perc <> 0 OR rec1.drempel <> 0) AND rec1.aantal > 0
THEN
-- Ruimtecatalogus heeft reserveringen die in de voorgaande periode zijn beeindigd
-- en het is een catalogus waarop KTO van toepassing is (volgens ingesteld percentage en/of een drempel)
v_aantal_kto := TRUNC ( (rec1.perc * rec1.aantal) / 100);
IF v_aantal_kto < rec1.drempel
THEN
v_aantal_kto := rec1.drempel;
END IF;
v_count_upd := 1;
FOR rec2 IN c_lijst_r (rec1.ins_discipline_key)
LOOP
BEGIN
IF v_count_upd <= v_aantal_kto
THEN
v_errorhint := 'Toevoegen reserveringen kto-notificatie';
UPDATE res_rsv_ruimte
SET res_rsv_ruimte_kto_verstuurd = rec2.ts
WHERE res_rsv_ruimte_key = rec2.res_rsv_ruimte_key;
fac.trackaction('RESKTO', rec2.res_rsv_ruimte_key, NULL, rec2.ts, NULL);
END IF;
v_count_upd := v_count_upd + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'Exception ' || oracle_err_mes;
fac.writelog (
p_applname,
'W',
v_errormsg,
'Aanmaken Reservering KTO: ' || rec2.res_rsv_ruimte_key
);
COMMIT;
END;
END LOOP;
END IF;
END;
END LOOP;
-- KTO's op bestellingen
v_errorhint := 'Doorloop de bestelcatalogi';
FOR rec1 IN c_cluster_b
LOOP
BEGIN
IF (rec1.perc <> 0 OR rec1.drempel <> 0) AND rec1.aantal > 0
THEN
-- Bestelcatalogus heeft geleverde bestellingen in de voorgaande periode,
-- en het is een catalogus waarop KTO van toepassing is (volgens ingesteld percentage en/of een drempel)
v_aantal_kto := TRUNC ( (rec1.perc * rec1.aantal) / 100);
IF v_aantal_kto < rec1.drempel
THEN
v_aantal_kto := rec1.drempel;
END IF;
v_count_upd := 1;
FOR rec2 IN c_lijst_b (rec1.ins_discipline_key)
LOOP
BEGIN
IF v_count_upd <= v_aantal_kto
THEN
v_errorhint := 'Toevoegen bestellingen kto-notificatie';
UPDATE bes_bestelling
SET bes_bestelling_kto_verstuurd = rec2.ts
WHERE bes_bestelling_key = rec2.bes_bestelling_key;
fac.trackaction('BESKTO', rec2.bes_bestelling_key, NULL, rec2.ts, NULL);
END IF;
v_count_upd := v_count_upd + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'Exception ' || oracle_err_mes;
fac.writelog (
p_applname,
'W',
v_errormsg,
'Aanmaken Bestelling KTO: ' || rec2.bes_bestelling_key
);
COMMIT;
END;
END LOOP;
END IF;
END;
END LOOP;
END;
/
COMMIT;
BEGIN adm.systrackscript('$Workfile: uwva#27133.sql $', '$Revision$', 1); END;
/
COMMIT;
SPOOL OFF