svn path=/Customer/trunk/; revision=13038
This commit is contained in:
Peter Feij
2006-09-15 10:04:22 +00:00
parent bde117e04c
commit 5fa91aa757

View File

@@ -1,7 +1,7 @@
-- Script containing customer specific configuration sql statements for CONN: Connexxion
-- (c) 2005-2006 Dijkoraad IT bv
-- $Revision: 70 $
-- $Modtime: 15-09-06 10:54 $
-- $Revision: 71 $
-- $Modtime: 15-09-06 11:35 $
--
-- Support: +31 53 4800700
@@ -5198,4 +5198,602 @@ SELECT 'FB-01'
commit;
-- Zaken tbv Perman/Interconnect koppeling (voorheen in aparte bestanden)
-- Start perman.sql
/* Formatted on 2006/09/15 11:37 (Formatter Plus v4.8.5) */
CREATE OR REPLACE PACKAGE perman
AS
PROCEDURE verwerk (
p_ind_toekomstmutatie IN VARCHAR2,
p_dvb_personeelsnummer IN VARCHAR2,
p_per_naam IN VARCHAR2,
p_per_partnernaam IN VARCHAR2,
p_per_indnaamsvoegen IN VARCHAR2,
p_per_tussenvoegsels IN VARCHAR2,
p_per_partussenvoegs IN VARCHAR2,
p_per_voorletters IN VARCHAR2,
p_per_roepnaam IN VARCHAR2,
p_per_username IN VARCHAR2,
p_per_titel IN VARCHAR2,
p_per_achtervoegsel IN VARCHAR2,
p_dvb_datum_in_dienst IN DATE,
p_dvb_datum_uit_dienst IN DATE,
p_fnc_omschrijving IN VARCHAR2,
p_dvb_k_emailzake IN VARCHAR2,
p_dvb_divisie IN VARCHAR2,
p_dvb_divisie_label IN VARCHAR2,
p_dvb_k_regio IN VARCHAR2,
p_dvb_k_regio_label IN VARCHAR2,
p_dvb_k_regiozoeknaam IN VARCHAR2,
p_afd_code IN VARCHAR2,
p_afd_omschrijving IN VARCHAR2,
p_dvb_k_standplts_label IN VARCHAR2
);
FUNCTION prs_perslid_key (p_dvb_personeelsnummer IN VARCHAR2)
RETURN NUMBER;
FUNCTION prs_srtperslid_key (p_fnc_omschrijving IN VARCHAR2)
RETURN NUMBER;
FUNCTION prs_perslid_verwijder
RETURN NUMBER;
FUNCTION prs_afdeling_key (
p_dvb_divisie IN VARCHAR2,
p_dvb_divisie_label IN VARCHAR2,
p_dvb_k_regiozoeknaam IN VARCHAR2,
p_dvb_k_regio_label IN VARCHAR2,
p_afd_code IN VARCHAR2,
p_afd_omschrijving IN VARCHAR2
)
RETURN NUMBER;
FUNCTION prs_afdeling_key_old (p_dvb_personeelsnummer IN VARCHAR2)
RETURN NUMBER;
END perman;
/
CREATE OR REPLACE PACKAGE BODY perman
AS
PROCEDURE verwerk (
p_ind_toekomstmutatie IN VARCHAR2,
p_dvb_personeelsnummer IN VARCHAR2,
p_per_naam IN VARCHAR2,
p_per_partnernaam IN VARCHAR2,
p_per_indnaamsvoegen IN VARCHAR2,
p_per_tussenvoegsels IN VARCHAR2,
p_per_partussenvoegs IN VARCHAR2,
p_per_voorletters IN VARCHAR2,
p_per_roepnaam IN VARCHAR2,
p_per_username IN VARCHAR2,
p_per_titel IN VARCHAR2,
p_per_achtervoegsel IN VARCHAR2,
p_dvb_datum_in_dienst IN DATE,
p_dvb_datum_uit_dienst IN DATE,
p_fnc_omschrijving IN VARCHAR2,
p_dvb_k_emailzake IN VARCHAR2,
p_dvb_divisie IN VARCHAR2,
p_dvb_divisie_label IN VARCHAR2,
p_dvb_k_regio IN VARCHAR2,
p_dvb_k_regio_label IN VARCHAR2,
p_dvb_k_regiozoeknaam IN VARCHAR2,
p_afd_code IN VARCHAR2,
p_afd_omschrijving IN VARCHAR2,
p_dvb_k_standplts_label IN VARCHAR2
)
IS
v_prs_srtperslid_key prs_srtperslid.prs_srtperslid_key%TYPE;
v_prs_afdeling_key prs_afdeling.prs_afdeling_key%TYPE;
v_prs_afdeling_key_old prs_afdeling.prs_afdeling_key%TYPE;
v_prs_perslid_key prs_perslid.prs_perslid_key%TYPE;
v_fac_groep_key fac_groep.fac_groep_key%TYPE;
v_prs_perslid_naam prs_perslid.prs_perslid_naam%TYPE;
v_prs_perslid_tussenvoegsels prs_perslid.prs_perslid_tussenvoegsel%TYPE;
v_prs_perslid_titel prs_perslid.prs_perslid_titel%TYPE := NULL;
v_prs_perslid_einddatum prs_perslid.prs_perslid_einddatum%TYPE;
v_email_kenmerk_key prs_kenmerk.prs_kenmerk_key%TYPE;
v_email_kenmerklink_key prs_kenmerklink.prs_kenmerklink_key%TYPE;
v_standplaats_kenmerk_key prs_kenmerk.prs_kenmerk_key%TYPE;
v_standplaats_kenmerklink_key prs_kenmerklink.prs_kenmerklink_key%TYPE;
v_count NUMBER (10);
BEGIN
v_prs_srtperslid_key := prs_srtperslid_key (p_fnc_omschrijving);
v_prs_afdeling_key :=
prs_afdeling_key (p_dvb_divisie,
p_dvb_divisie_label,
p_dvb_k_regiozoeknaam,
p_dvb_k_regio_label,
p_afd_code,
p_afd_omschrijving
);
v_prs_perslid_key := prs_perslid_key (p_dvb_personeelsnummer);
v_prs_afdeling_key_old := prs_afdeling_key_old (p_dvb_personeelsnummer);
v_prs_perslid_naam := SUBSTR (p_per_naam, 1, 30);
v_prs_perslid_tussenvoegsels := p_per_tussenvoegsels;
IF p_per_indnaamsvoegen = 'J'
OR p_per_indnaamsvoegen = 'W'
OR p_per_indnaamsvoegen = 'E'
OR p_per_indnaamsvoegen = 'P'
THEN
v_prs_perslid_tussenvoegsels := p_per_partussenvoegs;
IF p_per_tussenvoegsels IS NOT NULL
THEN
v_prs_perslid_naam := SUBSTR (p_per_partnernaam || '-' || p_per_tussenvoegsels || ' ' || p_per_naam, 1, 30);
ELSE
v_prs_perslid_naam := SUBSTR (p_per_partnernaam || '-' || p_per_naam, 1, 30);
END IF;
ELSIF p_per_indnaamsvoegen = 'A'
THEN
v_prs_perslid_tussenvoegsels := p_per_partussenvoegs;
v_prs_perslid_naam := SUBSTR (p_per_partnernaam, 1, 30);
ELSIF p_per_indnaamsvoegen = 'G'
THEN
IF p_per_partussenvoegs IS NOT NULL
THEN
v_prs_perslid_naam :=
SUBSTR (v_prs_perslid_naam || '-' || p_per_partussenvoegs || ' ' || p_per_partnernaam, 1, 30);
ELSE
v_prs_perslid_naam := SUBSTR (v_prs_perslid_naam || '-' || p_per_partnernaam, 1, 30);
END IF;
END IF;
IF p_ind_toekomstmutatie = 'N'
THEN -- Toekomstmutaties niet meenemen
IF p_per_titel IS NOT NULL OR p_per_achtervoegsel IS NOT NULL
THEN
v_prs_perslid_titel := SUBSTR (p_per_titel || '()' || p_per_achtervoegsel, 1, 15);
END IF;
-- controleren op onbepaald (dwz dvb_datum_uit_dienst=31 dec 2999)
v_prs_perslid_einddatum := p_dvb_datum_uit_dienst;
IF p_dvb_datum_uit_dienst IS NULL
THEN
v_prs_perslid_einddatum := TO_DATE ('31-12-2999', 'DD-MM-YYYY');
END IF;
IF v_prs_perslid_key = 0
THEN --nieuwe medewerker
INSERT INTO prs_perslid
(prs_perslid_nr, prs_perslid_module, prs_perslid_naam,
prs_perslid_tussenvoegsel, prs_perslid_voorletters,
prs_perslid_voornaam
-- , prs_perslid_oslogin
, prs_perslid_titel, prs_perslid_ingangsdatum,
prs_perslid_einddatum, prs_afdeling_key, prs_srtperslid_key
)
VALUES (p_dvb_personeelsnummer, 'PRS', v_prs_perslid_naam,
SUBSTR (v_prs_perslid_tussenvoegsels, 1, 15), SUBSTR (p_per_voorletters, 1, 10),
SUBSTR (p_per_roepnaam, 1, 30)
-- , substr(p_per_username,1,30)
, v_prs_perslid_titel, p_dvb_datum_in_dienst,
v_prs_perslid_einddatum, v_prs_afdeling_key, v_prs_srtperslid_key
);
SELECT prs_perslid_key
INTO v_prs_perslid_key
FROM prs_perslid
WHERE prs_perslid_nr = p_dvb_personeelsnummer;
-- Default autorisatie toekennen aan deze nieuwe persoon
BEGIN
SELECT fac_groep_key
INTO v_fac_groep_key
FROM fac_groep
WHERE fac_groep_upper = 'ALGEMEEN2808' AND fac_groep_verwijder IS NULL;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
INSERT INTO fac_groep
(fac_groep_omschrijving
)
VALUES ('Algemeen2808'
);
SELECT fac_groep_key
INTO v_fac_groep_key
FROM fac_groep
WHERE fac_groep_upper = 'ALGEMEEN2808' AND fac_groep_verwijder IS NULL;
END;
INSERT INTO fac_gebruikersgroep
(fac_groep_key, prs_perslid_key
)
VALUES (v_fac_groep_key, v_prs_perslid_key
);
ELSE
UPDATE prs_perslid
SET prs_perslid_naam = v_prs_perslid_naam,
prs_perslid_tussenvoegsel = SUBSTR (v_prs_perslid_tussenvoegsels, 1, 15),
prs_perslid_voorletters = SUBSTR (p_per_voorletters, 1, 10),
prs_perslid_voornaam = SUBSTR (p_per_roepnaam, 1, 30)
-- , prs_perslid_oslogin=substr(p_per_username,1,30)
,
prs_perslid_titel = v_prs_perslid_titel,
prs_perslid_ingangsdatum = p_dvb_datum_in_dienst,
prs_perslid_einddatum = v_prs_perslid_einddatum,
prs_afdeling_key = v_prs_afdeling_key,
prs_srtperslid_key = v_prs_srtperslid_key
WHERE prs_perslid_key = v_prs_perslid_key;
END IF;
--standplaats-kenmerk!!!
SELECT prs_kenmerk.prs_kenmerk_key
INTO v_standplaats_kenmerk_key
FROM prs_kenmerk
WHERE prs_kenmerk_upper = 'STANDPLAATS';
BEGIN
SELECT prs_kenmerklink_key
INTO v_standplaats_kenmerklink_key
FROM prs_kenmerklink
WHERE prs_link_key = v_prs_perslid_key AND prs_kenmerk_key = v_standplaats_kenmerk_key;
IF p_dvb_k_standplts_label IS NULL
THEN
DELETE FROM prs_kenmerklink
WHERE prs_kenmerklink_key = v_standplaats_kenmerklink_key;
ELSE
UPDATE prs_kenmerklink
SET prs_kenmerklink_waarde = p_dvb_k_standplts_label
WHERE prs_kenmerklink_key = v_standplaats_kenmerklink_key;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND
THEN -- nieuwe toevoegen indien niet leeg
IF p_dvb_k_standplts_label IS NOT NULL
THEN
INSERT INTO prs_kenmerklink
(prs_link_key, prs_kenmerklink_niveau, prs_kenmerk_key, prs_kenmerklink_waarde
)
VALUES (v_prs_perslid_key, 'P', v_standplaats_kenmerk_key, p_dvb_k_standplts_label
);
END IF;
END;
--nu nog het email-kenmerk voor beide situaties!!!
/* select prs_kenmerk.prs_kenmerk_key
into v_email_kenmerk_key
from prs_kenmerk
where prs_kenmerk_upper='EMAILADRES';
begin
select prs_kenmerklink_key
into v_email_kenmerklink_key
from prs_kenmerklink
where prs_link_key=v_prs_perslid_key
and prs_kenmerk_key=v_email_kenmerk_key;
if p_dvb_k_emailzake is null then
delete from prs_kenmerklink
where prs_kenmerklink_key=v_email_kenmerklink_key;
else
update prs_kenmerklink
set prs_kenmerklink_waarde=p_dvb_k_emailzake
where prs_kenmerklink_key=v_email_kenmerklink_key;
end if;
exception when no_data_found then -- nieuwe toevoegen indien niet leeg
if p_dvb_k_emailzake is not null then
insert into prs_kenmerklink
( prs_link_key
, prs_kenmerklink_niveau
, prs_kenmerk_key
, prs_kenmerklink_waarde)
values
( v_prs_perslid_key
, 'P'
, v_email_kenmerk_key
, p_dvb_k_emailzake);
end if;
end; */
END IF;
v_count := prs_perslid_verwijder; -- CONN#410
END;
FUNCTION prs_perslid_key (p_dvb_personeelsnummer IN VARCHAR2)
RETURN NUMBER
IS
v_prs_perslid_key prs_perslid.prs_perslid_key%TYPE;
-- CONN#613 only search for active persons
BEGIN
SELECT prs_perslid_key
INTO v_prs_perslid_key
FROM prs_v_aanwezigperslid
WHERE prs_perslid_nr = p_dvb_personeelsnummer;
RETURN v_prs_perslid_key;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
RETURN 0;
END;
FUNCTION prs_srtperslid_key (p_fnc_omschrijving IN VARCHAR2)
RETURN NUMBER
IS
v_prs_srtperslid_key prs_perslid.prs_srtperslid_key%TYPE;
BEGIN
SELECT prs_srtperslid_key
INTO v_prs_srtperslid_key
FROM prs_srtperslid
WHERE prs_srtperslid_upper = UPPER (p_fnc_omschrijving);
RETURN v_prs_srtperslid_key;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
INSERT INTO prs_srtperslid
(prs_srtperslid_omschrijving
)
VALUES (p_fnc_omschrijving
);
SELECT prs_srtperslid_key
INTO v_prs_srtperslid_key
FROM prs_srtperslid
WHERE prs_srtperslid_upper = UPPER (p_fnc_omschrijving);
RETURN v_prs_srtperslid_key;
END;
-- CONN#410
FUNCTION prs_perslid_verwijder
RETURN NUMBER
IS
CURSOR c_prs_del
IS
SELECT DISTINCT p.prs_perslid_key
FROM prs_perslid p, prs_v_verplichting pv
WHERE p.prs_perslid_verwijder IS NULL
AND NOT (p.prs_perslid_einddatum IS NULL)
AND p.prs_perslid_einddatum <= SYSDATE
AND p.prs_perslid_key = pv.prs_perslid_key(+)
AND pv.prs_perslid_key IS NULL;
rec_prs_del c_prs_del%ROWTYPE;
v_count_verwijderd NUMBER (10);
v_errmes VARCHAR2 (512);
BEGIN
v_count_verwijderd := 0;
FOR rec_prs_del IN c_prs_del
LOOP
BEGIN
UPDATE prs_perslidwerkplek
SET prs_perslidwerkplek_verwijder = SYSDATE
WHERE prs_perslid_key = rec_prs_del.prs_perslid_key AND prs_perslidwerkplek_verwijder IS NULL;
UPDATE prs_perslid
SET prs_perslid_verwijder = SYSDATE
WHERE prs_perslid_key = rec_prs_del.prs_perslid_key;
EXCEPTION
WHEN OTHERS
THEN
v_errmes := 'Error bij verwijderen persoon. Negeer fouten, verwerk de volgende persoon.';
END;
END LOOP;
RETURN v_count_verwijderd;
END;
FUNCTION prs_afdeling_key (
p_dvb_divisie IN VARCHAR2,
p_dvb_divisie_label IN VARCHAR2,
p_dvb_k_regiozoeknaam IN VARCHAR2,
p_dvb_k_regio_label IN VARCHAR2,
p_afd_code IN VARCHAR2,
p_afd_omschrijving IN VARCHAR2
)
RETURN NUMBER
IS
v_mh_bedrijf_key prs_afdeling.prs_afdeling_key%TYPE;
v_mh_afdeling_parentkey prs_afdeling.prs_afdeling_key%TYPE;
v_afdeling_key prs_afdeling.prs_afdeling_key%TYPE;
BEGIN
BEGIN
SELECT a.prs_afdeling_key
INTO v_afdeling_key
FROM prs_afdeling a
WHERE a.prs_afdeling_upper = UPPER (p_afd_code) AND a.prs_afdeling_verwijder IS NULL;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_afdeling_key := NULL;
END;
IF v_afdeling_key IS NULL
THEN -- afdeling bestaat niet
BEGIN
-- bestaat afdeling "perman nieuw"
SELECT a.prs_afdeling_key
INTO v_afdeling_key
FROM prs_afdeling a
WHERE a.prs_afdeling_upper = UPPER ('Perman')
AND UPPER (a.prs_afdeling_omschrijving) = UPPER ('Perman nieuw')
AND a.prs_afdeling_verwijder IS NULL;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_afdeling_key := NULL;
END;
IF v_afdeling_key IS NULL
THEN -- afdeling "Perman nieuw" bestaat niet
-- maak de afdeling " Perman nieuw" aan (dezelfde regio als Maarten Hanemaaijer)
-- vind afdeling van Maarten Hanemaaijer, perslid_key = 1042
-- benodigd zijn prs_afdeling_parent_key en prs_bedrijf_key
BEGIN
SELECT a.prs_bedrijf_key, a.prs_afdeling_parentkey
INTO v_mh_bedrijf_key, v_mh_afdeling_parentkey
FROM prs_perslid p, prs_afdeling a
WHERE p.prs_afdeling_key = a.prs_afdeling_key AND p.prs_perslid_key = 1042;
-- and p.prs_perslid_upper = upper ('Hanemaaijer')
-- and upper (p.prs_perslid_voornaam) = upper ('Maarten');
EXCEPTION
WHEN NO_DATA_FOUND
THEN
RETURN 0;
END;
-- maak de afdeling "Perman nieuw" aan
INSERT INTO prs_afdeling
(prs_afdeling_parentkey, prs_afdeling_naam, prs_afdeling_omschrijving, prs_bedrijf_key
)
VALUES (v_mh_afdeling_parentkey, 'Perman', 'Perman nieuw', v_mh_bedrijf_key
);
-- vindt de afdeling_key van de afdeling "Perman nieuw"
SELECT prs_afdeling_key
INTO v_afdeling_key
FROM prs_afdeling a
WHERE a.prs_afdeling_upper = UPPER ('Perman')
AND UPPER (a.prs_afdeling_omschrijving) = UPPER ('Perman nieuw');
END IF;
-- else -- afdeling bestaat: return v-afdeling_key.
END IF;
RETURN v_afdeling_key;
END;
FUNCTION prs_afdeling_key_old (p_dvb_personeelsnummer IN VARCHAR2)
RETURN NUMBER
IS
v_prs_afdeling_key prs_perslid.prs_afdeling_key%TYPE;
BEGIN
SELECT prs_afdeling_key
INTO v_prs_afdeling_key
FROM prs_perslid
WHERE prs_perslid_nr = p_dvb_personeelsnummer;
RETURN v_prs_afdeling_key;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
RETURN 0;
END;
END perman;
/
GRANT EXECUTE ON perman TO oac;
-- End perman.sql
-- Start
/* Formatted on 2006/09/15 11:39 (Formatter Plus v4.8.5) */
CREATE OR REPLACE TRIGGER oac_sdr_bru
BEFORE UPDATE
ON oac_stg_distribute_medewerker
FOR EACH ROW
DECLARE
--
-- declaration section
--
cn_module VARCHAR2 (2000) := 'oac_sdr_bru';
l_sysdate DATE;
l_user VARCHAR2 (2000);
--
BEGIN
--
/* data auditing */
BEGIN
l_sysdate := SYSDATE;
l_user := USER;
--
:NEW.mutatiedatum := l_sysdate;
:NEW.mutator := l_user;
END;
--
conn.perman.verwerk (:NEW.ind_toekomstmutatie,
:NEW.dvb_personeelsnummer,
:NEW.per_naam,
:NEW.per_partnernaam,
:NEW.per_indnaamsvoegen,
:NEW.per_tussenvoegsels,
:NEW.per_partussenvoegs,
:NEW.per_voorletters,
:NEW.per_roepnaam,
:NEW.per_username,
:NEW.per_titel,
:NEW.per_achtervoegsel,
:NEW.per_begindatum,
:NEW.per_einddatumtot,
:NEW.fnc_omschrijving,
:NEW.dvb_k_emailzake,
:NEW.dvb_divisie,
:NEW.dvb_divisie_label,
:NEW.dvb_k_regio,
:NEW.dvb_k_regio_label,
:NEW.dvb_k_regiozoeknaam,
:NEW.afd_code,
:NEW.afd_omschrijving
);
EXCEPTION
WHEN OTHERS
THEN
raise_application_error (-20000, SQLERRM || ' ' || cn_module);
END;
/
-- End
-- Start
/* Formatted on 2006/09/15 11:39 (Formatter Plus v4.8.5) */
CREATE OR REPLACE TRIGGER oac_sdr_bri
BEFORE INSERT
ON oac_stg_distribute_medewerker
FOR EACH ROW
DECLARE
--
-- declaration section
--
cn_module VARCHAR2 (2000) := 'oac_sdr_bri';
l_sysdate DATE;
l_user VARCHAR2 (2000);
--
BEGIN
--
/* data auditing */
BEGIN
l_sysdate := SYSDATE;
l_user := USER;
--
:NEW.creatiedatum := l_sysdate;
:NEW.creator := l_user;
:NEW.mutatiedatum := l_sysdate;
:NEW.mutator := l_user;
END;
--
conn.perman.verwerk (:NEW.ind_toekomstmutatie,
:NEW.dvb_personeelsnummer,
:NEW.per_naam,
:NEW.per_partnernaam,
:NEW.per_indnaamsvoegen,
:NEW.per_tussenvoegsels,
:NEW.per_partussenvoegs,
:NEW.per_voorletters,
:NEW.per_roepnaam,
:NEW.per_username,
:NEW.per_titel,
:NEW.per_achtervoegsel,
:NEW.per_begindatum,
:NEW.per_einddatumtot,
:NEW.fnc_omschrijving,
:NEW.dvb_k_emailzake,
:NEW.dvb_divisie,
:NEW.dvb_divisie_label,
:NEW.dvb_k_regio,
:NEW.dvb_k_regio_label,
:NEW.dvb_k_regiozoeknaam,
:NEW.afd_code,
:NEW.afd_omschrijving
);
EXCEPTION
WHEN OTHERS
THEN
raise_application_error (-20000, SQLERRM || ' ' || cn_module);
END;
/
-- End
SPOOL OFF