From e8ae0356c23d35abc06015aef99b0da730b4b079 Mon Sep 17 00:00:00 2001 From: Maarten van der Heide Date: Tue, 24 Dec 2024 16:02:33 +0000 Subject: [PATCH] DSMA#83868 Korton-koppeling/Implementatie svn path=/Customer/trunk/; revision=67477 --- DSMA/dsma.sql | 178 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 174 insertions(+), 4 deletions(-) diff --git a/DSMA/dsma.sql b/DSMA/dsma.sql index e85fc62d2..29d71ac2e 100644 --- a/DSMA/dsma.sql +++ b/DSMA/dsma.sql @@ -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