-- -- $Id$ -- DEFINE thisfile = 'LPNL.SQL' DEFINE dbuser = 'LPNL' SET ECHO ON SET DEFINE ON COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT; COLUMN fcltcusttxt NEW_VALUE fcltcusttxt NOPRINT; WHENEVER SQLERROR CONTINUE; SELECT adm.getscriptspoolfile('&thisfile') AS fcltlogfile FROM DUAL; SPOOL &fcltlogfile WHENEVER SQLERROR EXIT; SELECT adm.checkscriptcust('&dbuser') AS fcltcusttxt FROM DUAL; WHENEVER SQLERROR CONTINUE; --------------------------------------- PROMPT &fcltcusttxt --------------------------------------- SET DEFINE OFF ------ payload begin ------ CREATE OR REPLACE PACKAGE LPNL AS FUNCTION change_delimitor (p_string VARCHAR2, p_delimitor VARCHAR2) RETURN VARCHAR2; PROCEDURE mld_ord_after_insert; PROCEDURE anonimize; END; / CREATE OR REPLACE PACKAGE BODY LPNL AS FUNCTION change_delimitor (p_string VARCHAR2, p_delimitor VARCHAR2) RETURN VARCHAR2 AS v_field VARCHAR2 (1000) := 'QueQuLeQue'; v_result VARCHAR2 (2000); v_line VARCHAR2 (2000); BEGIN v_line := p_string; WHILE v_line IS NOT NULL LOOP fac.imp_getfield (v_line, p_delimitor, v_field); v_result := v_result || '"' || v_field || '";'; END LOOP; RETURN v_result; END; PROCEDURE mld_ord_after_insert AS v_count NUMBER; CURSOR c1 IS -- Tweede niveau van Marcel de Boon en Danny Flemming SELECT fac_notificatie_refkey, COUNT (*) aantal FROM fac_notificatie WHERE fac_srtnotificatie_key = 95 AND prs_perslid_key_receiver IN (26, 22) GROUP BY fac_notificatie_refkey, fac_notificatie_datum HAVING COUNT (fac_notificatie_refkey) = 2; CURSOR c2 IS -- Eerste niveau van Marion Post en Dagomar Jansen SELECT fac_notificatie_refkey, COUNT (*) aantal FROM fac_notificatie WHERE fac_srtnotificatie_key = 95 AND prs_perslid_key_receiver IN (27, 23) GROUP BY fac_notificatie_refkey, fac_notificatie_datum HAVING COUNT (fac_notificatie_refkey) = 2; PROCEDURE change_tracking (p_opdr_key NUMBER, p_kenmerk_key NUMBER) AS v_perslid_key NUMBER; v_perslid_naam VARCHAR2 (100); BEGIN SELECT fac_usrdata_code INTO v_perslid_key FROM fac_usrdata WHERE fac_usrdata_key = FAC.safe_to_number ( FLX.getflex ('OPD', p_kenmerk_key, p_opdr_key)); DBMS_OUTPUT.put_line (' perslid:' || v_perslid_key); DELETE fac_notificatie WHERE fac_srtnotificatie_key = 95 AND prs_perslid_key_receiver <> v_perslid_key AND fac_notificatie_refkey = p_opdr_key; DELETE web_user_messages WHERE fac_srtnotificatie_key = 95 AND prs_perslid_key_receiver <> v_perslid_key AND web_user_mess_action_params = p_opdr_key; DBMS_OUTPUT.put_line (' Na delete:' || v_perslid_key); SELECT prs_perslid_naam_friendly INTO v_perslid_naam FROM prs_v_perslid_fullnames WHERE prs_perslid_key = v_perslid_key; DBMS_OUTPUT.put_line (' Na select naam full:' || v_perslid_naam); UPDATE fac_tracking SET fac_tracking_oms = SUBSTR (fac_tracking_oms, 1, INSTR (fac_tracking_oms, ' verstuurd aan')) || 'verstuurd aan ' || v_perslid_naam WHERE fac_tracking_refkey = p_opdr_key AND fac_tracking_oms LIKE '%' || v_perslid_naam || '%' AND fac_srtnotificatie_key = 177 AND fac_tracking_datum > SYSDATE - (1 / 24); EXCEPTION WHEN NO_DATA_FOUND THEN NULL; -- Geen fiatteur opgegeven. Dan gaat de mail maar naar beiden toe END; BEGIN -- ORDGOE srtnotificatie_key = 95 -- Tracking srtnotificatie_key = 177 -- Kenmerk_key van geselecteerde goedkeurder = 21 -- Marcel de Boon 22 -- Danny Flemming 26 -- Marion Post 27 -- Dagomar Jansen 23 FOR rec1 IN c1 LOOP change_tracking (rec1.fac_notificatie_refkey, 21); END LOOP; FOR rec2 IN c2 LOOP change_tracking (rec2.fac_notificatie_refkey, 21); END LOOP; END; PROCEDURE anonimize AS CURSOR c IS SELECT * FROM res_rsv_ruimte WHERE res_activiteit_key = 30 -- Werkplek AND res_rsv_ruimte_van < SYSDATE - 21; BEGIN FOR rec IN c LOOP UPDATE res_rsv_ruimte SET res_rsv_ruimte_host_key = 1201, res_rsv_ruimte_contact_key = 1201 WHERE res_rsv_ruimte_key = rec.res_rsv_ruimte_key; END LOOP; fac.writelog ('LPNL.anonimize', 'I', 'LPNL.anonimize is uitgevoerd', ''); END; END; / CREATE OR REPLACE PROCEDURE lpnl_import_perslid (p_import_key IN NUMBER) AS v_seq_of_columns VARCHAR (255); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_errormsg VARCHAR2 (200); v_errorhint VARCHAR2 (200); BEGIN -- Verwijder lege records DELETE fac_imp_file WHERE SUBSTR(fac_imp_file_line, 1,7) = ',,,,,,,' AND fac_import_key = p_import_key; v_seq_of_columns := '0;0;0;0;0;0;4;3;0;2;' -- v_alg_locatie_code 1 -- v_alg_gebouw_code 2 -- v_alg_verdieping_volgnr 3 -- v_alg_ruimte_nr 4 -- v_prs_werkplek_volgnr 5 -- v_prs_werkplek_omschrijving 6 -- v_prs_afdeling_naam 7 -- v_prs_perslid_naam 8 -- v_prs_perslid_tussenvoegsel 9 -- v_prs_perslid_voornaam 10 || '0;0;0;0;0;8;0;1;0;0;' -- v_prs_perslid_voorletters 11 -- v_prs_perslid_partner_naam 12 -- v_prs_perslid_partner_tussenv 13 -- v_prs_naamgebruik_code 14 0 (default) perslid_naam en perslid_tussenvoegsel worden gebruikt -- 1 personen die de geboortenaam van de partner icm de eigen naam willen gebruiken -- 2 personen die de geboortenaam van de partner willen gebruiken -- 3 personen die de eigen naam icm de geboortenaam van de partner willen gebruiken -- v_prs_perslid_geslacht 15 Gebruik 'man', 'm' of 1 voor man en 'vrouw', 'v' of 0 voor vrouw case insensitive geen default -- v_prs_perslid_telefoonnr 16 -- v_prs_perslid_mobiel 17 -- v_prs_perslid_email 18 -- v_prs_perslid_dienstverband 19 -- v_prs_perslid_nr 20 || '4;0;0;0;0;0;4;6;7;9;' -- v_prs_srtperslid_omschrijving 21 -- v_prs_perslid_oslogin 22 -- v_prs_perslid_wachtwoord 23 -- v_prs_perslid_titel 24 -- v_prs_perslid_apikey 25 -- v_dummy 26 -- v_prs_kenmerk1 27 -- v_prs_kenmerk2 28 -- v_prs_kenmerk3 29 -- v_prs_kenmerk4 30 || '0;0;0;0;0;0;0;0;0;0;' || '0;0;0;0;0;0'; -- Het aangeleverde bestand heeft een komma als scheidingsteken. Deze wordt hier maar even vervangen. UPDATE fac_imp_file SET fac_imp_file_line = LPNL.change_delimitor(fac_imp_file_line, ',') WHERE fac_import_key = p_import_key; prs.import_perslid(p_import_key, v_seq_of_columns, '%"EmailAddress";"GivenName";"SurName";"Name";"UserPrincipalName";"Office";"Displayname";"telephoneNumber";"department"%'); -- Verwijder items uit de AD lijst die geen persoon zijn DELETE fac_imp_perslid WHERE prs_perslid_naam IS NULL OR prs_perslid_voornaam IS NULL OR prs_perslid_email IS NULL; -- Verwijder de Carnext medewerkers DELETE fac_imp_perslid WHERE LOWER (prs_perslid_email) LIKE '%carnext%'; -- Verwijder overgebleven records die geen persoon zijn -- De strings waar we op zoeken staan in de eigen tabel met key 1 DELETE fac_imp_perslid WHERE fac_import_key = p_import_key AND fac_imp_file_index IN (SELECT fac_imp_file_index FROM fac_imp_perslid i, fac_usrdata ud WHERE prs_perslid_naam LIKE fac_usrdata_omschr AND fac_import_key = p_import_key AND fac_usrtab_key = 1); UPDATE fac_imp_perslid SET prs_perslid_oslogin = SUBSTR(SUBSTR (prs_perslid_email, 1, INSTR (prs_perslid_email, '@') - 1),1,30), prs_srtperslid_omschrijving = 'Onbekend'; END lpnl_import_perslid; / CREATE OR REPLACE PROCEDURE lpnl_update_perslid (p_import_key IN NUMBER) IS CURSOR c_del IS SELECT p.prs_perslid_key, p.prs_perslid_nr, pf.prs_perslid_naam_full, p.prs_perslid_oslogin FROM prs_perslid p, prs_v_perslid_fullnames_all pf, prs_afdeling a WHERE p.prs_afdeling_key = a.prs_afdeling_key AND a.prs_bedrijf_key = 41 -- Leaseplan AND pf.prs_perslid_key = p.prs_perslid_key AND p.prs_perslid_verwijder IS NULL AND NOT EXISTS (SELECT 1 FROM fac_imp_perslid i WHERE LOWER (p.prs_perslid_email) = LOWER (i.prs_perslid_email)); CURSOR c IS SELECT DISTINCT prs_kenmerk4 FROM fac_imp_perslid WHERE prs_kenmerk4 IS NOT NULL AND NOT EXISTS (SELECT 1 FROM prs_afdeling a WHERE UPPER (a.prs_afdeling_omschrijving) = UPPER (prs_kenmerk4) AND a.prs_afdeling_verwijder IS NULL); CURSOR c_afd_del IS SELECT * FROM prs_afdeling a WHERE prs_afdeling_verwijder IS NULL AND NOT EXISTS (SELECT 1 FROM prs_perslid p WHERE prs_perslid_verwijder IS NULL AND p.prs_afdeling_key = a.prs_afdeling_key); v_bedrijf_key NUMBER (10); v_afdeling_key1 NUMBER (10); v_afdeling_key2 NUMBER (10); v_kostenplaats_key NUMBER (10); v_kpn_nr_prev VARCHAR2 (20); v_count_mandaat NUMBER (10); v_count_man_prs NUMBER (10) := 0; v_afdeling_key NUMBER; v_aanduiding VARCHAR2 (100); v_errorhint VARCHAR2 (1000); v_errormsg VARCHAR2 (1000); v_count NUMBER; oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); BEGIN FOR rec IN c LOOP -- Koppel de afdelingen aan het bedrijf leaseplan key 41 INSERT INTO prs_afdeling (prs_bedrijf_key, prs_afdeling_naam, prs_afdeling_omschrijving) VALUES (41, '123456', rec.prs_kenmerk4) RETURNING prs_afdeling_key INTO v_afdeling_key; UPDATE prs_afdeling SET prs_afdeling_naam = v_afdeling_key WHERE prs_afdeling_key = v_afdeling_key; END LOOP; UPDATE fac_imp_perslid i SET prs_afdeling_naam = (SELECT MIN (prs_afdeling_key) FROM prs_afdeling a WHERE prs_afdeling_verwijder IS NULL AND UPPER (i.prs_kenmerk4) = UPPER (a.prs_afdeling_omschrijving)); SELECT COUNT(*) INTO v_count FROM fac_imp_perslid WHERE fac_import_key = p_import_key; IF v_count > 500 THEN FOR rec IN c_del LOOP BEGIN v_errorhint := 'Persoon verwijderen: ' || rec.prs_perslid_naam_full || '-' || rec.prs_perslid_nr || '-' || rec.prs_perslid_oslogin; prs.delete_perslid (p_import_key, rec.prs_perslid_key); END; END LOOP; END IF; prs.update_perslid (p_import_key, 'EMAIL', NULL); -- Verwijder afdelingen waar geen personen meer aan gekoppeld zijn. FOR rec IN c_afd_del LOOP BEGIN v_errorhint := 'Verwijdere afdeling'; v_aanduiding := rec.prs_afdeling_omschrijving; UPDATE prs_afdeling SET prs_afdeling_verwijder = SYSDATE WHERE prs_afdeling_key = rec.prs_afdeling_key; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, v_errorhint); END; END LOOP; -- Zorg ervoor dat er geen persoonsgegevens achterblijven in de import tabel. -- DELETE fac_imp_perslid; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, v_errorhint); END lpnl_update_perslid; / CREATE OR REPLACE PROCEDURE lpnl_select_update_noti (p_applname IN VARCHAR2, p_applrun IN VARCHAR2) AS BEGIN LPNL.mld_ord_after_insert; END; / -- View om via een rapport je collega te vinden die ook een werkplek gereserveerd heeft CREATE OR REPLACE VIEW lpnl_v_rap_find_collega_wp AS SELECT rrr.res_rsv_ruimte_van, rrr.res_rsv_ruimte_tot, DECODE (p.prs_perslid_visibility, 1, pf.prs_perslid_naam_full, a.prs_afdeling_omschrijving) prs_perslid_naam, a.prs_afdeling_omschrijving, l.alg_locatie_omschrijving, d.alg_gebouw_omschrijving, d.alg_verdieping_code, d.alg_ruimte_nr, rd.res_deel_omschrijving, d.ins_deel_omschrijving FROM res_rsv_ruimte rrr, res_rsv_deel rrd, res_deel rd, res_discipline r, ins_v_deel_gegevens d, prs_v_perslid_fullnames pf, prs_afdeling a, prs_perslid p, alg_locatie l WHERE rrr.res_rsv_ruimte_key = rrd.res_rsv_ruimte_key AND rrd.res_deel_key = rd.res_deel_key AND rd.res_ins_deel_key = d.ins_deel_key AND rrr.res_rsv_ruimte_host_key = pf.prs_perslid_key AND p.prs_perslid_key = pf.prs_perslid_key AND p.prs_afdeling_key = a.prs_afdeling_key AND rd.res_discipline_key = r.ins_discipline_key --AND r.ins_discipline_min_level = 5 -- werkplekken AND res_activiteit_key = 30 -- Werkplekken AND d.alg_locatie_key = l.alg_locatie_key AND TRUNC (res_rsv_ruimte_van) < TRUNC (SYSDATE) + 14; -- View voor reserveerbare (werkplek)OBJECTEN, het default thema met key 13 -- Deze core-view wordt direct als kleur-objecten-thema gebruikt, maar kan ook als basis voor een alternatief via worden gebruikt -- Kijkt nu hard maximaal 42 dagen tov van nu vooruit, wat hopelijk even genoeg is voor alle situaties -- De verschillende waardevarianten zijn presentatie alternatieven, evt meerdere regels onder elkaar -- waarde1: Voor hele dagen: Vrij(0) of Bezet (3) -- waarde: Voor halve dagen: Vrij(0), Ochtendbezet(1), MiddagBezet(2), Helemaalbezet(3) -- waarde3: Voor tellen: Het aantal reservering op de dag, met 0 is dus Vrij CREATE OR REPLACE VIEW lpnl_v_thema_deel_res_datum ( fclt_f_datum, ins_deel_key, min_van, max_tot, waarde1, waarde, waarde3 ) AS WITH datums AS ( SELECT TRUNC (SYSDATE) + LEVEL - 1 datum FROM DUAL CONNECT BY LEVEL <= 14) SELECT datum fclt_f_datum, ins_deel_key, MIN (res_rsv_deel_van) min_van, MAX (res_rsv_deel_tot) max_tot, CASE WHEN MAX (res_rsv_deel_tot) IS NULL THEN DECODE(ins_srtdeel_key, 21, 4, 101, 5, 0) ELSE 3 -- hele dag Electrische bureaus (21) , Electrisch/Breedbeeld (101) END waarde1, CASE WHEN MAX (res_rsv_deel_tot) IS NULL THEN DECODE(ins_srtdeel_key, 21, 4, 101, 5, 0) WHEN TO_CHAR (MAX (res_rsv_deel_tot), 'HH24') <= 13 THEN 1 -- ochtend WHEN TO_CHAR (MIN (res_rsv_deel_van), 'HH24') >= 12 THEN 2 -- middag ELSE 3 -- hele dag END waarde, COUNT (res_rsv_deel_tot) -- aantal reservering deze dag waarde3 FROM (SELECT datums.datum, res_ins_deel_key ins_deel_key, ins_srtdeel_key, res_rsv_deel_van, res_rsv_deel_tot FROM res_v_aanwezigdeel r, ins_v_deel_gegevens dg, alg_gebouw g, alg_srtgebouw sg, datums, (SELECT datum, res_deel_key, res_rsv_deel_van, res_rsv_deel_tot FROM datums, res_v_aanwezigrsv_deel rrd WHERE res_rsv_deel_van > TRUNC(SYSDATE) - 1 -- negeer alle irrelevante historie sowieso AND datum + 1 >= res_rsv_deel_van AND datum < res_rsv_deel_tot) blokkerend -- vandaag en nog niet afgelopen WHERE r.res_deel_key = blokkerend.res_deel_key(+) AND datums.datum = blokkerend.datum(+) AND (r.res_deel_vervaldatum IS NULL or r.res_deel_vervaldatum > datums.datum) AND dg.ins_deel_key = r.res_ins_deel_key AND dg.alg_gebouw_key = g.alg_gebouw_key AND g.alg_srtgebouw_key = sg.alg_srtgebouw_key AND sg.alg_srtgebouw_passief IS NULL) GROUP BY datum, ins_deel_key, ins_srtdeel_key ORDER BY datum, ins_deel_key; CREATE OR REPLACE VIEW lpnl_v_thema_set_res_wp AS SELECT ins_deel_key, DECODE (rd.res_deel_key, NULL, 0, 1) waarde FROM ins_deel d, (SELECT * FROM res_deel WHERE res_deel_verwijder IS NULL) rd WHERE d.ins_deel_key = rd.res_ins_deel_key(+); -- View om inzichtelijk te maken welke werkplekken wel of niet bevestigd zijn. CREATE OR REPLACE VIEW lpnl_v_wp_bezetting AS SELECT l.alg_locatie_key, l.alg_locatie_omschrijving, dg.alg_gebouw_omschrijving, dg.alg_verdieping_code, dg.alg_ruimte_nr, rd.res_deel_omschrijving, pf.prs_perslid_naam_full, rrr.res_rsv_ruimte_van res_rsv_ruimte_datum, rrr.res_rsv_ruimte_van, rrr.res_rsv_ruimte_tot, h.ins_deel_statedate, DECODE(ins_deel_state_history_key, NULL, 1, 0) no_show, DECODE(ins_deel_state_history_key, NULL, 0, 1) show, FLX.getflex ('PRS', 1020, pf.prs_perslid_key, 'P') bhv FROM res_rsv_ruimte rrr, res_deel rd, prs_v_perslid_fullnames pf, ins_v_deel_gegevens dg, alg_locatie l, res_rsv_deel rrd LEFT OUTER JOIN ins_deel_state_history h ON fac.safe_to_number (h.ins_deel_state) = rrd.res_rsv_deel_key WHERE rrr.res_rsv_ruimte_key = rrd.res_rsv_ruimte_key AND rrd.res_deel_key = rd.res_deel_key AND rrr.res_rsv_ruimte_host_key = pf.prs_perslid_key AND rd.res_ins_deel_key = dg.ins_deel_key AND dg.alg_locatie_key = l.alg_locatie_key AND rrr.res_rsv_ruimte_verwijder IS NULL; -- Overzicht om te laten zien welke BHV-ers vandaag in het pand zijn. CREATE OR REPLACE VIEW lpnl_v_bhv_overview AS SELECT alg_locatie_key, alg_locatie_omschrijving, prs_perslid_naam_full, CASE WHEN SYSDATE BETWEEN res_rsv_ruimte_van AND res_rsv_ruimte_tot THEN 1 -- wp geboekt ELSE 0 END wp, CASE WHEN SYSDATE BETWEEN res_rsv_ruimte_van AND res_rsv_ruimte_tot AND ins_deel_statedate IS NOT NULL THEN 1 -- binnen ELSE 0 END binnen FROM lpnl_v_wp_bezetting WHERE bhv = 1 AND TRUNC (res_rsv_ruimte_van) = TRUNC (SYSDATE); -- Financieel CREATE OR REPLACE VIEW lpnl_v_rap_fin_verplichting AS SELECT sd.ins_srtdiscipline_prefix || m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr nummer, alg_locatie_omschrijving, prs_kostenplaats_omschrijving, k.prs_kostenplaats_nr, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_bedrijf_naam, mld_stdmelding_omschrijving, mld_statusopdr_omschrijving, mld_opdr_kosten, sf.fin_factuur_statuses_omschr, f.fin_factuur_totaal, f.fin_factuur_datum, f.fin_factuur_nr, mld_opdr_datumbegin boekmaand, 'Kosten' typeverpl FROM fin_factuur f, mld_opdr o, mld_melding m, mld_stdmelding std, prs_kostensoort ks, ins_srtdiscipline sd, ins_tab_discipline d, prs_bedrijf b, prs_kostenplaats k, alg_locatie l, alg_gebouw g, mld_statusopdr so, fin_factuur_statuses sf WHERE o.mld_opdr_key = f.mld_opdr_key(+) AND o.mld_statusopdr_key NOT IN (1,2) -- Afgewezen, Niet akkoord AND o.mld_melding_key = m.mld_melding_key AND COALESCE(mld_opdr_kosten, 0) <> 0 AND m.mld_stdmelding_key = std.mld_stdmelding_key AND COALESCE(o.prs_kostensoort_key, std.prs_kostensoort_key) = ks.prs_kostensoort_key(+) AND std.mld_ins_discipline_key = d.ins_discipline_key AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key AND o.mld_uitvoerende_keys = b.prs_bedrijf_key(+) AND m.mld_alg_locatie_key = g.alg_locatie_key(+) AND m.mld_alg_locatie_key = l.alg_locatie_key(+) AND g.prs_kostenplaats_key = k.prs_kostenplaats_key(+) AND o.mld_statusopdr_key = so.mld_statusopdr_key AND f.fin_factuur_statuses_key = sf.fin_factuur_statuses_key(+) UNION ALL SELECT 'C' || c.cnt_contract_key, alg_locatie_omschrijving, prs_kostenplaats_omschrijving, k.prs_kostenplaats_nr, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_bedrijf_naam, cnt_contract_omschrijving || ' (' || cnt_factuurschema_boekmaand || ')', NULL, cfs.cnt_factuurschema_bedrag * (COALESCE(cp.cnt_contract_plaats_gewicht, cnt_contract_kosten) / COALESCE(cnt_contract_kosten, 1)), sf.fin_factuur_statuses_omschr, f.fin_factuur_totaal, f.fin_factuur_datum, f.fin_factuur_nr, TO_DATE (cnt_factuurschema_boekmaand, 'yyyy-mm'), 'Kosten' typeverpl FROM fin_factuur f, cnt_contract c, cnt_contract_plaats cp, prs_kostensoort ks, prs_bedrijf b, prs_kostenplaats k, alg_locatie l, alg_gebouw g, fin_factuur_statuses sf, cnt_factuurschema cfs, cnt_discipline d WHERE c.cnt_contract_key = f.cnt_contract_key(+) AND c.ins_discipline_key = d.ins_discipline_key AND d.ins_discipline_key <> 461 -- Voorzieningen AND c.cnt_contract_verwijder IS NULL AND c.cnt_contract_key = cp.cnt_contract_key AND cp.cnt_alg_plaats_key = l.alg_locatie_key AND l.alg_locatie_key = g.alg_locatie_key AND g.prs_kostenplaats_key = k.prs_kostenplaats_key AND c.prs_kostensoort_key = COALESCE(ks.prs_kostensoort_key, d.prs_kostensoort_key) AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key AND f.fin_factuur_statuses_key = sf.fin_factuur_statuses_key(+) AND c.cnt_contract_key = cfs.cnt_contract_key AND TO_DATE (cnt_factuurschema_boekmaand, 'yyyy-mm') BETWEEN TRUNC (SYSDATE, 'y') - 365 AND TRUNC (SYSDATE, 'y') + (2*364) AND cfs.cnt_factuurschema_boekmaand = f.fin_factuur_boekmaand(+) UNION ALL -- Voorzieningen cnt_discipline_key = 461 SELECT 'C' || c.cnt_contract_key, NULL alg_locatie_omschrijving, prs_kostenplaats_omschrijving, k.prs_kostenplaats_nr, prs_kostensoort_oms, prs_kostensoort_opmerking, NULL prs_bedrijf_naam, cnt_contract_omschrijving, NULL, -- (Gewogen contract kosten per locatie = voorziening per locatie) - Kosten voor die locatie en de kostensoort van het contract -- gedurende de looptijd van het contract (voorziening) c.cnt_contract_kosten - (SELECT COALESCE(SUM(mld_opdr_kosten),0) FROM mld_opdr o, mld_melding m WHERE o.mld_melding_key = m.mld_melding_key AND o.prs_kostensoort_key = c.prs_kostensoort_key AND o.mld_statusopdr_key NOT IN (1,2) -- Afgewezen, Niet akkoord AND o.mld_opdr_datumbegin BETWEEN c.cnt_contract_looptijd_van AND c.cnt_contract_looptijd_tot) - (SELECT COALESCE(SUM(fin_factuur_totaal),0) FROM fin_factuur f, fin_kenmerkfactuur kf WHERE f.fin_factuur_key = kf.fin_factuur_key AND kf.fin_kenmerk_key = 1 AND f.prs_kostensoort_key = c.prs_kostensoort_key), NULL fin_factuur_statuses_omschr, NULL fin_factuur_totaal, NULL fin_factuur_datum, NULL fin_factuur_nr, c.cnt_contract_looptijd_van, 'Voorziening' typeverpl FROM cnt_contract c, prs_kostensoort ks, prs_kostenplaats k, cnt_discipline d WHERE c.ins_discipline_key = d.ins_discipline_key AND d.ins_discipline_key = 461 AND c.cnt_contract_verwijder IS NULL AND c.prs_kostenplaats_key = k.prs_kostenplaats_key AND c.prs_kostensoort_key = COALESCE(ks.prs_kostensoort_key, d.prs_kostensoort_key) AND cnt_contract_looptijd_van BETWEEN TRUNC (SYSDATE, 'y') - 365 AND TRUNC (SYSDATE, 'y') + (2*364); -- Dagelijkse taak CREATE OR REPLACE PROCEDURE lpnl_daily AS BEGIN LPNL.anonimize; END; / ------ payload end ------ SET DEFINE OFF BEGIN adm.systrackscriptId ('$Id$', 0); END; / COMMIT; SET ECHO OFF SPOOL OFF SET DEFINE ON PROMPT Logfile of this upgrade is: &fcltlogfile