From b7284e7ef9a264e6d077fce7e2ac5ecda416552c Mon Sep 17 00:00:00 2001 From: Maarten van der Heide Date: Mon, 2 Dec 2019 13:10:48 +0000 Subject: [PATCH] DJIN#60189 NACHTWERK-export/bijwerken kenmerken (van opdracht naar melding) svn path=/Customer/trunk/; revision=45089 --- DJIN/djin.sql | 223 ++++++++++++++++++-------------------------------- 1 file changed, 79 insertions(+), 144 deletions(-) diff --git a/DJIN/djin.sql b/DJIN/djin.sql index a7ec83e10..b02a4ebe7 100644 --- a/DJIN/djin.sql +++ b/DJIN/djin.sql @@ -763,57 +763,26 @@ END djin_anonimiseer; CREATE OR REPLACE PROCEDURE djin_select_nachtwerk (p_applname IN VARCHAR2, p_applrun IN VARCHAR2) AS - v_errormsg VARCHAR2 (1000); - oracle_err_num NUMBER; - oracle_err_mes VARCHAR2 (200); + v_errormsg VARCHAR2 (1000); + oracle_err_num NUMBER; + oracle_err_mes VARCHAR2 (200); + v_old_melding_key NUMBER (10); - CURSOR c_pd -- Recent gewijzigde Plusdienst-opdrachten met Kosten != 0 onder een (soort)melding met Kosten-veld! + -- DJIN#60189: Kopieren opdrachtkenmerken naar meldingkenmerken + -- 282=Kosten (euro) (optioneel)+285=Leonardonummer+461=Werkzaamheden uitgevoerd door het locatieteam+ + -- 621=Betreft schade door molest/vermissing+622=Veroorzaker schade/vermissing/2=Serviceaanvraagnummer+ + -- 43=Naam leverancier+44=Opdrachtnummer leverancier + CURSOR c_o2m IS - SELECT x.mld_melding_key, - x.mkosten_kkey, x.okosten_kow, mkosten.mld_kenmerkmelding_key mkosten_kmkey, - x.mln_kkey, oln.mld_kenmerkopdr_waarde oln_kow, mln.mld_kenmerkmelding_key mln_kmkey, - x.mlt_kkey, olt.mld_kenmerkopdr_waarde olt_kow, mlt.mld_kenmerkmelding_key mlt_kmkey - FROM (SELECT DISTINCT o.mld_opdr_key, o.mld_melding_key, - mkosten.mld_kenmerk_key mkosten_kkey, ko.mld_kenmerkopdr_waarde okosten_kow, - mln.mld_kenmerk_key mln_kkey, mlt.mld_kenmerk_key mlt_kkey - FROM fac_v_aanwezigusrdata ud1, - mld_kenmerk k1, - mld_v_aanwezigkenmerkmelding km, - fac_v_aanwezigusrdata ud2, - mld_melding m, - mld_stdmelding sm, - ins_tab_discipline td, - mld_kenmerk mkosten, - mld_kenmerk mln, - mld_kenmerk mlt, - mld_opdr o, - mld_v_aanwezigkenmerkopdr ko, - mld_kenmerk okosten - WHERE ud1.fac_usrtab_key = 241 -- Kenmerksoorten ter identificatie van Plusdienst (als Prijs > 0) - AND ud1.fac_usrdata_code = TO_CHAR (k1.mld_srtkenmerk_key) - AND k1.mld_kenmerk_key = km.mld_kenmerk_key - AND km.mld_kenmerkmelding_waarde = TO_CHAR (ud2.fac_usrdata_key) - AND ud2.fac_usrdata_prijs > 0 - AND km.mld_melding_key = m.mld_melding_key - AND m.mld_stdmelding_key = sm.mld_stdmelding_key - AND sm.mld_ins_discipline_key = td.ins_discipline_key - AND ((sm.mld_stdmelding_key = mkosten.mld_stdmelding_key AND mkosten.mld_kenmerk_niveau = 'S') - OR (td.ins_discipline_key = mkosten.mld_stdmelding_key AND mkosten.mld_kenmerk_niveau = 'D') - OR (td.ins_srtdiscipline_key = mkosten.mld_stdmelding_key AND mkosten.mld_kenmerk_niveau = 'T')) - AND mkosten.mld_srtkenmerk_key = 282 -- Kosten - AND ((sm.mld_stdmelding_key = mln.mld_stdmelding_key AND mln.mld_kenmerk_niveau = 'S') - OR (td.ins_discipline_key = mln.mld_stdmelding_key AND mln.mld_kenmerk_niveau = 'D') - OR (td.ins_srtdiscipline_key = mln.mld_stdmelding_key AND mln.mld_kenmerk_niveau = 'T')) - AND mln.mld_srtkenmerk_key = 285 -- Leonardonummer - AND ((sm.mld_stdmelding_key = mlt.mld_stdmelding_key AND mlt.mld_kenmerk_niveau = 'S') - OR (td.ins_discipline_key = mlt.mld_stdmelding_key AND mlt.mld_kenmerk_niveau = 'D') - OR (td.ins_srtdiscipline_key = mlt.mld_stdmelding_key AND mlt.mld_kenmerk_niveau = 'T')) - AND mlt.mld_srtkenmerk_key = 461 -- Locatieteam-vinkveld - AND m.mld_melding_key = o.mld_melding_key - AND o.mld_opdr_key = ko.mld_opdr_key - AND ko.mld_kenmerk_key = okosten.mld_kenmerk_key - AND okosten.mld_srtkenmerk_key = 282 -- Kosten - AND COALESCE (fac.safe_to_number (ko.mld_kenmerkopdr_waarde), 0) != 0 + SELECT '[' || TO_CHAR (o.mld_melding_key) || '/' || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr) || '] ' aanduiding, + o.mld_melding_key, o.mld_srtkenmerk_key, o.mld_kenmerkopdr_waarde kow, + m.mld_kenmerk_key mkk, w.mld_kenmerkmelding_key kmk, w.mld_kenmerkmelding_waarde kmw + FROM (SELECT o.mld_melding_key, o.mld_opdr_bedrijfopdr_volgnr, k.mld_srtkenmerk_key, ko.mld_kenmerkopdr_waarde + FROM mld_kenmerk k, mld_v_aanwezigkenmerkopdr ko, mld_opdr o + WHERE k.mld_kenmerk_verwijder IS NULL + AND k.mld_srtkenmerk_key IN (282, 285, 461, 621, 622, 2, 43, 44) + AND k.mld_kenmerk_key = ko.mld_kenmerk_key + AND ko.mld_opdr_key = o.mld_opdr_key AND NOT EXISTS -- Skip opdrachten met lager volgnummer (SELECT 1 FROM mld_opdr @@ -822,52 +791,30 @@ AS AND EXISTS -- Beschouw zolang recent nog gewijzigd (SELECT 1 FROM fac_tracking t, fac_srtnotificatie sn - WHERE t.fac_tracking_datum > ADD_MONTHS (SYSDATE, -3) + WHERE t.fac_tracking_datum > SYSDATE - 7 AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key AND sn.fac_srtnotificatie_code LIKE 'ORD%' - AND t.fac_tracking_refkey = o.mld_opdr_key)) x - LEFT JOIN - mld_v_aanwezigkenmerkmelding mkosten - ON x.mld_melding_key = mkosten.mld_melding_key - AND EXISTS - (SELECT 1 - FROM mld_kenmerk - WHERE mld_srtkenmerk_key = 282 -- Kosten op melding - AND mld_kenmerk_key = mkosten.mld_kenmerk_key) - LEFT JOIN - mld_v_aanwezigkenmerkmelding mln - ON x.mld_melding_key = mln.mld_melding_key - AND EXISTS - (SELECT 1 - FROM mld_kenmerk - WHERE mld_srtkenmerk_key = 285 -- Leonardonummer op melding - AND mld_kenmerk_key = mln.mld_kenmerk_key) - LEFT JOIN - mld_v_aanwezigkenmerkopdr oln - ON x.mld_opdr_key = oln.mld_opdr_key - AND EXISTS - (SELECT 1 - FROM mld_kenmerk - WHERE mld_srtkenmerk_key = 285 -- Leonardonummer op opdracht - AND mld_kenmerk_key = oln.mld_kenmerk_key) - LEFT JOIN - mld_v_aanwezigkenmerkmelding mlt - ON x.mld_melding_key = mlt.mld_melding_key - AND EXISTS - (SELECT 1 - FROM mld_kenmerk - WHERE mld_srtkenmerk_key = 461 -- Locatieteam-vinkveld op melding - AND mld_kenmerk_key = mlt.mld_kenmerk_key) - LEFT JOIN - mld_v_aanwezigkenmerkopdr olt - ON x.mld_opdr_key = olt.mld_opdr_key - AND EXISTS - (SELECT 1 - FROM mld_kenmerk - WHERE mld_srtkenmerk_key = 461 -- Locatieteam-vinkveld op opdracht - AND mld_kenmerk_key = olt.mld_kenmerk_key) - WHERE okosten_kow != COALESCE (mkosten.mld_kenmerkmelding_waarde, '0') -- Kosten nieuw/gewijzigd - ORDER BY 1; + AND t.fac_tracking_refkey = o.mld_opdr_key)) o, -- Van opdracht + ( SELECT m.mld_melding_key, k.mld_srtkenmerk_key, MIN (k.mld_kenmerk_key) mld_kenmerk_key + FROM mld_melding m, mld_stdmelding sm, ins_tab_discipline td, mld_kenmerk k + WHERE m.mld_stdmelding_key = sm.mld_stdmelding_key + AND sm.mld_ins_discipline_key = td.ins_discipline_key + AND ((sm.mld_stdmelding_key = k.mld_stdmelding_key AND k.mld_kenmerk_niveau = 'S') + OR (td.ins_discipline_key = k.mld_stdmelding_key AND k.mld_kenmerk_niveau = 'D') + OR (td.ins_srtdiscipline_key = k.mld_stdmelding_key AND k.mld_kenmerk_niveau = 'T')) + AND k.mld_kenmerk_verwijder IS NULL + AND k.mld_srtkenmerk_key IN (282, 285, 461, 621, 622, 2, 43, 44) + GROUP BY m.mld_melding_key, k.mld_srtkenmerk_key) m, -- Naar MIN(kenmerk) op melding + (SELECT km.mld_melding_key, k.mld_kenmerk_key, km.mld_kenmerkmelding_key, km.mld_kenmerkmelding_waarde + FROM mld_kenmerk k, mld_v_aanwezigkenmerkmelding km + WHERE k.mld_kenmerk_verwijder IS NULL + AND k.mld_srtkenmerk_key IN (282, 285, 461, 621, 622, 2, 43, 44) + AND km.mld_kenmerk_key = k.mld_kenmerk_key) w -- Eventuele huidige waarde van MIN(kenmerk)! + WHERE o.mld_melding_key = m.mld_melding_key + AND o.mld_srtkenmerk_key = m.mld_srtkenmerk_key + AND m.mld_melding_key = w.mld_melding_key(+) + AND m.mld_kenmerk_key = w.mld_kenmerk_key(+) + ORDER BY 2; BEGIN -- Anonimiseer medewerkers, trackregels en specifieke andere zaken zoals -- het in Productie de bedoeling is (dus pas na afgesproken termijnen en @@ -875,66 +822,57 @@ BEGIN -- Vanuit djin.sql dus altijd alle parameters op FALSE (= geen extra's)! djin_anonimiseer (FALSE, FALSE, FALSE); - -- DJIN#55344: Doorvoeren dat het Kosten-kenmerkveld uit de evt. opdracht - -- met het hoogste volgnummer wordt gekopieerd/bijgewerkt in - -- het Kosten-kenmerkveld bij de melding (zolang er mutaties + -- DJIN#55344: Doorvoeren dat het kenmerkveld uit de (evt.) opdracht met + -- het hoogste volgnummer wordt gekopieerd/bijgewerkt in het + -- kenmerkveld bij de melding (zolang er mutaties plaatsvinden -- plaatsvinden op de opdracht). - -- Naast Kosten-kenmerkveld (van soort=282), tevens Leonardo- - -- nummer (soort=285) en Locatieteam (soort=461) bijwerken! - FOR rec IN c_pd + v_old_melding_key := -1; + FOR rec IN c_o2m LOOP - v_errormsg := 'Fout bijwerken Kosten-veld'; + v_errormsg := 'Fout bijwerken kenmerkveld'; BEGIN - IF rec.mkosten_kmkey IS NULL + IF rec.kmk IS NULL OR rec.kmw != rec.kow THEN - INSERT INTO mld_kenmerkmelding (mld_melding_key, - mld_kenmerk_key, - mld_kenmerkmelding_waarde) - VALUES (rec.mld_melding_key, - rec.mkosten_kkey, - rec.okosten_kow); - ELSE - UPDATE mld_kenmerkmelding - SET mld_kenmerkmelding_waarde = COALESCE (rec.okosten_kow, mld_kenmerkmelding_waarde) - WHERE mld_kenmerkmelding_key = rec.mkosten_kmkey; + IF v_old_melding_key = -1 + THEN + v_old_melding_key := rec.mld_melding_key; + ELSIF rec.mld_melding_key != v_old_melding_key + THEN + fac.trackaction ('#MLDUPD', v_old_melding_key, NULL, NULL, 'Opdracht2Melding-sync uitgevoerd'); + v_old_melding_key := rec.mld_melding_key; + END IF; + + IF rec.kmk IS NULL + THEN + INSERT INTO mld_kenmerkmelding (mld_melding_key, + mld_kenmerk_key, + mld_kenmerkmelding_waarde) + VALUES (rec.mld_melding_key, + rec.mkk, + rec.kow); + ELSE + UPDATE mld_kenmerkmelding + SET mld_kenmerkmelding_waarde = rec.kow + WHERE mld_kenmerkmelding_key = rec.kmk; + END IF; + COMMIT; END IF; - IF rec.mln_kmkey IS NULL AND rec.oln_kow IS NOT NULL - THEN - INSERT INTO mld_kenmerkmelding (mld_melding_key, - mld_kenmerk_key, - mld_kenmerkmelding_waarde) - VALUES (rec.mld_melding_key, - rec.mln_kkey, - rec.oln_kow); - ELSE - UPDATE mld_kenmerkmelding - SET mld_kenmerkmelding_waarde = COALESCE (rec.oln_kow, mld_kenmerkmelding_waarde) - WHERE mld_kenmerkmelding_key = rec.mln_kmkey; - END IF; - IF rec.mlt_kmkey IS NULL AND rec.olt_kow IS NOT NULL - THEN - INSERT INTO mld_kenmerkmelding (mld_melding_key, - mld_kenmerk_key, - mld_kenmerkmelding_waarde) - VALUES (rec.mld_melding_key, - rec.mlt_kkey, - rec.olt_kow); - ELSE - UPDATE mld_kenmerkmelding - SET mld_kenmerkmelding_waarde = COALESCE (rec.olt_kow, mld_kenmerkmelding_waarde) - WHERE mld_kenmerkmelding_key = rec.mlt_kmkey; - END IF; - 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.writelog (p_applname, 'E', v_errormsg, 'Plusdiensten-loop'); + fac.writelog (p_applname, 'E', rec.aanduiding || v_errormsg, 'Opdracht2Melding-loop'); COMMIT; END; END LOOP; + + IF v_old_melding_key != -1 + THEN + fac.trackaction ('#MLDUPD', v_old_melding_key, NULL, NULL, 'Opdracht2Melding-sync uitgevoerd'); + END IF; + COMMIT; EXCEPTION WHEN OTHERS THEN @@ -6080,7 +6018,7 @@ CREATE OR REPLACE VIEW djin_v_rap_mt_bron week, vestiging, vakgroeptype, - vakgroep, -- Of Meldingsoort(=Klacht?) igv. Vakgroeptype=Klantreactie (key=2) + vakgroep, aantal, acp_optijd, afm_optijd @@ -6097,8 +6035,7 @@ AS afm_optijd FROM (SELECT d.alg_district_omschrijving vt, sd.ins_srtdiscipline_omschrijving vakgroeptype, - DECODE (sd.ins_srtdiscipline_key, 2, COALESCE (smg.mld_stdmeldinggroep_oms, '???'), md.ins_discipline_omschrijving) - vakgroep, + md.ins_discipline_omschrijving vakgroep, m.mld_melding_key, m.mld_melding_acceptdatum_std, fac.gettrackingdate ('MLDACP', m.mld_melding_key) mldacp, @@ -6109,7 +6046,6 @@ AS mld_stdmelding sm, -- Ook verwijderde meldingen, mld_discipline md, -- en verwijderde vakgroepen, ins_srtdiscipline sd, -- en verwijderde vakgroeptypen, - mld_stdmeldinggroep smg, alg_locatie l, -- Ook verwijderde locaties, alg_district d -- en verwijderde districten! WHERE t.fac_srtnotificatie_key = 38 -- MLDAFM @@ -6126,7 +6062,6 @@ AS AND m.mld_stdmelding_key = sm.mld_stdmelding_key AND sm.mld_ins_discipline_key = md.ins_discipline_key AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key - AND sm.mld_stdmeldinggroep_key = smg.mld_stdmeldinggroep_key(+) AND m.mld_alg_locatie_key = l.alg_locatie_key AND l.alg_district_key = d.alg_district_key) GROUP BY TO_CHAR (mldafm, 'iyyy-iw') || vt || vakgroeptype || vakgroep,