FMHN#65340 -- Laatste versie

svn path=/Customer/trunk/; revision=64694
This commit is contained in:
Robin Stoker
2024-05-15 15:47:32 +00:00
parent ed285f40c0
commit df39c12640

View File

@@ -16,8 +16,86 @@ SET DEFINE OFF
------ payload begin ------
-- Aangepaste import voor ruimten i.v.m. beperkingen export Stabicad
-- personenimport
CREATE OR REPLACE PROCEDURE fmhw_import_prs (p_import_key IN NUMBER)
AS
v_errormsg VARCHAR2 (1000) := '-';
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
BEGIN
fac_import_perslid (p_import_key);
END fmhw_import_prs;
/
CREATE OR REPLACE PROCEDURE fmhw_update_prs (
p_import_key IN NUMBER
) IS
/*
-- Alle personen verwijderen die niet meer in import bestand voorkomen. Doen we even niet meer (alleen aanvullen)
CURSOR c_del
IS
SELECT p.prs_perslid_key, p.prs_perslid_email
FROM fac_imp_perslid i, prs_perslid p
WHERE UPPER (p.prs_perslid_email) = UPPER (i.prs_perslid_email(+))
AND p.prs_perslid_email IS NOT NULL
AND i.prs_perslid_email IS NULL
AND p.prs_perslid_verwijder IS NULL
AND p.prs_perslid_oslogin IS NULL
ORDER BY 2;
*/
v_count NUMBER;
BEGIN
-- generic update
SELECT count(*)
INTO v_count
FROM fac_imp_perslid;
IF v_count < 150
THEN
fac.imp_writelog (p_import_key,
'E',
'Het aantal te importeren personen is te klein ('
|| TO_CHAR (v_count) || ')',
'Zie Specificatie'
);
RETURN;
END IF;
-- 'EMAIL' betekent dat op basis van email wordt gematched.
prs.update_perslid (p_import_key, 'EMAIL', NULL);
/*
-- Verwijder personen die niet meer in de import voorkomen.
FOR rec IN c_del
LOOP
BEGIN
prs.delete_perslid (p_import_key, rec.prs_perslid_key);
END;
END LOOP;
*/
-- Nieuwe users toekennen aan autorisatiegroep
INSERT INTO fac_gebruikersgroep f (prs_perslid_key, fac_groep_key)
SELECT prs_perslid_key, fac_groep_key
FROM prs_perslid p, fac_groep f, prs_afdeling a
WHERE p.prs_afdeling_key = a.prs_afdeling_key
AND a.prs_afdeling_upper = f.fac_groep_upper
AND NOT EXISTS
(SELECT 1
FROM fac_gebruikersgroep
WHERE prs_perslid_key = p.prs_perslid_key);
END fmhw_update_prs;
/
-- Aangepaste import voor ruimten i.v.m. beperkingen export Stabicad
-- Aangepaste import voor ruimten i.v.m. beperkingen export Stabicad
CREATE OR REPLACE PROCEDURE fmhw_import_ruimten (p_import_key IN NUMBER
)
AS
@@ -37,6 +115,7 @@ AS
v_alg_kenmerk_key3 VARCHAR2 (255);
v_alg_kenmerk_key4 VARCHAR2 (255);
v_alg_kenmerk_key5 VARCHAR2 (255);
v_bouwdeel NUMBER (1);
-- De importvelden:
v_locatie_code VARCHAR2 (255); -- 10
v_gebouw_code VARCHAR2 (255); -- 12
@@ -74,7 +153,7 @@ AS
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
-- Controleer tijdens import-fase op bestaan van kenmerk
-- Controleer tijdens import-fase op bestaan van kenmerk
FUNCTION bepaal_kenmerk_key (kw IN VARCHAR)
RETURN NUMBER
IS
@@ -121,6 +200,42 @@ BEGIN
header_is_valid := 0;
v_count := 0;
SELECT COUNT (*) bouwdelen
INTO v_bouwdeel
FROM fac_imp_file
WHERE fac_import_key = p_import_key
AND fac_imp_file_line LIKE '%Verdiepingsnummer%'
ORDER BY fac_imp_file_index;
-- Bepaal of er meer dan 1 bouwdeel wordt ingelezen (ieder bouwdeel heeft een header regel in de CSV
IF v_bouwdeel > 1
THEN
v_bouwdeel := 1;
fac.imp_writelog (p_import_key,
'I',
'Er zijn bouwdelen gevonden.',
'Tijdens het verwerken zullen de verdiepingen worden gesplitst per bouwdeel.'
);
ELSE
v_bouwdeel := 0;
fac.imp_writelog (p_import_key,
'I',
'Geen bouwdelen gevonden.',
'Deze verdieping wordt op de normale manier verwerkt.'
);
END IF;
-- Update de headerregel, die uit Stabicad is onbruikbaar
UPDATE fac_imp_file
SET fac_imp_file_line = 'Ruimtenummer;Ruimteomschrijving;Vloeroppervlak;Locatiecode;Gebouwcode;Bouwlaagvolgnummer;Ruimtefunctie;Afdelingscode;Bezetting;ReserveerbareRuimte;Categorie;Expiredagen;Prijs;Opstelling;AantalBezoekers;Naam;Omschrijving;kenmerk1;kenmerk2;kenmerk3;kenmerk4;kenmerk5'
WHERE fac_import_key = p_import_key
AND fac_imp_file_index = 1;
-- Nu de bouwdelen zijn geteld en de header is omgehangen mogen andere eventuele header regels weg.
DELETE fac_imp_file
WHERE fac_import_key = p_import_key
AND fac_imp_file_line LIKE '%Verdiepingsnummer%';
FOR rec1 IN c1
LOOP
BEGIN
@@ -136,11 +251,11 @@ BEGIN
fac.imp_getfield (v_newline, c_fielddelimitor, v_ruimte_nr);
fac.imp_getfield (v_newline, c_fielddelimitor, v_ruimte_omschrijving);
fac.imp_getfield (v_newline, c_fielddelimitor, v_ruimte_bruto_vloeropp);
fac.imp_getfield (v_newline, c_fielddelimitor, v_srtruimte_omschrijving);
fac.imp_getfield (v_newline, c_fielddelimitor, v_locatie_code);
fac.imp_getfield (v_newline, c_fielddelimitor, v_gebouw_code);
fac.imp_getfield (v_newline, c_fielddelimitor, v_verdieping_volgnr);
fac.imp_getfield (v_newline, c_fielddelimitor, v_locatie_code);
fac.imp_getfield (v_newline, c_fielddelimitor, v_afdeling_naam);
fac.imp_getfield (v_newline, c_fielddelimitor, v_srtruimte_omschrijving);
fac.imp_getfield (v_newline, c_fielddelimitor, v_afdeling_naam); -- Alles vanaf hier is NULL
fac.imp_getfield (v_newline, c_fielddelimitor, v_ruimte_afdeling_bezetting);
fac.imp_getfield (v_newline, c_fielddelimitor, v_reserveerbaar);
fac.imp_getfield (v_newline, c_fielddelimitor, v_res_discipline_omschrijving);
@@ -159,8 +274,6 @@ BEGIN
v_aanduiding :=
v_locatie_code || '|' || v_gebouw_code || '|' || v_verdieping_volgnr || '|' || v_ruimte_nr || '| ';
v_alg_kenmerkwaarde1 := 'Volledig Ruimtenummer'; -- Vast kenmerk dat nodig is voor de CAD sync view
IF (header_is_valid = 0)
THEN
IF UPPER (v_locatie_code) = 'LOCATIECODE'
@@ -238,9 +351,9 @@ BEGIN
v_errormsg := 'Fout inlezen ruimtenummer [' || v_ruimte_nr || ']';
v_ruimte_nr := TRIM(v_ruimte_nr);
IF LENGTH (v_ruimte_nr) > 10
IF LENGTH (v_ruimte_nr) > 20
THEN
v_ruimte_nr := SUBSTR (v_ruimte_nr, 1, 10);
v_ruimte_nr := SUBSTR (v_ruimte_nr, -20);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Ruimtenr-aanduiding is te lang',
@@ -471,13 +584,14 @@ BEGIN
TO_CHAR (v_alg_kenmerk_key4)
|| '='
|| SUBSTR (v_alg_kenmerkwaarde4, 1, 200)
),
), -- We parkeren het bouwdeel verdiepingnummer even in kenmerk 5
DECODE (v_bouwdeel, 1, SUBSTR (v_ruimte_nr, 1, 1) || '-' || v_verdieping_volgnr_n,
DECODE (v_alg_kenmerk_key5,
NULL, v_alg_kenmerkwaarde5,
TO_CHAR (v_alg_kenmerk_key5)
|| '='
|| SUBSTR (v_alg_kenmerkwaarde5, 1, 200)
)
))
);
END IF;
END IF;
@@ -510,7 +624,6 @@ EXCEPTION
END fmhw_import_ruimten;
/
CREATE OR REPLACE PROCEDURE fmhw_update_ruimten (
p_import_key IN NUMBER
) IS
@@ -527,6 +640,7 @@ CREATE OR REPLACE PROCEDURE fmhw_update_ruimten (
v_count NUMBER(10);
v_count_update NUMBER(10);
v_count_tot NUMBER(10);
v_bouwdeel NUMBER(10);
-- De importvelden:
v_regio_omschrijving VARCHAR2(255); -- 30
@@ -563,18 +677,22 @@ CREATE OR REPLACE PROCEDURE fmhw_update_ruimten (
v_opstelling_key NUMBER(10);
v_ruimteafdeling_key NUMBER(10);
CURSOR cVerdieping
IS
SELECT min(alg_locatie_code) alg_locatie_code
,min(alg_gebouw_code) alg_gebouw_code
,alg_verdieping_volgnr alg_verdieping_volgnr
,alg_kenmerkwaarde5 verdiepingnummer
FROM fac_imp_onrgoed2
GROUP BY upper(alg_locatie_code), upper(alg_gebouw_code), alg_verdieping_volgnr;
GROUP BY upper(alg_locatie_code), upper(alg_gebouw_code), alg_verdieping_volgnr, alg_kenmerkwaarde5;
recVerdieping cVerdieping%ROWTYPE;
CURSOR cBouwdeel
IS
SELECT ROWNUM getal, sub.waarde verdiepingnummer
FROM (SELECT DISTINCT alg_kenmerkwaarde5 waarde FROM fac_imp_onrgoed2) sub;
CURSOR cSrtRuimte
IS
SELECT min(alg_srtruimte_omschrijving) alg_srtruimte_omschrijving
@@ -747,6 +865,23 @@ CREATE OR REPLACE PROCEDURE fmhw_update_ruimten (
END;
BEGIN
SELECT COUNT (DISTINCT alg_kenmerkwaarde5) INTO v_bouwdeel FROM fac_imp_onrgoed2;
IF v_bouwdeel > 0
THEN
FOR rec IN cBouwdeel
LOOP
BEGIN
UPDATE fac_imp_onrgoed2
SET alg_verdieping_volgnr = fac.safe_to_number (alg_verdieping_volgnr || rec.getal) -- verdieping 14 met 3 bouwdelen wordt dus 141 142 143
WHERE alg_kenmerkwaarde5 = rec.verdiepingnummer;
COMMIT;
END;
END LOOP;
END IF;
-- ****************
-- ***VERDIEPING***
-- ****************
@@ -802,8 +937,8 @@ BEGIN
values
(v_gebouw_key
,recVerdieping.ALG_VERDIEPING_VOLGNR
,to_char(recVerdieping.ALG_VERDIEPING_VOLGNR)
,'Verdieping '||to_char(recVerdieping.ALG_VERDIEPING_VOLGNR)
,DECODE (recVerdieping.verdiepingnummer, NULL, to_char(recVerdieping.ALG_VERDIEPING_VOLGNR), recVerdieping.verdiepingnummer)
,DECODE (recVerdieping.verdiepingnummer, NULL, 'Verdieping '||to_char(recVerdieping.ALG_VERDIEPING_VOLGNR), 'Verdieping '||to_char(recVerdieping.verdiepingnummer))
);
END IF;
@@ -841,6 +976,12 @@ BEGIN
END IF;
CLOSE cVerdieping;
-- Maak kenmerk5 nu maar weer leeg als deze gebruikt is voor bouwdelen.
IF v_bouwdeel > 0 THEN
UPDATE fac_imp_onrgoed2
SET alg_kenmerkwaarde5 = NULL
WHERE alg_kenmerkwaarde5 IS NOT NULL;
END IF;
-- *******************
-- ***RUIMTEFUNCTIE***
@@ -1482,7 +1623,6 @@ EXCEPTION
);
END fmhw_update_ruimten;
/
*/
-- CAD sync-view, de orginele ruimtenummers landen in een kenmerk bij de ruimte.
@@ -1654,6 +1794,61 @@ AS
WHERE c.ins_deel_key = r.res_ins_deel_key
AND r.res_discipline_key = 27;
-- Anonimiseren van reserveringen die al hebben plaatsgevonden.
CREATE OR REPLACE PROCEDURE fmhw_anonimiseer
AS
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errormsg VARCHAR2 (400);
v_errorhint VARCHAR2 (400);
BEGIN
DECLARE
CURSOR anon
IS
SELECT res_rsv_ruimte_key
FROM res_rsv_ruimte
WHERE TRUNC (res_rsv_ruimte_tot) < TRUNC (SYSDATE)
AND res_rsv_ruimte_host_key <> 75921;
BEGIN
FOR rec IN anon
LOOP
BEGIN
UPDATE res_rsv_ruimte
SET res_rsv_ruimte_contact_key = 75921,
res_rsv_ruimte_host_key = 75921
WHERE res_rsv_ruimte_key = rec.res_rsv_ruimte_key;
UPDATE fac_tracking
SET prs_perslid_key = 75921
WHERE fac_srtnotificatie_key BETWEEN 107 AND 126 -- RES
AND fac_tracking_refkey = rec.res_rsv_ruimte_key;
COMMIT;
END;
END LOOP;
END;
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.writelog ('Anonimiseren',
'E',
v_errormsg,
'');
END;
/
CREATE OR REPLACE PROCEDURE fmhw_daily
AS
BEGIN
-- anonimiseren van reserveringen die al hebben plaatsgevonden.
fmhw_anonimiseer ();
END;
/
------ payload end ------
SET DEFINE OFF