APGR#60608 -- Views en exports voor ESIS koppeling

svn path=/Customer/trunk/; revision=45290
This commit is contained in:
Robin Stoker
2019-12-19 13:39:42 +00:00
parent ecf1b674a2
commit 647a58c2d6

View File

@@ -406,6 +406,268 @@ BEGIN
END;
/
-- Import van statusupdates en kosten uit ESIS voor opdrachten van Explora EST
CREATE OR REPLACE PROCEDURE apgr_import_esis (p_import_key IN NUMBER)
AS
c_delim VARCHAR2 (1) := ';';
v_newline VARCHAR2 (1000); -- Input line
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
header_is_valid NUMBER := 0;
v_count_tot NUMBER (10) := 0;
v_count_import NUMBER (10) := 0;
v_ongeldig NUMBER (1) := 0;
-- De importvelden
v_opdrachtnummer VARCHAR2 (255);
v_status VARCHAR2 (255);
v_updatedatum VARCHAR2 (255);
v_kosten NUMBER (10);
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
-- Eerst de importtable leeg maken.
DELETE FROM apgr_imp_esis
WHERE imp_log_run <> p_import_key;
COMMIT;
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_errormsg := 'Fout opvragen te importeren regel';
v_aanduiding := '';
v_ongeldig := 0;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_delim, v_opdrachtnummer);
fac.imp_getfield (v_newline, c_delim, v_status);
fac.imp_getfield (v_newline, c_delim, v_updatedatum);
fac.imp_getfield (v_newline, c_delim, v_updatedatum);
v_aanduiding :=
'['
|| v_opdrachtnummer
|| '|'
|| v_status
|| '|'
|| v_updatedatum
|| '] ';
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
IF (header_is_valid = 0)
THEN
IF UPPER (TRIM (v_opdrachtnummer)) = 'OPDRACHTNUMMER'
AND UPPER (TRIM (v_status)) = 'STATUS'
AND UPPER (TRIM (v_updatedatum)) = 'UPDATEDATUM'
AND UPPER (TRIM (v_kosten)) = 'KOSTEN'
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
v_errormsg := 'Fout inlezen ticketnumber';
v_opdrachtnummer := TRIM (v_opdrachtnummer);
IF (v_opdrachtnummer IS NULL)
THEN
fac.imp_writelog (
p_import_key, 'W', v_aanduiding || v_errormsg,
'Opdrachtnummer ongeldig; regel wordt overgeslagen!');
v_ongeldig := 1;
END IF;
--
v_errormsg := 'Fout inlezen updatedatum';
v_updatedatum := TRIM (v_updatedatum);
IF (fac.safe_to_date (v_updatedatum, 'dd-mm-yyyy hh24:mi:ss') IS NULL)
THEN
fac.imp_writelog (
p_import_key, 'W', v_aanduiding || v_errormsg,
'Updatedatum ongeldig; regel wordt overgeslagen!');
v_ongeldig := 1;
END IF;
-- Insert geformatteerde import record
IF (v_ongeldig = 0)
THEN
BEGIN
v_errormsg := 'Fout bij wegschrijven importregel';
INSERT INTO apgr_imp_esis (imp_log_run,
opdrachtnummer,
status,
updatedatum,
kosten)
VALUES (p_import_key,
v_opdrachtnummer,
v_status,
fac.safe_to_date (v_updatedatum, 'dd-mm-yyyy hh24:mi:ss'),
v_kosten);
v_count_import := v_count_import + 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.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, '');
END;
END IF;
END IF;
END;
END LOOP;
IF (header_is_valid = 0)
THEN
fac.imp_writelog (p_import_key, 'E',
'Ongeldig importbestand',
'Geen header of header niet volgens specificatie!');
ELSE
fac.imp_writelog (
p_import_key, 'S',
'Inleesproces/#ingelezen importregels: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (
p_import_key, 'S',
'Inleesproces/#ongeldige niet ingelezen importregels: '
|| TO_CHAR (v_count_tot - v_count_import),
'');
END IF;
DELETE FROM fac_imp_file
WHERE fac_import_key = p_import_key;
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.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg,
'Inleesproces updates uit ESIS afgebroken!');
END;
/
CREATE OR REPLACE PROCEDURE apgr_update_esis (p_import_key IN NUMBER)
AS
-- Cursor loopt over alle ingelezen updateregels uit ESIS
CURSOR c1
IS
SELECT opdrachtnummer, -- Opdrachtnummer met of zonder prefix
DECODE (fac.safe_to_number (SUBSTR (opdrachtnummer, 1, 1)),
NULL, TRIM (SUBSTR (opdrachtnummer, 2)),
opdrachtnummer)
opdr_id,
status,
updatedatum,
kosten
FROM apgr_imp_esis
WHERE imp_log_run = p_import_key
ORDER BY 4, 2;
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
v_count_tot NUMBER (10);
v_mld_key NUMBER (10);
v_opdr_key NUMBER (10);
v_opdr_status NUMBER (10);
BEGIN
-- Loop door alle ingelezen updateregels uit ESIS en verwerk deze.
v_count_tot := 0;
FOR rec IN c1
LOOP
BEGIN
v_aanduiding := '[' || rec.opdrachtnummer || ']';
v_count_tot := v_count_tot + 1;
v_mld_key := -1;
v_opdr_key := -1;
v_errormsg := 'Fout bepalen opdracht.';
SELECT o.mld_melding_key, o.mld_opdr_key, so.mld_statusopdr_key
INTO v_mld_key, v_opdr_key, v_opdr_status
FROM mld_opdr o, mld_statusopdr so
WHERE o.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr = rec.opdr_id
AND UPPER (so.mld_statusopdr_omschrijving) = UPPER (rec.status);
-- Alleen iets doen als melding/opdracht succesvol is bepaald.
IF (v_mld_key > 0 AND v_opdr_key > 0)
THEN
-- Als er kosten zijn dan voeren we die op.
IF (rec.kosten IS NOT NULL)
THEN
v_errormsg := 'Fout bijwerken kosten.';
UPDATE mld_opdr
SET mld_opdr_kosten = rec.kosten
WHERE mld_opdr_key = v_opdr_key;
END IF;
-- Update opdrachtstatus
v_errormsg := 'Fout verwerken opdrachtstatus.';
MLD.setopdrachtstatus (v_opdr_key, v_opdr_status, NULL);
COMMIT;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg,
'Fout verwerken opdrachtupdates uit ESIS.');
END;
END LOOP;
fac.imp_writelog (
p_import_key, 'S',
'Proces: '
|| TO_CHAR (v_count_tot)
|| ' opdrachtupdates uit ESIS verwerkt.',
'');
COMMIT;
END;
/
-- Vanaf hier rapportages
-- Deze voegt de FCLT_3D_GEBOUW_KEY toe aan de meldingen UDR
@@ -1850,6 +2112,170 @@ AS
UNION ALL
SELECT '</PurchaseOrderCollection>', 3 FROM DUAL;
-- Views t.b.v. koppeling met EST ESIS
CREATE OR REPLACE VIEW apgr_v_rap_opdrest
(
opdr_key,
vestiging_id,
machine_code,
onderwerp,
omschrijving,
melder,
melder_mobiel,
opdrachtnummer,
opdrachtdatum
)
AS
SELECT o.mld_opdr_key,
(SELECT ak.alg_onrgoedkenmerk_waarde
FROM alg_onrgoedkenmerk ak
WHERE ak.alg_kenmerk_key = 1000
AND ak.alg_onrgoed_key = og.alg_gebouw_key)
vestiging_id,
(SELECT ins_kenmerkdeel_waarde
FROM ins_kenmerkdeel
WHERE ins_deel_key = ob.ins_deel_key AND ins_kenmerk_key = 32)
|| ' / ' ||
(SELECT ins_kenmerkdeel_waarde
FROM ins_kenmerkdeel
WHERE ins_deel_key = ob.ins_deel_key AND ins_kenmerk_key = 31)
machine_code,
o.mld_opdr_omschrijving,
o.mld_opdr_opmerking,
(SELECT prs_perslid_naam_full
FROM prs_v_perslid_fullnames_all pf
WHERE pf.prs_perslid_key = m.prs_perslid_key)
melder,
(SELECT p.prs_perslid_mobiel
FROM prs_perslid p
WHERE p.prs_perslid_key = m.prs_perslid_key)
mobiel,
i.ins_srtdiscipline_prefix
|| TO_CHAR (m.mld_melding_key)
|| '/'
|| o.mld_opdr_bedrijfopdr_volgnr
opdrnr,
o.mld_opdr_datumbegin
FROM mld_opdr o,
mld_melding m,
mld_stdmelding std,
prs_bedrijf b,
ins_srtdiscipline i,
mld_discipline md,
alg_locatie al,
ins_deel ob,
mld_melding_object mmo,
alg_v_allonrgoed_gegevens og,
( SELECT MAX (fac_tracking_refkey) key,
MAX (fac_tracking_datum) datum
FROM fac_tracking
WHERE fac_srtnotificatie_key = 70 -- Toegekend (nog voor ORDVER)
GROUP BY fac_tracking_refkey) track
WHERE o.mld_melding_key = m.mld_melding_key(+)
AND m.mld_melding_key = mmo.mld_melding_key(+)
AND ob.ins_deel_key = mmo.ins_deel_key
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = md.ins_discipline_key
AND md.ins_srtdiscipline_key = i.ins_srtdiscipline_key
AND o.mld_uitvoerende_keys = b.prs_bedrijf_key
AND m.mld_alg_locatie_key = al.alg_locatie_key
AND m.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys
AND b.prs_bedrijf_key = 525 -- Explora EST
AND o.mld_opdr_key = track.key
AND track.datum > SYSDATE - INTERVAL '15' MINUTE;
CREATE OR REPLACE VIEW apgr_v_export_est_xml
(
result,
result_order,
ticket
)
AS
SELECT '<esisexplora_explora xmlns:tabel="ticket">',
0,
'910051_'
|| TO_CHAR (SYSDATE, 'YY-MM-DD HH24MI')
|| ' '
|| o.opdr_key
FROM apgr_v_rap_opdrest o
UNION ALL
SELECT '<ticket>'
|| '<sync_key>d5640150-3f58-11e9-af79-080027f683cc</sync_key>'
|| '<ticket_origin>3</ticket_origin>'
|| '<ticket_soort>0</ticket_soort>'
|| '<ticket_type>0</ticket_type>'
|| '<ticket_status>0</ticket_status>'
|| '<klanten_id>'
|| o.vestiging_id
|| '</klanten_id>'
|| '<machiene_klanten_referentie>'
|| o.machine_code
|| '</machiene_klanten_referentie>'
|| '<ticket_melding>'
|| o.onderwerp
|| '. '
|| o.omschrijving
|| '</ticket_melding>'
|| '<ticket_contactpersoon>'
|| o.melder
|| '</ticket_contactpersoon>'
|| '<ticket_telefoonnummer>'
|| o.melder_mobiel
|| '</ticket_telefoonnummer>'
|| '<ticket_opdrachtnummer>'
|| o.opdrachtnummer
|| '</ticket_opdrachtnummer>'
|| '<ticket_datum>'
|| o.opdrachtdatum
|| '</ticket_datum>'
|| '</ticket>',
1,
'910051_'
|| TO_CHAR (SYSDATE, 'YY-MM-DD HH24MI')
|| ' '
|| o.opdr_key
FROM apgr_v_rap_opdrest o
UNION ALL
SELECT '</esisexplora_explora>',
2,
'910051_'
|| TO_CHAR (SYSDATE, 'YY-MM-DD HH24MI')
|| ' '
|| o.opdr_key
FROM apgr_v_rap_opdrest o;
-- Procedure voor het inserten van tracking bij versturen XML naar ESIS.
CREATE OR REPLACE PROCEDURE apgr_export_esis
AS
CURSOR c1
IS
SELECT opdr_key,
vestiging_id,
machine_code,
onderwerp,
omschrijving,
melder,
melder_mobiel,
opdrachtnummer,
opdrachtdatum
FROM apgr_v_rap_opdrest;
BEGIN
FOR rec IN c1
LOOP
INSERT INTO fac_tracking (fac_tracking_datum,
fac_srtnotificatie_key,
fac_tracking_refkey,
fac_tracking_oms,
prs_perslid_key)
VALUES (SYSDATE,
85,
rec.opdr_key,
'Opdracht verzonden via koppeling ESIS.',
3);
END LOOP;
END;
/
-- En nu de CUST notificaties
-- Mail naar geselecteerd directielid voor nieuwe medewerker