Files
Customer/ALLV/allv.sql
Maarten van der Heide 367a503d53 ALLV#23264 PRS-import
svn path=/Customer/trunk/; revision=18424
2013-07-10 10:06:41 +00:00

2691 lines
114 KiB
SQL

-- Script containing customer specific db-configuration for ALLV.
-- (c) 2007 SG|facilitor bv
-- $Revision$
-- $Id$
--
-- Support: +31 53 4800700
spool xallv.lst
set echo on
/* Formatted on 29-3-2013 20:52:02 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW allv_v_rap_import_log
AS
SELECT imp_log_status fclt_f_status,
imp_log_omschrijving omschrijving,
imp_log_hint opmerking
FROM imp_log l
WHERE l.fac_import_key = (SELECT MAX (fac_import_key)
FROM fac_import
WHERE fac_import_app_key = 421);
/* Formatted on 29-3-2013 20:52:02 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE allv_import_prs (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_prs_perslid_nr VARCHAR2 (256);
v_prs_perslid_naam VARCHAR2 (256);
v_prs_perslid_tussenvoegsel VARCHAR2 (256);
v_prs_perslid_voorletters VARCHAR2 (256);
v_prs_perslid_voornaam VARCHAR2 (256);
v_prs_perslid_geslacht VARCHAR2 (256);
--v_prs_afdeling_naam VARCHAR2 (256);
--v_prs_afdeling_omschrijving VARCHAR2 (256);
v_prs_kostenplaats_nr VARCHAR2 (256);
v_prs_srtperslid_omschrijving VARCHAR2 (256);
--v_alg_locatie_code VARCHAR2 (256);
v_alg_gebouw_code VARCHAR2 (256);
--v_alg_verdieping_code VARCHAR2 (256);
v_alg_ruimte_nr 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_ingangsdatum VARCHAR2 (256);
v_prs_perslid_einddatum VARCHAR2 (256);
-- Overig:
v_prs_perslid_ingangs_date DATE;
v_prs_perslid_eind_date DATE;
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
DELETE FROM allv_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
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_nr);
-- 02
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_naam);
-- 03
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_tussenvoegsel);
-- 04
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_voorletters);
-- 05
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_voornaam);
-- 06
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_geslacht);
-- xx
--fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_afdeling_naam);
-- xx
--fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_afdeling_omschrijving);
-- 07
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_kostenplaats_nr);
-- 09
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_srtperslid_omschrijving);
-- xx
--fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_locatie_code);
-- 10
fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_gebouw_code);
-- xx
--fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_verdieping_code);
-- 11
fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_ruimte_nr);
-- 12
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_telefoonnr);
-- 13
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_mobiel);
-- 14
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_email);
-- 15
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_oslogin);
-- 16
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_ingangsdatum);
-- 18
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_einddatum);
--
v_aanduiding :=
'['
|| v_prs_perslid_nr
|| '|'
|| v_prs_perslid_naam
|| '|'
|| v_prs_perslid_tussenvoegsel
|| '|'
|| v_prs_perslid_voornaam
|| '] ';
-- 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_nr) = 'PERSONEELSNUMMER'
AND UPPER (v_prs_perslid_naam) = 'ACHTERNAAM'
AND UPPER (v_prs_perslid_tussenvoegsel) = 'TUSSENVOEGSEL'
AND UPPER (v_prs_perslid_voorletters) = 'VOORLETTERS'
AND UPPER (v_prs_perslid_voornaam) = 'VOORNAAM'
AND UPPER (v_prs_perslid_geslacht) = 'GESLACHT'
--AND UPPER (v_prs_afdeling_naam) = 'AFDELINGSCODE'
--AND UPPER (v_prs_afdeling_omschrijving) = 'AFDELINGSOMSCHRIJVING'
AND UPPER (v_prs_kostenplaats_nr) = 'KOSTENPLAATSNUMMER'
AND UPPER (v_prs_srtperslid_omschrijving) = 'FUNCTIE'
--AND UPPER (v_alg_locatie_code) = 'LOCATIECODE'
AND UPPER (v_alg_gebouw_code) = 'GEBOUWCODE'
--AND UPPER (v_alg_verdieping_code) = 'BOUWLAAGVOLGNUMMER'
AND UPPER (v_alg_ruimte_nr) = 'RUIMTENUMMER'
AND UPPER (v_prs_perslid_telefoonnr) = 'TELEFOONNUMMER'
AND UPPER (v_prs_perslid_mobiel) = 'MOBIEL'
AND UPPER (v_prs_perslid_email) = 'EMAIL'
AND UPPER (v_prs_perslid_oslogin) = 'LOGINNAAM'
AND UPPER (v_prs_perslid_ingangsdatum) = 'INDIENSTDATUM'
AND UPPER (v_prs_perslid_einddatum) = 'UITDIENSTDATUM')
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
v_errorhint := 'Ongeldig personeelsnummer';
v_prs_perslid_nr := TRIM (v_prs_perslid_nr);
IF (v_prs_perslid_nr IS NULL OR LENGTH (v_prs_perslid_nr) > 16)
THEN
v_ongeldig := 1;
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Personeelsnummer onbekend/te lang',
'Personeelsnummer verplicht; regel wordt overgeslagen!'
);
COMMIT;
END IF;
--
v_errorhint := 'Ongeldige achternaam';
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 || 'Achternaam te lang',
'Achternaam wordt afgebroken tot ['
|| v_prs_perslid_naam
|| ']'
);
COMMIT;
ELSIF (v_prs_perslid_naam IS NULL)
THEN
v_ongeldig := 1;
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || 'Achternaam onbekend',
'Achternaam verplicht; regel wordt overgeslagen!'
);
COMMIT;
END IF;
--
v_errorhint := 'Ongeldig tussenvoegsel';
v_prs_perslid_tussenvoegsel := TRIM (v_prs_perslid_tussenvoegsel);
IF (LENGTH (v_prs_perslid_tussenvoegsel) > 10)
THEN
v_prs_perslid_tussenvoegsel :=
SUBSTR (v_prs_perslid_tussenvoegsel, 1, 10);
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';
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 te lang',
'Voornaam wordt afgebroken tot ['
|| v_prs_perslid_voornaam
|| ']'
);
COMMIT;
ELSIF (v_prs_perslid_voornaam IS NULL)
THEN
v_prs_perslid_voornaam := '-';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Voornaam onbekend',
'Voornaam wordt gezet op [-]');
COMMIT;
END IF;
--
v_errorhint := 'Ongeldig geslacht';
v_prs_perslid_geslacht := TRIM (v_prs_perslid_geslacht);
IF (LENGTH (v_prs_perslid_geslacht) > 1)
THEN
v_prs_perslid_geslacht := NULL;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Geslacht te lang',
'Geslacht wordt niet gezet');
COMMIT;
END IF;
/*
--
v_errorhint := 'Ongeldige afdelingscode';
v_prs_afdeling_naam := TRIM (v_prs_afdeling_naam);
IF (v_prs_afdeling_naam IS NULL OR LENGTH (v_prs_afdeling_naam) > 10)
THEN
v_ongeldig := 1;
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Afdelingscode onbekend/te lang',
'Afdelingscode verplicht; regel wordt overgeslagen!'
);
COMMIT;
END IF;
--
v_errorhint := 'Ongeldige afdelingsomschrijving';
v_prs_afdeling_omschrijving := TRIM (v_prs_afdeling_omschrijving);
IF (LENGTH (v_prs_afdeling_omschrijving) > 60)
THEN
v_prs_afdeling_omschrijving :=
SUBSTR (v_prs_afdeling_omschrijving, 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Afdelingsomschrijving te lang',
'Afdelingsomschrijving wordt afgebroken tot ['
|| v_prs_afdeling_omschrijving
|| ']'
);
COMMIT;
END IF;
*/
--
v_errorhint := 'Ongeldig kostenplaatsnummer';
v_prs_kostenplaats_nr := TRIM (v_prs_kostenplaats_nr);
IF (v_prs_kostenplaats_nr IS NULL
OR LENGTH (v_prs_kostenplaats_nr) > 30)
THEN
v_ongeldig := 1;
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Kostenplaatsnummer onbekend/te lang',
'Kostenplaatsnummer verplicht; regel wordt overgeslagen!'
);
COMMIT;
END IF;
--
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
|| ']'
);
COMMIT;
ELSIF (v_prs_srtperslid_omschrijving IS NULL)
THEN
v_prs_srtperslid_omschrijving := 'Onbekend';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Functie onbekend',
'Functie wordt gezet op [Onbekend]');
COMMIT;
END IF;
/*
--
v_errorhint := 'Ongeldige locatiecode';
v_alg_locatie_code := TRIM (v_alg_locatie_code);
IF (LENGTH (v_alg_locatie_code) > 10)
THEN
v_alg_locatie_code := SUBSTR (v_alg_locatie_code, 1, 10);
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 gebouwcode';
v_alg_gebouw_code := TRIM (v_alg_gebouw_code);
IF (LENGTH (v_alg_gebouw_code) > 12)
THEN
v_alg_gebouw_code := SUBSTR (v_alg_gebouw_code, 1, 12);
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 := 'Ongeldige verdiepingcode';
v_alg_verdieping_code := TRIM (v_alg_verdieping_code);
IF (LENGTH (v_alg_verdieping_code) > 10)
THEN
v_alg_verdieping_code := SUBSTR (v_alg_verdieping_code, 1, 10);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Verdiepingcode te lang',
'Verdiepingcode wordt afgebroken tot ['
|| v_alg_verdieping_code
|| ']'
);
COMMIT;
END IF;
*/
--
v_errorhint := 'Ongeldig ruimtenummer';
v_alg_ruimte_nr := TRIM (v_alg_ruimte_nr);
IF (LENGTH (v_alg_ruimte_nr) > 10)
THEN
v_alg_ruimte_nr := SUBSTR (v_alg_ruimte_nr, 1, 10);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Ruimtenummer te lang',
'Ruimtenummer wordt afgebroken tot ['
|| v_alg_ruimte_nr
|| ']'
);
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 mobielnummer';
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 || 'Mobielnummer te lang',
'Mobielnummer wordt afgebroken tot ['
|| v_prs_perslid_mobiel
|| ']'
);
COMMIT;
END IF;
--
v_errorhint := 'Ongeldig e-mailadres';
v_prs_perslid_email := TRIM (v_prs_perslid_email);
IF (LENGTH (v_prs_perslid_email) > 50)
THEN
v_prs_perslid_email := SUBSTR (v_prs_perslid_email, 1, 50);
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 := 'Ongeldige loginnaam';
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
|| ']'
);
COMMIT;
END IF;
--
v_errorhint := 'Ongeldige datum in dienst';
v_prs_perslid_ingangsdatum := TRIM (v_prs_perslid_ingangsdatum);
IF (v_prs_perslid_ingangsdatum IS NOT NULL)
THEN
BEGIN
v_prs_perslid_ingangs_date :=
TO_DATE (v_prs_perslid_ingangsdatum, 'dd-mm-yyyy');
EXCEPTION
WHEN OTHERS
THEN
v_ongeldig := 1;
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,
'Regel wordt overgeslagen!');
COMMIT;
END;
ELSE
v_prs_perslid_ingangs_date := NULL;
END IF;
--
v_errorhint := 'Ongeldige datum uit dienst';
v_prs_perslid_einddatum := TRIM (v_prs_perslid_einddatum);
IF (v_prs_perslid_einddatum IS NOT NULL)
THEN
BEGIN
v_prs_perslid_eind_date :=
TO_DATE (v_prs_perslid_einddatum, 'dd-mm-yyyy');
EXCEPTION
WHEN OTHERS
THEN
v_ongeldig := 1;
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,
'Regel wordt overgeslagen!');
COMMIT;
END;
ELSE
v_prs_perslid_eind_date := NULL;
END IF;
-- Insert geformatteerde import record
IF (v_ongeldig = 0)
THEN
BEGIN
v_errorhint :=
'Fout bij toevoegen regel aan importtabel ALLV_IMP_PRS';
INSERT INTO allv_imp_prs (
imp_datum,
prs_perslid_nr,
prs_perslid_naam,
prs_perslid_tussenvoegsel,
prs_perslid_voorletters,
prs_perslid_voornaam,
prs_perslid_geslacht,
--prs_afdeling_naam,
--prs_afdeling_omschrijving,
prs_kostenplaats_nr,
prs_srtperslid_omschrijving,
--alg_locatie_code,
alg_gebouw_code,
--alg_verdieping_code,
alg_ruimte_nr,
prs_perslid_telefoonnr,
prs_perslid_mobiel,
prs_perslid_email,
prs_perslid_oslogin,
prs_perslid_ingangsdatum,
prs_perslid_einddatum
)
VALUES (
SYSDATE,
v_prs_perslid_nr,
v_prs_perslid_naam,
v_prs_perslid_tussenvoegsel,
v_prs_perslid_voorletters,
v_prs_perslid_voornaam,
DECODE (v_prs_perslid_geslacht,
'2', 1,
'1', 0,
NULL),
--v_prs_afdeling_naam,
--v_prs_afdeling_omschrijving,
v_prs_kostenplaats_nr,
v_prs_srtperslid_omschrijving,
--v_alg_locatie_code,
v_alg_gebouw_code,
--v_alg_verdieping_code,
v_alg_ruimte_nr,
v_prs_perslid_telefoonnr,
v_prs_perslid_mobiel,
v_prs_perslid_email,
v_prs_perslid_oslogin,
v_prs_perslid_ingangs_date,
v_prs_perslid_eind_date
);
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/#ingelezen regels: ' || TO_CHAR (v_count_tot),
''
);
fac.imp_writelog (
p_import_key,
'S',
'Persoon/#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, 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 allv_import_prs;
/
/* Formatted on 1-7-2013 12:35:25 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PROCEDURE allv_update_prs (p_import_key IN NUMBER)
IS
c_persoon_inactief VARCHAR2 (30) := 'INACTIEF: ';
-- Maximaal percentage aan nieuwe medewerkers tov. actieve medewerkers met een e-mail
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_groep_upper VARCHAR2 (30) := '_DEFAULT';
c_profiel_omschrijving VARCHAR2 (30) := 'DEFAULT';
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count_prs_import NUMBER (10); -- #actieve personen na import!
v_count_prs_actual NUMBER (10); -- #actieve personen voor import!
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_kostenplaats_key NUMBER (10);
v_srtperslid_key NUMBER (10);
--v_locatie_key NUMBER (10);
v_gebouw_key NUMBER (10);
v_gebouw_code VARCHAR2 (12);
--v_verdieping_key NUMBER (10);
v_ruimte_key NUMBER (10);
v_ruimte_nr VARCHAR2 (10);
v_wp_volgnr NUMBER (3);
v_wp_oms VARCHAR2 (30);
v_wp_key NUMBER (10);
v_groep_key NUMBER (10);
v_profiel_key NUMBER (10);
-- Let op! Personen die niet meer in dienst zijn -> niet in allv_imp_prs!
-- 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 p.prs_perslid_oslogin NOT LIKE '\_%' ESCAPE '\'
AND NOT EXISTS
(SELECT 1
FROM allv_imp_prs ip
WHERE UPPER (ip.prs_perslid_nr) =
UPPER (p.prs_perslid_nr));
-- Let op! Personen die niet meer in dienst zijn -> niet in allv_imp_prs!
CURSOR csrtperslid
IS
SELECT MIN (prs_perslid_nr) prs_perslid_nr,
MIN (prs_perslid_naam) prs_perslid_naam,
MIN (prs_perslid_voornaam) prs_perslid_voornaam,
MIN (prs_srtperslid_omschrijving) prs_srtperslid_omschrijving
FROM allv_imp_prs
GROUP BY UPPER (prs_srtperslid_omschrijving);
-- Let op! Personen die niet meer in dienst zijn -> niet in allv_imp_prs!
-- Dubbele nummers? Dan wordt slechts 1 set persoongegevens toegevoegd!
-- Ook wordt in deze loop de afdelingsomschrijving eventueel bijgewerkt!
CURSOR cperslid
IS
SELECT * FROM allv_imp_prs;
-- Let op! Personen die niet meer in dienst zijn -> niet in allv_imp_prs!
-- Dubbele nummers? Dan krijgt iemand mogelijk de verkeerde plaats!
CURSOR cwp
IS
SELECT p.*, ip.alg_gebouw_code, ip.alg_ruimte_nr
FROM allv_imp_prs ip, prs_v_aanwezigperslid p
WHERE UPPER (ip.prs_perslid_nr) = UPPER (p.prs_perslid_nr)
AND (ip.alg_gebouw_code IS NOT NULL
OR ip.alg_ruimte_nr IS NOT NULL);
-- Alle actieve personen met nummer (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_v_aanwezigperslidwerkplek pw
WHERE pw.prs_perslid_key = p.prs_perslid_key);
-- Alle aanwezige personen met nummer (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
-- Bepaal nummer-match tussen Facilitor en RECENT importbestand ofwel het aantal
-- actieve personen na import.
-- RECENT betekent niet meer dan een kwartiertje oud (14,4 minuten); dit voorkomt
-- dat - als er geen nieuw importbestand is aangeleverd - telkens dezelfde fouten
-- worden gerapporteerd (nl. op basis van een oud importbestand in ALLV_IMP_PRS).
SELECT COUNT ( * )
INTO v_count_prs_import
FROM prs_v_aanwezigperslid p, allv_imp_prs ip
WHERE p.prs_perslid_nr IS NOT NULL
AND UPPER (p.prs_perslid_nr) = UPPER (ip.prs_perslid_nr)
AND (ip.imp_datum + 0.01) > SYSDATE;
-- Bepaal huidig aantal actieve personen in Facilitor.
SELECT DECODE (COUNT ( * ), 0, 1, COUNT ( * ))
INTO v_count_prs_actual
FROM prs_v_aanwezigperslid
WHERE prs_perslid_nr IS NOT NULL;
IF ( (TRUNC ( (v_count_prs_import / v_count_prs_actual) * 100) >=
(100 - c_max_delta_percentage)))
THEN
-- Geldig importbestand wat betreft aantal personen
v_errorhint := 'Fout bij bepalen profiel';
SELECT MAX (fac_profiel_key), COUNT ( * )
INTO v_profiel_key, v_count
FROM fac_profiel
WHERE UPPER (TRIM (fac_profiel_omschrijving)) =
c_profiel_omschrijving;
IF (v_count = 0)
THEN
fac.imp_writelog (
p_import_key,
'I',
'Standaard profiel ['
|| c_profiel_omschrijving
|| '] niet gevonden.',
'Personen zonder profiel kunnen niet worden gekoppeld aan een profiel.'
);
COMMIT;
END IF;
FOR recdelprs IN cdelprs
LOOP
BEGIN
v_aanduiding :=
recdelprs.prs_perslid_nr
|| '|'
|| recdelprs.prs_perslid_naam
|| '|'
|| recdelprs.prs_perslid_voornaam
|| ' - ';
v_errorhint := 'Fout bij bepalen verplichtingen';
-- 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?
v_errorhint := 'Fout bij bepalen 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 maken persoon';
-- Persoon INACTIEF maken (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 gemaakt',
'Persoon is INACTIEF gemaakt'
);
ELSE
v_errorhint := 'Fout bij INACTIEF houden persoon';
-- Persoon INACTIEF houden (reset oslogin; indien handmatig INACTIEF gemaakt)
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',
'Persoon is INACTIEF'
);
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_aanduiding || v_errormsg,
v_errorhint);
COMMIT;
END;
END LOOP;
v_count_tot := 0;
v_count_error := 0;
FOR recsrtperslid IN csrtperslid
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_aanduiding :=
recsrtperslid.prs_perslid_nr
|| '|'
|| recsrtperslid.prs_perslid_naam
|| '|'
|| recsrtperslid.prs_perslid_voornaam
|| '|'
|| recsrtperslid.prs_srtperslid_omschrijving
|| ' - ';
v_errorhint := 'Fout bij bepalen functie';
SELECT COUNT ( * )
INTO v_count
FROM prs_v_aanwezigsrtperslid
WHERE UPPER (prs_srtperslid_omschrijving) =
UPPER (recsrtperslid.prs_srtperslid_omschrijving);
IF (v_count = 0)
THEN
v_errorhint := 'Fout bij toevoegen functie';
INSERT INTO prs_srtperslid (prs_srtperslid_omschrijving)
VALUES (recsrtperslid.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 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_v_aanwezigsrtperslid
WHERE UPPER (prs_srtperslid_omschrijving) =
UPPER (recperslid.prs_srtperslid_omschrijving);
v_errorhint :=
'Fout bij bepalen afdeling met kostenplaats ['
|| recperslid.prs_kostenplaats_nr
|| ']';
SELECT a1.prs_afdeling_key
INTO v_afdeling_key
FROM prs_v_aanwezigafdeling a1, prs_v_aanwezigkostenplaats k1
WHERE a1.prs_kostenplaats_key = k1.prs_kostenplaats_key
AND k1.prs_kostenplaats_upper =
UPPER (recperslid.prs_kostenplaats_nr)
AND NOT EXISTS
(SELECT 1
FROM prs_v_aanwezigafdeling a2,
prs_v_aanwezigkostenplaats k2
WHERE a2.prs_kostenplaats_key =
k2.prs_kostenplaats_key
AND k2.prs_kostenplaats_upper =
UPPER (
recperslid.prs_kostenplaats_nr
)
AND a2.prs_afdeling_key >
a1.prs_afdeling_key);
--v_errorhint :=
-- 'Fout bij wijzigen afdelingsomschrijving ['
-- || recperslid.prs_afdeling_naam
-- || '|'
-- || recperslid.prs_afdeling_omschrijving
-- || ']';
--UPDATE prs_afdeling
-- SET prs_afdeling_omschrijving =
-- COALESCE (recperslid.prs_afdeling_omschrijving,
-- prs_afdeling_omschrijving)
-- WHERE prs_afdeling_key = v_afdeling_key;
--COMMIT;
v_errorhint := 'Fout bij bepalen persoon';
SELECT COUNT ( * ), MAX (prs_perslid_key)
INTO v_count, v_perslid_key
FROM prs_v_aanwezigperslid
WHERE UPPER (prs_perslid_nr) =
UPPER (recperslid.prs_perslid_nr);
IF (v_count > 1)
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errorhint,
'Kan persoon niet 1-duidig bepalen!');
ELSIF (v_count = 0)
THEN
v_errorhint := 'Fout bij toevoegen persoon';
INSERT INTO prs_perslid (
prs_perslid_module,
prs_srtperslid_key,
prs_afdeling_key,
prs_perslid_nr,
prs_perslid_naam,
prs_perslid_tussenvoegsel,
prs_perslid_voorletters,
prs_perslid_voornaam,
prs_perslid_geslacht,
--prs_perslid_telefoonnr,
--prs_perslid_mobiel,
prs_perslid_email,
prs_perslid_oslogin,
prs_perslid_ingangsdatum,
prs_perslid_einddatum,
fac_profiel_key
)
VALUES (
'PRS',
v_srtperslid_key,
v_afdeling_key,
recperslid.prs_perslid_nr,
recperslid.prs_perslid_naam,
recperslid.prs_perslid_tussenvoegsel,
recperslid.prs_perslid_voorletters,
recperslid.prs_perslid_voornaam,
recperslid.prs_perslid_geslacht,
--recperslid.prs_perslid_telefoonnr,
--recperslid.prs_perslid_mobiel,
recperslid.prs_perslid_email,
recperslid.prs_perslid_oslogin,
COALESCE (recperslid.prs_perslid_ingangsdatum,
SYSDATE),
recperslid.prs_perslid_einddatum,
v_profiel_key
)
RETURNING prs_perslid_key INTO v_perslid_key;
ELSE
v_errorhint := 'Fout bij wijzigen persoon';
UPDATE prs_perslid
SET prs_srtperslid_key = v_srtperslid_key,
prs_afdeling_key = v_afdeling_key,
prs_perslid_naam = recperslid.prs_perslid_naam,
prs_perslid_tussenvoegsel =
recperslid.prs_perslid_tussenvoegsel,
prs_perslid_voorletters =
recperslid.prs_perslid_voorletters,
prs_perslid_voornaam = recperslid.prs_perslid_voornaam,
prs_perslid_geslacht = recperslid.prs_perslid_geslacht,
--prs_perslid_telefoonnr =
-- recperslid.prs_perslid_telefoonnr,
--prs_perslid_mobiel = recperslid.prs_perslid_mobiel,
--prs_perslid_email = recperslid.prs_perslid_email,
prs_perslid_email =
COALESCE (prs_perslid_email,
recperslid.prs_perslid_email),
prs_perslid_oslogin =
COALESCE (prs_perslid_oslogin,
recperslid.prs_perslid_oslogin),
prs_perslid_ingangsdatum =
COALESCE (recperslid.prs_perslid_ingangsdatum,
prs_perslid_ingangsdatum),
prs_perslid_einddatum =
recperslid.prs_perslid_einddatum,
fac_profiel_key =
COALESCE (fac_profiel_key, v_profiel_key)
WHERE prs_perslid_key = v_perslid_key;
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',
'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
|| '|'
--|| recwp.alg_verdieping_code
--|| '|'
|| recwp.alg_ruimte_nr
|| ' - ';
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_locatie_key := NULL;
v_gebouw_key := NULL;
--v_verdieping_key := NULL;
v_ruimte_key := NULL;
--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 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 UPPER (alg_verdieping_code) =
-- UPPER (recwp.alg_verdieping_code)
-- AND alg_gebouw_key = v_gebouw_key;
v_errorhint := 'Fout bij bepalen beoogde ruimte in gebouw';
SELECT COUNT ( * )
INTO v_count
FROM alg_v_aanwezigruimte r, alg_verdieping v
WHERE r.alg_ruimte_upper_nr = UPPER (recwp.alg_ruimte_nr)
AND r.alg_verdieping_key = v.alg_verdieping_key
AND v.alg_gebouw_key = v_gebouw_key;
IF (v_count <> 1)
THEN
v_errorhint := 'Fout bij bepalen default ruimte in gebouw';
SELECT r.alg_ruimte_key
INTO v_ruimte_key
FROM alg_v_aanwezigruimte r, alg_verdieping v
WHERE r.alg_ruimte_upper_nr = c_ruimte_nr
AND r.alg_verdieping_key = v.alg_verdieping_key
AND v.alg_gebouw_key = v_gebouw_key;
ELSE
SELECT r.alg_ruimte_key
INTO v_ruimte_key
FROM alg_v_aanwezigruimte r, alg_verdieping v
WHERE r.alg_ruimte_upper_nr = UPPER (recwp.alg_ruimte_nr)
AND r.alg_verdieping_key = v.alg_verdieping_key
AND v.alg_gebouw_key = v_gebouw_key;
END IF;
v_errorhint :=
'Fout bij bepalen of persoon in gebouw een werkplek heeft';
SELECT COUNT ( * )
INTO v_count
FROM prs_v_aanwezigperslidwerkplek pw,
prs_werkplek w,
alg_ruimte r,
alg_verdieping v
WHERE pw.prs_perslid_key = v_perslid_key
AND pw.prs_werkplek_key = w.prs_werkplek_key
AND w.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;
-- Als persoon in gebouw reeds een werkplek heeft en de nieuwe zou
-- in de default ruimte zijn (want ongedefinieerd bij import!), dan
-- wordt onderstaande overgeslagen.
IF (v_count = 0 OR recwp.alg_ruimte_nr != c_ruimte_nr)
THEN
v_errorhint := 'Fout bij bepalen of werkplek is gewijzigd';
SELECT COUNT ( * )
INTO v_count
FROM prs_v_aanwezigperslidwerkplek pw, prs_werkplek w
WHERE pw.prs_perslid_key = v_perslid_key
AND pw.prs_werkplek_key = w.prs_werkplek_key
AND w.prs_alg_ruimte_key = v_ruimte_key;
IF v_count = 0
THEN
v_errorhint :=
'Fout bij verwijderen oude werkplek(ken) in gebouw';
UPDATE prs_perslidwerkplek
SET prs_perslidwerkplek_verwijder = SYSDATE
WHERE prs_perslidwerkplek_key IN
(SELECT pw.prs_perslidwerkplek_key
FROM prs_v_aanwezigperslidwerkplek pw,
prs_werkplek w,
alg_ruimte r,
alg_verdieping v
WHERE pw.prs_perslid_key = v_perslid_key
AND pw.prs_werkplek_key =
w.prs_werkplek_key
AND w.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);
-- Persoon krijgt wp op de hierboven eerder bepaalde ruimte.
v_errorhint := 'Fout bij bepalen vrije werkplek';
SELECT COUNT ( * )
INTO v_count
FROM prs_v_aanwezigwerkplek w
WHERE w.prs_alg_ruimte_key = v_ruimte_key
AND NOT EXISTS
(SELECT 1
FROM prs_v_aanwezigperslidwerkplek 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_v_aanwezigwerkplek w
WHERE w.prs_alg_ruimte_key = v_ruimte_key
AND NOT EXISTS
(SELECT 1
FROM prs_v_aanwezigperslidwerkplek pw
WHERE pw.prs_werkplek_key =
w.prs_werkplek_key);
-- Verwijder (keihard) de mogelijk eerder logisch verwijderde
-- koppeling tussen dezelfde persoon en werkplek!!!
DELETE FROM prs_perslidwerkplek pw
WHERE pw.prs_perslid_key = v_perslid_key
AND pw.prs_werkplek_key = v_wp_key
AND pw.prs_perslidwerkplek_verwijder IS NOT NULL;
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 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 := v_ruimte_nr || '/' || TO_CHAR (v_wp_volgnr);
v_errorhint := 'Fout bij toevoegen nieuwe werkplek';
INSERT INTO prs_werkplek (prs_werkplek_module,
prs_werkplek_volgnr,
prs_werkplek_omschrijving,
prs_alg_ruimte_key)
VALUES ('PRR',
v_wp_volgnr,
v_wp_oms,
v_ruimte_key)
RETURNING prs_werkplek_key INTO v_wp_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;
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;
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 [' || c_groep_upper || ']';
SELECT fac_groep_key
INTO v_groep_key
FROM fac_groep
WHERE fac_groep_upper = c_groep_upper;
v_errorhint :=
'Fout bij koppelen persoon aan groep ['
|| c_groep_upper
|| ']';
INSERT INTO fac_gebruikersgroep (fac_groep_key, prs_perslid_key)
VALUES (v_groep_key, 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;
-- Verwijder ongebruikte functies; deze import bepaalt de functies!
DELETE FROM prs_srtperslid sp
WHERE NOT EXISTS
(SELECT 1
FROM prs_perslid p
WHERE p.prs_srtperslid_key = sp.prs_srtperslid_key);
COMMIT;
ELSE
IF (v_count_prs_import = 0)
THEN
fac.imp_writelog (
p_import_key,
'S',
'Geen nieuw/recent bestand met te importeren personen aangetroffen!',
''
);
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)
|| ']'
);
END IF;
COMMIT;
END IF;
COMMIT;
END allv_update_prs;
/
/* Formatted on 16-3-2010 10:44:04 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW allv_v_reserveringdetails
(
fclt_f_locatie,
hide_f_sort_datum_tijd,
hide_f_sort_ruimte,
hide_f_sort_resnr,
hide_f_sort_categorie,
fclt_f_datum,
resnr,
aantal,
ruimte,
van,
tot,
voorzieningen,
omschrijving,
opmerking
)
AS
SELECT l.alg_locatie_code locatie,
TO_CHAR (res_geg.res_reservering_van, 'YYYY-MM-DD HH24:MI')
sort_datum_tijd,
COALESCE (opstelalg.res_ruimte_nr,
ruimte_geg.alg_ruimte_aanduiding)
sort_ruimte,
rrr.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr
sort_resnr,
res_geg.res_type sort_categorie,
TO_CHAR (res_geg.res_reservering_van, 'DD-MM-YYYY') datum,
(CASE
WHEN res_geg.res_type <> '1R' AND rrr.alg_ruimte_key IS NULL
THEN
''
ELSE
rrr.res_reservering_key
|| '/'
|| rrr.res_rsv_ruimte_volgnr
END)
resnr,
(CASE
WHEN res_geg.res_type <> '1R' AND rrr.alg_ruimte_key IS NULL
THEN
''
ELSE
TO_CHAR (rrr.res_rsv_ruimte_bezoekers)
END)
aantal,
(CASE
WHEN res_geg.res_type <> '1R' AND rrr.alg_ruimte_key IS NULL
THEN
''
ELSE
COALESCE (opstelalg.res_ruimte_nr,
ruimte_geg.alg_ruimte_aanduiding)
END)
ruimte,
TO_CHAR (res_geg.res_reservering_van, 'HH24:MI') van,
TO_CHAR (res_geg.res_reservering_tot, 'HH24:MI') tot,
(CASE
WHEN res_geg.aantal IS NOT NULL
THEN
TO_CHAR (res_geg.aantal)
|| ' * '
|| res_geg.res_voorziening
ELSE
res_geg.res_voorziening
END)
voorzieningen,
(CASE
WHEN res_geg.res_type <> '1R' AND rrr.alg_ruimte_key IS NULL
THEN
''
ELSE
res_rsv_ruimte_omschrijving
END)
omschrijving,
(CASE
WHEN res_geg.res_type <> '1R' AND rrr.alg_ruimte_key IS NULL
THEN
''
ELSE
res_rsv_ruimte_opmerking
END)
opmerking
FROM (SELECT '1R' AS res_type,
rrr.res_rsv_ruimte_key,
rro.res_ruimte_key,
rrr.res_rsv_ruimte_key AS res_item_key,
rrr.res_rsv_ruimte_van AS res_reservering_van,
rrr.res_rsv_ruimte_tot AS res_reservering_tot,
TO_NUMBER (NULL) AS aantal,
ro.res_opstelling_omschrijving AS res_voorziening,
rr.res_discipline_key AS res_ins_discipline_key,
rrr.res_status_bo_key,
TO_NUMBER (NULL) AS res_artikel_key,
rrr.res_rsv_ruimte_prijs AS prijs,
TO_NUMBER (NULL) AS stuks_prijs,
1 AS rsv_ruimte_aantal,
NULL AS artikelnummer,
'' AS artikel_groep,
fac.gettrackinguserkey ('RESAFM',
rrr.res_rsv_ruimte_key)
afmelder_key,
fac.gettrackingdate ('RESAFM', rrr.res_rsv_ruimte_key)
afmeld_datum
FROM res_v_aanwezigrsv_ruimte rrr,
res_ruimte_opstelling rro,
res_ruimte rr,
res_opstelling ro
WHERE rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
AND rro.res_ruimte_key = rr.res_ruimte_key
AND rro.res_opstelling_key = ro.res_opstelling_key
AND rrr.res_rsv_ruimte_van BETWEEN TO_DATE (
TO_CHAR (
SYSDATE,
'yyyymmdd'
),
'yyyymmdd'
)
AND TO_DATE (
TO_CHAR (
SYSDATE + 10,
'yyyymmdd'
),
'yyyymmdd'
)
UNION ALL
SELECT '2V' AS res_type,
rrd.res_rsv_ruimte_key,
(SELECT rro.res_ruimte_key
FROM res_ruimte_opstelling rro
WHERE rrr.res_ruimte_opstel_key =
rro.res_ruimte_opstel_key)
AS res_ruimte_key,
rrd.res_rsv_deel_key AS res_item_key,
rrd.res_rsv_deel_van AS res_reservering_van,
rrd.res_rsv_deel_tot AS res_reservering_tot,
TO_NUMBER (NULL) AS aantal,
ID.ins_deel_omschrijving
|| ' ('
|| COALESCE (rd.res_deel_eenheid, '')
|| ')'
AS res_voorziening,
rd.res_discipline_key AS res_ins_discipline_key,
rrd.res_status_bo_key,
TO_NUMBER (NULL) AS res_artikel_key,
TO_NUMBER (NULL) AS prijs,
rd.res_deel_prijs AS stuks_prijs,
TO_NUMBER (NULL) AS rsv_ruimte_aantal,
NULL AS artikelnummer,
'' AS artikel_groep,
fac.gettrackinguserkey ('RESAFM', rrd.res_rsv_deel_key)
afmelder_key,
fac.gettrackingdate ('RESAFM', rrd.res_rsv_deel_key)
afmeld_datum
FROM res_v_aanwezigrsv_deel rrd,
res_v_aanwezigrsv_ruimte rrr,
res_deel rd,
ins_deel ID
WHERE rrd.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND rrd.res_deel_key = rd.res_deel_key
AND rd.res_ins_deel_key = ID.ins_deel_key
AND rrd.res_rsv_deel_van BETWEEN TO_DATE (
TO_CHAR (
SYSDATE,
'yyyymmdd'
),
'yyyymmdd'
)
AND TO_DATE (
TO_CHAR (
SYSDATE + 10,
'yyyymmdd'
),
'yyyymmdd'
)
UNION ALL
SELECT '3C' AS res_type,
rra.res_rsv_ruimte_key,
(SELECT rro.res_ruimte_key
FROM res_ruimte_opstelling rro
WHERE rrr.res_ruimte_opstel_key =
rro.res_ruimte_opstel_key)
AS res_ruimte_key,
res_rsv_artikel_key AS res_item_key,
rra.res_rsv_artikel_levering AS res_reservering_van,
res_rsv_ruimte_tot AS res_reservering_tot,
rra.res_rsv_artikel_aantal AS aantal,
LTRIM (ra.res_artikel_omschrijving)
|| ' ('
|| COALESCE (ra.res_artikel_eenheid, '')
|| ')'
AS res_voorziening,
ra.res_discipline_key AS res_ins_discipline_key,
rra.res_status_bo_key,
ra.res_artikel_key AS res_artikel_key,
rra.res_rsv_artikel_prijs AS prijs,
ra.res_artikel_prijs / rra.res_rsv_artikel_aantal
AS stuks_prijs,
TO_NUMBER (NULL) AS rsv_ruimte_aantal,
ra.res_artikel_nr AS artikelnummer,
ra.res_artikel_groep AS artikel_groep,
fac.gettrackinguserkey ('RESAFM',
rra.res_rsv_artikel_key)
afmelder_key,
fac.gettrackingdate ('RESAFM', rra.res_rsv_artikel_key)
afmeld_datum
FROM res_v_aanwezigrsv_artikel rra,
res_v_aanwezigrsv_ruimte rrr,
res_artikel ra
WHERE rra.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND rra.res_artikel_key = ra.res_artikel_key
AND rra.res_rsv_artikel_levering BETWEEN TO_DATE (
TO_CHAR (
SYSDATE,
'yyyymmdd'
),
'yyyymmdd'
)
AND TO_DATE (
TO_CHAR (
SYSDATE
+ 10,
'yyyymmdd'
),
'yyyymmdd'
)) res_geg,
res_rsv_ruimte rrr,
alg_v_ruimte_gegevens ruimte_geg,
( SELECT res_ruimte_opstel_key,
res_ruimte_nr,
MIN (alg_ruimte_key) alg_ruimte_key
FROM res_ruimte_opstelling rro,
res_alg_ruimte rar,
res_ruimte rr
WHERE rro.res_ruimte_key = rar.res_ruimte_key
AND rr.res_ruimte_key = rar.res_ruimte_key
AND rar.res_alg_ruimte_verwijder IS NULL
GROUP BY res_ruimte_opstel_key, res_ruimte_nr) opstelalg,
alg_locatie l
WHERE res_geg.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND rrr.res_ruimte_opstel_key =
opstelalg.res_ruimte_opstel_key(+)
AND ruimte_geg.alg_ruimte_key =
COALESCE (rrr.alg_ruimte_key, opstelalg.alg_ruimte_key)
AND l.alg_locatie_key = ruimte_geg.alg_locatie_key
AND res_geg.res_status_bo_key < 5
/
/* Formatted on 16-3-2010 11:01:01 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW allv_v_rap_resweekdetails
(
fclt_f_locatie,
hide_f_sort_datum_tijd,
hide_f_sort_ruimte,
hide_f_sort_resnr,
hide_f_sort_categorie,
fclt_f_week,
dag,
resnr,
aantal,
ruimte,
van,
tot,
voorzieningen,
omschrijving,
opmerking
)
AS
SELECT l.alg_locatie_code locatie,
TO_CHAR (res_geg.res_reservering_van, 'YYYY-MM-DD HH24:MI')
sort_datum_tijd,
COALESCE (opstelalg.res_ruimte_nr,
ruimte_geg.alg_ruimte_aanduiding)
sort_ruimte,
rrr.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr
sort_resnr,
res_geg.res_type sort_categorie,
'Week ' || TO_CHAR (res_geg.res_reservering_van, 'WW') week,
TO_CHAR (res_geg.res_reservering_van, 'DD/MM') dag,
(CASE
WHEN res_geg.res_type <> '1R' AND rrr.alg_ruimte_key IS NULL
THEN
''
ELSE
rrr.res_reservering_key
|| '/'
|| rrr.res_rsv_ruimte_volgnr
END)
resnr,
(CASE
WHEN res_geg.res_type <> '1R' AND rrr.alg_ruimte_key IS NULL
THEN
''
ELSE
TO_CHAR (rrr.res_rsv_ruimte_bezoekers)
END)
aantal,
(CASE
WHEN res_geg.res_type <> '1R' AND rrr.alg_ruimte_key IS NULL
THEN
''
ELSE
COALESCE (opstelalg.res_ruimte_nr,
ruimte_geg.alg_ruimte_aanduiding)
END)
ruimte,
TO_CHAR (res_geg.res_reservering_van, 'HH24:MI') van,
TO_CHAR (res_geg.res_reservering_tot, 'HH24:MI') tot,
(CASE
WHEN res_geg.aantal IS NOT NULL
THEN
TO_CHAR (res_geg.aantal)
|| ' * '
|| res_geg.res_voorziening
ELSE
res_geg.res_voorziening
END)
voorzieningen,
(CASE
WHEN res_geg.res_type <> '1R' AND rrr.alg_ruimte_key IS NULL
THEN
''
ELSE
res_rsv_ruimte_omschrijving
END)
omschrijving,
(CASE
WHEN res_geg.res_type <> '1R' AND rrr.alg_ruimte_key IS NULL
THEN
''
ELSE
res_rsv_ruimte_opmerking
END)
opmerking
FROM (SELECT '1R' AS res_type,
rrr.res_rsv_ruimte_key,
rro.res_ruimte_key,
rrr.res_rsv_ruimte_key AS res_item_key,
rrr.res_rsv_ruimte_van AS res_reservering_van,
rrr.res_rsv_ruimte_tot AS res_reservering_tot,
TO_NUMBER (NULL) AS aantal,
ro.res_opstelling_omschrijving AS res_voorziening,
rr.res_discipline_key AS res_ins_discipline_key,
rrr.res_status_bo_key,
TO_NUMBER (NULL) AS res_artikel_key,
rrr.res_rsv_ruimte_prijs AS prijs,
TO_NUMBER (NULL) AS stuks_prijs,
1 AS rsv_ruimte_aantal,
NULL AS artikelnummer,
'' AS artikel_groep,
fac.gettrackinguserkey ('RESAFM',
rrr.res_rsv_ruimte_key)
afmelder_key,
fac.gettrackingdate ('RESAFM', rrr.res_rsv_ruimte_key)
afmeld_datum
FROM res_v_aanwezigrsv_ruimte rrr,
res_ruimte_opstelling rro,
res_ruimte rr,
res_opstelling ro
WHERE rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key
AND rro.res_ruimte_key = rr.res_ruimte_key
AND rro.res_opstelling_key = ro.res_opstelling_key
AND rrr.res_rsv_ruimte_van BETWEEN SYSDATE - 7
AND SYSDATE + 14
AND TO_CHAR (rrr.res_rsv_ruimte_van, 'WW') IN
(TO_CHAR (SYSDATE, 'WW'),
TO_CHAR (SYSDATE + 7, 'WW'))
UNION ALL
SELECT '2V' AS res_type,
rrd.res_rsv_ruimte_key,
(SELECT rro.res_ruimte_key
FROM res_ruimte_opstelling rro
WHERE rrr.res_ruimte_opstel_key =
rro.res_ruimte_opstel_key)
AS res_ruimte_key,
rrd.res_rsv_deel_key AS res_item_key,
rrd.res_rsv_deel_van AS res_reservering_van,
rrd.res_rsv_deel_tot AS res_reservering_tot,
TO_NUMBER (NULL) AS aantal,
ID.ins_deel_omschrijving
|| ' ('
|| COALESCE (rd.res_deel_eenheid, '')
|| ')'
AS res_voorziening,
rd.res_discipline_key AS res_ins_discipline_key,
rrd.res_status_bo_key,
TO_NUMBER (NULL) AS res_artikel_key,
TO_NUMBER (NULL) AS prijs,
rd.res_deel_prijs AS stuks_prijs,
TO_NUMBER (NULL) AS rsv_ruimte_aantal,
NULL AS artikelnummer,
'' AS artikel_groep,
fac.gettrackinguserkey ('RESAFM', rrd.res_rsv_deel_key)
afmelder_key,
fac.gettrackingdate ('RESAFM', rrd.res_rsv_deel_key)
afmeld_datum
FROM res_v_aanwezigrsv_deel rrd,
res_v_aanwezigrsv_ruimte rrr,
res_deel rd,
ins_deel ID
WHERE rrd.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND rrd.res_deel_key = rd.res_deel_key
AND rd.res_ins_deel_key = ID.ins_deel_key
AND rrd.res_rsv_deel_van BETWEEN SYSDATE - 7
AND SYSDATE + 14
AND TO_CHAR (rrd.res_rsv_deel_van, 'WW') IN
(TO_CHAR (SYSDATE, 'WW'),
TO_CHAR (SYSDATE + 7, 'WW'))
UNION ALL
SELECT '3C' AS res_type,
rra.res_rsv_ruimte_key,
(SELECT rro.res_ruimte_key
FROM res_ruimte_opstelling rro
WHERE rrr.res_ruimte_opstel_key =
rro.res_ruimte_opstel_key)
AS res_ruimte_key,
res_rsv_artikel_key AS res_item_key,
rra.res_rsv_artikel_levering AS res_reservering_van,
res_rsv_ruimte_tot AS res_reservering_tot,
rra.res_rsv_artikel_aantal AS aantal,
LTRIM (ra.res_artikel_omschrijving)
|| ' ('
|| COALESCE (ra.res_artikel_eenheid, '')
|| ')'
AS res_voorziening,
ra.res_discipline_key AS res_ins_discipline_key,
rra.res_status_bo_key,
ra.res_artikel_key AS res_artikel_key,
rra.res_rsv_artikel_prijs AS prijs,
ra.res_artikel_prijs / rra.res_rsv_artikel_aantal
AS stuks_prijs,
TO_NUMBER (NULL) AS rsv_ruimte_aantal,
ra.res_artikel_nr AS artikelnummer,
ra.res_artikel_groep AS artikel_groep,
fac.gettrackinguserkey ('RESAFM',
rra.res_rsv_artikel_key)
afmelder_key,
fac.gettrackingdate ('RESAFM', rra.res_rsv_artikel_key)
afmeld_datum
FROM res_v_aanwezigrsv_artikel rra,
res_v_aanwezigrsv_ruimte rrr,
res_artikel ra
WHERE rra.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND rra.res_artikel_key = ra.res_artikel_key
AND rra.res_rsv_artikel_levering BETWEEN SYSDATE - 7
AND SYSDATE + 14
AND TO_CHAR (rra.res_rsv_artikel_levering, 'WW') IN
(TO_CHAR (SYSDATE, 'WW'),
TO_CHAR (SYSDATE + 7, 'WW'))) res_geg,
res_rsv_ruimte rrr,
alg_v_ruimte_gegevens ruimte_geg,
( SELECT res_ruimte_opstel_key,
res_ruimte_nr,
MIN (alg_ruimte_key) alg_ruimte_key
FROM res_ruimte_opstelling rro,
res_alg_ruimte rar,
res_ruimte rr
WHERE rro.res_ruimte_key = rar.res_ruimte_key
AND rr.res_ruimte_key = rar.res_ruimte_key
AND rar.res_alg_ruimte_verwijder IS NULL
GROUP BY res_ruimte_opstel_key, res_ruimte_nr) opstelalg,
alg_locatie l
WHERE res_geg.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND rrr.res_ruimte_opstel_key =
opstelalg.res_ruimte_opstel_key(+)
AND ruimte_geg.alg_ruimte_key =
COALESCE (rrr.alg_ruimte_key, opstelalg.alg_ruimte_key)
AND l.alg_locatie_key = ruimte_geg.alg_locatie_key
AND res_geg.res_status_bo_key < 5
/
-- Dummy export NACHTWERK!
/* Formatted on 29-11-2010 16:25:20 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW allv_v_export_nachtwerk (RESULT, result_order)
AS
SELECT '', 0
FROM DUAL
WHERE 1 = 0
/
CREATE OR REPLACE PROCEDURE allv_select_nachtwerk (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2)
AS
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count NUMBER;
BEGIN
v_count := 0;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.writelog (p_applname,
'E',
'Proces NACHTWERK afgebroken!',
v_errormsg);
COMMIT;
END allv_select_nachtwerk;
/
/* Formatted on 14-1-2013 12:08:42 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW allv_v_imp_bes_artikel_sync
(
fclt_f_catalogusnaam,
leverancier,
catdatum,
artikelnr,
groep,
omschrijving,
prijs,
eenheid,
picture,
orderaantal,
tax,
duedate,
inkoopprijs,
minimum,
staffeltabel,
wijzigdagen,
annuleerdagen
)
AS
SELECT td.ins_discipline_omschrijving,
b.prs_bedrijf_naam,
TO_CHAR (td.ins_discipline_aanmaak, 'yyyymmdd'),
sd.bes_srtdeel_nr,
sg.bes_srtgroep_omschrijving,
sd.bes_srtdeel_omschrijving,
TO_CHAR (bes.getsrtdeelprijs (sd.bes_srtdeel_key, NULL)),
sd.bes_srtdeel_eenheid,
sd.bes_srtdeel_image,
TO_CHAR (sd.bes_srtdeel_veelvoud),
TO_CHAR (sd.bes_srtdeel_btw),
TO_CHAR (sd.bes_srtdeel_vervaldatum, 'yyyymmdd'),
TO_CHAR (bes.getsrtdeelinkprijs (sd.bes_srtdeel_key, NULL)),
NULL,
bs.bes_staffeltabel_naam,
sd.bes_srtdeel_wijzigdagen,
sd.bes_srtdeel_annuleerdagen
FROM ins_tab_discipline td,
bes_srtgroep sg,
bes_srtdeel sd,
prs_bedrijf b,
bes_staffeltabel bs
WHERE td.ins_discipline_module = 'BES'
AND td.ins_discipline_verwijder IS NULL
AND td.ins_discipline_key = sg.ins_discipline_key
AND sg.bes_srtgroep_verwijder IS NULL
AND sg.bes_srtgroep_key = sd.bes_srtgroep_key
AND sd.bes_srtdeel_verwijder IS NULL
AND sd.prs_bedrijf_key = b.prs_bedrijf_key
AND bs.bes_staffeltabel_key(+) = sd.bes_staffeltabel_key;
/* Formatted on 28-5-2013 10:25:25 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW allv_v_kostensoort
(
kostensoort_key,
kostensoort_ref
)
AS
SELECT prs_kostensoort_key,
prs_kostensoort_oms || ' - ' || prs_kostensoort_opmerking
FROM prs_kostensoort ks;
/* Formatted on 27-5-2013 11:30:24 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW allv_v_rap_ext_orders_exp
(
leveranciernr,
orderdatum,
ordernr,
bedrag,
aantal,
kostensoort,
omschrijving,
kostenplaats
)
AS
SELECT bedr.prs_leverancier_nr,
TO_CHAR (bo.bes_bestelopdr_datum, 'dd-mm-yyyy') orderdatum,
bo.bes_bestelopdr_id ordernr,
ROUND (
SUM( boi.bes_bestelopdr_item_prijs
* boi.bes_bestelopdr_item_aantal
* (COALESCE (100 + bsd.bes_srtdeel_btw, 121) / 100)),
2
)
bedrag, -- Incl. BTW!
1 aantal,
ks.prs_kostensoort_oms kostensoort,
ks.prs_kostensoort_opmerking omschrijving,
kp.prs_kostenplaats_nr kostenplaats
FROM bes_bestelopdr bo,
bes_bestelopdr_item boi,
bes_bestelling_item bi,
bes_srtdeel bsd,
bes_srtgroep bsg,
bes_discipline bd,
bes_disc_params dp,
prs_kostensoort ks,
bes_bestelling b,
--prs_perslid p,
--prs_afdeling a,
prs_kostenplaats kp,
prs_bedrijf bedr
WHERE bo.bes_bestelopdr_status = 6 -- Geleverd (#besteld=#ontv.)
AND bo.bes_bestelopdr_key = boi.bes_bestelopdr_key
AND boi.bes_bestelopdr_item_key = bi.bes_bestelopdr_item_key
AND bi.bes_srtdeel_key = bsd.bes_srtdeel_key
AND bsd.bes_srtgroep_key = bsg.bes_srtgroep_key
AND bsg.ins_discipline_key = bd.ins_discipline_key
AND bd.ins_discipline_key = dp.bes_ins_discipline_key
AND dp.bes_ins_discipline_key_inkoop IS NULL
AND bd.prs_kostensoort_key = ks.prs_kostensoort_key(+)
AND bi.bes_bestelling_key = b.bes_bestelling_key
--AND b.prs_perslid_key = p.prs_perslid_key
--AND p.prs_afdeling_key = a.prs_afdeling_key
AND b.prs_kostenplaats_key = kp.prs_kostenplaats_key
AND bo.prs_bedrijf_key = bedr.prs_bedrijf_key
GROUP BY bedr.prs_leverancier_nr,
TO_CHAR (bo.bes_bestelopdr_datum, 'dd-mm-yyyy'),
bo.bes_bestelopdr_id,
ks.prs_kostensoort_oms,
ks.prs_kostensoort_opmerking,
kp.prs_kostenplaats_nr
UNION ALL
SELECT bedr.prs_leverancier_nr,
TO_CHAR (o.mld_opdr_datumbegin, 'dd-mm-yyyy') orderdatum,
sd.ins_srtdiscipline_prefix
|| o.mld_melding_key
|| '/'
|| o.mld_opdr_bedrijfopdr_volgnr
ordernr,
o.mld_opdr_kosten bedrag, -- Incl. BTW!
1 aantal,
ok.prs_kostensoort_oms kostensoort,
ok.prs_kostensoort_opmerking omschrijving,
kp.prs_kostenplaats_nr kostenplaats
FROM mld_opdr o,
mld_melding m,
mld_stdmelding sm,
mld_discipline md,
ins_srtdiscipline sd,
--prs_kostensoort ks1,
--prs_kostensoort ks2,
--prs_perslid p,
--prs_afdeling a,
prs_kostenplaats kp,
prs_bedrijf bedr,
(SELECT ok.mld_opdr_key,
ks.prs_kostensoort_oms,
ks.prs_kostensoort_opmerking
FROM mld_kenmerkopdr ok, mld_kenmerk k, prs_kostensoort ks
WHERE ok.mld_kenmerkopdr_verwijder IS NULL
AND ok.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_kenmerk_verwijder IS NULL
AND k.mld_srtkenmerk_key = 101
AND fac.safe_to_number (ok.mld_kenmerkopdr_waarde) =
ks.prs_kostensoort_key) ok
WHERE o.mld_statusopdr_key = 6 -- Afgemeld
AND o.mld_melding_key = m.mld_melding_key
AND m.mld_stdmelding_key = sm.mld_stdmelding_key
--AND sm.prs_kostensoort_key = ks1.prs_kostensoort_key(+)
AND sm.mld_ins_discipline_key = md.ins_discipline_key
--AND md.prs_kostensoort_key = ks2.prs_kostensoort_key(+)
AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
AND sd.ins_srtdiscipline_key = 21 -- Bestelling
--AND m.prs_perslid_key = p.prs_perslid_key
--AND p.prs_afdeling_key = a.prs_afdeling_key
AND o.prs_kostenplaats_key = kp.prs_kostenplaats_key
AND o.mld_uitvoerende_keys = bedr.prs_bedrijf_key
AND o.mld_opdr_key = ok.mld_opdr_key(+);
/* Formatted on 27-5-2013 11:30:36 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW allv_v_rap_int_orders_exp
(
boekingsdatum,
bedrag,
kostensoort,
omschrijving,
kostenplaats
)
AS
SELECT --bedr.prs_leverancier_nr,
TO_CHAR (fac.gettrackingdate ('BES2AF', bo.bes_bestelopdr_key),
'dd-mm-yyyy')
boekingsdatum,
--bo.bes_bestelopdr_id ordernr,
SUM (
boi.bes_bestelopdr_item_prijs * boi.bes_bestelopdr_item_aantal
)
bedrag, -- Incl. BTW!
--1 aantal,
ks.prs_kostensoort_oms kostensoort,
ks.prs_kostensoort_opmerking omschrijving,
kp.prs_kostenplaats_nr kostenplaats
FROM bes_bestelopdr bo,
bes_bestelopdr_item boi,
bes_bestelling_item bi,
bes_srtdeel bsd,
bes_srtgroep bsg,
bes_discipline bd,
bes_disc_params dp,
prs_kostensoort ks,
bes_bestelling b,
--prs_perslid p,
--prs_afdeling a,
prs_kostenplaats kp
WHERE bo.bes_bestelopdr_status = 6 -- Geleverd (#besteld=#ontv.)
AND bo.bes_bestelopdr_key = boi.bes_bestelopdr_key
AND boi.bes_bestelopdr_item_key = bi.bes_bestelopdr_item_key
AND bi.bes_srtdeel_key = bsd.bes_srtdeel_key
AND bsd.bes_srtgroep_key = bsg.bes_srtgroep_key
AND bsg.ins_discipline_key = bd.ins_discipline_key
AND bd.ins_discipline_key = dp.bes_ins_discipline_key
AND dp.bes_ins_discipline_key_inkoop IS NOT NULL
AND bd.prs_kostensoort_key = ks.prs_kostensoort_key(+)
AND bi.bes_bestelling_key = b.bes_bestelling_key
--AND b.prs_perslid_key = p.prs_perslid_key
--AND p.prs_afdeling_key = a.prs_afdeling_key
AND b.prs_kostenplaats_key = kp.prs_kostenplaats_key
GROUP BY TO_CHAR (fac.gettrackingdate ('BES2AF', bo.bes_bestelopdr_key),
'dd-mm-yyyy'),
--bo.bes_bestelopdr_id,
ks.prs_kostensoort_oms,
ks.prs_kostensoort_opmerking,
kp.prs_kostenplaats_nr;
/* Formatted on 21-2-2013 12:36:24 (QP5 v5.115.810.9015) */
CREATE OR REPLACE VIEW allv_v_rap_voorraad
(
hide_f_ext_disc_key,
fclt_f_catalogus, -- externe catalogusnaam
fclt_x_actueel,
int_artikel_nr, -- min. intern artikelnr
int_artikel_oms, -- min. interne artikelomschrijving
int_artikel_prijs, -- min. interne artikelprijs
ext_artikel_nr,
ext_artikel_oms,
ext_artikel_prijs,
intern_extern, -- UIT: "normalisatie-factor" naar IN-aantal
min_voorraad,
max_voorraad,
inkoop_geleverd, -- IN: daadwerkelijk geleverd
intern_geleverd, -- UIT: daadwerkelijk geleverd
voorraad,
hide_f_voorraad_gisteren,
inkoop_besteld, -- IN: in bestelling + besteld (nog niet geleverd)
intern_besteld, -- UIT: in bestelling + besteld (nog niet geleverd)
inkoop_gewenst -- IN: tot maximum als onder minimum
)
AS
SELECT extern.dkey,
COALESCE (extern.ins_discipline_omschrijving,
intern.ins_discipline_omschrijving)
catalogus,
DECODE (
COALESCE (intern.besteld, 0),
COALESCE (intern.geleverd, 0),
DECODE (COALESCE (extern.besteld, 0),
COALESCE (extern.geleverd, 0), 'Nee',
'Ja'),
'Ja'
)
actueel,
intern.art_nr intern_nr,
intern.art_oms intern_oms,
TO_CHAR (intern.art_prijs) intern_prijs,
COALESCE (extern.art_nr, intern.match_nr) extern_nr,
extern.art_oms extern_oms,
TO_CHAR (extern.art_prijs) extern_prijs,
COALESCE (intern.depotverdeelpct, 1) intern_extern,
extern.vmin,
extern.vmax,
extern.geleverd extern_geleverd,
intern.geleverd intern_geleverd,
COALESCE (extern.geleverd, 0)
- ROUND (
COALESCE (intern.geleverd, 0)
/ COALESCE (intern.depotverdeelpct, 1),
2
)
voorraad,
COALESCE (extern.geleverd_gisteren, 0)
- ROUND (
COALESCE (intern.geleverd_gisteren, 0)
/ COALESCE (intern.depotverdeelpct, 1),
2
)
voorraad_gisteren,
DECODE (
COALESCE (extern.besteld, 0),
COALESCE (extern.geleverd, 0),
NULL,
COALESCE (extern.besteld, 0) - COALESCE (extern.geleverd, 0)
)
extern_besteld,
DECODE (
COALESCE (intern.besteld, 0),
COALESCE (intern.geleverd, 0),
NULL,
COALESCE (intern.besteld, 0) - COALESCE (intern.geleverd, 0)
)
intern_besteld,
CASE
WHEN (COALESCE (extern.besteld, 0)
- ROUND (
COALESCE (intern.besteld, 0)
/ COALESCE (intern.depotverdeelpct, 1),
2
)) < COALESCE (extern.vmin, 0)
THEN
COALESCE (extern.vmax, 0)
- (COALESCE (extern.besteld, 0)
- ROUND (
COALESCE (intern.besteld, 0)
/ COALESCE (intern.depotverdeelpct, 1),
2
))
ELSE
NULL
END
extern_gewenst
FROM (SELECT bd.ins_discipline_key dkey, -- ext. cataloguskey (INKOOP-key)
bd.ins_discipline_omschrijving, -- ext. catalogusnaam
sd.bes_srtdeel_nr art_nr, -- ext. artikelnr
sd.bes_srtdeel_omschrijving art_oms,
bes.getsrtdeelprijs (sd.bes_srtdeel_key, NULL)
art_prijs,
sd.bes_srtdeel_voorraadmin vmin, -- ext. voorraadmin
sd.bes_srtdeel_voorraadmax vmax, -- ext. voorraadmax
(SELECT SUM (bi.bes_bestelling_item_aantal)
FROM bes_bestelling b, bes_bestelling_item bi
WHERE b.bes_bestelling_status IN
(2, 3, 4, 5, 6, 7)
AND b.bes_bestelling_key =
bi.bes_bestelling_key
AND bi.bes_srtdeel_key =
sd.bes_srtdeel_key)
besteld,
(SELECT SUM (bi.bes_bestelling_item_aantal)
FROM bes_bestelling b, bes_bestelling_item bi
WHERE b.bes_bestelling_status IN (6, 7)
AND b.bes_bestelling_key =
bi.bes_bestelling_key
AND bi.bes_srtdeel_key =
sd.bes_srtdeel_key)
geleverd,
(SELECT SUM (bi.bes_bestelling_item_aantal)
FROM bes_bestelling b, bes_bestelling_item bi
WHERE b.bes_bestelling_datum < TRUNC (SYSDATE)
AND b.bes_bestelling_status IN (6, 7)
AND b.bes_bestelling_key =
bi.bes_bestelling_key
AND bi.bes_srtdeel_key =
sd.bes_srtdeel_key)
geleverd_gisteren
FROM bes_srtdeel sd, -- ook de verwijderde (igv. punchout)!
bes_srtgroep g,
bes_discipline bd,
bes_disc_params dp
WHERE sd.bes_srtgroep_key = g.bes_srtgroep_key
AND g.ins_discipline_key = bd.ins_discipline_key
AND bd.ins_discipline_key =
dp.bes_ins_discipline_key
AND dp.bes_ins_discipline_key_inkoop IS NULL
AND (bd.ins_discipline_key = 1141 -- Weststrate extern
OR bd.ins_discipline_key IN
(SELECT bes_ins_discipline_key_inkoop
FROM bes_disc_params
WHERE bes_ins_discipline_key_inkoop IS NOT NULL)))
extern -- Inkoop artikelen uit externe catalogus!
FULL JOIN
(SELECT intern.dkey, -- ext. cataloguskey (INKOOP-key)
intern.ins_discipline_omschrijving, -- ext. cat.naam
intern.match_nr, -- ext. artikelnr
intern.art_nr, -- min. intern artikelnr
intern.art_oms, -- min. interne artikelomschrijving
intern.art_prijs, -- min. interne artikelprijs
intern.depotverdeelpct,
besteld.aantal besteld,
besteld.geleverd geleverd,
besteld_gisteren.aantal besteld_gisteren,
besteld_gisteren.geleverd geleverd_gisteren
FROM ( SELECT bde.ins_discipline_key dkey,
bde.ins_discipline_omschrijving,
sd.bes_srtdeel_nr match_nr,
MIN(COALESCE (
SUBSTR (
sd.bes_srtdeel_omschrijving,
INSTR (
sd.bes_srtdeel_omschrijving,
'['
)
+ 1,
INSTR (
sd.bes_srtdeel_omschrijving,
']'
)
- 2
),
sd.bes_srtdeel_nr
))
art_nr,
MIN (sd.bes_srtdeel_omschrijving)
art_oms,
MIN(bes.getsrtdeelprijs (
sd.bes_srtdeel_key,
NULL
))
art_prijs,
MAX(DECODE (
sd.bes_srtdeel_depotverdeelpct,
NULL,
1,
0,
1,
sd.bes_srtdeel_depotverdeelpct
))
depotverdeelpct
FROM bes_srtdeel sd,
bes_srtgroep g,
bes_discipline bdi,
bes_disc_params dp,
bes_discipline bde
WHERE sd.bes_srtdeel_verwijder IS NULL
AND sd.bes_srtgroep_key =
g.bes_srtgroep_key
AND g.ins_discipline_key =
bdi.ins_discipline_key
AND bdi.ins_discipline_key =
dp.bes_ins_discipline_key
AND dp.bes_ins_discipline_key_inkoop =
bde.ins_discipline_key
GROUP BY bde.ins_discipline_key,
bde.ins_discipline_omschrijving,
bes_srtdeel_nr) intern
LEFT JOIN
( SELECT dp.bes_ins_discipline_key_inkoop
dkey, -- INKOOP-key
sd.bes_srtdeel_nr match_nr,
SUM (bi.bes_bestelling_item_aantal)
aantal,
SUM(DECODE (
b.bes_bestelling_status,
6,
bi.bes_bestelling_item_aantal,
7,
bi.bes_bestelling_item_aantal,
0
))
geleverd
FROM bes_bestelling b,
bes_bestelling_item bi,
bes_srtdeel sd,
bes_srtgroep g,
bes_discipline bd,
bes_disc_params dp
WHERE b.bes_bestelling_key =
bi.bes_bestelling_key
AND bi.bes_srtdeel_key =
sd.bes_srtdeel_key
AND sd.bes_srtdeel_verwijder IS NULL
AND sd.bes_srtgroep_key =
g.bes_srtgroep_key
AND g.ins_discipline_key =
bd.ins_discipline_key
AND bd.ins_discipline_key =
dp.bes_ins_discipline_key
AND dp.bes_ins_discipline_key_inkoop IS NOT NULL
GROUP BY dp.bes_ins_discipline_key_inkoop,
bes_srtdeel_nr) besteld
ON intern.dkey = besteld.dkey
AND intern.match_nr = besteld.match_nr
LEFT JOIN
( SELECT dp.bes_ins_discipline_key_inkoop dkey, -- INKOOP-key
sd.bes_srtdeel_nr match_nr,
SUM (bi.bes_bestelling_item_aantal)
aantal,
SUM(DECODE (
b.bes_bestelling_status,
6,
bi.bes_bestelling_item_aantal,
7,
bi.bes_bestelling_item_aantal,
0
))
geleverd
FROM bes_bestelling b,
bes_bestelling_item bi,
bes_srtdeel sd,
bes_srtgroep g,
bes_discipline bd,
bes_disc_params dp
WHERE b.bes_bestelling_datum <
TRUNC (SYSDATE)
AND b.bes_bestelling_key =
bi.bes_bestelling_key
AND bi.bes_srtdeel_key =
sd.bes_srtdeel_key
AND sd.bes_srtdeel_verwijder IS NULL
AND sd.bes_srtgroep_key =
g.bes_srtgroep_key
AND g.ins_discipline_key =
bd.ins_discipline_key
AND bd.ins_discipline_key =
dp.bes_ins_discipline_key
AND dp.bes_ins_discipline_key_inkoop IS NOT NULL
GROUP BY dp.bes_ins_discipline_key_inkoop,
bes_srtdeel_nr) besteld_gisteren
ON intern.dkey = besteld_gisteren.dkey
AND intern.match_nr = besteld_gisteren.match_nr)
intern -- Verkoop artikelen uit interne masker-catalogi!
--ON extern.dkey = intern.dkey AND extern.art_nr = intern.match_nr
ON extern.art_nr = intern.match_nr
WHERE intern.art_nr IS NOT NULL;
-- Bevat CUST01/02-notificaties (eind van de dag) naar magazijn-medewerkers
-- dat 1 of meer producten onder de minimale voorraad zitten!
/* Formatted on 10-12-2010 16:34:34 (QP5 v5.115.810.9015) */
/*
CREATE OR REPLACE VIEW allv_v_noti_voorraadreminder
(
code,
sender,
receiver,
text,
KEY,
par1,
par2,
xkey
)
AS
SELECT DISTINCT sn.fac_srtnotificatie_code,
NULL,
gg.prs_perslid_key,
sn.fac_srtnotificatie_oms,
(SELECT fac_usrrap_key
FROM fac_usrrap
WHERE fac_usrrap_view_name = 'allv_v_rap_voorraad'),
NULL,
NULL,
NULL
FROM allv_v_rap_voorraad v,
fac_gebruikersgroep gg,
fac_srtnotificatie sn
WHERE v.voorraad < v.min_voorraad
AND v.hide_f_voorraad_gisteren >= v.min_voorraad
AND v.hide_f_extern_diskey = 561 -- Representatiegeschenken-cat.
AND gg.fac_groep_key = 61 -- COMM/Representatiegeschenken
AND sn.fac_srtnotificatie_code = 'CUST01'
UNION ALL
SELECT DISTINCT sn.fac_srtnotificatie_code,
NULL,
gg.prs_perslid_key,
sn.fac_srtnotificatie_oms,
(SELECT fac_usrrap_key
FROM fac_usrrap
WHERE fac_usrrap_view_name = 'allv_v_rap_voorraad'),
NULL,
NULL,
NULL
FROM allv_v_rap_voorraad v,
fac_gebruikersgroep gg,
fac_srtnotificatie sn
WHERE v.voorraad < v.min_voorraad
AND v.hide_f_voorraad_gisteren >= v.min_voorraad
AND v.hide_f_extern_diskey = 562 -- Bestuursgeschenken-cat.
AND gg.fac_groep_key = 121 -- COMM/Bestuursgeschenken
AND sn.fac_srtnotificatie_code = 'CUST02';
*/
BEGIN fac.registercustversion('ALLV', 5); END;
/
BEGIN adm.systrackscript('$Workfile: allv.sql $', '$Revision$', 0); END;
/
COMMIT;
spool off