ALLR#77557 -- Nieuwe omgeving voor Alliander
svn path=/Customer/trunk/; revision=60137
This commit is contained in:
444
AA/ALLR/allr.sql
Normal file
444
AA/ALLR/allr.sql
Normal file
@@ -0,0 +1,444 @@
|
||||
--
|
||||
-- $Id$
|
||||
--
|
||||
-- Script containing customer specific sql statements for the FACILITOR database
|
||||
|
||||
DEFINE thisfile = 'ALLR.SQL'
|
||||
DEFINE dbuser = '^ALLR'
|
||||
|
||||
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 ALLR
|
||||
AS
|
||||
FUNCTION change_delimitor (p_string VARCHAR2,
|
||||
p_delimitor VARCHAR2)
|
||||
RETURN VARCHAR2;
|
||||
|
||||
|
||||
END;
|
||||
/
|
||||
|
||||
CREATE OR REPLACE PACKAGE BODY ALLR
|
||||
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;
|
||||
EXCEPTION
|
||||
WHEN OTHERS
|
||||
THEN
|
||||
RETURN NULL;
|
||||
END;
|
||||
|
||||
END;
|
||||
/
|
||||
|
||||
CREATE OR REPLACE PROCEDURE allr_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
|
||||
-- Import formaat:
|
||||
-- Group 1
|
||||
-- Peildatum 2
|
||||
-- Aanstellingsdatum 3
|
||||
-- WerknemersID 4
|
||||
-- Medewerkerstype 5
|
||||
-- Roepnaam 6
|
||||
-- Achternaam 7
|
||||
-- PrimaryWorkPhone 8
|
||||
-- PrimaryWorkEmail 9
|
||||
-- AfdelingID 10
|
||||
-- Afdelingnaam 11
|
||||
-- Lvl3ID 12
|
||||
-- Lvl3naam 13
|
||||
-- Lvl4ID 14
|
||||
-- Lvl4naam 15
|
||||
-- IsManager 16
|
||||
-- LocatieID 17
|
||||
-- LocatieNaam 18
|
||||
-- BusinessTitle 19
|
||||
-- ManagerID 20
|
||||
-- Tussenvoegsel 21
|
||||
|
||||
v_seq_of_columns := '0;0;0;0;0;0;10;7;21;6;'
|
||||
-- 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;0;0;9;0;4;'
|
||||
-- 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
|
||||
|| '19;0;0;0;0;0;11;12;13;14;'
|
||||
-- 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
|
||||
|| '15;17;18;20;8;1;5;16;0;0;'
|
||||
|| '0;0;0;0;0;0';
|
||||
|
||||
prs.import_perslid(p_import_key, v_seq_of_columns, 'Group;Peildatum;Aanstellingsdatum;WerknemersID;Medewerkerstype;Roepnaam;Achternaam;PrimaryWorkPhone;PrimaryWorkEmail;AfdelingID;Afdelingnaam;Lvl3ID;Lvl3naam;Lvl4ID;Lvl4naam;IsManager;LocatieID;LocatieNaam;BusinessTitle;ManagerID;%');
|
||||
|
||||
UPDATE fac_imp_perslid
|
||||
SET prs_perslid_oslogin = SUBSTR(UPPER(prs_perslid_email), 1,INSTR(prs_perslid_email, '@')-1),
|
||||
prs_perslid_telefoonnr = SUBSTR(REPLACE(prs_kenmerk9, ' '),1,15);
|
||||
END allr_import_perslid;
|
||||
/
|
||||
|
||||
|
||||
CREATE OR REPLACE PROCEDURE allr_update_perslid (p_import_key IN NUMBER)
|
||||
IS
|
||||
CURSOR c IS SELECT * FROM fac_imp_perslid;
|
||||
|
||||
CURSOR c_del (c_bedrijf_key IN NUMBER)
|
||||
IS
|
||||
SELECT p.prs_perslid_key,
|
||||
p.prs_perslid_nr,
|
||||
pf.prs_perslid_naam_full,
|
||||
p.prs_perslid_oslogin
|
||||
FROM fac_imp_perslid i,
|
||||
prs_perslid p,
|
||||
prs_v_perslid_fullnames_all pf,
|
||||
prs_v_afdeling_boom ab
|
||||
WHERE p.prs_perslid_nr = i.prs_perslid_nr(+)
|
||||
AND pf.prs_perslid_key = p.prs_perslid_key
|
||||
AND p.prs_perslid_nr IS NOT NULL
|
||||
AND i.prs_perslid_nr IS NULL
|
||||
AND p.prs_perslid_verwijder IS NULL
|
||||
AND p.prs_afdeling_key = ab.prs_afdeling_key
|
||||
AND ab.prs_bedrijf_key = c_bedrijf_key;
|
||||
|
||||
-- Cursor om afdelingen te verwijderen
|
||||
CURSOR c_afd_del (c_bedrijf_key IN NUMBER)
|
||||
IS
|
||||
SELECT ab.prs_afdeling_key,
|
||||
a.prs_afdeling_naam,
|
||||
a.prs_afdeling_omschrijving,
|
||||
ab.niveau
|
||||
FROM prs_v_afdeling_boom ab, prs_afdeling a
|
||||
WHERE ab.prs_afdeling_key = a.prs_afdeling_key
|
||||
AND a.prs_afdeling_verwijder IS NULL
|
||||
AND ab.prs_bedrijf_key = 322
|
||||
AND NOT EXISTS
|
||||
(SELECT 1
|
||||
FROM fac_imp_perslid i
|
||||
WHERE ab.niveau = 1 AND a.prs_afdeling_naam = i.prs_kenmerk2)
|
||||
AND NOT EXISTS
|
||||
(SELECT 1
|
||||
FROM fac_imp_perslid i, prs_afdeling a1
|
||||
WHERE ab.niveau = 2
|
||||
AND a.prs_afdeling_parentkey = a1.prs_afdeling_key
|
||||
AND a1.prs_afdeling_naam = i.prs_kenmerk2
|
||||
AND a.prs_afdeling_naam = i.prs_kenmerk4)
|
||||
AND NOT EXISTS
|
||||
(SELECT 1
|
||||
FROM fac_imp_perslid i, prs_afdeling a1, prs_afdeling a2
|
||||
WHERE ab.niveau = 3
|
||||
AND a.prs_afdeling_parentkey = a2.prs_afdeling_key
|
||||
AND a2.prs_afdeling_parentkey = a1.prs_afdeling_key
|
||||
AND a1.prs_afdeling_naam = i.prs_kenmerk2
|
||||
AND a2.prs_afdeling_naam = i.prs_kenmerk4
|
||||
AND a.prs_afdeling_naam = i.prs_afdeling_naam)
|
||||
ORDER BY ab.niveau DESC;
|
||||
|
||||
v_count_imp NUMBER;
|
||||
v_count_allr NUMBER;
|
||||
|
||||
v_aanduiding VARCHAR2(100);
|
||||
v_errorhint VARCHAR2(1000);
|
||||
v_errormsg VARCHAR2(1000);
|
||||
oracle_err_num NUMBER;
|
||||
oracle_err_mes VARCHAR2(200);
|
||||
|
||||
v_prs_afdeling_key1 NUMBER;
|
||||
v_prs_afdeling_key2 NUMBER;
|
||||
v_prs_afdeling_key3 NUMBER;
|
||||
v_prs_afdeling_verwijder DATE;
|
||||
c_prs_bedrijf_key NUMBER := 322; -- Intern bedrijf Alliander
|
||||
v_prs_perslid_key NUMBER;
|
||||
BEGIN
|
||||
FOR rec IN c
|
||||
LOOP
|
||||
v_aanduiding := rec.prs_kenmerk2 || '-' || rec.prs_kenmerk4 || '-' || rec.prs_afdeling_naam;
|
||||
BEGIN
|
||||
v_errorhint := 'Controle afdeling niveau 1';
|
||||
SELECT prs_afdeling_key, prs_afdeling_verwijder
|
||||
INTO v_prs_afdeling_key1, v_prs_afdeling_verwijder
|
||||
FROM prs_afdeling a
|
||||
WHERE REPLACE(prs_afdeling_naam, '_vv') = rec.prs_kenmerk2;
|
||||
|
||||
IF v_prs_afdeling_verwijder IS NOT NULL
|
||||
THEN
|
||||
UPDATE prs_afdeling
|
||||
SET prs_afdeling_verwijder = NULL
|
||||
WHERE prs_afdeling_key = v_prs_afdeling_key1;
|
||||
END IF;
|
||||
EXCEPTION
|
||||
WHEN NO_DATA_FOUND
|
||||
THEN
|
||||
v_errorhint := 'Aanmaken afdeling niveau 1';
|
||||
INSERT INTO prs_afdeling (prs_bedrijf_key, prs_afdeling_naam, prs_afdeling_omschrijving)
|
||||
VALUES (c_prs_bedrijf_key, SUBSTR (rec.prs_kenmerk2, 1, 15), SUBSTR (rec.prs_kenmerk3, 1, 60))
|
||||
RETURNING prs_afdeling_key
|
||||
INTO v_prs_afdeling_key1;
|
||||
END;
|
||||
|
||||
-- Afdeling niveau2
|
||||
BEGIN
|
||||
v_errorhint := 'Controle afdeling niveau 2';
|
||||
SELECT prs_afdeling_key, prs_afdeling_verwijder
|
||||
INTO v_prs_afdeling_key2, v_prs_afdeling_verwijder
|
||||
FROM prs_afdeling a
|
||||
WHERE prs_afdeling_parentkey = v_prs_afdeling_key1 AND REPLACE(prs_afdeling_naam, '_vv') = rec.prs_kenmerk4;
|
||||
|
||||
IF v_prs_afdeling_verwijder IS NOT NULL
|
||||
THEN
|
||||
UPDATE prs_afdeling
|
||||
SET prs_afdeling_verwijder = NULL
|
||||
WHERE prs_afdeling_key = v_prs_afdeling_key2;
|
||||
END IF;
|
||||
EXCEPTION
|
||||
WHEN NO_DATA_FOUND
|
||||
THEN
|
||||
v_errorhint := 'Aanmaken afdeling niveau 2';
|
||||
INSERT INTO prs_afdeling (prs_afdeling_parentkey, prs_afdeling_naam, prs_afdeling_omschrijving)
|
||||
VALUES (v_prs_afdeling_key1, SUBSTR (rec.prs_kenmerk4, 1, 15), SUBSTR (rec.prs_kenmerk5, 1, 60))
|
||||
RETURNING prs_afdeling_key
|
||||
INTO v_prs_afdeling_key2;
|
||||
END;
|
||||
|
||||
|
||||
-- Afdeling niveau3
|
||||
BEGIN
|
||||
v_errorhint := 'Controle afdeling niveau 3';
|
||||
SELECT prs_afdeling_key, prs_afdeling_verwijder
|
||||
INTO v_prs_afdeling_key3, v_prs_afdeling_verwijder
|
||||
FROM prs_afdeling a
|
||||
WHERE prs_afdeling_parentkey = v_prs_afdeling_key2 AND REPLACE(prs_afdeling_naam, '_vv') = rec.prs_afdeling_naam;
|
||||
|
||||
IF v_prs_afdeling_verwijder IS NOT NULL
|
||||
THEN
|
||||
UPDATE prs_afdeling
|
||||
SET prs_afdeling_verwijder = NULL
|
||||
WHERE prs_afdeling_key = v_prs_afdeling_key3;
|
||||
END IF;
|
||||
EXCEPTION
|
||||
WHEN NO_DATA_FOUND
|
||||
THEN
|
||||
v_errorhint := 'Aanmaken afdeling niveau 3';
|
||||
INSERT INTO prs_afdeling (prs_afdeling_parentkey, prs_afdeling_naam, prs_afdeling_omschrijving)
|
||||
VALUES (v_prs_afdeling_key2,
|
||||
SUBSTR (rec.prs_afdeling_naam, 1, 15),
|
||||
SUBSTR (rec.prs_kenmerk1, 1, 60))
|
||||
RETURNING prs_afdeling_key
|
||||
INTO v_prs_afdeling_key3;
|
||||
END;
|
||||
END LOOP;
|
||||
|
||||
SELECT COUNT (*)
|
||||
INTO v_count_imp
|
||||
FROM fac_imp_perslid
|
||||
WHERE fac_import_key = p_import_key;
|
||||
|
||||
SELECT COUNT (*)
|
||||
INTO v_count_allr
|
||||
FROM prs_perslid p, prs_v_afdeling_boom ab
|
||||
WHERE p.prs_afdeling_key = ab.prs_afdeling_key AND ab.prs_bedrijf_key = c_prs_bedrijf_key;
|
||||
|
||||
-- We gaan alleen mensen verwijderen als de aangeboden populatie groter is dan de helft van de huidige populatie.
|
||||
IF v_count_imp > v_count_allr / 2
|
||||
THEN
|
||||
-- Voordat we gaan importeren gaan we op zoek of we nog mensen moeten verwijderen die niet in de import voorkomen.
|
||||
FOR rec IN c_del (c_prs_bedrijf_key)
|
||||
LOOP
|
||||
BEGIN
|
||||
v_errorhint :=
|
||||
'Verwijderen persoon: '
|
||||
|| rec.prs_perslid_key
|
||||
|| '-'
|
||||
|| rec.prs_perslid_nr
|
||||
|| '-'
|
||||
|| rec.prs_perslid_oslogin;
|
||||
prs.delete_perslid (p_import_key, rec.prs_perslid_key);
|
||||
EXCEPTION
|
||||
WHEN OTHERS
|
||||
THEN
|
||||
oracle_err_num := SQLCODE;
|
||||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||||
v_errormsg := 'error ' || oracle_err_num || '/' || oracle_err_mes;
|
||||
fac.imp_writelog (p_import_key,
|
||||
'E',
|
||||
v_errormsg,
|
||||
v_errorhint);
|
||||
END;
|
||||
END LOOP;
|
||||
ELSE
|
||||
fac.imp_writelog (p_import_key,
|
||||
'E',
|
||||
'Verschil tussen huidige populatie personen (' || v_count_allr || ') en aangeboden populatie (' || v_count_imp || ') is te groot' ,
|
||||
'');
|
||||
END IF;
|
||||
|
||||
-- Nu kunnen we de standaard facilitor-update doorvoeren
|
||||
prs.update_perslid (p_import_key, 'NR', NULL);
|
||||
|
||||
-- En dan gaan we als laatste de kenmmerken bijwerken
|
||||
FOR rec IN c
|
||||
LOOP
|
||||
-- We kunnen alleen maar kenmerken toevoegen/aanpassen als de persoon ook is aangemaakt zonder foutmelding.
|
||||
IF rec.prs_perslid_key IS NOT NULL
|
||||
THEN
|
||||
v_errorhint := 'Bijwerken kenmerk leidinggevende ';
|
||||
v_aanduiding := rec.prs_perslid_voornaam || ' ' || rec.prs_perslid_naam;
|
||||
IF rec.prs_kenmerk8 IS NOT NULL
|
||||
THEN
|
||||
BEGIN
|
||||
-- op zoek naar de leidinggevende
|
||||
SELECT prs_perslid_key
|
||||
INTO v_prs_perslid_key
|
||||
FROM prs_perslid
|
||||
WHERE prs_perslid_nr = rec.prs_kenmerk8;
|
||||
|
||||
FLX.setflex('PRS', 1021, rec.prs_perslid_key, 'P', v_prs_perslid_key);
|
||||
EXCEPTION WHEN NO_DATA_FOUND
|
||||
THEN
|
||||
fac.imp_writelog (p_import_key,
|
||||
'W',
|
||||
'Leidinggevende niet gevonden',
|
||||
rec.prs_kenmerk8);
|
||||
|
||||
END;
|
||||
END IF;
|
||||
|
||||
-- Status
|
||||
v_errorhint := 'Bijwerken kenmerk status';
|
||||
FLX.setflex('PRS', 1022, rec.prs_perslid_key, 'P', rec.prs_kenmerk10);
|
||||
-- Type medewerker
|
||||
v_errorhint := 'Bijwerken kenmerk type medewerker';
|
||||
FLX.setflex('PRS', 1020, rec.prs_perslid_key, 'P', rec.prs_kenmerk11);
|
||||
-- Is manager
|
||||
v_errorhint := 'Bijwerken kenmerk is manager';
|
||||
FLX.setflex('PRS', 1020, rec.prs_perslid_key, 'P', rec.prs_kenmerk12);
|
||||
END IF;
|
||||
END LOOP;
|
||||
|
||||
-- En dan de afdelingen verwijderen die niet meer voorkomen.
|
||||
FOR rec IN c_afd_del(c_prs_bedrijf_key)
|
||||
LOOP
|
||||
BEGIN
|
||||
v_errorhint := 'Verwijderen afdeling ';
|
||||
v_aanduiding := rec.prs_afdeling_naam || '-' || rec.prs_afdeling_omschrijving || ' Niveau: ' || rec.niveau;
|
||||
UPDATE prs_afdeling
|
||||
SET prs_afdeling_verwijder = SYSDATE,
|
||||
prs_afdeling_naam = REPLACE(prs_afdeling_naam, '_vv')
|
||||
WHERE prs_afdeling_key = rec.prs_afdeling_key;
|
||||
EXCEPTION WHEN OTHERS
|
||||
THEN
|
||||
-- Markeer de afdeling. Hiervoor gaan we de afdelingcode voorzien van '_vv' van vervallen
|
||||
UPDATE prs_afdeling
|
||||
SET prs_afdeling_naam = prs_afdeling_naam || '_vv'
|
||||
WHERE prs_afdeling_key = rec.prs_afdeling_key
|
||||
AND prs_afdeling_naam NOT LIKE '%vv';
|
||||
|
||||
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,
|
||||
'');
|
||||
END;
|
||||
END LOOP;
|
||||
|
||||
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;
|
||||
/
|
||||
|
||||
|
||||
-- script om dagelijks terugkerende scripts aan te roepen.
|
||||
CREATE OR REPLACE PROCEDURE allr_select_daily_task (p_applname IN VARCHAR2, p_applrun IN VARCHAR2)
|
||||
AS
|
||||
BEGIN
|
||||
aaxx_daily_task (p_applname, p_applrun);
|
||||
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user