INLO#87051 -- Uitbreiding scanproces voor wagens tbv gevangenis haren om prestatie te monitoren - IMPORT en DWH-VIEW GEREED

svn path=/Customer/trunk/; revision=70711
This commit is contained in:
Jos Migo
2025-10-27 11:33:30 +00:00
parent c1f22b0775
commit d1f81794be

View File

@@ -5940,6 +5940,7 @@ AS
-- PPS - HAREN ---
-------------------------
-- Zie INLO#87051 - In 2025 helemaal herzien
CREATE OR REPLACE PROCEDURE inlo_import_scan_haren (p_import_key IN NUMBER)
AS
c_fielddelimitor VARCHAR2 (1) := ';';
@@ -5950,43 +5951,68 @@ AS
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_ongeldig NUMBER (1);
v_ongeldig_regel NUMBER (1);
v_aanduiding VARCHAR2 (200);
v_header_is_valid NUMBER (1);
v_dummy VARCHAR2 (1000);
v_user VARCHAR2 (4);
-- De importvelden:
v_scanregel VARCHAR2 (50);
v_rownumb NUMBER(10);
v_datum_import DATE;
v_scancode VARCHAR2 (60); -- streepjescode (ruimtenr of ins_deel_omschrijving)
v_datum DATE;
v_tijd VARCHAR2 (10); -- hh24:mi
v_in_uit VARCHAR2 (20); -- keuzelijst uitgegeven / ingenomen / <leeg>
v_temperatuur VARCHAR2 (50);
v_opmerking VARCHAR2 (4000);
v_ins_deel_key NUMBER(10);
v_scancode_ruimte VARCHAR2 (60);
v_scancode_eenheid VARCHAR2 (60);
v_ins_deel_key NUMBER(10); -- key eenheid/unit
v_alg_ruimte_key NUMBER(10);
v_alg_ruimte_key_i NUMBER(10);
v_opmerking_intern VARCHAR2 (4000); -- om bij verwerking eventuele leesbare info in op te nemen
v_datum DATE;
v_datum_dag_code NUMBER (1);
v_datum_vorige_scan DATE;
v_tijd VARCHAR2 (10); -- hh24:mi
v_tijd_ruimte VARCHAR2 (10); -- tijdstip dat men de transitieruimte scant
v_soort_scan VARCHAR2 (60) := 'wasserij' ; -- future use: als ook levering afval en voeding ingepast gaan worden
v_gescand_door VARCHAR2 (200);
v_gescand_door_i VARCHAR2 (200);
v_gescand_door_vorige VARCHAR2 (200);
v_afwijking_dag VARCHAR2 (200);
v_afwijking_dag_i VARCHAR2 (200);
v_afwijking_eenheid VARCHAR2 (200);
v_opmerking VARCHAR2 (4000);
v_temperatuur VARCHAR2 (200);
v_cnt_contract_key NUMBER (10);
v_ins_srtdeel_key NUMBER (10);
CURSOR c IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
-- Eerst opruiming
-- Eerst opruiming/bijwerking
-- Verwijder regels die de vorige keer geimporteerd zijn maar niet verwerkt zijn.
DELETE inlo_imp_scan_haren
DELETE inlo_imp_scan_haren2
WHERE actief = 0;
-- gooi lege regels weg uit de import
DELETE fac_imp_file
WHERE fac_import_key = p_import_key AND fac_imp_file_line LIKE ';;';
-- Het aangeleverde bestand heeft header met dubbele punten ;
UPDATE fac_imp_file
SET fac_imp_file_line = REPLACE (fac_imp_file_line, ':', '')
WHERE fac_import_key = p_import_key
AND UPPER(SUBSTR(fac_imp_file_line, 1, 13)) = 'STREEPJESCODE' ;
-- Bepaal hoogste rownumb
SELECT COALESCE(MAX(rownumb),0)
INTO v_rownumb
FROM inlo_imp_scan_haren ;
FROM inlo_imp_scan_haren2 ;
v_datum_import := SYSDATE;
v_header_is_valid := 0;
v_ongeldig := 0;
@@ -6001,20 +6027,28 @@ BEGIN
|| SUBSTR (v_newline, 1, 200);
v_aanduiding := '';
IF (UPPER (v_newline) LIKE
'STREEPJESCODE:;DATUM;TIJD;IN / UIT;TEMP;OPMERKING%')
'STREEPJESCODE;DAG;TIJD;PERSOON DIE SCANT;AFWIJKING HELE DAG;AFWIJKING EENHEID;OPMERKING%')
-- WAS: Streepjescode:;Datum;Tijd;IN / UIT;Temp;Opmerking
-- WORDT STREEPJESCODE;DAG;TIJD;PERSOON DIE SCANT;AFWIJKING HELE DAG;AFWIJKING EENHEID;OPMERKING
THEN
v_header_is_valid := 1;
ELSE
-- init
v_ongeldig_regel := 0 ;
v_cnt_contract_key := NULL ;
-- Lees alle veldwaarden
v_errormsg := 'Fout opvragen te importeren rij (streepjescode)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy);
v_scancode := UPPER(SUBSTR (v_dummy, 1, 60));
-- Op zoek naar ruimte of ins_deel_key
-- Op zoek naar of de streepjescode een in Facilitor bestaande ruimte en/of eenheid is
v_alg_ruimte_key := NULL;
v_ins_deel_key := NULL;
v_scanregel := NULL;
IF v_scancode IS NOT NULL
THEN
@@ -6032,69 +6066,178 @@ BEGIN
SELECT MAX (ins_deel_key)
INTO v_ins_deel_key
FROM ins_v_deel_gegevens
WHERE ins_discipline_key = 2521 -- Transportwagens
WHERE ins_discipline_key = 2521 -- Transportwagens en Eenheden
AND (ins_deel_vervaldatum IS NULL OR ins_deel_vervaldatum > TRUNC(SYSDATE) )
AND ins_deel_upper = v_scancode;
END IF;
-- Als er bij volgende scanregel geen andere ruimte is gevonden, dan bevindt men zich dus nog steeds in de voorgaande transitieruimte
v_alg_ruimte_key_i := COALESCE(v_alg_ruimte_key, v_alg_ruimte_key_i) ;
-- soort scanregel bepalen - en daarmee bepalen of we de regel wel/niet in de tabel gaan inserten
IF v_alg_ruimte_key IS NOT NULL
THEN
v_scanregel := 'ruimte';
v_scancode_ruimte := v_scancode ;
END IF;
IF v_ins_deel_key IS NOT NULL
THEN
v_scanregel := 'eenheid';
v_scancode_eenheid := v_scancode ;
END IF;
IF v_alg_ruimte_key IS NULL and v_ins_deel_key IS NULL
THEN
v_scanregel := 'eenheid - onbekend';
v_scancode_eenheid := 'Onbekend - ' || v_scancode ;
END IF;
END IF;
v_errormsg := 'Fout opvragen te importeren rij (datum) ';
fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy);
v_datum := fac.safe_to_date (v_dummy, 'dd-mm-yyyy');
v_datum_dag_code := fac.getweekdaynum (v_datum)-1;
v_errormsg := 'Fout opvragen te importeren rij (tijd) ';
fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy);
v_tijd := SUBSTR (v_dummy, 1, 10);
-- als het ruimte_scan is dan gaan we ook even de tijd noteren dat men in die transitieruimte is gearriveerd
IF v_alg_ruimte_key IS NOT NULL
THEN
v_errormsg := 'Fout opvragen te importeren rij (in / uit) ';
fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy);
v_in_uit := SUBSTR (v_dummy, 1, 20);
v_tijd_ruimte := v_tijd ;
END IF;
v_errormsg :=
'Fout opvragen te importeren rij (temp) ';
v_errormsg := 'Fout opvragen te importeren rij (gescand_door) ';
fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy);
v_temperatuur := SUBSTR (v_dummy, 1, 50);
v_gescand_door := SUBSTR (v_dummy, 1, 200);
-- Deze wordt in principe bij start dag op eerste scanregel door medewerker ingevoerd en geldt voor alle onderliggende scans
v_gescand_door_i := COALESCE(v_gescand_door, v_gescand_door_i) ;
v_errormsg := 'Fout opvragen te importeren rij (afwijking_dag) ';
fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy);
v_afwijking_dag := SUBSTR (v_dummy, 1, 200);
-- Deze wordt in principe bij start dag op eerste scanregel door medewerker ingevoerd en geldt voor alle onderliggende scans
IF v_datum = v_datum_vorige_scan
THEN
v_afwijking_dag_i := COALESCE(v_afwijking_dag, v_afwijking_dag_i) ;
ELSE
v_afwijking_dag_i := v_afwijking_dag ;
END IF;
v_errormsg := 'Fout opvragen te importeren rij (afwijking_eenheid) ';
fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy);
v_afwijking_eenheid := SUBSTR (v_dummy, 1, 200);
v_errormsg :=
'Fout opvragen te importeren rij (opmerking) ';
fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy);
v_opmerking := SUBSTR (v_dummy, 1, 4000);
v_errormsg :=
'Fout bij toevoegen regel aan tabel '
|| v_scancode
|| ' / '
|| v_datum || ' ' || v_tijd ;
IF v_ongeldig = 0
'Fout opvragen te importeren rij (temp) ';
fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy);
v_temperatuur := SUBSTR (v_dummy, 1, 50);
-- op zoek naar actuele contract op desbetreffende eenheid
IF v_ins_deel_key IS NOT NULL
THEN
v_rownumb := v_rownumb + 1 ;
INSERT INTO inlo_imp_scan_haren (rownumb,
scancode,
datum,
tijd,
in_uit,
temperatuur,
opmerking,
ins_deel_key,
alg_ruimte_key,
actief)
VALUES (v_rownumb,
v_scancode,
v_datum,
v_tijd,
v_in_uit,
v_temperatuur,
v_opmerking,
v_ins_deel_key,
v_alg_ruimte_key_i,
0);
-- eerst ins_srt_deel ophalen
SELECT ins_srtdeel_key
INTO v_ins_srtdeel_key
FROM ins_deel
WHERE ins_deel_key = v_ins_deel_key ;
-- dan gekoppeld contract erbij zoeken
SELECT MAX(c.cnt_contract_key)
INTO v_cnt_contract_key
FROM cnt_contract_object oc, cnt_contract c
WHERE oc.cnt_contract_key = c.cnt_contract_key
AND oc.cnt_ins_srtdeel_key = v_ins_srtdeel_key
-- alleen actuele contracten
AND c.cnt_contract_status = 0
AND v_datum BETWEEN c.cnt_contract_looptijd_van AND c.cnt_contract_looptijd_tot
;
END IF;
-- ongedlige regel als er geen ruimte_key of eenheid_key of gekoppelde contract_key gevonden wordt
---- we lezen deze scanactie wel in maar met een invalid zodat deze wel in rapportage naar boven kan komen en er mensen op aangesproken kunnen worden...
IF COALESCE(v_alg_ruimte_key, v_ins_deel_key) IS NULL OR v_cnt_contract_key IS NULL
THEN
v_ongeldig_regel := 1;
END IF;
-- we lezen alleen de scanregels van de eenheid in
IF SUBSTR(v_scanregel, 1, 7) = 'eenheid'
THEN
v_errormsg :=
'Fout bij toevoegen regel aan tabel '
|| v_scancode_ruimte || ' - ' || v_scancode_eenheid
|| ' / '
|| v_datum || ' ' || v_tijd ;
v_rownumb := v_rownumb + 1 ;
INSERT INTO inlo_imp_scan_haren2 (rownumb,
datum_import,
soort_scan,
datum,
datum_dag_code,
scancode_ruimte,
tijd_ruimte,
scancode_eenheid,
tijd,
gescand_door,
afwijking_dag,
afwijking_eenheid,
opmerking,
temperatuur,
voeding_1,
voeding_2,
voeding_3,
voeding_4,
ongeldig_regel,
actief,
alg_ruimte_key,
ins_deel_key,
cnt_contract_key)
VALUES (v_rownumb,
v_datum_import,
v_soort_scan,
v_datum,
v_datum_dag_code,
v_scancode_ruimte,
v_tijd_ruimte,
v_scancode_eenheid,
v_tijd,
v_gescand_door_i,
v_afwijking_dag_i,
v_afwijking_eenheid,
v_opmerking,
v_temperatuur,
NULL,
NULL,
NULL,
NULL,
v_ongeldig_regel,
0,
v_alg_ruimte_key_i,
v_ins_deel_key,
v_cnt_contract_key);
END IF;
-- Zet vorige_dag en vorige persoon die gescand heeft
v_datum_vorige_scan := v_datum ;
v_gescand_door_vorige := v_gescand_door ;
END IF;
END;
END LOOP;
@@ -6135,7 +6278,6 @@ EXCEPTION
END inlo_import_scan_haren;
/
CREATE OR REPLACE PROCEDURE inlo_update_scan_haren (
p_import_key IN NUMBER)
AS
@@ -6146,44 +6288,21 @@ AS
v_aanduiding VARCHAR2 (200);
-- Overige velden:
v_scanregel VARCHAR2 (4000); -- VAST FORMAT: <timestamp (datum/tijd)>;<ruimte-key>;<wagen_key><ruimte_nr><wagen_nr>;<in/out>;<temp>;<opmerking>
CURSOR c
IS
SELECT i.rownumb, i.scancode, i.datum, i.tijd, i.in_uit, i.temperatuur, i.opmerking, i.ins_deel_key, i.alg_ruimte_key, i.opmerking_intern, r.alg_ruimte_nr
FROM inlo_imp_scan_haren i, alg_ruimte r
WHERE i.alg_ruimte_key = r.alg_ruimte_key
AND i.actief = 0 AND i.ins_deel_key IS NOT NULL AND i.alg_ruimte_key IS NOT NULL
ORDER BY 1 ;
BEGIN
-- Toelichting:
---- actief = 0 is nog niet verwerkt...(bij nieuwe import eerst te verwijderen)
---- actief = 1 is bij deze run verwerkt...
---- actief = 2 is bij voorgaande run verwerkt ....
UPDATE inlo_imp_scan_haren
---- actief = 0 is nog niet verwerkt...(wordt bij nieuwe import ook altijd eerst verwijderd)
---- actief = 1 is/wordt nu verwerkt...
---- actief = 2 is al bij voorgaande runs verwerkt ....
-- uit voorgaande run de scanregels bij deze op actief 2 zetten
UPDATE inlo_imp_scan_haren2
SET actief = 2
WHERE actief = 1;
-- VERWERKING records => insert notitie op INS_DEEL
FOR rec IN c
LOOP
BEGIN
v_scanregel := 'Scanregel ' || TO_CHAR(rec.rownumb) || ';' || TO_CHAR(rec.datum,'DD-MM-YYYY') || ' ' || rec.tijd || ';' || rec.ins_deel_key || ';' || rec.alg_ruimte_key || ';' ||
rec.scancode || ';' || rec.alg_ruimte_nr || ';' || rec.in_uit || ';' || rec.temperatuur || ';' || rec.opmerking ;
INSERT INTO ins_deel_note (ins_deel_key, prs_perslid_key, ins_deel_note_omschrijving)
VALUES (rec.ins_deel_key,
4, -- facilitor
v_scanregel) ;
END;
END LOOP;
-- alle scanregels uit deze run op verwerkt zetten
UPDATE inlo_imp_scan_haren
-- uit deze run de scanregels op verwerkt zetten
UPDATE inlo_imp_scan_haren2
SET actief = 1
WHERE actief = 0;
@@ -6192,6 +6311,7 @@ BEGIN
END inlo_update_scan_haren;
/
-- DEZE KOMT TE VERVALLEN MET INLO#87051
CREATE OR REPLACE VIEW inlo_v_rap_scan_haren
(
ins_deel_key,
@@ -6234,6 +6354,121 @@ AS
AND d.ins_discipline_key = 2521 -- Transportwagens
;
-- Resultaatview van de scanning (INLO#87051)
CREATE OR REPLACE VIEW inlo_v_rap_scan_haren2
(
ROWNUMB,
DATUM_IMPORT,
SOORT_SCAN,
SCANDATUM,
SCANDATUM_DAG_CODE, -- MA = 1 ... ZON = 7
SCANCODE_RUIMTE,
TIJD_RUIMTE,
SCANCODE_EENHEID,
TIJD,
GESCAND_DOOR,
AFWIJKING_DAG,
AFWIJKING_EENHEID,
OPMERKING,
TEMPERATUUR,
VOEDING_1,
VOEDING_2,
VOEDING_3,
VOEDING_4,
ONGELDIG_REGEL, -- Er ontbreekt een Facilitor-entitieit - dwz de ruimte of eenheid/unit is niet gevonden
ALG_RUIMTE_KEY,
INS_DEEL_KEY,
CNT_CONTRACT_KEY,
-- extra velden
OBJECTSOORT,
ORGANISATIE_EENHEID,
-- velden bepaling scan op tijd (conform SLA)
CONTRACTNR,
SLA_CONTRACT_DAG,
SLA_CONTRACT_DAG_CODE,
SLA_CONTRACT_BEZORGING_VOOR,
AFWIJKING_UITSCAN,
OP_TIJD
)
AS
SELECT -- velden uit cust-tabel pps haren
v.rownumb,
v.datum_import,
v.soort_scan,
v.datum scandatum,
v.datum_dag_code scandatum_dag_code, -- MA = 1
v.scancode_ruimte,
v.tijd_ruimte,
v.scancode_eenheid,
v.tijd,
v.gescand_door,
v.afwijking_dag,
v.afwijking_eenheid,
v.opmerking,
v.temperatuur,
v.voeding_1,
v.voeding_2,
v.voeding_3,
v.voeding_4,
v.ongeldig_regel,
v.alg_ruimte_key,
v.ins_deel_key,
v.cnt_contract_key,
-- extra velden
d.ins_srtdeel_omschrijving objectsoort,
d.prs_afdeling_omschrijving organisatie_eenheid,
-- velden bepaling scan op tijd (conform SLA)
CASE WHEN c.cnt_contract_key IS NOT NULL
THEN c.cnt_contract_nummer_intern || '.' ||DECODE(c.cnt_contract_versie, NULL, '0', cnt_contract_versie)
ELSE ''
END contractnr,
cnt_d.dag sla_contract_dag,
cnt_d.dag_code sla_contract_dag_code,
cnt_t.bezorging_voor sla_contract_bezorging_voor,
CASE WHEN COALESCE(v.afwijking_dag, v.afwijking_eenheid) = NULL
THEN ''
WHEN v.afwijking_dag IS NOT NULL AND v.afwijking_eenheid IS NULL
THEN 'Dag: - ' || v.afwijking_dag
WHEN v.afwijking_dag IS NULL AND v.afwijking_eenheid IS NOT NULL
THEN 'Eenheid: - ' || v.afwijking_eenheid || DECODE(v.opmerking, NULL, '', ' - ' || v.opmerking)
WHEN v.afwijking_dag IS NOT NULL AND v.afwijking_eenheid IS NOT NULL
THEN 'Dag/Eenheid: - ' || v.afwijking_dag || ' / ' || v.afwijking_eenheid
ELSE ''
END
afwijking_uitscan,
CASE WHEN v.datum_dag_code < cnt_d.dag_code THEN 'ja'
WHEN v.datum_dag_code > cnt_d.dag_code THEN 'nee'
WHEN v.datum_dag_code = cnt_d.dag_code AND v.tijd <= cnt_t.bezorging_voor THEN 'ja'
WHEN v.datum_dag_code = cnt_d.dag_code AND v.tijd > cnt_t.bezorging_voor THEN 'nee'
ELSE ''
END sla_op_tijd
FROM inlo_imp_scan_haren2 v, ins_v_deel_gegevens d, cnt_contract c, alg_ruimte r,
(SELECT kw.cnt_contract_key, ud.fac_usrdata_code dag_code, ud.fac_usrdata_omschr dag
FROM cnt_contract c, cnt_kenmerkcontract kw, cnt_kenmerk k, cnt_srtkenmerk sk,
fac_usrtab ut, fac_usrdata ud
WHERE c.cnt_contract_key = kw.cnt_contract_key
AND kw.cnt_kenmerk_key = k.cnt_kenmerk_key
AND k.cnt_srtkenmerk_key = sk.cnt_srtkenmerk_key
AND fac.safe_to_number (kw.cnt_kenmerkcontract_waarde) = ud.fac_usrdata_key
AND ud.fac_usrtab_key = ut.fac_usrtab_key
AND ut.fac_usrtab_key = 1501 -- PPS - SLA DAG
AND k.cnt_kenmerk_key = 4261 -- AFSPRAAK - bezorging dag
) cnt_d,
(SELECT c.cnt_contract_key, kw.cnt_kenmerkcontract_waarde bezorging_voor
FROM cnt_contract c, cnt_kenmerkcontract kw, cnt_kenmerk k, cnt_srtkenmerk sk
WHERE c.cnt_contract_key = kw.cnt_contract_key
AND kw.cnt_kenmerk_key = k.cnt_kenmerk_key
AND k.cnt_srtkenmerk_key = sk.cnt_srtkenmerk_key
AND k.cnt_kenmerk_key = 4223 -- AFSPRAAK - bezorging tijd
) cnt_t
WHERE v.alg_ruimte_key = r.alg_ruimte_key (+)
AND v.ins_deel_key = d.ins_deel_key (+)
AND v.cnt_contract_key = c.cnt_contract_key (+)
AND v.cnt_contract_key = cnt_t.cnt_contract_key (+)
AND v.cnt_contract_key = cnt_d.cnt_contract_key (+)
ORDER BY rownumb
;
------------------------------
-- EXACT - BUNDEL CATERING ---
------------------------------