-- 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