380 lines
17 KiB
SQL
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
|