ASDL#52274 Import glasmeldingen

svn path=/Customer/trunk/; revision=38129
This commit is contained in:
Sander Schepers
2018-06-07 14:37:55 +00:00
parent 201efe1b62
commit a1fde890b5

View File

@@ -2510,6 +2510,541 @@ AS
AND m.mld_melding_key = mafm.fac_tracking_refkey(+)
AND sd.ins_srtdiscipline_key = 141;
CREATE OR REPLACE PROCEDURE ASDL.ASDL_IMPORT_GLASBON (p_import_key IN NUMBER)
IS
c_fielddelimitor VARCHAR2 (1) := ';';
v_newline VARCHAR2 (1000);
v_header VARCHAR2 (1000);
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER;
v_ongeldig NUMBER (1);
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
v_count NUMBER :=1;
v_count_melding NUMBER :=1;
v_count_alglocatie NUMBER :=1;
v_count_weeknr NUMBER :=1;
v_count_stationsmanager NUMBER :=1;
-- De importvelden:
v_fac_import_key VARCHAR (256);
v_fac_import_index VARCHAR (256);
v_mld_stdmelding_key VARCHAR (256);
v_mld_stdmelding_oms VARCHAR (256);
v_alg_locatie_code VARCHAR (256);
v_alg_locatie_oms VARCHAR (256);
v_stationsmanager_key VARCHAR (256);
v_stationsmanager VARCHAR (256);
v_uitvoerjaar VARCHAR (256);
v_uitvoerweek VARCHAR (256);
v_uitvoerder VARCHAR (256);
v_serviceordernr VARCHAR (256);
v_onderwerp VARCHAR (256);
v_omschrijving VARCHAR (256);
v_datum_melding VARCHAR (256);
v_meldingnr VARCHAR (256);
CURSOR c
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
CURSOR l
IS
SELECT *
FROM alg_locatie;
BEGIN
DELETE FROM asdl_imp_glas;
COMMIT;
v_count_tot := 0;
v_count_import := 0;
header_is_valid := 0;
FOR rec IN c
LOOP
BEGIN
v_newline := rec.fac_imp_file_line;
v_fac_import_key := rec.fac_import_key;
v_fac_import_index := rec.fac_imp_file_index;
v_aanduiding := '';
v_errorhint := 'Fout bij opvragen te importeren rij';
v_ongeldig := 0;
v_count := 0;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_fielddelimitor, v_mld_stdmelding_key); -- Soort melding key
fac.imp_getfield (v_newline, c_fielddelimitor, v_mld_stdmelding_oms); -- Soort melding omschrijving
fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_locatie_code); -- Locatie key
fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_locatie_oms); -- Locatieomschrijving
fac.imp_getfield (v_newline, c_fielddelimitor, v_stationsmanager_key); -- Key Stationsmanager
fac.imp_getfield (v_newline, c_fielddelimitor, v_stationsmanager); -- Stationsmanager
fac.imp_getfield (v_newline, c_fielddelimitor, v_uitvoerjaar); -- Uitvoerjaar
fac.imp_getfield (v_newline, c_fielddelimitor, v_uitvoerweek); -- Uitvoerweek
fac.imp_getfield (v_newline, c_fielddelimitor, v_uitvoerder); -- Uitvoerder
fac.imp_getfield (v_newline, c_fielddelimitor, v_serviceordernr); -- Nummer serviceorder
fac.imp_getfield (v_newline, c_fielddelimitor, v_onderwerp); -- Onderwerp
fac.imp_getfield (v_newline, c_fielddelimitor, v_omschrijving); -- Omschrijving
v_aanduiding :=
'['
|| v_mld_stdmelding_key
|| '|'
|| v_alg_locatie_code
|| '|'
|| v_uitvoerjaar
|| '|'
|| v_uitvoerweek
|| '] ';
v_count_tot := v_count_tot + 1;
-- 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 (v_mld_stdmelding_key) = 'MELDING'
AND UPPER (v_mld_stdmelding_oms) = 'MELDINGOMSCHRIJVING'
AND UPPER (v_alg_locatie_code) = 'LOCATIECODE'
AND UPPER (v_alg_locatie_oms) = 'LOCATIE'
AND UPPER (v_stationsmanager_key) = 'SM-NR'
AND UPPER (v_stationsmanager) = 'STATIONSMANAGER'
AND UPPER (v_uitvoerjaar) = 'UITVOERJAAR'
AND UPPER (v_uitvoerweek) = 'UITVOERWEEK'
AND UPPER (v_uitvoerder) = 'UITVOERDER'
AND UPPER (v_serviceordernr) = 'NUMMER SERVICEORDER' --Lengte max 50
AND UPPER (v_onderwerp) = 'ONDERWERP' --Lengte max 80
AND UPPER (v_omschrijving) = 'OMSCHRIJVING' --Lengte max 4000
THEN
header_is_valid := 1;
END IF;
ELSE
--NOG TE MAKEN CONTROLES:
--uitvoerdatum (datum)
--Controle of de opgegeven stdmelding wel aanwezig is
SELECT COUNT ( * )
INTO v_count_melding
FROM mld_stdmelding sm
WHERE v_mld_stdmelding_key = sm.mld_stdmelding_key
AND sm.mld_ins_discipline_key = 241; -- Vakgroep GL-Glasbewassing
IF v_count_melding = 0
THEN v_ongeldig := 1;
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Meldingnummer bestaat niet',
'Melding wordt niet ingelezen!');
END IF;
--Controle of de opgegeven locatie (postcode) wel aanwezig is
SELECT COUNT ( * )
INTO v_count_alglocatie
FROM alg_locatie l
WHERE l.alg_locatie_postcode = v_alg_locatie_code;
IF v_count_alglocatie = 0
THEN v_ongeldig := 1;
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Locatie (postcode) bestaat niet',
'Melding wordt niet ingelezen!');
END IF;
--Controle of de opgegeven stationsmanager wel aanwezig is
SELECT COUNT ( * )
INTO v_count_stationsmanager
FROM asdl_v_list_locatiebeheerder lb
WHERE lb.prs_perslid_key = v_stationsmanager_key
AND lb.prs_perslid_verwijder IS NULL;
IF v_count_stationsmanager = 0
THEN v_ongeldig := 1;
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Stationsmanager bestaat niet',
'Melding wordt niet ingelezen!');
END IF;
IF LENGTH (v_serviceordernr) > 50
THEN
v_serviceordernr := SUBSTR (v_serviceordernr, 1, 50);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Nummer serviceorder te lang',
'Nummer serviceorder wordt afgebroken tot ['
|| v_serviceordernr
|| ']');
END IF;
IF LENGTH (v_onderwerp) > 80
THEN
v_onderwerp := SUBSTR (v_onderwerp, 1, 80);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Onderwerp te lang',
'Onderwerp wordt afgebroken tot ['
|| v_onderwerp
|| ']');
END IF;
IF LENGTH (v_omschrijving) > 4000
THEN
v_onderwerp := SUBSTR (v_omschrijving, 1, 4000);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Omschrijving te lang',
'Omschrijving wordt afgebroken tot ['
|| v_omschrijving
|| ']');
END IF;
-- Insert geformatteerde import record
IF header_is_valid = 1
AND v_ongeldig = 0
THEN
BEGIN
v_errorhint :=
'Fout bij toevoegen regel aan importtabel ASDL_IMP_GLAS';
INSERT INTO ASDL_IMP_GLAS (
fac_import_key,
fac_import_index,
fac_import_datum,
mld_stdmelding_key,
mld_stdmelding_oms,
alg_locatie_code,
alg_locatie_oms,
stationsmanager_key,
stationsmanager,
uitvoerdatum,
uitvoerjaar,
uitvoerweek,
uitvoerder,
serviceordernr,
onderwerp,
omschrijving)
VALUES (
v_fac_import_key,
v_fac_import_index,
SYSDATE,
v_mld_stdmelding_key,
v_mld_stdmelding_oms,
v_alg_locatie_code,
v_alg_locatie_oms,
v_stationsmanager_key,
v_stationsmanager,
next_day( to_date('04-jan-' || v_uitvoerjaar, 'dd-mm-yyyy' ) + (v_uitvoerweek-2)*7, 'maan'),
v_uitvoerjaar,
v_uitvoerweek,
v_uitvoerder,
v_serviceordernr,
v_onderwerp,
v_omschrijving);
COMMIT;
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
v_errorhint
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Ingelezen regel kan niet worden weggeschreven!');
COMMIT;
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',
'GLASBON/#ingelezen importregels: '
|| TO_CHAR (v_count_tot),
''
);
fac.imp_writelog (
p_import_key,
'S',
'GLASBON/#ongeldige niet ingelezen importregels incl header: '
|| TO_CHAR (v_count_tot - v_count_import),
''
);
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.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Inleesproces GLASBON afgebroken!');
END ASDL_IMPORT_GLASBON;
/
CREATE OR REPLACE PROCEDURE ASDL.ASDL_UPDATE_GLASBON (p_import_key IN NUMBER)
IS
BEGIN
DELETE FROM asdl_imp_glas2
WHERE asdl_imp_glas2.mld_melding_key IS NULL;
COMMIT;
INSERT INTO asdl_imp_glas2 (
fac_import_key,
fac_import_index,
fac_import_datum,
mld_stdmelding_key,
mld_stdmelding_oms,
alg_locatie_key,
alg_locatie_oms,
stationsmanager_key,
stationsmanager,
uitvoerdatum,
uitvoerweek,
uitvoermaand,
uitvoerjaar,
uitvoerder,
serviceordernr,
onderwerp,
omschrijving,
mld_melding_key)
SELECT fac_import_key,
fac_import_index,
fac_import_datum,
mld_stdmelding_key,
mld_stdmelding_oms,
l.alg_locatie_key,
alg_locatie_oms,
stationsmanager_key,
stationsmanager,
uitvoerdatum,
uitvoerweek,
uitvoermaand,
uitvoerjaar,
uitvoerder,
serviceordernr,
onderwerp,
omschrijving,
mld_melding_key
FROM asdl_imp_glas imp, alg_locatie l
WHERE l.alg_locatie_code = imp.alg_locatie_code;
END;
/
CREATE OR REPLACE PROCEDURE ASDL.ASDL_EXPORT_GLASBON_MELDING
(
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_filedir IN VARCHAR2,
p_filename IN VARCHAR2
)
AS
CURSOR cmld
IS
SELECT *
FROM asdl_imp_glas2
WHERE TRUNC(TO_DATE(uitvoerdatum)) <= SYSDATE+7
AND mld_melding_key IS NULL;
v_fac_import_key NUMBER(10);
v_fac_import_index NUMBER(10);
v_fac_import_datum DATE;
v_mld_melding_key NUMBER(10);
v_mld_stdmelding_key NUMBER(10);
v_mld_melding_datum DATE;
v_mld_error VARCHAR(256);
BEGIN
FOR recmld IN cmld
LOOP
BEGIN
INSERT INTO mld_melding (prs_perslid_key,
mld_melding_module,
mld_meldbron_key,
mld_alg_locatie_key,
mld_melding_datum,
mld_melding_omschrijving,
mld_stdmelding_key,
mld_melding_einddatum,
mld_melding_status,
mld_melding_spoed,
mld_melding_onderwerp)
VALUES (3,
'MLD',
6, --Bron = Systeem
recmld.alg_locatie_key,
SYSDATE,
recmld.omschrijving,
recmld.mld_stdmelding_key,
SYSDATE + 7,
2, --Status = Nieuw
3, --Prioriteit = Normaal
recmld.onderwerp)
RETURNING mld_melding_key, mld_stdmelding_key, mld_melding_datum INTO v_mld_melding_key, v_mld_stdmelding_key, v_mld_melding_datum;
INSERT INTO mld_kenmerkmelding
(mld_melding_key,
mld_kenmerk_key,
mld_kenmerkmelding_waarde)
SELECT v_mld_melding_key,
k.mld_kenmerk_key,
recmld.stationsmanager_key -- Waarde Stationsmanager uit import-tabel
FROM mld_stdmelding s, mld_kenmerk k, mld_srtkenmerk sk
WHERE k.mld_stdmelding_key = s.mld_stdmelding_key
AND k.mld_stdmelding_key = v_mld_stdmelding_key
AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND s.mld_ins_discipline_key = 241 -- Discipline Glasbewassing
AND mld_kenmerk_verwijder IS NULL
AND sk.mld_srtkenmerk_key = 121; -- Kenmerksoort Stationsmanager
INSERT INTO mld_kenmerkmelding
(mld_melding_key,
mld_kenmerk_key,
mld_kenmerkmelding_waarde)
SELECT v_mld_melding_key,
k.mld_kenmerk_key,
TO_CHAR(recmld.uitvoerdatum,'DD-MM-YYYY') -- Waarde Uitvoerdatum uit import-tabel
FROM mld_stdmelding s, mld_kenmerk k, mld_srtkenmerk sk
WHERE k.mld_stdmelding_key = s.mld_stdmelding_key
AND k.mld_stdmelding_key = v_mld_stdmelding_key
AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND s.mld_ins_discipline_key = 241 -- Discipline Glasbewassing
AND mld_kenmerk_verwijder IS NULL
AND sk.mld_srtkenmerk_key = 122; -- Kenmerksoort Uitvoerdatum
INSERT INTO mld_kenmerkmelding
(mld_melding_key,
mld_kenmerk_key,
mld_kenmerkmelding_waarde)
SELECT v_mld_melding_key,
k.mld_kenmerk_key,
recmld.uitvoerweek -- Waarde Uitvoerweek uit import-tabel
FROM mld_stdmelding s, mld_kenmerk k, mld_srtkenmerk sk
WHERE k.mld_stdmelding_key = s.mld_stdmelding_key
AND k.mld_stdmelding_key = v_mld_stdmelding_key
AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND s.mld_ins_discipline_key = 241 -- Discipline Glasbewassing
AND mld_kenmerk_verwijder IS NULL
AND sk.mld_srtkenmerk_key = 161; -- Kenmerksoort Uitvoerweek
INSERT INTO mld_kenmerkmelding
(mld_melding_key,
mld_kenmerk_key,
mld_kenmerkmelding_waarde)
SELECT v_mld_melding_key,
k.mld_kenmerk_key,
recmld.serviceordernr -- Waarde Nummer serviceorder uit import-tabel
FROM mld_stdmelding s, mld_kenmerk k, mld_srtkenmerk sk
WHERE k.mld_stdmelding_key = s.mld_stdmelding_key
AND k.mld_stdmelding_key = v_mld_stdmelding_key
AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND s.mld_ins_discipline_key = 241 -- Discipline Glasbewassing
AND mld_kenmerk_verwijder IS NULL
AND sk.mld_srtkenmerk_key = 181; -- Kenmerksoort Nummer serviceorder
INSERT INTO mld_kenmerkmelding
(mld_melding_key,
mld_kenmerk_key,
mld_kenmerkmelding_waarde)
SELECT v_mld_melding_key,
k.mld_kenmerk_key,
recmld.uitvoerder -- Waarde Uitvoerder uit import-tabel
FROM mld_stdmelding s, mld_kenmerk k, mld_srtkenmerk sk
WHERE k.mld_stdmelding_key = s.mld_stdmelding_key
AND k.mld_stdmelding_key = v_mld_stdmelding_key
AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND s.mld_ins_discipline_key = 241 -- Discipline Glasbewassing
AND mld_kenmerk_verwijder IS NULL
AND sk.mld_srtkenmerk_key = 201; -- Kenmerksoort Uitvoerder
INSERT INTO mld_kenmerkmelding
(mld_melding_key,
mld_kenmerk_key,
mld_kenmerkmelding_waarde)
SELECT v_mld_melding_key,
k.mld_kenmerk_key,
recmld.uitvoermaand -- Waarde Uitvoeringsmaand uit import-tabel
FROM mld_stdmelding s, mld_kenmerk k, mld_srtkenmerk sk
WHERE k.mld_stdmelding_key = s.mld_stdmelding_key
AND k.mld_stdmelding_key = v_mld_stdmelding_key
AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND s.mld_ins_discipline_key = 241 -- Discipline Glasbewassing
AND mld_kenmerk_verwijder IS NULL
AND sk.mld_srtkenmerk_key = 221; -- Kenmerksoort Uitvoeringsmaand
UPDATE asdl_imp_glas imp1
SET imp1.mld_melding_key = v_mld_melding_key,
imp1.mld_melding_datum = v_mld_melding_datum
WHERE imp1.fac_import_key = recmld.fac_import_key
AND imp1.fac_import_index = recmld.fac_import_index;
UPDATE asdl_imp_glas2 imp2
SET imp2.mld_melding_key = v_mld_melding_key,
imp2.mld_melding_datum = v_mld_melding_datum
WHERE imp2.fac_import_key = recmld.fac_import_key
AND imp2.fac_import_index = recmld.fac_import_index;
END;
END LOOP;
END;
/
------ payload end ------
SET DEFINE OFF