FZKH#87266 -- Implementatie Import MT assets en inspecties

svn path=/Customer/trunk/; revision=68936
This commit is contained in:
Norbert Wassink
2025-05-07 14:50:06 +00:00
parent 02f45b6689
commit 42a48309e9

View File

@@ -28,6 +28,180 @@ SET DEFINE OFF
------ payload begin ------
CREATE OR REPLACE PROCEDURE FZKH_IMPORT_INSPECTIES(p_import_key IN NUMBER)
AS
BEGIN
fac_import_inspectie(p_import_key);
END;
/
CREATE OR REPLACE PROCEDURE FZKH_UPDATE_INSPECTIES(p_import_key IN NUMBER)
AS
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER;
v_count_error NUMBER (10);
v_count NUMBER (10);
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
v_ongeldig NUMBER (1);
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_ins_srtinstallatie_key NUMBER (10);
v_ins_srtcontrole_niveau VARCHAR (1);
v_week_bits NUMBER (10);
v_maand_bits NUMBER (10);
v_ctr_ins_discipline_key NUMBER;
CURSOR c_inspecties
IS
SELECT * FROM fac_imp_inspectie;
-- MAIN
BEGIN
FOR rec_ins IN c_inspecties
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_aanduiding :=
rec_ins.ins_discipline_omschrijving
|| ' - '
|| rec_ins.ins_srtgroep_omschrijving
|| '-'
|| rec_ins.ins_srtdeel_code;
v_errorhint := 'Fout bij bepalen discipline';
IF rec_ins.ins_discipline_omschrijving IS NULL
THEN
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding,
'Discipline mag niet leeg zijn: inspectie wordt niet toegevoegd.');
ELSE
SELECT ins_discipline_key, 'D'
INTO v_ins_srtinstallatie_key, v_ins_srtcontrole_niveau
FROM ins_tab_discipline
WHERE UPPER (ins_discipline_omschrijving) =
UPPER (rec_ins.ins_discipline_omschrijving)
AND ins_discipline_module = 'INS'
AND ins_discipline_verwijder IS NULL;
IF rec_ins.ins_srtgroep_omschrijving IS NOT NULL
THEN
SELECT ins_srtgroep_key, 'G'
INTO v_ins_srtinstallatie_key, v_ins_srtcontrole_niveau
FROM ins_srtgroep
WHERE UPPER (ins_srtgroep_omschrijving) =
UPPER (rec_ins.ins_srtgroep_omschrijving)
AND ins_srtgroep_module = 'INS'
AND ins_srtgroep_verwijder IS NULL
AND ins_discipline_key = v_ins_srtinstallatie_key;
IF rec_ins.ins_srtdeel_code IS NOT NULL
THEN
SELECT ins_srtdeel_key, 'S'
INTO v_ins_srtinstallatie_key, v_ins_srtcontrole_niveau
FROM ins_srtdeel
WHERE UPPER (ins_srtdeel_code) = UPPER (rec_ins.ins_srtdeel_code)
AND ins_srtdeel_module = 'INS'
AND ins_srtdeel_verwijder IS NULL
AND ins_srtgroep_key = v_ins_srtinstallatie_key;
END IF;
END IF;
-- Alleen de gezette bits van de dagen van de week.
SELECT COALESCE(BITAND(rec_ins.ins_srtcontrole_bits, 127), 0)
INTO v_week_bits
FROM DUAL;
-- Alleen de gezette bits van de y-ste xxxdag van de maand.
SELECT COALESCE(BITAND(rec_ins.ins_srtcontrole_bits, 256 + 512 + 1024) / 256, 0)
INTO v_maand_bits
FROM DUAL;
v_aanduiding:='Taak categorie '||rec_ins.ins_srtcontrole_info||' niet gevonden';
SELECT ctr_ins_discipline_key
INTO v_ctr_ins_discipline_key
FROM ctr_disc_params csp,
ctr_discipline i
WHERE i.ins_discipline_omschrijving=rec_ins.ins_srtcontrole_info
AND i.ins_discipline_verwijder IS NULL
AND csp.ctr_ins_discipline_key = i.ins_discipline_key
AND csp.ctr_disc_params_controle_type=1 ;
IF rec_ins.ins_srtcontrole_omschrijving IS NOT NULL AND
rec_ins.ins_srtcontrole_periode IS NOT NULL AND
((rec_ins.ins_srtcontrole_eenheid = 0)
OR (rec_ins.ins_srtcontrole_eenheid > 0 AND MOD(rec_ins.ins_srtcontrole_periode, 1) = 0)) AND
rec_ins.ins_srtcontrole_eenheid IS NOT NULL AND
rec_ins.ins_srtcontrole_mode IS NOT NULL AND
(rec_ins.ins_srtcontrole_mode = 1 OR (1=1))
THEN
INSERT INTO ins_srtcontrole (ins_srtinstallatie_key,
ins_srtcontrole_niveau,
ins_srtcontrole_omschrijving,
ins_srtcontrole_info,
ins_srtcontrole_periode,
ins_srtcontrole_eenheid,
ins_srtcontrole_mode,
ins_srtcontrole_bits,
ctr_discipline_key
)
VALUES (v_ins_srtinstallatie_key,
v_ins_srtcontrole_niveau,
rec_ins.ins_srtcontrole_omschrijving,
rec_ins.ins_srtcontrole_info,
rec_ins.ins_srtcontrole_periode,
rec_ins.ins_srtcontrole_eenheid,
rec_ins.ins_srtcontrole_mode,
rec_ins.ins_srtcontrole_bits,
v_ctr_ins_discipline_key
);
ELSE
IF rec_ins.ins_srtcontrole_mode = 0 AND (v_week_bits = 0 OR v_maand_bits = 0)
THEN v_errorhint := 'Het verplichte veld "Moment" is niet (goed) ingevuld: inspectie wordt niet toegevoegd.';
ELSIF rec_ins.ins_srtcontrole_eenheid > 0 AND MOD(rec_ins.ins_srtcontrole_periode, 1) > 0
THEN v_errorhint := 'Periode moet een geheel getal zijn voor dagelijkse, wekelijkse, maandelijkse en jaarlijkse taken: inspectie wordt niet toegevoegd.';
ELSE v_errorhint := '<EFBFBD><EFBFBD>n of meerdere van de verplichte velden "Omschrijving", "Period", "Eenheid" of "Mode" zijn niet ingevuld: inspectie wordt niet toegevoegd.';
END IF;
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding,
v_errorhint);
END IF;
END IF;
EXCEPTION
WHEN OTHERS
THEN
v_count_error := v_count_error + 1;
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;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 150);
v_errormsg :=
v_errormsg || 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
'Importproces inspecties afgebroken!',
v_errormsg);
END FZKH_UPDATE_INSPECTIES;
/
CREATE OR REPLACE PROCEDURE FZKH_IMPORT_SLEUTELS (p_import_key IN NUMBER)
AS
@@ -48,7 +222,7 @@ BEGIN
SELECT COUNT(*)
INTO v_count
FROM prs_perslid p
WHERE p.prs_perslid_nr = rec.prs_perslid_matchcode
WHERE p.prs_perslid_nr = rec.prs_perslid_matchwaarde
AND p.prs_perslid_verwijder IS NULL
AND ( p.prs_perslid_inactief IS NULL
OR p.prs_perslid_inactief > SYSDATE);
@@ -277,17 +451,20 @@ AS
fac_imp_csv_col34 ins_kenm_type,
fac_imp_csv_col35 ins_kenm_serienr,
fac_imp_csv_col36 ins_kenm_bouwjaar,
fac_imp_csv_col37 ins_kenm_leverancier,
fac_imp_csv_col38 ins_kenm_service_leverancier,
fac_imp_csv_col38 ins_kenm_leverancier,
fac_imp_csv_col40 ins_kenm_service_leverancier,
fac_imp_csv_col42 ins_kenm_fabrikant,
fac_imp_csv_col43 ins_kenm_mdd_clas,
fac_imp_csv_col46 ins_kenm_garantie,
fac_imp_csv_col50 ins_kenm_status,
fac_imp_csv_col12 ins_kenm_aanschafprijs
fac_imp_csv_col12 ins_kenm_aanschafprijs,
fac.safe_to_date(fac_imp_csv_col27,'DD-MM-YYYY') ins_kenm_instaldatum,
fac_imp_csv_col47 ins_onderhoud_datum
FROM fac_imp_csv
WHERE fac_import_key=p_import_key
ORDER BY fac_imp_csv_key;
v_locatie_code VARCHAR2(10);
v_gebouw_code VARCHAR2(10);
@@ -319,7 +496,7 @@ BEGIN
END IF;
IF rec.ins_kenm_ruimtenr IS NOT NULL
THEN
v_huidige_locatie:='Locatie||0='||rec.ins_kenm_ruimtenr||'-'||rec.ins_kenm_ruimtenaam;
v_huidige_locatie:='Locatie|0='||rec.ins_kenm_ruimtenr||'-'||rec.ins_kenm_ruimtenaam;
ELSE
v_huidige_locatie:='';
END IF;
@@ -329,10 +506,12 @@ BEGIN
ins_srtdeel_omschrijving,
ins_deel_omschrijving,
ins_deel_opmerking,
ins_deel_aanmaak,
alg_locatie_code,
alg_gebouw_code,
alg_verdieping_volgnr,
alg_ruimte_nr,
ins_deel_aantal,
ins_kenmerkwaarde1,
ins_kenmerkwaarde2,
ins_kenmerkwaarde3,
@@ -345,17 +524,20 @@ BEGIN
ins_kenmerkwaarde10,
ins_kenmerkwaarde11,
ins_kenmerkwaarde12,
ins_kenmerkwaarde13)
ins_kenmerkwaarde13,
ins_kenmerkwaarde14)
VALUES (rec.ins_discipline,
rec.ins_groep,
SUBSTR(rec.ins_srtdeel_code,1,8),
rec.ins_srtdeel_omschrijving,
rec.ins_deel_omschrijving,
rec.ins_deel_opmerking,
rec.ins_kenm_instaldatum,
v_locatie_code,
v_gebouw_code,
v_verdieping_nr,
v_ruimte_nr,
1,
'Eigenaar|0='||rec.ins_kenm_eigenaar,
v_huidige_locatie,
'Model|0='||rec.ins_kenm_model,
@@ -365,10 +547,11 @@ BEGIN
'Leverancier|0='||rec.ins_kenm_leverancier,
'ServiceLeverancier|0='||rec.ins_kenm_service_leverancier,
'Fabrikant|0='||rec.ins_kenm_fabrikant,
'MDD-Classificatie|0='||rec.ins_kenm_mdd_clas,
'MDD-Classificatie|0='||TRIM(rec.ins_kenm_mdd_clas),
'Einde Garantie|0='||rec.ins_kenm_garantie,
'Status|0='||rec.ins_kenm_status,
'Aanschafprijs|0='||rec.ins_kenm_aanschafprijs
'Aanschafprijs|0='||TRIM(rec.ins_kenm_aanschafprijs),
'Installatie datum|0='||rec.ins_kenm_instaldatum
);
END IF;
END LOOP;
@@ -387,10 +570,39 @@ AS
FROM fac_imp_csv
WHERE fac_import_key=p_import_key
ORDER BY fac_imp_csv_key;
CURSOR sel_controle
IS
SELECT fac_imp_csv_col08 ins_deel_omschrijving,
fac_imp_csv_col48 ctr_onderhoud_datum
FROM fac_imp_csv
WHERE fac_import_key=p_import_key
AND fac_imp_csv_col45='ONWAAR'
AND fac_imp_csv_col48 IS NOT NULL
AND fac_imp_csv_col50='Actief'
ORDER BY fac_imp_csv_key;
CURSOR sel_controle_skip(p_ins_srtdeel_key IN NUMBER, p_ins_srtcontrole_key IN NUMBER)
IS
SELECT ins_srtcontrole_key
from ins_srtcontrole isc
WHERE isc.ins_srtinstallatie_key=p_ins_srtdeel_key
AND isc.ins_srtcontrole_key <> p_ins_srtcontrole_key;
v_errormsg VARCHAR2 (1000) := '-';
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
v_ins_deel_key NUMBER;
v_prs_afdeling_key NUMBER;
v_ins_srtdeel_key NUMBER;
v_srtcontrole_key NUMBER;
v_count NUMBER;
v_maand VARChar2(15);
BEGIN
fac_update_ins(p_import_key);
@@ -440,8 +652,100 @@ BEGIN
END LOOP;
-- gaan we nu de periodiek taken maken en aan de xcp records met de juiste taak start datum
FOR c IN sel_controle
LOOP
-- Welk maand met het onderhoud plaats vinden
SELECT CASE TO_CHAR(TO_DATE(c.ctr_onderhoud_datum,'DD-MM-YYYY'),'MM')
WHEN '01' THEN 'Januari'
WHEN '02' THEN 'Februari'
WHEN '03' THEN 'Maart'
WHEN '04' THEN 'April'
WHEN '05' THEN 'Mei'
WHEN '06' THEN 'Juni'
WHEN '07' THEN 'Juli'
WHEN '08' THEN 'Augustus'
WHEN '09' THEN 'September'
WHEN '10' THEN 'Oktober'
WHEN '11' THEN 'November'
WHEN '12' THEN 'December'
ELSE 'ONBEKEND'
END
INTO v_maand
FROM DUAL;
BEGIN
v_aanduiding := ' Ophalen van srtcontrole voor object '|| c.ins_deel_omschrijving||' in '||v_maand||' gaat fout.';
select isc.ins_srtcontrole_key,
i.ins_deel_key,
i.ins_srtdeel_key
INTO v_srtcontrole_key,
v_ins_deel_key,
v_ins_srtdeel_key
from ins_srtcontrole isc,
ins_deel i,
ins_srtdeel isd,
ins_srtgroep isg,
ins_discipline id
WHERE i.ins_deel_omschrijving=c.ins_deel_omschrijving
AND isd.ins_srtdeel_key=i.INS_SRTDEEL_KEY
AND isg.ins_srtgroep_key = isd.ins_srtgroep_key
AND id.ins_discipline_key=isg.ins_discipline_key
AND UPPER(id.ins_discipline_omschrijving)=UPPER('Medische Techniek')
AND isc.ins_srtinstallatie_key=i.ins_srtdeel_key
AND UPPER(isc.ins_srtcontrole_omschrijving) like UPPER('Onderhoud %'||v_maand||'%');
v_aanduiding:='Uitzonderingstaak niet gevonden';
v_count:=0;
SELECT count(*)
INTO v_count
from ins_srtcontroledl_xcp isx
WHERE isx.ins_srtcontrole_key=v_srtcontrole_key
AND ins_deel_key=v_ins_deel_key;
IF v_count=0
THEN
INSERT INTO ins_srtcontroledl_xcp (ins_deel_key,
ins_srtcontrole_key,
ins_srtcontroledl_xcp_startdat)
VALUES (v_ins_deel_key,
v_srtcontrole_key,
fac.safe_to_date(c.ctr_onderhoud_datum,'DD-MM-YYYY'));
END IF;
-- Gaan we nu de srtcontrole die niet gelden voor dit asset een xcp record aanmaken met einddatum
FOR c2 IN sel_controle_skip(v_ins_srtdeel_key, v_srtcontrole_key)
LOOP
SELECT count(*)
INTO v_count
from ins_srtcontroledl_xcp isx
WHERE isx.ins_srtcontrole_key=c2.ins_srtcontrole_key
AND ins_deel_key=v_ins_deel_key;
IF v_count=0
THEN
INSERT INTO ins_srtcontroledl_xcp (ins_deel_key,
ins_srtcontrole_key,
ins_srtcontroledl_xcp_eind)
VALUES (v_ins_deel_key,
c2.ins_srtcontrole_key,
fac.safe_to_date('31-12-2024','DD-MM-YYYY'));
END IF;
END LOOP;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding,
'Taak niet toegevoegd');
END;
END LOOP;
END;
/