-- Script containing customer specific configuration sql statements for Sutfene -- $Revision$ -- $Id$ DEFINE thisfile = 'SUTF.SQL' DEFINE dbuser = '^SUTF' DEFINE custid = 'SUTF' 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 VIEW sutf_v_import_log AS SELECT imp_log_status fclt_f_status, imp_log_omschrijving omschrijving, imp_log_hint opmerking FROM imp_log WHERE imp_log_applicatie = 'PRS'; CREATE OR REPLACE PROCEDURE sutf_import_prs ( p_import_key IN NUMBER ) IS c_fielddelimitor VARCHAR2 (1) := ';'; -- LET OP: moet idem zijn als declaratie bij sutf_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; -- De importvelden: v_prs_perslid_nr VARCHAR2 (256); v_prs_perslid_naam VARCHAR2 (256); v_prs_perslid_tussenvoegsel VARCHAR2 (256); v_prs_perslid_voorletters VARCHAR2 (256); v_prs_perslid_voornaam VARCHAR2 (256); v_prs_afdeling_naam VARCHAR2 (256); v_prs_srtperslid_omschrijving VARCHAR2 (256); v_prs_perslid_telefoonnr 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 sutf_imp_prs; COMMIT; v_count_tot := 0; v_count_import := 0; FOR rec1 IN c1 LOOP BEGIN v_newline := rec1.fac_imp_file_line; v_aanduiding := ''; v_errorhint := 'Fout bij opvragen te importeren rij'; v_ongeldig := 0; -- Lees alle veldwaarden -- 01 fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_locatie_code); -- 02 fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_gebouw_code); -- 03 fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_afdeling_naam); -- 04 fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_naam); -- 05 fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_tussenvoegsel); -- 06 fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_voorletters); -- 07 fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_voornaam); -- 08 fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_telefoonnr); -- 09 fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_email); -- 10 fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_srtperslid_omschrijving); -- 11 fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_nr); -- 12 fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_oslogin); -- v_aanduiding := '[' || v_prs_perslid_nr || '|' || v_prs_perslid_naam || '|' || v_prs_perslid_tussenvoegsel || '|' || v_prs_perslid_voornaam || '] '; -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen -- de juiste kolomkop. Ik controleer daarbij ALLE kolommen! -- Ik negeer alles totdat ik een geldige header ben gepasseerd. IF (header_is_valid = 0) THEN IF UPPER (v_alg_locatie_code) = 'LOCATIECODE' AND UPPER (v_alg_gebouw_code) = 'GEBOUWCODE' AND UPPER (v_prs_afdeling_naam) = 'AFDELINGSCODE' AND UPPER (v_prs_perslid_naam) = 'PERSOONACHTERNAAM' AND UPPER (v_prs_perslid_tussenvoegsel) = 'TUSSENVOEGSEL' AND UPPER (v_prs_perslid_voorletters) = 'VOORLETTERS' AND UPPER (v_prs_perslid_voornaam) = 'VOORNAAM' AND UPPER (v_prs_perslid_telefoonnr) = 'TELEFOONNUMMER' AND UPPER (v_prs_perslid_email) = 'EMAIL' AND UPPER (v_prs_srtperslid_omschrijving) = 'FUNCTIE' AND UPPER (v_prs_perslid_nr) = 'PERSONEELSNUMMER' AND UPPER (v_prs_perslid_oslogin) = 'LOGINNAAM' THEN header_is_valid := 1; END IF; ELSE v_count_tot := v_count_tot + 1; -- Controleer alle veldwaarden v_errorhint := 'Ongeldig personeelsnummer'; v_prs_perslid_nr := TRIM (v_prs_perslid_nr); IF LENGTH (v_prs_perslid_nr) > 16 THEN v_prs_perslid_nr := SUBSTR (v_prs_perslid_nr, 1, 16); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Personeelsnummer te lang', 'Personeelsnummer wordt afgebroken tot [' || v_prs_perslid_nr || ']' ); ELSE IF (v_prs_perslid_nr IS NULL) THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'E', v_aanduiding || 'Personeelsnummer onbekend', 'Personeelsnummer is verplicht; regel wordt overgeslagen!' ); END IF; END IF; COMMIT; -- 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 tussenvoegsel'; v_prs_perslid_tussenvoegsel := TRIM (v_prs_perslid_tussenvoegsel); IF LENGTH (v_prs_perslid_tussenvoegsel) > 10 THEN v_prs_perslid_tussenvoegsel := SUBSTR (v_prs_perslid_tussenvoegsel, 1, 10); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Tussenvoegsel te lang', 'Tussenvoegsel wordt afgebroken tot [' || v_prs_perslid_tussenvoegsel || ']' ); COMMIT; END IF; -- v_errorhint := 'Ongeldige voorletters'; v_prs_perslid_voorletters := TRIM (v_prs_perslid_voorletters); IF LENGTH (v_prs_perslid_voorletters) > 10 THEN v_prs_perslid_voorletters := SUBSTR (v_prs_perslid_voorletters, 1, 10); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Voorletters te lang', 'Voorletters worden afgebroken tot [' || v_prs_perslid_voorletters || ']' ); COMMIT; END IF; -- v_errorhint := 'Ongeldige voornaam'; v_prs_perslid_voornaam := TRIM (v_prs_perslid_voornaam); IF LENGTH (v_prs_perslid_voornaam) > 30 THEN v_prs_perslid_voornaam := SUBSTR (v_prs_perslid_voornaam, 1, 30); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Voornaam is te lang', 'Voornaam wordt afgebroken tot [' || v_prs_perslid_voornaam || ']' ); ELSE IF (v_prs_perslid_voornaam IS NULL) THEN v_prs_perslid_voornaam := '-'; fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Voornaam onbekend', 'Voornaam wordt gezet op [-]' ); END IF; END IF; COMMIT; -- v_errorhint := 'Ongeldige afdelingscode'; v_prs_afdeling_naam := TRIM (v_prs_afdeling_naam); IF LENGTH (v_prs_afdeling_naam) > 10 THEN v_prs_afdeling_naam := SUBSTR (v_prs_afdeling_naam, 1, 10); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Afdelingscode te lang', 'Afdelingscode wordt afgebroken tot [' || v_prs_afdeling_naam || ']' ); ELSE IF (v_prs_afdeling_naam IS NULL) THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'E', v_aanduiding || '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_ongeldig := 1; fac.imp_writelog (p_import_key, 'E', v_aanduiding || 'Functie onbekend', 'Functie is verplicht; regel wordt overgeslagen!' ); END IF; END IF; COMMIT; -- v_errorhint := 'Ongeldige plaats/locatiecode'; v_alg_locatie_code := TRIM(v_alg_locatie_code); IF LENGTH (v_alg_locatie_code) > 5 THEN v_alg_locatie_code := SUBSTR (v_alg_locatie_code, 1, 5); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Locatiecode te lang', 'Locatiecode wordt afgebroken tot [' || v_alg_locatie_code || ']' ); COMMIT; END IF; -- v_errorhint := 'Ongeldige plaats/gebouwcode'; v_alg_gebouw_code := TRIM(v_alg_gebouw_code); IF LENGTH (v_alg_gebouw_code) > 10 THEN v_alg_gebouw_code := SUBSTR (v_alg_gebouw_code, 1, 10); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Gebouwcode te lang', 'Gebouwcode wordt afgebroken tot [' || v_alg_gebouw_code || ']' ); COMMIT; END IF; -- v_errorhint := 'Ongeldig telefoonnummer'; v_prs_perslid_telefoonnr := TRIM (v_prs_perslid_telefoonnr); IF LENGTH (v_prs_perslid_telefoonnr) > 15 THEN v_prs_perslid_telefoonnr := SUBSTR (v_prs_perslid_telefoonnr, 1, 15); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Telefoonnummer te lang', 'Telefoonnummer wordt afgebroken tot [' || v_prs_perslid_telefoonnr || ']' ); COMMIT; END IF; -- v_errorhint := 'Ongeldig e-mailadres'; v_prs_perslid_email := TRIM (v_prs_perslid_email); IF LENGTH (v_prs_perslid_email) > 50 THEN v_prs_perslid_email := SUBSTR (v_prs_perslid_email, 1, 50); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'E-mailadres te lang', 'E-mailadres wordt afgebroken tot [' || v_prs_perslid_email || ']' ); COMMIT; END IF; -- v_errorhint := '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 || ']' ); COMMIT; END IF; -- Insert geformatteerde import record IF v_ongeldig = 0 THEN BEGIN v_errorhint := 'Fout bij toevoegen regel aan importtabel sutf_IMP_PRS'; INSERT INTO sutf_imp_prs (prs_perslid_nr, prs_perslid_naam, prs_perslid_tussenvoegsel, prs_perslid_voorletters, prs_perslid_voornaam, prs_afdeling_naam, prs_srtperslid_omschrijving, alg_locatie_code, alg_gebouw_code, alg_verdieping_volgnr, alg_ruimte_nr, prs_perslid_telefoonnr, prs_perslid_email, prs_perslid_oslogin ) VALUES (v_prs_perslid_nr, v_prs_perslid_naam, v_prs_perslid_tussenvoegsel, v_prs_perslid_voorletters, v_prs_perslid_voornaam, v_prs_afdeling_naam, v_prs_srtperslid_omschrijving, v_alg_locatie_code, v_alg_gebouw_code, NULL, NULL, v_prs_perslid_telefoonnr, v_prs_perslid_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 sutf_import_prs; / CREATE OR REPLACE PROCEDURE sutf_update_prs ( p_import_key IN NUMBER ) IS -- LET OP: moet idem zijn als declaratie bij sutf_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_groep_upper VARCHAR2 (30) := '_DEFAULT'; c_key_default_rol NUMBER(10) := 1; c_key_JGZ_rol NUMBER(10) := 22; c_key_Risicobeheers_rol NUMBER(10) := 62; c_key_ConcernStaf_rol NUMBER(10) := 63; 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_locatie_key NUMBER (10); v_gebouw_key NUMBER (10); v_verdieping_key NUMBER (10); v_ruimte_key NUMBER (10); v_wp_key NUMBER (10); v_wp_volgnr NUMBER (3); v_wp_oms VARCHAR2 (30); v_groep_defaultnaam VARCHAR2 (30); -- Let op! Met eindatum zijn personen die niet meer in dienst zijn. -- Dubbele nummers? Dan wordt iemand mogelijk niet verwijderd/INACTIEF! CURSOR cdelprs IS SELECT p.prs_perslid_key, p.prs_perslid_nr, p.prs_perslid_naam, p.prs_perslid_voornaam FROM prs_v_aanwezigperslid p WHERE p.prs_perslid_nr IS NOT NULL AND NOT EXISTS ( SELECT 1 FROM sutf_imp_prs ip WHERE ip.prs_perslid_nr = p.prs_perslid_nr); -- Let op! Met eindatum zijn personen die niet meer in dienst zijn. CURSOR csperslid IS SELECT UPPER(prs_srtperslid_omschrijving) prs_srtperslid_omschrijving FROM sutf_imp_prs GROUP BY UPPER (prs_srtperslid_omschrijving); CURSOR cperslid IS SELECT * FROM sutf_imp_prs; CURSOR cwp IS SELECT p.*, ip.alg_locatie_code, ip.alg_gebouw_code FROM sutf_imp_prs ip, prs_v_aanwezigperslid p WHERE ip.alg_locatie_code IS NOT NULL AND ip.alg_gebouw_code IS NOT NULL AND UPPER (ip.prs_perslid_nr) = UPPER (p.prs_perslid_nr); -- Alle actieve personen met personeelsnummer (ie. de import-doelgroep) zonder een werkplek CURSOR cnowp IS SELECT p.prs_perslid_key, p.prs_perslid_nr, p.prs_perslid_naam, p.prs_perslid_voornaam FROM prs_v_aanwezigperslid p WHERE p.prs_perslid_nr IS NOT NULL AND p.prs_perslid_naam NOT LIKE c_persoon_inactief || '%' AND NOT EXISTS (SELECT 1 FROM prs_perslidwerkplek pw WHERE pw.prs_perslid_key = p.prs_perslid_key); -- Alle aanwezige personen met personeelsnummer (ie. de import-doelgroep) niet in een groep CURSOR cnogroup IS SELECT p.prs_perslid_key, p.prs_perslid_nr, p.prs_perslid_naam, p.prs_perslid_voornaam FROM prs_v_aanwezigperslid p WHERE p.prs_perslid_nr IS NOT NULL AND NOT EXISTS (SELECT 1 FROM fac_gebruikersgroep g WHERE g.prs_perslid_key = p.prs_perslid_key); BEGIN SELECT DECODE (COUNT (*), 0, 1, COUNT (*)) INTO v_count_prs_actual FROM prs_perslid WHERE prs_perslid_verwijder IS NULL AND prs_perslid_nr IS NOT NULL; SELECT DECODE (COUNT (*), 0, 1, COUNT (*)) INTO v_count_prs_import FROM prs_perslid p, sutf_imp_prs ip WHERE p.prs_perslid_nr IS NOT NULL AND p.prs_perslid_verwijder IS NULL AND p.prs_perslid_nr = ip.prs_perslid_nr; IF ( (TRUNC ((v_count_prs_import / v_count_prs_actual) * 100) >= (100 - c_max_delta_percentage ) ) ) THEN -- Geldig importbestand wat betreft aantal personen FOR recdelprs IN cdelprs LOOP BEGIN -- Heeft persoon actuele/toekomstige verplichtingen? SELECT COUNT (*) INTO v_count FROM prs_perslid p, prs_v_verplichting_keys r WHERE p.prs_perslid_key = r.prs_perslid_key AND p.prs_perslid_key = recdelprs.prs_perslid_key; IF (v_count = 0) THEN v_errorhint := 'Fout bij verwijderen persoon'; UPDATE prs_perslid SET prs_perslid_verwijder = SYSDATE WHERE prs_perslid_key = recdelprs.prs_perslid_key; fac.imp_writelog (p_import_key, 'I', 'Persoon met nummer [' || recdelprs.prs_perslid_nr || '] en naam [' || recdelprs.prs_perslid_naam || ', ' || recdelprs.prs_perslid_voornaam || '] is verwijderd', 'Persoon is verwijderd' ); COMMIT; ELSE -- Staat persoon INACTIEF? SELECT COUNT (*) INTO v_count FROM prs_perslid p WHERE p.prs_perslid_naam LIKE c_persoon_inactief || '%' AND p.prs_perslid_key = recdelprs.prs_perslid_key; IF (v_count = 0) THEN v_errorhint := 'Fout bij INACTIEF zetten persoon'; -- Persoon INACTIEF zetten (update naam + reset oslogin) UPDATE prs_perslid SET prs_perslid_naam = SUBSTR (c_persoon_inactief || prs_perslid_naam, 1, 30 ), prs_perslid_oslogin = NULL WHERE prs_perslid_key = recdelprs.prs_perslid_key; fac.imp_writelog (p_import_key, 'I', 'Persoon met nummer [' || recdelprs.prs_perslid_nr || '] en naam [' || recdelprs.prs_perslid_naam || ', ' || recdelprs.prs_perslid_voornaam || '] is INACTIEF gezet', 'Persoon is INACTIEF gezet' ); ELSE v_errorhint := 'Fout bij INACTIEF maken persoon'; -- Persoon INACTIEF maken (reset oslogin; indien handmatig INACTIEF gezet) UPDATE prs_perslid SET prs_perslid_oslogin = NULL WHERE prs_perslid_naam LIKE c_persoon_inactief || '%' AND prs_perslid_oslogin IS NOT NULL; fac.imp_writelog (p_import_key, 'I', 'Persoon met nummer [' || recdelprs.prs_perslid_nr || '] en naam [' || recdelprs.prs_perslid_naam || ', ' || recdelprs.prs_perslid_voornaam || '] is INACTIEF gemaakt', 'Persoon is INACTIEF gemaakt' ); END IF; COMMIT; END IF; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint ); COMMIT; END; END LOOP; v_count_tot := 0; v_count_error := 0; FOR recsperslid IN csperslid LOOP BEGIN v_count_tot := v_count_tot + 1; v_aanduiding := recsperslid.prs_srtperslid_omschrijving || ' - '; v_errorhint := 'Fout bij bepalen functie'; SELECT COUNT (*) INTO v_count FROM prs_srtperslid WHERE UPPER (prs_srtperslid_omschrijving) = UPPER (recsperslid.prs_srtperslid_omschrijving) AND prs_srtperslid_verwijder IS NULL; IF (v_count = 0) THEN v_errorhint := 'Fout bij toevoegen functie'; INSERT INTO prs_srtperslid (prs_srtperslid_omschrijving ) VALUES (recsperslid.prs_srtperslid_omschrijving ); COMMIT; END IF; EXCEPTION WHEN OTHERS THEN v_count_error := v_count_error + 1; oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, v_errorhint ); COMMIT; END; END LOOP; fac.imp_writelog (p_import_key, 'S', 'Functie: verwerkte regels zonder foutmelding: ' || TO_CHAR (v_count_tot - v_count_error), '' ); fac.imp_writelog (p_import_key, 'S', 'Functie: verwerkte regels met foutmelding: ' || TO_CHAR (v_count_error), '' ); COMMIT; v_count_tot := 0; v_count_error := 0; FOR recperslid IN cperslid LOOP BEGIN v_count_tot := v_count_tot + 1; v_aanduiding := recperslid.prs_perslid_nr || '|' || recperslid.prs_perslid_naam || '|' || recperslid.prs_perslid_voornaam || ' - '; v_errorhint := 'Fout bij bepalen functie [' || recperslid.prs_srtperslid_omschrijving || ']'; SELECT prs_srtperslid_key INTO v_srtperslid_key FROM prs_srtperslid WHERE prs_srtperslid_verwijder IS NULL AND UPPER (prs_srtperslid_omschrijving) = UPPER (recperslid.prs_srtperslid_omschrijving); v_errorhint := 'Fout bij bepalen afdeling [' || recperslid.prs_afdeling_naam || ']'; SELECT prs_afdeling_key INTO v_afdeling_key FROM prs_afdeling WHERE prs_afdeling_verwijder IS NULL AND UPPER (prs_afdeling_naam) = UPPER (recperslid.prs_afdeling_naam); v_errorhint := 'Fout bij bepalen persoon'; SELECT COUNT (*), MAX (prs_perslid_key) INTO v_count, v_perslid_key FROM prs_perslid WHERE prs_perslid_verwijder IS NULL AND UPPER (prs_perslid_nr) = UPPER (recperslid.prs_perslid_nr); -- Login afleiden uit e-mail (alles voor @) -- v_oslogin := SUBSTR (recperslid.prs_perslid_email, 1, INSTR (recperslid.prs_perslid_email, '@', 1, 1) - 1); -- Hier wordt loginnaam expliciet (anders) in het importbestand meegegeven. v_oslogin := recperslid.prs_perslid_oslogin; IF (v_count = 0) THEN v_errorhint := 'Fout bij toevoegen persoon'; INSERT INTO prs_perslid (prs_perslid_module, prs_srtperslid_key, prs_afdeling_key, prs_perslid_naam, prs_perslid_voorletters, prs_perslid_tussenvoegsel, prs_perslid_voornaam, prs_perslid_telefoonnr, prs_perslid_email, prs_perslid_nr, prs_perslid_oslogin ) VALUES ('PRS', v_srtperslid_key, v_afdeling_key, recperslid.prs_perslid_naam, recperslid.prs_perslid_voorletters, recperslid.prs_perslid_tussenvoegsel, recperslid.prs_perslid_voornaam, recperslid.prs_perslid_telefoonnr, recperslid.prs_perslid_email, recperslid.prs_perslid_nr, v_oslogin ); COMMIT; ELSE IF (v_count > 1) THEN fac.imp_writelog (p_import_key, 'E', v_aanduiding || ' kan persoon niet 1-duidig bepalen', v_errorhint ); COMMIT; END IF; v_errorhint := 'Fout bij wijzigen persoon'; UPDATE prs_perslid SET prs_srtperslid_key = v_srtperslid_key, prs_afdeling_key = v_afdeling_key, prs_perslid_naam = recperslid.prs_perslid_naam, prs_perslid_voorletters = recperslid.prs_perslid_voorletters, prs_perslid_tussenvoegsel = recperslid.prs_perslid_tussenvoegsel, prs_perslid_voornaam = recperslid.prs_perslid_voornaam, prs_perslid_telefoonnr = COALESCE (recperslid.prs_perslid_telefoonnr, prs_perslid_telefoonnr), prs_perslid_email = COALESCE (recperslid.prs_perslid_email, prs_perslid_email), prs_perslid_nr = recperslid.prs_perslid_nr, prs_perslid_oslogin = COALESCE (v_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_nr || '|' || recwp.prs_perslid_naam || '|' || recwp.prs_perslid_voornaam || '|' || recwp.alg_locatie_code || '|' || recwp.alg_gebouw_code || ' - '; v_errorhint := 'Fout bij bepalen persoon'; SELECT prs_perslid_key INTO v_perslid_key FROM prs_v_aanwezigperslid WHERE UPPER (prs_perslid_nr) = UPPER (recwp.prs_perslid_nr); v_errorhint := 'Fout bij bepalen locatie'; SELECT alg_locatie_key INTO v_locatie_key FROM alg_v_aanweziglocatie WHERE UPPER (alg_locatie_code) = UPPER (recwp.alg_locatie_code); v_errorhint := 'Fout bij bepalen gebouw'; SELECT alg_gebouw_key INTO v_gebouw_key FROM alg_v_aanweziggebouw WHERE alg_locatie_key = v_locatie_key AND UPPER (alg_gebouw_code) = UPPER (recwp.alg_gebouw_code); v_errorhint := 'Fout bij bepalen verdieping'; SELECT alg_verdieping_key INTO v_verdieping_key FROM alg_v_aanwezigverdieping WHERE alg_gebouw_key = v_gebouw_key AND alg_verdieping_volgnr = (SELECT MIN (v.alg_verdieping_volgnr) FROM alg_verdieping v WHERE v.alg_gebouw_key = v_gebouw_key AND v.alg_verdieping_volgnr >= 0); v_errorhint := 'Fout bij bepalen of persoon in gebouw een werkplek heeft'; SELECT COUNT (*) INTO v_count FROM prs_perslidwerkplek pw, prs_werkplek wp, alg_ruimte r, alg_verdieping v WHERE pw.prs_perslid_key = v_perslid_key AND pw.prs_werkplek_key = wp.prs_werkplek_key AND wp.prs_alg_ruimte_key = r.alg_ruimte_key AND r.alg_verdieping_key = v.alg_verdieping_key AND v.alg_gebouw_key = v_gebouw_key; -- v_count=0 -> persoon verhuist naar/krijgt wp in gebouw. IF (v_count = 0) THEN v_errorhint := 'Fout bij bepalen ruimte'; SELECT COUNT (*) INTO v_count FROM alg_v_aanwezigruimte r WHERE r.alg_verdieping_key = v_verdieping_key AND r.alg_ruimte_nr = c_ruimte_nr; -- v_count=0 -> ruimte '000' bestaat nog niet. IF (v_count = 0) THEN v_errorhint := 'Fout bij toevoegen ruimte'; INSERT INTO alg_ruimte (alg_verdieping_key, alg_srtruimte_key, alg_ruimte_nr ) VALUES (v_verdieping_key, 21, -- facilitaire ruimte c_ruimte_nr ); COMMIT; END IF; v_errorhint := 'Fout bij bepalen ruimte'; SELECT alg_ruimte_key INTO v_ruimte_key FROM alg_v_aanwezigruimte r WHERE r.alg_verdieping_key = v_verdieping_key AND r.alg_ruimte_nr = c_ruimte_nr; v_errorhint := 'Fout bij bepalen vrije werkplek'; SELECT COUNT (w.prs_werkplek_key) INTO v_count FROM prs_werkplek w WHERE w.prs_alg_ruimte_key = v_ruimte_key AND NOT EXISTS ( SELECT 1 FROM prs_perslidwerkplek pw WHERE pw.prs_werkplek_key = w.prs_werkplek_key); IF (v_count > 0) THEN SELECT MIN (w.prs_werkplek_key) INTO v_wp_key FROM prs_werkplek w WHERE w.prs_alg_ruimte_key = v_ruimte_key AND NOT EXISTS ( SELECT 1 FROM prs_perslidwerkplek pw WHERE pw.prs_werkplek_key = w.prs_werkplek_key); v_errorhint := 'Fout bij koppelen persoon aan vrije werkplek'; INSERT INTO prs_perslidwerkplek (prs_perslid_key, prs_werkplek_key, prs_perslidwerkplek_bezetting ) VALUES (v_perslid_key, v_wp_key, 100 ); COMMIT; ELSE v_errorhint := 'Fout bij bepalen nieuwe werkplek'; SELECT prs_s_prs_werkplek_key.NEXTVAL INTO v_wp_key FROM DUAL; SELECT COALESCE (MAX (w.prs_werkplek_volgnr), 0) + 1 INTO v_wp_volgnr FROM prs_werkplek w WHERE w.prs_alg_ruimte_key = v_ruimte_key; v_wp_oms := c_ruimte_nr || '/' || TO_CHAR (v_wp_volgnr); v_errorhint := 'Fout bij aanmaken nieuwe werkplek'; INSERT INTO prs_werkplek (prs_werkplek_key, prs_werkplek_module, prs_werkplek_volgnr, prs_werkplek_omschrijving, prs_alg_ruimte_key ) VALUES (v_wp_key, 'PRR', v_wp_volgnr, v_wp_oms, v_ruimte_key ); v_errorhint := 'Fout bij koppelen persoon aan nieuwe werkplek'; INSERT INTO prs_perslidwerkplek (prs_perslid_key, prs_werkplek_key, prs_perslidwerkplek_bezetting ) VALUES (v_perslid_key, v_wp_key, 100 ); COMMIT; END IF; END IF; EXCEPTION WHEN OTHERS THEN v_count_error := v_count_error + 1; oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, v_errorhint ); COMMIT; END; END LOOP; fac.imp_writelog (p_import_key, 'S', 'Werkplek: verwerkte regels zonder foutmelding: ' || TO_CHAR (v_count_tot - v_count_error), '' ); fac.imp_writelog (p_import_key, 'S', 'Werkplek: verwerkte regels met foutmelding: ' || TO_CHAR (v_count_error), '' ); COMMIT; FOR recnowp IN cnowp LOOP BEGIN fac.imp_writelog (p_import_key, 'I', 'Persoon met nummer [' || recnowp.prs_perslid_nr || '] en naam [' || recnowp.prs_perslid_naam || ', ' || recnowp.prs_perslid_voornaam || '] heeft geen werkplek', 'Geen werkplek' ); COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint ); COMMIT; END; END LOOP; -- Iedereen krijgt _default-rol die nog geen groep heeft. FOR recnogroup IN cnogroup LOOP BEGIN v_aanduiding := recnogroup.prs_perslid_nr || '|' || recnogroup.prs_perslid_naam || '|' || recnogroup.prs_perslid_voornaam || ' - '; v_errorhint := 'Fout bij bepalen groep met key [' || c_key_default_rol || ']'; SELECT fac_groep_upper INTO v_groep_defaultnaam FROM fac_groep WHERE fac_groep_key = c_key_default_rol; v_errorhint := 'Fout bij koppelen persoon aan groep met key [' || c_key_default_rol || ']'; INSERT INTO fac_gebruikersgroep (fac_groep_key, prs_perslid_key ) VALUES (c_key_default_rol, recnogroup.prs_perslid_key ); COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint ); COMMIT; END; END LOOP; ELSE fac.imp_writelog (p_import_key, 'E', 'Verschil tussen het actuele aantal en het te importeren aantal personen te groot; zie specificatie!', '- max. verschilpercentage = [' || TO_CHAR (c_max_delta_percentage) || '%]
' || '- #personen importbestand = [' || TO_CHAR (v_count_prs_import) || ']
' || '- #personen Facilitor = [' || TO_CHAR (v_count_prs_actual) || ']' ); COMMIT; END IF; -- Geldig importbestand wat betreft aantal inserts COMMIT; END sutf_update_prs; / CREATE OR REPLACE VIEW SUTF_V_PERSAFD_FULLNAMES ( PRS_PERSLID_KEY, PRS_PERSLID_NAAM_FULL ) AS SELECT prs_perslid_key, prs_perslid_naam || DECODE (p.prs_perslid_voorletters, NULL, '', ', ' || p.prs_perslid_voorletters) || DECODE (p.prs_perslid_tussenvoegsel, NULL, '', ' ' || p.prs_perslid_tussenvoegsel) || DECODE (p.prs_perslid_voornaam, NULL, '', ' (' || p.prs_perslid_voornaam || ')') || ' [' || a.prs_afdeling_omschrijving || ']' prs_perslid_naam_full FROM prs_v_aanwezigperslid p, prs_afdeling a WHERE a.prs_afdeling_key = p.prs_afdeling_key; -- SUTF#22335 view tbv selector bij personen. Bevat de afdelingstelefoon uit objecten. CREATE OR REPLACE VIEW sutf_v_afdelingtelefoon ( ins_deel_key, afdelingtelefoon ) AS SELECT obj.ins_deel_key, ins_kenmerkdeel_waarde FROM ins_deel obj, ins_srtdeel srt, ins_kenmerkdeel k WHERE ins_deel_verwijder IS NULL AND obj.ins_srtdeel_key = srt.ins_srtdeel_key AND srt.ins_srtgroep_key = 21 AND ins_alg_ruimte_type = 'A' and k.ins_deel_key = obj.ins_deel_key and ins_kenmerk_key = 81; -- Procedure om alle geexporteerde facturen naar status verwerkt te zetten. CREATE OR REPLACE PROCEDURE sutf_export_afdelingstelefoon ( p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2 ) AS v_prs_kenmerklink_key NUMBER (10); -- In cursor c_afdtel_bij_persoon alle telefoon-objecten (telefoonnummers) van de afdelingen -- aan de medewerkers van de afdeling gekoppeld... -- Dus kenmerk van object van afdeling aan persoon van afdeling koppelen CURSOR c_afdtel_bij_persoon IS SELECT prs_perslid_key, ins_deel_key FROM prs_perslid p, prs_kenmerklink kl, (SELECT obj.ins_deel_key, ins_alg_ruimte_key FROM ins_deel obj, ins_srtdeel srt, ins_kenmerkdeel k WHERE ins_deel_verwijder IS NULL AND obj.ins_srtdeel_key = srt.ins_srtdeel_key AND k.ins_deel_key = obj.ins_deel_key AND srt.ins_srtgroep_key = 21 AND ins_alg_ruimte_type = 'A' AND ins_kenmerk_key = 81) kenmerk WHERE prs_perslid_verwijder IS NULL AND kenmerk.ins_alg_ruimte_key = p.prs_afdeling_key AND prs_link_key(+) = prs_perslid_key ORDER BY prs_perslid_key,ins_deel_key; BEGIN FOR rec IN c_afdtel_bij_persoon LOOP BEGIN -- prs_kenmerk-key = 1000: afdelingstelefoonnummer bij persoon (refkenmerk naar view sutf_v_afdelingtelefoon) SELECT prs_kenmerklink_key INTO v_prs_kenmerklink_key FROM prs_kenmerklink kl WHERE kl.prs_link_key = rec.prs_perslid_key AND kl.prs_kenmerklink_niveau = 'P' AND kl.prs_kenmerk_key = 1000 AND kl.prs_kenmerklink_verwijder IS NULL; -- Bij de persoon is al een afdelingstelefoonnummer geregisteerd, nu nog updaten (doen we onvoorwaardelijk), want persoon kan: -- van afdeling zijn verhuisd, of afdeling kan ander telefoonobject hebben gekregen, ... UPDATE prs_kenmerklink SET prs_kenmerklink_waarde = rec.ins_deel_key WHERE prs_kenmerklink_key = v_prs_kenmerklink_key; COMMIT; EXCEPTION WHEN OTHERS THEN -- Record afdelingstelefoon-kenmerk bij persoon bestaat nog niet, dus toevoegen (insert) -- prs_kenmerk-key = 1000: afdelingstelefoonnummer bij persoon INSERT INTO prs_kenmerklink (prs_link_key, prs_kenmerk_key, prs_kenmerklink_waarde, prs_kenmerklink_niveau) VALUES(rec.prs_perslid_key, 1000, rec.ins_deel_key, 'P'); COMMIT; END; END LOOP; -- Hieronder alle personen die een telefoon-objecten (telefoonnummers) van de afdelingen -- heeft gekoppeld, maar waarvan de afdeling geen telefoonobject (meer) heeft -- Dus de andere kant op, want die moeten verwijderd worden. DELETE FROM prs_kenmerklink WHERE prs_kenmerklink_key IN (SELECT KL.PRS_KENMERKLINK_KEY FROM prs_kenmerklink kl, prs_perslid p WHERE kl.prs_kenmerklink_niveau = 'P' AND kl.prs_kenmerk_key = 1000 AND kl.prs_kenmerklink_verwijder IS NULL AND KL.PRS_LINK_KEY = p.prs_perslid_key AND NOT EXISTS (SELECT obj.ins_deel_key, ins_alg_ruimte_key FROM ins_deel obj, ins_srtdeel srt, ins_kenmerkdeel k WHERE ins_deel_verwijder IS NULL AND obj.ins_srtdeel_key = srt.ins_srtdeel_key AND k.ins_deel_key = obj.ins_deel_key AND srt.ins_srtgroep_key = 21 AND ins_alg_ruimte_type = 'A' AND ins_kenmerk_key = 81 AND ins_alg_ruimte_key = p.prs_afdeling_key )) ; END; / ------ ------ FACTUURIMPORT / KOPPELING XTRACTOR ------ CREATE OR REPLACE PROCEDURE sutf_import_factuur (p_import_key IN NUMBER) AS v_seq_of_columns VARCHAR(50); BEGIN --In de XSL: factuurnr(1);factuurdatum(2);opdrachtnr(3);omschrijving(4);bedrag(5);btwperc(6);btwbedrag(7);document(8);debiteurnr(9);opmerking(10);btw_verlegd(11);betaalkenmerk(12) --hulp voor pos : '1;2;3;4;5;6;7;8;9;0;1;2;3;14;15;16;7;8;9;0' v_seq_of_columns := '0;1;2;3;0;0;4;0;5;7;6;8;9;10;11;12;0;0;0;0'; fac_import_factuur_body(p_import_key, v_seq_of_columns); END; / CREATE OR REPLACE PROCEDURE sutf_post_processing_factuur (p_import_key IN NUMBER) AS -- Key van het kenmerk 'betaalreferentie' bij de factuur c_kenmerk_key NUMBER(10) := 21; CURSOR cfactuur_kenmerk IS SELECT DISTINCT fin_factuur_key, kenmerk1, factuurnr, fac_imp_file_index FROM fac_imp_factuur WHERE fin_factuur_key IS NOT NULL AND kenmerk1 IS NOT NULL; BEGIN -- De betaalreferentie wordt in kenmerk 1 van fac_imp_factuur gezet, dus alle fac_imp_factuur langsgaan en verwerken FOR rc IN cfactuur_kenmerk LOOP BEGIN INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde) VALUES (rc.fin_factuur_key, c_kenmerk_key, rc.kenmerk1); EXCEPTION WHEN OTHERS THEN fac.imp_writelog (p_import_key, 'W', 'Van factuur met key ' || rc.fin_factuur_key || ' is de betaalreferentie niet bewaard (regel ' || rc.fac_imp_file_index || ')', 'Factuurnr:' || rc.factuurnr || ' / Betalingskenmerk: ' || rc.kenmerk1 ); END; END LOOP; END; / CREATE OR REPLACE PROCEDURE sutf_update_factuur (p_import_key IN NUMBER) AS BEGIN -- Standaard FCLT verwerk import facturen fac_update_factuur (p_import_key); -- CUST: post processing voor verwerking van kenmerk 'Betalingskenmerk' sutf_post_processing_factuur (p_import_key); END; / ------ ------ FACTUURIMPORT / E-INVOICING (Pilot met OD: SUTF#26879) ------ CREATE OR REPLACE PROCEDURE sutf_import_e_invoice (p_import_key IN NUMBER) AS v_seq_of_columns VARCHAR(50); BEGIN --In de XSL: factuurnr(1);factuurdatum(2);opdrachtnr(3);omschrijving(4);bedrag(5);btwperc(6);btwbedrag(7);document(8);debiteurnr(9);opmerking(10);btw_verlegd(11);betaalkenmerk(12) --hulp voor pos : '1;2;3;4;5;6;7;8;9;0;1;2;3;14;15;16;7;8;9;0' v_seq_of_columns := '0;1;2;3;0;0;4;0;5;7;6;8;9;10;11;12;0;0;0;0'; fac_import_factuur_body(p_import_key, v_seq_of_columns); END; / CREATE OR REPLACE PROCEDURE sutf_update_e_invoice (p_import_key IN NUMBER) AS BEGIN -- Standaard FCLT verwerk import facturen fac_update_factuur (p_import_key); -- CUST: post processing voor verwerking van kenmerk 'Betalingskenmerk' sutf_post_processing_factuur (p_import_key); END; / ------ ------ FACTUUREXPORT / KOPPELING EXACT ------ -- View waarin bij de factuur met fin_factuur_key het bijbehorende factuurbestand (PDF) geldt. CREATE OR REPLACE VIEW sutf_v_factuur_bestand (fin_factuur_key, fin_factuur_bestand) AS SELECT kf.fin_factuur_key, kf.fin_kenmerkfactuur_waarde FROM fin_kenmerkfactuur kf WHERE kf.fin_kenmerkfactuur_verwijder IS NULL AND fin_kenmerk_key = 1; -- View waarin bij de factuur met fin_factuur_key het bijbehorende betaalreferentie of betaalkenmerk geldt. CREATE OR REPLACE VIEW sutf_v_factuur_betaalref (fin_factuur_key, fin_factuur_betaalref) AS SELECT kf.fin_factuur_key, kf.fin_kenmerkfactuur_waarde FROM fin_kenmerkfactuur kf WHERE kf.fin_kenmerkfactuur_verwijder IS NULL AND fin_kenmerk_key = 21; -- view tbv export naar exact CREATE OR REPLACE VIEW sutf_v_factuur_mldcnt_gegevens ( fin_factuur_key, opdracht_id, fin_factuur_datum, fin_factuur_boekmaand, fin_factuur_nr, fin_factuur_bestand, prs_bedrijf_key, fin_factuurregel_totaal, fin_factuurregel_btw, fin_factuurregel_btw_perc, fin_btwtabelwaarde_btwcode, fin_factuurregel_nr, fin_factuurregel_omschrijving, fin_factuur_debiteur_nr, fin_factuur_betaalref, project_nummer, prs_kostensoort_refcode, prs_kostenplaats_nr, bes_opdr_key, mld_opdr_key, cnt_contract_key, fin_factuur_statuses_key ) AS SELECT DISTINCT f.fin_factuur_key, COALESCE (TO_CHAR (cnt_contract_nummer), (SELECT sd.ins_srtdiscipline_prefix || m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr FROM mld_melding m, mld_stdmelding std, ins_tab_discipline d, ins_srtdiscipline sd WHERE m.mld_melding_key = o.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) ) opdracht_id, f.fin_factuur_datum, f.fin_factuur_boekmaand, f.fin_factuur_nr, fb.fin_factuur_bestand, COALESCE (b_c.prs_bedrijf_key, b_o.prs_bedrijf_key) prs_bedrijf_key, fr.fin_factuurregel_totaal, fr.fin_factuurregel_btw, btw.fin_btwtabelwaarde_perc, btw.fin_btwtabelwaarde_code, fr.fin_factuurregel_nr, fr.fin_factuurregel_omschrijving, f.fin_factuur_debiteur_nr, fbr.fin_factuur_betaalref, NULL projectnummer, COALESCE(ks_regel.prs_kostensoort_refcode,ks.prs_kostensoort_refcode), COALESCE (kp_c.prs_kostenplaats_nr, kp_o.prs_kostenplaats_nr) prs_kostenplaats_nr, NULL bes_opdr_key, o.mld_opdr_key, c.cnt_contract_key, f.fin_factuur_statuses_key FROM fin_factuur f, sutf_v_factuur_bestand fb, sutf_v_factuur_betaalref fbr, fin_factuurregel fr, fin_btwtabelwaarde btw, mld_opdr o, mld_typeopdr ot, cnt_contract c, prs_bedrijf b_o, prs_bedrijf b_c, prs_kostensoort ks, prs_kostensoort ks_regel, prs_kostenplaats kp_c, prs_kostenplaats kp_o WHERE f.fin_factuur_key = fr.fin_factuur_key AND fr.fin_btwtabelwaarde_key = btw.fin_btwtabelwaarde_key AND f.fin_factuur_key = fb.fin_factuur_key(+) AND f.fin_factuur_key = fbr.fin_factuur_key(+) AND f.bes_bestelopdr_key is null AND f.mld_opdr_key = o.mld_opdr_key(+) AND o.prs_kostenplaats_key = kp_o.prs_kostenplaats_key (+) AND o.mld_typeopdr_key = ot.mld_typeopdr_key(+) AND f.cnt_contract_key = c.cnt_contract_key(+) AND o.mld_uitvoerende_keys = b_o.prs_bedrijf_key(+) AND c.cnt_prs_bedrijf_key = b_c.prs_bedrijf_key(+) AND c.prs_kostenplaats_key = kp_c.prs_kostenplaats_key (+) AND f.prs_kostensoort_key = ks.prs_kostensoort_key(+) AND fr.prs_kostensoort_key = ks_regel.prs_kostensoort_key(+); CREATE OR REPLACE VIEW sutf_v_factuur_bes_gegevens ( fin_factuur_key, opdracht_id, fin_factuur_datum, fin_factuur_boekmaand, fin_factuur_nr, fin_factuur_bestand, prs_bedrijf_key, fin_factuurregel_totaal, fin_factuurregel_btw, fin_factuurregel_btw_perc, fin_btwtabelwaarde_btwcode, fin_factuurregel_nr, fin_factuurregel_omschrijving, fin_factuur_debiteur_nr, fin_factuur_betaalref, project_nummer, prs_kostensoort_refcode, prs_kostenplaats_nr, bes_opdr_key, mld_opdr_key, cnt_contract_key, fin_factuur_statuses_key ) AS SELECT DISTINCT f.fin_factuur_key, TO_CHAR (bo.bes_bestelopdr_id) opdracht_id, f.fin_factuur_datum, f.fin_factuur_boekmaand, f.fin_factuur_nr, fb.fin_factuur_bestand, b.prs_bedrijf_key, fr.fin_factuurregel_totaal, fr.fin_factuurregel_btw, btw.fin_btwtabelwaarde_perc, btw.fin_btwtabelwaarde_code, fr.fin_factuurregel_nr, fr.fin_factuurregel_omschrijving, f.fin_factuur_debiteur_nr, fbr.fin_factuur_betaalref, NULL projectnummer, COALESCE(ks_regel.prs_kostensoort_refcode,ks.prs_kostensoort_refcode), kp.prs_kostenplaats_nr, bo.bes_bestelopdr_key bes_opdr_key, NULL mld_opdr_key, NULL cnt_contract_key, f.fin_factuur_statuses_key FROM bes_bestelopdr bo, prs_bedrijf b, bes_bestelling bes, bes_bestelopdr_item boi, bes_bestelling_item bi, fin_factuur f, sutf_v_factuur_bestand fb, sutf_v_factuur_betaalref fbr, fin_factuurregel fr, fin_btwtabelwaarde btw, prs_kostensoort ks, prs_kostensoort ks_regel, prs_kostenplaats kp WHERE b.prs_bedrijf_key = bo.prs_bedrijf_key AND bo.bes_bestelopdr_key = boi.bes_bestelopdr_key AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key AND bes.bes_bestelling_key = bi.bes_bestelling_key AND kp.prs_kostenplaats_key = bes.prs_kostenplaats_key AND f.prs_kostensoort_key = ks.prs_kostensoort_key(+) AND fr.prs_kostensoort_key = ks_regel.prs_kostensoort_key(+) AND f.bes_bestelopdr_key = bo.bes_bestelopdr_key AND f.fin_factuur_key = fr.fin_factuur_key AND fr.fin_btwtabelwaarde_key = btw.fin_btwtabelwaarde_key AND f.fin_factuur_key = fb.fin_factuur_key(+) AND f.fin_factuur_key = fbr.fin_factuur_key(+); CREATE OR REPLACE VIEW sutf_v_factuur_geg AS SELECT * from sutf_v_factuur_mldcnt_gegevens UNION SELECT * from sutf_v_factuur_bes_gegevens; CREATE OR REPLACE VIEW sutf_v_factuur_geg_akkoord AS SELECT * from sutf_v_factuur_mldcnt_gegevens WHERE fin_factuur_statuses_key = 6 UNION SELECT * from sutf_v_factuur_bes_gegevens WHERE fin_factuur_statuses_key = 6; -- De OUDE ascii-rapportage van het exportbestand die voor Exact zou worden gegenereerd. CREATE OR REPLACE VIEW sutf_v_rap_exact (regelnummer,dagb_type, dagbknr, periode, bkjcode, bkstnr, oms25, datum, empty9, debnr, crdnr, empty12, bedrag, drbk_in_val, valcode, koers, kredbep, bdrkredbep, vervdatfak, vervdatkrd, empty21, empty22, weeknummer, betaalref, betwijze, grek_bdr, empty27, empty28, empty29, empty30, empty31, transsubtype, empty33, empty34, empty35, empty36, empty37, empty38, projectnr, field40) AS SELECT regelnummer,dagb_type, dagbknr, periode, bkjcode, bkstnr, oms25, datum, empty9, debnr, crdnr, empty12, bedrag, drbk_in_val, valcode, koers, kredbep, bdrkredbep, vervdatfak, vervdatkrd, empty21, empty22, weeknummer, betaalref, betwijze, grek_bdr, empty27, empty28, empty29, empty30, empty31, transsubtype, empty33, empty34, empty35, empty36, empty37, empty38, projectnr, '!' FROM (SELECT 0 regelnummer, 'I' dagb_type, '42' dagbknr, '' periode, '' bkjcode, TO_CHAR (fin_factuur_key) bkstnr, opdracht_id oms25, TO_CHAR (fin_factuur_datum, 'ddmmyyyy') datum, '' empty9, '' debnr, (SELECT prs_leverancier_nr FROM prs_bedrijf b WHERE b.prs_bedrijf_key = fg.prs_bedrijf_key) crdnr, '' empty12, REPLACE (TO_CHAR (bedrag), ',', '.') bedrag, '' drbk_in_val, '' valcode, '' koers, '' kredbep, '' bdrkredbep, '' vervdatfak, '' vervdatkrd, '' empty21, '' empty22, '' weeknummer, COALESCE(fin_factuur_betaalref, fin_factuur_nr || '/' || fin_factuur_debiteur_nr) betaalref, '' betwijze, '' grek_bdr, '' empty27, '' empty28, '' empty29, '' empty30, '' empty31, '' transsubtype, '' empty33, '' empty34, '' empty35, '' empty36, '' empty37, '' empty38, '' projectnr, '!' empty40 FROM (SELECT fin_factuur_key, opdracht_id, fin_factuur_datum, fin_factuur_nr, prs_bedrijf_key, fin_factuur_debiteur_nr, fin_factuur_betaalref, SUM (fin_factuurregel_totaal + fin_factuurregel_btw) bedrag FROM sutf_v_factuur_geg_akkoord GROUP BY fin_factuur_key, opdracht_id, fin_factuur_datum, fin_factuur_nr, prs_bedrijf_key, fin_factuur_debiteur_nr, fin_factuur_betaalref) fg UNION ALL SELECT fin_factuurregel_nr regelnummer, 'I' dagb_type, '42' dagbknr, '' periode, '' bkjcode, TO_CHAR (fin_factuur_key) boekstuknummer, COALESCE(fin_factuur_betaalref, fin_factuur_nr || '/' || fin_factuur_debiteur_nr) oms25, TO_CHAR (fin_factuur_datum, 'ddmmyyyy') datum, prs_kostensoort_refcode reknr, '' debnr, (SELECT prs_leverancier_nr FROM prs_bedrijf b WHERE b.prs_bedrijf_key = fg.prs_bedrijf_key) crdnr, '' empty12, REPLACE (TO_CHAR (fin_factuurregel_totaal), ',', '.') bedrag, '' drbk_in_val, '' val_code, '' koers, '' kredbep, '' bdrkredbep, '' vervdatfak, '' vervdatkrd, fin_btwtabelwaarde_btwcode btw_code, REPLACE (TO_CHAR (fin_factuurregel_btw), ',', '.') btw_bdr, '' weeknummer, '' empty24, '' empty25, '' empty26, prs_kostenplaats_nr kstplcode, '' kstdrcode, '' empty29, '' empty30, '' empty31, '' transsubtype, '' empty33, '' empty34, '' emtpy35, '' empty36, '' empty37, '' empty38, project_nummer projectnr, '!' empty40 FROM sutf_v_factuur_geg_akkoord fg); -- Alle waarden (zijn evt meer records) uit eigen tabel '$SYSTEM' waarvan de waarde_code met een -- zekere prefix begint (volgens de systeem-setting PREFIX_FCLT_FACTUUR_XML_HEADER), komen in de header vd xml terecht. CREATE OR REPLACE VIEW sutf_v_fclt_factuur_header ( result, result_order ) AS SELECT '<' || fac_usrdata_code || '>' || fac_usrdata_omschr || '', 1 FROM fac_usrdata WHERE fac_usrtab_key = 101 AND fac_usrdata_verwijder is null; CREATE OR REPLACE VIEW sutf_v_fclt_factuur_body ( result, result_order ) AS SELECT DECODE(regelnummer,0,'','') || '' || fin_factuur_key || '' || '' || xml.char_to_html(fin_factuur_nr) || '' || '' || xml.char_to_html(fin_factuur_bestand) || '' || '' || xml.char_to_html(fin_factuur_debiteur_nr) || '' || '' || xml.char_to_html(bes_mld_cnt_opdracht_id) || '' || '' || datum || '' || '' || fin_factuur_boekmaand || '' || '' || xml.char_to_html(grootboekrekening) || '' || '' || xml.char_to_html(betaalreferentie) || '' || '' || xml.char_to_html(crediteur_nr) || '' || '' || xml.char_to_html(crediteur_naam) || '' || '' || fin_factuur_totaal_exbtw || '' || '' || fin_factuur_totaal_incbtw || '' || '' || xml.char_to_html(fin_factuurregel_omschrijving) || '' || '' || fin_factuurregel_totaal || '' || '' || btw_percentage || '' || '' || xml.char_to_html(btw_code) || '' || '' || btw_bedrag || '' || '' || xml.char_to_html(prs_kostenplaats_nr) || '' || DECODE(regelnummer, 0, '', DECODE(aant_factuur_regels - regelnummer,0,'','')) , (10000000 + fin_factuur_key) * 100 + regelnummer FROM (SELECT 0 regelnummer, aant_factuur_regels, fin_factuur_key, fin_factuur_nr, fin_factuur_bestand, fin_factuur_debiteur_nr, opdracht_id bes_mld_cnt_opdracht_id, TO_CHAR (fin_factuur_datum, 'ddmmyyyy') datum, fin_factuur_boekmaand, '' grootboekrekening, betaalreferentie, (SELECT prs_leverancier_nr FROM prs_bedrijf b WHERE b.prs_bedrijf_key = fg.prs_bedrijf_key) crediteur_nr, (SELECT prs_bedrijf_naam FROM prs_bedrijf b WHERE b.prs_bedrijf_key = fg.prs_bedrijf_key) crediteur_naam, REPLACE (TO_CHAR (ROUND(bedrag_exbtw,2)), ',', '.') fin_factuur_totaal_exbtw, REPLACE (TO_CHAR (ROUND(bedrag_incbtw,2)), ',', '.') fin_factuur_totaal_incbtw, '' fin_factuurregel_omschrijving, '' fin_factuurregel_totaal, '' btw_percentage, '' btw_code, '' btw_bedrag, '' prs_kostenplaats_nr FROM (SELECT fin_factuur_key, opdracht_id, fin_factuur_datum, fin_factuur_boekmaand, fin_factuur_nr, fin_factuur_bestand, prs_bedrijf_key, fin_factuur_debiteur_nr, COALESCE(fin_factuur_betaalref, fin_factuur_nr || '/' || fin_factuur_debiteur_nr) betaalreferentie, COUNT(fin_factuur_key) AS aant_factuur_regels, SUM (fin_factuurregel_totaal) bedrag_exbtw, SUM (fin_factuurregel_totaal + fin_factuurregel_btw) bedrag_incbtw FROM sutf_v_factuur_geg_akkoord GROUP BY fin_factuur_key, opdracht_id, fin_factuur_datum, fin_factuur_boekmaand, fin_factuur_nr, fin_factuur_bestand, prs_bedrijf_key, fin_factuur_debiteur_nr, fin_factuur_betaalref) fg UNION ALL SELECT fin_factuurregel_nr regelnummer, (SELECT COUNT(fin_factuur_key) FROM sutf_v_factuur_geg_akkoord fc WHERE fc.fin_factuur_key = fg.fin_factuur_key GROUP BY fin_factuur_key, opdracht_id, fin_factuur_datum, fin_factuur_nr, prs_bedrijf_key, fin_factuur_debiteur_nr) AS aant_factuur_regels, fin_factuur_key, fin_factuur_nr, '' fin_factuur_bestand, fin_factuur_debiteur_nr, '' bes_mld_cnt_opdracht_id, TO_CHAR (fin_factuur_datum, 'ddmmyyyy') datum, fin_factuur_boekmaand, prs_kostensoort_refcode grootboekrekening, COALESCE(fin_factuur_betaalref, fin_factuur_nr || '/' || fin_factuur_debiteur_nr) betaalreferentie, (SELECT prs_leverancier_nr FROM prs_bedrijf b WHERE b.prs_bedrijf_key = fg.prs_bedrijf_key) crediteur_nr, (SELECT prs_bedrijf_naam FROM prs_bedrijf b WHERE b.prs_bedrijf_key = fg.prs_bedrijf_key) crediteur_naam, '' fin_factuur_totaal_exbtw, '' fin_factuur_totaal_incbtw, fin_factuurregel_omschrijving, REPLACE (TO_CHAR (ROUND(fin_factuurregel_totaal,2)), ',', '.') fin_factuurregel_totaal, TO_CHAR(fin_factuurregel_btw_perc) btw_percentage, fin_btwtabelwaarde_btwcode btw_code, REPLACE (TO_CHAR (ROUND(fin_factuurregel_btw,2)), ',', '.') btw_bedrag, prs_kostenplaats_nr FROM sutf_v_factuur_geg_akkoord fg ORDER BY fin_factuur_key, regelnummer); --Vieuws voor looplijst reserveringen Mobiel CREATE OR REPLACE VIEW sutf_v_rap_res_looplijst AS SELECT DISTINCT TO_CHAR (rr.res_rsv_ruimte_van, 'yyyy-mm-dd') || rg.alg_gebouw_upper || TO_CHAR (rr.res_rsv_ruimte_van, 'hh24:mi') hide_f_srt, rr.res_reservering_key || '/' || rr.res_rsv_ruimte_volgnr nr, rg.alg_gebouw_omschrijving fclt_f_gebouw, rr.res_rsv_ruimte_van datum, TO_CHAR (rr.res_rsv_ruimte_van, 'hh24:mi') begintijd, TO_CHAR (rr.res_rsv_ruimte_tot, 'hh24:mi') eindtijd, r.res_ruimte_nr fclt_f_ruimte, o.res_opstelling_omschrijving opstelling, rr.res_rsv_ruimte_bezoekers aantal, rr.res_rsv_ruimte_omschrijving omschrijving, mld.aant Meldingen, voorzieningen, CASE WHEN LENGTH (catering) > 75 THEN SUBSTR (catering, 1, 75) || ' ...' ELSE catering END catering, rr.res_rsv_ruimte_key FROM res_rsv_ruimte rr, res_ruimte_opstelling ro, res_opstelling o, res_ruimte r, res_alg_ruimte ar, alg_v_ruimte_gegevens rg, ( SELECT res_rsv_ruimte_key, 'Ja (' || COUNT (res_rsv_ruimte_key) || ')' aant FROM mld_melding WHERE res_rsv_ruimte_key IS NOT NULL GROUP BY res_rsv_ruimte_key) mld, ( SELECT res_rsv_ruimte_key, LISTAGG (voorziening, CHR (13) || CHR (10)) WITHIN GROUP (ORDER BY voorziening) AS Voorzieningen FROM (SELECT res_rsv_ruimte_key, res_deel_omschrijving voorziening FROM res_deel rd, res_rsv_deel rrd WHERE RES_RSV_DEEL_verwijder IS NULL AND rd.res_deel_key = rrd.res_deel_key AND res_rsv_ruimte_key IS NOT NULL) GROUP BY res_rsv_ruimte_key) voorz, ( SELECT res_rsv_ruimte_key, LISTAGG (artikel, ', ') WITHIN GROUP (ORDER BY artikel) AS catering FROM (SELECT res_rsv_ruimte_key, res_rsv_artikel_aantal || '*' || res_artikel_omschrijving artikel FROM res_artikel ra, res_rsv_artikel rra WHERE RES_RSV_artikel_verwijder IS NULL AND ra.res_artikel_key = rra.res_artikel_key AND res_rsv_ruimte_key IS NOT NULL) GROUP BY res_rsv_ruimte_key) cat WHERE rr.res_rsv_ruimte_verwijder IS NULL AND ro.res_ruimte_opstel_key = rr.res_ruimte_opstel_key AND o.res_opstelling_key = ro.res_opstelling_key AND r.res_ruimte_key = ro.res_ruimte_key AND ar.res_ruimte_key = r.res_ruimte_key AND ar.res_alg_ruimte_verwijder IS NULL AND rg.alg_ruimte_key = ar.alg_ruimte_key AND mld.res_rsv_ruimte_key(+) = rr.res_rsv_ruimte_key AND voorz.res_rsv_ruimte_key(+) = rr.res_rsv_ruimte_key AND cat.res_rsv_ruimte_key(+) = rr.res_rsv_ruimte_key; CREATE OR REPLACE VIEW sutf_v_rap_mob_looplijst AS SELECT * FROM sutf_v_rap_res_looplijst WHERE TRUNC (datum) = TRUNC (SYSDATE); CREATE OR REPLACE VIEW sutf_v_export_fclt_factuur ( result, result_order ) AS SELECT '',0 FROM DUAL UNION SELECT result, result_order FROM sutf_v_fclt_factuur_header UNION SELECT result, result_order FROM sutf_v_fclt_factuur_body UNION SELECT '',99999999999999999999 FROM DUAL; CREATE OR REPLACE PROCEDURE sutf_export_fclt_factuur ( p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2 ) AS -- In cursor cfactuur alle facturen die worden geexporteerd... CURSOR cfactuur IS SELECT fin_factuur_key FROM sutf_v_factuur_geg_akkoord GROUP BY fin_factuur_key; BEGIN -- DE EXPORT IS OP BASIS VAN EEN VIEW GEREALISEERD, WAARNA NU ALS LAATSTE STAP NOG WAT ADMINISTRATIE VOLGT... FOR cfact IN cfactuur LOOP -- Zowel de factuur in tracking zetten als de status op verwerkt (=7) zetten fin.setfactuurstatus (cfact.fin_factuur_key, 7, NULL); END LOOP; END; / CREATE OR REPLACE VIEW sutf_v_export_undo_exact ( result, result_order ) AS SELECT REPLACE(REPLACE(f.fin_factuur_key || ';' || opdracht_id || ';' || fin_factuur_datum || ';' || fin_factuur_nr || ';' || prs_bedrijf_key || ';' || fin_factuurregel_totaal || ';' || fin_factuurregel_btw || ';' || fin_factuurregel_nr || ';' || fin_factuur_debiteur_nr || ';' || project_nummer || ';' || prs_kostensoort_refcode || ';' || bes_opdr_key || ';' || mld_opdr_key || ';' || cnt_contract_key ,CHR (13), ''), CHR (10), ''), f.fin_factuur_key FROM sutf_v_factuur_geg f, fac_tracking t, fac_srtnotificatie sn WHERE sn.fac_srtnotificatie_code ='FINVER' AND sn.fac_srtnotificatie_key = t.fac_srtnotificatie_key AND t.fac_tracking_datum >= (SELECT MAX(t1.fac_tracking_datum) - (1 / (24*60)) FROM fac_tracking t1 WHERE t1.fac_srtnotificatie_key = t.fac_srtnotificatie_key) AND f.fin_factuur_key = t.fac_tracking_refkey AND f.fin_factuur_statuses_key = 7; CREATE OR REPLACE PROCEDURE sutf_select_undo_exact ( p_applname IN VARCHAR2, p_applrun IN VARCHAR2 ) AS v_errormsg VARCHAR (200); BEGIN v_errormsg := 'Geen akties'; END; / -- Procedure om alle geexporteerde facturen naar status verwerkt te zetten. CREATE OR REPLACE PROCEDURE sutf_export_undo_exact ( p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2 ) AS CURSOR cfactuur IS SELECT DISTINCT f.fin_factuur_key FROM fac_tracking t, fac_srtnotificatie sn, fin_factuur f WHERE sn.fac_srtnotificatie_code ='FINVER' AND sn.fac_srtnotificatie_key = t.fac_srtnotificatie_key AND t.fac_tracking_datum >= (SELECT MAX(t1.fac_tracking_datum) - (1 / (24*60)) FROM fac_tracking t1 WHERE t1.fac_srtnotificatie_key = t.fac_srtnotificatie_key) AND f.fin_factuur_key = t.fac_tracking_refkey AND fin_factuur_statuses_key = 7; v_errormsg VARCHAR (200); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); BEGIN v_errormsg := 'Geen akties'; FOR cfact IN cfactuur LOOP -- Eerst de factuur in tracking zetten... -- Omdat van 7 naar 6 niet mag/geoorloofd is, lukt het niet via -- de reguliere functie fin.setfactuurstatus (cfact.fin_factuur_key, 6, NULL); -- Dan maar zelf en custom-made: fac.trackaction ('FINFOK', cfact.fin_factuur_key, NULL, NULL, 'Factuur uit archief teruggezet'); UPDATE fin_factuur SET fin_factuur_statuses_key = 6 WHERE fin_factuur_key = cfact.fin_factuur_key; END LOOP; END; / CREATE OR REPLACE PROCEDURE sutf_export_mld_archief ( p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2 ) AS -- ins_srtdiscipline_key = 1 -> Automatisering CURSOR c_mld_2_arch IS SELECT mld_melding_key FROM mld_melding WHERE mld_melding_status = 5 AND sysdate-30 >= (SELECT fac_tracking_datum from fac_tracking WHERE fac_tracking_refkey = mld_melding_key AND fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key FROM fac_srtnotificatie WHERE fac_srtnotificatie_code = 'MLDAFM') ) AND mld_stdmelding_key IN (SELECT mld_stdmelding_key FROM mld_stdmelding WHERE mld_ins_discipline_key IN (SELECT ins_discipline_key FROM mld_discipline WHERE ins_srtdiscipline_key = 1) ); v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_count_tot NUMBER (10); v_count_error NUMBER (10); v_count NUMBER (10); v_tracking VARCHAR2 (1000); BEGIN FOR cmld IN c_mld_2_arch LOOP BEGIN -- Eerst proberen om melding op archief te zetten, indien gelukt DAN PAS in tracking -- Het zou kunnen dat constraint de update tegenhoudt (openstaande opdrachten), in dat geval komt die in exception-tak (en wordt terecht niet getrackt). -- Wel gaan we daartoe eerst de opdrachten op archief (7=verwerkt) zetten, die de status afgemeld hebben (= 6). UPDATE mld_opdr SET mld_statusopdr_key = 7 WHERE mld_statusopdr_key=6 AND mld_melding_key = cmld.mld_melding_key; UPDATE mld_melding SET mld_melding_status = 6 WHERE mld_melding_key = cmld.mld_melding_key; -- Nu de melding in tracking zetten...dat ie gearchiveerd is fac.trackaction ('MLDVER', cmld.mld_melding_key, NULL, NULL, 'Melding in archief gezet (door systeem)'); 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 || ')'; END; COMMIT; END LOOP; END sutf_export_mld_archief; / -- SUTF#29030 -- Notificatiejob om te laat ingeleverde uitgeleende objecten naar de backoffice (=key 8621) te sturen -- Terugbreng datum (=key 601) wordt bij het uitgeleende obejct geregistreerd CREATE OR REPLACE VIEW SUTF_V_NOTI_INS_LATE ( CODE, SENDER, RECEIVER, TEXT, KEY, XKEY ) AS SELECT 'INSMAI', NULL, 8621, 'Uitleentijd verstreken van: ' || ins_deel_omschrijving, d.ins_deel_key, NULL FROM ins_kenmerkdeel kd, ins_kenmerk k, ins_deel d WHERE kd.ins_kenmerk_key = k.ins_kenmerk_key AND k.ins_srtkenmerk_key = 601 AND kd.ins_deel_key = d.ins_deel_key AND ins_kenmerkdeel_verwijder IS NULL AND d.ins_deel_verwijder IS NULL AND ins_kenmerkdeel_waarde = TO_CHAR (SYSDATE - 1, 'DD-MM-YYYY') AND ins_alg_ruimte_key_org IS NOT NULL; ------ 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