Files
Customer/GVBA/gvba.sql
Arthur Egberink 7cb0e95a74 GVBA#64318 -- Verlengen mandaten en vrijstellingen voor 2021
svn path=/Customer/trunk/; revision=48838
2020-11-17 08:49:50 +00:00

3480 lines
129 KiB
MySQL

--
-- $Id$
--
-- Script containing customer specific configuration sql statements for gvba: Gemeentelijk vervoersbedrijf Amsterdam
DEFINE thisfile = 'GVBA.SQL'
DEFINE dbuser = '^GVBA'
SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
WHENEVER SQLERROR EXIT;
SELECT adm.scriptspoolfile('&dbuser', '&thisfile') AS fcltlogfile FROM DUAL;
WHENEVER SQLERROR CONTINUE;
SPOOL &fcltlogfile
SET DEFINE OFF
------ payload begin ------
CREATE OR REPLACE PACKAGE gvba AS
-- Hulpfuncties en procedures:
--
PROCEDURE to_log (p_import_key IN NUMBER, p_do_log BOOLEAN, p_message VARCHAR2, p_proces VARCHAR2);
--
--
/* SELECT gvba_p_ps.get_prs_kenmerk_key('P','LAATSTE PS IMPORT') FROM dual; */
FUNCTION get_prs_kenmerk_key( p_kenmerk_niveau IN VARCHAR2, p_kenmerk_omschrijving VARCHAR2) RETURN NUMBER;
--
--
/* Opvragen prs_kostenplaats_key. Indien onbekend retourneer dan -1 */
FUNCTION get_prs_kostenplaats_key(p_kostenplaats_nr IN VARCHAR2) RETURN NUMBER;
--
/*
BEGIN gvba.set_prs_kostenplaats_key('testing'); END;
SELECT gvba.get_prs_kostenplaats_key('tesTing') FROM dual;
*/
/* Aanmaken p_kostenplaats_nr indien onbekend */
PROCEDURE set_prs_kostenplaats_key(p_kostenplaats_nr IN VARCHAR2);
--
--
/* Opvragen prs_kostenplaats_key. Indien onbekend retourneer dan -1 */
FUNCTION get_prs_perslidkp_key(p_prs_perslid_key IN NUMBER, p_kostenplaats_key IN NUMBER) RETURN NUMBER;
--
/*
BEGIN gvba.set_prs_perslidkp_key(4,21); END;
SELECT gvba.get_prs_perslidkp_key(4,21) FROM dual;
*/
/* Aanmaken p_kostenplaats_nr indien onbekend */
PROCEDURE set_prs_perslidkp_key(p_prs_perslid_key IN NUMBER, p_kostenplaats_key IN NUMBER);
--
--
/* Opvragen functie. Indien onbekend retourneer dan -1 */
FUNCTION get_prs_srtperslid_key(p_prs_srtperslid_omschrijving IN VARCHAR2) RETURN NUMBER;
--
/*
BEGIN gvba.set_prs_srtperslid_key('Onbekend'); END;
SELECT gvba.get_prs_srtperslid_key('Onbekend') FROM dual;
*/
/* Aanmaken p_prs_srtperslid_omschrijving indien onbekend */
PROCEDURE set_prs_srtperslid_key(p_prs_srtperslid_omschrijving IN VARCHAR2);
--
--
/* Opvragen functie. Indien onbekend retourneer dan -1 */
FUNCTION get_prs_afdeling_key(p_prs_afdeling_naam IN VARCHAR2) RETURN NUMBER;
--
--
/* Opvragen functie. Indien onbekend retourneer dan -1 */
FUNCTION get_prs_afdeling_parent_key(p_prs_afdeling_naam IN VARCHAR2) RETURN NUMBER;
--
--
/* Opvragen functie. Indien onbekend retourneer dan -1 */
FUNCTION get_prs_afdeling_bedrijf_key(p_prs_afdeling_naam IN VARCHAR2) RETURN NUMBER;
--
--
/* Opvragen functie. Indien onbekend retourneer dan -1 */
FUNCTION get_prs_afdeling_max_volgnr(p_prs_afdeling_naam IN VARCHAR2) RETURN NUMBER;
--
--
/* Opvragen functie. Indien onbekend retourneer dan -1 */
FUNCTION get_prs_afdeling_key_volgnr(p_prs_afdeling_naam IN VARCHAR2, p_prs_kostenplaats_nr IN VARCHAR2) RETURN NUMBER;
--
--
/* Aanmaken p_prs_srtperslid_omschrijving indien onbekend */
PROCEDURE set_prs_afdeling_key_volgnr(p_prs_afdeling_naam IN VARCHAR2, p_prs_kostenplaats_nr IN VARCHAR2);
--
--
/* gvba_p_ps.set_prs_ckenmerk_waarde(10225,11982,'Onbekend'); */
PROCEDURE set_prs_ckenmerk_waarde( p_kenmerk_key NUMBER, p_link_key NUMBER, p_kenmerk_waarde VARCHAR2);
--
FUNCTION get_prs_ckenmerk_waarde( p_kenmerk_key NUMBER, p_link_key NUMBER) RETURN VARCHAR2;
--
/* gvba_p_ps.set_prs_dkenmerk_waarde(1024,11982,SYSDATE+1); */
PROCEDURE set_prs_dkenmerk_waarde( p_kenmerk_key NUMBER, p_link_key NUMBER, p_kenmerk_waarde DATE);
--
--
/* Opvragen functie. Indien onbekend retourneer dan -1 */
FUNCTION get_gvba_ruimte_key(p_ruimte IN VARCHAR2, p_locatie IN VARCHAR2) RETURN NUMBER;
--
--
/* gvba_p_ps.set_prs_ckenmerk_waarde(10225,11982,'Onbekend'); */
PROCEDURE set_prs_werkplek_key( p_ruimte_key NUMBER, p_werkplek_virtueel NUMBER);
--
FUNCTION get_prs_werkplek_key( p_ruimte_key NUMBER, p_werkplek_virtueel NUMBER) RETURN NUMBER;
PROCEDURE set_mandaat_vrijstelling;
PROCEDURE verleng_mandaat_vrijstelling (p_deel_key NUMBER, p_user_key NUMBER, p_jaren NUMBER);
END gvba;
/
CREATE OR REPLACE PACKAGE BODY gvba AS
--
-- to_log
PROCEDURE to_log (p_import_key IN NUMBER, p_do_log BOOLEAN, p_message VARCHAR2, p_proces VARCHAR2) IS
v_dummy VARCHAR2(16);
BEGIN
IF p_do_log THEN
fac.imp_writelog (p_import_key,
'I',
p_message,
''
);
COMMIT; -- to commit logging
END IF;
EXCEPTION
WHEN OTHERS
THEN v_dummy := 'Dummy opdracht';
END to_log;
--
--
FUNCTION get_prs_kenmerk_key( p_kenmerk_niveau IN VARCHAR2, p_kenmerk_omschrijving VARCHAR2) RETURN NUMBER
IS
-- variabelen
v_dummy VARCHAR2(16);
v_count NUMBER(10);
v_kenmerk_key NUMBER(10);
BEGIN
SELECT MAX(k.prs_kenmerk_key), COUNT(*)
INTO v_kenmerk_key, v_count
FROM PRS_KENMERK k
WHERE trim(k.prs_kenmerk_upper) = UPPER(trim(p_kenmerk_omschrijving))
AND k.prs_kenmerk_niveau = p_kenmerk_niveau
AND k.prs_kenmerk_verwijder IS NULL;
IF (v_count <> 1) THEN
v_kenmerk_key := -1;
END IF;
RETURN v_kenmerk_key;
EXCEPTION
WHEN OTHERS
THEN RETURN -1;
END get_prs_kenmerk_key;
--
--
FUNCTION get_prs_kostenplaats_key(p_kostenplaats_nr IN VARCHAR2) RETURN NUMBER
IS
-- variabelen
v_dummy VARCHAR2(16);
v_count NUMBER(10);
v_kostenplaats_key NUMBER(10);
BEGIN
SELECT NVL(MAX(prs_kostenplaats_key),-1), COUNT(*)
INTO v_kostenplaats_key, v_count
FROM prs_kostenplaats
WHERE prs_kostenplaats_verwijder is null
AND prs_kostenplaats_upper = upper(substr(p_kostenplaats_nr,1,30));
RETURN v_kostenplaats_key;
EXCEPTION
WHEN OTHERS
THEN RETURN -1;
END get_prs_kostenplaats_key;
--
--
PROCEDURE set_prs_kostenplaats_key(p_kostenplaats_nr IN VARCHAR2)
IS
-- variabelen
v_dummy VARCHAR2(16);
v_count NUMBER(10);
v_kostenplaats_key NUMBER(10);
BEGIN
v_kostenplaats_key := get_prs_kostenplaats_key(p_kostenplaats_nr);
IF (v_kostenplaats_key = -1) THEN
SELECT prs_s_prs_kostenplaats_key.NEXTVAL INTO v_kostenplaats_key FROM DUAL;
INSERT INTO PRS_KOSTENPLAATS
(prs_kostenplaats_key
,prs_kostenplaats_nr
,prs_kostenplaats_omschrijving
,prs_kostenplaats_module
)
VALUES
(v_kostenplaats_key
,SUBSTR(p_kostenplaats_nr,1,30)
,''
,'PRS'
);
COMMIT;
END IF;
EXCEPTION
WHEN OTHERS
THEN v_kostenplaats_key := -1;
END set_prs_kostenplaats_key;
--
--
FUNCTION get_prs_perslidkp_key(p_prs_perslid_key IN NUMBER, p_kostenplaats_key IN NUMBER) RETURN NUMBER
IS
-- variabelen
v_dummy VARCHAR2(16);
v_count NUMBER(10);
v_perslidkostenplaats_key NUMBER(10);
BEGIN
SELECT NVL(MAX(prs_perslidkostenplaats_key),-1), COUNT(*)
INTO v_perslidkostenplaats_key, v_count
FROM prs_perslidkostenplaats
WHERE prs_perslid_key = p_prs_perslid_key
AND prs_kostenplaats_key = p_kostenplaats_key;
RETURN v_perslidkostenplaats_key;
EXCEPTION
WHEN OTHERS
THEN RETURN -1;
END get_prs_perslidkp_key;
--
--
PROCEDURE set_prs_perslidkp_key(p_prs_perslid_key IN NUMBER, p_kostenplaats_key IN NUMBER)
IS
-- variabelen
v_dummy VARCHAR2(16);
v_count NUMBER(10);
v_perslidkostenplaats_key NUMBER(10);
BEGIN
v_perslidkostenplaats_key := get_prs_perslidkp_key(p_kostenplaats_key,p_prs_perslid_key);
IF (v_perslidkostenplaats_key = -1) THEN
-- 1 kostenplaatscombinatie
DELETE FROM PRS_PERSLIDKOSTENPLAATS
WHERE prs_perslid_key = p_prs_perslid_key;
SELECT prs_s_prs_perslidkp_key.nextval INTO v_perslidkostenplaats_key FROM DUAL;
INSERT INTO PRS_PERSLIDKOSTENPLAATS
(prs_perslid_key
,prs_kostenplaats_key
,prs_perslidkostenplaats_boeken
,prs_perslidkostenplaats_inzage)
VALUES
(p_prs_perslid_key
,p_kostenplaats_key
,1
,1
);
COMMIT;
END IF;
EXCEPTION
WHEN OTHERS
THEN v_perslidkostenplaats_key := -1;
END set_prs_perslidkp_key;
--
--
FUNCTION get_prs_srtperslid_key(p_prs_srtperslid_omschrijving IN VARCHAR2) RETURN NUMBER
IS
-- variabelen
v_dummy VARCHAR2(16);
v_count NUMBER(10);
v_srtperslid_key NUMBER(10);
BEGIN
SELECT NVL(MAX(prs_srtperslid_key),-1), COUNT(*)
INTO v_srtperslid_key, v_count
FROM prs_srtperslid
WHERE prs_srtperslid_verwijder IS NULL
AND prs_srtperslid_upper = upper(p_prs_srtperslid_omschrijving);
RETURN v_srtperslid_key;
EXCEPTION
WHEN OTHERS
THEN RETURN -1;
END get_prs_srtperslid_key;
--
--
PROCEDURE set_prs_srtperslid_key(p_prs_srtperslid_omschrijving IN VARCHAR2)
IS
-- variabelen
v_dummy VARCHAR2(16);
v_count NUMBER(10);
v_srtperslid_key NUMBER(10);
BEGIN
v_srtperslid_key := get_prs_srtperslid_key(p_prs_srtperslid_omschrijving);
IF (v_srtperslid_key = -1) THEN
SELECT prs_s_prs_alluitvoerende_keys.nextval INTO v_srtperslid_key FROM DUAL;
INSERT INTO PRS_SRTPERSLID
(prs_srtperslid_omschrijving
)
VALUES
(p_prs_srtperslid_omschrijving
);
COMMIT;
END IF;
EXCEPTION
WHEN OTHERS
THEN v_srtperslid_key := -1;
END set_prs_srtperslid_key;
--
--
FUNCTION get_prs_afdeling_key(p_prs_afdeling_naam IN VARCHAR2) RETURN NUMBER
IS
-- variabelen
v_dummy VARCHAR2(16);
v_count NUMBER(10);
v_afdeling_key NUMBER(10);
BEGIN
SELECT NVL(MAX(prs_afdeling_key),-1), COUNT(*)
INTO v_afdeling_key, v_count
FROM prs_afdeling
WHERE prs_afdeling_verwijder IS NULL
AND prs_afdeling_upper = upper(p_prs_afdeling_naam);
RETURN v_afdeling_key;
EXCEPTION
WHEN OTHERS
THEN RETURN -1;
END get_prs_afdeling_key;
--
--
FUNCTION get_prs_afdeling_parent_key(p_prs_afdeling_naam IN VARCHAR2) RETURN NUMBER
IS
-- variabelen
v_dummy VARCHAR2(16);
v_count NUMBER(10);
v_afdeling_key NUMBER(10);
BEGIN
SELECT NVL(MAX(prs_afdeling_parentkey),-1), COUNT(*)
INTO v_afdeling_key, v_count
FROM prs_afdeling
WHERE prs_afdeling_verwijder IS NULL
AND prs_afdeling_upper = upper(p_prs_afdeling_naam);
IF (v_count = 0) THEN
SELECT prs_afdeling_parentkey
INTO v_afdeling_key
FROM prs_afdeling
WHERE prs_afdeling_verwijder IS NULL
AND SUBSTR(prs_afdeling_upper,1,5) = upper(SUBSTR(p_prs_afdeling_naam,1,5));
END IF;
RETURN v_afdeling_key;
EXCEPTION
WHEN OTHERS
THEN RETURN -1;
END get_prs_afdeling_parent_key;
--
--
FUNCTION get_prs_afdeling_bedrijf_key(p_prs_afdeling_naam IN VARCHAR2) RETURN NUMBER
IS
-- variabelen
v_dummy VARCHAR2(16);
v_count NUMBER(10);
v_bedrijf_key NUMBER(10);
BEGIN
SELECT NVL(MAX(prs_bedrijf_key),NULL), COUNT(*)
INTO v_bedrijf_key, v_count
FROM prs_afdeling
WHERE prs_afdeling_verwijder IS NULL
AND prs_afdeling_upper = upper(p_prs_afdeling_naam);
RETURN v_bedrijf_key;
EXCEPTION
WHEN OTHERS
THEN RETURN -1;
END get_prs_afdeling_bedrijf_key;
--
--
FUNCTION get_prs_afdeling_key_volgnr(p_prs_afdeling_naam IN VARCHAR2, p_prs_kostenplaats_nr IN VARCHAR2) RETURN NUMBER
IS
-- variabelen
v_dummy VARCHAR2(16);
v_count NUMBER(10);
v_afdeling_key NUMBER(10);
BEGIN
SELECT NVL(MAX(a.prs_afdeling_key),-1), COUNT(*)
INTO v_afdeling_key, v_count
FROM prs_afdeling a, prs_kostenplaats k
WHERE a.prs_afdeling_verwijder IS NULL
AND SUBSTR(a.prs_afdeling_upper, 1, INSTR(a.prs_afdeling_upper, '/')-1) = upper(p_prs_afdeling_naam)
AND INSTR(a.prs_afdeling_upper, '/') > 0
AND a.prs_kostenplaats_key = k.prs_kostenplaats_key
AND k.prs_kostenplaats_upper = upper(p_prs_kostenplaats_nr);
RETURN v_afdeling_key;
EXCEPTION
WHEN OTHERS
THEN RETURN -1;
END get_prs_afdeling_key_volgnr;
--
--
FUNCTION get_prs_afdeling_max_volgnr(p_prs_afdeling_naam IN VARCHAR2) RETURN NUMBER
IS
-- variabelen
v_dummy VARCHAR2(16);
v_count NUMBER(10);
v_volgnr NUMBER(4);
BEGIN
-- Bepaal het laagst beschikbare volgnummer.
SELECT max(COALESCE(Fac.safe_to_number(SUBSTR(a.prs_afdeling_upper, INSTR(a.prs_afdeling_upper, '/')+1, 4))
,1
)
)
INTO v_volgnr
FROM prs_afdeling a
WHERE a.prs_afdeling_verwijder IS NULL
AND SUBSTR(a.prs_afdeling_upper, 1, INSTR(a.prs_afdeling_upper, '/')-1) = upper(p_prs_afdeling_naam)
AND INSTR(a.prs_afdeling_upper, '/') > 0;
RETURN NVL(v_volgnr,0);
EXCEPTION
WHEN OTHERS
THEN RETURN 0; -- Bestaat nog niet dus
END get_prs_afdeling_max_volgnr;
--
--
PROCEDURE set_prs_afdeling_key_volgnr(p_prs_afdeling_naam IN VARCHAR2, p_prs_kostenplaats_nr IN VARCHAR2)
IS
-- variabelen
v_dummy VARCHAR2(16);
v_count NUMBER(10);
v_afdeling_key NUMBER(10);
v_afdeling_parentkey NUMBER(10);
v_bedrijf_key NUMBER(10);
v_kostenplaats_key NUMBER(10);
v_volgnr NUMBER(1);
v_afdeling_naam VARCHAR(10);
v_afdeling_omschrijving VARCHAR(60);
BEGIN
v_afdeling_key := get_prs_afdeling_key_volgnr(p_prs_afdeling_naam, p_prs_kostenplaats_nr);
IF (v_afdeling_key = -1) THEN
-- Kijk of de combinatie afdeling/kostenplaats al bestaat
-- SELECT get_prs_afdeling_key_volgnr(p_prs_afdeling_naam,p_prs_kostenplaats_nr) into v_afdeling_key from dual;
IF (v_afdeling_key = -1) THEN
-- Aanmaken kostenplaats indien deze nog niet zou bestaan
set_prs_kostenplaats_key(p_prs_kostenplaats_nr);
SELECT get_prs_kostenplaats_key(p_prs_kostenplaats_nr) into v_kostenplaats_key from dual;
-- Wat is de parent van de gelijknamige afdeling, dwz de afdeling zonder volgnummer? Alleen aan
-- afdelingen met volgnummer worden mensen gekoppeld. Afdelingen met volgnummer zijn geen parent
-- van een afdeling.
SELECT get_prs_afdeling_parent_key(p_prs_afdeling_naam) into v_afdeling_parentkey from dual;
SELECT get_prs_afdeling_bedrijf_key(p_prs_afdeling_naam) into v_bedrijf_key from dual;
SELECT get_prs_afdeling_max_volgnr(p_prs_afdeling_naam) into v_volgnr from dual;
SELECT prs_s_prs_afdeling_key.nextval INTO v_afdeling_key FROM DUAL;
v_afdeling_naam := p_prs_afdeling_naam || '/' || TO_CHAR(v_volgnr+1);
SELECT NVL(PRS_AFDELING_OMSCHRIJVING, v_afdeling_naam)
INTO v_afdeling_omschrijving
FROM PRS_AFDELING
WHERE prs_afdeling_verwijder is null
AND prs_afdeling_naam = p_prs_afdeling_naam;
-- Aanname: length(p_prs_afdeling_naam||'/'||volgnr) <= 10. Huidige afdelingen hebben
-- max(length(p_prs_afdeling_naam) = 8
INSERT INTO PRS_AFDELING
(prs_afdeling_naam
,prs_afdeling_parentkey
,prs_afdeling_omschrijving
,prs_bedrijf_key
,prs_kostenplaats_key
)
VALUES
(v_afdeling_naam
,DECODE(v_afdeling_parentkey,-1,NULL,v_afdeling_parentkey)
,v_afdeling_omschrijving
,DECODE(v_bedrijf_key,-1,NULL,v_bedrijf_key)
,v_kostenplaats_key
);
COMMIT;
END IF;
END IF;
EXCEPTION
WHEN OTHERS
THEN v_afdeling_key := -1;
END set_prs_afdeling_key_volgnr;
--
--
FUNCTION get_prs_ckenmerk_waarde( p_kenmerk_key NUMBER, p_link_key NUMBER) RETURN VARCHAR2
IS
-- variabelen
v_dummy VARCHAR2(16);
v_count NUMBER(10);
v_waarde VARCHAR2(128);
v_gebouw_key NUMBER(10);
BEGIN
SELECT MAX(kl.prs_kenmerklink_waarde), COUNT(*)
INTO v_waarde, v_count
FROM PRS_KENMERKLINK kl
WHERE 0=0
AND kl.prs_link_key = p_link_key
AND kl.prs_kenmerk_key = p_kenmerk_key
AND kl.prs_kenmerklink_verwijder IS NULL;
IF (v_count <> 1) THEN
v_waarde := '';
END IF;
RETURN v_waarde;
EXCEPTION
WHEN OTHERS
THEN RETURN '';
END get_prs_ckenmerk_waarde;
--
--
PROCEDURE set_prs_ckenmerk_waarde( p_kenmerk_key NUMBER, p_link_key NUMBER, p_kenmerk_waarde VARCHAR2)
IS
-- variabelen
v_dummy VARCHAR2(16);
v_count NUMBER(10);
v_locatie_key NUMBER(10);
v_gebouw_key NUMBER(10);
v_kenmerk_waarde VARCHAR(1024);
v_kenmerk_niveau VARCHAR2(1);
BEGIN
v_kenmerk_waarde := NVL(get_prs_ckenmerk_waarde(p_kenmerk_key,p_link_key),'Er is nog geen waarde .....');
IF v_kenmerk_waarde <> p_kenmerk_waarde THEN
-- Waarde voor flexprop is gewijzigd
DELETE
FROM PRS_KENMERKLINK
WHERE prs_kenmerk_key = p_kenmerk_key
AND prs_link_key = p_link_key;
IF p_kenmerk_waarde IS NOT NULL THEN
BEGIN
SELECT prs_kenmerk_niveau
INTO v_kenmerk_niveau
FROM PRS_KENMERK
WHERE prs_kenmerk_key = p_kenmerk_key;
EXCEPTION WHEN NO_DATA_FOUND THEN
v_kenmerk_niveau := NULL;
END;
INSERT INTO PRS_KENMERKLINK
(PRS_LINK_KEY
,PRS_KENMERKLINK_NIVEAU
,PRS_KENMERK_KEY
,PRS_KENMERKLINK_WAARDE
) VALUES
(p_link_key
,v_kenmerk_niveau
,p_kenmerk_key
,p_kenmerk_waarde
);
END IF;
COMMIT;
END IF;
EXCEPTION
WHEN OTHERS
THEN v_dummy := 'Dummy opdracht';
END set_prs_ckenmerk_waarde;
--
--
PROCEDURE set_prs_dkenmerk_waarde( p_kenmerk_key NUMBER, p_link_key NUMBER, p_kenmerk_waarde DATE)
IS
-- variabelen
v_dummy VARCHAR2(16);
v_count NUMBER(10);
v_locatie_key NUMBER(10);
v_gebouw_key NUMBER(10);
v_date VARCHAR2(10);
v_kenmerk_niveau VARCHAR2(1);
BEGIN
DELETE
FROM PRS_KENMERKLINK
WHERE prs_kenmerk_key = p_kenmerk_key
AND prs_link_key = p_link_key;
IF p_kenmerk_waarde IS NOT NULL THEN
v_date := TO_CHAR(p_kenmerk_waarde,'DD-MM-YYYY');
BEGIN
SELECT prs_kenmerk_niveau
INTO v_kenmerk_niveau
FROM PRS_KENMERK
WHERE prs_kenmerk_key = p_kenmerk_key;
EXCEPTION WHEN NO_DATA_FOUND THEN
v_kenmerk_niveau := NULL;
END;
INSERT INTO PRS_KENMERKLINK
(PRS_LINK_KEY
,PRS_KENMERKLINK_NIVEAU
,PRS_KENMERK_KEY
,PRS_KENMERKLINK_WAARDE
) VALUES
(p_link_key
,v_kenmerk_niveau
,p_kenmerk_key
,v_date
);
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN v_dummy := 'Dummy opdracht';
END set_prs_dkenmerk_waarde;
--
--
FUNCTION get_gvba_ruimte_key(p_ruimte IN VARCHAR2, p_locatie IN VARCHAR2) RETURN NUMBER
-- RETURN = -1 --> geen fout opgetreden, ruimte hoeft niet opgezocht te worden
-- RETURN = 0 --> geen fout opgetreden, ruimte hoeft niet opgezocht te worden
-- RETURN > 0 --> bestaande alg_ruimte_key
IS
-- variabelen
v_dummy VARCHAR2(16);
v_count NUMBER(10);
v_ruimte_key NUMBER(10);
BEGIN
v_ruimte_key := 0;
IF trim(upper(p_locatie)) = 'ARLANDAWE' THEN
SELECT NVL (MAX (r.alg_ruimte_key), -1), COUNT (*)
INTO v_ruimte_key, v_count
FROM (SELECT v.alg_verdieping_volgnr, r.alg_ruimte_key, r.alg_ruimte_nr
FROM ALG_RUIMTE r, ALG_VERDIEPING v
WHERE r.alg_ruimte_verwijder IS NULL
AND r.alg_verdieping_key = v.alg_verdieping_key
AND v.alg_gebouw_key = 7) r
WHERE 1 = 1
AND INSTR (TRIM(UPPER (p_ruimte)),
TRIM(UPPER (r.alg_verdieping_volgnr || '.' || r.alg_ruimte_nr)),
1
) > 0;
IF v_count <> 1 THEN
v_ruimte_key := -1;
END IF;
END IF;
/*
IF trim(upper(p_locatie)) = 'x' THEN
... ruimte-vertaling voor anddere locaties ...
END IF;
*/
RETURN v_ruimte_key;
EXCEPTION
WHEN OTHERS
THEN RETURN -1;
END get_gvba_ruimte_key;
--
--
--
--
FUNCTION get_prs_werkplek_key( p_ruimte_key NUMBER, p_werkplek_virtueel NUMBER) RETURN NUMBER
IS
-- variabelen
v_count NUMBER(10);
v_werkplek_key NUMBER(10);
BEGIN
SELECT MIN(prs_werkplek_key), COUNT(*)
INTO v_werkplek_key, v_count
FROM prs_werkplek
WHERE prs_alg_ruimte_key = p_ruimte_key
AND prs_werkplek_module = 'IMP'
AND prs_werkplek_virtueel = p_werkplek_virtueel;
IF (v_count <= 0) THEN
v_werkplek_key := -1;
END IF;
RETURN v_werkplek_key;
EXCEPTION
WHEN OTHERS
THEN RETURN -1;
END get_prs_werkplek_key;
--
--
PROCEDURE set_prs_werkplek_key( p_ruimte_key NUMBER, p_werkplek_virtueel NUMBER)
IS
-- variabelen
v_dummy VARCHAR2(1024);
v_count NUMBER(10);
v_werkplek_key NUMBER(10);
v_werkplek_volgnr NUMBER(3);
v_ruimte_nr VARCHAR2(10);
BEGIN
v_werkplek_key := get_prs_werkplek_key(p_ruimte_key, p_werkplek_virtueel);
IF v_werkplek_key = -1 THEN
SELECT NVL(MAX(prs_werkplek_volgnr),0)+1, COUNT(*)
INTO v_werkplek_volgnr, v_count
FROM PRS_WERKPLEK
WHERE prs_alg_ruimte_key = p_ruimte_key;
SELECT alg_ruimte_nr
INTO v_ruimte_nr
FROM alg_ruimte
WHERE alg_ruimte_verwijder IS NULL
AND alg_ruimte_key = p_ruimte_key;
insert into PRS_WERKPLEK
(PRS_WERKPLEK_MODULE
,PRS_WERKPLEK_VOLGNR
,PRS_WERKPLEK_OMSCHRIJVING
,PRS_ALG_RUIMTE_KEY
,PRS_WERKPLEK_VIRTUEEL
)
values
('IMP'
,v_werkplek_volgnr
,v_ruimte_nr||'/'||to_char(v_werkplek_volgnr)
,p_ruimte_key
,p_werkplek_virtueel
);
COMMIT;
END IF;
EXCEPTION
WHEN OTHERS
THEN v_dummy := 'Dummy opdracht';
END set_prs_werkplek_key;
--
PROCEDURE set_mandaat_vrijstelling
AS
CURSOR c IS
SELECT m.*,
bedrijf_key,
kenteken,
berijder,
einddatum,
gvb_onderdeel
FROM mld_melding m,
(SELECT mld_melding_key, mld_kenmerkmelding_waarde bedrijf_key
FROM mld_kenmerkmelding
WHERE mld_kenmerk_key = 201) b,
(SELECT mld_melding_key, mld_kenmerkmelding_waarde kenteken
FROM mld_kenmerkmelding
WHERE mld_kenmerk_key = 202) k,
(SELECT mld_melding_key, mld_kenmerkmelding_waarde berijder
FROM mld_kenmerkmelding
WHERE mld_kenmerk_key = 203) v,
(SELECT mld_melding_key, mld_kenmerkmelding_waarde einddatum
FROM mld_kenmerkmelding
WHERE mld_kenmerk_key = 204) e,
(SELECT mld_melding_key,
mld_kenmerkmelding_waarde gvb_onderdeel
FROM mld_kenmerkmelding
WHERE mld_kenmerk_key = 221) g
WHERE m.mld_melding_key = b.mld_melding_key(+)
AND m.mld_melding_key = k.mld_melding_key(+)
AND m.mld_melding_key = v.mld_melding_key(+)
AND m.mld_melding_key = e.mld_melding_key(+)
AND m.mld_melding_key = g.mld_melding_key(+)
AND m.mld_stdmelding_key = 721 -- Mandaten en vrijstellingen
AND m.mld_melding_status = 4 -- Geaccepteeerd
AND NOT EXISTS
(SELECT mld_melding_object_key
FROM mld_melding_object mo
WHERE mo.mld_melding_key = m.mld_melding_key);
-- kenmerk 283 is gevuld als de melding afgehandeld is.
CURSOR c_del IS
SELECT m.*,
kenteken
FROM mld_melding m,
(SELECT mld_melding_key, mld_kenmerkmelding_waarde kenteken
FROM mld_kenmerkmelding
WHERE mld_kenmerk_key = 282) k
WHERE m.mld_melding_key = k.mld_melding_key(+)
AND m.mld_stdmelding_key = 801 -- Intrekken vrijstelling
AND m.mld_melding_status = 4 -- Geaccepteeerd
AND NOT EXISTS
(SELECT mld_kenmerkmelding_key
FROM mld_kenmerkmelding km
WHERE km.mld_melding_key = m.mld_melding_key
AND km.mld_kenmerk_key = 283);
v_berijder_arr VARCHAR2 (1000);
v_kenteken_arr VARCHAR2 (1000);
v_berijder VARCHAR2 (100);
v_kenteken VARCHAR2 (100);
v_bedrijf_naam VARCHAR2 (100);
v_loop NUMBER;
v_deel_key NUMBER;
v_vrijstelling_nr NUMBER;
v_einddatum DATE;
v_einddatum_max DATE;
v_oud_verval_str VARCHAR2(20);
v_new_verval_str VARCHAR2(20);
v_deel_vervaldatum DATE;
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errormsg VARCHAR2 (200);
v_hint VARCHAR2 (200);
PROCEDURE get_element (p_string IN OUT VARCHAR2, p_field OUT VARCHAR2)
AS
v_index NUMBER;
BEGIN
v_index := INSTR (p_string, '#');
IF v_index = 0
THEN
p_field := p_string;
p_string := NULL;
ELSE
p_field := SUBSTR (p_string, 1, v_index - 1);
p_string := SUBSTR (p_string, v_index + 1);
END IF;
END;
BEGIN
FOR rec IN c
LOOP
v_berijder_arr := REPLACE (rec.berijder, CHR (13), '#');
v_berijder_arr := REPLACE (v_berijder_arr, CHR (10), '#');
v_berijder_arr := REPLACE (v_berijder_arr, '##', '#');
v_loop := 1;
v_hint := 'Opzoeken bedrijf: ' || rec.bedrijf_key;
SELECT prs_bedrijf_naam
INTO v_bedrijf_naam
FROM prs_bedrijf
WHERE prs_bedrijf_key = rec.bedrijf_key;
v_hint := 'Instellen einddatum: ' || rec.einddatum;
v_einddatum := TO_DATE (rec.einddatum, 'dd-mm-yyyy');
IF TO_CHAR(SYSDATE, 'MM') IN (12,13)
THEN
v_einddatum_max := TO_DATE (TO_CHAR (SYSDATE, 'yy')+1 || '1231', 'yymmdd');
ELSE
v_einddatum_max := TO_DATE (TO_CHAR (SYSDATE, 'yy') || '1231', 'yymmdd');
END IF;
IF v_einddatum IS NULL OR v_einddatum > v_einddatum_max
THEN
v_einddatum := v_einddatum_max;
END IF;
WHILE v_berijder_arr IS NOT NULL AND v_loop < 20
LOOP
BEGIN
get_element (v_berijder_arr, v_berijder);
DBMS_OUTPUT.put_line (v_berijder);
v_loop := v_loop + 1;
v_hint := 'Aanmaken mandaat: ' || v_berijder;
INSERT INTO ins_deel (ins_srtdeel_key,
ins_alg_ruimte_key,
ins_alg_ruimte_type,
ins_deel_aantal,
ins_deel_omschrijving,
ins_discipline_key,
ins_alg_locatie_key,
ins_deel_vervaldatum)
VALUES (
141,
rec.prs_perslid_key_voor,
'P',
1,
'MAN '
|| v_bedrijf_naam
|| '-'
|| v_berijder,
641,
NULL,
v_einddatum)
RETURNING ins_deel_key
INTO v_deel_key;
v_hint :=
'Aanmaken mandaat: '
|| v_berijder
|| ' bedrijf kenmerk: '
|| rec.bedrijf_key;
INSERT INTO ins_kenmerkdeel (ins_deel_key,
ins_kenmerk_key,
ins_kenmerkdeel_waarde)
VALUES (v_deel_key, 21, rec.bedrijf_key);
v_hint :=
'Aanmaken mandaat: '
|| v_berijder
|| ' berijder kenmerk: '
|| v_berijder;
INSERT INTO ins_kenmerkdeel (ins_deel_key,
ins_kenmerk_key,
ins_kenmerkdeel_waarde)
VALUES (v_deel_key, 22, v_berijder);
v_hint :=
'Aanmaken mandaat: '
|| v_berijder
|| ' GVB onderdeel kenmerk: '
|| v_berijder;
INSERT INTO ins_kenmerkdeel (ins_deel_key,
ins_kenmerk_key,
ins_kenmerkdeel_waarde)
VALUES (v_deel_key, 41, rec.gvb_onderdeel);
v_hint :=
'Aanmaken mandaat: '
|| v_berijder
|| ' Koppelen aan melding: '
|| rec.mld_melding_key;
INSERT INTO mld_melding_object (mld_melding_key,
ins_deel_key)
VALUES (rec.mld_melding_key, v_deel_key);
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.writelog ('Export mandaat',
'E',
v_errormsg,
v_hint);
END;
END LOOP;
v_kenteken_arr := REPLACE (rec.kenteken, CHR (13), '#');
v_kenteken_arr := REPLACE (v_kenteken_arr, CHR (10), '#');
v_kenteken_arr := REPLACE (v_kenteken_arr, '##', '#');
v_loop := 1;
v_hint := 'Instellen einddatum: ' || rec.einddatum;
v_hint := 'Instellen einddatum: ' || rec.einddatum;
v_einddatum := TO_DATE (rec.einddatum, 'dd-mm-yyyy');
v_einddatum_max := add_months(SYSDATE, 5*12);
IF v_einddatum IS NULL OR v_einddatum > v_einddatum_max
THEN
v_einddatum := v_einddatum_max;
END IF;
WHILE v_kenteken_arr IS NOT NULL AND v_loop < 20
LOOP
BEGIN
SELECT FAC.safe_to_number (
MAX (SUBSTR (ins_deel_omschrijving, 6)))
INTO v_vrijstelling_nr
FROM ins_deel
WHERE ins_srtdeel_key = 161
AND ins_deel_omschrijving LIKE
'VRIJ %';
IF v_vrijstelling_nr IS NULL
THEN
v_vrijstelling_nr := 1;
ELSE
v_vrijstelling_nr := v_vrijstelling_nr + 1;
END IF;
get_element (v_kenteken_arr, v_kenteken);
DBMS_OUTPUT.put_line (v_kenteken);
v_loop := v_loop + 1;
v_hint := 'Aanmaken vrijstelling: ' || v_vrijstelling_nr;
INSERT INTO ins_deel (ins_srtdeel_key,
ins_alg_ruimte_key,
ins_alg_ruimte_type,
ins_deel_aantal,
ins_deel_omschrijving,
ins_discipline_key,
ins_alg_locatie_key,
ins_deel_vervaldatum)
VALUES (
161,
rec.prs_perslid_key_voor,
'P',
1,
'VRIJ '
|| TO_CHAR (v_vrijstelling_nr, 'fm0000'),
641,
NULL,
v_einddatum)
RETURNING ins_deel_key
INTO v_deel_key;
v_hint :=
'Aanmaken vrijstelling: '
|| v_kenteken
|| 'bedrijf kenmerk: '
|| rec.bedrijf_key;
INSERT INTO ins_kenmerkdeel (ins_deel_key,
ins_kenmerk_key,
ins_kenmerkdeel_waarde)
VALUES (v_deel_key, 21, rec.bedrijf_key);
v_hint :=
'Aanmaken vrijstelling: '
|| v_kenteken
|| 'kenteken kenmerk: '
|| v_kenteken;
INSERT INTO ins_kenmerkdeel (ins_deel_key,
ins_kenmerk_key,
ins_kenmerkdeel_waarde)
VALUES (v_deel_key, 23, v_kenteken);
v_hint :=
'Aanmaken mandaat: '
|| v_berijder
|| ' GVB onderdeel kenmerk: '
|| v_berijder;
INSERT INTO ins_kenmerkdeel (ins_deel_key,
ins_kenmerk_key,
ins_kenmerkdeel_waarde)
VALUES (v_deel_key, 41, rec.gvb_onderdeel);
INSERT INTO mld_melding_object (mld_melding_key,
ins_deel_key)
VALUES (rec.mld_melding_key, v_deel_key);
-- vul het kenmerk 283 met de huidige datum om aan te geven dat deze
-- melding is afgehandeld.
MLD.upsertmeldingkenmerk (283, rec.mld_melding_key, TO_CHAR(SYSDATE, 'DD-MM-YYYY'));
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.writelog ('Export vrijstellingen',
'E',
v_errormsg,
v_hint);
END;
END LOOP;
END LOOP;
-- intrekken vrijstellingen
FOR rec IN c_del
LOOP
v_kenteken_arr := REPLACE (rec.kenteken, CHR (13), '#');
v_kenteken_arr := REPLACE (v_kenteken_arr, CHR (10), '#');
v_kenteken_arr := REPLACE (v_kenteken_arr, '##', '#');
v_loop := 1;
WHILE v_kenteken_arr IS NOT NULL AND v_loop < 20
LOOP
BEGIN
get_element (v_kenteken_arr, v_kenteken);
DBMS_OUTPUT.put_line (v_kenteken);
v_loop := v_loop + 1;
SELECT MAX(d.ins_deel_key)
INTO v_deel_key
FROM ins_deel d, ins_kenmerkdeel kd
WHERE d.ins_deel_key = kd.ins_deel_key
AND kd.ins_kenmerk_key = 23 -- kenteken
AND TRIM(UPPER(REPLACE(v_kenteken,'-'))) = TRIM(UPPER(REPLACE(kd.ins_kenmerkdeel_waarde,'-')))
AND kd.ins_kenmerkdeel_verwijder IS NULL
AND d.ins_deel_verwijder IS NULL
AND ins_deel_vervaldatum > SYSDATE;
SELECT ins_deel_vervaldatum
INTO v_deel_vervaldatum
FROM ins_deel
WHERE ins_deel_key = v_deel_key;
UPDATE ins_deel
SET ins_deel_vervaldatum = SYSDATE
WHERE ins_deel_key = v_deel_key;
v_oud_verval_str := SUBSTR(TO_CHAR(v_deel_vervaldatum, 'Day'),1,2) || TO_CHAR(v_deel_vervaldatum, ' dd-mm-yyyy');
v_new_verval_str := SUBSTR(TO_CHAR(SYSDATE, 'Day'),1,2) || TO_CHAR(SYSDATE, ' dd-mm-yyyy');
fac.trackaction('INSUPD', v_deel_key, rec.prs_perslid_key, NULL, 'Object gewijzigd' || CHR(10)
|| 'Vervaldatum: ' || v_oud_verval_str || ' --> ' || v_new_verval_str);
INSERT INTO mld_melding_object (mld_melding_key,
ins_deel_key)
VALUES (rec.mld_melding_key, v_deel_key);
EXCEPTION WHEN NO_DATA_FOUND
THEN
-- LOG geen vrijstelling gevonden met dit kenteken.
fac.writelog ('Export vrijstellingen',
'E',
'Geen vrijstelling gevonden met dit kenteken: ' || v_kenteken,
'');
END;
END LOOP;
END LOOP;
COMMIT;
END;
PROCEDURE verleng_mandaat_vrijstelling (p_deel_key NUMBER, p_user_key NUMBER, p_jaren NUMBER)
AS
v_oud_verval INS_DEEL.INS_DEEL_VERVALDATUM%TYPE;
v_contact INS_DEEL.INS_ALG_RUIMTE_KEY%TYPE;
v_jaren NUMBER;
v_new_verval DATE;
v_new_verval_str VARCHAR2(20);
v_oud_verval_str VARCHAR2(20);
BEGIN
SELECT ins_deel_vervaldatum, ins_alg_ruimte_key
INTO v_oud_verval, v_contact
FROM ins_deel
WHERE ins_deel_key = p_deel_key;
v_new_verval := TO_DATE('3112' || TO_CHAR(SYSDATE, 'YY') + p_jaren, 'DDMMYY');
v_new_verval_str := SUBSTR(TO_CHAR(v_new_verval, 'Day'),1,2) || TO_CHAR(v_new_verval, ' dd-mm-yyyy');
v_oud_verval_str := SUBSTR(TO_CHAR(v_oud_verval, 'Day'),1,2) || TO_CHAR(v_oud_verval, ' dd-mm-yyyy');
-- extra check. Alleen de contactpersoon mag verlengen. Verder is het onzinnig om verlopen
-- mandaten en vrijstellingen te verlengen.
IF v_contact = p_user_key AND v_oud_verval > SYSDATE
THEN
UPDATE ins_deel
SET ins_deel_vervaldatum = v_new_verval
WHERE ins_deel_key = p_deel_key;
fac.trackaction('INSUPD', p_deel_key, p_user_key, NULL, 'Object gewijzigd' || CHR(10)
|| 'Vervaldatum: ' || v_oud_verval_str || ' --> ' || v_new_verval_str);
fac.trackaction ('CUST01', p_deel_key, p_user_key, NULL, '#Mandaat/Vrijstelling is verlengd');
END IF;
END;
--
END gvba;
/
CREATE OR REPLACE VIEW gvba_v_imp_organisatie
AS
SELECT orgb.nivo, org.code prs_afdeling_naam,
omschrijving prs_afdeling_omschrijving,
pcode prs_afdeling_naam_parent,
DECODE((select count(*) from prs_afdeling af where af.prs_afdeling_verwijder is null and af.prs_afdeling_upper = upper(org.code)),0,'ADD','MOD') Aktie
FROM gvba_imp_organisatie org,
(SELECT 5 nivo, code prs_afdeling_naam
FROM gvba_imp_organisatie
WHERE ppppcode IS NOT NULL
UNION ALL
SELECT 4 nivos, code prs_afdeling_naam
FROM gvba_imp_organisatie
WHERE pppcode IS NOT NULL AND ppppcode IS NULL
UNION ALL
SELECT 3 nivos, code prs_afdeling_naam
FROM gvba_imp_organisatie
WHERE ppcode IS NOT NULL AND pppcode IS NULL
UNION ALL
SELECT 2 nivos, code prs_afdeling_naam
FROM gvba_imp_organisatie
WHERE pcode IS NOT NULL AND ppcode IS NULL
UNION ALL
SELECT 1 nivos, code prs_afdeling_naam
FROM gvba_imp_organisatie
WHERE pcode IS NULL) orgb
WHERE org.code = orgb.prs_afdeling_naam
AND org.pppppcode IS NULL -- afdelingsnivo 6 wordt niet ondersteund
AND org.code = orgb.prs_afdeling_naam
AND NOT EXISTS (SELECT 'Dubbele afdelingen in importbestand uitsluiten'
FROM GVBA_IMP_ORGANISATIE org2
WHERE org2.code = org.code
GROUP BY code
HAVING COUNT(*) > 1
)
UNION ALL
SELECT niveau nivo, prs_afdeling_naam, prs_afdeling_omschrijving, '', 'DEL'
FROM GVBA_IMP_ORGANISATIE org, prs_v_afdeling af
WHERE af.prs_afdeling_verwijder IS NULL
AND UPPER (org.code(+)) = af.prs_afdeling_upper
/
CREATE OR REPLACE PROCEDURE gvba_import_organisatie (
p_import_key IN NUMBER
)
AS
CURSOR c1 IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key;
rec1 c1%ROWTYPE;
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Import line
v_fielddelimitor VARCHAR2 (1); -- Field seperator
v_errormsg VARCHAR (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errmes VARCHAR(1024);
-- De importvelden
v_code VARCHAR2(100);
v_omschrijving VARCHAR2(100);
v_pcode VARCHAR2(100);
v_ppcode VARCHAR2(100);
v_pppcode VARCHAR2(100);
v_ppppcode VARCHAR2(100);
v_pppppcode VARCHAR2(100);
-- Overig
header_is_valid BOOLEAN;
v_controle_res VARCHAR2 (30);
v_teller INTEGER;
BEGIN
v_fielddelimitor := ';';
header_is_valid := TRUE; -- No header present
DELETE FROM gvba_imp_organisatie;
commit;
BEGIN
v_teller := 0;
OPEN c1;
IF c1%ISOPEN THEN
v_teller := 1;
LOOP
BEGIN
v_errmes := 'Fout FETCH te importeren rij';
FETCH c1 INTO rec1;
EXIT WHEN c1%NOTFOUND;
v_errmes := 'Fout opvragen te importeren rij';
v_newline := rec1.fac_imp_file_line;
fac.imp_getfield (v_newline, v_fielddelimitor, v_code);
fac.imp_getfield (v_newline, v_fielddelimitor, v_omschrijving);
fac.imp_getfield (v_newline, v_fielddelimitor, v_pcode);
fac.imp_getfield (v_newline, v_fielddelimitor, v_ppcode);
fac.imp_getfield (v_newline, v_fielddelimitor, v_pppcode);
fac.imp_getfield (v_newline, v_fielddelimitor, v_ppppcode);
fac.imp_getfield (v_newline, v_fielddelimitor, v_pppppcode);
v_errmes := 'Fout bij schrijven te importeren rij in Facilitor database';
INSERT INTO gvba_imp_organisatie
(code
,omschrijving
,pcode
,ppcode
,pppcode
,ppppcode
,pppppcode
)
VALUES (SUBSTR (v_code, 1, 10),
SUBSTR (v_omschrijving, 1, 60),
SUBSTR (v_pcode, 1, 10),
SUBSTR (v_ppcode, 1, 10),
SUBSTR (v_pppcode, 1, 10),
SUBSTR (v_ppppcode, 1, 10),
SUBSTR (v_pppppcode, 1, 10)
);
v_teller := v_teller + 1;
COMMIT; -- alles is goed gegaan
EXCEPTION WHEN OTHERS THEN
ROLLBACK;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
fac.imp_writelog (p_import_key,
'E',
v_errmes,
'Oracle foutmelding (' || oracle_err_num || '/' || oracle_err_mes || ')'
);
COMMIT; -- Logging opslaan
END;
END LOOP;
END IF;
CLOSE c1;
COMMIT;
END;
END;
/
CREATE OR REPLACE PROCEDURE gvba_update_organisatie (
p_import_key IN NUMBER
)
AS
-- Constanten
c_bedrijf_naam VARCHAR(30) := 'GVBA';
CURSOR c1 IS
SELECT *
FROM gvba_v_imp_organisatie
WHERE aktie = 'ADD'
ORDER BY nivo;
rec1 c1%ROWTYPE;
CURSOR c2 IS
SELECT *
FROM gvba_v_imp_organisatie
WHERE aktie = 'MOD'
ORDER BY nivo DESC;
rec2 c2%ROWTYPE;
--
afdeling_parent_key NUMBER(10);
v_bedrijf_key NUMBER(10);
v_teller INTEGER;
v_afdeling_key NUMBER(10);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errmes VARCHAR(1024);
BEGIN
v_errmes := 'Afdelingen toevoegen';
-- Afdelingen toevoegen
BEGIN
v_teller := 0;
OPEN c1;
IF c1%ISOPEN THEN
v_teller := 1;
LOOP
BEGIN
v_errmes := 'Fout bij lezen nieuw toe te voegen afdeling';
FETCH c1 INTO rec1;
EXIT WHEN c1%NOTFOUND;
v_bedrijf_key := TO_NUMBER(NULL);
afdeling_parent_key := TO_NUMBER(NULL);
IF (rec1.PRS_AFDELING_NAAM_PARENT IS NULL)
THEN
afdeling_parent_key := TO_NUMBER(NULL);
v_errmes := 'Fout bij bepalen bedrijf';
select prs_bedrijf_key
into v_bedrijf_key
from prs_bedrijf
where prs_bedrijf_verwijder is null
and prs_bedrijf_naam = c_bedrijf_naam;
ELSE
v_errmes := 'Fout bij bepalen afdeling';
SELECT prs_afdeling_key
INTO afdeling_parent_key
FROM prs_afdeling
WHERE prs_afdeling_naam = UPPER(trim(rec1.prs_afdeling_naam_parent))
AND prs_afdeling_verwijder is null;
v_bedrijf_key := TO_NUMBER(NULL);
END IF;
v_errmes := 'Fout bij toevoegen afdeling';
INSERT INTO PRS_AFDELING
(prs_afdeling_naam
,prs_afdeling_parentkey
,prs_afdeling_omschrijving
,prs_bedrijf_key
)
VALUES
(rec1.prs_afdeling_naam
,afdeling_parent_key
,rec1.prs_afdeling_omschrijving
,v_bedrijf_key
);
v_teller := v_teller + 1;
COMMIT; -- alles is goed gegaan
EXCEPTION WHEN OTHERS THEN
ROLLBACK;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
fac.imp_writelog (p_import_key,
'E',
'Afdelingen toevoegen: ' || v_errmes,
'Oracle foutmelding (' || oracle_err_num || '/' || oracle_err_mes || ')'
);
COMMIT; -- Logging opslaan
END;
END LOOP;
END IF;
CLOSE c1;
COMMIT;
END;
v_errmes := 'Afdelingen wijzigen';
-- Afdelingen wijzigen
BEGIN
v_teller := 0;
OPEN c2;
IF c2%ISOPEN THEN
v_teller := 1;
LOOP
BEGIN
v_errmes := 'Fout FETCH te importeren rij';
FETCH c2 INTO rec2;
EXIT WHEN c2%NOTFOUND;
v_bedrijf_key := TO_NUMBER(NULL);
afdeling_parent_key := TO_NUMBER(NULL);
IF (rec2.PRS_AFDELING_NAAM_PARENT IS NULL)
THEN
afdeling_parent_key := TO_NUMBER(NULL);
v_errmes := 'Fout bij bepalen bedrijf';
select prs_bedrijf_key
into v_bedrijf_key
from prs_bedrijf
where prs_bedrijf_verwijder is null
and prs_bedrijf_naam = c_bedrijf_naam;
ELSE
v_errmes := 'Fout bij bepalen parent afdeling';
SELECT prs_afdeling_key
INTO afdeling_parent_key
FROM prs_afdeling
WHERE prs_afdeling_naam = UPPER(trim(rec2.prs_afdeling_naam_parent))
AND prs_afdeling_verwijder is null;
v_bedrijf_key := TO_NUMBER(NULL);
END IF;
v_errmes := 'Fout bij update afdeling met afdelingnaam <' || rec2.prs_afdeling_naam || '>';
UPDATE PRS_AFDELING
SET prs_afdeling_omschrijving = rec2.prs_afdeling_omschrijving,
prs_afdeling_parentkey = afdeling_parent_key
WHERE ( prs_afdeling_naam = UPPER(trim(rec2.prs_afdeling_naam))
OR ( SUBSTR(prs_afdeling_upper, 1, INSTR(prs_afdeling_upper, '/')-1) = upper(trim(rec2.prs_afdeling_naam))
AND INSTR(prs_afdeling_upper, '/') > 0
)
)
AND prs_afdeling_verwijder is null;
v_teller := v_teller + 1;
COMMIT; -- alles is goed gegaan
EXCEPTION WHEN OTHERS THEN
ROLLBACK;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
fac.imp_writelog (p_import_key,
'E',
v_errmes,
'Oracle foutmelding (' || oracle_err_num || '/' || oracle_err_mes || ')'
);
COMMIT; -- Logging opslaan
END;
END LOOP;
END IF;
CLOSE c2;
COMMIT;
END;
-- Zet default kostenplaats_key
update prs_afdeling
set prs_kostenplaats_key = (select prs_kostenplaats_key from prs_kostenplaats where prs_kostenplaats_nr ='00000')
where prs_kostenplaats_key IS NULL;
commit;
END;
/
CREATE OR REPLACE VIEW gvba_v_imp_persoon
AS
SELECT
DECODE(p.prs_perslid_key,NULL,'ADD','MOD') AKTIE
, p.prs_perslid_key
, SUBSTR(gp.personeelsnummer,1,10) PRS_PERSLID_NR
, SUBSTR(gp.achternaam,1,30) PRS_PERSLID_NAAM
, SUBSTR(gp.voornaam,1,30) PRS_PERSLID_VOORNAAM
, SUBSTR(gp.tussenvoegsels,1,15) PRS_PERSLID_TUSSENVOEGSEL
, SUBSTR(gp.voorletters,1,10) PRS_PERSLID_VOORLETTERS
, SUBSTR(gp.telefoon,1,15) PRS_PERSLID_TELEFOONNR
, SUBSTR(gp.mobiel,1,15) PRS_PERSLID_MOBIEL
, SUBSTR(gp.grip,1,15) flex_grip
, SUBSTR(gp.login,1,30) PRS_PERSLID_OSLOGIN
, SUBSTR(gp.email,1,200) PRS_PERSLID_EMAIL
, NVL(SUBSTR(gp.functie,1,30),'Onbekend') PRS_SRTPERSLID_OMSCHRIJVING
, NVL(SUBSTR(trim(gp.organisatiecode),1,10),'Onbekend') PRS_AFDELING_NAAM
, SUBSTR(gp.kostenplaats,1,30) PRS_KOSTENPLAATS_NR
, fac.safe_to_date(gp.datum_indienst,'YYYYMMDD') PRS_PERSLID_INGANGSDATUM
, fac.safe_to_date(gp.datum_uitdienst,'YYYYMMDD') PRS_PERSLID_EINDDATUM
, SUBSTR(gp.locatie_code,1,30) flex_locatie
, SUBSTR(gp.gebouw_code,1,30) flex_gebouw
, SUBSTR(gp.verdieping_code,1,30) flex_verdieping
, SUBSTR(gp.ruimte_nr,1,30) flex_ruimte
FROM gvba_imp_persoon gp, prs_perslid p
WHERE gp.personeelsnummer = p.prs_perslid_nr(+);
/
CREATE OR REPLACE VIEW gvba_v_imp_persoon_del
AS
SELECT
p.prs_perslid_key
,p.prs_perslid_nr
FROM gvba_imp_persoon gp, prs_perslid p
WHERE gp.personeelsnummer(+) = p.prs_perslid_nr
AND p.prs_perslid_verwijder is null
AND gp.personeelsnummer IS NULL
AND p.prs_perslid_nr is not null;
/
CREATE OR REPLACE PROCEDURE gvba_import_persoon (
p_import_key IN NUMBER
)
AS
CURSOR c1 IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key;
rec1 c1%ROWTYPE;
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Import line
v_fielddelimitor VARCHAR2 (1); -- Field seperator
v_errormsg VARCHAR (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errmes VARCHAR(1024);
-- De importvelden
v_personeelsnummer VARCHAR2(100);
v_achternaam VARCHAR2(100);
v_voornaam VARCHAR2(100);
v_tussenvoegsel VARCHAR2(100);
v_voorletters VARCHAR2(100);
v_telefoon VARCHAR2(100);
v_mobiel VARCHAR2(100);
v_grip VARCHAR2(100);
v_login VARCHAR2(100);
v_email VARCHAR2(200);
v_functie VARCHAR2(100);
v_organisatie_code VARCHAR2(100);
v_kostenplaats VARCHAR2(100);
v_datum_indienst VARCHAR2(100);
v_datum_uitdienst VARCHAR2(100);
v_locatie VARCHAR2(100);
v_gebouw VARCHAR2(100);
v_verdieping VARCHAR2(100);
v_ruimte_nr VARCHAR2(100);
-- Overig
header_is_valid BOOLEAN;
v_controle_res VARCHAR2 (30);
v_teller INTEGER;
BEGIN
v_fielddelimitor := ';';
header_is_valid := TRUE; -- No header present
DELETE FROM GVBA_IMP_PERSOON;
commit;
BEGIN
v_teller := 0;
OPEN c1;
IF c1%ISOPEN THEN
v_teller := 1;
LOOP
BEGIN
v_errmes := 'Fout FETCH te importeren rij';
FETCH c1 INTO rec1;
EXIT WHEN c1%NOTFOUND;
v_errmes := 'Fout opvragen te importeren rij';
v_newline := rec1.fac_imp_file_line;
fac.imp_getfield (v_newline, v_fielddelimitor, v_personeelsnummer);
fac.imp_getfield (v_newline, v_fielddelimitor, v_achternaam);
fac.imp_getfield (v_newline, v_fielddelimitor, v_voornaam);
fac.imp_getfield (v_newline, v_fielddelimitor, v_tussenvoegsel);
fac.imp_getfield (v_newline, v_fielddelimitor, v_voorletters);
fac.imp_getfield (v_newline, v_fielddelimitor, v_telefoon);
fac.imp_getfield (v_newline, v_fielddelimitor, v_mobiel);
fac.imp_getfield (v_newline, v_fielddelimitor, v_grip);
fac.imp_getfield (v_newline, v_fielddelimitor, v_login);
fac.imp_getfield (v_newline, v_fielddelimitor, v_email);
fac.imp_getfield (v_newline, v_fielddelimitor, v_functie);
fac.imp_getfield (v_newline, v_fielddelimitor, v_organisatie_code);
fac.imp_getfield (v_newline, v_fielddelimitor, v_kostenplaats);
fac.imp_getfield (v_newline, v_fielddelimitor, v_datum_indienst);
fac.imp_getfield (v_newline, v_fielddelimitor, v_datum_uitdienst);
fac.imp_getfield (v_newline, v_fielddelimitor, v_locatie);
fac.imp_getfield (v_newline, v_fielddelimitor, v_gebouw);
fac.imp_getfield (v_newline, v_fielddelimitor, v_verdieping);
fac.imp_getfield (v_newline, v_fielddelimitor, v_ruimte_nr);
v_errmes := 'Fout bij schrijven te importeren rij in Facilitor database';
INSERT INTO GVBA_IMP_PERSOON
(personeelsnummer
,achternaam
,voornaam
,tussenvoegsels
,voorletters
,telefoon
,mobiel
,grip
,login
,email
,functie
,organisatiecode
,kostenplaats
,datum_indienst
,datum_uitdienst
,locatie_code
,gebouw_code
,verdieping_code
,ruimte_nr
)
VALUES (SUBSTR (v_personeelsnummer, 1, 16),
SUBSTR (v_achternaam, 1, 30),
SUBSTR (v_voornaam, 1, 30),
SUBSTR (v_tussenvoegsel, 1, 15),
SUBSTR (v_voorletters, 1, 10),
SUBSTR (v_telefoon, 1, 15),
SUBSTR (v_mobiel, 1, 15),
SUBSTR (v_grip, 1, 15),
SUBSTR (v_login, 1, 30),
SUBSTR (v_email, 1, 200),
SUBSTR (v_functie, 1, 30),
SUBSTR (v_organisatie_code, 1, 10),
SUBSTR (v_kostenplaats, 1, 30),
SUBSTR (v_datum_indienst, 1, 8),
SUBSTR (v_datum_uitdienst, 1, 8),
SUBSTR (v_locatie, 1, 10),
SUBSTR (v_gebouw, 1, 10),
SUBSTR (v_verdieping, 1, 10),
SUBSTR (v_ruimte_nr, 1, 10)
);
v_teller := v_teller + 1;
COMMIT; -- alles is goed gegaan
EXCEPTION WHEN OTHERS THEN
ROLLBACK;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
fac.imp_writelog (p_import_key,
'E',
'Personen import: '|| v_errmes,
'Oracle foutmelding (' || oracle_err_num || '/' || oracle_err_mes || ')'
);
COMMIT; -- Logging opslaan
END;
END LOOP;
END IF;
CLOSE c1;
COMMIT;
END;
END;
/
CREATE OR REPLACE VIEW gvba_v_afdeling_kpn_imp AS
SELECT UPPER(prs_afdeling_naam)||prs_kostenplaats_nr afdeling_kpn
FROM gvba_v_imp_persoon;
/
CREATE OR REPLACE VIEW gvba_v_afdeling_kpn_fclt AS
SELECT a.prs_afdeling_key, SUBSTR(a.prs_afdeling_upper, 1, INSTR(a.prs_afdeling_upper, '/')-1)||k.prs_kostenplaats_nr afdeling_kpn, prs_afdeling_verwijder
FROM PRS_AFDELING a, PRS_KOSTENPLAATS k
WHERE a.prs_kostenplaats_key = k.prs_kostenplaats_key
AND INSTR(a.prs_afdeling_upper, '/') > 0;
/
CREATE OR REPLACE VIEW gvba_v_afdeling_del AS
SELECT fclt.prs_afdeling_key
FROM gvba_v_afdeling_kpn_fclt fclt, gvba_v_afdeling_kpn_imp imp
WHERE imp.afdeling_kpn(+) = fclt.afdeling_kpn
AND imp.afdeling_kpn IS NULL
AND fclt.prs_afdeling_key not in (select prs_afdeling_key from prs_v_aanwezigperslid)
AND fclt.prs_afdeling_verwijder is null;
/
CREATE OR REPLACE PROCEDURE gvba_update_persoon (
p_import_key IN NUMBER
)
AS
CURSOR c1 IS
SELECT *
FROM gvba_v_imp_persoon
WHERE aktie in ('ADD','MOD');
-- AND prs_perslid_nr <= '10009';
rec1 c1%ROWTYPE;
CURSOR c2 IS
SELECT *
FROM gvba_v_imp_persoon_del
WHERE 1=1;
rec2 c2%ROWTYPE;
v_teller INTEGER;
v_count NUMBER(10);
v_perslidkostenplaats_key NUMBER(10);
v_kostenplaats_key NUMBER(10);
v_perslid_key NUMBER(10);
v_afdeling_key NUMBER(10);
v_srtperslid_key NUMBER(10);
v_prs_kenmerk_key NUMBER(10);
v_ruimte_key NUMBER(10);
v_werkplek_key NUMBER(10);
v_newline VARCHAR2 (1000); -- Import line
v_fielddelimitor VARCHAR2 (1); -- Field seperator
v_errormsg VARCHAR (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errmes VARCHAR(1024);
v_debug BOOLEAN;
BEGIN
v_debug := FALSE;
IF v_debug THEN
fac.imp_writelog (p_import_key,
'I',
'Processing PROCEDURE gvba_update_persoon',
'SET v_debug = FALSE to skip this information'
);
commit;
END IF;
-- Personen toevoegen/wijzigen
BEGIN
OPEN c1;
IF c1%ISOPEN THEN
LOOP
BEGIN
FETCH c1 INTO rec1;
EXIT WHEN c1%NOTFOUND;
v_afdeling_key := -1;
IF ((rec1.prs_afdeling_naam <> 'Onbekend') AND (rec1.prs_kostenplaats_nr IS NOT NULL)) THEN
v_errmes := 'Fout bij bepalen/aanmaken afdeling a.d.h.v. de afdelings-code <' || rec1.prs_afdeling_naam || '>';
gvba.set_prs_afdeling_key_volgnr(rec1.prs_afdeling_naam, rec1.prs_kostenplaats_nr);
select gvba.get_prs_afdeling_key_volgnr(rec1.prs_afdeling_naam, rec1.prs_kostenplaats_nr) into v_afdeling_key from dual;
END IF;
IF (v_afdeling_key = -1) THEN
-- Kennelijk afdeling 'Onbekend' of geen kostenplaats, dan koppelen op de 'oude' manier
SELECT gvba.get_prs_afdeling_key(rec1.prs_afdeling_naam)
INTO v_afdeling_key
FROM dual;
IF (v_afdeling_key = -1) THEN
-- Indine afdeling niet gevonden, zoek dan op 5 cijferige code
SELECT NVL(MAX(prs_afdeling_key),NULL), COUNT(*)
INTO v_afdeling_key, v_count
FROM prs_afdeling
WHERE prs_afdeling_verwijder IS NULL
AND prs_afdeling_upper like upper(SUBSTR(rec1.prs_afdeling_naam,1,5))||'%';
END IF;
END IF;
v_errmes := 'Fout bij bepalen/aanmaken functie a.d.h.v. de functie-omschrijving <' || rec1.prs_srtperslid_omschrijving || '>';
gvba.set_prs_srtperslid_key(rec1.prs_srtperslid_omschrijving);
SELECT gvba.get_prs_srtperslid_key(rec1.prs_srtperslid_omschrijving)
INTO v_srtperslid_key
FROM dual;
IF (v_srtperslid_key = -1) THEN v_srtperslid_key := TO_NUMBER(NULL); END IF;
-- Stel dat er dubbelen in het importbestand staan ...
v_errmes := 'Fout bij bepalen persoon met personeelsnummer <' || rec1.PRS_PERSLID_NR || '>';
SELECT NVL(MAX(prs_perslid_key),-1), COUNT(*)
INTO v_perslid_key, v_count
FROM prs_perslid
WHERE prs_perslid_verwijder is null
AND upper(prs_perslid_nr) = upper(rec1.PRS_PERSLID_NR);
IF (v_perslid_key = -1) THEN
v_errmes := 'Fout bij toevoegen persoon met persoonnr <' || rec1.prs_perslid_nr || '>';
SELECT prs_s_prs_alluitvoerende_keys.NEXTVAL
INTO v_perslid_key
FROM DUAL;
INSERT INTO prs_perslid
(prs_perslid_key
,prs_perslid_naam
,prs_perslid_nr
,prs_perslid_module
,prs_perslid_tussenvoegsel
,prs_perslid_voorletters
,prs_perslid_voornaam
,prs_perslid_ingangsdatum
,prs_perslid_einddatum
,prs_perslid_telefoonnr
,prs_perslid_mobiel
,prs_perslid_oslogin
,prs_srtperslid_key
,prs_afdeling_key
,prs_perslid_email)
values
(v_perslid_key
,rec1.prs_perslid_naam
,rec1.prs_perslid_nr
,'PRS'
,rec1.prs_perslid_tussenvoegsel
,rec1.prs_perslid_voorletters
,rec1.prs_perslid_voornaam
,rec1.prs_perslid_ingangsdatum
,rec1.prs_perslid_einddatum
,rec1.prs_perslid_telefoonnr
,rec1.prs_perslid_mobiel
,rec1.prs_perslid_oslogin
,v_srtperslid_key
,v_afdeling_key
,rec1.prs_perslid_email
);
ELSE
v_errmes := 'Fout bij wijzigen persoon met persoonnr <' || rec1.prs_perslid_nr || '>' || ' (' || rec1.prs_afdeling_naam||','||rec1.prs_kostenplaats_nr||','||to_char(v_afdeling_key)||')';
UPDATE prs_perslid
SET prs_perslid_naam = rec1.prs_perslid_naam
,prs_perslid_tussenvoegsel = rec1.prs_perslid_tussenvoegsel
,prs_perslid_voorletters = rec1.prs_perslid_voorletters
,prs_perslid_voornaam = rec1.prs_perslid_voornaam
,prs_perslid_ingangsdatum = rec1.prs_perslid_ingangsdatum
,prs_perslid_einddatum = rec1.prs_perslid_einddatum
,prs_perslid_telefoonnr = rec1.prs_perslid_telefoonnr
,prs_perslid_mobiel = rec1.prs_perslid_mobiel
,prs_perslid_oslogin = rec1.prs_perslid_oslogin
,prs_perslid_email = rec1.prs_perslid_email
,prs_srtperslid_key = v_srtperslid_key
,prs_afdeling_key = v_afdeling_key
,prs_perslid_verwijder = NULL
WHERE prs_perslid_key = v_perslid_key;
END IF;
-- Virtuele werkplekken bijwerken indien mogelijk
BEGIN
IF rec1.flex_ruimte IS NULL THEN
v_errmes := 'Verwijder eventueel aanwezige virtuele werkplek voor persoon. Dit voor persoon met persoonnr <' || rec1.prs_perslid_nr || '>';
DELETE FROM prs_perslidwerkplek pw
WHERE 1=1
AND pw.prs_perslid_key = v_perslid_key
AND EXISTS (SELECT 'x'
FROM PRS_WERKPLEK w
WHERE w.prs_werkplek_key = pw.prs_werkplek_key
AND w.prs_werkplek_module = 'IMP'
AND w.prs_werkplek_virtueel = 0
AND rownum=1);
ELSE
v_errmes := 'Vraag ruimte op in Facilitor? Dit voor persoon met persoonnr <' || rec1.prs_perslid_nr || '>';
v_ruimte_key := gvba.get_gvba_ruimte_key(rec1.flex_ruimte,rec1.flex_locatie);
IF v_ruimte_key > 0 THEN -- Ruimte gevonden
v_errmes := 'Maak virtuele werkplek aan indien niet aanwezig? Dit voor persoon met persoonnr <' || rec1.prs_perslid_nr || '>';
gvba.set_prs_werkplek_key(v_ruimte_key,0);
v_errmes := 'Vraag virtuele werkplek op in Facilitor? Dit voor persoon met persoonnr <' || rec1.prs_perslid_nr || '>';
v_werkplek_key := gvba.get_prs_werkplek_key(v_ruimte_key,0);
v_errmes := 'Is de virtuele werkplek gewijzigd? Dit voor persoon met persoonnr <' || rec1.prs_perslid_nr || '>';
select count(*)
into v_count
from prs_perslidwerkplek pw, prs_werkplek w
where pw.prs_perslid_key = v_perslid_key
and pw.prs_werkplek_key = v_werkplek_key
and pw.prs_werkplek_key = w.prs_werkplek_key
and w.prs_werkplek_module = 'IMP'
and w.prs_werkplek_virtueel = 0;
IF (v_count = 0) THEN
v_errmes := 'Verwijder eventueel aanwezige virtuele werkplek voor persoon. Dit voor persoon met persoonnr <' || rec1.prs_perslid_nr || '>';
DELETE FROM prs_perslidwerkplek pw
WHERE 1=1
AND pw.prs_perslid_key = v_perslid_key
AND EXISTS (SELECT 'x'
FROM PRS_WERKPLEK w
WHERE w.prs_werkplek_key = pw.prs_werkplek_key
AND w.prs_werkplek_module = 'IMP'
AND w.prs_werkplek_virtueel = 0
AND rownum=1);
v_errmes := 'Voeg werkplek toe voor persoon met persoonnr <' || rec1.prs_perslid_nr || '>';
insert into PRS_PERSLIDWERKPLEK
(prs_perslid_key
,prs_werkplek_key)
values
(v_perslid_key
,v_werkplek_key);
ELSE
v_errmes := 'Geen werkplekwijziging voor persoon met persoonnr <' || rec1.prs_perslid_nr || '>';
END IF;
ELSE
IF v_ruimte_key = -1 THEN -- Fout bij zoeken ruimte
v_errmes := 'Geen werkplekwijziging voor persoon met persoonnr <' || rec1.prs_perslid_nr || '>';
fac.imp_writelog (p_import_key,
'I',
v_errmes,
'Foutmelding (Koppeling persoon/werkplek niet gewijzigd omdat ruimte <'|| rec1.flex_ruimte || '> niet kan worden gevonden.)'
);
commit;
ELSE -- v_ruimte_key = 0
v_errmes := 'Geen werkplek aanmaken!';
END IF;
COMMIT; -- Logging opslaan
END IF;
END IF;
EXCEPTION WHEN OTHERS THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
fac.imp_writelog (p_import_key,
'I',
'Koppeling persoon/werkplek: '|| v_errmes,
'Oracle foutmelding (' || oracle_err_num || '/' || oracle_err_mes || ')'
);
COMMIT; -- Logging opslaan
-- Ga door met het toevoegen wijzigen van de persoon!
END;
v_errmes := 'Fout bij toevoegen flexibele kenmerken voor persoon met persoonnr <' || rec1.prs_perslid_nr || '>';
BEGIN -- FlexProps
v_errmes := 'Fout bij toevoegen flexibele kenmerken Kostenplaats voor persoon met persoonnr <' || rec1.prs_perslid_nr || '>';
SELECT gvba.get_prs_kenmerk_key('P','Kostenplaats')
INTO v_prs_kenmerk_key
FROM dual;
gvba.set_prs_ckenmerk_waarde(v_prs_kenmerk_key,v_perslid_key,rec1.prs_kostenplaats_nr);
v_errmes := 'Fout bij toevoegen flexibele kenmerken Grip voor persoon met persoonnr <' || rec1.prs_perslid_nr || '>';
SELECT gvba.get_prs_kenmerk_key('P','Grip')
INTO v_prs_kenmerk_key
FROM dual;
gvba.set_prs_ckenmerk_waarde(v_prs_kenmerk_key,v_perslid_key,rec1.FLEX_GRIP);
v_errmes := 'Fout bij toevoegen flexibele kenmerken LocatieCode voor persoon met persoonnr <' || rec1.prs_perslid_nr || '>';
SELECT gvba.get_prs_kenmerk_key('P','LocatieCode')
INTO v_prs_kenmerk_key
FROM dual;
gvba.set_prs_ckenmerk_waarde(v_prs_kenmerk_key,v_perslid_key,rec1.FLEX_LOCATIE);
v_errmes := 'Fout bij toevoegen flexibele kenmerken GebouwCode voor persoon met persoonnr <' || rec1.prs_perslid_nr || '>';
SELECT gvba.get_prs_kenmerk_key('P','GebouwCode')
INTO v_prs_kenmerk_key
FROM dual;
gvba.set_prs_ckenmerk_waarde(v_prs_kenmerk_key,v_perslid_key,rec1.FLEX_GEBOUW);
v_errmes := 'Fout bij toevoegen flexibele kenmerken VerdiepingCode voor persoon met persoonnr <' || rec1.prs_perslid_nr || '>';
SELECT gvba.get_prs_kenmerk_key('P','VerdiepingCode')
INTO v_prs_kenmerk_key
FROM dual;
gvba.set_prs_ckenmerk_waarde(v_prs_kenmerk_key,v_perslid_key,rec1.FLEX_VERDIEPING);
v_errmes := 'Fout bij toevoegen flexibele kenmerken RuimteNr voor persoon met persoonnr <' || rec1.prs_perslid_nr || '>';
SELECT gvba.get_prs_kenmerk_key('P','RuimteNr')
INTO v_prs_kenmerk_key
FROM dual;
gvba.set_prs_ckenmerk_waarde(v_prs_kenmerk_key,v_perslid_key,rec1.FLEX_RUIMTE);
END;
COMMIT; -- Er zijn geen fouten opgetreden
EXCEPTION WHEN OTHERS THEN
ROLLBACK;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
fac.imp_writelog (p_import_key,
'E',
'Personen toevoegen/wijzigen: '|| v_errmes,
'Oracle foutmelding (' || oracle_err_num || '/' || oracle_err_mes || ')'
);
COMMIT; -- Logging opslaan
END;
END LOOP;
CLOSE c1;
COMMIT;
END IF; -- IF c1%ISOPEN THEN
END; -- Personen toevoegen/wijzigen
-- Personen verwijderen
BEGIN
v_teller := 0;
OPEN c2;
IF c2%ISOPEN THEN
v_teller := 1;
LOOP
BEGIN
v_errmes := 'Fout FETCH te importeren rij';
FETCH c2 INTO rec2;
EXIT WHEN c2%NOTFOUND;
SELECT count(*)
INTO v_count
FROM prs_v_verplichting
WHERE prs_perslid_key = rec2.prs_perslid_key;
IF (v_count = 0) THEN
update prs_perslid
set prs_perslid_verwijder = sysdate
where prs_perslid_key = rec2.prs_perslid_key;
-- Verwijder nu pas, als de persoon 'verwijderd' is, eventueel aanwezige kenmerken
update prs_kenmerklink
set prs_kenmerklink_verwijder = sysdate
where prs_link_key = rec2.prs_perslid_key;
-- Verwijder nu pas de werkplekken, als koppeling prs_perslid met prs_werkplek
-- Aanname/FSN#26947: GVBA-setting op EXPLICIETE werkplekken!
DELETE FROM prs_perslidwerkplek WHERE prs_perslid_key = rec2.prs_perslid_key;
ELSE
fac.imp_writelog (p_import_key,
'E',
'Persoon met personeelsnummer ' || rec2.prs_perslid_nr || ' kan niet verwijderd worden.',
'Persoon heeft nog ' || to_char(v_count) || ' openstaande verplichting(en).'
);
commit;
END IF;
v_teller := v_teller + 1;
COMMIT; -- alles is goed gegaan
EXCEPTION WHEN OTHERS THEN
ROLLBACK;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
fac.imp_writelog (p_import_key,
'E',
'Personen verwijderen: '|| v_errmes,
'Oracle foutmelding (' || oracle_err_num || '/' || oracle_err_mes || ')'
);
COMMIT; -- Logging opslaan
END;
END LOOP;
END IF;
CLOSE c2;
COMMIT;
END;
-- Afdelingen opruimen
UPDATE PRS_AFDELING
SET prs_afdeling_verwijder = SYSDATE
WHERE prs_afdeling_key IN (SELECT prs_afdeling_key FROM gvba_v_afdeling_del);
END;
/
-- toevoegen ruimtes
CREATE OR REPLACE PROCEDURE gvba_import_ruimte (
p_import_key IN NUMBER
)
AS
CURSOR c1 IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key;
rec1 c1%ROWTYPE;
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Import line
v_fielddelimitor VARCHAR2 (1); -- Field seperator
v_errormsg VARCHAR (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errmes VARCHAR(1024);
-- De importvelden
v_locatie VARCHAR2(5);
v_gebouw VARCHAR2(5);
v_verdieping NUMBER(3);
v_ruimte VARCHAR2(10);
v_omschrijving VARCHAR2(30);
-- Overig
header_is_valid BOOLEAN;
v_controle_res VARCHAR2 (30);
v_teller INTEGER;
BEGIN
v_fielddelimitor := ';';
header_is_valid := TRUE; -- No header present
DELETE FROM gvba_imp_ruimte;
BEGIN
v_teller := 0;
OPEN c1;
IF c1%ISOPEN THEN
v_teller := 1;
LOOP
BEGIN
v_errmes := 'Fout FETCH te importeren rij';
FETCH c1 INTO rec1;
EXIT WHEN c1%NOTFOUND;
v_errmes := 'Fout opvragen te importeren rij';
v_newline := rec1.fac_imp_file_line;
fac.imp_getfield (v_newline, v_fielddelimitor, v_locatie);
fac.imp_getfield (v_newline, v_fielddelimitor, v_gebouw);
fac.imp_getfield (v_newline, v_fielddelimitor, v_verdieping);
fac.imp_getfield (v_newline, v_fielddelimitor, v_ruimte);
fac.imp_getfield (v_newline, v_fielddelimitor, v_omschrijving);
v_errmes := 'Fout bij schrijven te importeren rij in Facilitor database';
INSERT INTO gvba_imp_ruimte
(locatie
,gebouw
,verdieping
,ruimte
,omschrijving
)
VALUES (SUBSTR (v_locatie, 1, 5),
SUBSTR (v_gebouw, 1, 5),
TO_NUMBER (v_verdieping),
SUBSTR (v_ruimte, 1, 10),
SUBSTR (v_omschrijving, 1, 30)
);
v_teller := v_teller + 1;
COMMIT; -- alles is goed gegaan
EXCEPTION WHEN OTHERS THEN
ROLLBACK;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
fac.imp_writelog (p_import_key,
'E',
v_errmes || '(' || rec1.fac_imp_file_line || ')',
'Oracle foutmelding (' || oracle_err_num || '/' || oracle_err_mes || ')'
);
COMMIT; -- Logging opslaan
END;
END LOOP;
END IF;
CLOSE c1;
COMMIT;
END;
END;
/
CREATE OR REPLACE PROCEDURE gvba_update_ruimte (
p_import_key IN NUMBER
)
AS
-- Constanten
c_bedrijf_naam VARCHAR(30) := 'GVBA';
CURSOR c1 IS
SELECT locatie, gebouw, verdieping, ruimte, omschrijving
FROM gvba_imp_ruimte;
rec1 c1%ROWTYPE;
--
v_locatie_key NUMBER(10);
v_gebouw_key NUMBER(10);
v_verdieping_key NUMBER(10);
v_count INTEGER;
v_teller INTEGER;
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errmes VARCHAR(1024);
BEGIN
v_errmes := 'ruimte toevoegen';
-- Afdelingen toevoegen
BEGIN
v_teller := 0;
OPEN c1;
IF c1%ISOPEN THEN
v_teller := 1;
LOOP
BEGIN
v_errmes := 'Fout bij lezen nieuw toe te voegen locatie';
FETCH c1 INTO rec1;
EXIT WHEN c1%NOTFOUND;
SELECT count(*)
INTO v_count
FROM alg_v_aanweziglocatie
WHERE alg_locatie_code = upper(rec1.locatie);
IF v_count = 0 THEN
INSERT INTO alg_locatie (
alg_locatie_code,
alg_locatie_omschrijving,
alg_district_key)
VALUES (
rec1.locatie,
rec1.locatie,
1);
END IF;
SELECT alg_locatie_key
INTO v_locatie_key
FROM alg_v_aanweziglocatie
WHERE alg_locatie_code = upper(rec1.locatie);
v_errmes := 'Fout bij lezen nieuw toe te voegen gebouw';
SELECT count(*)
INTO v_count
FROM alg_v_aanweziggebouw
WHERE alg_locatie_key = v_locatie_key
AND alg_gebouw_code = upper(rec1.gebouw);
IF v_count = 0 THEN
INSERT INTO alg_gebouw (
alg_locatie_key,
alg_gebouw_naam,
alg_gebouw_code,
alg_srtgebouw_key)
VALUES (
v_locatie_key,
rec1.gebouw,
rec1.gebouw,
1);
END IF;
SELECT alg_gebouw_key
INTO v_gebouw_key
FROM alg_v_aanweziggebouw
WHERE alg_locatie_key = v_locatie_key
AND alg_gebouw_code = upper(rec1.gebouw);
v_errmes := 'Fout bij lezen nieuw toe te voegen verdieping';
SELECT count(*)
INTO v_count
FROM alg_v_aanwezigverdieping
WHERE alg_gebouw_key = v_gebouw_key
AND alg_verdieping_volgnr = rec1.verdieping;
v_errmes := 'Fout bij lezen nieuw toe te voegen verdieping aantal='||v_count;
IF v_count = 0 THEN
INSERT INTO alg_verdieping (
alg_gebouw_key,
alg_verdieping_omschrijving,
alg_verdieping_volgnr,
alg_verdieping_code)
VALUES (
v_gebouw_key,
DECODE (rec1.verdieping,
-1, 'Kelder',
0, 'Begane grond',
1, 'Eerste verdieping',
2, 'Tweede verdieping',
3, 'Derde verdieping',
4, 'Vierde verdieping',
5, 'Vijfde verdieping',
null),
rec1.verdieping,
DECODE (rec1.verdieping,
-1, 'K',
0, 'BG',
1, '1',
2, '2',
3, '3',
4, '4',
5, '5',
null)
);
END IF;
SELECT alg_verdieping_key
INTO v_verdieping_key
FROM alg_v_aanwezigverdieping
WHERE alg_gebouw_key = v_gebouw_key
AND alg_verdieping_volgnr = rec1.verdieping;
v_errmes := 'Fout bij lezen nieuw toe te voegen ruimte';
SELECT count(*)
INTO v_count
FROM alg_v_aanwezigruimte
WHERE alg_verdieping_key = v_verdieping_key
AND alg_ruimte_nr = rec1.ruimte;
IF v_count = 0 THEN
INSERT INTO alg_ruimte (
alg_verdieping_key,
alg_ruimte_omschrijving,
alg_ruimte_nr,
alg_srtruimte_key)
VALUES (
v_verdieping_key,
rec1.omschrijving,
rec1.ruimte,
1
);
END IF;
v_teller := v_teller + 1;
COMMIT; -- alles is goed gegaan
EXCEPTION WHEN OTHERS THEN
ROLLBACK;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
fac.imp_writelog (p_import_key,
'E',
'Ruimte toevoegen('|| rec1.locatie || ',' || rec1.gebouw ||',' || rec1.verdieping || ',' || rec1.ruimte || ',' || rec1.omschrijving || '): ' || v_errmes,
'Oracle foutmelding (' || oracle_err_num || '/' || oracle_err_mes || ')'
);
COMMIT; -- Logging opslaan
END;
END LOOP;
END IF;
CLOSE c1;
COMMIT;
END;
END;
/
CREATE OR REPLACE PACKAGE GVBA_RAP AS
-- PACKAGES voor de GVBA specifieke rapportages
TYPE t_cursor IS REF CURSOR;
PROCEDURE gvba_rap_kwismelding (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
END;
/
/* Formatted on 13-5-2013 11:45:15 (QP5 v5.115.810.9015) */
CREATE OR REPLACE PACKAGE BODY GVBA_RAP
AS
--
-- Algemene procedures en functies.
--
PROCEDURE gvba_rap_kwismelding (user_key IN NUMBER,
p_datum_van IN VARCHAR2-- Let wel: formaat '13-05-2005'
,
p_datum_tot IN VARCHAR2,
p_cursor OUT t_cursor)
AS
v_datum_van DATE;
v_datum_tot DATE;
BEGIN
v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
v_datum_tot := fac.safe_to_date (p_datum_tot, 'dd-mm-yyyy');
OPEN p_cursor FOR
SELECT DISTINCT
m.mld_melding_key nummer,
TO_CHAR (m.mld_melding_datum, 'DD-MM-YYYY HH24:MI') datum,
(SELECT mld_statuses_omschrijving
FROM mld_statuses s
WHERE m.mld_melding_status = s.mld_statuses_key)
status,
TO_CHAR (
mld.getmeldingstatusdate (m.mld_melding_key,
m.mld_melding_status),
'YYYY-MM-DD HH24:MI'
)
laatste_actie,
(SELECT sd.ins_srtdiscipline_omschrijving
FROM ins_srtdiscipline sd
WHERE sd.ins_srtdiscipline_key =
md.ins_srtdiscipline_key)
kwis,
SUBSTR (md.ins_discipline_omschrijving, 3) vakgroep,
(SELECT stdm.mld_stdmelding_omschrijving
FROM mld_stdmelding stdm
WHERE m.mld_stdmelding_key = stdm.mld_stdmelding_key)
melding,
m.mld_melding_omschrijving omschrijving,
m.mld_melding_opmerking actie,
(SELECT d.prs_afdeling_naam6
FROM prs_v_afdeling d
WHERE p.prs_afdeling_key = d.prs_afdeling_key)
organisatie,
p.prs_perslid_naam
|| DECODE (NVL (p.prs_perslid_voorletters, ''),
'', '',
', ' || p.prs_perslid_voorletters)
|| DECODE (NVL (p.prs_perslid_tussenvoegsel, ''),
'', '',
' ' || p.prs_perslid_tussenvoegsel)
|| DECODE (NVL (p.prs_perslid_voornaam, ''),
'', '',
' (' || p.prs_perslid_voornaam || ')')
naam,
(SELECT k.prs_kostenplaats_nr
|| ' '
|| k.prs_kostenplaats_omschrijving
FROM prs_kostenplaats k
WHERE k.prs_kostenplaats_key = m.prs_kostenplaats_key)
kostenplaats,
(SELECT alg_locatie_code
FROM alg_locatie l
WHERE m.mld_alg_locatie_key = l.alg_locatie_key)
|| (SELECT DECODE (g.alg_gebouw_code,
NULL, '',
'-' || g.alg_gebouw_code)
|| DECODE (g.alg_verdieping_code,
NULL, '',
'-' || g.alg_verdieping_code)
|| DECODE (g.alg_ruimte_nr,
NULL, '',
'-' || g.alg_ruimte_nr)
|| DECODE (g.alg_terreinsector_code,
NULL, '',
'-' || g.alg_terreinsector_code)
FROM alg_v_allonrgoed_gegevens g
WHERE m.mld_alg_onroerendgoed_keys =
g.alg_onroerendgoed_keys)
plaats
FROM mld_melding m,
mld_stdmelding std,
mld_discipline md,
alg_v_onroerendgoed_gegevens v,
alg_locatie l,
prs_perslid p
WHERE m.mld_alg_locatie_key = l.alg_locatie_key(+)
AND m.mld_alg_onroerendgoed_keys =
v.alg_onroerendgoed_keys(+)
AND m.prs_perslid_key = p.prs_perslid_key
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = md.ins_discipline_key
AND m.mld_melding_datum BETWEEN v_datum_van AND v_datum_tot
ORDER BY 1, 2, 3 DESC;
END;
END;
/
CREATE OR REPLACE VIEW gvba_v_huurder
AS
SELECT prs_bedrijf_key, prs_bedrijf_naam, prs_bedrijf_verwijder
FROM prs_bedrijf
WHERE prs_bedrijf_huurder = 1;
--GVBA#12148
CREATE OR REPLACE VIEW gvba_v_perslid_last_login (hide_f_datum, naam, login)
AS
SELECT SYSDATE - prs_perslid_login, pf.prs_perslid_naam_full,
TO_CHAR (prs_perslid_login, 'dd-mm-yyyy hh24:mi')
FROM prs_perslid p, prs_v_perslid_fullnames pf
WHERE p.prs_perslid_key = pf.prs_perslid_key
AND prs_perslid_login IS NOT NULL;
CREATE OR REPLACE VIEW GVBA_V_RAP_ERRORLOG
(
HIDE_F_IMP_LOG_DATUM,
FCLT_F_APPLICATIE,
FCLT_F_DATUM,
TIJDSTIP,
FCLT_F_NIVEAU,
FCLT_F_OMSCHRIJVING
)
AS
SELECT imp_log_datum hide_f_imp_log_datum,
imp_log_applicatie,
TO_CHAR (imp_log_datum, 'YYYYMMDD') fclt_f_datum,
TO_CHAR (imp_log_datum, 'HH24:MI:SS') tijdstip,
DECODE (imp_log_status,
'F', 'Fataal',
'E', 'Error',
'W', 'Waarschuwing',
'I', 'Informatief',
'-')
fclt_f_niveau,
imp_log_omschrijving fclt_f_omschrijving
FROM imp_log;
-----------------------------------------
-- Koppeling met Strukton
-----------------------------------------
CREATE OR REPLACE PROCEDURE gvba_import_opdrstat_strukton (
p_import_key IN NUMBER)
AS
c_delim VARCHAR2 (1) := ';';
v_newline VARCHAR2 (1000); -- Input line
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (1200);
v_dummy VARCHAR2 (200);
header_is_valid NUMBER := 0;
v_count NUMBER;
v_count_tot NUMBER (10) := 0;
v_count_import NUMBER (10) := 0;
v_ongeldig NUMBER (1) := 0;
-- De importvelden
v_mld_opdr_opmerking VARCHAR2 (4000);
v_mld_opdr_key NUMBER (10);
v_mld_opdr_key_tekst VARCHAR2 (100);
v_extern_nummer VARCHAR2 (100);
v_status NUMBER (10);
v_status_tekst VARCHAR2 (100);
v_status_code VARCHAR2 (100);
v_datumtijd DATE;
v_datumtijd_tekst VARCHAR2 (100);
v_opmerking VARCHAR2 (3000);
v_totaal NUMBER (8,2);
v_totaal_str VARCHAR2 (100);
-- Overige velden:
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
-- Eerst opruiming
DELETE FROM gvba_imp_opdrstat_strukton;
COMMIT;
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_errormsg := 'Fout opvragen te importeren rij';
v_aanduiding := '';
v_ongeldig := 0;
fac.imp_getfield (v_newline, c_delim, v_mld_opdr_key_tekst);
fac.imp_getfield (v_newline, c_delim, v_extern_nummer);
fac.imp_getfield (v_newline, c_delim, v_status_code); -- typeID
fac.imp_getfield (v_newline, c_delim, v_datumtijd_tekst);
fac.imp_getfield (v_newline, c_delim, v_status_tekst);
fac.imp_getfield (v_newline, c_delim, v_opmerking);
fac.imp_getfield (v_newline, c_delim, v_totaal_str);
v_totaal := fac.safe_to_number(v_totaal_str);
fac.imp_writelog (p_import_key, 'I', 'v_totaal_str:' || v_totaal_str || ' v_totaal:' || v_totaal || ' fac.safe_to_number(v_totaal_str):' || fac.safe_to_number(v_totaal_str),'');
v_opmerking := substr(v_opmerking, 1, 1000);
-- verwijder de markering voor cr/lf die we zelf in de stylesheet toegevoegd hebben.
v_opmerking := replace(v_opmerking, '@@',CHR (13) || CHR (10));
v_aanduiding :=
'['
|| v_extern_nummer
|| '|'
|| v_mld_opdr_key_tekst
|| '|'
|| v_status_tekst
|| '|'
|| v_opmerking
|| '] ';
-- 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 (TRIM (v_mld_opdr_key_tekst)) = 'REFERENCEID'
AND UPPER (TRIM (v_extern_nummer)) = 'SERVICEREQUESTID'
AND UPPER (TRIM (v_status_code)) = 'TYPEID'
AND UPPER (TRIM (v_datumtijd_tekst)) = 'DATETIME'
AND UPPER (TRIM (v_opmerking)) = 'REMARKS'
AND UPPER (TRIM (v_totaal_str)) = 'TOTAL'
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
v_errormsg := 'Fout inlezen mld_opdr_key [' || v_aanduiding || ']';
v_mld_opdr_key := TRIM (v_mld_opdr_key);
BEGIN
SELECT o.mld_opdr_key, o.mld_opdr_opmerking
INTO v_mld_opdr_key, v_mld_opdr_opmerking
FROM mld_opdr o, mld_melding m, ins_tab_discipline d, ins_srtdiscipline sd, mld_stdmelding std
WHERE o.mld_melding_key = m.mld_melding_key
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_prefix || m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr = v_mld_opdr_key_tekst;
EXCEPTION WHEN NO_DATA_FOUND THEN
BEGIN
fac.imp_writelog (p_import_key, 'W', 'Opdracht kan niet gevonden worden. [' || v_aanduiding || ']', '');
-- kijk nu of de opdracht gevonden kan worden a.d.h.v het Struktonnummer
SELECT o.mld_opdr_key, o.mld_opdr_opmerking
INTO v_mld_opdr_key, v_mld_opdr_opmerking
FROM mld_opdr o, mld_kenmerkopdr ko, mld_kenmerk k
WHERE o.mld_opdr_key = ko.mld_opdr_key
AND ko.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = 35
AND ko.mld_kenmerkopdr_waarde = v_extern_nummer;
EXCEPTION WHEN OTHERS THEN
v_ongeldig := 1;
v_errormsg := 'Opdracht kan niet gevonden worden (intern/externnr). [' || v_aanduiding || ']';
v_mld_opdr_key := NULL;
END;
END;
IF v_ongeldig = 0
THEN
v_errormsg :=
'Fout bij bepalen status [' || v_aanduiding || ']';
CASE
WHEN v_status_code = '5'
THEN
v_status := 5; -- uitgegeven
WHEN v_status_code = '10'
THEN
v_status := 8; -- geaccepteerd
WHEN v_status_code = '20' -- monteur gereed
THEN
v_status := 6; -- afgemeld
WHEN v_status_code = '25' -- specialist gereed
THEN
v_status := 6; -- afgemeld
WHEN v_status_code = '30' -- technisch gereed
THEN
v_status := 6; -- afgemeld -- afgerond
WHEN v_status_code = '70'
THEN
v_status := 1; -- geannuleerd
WHEN v_status_code = '80'
THEN
v_status := 1; -- afgewezen
ELSE
v_status := NULL;
v_ongeldig := 1; -- nog te bezien.
END CASE;
END IF;
-- Lees alle veldwaarden
IF v_ongeldig = 0
THEN
v_errormsg :=
'Fout bij converteren datumtijd [' || v_aanduiding || ']';
v_datumtijd :=
fac.safe_to_date (
REPLACE (
SUBSTR (v_datumtijd_tekst,
1,
INSTR (v_datumtijd_tekst, '.') - 1),
'T',
' '),
'yyyy-mm-dd hh24:mi:ss');
IF v_datumtijd = NULL
THEN
v_ongeldig := 0;
END IF;
END IF;
IF v_ongeldig = 0
THEN
v_errormsg :=
'Fout bij aanvullen opmerking [' || v_aanduiding || ']';
-- controleer of de opmerking niet leeg is en of dezelfde opmerking al bij een eerdere statusovergang
-- gemeld is.
IF v_opmerking IS NOT NULL AND INSTR(COALESCE(v_mld_opdr_opmerking, 'QueQuLeQue'), v_opmerking) = 0
THEN
v_opmerking :=
'['
|| v_datumtijd_tekst
|| '] - '
|| v_status_tekst
|| CHR (13)
|| CHR (10)
|| v_opmerking;
ELSE
v_opmerking :=
'[' || v_datumtijd_tekst || '] - ' || v_status_tekst;
END IF;
END IF;
-- Insert geformatteerde import record
IF (v_ongeldig = 0)
THEN
BEGIN
v_errormsg :=
'Fout toevoegen opdracht status ['
|| v_aanduiding
|| ']';
INSERT INTO gvba_imp_opdrstat_strukton (mld_opdr_key,
extern_nummer,
status,
datumtijd,
opmerking,
totaal)
VALUES (v_mld_opdr_key,
v_extern_nummer,
v_status,
v_datumtijd,
v_opmerking,
v_totaal);
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || v_errormsg,
'Fout bij toevoegen regel aan importtabel gvba_imp_opdr_status_strukton.');
END;
ELSE
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
'');
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!');
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| 'ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Inleesproces opdrachtstatusberichten afgebroken!');
END;
/
CREATE OR REPLACE PROCEDURE gvba_update_opdrstat_strukton (
p_import_key IN NUMBER)
AS
-- Cursor loopt - in volgorde! - over alle ingelezen opdrachtstatusberichten.
CURSOR c1
IS
SELECT mld_opdr_key,
extern_nummer,
datumtijd,
status,
opmerking,
totaal
FROM gvba_imp_opdrstat_strukton
ORDER BY 1, 3;
CURSOR cp (
c_opdr_key IN NUMBER)
IS
SELECT pf.prs_perslid_key
FROM fac_tracking tr,
fac_srtnotificatie str,
prs_v_perslid_fullnames_all pf
WHERE tr.fac_srtnotificatie_key = str.fac_srtnotificatie_key
AND tr.prs_perslid_key = pf.prs_perslid_key(+)
AND (str.fac_srtnotificatie_code = 'ORDFOK'
AND tr.fac_tracking_refkey = c_opdr_key
AND str.fac_srtnotificatie_xmlnode IN ('opdracht'))
ORDER BY fac_tracking_datum DESC, fac_tracking_key DESC;
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
v_count_tot NUMBER (10);
v_count NUMBER (10);
v_mld_key NUMBER (10) := 0;
v_opdr_key NUMBER (10) := 0;
v_opdr_status NUMBER (10) := 0;
v_user_key NUMBER (10) := 0;
v_melding_status NUMBER (10);
v_opdr_approved mld_opdr.mld_opdr_approved%TYPE;
v_approver_key prs_perslid.prs_perslid_key%TYPE;
v_mld_typeopdr_key mld_typeopdr.mld_typeopdr_key%TYPE;
v_mld_kenmerk_key mld_kenmerk.mld_kenmerk_key%TYPE;
v_mld_kenmerkopdr_key mld_kenmerkopdr.mld_kenmerkopdr_key%TYPE;
v_mld_srtkenmerk_key mld_srtkenmerk.mld_srtkenmerk_key%TYPE;
v_perslid_key prs_perslid.prs_perslid_key%TYPE;
v_opdr_kosten mld_opdr.mld_opdr_kosten%TYPE;
v_typeopdr_gvs mld_typeopdr.mld_typeopdr_gvs%TYPE;
v_mld_kk mld_melding.mld_kosten_klant%TYPE;
v_mld_kostenpl_key mld_melding.prs_kostenplaats_key%TYPE;
v_opdr_kostenpl_key mld_opdr.prs_kostenplaats_key%TYPE;
v_mld_perslid_key mld_melding.prs_perslid_key%TYPE;
v_mld_disc_key ins_tab_discipline.ins_discipline_key%TYPE;
v_refiat NUMBER (1);
v_reapprove NUMBER (1);
BEGIN
-- Loop door alle geimporteerde opdrachtstatusberichten en verwerk deze.
v_count_tot := 0;
-- Stel de key in van het srtkenmerk 'Ref. Nr. Leverancier'. Hier wordt
-- het nummer dat Strukton aan de call gegeven heeft geregistreerd.
v_mld_srtkenmerk_key := 81;
v_user_key := 44554; -- Strukton user
FOR rec IN c1
LOOP
BEGIN
v_aanduiding :=
'['
|| rec.mld_opdr_key
|| '|'
|| SUBSTR (rec.opmerking, 1, 100)
|| '] ';
v_count_tot := v_count_tot + 1;
v_count := 0;
-- Key van melding/opdracht bepalen en externnr bij opdracht opslaan.
IF (rec.mld_opdr_key IS NOT NULL)
THEN
v_errormsg := 'Fout bij bepalen opdracht.';
SELECT mld_melding_key,
mld_opdr_key,
mld_statusopdr_key,
mld_typeopdr_key
INTO v_mld_key,
v_opdr_key,
v_opdr_status,
v_mld_typeopdr_key
FROM mld_opdr
WHERE mld_opdr_key = rec.mld_opdr_key;
v_errormsg := 'Fout bij bepalen kenmerk extern nummer.';
SELECT k.mld_kenmerk_key
INTO v_mld_kenmerk_key
FROM mld_kenmerk k
WHERE k.mld_srtkenmerk_key = v_mld_srtkenmerk_key
AND k.mld_typeopdr_key = v_mld_typeopdr_key;
v_errormsg := 'Fout bij bepalen kenmerkopdracht extern nummer.';
SELECT MAX (ko.mld_kenmerkopdr_key)
INTO v_mld_kenmerkopdr_key
FROM mld_kenmerkopdr ko
WHERE ko.mld_opdr_key = v_opdr_key
AND v_mld_kenmerk_key = ko.mld_kenmerk_key;
v_errormsg := 'Fout bij aanpassen extern nummer.';
IF v_mld_kenmerkopdr_key IS NULL
THEN
-- kenmerk toevoegen
INSERT INTO mld_kenmerkopdr (mld_kenmerk_key,
mld_opdr_key,
mld_kenmerkopdr_waarde)
VALUES (v_mld_kenmerk_key, v_opdr_key, rec.extern_nummer);
ELSE
-- kenmerk aanpassen
UPDATE mld_kenmerkopdr
SET mld_kenmerkopdr_waarde = rec.extern_nummer
WHERE mld_kenmerkopdr_key = v_mld_kenmerkopdr_key;
END IF;
v_errormsg := 'Fout bij bijwerken opdracht-opmerking.';
v_count := LENGTH (rec.opmerking) + 5; -- Beetje speling qua lengte!
UPDATE mld_opdr
SET mld_opdr_opmerking =
DECODE (
mld_opdr_opmerking,
NULL,
rec.opmerking,
rec.opmerking
|| CHR (13)
|| CHR (10)
|| SUBSTR (mld_opdr_opmerking, 1, (4000 - v_count)))
WHERE mld_opdr_key = v_opdr_key;
IF v_opdr_status <> rec.status
THEN
IF rec.status = 8 AND v_opdr_status = 5
THEN
-- Accepteer opdracht als de opdracht uitgegeven was
mld.setopdrachtstatus (v_opdr_key, 8, v_user_key); -- Facilitor
ELSIF rec.status = 6 AND v_opdr_status = 5
THEN
-- Meld de opdracht af als deze uitgegeven was
mld.setopdrachtstatus (v_opdr_key, 8, v_user_key); -- Facilitor, eerst accepteren
mld.setopdrachtstatus (v_opdr_key, 6, v_user_key); -- Facilitor
ELSIF rec.status = 6 AND v_opdr_status = 8
THEN
-- Meld de opdracht af als deze geaccepteerd was
mld.setopdrachtstatus (v_opdr_key, 6, v_user_key); -- Facilitor
ELSIF rec.status = 1 AND v_opdr_status = 5
THEN
-- Opdracht is afgewezen op het moment dat de opdracht nog niet geaccepteerd is.
mld.setopdrachtstatus (v_opdr_key, 1, v_user_key); -- Facilitor
mld.updatemeldingstatusav (v_mld_key,
0,
v_user_key,
0);
ELSIF rec.status = 1 AND v_opdr_status = 8
THEN
-- Opdracht is afgewezen op het moment dat de opdracht al geaccepteerd is.
mld.setopdrachtstatus (v_opdr_key, 6, v_user_key); -- Facilitor
--MLD.updatemeldingstatusAV (v_mld_key, 0, v_user_key, 0);
ELSIF rec.status = 9 AND v_opdr_status = 6
THEN
-- Opdracht is afgerond en opdrachtstatus was afgemeld.
mld.setopdrachtstatus (v_opdr_key, 9, v_user_key); -- Facilitor
END IF;
IF rec.status = 6 AND v_opdr_status <> 6
THEN
-- Als er geen open opdrachten zijn wordt de melding afgemeld.
MLD.updatemeldingstatusAV (v_mld_key, 1, v_user_key, 0);
SELECT mld_melding_status
INTO v_melding_status
FROM mld_melding
WHERE mld_melding_key = v_mld_key;
IF v_melding_status = 5
THEN
UPDATE mld_melding
SET mld_melding_opmerking = rec.opmerking || CHR (10) || CHR (13) || mld_melding_opmerking
WHERE mld_melding_key = v_mld_key;
END IF;
ELSE
IF rec.status = 9 AND v_opdr_status <> 9
THEN
-- Oorspronkelijke gegevens opdracht ophalen.
-- var opdr_info = mld.mld_opdr_info(opdr_key);
SELECT mld_opdr_kosten,
mld_typeopdr_gvs,
mld_kosten_klant,
m.prs_kostenplaats_key,
o.prs_kostenplaats_key,
m.prs_perslid_key,
std.mld_ins_discipline_key
INTO v_opdr_kosten,
v_typeopdr_gvs,
v_mld_kk,
v_mld_kostenpl_key,
v_opdr_kostenpl_key,
v_mld_perslid_key,
v_mld_disc_key
FROM mld_opdr o,
mld_melding m,
mld_typeopdr t,
mld_stdmelding std
WHERE o.mld_melding_key = m.mld_melding_key
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND o.mld_typeopdr_key = t.mld_typeopdr_key
AND o.mld_opdr_key = v_opdr_key;
-- Hergoedkeuring (Ter goedkeuring) wordt (pas) vereist als het opdrachtbedrag hoger is dan al is goedgekeurd en boven de GVS-grens uitkomt.
-- Herfiattering (Ter fiattering) wordt (pas) vereist indien het bedrag boven het mandaat van de oorspronkelijke (laatste) fiatteur uitkomt
-- en boven de GVS-grens uitkomt.
-- Hergoedkeuring en herfiattering kan alleen als het totaalbedrag van de opdracht is verhoogd en alleen in de statussen 5, 8, 6 en 9 (de uitvoeringsfase en de afhandelingsfase).
-- Hergoedkeuring en herfiattering kan leiden tot een tijdelijke terugkeer naar de voorfase status 3 of 10.
IF rec.totaal > v_opdr_kosten
THEN
fac.imp_writelog (p_import_key, 'I', 'rec.totaal > v_opdr_kosten: ' || rec.totaal || ' - ' || v_opdr_kosten, '');
-- Hergoedkeuring (Ter goedkeuring) wordt (pas) vereist als het opdrachtbedrag hoger is dan al is goedgekeurd en boven de GVS-grens uitkomt.
IF rec.totaal > COALESCE (v_opdr_approved, 0) AND rec.totaal > v_typeopdr_gvs
THEN
v_reapprove := 1;
ELSE
v_reapprove := 0;
END IF;
fac.imp_writelog (p_import_key, 'I', 'hergoedkeuring: ' || v_reapprove || ' - ' || v_opdr_approved || ' - ' || v_typeopdr_gvs, '');
-- Herfiattering (Ter fiattering) wordt (pas) vereist indien het bedrag boven het mandaat van de oorspronkelijke (laatste) fiatteur uitkomt
-- en boven de GVS-grens uitkomt.
-- Bepaal het mandaat van de oorspronkelijke (laatste) fiatteur.
-- Ook als er de vorige keer geen kosten waren dan moet pas worden geherfiatteerd als (tot_kosten > mandaat),
-- waarbij de mandaat van de Melder/aanvrager van melding of de user is.
v_perslid_key := NULL;
IF rec.totaal > v_opdr_kosten AND rec.totaal > 0 AND rec.totaal > v_typeopdr_gvs
THEN
fac.imp_writelog (p_import_key, 'I', 'F - rec.totaal > v_opdr_kosten: ' || rec.totaal || ' - ' || v_opdr_kosten || ' - ' || v_typeopdr_gvs, '');
-- De totale kosten zijn verhoogd en het bedrag zit boven de GVS-grens.
-- Bepaling oorspronkelijke (laatste) fiatteur, als die er was.
v_perslid_key := NULL;
FOR rec2 IN cp (v_opdr_key)
LOOP
BEGIN
v_perslid_key := rec2.prs_perslid_key;
END;
END LOOP;
fac.imp_writelog (p_import_key, 'I', 'F - laatste fiatteur: ' || v_perslid_key, '');
IF v_perslid_key IS NULL
THEN
-- Dan waren de opdracht kosten onder het mandaat van mijzelf of de BO-medewerker.
-- Als de kostenplaats bij de opdracht overruled is dan wordt altijd tegen het profiel van de BO-medewerker getest.
IF v_mld_kk = 1
AND v_mld_kostenpl_key = v_opdr_kostenpl_key
THEN
v_perslid_key := v_mld_perslid_key; -- Melder/aanvrager van melding
END IF;
END IF;
fac.imp_writelog (p_import_key, 'I', 'F - indien onbekend terugvallen op melder: ' || v_perslid_key, '');
IF fac.getsetting ('mld_use_order_approval') = 1
AND (rec.totaal >
fac.getsetting ('can_selfapprove')
OR rec.totaal >
prs.getprofiellimiet (v_perslid_key, v_mld_disc_key))
THEN
-- Er moet (opnieuw) gefiatteerd worden. Is er wel iemand met voldoende mandaat? Indien er niemand gevonden kan worden mag de wijziging niet doorgaan.
-- Het mandaat is al te hoog voor de melder/aanvrager van de melding of mijzelf.
v_approver_key :=
prs.getkpverantwoordelijke (
v_opdr_kostenpl_key,
fac.getsetting ('prs_approvemethod'),
v_user_key);
v_refiat := 1;
-- er moet (her)fiattering plaatsvinden
fac.imp_writelog (p_import_key, 'I', 'F - (her)fiatteur: ' || v_approver_key, '');
END IF;
END IF;
END IF;
IF v_reapprove = 1 OR v_refiat = 1
THEN
-- Zet de refiat waarden. Het hergoedkeurings- en/of herfiatteringstraject wordt opnieuw ingegaan. // Tracking hiervan is niet nodig.
IF v_opdr_kosten > 0
THEN
UPDATE mld_opdr
SET mld_opdr_materiaal_refiat = mld_opdr_materiaal,
mld_opdr_kosten_refiat = mld_opdr_kosten
WHERE mld_opdr_key = v_opdr_key;
END IF;
-- Ook voor status 5 wordt refiatstatus gezet zodat bekend is dat het om een herfiattering gaat. De fiatteringsvoorwaarde is dan iets anders.
UPDATE mld_opdr
SET mld_statusopdr_key_refiat = mld_statusopdr_key
WHERE mld_opdr_key = v_opdr_key;
-- Goedkeuring opnieuw ingaan kan alleen als het approved bedrag leeg is.
UPDATE mld_opdr
SET mld_opdr_approved_refiat = mld_opdr_approved
WHERE mld_opdr_key = v_opdr_key;
UPDATE mld_opdr
SET mld_opdr_approved = NULL,
mld_opdr_materiaal = rec.totaal,
mld_opdr_kosten = rec.totaal
WHERE mld_opdr_key = v_opdr_key;
ELSE
UPDATE mld_opdr
SET mld_opdr_materiaal = rec.totaal,
mld_opdr_kosten = rec.totaal
WHERE mld_opdr_key = v_opdr_key;
END IF;
-- geef in de tracking aan dat de kosten via de interface aangepast zijn.
IF v_opdr_kosten <> rec.totaal
THEN
fac.trackaction ('ORDUPD', v_opdr_key, v_user_key, SYSDATE,
'Gewijzigd' || CHR (13) || CHR (10)
|| 'Materiaal: ' || v_opdr_kosten || ' --> ' || rec.totaal || CHR (13) || CHR (10)
|| 'Totaal: ' || v_opdr_kosten || ' --> ' || rec.totaal);
END IF;
IF v_reapprove = 1
THEN
-- Zetten van de status van de gewijzigde opdracht op "Ter goedkeuring" en afhandelen van de tracking (status + uitvoerende tracking) en daarmee notificatie.
-- status = 10; Ter goedkeuring.
mld.setopdrachtstatus (v_opdr_key, 10, v_user_key);
ELSE
IF v_refiat = 1
THEN
-- Zetten van de status van de gewijzigde opdracht op "Ter fiattering" en afhandelen van de tracking (status + uitvoerende tracking) en daarmee notificatie.
-- status = 3; // Ter fiattering.
mld.setopdrachtstatus (v_opdr_key, 3, v_user_key);
END IF;
END IF;
END IF;
END IF;
END IF;
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Fout bij verwerken opdrachtstatusbericht.');
END;
END LOOP;
COMMIT;
END;
/
-- begin gvba_export_daily_task('DAILY_TASK', 'NOW', NULL, NULL); end;
CREATE OR REPLACE PROCEDURE gvba_export_daily_task (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_filedir IN VARCHAR2,
p_filename IN VARCHAR2)
AS
BEGIN
GVBA.set_mandaat_vrijstelling;
END;
/
-- rapport tbv mandaten en vrijstellingen
CREATE OR REPLACE VIEW gvba_v_rap_mand_vrij
AS
SELECT d.ins_deel_key,
ins_srtdeel_upper,
ins_deel_omschrijving,
prs_perslid_volnaam,
d.prs_perslid_key,
ins_deel_vervaldatum,
ins_deel_aanmaak,
(SELECT prs_bedrijf_naam
FROM ins_kenmerkdeel kmd, prs_bedrijf b
WHERE kmd.ins_deel_key = d.ins_deel_key
AND kmd.ins_kenmerk_key = 21
AND FAC.safe_to_number (kmd.ins_kenmerkdeel_waarde) =
b.prs_bedrijf_key)
bedrijf,
(SELECT ins_kenmerkdeel_waarde
FROM ins_kenmerkdeel kmd
WHERE kmd.ins_deel_key = d.ins_deel_key AND kmd.ins_kenmerk_key = 22)
berijder,
(SELECT ins_kenmerkdeel_waarde
FROM ins_kenmerkdeel kmd
WHERE kmd.ins_deel_key = d.ins_deel_key AND kmd.ins_kenmerk_key = 23)
kenteken,
(SELECT ins_kenmerkdeel_waarde
FROM ins_kenmerkdeel kmd
WHERE kmd.ins_deel_key = d.ins_deel_key AND kmd.ins_kenmerk_key = 41)
gvb_onderdeel,
(SELECT ins_kenmerkdeel_waarde
FROM ins_kenmerkdeel kmd
WHERE kmd.ins_deel_key = d.ins_deel_key AND kmd.ins_kenmerk_key = 61)
afw_contact,
CASE WHEN dv.fac_tracking_datum > SYSDATE -100 THEN 'Verlengd' ELSE 'Verlengen' END verlengstatus,
TO_CHAR(SYSDATE, 'MM') verlengmaand,
dv.fac_tracking_datum verlengd_op
FROM ins_v_deel_gegevens d,
( SELECT fac_tracking_refkey, MAX(fac_tracking_datum) fac_tracking_datum
FROM fac_tracking t, fac_srtnotificatie sn
WHERE t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'CUST01' -- man/vrij is verlengd
AND TRUNC(t.fac_tracking_datum, 'YY') = TRUNC(SYSDATE, 'YY')
GROUP BY fac_tracking_refkey) dv
WHERE ins_discipline_key = 641
AND ins_deel_vervaldatum > SYSDATE
AND d.ins_deel_key = dv.fac_tracking_refkey(+);
-- rapport tbv mandaten en vrijstellingen
CREATE OR REPLACE VIEW gvba_v_rap_mand_vrij_meld
AS
SELECT d.ins_deel_key,
ins_srtdeel_upper,
ins_deel_omschrijving,
prs_perslid_volnaam,
d.prs_perslid_key,
ins_deel_vervaldatum,
ins_deel_aanmaak,
(SELECT prs_bedrijf_naam
FROM ins_kenmerkdeel kmd, prs_bedrijf b
WHERE kmd.ins_deel_key = d.ins_deel_key
AND kmd.ins_kenmerk_key = 21
AND FAC.safe_to_number (kmd.ins_kenmerkdeel_waarde) =
b.prs_bedrijf_key)
bedrijf,
(SELECT ins_kenmerkdeel_waarde
FROM ins_kenmerkdeel kmd
WHERE kmd.ins_deel_key = d.ins_deel_key AND kmd.ins_kenmerk_key = 22)
berijder,
(SELECT ins_kenmerkdeel_waarde
FROM ins_kenmerkdeel kmd
WHERE kmd.ins_deel_key = d.ins_deel_key AND kmd.ins_kenmerk_key = 23)
kenteken,
(SELECT ins_kenmerkdeel_waarde
FROM ins_kenmerkdeel kmd
WHERE kmd.ins_deel_key = d.ins_deel_key AND kmd.ins_kenmerk_key = 41)
gvb_onderdeel,
(SELECT ins_kenmerkdeel_waarde
FROM ins_kenmerkdeel kmd
WHERE kmd.ins_deel_key = d.ins_deel_key AND kmd.ins_kenmerk_key = 61)
afw_contact,
m.mld_melding_key,
s.mld_statuses_omschrijving
FROM ins_v_deel_gegevens d, mld_melding_object mo, mld_melding m, mld_statuses s
WHERE ins_discipline_key = 641
AND ins_deel_vervaldatum > SYSDATE
AND d.ins_deel_key = mo.ins_deel_key(+)
AND mo.mld_melding_key = m.mld_melding_key(+)
AND m.mld_melding_status = s.mld_statuses_key(+);
-- VIEW tbv maandaten en vrijstellingen.
CREATE OR REPLACE VIEW gvba_v_rap_statusverlenging
AS
SELECT alg_plaatsaanduiding,
SUM (verlengd) cverlengd,
SUM (niet_verlengd) cnietverlengd,
COUNT (*) totaal
FROM (SELECT alg_plaatsaanduiding,
CASE
WHEN ins_deel_vervaldatum >
ADD_MONTHS (TRUNC (SYSDATE, 'Y'), 12)
THEN
1
ELSE
0
END verlengd,
CASE
WHEN ins_deel_vervaldatum <
ADD_MONTHS (TRUNC (SYSDATE, 'Y'), 12)
THEN
1
ELSE
0
END niet_verlengd
FROM ins_v_deel_gegevens
WHERE ins_discipline_key = 641 AND ins_deel_vervaldatum > SYSDATE)
GROUP BY alg_plaatsaanduiding;
------ payload end ------
SET DEFINE OFF
BEGIN adm.systrackscriptId ('$Id$', 0); END;
/
COMMIT;
SET ECHO OFF
SPOOL OFF
SET DEFINE ON
PROMPT Logfile of this upgrade is: &fcltlogfile