Files
Customer/VIAR/viar.sql
Jos Groot Lipman 07048e1222 Sourcesafe $Modtime was hier nog niet vervangen door SVN $Id
svn path=/Customer/trunk/; revision=19960
2013-11-27 09:09:46 +00:00

1510 lines
62 KiB
MySQL

-- Script containing customer specific configuration sql statements for VIAR
-- (c) 2013 SG|facilitor bv
-- $Revision$
-- $Id$
--
-- Support: +31 53 4800700
set echo on
spool VIAR.lst
CREATE OR REPLACE PROCEDURE viar_import_prs (
p_import_key IN NUMBER
)
IS
c_fielddelimitor VARCHAR2 (1) := ';';
-- LET OP: moet idem zijn als declaratie bij viar_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_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);
-- 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 viar_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 - Afdelingscode
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_afdeling_code);
-- 06 - Functieomschrijving van medewerker
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_srtperslid_omschrijving);
-- 07 - Email adres van medewerker
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_email);
-- 08 - Mobiel van medewerker
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_mobiel);
-- 09 - Telnr van medewerker
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_telefoonnr);
-- 10 - Usernaam/login
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_oslogin);
--
v_aanduiding :=
'['
|| v_prs_perslid_oslogin
|| '|'
|| 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_afdeling_code) = 'AFDNR.'
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'
AND UPPER (v_prs_perslid_oslogin) = 'LOGIN'
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 := 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 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';
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, 10);
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 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_prs_srtperslid_omschrijving := 'Onbekend';
fac.imp_writelog
(p_import_key,
'W',
v_aanduiding || 'Functie onbekend',
'Functie heeft lege waarde en is verplicht; wordt door Facilitor op onbekend gezet!'
);
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;
COMMIT;
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
BEGIN
v_errorhint :=
'Fout bij toevoegen regel aan importtabel VIAR_IMP_PRS';
INSERT INTO viar_imp_prs
(prs_perslid_naam,
prs_perslid_tussenvoegsel,
prs_perslid_voorletters,
prs_perslid_voornaam,
prs_afdeling_code,
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
)
VALUES (v_prs_perslid_naam,
v_prs_perslid_tussenvoegsel,
v_prs_perslid_voorletters,
v_prs_perslid_voornaam,
v_prs_afdeling_code,
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
);
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 viar_import_prs;
/
CREATE OR REPLACE PROCEDURE viar_update_prs (
p_import_key IN NUMBER
)
IS
-- LET OP: moet idem zijn als declaratie bij VIAR_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_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! Personen met een functie (srt_perslid) waarvan het oppervlak expliciet op 0 is gezet, betekent een functie die tijdelijk is cq. externe is
-- Dus oppervlak leeg laten of een oppervlak > 0 is een interne. Normailiter is oppervlak gewoon leeg.
-- Via deze regel is het dus mogelijk om een externe of systeemuser aan te maken, die niet via AD wordt aangemaakt, maar handmatig.
-- Je geeft deze persoon een SPECIALE, IN AD NIET BESTAANDE functienaam (bv EXTERN, of SYSTEM, of NOT-AD) met opp=0.
-- Die blijven dan gewoon in het systeem staan en worden NIET verwijderd omdat ze niet in AD export staan.
-- Ook personen met die als loginnaam beginnen met een _ (underscore) worden niet verwijderd.
CURSOR cdelprs
IS
SELECT p.prs_perslid_key, p.prs_perslid_oslogin, p.prs_perslid_naam,
p.prs_perslid_voornaam
FROM prs_v_aanwezigperslid p, prs_srtperslid sp
WHERE p.prs_srtperslid_key = sp.prs_srtperslid_key
AND COALESCE(sp.prs_srtperslid_opp,1) > 0
AND SUBSTR(p.prs_perslid_oslogin,1,1) <> '_'
AND NOT EXISTS (
SELECT 1
FROM viar_imp_prs ip
WHERE UPPER(ip.prs_perslid_oslogin) = UPPER(p.prs_perslid_oslogin));
CURSOR csperslid
IS
SELECT prs_srtperslid_omschrijving
FROM viar_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 viar_imp_prs
GROUP BY UPPER (prs_afdeling_code);
CURSOR cperslid
IS
SELECT *
FROM viar_imp_prs;
CURSOR cwp
IS
SELECT p.*, ip.alg_locatie_code, ip.alg_gebouw_code
FROM viar_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_oslogin) = UPPER (p.prs_perslid_oslogin);
-- Alle actieve personen met personeelsnummer (ie. de import-doelgroep) zonder een werkplek
CURSOR cnowp
IS
SELECT p.prs_perslid_key, p.prs_perslid_oslogin, p.prs_perslid_naam,
p.prs_perslid_voornaam
FROM prs_v_aanwezigperslid p, prs_srtperslid sp
WHERE p.prs_srtperslid_key = sp.prs_srtperslid_key
AND COALESCE(sp.prs_srtperslid_opp,1) > 0
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 vanuit AD (ie. de import-doelgroep) niet in een groep
CURSOR cnogroup
IS
SELECT p.prs_perslid_key, p.prs_perslid_oslogin, p.prs_perslid_naam,
p.prs_perslid_voornaam
FROM prs_v_aanwezigperslid p, prs_srtperslid sp
WHERE p.prs_srtperslid_key = sp.prs_srtperslid_key
AND COALESCE(sp.prs_srtperslid_opp,1) > 0
AND NOT EXISTS (SELECT 1
FROM fac_gebruikersgroep g
WHERE g.prs_perslid_key = p.prs_perslid_key);
BEGIN
-- Alle niet verwijderde personen die via AD zijn geimporteerd.
SELECT DECODE (COUNT (*), 0, 1, COUNT (*))
INTO v_count_prs_actual
FROM prs_perslid p, prs_srtperslid sp
WHERE p.prs_srtperslid_key = sp.prs_srtperslid_key
AND COALESCE(sp.prs_srtperslid_opp,1) > 0
AND p.prs_perslid_verwijder IS NULL
AND (prs_perslid_oslogin IS NULL OR SUBSTR(prs_perslid_oslogin,1,1) <> '_');
-- Alle personen die via AD zijn geimporteerd en nu weer in AD worden aangeboden.
SELECT DECODE (COUNT (*), 0, 1, COUNT (*))
INTO v_count_prs_import
FROM prs_perslid p, viar_imp_prs ip, prs_srtperslid sp
WHERE p.prs_srtperslid_key = sp.prs_srtperslid_key
AND COALESCE(sp.prs_srtperslid_opp,1) > 0
AND p.prs_perslid_verwijder IS NULL
AND UPPER(p.prs_perslid_oslogin) = UPPER(ip.prs_perslid_oslogin);
-- Als alle personen
IF ( v_count_prs_actual = 1 OR (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_oslogin
|| '] 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_oslogin
|| '] 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_oslogin
|| '] 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 recperslid IN cperslid
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_aanduiding :=
recperslid.prs_perslid_oslogin
|| '|'
|| recperslid.prs_perslid_naam
|| '|'
|| recperslid.prs_perslid_voornaam
|| ' - '
|| recperslid.prs_afdeling_code
|| ' - ';
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);
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_oslogin) = UPPER (recperslid.prs_perslid_oslogin);
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_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_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).
-- 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_oslogin = COALESCE (recperslid.prs_perslid_oslogin, prs_perslid_oslogin)
WHERE prs_perslid_key = v_perslid_key;
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_oslogin
|| '|'
|| 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_oslogin) = UPPER (recwp.prs_perslid_oslogin);
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_oslogin
|| '] 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_oslogin
|| '|'
|| 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 viar_update_prs;
/
---------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------
--- MIPP MANINFO RAPPORTAGE MIPP MANINFO RAPPORTAGE MIPP MANINFO RAPPORTAGE ---
---------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------
-- ins_srtdiscipline_key = 1 is meldingtype 'MIPP'.
-- mld_typeopdr_key (+) = 41 is de 'MIPP-afhandeling' opdrachttype, en geen andere opdrachttype.
-- km1.mld_kenmerk_key (+) = 101 is de omschrijving (wat is er gebeurd) van de MIPP-melding.
-- ko1.mld_kenmerk_key (+) = 35 is of het een incident of bijna incident is.
-- ko2.mld_kenmerk_key (+) = 38 is de risico klasse.
-- Let op: kolom fclt_key (volgend op fclt_lopend) is dezelfde, alleen deze kolomnaam moet zo heten ivm usrrap vanuit cust.xsl.
CREATE OR REPLACE VIEW viar_v_rap_mld_mipp
(
fclt_f_meldingnr,
hide_f_ins_discipline_key,
hide_f_fclt_f_vakgroep,
hide_f_mld_stdmelding_key,
fclt_f_melding,
mld_melding_omschrijving,
hide_f_mld_melding_opmerking,
fclt_f_locatie,
fclt_f_gebouw,
fclt_f_verdieping,
ruimte,
fclt_f_ruimtesoort,
fclt_f_jaar,
fclt_f_halfjaar,
fclt_f_kwartaal,
fclt_f_maand,
fclt_f_ingevoerd,
hide_f_operationele_einddatum,
hide_f_sla_einddatum,
hide_f_operationeel_te_laat,
hide_f_sla_te_laat,
hide_f_operationeel_daguurmin,
fclt_f_lopend,
fclt_f_status,
hide_f_status_code,
afmeld_datum,
fclt_f_afgemeld,
afmeld_datum_time,
afgemeld_door,
ingevoerd_door,
fclt_f_sector,
fclt_f_afdeling,
fclt_f_uitvoerende,
fclt_f_incident,
fclt_f_risicoklasse,
fclt_f_baxter,
fclt_f_niet_baxter,
fclt_f_voorraadmedicatie,
fclt_f_overig
)
AS SELECT
to_char(m.mld_melding_key),
d.ins_discipline_key,
d.ins_discipline_omschrijving,
std.mld_stdmelding_key,
std.mld_stdmelding_omschrijving,
km1.mld_kenmerkmelding_waarde as melding_omschrijving,
m.mld_melding_opmerking,
l.alg_locatie_code || '-' || l.alg_locatie_omschrijving,
g.alg_gebouw_naam,
to_char(v.alg_verdieping_volgnr),
r.alg_ruimte_nr,
sr.alg_srtruimte_omschrijving,
to_char(m.mld_melding_datum,'YYYY'),
to_char(decode(to_char(m.mld_melding_datum,'Q'),1,1,2,1,3,2,4,2)),
'Q' || to_char(m.mld_melding_datum,'Q'),
to_char(m.mld_melding_datum,'MM'),
to_char(m.mld_melding_datum,'YYYY-MM-DD'),
m.mld_melding_einddatum,
m.mld_melding_einddatum_std,
CASE
WHEN m.mld_melding_einddatum < COALESCE(fac.gettrackingdate('MLDAFM',m.mld_melding_key),fac.gettrackingdate('MLDREJ',m.mld_melding_key), SYSDATE) THEN 1
ELSE 0
END,
CASE
WHEN m.mld_melding_einddatum_std < COALESCE(fac.gettrackingdate('MLDAFM',m.mld_melding_key),fac.gettrackingdate('MLDREJ',m.mld_melding_key), SYSDATE) THEN 1
ELSE 0
END,
TO_CHAR (FLOOR (COALESCE(fac.gettrackingdate('MLDAFM',m.mld_melding_key),fac.gettrackingdate('MLDREJ',m.mld_melding_key), SYSDATE)- m.mld_melding_datum)) || 'd '
|| TO_CHAR (
MOD (FLOOR ( (COALESCE(fac.gettrackingdate('MLDAFM',m.mld_melding_key),fac.gettrackingdate('MLDREJ',m.mld_melding_key), SYSDATE) - m.mld_melding_datum) * 24), 24)
)
|| 'u '
|| TO_CHAR(MOD (
ROUND ( (COALESCE(fac.gettrackingdate('MLDAFM',m.mld_melding_key),fac.gettrackingdate('MLDREJ',m.mld_melding_key), SYSDATE) - m.mld_melding_datum) * 24 * 60,
0),
60
))
|| 'm' dagenuurmin,
CASE
WHEN ms.mld_statuses_key IN (0, 2, 3, 4, 7, 99) THEN 'Open'
ELSE 'Afgesloten'
END,
ms.mld_statuses_omschrijving,
ms.mld_statuses_key,
fac.gettrackingdate('MLDAFM',m.mld_melding_key),
COALESCE(to_char(fac.gettrackingdate('MLDAFM',m.mld_melding_key),'YYYY-MM-DD'),'Niet afgemeld'),
to_char(fac.gettrackingdate('MLDAFM',m.mld_melding_key),'DD-MM-YYYY HH24:MI'),
p2.prs_perslid_naam|| NVL2( p2.prs_perslid_voorletters, ', ' || p2.prs_perslid_voorletters, '')|| NVL2( p2.prs_perslid_tussenvoegsel, ' ' || p2.prs_perslid_tussenvoegsel, '')|| NVL2( p2.prs_perslid_voornaam, ' (' || p2.prs_perslid_voornaam || ')', '') afgemeld_door,
p.prs_perslid_naam|| NVL2( p.prs_perslid_voorletters, ', ' || p.prs_perslid_voorletters, '')|| NVL2( p.prs_perslid_tussenvoegsel, ' ' || p.prs_perslid_tussenvoegsel, '')|| NVL2( p.prs_perslid_voornaam, ' (' || p.prs_perslid_voornaam || ')', '') ingevoerd_door,
COALESCE(sector.prs_afdeling_naam,afd.prs_afdeling_naam || '-' || afd.prs_afdeling_omschrijving),
DECODE(sector.prs_afdeling_naam, NULL, NULL, afd.prs_afdeling_naam || '-' || afd.prs_afdeling_omschrijving ),
u.prs_perslid_naam|| NVL2( u.prs_perslid_voorletters, ', ' || u.prs_perslid_voorletters, '')|| NVL2( u.prs_perslid_tussenvoegsel, ' ' || u.prs_perslid_tussenvoegsel, '')|| NVL2( u.prs_perslid_voornaam, ' (' || u.prs_perslid_voornaam || ')', '') uitvoerende,
(SELECT ud.fac_usrdata_omschr
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 21
AND ud.fac_usrdata_key = fac.safe_to_number(ko1.mld_kenmerkopdr_waarde)) bijna_incident,
(SELECT ud.fac_usrdata_omschr
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 24
AND ud.fac_usrdata_key = fac.safe_to_number(ko2.mld_kenmerkopdr_waarde)) risico_klasse,
(SELECT ud.fac_usrdata_omschr
FROM fac_usrdata ud, mld_kenmerkmelding km
WHERE ud.fac_usrtab_key = 2
AND ud.fac_usrdata_key = fac.safe_to_number(km.mld_kenmerkmelding_waarde)
AND KM.MLD_KENMERK_KEY = 30
AND KM.MLD_KENMERKMELDING_VERWIJDER IS NULL
AND KM.MLD_MELDING_KEY = m.mld_melding_key
) baxter,
(SELECT ud.fac_usrdata_omschr
FROM fac_usrdata ud, mld_kenmerkmelding km
WHERE ud.fac_usrtab_key = 3
AND ud.fac_usrdata_key = fac.safe_to_number(km.mld_kenmerkmelding_waarde)
AND KM.MLD_KENMERK_KEY = 31
AND KM.MLD_KENMERKMELDING_VERWIJDER IS NULL
AND KM.MLD_MELDING_KEY = m.mld_melding_key
) niet_baxter,
(SELECT ud.fac_usrdata_omschr
FROM fac_usrdata ud, mld_kenmerkmelding km
WHERE ud.fac_usrtab_key = 4
AND ud.fac_usrdata_key = fac.safe_to_number(km.mld_kenmerkmelding_waarde)
AND KM.MLD_KENMERK_KEY = 32
AND KM.MLD_KENMERKMELDING_VERWIJDER IS NULL
AND KM.MLD_MELDING_KEY = m.mld_melding_key
) voorraadmedicatie,
(SELECT ud.fac_usrdata_omschr
FROM fac_usrdata ud, mld_kenmerkmelding km
WHERE ud.fac_usrtab_key = 5
AND ud.fac_usrdata_key = fac.safe_to_number(km.mld_kenmerkmelding_waarde)
AND KM.MLD_KENMERK_KEY = 33
AND KM.MLD_KENMERKMELDING_VERWIJDER IS NULL
AND KM.MLD_MELDING_KEY = m.mld_melding_key
) overig
FROM mld_melding m, mld_statuses ms, mld_stdmelding std, ins_tab_discipline d, ins_srtdiscipline sd,
mld_opdr o, prs_perslid u,
mld_kenmerkmelding km1,
mld_kenmerkopdr ko1,mld_kenmerkopdr ko2,
prs_perslid p, prs_afdeling sector, prs_afdeling afd, prs_perslid p2,
alg_ruimte r, alg_srtruimte sr, alg_verdieping v, alg_gebouw g, alg_locatie l
WHERE m.prs_perslid_key = p.prs_perslid_key
AND p.prs_afdeling_key = afd.prs_afdeling_key
AND afd.prs_afdeling_parentkey = sector.prs_afdeling_key (+)
AND m.mld_alg_onroerendgoed_keys = r.alg_ruimte_key
AND r.alg_srtruimte_key = sr.alg_srtruimte_key
AND r.alg_verdieping_key = v.alg_verdieping_key
AND v.alg_gebouw_key = g.alg_gebouw_key
AND g.alg_locatie_key = l.alg_locatie_key
AND fac.gettrackinguserkey('MLDAFM',m.mld_melding_key) = p2.prs_perslid_key(+)
AND ms.mld_statuses_key = mld_melding_status
AND m.mld_melding_key = km1.mld_melding_key (+)
AND km1.mld_kenmerk_key (+) = 101
AND m.mld_melding_key = o.mld_melding_key (+)
AND o.mld_uitvoerende_keys = u.prs_perslid_key (+)
AND o.mld_opdr_key = ko1.mld_opdr_key (+)
AND ko1.mld_kenmerk_key (+) = 35
AND o.mld_opdr_key = ko2.mld_opdr_key (+)
AND ko2.mld_kenmerk_key (+) = 38
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = d.ins_discipline_key
AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
AND sd.ins_srtdiscipline_key = 1
AND o.mld_typeopdr_key (+) = 41
AND COALESCE(o.mld_opdr_key,-1) = ( SELECT COALESCE(max(mld_opdr_key),-1)
FROM mld_opdr
WHERE mld_melding_key = m.mld_melding_key);
----- Notificatie JOB voor MIPP-commisie
---SELECT m.mld_alg_locatie_key, p.prs_afdeling_key, stdm.mld_ins_discipline_key, m.mld_melding_spoed
--- FROM mld_melding m, prs_perslid p, mld_stdmelding stdm
--- WHERE m.prs_perslid_key = p.prs_perslid_key
--- AND stdm.mld_stdmelding_key = m.mld_stdmelding_key
--- AND (mld_melding_status = 2 OR mld_melding_status IS NULL)
--- AND mld_melding_key = 2;
---
---
---SELECT g.prs_perslid_key, p.prs_perslid_naam
--- FROM fac_v_webgebruiker g, fac_functie f, prs_perslid p
--- WHERE g.fac_functie_key = f.fac_functie_key
--- AND g.ins_discipline_key = 21
--- AND g.prs_perslid_key = p.prs_perslid_key
--- AND (g.fac_gebruiker_prs_level_write = -1
--- OR (g.fac_gebruiker_prs_level_write < 9
--- AND p.prs_afdeling_key IN
--- (SELECT prs_afdeling_key
--- FROM prs_v_afdeling_familie a
--- WHERE a.prs_afdeling_elder_key IN
--- (SELECT aa.prs_afdeling_elder_key
--- FROM prs_v_afdeling_familie aa
--- WHERE aa.prs_afdeling_key = 24
--- AND aa.niveau = g.fac_gebruiker_prs_level_write))))
--- -- in ASP: if (params.loc_key>0)
---
--- AND fac_functie_code = 'WEB_MLDBOF'
---;
----- Notificatie JOB voor MIPP-afhandelaar (Leidinggevenden van FE die MIPP incident heeft gemeld)
---SELECT m.mld_alg_locatie_key, p.prs_afdeling_key, stdm.mld_ins_discipline_key, m.mld_melding_spoed
--- FROM mld_melding m, prs_perslid p, mld_stdmelding stdm
--- WHERE m.prs_perslid_key = p.prs_perslid_key
--- AND stdm.mld_stdmelding_key = m.mld_stdmelding_key
--- AND (mld_melding_status = 2 OR mld_melding_status IS NULL)
--- AND mld_melding_key = 3;
---
---
---SELECT g.prs_perslid_key, p.prs_perslid_naam
--- FROM fac_v_webgebruiker g, fac_functie f, prs_perslid p
--- WHERE g.fac_functie_key = f.fac_functie_key
--- AND g.ins_discipline_key = 41
--- AND g.prs_perslid_key = p.prs_perslid_key
--- AND (g.fac_gebruiker_prs_level_write = -1
--- OR (g.fac_gebruiker_prs_level_write < 9
--- AND p.prs_afdeling_key IN
--- (SELECT prs_afdeling_key
--- FROM prs_v_afdeling_familie a
--- WHERE a.prs_afdeling_elder_key IN
--- (SELECT aa.prs_afdeling_elder_key
--- FROM prs_v_afdeling_familie aa
--- WHERE aa.prs_afdeling_key = 24
--- AND aa.niveau = g.fac_gebruiker_prs_level_write))))
--- -- in ASP: if (params.loc_key>0)
---
--- AND fac_functie_code = 'WEB_MLDBOF'
---;
BEGIN adm.systrackscript('$Workfile: viar.sql $', '$Revision$', 0); END;
/
BEGIN fac.registercustversion('VIAR', 1); END;
/
commit;
spool off