FLEX#62812 -- Flex werkplekreserveringen Import functie

svn path=/Customer/trunk/; revision=47568
This commit is contained in:
Arthur Egberink
2020-07-29 17:33:45 +00:00
parent f362985880
commit 6e5057ce98

398
FLEX/flex.sql Normal file
View File

@@ -0,0 +1,398 @@
--
-- $Id$
--
-- Script containing FLEX specific sql statements for the FACILITOR database
DEFINE thisfile = 'FLEX.SQL'
DEFINE dbuser = 'FLEX'
SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
COLUMN fcltcusttxt NEW_VALUE fcltcusttxt NOPRINT;
WHENEVER SQLERROR CONTINUE;
SELECT adm.getscriptspoolfile('&thisfile') AS fcltlogfile FROM DUAL;
SPOOL &fcltlogfile
WHENEVER SQLERROR EXIT;
SELECT adm.checkscriptcust('&dbuser') AS fcltcusttxt FROM DUAL;
WHENEVER SQLERROR CONTINUE;
---------------------------------------
PROMPT &fcltcusttxt
---------------------------------------
SET DEFINE OFF
------ payload begin ------
-- Import functie voor het importeren van vastgoed en werkplekgegevens.
CREATE OR REPLACE PROCEDURE flex_import_wp (p_import_key IN NUMBER)
AS
c_fielddelimitor VARCHAR2 (1) := ';';
v_newline VARCHAR2 (1000); -- Input line
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER;
v_count NUMBER;
v_ongeldig NUMBER (1);
v_aanduiding VARCHAR2 (200);
-- De importvelden:
v_klantcode VARCHAR2(255);
v_locatie_code VARCHAR2(255);
v_locatie_omschrijving VARCHAR2(255);
v_gebouw_code VARCHAR2(255);
v_gebouw_omschrijving VARCHAR2(255);
v_verdieping_volgnr VARCHAR2(255);
v_ruimte_nr VARCHAR2(255);
v_ruimte_omschrijving VARCHAR2(255);
v_kenmerkwaarde1 VARCHAR2(255);
v_kenmerkwaarde2 VARCHAR2(255);
v_kenmerkwaarde3 VARCHAR2(255);
v_kenmerkwaarde4 VARCHAR2(255);
v_kenmerkwaarde5 VARCHAR2(255);
v_deel_omschrijving VARCHAR2(255);
v_deel_reserveerbaar VARCHAR2(255);
CURSOR c IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
-- Vorige inlees eerst verwijderen
DELETE FROM flex_imp_wp;
COMMIT;
header_is_valid := 0;
v_ongeldig := 0;
v_count := 0;
header_is_valid := 0;
FOR rec IN c
LOOP
BEGIN
v_newline := rec.fac_imp_file_line;
v_errormsg := 'Fout opvragen te importeren rij';
v_aanduiding := '';
-- Lees alle veldwaarden: Klantcode Locatiecode Locatieomschrijving Gebouwcode Gebouwomschrijving Bouwlaagvolgnummer Ruimtenummer Ruimteomschrijving WPidentificatie reserveerbaar
v_errormsg := 'Fout opvragen te importeren rij (Klantcode)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_klantcode);
v_errormsg := 'Fout opvragen te importeren rij (Locatiecode)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_locatie_code);
v_errormsg := 'Fout opvragen te importeren rij (Locatieomschrijving)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_locatie_omschrijving);
v_errormsg := 'Fout opvragen te importeren rij (Gebouwcode)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_gebouw_code);
v_errormsg := 'Fout opvragen te importeren rij (Gebouwomschrijving)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_gebouw_omschrijving);
v_errormsg := 'Fout opvragen te importeren rij (Bouwlaagvolgnummer)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_verdieping_volgnr);
v_errormsg := 'Fout opvragen te importeren rij (Ruimtenummer)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_ruimte_nr);
v_errormsg := 'Fout opvragen te importeren rij (Ruimteomschrijving)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_ruimte_omschrijving);
v_errormsg := 'Fout opvragen te importeren rij (WPidentificatie)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_deel_omschrijving);
v_errormsg := 'Fout opvragen te importeren rij (WPreserveerbaar)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_deel_reserveerbaar);
v_errormsg := 'Fout opvragen te importeren rij (Kenmerk1)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_kenmerkwaarde1);
v_errormsg := 'Fout opvragen te importeren rij (Kenmerk2)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_kenmerkwaarde2);
v_errormsg := 'Fout opvragen te importeren rij (Kenmerk3)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_kenmerkwaarde3);
v_errormsg := 'Fout opvragen te importeren rij (Kenmerk4)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_kenmerkwaarde4);
v_errormsg := 'Fout opvragen te importeren rij (Kenmerk5)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_kenmerkwaarde5);
v_aanduiding :=
v_locatie_code
|| '|'
|| v_gebouw_code
|| '|'
|| v_verdieping_volgnr
|| '|'
|| v_ruimte_nr
|| '|'
|| v_deel_omschrijving;
-- Skip until the header is found
IF header_is_valid = 0 OR SUBSTR(rec.fac_imp_file_line,1,4) = ';;;;'
THEN
IF UPPER(v_klantcode) = 'KLANTCODE'
AND UPPER(v_locatie_code) = 'LOCATIECODE'
AND UPPER(v_locatie_omschrijving) = 'LOCATIEOMSCHRIJVING'
AND UPPER(v_gebouw_code) = 'GEBOUWCODE'
AND UPPER(v_gebouw_omschrijving) = 'GEBOUWOMSCHRIJVING'
AND UPPER(v_verdieping_volgnr) = 'BOUWLAAGVOLGNUMMER'
AND UPPER(v_ruimte_nr) = 'RUIMTENUMMER'
AND UPPER(v_ruimte_omschrijving) = 'RUIMTEOMSCHRIJVING'
AND UPPER(v_deel_omschrijving) = 'WPIDENTIFICATIE'
AND UPPER(v_deel_reserveerbaar) = 'RESERVEERBAAR'
THEN
header_is_valid := 1;
END IF;
ELSE -- Header OK. V
BEGIN
v_ongeldig := 0;
v_errormsg := 'Controleer klantcode ' || v_klantcode;
IF LENGTH(v_klantcode) > 4 OR v_klantcode IS NULL
THEN
fac.imp_writelog (p_import_key, 'W', 'Klantcode mag NIET leeg zijn of groter dan 4 posities: ' || v_aanduiding, v_errormsg);
v_klantcode := SUBSTR(v_klantcode, 1, 4);
END IF;
v_errormsg := 'Controleer locatiecode ' || v_locatie_code;
IF LENGTH(v_locatie_code) > 10 OR v_locatie_code IS NULL
THEN
fac.imp_writelog (p_import_key, 'W', 'Locatiecode mag NIET leeg zijn of groter dan 10 posities: ' || v_aanduiding, v_errormsg);
v_locatie_code := SUBSTR(v_locatie_code, 1, 10);
END IF;
v_errormsg := 'Controleer locatieomschrijving ' || v_locatie_omschrijving;
IF LENGTH(v_locatie_omschrijving) > 60 OR v_locatie_omschrijving IS NULL
THEN
fac.imp_writelog (p_import_key, 'W', 'Locatieomschrijving mag NIET leeg zijn of groter dan 60 posities: ' || v_aanduiding, v_errormsg);
v_locatie_omschrijving := SUBSTR(v_locatie_omschrijving, 1, 60);
END IF;
v_errormsg := 'Controleer gebouwcode ' || v_gebouw_code;
IF LENGTH(v_gebouw_code) > 10 OR v_gebouw_code IS NULL
THEN
fac.imp_writelog (p_import_key, 'W', 'Gebouwcode mag NIET leeg zijn of groter dan 12 posities: ' || v_aanduiding, v_errormsg);
v_gebouw_code := SUBSTR(v_gebouw_code, 1, 12);
END IF;
v_errormsg := 'Controleer gebouwomschrijving ' || v_gebouw_omschrijving;
IF LENGTH(v_gebouw_omschrijving) > 30 OR v_gebouw_omschrijving IS NULL
THEN
fac.imp_writelog (p_import_key, 'W', 'Gebouwomschrijving mag NIET leeg zijn of groter dan 30 posities: ' || v_aanduiding, v_errormsg);
v_gebouw_omschrijving := SUBSTR(v_gebouw_omschrijving, 1, 30);
END IF;
v_errormsg := 'Controleer bouwlaagvolgnummer ' || v_verdieping_volgnr;
IF FAC.safe_to_number(v_verdieping_volgnr) IS NULL
THEN
fac.imp_writelog (p_import_key, 'E', 'Bouwlaagvolgnummer is geen getal: ' || v_aanduiding, v_errormsg);
v_ongeldig := 1;
END IF;
v_errormsg := 'Controleer ruimtenummer ' || v_ruimte_nr;
IF LENGTH(v_ruimte_nr) > 10 OR v_ruimte_nr IS NULL
THEN
fac.imp_writelog (p_import_key, 'W', 'Ruimtenummer mag NIET leeg zijn of groter dan 10 posities: ' || v_aanduiding, v_errormsg);
v_ruimte_nr := SUBSTR(v_ruimte_nr, 1, 10);
END IF;
v_errormsg := 'Controleer ruimteomschrijving ' || v_ruimte_omschrijving;
IF LENGTH(v_ruimte_omschrijving) > 30 OR v_ruimte_omschrijving IS NULL
THEN
fac.imp_writelog (p_import_key, 'W', 'Ruimteomschrijving mag NIET leeg zijn of groter dan 30 posities: ' || v_aanduiding, v_errormsg);
v_ruimte_omschrijving := SUBSTR(v_ruimte_omschrijving, 1, 30);
END IF;
v_errormsg := 'Controleer werkplekidentificatie ' || v_deel_omschrijving;
IF LENGTH(v_deel_omschrijving) > 30 OR v_deel_omschrijving IS NULL
THEN
fac.imp_writelog (p_import_key, 'W', 'Werkplekidentificatie mag NIET leeg zijn of groter dan 30 posities: ' || v_aanduiding, v_errormsg);
v_deel_omschrijving := SUBSTR(v_deel_omschrijving, 1, 30);
END IF;
v_errormsg := 'Controleer reserveerbaar ' || v_deel_reserveerbaar;
IF NOT (UPPER(v_deel_reserveerbaar) = 'J' OR v_deel_reserveerbaar IS NULL)
THEN
fac.imp_writelog (p_import_key, 'W', 'Reserveerbaar is ongeldig: ' || v_aanduiding, v_errormsg);
v_ongeldig := 1;
END IF;
IF v_ongeldig = 0
THEN
INSERT INTO flex_imp_wp (klantcode,
alg_locatie_code,
alg_locatie_omschrijving,
alg_gebouw_code,
alg_gebouw_omschrijving,
alg_verdieping_volgnr,
alg_ruimte_nr,
alg_ruimte_omschrijving,
alg_kenmerkwaarde1,
alg_kenmerkwaarde2,
alg_kenmerkwaarde3,
alg_kenmerkwaarde4,
alg_kenmerkwaarde5,
ins_deel_omschrijving,
ins_deel_reserveerbaar)
VALUES (v_klantcode,
v_locatie_code,
v_locatie_omschrijving,
v_gebouw_code,
v_gebouw_omschrijving,
v_verdieping_volgnr,
v_ruimte_nr,
v_ruimte_omschrijving,
v_kenmerkwaarde1,
v_kenmerkwaarde2,
v_kenmerkwaarde3,
v_kenmerkwaarde4,
v_kenmerkwaarde5,
v_deel_omschrijving,
v_deel_reserveerbaar);
v_count := v_count + 1;
END IF;
END;
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!');
END IF;
fac.imp_writelog (p_import_key,
'S',
'Aantal ingelezen regels: ' || TO_CHAR (v_count),
'');
EXCEPTION
WHEN OTHERS
THEN
v_errorhint := v_errormsg;
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_errormsg || ' - ' || v_aanduiding,
v_errorhint);
END flex_import_wp;
/
CREATE OR REPLACE PROCEDURE flex_update_wp (
p_import_key IN NUMBER)
AS
v_errormsg VARCHAR (200);
v_errorhint VARCHAR (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (150);
currentversion fac_module.fac_module_version%TYPE;
v_aanduiding VARCHAR (100);
BEGIN
v_errorhint := 'Vullen van de locatie en gebouwgegevens';
DELETE fac_imp_onrgoed1;
INSERT INTO fac_imp_onrgoed1 (alg_regio_omschrijving,
alg_district_omschrijving,
alg_locatie_code,
alg_locatie_omschrijving,
alg_gebouw_code,
alg_gebouw_naam,
alg_srtgebouw_omschrijving)
SELECT klantcode,
klantcode,
alg_locatie_code,
alg_locatie_omschrijving,
alg_gebouw_code,
alg_gebouw_omschrijving,
'Algemeen'
FROM flex_imp_wp
GROUP BY klantcode,
alg_locatie_code,
alg_locatie_omschrijving,
alg_gebouw_code,
alg_gebouw_omschrijving;
fac_update_onrgoed1(p_import_key);
v_errorhint := 'Vullen van de verdieping en ruimtegegevens';
DELETE fac_imp_onrgoed2;
INSERT INTO fac_imp_onrgoed2 (alg_locatie_code,
alg_gebouw_code,
alg_verdieping_volgnr,
alg_ruimte_nr,
alg_ruimte_omschrijving,
alg_srtruimte_omschrijving
)
SELECT alg_locatie_code,
alg_gebouw_code,
alg_verdieping_volgnr,
alg_ruimte_nr,
alg_ruimte_omschrijving,
'Algemeen'
FROM flex_imp_wp
GROUP BY alg_locatie_code,
alg_gebouw_code,
alg_verdieping_volgnr,
alg_ruimte_nr,
alg_ruimte_omschrijving;
fac_update_onrgoed2(p_import_key);
v_errorhint := 'Vullen van de werkplekgegevens';
DELETE fac_imp_ins;
INSERT INTO fac_imp_ins (ins_discipline_omschrijving,
ins_srtgroep_omschrijving,
ins_srtdeel_code,
ins_srtdeel_omschrijving,
ins_deel_omschrijving,
reserveerbaar,
alg_locatie_code,
alg_gebouw_code,
alg_verdieping_volgnr,
alg_ruimte_nr,
ins_deel_aantal,
res_deel_alg_level,
res_discipline_omschrijving)
SELECT 'Interieur',
'Werkplekken',
'WP',
'Werkplek',
ins_deel_omschrijving,
DECODE(UPPER(ins_deel_reserveerbaar), 'J', 1, 0),
alg_locatie_code,
alg_gebouw_code,
alg_verdieping_volgnr,
alg_ruimte_nr,
1,
2, -- Locatie
klantcode || '-' || 'Werkplekken'
FROM flex_imp_wp;
fac_update_ins (p_import_key);
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_errormsg || v_aanduiding,
v_errorhint);
END flex_update_wp;
/
------ payload end ------
SET DEFINE OFF
BEGIN adm.systrackscriptId ('$Id$', 0); END;
/
COMMIT;
SET ECHO OFF
SPOOL OFF
SET DEFINE ON
PROMPT Logfile of this upgrade is: &fcltlogfile