FBEA#74981 Koppeling tussen Facilitor en Topdesk voor bibliotheken Eemland
svn path=/Customer/trunk/; revision=61040
This commit is contained in:
290
FBEA/FBEA.sql
290
FBEA/FBEA.sql
@@ -590,6 +590,296 @@ AS
|
||||
AND gg.fac_groep_key = g.fac_groep_key
|
||||
AND p.prs_perslid_key = gg.prs_perslid_key;
|
||||
|
||||
/* Formatted on 3-7-2023 17:19:54 (QP5 v5.336) */
|
||||
CREATE OR REPLACE PROCEDURE fbea_export_topdesk (p_applname IN VARCHAR2,
|
||||
p_applrun IN VARCHAR2,
|
||||
p_filedir IN VARCHAR2,
|
||||
p_filename IN VARCHAR2)
|
||||
AS
|
||||
oracle_err_num NUMBER;
|
||||
oracle_err_mes VARCHAR2 (200);
|
||||
v_errorhint VARCHAR2 (100);
|
||||
v_aanduiding VARCHAR2 (100);
|
||||
v_locatie_key NUMBER;
|
||||
v_lengte NUMBER;
|
||||
v_status_ogd VARCHAR2 (200);
|
||||
v_status_ogd_new VARCHAR2 (200);
|
||||
v_status_ogd_key NUMBER;
|
||||
v_new_note VARCHAR2 (4000);
|
||||
|
||||
-- Dit haalt het externnummer op uit de opdrachtomschrijving indien externnr bij de melding nog leeg is
|
||||
CURSOR externnr IS
|
||||
SELECT DISTINCT
|
||||
m.mld_melding_key,
|
||||
o.mld_opdr_key,
|
||||
o.mld_opdr_externnr AS externnr,
|
||||
SUBSTR (o.mld_opdr_omschrijving,
|
||||
INSTR (o.mld_opdr_omschrijving, 'TOPdesk nr:') + 12) topdesknr
|
||||
FROM mld_melding m, mld_opdr o
|
||||
WHERE m.mld_melding_key = o.mld_melding_key
|
||||
AND o.mld_opdr_externnr IS NOT NULL
|
||||
AND o.mld_uitvoerende_keys = 1081 --- voorlopig in ieder geval alleen Duzz ICT
|
||||
AND o.mld_statusopdr_key NOT IN (1,
|
||||
2,
|
||||
6,
|
||||
7,
|
||||
9)
|
||||
AND m.mld_melding_externnr IS NULL;
|
||||
|
||||
-- Onderstaande cursor verzamelt de gegevens om te bepalen welke meldingen nieuwe opmerkingen heeft en die verzonden kunnen worden naar Topdesk
|
||||
-- Alle notities bij een melding die niet al eerder zijn verstuurd en niet door DUZZ zijn gemaakt mogen verstuurd worden
|
||||
CURSOR sync IS
|
||||
SELECT n.mld_melding_key,
|
||||
n.mld_opdr_key,
|
||||
n.notitie,
|
||||
n.mld_melding_note_aanmaak
|
||||
FROM ( SELECT mld.mld_melding_key,
|
||||
o.mld_opdr_key,
|
||||
LISTAGG (
|
||||
pfn.prs_perslid_naam_friendly
|
||||
|| '/'
|
||||
|| mn.mld_melding_note_aanmaak
|
||||
|| ' '
|
||||
|| mn.mld_melding_note_omschrijving,
|
||||
'; ')
|
||||
WITHIN GROUP (ORDER BY mld.mld_melding_key)
|
||||
notitie,
|
||||
MAX (mn.mld_melding_note_aanmaak)
|
||||
mld_melding_note_aanmaak
|
||||
FROM mld_melding mld,
|
||||
mld_melding_note mn,
|
||||
mld_opdr o,
|
||||
prs_perslid p,
|
||||
prs_v_perslid_fullnames_all pfn
|
||||
WHERE mn.mld_melding_key = mld.mld_melding_key
|
||||
AND mn.prs_perslid_key = pfn.prs_perslid_key
|
||||
AND pfn.prs_perslid_key = p.prs_perslid_key
|
||||
AND ( UPPER (p.prs_perslid_email) NOT LIKE '%DUZZ%'
|
||||
OR p.prs_perslid_email IS NULL) -- notities door Duzz zelf gemaakt sturen we niet terug
|
||||
AND mld.mld_melding_key = o.mld_melding_key -- alleen naar Duzz als er ook een opdracht bij Duzz is
|
||||
AND o.mld_uitvoerende_keys = 1081 -- We doen dit alleen voor opdrachten die voor Duzz zijn
|
||||
AND o.mld_statusopdr_key IN (5, 8)
|
||||
AND mld_melding_note_aanmaak > o.mld_opdr_datumbegin
|
||||
AND ( mld.mld_melding_externsyncdate <
|
||||
mld_melding_note_aanmaak
|
||||
OR mld.mld_melding_externsyncdate IS NULL)
|
||||
GROUP BY mld.mld_melding_key, o.mld_opdr_key
|
||||
ORDER BY mld_melding_key, mld_melding_note_aanmaak DESC) n,
|
||||
(SELECT mld_melding_key, aant_char
|
||||
FROM ( SELECT mld.mld_melding_key,
|
||||
SUM (
|
||||
LENGTH (mn.mld_melding_note_omschrijving)) aant_char
|
||||
FROM mld_melding mld,
|
||||
mld_melding_note mn,
|
||||
mld_stdmelding sm,
|
||||
mld_opdr o,
|
||||
prs_v_perslid_fullnames_all prs,
|
||||
prs_perslid p
|
||||
WHERE mn.mld_melding_key = mld.mld_melding_key
|
||||
AND sm.mld_stdmelding_key =
|
||||
mld.mld_stdmelding_key
|
||||
AND mn.prs_perslid_key = prs.prs_perslid_key
|
||||
AND prs.prs_perslid_key = p.prs_perslid_key
|
||||
AND ( UPPER (p.prs_perslid_email) NOT LIKE
|
||||
'%DUZZ%'
|
||||
OR p.prs_perslid_email IS NULL)
|
||||
AND mld.mld_melding_key = o.mld_melding_key -- Enkel bijwerken indien er ook een opdracht is.
|
||||
AND o.mld_uitvoerende_keys = 1081 -- We doen dit alleen voor opdrachten die bij Duzz liggen
|
||||
AND o.mld_statusopdr_key IN (5, 8)
|
||||
AND mld_melding_note_aanmaak >
|
||||
o.mld_opdr_datumbegin
|
||||
AND ( mld.mld_melding_externsyncdate <
|
||||
mld_melding_note_aanmaak
|
||||
OR mld.mld_melding_externsyncdate IS NULL)
|
||||
GROUP BY mld.mld_melding_key)
|
||||
WHERE aant_char < 4000) t
|
||||
WHERE t.mld_melding_key = n.mld_melding_key;
|
||||
|
||||
--- meldingen waarbij het totaal te versturen notities de 4000 karakters overschrijdt
|
||||
--- deze zetten we in de tracking
|
||||
CURSOR large IS
|
||||
SELECT mld_melding_key, mld_opdr_key, aant_char
|
||||
FROM ( SELECT mld.mld_melding_key,
|
||||
o.mld_opdr_key,
|
||||
SUM (LENGTH (mn.mld_melding_note_omschrijving)) aant_char
|
||||
FROM mld_melding mld,
|
||||
mld_melding_note mn,
|
||||
mld_stdmelding sm,
|
||||
mld_opdr o,
|
||||
prs_v_perslid_fullnames_all prs,
|
||||
prs_perslid p
|
||||
WHERE mn.mld_melding_key = mld.mld_melding_key
|
||||
AND sm.mld_stdmelding_key = mld.mld_stdmelding_key
|
||||
AND mn.prs_perslid_key = prs.prs_perslid_key
|
||||
AND p.prs_perslid_key = prs.prs_perslid_key
|
||||
AND ( UPPER (p.prs_perslid_email) NOT LIKE '%DUZZ%'
|
||||
OR p.prs_perslid_email IS NULL)
|
||||
AND mld.mld_melding_key = o.mld_melding_key -- Enkel relavant indien er ook een opdracht is.
|
||||
AND o.mld_uitvoerende_keys = 1081 -- We doen dit alleen voor opdrachten die voor Duzz zijn
|
||||
AND o.mld_statusopdr_key IN (5, 8)
|
||||
AND mld_melding_note_aanmaak > o.mld_opdr_datumbegin
|
||||
AND ( mld.mld_melding_externsyncdate <
|
||||
mld_melding_note_aanmaak
|
||||
OR mld.mld_melding_externsyncdate IS NULL)
|
||||
GROUP BY mld.mld_melding_key, o.mld_opdr_key)
|
||||
WHERE aant_char > 4000;
|
||||
BEGIN
|
||||
v_errorhint := 'init';
|
||||
v_lengte := 0;
|
||||
|
||||
-- Hier vullen we het externnr bij de melding bij de opdracht binnenkomt vanuit Topdesk
|
||||
FOR rec IN externnr
|
||||
LOOP
|
||||
BEGIN
|
||||
v_aanduiding :=
|
||||
'Topdesknr zetten bij melding: ' || rec.mld_melding_key;
|
||||
v_errorhint :=
|
||||
'Melding vullen met externnr voor melding '
|
||||
|| rec.mld_melding_key;
|
||||
|
||||
UPDATE mld_melding
|
||||
SET mld_melding_externnr = rec.topdesknr
|
||||
WHERE mld_melding_key = rec.mld_melding_key;
|
||||
|
||||
-- Vervolgens zetten we de sync state zodat we weten vanaf wanneer de sync van notities en bijlagen mag gaan lopen
|
||||
UPDATE mld_melding
|
||||
SET mld_melding_externsyncdate = SYSDATE
|
||||
WHERE mld_melding_externsyncdate IS NULL
|
||||
AND mld_melding_key = rec.mld_melding_key;
|
||||
|
||||
COMMIT;
|
||||
EXCEPTION
|
||||
WHEN OTHERS
|
||||
THEN
|
||||
oracle_err_num := SQLCODE;
|
||||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||||
|
||||
-- aanmaken mldtrk in fac_tracking
|
||||
INSERT INTO fac_tracking (fac_srtnotificatie_key,
|
||||
fac_tracking_refkey,
|
||||
fac_tracking_oms)
|
||||
VALUES (
|
||||
207,
|
||||
rec.mld_melding_key,
|
||||
v_aanduiding
|
||||
|| '/'
|
||||
|| oracle_err_num
|
||||
|| ': '
|
||||
|| oracle_err_mes);
|
||||
END;
|
||||
END LOOP;
|
||||
|
||||
FOR rec IN sync
|
||||
LOOP
|
||||
BEGIN
|
||||
-- Eerst verzamelen we alle nieuwe notities en zetten deze klaar in een kenmerk voor verzending
|
||||
v_aanduiding :=
|
||||
'Note naar Topdesk voor melding: ' || rec.mld_melding_key;
|
||||
v_errorhint :=
|
||||
'Notities verzamelen voor verzending ' || rec.mld_melding_key;
|
||||
|
||||
-- Daarvoor moeten we de juiste kenmerkkey bepalen
|
||||
SELECT k.mld_kenmerk_key
|
||||
INTO v_new_note
|
||||
FROM mld_opdr o, mld_kenmerk k, mld_srtkenmerk sk
|
||||
WHERE o.mld_typeopdr_key = k.mld_typeopdr_key
|
||||
AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key
|
||||
AND UPPER (sk.mld_srtkenmerk_omschrijving) =
|
||||
'UPDATES NOTITIES'
|
||||
AND o.mld_opdr_key = rec.mld_opdr_key;
|
||||
|
||||
-- De oude notitie gooien we weg
|
||||
DELETE MLD_KENMERKOPDR ko
|
||||
WHERE ko.mld_opdr_key = rec.mld_opdr_key
|
||||
AND ko.mld_kenmerk_key = v_new_note;
|
||||
|
||||
-- Dan vullen we de nieuwe notitie
|
||||
mld.upsertopdrachtkenmerk (v_new_note,
|
||||
rec.mld_opdr_key,
|
||||
rec.notitie);
|
||||
|
||||
v_errorhint :=
|
||||
'Opdracht opnieuw te verzenden naar Topdesk voor melding: '
|
||||
|| rec.mld_melding_key;
|
||||
|
||||
-- Eerst zetten we de opdracht opnieuw klaar om te verzenden
|
||||
UPDATE mld_opdr o
|
||||
SET mld_opdr_teverzenden = 2, mld_opdr_verzonden = NULL
|
||||
WHERE o.mld_opdr_key = rec.mld_opdr_key;
|
||||
|
||||
v_errorhint :=
|
||||
'Syncdatum Topdesk bijwerken voor melding '
|
||||
|| rec.mld_melding_key;
|
||||
|
||||
-- Als er nog niet eerder gesynchroniseerd is maken we een kenmerk aan met de syncdatum
|
||||
-- Als al eerder gesynchroniseerd is werken we de syncdatum bij
|
||||
-- Hiermee komt deze notitie de volgende keer niet meer voor in de cursor
|
||||
|
||||
UPDATE mld_melding m
|
||||
SET m.mld_melding_externsyncdate = SYSDATE
|
||||
WHERE rec.sync_key = mld_kenmerkmelding_key;
|
||||
|
||||
--- deze notitie moet resulteren in een patch naar Topdesk
|
||||
--- dat wordt getriggerd door een ordupd
|
||||
fac.trackaction ('ORDUPD',
|
||||
rec.mld_opdr_key,
|
||||
NULL,
|
||||
NULL,
|
||||
'Sync_OGD: ' || rec.sync || ' --> ' || rec.note);
|
||||
|
||||
COMMIT;
|
||||
EXCEPTION
|
||||
WHEN OTHERS
|
||||
THEN
|
||||
oracle_err_num := SQLCODE;
|
||||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||||
|
||||
-- aanmaken ordtrk in fac_tracking
|
||||
INSERT INTO fac_tracking (fac_srtnotificatie_key,
|
||||
fac_tracking_refkey,
|
||||
fac_tracking_oms)
|
||||
VALUES (
|
||||
210,
|
||||
rec.mld_opdr_key,
|
||||
v_aanduiding
|
||||
|| '/'
|
||||
|| oracle_err_num
|
||||
|| ': '
|
||||
|| oracle_err_mes);
|
||||
END;
|
||||
END LOOP;
|
||||
|
||||
FOR rec IN large
|
||||
LOOP
|
||||
BEGIN
|
||||
--
|
||||
v_aanduiding :=
|
||||
'Notities bij melding '
|
||||
|| rec.mld_melding_key
|
||||
|| ' te groot voor export naar Topdesk.';
|
||||
|
||||
-- aanmaken mldtrk in fac_tracking
|
||||
INSERT INTO fac_tracking (fac_srtnotificatie_key,
|
||||
fac_tracking_refkey,
|
||||
fac_tracking_oms)
|
||||
VALUES (207, rec.mld_opdr_key, v_aanduiding);
|
||||
END;
|
||||
END LOOP;
|
||||
|
||||
COMMIT;
|
||||
EXCEPTION
|
||||
WHEN OTHERS
|
||||
THEN
|
||||
oracle_err_num := SQLCODE;
|
||||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||||
|
||||
fac.writelog (p_applname,
|
||||
'E',
|
||||
oracle_err_num || '/' || oracle_err_mes,
|
||||
v_errorhint);
|
||||
END pnbr_export_topdesk;
|
||||
/
|
||||
|
||||
------ payload end ------
|
||||
|
||||
SET DEFINE OFF
|
||||
|
||||
Reference in New Issue
Block a user