FBEA#74981 Koppeling tussen Facilitor en Topdesk voor bibliotheken Eemland

svn path=/Customer/trunk/; revision=61040
This commit is contained in:
Suzan Wiegerinck
2023-07-03 15:23:37 +00:00
parent 0ae57c88ef
commit 9bf11c357a

View File

@@ -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