-- -- $Id$ -- -- Script containing customer specific configuration sql statements for VGLD DEFINE thisfile = 'VGLD.SQL' DEFINE dbuser = '^VGLD' 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 PROCEDURE vgld_import_prs (p_import_key IN NUMBER) IS c_fielddelimitor VARCHAR2 (1) := ';'; -- LET OP: moet idem zijn als declaratie bij vgld_UPDATE_PRS v_newline VARCHAR2 (1000); -- Input line v_aanduiding VARCHAR2 (200); v_errorhint VARCHAR2 (1000); v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); header_is_valid NUMBER := 0; v_ongeldig NUMBER (1); v_count_tot NUMBER (10); v_count_import NUMBER (10); v_count NUMBER; v_pos NUMBER; -- De importvelden: v_prs_perslid_nr VARCHAR2 (256); v_prs_perslid_voornaam VARCHAR2 (256); v_prs_perslid_naam VARCHAR2 (256); v_prs_perslid_tussenvoegsel VARCHAR2 (256); v_prs_perslid_voorletters VARCHAR2 (256); v_prs_afdeling_code VARCHAR2 (256); v_prs_srtperslid_omschrijving VARCHAR2 (256); v_prs_perslid_telefoonnr VARCHAR2 (256); v_prs_perslid_mobiel VARCHAR2 (256); v_prs_perslid_email VARCHAR2 (256); v_prs_perslid_oslogin VARCHAR2 (256); -- Overig: v_alg_locatie_code VARCHAR2 (256); v_alg_gebouw_code VARCHAR2 (256); CURSOR c1 IS SELECT * FROM fac_imp_file WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; BEGIN DELETE FROM vgld_imp_prs; COMMIT; v_count_tot := 0; v_count_import := 0; FOR rec1 IN c1 LOOP BEGIN v_newline := rec1.fac_imp_file_line; v_aanduiding := ''; v_errorhint := 'Fout bij opvragen te importeren rij'; v_ongeldig := 0; -- Lees alle veldwaarden -- 01, 02, 03, 04 - Naam van medewerkers in de 1e 4 kolommen: voornaam, voorletters, tussenvoegsels, achternaam. fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_voornaam); fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_voorletters); fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_tussenvoegsel); fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_naam); -- 05 - Peroneelsnr fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_nr); -- 06 - Afdelingscode fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_afdeling_code); -- 07 - Functieomschrijving van medewerker fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_srtperslid_omschrijving); -- 08 - Email adres van medewerker fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_email); -- 09 - Mobiel van medewerker fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_mobiel); -- 10 - Telnr van medewerker fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_telefoonnr); -- 11 - Usernaam/login fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_oslogin); ------------------------------------------------------------------------- -- xx - Locatiecode werkplek van medewerker --fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_locatie_code); v_alg_locatie_code := NULL; -- xx - Gebouwcode werkplek van medewerker --fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_gebouw_code); v_alg_gebouw_code := NULL; ------------------------------------------------------------------------- -- v_aanduiding := '[' || v_prs_perslid_nr || '|' || v_prs_perslid_naam || '] '; -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen -- de juiste kolomkop. Ik controleer daarbij ALLE kolommen! -- Ik negeer alles totdat ik een geldige header ben gepasseerd. IF (header_is_valid = 0) THEN IF UPPER (v_prs_perslid_voornaam) = 'ROEPNAAM' AND UPPER (v_prs_perslid_naam) = 'ACHTERNAAM' AND UPPER (v_prs_perslid_nr) = 'PERSNR.' AND UPPER (v_prs_afdeling_code) = 'AFDNR.' AND UPPER (v_prs_srtperslid_omschrijving) = 'FUNCTIE' AND UPPER (v_prs_perslid_email) = 'E-MAIL' AND UPPER (v_prs_perslid_mobiel) = 'MOBILE' AND UPPER (v_prs_perslid_telefoonnr) = 'TELEFOON' AND UPPER (v_prs_perslid_oslogin) = 'LOGIN' THEN header_is_valid := 1; END IF; ELSE v_count_tot := v_count_tot + 1; -- Controleer alle veldwaarden -- v_errorhint := 'Ongeldige naam'; v_prs_perslid_naam := TRIM (v_prs_perslid_naam); IF LENGTH (v_prs_perslid_naam) > 30 THEN v_prs_perslid_naam := SUBSTR (v_prs_perslid_naam, 1, 30); fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Naam te lang', 'Naam wordt afgebroken tot [' || v_prs_perslid_naam || ']'); ELSE IF (v_prs_perslid_naam IS NULL) THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'E', v_aanduiding || 'Naam onbekend', 'Naam is verplicht; regel wordt overgeslagen!'); END IF; END IF; COMMIT; -- v_errorhint := 'Ongeldig loginnaam'; v_prs_perslid_oslogin := TRIM (v_prs_perslid_oslogin); IF LENGTH (v_prs_perslid_oslogin) > 30 THEN v_prs_perslid_oslogin := SUBSTR (v_prs_perslid_oslogin, 1, 30); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Loginnaam te lang', 'Loginnaam wordt afgebroken tot [' || v_prs_perslid_oslogin || ']'); ELSE IF (v_prs_perslid_oslogin IS NULL) THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'E', v_aanduiding || 'Usernaam/login onbekend', 'Usernaam/login is verplicht; regel wordt overgeslagen!'); END IF; END IF; COMMIT; -- v_errorhint := 'Ongeldig e-mailadres'; v_prs_perslid_email := TRIM (v_prs_perslid_email); IF LENGTH (v_prs_perslid_email) > 200 THEN v_prs_perslid_email := SUBSTR (v_prs_perslid_email, 1, 200); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'E-mailadres te lang', 'E-mailadres wordt afgebroken tot [' || v_prs_perslid_email || ']'); COMMIT; END IF; v_errorhint := 'Ongeldig personeelsnummer'; v_prs_perslid_nr := TRIM (v_prs_perslid_nr); IF LENGTH (v_prs_perslid_nr) > 16 THEN v_prs_perslid_nr := SUBSTR (v_prs_perslid_nr, 1, 16); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Personeelsnummer te lang', 'Personeelsnummer wordt afgebroken tot [' || v_prs_perslid_nr || ']'); END IF; COMMIT; -- v_errorhint := 'Ongeldig tussenvoegsel'; v_prs_perslid_tussenvoegsel := TRIM (v_prs_perslid_tussenvoegsel); IF LENGTH (v_prs_perslid_tussenvoegsel) > 15 THEN v_prs_perslid_tussenvoegsel := SUBSTR (v_prs_perslid_tussenvoegsel, 1, 15); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Tussenvoegsel te lang', 'Tussenvoegsel wordt afgebroken tot [' || v_prs_perslid_tussenvoegsel || ']'); COMMIT; END IF; -- v_errorhint := 'Ongeldige voorletters'; v_prs_perslid_voorletters := TRIM (v_prs_perslid_voorletters); IF LENGTH (v_prs_perslid_voorletters) > 10 THEN v_prs_perslid_voorletters := SUBSTR (v_prs_perslid_voorletters, 1, 10); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Voorletters te lang', 'Voorletters worden afgebroken tot [' || v_prs_perslid_voorletters || ']'); COMMIT; END IF; -- v_errorhint := 'Ongeldige voornaam'; v_prs_perslid_voornaam := TRIM (v_prs_perslid_voornaam); IF LENGTH (v_prs_perslid_voornaam) > 30 THEN v_prs_perslid_voornaam := SUBSTR (v_prs_perslid_voornaam, 1, 30); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Voornaam is te lang', 'Voornaam wordt afgebroken tot [' || v_prs_perslid_voornaam || ']'); END IF; COMMIT; v_errorhint := 'Ongeldige afdelingcode'; v_prs_afdeling_code := TRIM (v_prs_afdeling_code); IF LENGTH (v_prs_afdeling_code) > 10 THEN v_prs_afdeling_code := SUBSTR (v_prs_afdeling_code, 1, 10); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Afdelingscode te lang', 'Afdelingscode wordt afgebroken tot [' || v_prs_afdeling_code || ']'); ELSE IF (v_prs_afdeling_code IS NULL) THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'E', v_aanduiding || 'Afdelingscode onbekend', 'Afdelingscode is verplicht; regel wordt overgeslagen!'); END IF; END IF; COMMIT; -- v_errorhint := 'Ongeldige functie'; v_prs_srtperslid_omschrijving := TRIM (v_prs_srtperslid_omschrijving); IF LENGTH (v_prs_srtperslid_omschrijving) > 60 THEN v_prs_srtperslid_omschrijving := SUBSTR (v_prs_srtperslid_omschrijving, 1, 60); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Functie te lang', 'Functie wordt afgebroken tot [' || v_prs_srtperslid_omschrijving || ']'); ELSE IF (v_prs_srtperslid_omschrijving IS NULL) THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'E', v_aanduiding || 'Functie onbekend', 'Functie is verplicht; regel wordt overgeslagen!'); END IF; END IF; COMMIT; -- v_errorhint := 'Ongeldige plaats/locatiecode'; v_alg_locatie_code := TRIM (v_alg_locatie_code); IF LENGTH (v_alg_locatie_code) > 5 THEN v_alg_locatie_code := SUBSTR (v_alg_locatie_code, 1, 5); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Locatiecode te lang', 'Locatiecode wordt afgebroken tot [' || v_alg_locatie_code || ']'); COMMIT; END IF; -- v_errorhint := 'Ongeldige plaats/gebouwcode'; v_alg_gebouw_code := TRIM (v_alg_gebouw_code); IF LENGTH (v_alg_gebouw_code) > 10 THEN v_alg_gebouw_code := SUBSTR (v_alg_gebouw_code, 1, 10); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Gebouwcode te lang', 'Gebouwcode wordt afgebroken tot [' || v_alg_gebouw_code || ']'); COMMIT; END IF; -- v_errorhint := 'Ongeldig mobiel nummer'; v_prs_perslid_mobiel := TRIM (v_prs_perslid_mobiel); IF LENGTH (v_prs_perslid_mobiel) > 15 THEN v_prs_perslid_mobiel := SUBSTR (v_prs_perslid_mobiel, 1, 15); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Mobiel nummer te lang', 'mobiel nummer wordt afgebroken tot [' || v_prs_perslid_mobiel || ']'); COMMIT; END IF; v_errorhint := 'Ongeldig telefoonnummer'; v_prs_perslid_telefoonnr := TRIM (v_prs_perslid_telefoonnr); IF LENGTH (v_prs_perslid_telefoonnr) > 15 THEN v_prs_perslid_telefoonnr := SUBSTR (v_prs_perslid_telefoonnr, 1, 15); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Telefoonnummer te lang', 'Telefoonnummer wordt afgebroken tot [' || v_prs_perslid_telefoonnr || ']'); COMMIT; END IF; COMMIT; -- Insert geformatteerde import record IF v_ongeldig = 0 THEN BEGIN v_errorhint := 'Fout bij toevoegen regel aan importtabel VGLD_IMP_PRS'; INSERT INTO vgld_imp_prs (prs_perslid_nr, prs_perslid_naam, prs_perslid_tussenvoegsel, prs_perslid_voorletters, prs_perslid_voornaam, prs_afdeling_code, prs_srtperslid_omschrijving, alg_locatie_code, alg_gebouw_code, alg_verdieping_volgnr, alg_ruimte_nr, prs_perslid_telefoonnr, prs_perslid_mobiel, prs_perslid_email, prs_perslid_oslogin) VALUES (v_prs_perslid_nr, v_prs_perslid_naam, v_prs_perslid_tussenvoegsel, v_prs_perslid_voorletters, v_prs_perslid_voornaam, v_prs_afdeling_code, v_prs_srtperslid_omschrijving, v_alg_locatie_code, v_alg_gebouw_code, NULL, NULL, v_prs_perslid_telefoonnr, v_prs_perslid_mobiel, v_prs_perslid_email, v_prs_perslid_oslogin); COMMIT; v_count_import := v_count_import + 1; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := v_errorhint || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Ingelezen regel kan niet worden weggeschreven!'); COMMIT; END; END IF; END IF; END; END LOOP; IF (header_is_valid = 0) THEN fac.imp_writelog (p_import_key, 'E', 'Ongeldig importbestand', 'Geen header of header niet volgens specificatie!'); ELSE fac.imp_writelog (p_import_key, 'S', 'Persoon: aantal ingelezen regels: ' || TO_CHAR (v_count_tot), ''); fac.imp_writelog ( p_import_key, 'S', 'Persoon: aantal ongeldige importregels: ' || TO_CHAR (v_count_tot - v_count_import), ''); END IF; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, v_errorhint); COMMIT; END vgld_import_prs; / CREATE OR REPLACE PROCEDURE vgld_update_prs (p_import_key IN NUMBER) IS -- LET OP: moet idem zijn als declaratie bij VGLD_IMPORT_PRS c_persoon_inactief VARCHAR2 (30) := 'INACTIEF: '; -- Maximaal percentage aan nieuwe medewerkers tov. actieve medewerkers met een nummer c_max_delta_percentage NUMBER (10) := 20; -- Ruimte waar personen in geplaatst worden (indien nog geen ruimte in opgegeven gebouw) c_ruimte_nr VARCHAR2 (10) := '000'; -- Groep waar personen in geplaatst worden (indien nog geen groep) c_key_default_rol NUMBER (10) := 1; v_aanduiding VARCHAR2 (200); v_errorhint VARCHAR2 (1000); v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_count_prs_actual NUMBER (10); v_count_prs_import NUMBER (10); -- Matching actual persons! v_count_tot NUMBER (10); v_count_error NUMBER (10); v_count NUMBER (10); -- v_perslid_key NUMBER (10); v_afdeling_key NUMBER (10); v_srtperslid_key NUMBER (10); v_oslogin VARCHAR2 (30); v_wachtwoord VARCHAR2 (30); v_locatie_key NUMBER (10); v_gebouw_key NUMBER (10); v_verdieping_key NUMBER (10); v_ruimte_key NUMBER (10); v_wp_key NUMBER (10); v_wp_volgnr NUMBER (3); v_wp_oms VARCHAR2 (30); v_groep_defaultnaam VARCHAR2 (30); -- Let op! 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 vgld_imp_prs ip WHERE ip.prs_perslid_nr = p.prs_perslid_nr); CURSOR csperslid IS SELECT prs_srtperslid_omschrijving FROM vgld_imp_prs GROUP BY prs_srtperslid_omschrijving; CURSOR cprsafd IS SELECT UPPER (prs_afdeling_code) prs_afdeling_code, MIN (prs_afdeling_naam) prs_afdeling_naam FROM vgld_imp_prs GROUP BY UPPER (prs_afdeling_code); CURSOR cperslid IS SELECT * FROM vgld_imp_prs; CURSOR cwp IS SELECT p.*, ip.alg_locatie_code, ip.alg_gebouw_code FROM vgld_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, vgld_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_code); v_errorhint := 'Fout bij bepalen persoon'; SELECT COUNT (*), MAX (prs_perslid_key) INTO v_count, v_perslid_key FROM prs_perslid WHERE prs_perslid_verwijder IS NULL AND UPPER (prs_perslid_nr) = UPPER (recperslid.prs_perslid_nr); IF (v_count = 0) THEN v_errorhint := 'Fout bij toevoegen persoon'; -- Nieuwe persoon uit importbestand, wordt toegevoegd in Facilitor. INSERT INTO prs_perslid (prs_perslid_module, prs_srtperslid_key, prs_afdeling_key, prs_perslid_naam, prs_perslid_voorletters, prs_perslid_tussenvoegsel, prs_perslid_voornaam, prs_perslid_telefoonnr, prs_perslid_mobiel, prs_perslid_email, prs_perslid_nr, prs_perslid_oslogin) VALUES ('PRS', v_srtperslid_key, v_afdeling_key, recperslid.prs_perslid_naam, recperslid.prs_perslid_voorletters, recperslid.prs_perslid_tussenvoegsel, recperslid.prs_perslid_voornaam, recperslid.prs_perslid_telefoonnr, recperslid.prs_perslid_mobiel, recperslid.prs_perslid_email, recperslid.prs_perslid_nr, recperslid.prs_perslid_oslogin); COMMIT; ELSE v_errorhint := 'Fout bij wijzigen persoon'; -- Functie, Afdeling altijd bijwerken -- Voorletters, Naam, Tussenvoegsels, Voornaam alleen indien gevuld wordt aangeboden, anders laten staan wat in DB stond. -- Telefoonnr: alleen bijwerken indien uit AD-dump gevuld, anders niet bijwerken (dus gewoon laten staan zoals in Facilitor was gereigistreerd). -- E-mail: alleen bijwerken indien uit AD-dump gevuld, anders niet bijwerken (dus gewoon laten staan zoals in Facilitor was gereigistreerd). -- Personeelsnr: alleen bijwerken indien uit AD-dump gevuld, anders niet bijwerken (dus gewoon laten staan zoals in Facilitor was gereigistreerd). -- Login: alleen bijwerken indien uit AD-dump gevuld, anders niet bijwerken (dus gewoon laten staan zoals in Facilitor was gereigistreerd). UPDATE prs_perslid SET prs_srtperslid_key = v_srtperslid_key, prs_afdeling_key = v_afdeling_key, prs_perslid_naam = COALESCE (recperslid.prs_perslid_naam, prs_perslid_naam), prs_perslid_voorletters = COALESCE (recperslid.prs_perslid_voorletters, prs_perslid_voorletters), prs_perslid_tussenvoegsel = COALESCE (recperslid.prs_perslid_tussenvoegsel, prs_perslid_tussenvoegsel), prs_perslid_voornaam = COALESCE (recperslid.prs_perslid_voornaam, prs_perslid_voornaam), -- VGLD#31908 prs_perslid_telefoonnr = COALESCE (recperslid.prs_perslid_telefoonnr, prs_perslid_telefoonnr), -- VGLD#31908 prs_perslid_mobiel = COALESCE (recperslid.prs_perslid_mobiel, prs_perslid_mobiel), prs_perslid_email = COALESCE (recperslid.prs_perslid_email, prs_perslid_email), prs_perslid_nr = COALESCE (recperslid.prs_perslid_nr, prs_perslid_nr), prs_perslid_oslogin = COALESCE (recperslid.prs_perslid_oslogin, prs_perslid_oslogin) WHERE prs_perslid_key = v_perslid_key; COMMIT; END IF; 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; -- VGLD#51449 iedereen mandateren voor alle kostenplaatsen INSERT INTO prs_perslidkostenplaats (prs_perslid_key, prs_kostenplaats_key, prs_perslidkostenplaats_boeken, prs_perslidkostenplaats_inzage) SELECT p.prs_perslid_key, NULL, 1, 0 FROM prs_v_aanwezigperslid p WHERE NOT EXISTS (SELECT 1 FROM prs_perslidkostenplaats WHERE prs_perslid_key = p.prs_perslid_key); END vgld_update_prs; / ------ ------ FACTUUREXPORT / KOPPELING EXACT ------ -- View waarin bij de factuur met fin_factuur_key het bijbehorende factuurbestand (PDF) geldt. CREATE OR REPLACE VIEW vgld_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 vgld_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 = 2; -- View waarin bij de factuur met fin_factuur_key de omschrijving van de kopregel (naar Exact) wordt bepaald. CREATE OR REPLACE VIEW vgld_v_factuur_omschr_kopregel ( fin_factuur_key, fin_factuur_omschr_kopregel ) 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 = 81; -- View waarin bij de factuur met fin_factuur_key de omschrijving van de kopregel (naar Exact) wordt bepaald. CREATE OR REPLACE VIEW vgld_v_factuurregel_datum ( fin_factuurregel_key, fin_factuurregel_datum ) AS SELECT kfr.fin_factuurregel_key, kfr.fin_kenmerkfactregel_waarde FROM fin_kenmerkfactregel kfr WHERE kfr.fin_kenmerkfactregel_verwijder IS NULL AND fin_kenmerk_key = 82; -- view tbv export naar exact CREATE OR REPLACE VIEW vgld_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_factuurregel_datum, fin_factuur_debiteur_nr, fin_factuur_betaalref, fin_factuur_omschr_kopregel, project_nummer, prs_kostensoort_oms, prs_kostensoort_doorbelasten, 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, frd.fin_factuurregel_datum, f.fin_factuur_debiteur_nr, fbr.fin_factuur_betaalref, fok.fin_factuur_omschr_kopregel, NULL projectnummer, COALESCE (ks_regel.prs_kostensoort_oms, ks.prs_kostensoort_oms), DECODE (ks_regel.prs_kostensoort_oms, NULL, ks.prs_kostensoort_doorbelasten, ks_regel.prs_kostensoort_doorbelasten), 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, vgld_v_factuur_bestand fb, vgld_v_factuur_betaalref fbr, vgld_v_factuur_omschr_kopregel fok, fin_factuurregel fr, vgld_v_factuurregel_datum frd, 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_factuurregel_key = frd.fin_factuurregel_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.fin_factuur_key = fok.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 vgld_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_factuurregel_datum, fin_factuur_debiteur_nr, fin_factuur_betaalref, fin_factuur_omschr_kopregel, project_nummer, prs_kostensoort_oms, prs_kostensoort_doorbelasten, 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, frd.fin_factuurregel_datum, f.fin_factuur_debiteur_nr, fbr.fin_factuur_betaalref, fok.fin_factuur_omschr_kopregel, NULL projectnummer, COALESCE (ks_regel.prs_kostensoort_oms, ks.prs_kostensoort_oms), DECODE (ks_regel.prs_kostensoort_oms, NULL, ks.prs_kostensoort_doorbelasten, ks_regel.prs_kostensoort_doorbelasten), 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, vgld_v_factuur_bestand fb, vgld_v_factuur_betaalref fbr, vgld_v_factuur_omschr_kopregel fok, fin_factuurregel fr, vgld_v_factuurregel_datum frd, 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_factuurregel_key = frd.fin_factuurregel_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.fin_factuur_key = fok.fin_factuur_key(+); CREATE OR REPLACE VIEW vgld_v_factuur_geg AS SELECT * FROM vgld_v_factuur_mldcnt_gegevens UNION SELECT * FROM vgld_v_factuur_bes_gegevens; CREATE OR REPLACE VIEW vgld_v_factuur_geg_akkoord AS SELECT * FROM vgld_v_factuur_mldcnt_gegevens WHERE fin_factuur_statuses_key = 6 UNION SELECT * FROM vgld_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 vgld_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 vgld_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_oms 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 vgld_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 vgld_v_fclt_factuur_header ( result, result_order ) AS SELECT '<' || fac_usrdata_code || '>' || fac_usrdata_omschr || '', 1 FROM fac_usrdata WHERE fac_usrtab_key = 21 AND fac_usrdata_verwijder IS NULL; CREATE OR REPLACE VIEW vgld_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 (fin_factuur_omschr_kopregel) || '' || '' || xml.char_to_html (bes_mld_cnt_opdracht_id) || '' || '' || datum || '' || '' || fin_factuur_boekmaand || '' || '' || xml.char_to_html (grootboekrekening) || '' || '' || xml.char_to_html (kostensoort_doorbelasten) || '' || '' || 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) || '' || '' || xml.char_to_html (fin_factuurregel_datum) || '' || '' || fin_factuurregel_totaal || '' || '' || btw_percentage || '' || '' || xml.char_to_html (btw_code) || '' || '' || btw_bedrag || '' || '' || xml.char_to_html (prs_kostenplaats_nr) || '' || DECODE ( regelnummer, 0, '', DECODE (max_factuur_regelnr - regelnummer, 0, '', '')), (1000000 + fin_factuur_key) * 10000 + regelnummer FROM (SELECT 0 regelnummer, aant_factuur_regels, max_factuur_regelnr, fin_factuur_key, fin_factuur_nr, fin_factuur_bestand, fin_factuur_debiteur_nr, fin_factuur_omschr_kopregel, opdracht_id bes_mld_cnt_opdracht_id, TO_CHAR (fin_factuur_datum, 'ddmmyyyy') datum, fin_factuur_boekmaand, '' grootboekrekening, '' kostensoort_doorbelasten, 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_datum, '' 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, fin_factuur_omschr_kopregel, COUNT (fin_factuur_key) AS aant_factuur_regels, MAX (fin_factuurregel_nr) AS max_factuur_regelnr, SUM (fin_factuurregel_totaal) bedrag_exbtw, SUM (fin_factuurregel_totaal + fin_factuurregel_btw) bedrag_incbtw FROM vgld_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, fin_factuur_omschr_kopregel) fg UNION ALL SELECT fin_factuurregel_nr regelnummer, ( SELECT COUNT (fin_factuur_key) FROM vgld_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, ( SELECT MAX (fin_factuurregel_nr) FROM vgld_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 max_factuur_regelnr, fin_factuur_key, fin_factuur_nr, '' fin_factuur_bestand, fin_factuur_debiteur_nr, '' fin_factuur_omschr_kopregel, '' bes_mld_cnt_opdracht_id, TO_CHAR (fin_factuur_datum, 'ddmmyyyy') datum, fin_factuur_boekmaand, prs_kostensoort_oms grootboekrekening, TO_CHAR (prs_kostensoort_doorbelasten) kostensoort_doorbelasten, 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, fin_factuurregel_datum, 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 vgld_v_factuur_geg_akkoord fg ORDER BY fin_factuur_key, regelnummer); CREATE OR REPLACE VIEW vgld_v_export_fclt_factuur ( result, result_order ) AS SELECT '', 0 FROM DUAL UNION SELECT result, result_order FROM vgld_v_fclt_factuur_header UNION SELECT result, result_order FROM vgld_v_fclt_factuur_body UNION SELECT '', 99999999999999999999 FROM DUAL; CREATE OR REPLACE PROCEDURE vgld_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 vgld_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 vgld_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_oms || ';' || bes_opdr_key || ';' || mld_opdr_key || ';' || cnt_contract_key, CHR (13), ''), CHR (10), ''), f.fin_factuur_key FROM vgld_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 vgld_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 vgld_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; / -- RES: Dagoverzicht per vergaderzaal. -- rrr.res_status_fo_key IN (1, 2) -- Alleen Optie + Definitief! -- res_srtactiviteit_key = 1 -- Ruimte (géén Voorz. + WP)! CREATE OR REPLACE VIEW vgld_v_rap_res_infobord ( aktief, offset, fclt_f_jaar, fclt_f_maand, fclt_f_dag, dag, tijd_van, tijd_tot, reserv_ruimte, fclt_f_ruimte, fclt_f_dagoverzicht, activiteit, catalogus, aanvrager, gastheer, omschrijving, status, locatie_code, gebouw_code, verdieping_code, locatie_omschrijving, gebouw_omschrijving, verdieping_omschrijving, alg_locatie_key, alg_gebouw_key, alg_verdieping_key, alg_ruimte_key ) AS SELECT (CASE WHEN rrr.res_rsv_ruimte_van > SYSDATE THEN 'expected' WHEN rrr.res_rsv_ruimte_tot < SYSDATE THEN 'passed' ELSE 'active' END) aktief, TRUNC ((SYSDATE - rrr.res_rsv_ruimte_van) * 24 * 60) offset, TO_CHAR (rrr.res_rsv_ruimte_van, 'yyyy') fclt_f_jaar, TO_CHAR (rrr.res_rsv_ruimte_van, 'mm') fclt_f_maand, TO_CHAR (rrr.res_rsv_ruimte_van, 'dd') fclt_f_dag, TO_CHAR (rrr.res_rsv_ruimte_van, 'dd-mm-yyyy') dag, TO_CHAR (rrr.res_rsv_ruimte_van, 'hh24:mi') tijd_van, TO_CHAR (rrr.res_rsv_ruimte_tot, 'hh24:mi') tijd_tot, rrg.res_ruimte_nr ruimte, r.alg_ruimte_omschrijving, DECODE (RK.ALG_ONRGOEDKENMERK_WAARDE, '1', 'Ja', 'Nee'), A.RES_ACTIVITEIT_OMSCHRIJVING, rd.ins_discipline_omschrijving catalogus, aanvrager.prs_perslid_naam_full aanvrager, gastheer.prs_perslid_naam_full gastheer, rrr.res_rsv_ruimte_omschrijving omschrijving, sf.res_status_fo_omschrijving status, l.alg_locatie_code locatie_code, g.alg_gebouw_code gebouw_code, v.alg_verdieping_code verdieping_code, l.alg_locatie_omschrijving locatie_omschrijving, g.alg_gebouw_omschrijving gebouw_omschrijving, v.alg_verdieping_omschrijving verdieping_omschrijving, l.alg_locatie_key, g.alg_gebouw_key, v.alg_verdieping_key, r.alg_ruimte_key FROM res_v_aanwezigrsv_ruimte rrr, res_ruimte_opstelling rro, res_v_res_ruimte_gegevens rrg, res_alg_ruimte rar, prs_v_perslid_fullnames aanvrager, prs_v_perslid_fullnames gastheer, alg_locatie l, alg_gebouw g, alg_verdieping v, alg_ruimte r, alg_onrgoedkenmerk rk, res_status_fo sf, res_activiteit a, res_discipline rd WHERE rrr.res_status_fo_key IN (1, 2) AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key AND rro.res_ruimte_key = rrg.res_ruimte_key AND rrg.res_ruimte_key = RAR.RES_RUIMTE_KEY AND RAR.ALG_RUIMTE_KEY = r.alg_ruimte_key AND rk.alg_onrgoed_key(+) = r.alg_ruimte_key AND rk.alg_kenmerk_key(+) = 1000 AND rk.alg_onrgoed_niveau(+) = 'R' AND rrr.res_rsv_ruimte_host_key = gastheer.prs_perslid_key AND rrr.res_rsv_ruimte_contact_key = aanvrager.prs_perslid_key AND rrg.alg_locatie_key = l.alg_locatie_key AND rrg.alg_gebouw_key = g.alg_gebouw_key AND rrg.alg_verdieping_key = v.alg_verdieping_key AND rrr.res_status_fo_key = sf.res_status_fo_key AND rrr.res_activiteit_key = a.res_activiteit_key AND a.res_srtactiviteit_key = 1 -- Ruimte (géén Voorz. + WP)! AND rrg.res_discipline_key = rd.ins_discipline_key; -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------ OFFICE DEPOT E-INVOICING -- OFFICE DEPOT E-INVOICING -- OFFICE DEPOT E-INVOICING -- OFFICE DEPOT E-INVOICING -- OFFICE DEPOT E-INVOICING ------ -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- CREATE OR REPLACE PROCEDURE vgld_import_fin_factuur_od (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;0;0;0;0;0;0;0;0;0'; -- Variabelelijst -- v_leveranciernr: 1 -- v_factuurnr: 2 (VERPLICHT, anders zet Facilitor '-' in factuurnr, en is status van factuur "Incompleet") -- v_factuurdatum: 3 -- v_ordernr: 4 (VERPLICHT, anders is status van factuur "Incompleet") -- v_locatie: 5 -- v_afleverdatum: 6 -- v_omschrijving: 7 -- v_aantal: 8 -- v_kostprijs: 9 (VERPLICHT, anders is status van factuur "Incompleet") -- v_btw_bedrag: 10 (VERPLICHT, of anders veld 11, anders is status van factuur "Incompleet") -- v_btw: 11 (VERPLICHT, of anders veld 10, anders is status van factuur "Incompleet") -- v_docid: 12 -- v_debiteur_nr: 13 -- v_opmerking: 14 -- v_btw_verlegd: 15 (VERPLICHT, Ja/Nee/ waarbij leeg gelijk is aan Nee. Andere waarden leidt tot "Incompleet") -- v_kenmerk1: 16 -- v_kenmerk1: 17 -- v_kenmerk1: 18 -- v_kenmerk1: 19 -- v_kenmerk1: 20 -- v_boekmaand: 21 fac_import_factuur_body (p_import_key, v_seq_of_columns); END; / CREATE OR REPLACE PROCEDURE vgld_update_fin_factuur_od (p_import_key IN NUMBER) AS BEGIN -- Standaard FCLT verwerk import facturen fac_update_factuur (p_import_key); END; / ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- -- Koppeling met Exact - CREDITEUREN CREATE OR REPLACE PROCEDURE vgld_post_import_ext_bedrijf (p_import_key IN NUMBER) AS BEGIN -- VGLD stuurt geen LUC mee, afgesproken dat elke leverancier LUC gaat zijn (leverancier, uitvoerende en contractant). -- Daarom in deze post-import alle bedrijven in de import met p_import_key een LUC markeren. UPDATE fac_imp_ext_bedrijf SET prs_bedrijf_leverancier = 1, prs_bedrijf_uitvoerende = 1, prs_bedrijf_contract = 1; -- Alle @@ (deze worden in de XSL geplaatst) worden door CR/LF vervangen. UPDATE fac_imp_ext_bedrijf SET prs_bedrijf_opmerking = REPLACE (prs_bedrijf_opmerking, '@@', CHR (10)); END; / CREATE OR REPLACE PROCEDURE vgld_import_extern_bedrijf (p_import_key IN NUMBER) AS v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_seq_of_columns VARCHAR (255); BEGIN -- hulpje 1;2;3;4;5;6;7;8;9;0;1;2;3;4;5;6;7;8;9;0;1;2;3;4;5;6;7;8;9;0;1;2;3;4 v_seq_of_columns := '2;1;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;3;0;0;0;0;4;0;0'; fac_import_bedrijf_body (p_import_key, v_seq_of_columns, 0); vgld_post_import_ext_bedrijf (p_import_key); EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_errormsg, 'Inleesproces relaties afgebroken!'); END vgld_import_extern_bedrijf; / CREATE OR REPLACE PROCEDURE vgld_update_extern_bedrijf (p_import_key IN NUMBER) AS CURSOR ciban IS SELECT b.prs_bedrijf_key, i.prs_leverancier_nr, SUBSTR (i.prs_bedrijf_opmerking, 7, INSTR (i.prs_bedrijf_opmerking, CHR (10)) - 7) AS importiban, (SELECT prs_kenmerklink_waarde FROM prs_kenmerklink WHERE prs_kenmerk_key = 1080 --Kenmerk Bankrekening AND prs_link_key = b.prs_bedrijf_key) AS iban FROM fac_imp_ext_bedrijf i, prs_bedrijf b WHERE b.prs_leverancier_nr = i.prs_leverancier_nr AND b.prs_bedrijf_verwijder IS NULL; BEGIN -- Parameter p_sync = 0 of 1: -- 0 = er wordt niet gesynchroniseerd (op leveranciersnummer), maar gewoon (ala FIP) aangevuld. Elke leverancier wordt toegevoegd. -- 1 = er wel wel gesynchroniseerd (op leveranciernummer), dus add + update + delete fac_update_bedrijf_body (p_import_key, 1); --VGLD#55300: Ook kenmerk 'Bankrekening' vullen met IBAN nummer FOR reciban IN ciban LOOP BEGIN prs.upsertkenmerk (1080, reciban.prs_bedrijf_key, reciban.importiban); END; END LOOP; END; / CREATE OR REPLACE VIEW vgld_v_rap_besstatuslist AS SELECT bes_bestelling_key, TO_CHAR (bes_bestelling_key) bestelling, bes_bestellingstatuses_omschr status, DECODE (bes_bestelling_status, 2, 'Actief', 3, 'Actief', 4, 'Actief', 5, 'Actief', 'Gesloten') actief, DECODE (bes_bestelling_status, 1, 'Afgewezen', 2, 'Nieuw', 3, 'Gefiatteerd', 4, 'Geaccepteerd door FBB', 5, 'Besteld door FBB', 6, 'Geleverd', 7, 'Verwerkt', 8, 'Geannuleerd', 9, 'Ontvangen', '?') vlgd_status, b.prs_perslid_key, b.prs_perslid_key_voor, pf1.prs_perslid_naam_full besteller, pf2.prs_perslid_naam_full besteld_voor, bes_bestelling_datum aanvraagdatum, (SELECT MAX (fac_tracking_datum) FROM fac_tracking ft, fac_srtnotificatie sn WHERE fac_tracking_refkey = b.bes_bestelling_key AND sn.fac_srtnotificatie_key = ft.fac_srtnotificatie_key AND fac_srtnotificatie_xmlnode = 'bestelling' AND fac_srtnotificatie_code = 'BESACP') facilitair_bedrijfsbureau, (SELECT MAX (fac_tracking_datum) FROM fac_tracking ft, fac_srtnotificatie sn WHERE fac_tracking_refkey = b.bes_bestelling_key AND sn.fac_srtnotificatie_key = ft.fac_srtnotificatie_key AND fac_srtnotificatie_xmlnode = 'bestelling' AND fac_srtnotificatie_code = 'BESFIT') fiat_manager, (SELECT MAX (fac_tracking_datum) FROM fac_tracking ft, fac_srtnotificatie sn WHERE fac_tracking_refkey = b.bes_bestelling_key AND sn.fac_srtnotificatie_key = ft.fac_srtnotificatie_key AND fac_srtnotificatie_xmlnode = 'bestelling' AND fac_srtnotificatie_code = 'BESBES') besteld, bes_bestelling_leverdatum plan_levdatum, ( SELECT MAX (bes_bestelopdr_item_ontvangen) FROM bes_bestelopdr bo, bes_bestelopdr_item boi, bes_bestelling_item bbi, bes_bestelling b1 WHERE bo.bes_bestelopdr_key = boi.bes_bestelopdr_key AND bbi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key AND b1.bes_bestelling_key = bbi.bes_bestelling_key AND b1.bes_bestelling_status IN (6, 7, 9) -- Geleverd, Verwerkt, Ontvangen AND b.bes_bestelling_key = b1.bes_bestelling_key GROUP BY b1.bes_bestelling_key) afgeleverd, bes_bestelling_opmerking opmerking, bes_bestelling_lev_opm lever_opemerking FROM bes_bestelling b, bes_bestellingstatuses bs, prs_v_perslid_fullnames_all pf1, prs_v_perslid_fullnames_all pf2 WHERE b.bes_bestelling_status = bs.bes_bestellingstatuses_key AND b.prs_perslid_key = pf1.prs_perslid_key AND b.prs_perslid_key_voor = pf2.prs_perslid_key AND fac_activiteit_key IS NULL; CREATE OR REPLACE PROCEDURE vgld_import_fin_factuur_marx (p_import_key IN NUMBER) AS v_seq_of_columns VARCHAR (255); BEGIN v_seq_of_columns := '1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28'; fac_import_factuur_body (p_import_key, v_seq_of_columns); END; / CREATE OR REPLACE PROCEDURE vgld_update_fin_factuur_marx (p_import_key IN NUMBER) AS v_aanduiding VARCHAR2 (1000); v_errorhint VARCHAR2 (1000); v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); c_kenmerk_key_bijlage NUMBER (10); c_kenmerk_key_soort VARCHAR (1) := 'F'; -- fin_kenmerk_kenmerktype = M(foldermap) of F(enkelvoudig bestand) v_aanduiding_controle VARCHAR2 (1000); -- Voor logging op bijbehorende controle zodat men weet wat men moet controleren v_fin_factuur_key NUMBER (10); v_perslid_key PRS_PERSLID.PRS_PERSLID_KEY%TYPE; CURSOR cfactuur IS SELECT i.fin_factuur_key, factuurdatum, i.kenmerk1, i.kenmerk2, i.kenmerk3, i.kenmerk6, i.kenmerk7, i.kenmerk8, i.kenmerk9, i.factuurnr, i.fac_imp_file_index, f.fin_factuur_totaal, f.fin_factuur_totaal_btw, f.mld_opdr_key, f.cnt_contract_key, f.bes_bestelopdr_key FROM fac_imp_factuur i, fin_factuur f WHERE i.fin_factuur_key IS NOT NULL AND i.fac_import_key = p_import_key AND f.fin_factuur_key = i.fin_factuur_key -- Incl bijlage AND kenmerk1 IS NOT NULL; BEGIN -- Nu kunnen we de standaard FCLT verwerk import facturen draaien fac_update_factuur (p_import_key); -- CUST: post processing voor verwerking van het PDF document SELECT MIN (fin_kenmerk_key) INTO c_kenmerk_key_bijlage FROM fin_kenmerk WHERE fin_kenmerk_code = 'FACTUURBESTAND' AND fin_kenmerk_verwijder IS NULL; FOR rec IN cfactuur LOOP BEGIN -- Als er een bijlage-flexprop en een bijlage is, dan gaan we deze PDF hier inzetten.... IF c_kenmerk_key_bijlage IS NOT NULL AND rec.kenmerk1 IS NOT NULL THEN BEGIN INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES ( 'IMPORT:' || TO_CHAR (p_import_key), 'flexcode', 'FIN:' || TO_CHAR (rec.fin_factuur_key) -- We kunnen niet meerdere imports tegelijk aan! || ':' || c_kenmerk_key_bijlage || ':' -- De kenmerk key || c_kenmerk_key_soort -- 'F of M' ); -- FSN#33363: Zelf de insert in fin_kenmerkfactuur doen van het bestandskenmerk (FSN#33105 verzorgt dit niet namelijk) -- Aanvulling JM: Voor F-enkelvoudig bestand wel nodig om kenmerk aan te maken, voor M-folder hoeft/moet dit niet IF c_kenmerk_key_soort = 'F' THEN INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde) VALUES (rec.fin_factuur_key, c_kenmerk_key_bijlage, rec.kenmerk1); END IF; EXCEPTION WHEN OTHERS THEN v_aanduiding_controle := 'Van factuur met key ' || rec.fin_factuur_key || ' is de bestandsnaam niet bewaard (regel ' || rec.fac_imp_file_index || ')'; fac.imp_writelog ( p_import_key, 'W', v_aanduiding_controle, 'Factuurnr:' || rec.factuurnr || ' / Bestandsnaam: ' || rec.kenmerk1); END; COMMIT; END IF; END; END LOOP; EXCEPTION WHEN OTHERS THEN -- ROLLBACK; oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; SELECT MAX (i.fin_factuur_key) fin_factuur_key, 'Betreft factuur_key ' || TO_CHAR (i.fin_factuur_key) || ' - Factuurnr ' || i.factuurnr INTO v_fin_factuur_key, v_errorhint FROM fac_imp_factuur i, fin_factuur f WHERE i.fac_import_key = p_import_key AND i.fin_factuur_key = f.fin_factuur_key(+) GROUP BY i.fin_factuur_key, 'Betreft factuur_key ' || TO_CHAR (i.fin_factuur_key) || ' - Factuurnr ' || i.factuurnr; IF v_fin_factuur_key IS NOT NULL THEN UPDATE fin_factuur SET fin_factuur_statuses_key = 3, fin_factuur_opmerking = SUBSTR ( 'Bij factuurimport is volgende Errormessage gemeld: ' || v_errormsg || CHR (13) || CHR (10) || 'Actie 1: Informeren Facilitor' || CHR (13) || CHR (10) || 'Actie 2: Factuur gewoon oppakken: Aanvullen, doorzetten, etc', 1, 250) WHERE fin_factuur_key = v_fin_factuur_key; v_aanduiding := 'Factuur geimporteerd vanuit Mareon'; fac.trackaction ('FINUPD', v_fin_factuur_key, v_perslid_key, NULL, v_aanduiding); END IF; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint || ' - ' || v_aanduiding); COMMIT; END; / ------ 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