394 lines
15 KiB
SQL
394 lines
15 KiB
SQL
-- Customer specific once-script CONN#22385.
|
|
--
|
|
-- (c) 2012 SG|facilitor bv
|
|
-- $Revision: 1 $
|
|
-- $Modtime: 2-02-12 12:09 $
|
|
--
|
|
-- Support: +31 53 4800700
|
|
SET ECHO ON
|
|
SPOOL xconn#22385.lst
|
|
SET DEFINE OFF
|
|
|
|
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_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;
|
|
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;
|
|
v_divisie_key prs_afdeling.prs_afdeling_key%TYPE;
|
|
BEGIN
|
|
BEGIN
|
|
SELECT a.prs_afdeling_key
|
|
INTO v_afdeling_key
|
|
FROM prs_afdeling a
|
|
WHERE TRIM(a.prs_afdeling_upper) = UPPER (TRIM(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 zoek de divisie en maak de afdeling aan.
|
|
BEGIN
|
|
SELECT a.prs_afdeling_key
|
|
INTO v_divisie_key
|
|
FROM prs_v_afdeling a
|
|
WHERE UPPER (TRIM(a.prs_afdeling_omschrijving)) = UPPER (TRIM(p_dvb_divisie)) AND a.prs_afdeling_verwijder IS NULL AND a.niveau = 1;
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN
|
|
BEGIN
|
|
v_divisie_key := NULL;
|
|
-- als we geen afdeling en divisie kunnen vinden dan plaatsen we de persoon in de afdeling perman nieuw
|
|
-- 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;
|
|
END;
|
|
|
|
IF v_divisie_key IS NOT NULL
|
|
THEN -- nieuwe afdeling onder bekende divisie plaatsen
|
|
-- maak de afdeling aan
|
|
INSERT INTO prs_afdeling
|
|
(prs_afdeling_parentkey, prs_afdeling_naam, prs_afdeling_omschrijving, prs_bedrijf_key
|
|
)
|
|
VALUES (v_divisie_key, p_afd_code, p_afd_omschrijving, null
|
|
)
|
|
RETURNING prs_afdeling_key INTO v_afdeling_key;
|
|
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;
|
|
/
|
|
|
|
BEGIN adm.systrackscript('$Workfile: conn#22385.sql $', '$Revision: 1 $', 1); END;
|
|
/
|
|
|
|
COMMIT;
|
|
|
|
SPOOL OFF
|