Files
Customer/DIAN/dian.sql
Maarten van der Heide df418bc9d4 DIAN#77719 EXACT-import/Afpakken BESFOF/BESBOF/BESBOR-rechten op oude catalogi
svn path=/Customer/trunk/; revision=60369
2023-05-10 15:06:43 +00:00

1254 lines
58 KiB
SQL
Raw Blame History

--
-- $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<6C>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) || ' <20> ' || 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<6C>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<6C>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<6C>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<6C>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<6C>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<6C>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<6C>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<6C>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<6C>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<6C>nten te groot!',
'- max. verschilpercentage = [' || TO_CHAR (c_max_delta_percentage) || '%]'
|| CHR (13) || CHR (10)
|| '- #cli<6C>nten/import = [' || TO_CHAR (v_count_prs_import) || ']'
|| CHR (13) || CHR (10)
|| '- #cli<6C>nten/huidig = [' || TO_CHAR (v_count_prs_actual) || ']');
RETURN;
END IF;
-- Generieke update (op loginnaam).
v_errormsg := 'Fout toevoegen cli<6C>nten';
prs.update_perslid (p_import_key, 'LOGIN', NULL);
-- Nieuwe/bestaande cli<6C>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<6C>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<6C>nten niet in import!
v_errormsg := 'Fout verwijderen cli<6C>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<6C>nt) en prs_bedrijf_key (Exact).
-- LET OP-Catalogus-naamconventie: <perslid_naam>/<perslid_oslogin>
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<6C>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<6C>nt een 'Cli<6C>nt'-groep toevoegen (zover nog niet toegevoegd)!
-- LET OP-Autorisatiegroep-naamconventie: <perslid_oslogin>/<perslid_naam>
v_errormsg := 'Fout toevoegen Cli<6C>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<6C>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<6C>nt'-groep BESUSE-rechten toekennen op "eigen" catalogus en
-- 'Cli<6C>ntBeheer'-groep BESFOF/BESBOF/BESBOR-rechten toekennen op catalogi
-- van actieve cli<6C>nten.
v_errormsg := 'Fout inkleuren Cli<6C>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<6C>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<6C>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<6C>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<6C>ntBeheer
AND fac_functie_key = f.fac_functie_key
AND ins_discipline_key = td.ins_discipline_key);
COMMIT;
-- DIAN#77719: 'Cli<6C>ntBeheer'-groep BESFOF/BESBOF/BESBOR-rechten afpakken
-- op catalogi van verwijderde cli<6C>nten waaruit >6 maanden niet
-- meer is besteld!
-- TODO:Betreffende catalogi helemaal verwijderen (ipv. rechten)?
v_errormsg := 'Fout schonen Cli<6C>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<6C>nten de *eigen* 'Cli<6C>nt'-groep toekennen (zover nog
-- niet toegekend)!
v_errormsg := 'Fout toekennen Cli<6C>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<6C>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, '<Onbekend>'),
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