Files
Customer/CONN/Once/CONN#22385.sql
Maarten van der Heide 42fe5a4079 CONN#22385
svn path=/Customer/trunk/; revision=15102
2012-02-02 10:11:28 +00:00

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