821 lines
37 KiB
SQL
821 lines
37 KiB
SQL
--
|
||
-- $Id$
|
||
--
|
||
-- Script containing customer specific db-configuration for DSMA.
|
||
DEFINE thisfile = 'DSMA.SQL'
|
||
DEFINE dbuser = '^DSMA'
|
||
|
||
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 dsma_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 dsma_import_prs (p_import_key IN NUMBER)
|
||
AS
|
||
v_errormsg VARCHAR2 (1000) := '-';
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
BEGIN
|
||
-- Afdelingscode-kolom kopieren naar extra kolom 12 (= kenmerk5)!
|
||
UPDATE fac_imp_file i
|
||
SET i.fac_imp_file_line =
|
||
i.fac_imp_file_line
|
||
|| ';'
|
||
|| SUBSTR (fac_imp_file_line, INSTR (fac_imp_file_line, ';', 1, 2)
|
||
+ 1, INSTR (fac_imp_file_line, ';', 1, 3)
|
||
- INSTR (fac_imp_file_line, ';', 1, 2)
|
||
- 1)
|
||
WHERE fac_import_key = p_import_key AND fac_imp_file_index > 1;
|
||
|
||
-- Afdelingscode-kolom=3 resetten (op 'XXX' want verplicht)!
|
||
UPDATE fac_imp_file i
|
||
SET i.fac_imp_file_line =
|
||
SUBSTR (fac_imp_file_line, 1, INSTR (fac_imp_file_line, ';', 1, 2))
|
||
|| '"XXX"'
|
||
|| SUBSTR (fac_imp_file_line, INSTR (fac_imp_file_line, ';', 1, 3))
|
||
WHERE fac_import_key = p_import_key AND fac_imp_file_index > 1;
|
||
COMMIT;
|
||
|
||
-- Functie-kolom kopieren naar extra kolom 13 (= kenmerk6)!
|
||
UPDATE fac_imp_file i
|
||
SET i.fac_imp_file_line =
|
||
i.fac_imp_file_line
|
||
|| ';'
|
||
|| SUBSTR (fac_imp_file_line, INSTR (fac_imp_file_line, ';', 1, 3)
|
||
+ 1, INSTR (fac_imp_file_line, ';', 1, 4)
|
||
- INSTR (fac_imp_file_line, ';', 1, 3)
|
||
- 1)
|
||
WHERE fac_import_key = p_import_key AND fac_imp_file_index > 1;
|
||
|
||
-- Functie-kolom resetten=4 (op 'XXX' want verplicht)!
|
||
UPDATE fac_imp_file i
|
||
SET i.fac_imp_file_line =
|
||
SUBSTR (fac_imp_file_line, 1, INSTR (fac_imp_file_line, ';', 1, 3))
|
||
|| '"XXX"'
|
||
|| SUBSTR (fac_imp_file_line, INSTR (fac_imp_file_line, ';', 1, 4))
|
||
WHERE fac_import_key = p_import_key AND fac_imp_file_index > 1;
|
||
COMMIT;
|
||
|
||
-- Generieke import.
|
||
-- De sequence array staat beschreven in PRS_PAC.SRC bij de import_perslid-PROCEDURE.
|
||
-- Met Stamplaats wordt nog niets gedaan!
|
||
--'%Achternaam;Voornaam;Afdelingscode;Functie;Email;Telefoonnr;Mobiel;Stamplaats;Indienst;Uitdienst;Leidinggevende%');
|
||
prs.import_perslid (
|
||
p_import_key,
|
||
'0;0;0;0;0;0;3;1;0;2;'
|
||
|| '0;0;0;0;0;6;7;5;0;0;'
|
||
|| '4;0;0;0;0;0;8;9;10;11;'
|
||
|| '12;13;0;0;0;0;0;0;0;0;'
|
||
|| '0;0;0;0;0;0',
|
||
'%Achternaam;Voornaam;Afdelingscode;Functie;Email;Telefoonnr;Mobiel;Stamplaats;Indienst;Uitdienst;Leidinggevende%');
|
||
|
||
-- Klantspecifieke aanpassingen.
|
||
-- Afdeling-kolom altijd op 'DSM' (en kenmerk5 negeren)!
|
||
UPDATE fac_imp_perslid i
|
||
SET i.prs_afdeling_naam = 'DSM';
|
||
COMMIT;
|
||
|
||
-- Functie-kolom volgens kenmerk6 of anders op Onbekend!
|
||
UPDATE fac_imp_perslid i
|
||
SET i.prs_srtperslid_omschrijving = COALESCE (SUBSTR (i.prs_kenmerk6, 1, 60), 'Onbekend');
|
||
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 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;
|
||
|
||
-- Als geen Telefoonnr aangeleverd, dan handmatig toegekende niet wissen.
|
||
UPDATE fac_imp_perslid i
|
||
SET i.prs_perslid_telefoonnr =
|
||
(SELECT MAX (prs_perslid_telefoonnr)
|
||
FROM prs_v_aanwezigperslid
|
||
WHERE prs_perslid_nr = i.prs_perslid_nr)
|
||
WHERE i.prs_perslid_telefoonnr IS NULL -- Aangeleverde Telefoonnr wint!
|
||
AND EXISTS
|
||
(SELECT 1
|
||
FROM prs_v_aanwezigperslid
|
||
WHERE prs_perslid_telefoonnr IS NOT NULL
|
||
AND prs_perslid_nr = i.prs_perslid_nr);
|
||
COMMIT;
|
||
|
||
-- Als geen Mobiel aangeleverd, dan handmatig toegekende niet wissen.
|
||
UPDATE fac_imp_perslid i
|
||
SET i.prs_perslid_mobiel =
|
||
(SELECT MAX (prs_perslid_mobiel)
|
||
FROM prs_v_aanwezigperslid
|
||
WHERE prs_perslid_nr = i.prs_perslid_nr)
|
||
WHERE i.prs_perslid_mobiel IS NULL -- Aangeleverde Mobiel wint!
|
||
AND EXISTS
|
||
(SELECT 1
|
||
FROM prs_v_aanwezigperslid
|
||
WHERE prs_perslid_mobiel IS NOT NULL
|
||
AND prs_perslid_nr = i.prs_perslid_nr);
|
||
COMMIT;
|
||
|
||
-- Klantspecifieke aanpassingen.
|
||
-- Ruimte bepalen via Kenmerk1-kolom -> Eigen tabel (key = 161) -> Gebouw
|
||
-- en daaronder Ruimte '_' 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 Ruimte '_' op meegegeven
|
||
-- locatie.
|
||
-- Eventuele WPs op andere locaties dan volgens import blijven ongewijzigd!
|
||
UPDATE fac_imp_perslid i
|
||
SET i.alg_locatie_code =
|
||
(SELECT il.alg_locatie_code
|
||
FROM fac_v_aanwezigusrdata ud, -- Mapping Kenmerk1-code -> Gebouwcode
|
||
alg_v_aanweziggebouw ig,
|
||
alg_locatie il
|
||
WHERE ud.fac_usrtab_key = 161
|
||
--AND UPPER (ud.fac_usrdata_code) = UPPER (i.prs_kenmerk1)
|
||
AND INSTR (UPPER (i.prs_kenmerk1), UPPER (ud.fac_usrdata_code)) = 1
|
||
AND UPPER (ud.fac_usrdata_omschr) = UPPER (ig.alg_gebouw_code)
|
||
AND ig.alg_locatie_key = il.alg_locatie_key
|
||
AND NOT EXISTS
|
||
(SELECT 1
|
||
FROM alg_v_aanweziggebouw
|
||
WHERE UPPER (alg_gebouw_code) = UPPER (ud.fac_usrdata_omschr)
|
||
AND alg_locatie_key < il.alg_locatie_key)),
|
||
i.alg_gebouw_code =
|
||
(SELECT ig.alg_gebouw_code
|
||
FROM fac_v_aanwezigusrdata ud, -- Mapping Kenmerk1-code -> Gebouwcode
|
||
alg_v_aanweziggebouw ig,
|
||
alg_locatie il
|
||
WHERE ud.fac_usrtab_key = 161
|
||
--AND UPPER (ud.fac_usrdata_code) = UPPER (i.prs_kenmerk1)
|
||
AND INSTR (UPPER (i.prs_kenmerk1), UPPER (ud.fac_usrdata_code)) = 1
|
||
AND UPPER (ud.fac_usrdata_omschr) = UPPER (ig.alg_gebouw_code)
|
||
AND ig.alg_locatie_key = il.alg_locatie_key
|
||
AND NOT EXISTS
|
||
(SELECT 1
|
||
FROM alg_v_aanweziggebouw
|
||
WHERE UPPER (alg_gebouw_code) = UPPER (ud.fac_usrdata_omschr)
|
||
AND alg_locatie_key < il.alg_locatie_key)),
|
||
i.alg_verdieping_volgnr =
|
||
(SELECT iv.alg_verdieping_volgnr
|
||
FROM fac_v_aanwezigusrdata ud, -- Mapping Kenmerk1-code -> Gebouwcode
|
||
alg_v_aanweziggebouw ig,
|
||
alg_locatie il,
|
||
alg_verdieping iv,
|
||
alg_ruimte ir
|
||
WHERE ud.fac_usrtab_key = 161
|
||
--AND UPPER (ud.fac_usrdata_code) = UPPER (i.prs_kenmerk1)
|
||
AND INSTR (UPPER (i.prs_kenmerk1), UPPER (ud.fac_usrdata_code)) = 1
|
||
AND UPPER (ud.fac_usrdata_omschr) = UPPER (ig.alg_gebouw_code)
|
||
AND ig.alg_locatie_key = il.alg_locatie_key
|
||
AND NOT EXISTS
|
||
(SELECT 1
|
||
FROM alg_v_aanweziggebouw
|
||
WHERE UPPER (alg_gebouw_code) = UPPER (ud.fac_usrdata_omschr)
|
||
AND alg_locatie_key < il.alg_locatie_key)
|
||
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 '_'
|
||
FROM fac_v_aanwezigusrdata ud, -- Mapping Kenmerk1-code -> Gebouwcode
|
||
alg_v_aanweziggebouw ig,
|
||
alg_locatie il
|
||
WHERE ud.fac_usrtab_key = 161
|
||
--AND UPPER (ud.fac_usrdata_code) = UPPER (i.prs_kenmerk1)
|
||
AND INSTR (UPPER (i.prs_kenmerk1), UPPER (ud.fac_usrdata_code)) = 1
|
||
AND UPPER (ud.fac_usrdata_omschr) = UPPER (ig.alg_gebouw_code)
|
||
AND ig.alg_locatie_key = il.alg_locatie_key
|
||
AND NOT EXISTS
|
||
(SELECT 1
|
||
FROM alg_v_aanweziggebouw
|
||
WHERE UPPER (alg_gebouw_code) = UPPER (ud.fac_usrdata_omschr)
|
||
AND alg_locatie_key < il.alg_locatie_key))
|
||
WHERE NOT EXISTS -- Nog geen werkplek op Locatie!
|
||
(SELECT 1
|
||
FROM fac_v_aanwezigusrdata ud, -- Mapping Kenmerk1-code -> Gebouwcode
|
||
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 = 161
|
||
--AND UPPER (ud.fac_usrdata_code) = UPPER (i.prs_kenmerk1)
|
||
AND INSTR (UPPER (i.prs_kenmerk1), UPPER (ud.fac_usrdata_code)) = 1
|
||
AND UPPER (ud.fac_usrdata_omschr) = UPPER (ig.alg_gebouw_code)
|
||
AND ig.alg_locatie_key = il.alg_locatie_key
|
||
AND NOT EXISTS
|
||
(SELECT 1
|
||
FROM alg_v_aanweziggebouw
|
||
WHERE UPPER (alg_gebouw_code) = UPPER (ud.fac_usrdata_omschr)
|
||
AND alg_locatie_key < il.alg_locatie_key)
|
||
AND p.prs_perslid_email = i.prs_perslid_email
|
||
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;
|
||
|
||
-- Resulteert in nette foutmelding als ruimte niet kan worden bepaald.
|
||
UPDATE fac_imp_perslid
|
||
SET alg_verdieping_volgnr = 0
|
||
WHERE alg_gebouw_code IS NOT NULL
|
||
AND alg_verdieping_volgnr IS NULL;
|
||
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 dsma_import_prs;
|
||
/
|
||
|
||
CREATE OR REPLACE PROCEDURE dsma_update_prs (p_import_key IN NUMBER)
|
||
IS
|
||
-- Toevoegen Stamplaats (=kenmerk1), Indienst-datum (=kenmerk2), Uitdienst-
|
||
-- datum (=kenmerk3) en Leidinggevende-veld (=kenmerk4).
|
||
CURSOR c_prs
|
||
IS
|
||
SELECT x.prs_perslid_key,
|
||
x.prs_perslid_email,
|
||
x.prs_kenmerk1,
|
||
x.prs_kenmerk2,
|
||
x.prs_kenmerk3,
|
||
x.prs_kenmerk4
|
||
FROM fac_imp_perslid x
|
||
WHERE (x.prs_kenmerk2 IS NOT NULL OR x.prs_kenmerk3 IS NOT NULL OR x.prs_kenmerk4 IS NOT NULL)
|
||
AND EXISTS
|
||
(SELECT 1
|
||
FROM prs_v_aanwezigperslid
|
||
WHERE prs_perslid_key > 10 -- Voor de zekerheid!
|
||
AND prs_perslid_apikey IS NULL
|
||
AND prs_perslid_oslogin2 IS NULL -- Persoon in import-scope!
|
||
--AND LOWER (prs_perslid_email) = LOWER (x.prs_perslid_email)
|
||
AND prs_perslid_key = x.prs_perslid_key)
|
||
ORDER BY 1;
|
||
|
||
-- Verwijderen personen *binnen DSM* die niet meer in importbestand voorkomen.
|
||
CURSOR c_del
|
||
IS
|
||
SELECT p.prs_perslid_key
|
||
FROM prs_v_aanwezigperslid p
|
||
WHERE p.prs_perslid_key > 10 -- Voor de zekerheid!
|
||
AND p.prs_perslid_apikey IS NULL
|
||
AND p.prs_perslid_oslogin2 IS NULL -- Persoon in import-scope!
|
||
AND NOT EXISTS
|
||
(SELECT 1
|
||
FROM fac_imp_perslid
|
||
WHERE LOWER (prs_perslid_email) = LOWER (p.prs_perslid_email))
|
||
ORDER BY 1;
|
||
|
||
v_errormsg VARCHAR2 (1000) := '';
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
v_count NUMBER (10);
|
||
BEGIN
|
||
-- Generic update
|
||
SELECT COUNT(*) INTO v_count FROM fac_imp_perslid;
|
||
|
||
IF v_count < 250
|
||
THEN
|
||
fac.imp_writelog (p_import_key, 'E',
|
||
'Het aantal te importeren personen is te klein (' || TO_CHAR (v_count) || ')',
|
||
'Zie specificatie');
|
||
RETURN;
|
||
END IF;
|
||
|
||
-- Generieke update (op e-mail adres).
|
||
prs.update_perslid (p_import_key, 'EMAIL', 'L');
|
||
|
||
-- Bijwerken extra persoonsvelden (niet ondersteund door standaard import).
|
||
v_count := 0;
|
||
FOR rec IN c_prs
|
||
LOOP
|
||
BEGIN
|
||
v_errormsg := '[' || TO_CHAR (rec.prs_perslid_key) || '|' || rec.prs_perslid_email || '] Fout bijwerken In/Uitdienst-datumveld';
|
||
UPDATE prs_perslid
|
||
SET prs_perslid_opmerking = rec.prs_kenmerk1,
|
||
prs_perslid_ingangsdatum = fac.safe_to_date (rec.prs_kenmerk2, 'dd-mm-yyyy'),
|
||
prs_perslid_einddatum = fac.safe_to_date (rec.prs_kenmerk3, 'dd-mm-yyyy')
|
||
WHERE prs_perslid_key = rec.prs_perslid_key;
|
||
|
||
v_errormsg := '[' || TO_CHAR (rec.prs_perslid_key) || '|' || rec.prs_perslid_email || '] Fout bijwerken Leidinggevende-kenmerk';
|
||
prs.upsertkenmerk (1000, rec.prs_perslid_key, rec.prs_kenmerk4); -- Leidinggevende
|
||
|
||
v_count := v_count + 1;
|
||
END;
|
||
END LOOP;
|
||
--fac.imp_writelog (p_import_key, 'S', 'Personen/#bijgewerkt: ' || TO_CHAR (v_count), '');
|
||
COMMIT;
|
||
|
||
-- Verwijderen personen *binnen DSM* die niet meer in importbestand voorkomen.
|
||
v_errormsg := 'Fout verwijderen personen';
|
||
FOR rec IN c_del
|
||
LOOP
|
||
BEGIN
|
||
prs.delete_perslid (p_import_key, rec.prs_perslid_key);
|
||
END;
|
||
END LOOP;
|
||
|
||
-- Verwijder ongebruikte functies; deze import bepaalt de functies!
|
||
v_errormsg := 'Fout verwijderen functies';
|
||
DELETE FROM prs_srtperslid sp
|
||
WHERE NOT EXISTS
|
||
(SELECT 1
|
||
FROM prs_perslid
|
||
WHERE prs_srtperslid_key = sp.prs_srtperslid_key);
|
||
COMMIT;
|
||
|
||
-- Toekennen _Default aan alle personen in import-scope!
|
||
v_errormsg := 'Fout toekennen _Default';
|
||
INSERT INTO fac_gebruikersgroep (prs_perslid_key, fac_groep_key)
|
||
SELECT prs_perslid_key, 1
|
||
FROM prs_v_aanwezigperslid p
|
||
WHERE p.prs_perslid_key > 10 -- Voor de zekerheid!
|
||
AND p.prs_perslid_apikey IS NULL
|
||
AND p.prs_perslid_oslogin2 IS NULL -- Persoon in import-scope!
|
||
AND NOT EXISTS -- Nog niet toegekend aan _Default!
|
||
(SELECT 1
|
||
FROM fac_gebruikersgroep
|
||
WHERE fac_groep_key = 1 -- _Default
|
||
AND prs_perslid_key = p.prs_perslid_key);
|
||
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_errormsg, 'Importproces PRS afgebroken!');
|
||
END dsma_update_prs;
|
||
/
|
||
|
||
-- DSMA#74832: Export naar Base27 die telkens voorafgaand aan putOrders het
|
||
-- volgende doet:
|
||
-- 1. Nieuwe notitie(s) in opdracht of bovenliggende melding
|
||
-- (anders dan door Base27 via API) uitgeven via orderqueue.
|
||
-- 2. Laatste sync-datum registreren, zodat eerdere wijzigingen
|
||
-- niet nogmaals worden doorgezet.
|
||
CREATE OR REPLACE PROCEDURE DSMA_SELECT_BASE27 (p_applname IN VARCHAR2,
|
||
p_applrun IN VARCHAR2)
|
||
AS
|
||
-- Nieuwe notitie(s) sinds laatste sync!
|
||
-- TODO:Aanname is nooit tegelijk Notitie(s) op zowel melding als opdracht!
|
||
CURSOR c_dsm2base
|
||
IS
|
||
SELECT '[' || TO_CHAR (o.mld_melding_key) || '/' || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr) || '] '
|
||
aanduiding,
|
||
n.reftype,
|
||
n.refkey,
|
||
COALESCE (o.mld_opdr_externsyncdate, TRUNC (SYSDATE)) syncdate_old,
|
||
MAX (n.note_datum) syncdate_new
|
||
FROM mld_opdr o,
|
||
(SELECT 'ORD' reftype, mld_opdr_key refkey, GREATEST (mld_opdr_note_aanmaak, mld_opdr_note_wijzigdatum) note_datum
|
||
FROM mld_opdr_note
|
||
WHERE prs_perslid_key != 682 -- API-user tbv. Base27
|
||
UNION ALL
|
||
SELECT 'MLD' reftype, mld_melding_key refkey, GREATEST (mld_melding_note_aanmaak, mld_melding_note_wijzigdatum) note_datum
|
||
FROM mld_melding_note
|
||
WHERE prs_perslid_key != 682) n -- API-user tbv. Base27
|
||
WHERE o.mld_uitvoerende_keys = 681 -- Base27
|
||
AND o.mld_typeopdr_key = 61 -- Base27
|
||
AND o.mld_statusopdr_key IN (5, 8) -- Toegekend/Geaccepteerd
|
||
AND ((n.reftype = 'ORD' AND o.mld_opdr_key = n.refkey)
|
||
OR (n.reftype = 'MLD' AND o.mld_melding_key = n.refkey))
|
||
AND n.note_datum > COALESCE (o.mld_opdr_externsyncdate, TRUNC (SYSDATE))
|
||
GROUP BY '[' || TO_CHAR (o.mld_melding_key) || '/' || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr) || '] ',
|
||
n.reftype,
|
||
n.refkey,
|
||
COALESCE (o.mld_opdr_externsyncdate, TRUNC (SYSDATE));
|
||
/*
|
||
-- Nieuwe notitie(s) sinds laatste sync!
|
||
-- Deze sync blijkt Facilitor automatisch te doen (of doet Base27 het), mij
|
||
-- niet geheel duidelijk???
|
||
CURSOR c_base2mld
|
||
IS
|
||
SELECT '[' || TO_CHAR (o.mld_melding_key) || '/' || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr) || '] '
|
||
aanduiding,
|
||
o.mld_melding_key,
|
||
n.mld_opdr_note_omschrijving,
|
||
n.mld_opdr_note_key
|
||
FROM mld_opdr o,
|
||
mld_opdr_note n
|
||
WHERE o.mld_uitvoerende_keys = 681 -- Base27
|
||
AND o.mld_typeopdr_key = 61 -- Base27
|
||
AND o.mld_statusopdr_key IN (5, 8) -- Toegekend/Geaccepteerd
|
||
AND o.mld_opdr_key = n.mld_opdr_key
|
||
AND n.mld_opdr_note_aanmaak > fac.safe_to_date ('01-02-2023', 'dd-mm-yyyy') -- Sync-en vanaf 01-02-2023!
|
||
AND n.mld_opdr_note_aanmaak = mld_opdr_note_wijzigdatum;
|
||
*/
|
||
v_errormsg VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
v_count NUMBER;
|
||
BEGIN
|
||
v_count := 0;
|
||
|
||
-- Sync-en notities door DSM in opdracht of melding naar Base27!
|
||
FOR rec IN c_dsm2base
|
||
LOOP
|
||
BEGIN
|
||
v_errormsg := 'Fout dsm2base-sync';
|
||
|
||
-- TRUC: Zet wijzigdatum van te notificeren notities op syncdate_new!
|
||
-- Bij 1 notitie zal gelden syncdate_new = wijzigdatum (en wijzigt er
|
||
-- niets), maar truc gaat pas echt werken als er >1 notities zijn!
|
||
IF (rec.reftype = 'ORD')
|
||
THEN
|
||
UPDATE mld_opdr_note
|
||
SET mld_opdr_note_wijzigdatum = rec.syncdate_new
|
||
WHERE prs_perslid_key != 682 -- API-user tbv. Base27
|
||
AND mld_opdr_key = rec.refkey
|
||
AND GREATEST (mld_opdr_note_aanmaak, mld_opdr_note_wijzigdatum) > rec.syncdate_old;
|
||
|
||
UPDATE mld_opdr
|
||
SET mld_opdr_teverzenden = 2,
|
||
mld_opdr_verzonden = NULL,
|
||
mld_opdr_externsyncdate = rec.syncdate_new
|
||
WHERE mld_opdr_key = rec.refkey;
|
||
|
||
fac.trackaction ('ORDUPD', rec.refkey, NULL, NULL, 'Notities doorgezet naar Base27');
|
||
ELSE
|
||
UPDATE mld_melding_note
|
||
SET mld_melding_note_wijzigdatum = rec.syncdate_new
|
||
WHERE prs_perslid_key != 682 -- API-user tbv. Base27
|
||
AND mld_melding_key = rec.refkey
|
||
AND GREATEST (mld_melding_note_aanmaak, mld_melding_note_wijzigdatum) > rec.syncdate_old;
|
||
|
||
-- TODO:Aanname is <20><>n Base27-opdracht per incident(melding)!
|
||
UPDATE mld_opdr
|
||
SET mld_opdr_teverzenden = 2,
|
||
mld_opdr_verzonden = NULL,
|
||
mld_opdr_externsyncdate = rec.syncdate_new
|
||
WHERE mld_melding_key = rec.refkey;
|
||
|
||
fac.trackaction ('MLDUPD', rec.refkey, NULL, NULL, 'Notities doorgezet naar Base27');
|
||
END IF;
|
||
|
||
v_count := v_count + 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.writelog (p_applname, 'W', rec.aanduiding || v_errormsg, '');
|
||
COMMIT;
|
||
END;
|
||
END LOOP;
|
||
|
||
fac.writelog (p_applname, 'S', 'DSM-notities to Base27/#sync: ' || TO_CHAR (v_count), '');
|
||
/*
|
||
v_count := 0;
|
||
|
||
-- Sync-en notities door Base27 in opdracht naar parent-melding!
|
||
FOR rec IN c_base2mld
|
||
LOOP
|
||
BEGIN
|
||
v_errormsg := 'Fout base2mld-sync';
|
||
|
||
INSERT INTO mld_melding_note (mld_melding_key,
|
||
prs_perslid_key,
|
||
mld_melding_note_omschrijving,
|
||
mld_melding_note_flag)
|
||
VALUES (rec.mld_melding_key,
|
||
682, -- API-user tbv. Base27
|
||
rec.mld_opdr_note_omschrijving,
|
||
0);
|
||
|
||
UPDATE mld_opdr_note
|
||
SET mld_opdr_note_wijzigdatum = SYSDATE -- Obscure truc!
|
||
WHERE mld_opdr_note_key = rec.mld_opdr_note_key;
|
||
|
||
fac.trackaction ('MLDUPD', rec.refkey, NULL, NULL, 'Notities geplaatst door Base27');
|
||
|
||
v_count := v_count + 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.writelog (p_applname, 'W', rec.aanduiding || v_errormsg, '');
|
||
COMMIT;
|
||
END;
|
||
END LOOP;
|
||
|
||
fac.writelog (p_applname, 'S', 'Base27-notities to MLD/#sync: ' || TO_CHAR (v_count), '');
|
||
*/
|
||
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.writelog (p_applname, 'E', 'Base27-export afgebroken!', v_errormsg);
|
||
END DSMA_SELECT_BASE27;
|
||
/
|
||
|
||
CREATE OR REPLACE PACKAGE DSMA
|
||
AS
|
||
PROCEDURE afmelden_mld;
|
||
END;
|
||
/
|
||
|
||
CREATE OR REPLACE PACKAGE BODY DSMA
|
||
AS
|
||
PROCEDURE afmelden_mld
|
||
AS
|
||
c_applname VARCHAR2 (50) := 'AFMELDEN_MLD';
|
||
v_errormsg VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
v_aanduiding VARCHAR2 (200);
|
||
v_count_tot NUMBER (10);
|
||
|
||
CURSOR c_mld_base27
|
||
IS
|
||
SELECT m.mld_melding_key, m.mld_melding_onderwerp, m.mld_melding_status
|
||
FROM mld_melding m, mld_stdmelding sm
|
||
WHERE m.mld_stdmelding_key = sm.mld_stdmelding_key
|
||
AND sm.mld_ins_discipline_key = 50 -- Privacy + Security
|
||
AND m.mld_melding_status IN (4, 99) -- In behandeling/Niet opgelost
|
||
AND NOT EXISTS -- Geen lopende opdrachten (zou zo moeten zijn)
|
||
(SELECT 1
|
||
FROM mld_opdr
|
||
WHERE mld_uitvoerende_keys = 101 -- Base27
|
||
AND mld_typeopdr_key = 61 -- Base27
|
||
AND mld_statusopdr_key IN (3, 4, 5, 8, 10) -- Ter fiattering/Gefiatteerd/Toegekend/Geaccepteerd/Ter goedkeuring
|
||
AND mld_melding_key = m.mld_melding_key)
|
||
ORDER BY 1;
|
||
|
||
-- Afmelden Korton-meldingen (met onderliggende opdrachten naar Korton)!
|
||
-- 23=Aanvraag/ICT/Toegang netwerk en mail
|
||
-- 24=Aanvraag/ICT/Aanvraag laptop
|
||
-- 25=Aanvraag/ICT/Aanvraag vaste computer
|
||
-- 26=Aanvraag/ICT/Aanvraag beeldscherm
|
||
-- 40=ICT incident/ICT/Printer defect
|
||
-- 41=ICT incident/ICT/Dock defect
|
||
-- 42=ICT incident/ICT/Beeldscherm
|
||
-- 43=Aanvraag/ICT/Aanvraag dock
|
||
-- 44=ICT incident/ICT/Laptop defect
|
||
-- 45=ICT incident/ICT/Vaste computer defect
|
||
-- 48=Overige meldingen/ICT/Overig ICT
|
||
CURSOR c_ord_korton
|
||
IS
|
||
SELECT o.mld_opdr_key, o.mld_melding_key, o.mld_opdr_bedrijfopdr_volgnr
|
||
FROM mld_opdr o, mld_melding m, mld_stdmelding sm
|
||
WHERE o.mld_uitvoerende_keys = 841 -- Korton
|
||
AND o.mld_typeopdr_key = 5 -- Uitvoeringsopdracht
|
||
AND o.mld_statusopdr_key IN (5, 8) -- Toegekend/Geaccepteerd
|
||
AND o.mld_melding_key = m.mld_melding_key
|
||
AND m.mld_stdmelding_key = sm.mld_stdmelding_key
|
||
AND sm.mld_stdmelding_key IN (23, 24, 25, 26, 40, 41, 42, 43, 44, 45, 48) -- Afgesproken ICT-meldingen
|
||
ORDER BY 1;
|
||
|
||
CURSOR c_mld_korton
|
||
IS
|
||
SELECT m.mld_melding_key, m.mld_melding_onderwerp, m.mld_melding_status
|
||
FROM mld_melding m, mld_stdmelding sm
|
||
WHERE m.mld_stdmelding_key = sm.mld_stdmelding_key
|
||
AND sm.mld_stdmelding_key IN (23, 24, 25, 26, 40, 41, 42, 43, 44, 45, 48) -- Afgesproken ICT-meldingen
|
||
AND m.mld_melding_status IN (4, 7, 99) -- In behandeling/Uitgegeven/Niet opgelost
|
||
AND EXISTS
|
||
(SELECT 1
|
||
FROM mld_opdr
|
||
WHERE mld_uitvoerende_keys = 841 -- Korton
|
||
AND mld_typeopdr_key = 5 -- Uitvoeringsopdracht
|
||
AND mld_melding_key = m.mld_melding_key)
|
||
AND NOT EXISTS -- Geen lopende opdrachten (zou zo moeten zijn)
|
||
(SELECT 1
|
||
FROM mld_opdr
|
||
WHERE mld_uitvoerende_keys = 841 -- Korton
|
||
AND mld_typeopdr_key = 5 -- Uitvoeringsopdracht
|
||
AND mld_statusopdr_key IN (3, 4, 5, 8, 10) -- Ter fiattering/Gefiatteerd/Toegekend/Geaccepteerd/Ter goedkeuring
|
||
AND mld_melding_key = m.mld_melding_key)
|
||
ORDER BY 1;
|
||
BEGIN
|
||
v_count_tot := 0;
|
||
-- Alle lopende Base27-meldingen sluiten als onderliggende Base27-opdrachten zijn gesloten.
|
||
v_count_tot := 0;
|
||
FOR rec IN c_mld_base27
|
||
LOOP
|
||
v_aanduiding := '[' || TO_CHAR (rec.mld_melding_key) || '|' || rec.mld_melding_onderwerp || '] ';
|
||
v_count_tot := v_count_tot + 1;
|
||
MLD.setmeldingstatus (rec.mld_melding_key, 5, NULL); -- Afgemeld (incl. tracking)
|
||
IF MOD (v_count_tot, 500) = 0 THEN COMMIT; END IF;
|
||
END LOOP;
|
||
fac.writelog (c_applname, 'S', '#Base27-meldingen gesloten: ' || TO_CHAR (v_count_tot), '');
|
||
COMMIT;
|
||
|
||
--Alle lopende Korton-opdrachten automatisch sluiten.
|
||
v_count_tot := 0;
|
||
FOR rec IN c_ord_korton
|
||
LOOP
|
||
v_aanduiding := '[' || TO_CHAR (rec.mld_opdr_key) || '|' || TO_CHAR (rec.mld_melding_key) || '/' || TO_CHAR (rec.mld_opdr_bedrijfopdr_volgnr) || '] ';
|
||
v_count_tot := v_count_tot + 1;
|
||
MLD.setopdrachtstatus (rec.mld_opdr_key, 6, NULL); -- Afgemeld (incl. tracking)
|
||
IF MOD (v_count_tot, 500) = 0 THEN COMMIT; END IF;
|
||
END LOOP;
|
||
fac.writelog (c_applname, 'S', '#Korton-opdrachten gesloten: ' || TO_CHAR (v_count_tot), '');
|
||
COMMIT;
|
||
|
||
-- Alle lopende Korton-meldingen sluiten als onderliggende Korton-opdrachten zijn gesloten.
|
||
v_count_tot := 0;
|
||
FOR rec IN c_mld_korton
|
||
LOOP
|
||
v_aanduiding := '[' || TO_CHAR (rec.mld_melding_key) || '|' || rec.mld_melding_onderwerp || '] ';
|
||
v_count_tot := v_count_tot + 1;
|
||
MLD.setmeldingstatus (rec.mld_melding_key, 5, NULL); -- Afgemeld (incl. tracking)
|
||
IF MOD (v_count_tot, 500) = 0 THEN COMMIT; END IF;
|
||
END LOOP;
|
||
fac.writelog (c_applname, 'S', '#Korton-meldingen gesloten: ' || TO_CHAR (v_count_tot), '');
|
||
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.writelog (c_applname, 'E', v_aanduiding || v_errormsg, 'Taak afgebroken!');
|
||
END;
|
||
END;
|
||
/
|
||
|
||
CREATE OR REPLACE PROCEDURE DSMA_DAILY
|
||
AS
|
||
v_errormsg VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
BEGIN
|
||
dsma.afmelden_mld;
|
||
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.writelog ('DAILY', 'E', 'Proces afgebroken!', v_errormsg);
|
||
END DSMA_DAILY;
|
||
/
|
||
|
||
CREATE OR REPLACE VIEW DSMA_V_RAP_BEZITTINGEN
|
||
(
|
||
ins_deel_key,
|
||
extra_key, -- Moet zo heten (in de veronderstelling dat DSM dit tzt. wil notificeren)!
|
||
gebruiker,
|
||
identificatie,
|
||
objectsoort,
|
||
beschrijving,
|
||
registratiedatum,
|
||
verwijderdatum, -- Geen toegevoegde waarde voor DSMA (gekopieerd van SVRZ)
|
||
tonen, -- Geen toegevoegde waarde voor DSMA (gekopieerd van SVRZ)
|
||
uitgiftedatum,
|
||
innamedatum,
|
||
redeninactief
|
||
)
|
||
AS
|
||
SELECT d.ins_deel_key,
|
||
d.ins_alg_ruimte_key, -- Gebruiker
|
||
pf.prs_perslid_naam_friendly,
|
||
d.ins_deel_omschrijving,
|
||
sd.ins_srtdeel_omschrijving,
|
||
--x.kenmerken,
|
||
DECODE (d.ins_srtdeel_key,
|
||
4, d.ins_deel_opmerking, -- SLEUTEL=Sleutel, dan nooit kenmerken!
|
||
8, d.ins_deel_opmerking, -- BTAG=Blauwe tag, dan nooit kenmerken!
|
||
261, d.ins_deel_opmerking, -- ALARM=Persoonlijke alarmcode, dan nooit kenmerken!
|
||
x.kenmerken)
|
||
beschrijving,
|
||
d.ins_deel_aanmaak,
|
||
d.ins_deel_verwijder,
|
||
DECODE (d.ins_deel_verwijder, NULL, DECODE (SIGN (ADD_MONTHS (d.ins_deel_vervaldatum, 1) - SYSDATE), -1, 0, 1), 0)
|
||
tonen,
|
||
du.uitgiftedatum,
|
||
di.innamedatum,
|
||
ri.redeninactief
|
||
FROM ins_deel d, -- Inclusief recent verwijderde objecten!
|
||
prs_v_perslid_fullnames_all pf,
|
||
ins_srtdeel sd,
|
||
( SELECT ins_deel_key, LISTAGG (kenmerk, ', ') WITHIN GROUP (ORDER BY ins_kenmerk_volgnummer) AS kenmerken
|
||
FROM (SELECT kd.ins_deel_key,
|
||
k.ins_kenmerk_volgnummer,
|
||
DECODE (kd.ins_kenmerkdeel_waarde, '1', sk.ins_srtkenmerk_omschrijving, kd.ins_kenmerkdeel_waarde)
|
||
kenmerk
|
||
FROM ins_kenmerkdeel kd, ins_kenmerk k, ins_srtkenmerk sk
|
||
WHERE kd.ins_kenmerk_key = k.ins_kenmerk_key
|
||
AND k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key
|
||
AND (sk.ins_srtkenmerk_key IN (3, 5, 6, 7, 8, 9, 201, 202) -- Type/Laptop tas/Laptop standaard/Toetsenbord/Muis/Overig/Screenprotector mobiel/Beschermhoesje mobiel
|
||
OR kd.ins_kenmerk_key IN (65, 67))) -- Model igv. Dock/Monitor
|
||
GROUP BY ins_deel_key) x,
|
||
(SELECT kd.ins_deel_key, kd.ins_kenmerkdeel_waarde uitgiftedatum
|
||
FROM ins_v_aanwezigkenmerkdeel kd
|
||
WHERE EXISTS
|
||
(SELECT 1
|
||
FROM ins_v_aanwezigkenmerk
|
||
WHERE ins_srtkenmerk_key = 1 -- Uitgifte datum
|
||
AND ins_kenmerk_key = kd.ins_kenmerk_key)) du,
|
||
(SELECT kd.ins_deel_key, kd.ins_kenmerkdeel_waarde innamedatum
|
||
FROM ins_v_aanwezigkenmerkdeel kd
|
||
WHERE EXISTS
|
||
(SELECT 1
|
||
FROM ins_v_aanwezigkenmerk
|
||
WHERE ins_srtkenmerk_key = 2 -- Inname datum
|
||
AND ins_kenmerk_key = kd.ins_kenmerk_key)) di,
|
||
(SELECT kd.ins_deel_key, ud.fac_usrdata_omschr redeninactief
|
||
FROM ins_v_aanwezigkenmerkdeel kd, fac_v_aanwezigusrdata ud
|
||
WHERE EXISTS
|
||
(SELECT 1
|
||
FROM ins_v_aanwezigkenmerk
|
||
WHERE ins_srtkenmerk_key = 41 -- Reden inactief
|
||
AND ins_kenmerk_key = kd.ins_kenmerk_key)
|
||
AND fac.safe_to_number (kd.ins_kenmerkdeel_waarde) = ud.fac_usrdata_key) ri
|
||
WHERE d.ins_alg_ruimte_type = 'P'
|
||
AND d.ins_alg_ruimte_key = pf.prs_perslid_key
|
||
AND COALESCE (d.ins_deel_verwijder, SYSDATE) >= TRUNC (SYSDATE - 1)
|
||
AND d.ins_srtdeel_key = sd.ins_srtdeel_key
|
||
AND d.ins_deel_key = x.ins_deel_key(+)
|
||
AND d.ins_deel_key = du.ins_deel_key(+)
|
||
AND d.ins_deel_key = di.ins_deel_key(+)
|
||
AND d.ins_deel_key = ri.ins_deel_key(+);
|
||
|
||
------ 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
|