2568 lines
100 KiB
MySQL
2568 lines
100 KiB
MySQL
-- Script containing customer specific configuration sql statements for ALLI
|
||
-- (c) 2012 SG|facilitor bv
|
||
-- $Revision$
|
||
-- $Id$
|
||
--
|
||
-- Support: +31 53 4800700
|
||
|
||
set echo on
|
||
|
||
spool ALLI.lst
|
||
|
||
CREATE OR REPLACE VIEW alli_v_import_log
|
||
AS
|
||
SELECT imp_log_status fclt_f_status,
|
||
imp_log_omschrijving omschrijving,
|
||
imp_log_hint opmerking
|
||
FROM imp_log
|
||
WHERE imp_log_applicatie = 'PRS';
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE alli_import_prs (
|
||
p_import_key IN NUMBER
|
||
)
|
||
IS
|
||
c_fielddelimitor VARCHAR2 (1) := ';';
|
||
-- LET OP: moet idem zijn als declaratie bij alli_UPDATE_PRS
|
||
v_newline VARCHAR2 (1000); -- Input line
|
||
v_aanduiding VARCHAR2 (200);
|
||
v_errorhint VARCHAR2 (1000);
|
||
v_errormsg VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
header_is_valid NUMBER := 0;
|
||
v_ongeldig NUMBER (1);
|
||
v_count_tot NUMBER (10);
|
||
v_count_import NUMBER (10);
|
||
v_count NUMBER;
|
||
v_pos NUMBER;
|
||
-- De importvelden:
|
||
v_prs_perslid_nr VARCHAR2 (256);
|
||
v_prs_perslid_voornaam VARCHAR2 (256);
|
||
v_prs_perslid_naam VARCHAR2 (256);
|
||
v_prs_perslid_tussenvoegsel VARCHAR2 (256);
|
||
v_prs_perslid_voorletters VARCHAR2 (256);
|
||
v_prs_afdeling_code VARCHAR2 (256);
|
||
v_prs_afdeling_naam VARCHAR2 (256);
|
||
v_prs_srtperslid_omschrijving VARCHAR2 (256);
|
||
v_prs_perslid_telefoonnr VARCHAR2 (256);
|
||
v_prs_perslid_mobiel VARCHAR2 (256);
|
||
v_prs_perslid_email VARCHAR2 (256);
|
||
v_prs_perslid_oslogin VARCHAR2 (256);
|
||
v_prs_perslid_bedrijfsdeel VARCHAR2 (256);
|
||
|
||
-- Overig:
|
||
v_alg_locatie_code VARCHAR2 (256);
|
||
v_alg_gebouw_code VARCHAR2 (256);
|
||
|
||
|
||
CURSOR c1
|
||
IS
|
||
SELECT *
|
||
FROM fac_imp_file
|
||
WHERE fac_import_key = p_import_key
|
||
ORDER BY fac_imp_file_index;
|
||
BEGIN
|
||
DELETE FROM alli_imp_prs;
|
||
|
||
COMMIT;
|
||
|
||
v_count_tot := 0;
|
||
v_count_import := 0;
|
||
|
||
FOR rec1 IN c1
|
||
LOOP
|
||
BEGIN
|
||
v_newline := rec1.fac_imp_file_line;
|
||
v_aanduiding := '';
|
||
v_errorhint := 'Fout bij opvragen te importeren rij';
|
||
v_ongeldig := 0;
|
||
-- Lees alle veldwaarden
|
||
|
||
-- 01, 02, 03, 04 - Naam van medewerkers in de 1e 4 kolommen: voornaam, voorletters, tussenvoegsels, achternaam.
|
||
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_voornaam);
|
||
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_voorletters);
|
||
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_tussenvoegsel);
|
||
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_naam);
|
||
|
||
-- 05 - Peroneelsnr
|
||
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_nr);
|
||
|
||
-- 06 - Afdelingscode
|
||
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_afdeling_code);
|
||
|
||
-- 07 - Afdelingsnaam (niet de code!)
|
||
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_afdeling_naam);
|
||
|
||
-- 08 - Functieomschrijving van medewerker
|
||
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_srtperslid_omschrijving);
|
||
|
||
-- 09 - Email adres van medewerker
|
||
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_email);
|
||
|
||
-- 10 - Mobiel van medewerker
|
||
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_mobiel);
|
||
|
||
-- 11 - Telenr (035) van medewerker
|
||
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_telefoonnr);
|
||
|
||
-- 12 - Bedrijfsonderdeel van medewerker
|
||
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_bedrijfsdeel);
|
||
|
||
|
||
-------------------------------------------------------------------------
|
||
-- xx - Usernaam/login
|
||
-- fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_oslogin);
|
||
v_prs_perslid_oslogin := NULL;
|
||
|
||
|
||
-- xx - Locatiecode werkplek van medewerker
|
||
--fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_locatie_code);
|
||
v_alg_locatie_code := NULL;
|
||
|
||
-- xx - Gebouwcode werkplek van medewerker
|
||
--fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_gebouw_code);
|
||
v_alg_gebouw_code := NULL;
|
||
-------------------------------------------------------------------------
|
||
|
||
|
||
|
||
--
|
||
v_aanduiding :=
|
||
'['
|
||
|| v_prs_perslid_nr
|
||
|| '|'
|
||
|| v_prs_perslid_naam
|
||
|| '] ';
|
||
|
||
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
|
||
-- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
|
||
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
|
||
IF (header_is_valid = 0)
|
||
THEN
|
||
IF UPPER (v_prs_perslid_voornaam) = 'ROEPNAAM'
|
||
AND UPPER (v_prs_perslid_naam) = 'ACHTERNAAM'
|
||
AND UPPER (v_prs_perslid_nr) = 'PERSNR.'
|
||
AND UPPER (v_prs_afdeling_code) = 'AFDNR.'
|
||
AND UPPER (v_prs_afdeling_naam) = 'AFDELING'
|
||
AND UPPER (v_prs_srtperslid_omschrijving) = 'FUNCTIE'
|
||
AND UPPER (v_prs_perslid_email) = 'E-MAIL'
|
||
AND UPPER (v_prs_perslid_mobiel) = 'MOBILE'
|
||
AND UPPER (v_prs_perslid_telefoonnr) = 'TELEFOON'
|
||
THEN
|
||
header_is_valid := 1;
|
||
END IF;
|
||
ELSE
|
||
v_count_tot := v_count_tot + 1;
|
||
-- Controleer alle veldwaarden
|
||
|
||
--
|
||
v_errorhint := 'Ongeldige naam';
|
||
v_prs_perslid_naam := TRIM (v_prs_perslid_naam);
|
||
|
||
IF LENGTH (v_prs_perslid_naam) > 30
|
||
THEN
|
||
v_prs_perslid_naam := SUBSTR (v_prs_perslid_naam, 1, 30);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Naam te lang',
|
||
'Naam wordt afgebroken tot ['
|
||
|| v_prs_perslid_naam
|
||
|| ']'
|
||
);
|
||
ELSE
|
||
IF (v_prs_perslid_naam IS NULL)
|
||
THEN
|
||
v_ongeldig := 1;
|
||
fac.imp_writelog
|
||
(p_import_key,
|
||
'E',
|
||
v_aanduiding || 'Naam onbekend',
|
||
'Naam is verplicht; regel wordt overgeslagen!'
|
||
);
|
||
END IF;
|
||
END IF;
|
||
COMMIT;
|
||
|
||
--
|
||
|
||
v_errorhint := 'Ongeldig loginnaam';
|
||
v_prs_perslid_oslogin := SUBSTR (v_prs_perslid_email, 1, INSTR (v_prs_perslid_email, '@', 1, 1) - 1);
|
||
v_prs_perslid_oslogin := TRIM (v_prs_perslid_oslogin);
|
||
|
||
IF LENGTH (v_prs_perslid_oslogin) > 30
|
||
THEN
|
||
v_prs_perslid_oslogin := SUBSTR (v_prs_perslid_oslogin, 1, 30);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Loginnaam te lang',
|
||
'Loginnaam wordt afgebroken tot ['
|
||
|| v_prs_perslid_oslogin
|
||
|| ']'
|
||
);
|
||
ELSE
|
||
IF (v_prs_perslid_oslogin IS NULL)
|
||
THEN
|
||
v_ongeldig := 1;
|
||
fac.imp_writelog
|
||
(p_import_key,
|
||
'E',
|
||
v_aanduiding || 'Usernaam/login onbekend',
|
||
'Usernaam/login is verplicht; regel wordt overgeslagen!'
|
||
);
|
||
END IF;
|
||
END IF;
|
||
COMMIT;
|
||
|
||
--
|
||
v_errorhint := 'Ongeldig e-mailadres';
|
||
v_prs_perslid_email := TRIM (v_prs_perslid_email);
|
||
|
||
IF LENGTH (v_prs_perslid_email) > 200
|
||
THEN
|
||
v_prs_perslid_email := SUBSTR (v_prs_perslid_email, 1, 200);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'E-mailadres te lang',
|
||
'E-mailadres wordt afgebroken tot ['
|
||
|| v_prs_perslid_email
|
||
|| ']'
|
||
);
|
||
COMMIT;
|
||
END IF;
|
||
|
||
v_errorhint := 'Ongeldig personeelsnummer';
|
||
v_prs_perslid_nr := TRIM (v_prs_perslid_nr);
|
||
|
||
IF LENGTH (v_prs_perslid_nr) > 16
|
||
THEN
|
||
v_prs_perslid_nr := SUBSTR (v_prs_perslid_nr, 1, 16);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Personeelsnummer te lang',
|
||
'Personeelsnummer wordt afgebroken tot ['
|
||
|| v_prs_perslid_nr
|
||
|| ']'
|
||
);
|
||
END IF;
|
||
COMMIT;
|
||
|
||
|
||
--
|
||
v_errorhint := 'Ongeldig tussenvoegsel';
|
||
v_prs_perslid_tussenvoegsel := TRIM (v_prs_perslid_tussenvoegsel);
|
||
|
||
IF LENGTH (v_prs_perslid_tussenvoegsel) > 15
|
||
THEN
|
||
v_prs_perslid_tussenvoegsel :=
|
||
SUBSTR (v_prs_perslid_tussenvoegsel, 1, 15);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Tussenvoegsel te lang',
|
||
'Tussenvoegsel wordt afgebroken tot ['
|
||
|| v_prs_perslid_tussenvoegsel
|
||
|| ']'
|
||
);
|
||
COMMIT;
|
||
END IF;
|
||
|
||
--
|
||
v_errorhint := 'Ongeldige voorletters';
|
||
-- Deze regel zou desnoodd kunnen indien ALLI de achternaam, voorletters en tussenvoegsel zelf niet kan splitsen:
|
||
|
||
v_prs_perslid_voorletters := TRIM (v_prs_perslid_voorletters);
|
||
|
||
IF LENGTH (v_prs_perslid_voorletters) > 10
|
||
THEN
|
||
v_prs_perslid_voorletters :=
|
||
SUBSTR (v_prs_perslid_voorletters, 1, 10);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Voorletters te lang',
|
||
'Voorletters worden afgebroken tot ['
|
||
|| v_prs_perslid_voorletters
|
||
|| ']'
|
||
);
|
||
COMMIT;
|
||
END IF;
|
||
|
||
--
|
||
v_errorhint := 'Ongeldige voornaam';
|
||
v_prs_perslid_voornaam := TRIM (v_prs_perslid_voornaam);
|
||
|
||
IF LENGTH (v_prs_perslid_voornaam) > 30
|
||
THEN
|
||
v_prs_perslid_voornaam :=
|
||
SUBSTR (v_prs_perslid_voornaam, 1, 30);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Voornaam is te lang',
|
||
'Voornaam wordt afgebroken tot ['
|
||
|| v_prs_perslid_voornaam
|
||
|| ']'
|
||
);
|
||
END IF;
|
||
COMMIT;
|
||
|
||
|
||
|
||
|
||
|
||
v_errorhint := 'Ongeldige afdelingcode';
|
||
v_prs_afdeling_code := TRIM (v_prs_afdeling_code);
|
||
|
||
IF LENGTH (v_prs_afdeling_code) > 10
|
||
THEN
|
||
v_prs_afdeling_code := SUBSTR (v_prs_afdeling_code, 1, 60);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Afdelingscode te lang',
|
||
'Afdelingscode wordt afgebroken tot ['
|
||
|| v_prs_afdeling_code
|
||
|| ']'
|
||
);
|
||
ELSE
|
||
IF (v_prs_afdeling_code IS NULL)
|
||
THEN
|
||
v_ongeldig := 1;
|
||
fac.imp_writelog
|
||
(p_import_key,
|
||
'E',
|
||
v_aanduiding || 'Afdelingscode onbekend',
|
||
'Afdelingscode is verplicht; regel wordt overgeslagen!'
|
||
);
|
||
END IF;
|
||
END IF;
|
||
COMMIT;
|
||
|
||
v_errorhint := 'Ongeldige afdelingnaam';
|
||
v_prs_afdeling_naam := TRIM (v_prs_afdeling_naam);
|
||
|
||
IF LENGTH (v_prs_afdeling_naam) > 60
|
||
THEN
|
||
v_prs_afdeling_naam := SUBSTR (v_prs_afdeling_naam, 1, 60);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Afdelingsnaam te lang',
|
||
'Afdelingsnaam wordt afgebroken tot ['
|
||
|| v_prs_afdeling_naam
|
||
|| ']'
|
||
);
|
||
ELSE
|
||
IF (v_prs_afdeling_naam IS NULL)
|
||
THEN
|
||
v_ongeldig := 1;
|
||
fac.imp_writelog
|
||
(p_import_key,
|
||
'E',
|
||
v_aanduiding || 'Afdelingsnaam onbekend',
|
||
'Afdelingsnaam is verplicht; regel wordt overgeslagen!'
|
||
);
|
||
END IF;
|
||
END IF;
|
||
COMMIT;
|
||
|
||
--
|
||
v_errorhint := 'Ongeldige functie';
|
||
v_prs_srtperslid_omschrijving := TRIM (v_prs_srtperslid_omschrijving);
|
||
|
||
IF LENGTH (v_prs_srtperslid_omschrijving) > 60
|
||
THEN
|
||
v_prs_srtperslid_omschrijving :=
|
||
SUBSTR (v_prs_srtperslid_omschrijving, 1, 60);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Functie te lang',
|
||
'Functie wordt afgebroken tot ['
|
||
|| v_prs_srtperslid_omschrijving
|
||
|| ']'
|
||
);
|
||
ELSE
|
||
IF (v_prs_srtperslid_omschrijving IS NULL)
|
||
THEN
|
||
v_ongeldig := 1;
|
||
fac.imp_writelog
|
||
(p_import_key,
|
||
'E',
|
||
v_aanduiding || 'Functie onbekend',
|
||
'Functie is verplicht; regel wordt overgeslagen!'
|
||
);
|
||
END IF;
|
||
END IF;
|
||
COMMIT;
|
||
|
||
--
|
||
v_errorhint := 'Ongeldige plaats/locatiecode';
|
||
v_alg_locatie_code := TRIM(v_alg_locatie_code);
|
||
|
||
IF LENGTH (v_alg_locatie_code) > 5
|
||
THEN
|
||
v_alg_locatie_code := SUBSTR (v_alg_locatie_code, 1, 5);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Locatiecode te lang',
|
||
'Locatiecode wordt afgebroken tot ['
|
||
|| v_alg_locatie_code
|
||
|| ']'
|
||
);
|
||
COMMIT;
|
||
END IF;
|
||
|
||
--
|
||
v_errorhint := 'Ongeldige plaats/gebouwcode';
|
||
v_alg_gebouw_code := TRIM(v_alg_gebouw_code);
|
||
|
||
IF LENGTH (v_alg_gebouw_code) > 10
|
||
THEN
|
||
v_alg_gebouw_code := SUBSTR (v_alg_gebouw_code, 1, 10);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Gebouwcode te lang',
|
||
'Gebouwcode wordt afgebroken tot ['
|
||
|| v_alg_gebouw_code
|
||
|| ']'
|
||
);
|
||
COMMIT;
|
||
END IF;
|
||
|
||
--
|
||
v_errorhint := 'Ongeldig mobiel nummer';
|
||
v_prs_perslid_mobiel := TRIM (v_prs_perslid_mobiel);
|
||
|
||
IF LENGTH (v_prs_perslid_mobiel) > 15
|
||
THEN
|
||
v_prs_perslid_mobiel := SUBSTR (v_prs_perslid_mobiel, 1, 15);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Mobiel nummer te lang',
|
||
'mobiel nummer wordt afgebroken tot ['
|
||
|| v_prs_perslid_mobiel
|
||
|| ']'
|
||
);
|
||
COMMIT;
|
||
END IF;
|
||
|
||
|
||
v_errorhint := 'Ongeldig telefoonnummer';
|
||
v_prs_perslid_telefoonnr := TRIM (v_prs_perslid_telefoonnr);
|
||
|
||
IF LENGTH (v_prs_perslid_telefoonnr) > 15
|
||
THEN
|
||
v_prs_perslid_telefoonnr :=
|
||
SUBSTR (v_prs_perslid_telefoonnr, 1, 15);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Telefoonnummer te lang',
|
||
'Telefoonnummer wordt afgebroken tot ['
|
||
|| v_prs_perslid_telefoonnr
|
||
|| ']'
|
||
);
|
||
COMMIT;
|
||
END IF;
|
||
|
||
|
||
v_errorhint := 'Ongeldig bedrijfsonderdeel';
|
||
v_prs_perslid_bedrijfsdeel := TRIM (v_prs_perslid_bedrijfsdeel);
|
||
|
||
IF LENGTH (v_prs_perslid_bedrijfsdeel) > 60
|
||
THEN
|
||
v_prs_perslid_bedrijfsdeel := SUBSTR (v_prs_perslid_bedrijfsdeel, 1, 60);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Bedrijfsonderdeel te lang',
|
||
'Bedrijfsonderdeel wordt afgebroken tot ['
|
||
|| v_prs_perslid_bedrijfsdeel
|
||
|| ']'
|
||
);
|
||
ELSE
|
||
IF (v_prs_perslid_bedrijfsdeel IS NULL)
|
||
THEN
|
||
v_ongeldig := 1;
|
||
fac.imp_writelog
|
||
(p_import_key,
|
||
'E',
|
||
v_aanduiding || 'Bedrijfsonderdeel onbekend',
|
||
'Bedrijfsonderdeel is verplicht; regel wordt overgeslagen!'
|
||
);
|
||
END IF;
|
||
END IF;
|
||
COMMIT;
|
||
|
||
|
||
-- Insert geformatteerde import record
|
||
IF v_ongeldig = 0
|
||
THEN
|
||
BEGIN
|
||
v_errorhint :=
|
||
'Fout bij toevoegen regel aan importtabel alli_IMP_PRS';
|
||
|
||
INSERT INTO alli_imp_prs
|
||
(prs_perslid_nr, prs_perslid_naam,
|
||
prs_perslid_tussenvoegsel,
|
||
prs_perslid_voorletters,
|
||
prs_perslid_voornaam,
|
||
prs_afdeling_code, prs_afdeling_naam,
|
||
prs_srtperslid_omschrijving,
|
||
alg_locatie_code, alg_gebouw_code,
|
||
alg_verdieping_volgnr, alg_ruimte_nr,
|
||
prs_perslid_telefoonnr,
|
||
prs_perslid_mobiel,
|
||
prs_perslid_email,
|
||
prs_perslid_oslogin,
|
||
prs_perslid_bedrijfsdeel
|
||
)
|
||
VALUES (v_prs_perslid_nr, v_prs_perslid_naam,
|
||
v_prs_perslid_tussenvoegsel,
|
||
v_prs_perslid_voorletters,
|
||
v_prs_perslid_voornaam,
|
||
v_prs_afdeling_code, v_prs_afdeling_naam,
|
||
v_prs_srtperslid_omschrijving,
|
||
v_alg_locatie_code, v_alg_gebouw_code,
|
||
NULL, NULL,
|
||
v_prs_perslid_telefoonnr,
|
||
v_prs_perslid_mobiel,
|
||
v_prs_perslid_email,
|
||
v_prs_perslid_oslogin,
|
||
v_prs_perslid_bedrijfsdeel
|
||
);
|
||
COMMIT;
|
||
v_count_import := v_count_import + 1;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||
v_errormsg :=
|
||
v_errorhint
|
||
|| ' ORACLE (error '
|
||
|| oracle_err_num
|
||
|| '/'
|
||
|| oracle_err_mes
|
||
|| ')';
|
||
fac.imp_writelog
|
||
(p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
'Ingelezen regel kan niet worden weggeschreven!'
|
||
);
|
||
COMMIT;
|
||
END;
|
||
END IF;
|
||
END IF;
|
||
END;
|
||
END LOOP;
|
||
|
||
IF (header_is_valid = 0)
|
||
THEN
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
'Ongeldig importbestand',
|
||
'Geen header of header niet volgens specificatie!'
|
||
);
|
||
ELSE
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Persoon: aantal ingelezen regels: '
|
||
|| TO_CHAR (v_count_tot),
|
||
''
|
||
);
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Persoon: aantal ongeldige importregels: '
|
||
|| TO_CHAR (v_count_tot - v_count_import),
|
||
''
|
||
);
|
||
END IF;
|
||
COMMIT;
|
||
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
|
||
);
|
||
COMMIT;
|
||
END alli_import_prs;
|
||
/
|
||
|
||
CREATE OR REPLACE PROCEDURE alli_update_prs (
|
||
p_import_key IN NUMBER
|
||
)
|
||
IS
|
||
-- LET OP: moet idem zijn als declaratie bij ALLI_IMPORT_PRS
|
||
c_persoon_inactief VARCHAR2 (30) := 'INACTIEF: ';
|
||
-- Maximaal percentage aan nieuwe medewerkers tov. actieve medewerkers met een nummer
|
||
c_max_delta_percentage NUMBER (10) := 20;
|
||
-- Ruimte waar personen in geplaatst worden (indien nog geen ruimte in opgegeven gebouw)
|
||
c_ruimte_nr VARCHAR2 (10) := '000';
|
||
-- Groep waar personen in geplaatst worden (indien nog geen groep)
|
||
|
||
c_key_default_rol NUMBER(10) := 1;
|
||
|
||
v_aanduiding VARCHAR2 (200);
|
||
v_errorhint VARCHAR2 (1000);
|
||
v_errormsg VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
v_count_prs_actual NUMBER (10);
|
||
v_count_prs_import NUMBER (10); -- Matching actual persons!
|
||
v_count_tot NUMBER (10);
|
||
v_count_error NUMBER (10);
|
||
v_count NUMBER (10);
|
||
--
|
||
v_perslid_key NUMBER (10);
|
||
v_afdeling_key NUMBER (10);
|
||
v_fac_usrdata_key NUMBER (10);
|
||
v_srtperslid_key NUMBER (10);
|
||
v_oslogin VARCHAR2 (30);
|
||
v_wachtwoord VARCHAR2 (30);
|
||
v_locatie_key NUMBER (10);
|
||
v_gebouw_key NUMBER (10);
|
||
v_verdieping_key NUMBER (10);
|
||
v_ruimte_key NUMBER (10);
|
||
v_wp_key NUMBER (10);
|
||
v_wp_volgnr NUMBER (3);
|
||
v_wp_oms VARCHAR2 (30);
|
||
v_groep_defaultnaam VARCHAR2 (30);
|
||
|
||
-- Let op! Met eindatum zijn personen die niet meer in dienst zijn.
|
||
-- Dubbele nummers? Dan wordt iemand mogelijk niet verwijderd/INACTIEF!
|
||
CURSOR cdelprs
|
||
IS
|
||
SELECT p.prs_perslid_key, p.prs_perslid_nr, p.prs_perslid_naam,
|
||
p.prs_perslid_voornaam
|
||
FROM prs_v_aanwezigperslid p
|
||
WHERE p.prs_perslid_nr IS NOT NULL
|
||
AND NOT EXISTS (
|
||
SELECT 1
|
||
FROM alli_imp_prs ip
|
||
WHERE ip.prs_perslid_nr = p.prs_perslid_nr);
|
||
|
||
|
||
CURSOR csperslid
|
||
IS
|
||
SELECT prs_srtperslid_omschrijving
|
||
FROM alli_imp_prs
|
||
GROUP BY prs_srtperslid_omschrijving;
|
||
|
||
|
||
CURSOR cprsafd
|
||
IS
|
||
SELECT UPPER(prs_afdeling_code) prs_afdeling_code, MIN(prs_afdeling_naam) prs_afdeling_naam
|
||
FROM alli_imp_prs
|
||
GROUP BY UPPER (prs_afdeling_code);
|
||
|
||
CURSOR c_bedrijf
|
||
IS
|
||
SELECT distinct (prs_perslid_bedrijfsdeel) prs_perslid_bedrijfsdeel
|
||
FROM alli_imp_prs;
|
||
|
||
CURSOR cperslid
|
||
IS
|
||
SELECT *
|
||
FROM alli_imp_prs;
|
||
|
||
CURSOR cwp
|
||
IS
|
||
SELECT p.*, ip.alg_locatie_code, ip.alg_gebouw_code
|
||
FROM alli_imp_prs ip, prs_v_aanwezigperslid p
|
||
WHERE ip.alg_locatie_code IS NOT NULL
|
||
AND ip.alg_gebouw_code IS NOT NULL
|
||
AND UPPER (ip.prs_perslid_nr) = UPPER (p.prs_perslid_nr);
|
||
|
||
-- Alle actieve personen met personeelsnummer (ie. de import-doelgroep) zonder een werkplek
|
||
CURSOR cnowp
|
||
IS
|
||
SELECT p.prs_perslid_key, p.prs_perslid_nr, p.prs_perslid_naam,
|
||
p.prs_perslid_voornaam
|
||
FROM prs_v_aanwezigperslid p
|
||
WHERE p.prs_perslid_nr IS NOT NULL
|
||
AND p.prs_perslid_naam NOT LIKE c_persoon_inactief || '%'
|
||
AND NOT EXISTS (SELECT 1
|
||
FROM prs_perslidwerkplek pw
|
||
WHERE pw.prs_perslid_key = p.prs_perslid_key);
|
||
|
||
-- Alle aanwezige personen met personeelsnummer (ie. de import-doelgroep) niet in een groep
|
||
CURSOR cnogroup
|
||
IS
|
||
SELECT p.prs_perslid_key, p.prs_perslid_nr, p.prs_perslid_naam,
|
||
p.prs_perslid_voornaam
|
||
FROM prs_v_aanwezigperslid p
|
||
WHERE p.prs_perslid_nr IS NOT NULL
|
||
AND NOT EXISTS (SELECT 1
|
||
FROM fac_gebruikersgroep g
|
||
WHERE g.prs_perslid_key = p.prs_perslid_key);
|
||
|
||
|
||
BEGIN
|
||
SELECT DECODE (COUNT (*), 0, 1, COUNT (*))
|
||
INTO v_count_prs_actual
|
||
FROM prs_perslid
|
||
WHERE prs_perslid_verwijder IS NULL AND prs_perslid_nr IS NOT NULL;
|
||
|
||
SELECT DECODE (COUNT (*), 0, 1, COUNT (*))
|
||
INTO v_count_prs_import
|
||
FROM prs_perslid p, alli_imp_prs ip
|
||
WHERE p.prs_perslid_nr IS NOT NULL
|
||
AND p.prs_perslid_verwijder IS NULL
|
||
AND p.prs_perslid_nr = ip.prs_perslid_nr;
|
||
|
||
IF ( (TRUNC ((v_count_prs_import / v_count_prs_actual) * 100) >=
|
||
(100 - c_max_delta_percentage
|
||
)
|
||
)
|
||
)
|
||
THEN
|
||
-- Geldig importbestand wat betreft aantal personen
|
||
FOR recdelprs IN cdelprs
|
||
LOOP
|
||
BEGIN
|
||
-- Heeft persoon actuele/toekomstige verplichtingen?
|
||
SELECT COUNT (*)
|
||
INTO v_count
|
||
FROM prs_perslid p, prs_v_verplichting_keys r
|
||
WHERE p.prs_perslid_key = r.prs_perslid_key
|
||
AND p.prs_perslid_key = recdelprs.prs_perslid_key;
|
||
|
||
IF (v_count = 0)
|
||
THEN
|
||
v_errorhint := 'Fout bij verwijderen persoon';
|
||
|
||
UPDATE prs_perslid
|
||
SET prs_perslid_verwijder = SYSDATE
|
||
WHERE prs_perslid_key = recdelprs.prs_perslid_key;
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'I',
|
||
'Persoon met nummer ['
|
||
|| recdelprs.prs_perslid_nr
|
||
|| '] en naam ['
|
||
|| recdelprs.prs_perslid_naam
|
||
|| ', '
|
||
|| recdelprs.prs_perslid_voornaam
|
||
|| '] is verwijderd',
|
||
'Persoon is verwijderd'
|
||
);
|
||
COMMIT;
|
||
ELSE
|
||
-- Staat persoon INACTIEF?
|
||
SELECT COUNT (*)
|
||
INTO v_count
|
||
FROM prs_perslid p
|
||
WHERE p.prs_perslid_naam LIKE c_persoon_inactief || '%'
|
||
AND p.prs_perslid_key = recdelprs.prs_perslid_key;
|
||
|
||
IF (v_count = 0)
|
||
THEN
|
||
v_errorhint := 'Fout bij INACTIEF zetten persoon';
|
||
|
||
-- Persoon INACTIEF zetten (update naam + reset oslogin)
|
||
UPDATE prs_perslid
|
||
SET prs_perslid_naam =
|
||
SUBSTR (c_persoon_inactief || prs_perslid_naam,
|
||
1,
|
||
30
|
||
),
|
||
prs_perslid_oslogin = NULL
|
||
WHERE prs_perslid_key = recdelprs.prs_perslid_key;
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'I',
|
||
'Persoon met nummer ['
|
||
|| recdelprs.prs_perslid_nr
|
||
|| '] en naam ['
|
||
|| recdelprs.prs_perslid_naam
|
||
|| ', '
|
||
|| recdelprs.prs_perslid_voornaam
|
||
|| '] is INACTIEF gezet',
|
||
'Persoon is INACTIEF gezet'
|
||
);
|
||
ELSE
|
||
v_errorhint := 'Fout bij INACTIEF maken persoon';
|
||
|
||
-- Persoon INACTIEF maken (reset oslogin; indien handmatig INACTIEF gezet)
|
||
UPDATE prs_perslid
|
||
SET prs_perslid_oslogin = NULL
|
||
WHERE prs_perslid_naam LIKE c_persoon_inactief || '%'
|
||
AND prs_perslid_oslogin IS NOT NULL;
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'I',
|
||
'Persoon met nummer ['
|
||
|| recdelprs.prs_perslid_nr
|
||
|| '] en naam ['
|
||
|| recdelprs.prs_perslid_naam
|
||
|| ', '
|
||
|| recdelprs.prs_perslid_voornaam
|
||
|| '] is INACTIEF gemaakt',
|
||
'Persoon is INACTIEF gemaakt'
|
||
);
|
||
END IF;
|
||
COMMIT;
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg :=
|
||
'OTHERS (error '
|
||
|| oracle_err_num
|
||
|| '/'
|
||
|| oracle_err_mes
|
||
|| ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_errormsg,
|
||
v_errorhint
|
||
);
|
||
COMMIT;
|
||
END;
|
||
END LOOP;
|
||
|
||
v_count_tot := 0;
|
||
v_count_error := 0;
|
||
|
||
FOR recsperslid IN csperslid
|
||
LOOP
|
||
BEGIN
|
||
v_count_tot := v_count_tot + 1;
|
||
v_aanduiding := recsperslid.prs_srtperslid_omschrijving || ' - ';
|
||
v_errorhint := 'Fout bij bepalen functie';
|
||
|
||
SELECT COUNT (*)
|
||
INTO v_count
|
||
FROM prs_srtperslid
|
||
WHERE UPPER (prs_srtperslid_omschrijving) =
|
||
UPPER (recsperslid.prs_srtperslid_omschrijving)
|
||
AND prs_srtperslid_verwijder IS NULL;
|
||
|
||
IF (v_count = 0)
|
||
THEN
|
||
v_errorhint := 'Fout bij toevoegen functie';
|
||
|
||
INSERT INTO prs_srtperslid (prs_srtperslid_omschrijving)
|
||
VALUES (recsperslid.prs_srtperslid_omschrijving);
|
||
COMMIT;
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
v_count_error := v_count_error + 1;
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg :=
|
||
'OTHERS (error '
|
||
|| oracle_err_num
|
||
|| '/'
|
||
|| oracle_err_mes
|
||
|| ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint
|
||
);
|
||
COMMIT;
|
||
END;
|
||
END LOOP;
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Functie: verwerkte regels zonder foutmelding: '
|
||
|| TO_CHAR (v_count_tot - v_count_error),
|
||
''
|
||
);
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Functie: verwerkte regels met foutmelding: '
|
||
|| TO_CHAR (v_count_error),
|
||
''
|
||
);
|
||
COMMIT;
|
||
|
||
|
||
v_count_tot := 0;
|
||
v_count_error := 0;
|
||
|
||
FOR recafdeling IN cprsafd
|
||
LOOP
|
||
BEGIN
|
||
v_count_tot := v_count_tot + 1;
|
||
v_aanduiding := recafdeling.prs_afdeling_code || ' - ' || recafdeling.prs_afdeling_naam;
|
||
v_errorhint := 'Fout bij bepalen afdeling';
|
||
|
||
SELECT COUNT (*)
|
||
INTO v_count
|
||
FROM prs_afdeling
|
||
WHERE UPPER (prs_afdeling_naam) = UPPER (recafdeling.prs_afdeling_code)
|
||
AND prs_bedrijf_key = 5
|
||
AND prs_afdeling_verwijder IS NULL;
|
||
|
||
IF (v_count = 0)
|
||
THEN
|
||
v_errorhint := 'Fout bij toevoegen afdeling';
|
||
|
||
INSERT INTO prs_afdeling
|
||
(prs_bedrijf_key, prs_afdeling_naam, prs_afdeling_omschrijving)
|
||
VALUES (5, recafdeling.prs_afdeling_code, recafdeling.prs_afdeling_naam);
|
||
COMMIT;
|
||
ELSE
|
||
v_errorhint := 'Fout bij bijwerken afdeling';
|
||
|
||
UPDATE prs_afdeling
|
||
SET prs_afdeling_omschrijving = recafdeling.prs_afdeling_naam
|
||
WHERE prs_afdeling_naam = recafdeling.prs_afdeling_code
|
||
AND prs_bedrijf_key = 5
|
||
AND prs_afdeling_verwijder IS NULL;
|
||
|
||
COMMIT;
|
||
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
v_count_error := v_count_error + 1;
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg :=
|
||
'OTHERS (error '
|
||
|| oracle_err_num
|
||
|| '/'
|
||
|| oracle_err_mes
|
||
|| ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint
|
||
);
|
||
COMMIT;
|
||
END;
|
||
END LOOP;
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Afdeling: verwerkte regels zonder foutmelding: '
|
||
|| TO_CHAR (v_count_tot - v_count_error),
|
||
''
|
||
);
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Afdeling: verwerkte regels met foutmelding: '
|
||
|| TO_CHAR (v_count_error),
|
||
''
|
||
);
|
||
COMMIT;
|
||
|
||
v_count_tot := 0;
|
||
v_count_error := 0;
|
||
|
||
FOR recbedrijf IN c_bedrijf
|
||
LOOP
|
||
BEGIN
|
||
v_count_tot := v_count_tot + 1;
|
||
v_aanduiding := recbedrijf.prs_perslid_bedrijfsdeel;
|
||
v_errorhint := 'Fout bij bepalen bedrijfsonderdeel';
|
||
|
||
SELECT COUNT (*)
|
||
INTO v_count
|
||
FROM fac_usrdata
|
||
WHERE UPPER (fac_usrdata_omschr) = UPPER (recbedrijf.prs_perslid_bedrijfsdeel)
|
||
AND fac_usrtab_key= 121
|
||
AND fac_usrdata_verwijder IS NULL;
|
||
|
||
IF (v_count = 0)
|
||
THEN
|
||
v_errorhint := 'Fout bij toevoegen bedrijfsonderdeel';
|
||
|
||
INSERT INTO fac_usrdata
|
||
(fac_usrtab_key, fac_usrdata_code, fac_usrdata_omschr)
|
||
VALUES (121, SUBSTR(recbedrijf.prs_perslid_bedrijfsdeel,1,30), recbedrijf.prs_perslid_bedrijfsdeel);
|
||
COMMIT;
|
||
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
v_count_error := v_count_error + 1;
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg :=
|
||
'OTHERS (error '
|
||
|| oracle_err_num
|
||
|| '/'
|
||
|| oracle_err_mes
|
||
|| ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint
|
||
);
|
||
COMMIT;
|
||
END;
|
||
END LOOP;
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Bedrijfsonderdeel: verwerkte regels zonder foutmelding: '
|
||
|| TO_CHAR (v_count_tot - v_count_error),
|
||
''
|
||
);
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Bedrijfsonderdeel: verwerkte regels met foutmelding: '
|
||
|| TO_CHAR (v_count_error),
|
||
''
|
||
);
|
||
COMMIT;
|
||
v_count_tot := 0;
|
||
v_count_error := 0;
|
||
|
||
FOR recperslid IN cperslid
|
||
LOOP
|
||
BEGIN
|
||
v_count_tot := v_count_tot + 1;
|
||
v_aanduiding :=
|
||
recperslid.prs_perslid_nr
|
||
|| '|'
|
||
|| recperslid.prs_perslid_naam
|
||
|| '|'
|
||
|| recperslid.prs_perslid_voornaam
|
||
|| ' - ';
|
||
v_errorhint :=
|
||
'Fout bij bepalen functie ['
|
||
|| recperslid.prs_srtperslid_omschrijving
|
||
|| ']';
|
||
|
||
SELECT prs_srtperslid_key
|
||
INTO v_srtperslid_key
|
||
FROM prs_srtperslid
|
||
WHERE prs_srtperslid_verwijder IS NULL
|
||
AND UPPER (prs_srtperslid_omschrijving) =
|
||
UPPER (recperslid.prs_srtperslid_omschrijving);
|
||
|
||
v_errorhint :=
|
||
'Fout bij bepalen afdeling ['
|
||
|| recperslid.prs_afdeling_naam
|
||
|| ']';
|
||
|
||
SELECT prs_afdeling_key
|
||
INTO v_afdeling_key
|
||
FROM prs_afdeling
|
||
WHERE prs_afdeling_verwijder IS NULL
|
||
AND UPPER (prs_afdeling_naam) = UPPER (recperslid.prs_afdeling_code)
|
||
AND prs_bedrijf_key = 5;
|
||
|
||
v_errorhint :=
|
||
'Fout bij bepalen bedrijfsonderdeel ['
|
||
|| recperslid.prs_perslid_bedrijfsdeel
|
||
|| ']';
|
||
|
||
|
||
SELECT fac_usrdata_key
|
||
INTO v_fac_usrdata_key
|
||
FROM fac_usrdata
|
||
WHERE UPPER (fac_usrdata_omschr) = UPPER (recperslid.prs_perslid_bedrijfsdeel)
|
||
AND fac_usrtab_key= 121
|
||
AND fac_usrdata_verwijder IS NULL;
|
||
|
||
|
||
v_errorhint := 'Fout bij bepalen persoon';
|
||
|
||
SELECT COUNT (*), MAX (prs_perslid_key)
|
||
INTO v_count, v_perslid_key
|
||
FROM prs_perslid
|
||
WHERE prs_perslid_verwijder IS NULL
|
||
AND UPPER (prs_perslid_nr) = UPPER (recperslid.prs_perslid_nr);
|
||
|
||
|
||
IF (v_count = 0)
|
||
THEN
|
||
v_errorhint := 'Fout bij toevoegen persoon';
|
||
-- Nieuwe persoon uit importbestand, wordt toegevoegd in Facilitor.
|
||
INSERT INTO prs_perslid
|
||
(prs_perslid_module, prs_srtperslid_key,
|
||
prs_afdeling_key, prs_perslid_naam,
|
||
prs_perslid_voorletters,
|
||
prs_perslid_tussenvoegsel,
|
||
prs_perslid_voornaam,
|
||
prs_perslid_telefoonnr,
|
||
prs_perslid_mobiel,
|
||
prs_perslid_email,
|
||
prs_perslid_nr,
|
||
prs_perslid_oslogin
|
||
)
|
||
VALUES ('PRS', v_srtperslid_key,
|
||
v_afdeling_key, recperslid.prs_perslid_naam,
|
||
recperslid.prs_perslid_voorletters,
|
||
recperslid.prs_perslid_tussenvoegsel,
|
||
recperslid.prs_perslid_voornaam,
|
||
recperslid.prs_perslid_telefoonnr,
|
||
recperslid.prs_perslid_mobiel,
|
||
recperslid.prs_perslid_email,
|
||
recperslid.prs_perslid_nr,
|
||
recperslid.prs_perslid_oslogin
|
||
);
|
||
COMMIT;
|
||
ELSE
|
||
|
||
v_errorhint := 'Fout bij wijzigen persoon';
|
||
|
||
-- Functie, Afdeling altijd bijwerken
|
||
-- Voorletters, Naam, Tussenvoegsels, Voornaam alleen indien gevuld wordt aangeboden, anders laten staan wat in DB stond.
|
||
-- Telefoonnr: alleen bijwerken indien uit AD-dump gevuld, anders niet bijwerken (dus gewoon laten staan zoals in Facilitor was gereigistreerd).
|
||
-- E-mail: alleen bijwerken indien uit AD-dump gevuld, anders niet bijwerken (dus gewoon laten staan zoals in Facilitor was gereigistreerd).
|
||
-- Personeelsnr: alleen bijwerken indien uit AD-dump gevuld, anders niet bijwerken (dus gewoon laten staan zoals in Facilitor was gereigistreerd).
|
||
-- Login: alleen bijwerken indien uit AD-dump gevuld, anders niet bijwerken (dus gewoon laten staan zoals in Facilitor was gereigistreerd).
|
||
|
||
UPDATE prs_perslid
|
||
SET prs_srtperslid_key = v_srtperslid_key,
|
||
prs_afdeling_key = v_afdeling_key,
|
||
prs_perslid_naam = COALESCE(recperslid.prs_perslid_naam,prs_perslid_naam),
|
||
prs_perslid_voorletters = COALESCE(recperslid.prs_perslid_voorletters,prs_perslid_voorletters),
|
||
prs_perslid_tussenvoegsel = COALESCE(recperslid.prs_perslid_tussenvoegsel,prs_perslid_tussenvoegsel),
|
||
prs_perslid_voornaam = COALESCE(recperslid.prs_perslid_voornaam,prs_perslid_voornaam),
|
||
prs_perslid_telefoonnr = COALESCE (recperslid.prs_perslid_telefoonnr, prs_perslid_telefoonnr),
|
||
prs_perslid_mobiel = COALESCE (recperslid.prs_perslid_mobiel, prs_perslid_mobiel),
|
||
prs_perslid_email = COALESCE (recperslid.prs_perslid_email, prs_perslid_email),
|
||
prs_perslid_nr = COALESCE (recperslid.prs_perslid_nr, prs_perslid_nr),
|
||
prs_perslid_oslogin = COALESCE (recperslid.prs_perslid_oslogin, prs_perslid_oslogin)
|
||
WHERE prs_perslid_key = v_perslid_key;
|
||
COMMIT;
|
||
END IF;
|
||
|
||
-- Bedrijfsonderdeel als flexprop inserten of updaten....
|
||
-- prs_kenmerk_key = 1060 is het bedrijfsonderdeel flexprop bij persoon (prs_perslid)
|
||
SELECT COUNT (*)
|
||
INTO v_count
|
||
FROM prs_kenmerklink
|
||
WHERE prs_link_key = v_perslid_key
|
||
AND prs_kenmerklink_niveau = 'P'
|
||
AND prs_kenmerk_key = 1060
|
||
AND prs_kenmerklink_verwijder IS NULL;
|
||
|
||
IF (v_count = 0)
|
||
THEN
|
||
v_errorhint := 'Fout bij toevoegen kenmerk bedrijfsonderdeel';
|
||
INSERT INTO prs_kenmerklink
|
||
(prs_link_key, prs_kenmerklink_niveau, prs_kenmerk_key, prs_kenmerklink_waarde)
|
||
VALUES (v_perslid_key, 'P', 1060, v_fac_usrdata_key );
|
||
COMMIT;
|
||
ELSE
|
||
v_errorhint := 'Fout bij bijwerken kenmerk bedrijfsonderdeel';
|
||
|
||
UPDATE prs_kenmerklink
|
||
SET prs_kenmerklink_waarde = v_fac_usrdata_key
|
||
WHERE prs_link_key = v_perslid_key
|
||
AND prs_kenmerklink_niveau = 'P'
|
||
AND prs_kenmerk_key = 1060
|
||
AND prs_kenmerklink_verwijder IS NULL;
|
||
COMMIT;
|
||
|
||
END IF;
|
||
|
||
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
v_count_error := v_count_error + 1;
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg :=
|
||
'OTHERS (error '
|
||
|| oracle_err_num
|
||
|| '/'
|
||
|| oracle_err_mes
|
||
|| ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint
|
||
);
|
||
COMMIT;
|
||
END;
|
||
END LOOP;
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Persoon: verwerkte regels zonder foutmelding: '
|
||
|| TO_CHAR (v_count_tot - v_count_error),
|
||
''
|
||
);
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Persoon: verwerkte regels met foutmelding: '
|
||
|| TO_CHAR (v_count_error),
|
||
''
|
||
);
|
||
COMMIT;
|
||
|
||
v_count_tot := 0;
|
||
v_count_error := 0;
|
||
|
||
FOR recwp IN cwp
|
||
LOOP
|
||
BEGIN
|
||
v_count_tot := v_count_tot + 1;
|
||
v_aanduiding :=
|
||
recwp.prs_perslid_nr
|
||
|| '|'
|
||
|| recwp.prs_perslid_naam
|
||
|| '|'
|
||
|| recwp.prs_perslid_voornaam
|
||
|| '|'
|
||
|| recwp.alg_locatie_code
|
||
|| '|'
|
||
|| recwp.alg_gebouw_code
|
||
|| ' - ';
|
||
v_errorhint := 'Fout bij bepalen persoon';
|
||
|
||
SELECT prs_perslid_key
|
||
INTO v_perslid_key
|
||
FROM prs_v_aanwezigperslid
|
||
WHERE UPPER (prs_perslid_nr) = UPPER (recwp.prs_perslid_nr);
|
||
|
||
v_errorhint := 'Fout bij bepalen locatie';
|
||
|
||
SELECT alg_locatie_key
|
||
INTO v_locatie_key
|
||
FROM alg_v_aanweziglocatie
|
||
WHERE UPPER (alg_locatie_code) = UPPER (recwp.alg_locatie_code);
|
||
|
||
v_errorhint := 'Fout bij bepalen gebouw';
|
||
|
||
SELECT alg_gebouw_key
|
||
INTO v_gebouw_key
|
||
FROM alg_v_aanweziggebouw
|
||
WHERE alg_locatie_key = v_locatie_key
|
||
AND UPPER (alg_gebouw_code) = UPPER (recwp.alg_gebouw_code);
|
||
|
||
v_errorhint := 'Fout bij bepalen verdieping';
|
||
|
||
SELECT alg_verdieping_key
|
||
INTO v_verdieping_key
|
||
FROM alg_v_aanwezigverdieping
|
||
WHERE alg_gebouw_key = v_gebouw_key
|
||
AND alg_verdieping_volgnr = (SELECT MIN (v.alg_verdieping_volgnr)
|
||
FROM alg_verdieping v
|
||
WHERE v.alg_gebouw_key = v_gebouw_key
|
||
AND v.alg_verdieping_volgnr >= 0);
|
||
|
||
v_errorhint :=
|
||
'Fout bij bepalen of persoon in gebouw een werkplek heeft';
|
||
|
||
SELECT COUNT (*)
|
||
INTO v_count
|
||
FROM prs_perslidwerkplek pw,
|
||
prs_werkplek wp,
|
||
alg_ruimte r,
|
||
alg_verdieping v
|
||
WHERE pw.prs_perslid_key = v_perslid_key
|
||
AND pw.prs_werkplek_key = wp.prs_werkplek_key
|
||
AND wp.prs_alg_ruimte_key = r.alg_ruimte_key
|
||
AND r.alg_verdieping_key = v.alg_verdieping_key
|
||
AND v.alg_gebouw_key = v_gebouw_key;
|
||
|
||
-- v_count=0 -> persoon verhuist naar/krijgt wp in gebouw.
|
||
IF (v_count = 0)
|
||
THEN
|
||
v_errorhint := 'Fout bij bepalen ruimte';
|
||
|
||
SELECT COUNT (*)
|
||
INTO v_count
|
||
FROM alg_v_aanwezigruimte r
|
||
WHERE r.alg_verdieping_key = v_verdieping_key
|
||
AND r.alg_ruimte_nr = c_ruimte_nr;
|
||
|
||
-- v_count=0 -> ruimte '000' bestaat nog niet.
|
||
IF (v_count = 0)
|
||
THEN
|
||
v_errorhint := 'Fout bij toevoegen ruimte';
|
||
|
||
INSERT INTO alg_ruimte
|
||
(alg_verdieping_key, alg_srtruimte_key,
|
||
alg_ruimte_nr
|
||
)
|
||
VALUES (v_verdieping_key, 21, -- facilitaire ruimte
|
||
c_ruimte_nr
|
||
);
|
||
COMMIT;
|
||
END IF;
|
||
|
||
v_errorhint := 'Fout bij bepalen ruimte';
|
||
|
||
SELECT alg_ruimte_key
|
||
INTO v_ruimte_key
|
||
FROM alg_v_aanwezigruimte r
|
||
WHERE r.alg_verdieping_key = v_verdieping_key
|
||
AND r.alg_ruimte_nr = c_ruimte_nr;
|
||
|
||
v_errorhint := 'Fout bij bepalen vrije werkplek';
|
||
|
||
SELECT COUNT (w.prs_werkplek_key)
|
||
INTO v_count
|
||
FROM prs_werkplek w
|
||
WHERE w.prs_alg_ruimte_key = v_ruimte_key
|
||
AND NOT EXISTS (
|
||
SELECT 1
|
||
FROM prs_perslidwerkplek pw
|
||
WHERE pw.prs_werkplek_key =
|
||
w.prs_werkplek_key);
|
||
|
||
IF (v_count > 0)
|
||
THEN
|
||
SELECT MIN (w.prs_werkplek_key)
|
||
INTO v_wp_key
|
||
FROM prs_werkplek w
|
||
WHERE w.prs_alg_ruimte_key = v_ruimte_key
|
||
AND NOT EXISTS (
|
||
SELECT 1
|
||
FROM prs_perslidwerkplek pw
|
||
WHERE pw.prs_werkplek_key =
|
||
w.prs_werkplek_key);
|
||
|
||
v_errorhint :=
|
||
'Fout bij koppelen persoon aan vrije werkplek';
|
||
|
||
INSERT INTO prs_perslidwerkplek
|
||
(prs_perslid_key, prs_werkplek_key,
|
||
prs_perslidwerkplek_bezetting
|
||
)
|
||
VALUES (v_perslid_key, v_wp_key,
|
||
100
|
||
);
|
||
COMMIT;
|
||
ELSE
|
||
v_errorhint := 'Fout bij bepalen nieuwe werkplek';
|
||
|
||
SELECT prs_s_prs_werkplek_key.NEXTVAL
|
||
INTO v_wp_key
|
||
FROM DUAL;
|
||
|
||
SELECT COALESCE (MAX (w.prs_werkplek_volgnr), 0) + 1
|
||
INTO v_wp_volgnr
|
||
FROM prs_werkplek w
|
||
WHERE w.prs_alg_ruimte_key = v_ruimte_key;
|
||
|
||
v_wp_oms := c_ruimte_nr || '/' || TO_CHAR (v_wp_volgnr);
|
||
|
||
v_errorhint := 'Fout bij aanmaken nieuwe werkplek';
|
||
|
||
INSERT INTO prs_werkplek
|
||
(prs_werkplek_key, prs_werkplek_module,
|
||
prs_werkplek_volgnr,
|
||
prs_werkplek_omschrijving, prs_alg_ruimte_key
|
||
)
|
||
VALUES (v_wp_key, 'PRR',
|
||
v_wp_volgnr,
|
||
v_wp_oms, v_ruimte_key
|
||
);
|
||
|
||
v_errorhint :=
|
||
'Fout bij koppelen persoon aan nieuwe werkplek';
|
||
|
||
INSERT INTO prs_perslidwerkplek
|
||
(prs_perslid_key, prs_werkplek_key,
|
||
prs_perslidwerkplek_bezetting
|
||
)
|
||
VALUES (v_perslid_key, v_wp_key,
|
||
100
|
||
);
|
||
COMMIT;
|
||
END IF;
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
v_count_error := v_count_error + 1;
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg :=
|
||
'OTHERS (error '
|
||
|| oracle_err_num
|
||
|| '/'
|
||
|| oracle_err_mes
|
||
|| ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint
|
||
);
|
||
COMMIT;
|
||
END;
|
||
END LOOP;
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Werkplek: verwerkte regels zonder foutmelding: '
|
||
|| TO_CHAR (v_count_tot - v_count_error),
|
||
''
|
||
);
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Werkplek: verwerkte regels met foutmelding: '
|
||
|| TO_CHAR (v_count_error),
|
||
''
|
||
);
|
||
COMMIT;
|
||
|
||
FOR recnowp IN cnowp
|
||
LOOP
|
||
BEGIN
|
||
fac.imp_writelog (p_import_key,
|
||
'I',
|
||
'Persoon met nummer ['
|
||
|| recnowp.prs_perslid_nr
|
||
|| '] en naam ['
|
||
|| recnowp.prs_perslid_naam
|
||
|| ', '
|
||
|| recnowp.prs_perslid_voornaam
|
||
|| '] heeft geen werkplek',
|
||
'Geen werkplek'
|
||
);
|
||
COMMIT;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg :=
|
||
'OTHERS (error '
|
||
|| oracle_err_num
|
||
|| '/'
|
||
|| oracle_err_mes
|
||
|| ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_errormsg,
|
||
v_errorhint
|
||
);
|
||
COMMIT;
|
||
END;
|
||
END LOOP;
|
||
|
||
-- Iedereen krijgt _default-rol die nog geen groep heeft.
|
||
FOR recnogroup IN cnogroup
|
||
LOOP
|
||
BEGIN
|
||
v_aanduiding :=
|
||
recnogroup.prs_perslid_nr
|
||
|| '|'
|
||
|| recnogroup.prs_perslid_naam
|
||
|| '|'
|
||
|| recnogroup.prs_perslid_voornaam
|
||
|| ' - ';
|
||
v_errorhint := 'Fout bij bepalen groep met key [' || c_key_default_rol || ']';
|
||
|
||
SELECT fac_groep_upper
|
||
INTO v_groep_defaultnaam
|
||
FROM fac_groep
|
||
WHERE fac_groep_key = c_key_default_rol;
|
||
|
||
|
||
v_errorhint :=
|
||
'Fout bij koppelen persoon aan groep met key [' || c_key_default_rol || ']';
|
||
|
||
INSERT INTO fac_gebruikersgroep
|
||
(fac_groep_key, prs_perslid_key
|
||
)
|
||
VALUES (c_key_default_rol, recnogroup.prs_perslid_key
|
||
);
|
||
COMMIT;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg :=
|
||
'OTHERS (error '
|
||
|| oracle_err_num
|
||
|| '/'
|
||
|| oracle_err_mes
|
||
|| ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_errormsg,
|
||
v_errorhint
|
||
);
|
||
COMMIT;
|
||
END;
|
||
END LOOP;
|
||
|
||
|
||
ELSE
|
||
fac.imp_writelog
|
||
(p_import_key,
|
||
'E',
|
||
'Verschil tussen het actuele aantal en het te importeren aantal personen te groot; zie specificatie!',
|
||
'- max. verschilpercentage = ['
|
||
|| TO_CHAR (c_max_delta_percentage)
|
||
|| '%] <br> '
|
||
|| '- #personen importbestand = ['
|
||
|| TO_CHAR (v_count_prs_import)
|
||
|| '] <br> '
|
||
|| '- #personen Facilitor = ['
|
||
|| TO_CHAR (v_count_prs_actual)
|
||
|| ']'
|
||
);
|
||
COMMIT;
|
||
END IF; -- Geldig importbestand wat betreft aantal inserts
|
||
COMMIT;
|
||
END alli_update_prs;
|
||
/
|
||
|
||
|
||
|
||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
|
||
-- Koppeling CYOD serienummers registratie met Misco.
|
||
|
||
CREATE OR REPLACE VIEW ALLI_V_INS_KENMERKDOMEIN_BES (BES_BESTELLING_KEY, BES_BESTELLING_NR)
|
||
AS
|
||
SELECT BES_BESTELLING_KEY, to_char(BES_BESTELLING_KEY)
|
||
FROM BES_BESTELLING;
|
||
|
||
|
||
--select *
|
||
--from bes_bestelopdr_item bo, bes_bestelling_item bi, bes_srtdeel sd
|
||
--where bes_bestelopdr_key = (select bes_bestelopdr_key from bes_bestelopdr where bes_bestelopdr_id = '361/1')
|
||
--and BI.BES_BESTELOPDR_ITEM_KEY = BO.BES_BESTELOPDR_ITEM_KEY
|
||
--and bi.bes_srtdeel_key = sd.bes_srtdeel_key;
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE alli_import_cyod_serienummers (
|
||
p_import_key IN NUMBER
|
||
)
|
||
IS
|
||
c_fielddelimitor VARCHAR2 (1) := ';';
|
||
v_newline VARCHAR2 (1000); -- Input line
|
||
v_aanduiding VARCHAR2 (200);
|
||
v_errorhint VARCHAR2 (1000);
|
||
v_errormsg VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
header_is_valid NUMBER := 0;
|
||
v_ongeldig NUMBER (1);
|
||
v_count_tot NUMBER (10);
|
||
v_count_import NUMBER (10);
|
||
v_count NUMBER;
|
||
-- De importvelden:
|
||
|
||
v_bes_bestelopdr_id VARCHAR2 (256);
|
||
v_bes_srtdeel_nr VARCHAR2 (256);
|
||
v_serienummer VARCHAR2 (256);
|
||
v_soort VARCHAR2 (256);
|
||
v_datum VARCHAR2 (256);
|
||
|
||
|
||
|
||
CURSOR c1
|
||
IS
|
||
SELECT *
|
||
FROM fac_imp_file
|
||
WHERE fac_import_key = p_import_key
|
||
ORDER BY fac_imp_file_index;
|
||
BEGIN
|
||
DELETE FROM alli_imp_cyod_serienummers;
|
||
|
||
COMMIT;
|
||
|
||
v_count_tot := 0;
|
||
v_count_import := 0;
|
||
|
||
FOR rec1 IN c1
|
||
LOOP
|
||
BEGIN
|
||
v_newline := rec1.fac_imp_file_line;
|
||
v_aanduiding := '';
|
||
v_errorhint := 'Fout bij opvragen te importeren rij';
|
||
v_ongeldig := 0;
|
||
-- Lees alle veldwaarden
|
||
|
||
|
||
-- v_bes_bestelopdr_id VARCHAR2 (256);
|
||
-- v_bes_srtdeel_nr VARCHAR2 (256);
|
||
-- v_serienummer VARCHAR2 (256);
|
||
-- v_datum VARCHAR2 (256);
|
||
|
||
-- 01 - Bestelopdrachtnummer
|
||
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 1, v_bes_bestelopdr_id);
|
||
|
||
-- 02 - Artikelnummer
|
||
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 2, v_bes_srtdeel_nr);
|
||
|
||
-- 03 - Serienummer of IMEI nummer.
|
||
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 3, v_serienummer);
|
||
|
||
-- 04 - Soort object: Notebook (N) of Telefoon (T)
|
||
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 4, v_soort);
|
||
|
||
-- 05 - Verzenddatum cq. Aanschafdatum
|
||
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 5, v_datum);
|
||
|
||
|
||
--
|
||
v_aanduiding :=
|
||
'['
|
||
|| v_bes_bestelopdr_id
|
||
|| '|'
|
||
|| v_bes_srtdeel_nr
|
||
|| '|'
|
||
|| v_serienummer
|
||
|| '|'
|
||
|| v_soort
|
||
|| '] ';
|
||
|
||
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
|
||
-- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
|
||
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
|
||
IF (header_is_valid = 0)
|
||
THEN
|
||
IF UPPER (v_bes_bestelopdr_id) = 'BESTELOPDRACHTNR'
|
||
AND UPPER (v_bes_srtdeel_nr) = 'ARTIKELNR'
|
||
AND UPPER (v_serienummer) = 'SERIENR'
|
||
AND UPPER (v_soort) = 'TYPE'
|
||
AND UPPER (v_datum) = 'VERZENDDATUM'
|
||
THEN
|
||
header_is_valid := 1;
|
||
END IF;
|
||
ELSE
|
||
v_count_tot := v_count_tot + 1;
|
||
-- Controleer alle veldwaarden
|
||
|
||
--
|
||
v_errorhint := 'Ongeldig bestelopdrachtnr';
|
||
v_bes_bestelopdr_id := TRIM (v_bes_bestelopdr_id);
|
||
|
||
IF (v_bes_bestelopdr_id IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_bes_bestelopdr_id) > 30
|
||
THEN
|
||
v_bes_bestelopdr_id := SUBSTR (v_bes_bestelopdr_id, 1, 30);
|
||
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Bestelopdrachtnr te lang', 'Nummer wordt afgebroken tot [' || v_bes_bestelopdr_id || ']' );
|
||
END IF;
|
||
ELSE
|
||
v_ongeldig := 1;
|
||
END IF;
|
||
|
||
v_errorhint := 'Ongeldig artikelnr';
|
||
v_bes_srtdeel_nr := TRIM (v_bes_srtdeel_nr);
|
||
|
||
IF (v_bes_srtdeel_nr IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_bes_srtdeel_nr) > 32
|
||
THEN
|
||
v_bes_srtdeel_nr := SUBSTR (v_bes_srtdeel_nr, 1, 32);
|
||
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Artikelnummer te lang', 'Nummer wordt afgebroken tot [' || v_bes_srtdeel_nr || ']' );
|
||
END IF;
|
||
ELSE
|
||
v_ongeldig := 1;
|
||
END IF;
|
||
|
||
v_errorhint := 'Ongeldig serienummer';
|
||
v_serienummer := TRIM (v_serienummer);
|
||
IF (v_serienummer IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_serienummer) > 50
|
||
THEN
|
||
v_serienummer := SUBSTR (v_serienummer, 1, 50);
|
||
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Serienummer te lang', 'Nummer wordt afgebroken tot [' || v_serienummer || ']' );
|
||
END IF;
|
||
END IF;
|
||
|
||
v_errorhint := 'Ongeldig type/soort';
|
||
v_soort := TRIM (v_soort);
|
||
IF (v_soort IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_soort) > 1
|
||
THEN
|
||
v_soort := SUBSTR (v_soort, 1, 1);
|
||
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Type/soort te lang', 'Type/soort wordt afgebroken tot [' || v_soort || ']' );
|
||
END IF;
|
||
END IF;
|
||
|
||
|
||
v_errorhint := 'Ongeldige verzenddatum';
|
||
v_datum := TRIM (v_datum);
|
||
IF (v_datum IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_datum) > 10
|
||
THEN
|
||
v_datum := SUBSTR (v_datum, 1, 10);
|
||
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Verzenddatum te lang', 'Datum wordt afgebroken tot [' || v_datum || ']' );
|
||
END IF;
|
||
END IF;
|
||
|
||
-- Insert geformatteerde import record
|
||
IF v_ongeldig = 0
|
||
THEN
|
||
BEGIN
|
||
v_errorhint :=
|
||
'Fout bij toevoegen regel aan importtabel alli_imp_cyod_serienummers';
|
||
|
||
INSERT INTO alli_imp_cyod_serienummers (bes_bestelopdr_id, bes_srtdeel_nr, serienummer, soort, datum)
|
||
VALUES (v_bes_bestelopdr_id, v_bes_srtdeel_nr, v_serienummer, v_soort, v_datum);
|
||
|
||
COMMIT;
|
||
v_count_import := v_count_import + 1;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||
v_errormsg :=
|
||
v_errorhint
|
||
|| ' ORACLE (error '
|
||
|| oracle_err_num
|
||
|| '/'
|
||
|| oracle_err_mes
|
||
|| ')';
|
||
fac.imp_writelog
|
||
(p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
'Ingelezen regel kan niet worden weggeschreven!'
|
||
);
|
||
COMMIT;
|
||
END;
|
||
END IF;
|
||
END IF;
|
||
END;
|
||
END LOOP;
|
||
|
||
IF (header_is_valid = 0)
|
||
THEN
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
'Ongeldig importbestand',
|
||
'Geen header of header niet volgens specificatie!'
|
||
);
|
||
ELSE
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'CYOD serienummers: aantal ingelezen regels: '
|
||
|| TO_CHAR (v_count_tot),
|
||
''
|
||
);
|
||
END IF;
|
||
COMMIT;
|
||
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
|
||
);
|
||
COMMIT;
|
||
END alli_import_cyod_serienummers;
|
||
/
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE alli_update_cyod_serienummers (
|
||
p_import_key IN NUMBER
|
||
)
|
||
IS
|
||
|
||
v_aanduiding VARCHAR2 (200);
|
||
v_errorhint VARCHAR2 (1000);
|
||
v_errormsg VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
v_count_tot NUMBER (10);
|
||
v_count_error NUMBER (10);
|
||
v_count NUMBER (10);
|
||
|
||
v_aantal NUMBER (10);
|
||
|
||
v_bes_bestelling_key NUMBER (10);
|
||
v_prs_perslid_key NUMBER (10);
|
||
v_bes_srtgroep_key NUMBER (10);
|
||
|
||
c_ins_srtgroep_key_temp NUMBER (10) := 1;
|
||
c_ins_kenmerk_key_temp NUMBER (10) := 1;
|
||
|
||
l_ins_srtdeel_key NUMBER (10);
|
||
l_ins_deel_key NUMBER (10);
|
||
l_code_notebook_telefoon VARCHAR2 (100);
|
||
|
||
|
||
c_ins_srtdeel_key_telefoon NUMBER (10) := 9201;
|
||
c_ins_srtdeel_key_notebook NUMBER (10) := 9202;
|
||
|
||
c_notebook_bestelling_key NUMBER (10) := 1;
|
||
c_notebook_artikel_key NUMBER (10) := 2;
|
||
c_notebook_serienr_key NUMBER (10) := 3;
|
||
c_notebook_datum_key NUMBER (10) := 4;
|
||
|
||
c_mobiel_bestelling_key NUMBER (10) := 5;
|
||
c_mobiel_artikel_key NUMBER (10) := 6;
|
||
c_mobiel_serienr_key NUMBER (10) := 7;
|
||
c_mobiel_datum_key NUMBER (10) := 8;
|
||
|
||
|
||
|
||
-- Alle ingelezen CYOD artikelen met serienummers
|
||
CURSOR c_cyod_artikelen
|
||
IS
|
||
SELECT *
|
||
FROM alli_imp_cyod_serienummers;
|
||
|
||
|
||
BEGIN
|
||
v_count_tot := 0;
|
||
v_count_error := 0;
|
||
|
||
|
||
v_aanduiding := '';
|
||
|
||
|
||
-- Alle artikelen verwerken...
|
||
FOR rec_cyod IN c_cyod_artikelen
|
||
LOOP
|
||
BEGIN
|
||
v_count_tot := v_count_tot + 1;
|
||
|
||
v_aanduiding :=
|
||
'['
|
||
|| rec_cyod.bes_bestelopdr_id
|
||
|| '|'
|
||
|| rec_cyod.bes_srtdeel_nr
|
||
|| '|'
|
||
|| rec_cyod.serienummer
|
||
|| '|'
|
||
|| rec_cyod.soort
|
||
|| '|'
|
||
|| rec_cyod.datum
|
||
|| '] ';
|
||
|
||
v_errorhint := 'Fout bij bepalen combi bestelopdracht en artikelnummer';
|
||
|
||
-- Op zoek naar:
|
||
-- 1) de bestelopdracht volgens opdrachtnr: rec_cyod.bes_bestelopdr_id
|
||
-- 2) het artikel dat in die opdracht zit volgens artikelnr: rec_cyod.bes_srtdeel_nr
|
||
-- We vinden dan:
|
||
-- 1) De bestellingaanvraag (bes_bestelling_key)
|
||
-- 2) De besteller (prs_perslid_key)
|
||
-- 3) De soortgroep (bes_srtgroep_key): notebook of telefoon (indien een andere, dan maken we geen serienummer erbij).
|
||
|
||
|
||
SELECT b.bes_bestelling_key, b.prs_perslid_key, sg.bes_srtgroep_key
|
||
INTO v_bes_bestelling_key, v_prs_perslid_key, v_bes_srtgroep_key
|
||
FROM bes_bestelling b, bes_bestelopdr bo, bes_bestelopdr_item boi, bes_bestelling_item bi, bes_srtdeel sd, bes_srtgroep sg
|
||
WHERE b.bes_bestelling_key = bi.bes_bestelling_key
|
||
AND boi.bes_bestelopdr_key = bo.bes_bestelopdr_key
|
||
AND sd.bes_srtgroep_key = sg.bes_srtgroep_key
|
||
AND BI.BES_BESTELOPDR_ITEM_KEY = BOI.BES_BESTELOPDR_ITEM_KEY
|
||
AND bi.bes_srtdeel_key = sd.bes_srtdeel_key
|
||
AND bo.bes_bestelopdr_id = rec_cyod.bes_bestelopdr_id
|
||
AND sd.bes_srtdeel_nr = rec_cyod.bes_srtdeel_nr ;
|
||
|
||
|
||
-- Hier komt een cruciaal stuk die bepaalt of het artikel een N(notebook) of T(telefoon is).
|
||
-- Mogelijk wordt dat in de XML door Misco meegestuurd, en anders bepalen wie die adhv de groep.
|
||
-- Nu doen we ff een simpele check op groep-key: indien 1623 dan is ie van de telefoon-groep, dus een telefoon.
|
||
|
||
l_code_notebook_telefoon := NULL;
|
||
l_code_notebook_telefoon := NULL;
|
||
|
||
v_errorhint := 'Fout bij bepalen soort object';
|
||
IF rec_cyod.soort = 'T'
|
||
THEN
|
||
-- Ik ben een telefoon, bepaal een nieuwe default naam/code voor het object
|
||
l_ins_srtdeel_key := c_ins_srtdeel_key_telefoon;
|
||
ELSE
|
||
IF rec_cyod.soort = 'N'
|
||
THEN
|
||
-- Ik ben een notebook, bepaal een nieuwe default naam/code voor het object
|
||
l_ins_srtdeel_key := c_ins_srtdeel_key_notebook;
|
||
ELSE
|
||
l_ins_srtdeel_key := NULL;
|
||
END IF;
|
||
END IF;
|
||
|
||
|
||
IF l_ins_srtdeel_key IS NOT NULL
|
||
THEN
|
||
-- Eerst ff kijken of persoon het object al heeft, waarbij serienummer/IMEI nummer dezelfde is.
|
||
-- Dan namelijk NIET toevoegen, anders wordt het object dubbel geregistreerd.
|
||
-- De aanschafdatum mag dan wel/hooguit worden aangepast, maar dat doen we maar even niet. We gaan ervan uit dat er eenmalig een aanlevering van goede gegevens plaatsvindt.
|
||
|
||
SELECT count(*)
|
||
INTO v_aantal
|
||
FROM ins_deel d, ins_kenmerkdeel k
|
||
WHERE ins_deel_module = 'INS'
|
||
AND ins_srtdeel_key = l_ins_srtdeel_key
|
||
AND ins_alg_ruimte_key = v_prs_perslid_key
|
||
AND ins_alg_ruimte_type = 'P'
|
||
AND d.ins_deel_key=k.ins_deel_key
|
||
AND (ins_kenmerk_key = c_notebook_serienr_key OR ins_kenmerk_key = c_mobiel_serienr_key)
|
||
AND ins_kenmerkdeel_waarde = rec_cyod.serienummer;
|
||
|
||
|
||
IF v_aantal = 0
|
||
THEN
|
||
-- Persoon heeft het object met dat serienummer nog niet --> DUS TOEVOEGEN
|
||
|
||
|
||
SELECT ins.get_description('LPN_INS_DEEL',NULL, ins_srtdeel_code_upper, l_ins_srtdeel_key)
|
||
INTO l_code_notebook_telefoon
|
||
FROM ins_srtdeel
|
||
WHERE ins_srtdeel_key= l_ins_srtdeel_key;
|
||
|
||
|
||
-- Insert van persoonsgebonden object.
|
||
v_errorhint := 'Fout bij toevoegen van nieuw object [' || l_code_notebook_telefoon|| ']';
|
||
INSERT INTO ins_deel (ins_deel_module, ins_srtdeel_key, ins_alg_ruimte_key, ins_alg_ruimte_type, ins_deel_omschrijving)
|
||
VALUES ('INS', l_ins_srtdeel_key, v_prs_perslid_key, 'P', l_code_notebook_telefoon);
|
||
|
||
v_errorhint := 'Object is toegevoegd';
|
||
fac.imp_writelog (p_import_key,
|
||
'I',
|
||
v_aanduiding || 'Objectnaam ' || l_code_notebook_telefoon || ' is toegevoegd',
|
||
v_errorhint
|
||
);
|
||
|
||
SELECT MAX(ins_deel_key) INTO l_ins_deel_key FROM ins_deel;
|
||
|
||
IF l_ins_srtdeel_key = c_ins_srtdeel_key_notebook
|
||
THEN
|
||
-- Ik ben een notebook, vul de kenmerken
|
||
|
||
v_errorhint := 'Fout bij toevoegen kenmerk bestelnummer [' || v_bes_bestelling_key || '] bij object [' || l_code_notebook_telefoon || ']';
|
||
INSERT INTO ins_kenmerkdeel (ins_deel_key, ins_kenmerk_key, ins_kenmerkdeel_waarde)
|
||
SELECT l_ins_deel_key, c_notebook_bestelling_key, v_bes_bestelling_key FROM DUAL;
|
||
|
||
v_errorhint := 'Fout bij toevoegen kenmerk artikelnummer [' || rec_cyod.bes_srtdeel_nr || '] bij object [' || l_code_notebook_telefoon || ']';
|
||
INSERT INTO ins_kenmerkdeel (ins_deel_key, ins_kenmerk_key, ins_kenmerkdeel_waarde)
|
||
SELECT l_ins_deel_key, c_notebook_artikel_key, rec_cyod.bes_srtdeel_nr FROM DUAL;
|
||
|
||
v_errorhint := 'Fout bij toevoegen kenmerk serienummer [' || rec_cyod.serienummer || '] bij object [' || l_code_notebook_telefoon || ']';
|
||
INSERT INTO ins_kenmerkdeel (ins_deel_key, ins_kenmerk_key, ins_kenmerkdeel_waarde)
|
||
SELECT l_ins_deel_key, c_notebook_serienr_key, rec_cyod.serienummer FROM DUAL;
|
||
|
||
v_errorhint := 'Fout bij toevoegen kenmerk aanschafdatum [' || rec_cyod.datum || '] bij object [' || l_code_notebook_telefoon || ']';
|
||
INSERT INTO ins_kenmerkdeel (ins_deel_key, ins_kenmerk_key, ins_kenmerkdeel_waarde)
|
||
SELECT l_ins_deel_key, c_notebook_datum_key, TO_CHAR(TO_DATE(rec_cyod.datum,'YYYYMMDD'),'DD-MM-YYYY') FROM DUAL;
|
||
|
||
ELSE
|
||
IF l_ins_srtdeel_key = c_ins_srtdeel_key_telefoon
|
||
THEN
|
||
-- Ik ben een telefoon, vul de kenmerken
|
||
|
||
v_errorhint := 'Fout bij toevoegen kenmerk bestelnummer [' || v_bes_bestelling_key || '] bij object [' || l_code_notebook_telefoon || ']';
|
||
INSERT INTO ins_kenmerkdeel (ins_deel_key, ins_kenmerk_key, ins_kenmerkdeel_waarde)
|
||
SELECT l_ins_deel_key, c_mobiel_bestelling_key, v_bes_bestelling_key FROM DUAL;
|
||
|
||
v_errorhint := 'Fout bij toevoegen kenmerk artikelnummer [' || rec_cyod.bes_srtdeel_nr || '] bij object [' || l_code_notebook_telefoon || ']';
|
||
INSERT INTO ins_kenmerkdeel (ins_deel_key, ins_kenmerk_key, ins_kenmerkdeel_waarde)
|
||
SELECT l_ins_deel_key, c_mobiel_artikel_key, rec_cyod.bes_srtdeel_nr FROM DUAL;
|
||
|
||
v_errorhint := 'Fout bij toevoegen kenmerk serienummer [' || rec_cyod.serienummer || '] bij object [' || l_code_notebook_telefoon || ']';
|
||
INSERT INTO ins_kenmerkdeel (ins_deel_key, ins_kenmerk_key, ins_kenmerkdeel_waarde)
|
||
SELECT l_ins_deel_key, c_mobiel_serienr_key, rec_cyod.serienummer FROM DUAL;
|
||
|
||
v_errorhint := 'Fout bij toevoegen kenmerk aanschafdatum [' || rec_cyod.datum || '] bij object [' || l_code_notebook_telefoon || ']';
|
||
INSERT INTO ins_kenmerkdeel (ins_deel_key, ins_kenmerk_key, ins_kenmerkdeel_waarde)
|
||
SELECT l_ins_deel_key, c_mobiel_datum_key, TO_CHAR(TO_DATE(rec_cyod.datum,'YYYYMMDD'),'DD-MM-YYYY') FROM DUAL;
|
||
END IF;
|
||
END IF;
|
||
|
||
|
||
|
||
ELSE
|
||
-- Persoon heeft het object met dat serienummer al en zou een dubbel voorkomen gaan worden --> DUS NIET TOEVOEGEN
|
||
v_count_error := v_count_error + 1;
|
||
v_errorhint := 'Fout bij toevoegen van object';
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Object met serienummers is al bij persoon geregistreerd: object wordt niet toegevoegd',
|
||
v_errorhint
|
||
);
|
||
END IF;
|
||
ELSE
|
||
-- Type/Soort is geen N en geen T, dus onbekend
|
||
v_count_error := v_count_error + 1;
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Soort object is onbekend: moet N(otebook) of T(elefoon) zijn',
|
||
v_errorhint
|
||
);
|
||
END IF;
|
||
|
||
COMMIT;
|
||
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
v_count_error := v_count_error + 1;
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg :=
|
||
'OTHERS (error '
|
||
|| oracle_err_num
|
||
|| '/'
|
||
|| oracle_err_mes
|
||
|| ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint
|
||
);
|
||
COMMIT;
|
||
END;
|
||
END LOOP;
|
||
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'CYOD Serienummers: verwerkte regels zonder foutmelding: '
|
||
|| TO_CHAR (v_count_tot - v_count_error),
|
||
''
|
||
);
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'CYOD Serienummers: verwerkte regels met foutmelding: '
|
||
|| TO_CHAR (v_count_error),
|
||
''
|
||
);
|
||
COMMIT;
|
||
|
||
|
||
|
||
END alli_update_cyod_serienummers;
|
||
/
|
||
|
||
|
||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
--
|
||
-- Koppeling Bouwborden
|
||
--
|
||
-- Leverancier: Bas Honcoop (prs_bedrijf_key = 936)
|
||
-- Catalogus: Bouwborden (discipline = 521)
|
||
-- OCI Punchout: http://bh.enson.nl/oci.alliantie.php?username=alliantie&password=p$iSu45&~TARGET=_self
|
||
-- Financiele goedkeuring: nvt --> Automatisch accepteren aanvraag = ja
|
||
-- Functionele goedkeuring: communicatiemedewerker van project (door projectleider verplicht in te vullen bij bestelaanvraag)
|
||
-- Projectnummer: verplicht invulbaar veld door projectleider in te vullen bij bestelaanvraag.
|
||
|
||
-- mbmb
|
||
CREATE OR REPLACE VIEW ALLI_V_BO_MEDEWERKERS_BOUWBORD
|
||
(PRS_PERSLID_KEY, PRS_PERSLID_FULL)
|
||
AS
|
||
select distinct p.prs_perslid_key, P.prs_perslid_naam_full
|
||
FROM fac_groeprechten gr, fac_gebruikersgroep gg, prs_v_perslid_fullnames p
|
||
WHERE gr.ins_discipline_key = 521
|
||
AND GR.FAC_FUNCTIE_KEY = (SELECT fac_functie_key FROM fac_functie f WHERE f.fac_functie_code = 'WEB_BESBOF')
|
||
AND gr.fac_gebruiker_alg_level_write < 9
|
||
AND gr.fac_gebruiker_prs_level_write < 9
|
||
AND gr.fac_groep_key = gg.fac_groep_key
|
||
AND gg.prs_perslid_key = p.prs_perslid_key;
|
||
|
||
|
||
-- Notificatiejob met key 41 is via alli09.sql aangemaakt.
|
||
CREATE OR REPLACE VIEW ALLI_V_NOTIFY_BO_BOUWBORD (code, sender, receiver, text, KEY, par1, par2, xkey)
|
||
AS
|
||
SELECT sn.fac_srtnotificatie_code, b.prs_perslid_key, fac.safe_to_number(kb.bes_kenmerkbestell_waarde),
|
||
sn.fac_srtnotificatie_oms, b.bes_bestelling_key, NULL, NULL, NULL
|
||
FROM bes_bestelling b, bes_kenmerkbestell kb, bes_kenmerk k, bes_srtkenmerk sk, fac_kenmerkdomein kd, fac_notificatie_job nj, fac_srtnotificatie sn
|
||
WHERE sn.fac_srtnotificatie_code = 'CUST01'
|
||
AND nj.fac_notificatie_job_key = 41
|
||
AND b.bes_bestelling_key = kb.bes_bestelling_key
|
||
and b.bes_bestelling_status = 3
|
||
and KB.BES_KENMERK_KEY = k.bes_kenmerk_key
|
||
and K.BES_SRTKENMERK_KEY = SK.BES_SRTKENMERK_KEY
|
||
and SK.FAC_KENMERKDOMEIN_KEY= KD.FAC_KENMERKDOMEIN_KEY
|
||
and UPPER(KD.FAC_KENMERKDOMEIN_MODULE) = 'BES'
|
||
and UPPER(KD.FAC_KENMERKDOMEIN_OBJECTNAAM) = 'ALLI_V_BO_MEDEWERKERS_BOUWBORD';
|
||
|
||
|
||
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
|
||
|
||
-- View tbv notificatiejob contract-reminder (afgeleid van de FAC-standaard).
|
||
-- 1x per week wordt de job aangeroepen, verschil met de standaard FAC is dat niet alleen de beheerder (voor de UNION),
|
||
-- maar ook andere personen een mailt-notificatie moeten kunnen ontvangen (na UNION).
|
||
-- Deze personen worden in eigen tabel "$SYSTEM" (key = 61) met als waarde-code "CNT_NOTI_REMINDER..." geregistreerd.
|
||
-- In de waarde-kolom staan de prs_perslid_key van de persoon die (ook) een notificatie moet ontvangen.
|
||
|
||
CREATE OR REPLACE VIEW alli_v_noti_cntreminder
|
||
(code, sender, receiver, text, key, par1, par2, xkey)
|
||
AS
|
||
SELECT '', '', c.prs_perslid_key_beh,
|
||
'Rapp<EFBFBD>l: Contract '
|
||
|| c.cnt_contract_nummer_intern
|
||
|| ' ('
|
||
|| c.cnt_contract_omschrijving
|
||
|| ' '
|
||
|| b.prs_bedrijf_naam
|
||
|| ')'
|
||
|| ' moet uiterlijk per '
|
||
|| TO_CHAR (cnt.cnt_getopzegdatum (c.cnt_contract_key), 'DD-MM-YYYY')
|
||
|| ' worden verlengd of opgezegd.',
|
||
c.cnt_contract_key, c.cnt_contract_nummer_intern, cnt.cnt_getopzegdatum (c.cnt_contract_key), NULL
|
||
FROM cnt_v_aanwezigcontract c, prs_bedrijf b
|
||
WHERE b.prs_bedrijf_key = c.cnt_prs_bedrijf_key
|
||
AND cnt_contract_verwijder IS NULL
|
||
AND cnt_contract_status = 0 /* actief */
|
||
AND (SYSDATE BETWEEN cnt.cnt_getrappeldatum (c.cnt_contract_key) AND cnt.cnt_getopzegdatum (c.cnt_contract_key))
|
||
UNION
|
||
SELECT '', '', fac.safe_to_number(fac_usrdata_omschr),
|
||
'Rapp<EFBFBD>l: Contract '
|
||
|| c.cnt_contract_nummer_intern
|
||
|| ' ('
|
||
|| c.cnt_contract_omschrijving
|
||
|| ' '
|
||
|| b.prs_bedrijf_naam
|
||
|| ')'
|
||
|| ' moet uiterlijk per '
|
||
|| TO_CHAR (cnt.cnt_getopzegdatum (c.cnt_contract_key), 'DD-MM-YYYY')
|
||
|| ' worden verlengd of opgezegd.',
|
||
c.cnt_contract_key, c.cnt_contract_nummer_intern, cnt.cnt_getopzegdatum (c.cnt_contract_key), NULL
|
||
FROM cnt_v_aanwezigcontract c, prs_bedrijf b, fac_usrdata ud
|
||
WHERE b.prs_bedrijf_key = c.cnt_prs_bedrijf_key
|
||
AND cnt_contract_verwijder IS NULL
|
||
AND cnt_contract_status = 0 /* actief */
|
||
AND (SYSDATE BETWEEN cnt.cnt_getrappeldatum (c.cnt_contract_key) AND cnt.cnt_getopzegdatum (c.cnt_contract_key))
|
||
AND fac_usrtab_key = 61
|
||
AND fac_usrdata_code like 'CNT_NOTI_REMINDER%'
|
||
AND fac_usrdata_verwijder IS NULL;
|
||
|
||
|
||
----------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
--- RTM Grafieken op portaal
|
||
|
||
-- Alle bestelaanvragen per catalogus, per week.
|
||
CREATE OR REPLACE VIEW alli_v_bes_catalogus_p_week
|
||
(INS_DISCIPLINE_KEY, INS_DISCIPLINE_OMSCHRIJVING, jaar, week, aantal)
|
||
AS
|
||
select D.INS_DISCIPLINE_KEY, MIN(D.INS_DISCIPLINE_OMSCHRIJVING), to_char(bes_bestelling_datum, 'IYYY'), to_char(bes_bestelling_datum, 'IW'), count(b.bes_bestelling_key)
|
||
from bes_bestelling b, bes_bestelling_item bi, bes_srtdeel s, bes_srtgroep g, bes_discipline d
|
||
where BI.BES_BESTELLING_KEY = b.bes_bestelling_key
|
||
and BI.BES_SRTDEEL_KEY = s.bes_srtdeel_key
|
||
and s.bes_srtgroep_key = G.BES_SRTGROEP_KEY
|
||
and G.INS_DISCIPLINE_KEY = D.INS_DISCIPLINE_KEY
|
||
and TRUNC( b.bes_bestelling_datum) >= (TRUNC (SYSDATE)
|
||
- DECODE (TO_CHAR (SYSDATE, 'D'), '1', 8, TO_CHAR (SYSDATE, 'D'))
|
||
+ 2) - 10*7
|
||
group by D.INS_DISCIPLINE_KEY, to_char(bes_bestelling_datum, 'IYYY'), to_char(bes_bestelling_datum, 'IW');
|
||
|
||
|
||
-- View van de afgelopen 10 weken, met deze week erbij is dat 11.
|
||
CREATE OR REPLACE VIEW alli_v_10_week_history
|
||
(jaar, week)
|
||
AS
|
||
SELECT to_char(TRUNC(SYSDATE - (7* (LEVEL - 1))),'IYYY') jaar, substr(to_char(SYSDATE - (7* (LEVEL - 1)), 'IW'), 1, 2) week
|
||
FROM DUAL
|
||
CONNECT BY LEVEL <= 11;
|
||
|
||
CREATE OR REPLACE VIEW alli_v_10_week_future
|
||
(jaar, week)
|
||
AS
|
||
SELECT to_char(TRUNC(SYSDATE + (7* (LEVEL - 1))),'IYYY') jaar, substr(to_char(SYSDATE + (7* (LEVEL - 1)), 'IW'), 1, 2) week
|
||
FROM DUAL
|
||
CONNECT BY LEVEL <= 11;
|
||
|
||
-- Kantoorartikelen per week
|
||
CREATE OR REPLACE VIEW alli_v_graph_cat_kantoor
|
||
(
|
||
fclt_key,
|
||
FCLT_XAS_,
|
||
FCLT_YAS_KANTOOR,
|
||
FCLT_YAS_INCIDENTEEL,
|
||
FCLT_URL,
|
||
VOLGORDE
|
||
)
|
||
AS
|
||
SELECT '', week,
|
||
COALESCE(
|
||
(SELECT aantal
|
||
FROM alli_v_bes_catalogus_p_week c
|
||
WHERE INS_DISCIPLINE_KEY = 501
|
||
AND c.week = w10.week
|
||
AND c.jaar = w10.jaar),
|
||
0),
|
||
COALESCE(
|
||
(SELECT aantal
|
||
FROM alli_v_bes_catalogus_p_week c
|
||
WHERE INS_DISCIPLINE_KEY = 42
|
||
AND c.week = w10.week
|
||
AND c.jaar = w10.jaar),
|
||
0),
|
||
'',
|
||
jaar|| '-' ||week
|
||
FROM alli_v_10_week_history w10;
|
||
|
||
|
||
-- Bouwborden per week
|
||
CREATE OR REPLACE VIEW alli_v_graph_cat_bouwbord
|
||
(
|
||
fclt_key,
|
||
FCLT_XAS_,
|
||
FCLT_YAS_BOUWBORD,
|
||
FCLT_URL,
|
||
VOLGORDE
|
||
)
|
||
AS
|
||
SELECT '', week,
|
||
COALESCE(
|
||
(SELECT aantal
|
||
FROM alli_v_bes_catalogus_p_week c
|
||
WHERE INS_DISCIPLINE_KEY = 521
|
||
AND c.week = w10.week
|
||
AND c.jaar = w10.jaar),
|
||
0),
|
||
'',
|
||
jaar|| '-' ||week
|
||
FROM alli_v_10_week_history w10;
|
||
|
||
-- Drukwerk per week
|
||
CREATE OR REPLACE VIEW alli_v_graph_cat_drukwerk
|
||
(
|
||
fclt_key,
|
||
FCLT_XAS_,
|
||
FCLT_YAS_HUISSTIJL,
|
||
FCLT_YAS_VISITEKAARTJES,
|
||
FCLT_YAS_VVE,
|
||
FCLT_YAS_SSC,
|
||
FCLT_YAS_OVERIG,
|
||
FCLT_URL,
|
||
VOLGORDE
|
||
)
|
||
AS
|
||
SELECT '', week,
|
||
COALESCE(
|
||
(SELECT aantal
|
||
FROM alli_v_bes_catalogus_p_week c
|
||
WHERE INS_DISCIPLINE_KEY = 341
|
||
AND c.week = w10.week
|
||
AND c.jaar = w10.jaar),
|
||
0),
|
||
COALESCE(
|
||
(SELECT aantal
|
||
FROM alli_v_bes_catalogus_p_week c
|
||
WHERE INS_DISCIPLINE_KEY = 361
|
||
AND c.week = w10.week
|
||
AND c.jaar = w10.jaar),
|
||
0),
|
||
COALESCE(
|
||
(SELECT SUM(aantal)
|
||
FROM alli_v_bes_catalogus_p_week c
|
||
WHERE INS_DISCIPLINE_KEY IN (442, 443, 444, 445)
|
||
AND c.week = w10.week
|
||
AND c.jaar = w10.jaar),
|
||
0),
|
||
COALESCE(
|
||
(SELECT SUM(aantal)
|
||
FROM alli_v_bes_catalogus_p_week c
|
||
WHERE INS_DISCIPLINE_KEY IN (446, 447)
|
||
AND c.week = w10.week
|
||
AND c.jaar = w10.jaar),
|
||
0),
|
||
COALESCE(
|
||
(SELECT SUM(aantal)
|
||
FROM alli_v_bes_catalogus_p_week c
|
||
WHERE INS_DISCIPLINE_KEY IN (448, 449, 463, 441)
|
||
AND c.week = w10.week
|
||
AND c.jaar = w10.jaar),
|
||
0),
|
||
'',
|
||
jaar|| '-' ||week
|
||
FROM alli_v_10_week_history w10;
|
||
|
||
|
||
-- ICT (hardware en CYOD) per week
|
||
CREATE OR REPLACE VIEW alli_v_graph_cat_ict
|
||
(
|
||
fclt_key,
|
||
FCLT_XAS_,
|
||
FCLT_YAS_HARDWARE,
|
||
FCLT_YAS_INCIDENTEEL,
|
||
FCLT_YAS_CYOD,
|
||
FCLT_URL,
|
||
VOLGORDE
|
||
)
|
||
AS
|
||
SELECT '', week,
|
||
COALESCE(
|
||
(SELECT aantal
|
||
FROM alli_v_bes_catalogus_p_week c
|
||
WHERE INS_DISCIPLINE_KEY = 401
|
||
AND c.week = w10.week
|
||
AND c.jaar = w10.jaar),
|
||
0),
|
||
COALESCE(
|
||
(SELECT aantal
|
||
FROM alli_v_bes_catalogus_p_week c
|
||
WHERE INS_DISCIPLINE_KEY = 201
|
||
AND c.week = w10.week
|
||
AND c.jaar = w10.jaar),
|
||
0),
|
||
COALESCE(
|
||
(SELECT aantal
|
||
FROM alli_v_bes_catalogus_p_week c
|
||
WHERE INS_DISCIPLINE_KEY = 221
|
||
AND c.week = w10.week
|
||
AND c.jaar = w10.jaar),
|
||
0),
|
||
'',
|
||
jaar|| '-' ||week
|
||
FROM alli_v_10_week_history w10;
|
||
|
||
|
||
|
||
-- Alle nieuwe contracten die ingaan de komende 10 weken per week.
|
||
CREATE OR REPLACE VIEW alli_v_cnt_nieuw_per_week
|
||
(jaar, week, aantal)
|
||
AS
|
||
select to_char(c.cnt_contract_looptijd_van, 'IYYY'), to_char(c.cnt_contract_looptijd_van, 'IW'), count(c.cnt_contract_key)
|
||
from cnt_contract c
|
||
WHERE TRUNC(c.cnt_contract_looptijd_van) >= (TRUNC (SYSDATE) - DECODE (TO_CHAR (SYSDATE, 'D'), '1', 8, TO_CHAR (SYSDATE, 'D')) + 2)
|
||
AND TRUNC(c.cnt_contract_looptijd_van) <= (TRUNC (SYSDATE) - DECODE (TO_CHAR (SYSDATE, 'D'), '1', 8, TO_CHAR (SYSDATE, 'D')) + 2) + 10*7
|
||
GROUP BY to_char(c.cnt_contract_looptijd_van, 'IYYY'), to_char(c.cnt_contract_looptijd_van, 'IW');
|
||
|
||
|
||
-- Alle aflopende contracten de komende 10 weken per week.
|
||
CREATE OR REPLACE VIEW alli_v_cnt_aflopend_per_week
|
||
(jaar, week, aantal)
|
||
AS
|
||
select to_char(c.cnt_contract_looptijd_tot, 'IYYY'), to_char(c.cnt_contract_looptijd_tot, 'IW'), count(c.cnt_contract_key)
|
||
from cnt_contract c
|
||
WHERE TRUNC(c.cnt_contract_looptijd_tot) >= (TRUNC (SYSDATE) - DECODE (TO_CHAR (SYSDATE, 'D'), '1', 8, TO_CHAR (SYSDATE, 'D')) + 2)
|
||
AND TRUNC(c.cnt_contract_looptijd_tot) <= (TRUNC (SYSDATE) - DECODE (TO_CHAR (SYSDATE, 'D'), '1', 8, TO_CHAR (SYSDATE, 'D')) + 2) + 10*7
|
||
GROUP BY to_char(c.cnt_contract_looptijd_tot, 'IYYY'), to_char(c.cnt_contract_looptijd_tot, 'IW');
|
||
|
||
|
||
-- Grafiek van alle aflopende contracten voor de komende 10 weken
|
||
CREATE OR REPLACE VIEW alli_v_graph_cnt_new_close
|
||
(
|
||
fclt_key,
|
||
FCLT_XAS_,
|
||
FCLT_YAS_NIEUW,
|
||
FCLT_YAS_AFLOPEND,
|
||
FCLT_URL,
|
||
VOLGORDE
|
||
)
|
||
AS
|
||
SELECT '', week,
|
||
COALESCE(
|
||
(SELECT aantal
|
||
FROM alli_v_cnt_nieuw_per_week c
|
||
WHERE c.week = w10.week
|
||
AND c.jaar = w10.jaar),
|
||
0),
|
||
COALESCE(
|
||
(SELECT aantal
|
||
FROM alli_v_cnt_aflopend_per_week c
|
||
WHERE c.week = w10.week
|
||
AND c.jaar = w10.jaar),
|
||
0),
|
||
'',
|
||
jaar|| '-' ||week
|
||
FROM alli_v_10_week_future w10;
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
CREATE OR REPLACE VIEW alli_v_visitekaartje (prs_perslid_key,
|
||
voornaam,
|
||
naam,
|
||
functie,
|
||
bedrijfsonderdeel,
|
||
gebouwcode,
|
||
adres,
|
||
postcode,
|
||
plaats,
|
||
postadres,
|
||
postpostcode,
|
||
postplaats,
|
||
telefoon1,
|
||
telefoon2,
|
||
mobiel1,
|
||
mobiel2,
|
||
email
|
||
)
|
||
AS
|
||
SELECT p.prs_perslid_key,
|
||
p.prs_perslid_voornaam,
|
||
DECODE (COALESCE (p.prs_perslid_tussenvoegsel, ''),
|
||
'', '',
|
||
p.prs_perslid_tussenvoegsel || ' ')
|
||
|| prs_perslid_naam naam,
|
||
prs_srtperslid_omschrijving functie,
|
||
( SELECT fac_usrdata_omschr
|
||
FROM prs_kenmerklink, fac_usrdata ud
|
||
WHERE fac_usrtab_key=121
|
||
AND ud.fac_usrdata_key = fac.safe_to_number(prs_kenmerklink_waarde)
|
||
AND prs_link_key = p.prs_perslid_key
|
||
AND prs_kenmerklink_niveau = 'P'
|
||
AND prs_kenmerk_key = 1060
|
||
AND prs_kenmerklink_verwijder IS NULL
|
||
) bedrijfsonderdeel,
|
||
pgl.alg_gebouw_code,
|
||
l.alg_locatie_adres adres,
|
||
l.alg_locatie_postcode postcode,
|
||
l.alg_locatie_plaats plaats,
|
||
l.alg_locatie_post_adres postadres,
|
||
l.alg_locatie_post_postcode postpostcode,
|
||
l.alg_locatie_post_plaats postplaats,
|
||
TRIM( DECODE (SUBSTR (p.prs_perslid_telefoonnr, 1, 1),
|
||
'(', SUBSTR (p.prs_perslid_telefoonnr, 2,
|
||
INSTR (p.prs_perslid_telefoonnr, ')') - 2),
|
||
SUBSTR (p.prs_perslid_telefoonnr, 1,
|
||
INSTR (p.prs_perslid_telefoonnr, '-') - 1)
|
||
)
|
||
)
|
||
telefoon1,
|
||
TRIM( DECODE (SUBSTR (p.prs_perslid_telefoonnr, 1, 1),
|
||
'(', SUBSTR (p.prs_perslid_telefoonnr,
|
||
INSTR (p.prs_perslid_telefoonnr, ')') + 1),
|
||
SUBSTR (p.prs_perslid_telefoonnr,
|
||
INSTR (p.prs_perslid_telefoonnr, '-') + 1)
|
||
)
|
||
)
|
||
telefoon2,
|
||
TRIM( DECODE (SUBSTR (p.prs_perslid_mobiel, 1, 1),
|
||
'(', SUBSTR (p.prs_perslid_mobiel, 2,
|
||
INSTR (p.prs_perslid_mobiel, ')') - 2),
|
||
SUBSTR (p.prs_perslid_mobiel, 1,
|
||
INSTR (p.prs_perslid_mobiel, '-') - 1)
|
||
)
|
||
)
|
||
mobiel1,
|
||
TRIM( DECODE (SUBSTR (p.prs_perslid_mobiel, 1, 1),
|
||
'(', SUBSTR (p.prs_perslid_mobiel,
|
||
INSTR (p.prs_perslid_mobiel, ')') + 1),
|
||
SUBSTR (p.prs_perslid_mobiel,
|
||
INSTR (p.prs_perslid_mobiel, '-') + 1)
|
||
)
|
||
)
|
||
mobiel2,
|
||
p.prs_perslid_email email
|
||
FROM prs_perslid p,
|
||
prs_srtperslid sp,
|
||
alg_locatie l,
|
||
(SELECT alg_locatie_key,
|
||
g.alg_gebouw_key,
|
||
g.alg_gebouw_code,
|
||
prs_perslid_key
|
||
FROM (SELECT prs_perslid_key,
|
||
(SELECT MAX (alg_ruimte_key)
|
||
FROM prs_v_perslidwerkplek_gegevens pwg
|
||
WHERE pwg.prs_perslid_key = pb.prs_perslid_key
|
||
AND pwg.prs_perslidwerkplek_bezetting =
|
||
pb.prs_perslidwerkplek_bezetting)
|
||
alg_ruimte_key
|
||
FROM ( SELECT prs_perslid_key,
|
||
MAX (prs_perslidwerkplek_bezetting)
|
||
prs_perslidwerkplek_bezetting
|
||
FROM prs_perslidwerkplek pw, prs_werkplek wp
|
||
WHERE pw.prs_werkplek_key = wp.prs_werkplek_key
|
||
AND wp.prs_werkplek_virtueel = 0
|
||
GROUP BY prs_perslid_key) pb) pr,
|
||
alg_gebouw g,
|
||
alg_verdieping v,
|
||
alg_ruimte r
|
||
WHERE pr.alg_ruimte_key = r.alg_ruimte_key
|
||
AND r.alg_verdieping_key = v.alg_verdieping_key
|
||
AND v.alg_gebouw_key = g.alg_gebouw_key) pgl
|
||
WHERE p.prs_srtperslid_key = sp.prs_srtperslid_key
|
||
AND p.prs_perslid_key = pgl.prs_perslid_key(+)
|
||
AND pgl.alg_locatie_key = l.alg_locatie_key(+);
|
||
|
||
|
||
CREATE OR REPLACE VIEW alli_v_bestelling_maninfo
|
||
(fclt_f_aanvraagnr,
|
||
fclt_x_jaar,
|
||
fclt_x_kwartaal,
|
||
fclt_x_maand,
|
||
besteldatum,
|
||
fclt_3d_discipline_key,
|
||
fclt_f_catalogus,
|
||
fclt_f_leverancier,
|
||
fclt_f_aanvrager,
|
||
personeelsnr,
|
||
fclt_f_afdeling,
|
||
fclt_f_status,
|
||
bestelbedrag,
|
||
opdrachtbedrag
|
||
)
|
||
AS SELECT TO_CHAR(b.bes_bestelling_key),
|
||
TO_CHAR(MIN(bes_bestelling_datum), 'YYYY') jaar,
|
||
'Kwartaal ' || TO_CHAR(MIN(bes_bestelling_datum), 'Q') kwartaal,
|
||
TO_CHAR(MIN(bes_bestelling_datum), 'MM') maand,
|
||
TO_CHAR(MIN(bes_bestelling_datum), 'DD-MM-YYYY') datum,
|
||
MIN(dis.ins_discipline_key),
|
||
MIN(dis.ins_discipline_omschrijving) catalogus,
|
||
MIN(bd.prs_bedrijf_naam) leverancier,
|
||
MIN(p.prs_perslid_naam)
|
||
|| NVL2 (MIN(p.prs_perslid_voorletters),
|
||
', ' || MIN(p.prs_perslid_voorletters),
|
||
'')
|
||
|| NVL2 (MIN(p.prs_perslid_tussenvoegsel),
|
||
' ' || MIN(p.prs_perslid_tussenvoegsel),
|
||
'')
|
||
|| NVL2 (MIN(p.prs_perslid_voornaam),
|
||
' (' || MIN(p.prs_perslid_voornaam) || ')',
|
||
'')
|
||
aanvrager,
|
||
MIN(P.PRS_PERSLID_NR),
|
||
MIN(d.prs_afdeling_naam) organisation,
|
||
MIN(BS.BES_BESTELLINGSTATUSES_OMSCHR),
|
||
SUM(bi.bes_bestelling_item_aantal
|
||
* COALESCE (bi.bes_bestelling_item_prijs, 0))
|
||
totaalbedrag,
|
||
SUM(BO.BES_BESTELOPDR_ITEM_AANTAL
|
||
* COALESCE (BO.BES_BESTELOPDR_ITEM_PRIJS , 0))
|
||
opdrachtbedrag
|
||
FROM bes_bestelling_item bi,
|
||
bes_bestelopdr_item bo,
|
||
bes_srtdeel srt,
|
||
prs_bedrijf bd,
|
||
bes_bestelling b,
|
||
bes_bestellingstatuses bs,
|
||
prs_perslid p,
|
||
prs_v_afdeling d,
|
||
mld_adres m,
|
||
prs_v_afdeling_boom boom,
|
||
bes_srtgroep grp,
|
||
ins_tab_discipline dis,
|
||
alg_locatie l,
|
||
alg_district di
|
||
WHERE srt.bes_srtgroep_key = grp.bes_srtgroep_key
|
||
AND grp.ins_discipline_key = dis.ins_discipline_key
|
||
AND bi.bes_srtdeel_key = srt.bes_srtdeel_key
|
||
AND srt.prs_bedrijf_key = bd.prs_bedrijf_key
|
||
AND BO.BES_BESTELOPDR_ITEM_KEY (+) = BI.BES_BESTELOPDR_ITEM_KEY
|
||
AND bi.bes_bestelling_key = b.bes_bestelling_key
|
||
AND B.BES_BESTELLING_STATUS = BS.BES_BESTELLINGSTATUSES_KEY
|
||
AND p.prs_perslid_key = b.prs_perslid_key
|
||
AND p.prs_afdeling_key = d.prs_afdeling_key
|
||
AND d.prs_afdeling_key = boom.prs_afdeling_key
|
||
AND b.mld_adres_key_lev = m.mld_adres_key
|
||
AND m.alg_locatie_key = l.alg_locatie_key(+)
|
||
AND l.alg_district_key = di.alg_district_key(+)
|
||
GROUP BY b.bes_bestelling_key, bd.prs_bedrijf_key;
|
||
|
||
|
||
BEGIN adm.systrackscriptId('$Id$', 0); END;
|
||
/
|
||
|
||
BEGIN fac.registercustversion('ALLI', 9); END;
|
||
/
|
||
|
||
commit;
|
||
|
||
spool off
|