DSMA#83868 Korton-koppeling/Implementatie

svn path=/Customer/trunk/; revision=67477
This commit is contained in:
Maarten van der Heide
2024-12-24 16:02:33 +00:00
parent bfe776d9b5
commit e8ae0356c2

View File

@@ -428,7 +428,7 @@ 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!
-- 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) || '] '
@@ -475,7 +475,7 @@ AS
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);
v_errormsg VARCHAR2 (1000) := '';
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count NUMBER;
@@ -580,7 +580,7 @@ EXCEPTION
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);
fac.writelog (p_applname, 'E', 'Export afgebroken!', v_errormsg);
END DSMA_SELECT_BASE27;
/
@@ -675,7 +675,7 @@ AS
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
@@ -699,6 +699,7 @@ AS
END LOOP;
fac.writelog (c_applname, 'S', '#Korton-meldingen gesloten: ' || TO_CHAR (v_count_tot), '');
COMMIT;
*/
EXCEPTION
WHEN OTHERS
THEN
@@ -1029,6 +1030,175 @@ AS
AND aog.alg_locatie_key = l.alg_locatie_key
;
CREATE OR REPLACE VIEW DSMA_V_RAP_EXP_KORTON
AS
SELECT fac.safe_to_number (n.note_key) extra_key, -- Moet zo heten!
o.mld_opdr_key,
o.mld_melding_key,
o.mld_opdr_bedrijfopdr_volgnr,
o.mld_statusopdr_key,
refnr.mld_kenmerkopdr_waarde mld_opdr_externnr, -- TODO:Korton kan 'externalnr' niet zetten?
n.reftype,
o.mld_opdr_externsyncdate syncdate_old,
n.note_datum syncdate_new,
n.note_oms,
p.prs_perslid_email,
pf.prs_perslid_naam_friendly
FROM mld_opdr o,
(SELECT *
FROM mld_kenmerkopdr
WHERE mld_kenmerk_key = 621) refnr, -- Ref.nr. leverancier
(SELECT '1' || SUBSTR ('00000' || TO_CHAR (mld_opdr_note_key), -9) note_key,
'ORD' reftype,
mld_opdr_key refkey,
GREATEST (mld_opdr_note_aanmaak, mld_opdr_note_wijzigdatum) note_datum,
prs_perslid_key,
mld_opdr_note_omschrijving note_oms
FROM mld_opdr_note
WHERE prs_perslid_key != 5383 -- API-user tbv. Korton
AND BITAND (mld_opdr_note_flag, 4) = 4 -- Bitje 4 = 1/Notitie voor Korton
UNION ALL
SELECT '2' || SUBSTR ('00000' || TO_CHAR (mld_melding_note_key), -9) note_key,
'MLD' reftype,
mld_melding_key refkey,
GREATEST (mld_melding_note_aanmaak, mld_melding_note_wijzigdatum) note_datum,
prs_perslid_key,
mld_melding_note_omschrijving note_oms
FROM mld_melding_note
WHERE prs_perslid_key != 5383 -- API-user tbv. Korton
AND BITAND (mld_melding_note_flag, 1) = 1) n, -- Bitje 1 = 1/Notitie voor Korton
prs_perslid p,
prs_v_perslid_fullnames_all pf
WHERE o.mld_uitvoerende_keys = 841 -- Korton
AND o.mld_opdr_key = refnr.mld_opdr_key(+)
--AND o.mld_opdr_key = n.mld_opdr_key
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 > TRUNC (SYSDATE, 'IW') -- Alle notities deze week!
AND n.prs_perslid_key = p.prs_perslid_key
AND p.prs_perslid_key = pf.prs_perslid_key;
CREATE OR REPLACE PROCEDURE DSMA_KORTON_UPDATE
AS
-- Nieuwe notitie(s) sinds laatste sync!
-- TODO:Aanname is nooit tegelijk notitie(s) op zowel melding als opdracht!
CURSOR c_dsm2korton
IS
SELECT '[' || TO_CHAR (x.mld_melding_key) || '/' || TO_CHAR (x.mld_opdr_bedrijfopdr_volgnr) || '] '
aanduiding,
x.extra_key,
x.mld_opdr_key,
x.mld_melding_key,
x.mld_opdr_bedrijfopdr_volgnr,
x.mld_statusopdr_key,
x.reftype,
x.syncdate_old,
x.syncdate_new
FROM dsma_v_rap_exp_korton x
WHERE x.mld_opdr_externnr IS NOT NULL -- Dan pas kunnen updates worden doorgezet!
AND x.mld_statusopdr_key IN (5, 8) -- Toegekend/Geaccepteerd
AND x.syncdate_new > COALESCE (x.syncdate_old, TRUNC (SYSDATE, 'IW'))
--AND NOT EXISTS -- Alleen laatste notitie op basis van key (MLD voor ORD)!
-- (SELECT 1
-- FROM dsma_v_rap_exp_korton
-- WHERE mld_opdr_key = x.mld_opdr_key
-- AND extra_key > x.extra_key)
AND NOT EXISTS -- Alleen laatste notitie op basis van datum (ORD voor MLD)!
(SELECT 1
FROM dsma_v_rap_exp_korton
WHERE mld_opdr_key = x.mld_opdr_key
AND syncdate_new > x.syncdate_new)
ORDER BY x.extra_key;
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 Korton!
FOR rec IN c_dsm2korton
LOOP
BEGIN
v_errormsg := 'Fout dsm2korton-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 != 5383 -- API-user tbv. Korton
AND mld_opdr_key = rec.mld_opdr_key
AND GREATEST (mld_opdr_note_aanmaak, mld_opdr_note_wijzigdatum) > rec.syncdate_old;
--fac.trackaction ('ORDUPD', rec.refkey, NULL, NULL, 'Notitie doorgezet naar Korton');
ELSE
UPDATE mld_melding_note
SET mld_melding_note_wijzigdatum = rec.syncdate_new
WHERE prs_perslid_key != 5383 -- API-user tbv. Korton
AND mld_melding_key = rec.mld_melding_key
AND GREATEST (mld_melding_note_aanmaak, mld_melding_note_wijzigdatum) > rec.syncdate_old;
--fac.trackaction ('MLDUPD', rec.refkey, NULL, NULL, 'Notitie doorgezet naar Korton');
END IF;
v_errormsg := 'Fout toevoegen CUST01-noti (Korton)';
INSERT INTO fac_notificatie (fac_srtnotificatie_key,
fac_notificatie_status,
fac_notificatie_refkey,
fac_notificatie_extrakey,
fac_notificatie_prioriteit,
prs_bedrijfadres_key
)
VALUES (321, -- CUST01
0, -- Don't care
201, -- DSMA_V_RAP_EXP_KORTON
fac.safe_to_number (rec.extra_key),
2,
61 -- 4Me-kanaal voor updates naar Korton
);
v_errormsg := 'Fout bijwerken opdracht';
UPDATE mld_opdr
SET mld_opdr_externsyncdate = rec.syncdate_new
WHERE mld_opdr_key = rec.mld_opdr_key;
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 ('KORTON', 'E', rec.aanduiding || v_errormsg, '');
COMMIT;
END;
END LOOP;
IF v_count > 0
THEN
fac.writelog ('KORTON', 'S', 'DSM-notities to Korton/#sync: ' || TO_CHAR (v_count), '');
END IF;
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 ('KORTON', 'E', 'Update afgebroken!', v_errormsg);
END DSMA_KORTON_UPDATE;
/
CREATE OR REPLACE PROCEDURE DSMA_PRE_PUTORDERS
AS
BEGIN
dsma_korton_update;
END DSMA_PRE_PUTORDERS;
/
------ payload end ------
SET DEFINE OFF