-- -- $Id$ -- -- Script containing customer specific db-configuration for DIAN. DEFINE thisfile = 'DIAN.SQL' DEFINE dbuser = '^DIAN' SET ECHO ON SET DEFINE ON COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT; COLUMN fcltcusttxt NEW_VALUE fcltcusttxt NOPRINT; WHENEVER SQLERROR CONTINUE; SELECT adm.getscriptspoolfile('&thisfile') AS fcltlogfile FROM DUAL; SPOOL &fcltlogfile WHENEVER SQLERROR EXIT; SELECT adm.checkscriptcust('&dbuser') AS fcltcusttxt FROM DUAL; WHENEVER SQLERROR CONTINUE; --------------------------------------- PROMPT &fcltcusttxt --------------------------------------- SET DEFINE OFF ------ payload begin ------ CREATE OR REPLACE VIEW dian_v_rap_import_log ( fclt_f_applicatie, datum, fclt_f_status, omschrijving, hint ) AS SELECT COALESCE (fac_import_app_code, imp_log_applicatie), TO_CHAR (imp_log_datum, 'dd-mm-yyyy hh24:mi'), imp_log_status, imp_log_omschrijving, imp_log_hint FROM imp_log il1, fac_import fi1, fac_import_app fia1 WHERE il1.fac_import_key = fi1.fac_import_key(+) AND fi1.fac_import_app_key = fia1.fac_import_app_key(+) AND NOT EXISTS (SELECT 1 FROM imp_log il2, fac_import fi2 WHERE il2.fac_import_key = fi2.fac_import_key AND fi2.fac_import_app_key = fi1.fac_import_app_key AND il2.fac_import_key > il1.fac_import_key); CREATE OR REPLACE PROCEDURE dian_import_prs (p_import_key IN NUMBER) AS v_errormsg VARCHAR2 (1000) := '-'; oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); BEGIN -- Personeelsnummer (kolom 1) tot 6 posities prefixen met voorloopnullen! UPDATE fac_imp_file i SET i.fac_imp_file_line = SUBSTR ('00000' || SUBSTR (fac_imp_file_line, 1, INSTR (fac_imp_file_line, ';', 1, 1) - 1), -6) || SUBSTR (fac_imp_file_line, INSTR (fac_imp_file_line, ';', 1, 1)) WHERE fac_import_key = p_import_key AND fac_imp_file_index > 1 AND SUBSTR (fac_imp_file_line, 1, 1) != ';'; COMMIT; -- Afdelingsomschrijving (kolom 5) mappen naar afdelingscode! UPDATE fac_imp_file i SET i.fac_imp_file_line = SUBSTR (fac_imp_file_line, 1, INSTR (fac_imp_file_line, ';', 1, 4)) || (SELECT MAX (prs_afdeling_naam) FROM prs_afdeling WHERE UPPER (prs_afdeling_omschrijving) = UPPER (SUBSTR (fac_imp_file_line, INSTR (fac_imp_file_line, ';', 1, 4) + 1, INSTR (fac_imp_file_line, ';', 1, 5) - INSTR (fac_imp_file_line, ';', 1, 4) - 1))) || SUBSTR (fac_imp_file_line, INSTR (fac_imp_file_line, ';', 1, 5)) WHERE fac_import_key = p_import_key AND fac_imp_file_index > 1 AND EXISTS (SELECT 1 FROM prs_afdeling WHERE UPPER (prs_afdeling_omschrijving) = UPPER (SUBSTR (fac_imp_file_line, INSTR (fac_imp_file_line, ';', 1, 4) + 1, INSTR (fac_imp_file_line, ';', 1, 5) - INSTR (fac_imp_file_line, ';', 1, 4) - 1))); COMMIT; UPDATE fac_imp_file i SET i.fac_imp_file_line = SUBSTR (fac_imp_file_line, 1, INSTR (fac_imp_file_line, ';', 1, 4)) || SUBSTR (SUBSTR (fac_imp_file_line, INSTR (fac_imp_file_line, ';', 1, 4) + 1, INSTR (fac_imp_file_line, ';', 1, 5) - INSTR (fac_imp_file_line, ';', 1, 4) - 1), 1, 15) || SUBSTR (fac_imp_file_line, INSTR (fac_imp_file_line, ';', 1, 5)) WHERE fac_import_key = p_import_key AND fac_imp_file_index > 1 AND NOT EXISTS (SELECT 1 FROM prs_afdeling WHERE UPPER (prs_afdeling_omschrijving) = UPPER (SUBSTR (fac_imp_file_line, INSTR (fac_imp_file_line, ';', 1, 4) + 1, INSTR (fac_imp_file_line, ';', 1, 5) - INSTR (fac_imp_file_line, ';', 1, 4) - 1))); COMMIT; -- Generieke import. -- De sequence array staat beschreven in PRS_PAC.SRC bij de import_perslid-PROCEDURE. -- Met Stamplaats wordt nog niets gedaan! --'%"Personeelsnummer";"Loginnaam";"Achternaam";"Voornaam";"Afdelingsoms";"Functie";"Email";"Stamplaats"%'); --'%Personeelsnummer;Loginnaam;Achternaam;Voornaam;Afdelingsoms;Functie;Email;Stamplaats%'); prs.import_perslid ( p_import_key, '0;0;0;0;0;0;5;3;0;4;' || '0;0;0;0;0;0;0;7;0;1;' || '6;2;0;0;0;0;8;0;0;0;' || '0;0;0;0;0;0;0;0;0;0;' || '0;0;0;0;0;0', '%Personeelsnummer;Loginnaam;Achternaam;Voornaam;Afdelingsoms;Functie;Email;Stamplaats%'); -- Klantspecifieke aanpassingen. /* -- Als geen Loginnaam aangeleverd, dan handmatig toegekende niet wissen. UPDATE fac_imp_perslid i SET i.prs_perslid_oslogin = (SELECT MAX (prs_perslid_oslogin) FROM prs_v_aanwezigperslid WHERE prs_perslid_nr = i.prs_perslid_nr) WHERE i.prs_perslid_oslogin IS NULL -- Aangeleverde Loginnaam wint! AND EXISTS (SELECT 1 FROM prs_v_aanwezigperslid WHERE prs_perslid_oslogin IS NOT NULL AND prs_perslid_nr = i.prs_perslid_nr); COMMIT; -- Als geen Voornaam aangeleverd, dan handmatig toegekende niet wissen. UPDATE fac_imp_perslid i SET i.prs_perslid_voornaam = (SELECT MAX (prs_perslid_voornaam) FROM prs_v_aanwezigperslid WHERE prs_perslid_nr = i.prs_perslid_nr) WHERE i.prs_perslid_voornaam IS NULL -- Aangeleverde Voornaam wint! AND EXISTS (SELECT 1 FROM prs_v_aanwezigperslid WHERE prs_perslid_voornaam IS NOT NULL AND prs_perslid_nr = i.prs_perslid_nr); COMMIT; -- Als geen Functie aangeleverd, dan handmatig toegekende niet wissen. UPDATE fac_imp_perslid i SET i.prs_srtperslid_omschrijving = (SELECT MAX (prs_srtperslid_omschrijving) FROM prs_v_aanwezigperslid WHERE prs_perslid_nr = i.prs_perslid_nr) WHERE i.prs_srtperslid_omschrijving IS NULL -- Aangeleverde Functie wint! AND EXISTS (SELECT 1 FROM prs_v_aanwezigperslid WHERE prs_srtperslid_omschrijving IS NOT NULL AND prs_perslid_nr = i.prs_perslid_nr); COMMIT; -- Als geen Email aangeleverd, dan handmatig toegekende niet wissen. UPDATE fac_imp_perslid i SET i.prs_perslid_email = (SELECT MAX (prs_perslid_email) FROM prs_v_aanwezigperslid WHERE prs_perslid_nr = i.prs_perslid_nr) WHERE i.prs_perslid_email IS NULL -- Aangeleverde Email wint! AND EXISTS (SELECT 1 FROM prs_v_aanwezigperslid WHERE prs_perslid_email IS NOT NULL AND prs_perslid_nr = i.prs_perslid_nr); COMMIT; */ -- Locatie/Gebouw/Verdieping/Ruimte bepalen via Vestiging-kolom -> Eigen tabel (key=1) -> -- Gebouw en daaronder Ruimte '_000' op de verdieping met het laagste volgnummer! -- Als persoon al een WP heeft op import-locatie, dan is dat de juiste en blijft deze -- (handmatig gecorrigeerde WP) ongewijzigd. In alle andere gevallen verhuist persoon naar -- '_000' op de meegegeven locatie. -- Eventuele WPs onder andere locaties dan import-locatie blijven ook ongewijzigd! UPDATE fac_imp_perslid i SET i.alg_locatie_code = (SELECT il.alg_locatie_code FROM fac_v_aanwezigusrdata ud, -- Mapping Kenmerk1-code -> Locatiecode alg_v_aanweziglocatie il WHERE ud.fac_usrtab_key = 21 AND UPPER (ud.fac_usrdata_code) = UPPER (i.prs_kenmerk1) AND UPPER (ud.fac_usrdata_omschr) = UPPER (il.alg_locatie_code)), i.alg_gebouw_code = (SELECT ig.alg_gebouw_code FROM fac_v_aanwezigusrdata ud, -- Mapping Kenmerk1-code -> Locatiecode alg_v_aanweziglocatie il, alg_v_aanweziggebouw ig WHERE ud.fac_usrtab_key = 21 AND UPPER (ud.fac_usrdata_code) = UPPER (i.prs_kenmerk1) AND UPPER (ud.fac_usrdata_omschr) = UPPER (il.alg_locatie_code) AND il.alg_locatie_key = ig.alg_locatie_key AND ig.alg_gebouw_code = '_'), i.alg_verdieping_volgnr = (SELECT iv.alg_verdieping_volgnr FROM fac_v_aanwezigusrdata ud, -- Mapping Kenmerk1-code -> Locatiecode alg_v_aanweziglocatie il, alg_v_aanweziggebouw ig, alg_verdieping iv, alg_ruimte ir WHERE ud.fac_usrtab_key = 21 AND UPPER (ud.fac_usrdata_code) = UPPER (i.prs_kenmerk1) AND UPPER (ud.fac_usrdata_omschr) = UPPER (il.alg_locatie_code) AND il.alg_locatie_key = ig.alg_locatie_key AND ig.alg_gebouw_code = '_' AND ig.alg_gebouw_key = iv.alg_gebouw_key AND iv.alg_verdieping_key = ir.alg_verdieping_key AND ir.alg_ruimte_nr = '_' AND NOT EXISTS (SELECT 1 FROM alg_v_aanwezigruimte r, alg_verdieping v WHERE r.alg_ruimte_nr = '_' AND r.alg_verdieping_key = v.alg_verdieping_key AND v.alg_verdieping_volgnr < iv.alg_verdieping_volgnr)), i.alg_ruimte_nr = (SELECT ir.alg_ruimte_nr FROM fac_v_aanwezigusrdata ud, -- Mapping Kenmerk1-code -> Locatiecode alg_v_aanweziglocatie il, alg_v_aanweziggebouw ig, alg_verdieping iv, alg_ruimte ir WHERE ud.fac_usrtab_key = 21 AND UPPER (ud.fac_usrdata_code) = UPPER (i.prs_kenmerk1) AND UPPER (ud.fac_usrdata_omschr) = UPPER (il.alg_locatie_code) AND il.alg_locatie_key = ig.alg_locatie_key AND ig.alg_gebouw_code = '_' AND ig.alg_gebouw_key = iv.alg_gebouw_key AND iv.alg_verdieping_key = ir.alg_verdieping_key AND ir.alg_ruimte_nr = '_' AND NOT EXISTS (SELECT 1 FROM alg_v_aanwezigruimte r, alg_verdieping v WHERE r.alg_ruimte_nr = '_' AND r.alg_verdieping_key = v.alg_verdieping_key AND v.alg_verdieping_volgnr < iv.alg_verdieping_volgnr)) WHERE NOT EXISTS -- Nog geen werkplek op Locatie! (SELECT 1 FROM fac_v_aanwezigusrdata ud, -- Mapping Kenmerk1-code -> Locatiecode alg_v_aanweziggebouw ig, alg_locatie il, prs_v_aanwezigperslid p, prs_perslidwerkplek pw, prs_werkplek cw, alg_v_aanwezigruimte cr, alg_verdieping cv, alg_gebouw cg WHERE ud.fac_usrtab_key = 21 AND UPPER (ud.fac_usrdata_code) = UPPER (i.prs_kenmerk1) AND UPPER (ud.fac_usrdata_omschr) = UPPER (il.alg_locatie_code) AND il.alg_locatie_key = ig.alg_locatie_key AND p.prs_perslid_nr = i.prs_perslid_nr AND p.prs_perslid_key = pw.prs_perslid_key AND pw.prs_werkplek_key = cw.prs_werkplek_key AND cw.prs_alg_ruimte_key = cr.alg_ruimte_key AND cr.alg_verdieping_key = cv.alg_verdieping_key AND cv.alg_gebouw_key = cg.alg_gebouw_key AND cg.alg_locatie_key = il.alg_locatie_key); COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ') '; fac.imp_writelog (p_import_key, 'E', v_errormsg, 'Inleesproces personen afgebroken!'); END dian_import_prs; / CREATE OR REPLACE PROCEDURE dian_update_prs (p_import_key IN NUMBER) AS -- Maximaal percentage aan nieuwe medewerkers tov. actieve medewerkers (met -- een personeelsnummer). c_max_delta_percentage NUMBER (10) := 25; -- 25%! v_count_prs_import NUMBER (10); -- #actieve personen na import! v_count_prs_actual NUMBER (10); -- #actieve personen voor import! -- Mandateren personen met >1 dienstverband, namelijk voor kostenplaats(en) -- van de andere dan de eigen afdeling! /* CURSOR c_mandate IS SELECT p.prs_perslid_key, p.prs_perslid_nr, a.prs_kostenplaats_key FROM prs_v_aanwezigperslid p, prs_afdeling a, fac_imp_perslid i WHERE p.prs_afdeling_key = a.prs_afdeling_key AND UPPER (p.prs_perslid_nr) = UPPER (i.prs_perslid_nr) AND a.prs_afdeling_upper != UPPER (i.prs_perslid_naam) ORDER BY 2; */ -- Verwijderen personen niet in import! /* CURSOR c_del IS SELECT p.prs_perslid_key, p.prs_perslid_nr FROM prs_v_aanwezigperslid p WHERE p.prs_perslid_nr IS NOT NULL AND NOT EXISTS (SELECT 1 FROM fac_imp_perslid WHERE UPPER (prs_perslid_nr) = UPPER (p.prs_perslid_nr)) ORDER BY 2; */ BEGIN -- Bepaal aantal actieve personen in FACILITOR na import! SELECT COUNT (DISTINCT prs_perslid_nr) INTO v_count_prs_import FROM fac_imp_perslid WHERE prs_perslid_nr IS NOT NULL; -- Bepaal aantal actieve personen in FACILITOR voor import! SELECT DECODE (COUNT ( * ), 0, 1, COUNT ( * )) INTO v_count_prs_actual FROM prs_v_aanwezigperslid WHERE prs_perslid_nr IS NOT NULL; IF (TRUNC ( (v_count_prs_import / v_count_prs_actual) * 100) < (100 - c_max_delta_percentage)) THEN fac.imp_writelog ( p_import_key, 'E', 'Verschil tussen huidig aantal en te importeren aantal personen te groot; zie specificatie!', '- max. verschilpercentage = [' || TO_CHAR (c_max_delta_percentage) || '%]' || CHR (13) || CHR (10) || '- #personen/import = [' || TO_CHAR (v_count_prs_import) || ']' || CHR (13) || CHR (10) || '- #personen/huidig = [' || TO_CHAR (v_count_prs_actual) || ']'); RETURN; END IF; -- Generieke update (op personeelsnummer). prs.update_perslid (p_import_key, 'NR', 'D'); -- Verwijder personen die niet meer in de import voorkomen. --FOR rec IN c_del --LOOP -- prs.delete_perslid (p_import_key, rec.prs_perslid_key); --END LOOP; END dian_update_prs; / CREATE OR REPLACE PROCEDURE dian_import_exact (p_import_key IN NUMBER) AS c_delim VARCHAR2 (1) := ';'; c_client_fkey NUMBER (10) := 621; -- Cliënt c_client_anaam VARCHAR2 (4) := 'EXTB'; v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_aanduiding VARCHAR2 (200); v_ongeldig NUMBER (1); v_newline VARCHAR2 (1000); -- Input line header_is_valid NUMBER; v_count_tot NUMBER (10); v_count_import NUMBER (10); -- De importvelden: v_clientid VARCHAR2 (255); -- C16 v_clientnaam VARCHAR2 (255); -- C60 v_clientvoorletters VARCHAR2 (255); -- C15 v_clientgeslacht VARCHAR2 (255); -- N1 v_clienttelefoon VARCHAR2 (255); -- C15 v_clientemail VARCHAR2 (255); -- C200 v_artnr VARCHAR2 (255); -- C32 v_artikelomschrijving VARCHAR2 (255); -- C100 v_artikelprijs VARCHAR2 (255); -- N8.2 v_artikeleenheid VARCHAR2 (255); -- C30 v_aantal_ce VARCHAR2 (255); -- Nx CURSOR c1 IS SELECT fac_imp_file_line FROM fac_imp_file WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; BEGIN DELETE FROM fac_imp_perslid; DELETE FROM fac_imp_catalogus; COMMIT; header_is_valid := 0; v_count_tot := 0; v_count_import := 0; FOR rec1 IN c1 LOOP BEGIN v_errormsg := 'Fout opvragen importregel'; v_aanduiding := ''; v_ongeldig := 0; v_newline := rec1.fac_imp_file_line; -- Lees alle veldwaarden -- ClientId;ClientAchternaam;ClientVoorletters;ClientGeslacht;ClientTelefoon;ClientEmail;Artikelnr;Omschrijving;Prijs;Eenheid -- ClientID;ClientNaam;ClientVoorletters;ClientGeslacht;ClientTelefoon;ClientEmail;Artnr;ArtikelOmschrijving;ArtikelPrijs;ArtikelEenheid;aantal_ce fac.imp_getfield (v_newline, c_delim, v_clientid); fac.imp_getfield (v_newline, c_delim, v_clientnaam); fac.imp_getfield (v_newline, c_delim, v_clientvoorletters); fac.imp_getfield (v_newline, c_delim, v_clientgeslacht); fac.imp_getfield (v_newline, c_delim, v_clienttelefoon); fac.imp_getfield (v_newline, c_delim, v_clientemail); fac.imp_getfield (v_newline, c_delim, v_artnr); fac.imp_getfield (v_newline, c_delim, v_artikelomschrijving); fac.imp_getfield (v_newline, c_delim, v_artikelprijs); fac.imp_getfield (v_newline, c_delim, v_artikeleenheid); fac.imp_getfield (v_newline, c_delim, v_aantal_ce); v_aanduiding := '[' || v_clientid || '|' || v_artnr || '] '; -- 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_clientid) = 'CLIENTID' AND UPPER (v_clientnaam) = 'CLIENTNAAM' AND UPPER (v_clientvoorletters) = 'CLIENTVOORLETTERS' AND UPPER (v_clientgeslacht) = 'CLIENTGESLACHT' AND UPPER (v_clienttelefoon) = 'CLIENTTELEFOON' AND UPPER (v_clientemail) = 'CLIENTEMAIL' AND UPPER (v_artnr) = 'ARTNR' AND UPPER (v_artikelomschrijving) = 'ARTIKELOMSCHRIJVING' AND UPPER (v_artikelprijs) = 'ARTIKELPRIJS' AND UPPER (v_artikeleenheid) = 'ARTIKELEENHEID' AND UPPER (v_aantal_ce) = 'AANTAL_CE' THEN header_is_valid := 1; END IF; ELSE v_count_tot := v_count_tot + 1; -- Controleer alle veldwaarden v_errormsg := 'ClientId ongeldig; ongedefinieerd of te lang'; v_clientid := TRIM (v_clientid); IF v_clientid IS NULL OR LENGTH (v_clientid) > 16 THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel overgeslagen!'); END IF; -- v_errormsg := 'ClientNaam ongeldig; ongedefinieerd of te lang'; v_clientnaam := TRIM (v_clientnaam); IF v_clientnaam IS NULL OR LENGTH (v_clientnaam) > 60 THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel overgeslagen!'); END IF; -- v_errormsg := 'ClientVoorletters ongeldig; ongedefinieerd of te lang'; v_clientvoorletters := TRIM (v_clientvoorletters); IF LENGTH (v_clientvoorletters) > 15 THEN v_clientvoorletters := SUBSTR (v_clientvoorletters, 1, 15); fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'ClientVoorletters afgekapt!'); END IF; -- v_errormsg := 'ClientGeslacht ongeldig'; v_clientgeslacht := TRIM (v_clientgeslacht); IF v_clientgeslacht NOT IN ('M', 'V') THEN v_clientgeslacht := ''; fac.imp_writelog (p_import_key, 'I', v_aanduiding || v_errormsg, 'ClientGeslacht genegeerd!'); END IF; -- v_errormsg := 'ClientTelefoon te lang'; v_clienttelefoon := TRIM (v_clienttelefoon); IF LENGTH (v_clienttelefoon) > 15 THEN v_clienttelefoon := SUBSTR (v_clienttelefoon, 1, 15); fac.imp_writelog (p_import_key, 'I', v_aanduiding || v_errormsg, 'ClientTelefoon afgekapt!'); END IF; -- v_errormsg := 'ClientEmail te lang'; v_clientemail := TRIM (v_clientemail); IF LENGTH (v_clientemail) > 200 THEN v_clientemail := SUBSTR (v_clientemail, 1, 200); fac.imp_writelog (p_import_key, 'I', v_aanduiding || v_errormsg, 'ClientEmail afgekapt!'); END IF; -- v_errormsg := 'ArtNr ongeldig; ongedefinieerd of te lang'; v_artnr := TRIM (v_artnr); IF v_artnr IS NULL OR LENGTH (v_artnr) > 32 THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel overgeslagen!'); END IF; -- v_errormsg := 'ArtikelOmschrijving ongeldig; ongedefinieerd of te lang'; v_artikelomschrijving := TRIM (v_artikelomschrijving); IF v_artikelomschrijving IS NULL OR LENGTH (v_artikelomschrijving) > 100 THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel overgeslagen!'); END IF; -- v_errormsg := 'ArtikelPrijs ongeldig'; v_artikelprijs := TRIM (v_artikelprijs); --IF fac.safe_to_number (v_artikelprijs) IS NULL IF v_artikelprijs IS NOT NULL AND fac.safe_to_number (v_artikelprijs) IS NULL THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel overgeslagen!'); END IF; -- v_errormsg := 'ArtikelEenheid te lang'; v_artikeleenheid := TRIM (v_artikeleenheid); IF LENGTH (v_artikeleenheid) > 30 THEN v_artikeleenheid := SUBSTR (v_artikeleenheid, 1, 30); fac.imp_writelog (p_import_key, 'I', v_aanduiding || v_errormsg, 'ArtikelEenheid afgekapt!'); END IF; -- v_errormsg := 'aantal_ce ongeldig'; v_aantal_ce := TRIM (v_aantal_ce); --IF fac.safe_to_number (v_aantal_ce) IS NULL IF v_aantal_ce IS NOT NULL AND fac.safe_to_number (v_aantal_ce) IS NULL THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'I', v_aanduiding || v_errormsg, 'Regel overgeslagen!'); END IF; -- Insert geformatteerde import record IF v_ongeldig = 0 THEN BEGIN v_errormsg := 'Fout wegschrijven importregels'; INSERT INTO fac_imp_perslid (fac_import_key, prs_perslid_oslogin, prs_perslid_naam, prs_perslid_voorletters, prs_perslid_geslacht, prs_perslid_telefoonnr, prs_perslid_email, prs_afdeling_naam, prs_srtperslid_omschrijving) SELECT p_import_key, v_clientid, v_clientnaam, v_clientvoorletters, DECODE (v_clientgeslacht, 'M', 1, 'V', 0, NULL), v_clienttelefoon, v_clientemail, c_client_anaam, prs_srtperslid_omschrijving FROM prs_srtperslid WHERE prs_srtperslid_key = c_client_fkey AND NOT EXISTS (SELECT 1 FROM fac_imp_perslid WHERE prs_perslid_oslogin = v_clientid); INSERT INTO fac_imp_catalogus (fac_import_key, ins_discipline_key, prs_bedrijf_key, fac_imp_catalogus_datum, ins_srtdeel_nr, ins_srtgroep_omschrijving, ins_srtdeel_omschrijving, ins_srtdeel_prijs, ins_srtdeel_inkprijs, ins_srtdeel_eenheid, ins_srtdeel_image, ins_srtdeel_veelvoud, ins_srtdeel_btw, ins_srtdeel_vervaldatum, ins_srtdeel_minimum, bes_staffeltabel_key, ins_srtdeel_wijzigdagen, ins_srtdeel_annuleerdagen, ins_srtdeel_opmerking) VALUES (p_import_key, NULL, NULL, TRUNC (SYSDATE), v_artnr, v_clientid, v_artikelomschrijving, 0, NULL, DECODE (UPPER (v_artikeleenheid), 'STUKS', DECODE (v_aantal_ce, 1, 'stuks', 'per ' || v_aantal_ce || ' stuks'), LOWER (v_artikeleenheid) || ' à ' || v_aantal_ce), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); v_count_import := v_count_import + 1; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, ''); END; COMMIT; 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', 'BES-catalogi/#ingelezen importregels: ' || TO_CHAR (v_count_tot), '' ); fac.imp_writelog (p_import_key, 'S', 'BES-catalogi/#ongeldige niet ingelezen importregels: ' || TO_CHAR (v_count_tot - v_count_import), ''); END IF; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Inleesproces BES-catalogi afgebroken!'); END dian_import_exact; / CREATE OR REPLACE PROCEDURE dian_update_exact (p_import_key IN NUMBER) AS -- Maximaal percentage aan nieuwe medewerkers tov. actieve medewerkers (met -- een personeelsnummer). c_max_delta_percentage NUMBER (10) := 60; -- 60%! c_client_fkey NUMBER (10) := 621; -- Cliënt c_client_anaam VARCHAR2 (4) := 'EXTB'; c_exact_bkey NUMBER (10) := 641; -- Exact c_default_gkey NUMBER (10) := 1; -- _Default-groep c_clientbeheer_gkey NUMBER (10) := 61; -- CliëntBeheer-groep v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_aanduiding VARCHAR2 (200); v_count_prs_import NUMBER (10); -- #actieve personen na import! v_count_prs_actual NUMBER (10); -- #actieve personen voor import! v_count NUMBER (10); v_discipline_key NUMBER (10); -- Verwijderen cliënten niet in import! CURSOR c_prsdel IS SELECT p.prs_perslid_key FROM prs_v_aanwezigperslid p, prs_afdeling a WHERE p.prs_srtperslid_key = c_client_fkey -- Cliënt AND p.prs_afdeling_key = a.prs_afdeling_key AND a.prs_afdeling_naam = c_client_anaam AND NOT EXISTS (SELECT 1 FROM fac_imp_perslid WHERE prs_perslid_oslogin = p.prs_perslid_oslogin) ORDER BY 1; -- TODO:Schonen catalogi van verwijderde cliënten waaruit >6 maanden niet -- meer is besteld! CURSOR c_catdel IS SELECT bd.ins_discipline_key FROM bes_discipline bd WHERE NOT EXISTS -- Geen aanwezige persoon meer met login volgens discipline! (SELECT 1 FROM prs_v_aanwezigperslid WHERE prs_perslid_oslogin = SUBSTR (bd.ins_discipline_omschrijving, INSTR (bd.ins_discipline_omschrijving, '/') + 1)) AND NOT EXISTS -- Laatste bestelling >6 maanden geleden! (SELECT 1 FROM bes_bestelling b, bes_bestelling_item bi, bes_srtdeel sd, bes_srtgroep sg WHERE b.bes_bestelling_datum > TRUNC (ADD_MONTHS (SYSDATE, -6), 'mm') AND b.bes_bestelling_key = bi.bes_bestelling_key AND bi.bes_srtdeel_key = sd.bes_srtdeel_key AND sd.bes_srtgroep_key = sg.bes_srtgroep_key AND sg.ins_discipline_key = bd.ins_discipline_key) ORDER BY 1; -- Aanmaken BES-catalogi en fac_imp_catalogus-tabel verrijken/aanvullen met -- ins_discipline_key (per cliënt) en prs_bedrijf_key (Exact). CURSOR c_besins IS SELECT DISTINCT prs_perslid_oslogin, prs_perslid_naam FROM fac_imp_perslid ORDER BY 1; BEGIN v_errormsg := 'Fout bepalen verschil'; -- Bepaal aantal actieve cliënten in FACILITOR na import! SELECT COUNT (DISTINCT prs_perslid_oslogin) INTO v_count_prs_import FROM fac_imp_perslid WHERE prs_perslid_oslogin IS NOT NULL; -- Bepaal aantal actieve cliënten in FACILITOR voor import! SELECT DECODE (COUNT ( * ), 0, 1, COUNT ( * )) INTO v_count_prs_actual FROM prs_v_aanwezigperslid p, prs_afdeling a WHERE p.prs_srtperslid_key = c_client_fkey -- Cliënt AND p.prs_afdeling_key = a.prs_afdeling_key AND a.prs_afdeling_naam = c_client_anaam; IF (TRUNC ( (v_count_prs_import / v_count_prs_actual) * 100) < (100 - c_max_delta_percentage)) THEN fac.imp_writelog ( p_import_key, 'E', 'Verschil tussen huidig aantal en te importeren aantal cliënten te groot!', '- max. verschilpercentage = [' || TO_CHAR (c_max_delta_percentage) || '%]' || CHR (13) || CHR (10) || '- #cliënten/import = [' || TO_CHAR (v_count_prs_import) || ']' || CHR (13) || CHR (10) || '- #cliënten/huidig = [' || TO_CHAR (v_count_prs_actual) || ']'); RETURN; END IF; -- Generieke update (op loginnaam). v_errormsg := 'Fout toevoegen cliënten'; prs.update_perslid (p_import_key, 'LOGIN', NULL); -- Nieuwe/bestaande cliënten de '_Default'-groep afnemen! v_errormsg := 'Fout afnemen _Default-groepen'; DELETE FROM fac_gebruikersgroep gg WHERE gg.fac_groep_key = c_default_gkey -- _Default AND EXISTS (SELECT 1 FROM prs_v_aanwezigperslid p, prs_afdeling a WHERE p.prs_srtperslid_key = c_client_fkey -- Cliënt AND p.prs_afdeling_key = a.prs_afdeling_key AND a.prs_afdeling_naam = c_client_anaam AND p.prs_perslid_key = gg.prs_perslid_key); COMMIT; -- Verwijderen cliënten niet in import! v_errormsg := 'Fout verwijderen cliënten'; FOR rec IN c_prsdel LOOP prs.delete_perslid (p_import_key, rec.prs_perslid_key); END LOOP; -- Aanmaken BES-catalogi en fac_imp_catalogus-tabel verrijken/aanvullen met -- ins_discipline_key (per cliënt) en prs_bedrijf_key (Exact). -- LET OP-Catalogus-naamconventie: / v_errormsg := 'Fout toevoegen catalogi'; FOR rec IN c_besins LOOP SELECT COUNT ( * ) INTO v_count FROM ins_tab_discipline WHERE ins_discipline_verwijder IS NULL AND ins_discipline_module = 'BES' AND INSTR (UPPER (ins_discipline_omschrijving), '/' || rec.prs_perslid_oslogin) > 0; IF v_count = 0 THEN INSERT INTO ins_tab_discipline (ins_discipline_module, ins_discipline_omschrijving, ins_discipline_kpnverplicht, ins_discipline_btw) VALUES ('BES', rec.prs_perslid_naam || '/' || rec.prs_perslid_oslogin, 2, -- DIAN#57093: Kostenplaats niet tonen (per 2019.1)! 0) RETURNING ins_discipline_key INTO v_discipline_key; INSERT INTO bes_disc_params (bes_ins_discipline_key, bes_disc_params_auto_order, bes_disc_params_autoacceptrfo, bes_disc_params_leverdagen, bes_disc_params_module, bes_disc_params_bonotify, bes_disc_params_bestelmode, bes_disc_params_hide_cost_fe) VALUES (v_discipline_key, 1, 1, 0, 'BES', 0, 2, 1); ELSE -- Exception als v_count > 1! SELECT ins_discipline_key INTO v_discipline_key FROM ins_tab_discipline WHERE ins_discipline_verwijder IS NULL AND ins_discipline_module = 'BES' AND INSTR (UPPER (ins_discipline_omschrijving), '/' || rec.prs_perslid_oslogin) > 0; END IF; UPDATE fac_imp_catalogus SET ins_discipline_key = v_discipline_key, prs_bedrijf_key = c_exact_bkey -- Exact WHERE ins_srtgroep_omschrijving = rec.prs_perslid_oslogin; COMMIT; END LOOP; -- Generieke update v_errormsg := 'Fout bijwerken catalogi'; fac_update_catalogus (p_import_key); v_errormsg := 'Fout sorteren catalogi'; FOR cat IN ( SELECT DISTINCT ins_discipline_key FROM fac_imp_catalogus -- Incl. ins_discipline_key (per cliënt)! ORDER BY ins_discipline_key) LOOP v_count := 1; FOR art IN ( SELECT sd.bes_srtdeel_key FROM bes_srtdeel sd WHERE EXISTS -- We weten dat er een groep is per discipline! (SELECT 1 FROM bes_srtgroep WHERE ins_discipline_key = cat.ins_discipline_key AND bes_srtgroep_key = sd.bes_srtgroep_key) ORDER BY bes_srtgroep_key, bes_srtdeel_nr) LOOP UPDATE bes_srtdeel SET bes_srtdeel_volgnr = MOD (v_count, 999) WHERE bes_srtdeel_key = art.bes_srtdeel_key; v_count := v_count + 1; END LOOP; COMMIT; END LOOP; -- Per cliënt een 'Cliënt'-groep toevoegen (zover nog niet toegevoegd)! -- LET OP-Autorisatiegroep-naamconventie: / v_errormsg := 'Fout toevoegen Cliënt-groepen'; INSERT INTO fac_groep (fac_groep_omschrijving) SELECT SUBSTR (p.prs_perslid_oslogin || '/' || p.prs_perslid_naam, 1, 30) FROM prs_v_aanwezigperslid p, prs_afdeling a WHERE p.prs_srtperslid_key = c_client_fkey -- Cliënt AND p.prs_perslid_oslogin IS NOT NULL AND p.prs_afdeling_key = a.prs_afdeling_key AND a.prs_afdeling_naam = c_client_anaam AND NOT EXISTS (SELECT 1 FROM fac_groep WHERE INSTR (fac_groep_upper, p.prs_perslid_oslogin || '/') > 0); COMMIT; -- Elke 'Cliënt'-groep BESUSE-rechten toekennen op "eigen" catalogus en -- 'CliëntBeheer'-groep BESFOF/BESBOF/BESBOR-rechten toekennen op catalogi -- van actieve cliënten. v_errormsg := 'Fout inkleuren Cliënt-groepen'; INSERT INTO fac_groeprechten (fac_groep_key, fac_functie_key, ins_discipline_key, fac_gebruiker_prs_level_read, fac_gebruiker_alg_level_read, fac_gebruiker_prs_level_write, fac_gebruiker_alg_level_write) SELECT g.fac_groep_key, f.fac_functie_key, td.ins_discipline_key, -1, -1, -1, -1 FROM prs_v_aanwezigperslid p, prs_afdeling a, fac_groep g, fac_functie f, ins_tab_discipline td WHERE p.prs_srtperslid_key = c_client_fkey -- Cliënt AND p.prs_perslid_oslogin IS NOT NULL AND p.prs_afdeling_key = a.prs_afdeling_key AND a.prs_afdeling_naam = c_client_anaam AND INSTR (g.fac_groep_upper, p.prs_perslid_oslogin || '/') > 0 AND f.fac_functie_code = 'WEB_BESUSE' AND INSTR (UPPER (td.ins_discipline_omschrijving), '/' || p.prs_perslid_oslogin) > 0 AND td.ins_discipline_module = 'BES' AND NOT EXISTS (SELECT 1 FROM fac_groeprechten WHERE fac_groep_key = g.fac_groep_key AND fac_functie_key = f.fac_functie_key AND ins_discipline_key = td.ins_discipline_key) UNION ALL SELECT c_clientbeheer_gkey, -- CliëntBeheer f.fac_functie_key, td.ins_discipline_key, -1, -1, -1, -1 FROM prs_v_aanwezigperslid p, prs_afdeling a, fac_functie f, ins_tab_discipline td WHERE p.prs_srtperslid_key = c_client_fkey -- Cliënt AND p.prs_perslid_oslogin IS NOT NULL AND p.prs_afdeling_key = a.prs_afdeling_key AND a.prs_afdeling_naam = c_client_anaam AND f.fac_functie_code IN ('WEB_BESFOF', 'WEB_BESBOF', 'WEB_BESBOR') AND INSTR (UPPER (td.ins_discipline_omschrijving), '/' || p.prs_perslid_oslogin) > 0 AND td.ins_discipline_module = 'BES' AND NOT EXISTS (SELECT 1 FROM fac_groeprechten WHERE fac_groep_key = c_clientbeheer_gkey -- CliëntBeheer AND fac_functie_key = f.fac_functie_key AND ins_discipline_key = td.ins_discipline_key); COMMIT; -- DIAN#77719: 'CliëntBeheer'-groep BESFOF/BESBOF/BESBOR-rechten afpakken -- op catalogi van verwijderde cliënten waaruit >6 maanden niet -- meer is besteld! -- TODO:Betreffende catalogi helemaal verwijderen (ipv. rechten)? v_errormsg := 'Fout schonen CliëntBeheer-groep'; DELETE FROM fac_groeprechten gr WHERE gr.fac_groep_key = c_clientbeheer_gkey AND NOT EXISTS -- Geen aanwezige persoon meer met login volgens discipline! (SELECT 1 FROM bes_discipline bd, prs_v_aanwezigperslid p WHERE SUBSTR (bd.ins_discipline_omschrijving, INSTR (bd.ins_discipline_omschrijving, '/') + 1) = p.prs_perslid_oslogin AND bd.ins_discipline_key = gr.ins_discipline_key) AND NOT EXISTS -- Laatste bestelling >6 maanden geleden! (SELECT 1 FROM bes_bestelling b, bes_bestelling_item bi, bes_srtdeel sd, bes_srtgroep sg WHERE b.bes_bestelling_datum > TRUNC (ADD_MONTHS (SYSDATE, -6), 'mm') AND b.bes_bestelling_key = bi.bes_bestelling_key AND bi.bes_srtdeel_key = sd.bes_srtdeel_key AND sd.bes_srtgroep_key = sg.bes_srtgroep_key AND sg.ins_discipline_key = gr.ins_discipline_key); -- Nieuwe/bestaande cliënten de *eigen* 'Cliënt'-groep toekennen (zover nog -- niet toegekend)! v_errormsg := 'Fout toekennen Cliënt-groepen'; INSERT INTO fac_gebruikersgroep (fac_groep_key, prs_perslid_key) SELECT g.fac_groep_key, p.prs_perslid_key FROM prs_v_aanwezigperslid p, prs_afdeling a, fac_groep g WHERE p.prs_srtperslid_key = c_client_fkey -- Cliënt AND p.prs_perslid_oslogin IS NOT NULL AND p.prs_afdeling_key = a.prs_afdeling_key AND a.prs_afdeling_naam = c_client_anaam AND INSTR (fac_groep_upper, p.prs_perslid_oslogin || '/') > 0 AND NOT EXISTS (SELECT 1 FROM fac_gebruikersgroep WHERE prs_perslid_key = p.prs_perslid_key AND fac_groep_key = g.fac_groep_key); EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ') '; fac.imp_writelog (p_import_key, 'E', v_errormsg, 'Updateproces BES-catalogi afgebroken!'); COMMIT; END dian_update_exact; / -- DIAN#65248: Dummy export NACHTWERK tbv. het automatisch op Geleverd zetten -- van bestellingen 2 weken na Afleverdatum. CREATE OR REPLACE PROCEDURE dian_select_nachtwerk (p_applname IN VARCHAR2, p_applrun IN VARCHAR2) AS -- Cursor loopt over alle bestelopdracht-items met status 'In bestelling'; -- deze worden verondersteld te zijn geleverd na 'leverdagen'+'notidagen'! CURSOR cboi IS SELECT DISTINCT bo.bes_bestelopdr_key FROM bes_bestelopdr bo, bes_bestelopdr_item boi, bes_bestelling_item bi, bes_bestelling b --bes_srtdeel sd, --bes_srtgroep sg, --bes_disc_params bdp WHERE bo.bes_bestelopdr_status = 4 -- In bestelling AND bo.bes_bestelopdr_key = boi.bes_bestelopdr_key AND boi.bes_bestelopdr_item_key = bi.bes_bestelopdr_item_key AND bi.bes_bestelling_key = b.bes_bestelling_key --AND bi.bes_srtdeel_key = sd.bes_srtdeel_key --AND sd.bes_srtgroep_key = sg.bes_srtgroep_key --AND sg.ins_discipline_key = -1 --AND sg.ins_discipline_key = bdp.bes_ins_discipline_key --AND bdp.bes_disc_params_noti_dagen IS NOT NULL --AND (b.bes_bestelling_datum IS NULL OR fac.datumtijdplusuitvoertijd (b.bes_bestelling_leverdatum, bdp.bes_disc_params_noti_dagen, 'DAGEN') < SYSDATE) AND (b.bes_bestelling_datum IS NULL OR b.bes_bestelling_leverdatum + 14 < SYSDATE) -- Hard 2 weken na afleverdatum! ORDER BY 1; -- Cursor loopt over alle bestelling-items met status 'Besteld' waarvan -- de bijbehorende bestelopdracht-items zijn geleverd; deze worden dan ook -- gesloten! CURSOR cbi IS SELECT DISTINCT b.bes_bestelling_key FROM bes_bestelling b, bes_bestelling_item bi, bes_bestelopdr_item boi WHERE b.bes_bestelling_status = 5 -- Besteld AND b.bes_bestelling_key = bi.bes_bestelling_key --AND bi.bes_bestelling_item_aantal != COALESCE (bi.bes_bestelling_item_aantalontv, 0) AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key AND boi.bes_bestelopdr_item_aantal = boi.bes_bestelopdr_item_aantalontv ORDER BY 1; v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); BEGIN v_errormsg := 'Fout leveren bestelopdracht'; FOR rec IN cboi LOOP -- Zeg dat alles geleverd is wat besteld is. UPDATE bes_bestelopdr_item SET bes_bestelopdr_item_aantalontv = bes_bestelopdr_item_aantal WHERE bes_bestelopdr_key = rec.bes_bestelopdr_key; bes.updatebestelopdrstatus (rec.bes_bestelopdr_key, NULL); END LOOP; v_errormsg := 'Fout sluiten bestelaanvraag'; FOR rec IN cbi LOOP -- Sluit alle aanvraagregels af die nu geheel geleverd zijn. UPDATE bes_bestelling_item SET bes_bestelling_item_aantalontv = bes_bestelling_item_aantal WHERE bes_bestelling_key = rec.bes_bestelling_key; bes.updatebestellingstatus (rec.bes_bestelling_key, NULL); END LOOP; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.writelog (p_applname, 'E', 'Proces NACHTWERK afgebroken!', v_errormsg); END dian_select_nachtwerk; / /* DELETE FROM bes_srtdeel; DELETE FROM bes_srtgroep; DELETE FROM bes_disc_params; DELETE FROM ins_tab_discipline td WHERE TD.INS_DISCIPLINE_MODULE = 'BES'; */ -- DIAN#55593: RTMs CREATE OR REPLACE VIEW DIAN_V_GRAPH_MLD_NEW (FCLT_XAS_, FCLT_YAS_) AS SELECT SUM (nietnieuw) aantal, COUNT (mld_key) totaal FROM (SELECT mld_melding_key mld_key, DECODE (mld_melding_status, 0, 0, -- Pending 2, 0, -- Ingevoerd 3, 0, -- Ingezien 1) nietnieuw FROM mld_melding WHERE mld_melding_status IN (2, 3, 4, 7, 0) -- 2-Ingevoerd, 3-Ingezien, 4-Geaccepteerd, 7-Uitgegeven, 0-Pending ); CREATE OR REPLACE VIEW DIAN_V_GRAPH_MLD_ACP (FCLT_XAS_, FCLT_YAS_) AS SELECT SUM (nogoptijd) aantal, COUNT (mld_key) totaal FROM (SELECT mld_melding_key mld_key, DECODE (SIGN (mld_melding_acceptdatum_std - TRUNC (COALESCE (fac.gettrackingdate ('MLDACP', mld_melding_key), SYSDATE), 'mi')), -1, 0, 1) nogoptijd FROM mld_melding WHERE mld_melding_status IN (2, 3, 4, 7, 0) -- 2-Ingevoerd, 3-Ingezien, 4-Geaccepteerd, 7-Uitgegeven, 0-Pending ); CREATE OR REPLACE VIEW DIAN_V_GRAPH_MLD_AFM (FCLT_XAS_, FCLT_YAS_) AS SELECT SUM (nogoptijd) aantal, COUNT (mld_key) totaal FROM (SELECT mld_melding_key mld_key, DECODE (SIGN (GREATEST (mld_melding_einddatum, mld_melding_einddatum_std) - TRUNC (SYSDATE, 'mi')), -1, 0, 1) nogoptijd FROM mld_melding WHERE mld_melding_status IN (2, 3, 4, 7, 0) -- 2-Ingevoerd, 3-Ingezien, 4-Geaccepteerd, 7-Uitgegeven, 0-Pending ); CREATE OR REPLACE VIEW DIAN_V_GRAPH_BHNDLR_OPEN ( FCLT_XAS_, FCLT_YAS_, FCLT_YAS2_, VOLGORDE ) AS SELECT COALESCE (prs_perslid_naam_full, ''), SUM (nogoptijd), COUNT ( * ) - SUM (nogoptijd), 0 - COUNT ( * ) FROM (SELECT p.prs_perslid_naam_full, DECODE (SIGN (GREATEST (mld_melding_einddatum, mld_melding_einddatum_std) - TRUNC (SYSDATE, 'mi')), -1, 0, 1) nogoptijd FROM mld_melding m, prs_v_perslid_fullnames_all p WHERE m.mld_melding_status IN (2, 3, 4, 7, 0) -- 2-Ingevoerd, 3-Ingezien, 4-Geaccepteerd, 7-Uitgegeven, 0-Pending AND m.mld_melding_behandelaar_key = p.prs_perslid_key) GROUP BY prs_perslid_naam_full UNION ALL -- Extra kolom zodat voorgaande kolommen helemaal getoond? SELECT ' ', 0, 0, 0 FROM DUAL; -- DIAN#58426: Wekelijkse bundelnotificatie mbt. over 2-3 weken te inspecteren -- objecten naar Servicedesk@dianet.nl (verantwoordelijk voor alle -- inspecties). CREATE OR REPLACE VIEW dian_v_noti_inspectiereminder ( code, sender, receiver, text, key, par1, par2, xkey, xemail, xmobile ) AS SELECT sn.fac_srtnotificatie_code code, NULL sender, NULL receiver, REPLACE ( REPLACE ( sn.fac_srtnotificatie_oms, '##SRTGROEP##', DECODE ( x.min_srtgroep_oms, x.max_srtgroep_oms, x.min_srtgroep_oms || DECODE (x.aantal, 1, '/' || min_controle_oms, ''), x.min_srtgroep_oms || ', ...')), '##AANTAL##', x.aantal) subject, x.dummy_deel_key, -- Dummy key!!! NULL, NULL, NULL, 'Servicedesk@dianet.nl', -- Hard-coded! NULL FROM ( SELECT l.alg_locatie_key, -- Of alg_locatie_email? MIN (din.ins_srtcontrole_omschrijving) min_controle_oms, MIN (sg.ins_srtgroep_omschrijving) min_srtgroep_oms, MAX (sg.ins_srtgroep_omschrijving) max_srtgroep_oms, MIN (d.ins_deel_key) dummy_deel_key, COUNT (DISTINCT d.ins_deel_key) aantal FROM ins_v_aanwezigdeel d, ins_srtdeel sd, ins_srtgroep sg, alg_locatie l, (SELECT ins_deel_key, inspectie_next, ins_srtcontrole_omschrijving FROM (WITH defined_inspect AS (SELECT d.ins_deel_key, d.ins_deel_aanmaak, sc.* FROM ins_deel d, ins_srtdeel sd, ins_srtcontrole sc WHERE d.ins_srtdeel_key = sd.ins_srtdeel_key AND (sc.ins_srtcontrole_niveau ='S' AND sc.ins_srtinstallatie_key = d.ins_srtdeel_key OR sc.ins_srtcontrole_niveau = 'G' AND sc.ins_srtinstallatie_key = sd.ins_srtgroep_key OR sc.ins_srtcontrole_niveau = 'D' AND sc.ins_srtinstallatie_key = d.ins_discipline_key)) SELECT 1 rn, -- NOG GEEN INSPECTIES GEWEEST! di.ins_deel_key, fac.nextcyclusdate ( di.ins_deel_aanmaak, di.ins_srtcontrole_mode, COALESCE (xcp.ins_srtcontroledl_xcp_eenheid, di.ins_srtcontrole_eenheid), COALESCE (xcp.ins_srtcontroledl_xcp_periode, di.ins_srtcontrole_periode), COALESCE (xcp.ins_srtcontroledl_xcp_bits, di.ins_srtcontrole_bits), 1) inspectie_next, di.ins_srtcontrole_omschrijving FROM defined_inspect di, ins_srtcontroledl_xcp xcp WHERE (di.ins_deel_key, di.ins_srtcontrole_key) NOT IN (SELECT ins_deel_key, ins_srtcontrole_key FROM ins_deelsrtcontrole WHERE ins_deelsrtcontrole_status IN (5, 6)) AND di.ins_deel_key = xcp.ins_deel_key(+) AND di.ins_srtcontrole_key = xcp.ins_srtcontrole_key(+) AND (xcp.ins_srtcontroledl_xcp_eind(+) IS NULL OR xcp.ins_srtcontroledl_xcp_eind(+) > TRUNC (SYSDATE)) UNION ALL SELECT RANK () OVER ( PARTITION BY di.ins_deel_key, dsc.ins_srtcontrole_key ORDER BY ins_deelsrtcontrole_datum DESC) rn, di.ins_deel_key, fac.nextcyclusdate ( CASE WHEN di.ins_srtcontrole_mode = 0 THEN dsc.ins_deelsrtcontrole_datum_org ELSE dsc.ins_deelsrtcontrole_datum END, di.ins_srtcontrole_mode, COALESCE (xcp.ins_srtcontroledl_xcp_eenheid, di.ins_srtcontrole_eenheid), COALESCE (xcp.ins_srtcontroledl_xcp_periode, di.ins_srtcontrole_periode), COALESCE (xcp.ins_srtcontroledl_xcp_bits, di.ins_srtcontrole_bits), 1) inspectie_next, di.ins_srtcontrole_omschrijving FROM ins_deelsrtcontrole dsc, defined_inspect di, ins_srtcontroledl_xcp xcp WHERE dsc.ins_deelsrtcontrole_status IN (5, 6) AND di.ins_deel_key = dsc.ins_deel_key AND di.ins_srtcontrole_key = dsc.ins_srtcontrole_key AND di.ins_deel_key = xcp.ins_deel_key(+) AND di.ins_srtcontrole_key = xcp.ins_srtcontrole_key(+) AND (xcp.ins_srtcontroledl_xcp_eind(+) IS NULL OR xcp.ins_srtcontroledl_xcp_eind(+) > TRUNC (SYSDATE)) ORDER BY inspectie_next) WHERE rn = 1) din WHERE d.ins_deel_module = 'INS' AND d.ins_deel_parent_key IS NULL AND (d.ins_deel_vervaldatum IS NULL OR d.ins_deel_vervaldatum > TRUNC (SYSDATE, 'iw') + 21) -- Niet vervallen of pas na volgende inspectie! AND d.ins_srtdeel_key = sd.ins_srtdeel_key AND sd.ins_srtgroep_key = sg.ins_srtgroep_key AND d.ins_alg_locatie_key = l.alg_locatie_key AND d.ins_deel_key = din.ins_deel_key AND din.inspectie_next BETWEEN TRUNC (SYSDATE, 'iw') + 14 AND TRUNC (SYSDATE, 'iw') + 21 GROUP BY l.alg_locatie_key) x, fac_srtnotificatie sn WHERE sn.fac_srtnotificatie_code = 'CUST01'; ------ 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