PLAT#52406: MJOB: Import van operationele resultaten

svn path=/Customer/trunk/; revision=37983
This commit is contained in:
Marcel Bourseau
2018-05-29 14:39:13 +00:00
parent c83eace851
commit d8d870d8dd
2 changed files with 372 additions and 0 deletions

View File

@@ -2399,6 +2399,350 @@ END plat_update_srtdeel_mlddisc;
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- PLAT#52406: MJOB: Import van operationele resultaten (door MJOB-er zelf te doen?)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CREATE OR REPLACE PROCEDURE plat_import_mjob_results (p_import_key IN NUMBER)
AS
c_fielddelimitor VARCHAR2 (1) := ';';
v_newline VARCHAR2 (1000); -- Input line
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 := 0;
v_ongeldig NUMBER (1);
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
v_count NUMBER;
-- De importvelden:
v_ins_deelsrtcontrole_key VARCHAR2(1000);
v_uitgevoerd VARCHAR2(1000);
v_planjaar VARCHAR2(1000);
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
v_errorhint := 'plat_import_mjob_results';
v_count_tot := 0;
v_count_import := 0;
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_aanduiding := '';
v_errorhint := 'Fout bij opvragen te importeren rij';
v_ongeldig := 0;
-- Lees alle veldwaarden
-- 01 - v_ins_deelsrtcontrole_key
v_aanduiding := 'Probleem bij v_ins_deelsrtcontrole_key: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 1, v_ins_deelsrtcontrole_key);
v_ins_deelsrtcontrole_key := TRIM(v_ins_deelsrtcontrole_key);
-- 02 - v_uitgevoerd
v_aanduiding := 'Probleem bij v_uitgevoerd: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 2, v_uitgevoerd);
v_uitgevoerd := TRIM(v_uitgevoerd);
-- 03 - v_planjaar
v_aanduiding := 'Probleem bij v_planjaar: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 3, v_planjaar);
v_planjaar := TRIM(v_planjaar);
v_aanduiding :=
'['
|| v_ins_deelsrtcontrole_key
|| '-'
|| v_uitgevoerd
|| '-'
|| v_planjaar
|| '] ';
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop. Ik controleer daarbij de volgende kolommen:
-- 1. Id
-- 2. Uitgevoerd
-- 3. Planjaar
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
IF (header_is_valid = 0)
THEN
IF UPPER (v_ins_deelsrtcontrole_key) = 'ID' AND
UPPER (v_uitgevoerd) = 'UITGEVOERD' AND
UPPER (v_planjaar) = 'PLANJAAR'
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
v_errorhint := 'Ongeldige ID (moet getal van maximaal 10 cijfers zijn)';
-- ID moet vul gevuld zijn, en ook een number (getal) zijn, van maximaal 10 cijfers
IF (v_ins_deelsrtcontrole_key IS NULL) OR (fac.safe_to_number(v_ins_deelsrtcontrole_key) IS NULL) OR (LENGTH (v_ins_deelsrtcontrole_key) > 10)
THEN
fac.imp_writelog (p_import_key, 'W', v_aanduiding, v_errorhint || ' - Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
--
v_errorhint := 'Ongeldige kolom Uitgevoerd (moet J (=Ja) of N (=Nee) zijn)';
-- Uitgevoerd moet J of N zijn (Leeg betekent onbekend, regel wordt dan overgeslagen)
IF (v_uitgevoerd IS NULL) OR (v_uitgevoerd <> 'J') AND (v_uitgevoerd <> 'N')
THEN
fac.imp_writelog (p_import_key, 'W', v_aanduiding, v_errorhint || ' - Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
--
v_errorhint := 'Ongeldige kolom Planjaar (moet leeg of geldige jaartal van 4 cijfers in de toekomst zijn, b.v. 2030)';
-- Planjaar of leeg of jaartal (jjjj) in de toekomst zijn
IF (v_planjaar IS NOT NULL) AND ((LENGTH (v_planjaar) <> 4) OR (fac.safe_to_date('1-1-' || v_planjaar, 'dd-mm-yyyy') IS NULL) OR (fac.safe_to_date('1-1-' || v_planjaar, 'dd-mm-yyyy') < SYSDATE))
THEN
fac.imp_writelog (p_import_key, 'W', v_aanduiding, v_errorhint || ' - Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
--
IF (v_ongeldig = 0)
THEN
BEGIN
v_errorhint :=
'Fout bij toevoegen regel aan importtabel plat_imp_mjob_results';
IF v_planjaar IS NULL
THEN
INSERT INTO plat_imp_mjob_results
(
fac_import_key,
ins_deelsrtcontrole_key,
uitgevoerd
)
SELECT p_import_key, v_ins_deelsrtcontrole_key, DECODE(v_uitgevoerd,'J',1,'N',0,0)FROM DUAL;
ELSE
INSERT INTO plat_imp_mjob_results
(
fac_import_key,
ins_deelsrtcontrole_key,
uitgevoerd,
planjaar
)
SELECT p_import_key, v_ins_deelsrtcontrole_key, DECODE(v_uitgevoerd,'J',1,'N',0,0), fac.safe_to_date('1-1-' || v_planjaar, 'dd-mm-yyyy') FROM DUAL;
END IF;
v_count_import := v_count_import + 1;
COMMIT;
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,
'E',
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! Header kolommen: 1. Id, 2. Uitgevoerd, 3. Planjaar'
);
ELSE
fac.imp_writelog (p_import_key,
'S',
'IMPORT MJOB_RESULTS: aantal ingelezen regels: '
|| TO_CHAR (v_count_tot)
|| ' / aantal geldige regels: '
|| TO_CHAR (v_count_import)
,
''
);
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'Error ' || oracle_err_num || '/' || oracle_err_mes;
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
END plat_import_mjob_results;
/
CREATE OR REPLACE PROCEDURE plat_update_mjob_results (
p_import_key IN NUMBER
)
IS
CURSOR c1
IS
SELECT *
FROM plat_imp_mjob_results
WHERE fac_import_key = p_import_key;
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
v_ins_deelsrtcontrole_key NUMBER(10);
v_uitgevoerd NUMBER(10);
v_planjaar DATE;
BEGIN
v_count_tot := 0;
v_count_import := 0;
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_aanduiding :=
'['
|| rec.ins_deelsrtcontrole_key
|| '-'
|| rec.uitgevoerd
|| '-'
|| rec.planjaar
|| '] ';
v_errorhint := 'ID ins_deelsrtcontrole_key niet gevonden in ins_deelsrtcontrole (is ongeldig), regel wordt overgeslagen';
SELECT ins_deelsrtcontrole_key
INTO v_ins_deelsrtcontrole_key
FROM ins_deelsrtcontrole
WHERE ins_deelsrtcontrole_key = rec.ins_deelsrtcontrole_key
AND ins_scenario_key = 1;
v_errorhint := 'ID ins_deelsrtcontrole_key is niet geaccordeerd cq. opgenomen in de begroting, regel wordt overgeslagen';
SELECT ins_deelsrtcontrole_key
INTO v_ins_deelsrtcontrole_key
FROM ins_deelsrtcontrole
WHERE ins_deelsrtcontrole_key = rec.ins_deelsrtcontrole_key
AND ins_scenario_key = 1
AND ins_deelsrtcontrole_status = 2;
IF rec.uitgevoerd = 1
THEN
-- ins_controlemode_key 1 = Gereed
v_errorhint := 'Update ins_deelsrtcontrole niet gelukt, regel wordt overgeslagen';
UPDATE ins_deelsrtcontrole
SET ins_deelsrtcontrole_status = 6,
ins_deelsrtcontrole_datum = fac.safe_to_date('1-1-' || to_char(SYSDATE,'yyyy'),'dd-mm-yyyy'),
ins_controlemode_key = 1
WHERE ins_deelsrtcontrole_key = rec.ins_deelsrtcontrole_key;
-- Netjes uitgevoerd volgens begroting, volgende cyclus wordt vanzelf berekend obv ins_deelsrtcontrole_datum...
ELSE
-- ins_controlemode_key 2 = Niet uitgevoerd
v_errorhint := 'Update ins_deelsrtcontrole niet gelukt, regel wordt overgeslagen';
UPDATE ins_deelsrtcontrole
SET ins_deelsrtcontrole_status = 6,
ins_deelsrtcontrole_datum = fac.safe_to_date('1-1-' || to_char(SYSDATE,'yyyy'),'dd-mm-yyyy'),
ins_controlemode_key = 2
WHERE ins_deelsrtcontrole_key = rec.ins_deelsrtcontrole_key;
-- Niet uitgevoerd volgens begroting, volgende cyclus is komend jaar of indien planjaar is gevuld dan het planjaar (overrule)...
-- Dus een nieuw plan-record ins_deelsrtcontrole, met exact dezelfde gegevens
v_errorhint := 'Insert ins_deelsrtcontrole_key niet gelukt, regel wordt overgeslagen';
INSERT INTO ins_deelsrtcontrole (ins_deel_key, ins_srtcontrole_key, ins_deelsrtcontrole_plandatum, ins_deelsrtcontrole_datum_org, ins_deelsrtcontrole_status, prs_perslid_key, ins_scenario_key)
SELECT ins_deel_key, ins_srtcontrole_key, DECODE(rec.planjaar, NULL, fac.safe_to_date('1-1-' || (to_char(SYSDATE,'yyyy') + 1),'dd-mm-yyyy'), rec.planjaar), DECODE(rec.planjaar, NULL, fac.safe_to_date('1-1-' || (to_char(SYSDATE,'yyyy') + 1),'dd-mm-yyyy'), rec.planjaar), 0, prs_perslid_key, 1
FROM ins_deelsrtcontrole
WHERE ins_deelsrtcontrole_key = rec.ins_deelsrtcontrole_key;
END IF;
v_count_import := v_count_import + 1;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint
);
COMMIT;
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'UPDATE MJOB_RESULTS: aantal ingelezen regels: '
|| TO_CHAR (v_count_tot)
|| ' / aantal geldige regels: '
|| TO_CHAR (v_count_import)
,
''
);
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint
);
COMMIT;
END plat_update_mjob_results;
/
------ payload end ------

View File

@@ -266,6 +266,20 @@ WHERE ins_discipline_module = 'CTR'
AND ins_discipline_omschrijving <> 'Meerjaren Onderhoud'
AND ins_discipline_verwijder IS NULL;
-- Sequence ins_s_ins_controlemode_key begint al met 10 (Facilitor INI script, dus 1 en 2 zijn mooi vrij).
INSERT INTO ins_controlemode (ins_controlemode_key, ins_controlemode_oms, ins_controlemode_success, ins_srtcontrole_type)
SELECT 1, 'Gereed', 1, ins_discipline_key FROM ins_tab_discipline
WHERE ins_discipline_module = 'CTR'
AND ins_discipline_omschrijving = 'Meerjaren Onderhoud'
AND ins_discipline_verwijder IS NULL;
INSERT INTO ins_controlemode (ins_controlemode_key, ins_controlemode_oms, ins_controlemode_success, ins_srtcontrole_type)
SELECT 2, 'Niet uitgevoerd', NULL, ins_discipline_key FROM ins_tab_discipline
WHERE ins_discipline_module = 'CTR'
AND ins_discipline_omschrijving = 'Meerjaren Onderhoud'
AND ins_discipline_verwijder IS NULL;
--Autorisatiegroep _default (fac_groep_key = 1) krijgt wat standaard rechten, w.o. PROFIL
INSERT INTO fac_groeprechten (fac_groep_key, fac_functie_key,
@@ -370,6 +384,20 @@ SELECT 'SRTDEEL_MLDDISC', 'Aanvullen van combinaties objectsoorten x standaard m
FROM fac_functie
WHERE fac_functie_code = 'WEB_PRSSYS';
-- PLAT#52406: MJOB: Import van operationele resultaten (door MJOB-er zelf te doen?)
CREATE TABLE plat_imp_mjob_results
(
fac_import_key NUMBER(10),
ins_deelsrtcontrole_key NUMBER(10),
uitgevoerd NUMBER(10),
planjaar DATE
);
INSERT INTO fac_import_app (fac_import_app_code, fac_import_app_oms, fac_functie_key, fac_import_app_charset, fac_import_app_prefix)
SELECT 'MJOB_RESULTS', 'Verwerken van de operationele resultaten in Plato', fac_functie_key, 'UTF-8', 'PLAT'
FROM fac_functie
WHERE fac_functie_code = 'WEB_CTRUSE';
COMMIT;