Files
Database/FAC/FAC_PACF.SRC
Erik Groener 1d62bb6a5f YKPN#88810 Uitschakelen van het kunnen boeken van facturen op een contract
svn path=/Database/trunk/; revision=71137
2025-12-03 14:35:03 +00:00

24062 lines
1.0 MiB
Raw Blame History

/* $Revision$
* $Id$
*/
/* FAC_PACF.SRC, (F means FIP) to be included from fac_pac.src, isolated for convenience only
*
* Facilitor Import (en Export) routines. Verplichte richtlijnen:
*
* Voor Importfunctie XXXX moeten (uitsluitend) worden gedefinieerd
* tabel fac_imp_XXXX
* procedure fac_import_XXXX vult die tabel
* procedure fac_update_XXXX vult de database op basis van die tabel
*
* evt nodige functies en procedures moeten lokaal of generiek toepasbaar worden gedefinieerd
*/
-- Generieke procedure om csv-regels uit FAC_IMP_FILE
-- te splitsen naar losse kolommen in FAC_IMP_CSV
CREATE OR REPLACE PROCEDURE fac_import_file2csv (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT fac_imp_file_index, fac_imp_file_line
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
c_delim VARCHAR2 (1);
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line
v_errorhint VARCHAR2 (1000);
TYPE array_t IS VARRAY (100) OF VARCHAR2 (4000);
a_fields array_t := array_t ();
rec_count fac_imp_csv.fac_imp_csv_index%TYPE;
collist VARCHAR2 (4000);
fldlist VARCHAR2 (4000);
l_cursor INTEGER DEFAULT DBMS_SQL.open_cursor;
l_sql VARCHAR2 (4000);
returnValue PLS_INTEGER;
BEGIN
SELECT COALESCE (fac_import_app_delimiter, ';')
INTO c_delim
FROM fac_import fi, fac_import_app fia
WHERE fi.fac_import_key = p_import_key AND fi.fac_import_app_key = fia.fac_import_app_key;
rec_count := 0;
FOR rec IN c1
LOOP
v_errorhint := 'Fout bij splitsen csv regel';
v_newline := rec.fac_imp_file_line;
IF TRIM (REPLACE (v_newline, c_delim, '')) IS NULL -- geen lege regels
THEN
CONTINUE;
END IF;
rec_count := rec_count + 1;
FOR f IN 1 .. a_fields.COUNT
LOOP
a_fields (f) := NULL;
END LOOP;
FOR f IN 1 .. 100
LOOP
IF (rec_count = 1) -- eerste (header) regel bepaalt het aantal kolommen
THEN
IF (a_fields.COUNT = 100)
THEN
raise_application_error(-20001, 'More than ' || a_fields.COUNT || ' columns in csv');
END IF;
a_fields.EXTEND;
collist := collist || ', fac_imp_csv_col' || CASE WHEN f < 10 THEN '0' ELSE '' END || f;
fldlist := fldlist || ', :a_fields' || f;
ELSIF f > a_fields.COUNT
THEN
CONTINUE;
END IF;
fac.imp_getfield (v_newline, c_delim, a_fields (f));
IF v_newline IS NULL -- klaar met deze regel
THEN
EXIT;
END IF;
END LOOP;
IF (rec_count = 1)
THEN
DBMS_OUTPUT.Put_line ('Detected ' || a_fields.COUNT || ' columns in csv');
fac.imp_writelog (p_import_key,
'I',
'Detected ' || a_fields.COUNT || ' columns in csv',
'');
l_sql :=
'INSERT INTO fac_imp_csv (fac_import_key, fac_imp_csv_index'
|| collist
|| ') VALUES (:import_key, :rec_count'
|| fldlist
|| ')';
--DBMS_OUTPUT.put_line (l_sql);
DBMS_SQL.parse (l_cursor, l_sql, DBMS_SQL.native);
DBMS_SQL.bind_variable (l_cursor, ':import_key', p_import_key);
END IF;
DBMS_SQL.bind_variable (l_cursor, ':rec_count', rec.fac_imp_file_index);
FOR f IN 1 .. a_fields.COUNT
LOOP
DBMS_SQL.bind_variable (l_cursor, ':a_fields' || f, a_fields (f));
END LOOP;
returnValue := DBMS_SQL.execute (l_cursor);
END LOOP;
IF (rec_count > 0)
THEN
DBMS_SQL.close_cursor (l_cursor);
END IF;
fac.imp_writelog (p_import_key,
'S',
'Converted ' || rec_count || ' csv lines',
'');
EXCEPTION
WHEN OTHERS
THEN
fac.imp_writelog (p_import_key,
'E',
'ORACLE (error ' || SQLCODE || '/' || SUBSTR (SQLERRM, 1, 200) || ')',
v_errorhint);
END;
/
CREATE OR REPLACE PROCEDURE fac_import_genericcsv (
p_import_key IN NUMBER
)
IS
BEGIN
-- Het import csv-bestand wordt nu ingelezen met /imp/imp_inlezen.asp (en imp/imp_shared.js).
-- Van daaruit worden de gegevens in de tabel fac_imp_csv gezet.
-- fac_import_file2csv(p_import_key);
NULL;
END;
/
CREATE OR REPLACE FUNCTION fac_check_import_header(p_field IN VARCHAR2, p_value IN VARCHAR2) RETURN BOOLEAN
IS
v_result BOOLEAN := False;
BEGIN
IF ( UPPER (REPLACE(p_field, '_',' ')) = p_value)
THEN
v_result := True;
END IF;
RETURN v_result;
END;
/
-- Geen PROCEDURE fac_update_genericcsv, dat gebeurt in de praktijk met een custom once script
-- Procedures om catalogi in te lezen en te verwerken
CREATE OR REPLACE PROCEDURE fac_import_catalogus (
p_import_key IN NUMBER
)
IS
p_discipline_key NUMBER(10);
p_bedrijf_key NUMBER(10);
c_delim VARCHAR2 (2) := fac.import_delimiter(p_import_key);
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
header_is_valid NUMBER := 0;
v_count_tot NUMBER (10) := 0;
v_count_import NUMBER (10) := 0;
v_ongeldig NUMBER (1) := 0;
-- De importvelden
v_discipline_omschrijving VARCHAR2 (255);
v_bedrijf_naam VARCHAR2 (255);
v_catalogus_datum VARCHAR2 (255);
v_srtdeel_nr VARCHAR2 (255);
v_srtgroep_omschrijving VARCHAR2 (255);
v_srtdeel_omschrijving VARCHAR2 (255);
v_srtdeel_prijs VARCHAR2 (255);
v_srtdeel_eenheid VARCHAR2 (255);
v_srtdeel_image VARCHAR2 (255);
v_srtdeel_veelvoud VARCHAR2 (255);
v_srtdeel_btw VARCHAR2 (255);
v_srtdeel_vervaldatum VARCHAR2 (255);
v_srtdeel_inkprijs VARCHAR2 (255);
v_srtdeel_minimum VARCHAR2 (255);
v_bes_staffeltabel_naam VARCHAR2 (255);
v_srtdeel_wijzigdagen VARCHAR2 (255);
v_srtdeel_annuleerdagen VARCHAR2 (255);
v_srtdeel_opmerking VARCHAR2 (4000); -- straks afgekapt op 2000
-- Overige velden:
v_discipline_key NUMBER (10);
v_bedrijf_key NUMBER (10);
v_bes_staffeltabel_key NUMBER (10);
CURSOR c1
IS
SELECT fac_imp_file_line,
LENGTH (TRIM (REPLACE (fac_imp_file_line, c_delim, '')))
regellengte
FROM FAC_IMP_FILE
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
SELECT ins_discipline_key, prs_bedrijf_key
INTO p_discipline_key, p_bedrijf_key
FROM fac_import fi, fac_import_app fia
WHERE fi.fac_import_key = p_import_key
AND fi.fac_import_app_key = fia.fac_import_app_key;
-- Eerst opruiming
-- LET OP: we ondersteunen geen multi-variant meer
DELETE FROM fac_imp_catalogus;
FOR rec IN c1
LOOP
BEGIN
v_aanduiding := '';
v_errorhint := 'Fout inlezen importregel';
v_newline := rec.fac_imp_file_line;
v_ongeldig := 0;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_delim, v_discipline_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_bedrijf_naam);
fac.imp_getfield (v_newline, c_delim, v_catalogus_datum);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_nr);
fac.imp_getfield (v_newline, c_delim, v_srtgroep_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_prijs);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_eenheid);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_image);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_veelvoud);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_btw);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_vervaldatum);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_inkprijs);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_minimum);
fac.imp_getfield (v_newline, c_delim, v_bes_staffeltabel_naam);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_wijzigdagen);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_annuleerdagen);
fac.imp_getfield (v_newline, c_delim, v_srtdeel_opmerking);
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop. Ik controleer daarbij - sinds UWVA#21562 - bijna alle
-- kolommen (spaties in kolomheaders zijn onhandig bij "round-trip syncen").
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
IF (header_is_valid = 0)
THEN
IF UPPER (TRIM (v_discipline_omschrijving)) LIKE 'CATALOGUS%'
AND UPPER (TRIM (v_bedrijf_naam)) = 'LEVERANCIER'
--AND UPPER (TRIM (v_catalogus_datum)) = 'CAT DATUM' -- Laat maar!
AND UPPER (TRIM (v_srtdeel_nr)) = 'ARTIKELNR'
AND UPPER (TRIM (v_srtgroep_omschrijving)) = 'GROEP'
AND UPPER (TRIM (v_srtdeel_omschrijving)) = 'OMSCHRIJVING'
AND UPPER (TRIM (v_srtdeel_prijs)) = 'PRIJS'
AND UPPER (TRIM (v_srtdeel_eenheid)) = 'EENHEID'
AND UPPER (TRIM (v_srtdeel_image)) = 'PICTURE'
AND UPPER (TRIM (v_srtdeel_veelvoud)) = 'ORDERAANTAL'
AND UPPER (TRIM (v_srtdeel_btw)) = 'TAX'
AND UPPER (TRIM (v_srtdeel_vervaldatum)) = 'DUEDATE'
AND UPPER (TRIM (v_srtdeel_inkprijs)) = 'INKOOPPRIJS'
AND UPPER (TRIM (v_srtdeel_minimum)) = 'MINIMUM'
AND UPPER (TRIM (v_bes_staffeltabel_naam)) = 'STAFFELTABEL'
--AND UPPER (TRIM (v_srtdeel_wijzigdagen)) = 'WIJZIGDAGEN' -- Laat maar!
--AND UPPER (TRIM (v_srtdeel_annuleerdagen)) = 'ANNULEERDAGEN' -- Laat maar!
AND UPPER (TRIM (v_srtdeel_opmerking)) = 'OPMERKING'
THEN
header_is_valid := 1;
END IF;
ELSIF rec.regellengte > 1 -- Lege regels overslaan!
THEN
v_count_tot := v_count_tot + 1;
v_aanduiding :=
'['
|| TRIM (v_discipline_omschrijving)
|| '|'
|| TRIM (v_bedrijf_naam)
|| '|'
|| TRIM (v_srtdeel_nr)
|| '] ';
v_discipline_omschrijving := TRIM (v_discipline_omschrijving);
v_errorhint :=
'Catalogus onbekend/ongeldig; regel wordt niet ingelezen';
SELECT ins_discipline_key
INTO v_discipline_key
FROM INS_TAB_DISCIPLINE
WHERE UPPER (ins_discipline_omschrijving) =
UPPER (v_discipline_omschrijving)
AND COALESCE (p_discipline_key, ins_discipline_key) =
ins_discipline_key -- CONN#20934/Import bedoelt voor catalogus?
AND ins_discipline_module = 'BES'
AND ins_discipline_verwijder IS NULL;
v_bedrijf_naam := TRIM (v_bedrijf_naam);
v_errorhint :=
'Bedrijf onbekend/ongeldig; regel wordt niet ingelezen';
SELECT prs_bedrijf_key
INTO v_bedrijf_key
FROM PRS_BEDRIJF
WHERE UPPER (prs_bedrijf_naam) = UPPER (v_bedrijf_naam)
AND COALESCE (p_bedrijf_key, prs_bedrijf_key) =
prs_bedrijf_key -- Import bedoelt voor bedrijf?
AND prs_bedrijf_verwijder IS NULL;
v_errorhint := 'Fout bij controleren importregel';
-- Indien leeg, dan catalogusdatum=SYSDATE gebruiken!
v_catalogus_datum :=
COALESCE (TRIM (v_catalogus_datum),
TO_CHAR (SYSDATE, 'yyyymmdd'));
IF fac.safe_to_date (v_catalogus_datum, 'yyyymmdd') IS NULL
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Ongeldige catalogusdatum',
'Regel wordt niet ingelezen');
v_ongeldig := 1;
END IF;
v_srtdeel_nr := TRIM (v_srtdeel_nr);
IF LENGTH (v_srtdeel_nr) > 32
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Artikelnummer te lang',
'Nummer wordt afgebroken (Nr:' || v_srtdeel_nr || ')'
);
END IF;
v_srtgroep_omschrijving := TRIM (v_srtgroep_omschrijving);
IF LENGTH (v_srtgroep_omschrijving) > 60
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Groepomschrijving te lang',
'Omschrijving wordt afgebroken (Nr:' || v_srtdeel_nr || ')'
);
END IF;
v_srtdeel_omschrijving := TRIM (v_srtdeel_omschrijving);
IF LENGTH (v_srtdeel_omschrijving) > 100
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Artikelomschrijving te lang',
'Omschrijving wordt afgebroken (Nr:' || v_srtdeel_nr || ')'
);
END IF;
-- Indien leeg, dan blijft/wordt prijs=ongedefinieerd=NULL!
v_srtdeel_prijs := TRIM (v_srtdeel_prijs);
IF v_srtdeel_prijs IS NOT NULL
AND fac.safe_to_number (v_srtdeel_prijs) IS NULL
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Ongeldige prijs',
'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')'
);
v_ongeldig := 1;
END IF;
v_srtdeel_eenheid := TRIM (v_srtdeel_eenheid);
IF LENGTH (v_srtdeel_eenheid) > 30
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Eenheid te lang',
'Eenheid wordt afgebroken (Nr:' || v_srtdeel_nr || ')'
);
END IF;
v_srtdeel_image := TRIM (v_srtdeel_image);
IF LENGTH (v_srtdeel_image) > 255
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Imagenaam te lang',
'Naam wordt afgebroken (Nr:' || v_srtdeel_nr || ')'
);
END IF;
-- Veelvoud mag niet negatief of meer zijn dan 6 posities lang.
-- Indien leeg, dan veelvoud=1!
v_srtdeel_veelvoud := COALESCE (TRIM (v_srtdeel_veelvoud), '1');
IF fac.safe_to_number (v_srtdeel_veelvoud) IS NULL
OR fac.safe_to_number (v_srtdeel_veelvoud) < 0
OR fac.safe_to_number (v_srtdeel_veelvoud) > 999999
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Ongeldig veelvoud',
'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')'
);
v_ongeldig := 1;
END IF;
-- Indien leeg, dan blijft/wordt BTW-tarief=ongedefinieerd=NULL!
v_srtdeel_btw := TRIM (v_srtdeel_btw);
IF v_srtdeel_btw IS NOT NULL
AND fac.safe_to_number (v_srtdeel_btw) IS NULL
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Ongeldig BTW-tarief',
'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')'
);
v_ongeldig := 1;
END IF;
-- Indien leeg, dan blijft/wordt vervaldatum=ongedefinieerd=NULL!
v_srtdeel_vervaldatum := TRIM (v_srtdeel_vervaldatum);
IF v_srtdeel_vervaldatum IS NOT NULL
AND fac.safe_to_date (v_srtdeel_vervaldatum, 'yyyymmdd') IS NULL
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Ongeldige vervaldatum',
'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')'
);
v_ongeldig := 1;
END IF;
-- Indien leeg, dan blijft/wordt inkoopprijs=ongedefinieerd=NULL!
v_srtdeel_inkprijs := TRIM (v_srtdeel_inkprijs);
IF v_srtdeel_inkprijs IS NOT NULL
AND fac.safe_to_number (v_srtdeel_inkprijs) IS NULL
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Ongeldige inkoopprijs',
'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')'
);
v_ongeldig := 1;
END IF;
-- Minimum mag niet negatief of meer zijn dan 6 posities lang.
-- Indien leeg, dan blijft/wordt minimum=ongedefinieerd=NULL!
v_srtdeel_minimum := TRIM (v_srtdeel_minimum);
IF v_srtdeel_minimum IS NOT NULL
AND ( fac.safe_to_number (v_srtdeel_minimum) IS NULL
OR fac.safe_to_number (v_srtdeel_minimum) < 0
OR fac.safe_to_number (v_srtdeel_minimum) > 999999)
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Ongeldig minimum',
'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')'
);
v_ongeldig := 1;
END IF;
v_bes_staffeltabel_naam := TRIM (v_bes_staffeltabel_naam);
v_errorhint :=
'Fout bij bepalen staffeltabel; regel wordt niet ingelezen';
IF v_bes_staffeltabel_naam IS NOT NULL
THEN
SELECT bes_staffeltabel_key
INTO v_bes_staffeltabel_key
FROM bes_staffeltabel
WHERE UPPER (bes_staffeltabel_naam) =
UPPER (v_bes_staffeltabel_naam);
END IF;
-- Wijzigdagen mag niet negatief of meer zijn dan 3 posities lang.
-- Indien leeg, dan blijft/wordt wijzigdagen=ongedefinieerd=NULL!
v_srtdeel_wijzigdagen := TRIM (v_srtdeel_wijzigdagen);
IF v_srtdeel_wijzigdagen IS NOT NULL
AND ( fac.safe_to_number (v_srtdeel_wijzigdagen) IS NULL
OR fac.safe_to_number (v_srtdeel_wijzigdagen) < 0
OR fac.safe_to_number (v_srtdeel_wijzigdagen) > 999)
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Ongeldig aantal wijzigdagen',
'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')'
);
v_ongeldig := 1;
END IF;
-- Annuleerdagen mag niet negatief of meer zijn dan 3 posities lang.
-- Indien leeg, dan blijft/wordt annuleerdagen=ongedefinieerd=NULL!
v_srtdeel_annuleerdagen := TRIM (v_srtdeel_annuleerdagen);
IF v_srtdeel_annuleerdagen IS NOT NULL
AND ( fac.safe_to_number (v_srtdeel_annuleerdagen) IS NULL
OR fac.safe_to_number (v_srtdeel_annuleerdagen) < 0
OR fac.safe_to_number (v_srtdeel_annuleerdagen) > 999)
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Ongeldig aantal annuleerdagen',
'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')'
);
v_ongeldig := 1;
END IF;
v_srtdeel_opmerking := TRIM (v_srtdeel_opmerking);
IF LENGTH (v_srtdeel_opmerking) > 2000
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Opmerking te lang',
'Opmerking wordt afgebroken (Nr:' || v_srtdeel_nr || ')'
);
END IF;
IF v_ongeldig = 0
THEN
v_errorhint := 'Fout toevoegen importregel';
INSERT INTO FAC_IMP_CATALOGUS (
fac_import_key,
ins_discipline_key,
prs_bedrijf_key,
fac_imp_catalogus_datum,
ins_srtdeel_nr,
ins_srtgroep_omschrijving,
ins_srtdeel_omschrijving,
ins_srtdeel_prijs,
ins_srtdeel_inkprijs,
ins_srtdeel_eenheid,
ins_srtdeel_image,
ins_srtdeel_veelvoud,
ins_srtdeel_btw,
ins_srtdeel_vervaldatum,
ins_srtdeel_minimum,
bes_staffeltabel_key,
ins_srtdeel_wijzigdagen,
ins_srtdeel_annuleerdagen,
ins_srtdeel_opmerking
)
VALUES (
p_import_key,
v_discipline_key,
v_bedrijf_key,
fac.safe_to_date (v_catalogus_datum,
'yyyymmdd'),
SUBSTR (v_srtdeel_nr, 1, 32),
SUBSTR (v_srtgroep_omschrijving, 1, 60),
SUBSTR (v_srtdeel_omschrijving, 1, 100),
fac.safe_to_number (v_srtdeel_prijs),
fac.safe_to_number (v_srtdeel_inkprijs),
SUBSTR (v_srtdeel_eenheid, 1, 30),
SUBSTR (v_srtdeel_image, 1, 255),
fac.safe_to_number (v_srtdeel_veelvoud),
fac.safe_to_number (v_srtdeel_btw),
fac.safe_to_date (v_srtdeel_vervaldatum,
'yyyymmdd'),
fac.safe_to_number (v_srtdeel_minimum),
v_bes_staffeltabel_key,
fac.safe_to_number (v_srtdeel_wijzigdagen),
fac.safe_to_number (v_srtdeel_annuleerdagen),
SUBSTR (v_srtdeel_opmerking, 1, 2000)
);
v_count_import := v_count_import + 1;
END IF;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
v_errorhint);
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!');
ELSE
fac.imp_writelog (
p_import_key,
'S',
'Inleesproces: aantal ingelezen importregels: '
|| TO_CHAR (v_count_tot),
''
);
fac.imp_writelog (
p_import_key,
'S',
'Inleesproces: aantal ongeldige niet ingelezen importregels: '
|| TO_CHAR (v_count_tot - v_count_import),
''
);
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Inlezen catalogus afgebroken!');
END fac_import_catalogus;
/
CREATE OR REPLACE PROCEDURE fac_update_catalogus (
p_import_key IN NUMBER
)
AS
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
v_disc_oms ins_tab_discipline.ins_discipline_omschrijving%TYPE;
v_bedr_naam prs_bedrijf.prs_bedrijf_naam%TYPE;
-- Voor <20><>n catalogus
PROCEDURE l_update_catalogus (pdisc_key IN NUMBER, pbedr_key IN NUMBER)
AS
CURSOR c_delsrtdeel (
cdisc_key IN NUMBER,
cbedr_key IN NUMBER
)
IS
SELECT sd.bes_srtdeel_key,
sd.bes_srtdeel_nr,
sd.bes_srtdeel_omschrijving
FROM bes_srtdeel sd, bes_srtgroep sg
WHERE sd.bes_srtgroep_key = sg.bes_srtgroep_key
AND sg.ins_discipline_key = cdisc_key
AND sd.prs_bedrijf_key = cbedr_key
AND sd.bes_srtdeel_verwijder IS NULL
AND NOT EXISTS -- Niet meer in importbestand irt. cat/bedrijf!
(SELECT 1
FROM fac_imp_catalogus f
WHERE fac_import_key = p_import_key
AND f.ins_discipline_key = cdisc_key
AND f.prs_bedrijf_key = cbedr_key
AND UPPER (f.ins_srtdeel_nr) =
UPPER (sd.bes_srtdeel_nr));
CURSOR c_delsrtgroep (
cdisc_key IN NUMBER,
cbedr_key IN NUMBER
)
IS
SELECT sg.bes_srtgroep_key, sg.bes_srtgroep_omschrijving
FROM bes_srtgroep sg
WHERE sg.ins_discipline_key = cdisc_key
AND sg.bes_srtgroep_verwijder IS NULL
AND NOT EXISTS -- Niet meer in importbestand irt. alleen cat!
(SELECT 1
FROM fac_imp_catalogus f
WHERE fac_import_key = p_import_key
AND f.ins_discipline_key = cdisc_key
AND UPPER (f.ins_srtgroep_omschrijving) =
UPPER (sg.bes_srtgroep_omschrijving))
AND NOT EXISTS -- Waaronder geen artikelen van ander bedrijf!
(SELECT 1
FROM bes_srtdeel sd
WHERE sd.bes_srtgroep_key = sg.bes_srtgroep_key
AND sd.prs_bedrijf_key <> cbedr_key);
CURSOR c_inssrtgroep (
cdisc_key IN NUMBER,
cbedr_key IN NUMBER
)
IS
SELECT DISTINCT f.ins_srtgroep_omschrijving
FROM fac_imp_catalogus f
WHERE fac_import_key = p_import_key
AND f.ins_srtgroep_omschrijving IS NOT NULL
AND f.ins_discipline_key = cdisc_key
AND f.prs_bedrijf_key = cbedr_key
AND NOT EXISTS
(SELECT 1
FROM bes_srtgroep sg
WHERE sg.ins_discipline_key = cdisc_key
AND UPPER (sg.bes_srtgroep_omschrijving) =
UPPER (f.ins_srtgroep_omschrijving)
AND sg.bes_srtgroep_verwijder IS NULL);
CURSOR c_updsrtdeel (
cdisc_key IN NUMBER,
cbedr_key IN NUMBER
)
IS
SELECT s.bes_srtdeel_key, f.*
FROM fac_imp_catalogus f, bes_srtgroep g, bes_srtdeel s
WHERE fac_import_key = p_import_key
AND f.ins_discipline_key = cdisc_key
AND f.prs_bedrijf_key = cbedr_key
AND g.ins_discipline_key = cdisc_key
AND g.bes_srtgroep_key = s.bes_srtgroep_key
AND UPPER (s.bes_srtdeel_nr) = UPPER (f.ins_srtdeel_nr)
AND s.prs_bedrijf_key = cbedr_key
AND s.bes_srtdeel_verwijder IS NULL;
CURSOR c_inssrtdeel (
cdisc_key IN NUMBER,
cbedr_key IN NUMBER
)
IS
SELECT f.*
FROM fac_imp_catalogus f
WHERE fac_import_key = p_import_key
AND f.ins_discipline_key = cdisc_key
AND f.prs_bedrijf_key = cbedr_key
AND NOT EXISTS
(SELECT 1
FROM bes_srtgroep g, bes_srtdeel s
WHERE g.ins_discipline_key = cdisc_key
AND g.bes_srtgroep_key = s.bes_srtgroep_key
AND UPPER (s.bes_srtdeel_nr) =
UPPER (f.ins_srtdeel_nr)
AND s.prs_bedrijf_key = cbedr_key
AND s.bes_srtdeel_verwijder IS NULL);
ccount NUMBER (10);
l_srtgroep_key NUMBER (10);
l_bes_srtdeel_key bes_srtdeel.bes_srtdeel_key%TYPE;
l_omschrijving bes_srtdeel.bes_srtdeel_omschrijving%TYPE;
l_prijs bes_srtdeel_prijs.bes_srtdeel_prijs_prijs%TYPE;
l_inkprijs bes_srtdeel_prijs.bes_srtdeel_prijs_inkprijs%TYPE;
l_veelvoud bes_srtdeel.bes_srtdeel_veelvoud%TYPE;
l_minimum bes_srtdeel.bes_srtdeel_minimum%TYPE;
l_wijzigdagen bes_srtdeel.bes_srtdeel_wijzigdagen%TYPE;
l_annuleerdagen bes_srtdeel.bes_srtdeel_annuleerdagen%TYPE;
l_opmerking bes_srtdeel.bes_srtdeel_opmerking%TYPE;
BEGIN
-- DELETE SRTDEEL
ccount := 0;
FOR rec IN c_delsrtdeel (pdisc_key, pbedr_key)
LOOP
v_errormsg := 'Fout bij verwijderen artikel ' || rec.bes_srtdeel_nr;
UPDATE bes_srtdeel
SET bes_srtdeel_verwijder = SYSDATE
WHERE bes_srtdeel_key = rec.bes_srtdeel_key;
v_errormsg := 'Fout bij verwijderen artikelkenmerken ' || rec.bes_srtdeel_nr;
UPDATE bes_kenmerk
SET bes_kenmerk_verwijder = SYSDATE
WHERE bes_kenmerk_niveau = 'S'
AND bes_srtinstallatie_key = rec.bes_srtdeel_key;
fac.imp_writelog (
p_import_key,
'I',
v_aanduiding
|| 'Artikel '
|| rec.bes_srtdeel_nr
|| '/'
|| rec.bes_srtdeel_omschrijving
|| ' is verwijderd',
''
);
ccount := ccount + 1;
END LOOP;
fac.imp_writelog (
p_import_key,
'S',
v_aanduiding
|| 'Er zijn '
|| TO_CHAR (ccount)
|| ' artikelen verwijderd',
''
);
COMMIT;
-- DELETE SRTGROEP
ccount := 0;
FOR rec IN c_delsrtgroep (pdisc_key, pbedr_key)
LOOP
v_errormsg := 'Fout bij verwijderen groep ' || rec.bes_srtgroep_omschrijving;
UPDATE bes_srtgroep
SET bes_srtgroep_verwijder = SYSDATE
WHERE bes_srtgroep_key = rec.bes_srtgroep_key;
v_errormsg := 'Fout bij verwijderen groepskenmerken ' || rec.bes_srtgroep_omschrijving;
UPDATE bes_kenmerk
SET bes_kenmerk_verwijder = SYSDATE
WHERE bes_kenmerk_niveau = 'G'
AND bes_srtinstallatie_key = rec.bes_srtgroep_key;
fac.imp_writelog (
p_import_key,
'I',
v_aanduiding
|| 'Groep '
|| rec.bes_srtgroep_omschrijving
|| ' is verwijderd',
''
);
ccount := ccount + 1;
END LOOP;
fac.imp_writelog (
p_import_key,
'S',
v_aanduiding
|| 'Er zijn '
|| TO_CHAR (ccount)
|| ' groepen verwijderd',
''
);
COMMIT;
-- INSERT SRTGROEP
ccount := 0;
FOR rec IN c_inssrtgroep (pdisc_key, pbedr_key)
LOOP
BEGIN
v_errormsg :=
'Fout bij toevoegen groep ' || rec.ins_srtgroep_omschrijving;
INSERT INTO bes_srtgroep (
ins_discipline_key,
bes_srtgroep_omschrijving
)
VALUES (pdisc_key, rec.ins_srtgroep_omschrijving);
fac.imp_writelog (
p_import_key,
'I',
v_aanduiding
|| 'Groep '
|| rec.ins_srtgroep_omschrijving
|| ' is toegevoegd',
''
);
ccount := ccount + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'');
END;
END LOOP;
fac.imp_writelog (
p_import_key,
'S',
v_aanduiding
|| 'Er zijn '
|| TO_CHAR (ccount)
|| ' groepen toegevoegd',
''
);
COMMIT;
-- UPDATE SRTDEEL
ccount := 0;
FOR rec IN c_updsrtdeel (pdisc_key, pbedr_key)
LOOP
BEGIN
v_errormsg :=
'Fout bij bepalen groep ' || rec.ins_srtgroep_omschrijving;
SELECT bes_srtgroep_key
INTO l_srtgroep_key
FROM bes_srtgroep
WHERE bes_srtgroep_verwijder IS NULL
AND ins_discipline_key = pdisc_key
AND UPPER (bes_srtgroep_omschrijving) =
UPPER (rec.ins_srtgroep_omschrijving);
v_errormsg :=
'Fout bij bepalen huidige artikel-velden '
|| rec.ins_srtdeel_nr;
-- Tbv. logging de oude waarden opzoeken.
SELECT bes_srtdeel_omschrijving,
bes.getsrtdeelprijs (rec.bes_srtdeel_key, NULL),
bes.getsrtdeelinkprijs (rec.bes_srtdeel_key, NULL),
bes_srtdeel_veelvoud,
bes_srtdeel_minimum,
bes_srtdeel_wijzigdagen,
bes_srtdeel_annuleerdagen,
bes_srtdeel_opmerking
INTO l_omschrijving,
l_prijs,
l_inkprijs,
l_veelvoud,
l_minimum,
l_wijzigdagen,
l_annuleerdagen,
l_opmerking
FROM bes_srtdeel
WHERE bes_srtdeel_verwijder IS NULL
AND bes_srtdeel_key = rec.bes_srtdeel_key;
v_errormsg := 'Fout bij bijwerken artikel ' || rec.ins_srtdeel_nr;
-- Codetechnisch zou hier bes.upsert_srtdeel() passen, maar die doet bv nog geen inkprijs.
-- Later nog eens TODO
UPDATE bes_srtdeel
SET bes_srtgroep_key = l_srtgroep_key,
bes_srtdeel_omschrijving = rec.ins_srtdeel_omschrijving,
bes_srtdeel_image = rec.ins_srtdeel_image,
bes_srtdeel_btw = rec.ins_srtdeel_btw,
bes_srtdeel_eenheid = rec.ins_srtdeel_eenheid,
bes_srtdeel_vervaldatum = rec.ins_srtdeel_vervaldatum,
bes_srtdeel_veelvoud = rec.ins_srtdeel_veelvoud,
bes_srtdeel_minimum = rec.ins_srtdeel_minimum,
bes_staffeltabel_key = rec.bes_staffeltabel_key,
bes_srtdeel_wijzigdagen = rec.ins_srtdeel_wijzigdagen,
bes_srtdeel_annuleerdagen = rec.ins_srtdeel_annuleerdagen,
bes_srtdeel_opmerking = rec.ins_srtdeel_opmerking
WHERE bes_srtdeel_verwijder IS NULL
AND bes_srtdeel_key = rec.bes_srtdeel_key;
IF l_omschrijving <> rec.ins_srtdeel_omschrijving
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is gewijzigd',
'Omschrijving '
|| l_omschrijving
|| ' -> '
|| rec.ins_srtdeel_omschrijving
);
END IF;
bes.upsert_srtdeel_prijs (rec.bes_srtdeel_key, rec.ins_srtdeel_prijs, rec.ins_srtdeel_inkprijs);
IF l_prijs <> rec.ins_srtdeel_prijs
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is gewijzigd',
'Prijs ' || l_prijs || ' -> ' || rec.ins_srtdeel_prijs
);
END IF;
IF l_inkprijs <> rec.ins_srtdeel_inkprijs
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is gewijzigd',
'Inkoopprijs '
|| l_inkprijs
|| ' -> '
|| rec.ins_srtdeel_inkprijs
);
END IF;
IF l_veelvoud <> rec.ins_srtdeel_veelvoud
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is gewijzigd',
'Bestelveelvoud '
|| l_veelvoud
|| ' -> '
|| rec.ins_srtdeel_veelvoud
);
END IF;
IF l_minimum <> rec.ins_srtdeel_minimum
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is gewijzigd',
'Bestelminimum '
|| l_minimum
|| ' -> '
|| rec.ins_srtdeel_minimum
);
END IF;
IF l_wijzigdagen <> rec.ins_srtdeel_wijzigdagen
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is gewijzigd',
'Wijzigdagen '
|| l_wijzigdagen
|| ' -> '
|| rec.ins_srtdeel_wijzigdagen
);
END IF;
IF l_annuleerdagen <> rec.ins_srtdeel_annuleerdagen
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is gewijzigd',
'Annuleerdagen '
|| l_annuleerdagen
|| ' -> '
|| rec.ins_srtdeel_annuleerdagen
);
END IF;
IF l_opmerking <> rec.ins_srtdeel_opmerking
THEN
fac.imp_writelog (
p_import_key,
'I',
'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_opmerking
|| ' is gewijzigd',
'Opmerking '
|| l_opmerking
|| ' -> '
|| rec.ins_srtdeel_opmerking
);
END IF;
ccount := ccount + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'');
END;
END LOOP;
fac.imp_writelog (
p_import_key,
'S',
v_aanduiding
|| 'Er zijn '
|| TO_CHAR (ccount)
|| ' artikelen bijgewerkt',
''
);
COMMIT;
-- INSERT SRTDEEL
ccount := 0;
FOR rec IN c_inssrtdeel (pdisc_key, pbedr_key)
LOOP
BEGIN
v_errormsg :=
'Fout bij bepalen groep ' || rec.ins_srtgroep_omschrijving;
SELECT bes_srtgroep_key
INTO l_srtgroep_key
FROM bes_srtgroep
WHERE bes_srtgroep_verwijder IS NULL
AND ins_discipline_key = pdisc_key
AND UPPER (bes_srtgroep_omschrijving) =
UPPER (rec.ins_srtgroep_omschrijving);
v_errormsg := 'Fout bij toevoegen artikel ' || rec.ins_srtdeel_nr;
INSERT INTO bes_srtdeel (bes_srtgroep_key,
bes_srtdeel_nr,
bes_srtdeel_omschrijving,
bes_srtdeel_image,
bes_srtdeel_btw,
bes_srtdeel_eenheid,
bes_srtdeel_dimensie,
prs_bedrijf_key,
bes_srtdeel_vervaldatum,
bes_srtdeel_veelvoud,
bes_srtdeel_minimum,
bes_staffeltabel_key,
bes_srtdeel_wijzigdagen,
bes_srtdeel_annuleerdagen,
bes_srtdeel_opmerking)
VALUES (l_srtgroep_key,
rec.ins_srtdeel_nr,
rec.ins_srtdeel_omschrijving,
rec.ins_srtdeel_image,
rec.ins_srtdeel_btw,
rec.ins_srtdeel_eenheid,
0,
pbedr_key,
rec.ins_srtdeel_vervaldatum,
rec.ins_srtdeel_veelvoud,
rec.ins_srtdeel_minimum,
rec.bes_staffeltabel_key,
rec.ins_srtdeel_wijzigdagen,
rec.ins_srtdeel_annuleerdagen,
rec.ins_srtdeel_opmerking)
RETURNING bes_srtdeel_key INTO l_bes_srtdeel_key;
bes.upsert_srtdeel_prijs (l_bes_srtdeel_key, rec.ins_srtdeel_prijs, rec.ins_srtdeel_inkprijs);
fac.imp_writelog (
p_import_key,
'I',
v_aanduiding
|| 'Artikel '
|| rec.ins_srtdeel_nr
|| '/'
|| rec.ins_srtdeel_omschrijving
|| ' is toegevoegd',
''
);
ccount := ccount + 1;
EXCEPTION
WHEN DUP_VAL_ON_INDEX
THEN
v_errormsg := 'Artikelnummer dubbel in importbestand';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'');
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'');
END;
END LOOP;
fac.imp_writelog (
p_import_key,
'S',
v_aanduiding
|| 'Er zijn '
|| TO_CHAR (ccount)
|| ' artikelen toegevoegd',
''
);
COMMIT;
END;
BEGIN
-- Doorloop alle catalogi/ bedrijven. Er kunnen er in theorie meerdere tegelijk zijn
FOR rec IN
(SELECT DISTINCT ins_discipline_key, prs_bedrijf_key
FROM fac_imp_catalogus
WHERE fac_import_key = p_import_key)
LOOP
BEGIN
-- Puur voor logging toch even catalogus- en bedrijfsnaam bepalen!
v_aanduiding := '[' || TO_CHAR (rec.ins_discipline_key) || '] ';
v_errormsg := 'Fout bepalen catalogus';
SELECT ins_discipline_omschrijving
INTO v_disc_oms
FROM ins_tab_discipline
WHERE ins_discipline_key = rec.ins_discipline_key;
v_aanduiding := '[' || TO_CHAR (rec.prs_bedrijf_key) || '] ';
v_errormsg := 'Fout bepalen bedrijf';
SELECT prs_bedrijf_naam
INTO v_bedr_naam
FROM prs_v_aanwezigbedrijf
WHERE prs_bedrijf_key = rec.prs_bedrijf_key;
fac.imp_writelog (
p_import_key,
'I',
'Import van catalogus ' || v_disc_oms || '/' || v_bedr_naam,
'discipline: '
|| rec.ins_discipline_key
|| ', bedrijf: '
|| rec.prs_bedrijf_key
);
COMMIT;
v_aanduiding := '[' || v_disc_oms || '|' || v_bedr_naam || '] ';
l_update_catalogus (rec.ins_discipline_key, rec.prs_bedrijf_key);
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'');
COMMIT;
END;
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Verwerken catalogus afgebroken!');
END fac_update_catalogus;
/
CREATE OR REPLACE PROCEDURE fac_import_oprognose (
p_import_key IN NUMBER
)
AS
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line
v_fielddelimitor VARCHAR2 (2);
v_errormsg VARCHAR2 (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER;
--
v_objectcode VARCHAR2 (128);
v_ele_ondbouw VARCHAR2 (128);
v_han_pk VARCHAR2 (128);
v_element VARCHAR2 (128);
v_locatie VARCHAR2 (128);
v_handeling VARCHAR2 (1024);
v_gebrek VARCHAR2 (1024);
v_hoeveelheid VARCHAR2 (128);
v_eenheid VARCHAR2 (128);
v_prijs VARCHAR2 (128);
v_startjaar VARCHAR2 (128);
--
v_ongeldig NUMBER;
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
rec1 c1%ROWTYPE;
BEGIN
v_fielddelimitor := fac.import_delimiter(p_import_key);
header_is_valid := 0;
-- Clear old importdata
DELETE FROM fac_imp_oprognose;
FOR rec1 IN c1
LOOP
BEGIN
v_ongeldig := 0;
IF header_is_valid = 0
THEN
-- de eerste regel vinden we wel best
header_is_valid := 1;
v_ongeldig := 1;
ELSE
v_errormsg := 'Fout bij opvragen te importeren rij';
v_newline := rec1.fac_imp_file_line;
fac.imp_getfield (v_newline, v_fielddelimitor, v_objectcode);
fac.imp_getfield (v_newline, v_fielddelimitor, v_ele_ondbouw);
fac.imp_getfield (v_newline, v_fielddelimitor, v_han_pk);
fac.imp_getfield (v_newline, v_fielddelimitor, v_element);
fac.imp_getfield (v_newline, v_fielddelimitor, v_locatie);
fac.imp_getfield (v_newline, v_fielddelimitor, v_handeling);
fac.imp_getfield (v_newline, v_fielddelimitor, v_gebrek);
fac.imp_getfield (v_newline, v_fielddelimitor, v_hoeveelheid);
fac.imp_getfield (v_newline, v_fielddelimitor, v_eenheid);
fac.imp_getfield (v_newline, v_fielddelimitor, v_prijs);
fac.imp_getfield (v_newline, v_fielddelimitor, v_startjaar);
END IF;
IF v_ongeldig = 0
THEN
v_errormsg := 'Fout bij inlezen te importeren rij';
INSERT INTO fac_imp_oprognose
(objectcode,
ele_ondbouw,
han_pk,
ELEMENT,
locatie,
handeling,
gebrek,
hoeveelheid,
eenheid,
prijs,
startjaar
)
VALUES (v_objectcode,
v_ele_ondbouw,
v_han_pk,
v_element,
v_locatie,
v_handeling,
v_gebrek,
v_hoeveelheid,
v_eenheid,
REPLACE (v_prijs, ',', '.'),
v_startjaar
);
END IF;
END;
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_mes := SUBSTR (SQLERRM, 1, 1000);
v_errormsg := oracle_err_mes;
fac.imp_writelog (p_import_key, 'E', v_errormsg, 'Regel:' || v_newline);
END fac_import_oprognose;
/
CREATE OR REPLACE PROCEDURE fac_update_oprognose (
p_import_key IN NUMBER
)
AS
-- Constanten tbv bepalen mld_kenmerk_key
c_han_pk VARCHAR2 (30) := 'OPROGNOSE_ID';
c_hoeveelheid VARCHAR2 (30) := 'HOEVEELHEID';
c_eenheid VARCHAR2 (30) := 'EENHEID';
c_prijs VARCHAR2 (30) := 'PRIJS';
-- Constanten overig
c_discipline_omschrijving VARCHAR2 (60) := 'Planmatig onderhoud';
c_stdmelding_notfrontend NUMBER (1) := 1;
c_meldbron_upper VARCHAR2 (30) := 'SYSTEM';
c_stdmelding_uitvoertijd NUMBER (3) := 260; -- Aantal werkdagen ongeveer
c_melding_planbaar NUMBER (1) := 1; -- Planbaar
c_melding_module VARCHAR2 (3) := 'MLD';
c_kosten_klant NUMBER (1) := TO_NUMBER (NULL);
c_melding_status NUMBER (10) := 2; -- Ingevoerd
c_mmddstart VARCHAR2 (4) := '0101';
c_mmddeind VARCHAR2 (4) := '1231';
c_melder_setting fac_usrdata.fac_usrdata_upper%TYPE := 'OP_MELDERKEY';
-- Logging
currentversion fac_module.fac_module_version%TYPE;
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errormsg VARCHAR2 (1024);
v_errormsg2 VARCHAR2 (1024);
v_melding_datum DATE;
v_melding_uitvoertijd NUMBER (3);
-- Cursor
CURSOR c1
IS
SELECT *
FROM fac_imp_oprognose;
rec1 c1%ROWTYPE;
-- Overig
stdmelding_key NUMBER (10);
discipline_key NUMBER (10);
meldbron_key NUMBER (10);
locatie_key NUMBER (10);
gebouw_key NUMBER (10);
kenmerk_key NUMBER (10);
kenmerk_key_han_pk NUMBER (10);
kenmerk_key_hoeveelheid NUMBER (10);
kenmerk_key_eenheid NUMBER (10);
kenmerk_key_prijs NUMBER (10);
melding_key NUMBER (10);
perslid_key NUMBER (10);
kostenplaats_key NUMBER (10);
perslid_naam VARCHAR2 (30);
melding_new BOOLEAN;
v_count_success NUMBER (10) := 0;
v_count_fail NUMBER (10) := 0;
stdm_default_disc mld_stdmelding.mld_stdmelding_default_disc%TYPE;
FUNCTION lgetusrsetting (str VARCHAR2)
RETURN VARCHAR2
IS
lresult fac_usrdata.fac_usrdata_omschr%TYPE;
BEGIN
SELECT fac_usrdata_omschr
INTO lresult
FROM fac_usrdata
WHERE fac_usrtab_key = (SELECT fac_usrtab_key
FROM fac_usrtab
WHERE fac_usrtab_object = 'USR_INSTELLINGEN') AND fac_usrdata_upper = UPPER (str);
RETURN lresult;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
RETURN '';
END;
--
-- Geeft de kenmerkkey van kenmerk met UPPER-naam (label) pkenmerkkid
FUNCTION lgetkenmerkkey (pkenmerkid IN VARCHAR2)
RETURN NUMBER
AS
v_result mld_kenmerk.mld_kenmerk_key%TYPE;
BEGIN
BEGIN
SELECT MIN (mld_kenmerk_key)
INTO v_result
FROM mld_srtkenmerk sk, mld_kenmerk k
WHERE sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key AND sk.mld_srtkenmerk_upper = UPPER (pkenmerkid);
EXCEPTION
WHEN OTHERS
THEN
v_result := -1;
END;
RETURN v_result;
END;
--
-- Geeft de meldingkey van dit OPrognose record obv ID, -1 als die niet bestaat
FUNCTION lgetmeldingkey (poprognoseid IN VARCHAR2, pidkey IN NUMBER)
RETURN NUMBER
AS
v_result mld_kenmerkmelding.mld_melding_key%TYPE;
BEGIN
BEGIN
SELECT mld_melding_key
INTO v_result
FROM mld_kenmerkmelding km
WHERE km.mld_kenmerkmelding_verwijder IS NULL
AND UPPER (km.mld_kenmerkmelding_waarde) = UPPER (poprognoseid)
AND km.mld_kenmerk_key = pidkey;
EXCEPTION
WHEN OTHERS
THEN
v_result := -1;
END;
RETURN v_result;
END;
BEGIN
SELECT MAX (fac_module_version)
INTO currentversion
FROM fac_module;
fac.imp_writelog (p_import_key,
'I',
'Facilitor OPROGNOSE import version ' || currentversion,
'$Revision$'
);
v_errormsg := 'Opvragen discipline_key adhv ins_discipline_omschrijving = [' || c_discipline_omschrijving || ']';
-- DBMS_OUTPUT.put_line (v_errormsg);
-- Wat is de planmatigonderhoud discipline
SELECT ins_discipline_key
INTO discipline_key
FROM ins_tab_discipline
WHERE ins_discipline_omschrijving = c_discipline_omschrijving
AND ins_discipline_module = 'MLD';
v_errormsg := 'Opvragen meldbron_key adhv mld_meldbron_upper = [' || c_meldbron_upper || ']';
-- DBMS_OUTPUT.put_line (v_errormsg);
SELECT mld_meldbron_key
INTO meldbron_key
FROM mld_meldbron
WHERE mld_meldbron_upper = c_meldbron_upper;
perslid_key := lgetusrsetting (c_melder_setting);
kenmerk_key_han_pk := lgetkenmerkkey (c_han_pk);
kenmerk_key_hoeveelheid := lgetkenmerkkey (c_hoeveelheid);
kenmerk_key_eenheid := lgetkenmerkkey (c_eenheid);
kenmerk_key_prijs := lgetkenmerkkey (c_prijs);
FOR rec1 IN c1
LOOP
BEGIN
v_errormsg := 'Opvragen mld_stdmelding_key adhv mld_stdmelding_upper = [' || rec1.ELEMENT || ']';
-- DBMS_OUTPUT.put_line (v_errormsg);
SELECT MAX (mld_stdmelding_key)
INTO stdmelding_key
FROM mld_stdmelding
WHERE mld_stdmelding_upper = UPPER (SUBSTR (rec1.ELEMENT, 1, 60));
IF stdmelding_key IS NULL
THEN -- Bestaat de MLD_STDMELDING?
SELECT mld_s_mld_stdmelding_key.NEXTVAL
INTO stdmelding_key
FROM DUAL;
v_errormsg :=
'Aanmaak nieuwe MLD_STD_MELDING met mld_stdmelding_omschrijving = [' || SUBSTR (rec1.ELEMENT, 1, 60)
|| ']';
--DBMS_OUTPUT.put_line (v_errormsg);
-- Aanmaak nieuwe MLD_STDMELDING
BEGIN
INSERT INTO mld_stdmelding
(mld_stdmelding_key,
mld_ins_discipline_key,
mld_stdmelding_omschrijving,
mld_stdmelding_notfrontend,
mld_stdmelding_t_uitvoertijd,
mld_stdmelding_planbaar
)
VALUES (stdmelding_key,
discipline_key,
SUBSTR (rec1.ELEMENT, 1, 60),
c_stdmelding_notfrontend,
MLD_T_UITVOERTIJD(c_stdmelding_uitvoertijd, 'D'),
c_melding_planbaar
);
--DBMS_OUTPUT.put_line ('inserted ' || TO_CHAR (stdmelding_key));
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (NVL (SQLERRM, 'SQLERRM=NULL!!!'), 1, 100);
v_errormsg2 := '(XORACLE error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key, 'E', 'Import_oprognose: ' || v_errormsg, v_errormsg2);
COMMIT;
END;
END IF;
v_errormsg := 'Gebouw [' || rec1.objectcode || '] kan niet worden gevonden';
SELECT alg_gebouw_key
INTO gebouw_key
FROM alg_gebouw
WHERE alg_gebouw_verwijder IS NULL AND alg_gebouw_upper = UPPER (rec1.objectcode);
-- springt naar exception als niet gevonden
v_errormsg := 'Fout bij bepalen locatie van gebouw met key = [' || TO_CHAR (gebouw_key) || ']';
SELECT alg_locatie_key
INTO locatie_key
FROM alg_gebouw
WHERE alg_gebouw_key = gebouw_key;
SELECT MAX (prs_kostenplaats_key)
INTO kostenplaats_key
FROM alg_gebouw
WHERE alg_gebouw_key = gebouw_key;
melding_key := lgetmeldingkey (rec1.han_pk, kenmerk_key_han_pk);
melding_new := (melding_key = -1);
IF melding_new
THEN
v_errormsg := 'Bepalen melding datum voor startjaar [' || rec1.startjaar || ']';
--Testers pas op: vereist goede nls_territory!
SELECT fac.count_work_days (TO_DATE (rec1.startjaar || c_mmddstart, 'YYYYMMDD'),
TO_DATE (rec1.startjaar || c_mmddeind, 'YYYYMMDD')
)
INTO v_melding_uitvoertijd
FROM DUAL;
-- DBMS_OUTPUT.put_line (v_melding_uitvoertijd);
SELECT TO_DATE (rec1.startjaar || c_mmddstart, 'YYYYMMDD')
INTO v_melding_datum
FROM DUAL;
stdm_default_disc := fac.getDefaultBehandelteam(stdmelding_key);
v_errormsg := 'Bepalen mld_melding_key voor nieuwe melding';
-- DBMS_OUTPUT.put_line (v_errormsg);
SELECT mld_s_mld_melding_key.NEXTVAL
INTO melding_key
FROM DUAL;
v_errormsg := 'Toevoegen MELDING [' || rec1.handeling || ']';
-- DBMS_OUTPUT.put_line (v_errormsg);
-- Invoeren melding
INSERT INTO mld_melding
(mld_melding_key,
mld_meldbron_key,
mld_stdmelding_key,
mld_alg_locatie_key,
mld_alg_onroerendgoed_keys,
mld_melding_t_uitvoertijd,
mld_melding_module,
mld_melding_omschrijving,
mld_melding_opmerking,
mld_kosten_klant,
prs_perslid_key,
mld_melding_datum,
prs_kostenplaats_key,
mld_melding_status,
mld_melding_einddatum,
mld_ins_discipline_key
)
VALUES (melding_key,
meldbron_key,
stdmelding_key,
locatie_key,
gebouw_key,
MLD_T_UITVOERTIJD(v_melding_uitvoertijd, 'D'),
c_melding_module,
rec1.handeling,
rec1.gebrek,
c_kosten_klant,
perslid_key,
v_melding_datum,
kostenplaats_key,
c_melding_status,
TO_DATE (rec1.startjaar || c_mmddeind, 'YYYYMMDD'),
stdm_default_disc
);
ELSE
v_errormsg := 'Bijwerken MELDING [' || rec1.handeling || ']';
-- DBMS_OUTPUT.put_line (v_errormsg);
UPDATE mld_melding
SET mld_melding_omschrijving = rec1.handeling,
mld_melding_opmerking = rec1.gebrek
WHERE mld_melding_key = melding_key;
END IF;
-- c_han_pk
IF melding_new
THEN
v_errormsg := 'OPROGNOSE_ID van melding [' || TO_CHAR (melding_key) || '] = [' || rec1.han_pk || ']';
-- DBMS_OUTPUT.put_line (v_errormsg);
-- v_errormsg := 'Insert FlexProp OPROGNOSE_ID met waarde = <'||rec1.han_pk||'>';
INSERT INTO mld_kenmerkmelding
(mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde)
VALUES (melding_key, kenmerk_key_han_pk, rec1.han_pk);
END IF;
-- c_hoeveelheid
DELETE FROM mld_kenmerkmelding
WHERE mld_melding_key = melding_key AND mld_kenmerk_key = kenmerk_key_hoeveelheid;
IF rec1.hoeveelheid IS NOT NULL
THEN
v_errormsg := 'HOEVEELHEID = [' || rec1.hoeveelheid || ']';
-- DBMS_OUTPUT.put_line (v_errormsg);
INSERT INTO mld_kenmerkmelding
(mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde)
VALUES (melding_key,
kenmerk_key_hoeveelheid,
TO_CHAR (fac.safe_to_number (REPLACE (rec1.hoeveelheid, ',', '.')))
);
END IF;
-- c_eenheid
DELETE FROM mld_kenmerkmelding
WHERE mld_melding_key = melding_key AND mld_kenmerk_key = kenmerk_key_eenheid;
IF rec1.eenheid IS NOT NULL
THEN
v_errormsg := 'EENHEID = [' || rec1.eenheid || ']';
-- DBMS_OUTPUT.put_line (v_errormsg);
INSERT INTO mld_kenmerkmelding
(mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde)
VALUES (melding_key, kenmerk_key_eenheid, rec1.eenheid);
END IF;
-- c_prijs
DELETE FROM mld_kenmerkmelding
WHERE mld_melding_key = melding_key AND mld_kenmerk_key = kenmerk_key_prijs;
IF rec1.eenheid IS NOT NULL
THEN
v_errormsg := 'PRIJS = [' || rec1.prijs || ']';
-- DBMS_OUTPUT.put_line (v_errormsg);
INSERT INTO mld_kenmerkmelding
(mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde)
VALUES (melding_key, kenmerk_key_prijs, TO_CHAR (fac.safe_to_number (rec1.prijs)));
END IF;
-- Alles goed? Dan deze regel committen!
COMMIT;
v_count_success := v_count_success + 1;
EXCEPTION
WHEN OTHERS
THEN
-- Foutje? Deze regel terugdraaien
v_count_fail := v_count_fail + 1;
ROLLBACK;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (NVL (SQLERRM, 'SQLERRM=NULL!!!'), 1, 100);
fac.imp_writelog (p_import_key, 'E', v_errormsg, oracle_err_mes);
-- de logging wel committen
COMMIT;
END;
END LOOP;
fac.imp_writelog (p_import_key,
'I',
'Import gereed, ' || v_count_success || ' regels ingelezen, ' || v_count_fail
|| ' regels geweigerd',
''
);
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (NVL (SQLERRM, 'SQLERRM=NULL!!!'), 1, 100);
v_errormsg := '(' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key, 'E', 'Onverwachte fout', v_errormsg);
END;
/
--// PROCEDURES VOOR FIP imports - PROCEDURES VOOR FIP imports - PROCEDURES VOOR FIP imports - PROCEDURES VOOR FIP imports
--// PROCEDURES VOOR FIP imports - PROCEDURES VOOR FIP imports - PROCEDURES VOOR FIP imports - PROCEDURES VOOR FIP imports
--// PROCEDURES VOOR FIP imports - PROCEDURES VOOR FIP imports - PROCEDURES VOOR FIP imports - PROCEDURES VOOR FIP imports
--// 1. ALG
CREATE OR REPLACE PROCEDURE fac_import_onrgoed1 (p_import_key IN NUMBER)
AS
c_delim VARCHAR2 (2) := fac.import_delimiter(p_import_key);
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER;
v_count_tot NUMBER (10);
v_count_imp NUMBER (10);
v_ongeldig NUMBER (1);
v_aanduiding VARCHAR2 (200);
v_alg_kenmerk_key1 VARCHAR2 (255);
v_alg_kenmerk_key2 VARCHAR2 (255);
v_alg_kenmerk_key3 VARCHAR2 (255);
v_alg_kenmerk_key4 VARCHAR2 (255);
v_alg_kenmerk_key5 VARCHAR2 (255);
v_alg_kenmerk_key6 VARCHAR2 (255);
v_alg_kenmerk_key7 VARCHAR2 (255);
v_alg_kenmerk_key8 VARCHAR2 (255);
v_alg_kenmerk_key9 VARCHAR2 (255);
v_alg_kenmerk_key10 VARCHAR2 (255);
-- De importvelden:
v_regio_omschrijving VARCHAR2 (255); -- 30
v_district_omschrijving VARCHAR2 (255); -- 30
v_locatie_code VARCHAR2 (255); -- 10
v_locatie_omschrijving VARCHAR2 (255); -- 60
v_locatie_verantw VARCHAR2 (255); -- 30
v_locatie_verantw_tel VARCHAR2 (255); -- 15
v_locatie_adres VARCHAR2 (255); -- 50
v_locatie_postcode VARCHAR2 (255); -- 12
v_locatie_plaats VARCHAR2 (255); -- 30
v_locatie_land VARCHAR2 (255); -- 30
v_locatie_post_adres VARCHAR2 (255); -- 50
v_locatie_post_postcode VARCHAR2 (255); -- 12
v_locatie_post_plaats VARCHAR2 (255); -- 30
v_locatie_post_land VARCHAR2 (255); -- 30
v_srtgebouw_omschrijving VARCHAR2 (255); -- 30
v_gebouw_code VARCHAR2 (255); -- 10
v_gebouw_naam VARCHAR2 (255); -- 30
v_gebouw_adres VARCHAR2 (255); -- 50
v_gebouw_postcode VARCHAR2 (255); -- 12
v_alg_kenmerkwaarde1 VARCHAR2 (4000);
v_alg_kenmerkwaarde2 VARCHAR2 (4000);
v_alg_kenmerkwaarde3 VARCHAR2 (4000);
v_alg_kenmerkwaarde4 VARCHAR2 (4000);
v_alg_kenmerkwaarde5 VARCHAR2 (4000);
v_alg_kenmerkwaarde6 VARCHAR2 (4000);
v_alg_kenmerkwaarde7 VARCHAR2 (4000);
v_alg_kenmerkwaarde8 VARCHAR2 (4000);
v_alg_kenmerkwaarde9 VARCHAR2 (4000);
v_alg_kenmerkwaarde10 VARCHAR2 (4000);
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
-- Controleer tijdens import-fase alleen op (uniek) bestaan van kenmerk (of
-- deze is gedefinieerd voor gebouw/locatie, volgt tijdens de update-fase)!
FUNCTION bepaal_kenmerk_key (ok IN VARCHAR)
RETURN NUMBER
IS
v_kenmerk_key NUMBER;
BEGIN
IF fac.safe_to_number (ok) IS NULL
THEN -- Kenmerkwaarde is alfanumeriek (dus omschrijving)!
SELECT alg_kenmerk_key
INTO v_kenmerk_key
FROM alg_kenmerk
WHERE alg_kenmerk_verwijder IS NULL
AND alg_kenmerk_niveau IN ('L', 'G')
AND alg_kenmerk_upper = UPPER (ok)
AND alg_kenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'r', 'S', 'X', 'V');
ELSE -- Kenmerkwaarde is numeriek (dus key)!
SELECT alg_kenmerk_key
INTO v_kenmerk_key
FROM alg_kenmerk
WHERE alg_kenmerk_verwijder IS NULL
AND alg_kenmerk_niveau IN ('L', 'G')
AND alg_kenmerk_key = fac.safe_to_number (ok)
AND alg_kenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'r', 'S', 'X', 'V');
END IF;
RETURN v_kenmerk_key;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
IF ok IS NULL OR UPPER (ok) LIKE 'KENMERK%'
THEN
RETURN NULL;
ELSE
fac.imp_writelog (p_import_key,
'W',
'Fout bij bepalen kenmerk [' || ok || ']',
'Bestaat niet of type ongeldig');
COMMIT;
RETURN NULL;
END IF;
WHEN OTHERS
THEN
fac.imp_writelog (p_import_key,
'W',
'Fout bij bepalen kenmerk [' || ok || ']',
'Kan kenmerk niet 1-duidig bepalen');
COMMIT;
RETURN NULL;
END;
BEGIN
-- Eerst opruiming
DELETE FROM fac_imp_onrgoed1;
COMMIT;
v_count_tot := 0;
v_count_imp := 0;
header_is_valid := 0;
FOR rec1 IN c1
LOOP
BEGIN
v_errormsg := 'Fout FETCH importregel';
v_newline := rec1.fac_imp_file_line;
v_errormsg := 'Fout bij opvragen importregel';
v_aanduiding := '';
v_ongeldig := 0;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_delim, v_regio_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_district_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_locatie_code);
fac.imp_getfield (v_newline, c_delim, v_locatie_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_locatie_verantw);
fac.imp_getfield (v_newline, c_delim, v_locatie_verantw_tel);
fac.imp_getfield (v_newline, c_delim, v_locatie_adres);
fac.imp_getfield (v_newline, c_delim, v_locatie_postcode);
fac.imp_getfield (v_newline, c_delim, v_locatie_plaats);
fac.imp_getfield (v_newline, c_delim, v_locatie_land);
fac.imp_getfield (v_newline, c_delim, v_locatie_post_adres);
fac.imp_getfield (v_newline, c_delim, v_locatie_post_postcode);
fac.imp_getfield (v_newline, c_delim, v_locatie_post_plaats);
fac.imp_getfield (v_newline, c_delim, v_locatie_post_land);
fac.imp_getfield (v_newline, c_delim, v_srtgebouw_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_gebouw_code);
fac.imp_getfield (v_newline, c_delim, v_gebouw_naam);
fac.imp_getfield (v_newline, c_delim, v_gebouw_adres);
fac.imp_getfield (v_newline, c_delim, v_gebouw_postcode);
fac.imp_getfield (v_newline, c_delim, v_alg_kenmerkwaarde1);
fac.imp_getfield (v_newline, c_delim, v_alg_kenmerkwaarde2);
fac.imp_getfield (v_newline, c_delim, v_alg_kenmerkwaarde3);
fac.imp_getfield (v_newline, c_delim, v_alg_kenmerkwaarde4);
fac.imp_getfield (v_newline, c_delim, v_alg_kenmerkwaarde5);
fac.imp_getfield (v_newline, c_delim, v_alg_kenmerkwaarde6);
fac.imp_getfield (v_newline, c_delim, v_alg_kenmerkwaarde7);
fac.imp_getfield (v_newline, c_delim, v_alg_kenmerkwaarde8);
fac.imp_getfield (v_newline, c_delim, v_alg_kenmerkwaarde9);
fac.imp_getfield (v_newline, c_delim, v_alg_kenmerkwaarde10);
v_aanduiding := '[' || v_locatie_code || '|' || v_gebouw_code || '] ';
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop. Ik controleer daarbij alle NIET-kenmerk kolommen!
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
IF (header_is_valid = 0)
THEN
IF UPPER (v_regio_omschrijving) = 'REGIO'
AND UPPER (v_district_omschrijving) = 'DISTRICT'
AND UPPER (v_locatie_code) = 'LOCATIECODE'
AND UPPER (v_locatie_omschrijving) = 'LOCATIEOMSCHRIJVING'
AND UPPER (v_locatie_verantw) = 'CONTACTPERSOON'
AND UPPER (v_locatie_verantw_tel) = 'TELEFOONNUMMER'
AND UPPER (v_locatie_adres) = 'BEZOEKADRES'
AND UPPER (v_locatie_postcode) = 'POSTCODE'
AND UPPER (v_locatie_plaats) = 'PLAATS'
AND UPPER (v_locatie_land) = 'LAND'
AND UPPER (v_locatie_post_adres) = 'POSTADRES'
AND UPPER (v_locatie_post_postcode) = 'POSTPOSTCODE'
AND UPPER (v_locatie_post_plaats) = 'POSTPLAATS'
AND UPPER (v_locatie_post_land) LIKE 'POSTLAND'
AND UPPER (v_srtgebouw_omschrijving) = 'GEBOUWFUNCTIE'
AND UPPER (v_gebouw_code) = 'GEBOUWCODE'
AND UPPER (v_gebouw_naam) = 'GEBOUWNAAM'
AND UPPER (v_gebouw_adres) = 'GEBOUWADRES'
AND UPPER (v_gebouw_postcode) = 'GEBOUWPOSTCODE'
THEN
v_alg_kenmerk_key1 := bepaal_kenmerk_key (v_alg_kenmerkwaarde1);
v_alg_kenmerk_key2 := bepaal_kenmerk_key (v_alg_kenmerkwaarde2);
v_alg_kenmerk_key3 := bepaal_kenmerk_key (v_alg_kenmerkwaarde3);
v_alg_kenmerk_key4 := bepaal_kenmerk_key (v_alg_kenmerkwaarde4);
v_alg_kenmerk_key5 := bepaal_kenmerk_key (v_alg_kenmerkwaarde5);
v_alg_kenmerk_key6 := bepaal_kenmerk_key (v_alg_kenmerkwaarde6);
v_alg_kenmerk_key7 := bepaal_kenmerk_key (v_alg_kenmerkwaarde7);
v_alg_kenmerk_key8 := bepaal_kenmerk_key (v_alg_kenmerkwaarde8);
v_alg_kenmerk_key9 := bepaal_kenmerk_key (v_alg_kenmerkwaarde9);
v_alg_kenmerk_key10 := bepaal_kenmerk_key (v_alg_kenmerkwaarde10);
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
v_errormsg := 'Regio-omschrijving leeg of te lang';
v_regio_omschrijving := TRIM (v_regio_omschrijving);
IF v_regio_omschrijving IS NULL
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Regel overgeslagen');
ELSIF LENGTH (v_regio_omschrijving) > 30
THEN
v_regio_omschrijving := SUBSTR (v_regio_omschrijving, 1, 30);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg
, 'Regio-omschrijving afgebroken tot [' || v_regio_omschrijving || ']');
END IF;
--
v_errormsg := 'District-omschrijving leeg of te lang';
v_district_omschrijving := TRIM (v_district_omschrijving);
IF v_district_omschrijving IS NULL
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Regel overgeslagen');
ELSIF LENGTH (v_district_omschrijving) > 30
THEN
v_district_omschrijving := SUBSTR (v_district_omschrijving, 1, 30);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg
, 'District-omschrijving afgebroken tot [' || v_district_omschrijving || ']');
END IF;
--
v_errormsg := 'Locatiecode leeg of te lang';
v_locatie_code := TRIM (v_locatie_code);
IF v_locatie_code IS NULL OR LENGTH (v_locatie_code) > 10
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Regel overgeslagen');
END IF;
--
v_errormsg := 'Locatie-omschrijving leeg of te lang';
v_locatie_omschrijving := TRIM (v_locatie_omschrijving);
IF v_locatie_omschrijving IS NULL
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Regel overgeslagen');
ELSIF LENGTH (v_locatie_omschrijving) > 60
THEN
v_locatie_omschrijving := SUBSTR (v_locatie_omschrijving, 1, 60);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg
, 'Locatie-omschrijving afgebroken tot [' || v_locatie_omschrijving || ']');
END IF;
--
v_errormsg := 'Naam te lang (contactpersoon)';
v_locatie_verantw := TRIM (v_locatie_verantw);
IF LENGTH (v_locatie_verantw) > 30
THEN
v_locatie_verantw := SUBSTR (v_locatie_verantw, 1, 30);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg
, 'Naam afgebroken tot [' || v_locatie_verantw || ']');
END IF;
--
v_errormsg := 'Telefoonnummer te lang (contactpersoon)';
v_locatie_verantw_tel := TRIM (v_locatie_verantw_tel);
IF LENGTH (v_locatie_verantw_tel) > 20
THEN
v_locatie_verantw_tel := SUBSTR (v_locatie_verantw_tel, 1, 20);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg
, 'Telefoonnummer afgebroken tot [' || v_locatie_verantw_tel || ']');
END IF;
--
v_errormsg := 'Adres te lang (bezoekadres)';
v_locatie_adres := TRIM (v_locatie_adres);
IF LENGTH (v_locatie_adres) > 50
THEN
v_locatie_adres := SUBSTR (v_locatie_adres, 1, 50);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg
, 'Adres afgebroken tot ]' || v_locatie_adres || ']');
END IF;
--
v_errormsg := 'Postcode te lang (bezoekadres)';
v_locatie_postcode := TRIM (v_locatie_postcode);
IF LENGTH (v_locatie_postcode) > 12
THEN
v_locatie_postcode := SUBSTR (v_locatie_postcode, 1, 12);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg
, 'Postcode afgebroken tot [' || v_locatie_postcode || ']');
END IF;
--
v_errormsg := 'Plaatsnaam te lang (bezoekadres)';
v_locatie_plaats := TRIM (v_locatie_plaats);
IF LENGTH (v_locatie_plaats) > 30
THEN
v_locatie_plaats := SUBSTR (v_locatie_plaats, 1, 30);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg
, 'Plaatsnaam afgebroken tot [' || v_locatie_plaats || ']');
END IF;
--
v_errormsg := 'Landnaam te lang (bezoekadres)';
v_locatie_land := TRIM (v_locatie_land);
IF LENGTH (v_locatie_land) > 30
THEN
v_locatie_land := SUBSTR (v_locatie_land, 1, 30);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg
, 'Landnaam afgebroken tot [' || v_locatie_land || ']');
END IF;
--
v_errormsg := 'Adres te lang (postadres)';
v_locatie_post_adres := TRIM (v_locatie_post_adres);
IF LENGTH (v_locatie_post_adres) > 50
THEN
v_locatie_post_adres := SUBSTR (v_locatie_post_adres, 1, 50);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg
, 'Adres afgebroken tot [' || v_locatie_post_adres || ']');
END IF;
--
v_errormsg := 'Postcode te lang (postadres)';
v_locatie_post_postcode := TRIM (v_locatie_post_postcode);
IF LENGTH (v_locatie_post_postcode) > 12
THEN
v_locatie_post_postcode := SUBSTR (v_locatie_post_postcode, 1, 12);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg
, 'Postcode afgebroken tot [' || v_locatie_post_postcode || ']');
END IF;
--
v_errormsg := 'Plaatsnaam te lang (postadres)';
v_locatie_post_plaats := TRIM (v_locatie_post_plaats);
IF LENGTH (v_locatie_post_plaats) > 30
THEN
v_locatie_post_plaats := SUBSTR (v_locatie_post_plaats, 1, 30);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg
, 'Plaatsnaam afgebroken tot [' || v_locatie_post_plaats || ']');
END IF;
--
v_errormsg := 'Landnaam te lang (postadres)';
v_locatie_post_land := TRIM (v_locatie_post_land);
IF LENGTH (v_locatie_post_land) > 30
THEN
v_locatie_post_land := SUBSTR (v_locatie_post_land, 1, 30);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg
,'Landnaam afgebroken tot [' || v_locatie_post_land || ']');
END IF;
--
v_errormsg := 'Gebouwfunctie te lang';
v_srtgebouw_omschrijving := TRIM (v_srtgebouw_omschrijving);
IF LENGTH (v_srtgebouw_omschrijving) > 30
THEN
v_srtgebouw_omschrijving := SUBSTR (v_srtgebouw_omschrijving, 1, 30);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg
, 'Gebouwfunctie afgebroken tot [' || v_srtgebouw_omschrijving || ']');
END IF;
--
v_errormsg := 'Gebouwcode leeg of te lang';
v_gebouw_code := TRIM (v_gebouw_code);
IF v_gebouw_code IS NULL OR LENGTH (v_gebouw_code) > 12
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Regel overgeslagen');
END IF;
--
v_errormsg := 'Gebouwnaam leeg of te lang';
v_gebouw_naam := TRIM (v_gebouw_naam);
IF v_gebouw_naam IS NULL
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Regel overgeslagen');
ELSIF LENGTH (v_gebouw_naam) > 60
THEN
v_gebouw_naam := SUBSTR (v_gebouw_naam, 1, 60);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg
, 'Gebouwnaam afgebroken tot [' || v_gebouw_naam || ']'
);
END IF;
--
v_errormsg := 'Gebouwadres te lang';
v_gebouw_adres := TRIM (v_gebouw_adres);
IF LENGTH (v_gebouw_adres) > 50
THEN
v_gebouw_adres := SUBSTR (v_gebouw_adres, 1, 50);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg
, 'Gebouwadres afgebroken tot [' || v_gebouw_adres || ']');
END IF;
--
v_errormsg := 'Gebouwpostcode te lang';
v_gebouw_postcode := TRIM (v_gebouw_postcode);
IF LENGTH (v_gebouw_postcode) > 12
THEN
v_gebouw_postcode := SUBSTR (v_gebouw_postcode, 1, 12);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg
, 'Gebouw postcode afgebroken tot [' || v_gebouw_postcode || ']');
END IF;
-- De rest alleen ff trimmen.
v_alg_kenmerkwaarde1 := TRIM (v_alg_kenmerkwaarde1);
v_alg_kenmerkwaarde2 := TRIM (v_alg_kenmerkwaarde2);
v_alg_kenmerkwaarde3 := TRIM (v_alg_kenmerkwaarde3);
v_alg_kenmerkwaarde4 := TRIM (v_alg_kenmerkwaarde4);
v_alg_kenmerkwaarde5 := TRIM (v_alg_kenmerkwaarde5);
v_alg_kenmerkwaarde6 := TRIM (v_alg_kenmerkwaarde6);
v_alg_kenmerkwaarde7 := TRIM (v_alg_kenmerkwaarde7);
v_alg_kenmerkwaarde8 := TRIM (v_alg_kenmerkwaarde8);
v_alg_kenmerkwaarde9 := TRIM (v_alg_kenmerkwaarde9);
v_alg_kenmerkwaarde10 := TRIM (v_alg_kenmerkwaarde10);
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
BEGIN
v_errormsg := 'Fout bij wegschrijven importregel';
INSERT INTO fac_imp_onrgoed1
( alg_regio_omschrijving,
alg_district_omschrijving,
alg_locatie_code,
alg_locatie_omschrijving,
alg_locatie_verantw,
alg_locatie_verantw_tel,
alg_locatie_adres,
alg_locatie_postcode,
alg_locatie_plaats,
alg_locatie_land,
alg_locatie_post_adres,
alg_locatie_post_postcode,
alg_locatie_post_plaats,
alg_locatie_post_land,
alg_srtgebouw_omschrijving,
alg_gebouw_code,
alg_gebouw_naam,
alg_gebouw_adres,
alg_gebouw_postcode,
alg_kenmerkwaarde1,
alg_kenmerkwaarde2,
alg_kenmerkwaarde3,
alg_kenmerkwaarde4,
alg_kenmerkwaarde5,
alg_kenmerkwaarde6,
alg_kenmerkwaarde7,
alg_kenmerkwaarde8,
alg_kenmerkwaarde9,
alg_kenmerkwaarde10
)
VALUES ( v_regio_omschrijving,
v_district_omschrijving,
v_locatie_code,
v_locatie_omschrijving,
v_locatie_verantw,
v_locatie_verantw_tel,
v_locatie_adres,
v_locatie_postcode,
v_locatie_plaats,
v_locatie_land,
v_locatie_post_adres,
v_locatie_post_postcode,
v_locatie_post_plaats,
v_locatie_post_land,
v_srtgebouw_omschrijving,
v_gebouw_code,
v_gebouw_naam,
v_gebouw_adres,
v_gebouw_postcode,
DECODE (v_alg_kenmerk_key1
, NULL, v_alg_kenmerkwaarde1
, TO_CHAR (v_alg_kenmerk_key1) || '=' || SUBSTR (v_alg_kenmerkwaarde1, 1, 200)
),
DECODE (v_alg_kenmerk_key2
, NULL, v_alg_kenmerkwaarde2
, TO_CHAR (v_alg_kenmerk_key2) || '=' || SUBSTR (v_alg_kenmerkwaarde2, 1, 200)
),
DECODE (v_alg_kenmerk_key3
, NULL, v_alg_kenmerkwaarde3
, TO_CHAR (v_alg_kenmerk_key3) || '=' || SUBSTR (v_alg_kenmerkwaarde3, 1, 200)
),
DECODE (v_alg_kenmerk_key4
, NULL, v_alg_kenmerkwaarde4
, TO_CHAR (v_alg_kenmerk_key4) || '=' || SUBSTR (v_alg_kenmerkwaarde4, 1, 200)
),
DECODE (v_alg_kenmerk_key5
, NULL, v_alg_kenmerkwaarde5
, TO_CHAR (v_alg_kenmerk_key5) || '=' || SUBSTR (v_alg_kenmerkwaarde5, 1, 200)
),
DECODE (v_alg_kenmerk_key6
, NULL, v_alg_kenmerkwaarde6
, TO_CHAR (v_alg_kenmerk_key6) || '=' || SUBSTR (v_alg_kenmerkwaarde6, 1, 200)
),
DECODE (v_alg_kenmerk_key7
, NULL, v_alg_kenmerkwaarde7
, TO_CHAR (v_alg_kenmerk_key7) || '=' || SUBSTR (v_alg_kenmerkwaarde7, 1, 200)
),
DECODE (v_alg_kenmerk_key8
, NULL, v_alg_kenmerkwaarde8
, TO_CHAR (v_alg_kenmerk_key8) || '=' || SUBSTR (v_alg_kenmerkwaarde8, 1, 200)
),
DECODE (v_alg_kenmerk_key9
, NULL, v_alg_kenmerkwaarde9
, TO_CHAR (v_alg_kenmerk_key9) || '=' || SUBSTR (v_alg_kenmerkwaarde9, 1, 200)
),
DECODE (v_alg_kenmerk_key10
, NULL, v_alg_kenmerkwaarde10
, TO_CHAR (v_alg_kenmerk_key10) || '=' || SUBSTR (v_alg_kenmerkwaarde10, 1, 200)
)
);
COMMIT;
v_count_imp := v_count_imp + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, '');
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!');
ELSE
fac.imp_writelog (p_import_key, 'S', 'Locatie-Gebouw/#ingelezen regels: ' || TO_CHAR (v_count_tot), '');
fac.imp_writelog (p_import_key, 'S', 'Locatie-Gebouw/#ongeldige niet ingelezen importregels: ' || TO_CHAR (v_count_tot - v_count_imp), '');
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Inleesproces locaties/gebouwen afgebroken!');
END fac_import_onrgoed1;
/
CREATE OR REPLACE PROCEDURE fac_update_onrgoed1 (p_import_key IN NUMBER)
IS
v_errormsg VARCHAR2 (1000) := '-';
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
v_count_tot NUMBER (10);
v_count_new NUMBER (10);
v_count_upd NUMBER (10);
v_count NUMBER (10);
v_regio_key NUMBER (10);
v_district_key NUMBER (10);
v_locatie_key NUMBER (10);
v_srtgebouw_key NUMBER (10);
v_gebouw_key NUMBER (10);
v_srtnoti_code VARCHAR2 (6);
CURSOR cRegio -- Regioomschrijving uniek!
IS
SELECT MIN (alg_regio_omschrijving) alg_regio_omschrijving
FROM fac_imp_onrgoed1
GROUP BY UPPER (alg_regio_omschrijving)
ORDER BY 1;
CURSOR cDistrict -- Districtomschrijving uniek binnen regio!
IS
SELECT MIN (alg_regio_omschrijving) alg_regio_omschrijving,
MIN (alg_district_omschrijving) alg_district_omschrijving
FROM fac_imp_onrgoed1
GROUP BY UPPER (alg_regio_omschrijving),
UPPER (alg_district_omschrijving)
ORDER BY 1, 2;
CURSOR cLocatie -- Locatiecode uniek (omschrijving niet)!
IS
SELECT MIN (alg_regio_omschrijving) alg_regio_omschrijving,
MIN (alg_district_omschrijving) alg_district_omschrijving,
MIN (alg_locatie_code) alg_locatie_code,
MIN (alg_locatie_omschrijving) alg_locatie_omschrijving,
MIN (alg_locatie_verantw) alg_locatie_verantw,
MIN (alg_locatie_verantw_tel) alg_locatie_verantw_tel,
MIN (alg_locatie_adres) alg_locatie_adres,
MIN (alg_locatie_postcode) alg_locatie_postcode,
MIN (alg_locatie_plaats) alg_locatie_plaats,
MIN (alg_locatie_land) alg_locatie_land,
MIN (alg_locatie_post_adres) alg_locatie_post_adres,
MIN (alg_locatie_post_postcode) alg_locatie_post_postcode,
MIN (alg_locatie_post_plaats) alg_locatie_post_plaats,
MIN (alg_locatie_post_land) alg_locatie_post_land,
MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde1, 1, INSTR (alg_kenmerkwaarde1, '=') - 1))) kenmerk_key1,
MIN(SUBSTR (alg_kenmerkwaarde1, INSTR (alg_kenmerkwaarde1, '=') + 1)) waarde1,
MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde2, 1, INSTR (alg_kenmerkwaarde2, '=') - 1))) kenmerk_key2,
MIN(SUBSTR (alg_kenmerkwaarde2, INSTR (alg_kenmerkwaarde2, '=') + 1)) waarde2,
MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde3, 1, INSTR (alg_kenmerkwaarde3, '=') - 1))) kenmerk_key3,
MIN(SUBSTR (alg_kenmerkwaarde3, INSTR (alg_kenmerkwaarde3, '=') + 1)) waarde3,
MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde4, 1, INSTR (alg_kenmerkwaarde4, '=') - 1))) kenmerk_key4,
MIN(SUBSTR (alg_kenmerkwaarde4, INSTR (alg_kenmerkwaarde4, '=') + 1)) waarde4,
MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde5, 1, INSTR (alg_kenmerkwaarde5, '=') - 1))) kenmerk_key5,
MIN(SUBSTR (alg_kenmerkwaarde5, INSTR (alg_kenmerkwaarde5, '=') + 1)) waarde5,
MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde6, 1, INSTR (alg_kenmerkwaarde6, '=') - 1))) kenmerk_key6,
MIN(SUBSTR (alg_kenmerkwaarde6, INSTR (alg_kenmerkwaarde6, '=') + 1)) waarde6,
MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde7, 1, INSTR (alg_kenmerkwaarde7, '=') - 1))) kenmerk_key7,
MIN(SUBSTR (alg_kenmerkwaarde7, INSTR (alg_kenmerkwaarde7, '=') + 1)) waarde7,
MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde8, 1, INSTR (alg_kenmerkwaarde8, '=') - 1))) kenmerk_key8,
MIN(SUBSTR (alg_kenmerkwaarde8, INSTR (alg_kenmerkwaarde8, '=') + 1)) waarde8,
MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde9, 1, INSTR (alg_kenmerkwaarde9, '=') - 1))) kenmerk_key9,
MIN(SUBSTR (alg_kenmerkwaarde9, INSTR (alg_kenmerkwaarde9, '=') + 1)) waarde9,
MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde10, 1, INSTR (alg_kenmerkwaarde10, '=') - 1))) kenmerk_key10,
MIN(SUBSTR (alg_kenmerkwaarde10, INSTR (alg_kenmerkwaarde10, '=') + 1)) waarde10
FROM fac_imp_onrgoed1
GROUP BY UPPER (alg_regio_omschrijving),
UPPER (alg_district_omschrijving),
UPPER (alg_locatie_code)
ORDER BY 1, 2, 3;
CURSOR cSrtGebouw -- Gebouwfunctie uniek!
IS
SELECT MIN (alg_srtgebouw_omschrijving) alg_srtgebouw_omschrijving
FROM fac_imp_onrgoed1
WHERE alg_srtgebouw_omschrijving IS NOT NULL
GROUP BY UPPER (alg_srtgebouw_omschrijving)
ORDER BY 1;
CURSOR cGebouw -- Gebouwcode uniek binnen locatie (naam niet)!
IS
SELECT MIN (alg_regio_omschrijving) alg_regio_omschrijving,
MIN (alg_district_omschrijving) alg_district_omschrijving,
MIN (alg_locatie_code) alg_locatie_code,
MIN (alg_gebouw_code) alg_gebouw_code,
MIN (alg_gebouw_naam) alg_gebouw_naam,
MIN (alg_srtgebouw_omschrijving) alg_srtgebouw_omschrijving,
MIN (alg_gebouw_adres) alg_gebouw_adres,
MIN (alg_gebouw_postcode) alg_gebouw_postcode,
MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde1, 1, INSTR (alg_kenmerkwaarde1, '=') - 1))) kenmerk_key1,
MIN(SUBSTR (alg_kenmerkwaarde1, INSTR (alg_kenmerkwaarde1, '=') + 1)) waarde1,
MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde2, 1, INSTR (alg_kenmerkwaarde2, '=') - 1))) kenmerk_key2,
MIN(SUBSTR (alg_kenmerkwaarde2, INSTR (alg_kenmerkwaarde2, '=') + 1)) waarde2,
MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde3, 1, INSTR (alg_kenmerkwaarde3, '=') - 1))) kenmerk_key3,
MIN(SUBSTR (alg_kenmerkwaarde3, INSTR (alg_kenmerkwaarde3, '=') + 1)) waarde3,
MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde4, 1, INSTR (alg_kenmerkwaarde4, '=') - 1))) kenmerk_key4,
MIN(SUBSTR (alg_kenmerkwaarde4, INSTR (alg_kenmerkwaarde4, '=') + 1)) waarde4,
MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde5, 1, INSTR (alg_kenmerkwaarde5, '=') - 1))) kenmerk_key5,
MIN(SUBSTR (alg_kenmerkwaarde5, INSTR (alg_kenmerkwaarde5, '=') + 1)) waarde5,
MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde6, 1, INSTR (alg_kenmerkwaarde6, '=') - 1))) kenmerk_key6,
MIN(SUBSTR (alg_kenmerkwaarde6, INSTR (alg_kenmerkwaarde6, '=') + 1)) waarde6,
MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde7, 1, INSTR (alg_kenmerkwaarde7, '=') - 1))) kenmerk_key7,
MIN(SUBSTR (alg_kenmerkwaarde7, INSTR (alg_kenmerkwaarde7, '=') + 1)) waarde7,
MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde8, 1, INSTR (alg_kenmerkwaarde8, '=') - 1))) kenmerk_key8,
MIN(SUBSTR (alg_kenmerkwaarde8, INSTR (alg_kenmerkwaarde8, '=') + 1)) waarde8,
MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde9, 1, INSTR (alg_kenmerkwaarde9, '=') - 1))) kenmerk_key9,
MIN(SUBSTR (alg_kenmerkwaarde9, INSTR (alg_kenmerkwaarde9, '=') + 1)) waarde9,
MIN(fac.safe_to_number(SUBSTR (alg_kenmerkwaarde10, 1, INSTR (alg_kenmerkwaarde10, '=') - 1))) kenmerk_key10,
MIN(SUBSTR (alg_kenmerkwaarde10, INSTR (alg_kenmerkwaarde10, '=') + 1)) waarde10
FROM fac_imp_onrgoed1
GROUP BY UPPER (alg_regio_omschrijving),
UPPER (alg_district_omschrijving),
UPPER (alg_locatie_code),
UPPER (alg_gebouw_code)
ORDER BY 1, 2, 3, 4;
-- SUBPROC
PROCEDURE upsert_algkenmerk (p_alg_key IN NUMBER,
p_alg_niv IN VARCHAR2,
p_kenmerk_key IN NUMBER,
p_waarde IN VARCHAR2)
AS
v_kenmerk_niveau alg_kenmerk.alg_kenmerk_niveau%TYPE;
v_kenmerk_type alg_kenmerk.alg_kenmerk_kenmerktype%TYPE;
ccount NUMBER;
v_waarde VARCHAR2 (4000);
v_objectnaam fac_kenmerkdomein.fac_kenmerkdomein_objectnaam%TYPE;
v_kolomnaam fac_kenmerkdomein.fac_kenmerkdomein_kolomnaam%TYPE;
v_kolomtxt fac_kenmerkdomein.fac_kenmerkdomein_kolomtxt%TYPE;
sql_stmt VARCHAR2 (1000);
v_onrgoedkenmerk_key alg_onrgoedkenmerk.alg_onrgoedkenmerk_key%TYPE;
l_cursor_1 INTEGER;
l_rowsprocessed NUMBER DEFAULT 0;
BEGIN
IF p_kenmerk_key IS NOT NULL AND p_waarde IS NOT NULL
THEN
v_errormsg := 'Fout bij bepalen kenmerk [' || p_kenmerk_key || ']';
SELECT alg_kenmerk_niveau, alg_kenmerk_kenmerktype
INTO v_kenmerk_niveau, v_kenmerk_type
FROM alg_kenmerk
WHERE alg_kenmerk_verwijder IS NULL
AND alg_kenmerk_key = p_kenmerk_key
AND alg_kenmerk_niveau IN ('L', 'G');
IF (v_kenmerk_niveau = p_alg_niv) -- Alleen op juiste niveau doen!
THEN
IF v_kenmerk_type IN ('R', 'r', 'S')
THEN
v_errormsg := 'Fout bij bepalen eigen tabel';
SELECT COUNT ( * )
INTO ccount
FROM alg_kenmerk k, fac_kenmerkdomein d
WHERE k.alg_kenmerk_key = p_kenmerk_key
AND k.alg_kenmerk_niveau = p_alg_niv
AND k.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key
AND d.fac_usrtab_key IS NOT NULL;
v_errormsg :=
'Fout bij bepalen nieuwe waarde [' || SUBSTR(p_waarde, 1, 200) || ']';
IF ccount = 1
THEN -- Eigen tabel
SELECT TO_CHAR (ud.fac_usrdata_key)
INTO v_waarde
FROM alg_kenmerk k,
fac_kenmerkdomein d,
fac_v_aanwezigusrdata ud
WHERE k.alg_kenmerk_key = p_kenmerk_key
AND k.alg_kenmerk_niveau = p_alg_niv
AND k.fac_kenmerkdomein_key =
d.fac_kenmerkdomein_key
AND d.fac_usrtab_key = ud.fac_usrtab_key
AND UPPER (TRIM (ud.fac_usrdata_omschr)) =
UPPER (p_waarde);
ELSE -- FACILITOR view/tabel
SELECT d.fac_kenmerkdomein_objectnaam,
d.fac_kenmerkdomein_kolomnaam,
d.fac_kenmerkdomein_kolomtxt
INTO v_objectnaam, v_kolomnaam, v_kolomtxt
FROM alg_kenmerk k, fac_kenmerkdomein d
WHERE k.alg_kenmerk_key = p_kenmerk_key
AND k.alg_kenmerk_niveau = p_alg_niv
AND k.fac_kenmerkdomein_key =
d.fac_kenmerkdomein_key
AND d.fac_usrtab_key IS NULL;
sql_stmt :=
'SELECT MAX ('
|| v_kolomnaam
|| ') FROM '
|| v_objectnaam
|| ' WHERE UPPER (TRIM ('
|| v_kolomtxt
|| ')) = UPPER (:pwaarde)';
l_cursor_1 := DBMS_SQL.open_cursor;
DBMS_SQL.parse (l_cursor_1, sql_stmt, DBMS_SQL.native);
DBMS_SQL.BIND_VARIABLE(l_cursor_1,':pwaarde', p_waarde);
DBMS_SQL.define_column(l_cursor_1, 1, v_waarde, 255);
l_rowsprocessed := DBMS_SQL.execute_and_fetch (l_cursor_1);
DBMS_SQL.column_value (l_cursor_1, 1, v_waarde);
DBMS_SQL.close_cursor(l_cursor_1);
END IF;
ELSE -- C(Karakter)/D(Datum)/N(Numeriek)/X(Bestandsnaam)
v_waarde := p_waarde;
END IF;
v_errormsg := 'Fout bij bepalen huidige waarde';
SELECT COUNT ( * ), MAX (alg_onrgoedkenmerk_key)
INTO ccount, v_onrgoedkenmerk_key
FROM alg_v_aanwezigonrgoedkenmerk
WHERE alg_onrgoed_key = p_alg_key
AND alg_onrgoed_niveau = p_alg_niv
AND alg_kenmerk_key = p_kenmerk_key;
IF ccount = 0
THEN
v_errormsg := 'Fout bij toevoegen waarde [' || SUBSTR(v_waarde, 1, 200) || ']';
INSERT INTO alg_onrgoedkenmerk (alg_onrgoed_key,
alg_onrgoed_niveau,
alg_kenmerk_key,
alg_onrgoedkenmerk_waarde)
VALUES (p_alg_key,
p_alg_niv,
p_kenmerk_key,
v_waarde);
ELSE
v_errormsg := 'Fout bij bijwerken waarde [' || SUBSTR(v_waarde, 1, 200) || ']';
UPDATE alg_onrgoedkenmerk
SET alg_onrgoedkenmerk_waarde = v_waarde
WHERE alg_onrgoedkenmerk_key = v_onrgoedkenmerk_key;
END IF;
END IF;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'upsert_algkenmerk');
END;
BEGIN
-- ***********
-- ***REGIO***
-- ***********
-- Alleen ontbrekende regio's worden toegevoegd
v_count_tot := 0;
v_count_new := 0;
FOR recRegio IN cRegio
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_aanduiding := '[' || recRegio.alg_regio_omschrijving || '] ';
v_errormsg := 'Fout bij toevoegen regio';
SELECT COUNT ( * )
INTO v_count
FROM alg_v_aanwezigregio
WHERE TRIM (alg_regio_upper) = UPPER (recRegio.alg_regio_omschrijving);
IF (v_count = 0)
THEN
INSERT INTO alg_regio
( alg_regio_omschrijving)
VALUES ( recRegio.alg_regio_omschrijving);
v_count_new := v_count_new + 1;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, '');
END;
END LOOP;
fac.imp_writelog (p_import_key, 'S', 'Regio/#ingelezen: ' || TO_CHAR (v_count_tot), '');
fac.imp_writelog (p_import_key, 'S', 'Regio/#toegevoegd: ' || TO_CHAR (v_count_new), '');
COMMIT;
-- **************
-- ***DISTRICT***
-- **************
-- Alleen ontbrekende districten worden toegevoegd
v_count_tot := 0;
v_count_new := 0;
FOR recDistrict IN cDistrict
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_aanduiding := '[' || recDistrict.alg_regio_omschrijving
|| '|' || recDistrict.alg_district_omschrijving
|| '] ';
v_errormsg := 'Fout bij bepalen regio';
SELECT alg_regio_key
INTO v_regio_key
FROM alg_v_aanwezigregio
WHERE alg_regio_upper = UPPER (recDistrict.alg_regio_omschrijving);
v_errormsg := 'Fout bij toevoegen district';
SELECT COUNT ( * )
INTO v_count
FROM alg_v_aanwezigdistrict
WHERE alg_regio_key = v_regio_key
AND TRIM (alg_district_upper) = UPPER (recDistrict.alg_district_omschrijving);
IF (v_count = 0)
THEN
INSERT INTO alg_district
( alg_regio_key,
alg_district_omschrijving
)
VALUES ( v_regio_key,
recDistrict.alg_district_omschrijving
);
v_count_new := v_count_new + 1;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, '');
END;
END LOOP;
fac.imp_writelog (p_import_key, 'S', 'District/#ingelezen: ' || TO_CHAR (v_count_tot), '');
fac.imp_writelog (p_import_key, 'S', 'District/#toegevoegd: ' || TO_CHAR (v_count_new), '');
COMMIT;
-- **************
-- ***LOCATIE****
-- **************
v_count_tot := 0;
v_count_new := 0;
v_count_upd := 0;
FOR recLocatie IN cLocatie
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_aanduiding := '[' || recLocatie.alg_regio_omschrijving
|| '|' || recLocatie.alg_district_omschrijving
|| '|' || recLocatie.alg_locatie_code
|| '] ';
v_errormsg := 'Fout bij bepalen regio';
SELECT alg_regio_key
INTO v_regio_key
FROM alg_v_aanwezigregio
WHERE alg_regio_upper = UPPER (recLocatie.alg_regio_omschrijving);
v_errormsg := 'Fout bij bepalen district';
SELECT alg_district_key
INTO v_district_key
FROM alg_v_aanwezigdistrict
WHERE alg_regio_key = v_regio_key
AND TRIM (alg_district_upper) = UPPER (recLocatie.alg_district_omschrijving);
v_errormsg := 'Fout bij toevoegen locatie';
SELECT COUNT ( * )
INTO v_count
FROM alg_v_aanweziglocatie
WHERE alg_district_key = v_district_key
AND UPPER (alg_locatie_code) = UPPER (recLocatie.alg_locatie_code);
IF (v_count = 0)
THEN
INSERT INTO alg_locatie
( alg_district_key,
alg_locatie_code,
alg_locatie_omschrijving,
alg_locatie_verantw,
alg_locatie_verantw_tel,
alg_locatie_adres,
alg_locatie_postcode,
alg_locatie_plaats,
alg_locatie_land,
alg_locatie_post_adres,
alg_locatie_post_postcode,
alg_locatie_post_plaats,
alg_locatie_post_land
)
VALUES ( v_district_key,
recLocatie.alg_locatie_code,
recLocatie.alg_locatie_omschrijving,
recLocatie.alg_locatie_verantw,
recLocatie.alg_locatie_verantw_tel,
recLocatie.alg_locatie_adres,
recLocatie.alg_locatie_postcode,
recLocatie.alg_locatie_plaats,
recLocatie.alg_locatie_land,
recLocatie.alg_locatie_post_adres,
recLocatie.alg_locatie_post_postcode,
recLocatie.alg_locatie_post_plaats,
recLocatie.alg_locatie_post_land
)
RETURNING alg_locatie_key
INTO v_locatie_key;
v_srtnoti_code := 'ALGLNE';
v_count_new := v_count_new + 1;
ELSE -- bijwerken kenmerken!
v_errormsg := 'Fout bij bepalen locatie';
SELECT alg_locatie_key
INTO v_locatie_key
FROM alg_v_aanweziglocatie
WHERE UPPER (TRIM (alg_locatie_code)) = UPPER (recLocatie.alg_locatie_code);
v_srtnoti_code := 'ALGLUP';
v_count_upd := v_count_upd + 1;
END IF;
-- NULL-waarden resulteren NIET in het wissen van kenmerkvelden
-- (bijwerken kan wel, maar wissen dus niet)!
upsert_algkenmerk (v_locatie_key, 'L', recLocatie.kenmerk_key1, recLocatie.waarde1);
upsert_algkenmerk (v_locatie_key, 'L', recLocatie.kenmerk_key2, recLocatie.waarde2);
upsert_algkenmerk (v_locatie_key, 'L', recLocatie.kenmerk_key3, recLocatie.waarde3);
upsert_algkenmerk (v_locatie_key, 'L', recLocatie.kenmerk_key4, recLocatie.waarde4);
upsert_algkenmerk (v_locatie_key, 'L', recLocatie.kenmerk_key5, recLocatie.waarde5);
upsert_algkenmerk (v_locatie_key, 'L', recLocatie.kenmerk_key6, recLocatie.waarde6);
upsert_algkenmerk (v_locatie_key, 'L', recLocatie.kenmerk_key7, recLocatie.waarde7);
upsert_algkenmerk (v_locatie_key, 'L', recLocatie.kenmerk_key8, recLocatie.waarde8);
upsert_algkenmerk (v_locatie_key, 'L', recLocatie.kenmerk_key9, recLocatie.waarde9);
upsert_algkenmerk (v_locatie_key, 'L', recLocatie.kenmerk_key10, recLocatie.waarde10);
fac.trackaction (v_srtnoti_code, v_locatie_key, NULL, NULL, NULL);
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, '');
COMMIT;
END;
END LOOP;
fac.imp_writelog (p_import_key, 'S', 'Locatie/#ingelezen: ' || TO_CHAR (v_count_tot), '');
fac.imp_writelog (p_import_key, 'S', 'Locatie/#toegevoegd: ' || TO_CHAR (v_count_new), '');
fac.imp_writelog (p_import_key, 'S', 'Locatie/#bijgewerkt: ' || TO_CHAR (v_count_upd), '');
COMMIT;
-- ********************
-- ***GEBOUWFUNCTIE****
-- ********************
v_count_tot := 0;
v_count_new := 0;
FOR recSrtGebouw IN cSrtGebouw
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_aanduiding := '[' || recSrtGebouw.alg_srtgebouw_omschrijving || '] ';
v_errormsg := 'Fout bij toevoegen gebouwfunctie';
SELECT COUNT ( * )
INTO v_count
FROM alg_v_aanwezigsrtgebouw
WHERE TRIM (alg_srtgebouw_upper) = UPPER (recSrtGebouw.alg_srtgebouw_omschrijving);
IF (v_count = 0)
THEN
INSERT INTO alg_srtgebouw
( alg_srtgebouw_omschrijving)
VALUES ( recSrtGebouw.alg_srtgebouw_omschrijving);
v_count_new := v_count_new + 1;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, '');
END;
END LOOP;
fac.imp_writelog (p_import_key, 'S', 'Gebouwfunctie/#ingelezen: ' || TO_CHAR (v_count_tot), '');
fac.imp_writelog (p_import_key, 'S', 'Gebouwfunctie/#toegevoegd: ' || TO_CHAR (v_count_new), '');
COMMIT;
-- ************
-- ***GEBOUW***
-- ************
v_count_tot := 0;
v_count_new := 0;
v_count_upd := 0;
FOR recGebouw IN cGebouw
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_aanduiding := '[' || recGebouw.alg_regio_omschrijving
|| '|' || recGebouw.alg_district_omschrijving
|| '|' || recGebouw.alg_locatie_code
|| '|' || recGebouw.alg_gebouw_code
|| '] ';
v_errormsg := 'Fout bij bepalen regio';
SELECT alg_regio_key
INTO v_regio_key
FROM alg_v_aanwezigregio
WHERE alg_regio_upper = UPPER (recGebouw.alg_regio_omschrijving);
v_errormsg := 'Fout bij bepalen district';
SELECT alg_district_key
INTO v_district_key
FROM alg_v_aanwezigdistrict
WHERE alg_regio_key = v_regio_key
AND TRIM (alg_district_upper) = UPPER (recGebouw.alg_district_omschrijving);
v_errormsg := 'Fout bij bepalen locatie';
SELECT alg_locatie_key
INTO v_locatie_key
FROM alg_v_aanweziglocatie
WHERE alg_district_key = v_district_key
AND UPPER (TRIM (alg_locatie_code)) = UPPER (recGebouw.alg_locatie_code);
IF (recGebouw.alg_srtgebouw_omschrijving IS NOT NULL)
THEN
v_errormsg := 'Fout bij bepalen gebouwfunctie';
SELECT alg_srtgebouw_key
INTO v_srtgebouw_key
FROM alg_v_aanwezigsrtgebouw
WHERE TRIM (alg_srtgebouw_upper) = UPPER (recGebouw.alg_srtgebouw_omschrijving);
END IF;
v_errormsg := 'Fout bij toevoegen gebouw';
SELECT COUNT ( * )
INTO v_count
FROM alg_v_aanweziggebouw
WHERE alg_locatie_key = v_locatie_key
AND UPPER (TRIM (alg_gebouw_code)) = UPPER (recGebouw.alg_gebouw_code);
IF (v_count = 0)
THEN
INSERT INTO alg_gebouw
( alg_locatie_key,
alg_srtgebouw_key,
alg_gebouw_code,
alg_gebouw_naam,
alg_gebouw_adres,
alg_gebouw_postcode
)
VALUES ( v_locatie_key,
v_srtgebouw_key,
recGebouw.alg_gebouw_code,
recGebouw.alg_gebouw_naam,
recGebouw.alg_gebouw_adres,
recGebouw.alg_gebouw_postcode
)
RETURNING alg_gebouw_key
INTO v_gebouw_key;
v_srtnoti_code := 'ALGGNE';
v_count_new := v_count_new + 1;
ELSE -- bijwerken kenmerken!
v_errormsg := 'Fout bij bepalen gebouw';
SELECT alg_gebouw_key
INTO v_gebouw_key
FROM alg_v_aanweziggebouw
WHERE alg_locatie_key = v_locatie_key
AND UPPER (TRIM (alg_gebouw_code)) = UPPER (recGebouw.alg_gebouw_code);
v_srtnoti_code := 'ALGGUP';
v_count_upd := v_count_upd + 1;
END IF;
-- NULL-waarden resulteren NIET in het wissen van kenmerkvelden
-- (bijwerken kan wel, maar wissen dus niet)!
upsert_algkenmerk (v_gebouw_key, 'G', recGebouw.kenmerk_key1, recGebouw.waarde1);
upsert_algkenmerk (v_gebouw_key, 'G', recGebouw.kenmerk_key2, recGebouw.waarde2);
upsert_algkenmerk (v_gebouw_key, 'G', recGebouw.kenmerk_key3, recGebouw.waarde3);
upsert_algkenmerk (v_gebouw_key, 'G', recGebouw.kenmerk_key4, recGebouw.waarde4);
upsert_algkenmerk (v_gebouw_key, 'G', recGebouw.kenmerk_key5, recGebouw.waarde5);
upsert_algkenmerk (v_gebouw_key, 'G', recGebouw.kenmerk_key6, recGebouw.waarde6);
upsert_algkenmerk (v_gebouw_key, 'G', recGebouw.kenmerk_key7, recGebouw.waarde7);
upsert_algkenmerk (v_gebouw_key, 'G', recGebouw.kenmerk_key8, recGebouw.waarde8);
upsert_algkenmerk (v_gebouw_key, 'G', recGebouw.kenmerk_key9, recGebouw.waarde9);
upsert_algkenmerk (v_gebouw_key, 'G', recGebouw.kenmerk_key10, recGebouw.waarde10);
fac.trackaction (v_srtnoti_code, v_gebouw_key, NULL, NULL, NULL);
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, '');
COMMIT;
END;
END LOOP;
fac.imp_writelog (p_import_key, 'S', 'Gebouw/#ingelezen: ' || TO_CHAR (v_count_tot), '');
fac.imp_writelog (p_import_key, 'S', 'Gebouw/#toegevoegd: ' || TO_CHAR (v_count_new), '');
fac.imp_writelog (p_import_key, 'S', 'Gebouw/#bijgewerkt: ' || TO_CHAR (v_count_upd), '');
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key, 'E', v_errormsg, 'Importproces locaties/gebouwen afgebroken!');
END fac_update_onrgoed1;
/
CREATE OR REPLACE PROCEDURE fac_import_onrgoed1_del (
p_import_key IN NUMBER
) IS
BEGIN
fac_import_onrgoed1(p_import_key);
END fac_import_onrgoed1_del;
/
CREATE OR REPLACE PROCEDURE fac_update_onrgoed1_del (
p_import_key IN NUMBER
) IS
BEGIN
fac.imp_alg_delete_onrgoed(p_import_key,1);
fac_update_onrgoed1(p_import_key);
END fac_update_onrgoed1_del;
/
CREATE OR REPLACE PROCEDURE fac_import_onrgoed2 (p_import_key IN NUMBER
)
AS
c_fielddelimitor VARCHAR2 (2) := fac.import_delimiter(p_import_key);
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- 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_mode NUMBER (1);
v_aanduiding VARCHAR2 (200);
v_alg_kenmerk_key1 VARCHAR2 (255);
v_alg_kenmerk_key2 VARCHAR2 (255);
v_alg_kenmerk_key3 VARCHAR2 (255);
v_alg_kenmerk_key4 VARCHAR2 (255);
v_alg_kenmerk_key5 VARCHAR2 (255);
-- De importvelden:
v_locatie_code VARCHAR2 (255); -- 10
v_gebouw_code VARCHAR2 (255); -- 12
v_verdieping_volgnr VARCHAR2 (255); -- 3,0
v_verdieping_volgnr_n NUMBER (3, 0); -- 3,0
v_srtruimte_omschrijving VARCHAR2 (255); -- 30
v_ruimte_nr VARCHAR2 (255); -- 10
v_ruimte_omschrijving VARCHAR2 (255); -- 30
v_ruimte_bruto_vloeropp VARCHAR2 (255); -- 8,2
v_ruimte_bruto_vloeropp_n NUMBER (8, 2); -- 8,2
v_afdeling_naam VARCHAR2 (255); -- 10
v_ruimte_afdeling_bezetting VARCHAR2 (255); -- 8,5
v_ruimte_afdeling_bezetting_n VARCHAR2 (255); -- 8,5
v_reserveerbaar VARCHAR2 (255); -- 1
v_res_discipline_omschrijving VARCHAR2 (255); -- 60
v_res_discipline_expire_dagen VARCHAR2 (255); -- 3
v_res_disc_expire_dagen_n NUMBER (3, 0); -- 3
v_res_ruimte_prijs VARCHAR2 (255); -- 7,2
v_res_ruimte_prijs_n NUMBER (7, 2); -- 7,2
v_res_opstelling_omschrijving VARCHAR2 (255); -- 30
v_res_ruimte_opstel_bezoekers VARCHAR2 (255); -- 5,0
v_res_ruimte_opstel_bez_n NUMBER (5, 0); -- 5,0
v_res_ruimte_nr VARCHAR2 (255); -- 40
v_res_ruimte_omschrijving VARCHAR2 (4000); -- 255
v_alg_kenmerkwaarde1 VARCHAR2 (4000);
v_alg_kenmerkwaarde2 VARCHAR2 (4000);
v_alg_kenmerkwaarde3 VARCHAR2 (4000);
v_alg_kenmerkwaarde4 VARCHAR2 (4000);
v_alg_kenmerkwaarde5 VARCHAR2 (4000);
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
-- Controleer tijdens import-fase op bestaan van kenmerk
FUNCTION bepaal_kenmerk_key (kw IN VARCHAR)
RETURN NUMBER
IS
v_kenmerk_key NUMBER;
BEGIN
IF fac.safe_to_number (kw) IS NULL
THEN -- kenmerkwaarde is alfanumeriek (dus omschrijving)!
SELECT alg_kenmerk_key
INTO v_kenmerk_key
FROM alg_kenmerk
WHERE alg_kenmerk_upper = UPPER (kw)
AND alg_kenmerk_verwijder IS NULL
AND alg_kenmerk_niveau = 'R'
AND alg_kenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'r', 'S', 'X', 'V');
ELSE -- kenmerkwaarde is numeriek (dus key)!
SELECT alg_kenmerk_key
INTO v_kenmerk_key
FROM alg_kenmerk
WHERE alg_kenmerk_key = fac.safe_to_number (kw)
AND alg_kenmerk_verwijder IS NULL
AND alg_kenmerk_niveau = 'R'
AND alg_kenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'r', 'S', 'X', 'V');
END IF;
RETURN v_kenmerk_key;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
IF kw IS NULL OR UPPER (kw) LIKE 'KENMERK%'
THEN
RETURN NULL;
ELSE
fac.imp_writelog (p_import_key,
'W',
'Fout bij bepalen kenmerk [' || kw || ']',
'Bestaat niet of type ongeldig');
COMMIT;
RETURN NULL;
END IF;
END;
BEGIN
DELETE FROM fac_imp_onrgoed2;
header_is_valid := 0;
v_count := 0;
FOR rec1 IN c1
LOOP
BEGIN
v_errormsg := 'Fout FETCH te importeren rij';
v_newline := rec1.fac_imp_file_line;
v_errormsg := 'Fout opvragen te importeren rij met index ' || TO_CHAR (rec1.fac_imp_file_index);
v_aanduiding := '';
v_errorhint := '';
v_ongeldig := 0;
-- Lees alle veldwaarden
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_srtruimte_omschrijving);
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_afdeling_naam);
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);
fac.imp_getfield (v_newline, c_fielddelimitor, v_res_discipline_expire_dagen);
fac.imp_getfield (v_newline, c_fielddelimitor, v_res_ruimte_prijs);
fac.imp_getfield (v_newline, c_fielddelimitor, v_res_opstelling_omschrijving);
fac.imp_getfield (v_newline, c_fielddelimitor, v_res_ruimte_opstel_bezoekers);
fac.imp_getfield (v_newline, c_fielddelimitor, v_res_ruimte_nr);
fac.imp_getfield (v_newline, c_fielddelimitor, v_res_ruimte_omschrijving);
fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_kenmerkwaarde1);
fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_kenmerkwaarde2);
fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_kenmerkwaarde3);
fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_kenmerkwaarde4);
fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_kenmerkwaarde5);
v_aanduiding :=
v_locatie_code || '|' || v_gebouw_code || '|' || v_verdieping_volgnr || '|' || v_ruimte_nr || '| ';
IF (header_is_valid = 0)
THEN
IF UPPER (v_locatie_code) = 'LOCATIECODE'
AND UPPER (v_ruimte_nr) = 'RUIMTENUMMER'
AND UPPER (v_res_ruimte_omschrijving) = 'OMSCHRIJVING'
THEN
v_alg_kenmerk_key1 := bepaal_kenmerk_key (v_alg_kenmerkwaarde1);
v_alg_kenmerk_key2 := bepaal_kenmerk_key (v_alg_kenmerkwaarde2);
v_alg_kenmerk_key3 := bepaal_kenmerk_key (v_alg_kenmerkwaarde3);
v_alg_kenmerk_key4 := bepaal_kenmerk_key (v_alg_kenmerkwaarde4);
v_alg_kenmerk_key5 := bepaal_kenmerk_key (v_alg_kenmerkwaarde5);
header_is_valid := 1;
END IF;
ELSE
v_count := v_count + 1;
v_errormsg := 'Fout inlezen locatie [' || v_locatie_code || ']';
v_locatie_code := TRIM(v_locatie_code);
IF LENGTH (v_locatie_code) > 10
THEN
v_locatie_code := SUBSTR (v_locatie_code, 1, 10);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Locatie-aanduiding is te lang',
'Aanduiding wordt afgebroken tot <' || v_locatie_code || '>'
);
END IF;
--
v_errormsg := 'Fout inlezen gebouw [' || v_gebouw_code || ']';
v_gebouw_code := TRIM(v_gebouw_code);
IF LENGTH (v_gebouw_code) > 12
THEN
v_gebouw_code := SUBSTR (v_gebouw_code, 1, 12);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Gebouwcode-aanduiding is te lang',
'Aanduiding wordt afgebroken tot <' || v_gebouw_code || '>'
);
END IF;
--
v_errormsg := '1 Fout inlezen verdiepingvolgnr [' || v_verdieping_volgnr || ']';
v_errorhint := 'Geef een geheel getal niet groter dan 3 posities';
IF (NVL (LENGTH (ROUND (fac.safe_to_number (v_verdieping_volgnr))), 10)) > 3
THEN
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || 'xyz Ongeldig verdiepingvolgnummer [' || v_verdieping_volgnr || ']',
v_errorhint
);
v_ongeldig := 1;
ELSE
v_verdieping_volgnr_n := ROUND (fac.safe_to_number (v_verdieping_volgnr));
END IF;
--
v_errormsg := 'Fout inlezen ruimtefunctie [' || v_srtruimte_omschrijving || ']';
v_srtruimte_omschrijving := TRIM(v_srtruimte_omschrijving);
IF LENGTH (v_srtruimte_omschrijving) > 50
THEN
v_srtruimte_omschrijving := SUBSTR (v_srtruimte_omschrijving, 1, 50);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Ruimtefunctie-aanduiding is te lang',
'Aanduiding wordt afgebroken tot <' || v_srtruimte_omschrijving || '>'
);
END IF;
--
v_errormsg := 'Fout inlezen ruimtenummer [' || v_ruimte_nr || ']';
v_ruimte_nr := TRIM(v_ruimte_nr);
IF LENGTH (v_ruimte_nr) > 20
THEN
v_ruimte_nr := SUBSTR (v_ruimte_nr, 1, 20);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Ruimtenr-aanduiding is te lang',
'Aanduiding wordt afgebroken tot <' || v_ruimte_nr || '>'
);
END IF;
--
v_errormsg := 'Fout inlezen ruimte [' || v_ruimte_omschrijving || ']';
v_ruimte_omschrijving := TRIM(v_ruimte_omschrijving);
IF LENGTH (v_ruimte_omschrijving) > 30
THEN
v_ruimte_omschrijving := SUBSTR (v_ruimte_omschrijving, 1, 30);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Ruimte-aanduiding is te lang',
'Aanduiding wordt afgebroken tot <' || v_ruimte_omschrijving || '>'
);
END IF;
--
v_errormsg := 'Fout inlezen ruimte oppervlakte [' || v_ruimte_bruto_vloeropp || ']';
v_errorhint := 'Maximaal grootte getal is 99999.99';
IF TRIM (v_ruimte_bruto_vloeropp) IS NULL
THEN
v_ruimte_bruto_vloeropp_n := TO_NUMBER (NULL);
ELSE
-- nls_numeric_characters wordt verondersteld
v_ruimte_bruto_vloeropp_n := TO_NUMBER (TRIM (REPLACE (v_ruimte_bruto_vloeropp, ',', '.')), '999999D99');
END IF;
--
v_errormsg := 'Fout inlezen afdelingscode [' || v_afdeling_naam || ']';
v_afdeling_naam := TRIM(v_afdeling_naam);
IF LENGTH (v_afdeling_naam) > 15
THEN
v_afdeling_naam := SUBSTR (v_afdeling_naam, 1, 15);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Afdelingscode is te lang',
'Afdelingscode wordt afgebroken tot <' || v_afdeling_naam || '>'
);
END IF;
--
v_errormsg := 'Fout inlezen ruimtebezetting [' || v_ruimte_afdeling_bezetting || ']';
v_errorhint := 'Maximaal grootte getal is 999.99999';
IF TRIM (v_ruimte_afdeling_bezetting) IS NULL
THEN
v_ruimte_afdeling_bezetting_n := TO_NUMBER (NULL);
ELSE
-- nls_numeric_characters wordt verondersteld
v_ruimte_afdeling_bezetting_n := TO_NUMBER (TRIM (REPLACE (v_ruimte_afdeling_bezetting, ',', '.')), '999D99999');
END IF;
--
v_reserveerbaar := SUBSTR (TRIM (v_reserveerbaar), 1, 1);
--
v_errormsg := 'Fout inlezen catalogus [' || v_res_discipline_omschrijving || ']';
v_res_discipline_omschrijving := TRIM(v_res_discipline_omschrijving);
IF LENGTH (v_res_discipline_omschrijving) > 60
THEN
v_res_discipline_omschrijving := SUBSTR (v_res_discipline_omschrijving, 1, 60);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Categorie-aanduiding ruimte is te lang',
'Aanduiding wordt afgebroken tot <' || v_res_discipline_omschrijving || '>'
);
END IF;
--
v_errormsg := 'Fout inlezen expire dagen [' || v_res_discipline_expire_dagen || ']';
v_errorhint := 'Geef geheel getal niet groter dan 3 posities';
IF TRIM (v_res_discipline_expire_dagen) IS NULL
THEN
v_res_disc_expire_dagen_n := 0;
ELSE
v_res_disc_expire_dagen_n := TO_NUMBER (v_res_discipline_expire_dagen);
END IF;
--
v_errormsg := 'Fout inlezen prijs reserveerbare ruimte [' || v_res_ruimte_prijs || ']';
v_errorhint := 'Maximaal grootte getal is 99999.99 ';
IF (TRIM (v_res_ruimte_prijs) IS NULL)
THEN
v_res_ruimte_prijs_n := TO_NUMBER (NULL);
ELSE
-- nls_numeric_characters wordt verondersteld
v_res_ruimte_prijs_n := TO_NUMBER (TRIM (REPLACE (v_res_ruimte_prijs, ',', '.')), '999999D99');
END IF;
--
v_errormsg := 'Fout inlezen opstelling [' || v_res_opstelling_omschrijving || ']';
v_res_opstelling_omschrijving := TRIM(v_res_opstelling_omschrijving);
IF LENGTH (v_res_opstelling_omschrijving) > 30
THEN
v_res_opstelling_omschrijving := SUBSTR (v_res_opstelling_omschrijving, 1, 30);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Ruimteopstelling-aanduiding is te lang',
'Aanduiding wordt afgebroken tot <' || v_res_opstelling_omschrijving || '>'
);
END IF;
--
v_errormsg := 'Fout inlezen aantal bezoekers [' || v_res_ruimte_opstel_bezoekers || ']';
v_errorhint := 'Geef geheel getal niet groter dan 5 posities';
IF TRIM (v_res_ruimte_opstel_bezoekers) IS NULL
THEN
v_res_ruimte_opstel_bez_n := TO_NUMBER (NULL);
ELSE
v_res_ruimte_opstel_bez_n := TO_NUMBER (v_res_ruimte_opstel_bezoekers);
END IF;
--
v_errormsg := 'Fout inlezen ruimte nummer reserveerbare ruimte omschrijving [' || v_res_ruimte_nr || ']';
v_res_ruimte_nr := TRIM(v_res_ruimte_nr);
IF LENGTH (v_res_ruimte_nr) > 40
THEN
v_errormsg := 'Fout inlezen ruimte nummer reserveerbare ruimte omschrijving [' || v_res_ruimte_nr || ']';
v_res_ruimte_nr := SUBSTR (v_res_ruimte_nr, 1, 40);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Ruimtenr-aanduiding reserveerbare ruimte is te lang',
'Aanduiding wordt afgebroken tot <' || v_res_ruimte_nr || '>'
);
v_errormsg := 'Fout inlezen ruimte nummer reserveerbare ruimte omschrijving [' || v_res_ruimte_nr || ']';
END IF;
v_errormsg := 'Fout inlezen ruimte nummer reserveerbare ruimte omschrijving [' || v_res_ruimte_nr || ']';
--
v_errormsg := 'Fout inlezen reserveerbare ruimte [' || v_res_ruimte_omschrijving || ']';
v_res_ruimte_omschrijving := TRIM(v_res_ruimte_omschrijving);
IF LENGTH (v_res_ruimte_omschrijving) > 255
THEN
v_res_ruimte_omschrijving := SUBSTR (v_res_ruimte_omschrijving, 1, 255);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Ruimte-aanduiding reserveerbare ruimte is te lang',
'Aanduiding wordt afgebroken tot <' || v_res_ruimte_omschrijving || '>'
);
END IF;
v_alg_kenmerkwaarde1 := TRIM (v_alg_kenmerkwaarde1);
v_alg_kenmerkwaarde2 := TRIM (v_alg_kenmerkwaarde2);
v_alg_kenmerkwaarde3 := TRIM (v_alg_kenmerkwaarde3);
v_alg_kenmerkwaarde4 := TRIM (v_alg_kenmerkwaarde4);
v_alg_kenmerkwaarde5 := TRIM (v_alg_kenmerkwaarde5);
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
v_errormsg := 'Fout bij toevoegen te impoteren ruimte [' || v_res_ruimte_omschrijving || ']';
INSERT INTO fac_imp_onrgoed2 (
alg_locatie_code,
alg_gebouw_code,
alg_verdieping_volgnr,
alg_srtruimte_omschrijving,
alg_ruimte_nr,
alg_ruimte_omschrijving,
alg_ruimte_bruto_vloeropp,
prs_afdeling_naam,
prs_ruimteafdeling_bezetting,
reserveerbaar,
res_discipline_omschrijving,
res_discipline_expire_dagen,
res_ruimte_prijs,
res_opstelling_omschrijving,
res_ruimte_opstel_bezoekers,
res_ruimte_nr,
res_ruimte_omschrijving,
alg_kenmerkwaarde1,
alg_kenmerkwaarde2,
alg_kenmerkwaarde3,
alg_kenmerkwaarde4,
alg_kenmerkwaarde5
)
VALUES (
v_locatie_code,
v_gebouw_code,
v_verdieping_volgnr_n,
v_srtruimte_omschrijving,
v_ruimte_nr,
v_ruimte_omschrijving,
v_ruimte_bruto_vloeropp_n,
v_afdeling_naam,
v_ruimte_afdeling_bezetting_n,
v_reserveerbaar,
v_res_discipline_omschrijving,
v_res_disc_expire_dagen_n,
v_res_ruimte_prijs_n,
v_res_opstelling_omschrijving,
v_res_ruimte_opstel_bez_n,
v_res_ruimte_nr,
v_res_ruimte_omschrijving,
DECODE (v_alg_kenmerk_key1,
NULL, v_alg_kenmerkwaarde1,
TO_CHAR (v_alg_kenmerk_key1)
|| '='
|| SUBSTR (v_alg_kenmerkwaarde1, 1, 3980)
),
DECODE (v_alg_kenmerk_key2,
NULL, v_alg_kenmerkwaarde2,
TO_CHAR (v_alg_kenmerk_key2)
|| '='
|| SUBSTR (v_alg_kenmerkwaarde2, 1, 3980)
),
DECODE (v_alg_kenmerk_key3,
NULL, v_alg_kenmerkwaarde3,
TO_CHAR (v_alg_kenmerk_key3)
|| '='
|| SUBSTR (v_alg_kenmerkwaarde3, 1, 3980)
),
DECODE (v_alg_kenmerk_key4,
NULL, v_alg_kenmerkwaarde4,
TO_CHAR (v_alg_kenmerk_key4)
|| '='
|| SUBSTR (v_alg_kenmerkwaarde4, 1, 3980)
),
DECODE (v_alg_kenmerk_key5,
NULL, v_alg_kenmerkwaarde5,
TO_CHAR (v_alg_kenmerk_key5)
|| '='
|| SUBSTR (v_alg_kenmerkwaarde5, 1, 3980)
)
);
END IF;
END IF;
END;
END LOOP;
IF (header_is_valid = 0)
THEN
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || 'Ongeldig importbestand',
'Geen geldige headerregel aanwezig'
);
ELSE
fac.imp_writelog (p_import_key, 'S', 'Ruimte: aantal ingelezen regels: ' || TO_CHAR (v_count), '');
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := v_errormsg || ' Error ' || oracle_err_num || '/' || oracle_err_mes;
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
'Eventeel resterende regels worden niet meer ingelezen!'
);
END fac_import_onrgoed2;
/
CREATE OR REPLACE PROCEDURE fac_update_onrgoed2 (
p_import_key IN NUMBER
) IS
c_fielddelimitor VARCHAR2 (2) := fac.import_delimiter(p_import_key);
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
v_count NUMBER(10);
v_count_update NUMBER(10);
v_count_tot NUMBER(10);
-- De importvelden:
v_regio_omschrijving VARCHAR2(255); -- 30
v_district_omschrijving VARCHAR2(255); -- 30
v_locatie_code VARCHAR2(255); -- 10
v_locatie_omschrijving VARCHAR2(255); -- 60
v_gebouw_code VARCHAR2(255); -- 12
v_gebouw_naam VARCHAR2(255); -- 30
v_srtgebouw_omschrijving VARCHAR2(255); -- 30
v_locatie_verantw VARCHAR2(255); -- 30
v_locatie_verantw_tel VARCHAR2(255); -- 15
v_locatie_adres VARCHAR2(255); -- 50
v_locatie_postcode VARCHAR2(255); -- 12
v_locatie_plaats VARCHAR2(255); -- 30
v_locatie_land VARCHAR2(255); -- 30
v_locatie_post_adres VARCHAR2(255); -- 50
v_locatie_post_postcode VARCHAR2(255); -- 12
v_locatie_post_plaats VARCHAR2(255); -- 30
v_locatie_post_land VARCHAR2(255); -- 30
v_regio_key NUMBER(10);
v_district_key NUMBER(10);
v_locatie_key NUMBER(10);
v_srtgebouw_key NUMBER(10);
v_gebouw_key NUMBER(10);
v_verdieping_key NUMBER(10);
v_verdieping_volgnr NUMBER(3);
v_srtruimte_key NUMBER(10);
v_ruimte_key NUMBER(10);
v_res_ruimte_key NUMBER(10);
v_ruimte_omschrijving res_ruimte.res_ruimte_nr%TYPE; -- 40
v_discipline_key NUMBER(10);
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
FROM fac_imp_onrgoed2
GROUP BY upper(alg_locatie_code), upper(alg_gebouw_code), alg_verdieping_volgnr;
recVerdieping cVerdieping%ROWTYPE;
CURSOR cSrtRuimte
IS
SELECT min(alg_srtruimte_omschrijving) alg_srtruimte_omschrijving
FROM fac_imp_onrgoed2
GROUP BY alg_srtruimte_omschrijving;
recSrtRuimte cSrtRuimte%ROWTYPE;
CURSOR cRuimte
IS
SELECT alg_locatie_code,
alg_gebouw_code,
alg_verdieping_volgnr,
alg_srtruimte_omschrijving,
alg_ruimte_nr,
alg_ruimte_omschrijving,
alg_ruimte_bruto_vloeropp,
reserveerbaar,
res_discipline_omschrijving,
res_ruimte_prijs,
res_opstelling_omschrijving,
res_ruimte_opstel_bezoekers,
res_ruimte_nr,
res_ruimte_omschrijving,
i.prs_afdeling_naam,
prs_afdeling_key,
prs_ruimteafdeling_bezetting,
fac.safe_to_number (SUBSTR (alg_kenmerkwaarde1, 1, INSTR (alg_kenmerkwaarde1, '=') - 1))
kenmerk_key1,
SUBSTR (alg_kenmerkwaarde1, INSTR (alg_kenmerkwaarde1, '=') + 1) waarde1,
fac.safe_to_number (SUBSTR (alg_kenmerkwaarde2, 1, INSTR (alg_kenmerkwaarde2, '=') - 1))
kenmerk_key2,
SUBSTR (alg_kenmerkwaarde2, INSTR (alg_kenmerkwaarde2, '=') + 1) waarde2,
fac.safe_to_number (SUBSTR (alg_kenmerkwaarde3, 1, INSTR (alg_kenmerkwaarde3, '=') - 1))
kenmerk_key3,
SUBSTR (alg_kenmerkwaarde3, INSTR (alg_kenmerkwaarde3, '=') + 1) waarde3,
fac.safe_to_number (SUBSTR (alg_kenmerkwaarde4, 1, INSTR (alg_kenmerkwaarde4, '=') - 1))
kenmerk_key4,
SUBSTR (alg_kenmerkwaarde4, INSTR (alg_kenmerkwaarde4, '=') + 1) waarde4,
fac.safe_to_number (SUBSTR (alg_kenmerkwaarde5, 1, INSTR (alg_kenmerkwaarde5, '=') - 1))
kenmerk_key5,
SUBSTR (alg_kenmerkwaarde5, INSTR (alg_kenmerkwaarde5, '=') + 1) waarde5
FROM fac_imp_onrgoed2 i,
prs_afdeling a
WHERE a.prs_afdeling_verwijder IS NULL
AND UPPER(i.prs_afdeling_naam) = a.prs_afdeling_upper(+);
recRuimte cRuimte%ROWTYPE;
CURSOR cOpstelling
IS
SELECT min(res_opstelling_omschrijving) res_opstelling_omschrijving
,UPPER(res_opstelling_omschrijving) res_opstelling_upper
FROM FAC_IMP_ONRGOED2
WHERE res_opstelling_omschrijving IS NOT NULL
GROUP BY UPPER(res_opstelling_omschrijving);
recOpstelling cOpstelling%ROWTYPE;
CURSOR cCategorie
IS
SELECT min(res_discipline_omschrijving) res_discipline_omschrijving
,upper(res_discipline_omschrijving) res_discipline_upper
,NVL(res_discipline_expire_dagen,0) res_discipline_expire_dagen
FROM FAC_IMP_ONRGOED2
WHERE reserveerbaar in ('Y','y','J','j')
GROUP BY upper(res_discipline_omschrijving)
, res_discipline_expire_dagen;
recCategorie cCategorie%ROWTYPE;
CURSOR cResRuimte
IS
SELECT *
FROM FAC_IMP_ONRGOED2
WHERE RESERVEERBAAR in ('J','j','Y','y');
recResRuimte cResRuimte%ROWTYPE;
-- SUBPROC
PROCEDURE upsert_algkenmerk (p_ruimte_key IN NUMBER,
p_kenmerk_key IN NUMBER,
p_waarde IN VARCHAR2)
AS
v_kenmerk_type alg_kenmerk.alg_kenmerk_kenmerktype%TYPE;
ccount NUMBER;
v_waarde VARCHAR2 (4000);
v_objectnaam fac_kenmerkdomein.fac_kenmerkdomein_objectnaam%TYPE;
v_kolomnaam fac_kenmerkdomein.fac_kenmerkdomein_kolomnaam%TYPE;
v_kolomtxt fac_kenmerkdomein.fac_kenmerkdomein_kolomtxt%TYPE;
sql_stmt VARCHAR2 (1000);
l_cursor_1 INTEGER;
l_rowsprocessed NUMBER DEFAULT 0;
BEGIN
IF (p_kenmerk_key IS NOT NULL AND p_waarde IS NOT NULL)
THEN
v_errormsg := 'Fout bij bepalen kenmerktype';
SELECT alg_kenmerk_kenmerktype
INTO v_kenmerk_type
FROM alg_kenmerk
WHERE alg_kenmerk_verwijder IS NULL
AND alg_kenmerk_key = p_kenmerk_key
AND alg_kenmerk_niveau = 'R';
IF v_kenmerk_type IN ('R', 'r', 'S')
THEN
v_errormsg := 'Fout bij bepalen eigen tabel';
SELECT COUNT ( * )
INTO ccount
FROM alg_kenmerk k, fac_kenmerkdomein d
WHERE k.alg_kenmerk_key = p_kenmerk_key
AND k.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key
AND d.fac_usrtab_key IS NOT NULL;
v_errormsg := 'Fout bij bepalen nieuwe waarde [' || SUBSTR(p_waarde, 1, 200) || ']';
IF ccount = 1
THEN -- Eigen tabel
SELECT TO_CHAR (ud.fac_usrdata_key)
INTO v_waarde
FROM alg_kenmerk k, fac_kenmerkdomein d, fac_v_aanwezigusrdata ud
WHERE k.alg_kenmerk_key = p_kenmerk_key
AND k.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key
AND d.fac_usrtab_key = ud.fac_usrtab_key
AND UPPER (TRIM (ud.fac_usrdata_omschr)) = UPPER (p_waarde);
ELSE -- FACILITOR view/tabel
SELECT d.fac_kenmerkdomein_objectnaam, d.fac_kenmerkdomein_kolomnaam, d.fac_kenmerkdomein_kolomtxt
INTO v_objectnaam, v_kolomnaam, v_kolomtxt
FROM alg_kenmerk k, fac_kenmerkdomein d
WHERE k.alg_kenmerk_key = p_kenmerk_key
AND k.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key
AND d.fac_usrtab_key IS NULL;
sql_stmt := 'SELECT MAX ('
|| v_kolomnaam
|| ') FROM '
|| v_objectnaam
|| ' WHERE UPPER (TRIM ('
|| v_kolomtxt
|| ')) = UPPER (:pwaarde)';
l_cursor_1 := DBMS_SQL.open_cursor;
DBMS_SQL.parse (l_cursor_1, sql_stmt, DBMS_SQL.native);
DBMS_SQL.BIND_VARIABLE(l_cursor_1,':pwaarde', p_waarde);
DBMS_SQL.define_column(l_cursor_1, 1, v_waarde, 255);
l_rowsprocessed := DBMS_SQL.execute_and_fetch (l_cursor_1);
DBMS_SQL.column_value (l_cursor_1, 1, v_waarde);
DBMS_SQL.close_cursor(l_cursor_1);
END IF;
ELSE -- C(Karakter)/D(Datum)/N(Numeriek)/X(Bestandsnaam)
v_waarde := p_waarde;
END IF;
v_errormsg := 'Fout bij toevoegen/bijwerken kenmerk';
alg.upsertkenmerk (p_kenmerk_key,
p_ruimte_key,
v_waarde);
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'upsert_algkenmerk');
END;
BEGIN
-- ****************
-- ***VERDIEPING***
-- ****************
OPEN cVerdieping;
v_count_update := 0;
v_count_tot := 0;
IF cVerdieping%ISOPEN THEN
LOOP
BEGIN
v_errormsg := '';
v_errorhint := '';
v_aanduiding := '';
FETCH cVerdieping INTO recVerdieping;
EXIT WHEN cVerdieping%NOTFOUND;
v_count_tot := v_count_tot + 1;
v_aanduiding := recVerdieping.ALG_LOCATIE_CODE||'|'||recVerdieping.ALG_GEBOUW_CODE||'|'||recVerdieping.ALG_VERDIEPING_VOLGNR||'| ';
v_errorhint := ' Fout bij bepalen locatie ['||recVerdieping.ALG_LOCATIE_CODE||']';
SELECT ALG_LOCATIE_KEY
INTO v_locatie_key
FROM ALG_LOCATIE
WHERE UPPER(ALG_LOCATIE_CODE) = UPPER(recVerdieping.ALG_LOCATIE_CODE)
AND ALG_LOCATIE_VERWIJDER IS NULL;
v_errorhint := ' Fout bij bepalen gebouw ['||recVerdieping.ALG_GEBOUW_CODE||']';
SELECT ALG_GEBOUW_KEY
INTO v_gebouw_key
FROM ALG_GEBOUW
WHERE UPPER(ALG_GEBOUW_CODE) = UPPER(recVerdieping.ALG_GEBOUW_CODE)
AND ALG_LOCATIE_KEY = v_locatie_key
AND ALG_GEBOUW_VERWIJDER IS NULL;
v_errorhint := 'Fout bij toevoegen verdieping';
SELECT count(*)
INTO v_count
FROM alg_v_aanwezigverdieping
WHERE alg_gebouw_key = v_gebouw_key
AND ALG_VERDIEPING_VOLGNR = recVerdieping.ALG_VERDIEPING_VOLGNR;
IF (v_count = 0) THEN
insert into ALG_VERDIEPING
(ALG_GEBOUW_KEY
,ALG_VERDIEPING_VOLGNR
,ALG_VERDIEPING_CODE
,ALG_VERDIEPING_OMSCHRIJVING
)
values
(v_gebouw_key
,recVerdieping.ALG_VERDIEPING_VOLGNR
,to_char(recVerdieping.ALG_VERDIEPING_VOLGNR)
,'Verdieping '||to_char(recVerdieping.ALG_VERDIEPING_VOLGNR)
);
END IF;
commit;
v_count_update := v_count_update + 1;
EXCEPTION WHEN OTHERS THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR(SQLERRM, 1, 200);
v_errormsg := 'Fout tijdens verwerken verdieping ['||recVerdieping.ALG_LOCATIE_CODE||'-'||recVerdieping.ALG_GEBOUW_CODE||'-'||to_number(recVerdieping.ALG_VERDIEPING_VOLGNR)||']';
v_errorhint := v_errorhint||': ' || 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',
'Verdieping: verwerkte regels zonder foutmelding: '||to_char(v_count_update),
''
);
fac.imp_writelog (p_import_key,
'S',
'Verdieping: verwerkte regels met foutmelding: '||to_char(v_count_tot-v_count_update),
''
);
END IF;
CLOSE cVerdieping;
-- *******************
-- ***RUIMTEFUNCTIE***
-- *******************
OPEN cSrtRuimte;
v_count_update := 0;
v_count_tot := 0;
IF cSrtRuimte%ISOPEN THEN
LOOP
BEGIN
v_errormsg := '';
v_errorhint := '';
v_aanduiding := '';
FETCH cSrtRuimte INTO recSrtRuimte;
EXIT WHEN cSrtRuimte%NOTFOUND;
v_count_tot := v_count_tot + 1;
v_aanduiding := recSrtRuimte.ALG_SRTRUIMTE_OMSCHRIJVING||'| ';
v_errorhint := ' Fout bij toevoegen ruimtefunctie';
SELECT count(*)
INTO v_count
FROM alg_srtruimte
WHERE upper(alg_srtruimte_omschrijving) = upper(recSrtRuimte.ALG_SRTRUIMTE_OMSCHRIJVING)
AND alg_srtruimte_verwijder is null;
IF (v_count = 0) THEN
insert into ALG_SRTRUIMTE
(ALG_SRTRUIMTE_OMSCHRIJVING
)
values
(recSrtRuimte.ALG_SRTRUIMTE_OMSCHRIJVING
);
END IF;
commit;
v_count_update := v_count_update + 1;
EXCEPTION WHEN OTHERS THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR(SQLERRM, 1, 200);
v_errormsg := 'Fout tijdens verwerken ruimtefunctie ['||recSrtRuimte.ALG_SRTRUIMTE_OMSCHRIJVING||']';
v_errorhint := v_errorhint||': ' || 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',
'Ruimtefunctie: verwerkte regels zonder foutmelding: '||to_char(v_count_update),
''
);
fac.imp_writelog (p_import_key,
'S',
'Ruimtefunctie: verwerkte regels met foutmelding: '||to_char(v_count_tot-v_count_update),
''
);
END IF;
CLOSE cSrtRuimte;
-- ************
-- ***RUIMTE***
-- ************
OPEN cRuimte;
v_count_update := 0;
v_count_tot := 0;
IF cRuimte%ISOPEN THEN
LOOP
BEGIN
v_errormsg := '';
v_errorhint := '';
v_aanduiding := '';
v_ruimte_key := NULL;
FETCH cRuimte INTO recRuimte;
EXIT WHEN cRuimte%NOTFOUND;
v_count_tot := v_count_tot + 1;
v_aanduiding := recRuimte.ALG_LOCATIE_CODE||'|'||recRuimte.ALG_GEBOUW_CODE||'|'||recRuimte.ALG_VERDIEPING_VOLGNR||'|'||recRuimte.ALG_RUIMTE_NR||'| ';
v_errorhint := ' Fout bij bepalen locatie';
SELECT ALG_LOCATIE_KEY
INTO v_locatie_key
FROM ALG_LOCATIE
WHERE UPPER(ALG_LOCATIE_CODE) = UPPER(recRuimte.ALG_LOCATIE_CODE)
AND ALG_LOCATIE_verwijder is null;
v_errorhint := ' Fout bij bepalen gebouw';
SELECT ALG_GEBOUW_KEY
INTO v_gebouw_key
FROM ALG_GEBOUW
WHERE UPPER(ALG_GEBOUW_CODE) = UPPER(recRuimte.ALG_GEBOUW_CODE)
AND ALG_LOCATIE_KEY = v_locatie_key
AND ALG_GEBOUW_verwijder is null;
v_errorhint := ' Fout bij bepalen verdieping';
SELECT ALG_VERDIEPING_KEY
INTO v_verdieping_key
FROM ALG_VERDIEPING
WHERE ALG_GEBOUW_KEY = v_gebouw_key
AND ALG_VERDIEPING_VOLGNR = recRuimte.ALG_VERDIEPING_VOLGNR
AND ALG_VERDIEPING_verwijder is null;
v_errorhint := ' Fout bij bepalen ruimtefunctie'||' ['||recRuimte.alg_srtruimte_omschrijving||']';
SELECT ALG_SRTRUIMTE_KEY
INTO v_srtruimte_key
FROM ALG_SRTRUIMTE
WHERE upper(alg_srtruimte_omschrijving) = upper(recRuimte.ALG_SRTRUIMTE_OMSCHRIJVING)
AND ALG_SRTRUIMTE_verwijder is null;
SELECT count(*)
INTO v_count
FROM ALG_RUIMTE
WHERE ALG_VERDIEPING_KEY = v_verdieping_key
AND UPPER(ALG_RUIMTE_NR) = UPPER(recRuimte.ALG_RUIMTE_NR)
-- als ruimteomschrijving in sheet afwijkt geeft dit een onduidelijke error, dan liever
-- de omschrijving negeren en gewoon niet bijwerken
-- AND UPPER(ALG_RUIMTE_OMSCHRIJVING) = UPPER(recRuimte.ALG_RUIMTE_OMSCHRIJVING)
AND alg_ruimte_verwijder is null;
v_errorhint := ' Fout bij toevoegen ruimte';
IF v_count = 0 THEN
insert into ALG_RUIMTE
(ALG_VERDIEPING_KEY
,ALG_SRTRUIMTE_KEY
,ALG_RUIMTE_NR
,ALG_RUIMTE_OMSCHRIJVING
,ALG_RUIMTE_OPMERKING
,ALG_RUIMTE_BRUTO_VLOEROPP
)
values
(v_verdieping_key
,v_srtruimte_key
,recRuimte.ALG_RUIMTE_NR
,recRuimte.ALG_RUIMTE_OMSCHRIJVING
,''
,TO_NUMBER(recRuimte.ALG_RUIMTE_BRUTO_VLOEROPP)
)
RETURNING ALG_RUIMTE_KEY
INTO v_ruimte_key;
END IF;
commit;
v_count_update := v_count_update + 1;
-- Als de ruimte al bestaat, dan nog de key ophalen, zodat we 'm hieronder kunnen gebruiken.
IF (v_ruimte_key IS NULL)
THEN
v_errorhint := ' Fout bij bepalen ruimte';
SELECT ALG_RUIMTE_KEY
INTO v_ruimte_key
FROM ALG_RUIMTE
WHERE ALG_VERDIEPING_KEY = v_verdieping_key
AND UPPER(ALG_RUIMTE_NR) = UPPER(recRuimte.ALG_RUIMTE_NR)
AND alg_ruimte_verwijder is null;
END IF;
-- ********************
-- ***RUIMTEAFDELING***
-- ********************
-- AAES#25942: koppel afdeling(en) aan ruimte; <20><>n afdeling per regel, ruimte kan meerdere keren voorkomen.
IF (recRuimte.prs_afdeling_naam IS NOT NULL)
THEN
IF (recRuimte.prs_afdeling_key IS NULL)
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding||' afdeling ['||recRuimte.prs_afdeling_naam||']',
'Afdeling niet gevonden'
);
ELSE
IF (recRuimte.prs_ruimteafdeling_bezetting IS NULL)
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding||' afdeling ['||recRuimte.prs_afdeling_naam||']',
'Fout: afdeling gevuld, bezetting leeg!'
);
ELSIF (recRuimte.prs_ruimteafdeling_bezetting > 100 OR recRuimte.prs_ruimteafdeling_bezetting < 0)
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding||' afdeling ['||recRuimte.prs_afdeling_naam||']',
'Ongeldige ruimtebezetting ['||TO_CHAR(recRuimte.prs_ruimteafdeling_bezetting)||'] verwacht 0 <= bezetting <= 100'
);
ELSE
BEGIN
SELECT COUNT(*), MAX(prs_ruimteafdeling_key)
INTO v_count, v_ruimteafdeling_key
FROM prs_ruimteafdeling
WHERE prs_ruimteafdeling_verwijder IS NULL
AND prs_afdeling_key = recRuimte.prs_afdeling_key
AND alg_ruimte_key = v_ruimte_key;
IF (v_count = 0)
THEN
v_errorhint := ' Fout bij toevoegen ruimtebezetting';
INSERT INTO prs_ruimteafdeling
(prs_afdeling_key
,alg_ruimte_key
,prs_ruimteafdeling_bezetting)
VALUES
(recRuimte.prs_afdeling_key
,v_ruimte_key
,recRuimte.prs_ruimteafdeling_bezetting
);
END IF;
IF (v_count = 1)
THEN
v_errorhint := ' Fout bij aanpassen ruimtebezetting';
UPDATE prs_ruimteafdeling
SET prs_ruimteafdeling_bezetting = recRuimte.prs_ruimteafdeling_bezetting
WHERE prs_ruimteafdeling_key = v_ruimteafdeling_key;
END IF;
EXCEPTION WHEN OTHERS THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR(SQLERRM, 1, 200);
v_errormsg := 'Fout tijdens verwerken ruimteafdeling ['||
recRuimte.ALG_LOCATIE_CODE||'-'||recRuimte.ALG_GEBOUW_CODE||'-'||recRuimte.ALG_VERDIEPING_VOLGNR||'-'||recRuimte.ALG_RUIMTE_NR
||'] / ['||recRuimte.PRS_AFDELING_NAAM||']';
v_errorhint := v_errorhint||': ' || oracle_err_mes;
fac.imp_writelog (p_import_key,
'E',
v_aanduiding||v_errormsg,
v_errorhint
);
commit;
END;
END IF;
END IF;
END IF;
-- *******************
-- ***FLEXKENMERKEN***
-- *******************
v_errorhint := ' Fout bij toevoegen/bijwerken flexkenmerken';
upsert_algkenmerk (v_ruimte_key, recRuimte.kenmerk_key1, recRuimte.waarde1);
upsert_algkenmerk (v_ruimte_key, recRuimte.kenmerk_key2, recRuimte.waarde2);
upsert_algkenmerk (v_ruimte_key, recRuimte.kenmerk_key3, recRuimte.waarde3);
upsert_algkenmerk (v_ruimte_key, recRuimte.kenmerk_key4, recRuimte.waarde4);
upsert_algkenmerk (v_ruimte_key, recRuimte.kenmerk_key5, recRuimte.waarde5);
EXCEPTION WHEN OTHERS THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR(SQLERRM, 1, 200);
v_errormsg := 'Fout tijdens verwerken ruimte ['||recRuimte.ALG_LOCATIE_CODE||'-'||recRuimte.ALG_GEBOUW_CODE||'-'||recRuimte.ALG_VERDIEPING_VOLGNR||'-'||recRuimte.ALG_RUIMTE_NR||']';
v_errorhint := v_errorhint||': ' || 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',
'Ruimte: verwerkte regels zonder foutmelding: '||to_char(v_count_update),
''
);
fac.imp_writelog (p_import_key,
'S',
'Ruimte: verwerkte regels met foutmelding: '||to_char(v_count_tot-v_count_update),
''
);
END IF;
CLOSE cRuimte;
-- ****************
-- ***OPSTELLING***
-- ****************
OPEN cOpstelling;
v_count_update := 0;
v_count_tot := 0;
IF cOpstelling%ISOPEN THEN
LOOP
BEGIN
v_errormsg := '';
v_errorhint := '';
v_aanduiding := '';
FETCH cOpstelling INTO recOpstelling;
EXIT WHEN cOpstelling%NOTFOUND;
v_count_tot := v_count_tot + 1;
v_aanduiding := recOpstelling.RES_OPSTELLING_OMSCHRIJVING||'| ';
v_errorhint := ' Fout bij toevoegen opstelling';
select count(*)
into v_count
from RES_OPSTELLING
where RES_OPSTELLING_verwijder is null
and trim(RES_OPSTELLING_upper) = upper(trim(recOpstelling.RES_OPSTELLING_OMSCHRIJVING));
IF (v_count = 0) THEN
insert into RES_OPSTELLING
(RES_OPSTELLING_OMSCHRIJVING
)
values
(trim(recOpstelling.RES_OPSTELLING_OMSCHRIJVING)
);
END IF;
commit;
v_count_update := v_count_update + 1;
EXCEPTION WHEN OTHERS THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR(SQLERRM, 1, 200);
v_errormsg := 'Fout tijdens verwerken opstelling ['||recOpstelling.RES_OPSTELLING_OMSCHRIJVING||']';
v_errorhint := v_errorhint||': ' || 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',
'Opstelling: verwerkte regels zonder foutmelding: '||to_char(v_count_update),
''
);
fac.imp_writelog (p_import_key,
'S',
'Opstelling: verwerkte regels met foutmelding: '||to_char(v_count_tot-v_count_update),
''
);
END IF;
CLOSE cOpstelling;
-- ***************
-- ***CATEGORIE***
-- ***************
OPEN cCategorie;
v_count_update := 0;
v_count_tot := 0;
IF cCategorie%ISOPEN THEN
LOOP
BEGIN
v_errormsg := '';
v_errorhint := '';
v_aanduiding := '';
FETCH cCategorie INTO recCategorie;
EXIT WHEN cCategorie%NOTFOUND;
v_count_tot := v_count_tot + 1;
v_aanduiding := recCategorie.res_discipline_omschrijving||'| ';
v_errorhint := ' Fout bij toevoegen categorie';
select count(*)
into v_count
from ins_tab_discipline
where ins_discipline_verwijder is null
and ins_discipline_module='RES'
and upper(trim(ins_discipline_omschrijving)) = upper(trim(recCategorie.res_discipline_omschrijving));
IF (v_count = 0) THEN
INSERT INTO ins_tab_discipline
(ins_discipline_module
,ins_discipline_omschrijving
,ins_discipline_verwijder
,ins_discipline_min_level)
VALUES
('RES'
,trim(recCategorie.res_discipline_omschrijving)
,to_date(null)
,3)
RETURNING ins_discipline_key
INTO v_discipline_key;
INSERT INTO res_disc_params
(res_ins_discipline_key
,res_disc_params_expire_dagen)
VALUES
(v_discipline_key
,recCategorie.res_discipline_expire_dagen
);
END IF;
commit;
v_count_update := v_count_update + 1;
EXCEPTION WHEN OTHERS THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR(SQLERRM, 1, 200);
v_errormsg := 'Fout tijdens verwerken catalogus ['||recCategorie.res_discipline_omschrijving||']';
v_errorhint := v_errorhint||': ' || 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',
'Categorie: verwerkte regels zonder foutmelding: '||to_char(v_count_update),
''
);
fac.imp_writelog (p_import_key,
'S',
'Categorie: verwerkte regels met foutmelding: '||to_char(v_count_tot-v_count_update),
''
);
END IF;
CLOSE cCategorie;
-- ***************
-- ***RESRUIMTE***
-- ***************
OPEN cResRuimte;
v_count_update := 0;
v_count_tot := 0;
IF cResRuimte%ISOPEN THEN
LOOP
BEGIN
v_errormsg := '';
v_errorhint := '';
v_aanduiding := '';
FETCH cResRuimte INTO recResRuimte;
EXIT WHEN cResRuimte%NOTFOUND;
v_count_tot := v_count_tot + 1;
v_aanduiding := recResRuimte.ALG_LOCATIE_CODE||'|'||recResRuimte.ALG_GEBOUW_CODE||'|'||recResRuimte.ALG_VERDIEPING_VOLGNR||'|'||recResRuimte.ALG_RUIMTE_NR||'| ';
v_errorhint := ' Fout bij bepalen locatie';
SELECT ALG_LOCATIE_KEY
INTO v_locatie_key
FROM ALG_LOCATIE
WHERE UPPER(ALG_LOCATIE_CODE) = UPPER(recResRuimte.ALG_LOCATIE_CODE)
AND alg_locatie_verwijder is null;
v_errorhint := ' Fout bij bepalen gebouw';
SELECT ALG_GEBOUW_KEY
INTO v_gebouw_key
FROM ALG_GEBOUW
WHERE UPPER(ALG_GEBOUW_CODE) = UPPER(recResRuimte.ALG_GEBOUW_CODE)
AND ALG_LOCATIE_KEY = v_locatie_key
AND alg_gebouw_verwijder is null;
v_errorhint := ' Fout bij bepalen verdieping';
SELECT ALG_VERDIEPING_KEY, ALG_VERDIEPING_VOLGNR
INTO v_verdieping_key, v_verdieping_volgnr
FROM ALG_VERDIEPING
WHERE ALG_GEBOUW_KEY = v_gebouw_key
AND ALG_VERDIEPING_VOLGNR = recResRuimte.ALG_VERDIEPING_VOLGNR
AND alg_verdieping_verwijder is null;
v_errorhint := ' Fout bij bepalen ruimte';
SELECT ALG_RUIMTE_KEY
INTO v_ruimte_key
FROM ALG_V_AANWEZIGRUIMTE
WHERE ALG_VERDIEPING_KEY = v_verdieping_key
AND ALG_RUIMTE_UPPER_NR = UPPER(recResRuimte.ALG_RUIMTE_NR);
v_errorhint := ' Fout bij bepalen catalogus ['||recResRuimte.res_discipline_omschrijving||']';
SELECT ins_discipline_key
INTO v_discipline_key
FROM RES_V_RES_CATALOGUS
WHERE ins_discipline_verwijder IS NULL
AND ins_discipline_min_level = 3
AND upper(trim(ins_discipline_omschrijving)) = upper(trim(recResRuimte.res_discipline_omschrijving));
v_errorhint := ' Fout bij bepalen opstelling ['||recResRuimte.RES_OPSTELLING_OMSCHRIJVING||']';
SELECT RES_OPSTELLING_KEY
INTO v_opstelling_key
FROM RES_OPSTELLING
WHERE UPPER(trim(RES_OPSTELLING_OMSCHRIJVING)) = UPPER(trim(recResRuimte.RES_OPSTELLING_OMSCHRIJVING))
AND RES_OPSTELLING_verwijder is null;
v_errorhint := ' Fout bij samenstellen ruimte-omschrijving';
IF (recResRuimte.RES_RUIMTE_NR IS NULL) THEN
v_ruimte_omschrijving := SUBSTR( recResRuimte.ALG_LOCATIE_CODE || '-' || recResRuimte.ALG_GEBOUW_CODE || '-' || TO_CHAR(recResRuimte.ALG_VERDIEPING_VOLGNR) || '-' || recResRuimte.ALG_RUIMTE_NR,1,40);
ELSE
v_ruimte_omschrijving := recResRuimte.RES_RUIMTE_NR;
END IF;
v_errorhint := 'Fout bij bepalen reserveerbare ruimte';
SELECT count(*)
INTO v_count
FROM RES_RUIMTE
WHERE RES_RUIMTE_UPPER = upper(v_ruimte_omschrijving)
AND res_ruimte_verwijder is null;
IF v_count = 0 THEN
v_errorhint := 'Fout bij toevoegen reserveerbare ruimte';
INSERT INTO RES_RUIMTE
(RES_RUIMTE_NR
,RES_RUIMTE_UPPER
,RES_RUIMTE_PRIJS
,RES_RUIMTE_OMSCHRIJVING
,RES_DISCIPLINE_KEY
)
VALUES
(v_ruimte_omschrijving
,upper(v_ruimte_omschrijving)
,recResRuimte.RES_RUIMTE_PRIJS
,recResRuimte.RES_RUIMTE_OMSCHRIJVING
,v_discipline_key
)
RETURNING RES_RUIMTE_KEY
INTO v_res_ruimte_key;
v_errorhint := 'Fout bij koppelen ruimte en reserveerbare ruimte';
insert into RES_ALG_RUIMTE
(RES_RUIMTE_KEY
,ALG_RUIMTE_KEY
)
values
(v_res_ruimte_key
,v_ruimte_key
);
ELSE
SELECT RES_RUIMTE_KEY
INTO v_res_ruimte_key
FROM RES_RUIMTE
WHERE RES_RUIMTE_UPPER = upper(v_ruimte_omschrijving)
AND res_ruimte_verwijder IS NULL;
END IF;
v_errorhint := 'Fout bij koppelen opstelling en reserveerbare ruimte';
insert into RES_RUIMTE_OPSTELLING
(RES_RUIMTE_KEY
,RES_OPSTELLING_KEY
,RES_RUIMTE_OPSTEL_BEZOEKERS
)
values
(v_res_ruimte_key
,v_opstelling_key
,NVL(recResRuimte.RES_RUIMTE_OPSTEL_BEZOEKERS, 0)
);
commit;
v_count_update := v_count_update + 1;
EXCEPTION WHEN OTHERS THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR(SQLERRM, 1, 200);
v_errormsg := 'Reserveerbare ruimte ['||recResRuimte.RES_RUIMTE_OMSCHRIJVING||']';
v_errorhint := v_errorhint||': ' || 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',
'Res. ruimte: verwerkte regels zonder foutmelding: '||to_char(v_count_update),
''
);
fac.imp_writelog (p_import_key,
'S',
'Res. ruimte: verwerkte regels met foutmelding: '||to_char(v_count_tot-v_count_update),
''
);
END IF;
CLOSE cResRuimte;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_mes := SUBSTR (SQLERRM, 1, 150);
v_errormsg := '(ORACLE error ' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
'Fout tijdens importeren van onroerend goed (verdieping en ruimte) ',
''
);
END fac_update_onrgoed2;
/
CREATE OR REPLACE PROCEDURE fac_update_onrgoed2_del (
p_import_key IN NUMBER
) IS
BEGIN
fac.imp_alg_delete_onrgoed(p_import_key,2);
fac_update_onrgoed2(p_import_key);
END fac_update_onrgoed2_del;
/
CREATE OR REPLACE PROCEDURE fac_import_onrgoed2_del (
p_import_key IN NUMBER
) IS
BEGIN
fac_import_onrgoed2(p_import_key);
END fac_import_onrgoed2_del;
/
--// PROCEDURES VOOR FIP imports - PROCEDURES VOOR FIP imports - PROCEDURES VOOR FIP imports - PROCEDURES VOOR FIP imports
--// PROCEDURES VOOR FIP imports - PROCEDURES VOOR FIP imports - PROCEDURES VOOR FIP imports - PROCEDURES VOOR FIP imports
--// PROCEDURES VOOR FIP imports - PROCEDURES VOOR FIP imports - PROCEDURES VOOR FIP imports - PROCEDURES VOOR FIP imports
--// 2. PRS
--//////////////////////////////////////////////////PRS IMPORT STUFF///////////////////////////////////////////
CREATE OR REPLACE PROCEDURE fac_import_organisatie (p_import_key IN NUMBER
)
AS
c_fielddelimitor VARCHAR2 (2) := fac.import_delimiter(p_import_key);
v_newline VARCHAR2 (1000); -- Input line
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER;
v_count NUMBER;
v_ongeldig NUMBER (1);
v_mode NUMBER (1);
v_aanduiding VARCHAR2 (200);
v_all_null BOOLEAN;
v_count_error NUMBER (10);
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
-- De importvelden:
v_bedrijf_naam VARCHAR2 (256);
v_afdeling_naam VARCHAR2 (256);
v_afdeling_naam_parent VARCHAR2 (256);
v_afdeling_omschrijving VARCHAR2 (256);
v_kostenplaats_nr VARCHAR2 (256);
v_externid VARCHAR2 (256);
-- PRS_BEDRIJF
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
-- Eerst opruiming
DELETE FROM fac_imp_organisatie;
COMMIT;
v_count_error := 0;
header_is_valid := 0;
v_count_tot := 0;
v_count_import := 0;
FOR rec1 IN c1
LOOP
BEGIN
v_errormsg := 'Fout FETCH te importeren rij';
v_newline := rec1.fac_imp_file_line;
v_errormsg := 'Fout opvragen te importeren rij';
v_aanduiding := '';
v_ongeldig := 0;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_fielddelimitor, v_bedrijf_naam);
fac.imp_getfield (v_newline, c_fielddelimitor, v_afdeling_naam_parent);
fac.imp_getfield (v_newline, c_fielddelimitor, v_afdeling_naam);
fac.imp_getfield (v_newline, c_fielddelimitor, v_afdeling_omschrijving);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_nr);
fac.imp_getfield (v_newline, c_fielddelimitor, v_externid);
v_aanduiding := v_bedrijf_naam || '|' || v_afdeling_naam || '|' || v_afdeling_omschrijving || '| ';
IF (header_is_valid = 0)
THEN
IF UPPER (v_bedrijf_naam) = 'BEDRIJFSNAAM'
AND UPPER (v_afdeling_naam_parent) = 'AFDELINGSCODEPARENT'
AND UPPER (v_kostenplaats_nr) = 'KOSTENPLAATS'
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
--fac.imp_writelog (p_import_key, 'I', v_aanduiding, '');
-- Controleer alle veldwaarde
v_bedrijf_naam := TRIM (v_bedrijf_naam);
IF LENGTH (v_bedrijf_naam) > 60
THEN
v_bedrijf_naam := SUBSTR (v_bedrijf_naam, 1, 60);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Bedrijf-aanduiding is te lang',
'Aanduiding wordt afgebroken tot [' || v_bedrijf_naam || ']'
);
END IF;
--
v_afdeling_naam := TRIM (v_afdeling_naam);
IF LENGTH (v_afdeling_naam) > 15
THEN
v_afdeling_naam := SUBSTR (v_afdeling_naam, 1, 15);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Afdeling-aanduiding is te lang',
'Aanduiding wordt afgebroken tot [' || v_afdeling_naam || ']'
);
END IF;
--
v_afdeling_naam_parent := TRIM (v_afdeling_naam_parent);
IF LENGTH (v_afdeling_naam_parent) > 15
THEN
v_afdeling_naam_parent := SUBSTR (v_afdeling_naam_parent, 1, 15);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Afdeling-aanduiding is te lang',
'Aanduiding wordt afgebroken tot [' || v_afdeling_naam_parent || ']'
);
END IF;
--
v_afdeling_omschrijving := TRIM (v_afdeling_omschrijving);
IF LENGTH (v_afdeling_omschrijving) > 60
THEN
v_afdeling_omschrijving := SUBSTR (v_afdeling_omschrijving, 1, 60);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Afdelingsomschrijving is te lang',
'Aanduiding wordt afgebroken tot [' || v_afdeling_omschrijving || ']'
);
END IF;
--
v_kostenplaats_nr := TRIM (v_kostenplaats_nr);
IF LENGTH (v_kostenplaats_nr) > 30
THEN
v_kostenplaats_nr := SUBSTR (v_kostenplaats_nr, 1, 30);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Kostenplaats-aanduiding is te lang',
'Aanduiding wordt afgebroken tot [' || v_kostenplaats_nr || ']'
);
END IF;
--
v_externid := TRIM(v_externid);
IF LENGTH (v_externid) > 256
THEN
v_externid := SUBSTR(v_externid, 1, 256);
fac.imp_writelog ( p_import_key,
'W',
v_aanduiding || 'Extern Id is te lang',
'Extern Id wort afgebroken tot [' || v_externid || ']'
);
END IF;
v_all_null :=
(v_bedrijf_naam IS NULL)
AND (v_afdeling_naam IS NULL)
AND (v_afdeling_naam_parent IS NULL)
AND (v_afdeling_omschrijving IS NULL)
AND (v_kostenplaats_nr IS NULL);
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
v_errormsg := 'Fout bij toevoegen te impoteren bedrijf/afdeling [' || v_afdeling_naam || ']';
INSERT INTO fac_imp_organisatie (
prs_bedrijf_naam,
prs_afdeling_naam,
prs_afdeling_naam_parent,
prs_afdeling_omschrijving,
prs_kostenplaats_nr,
prs_afdeling_externid
)
VALUES (
v_bedrijf_naam,
v_afdeling_naam,
v_afdeling_naam_parent,
v_afdeling_omschrijving,
v_kostenplaats_nr,
v_externid
);
v_count_import := v_count_import + 1;
END IF;
END IF;
END;
END LOOP;
IF (header_is_valid = 0)
THEN
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || 'Ongeldig importbestand',
'Geen geldige headerregel aanwezig'
);
ELSE
fac.imp_writelog (p_import_key, 'S', 'Bedrijf: aantal ingelezen regels: ' || TO_CHAR (v_count_tot), '');
fac.imp_writelog (p_import_key,
'S',
'Bedrijf: aantal ongeldige importregels: ' || TO_CHAR (v_count_tot - 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, '');
END fac_import_organisatie;
/
CREATE OR REPLACE PROCEDURE fac_import_organisatie_del (
p_import_key IN NUMBER
) IS
BEGIN
fac_import_organisatie(p_import_key);
END;
/
CREATE OR REPLACE PROCEDURE fac_update_organisatie (
p_import_key IN NUMBER
) IS
c_fielddelimitor VARCHAR2 (2) := fac.import_delimiter(p_import_key);
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
v_count NUMBER(10);
v_ongeldig NUMBER(1);
v_count_update NUMBER(10);
v_count_error NUMBER(10);
v_count_tot NUMBER(10);
--
v_bedrijf_key NUMBER(10);
v_kostenplaats_key NUMBER(10);
v_prs_afdeling_parentkey NUMBER(10);
CURSOR cBedrijf
IS
SELECT min(prs_bedrijf_naam) prs_bedrijf_naam
FROM fac_imp_organisatie
WHERE prs_bedrijf_naam is not null
GROUP BY upper(prs_bedrijf_naam);
recBedrijf cBedrijf%ROWTYPE;
-- Bij 1-op-1 relatie tussen kostenplaats en afdeling de kostenplaatsomschrijving zetten op
-- de afdelingsomschrijving, ander de kostenplaatsomschrijving leeg laten.
CURSOR cKPN
IS
SELECT MIN(prs_kostenplaats_nr) prs_kostenplaats_nr,
DECODE(COUNT(*),1,MAX(prs_afdeling_omschrijving),'') prs_kostenplaats_omschrijving,
'PRS' prs_kostenplaats_module
FROM FAC_IMP_ORGANISATIE
WHERE prs_kostenplaats_nr IS NOT NULL
GROUP BY UPPER(prs_kostenplaats_nr);
recKPN cKpn%ROWTYPE;
CURSOR cAfdeling1
IS
SELECT MIN(prs_bedrijf_naam) prs_bedrijf_naam
,UPPER(prs_bedrijf_naam) prs_bedrijf_naam_upper
,MIN(prs_afdeling_naam) prs_afdeling_naam
,UPPER(prs_afdeling_naam) prs_afdeling_upper
,MAX(prs_afdeling_omschrijving) prs_afdeling_omschrijving
,MIN(prs_afdeling_naam_parent) prs_afdeling_naam_parent
,MIN(UPPER(prs_afdeling_naam_parent)) prs_afdeling_naam_parent_upper
,MAX(prs_kostenplaats_nr) prs_kostenplaats_nr
,MAX(UPPER(prs_kostenplaats_nr)) prs_kostenplaats_upper
,MAX(prs_afdeling_externid) prs_afdeling_externid
,NIVEAU
FROM (SELECT 1 NIVEAU,
a1.prs_bedrijf_naam,
a1.prs_afdeling_naam,
a1.prs_afdeling_omschrijving,
a1.prs_kostenplaats_nr,
'' PRS_AFDELING_NAAM_PARENT,
a1.prs_afdeling_externid
FROM FAC_IMP_ORGANISATIE a1
WHERE a1.prs_afdeling_naam_parent IS NULL
UNION ALL
SELECT 2,
a2.prs_bedrijf_naam,
a2.prs_afdeling_naam,
a2.prs_afdeling_omschrijving,
a2.prs_kostenplaats_nr,
a1.prs_afdeling_naam,
a2.prs_afdeling_externid
FROM FAC_IMP_ORGANISATIE a1, FAC_IMP_ORGANISATIE a2
WHERE a2.prs_afdeling_naam_parent = a1.prs_afdeling_naam
AND a1.prs_afdeling_naam_parent IS NULL
UNION ALL
SELECT 3,
a3.prs_bedrijf_naam,
a3.prs_afdeling_naam,
a3.prs_afdeling_omschrijving,
a3.prs_kostenplaats_nr,
a2.prs_afdeling_naam,
a3.prs_afdeling_externid
FROM FAC_IMP_ORGANISATIE a1, FAC_IMP_ORGANISATIE a2, FAC_IMP_ORGANISATIE a3
WHERE a3.prs_afdeling_naam_parent = a2.prs_afdeling_naam
AND a2.prs_afdeling_naam_parent = a1.prs_afdeling_naam
AND a1.prs_afdeling_naam_parent IS NULL
UNION ALL
SELECT 4,
a4.prs_bedrijf_naam,
a4.prs_afdeling_naam,
a4.prs_afdeling_omschrijving,
a4.prs_kostenplaats_nr,
a3.prs_afdeling_naam,
a4.prs_afdeling_externid
FROM FAC_IMP_ORGANISATIE a1, FAC_IMP_ORGANISATIE a2, FAC_IMP_ORGANISATIE a3, FAC_IMP_ORGANISATIE a4
WHERE a4.prs_afdeling_naam_parent = a3.prs_afdeling_naam
AND a3.prs_afdeling_naam_parent = a2.prs_afdeling_naam
AND a2.prs_afdeling_naam_parent = a1.prs_afdeling_naam
AND a1.prs_afdeling_naam_parent IS NULL
UNION ALL
SELECT 5,
a5.prs_bedrijf_naam,
a5.prs_afdeling_naam,
a5.prs_afdeling_omschrijving,
a5.prs_kostenplaats_nr,
a4.prs_afdeling_naam,
a5.prs_afdeling_externid
FROM FAC_IMP_ORGANISATIE a1, FAC_IMP_ORGANISATIE a2, FAC_IMP_ORGANISATIE a3, FAC_IMP_ORGANISATIE a4, FAC_IMP_ORGANISATIE a5
WHERE a5.prs_afdeling_naam_parent = a4.prs_afdeling_naam
AND a4.prs_afdeling_naam_parent = a3.prs_afdeling_naam
AND a3.prs_afdeling_naam_parent = a2.prs_afdeling_naam
AND a2.prs_afdeling_naam_parent = a1.prs_afdeling_naam
AND a1.prs_afdeling_naam_parent IS NULL)
WHERE ((prs_bedrijf_naam IS NOT NULL) AND (prs_afdeling_naam IS NOT NULL)) -- geen lege regels
GROUP BY UPPER(prs_bedrijf_naam), UPPER(prs_afdeling_naam), NIVEAU
ORDER BY NIVEAU;
recAfdeling1 cAfdeling1%ROWTYPE;
BEGIN
OPEN cBedrijf;
v_count_update := 0;
v_count_tot := 0;
v_count_error := 0;
IF cBedrijf%ISOPEN THEN
LOOP
BEGIN
FETCH cBedrijf INTO recBedrijf;
EXIT WHEN cBedrijf%NOTFOUND;
v_count_tot := v_count_tot + 1;
v_aanduiding := recBedrijf.PRS_BEDRIJF_NAAM||'| ';
v_errormsg := '';
v_errorhint := '';
v_errorhint := 'Kijken of bedrijf al bestaat';
SELECT count(*)
INTO v_count
FROM prs_bedrijf
WHERE upper(prs_bedrijf_naam_upper) = upper(recBedrijf.prs_bedrijf_naam)
AND prs_bedrijf_verwijder is null;
IF (v_count = 0) THEN
v_errorhint := 'Fout bij toevoegen bedrijf';
INSERT INTO PRS_BEDRIJF (
prs_bedrijf_naam
,prs_bedrijf_intern
) VALUES (
recBedrijf.prs_bedrijf_naam
,1
);
commit;
v_count_update := v_count_update + 1;
END IF;
EXCEPTION WHEN OTHERS THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR(SQLERRM, 1, 200);
IF (v_errormsg IS NULL) THEN
v_errormsg := 'Fout tijdens verwerken van bedrijf ['||recBedrijf.PRS_BEDRIJF_NAAM||']';
END IF;
v_errorhint := v_errorhint||': ' || oracle_err_mes;
fac.imp_writelog (p_import_key,
'E',
v_aanduiding||v_errormsg,
v_errorhint
);
commit; -- tbv logging
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'Bedrijf: verwerkte regels zonder foutmelding: '||to_char(v_count_tot-v_count_error),
''
);
fac.imp_writelog (p_import_key,
'S',
'Bedrijf: verwerkte regels met foutmelding: '||to_char(v_count_error),
''
);
END IF;
OPEN cKPN;
v_count_update := 0;
v_count_tot := 0;
v_count_error := 0;
IF cKPN%ISOPEN THEN
LOOP
BEGIN
v_aanduiding := recKPN.PRS_KOSTENPLAATS_NR||'| ';
v_errormsg := '';
v_errorhint := '';
FETCH cKPN INTO recKPN;
EXIT WHEN cKPN%NOTFOUND;
v_count_tot := v_count_tot + 1;
v_aanduiding := recBedrijf.PRS_BEDRIJF_NAAM||'| ';
v_errormsg := '';
v_errorhint := '';
v_errorhint := 'Kijken of de kostenplaats al bestaat';
SELECT count(*)
INTO v_count
FROM prs_kostenplaats
WHERE prs_kostenplaats_verwijder is null
AND upper(prs_kostenplaats_upper) = upper(recKPN.prs_kostenplaats_nr);
IF (v_count = 0) THEN
v_errorhint := 'Fout bij toevoegen kostenplaats';
INSERT INTO PRS_KOSTENPLAATS
(PRS_KOSTENPLAATS_NR
,PRS_KOSTENPLAATS_OMSCHRIJVING
,PRS_KOSTENPLAATS_MODULE)
VALUES
(recKPN.prs_kostenplaats_nr
,recKPN.prs_kostenplaats_omschrijving
,recKPN.prs_kostenplaats_module);
commit;
v_count_update := v_count_update + 1;
END IF;
EXCEPTION WHEN OTHERS THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR(SQLERRM, 1, 200);
IF (v_errormsg IS NULL) THEN
v_errormsg := 'Fout tijdens verwerken van kostenplaats ['||recKPN.PRS_KOSTENPLAATS_NR||']';
END IF;
v_errorhint := v_errorhint||': ' || oracle_err_mes;
fac.imp_writelog (p_import_key,
'E',
v_aanduiding||v_errormsg,
v_errorhint
);
commit; -- tbv logging
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'Kostenplaats: verwerkte regels zonder foutmelding: '||to_char(v_count_tot-v_count_error),
''
);
fac.imp_writelog (p_import_key,
'S',
'Kostenplaats: verwerkte regels met foutmelding: '||to_char(v_count_error),
''
);
END IF;
OPEN cAfdeling1;
v_count_update := 0;
v_count_tot := 0;
v_count_error := 0;
IF cAfdeling1%ISOPEN THEN
LOOP
BEGIN
FETCH cAfdeling1 INTO recAfdeling1;
EXIT WHEN cAfdeling1%NOTFOUND;
v_count_tot := v_count_tot + 1;
v_aanduiding := recAfdeling1.prs_bedrijf_naam||'|'||recAfdeling1.prs_afdeling_naam||'|'||recAfdeling1.prs_afdeling_naam_parent ||'| ';
v_errormsg := '';
v_errorhint := '';
IF (recAfdeling1.niveau = 1) THEN
v_errorhint := 'Bedrijf niet gevonden bij afdeling';
v_prs_afdeling_parentkey := to_number(NULL);
SELECT prs_bedrijf_key
INTO v_bedrijf_key
FROM prs_bedrijf
WHERE prs_bedrijf_verwijder IS NULL
AND prs_bedrijf_naam_upper = recAfdeling1.prs_bedrijf_naam_upper;
ELSE
v_errorhint := 'Parent van de afdeling niet gevonden';
v_bedrijf_key := to_number(NULL);
SELECT prs_afdeling_key
INTO v_prs_afdeling_parentkey
FROM prs_afdeling
WHERE prs_afdeling_verwijder IS NULL
AND prs_afdeling_upper = recAfdeling1.prs_afdeling_naam_parent_upper;
END IF;
v_errorhint := 'Bepalen of afdeling bestaat';
SELECT count(*)
INTO v_count
FROM prs_afdeling
WHERE upper(rtrim(prs_afdeling_omschrijving)) = upper(rtrim(recAfdeling1.prs_afdeling_omschrijving))
AND prs_afdeling_verwijder is null;
v_errorhint := 'Kostenplaats bij afdeling bepalen';
SELECT COUNT(*), NVL(MAX(prs_kostenplaats_key),to_number(NULL))
INTO v_count, v_kostenplaats_key
FROM PRS_KOSTENPLAATS
WHERE prs_kostenplaats_verwijder IS NULL
AND prs_kostenplaats_upper = UPPER(trim(recAfdeling1.prs_kostenplaats_upper))
AND UPPER(prs_kostenplaats_module) = 'PRS';
v_errorhint := 'Kostenplaats bij afdeling bepalen';
SELECT COUNT(*)
INTO v_count
FROM PRS_AFDELING
WHERE prs_afdeling_verwijder IS NULL
AND prs_afdeling_upper = UPPER(trim(recAfdeling1.prs_afdeling_upper));
v_errorhint := 'Fout bij toevoegen afdeling';
IF (v_count = 0)
THEN
INSERT INTO prs_afdeling
( prs_afdeling_naam
, prs_afdeling_omschrijving
, prs_bedrijf_key
, prs_afdeling_parentkey
, prs_kostenplaats_key
, prs_afdeling_externid
) VALUES
( recAfdeling1.prs_afdeling_naam
, recAfdeling1.prs_afdeling_omschrijving
, v_bedrijf_key
, v_prs_afdeling_parentkey
, v_kostenplaats_key
, recAfdeling1.prs_afdeling_externid
);
COMMIT;
v_count_update := v_count_update + 1;
END IF;
EXCEPTION WHEN OTHERS THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR(SQLERRM, 1, 200);
IF (v_errormsg IS NULL) THEN
v_errormsg := 'Fout tijdens verwerken van afdeling ['||recAfdeling1.PRS_AFDELING_NAAM||']';
END IF;
v_errorhint := v_errorhint||': ' || oracle_err_mes;
fac.imp_writelog (p_import_key,
'E',
v_aanduiding||v_errormsg,
v_errorhint
);
commit; -- tbv logging
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'Afdeling: verwerkte regels zonder foutmelding: '||to_char(v_count_tot-v_count_error),
''
);
fac.imp_writelog (p_import_key,
'S',
'Afdeling: verwerkte regels met foutmelding: '||to_char(v_count_error),
''
);
END IF;
CLOSE cAfdeling1;
END fac_update_organisatie;
/
CREATE OR REPLACE PROCEDURE fac_update_organisatie_del (
p_import_key IN NUMBER
) IS
BEGIN
fac.imp_prs_delete_organisatie(p_import_key,1);
fac_update_organisatie(p_import_key);
END;
/
-- FIP routine voor kostenplaatsen. Indien een niet verwijderde kostenplaats met hetzelfde
-- nummer gevonden kan worden dan zal deze aangepast worden. Anders wordt een nieuwe kostenplaats
-- aangemaakt.
CREATE OR REPLACE PROCEDURE fac_import_kpn (p_import_key IN NUMBER)
AS
c_fielddelimitor VARCHAR2 (2) := fac.import_delimiter(p_import_key);
v_newline VARCHAR2 (1000); -- Input line
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER;
v_count NUMBER;
v_ongeldig NUMBER (1);
v_mode NUMBER (1);
v_aanduiding VARCHAR2 (200);
v_all_null BOOLEAN;
v_count_error NUMBER (10);
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
-- De importvelden:
v_kostenplaats_nr VARCHAR2 (255);
v_kostenplaats_omschrijving VARCHAR2 (255);
v_kostenplaats_module VARCHAR2 (255);
v_kostenplaats_begin VARCHAR2 (255);
v_kostenplaats_begin_d DATE;
v_kostenplaats_eind VARCHAR2 (255);
v_kostenplaats_eind_d DATE;
v_kostenplaatsgrp_oms VARCHAR2 (255);
v_kostenplaatsgrp_key NUMBER;
v_perslid VARCHAR2 (255);
v_perslid_key NUMBER (10);
v_kostenplaats_limiet VARCHAR2 (255);
v_kostenplaats_limietperiode VARCHAR2 (255);
v_kostenplaats_extern VARCHAR2 (255);
v_kostenplaats_fiat VARCHAR2 (255);
CURSOR c
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
-- Eerst opruiming
DELETE FROM fac_imp_kpn;
COMMIT;
v_count_error := 0;
header_is_valid := 0;
v_count_tot := 0;
v_count_import := 0;
FOR rec IN c
LOOP
BEGIN
v_errormsg := 'Fout FETCH te importeren rij';
v_newline := rec.fac_imp_file_line;
v_errormsg := 'Fout opvragen te importeren rij';
v_aanduiding := '';
v_ongeldig := 0;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_nr);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_omschrijving);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_module);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_begin);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_eind);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaatsgrp_oms);
fac.imp_getfield (v_newline, c_fielddelimitor, v_perslid);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_limiet);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_limietperiode);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_extern);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_fiat);
v_aanduiding := v_kostenplaats_nr || '|' || v_kostenplaats_omschrijving;
IF v_kostenplaats_nr IS NOT NULL
THEN
IF (header_is_valid = 0)
THEN
IF UPPER (v_kostenplaats_nr) = 'KOSTENPLAATS'
AND UPPER (v_perslid) = 'BUDGETHOUDER'
AND UPPER (v_kostenplaats_fiat) = 'OPDRACHTENFIATTEREN'
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
--fac.imp_writelog (p_import_key, 'I', v_aanduiding, '');
-- Controleer alle veldwaarde
v_kostenplaats_nr := TRIM (v_kostenplaats_nr);
IF LENGTH (v_kostenplaats_nr) > 30
THEN
v_kostenplaats_nr := SUBSTR (v_kostenplaats_nr, 1, 30);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Kostenplaatsnummer is te lang',
'Kostenplaatsnummer wordt afgebroken tot [' || v_kostenplaats_nr || ']');
END IF;
--
v_kostenplaats_omschrijving := TRIM (v_kostenplaats_omschrijving);
IF LENGTH (v_kostenplaats_omschrijving) > 60
THEN
v_kostenplaats_omschrijving := SUBSTR (v_kostenplaats_omschrijving, 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Kostenpaatsomschrijving is te lang',
'Kostenpaatsomschrijving wordt afgebroken tot ['
|| v_kostenplaats_omschrijving
|| ']');
END IF;
--
v_kostenplaats_module := UPPER (TRIM (v_kostenplaats_module));
IF v_kostenplaats_module NOT IN ('ALG', 'PRS', 'PRJ')
THEN
v_kostenplaats_module := 'PRS';
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || 'Ongelding kostenplaatstype',
'Kostenplaatstype wordt aangepast naar [' || v_kostenplaats_module || ']');
END IF;
--
v_kostenplaats_begin := TRIM (v_kostenplaats_begin);
v_kostenplaats_begin_d := fac.safe_to_date (v_kostenplaats_begin, 'dd-mm-yyyy');
IF v_kostenplaats_begin IS NOT NULL AND v_kostenplaats_begin_d IS NULL
THEN
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || 'Kostenplaatsbegin is ongeldig',
'Kostenplaatsbegin wordt leeg gemaakt');
END IF;
--
v_kostenplaats_eind := TRIM (v_kostenplaats_eind);
v_kostenplaats_eind_d := fac.safe_to_date (v_kostenplaats_eind, 'dd-mm-yyyy');
IF v_kostenplaats_eind IS NOT NULL AND v_kostenplaats_eind_d IS NULL
THEN
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || 'Kostenplaatseind is ongeldig',
'Kostenplaatseind wordt leeg gemaakt');
END IF;
--
v_kostenplaatsgrp_oms := TRIM (v_kostenplaatsgrp_oms);
IF v_kostenplaatsgrp_oms IS NOT NULL
THEN
BEGIN
SELECT prs_kostenplaatsgrp_key
INTO v_kostenplaatsgrp_key
FROM prs_kostenplaatsgrp
WHERE UPPER (prs_kostenplaatsgrp_oms) = UPPER (v_kostenplaatsgrp_oms);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_kostenplaatsgrp_key := NULL;
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || 'Kostenplaatsgroep-aanduiding kan niet gevonden worden',
'Kostenplaatsgroep wordt leeg gemaakt [' || v_kostenplaatsgrp_oms || ']');
END;
ELSE
v_kostenplaatsgrp_key := NULL;
END IF;
--
v_perslid := TRIM (v_perslid);
IF v_perslid IS NOT NULL
THEN
BEGIN
SELECT prs_perslid_key
INTO v_perslid_key
FROM prs_perslid
WHERE prs_perslid_oslogin = UPPER (v_perslid)
OR prs_perslid_oslogin = UPPER (v_perslid);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_perslid_key := NULL;
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || 'Budgethouder-aanduiding kan niet gevonden worden',
'Budgethouder wordt leeg gemaakt [' || v_perslid || ']');
END;
ELSE
v_perslid_key := NULL;
END IF;
v_kostenplaats_limiet := TRIM (v_kostenplaats_limiet);
v_kostenplaats_limietperiode := UPPER (TRIM (v_kostenplaats_limietperiode));
IF v_kostenplaats_limietperiode IS NOT NULL
AND v_kostenplaats_limietperiode NOT IN ('J', 'M')
THEN
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || 'Budgetperiode-aanduiding kan niet gevonden worden',
'Budgetperiode wordt leeg gemaakt [' || v_kostenplaats_limietperiode || ']');
END IF;
v_kostenplaats_extern := TRIM (v_kostenplaats_extern);
IF v_kostenplaats_extern IS NOT NULL AND v_kostenplaats_extern NOT IN ('0', '1')
THEN
v_kostenplaats_extern := NULL;
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || 'Kostenplaats extern-aanduiding kan niet gevonden worden',
'Kostenplaats_extern-aanduiding wordt leeg gemaakt');
END IF;
v_kostenplaats_fiat := TRIM (v_kostenplaats_fiat);
IF v_kostenplaats_fiat IS NOT NULL AND v_kostenplaats_fiat NOT IN ('0', '1')
THEN
v_kostenplaats_fiat := NULL;
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || 'Opdrachtfiatteren-aanduiding kan niet gevonden worden',
'Opdrachtfiatteren-aanduiding wordt leeg gemaakt');
END IF;
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
v_errormsg :=
'Fout bij toevoegen te impoteren kostenplaats [' || v_aanduiding || ']';
INSERT INTO fac_imp_kpn (prs_kostenplaats_nr,
prs_kostenplaats_omschrijving,
prs_kostenplaats_module,
prs_kostenplaats_begin,
prs_kostenplaats_eind,
prs_kostenplaatsgrp_key,
prs_perslid_key,
prs_kostenplaats_limiet,
prs_kostenplaats_limietperiode,
prs_kostenplaats_extern,
prs_kostenplaats_fiat)
VALUES (v_kostenplaats_nr,
v_kostenplaats_omschrijving,
v_kostenplaats_module,
v_kostenplaats_begin_d,
v_kostenplaats_eind_d,
v_kostenplaatsgrp_key,
v_perslid_key,
fac.safe_to_number (v_kostenplaats_limiet),
DECODE (v_kostenplaats_limietperiode, 'M', 1, 'J', 2, 0),
fac.safe_to_number (v_kostenplaats_extern),
fac.safe_to_number (v_kostenplaats_fiat));
v_count_import := v_count_import + 1;
END IF;
END IF;
END IF;
END;
END LOOP;
IF (header_is_valid = 0)
THEN
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || 'Ongeldig importbestand',
'Geen geldige headerregel aanwezig');
ELSE
fac.imp_writelog (p_import_key,
'S',
'Kostenplaats: aantal ingelezen regels: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (
p_import_key,
'S',
'Kostenplaats: aantal ongeldige importregels: ' || TO_CHAR (v_count_tot - 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,
'');
END fac_import_kpn;
/
CREATE OR REPLACE PROCEDURE fac_update_kpn (p_import_key IN NUMBER)
AS
CURSOR c
IS
SELECT * FROM fac_imp_kpn;
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count NUMBER;
v_ongeldig NUMBER (1);
v_aanduiding VARCHAR2 (200);
v_kostenplaats_key prs_kostenplaats.prs_kostenplaats_key%TYPE;
BEGIN
FOR rec IN c
LOOP
BEGIN
BEGIN
v_aanduiding := rec.prs_kostenplaats_nr || '|' || rec.prs_kostenplaats_omschrijving;
v_errorhint := 'Opzoeken kostenplaats';
SELECT prs_kostenplaats_key
INTO v_kostenplaats_key
FROM prs_kostenplaats
WHERE prs_kostenplaats_verwijder IS NULL
AND prs_kostenplaats_upper = UPPER (rec.prs_kostenplaats_nr);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_errorhint := 'Toevoegen kostenplaats';
INSERT INTO prs_kostenplaats (prs_kostenplaats_nr,
prs_kostenplaats_module,
prs_kostenplaats_omschrijving)
VALUES (rec.prs_kostenplaats_nr,
rec.prs_kostenplaats_module,
rec.prs_kostenplaats_omschrijving)
RETURNING prs_kostenplaats_key
INTO v_kostenplaats_key;
END;
-- We hebben nu een kostenplaats record aangemaakt of gevonden.
-- Dan gaan we deze nu updaten.
v_errorhint := 'Aanpassen kostenplaats';
UPDATE prs_kostenplaats k
SET prs_kostenplaats_omschrijving = rec.prs_kostenplaats_omschrijving,
prs_kostenplaats_module = rec.prs_kostenplaats_module,
prs_kostenplaats_begin = rec.prs_kostenplaats_begin,
prs_kostenplaats_eind = rec.prs_kostenplaats_eind,
prs_kostenplaatsgrp_key = rec.prs_kostenplaatsgrp_key,
prs_perslid_key = rec.prs_perslid_key,
prs_kostenplaats_limiet = rec.prs_kostenplaats_limiet,
prs_kostenplaats_limietperiode = rec.prs_kostenplaats_limietperiode,
prs_kostenplaats_extern =
COALESCE (rec.prs_kostenplaats_extern, prs_kostenplaats_extern),
prs_kostenplaats_fiat = COALESCE (rec.prs_kostenplaats_fiat, prs_kostenplaats_fiat)
WHERE k.prs_kostenplaats_key = v_kostenplaats_key;
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 || ' | ' || v_aanduiding);
END;
END LOOP;
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 || ' | ' || v_aanduiding);
END fac_update_kpn;
/
-- FIP routine voor kostensoorten. Indien een niet verwijderde kostensoort met dezelfde
-- omschrijving (GUI:code) gevonden kan worden dan zal deze aangepast worden. Anders wordt een nieuwe kostensoort
-- aangemaakt.
CREATE OR REPLACE PROCEDURE fac_import_kostensoort (p_import_key IN NUMBER)
AS
c_fielddelimitor VARCHAR2 (2) := fac.import_delimiter(p_import_key);
v_newline VARCHAR2 (1000); -- Input line
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER;
v_count NUMBER;
v_ongeldig NUMBER (1);
v_mode NUMBER (1);
v_aanduiding VARCHAR2 (200);
v_all_null BOOLEAN;
v_count_error NUMBER (10);
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
-- De importvelden:
v_kostensoort_oms VARCHAR2 (255); -- VARCHAR2 (60), code
v_kostensoort_opmerking VARCHAR2 (255); -- VARCHAR2 (255), omschrijving
v_kostensoort_refcode VARCHAR2 (255); -- VARCHAR2 (60), financiele waarde
v_kostensoort_doorbelasten VARCHAR2 (255); -- NUMBER (1), 1=Ja
v_kostensoort_btw VARCHAR2 (255); -- NUMBER (1),
v_kostenplaats_nr VARCHAR2 (255);
v_kostenplaats_key NUMBER (10); -- leverende kostenplaats
v_kostensoortgrp_oms VARCHAR2 (255);
v_kostensoortgrp_key NUMBER (10); -- bestaande kostenplaatsgrp
v_kostensoort_altcode VARCHAR2 (255); -- VARCHAR2 (60), alternatieve code
v_kostensoort_eind_txt VARCHAR2 (255);
v_kostensoort_eind DATE;
CURSOR c
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
-- Eerst opruiming
DELETE FROM fac_imp_kpn;
COMMIT;
v_count_error := 0;
header_is_valid := 0;
v_count_tot := 0;
v_count_import := 0;
FOR rec IN c
LOOP
BEGIN
v_errormsg := 'Fout FETCH te importeren rij';
v_newline := rec.fac_imp_file_line;
v_errormsg := 'Fout opvragen te importeren rij';
v_aanduiding := '';
v_ongeldig := 0;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostensoortgrp_oms);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostensoort_oms);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostensoort_opmerking);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostensoort_altcode);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostensoort_refcode);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostensoort_doorbelasten);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostensoort_btw);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostenplaats_nr); -- leverende kostenplaats
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostensoort_eind_txt);
v_aanduiding := v_kostensoort_oms || '|' || v_kostensoort_opmerking;
IF v_kostensoort_oms IS NOT NULL
THEN
IF (header_is_valid = 0)
THEN
IF UPPER (v_kostensoort_oms) = 'KOSTENSOORTCODE'
AND UPPER (v_kostensoort_refcode) = 'FINANCIELEWAARDE'
AND UPPER (v_kostenplaats_nr) = 'LEVERENDEKOSTENPLAATS'
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
--fac.imp_writelog (p_import_key, 'I', v_aanduiding, '');
-- Controleer alle veldwaarde
v_kostensoortgrp_oms := TRIM (v_kostensoortgrp_oms);
BEGIN
SELECT prs_kostensoortgrp_key
INTO v_kostensoortgrp_key
FROM prs_kostensoortgrp
WHERE UPPER (prs_kostensoortgrp_oms) = UPPER (v_kostensoortgrp_oms);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_kostensoortgrp_key := NULL;
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || 'Kostensoortgroep-aanduiding kan niet gevonden worden',
'Kostensoortgroep wordt leeg gemaakt [' || v_kostensoortgrp_oms || ']');
v_ongeldig := 1;
END;
v_kostensoort_oms := TRIM (v_kostensoort_oms);
IF LENGTH (v_kostensoort_oms) > 60
THEN
v_kostensoort_oms := SUBSTR (v_kostensoort_oms, 1, 60);
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || 'Kostensoortcode is te lang',
'Kostensoortcode wordt afgebroken tot [' || v_kostensoort_oms || ']');
v_ongeldig := 1;
END IF;
--
v_kostensoort_opmerking := TRIM (v_kostensoort_opmerking);
IF LENGTH (v_kostensoort_opmerking) > 255
THEN
v_kostensoort_opmerking := SUBSTR (v_kostensoort_opmerking, 1, 255);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Kostensoortomschrijving is te lang',
'Kostensoortomschrijving wordt afgebroken tot ['
|| v_kostensoort_opmerking
|| ']');
END IF;
--
v_kostensoort_altcode := UPPER (TRIM (v_kostensoort_altcode));
IF LENGTH(v_kostensoort_altcode) > 60
THEN
v_kostensoort_altcode := SUBSTR (v_kostensoort_altcode, 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Kostensoort alternatieve code is te lang',
'Kostensoort alternatieve code wordt afgebroken tot ['
|| v_kostensoort_altcode
|| ']');
END IF;
--
v_kostensoort_refcode := UPPER (TRIM (v_kostensoort_refcode));
IF LENGTH(v_kostensoort_refcode) > 60
THEN
v_kostensoort_refcode := SUBSTR (v_kostensoort_refcode, 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Kostensoort financiele waarde is te lang',
'Kostensoort financiele waarde wordt afgebroken tot ['
|| v_kostensoort_refcode
|| ']');
END IF;
--
v_kostensoort_doorbelasten := UPPER (TRIM (v_kostensoort_doorbelasten));
IF UPPER(v_kostensoort_doorbelasten) NOT IN ('J', 'N')
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Ongeldige doorbelastingsindicatie',
'Doorbelastingsindicatie ['
|| v_kostensoort_doorbelasten
|| ']');
END IF;
--
v_kostensoort_btw := UPPER (TRIM (v_kostensoort_btw));
IF UPPER(v_kostensoort_btw) NOT IN ('J', 'N')
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Ongeldige BTW indicatie',
'BTW indicatie ['
|| v_kostensoort_btw
|| ']');
END IF;
v_kostenplaats_nr := TRIM (v_kostenplaats_nr);
IF v_kostenplaats_nr IS NOT NULL
THEN
BEGIN
SELECT prs_kostenplaats_key
INTO v_kostenplaats_key
FROM prs_kostenplaats
WHERE prs_kostenplaats_verwijder IS NULL
AND UPPER (prs_kostenplaats_nr) = UPPER (v_kostenplaats_nr);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_kostenplaats_key := NULL;
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || 'Leverende kostenplaats kan niet gevonden worden',
'Kostenplaats wordt leeg gemaakt [' || v_kostenplaats_nr || ']');
v_ongeldig := 1;
END;
END IF;
--
v_kostensoort_eind_txt := TRIM (v_kostensoort_eind_txt);
v_kostensoort_eind := fac.safe_to_date (v_kostensoort_eind_txt, 'dd-mm-yyyy');
IF v_kostensoort_eind_txt IS NOT NULL AND v_kostensoort_eind IS NULL
THEN
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || 'Kostensoorteind is ongeldig',
'Kostensoorteind wordt leeg gemaakt');
END IF;
-- Insert geformatteerde import record
dbms_output.put_line ('v_ongeldig:' || v_ongeldig);
IF v_ongeldig = 0
THEN
v_errormsg :=
'Fout bij toevoegen te impoteren kostensoort [' || v_aanduiding || ']';
INSERT INTO fac_imp_kostensoort (prs_kostensoort_oms,
prs_kostensoort_opmerking,
prs_kostensoort_refcode,
prs_kostensoort_doorbelasten,
prs_kostensoort_btw,
prs_kostenplaats_key,
prs_kostensoortgrp_key,
prs_kostensoort_eind,
prs_kostensoort_altcode
)
VALUES (v_kostensoort_oms,
v_kostensoort_opmerking,
v_kostensoort_refcode,
DECODE(v_kostensoort_doorbelasten, 'J', 1, 0),
DECODE(v_kostensoort_btw, 'J', 1, 0),
v_kostenplaats_key,
v_kostensoortgrp_key,
v_kostensoort_eind,
v_kostensoort_altcode
);
v_count_import := v_count_import + 1;
END IF;
END IF;
END IF;
END;
END LOOP;
IF (header_is_valid = 0)
THEN
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || 'Ongeldig importbestand',
'Geen geldige headerregel aanwezig');
ELSE
fac.imp_writelog (p_import_key,
'S',
'Kostensoort: aantal ingelezen regels: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (
p_import_key,
'S',
'Kostensoort: aantal ongeldige importregels: ' || TO_CHAR (v_count_tot - 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,
'');
END fac_import_kostensoort;
/
CREATE OR REPLACE PROCEDURE fac_update_kostensoort (p_import_key IN NUMBER)
AS
CURSOR c
IS
SELECT * FROM fac_imp_kostensoort;
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count NUMBER;
v_ongeldig NUMBER (1);
v_aanduiding VARCHAR2 (200);
v_kostensoort_key prs_kostensoort.prs_kostensoort_key%TYPE;
BEGIN
FOR rec IN c
LOOP
BEGIN
BEGIN
v_aanduiding := rec.prs_kostensoort_oms || '|' || rec.prs_kostensoort_opmerking;
v_errorhint := 'Opzoeken kostensoort';
SELECT prs_kostensoort_key
INTO v_kostensoort_key
FROM prs_kostensoort
WHERE 1=1 -- prs_kostensoort_verwijder IS NULL
AND prs_kostensoort_upper = UPPER (rec.prs_kostensoort_oms);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_errorhint := 'Toevoegen kostensoort';
INSERT INTO prs_kostensoort (prs_kostensoort_oms,
prs_kostensoort_opmerking,
prs_kostensoortgrp_key)
VALUES (rec.prs_kostensoort_oms,
rec.prs_kostensoort_opmerking,
rec.prs_kostensoortgrp_key)
RETURNING prs_kostensoort_key
INTO v_kostensoort_key;
END;
-- We hebben nu een kostensoort record aangemaakt of gevonden.
-- Dan gaan we deze nu updaten.
v_errorhint := 'Aanpassen kostensoort';
UPDATE prs_kostensoort k
SET prs_kostensoort_opmerking = rec.prs_kostensoort_opmerking,
prs_kostensoort_altcode = rec.prs_kostensoort_altcode,
prs_kostensoort_refcode = rec.prs_kostensoort_refcode,
prs_kostensoort_eind = rec.prs_kostensoort_eind,
prs_kostensoortgrp_key = rec.prs_kostensoortgrp_key,
prs_kostensoort_doorbelasten = rec.prs_kostensoort_doorbelasten,
prs_kostensoort_btw = rec.prs_kostensoort_btw
WHERE k.prs_kostensoort_key = v_kostensoort_key;
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 || ' | ' || v_aanduiding);
END;
END LOOP;
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 || ' | ' || v_aanduiding);
END fac_update_kostensoort;
/
CREATE OR REPLACE PROCEDURE fac_import_perslid (p_import_key IN NUMBER
)
AS
v_seq_of_columns VARCHAR(255);
BEGIN
v_seq_of_columns := '1;2;3;4;5;6;7;8;9;11;10;0;0;0;0;13;14;15;0;17;16;18;19;12;0;20;27;28;29;30;31;32;33;34;35;36;37;38;39;40;41;42;43;44;45;46;47';
prs.import_perslid(p_import_key, v_seq_of_columns, 'Locatiecode;Gebouwcode;Bouwlaagvolgnummer;Ruimtenummer;Werkplekvolgnummer;Omschrijving;Afdelingscode;PersoonAchternaam;Tussenvoegsel;Voorletters;Voornaam;TitelAanhef;Telefoonnummer;Mobiel;Email;Functie;Personeelsnummer;Loginnaam;Password;Kostenplaatsnr%');
END;
/
CREATE OR REPLACE PROCEDURE fac_update_perslid (
p_import_key IN NUMBER
) IS
BEGIN
prs.update_perslid (p_import_key, 'NR', 'A', 1);
END fac_update_perslid;
/
CREATE OR REPLACE PROCEDURE fac_update_perslid_del (
p_import_key IN NUMBER
) IS
BEGIN
fac.imp_prs_delete_organisatie(p_import_key,2);
fac_update_perslid(p_import_key);
END;
/
CREATE OR REPLACE PROCEDURE fac_import_contactpersoon (p_import_key IN NUMBER)
IS
c_delim VARCHAR2 (2) := fac.import_delimiter(p_import_key);
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- 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_tot NUMBER (10);
v_count_import NUMBER (10);
v_ongeldig NUMBER (1);
v_aanduiding VARCHAR (400);
-- De importvelden
v_prs_bedrijf_naam VARCHAR2 (255); -- C60
v_prs_leverancier_nr VARCHAR2 (255); -- C50
v_prs_perslid_matchcode VARCHAR2 (4000); -- N1
v_prs_perslid_matchwaarde VARCHAR2 (4000);
v_prs_contactpersoon_naam VARCHAR2 (255); -- C30
v_prs_contactpersoon_tussenv VARCHAR2 (255); -- C15
v_prs_contactpersoon_voorletters VARCHAR2 (255); -- C10
v_prs_contactpersoon_voornaam VARCHAR2 (255); -- C30
v_prs_contactpersoon_aanhef VARCHAR2 (255); -- C30
v_prs_contactpersoon_titel VARCHAR2 (255); -- C10
v_prs_contactpersoon_telefoon_1 VARCHAR2 (255); -- C30
v_prs_contactpersoon_telefoon_2 VARCHAR2 (255); -- C30
v_prs_contactpersoon_email VARCHAR2 (255); -- C200
v_prs_contactpersoon_functie VARCHAR2 (255); -- C60
v_prs_contactpersoon_opmerking VARCHAR2 (255); -- C255
v_alg_locatie_code VARCHAR2 (255); -- C10
v_matchkolom VARCHAR2 (255);
sql_stmt VARCHAR2 (1000);
l_cursor_1 INTEGER;
l_rowsprocessed NUMBER DEFAULT 0;
pcount NUMBER;
v_prs_bedrijf_key NUMBER;
v_prs_perslid_key NUMBER;
v_alg_locatie_key NUMBER;
v_file_index NUMBER;
-- Overige velden:
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
-- Eerst opruiming
DELETE FROM fac_imp_contactpersoon;
COMMIT;
v_count_tot := 0;
v_count_import := 0;
header_is_valid := 0;
v_prs_perslid_matchcode := '';
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_file_index := rec1.fac_imp_file_index;
v_errorhint := 'Fout bij opvragen importregel';
v_aanduiding := '';
v_ongeldig := 0;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijf_naam);
fac.imp_getfield (v_newline, c_delim, v_prs_leverancier_nr);
fac.imp_getfield (v_newline, c_delim, v_prs_perslid_matchcode);
fac.imp_getfield (v_newline, c_delim, v_prs_perslid_matchwaarde);
fac.imp_getfield (v_newline, c_delim, v_prs_contactpersoon_naam);
fac.imp_getfield (v_newline, c_delim, v_prs_contactpersoon_tussenv);
fac.imp_getfield (v_newline, c_delim, v_prs_contactpersoon_voorletters);
fac.imp_getfield (v_newline, c_delim, v_prs_contactpersoon_voornaam);
fac.imp_getfield (v_newline, c_delim, v_prs_contactpersoon_titel);
fac.imp_getfield (v_newline, c_delim, v_prs_contactpersoon_aanhef);
fac.imp_getfield (v_newline, c_delim, v_prs_contactpersoon_telefoon_1);
fac.imp_getfield (v_newline, c_delim, v_prs_contactpersoon_telefoon_2);
fac.imp_getfield (v_newline, c_delim, v_prs_contactpersoon_email);
fac.imp_getfield (v_newline, c_delim, v_prs_contactpersoon_functie);
fac.imp_getfield (v_newline, c_delim, v_prs_contactpersoon_opmerking);
fac.imp_getfield (v_newline, c_delim, v_alg_locatie_code);
v_aanduiding :=
'['
|| v_prs_bedrijf_naam
|| '|'
|| v_prs_leverancier_nr
|| '|'
|| v_prs_contactpersoon_naam
|| '|'
|| v_prs_contactpersoon_voornaam
|| '|'
|| v_prs_perslid_matchwaarde
|| '] ';
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop.
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
IF (header_is_valid = 0)
THEN
IF UPPER (v_prs_bedrijf_naam) = 'BEDRIJFSNAAM'
AND UPPER (v_prs_leverancier_nr) = 'LEVERANCIERNUMMER'
AND UPPER (v_prs_perslid_matchcode) = 'PERSOONMATCHCODE'
AND UPPER (v_prs_perslid_matchwaarde) = 'PERSOONMATCHWAARDE'
AND UPPER (v_prs_contactpersoon_naam) = 'CONTACTPERSOONACHTERNAAM'
AND UPPER (v_prs_contactpersoon_tussenv) = 'TUSSENVOEGSEL'
AND UPPER (v_prs_contactpersoon_voorletters) = 'VOORLETTERS'
AND UPPER (v_prs_contactpersoon_voornaam) = 'VOORNAAM'
AND UPPER (v_prs_contactpersoon_titel) = 'TITEL'
AND UPPER (v_prs_contactpersoon_aanhef) = 'AANHEF'
AND UPPER (v_prs_contactpersoon_telefoon_1) = 'TELEFOONNUMMER'
AND UPPER (v_prs_contactpersoon_telefoon_2) = 'MOBIEL'
AND UPPER (v_prs_contactpersoon_email) = 'EMAIL'
AND UPPER (v_prs_contactpersoon_functie) = 'FUNCTIE'
AND UPPER (v_prs_contactpersoon_opmerking) = 'OPMERKING'
AND UPPER (v_alg_locatie_code) = 'LOCATIECODE'
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
v_errorhint := 'Bedrijfsnaam ongeldig';
v_prs_bedrijf_naam := TRIM (v_prs_bedrijf_naam);
v_errorhint := 'Leveranciersnr ongeldig';
v_prs_leverancier_nr := TRIM (v_prs_leverancier_nr);
v_errorhint := 'Fout bij bepalen persoon';
SELECT MIN (prs_bedrijf_key)
INTO v_prs_bedrijf_key
FROM prs_v_aanwezigbedrijf
WHERE TRIM(prs_bedrijf_naam_upper) = UPPER (v_prs_bedrijf_naam)
OR UPPER(TRIM(prs_leverancier_nr)) = UPPER (v_prs_leverancier_nr);
IF v_prs_bedrijf_key IS NULL
THEN
fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errorhint, 'Kan bedrijf niet 1-duidig bepalen');
v_ongeldig := 1;
END IF;
v_errorhint := 'Fout bij bepalen persoon [' || v_prs_perslid_matchwaarde || ']';
v_prs_perslid_matchcode := TRIM(v_prs_perslid_matchcode);
v_prs_perslid_matchwaarde := TRIM(v_prs_perslid_matchwaarde);
v_prs_perslid_key := NULL;
IF v_prs_perslid_matchcode IS NOT NULL AND v_prs_perslid_matchwaarde IS NOT NULL
THEN
v_matchkolom := '';
CASE v_prs_perslid_matchcode
WHEN '1'
THEN
v_matchkolom := 'PRS_PERSLID_EMAIL';
WHEN '2'
THEN
v_matchkolom := 'PRS_PERSLID_OSLOGIN';
WHEN '3'
THEN
v_matchkolom := 'PRS_PERSLID_KEY';
WHEN '4'
THEN
v_matchkolom := 'PRS_PERSLID_NR';
WHEN '5'
THEN
v_matchkolom := 'PRS_PERSLID_VOORNAAM || '' '' || PRS_PERSLID_NAAM';
ELSE
-- voor developers only: indien geen code wordt gebruikt,
-- kan als persoonmatchcode een kolom uit de perslid-tabel
-- worden ingevoerd, bijvoorbeeld: prs_perslid_oslogin2
v_matchkolom := v_prs_perslid_matchcode;
END CASE;
sql_stmt :=
'SELECT MIN (prs_perslid_key), COUNT (prs_perslid_key) '
|| ' FROM prs_v_aanwezigperslid '
|| ' WHERE UPPER ('
|| v_matchkolom
|| ') = UPPER (:pwaarde) ';
--dbms_output.put_line(v_prs_perslid_matchwaarde);
l_cursor_1 := DBMS_SQL.open_cursor;
DBMS_SQL.parse (l_cursor_1, sql_stmt, DBMS_SQL.native);
DBMS_SQL.BIND_VARIABLE(l_cursor_1,':pwaarde', v_prs_perslid_matchwaarde);
DBMS_SQL.define_column(l_cursor_1, 1, v_prs_perslid_key);
DBMS_SQL.define_column(l_cursor_1, 2, pcount);
l_rowsprocessed := DBMS_SQL.execute_and_fetch (l_cursor_1);
-- Bij no rows gaat-ie naar de exception. Moet daar dan nog een cursor dicht??
DBMS_SQL.column_value (l_cursor_1, 1, v_prs_perslid_key);
DBMS_SQL.column_value (l_cursor_1, 2, pcount);
DBMS_SQL.close_cursor(l_cursor_1);
--dbms_output.put_line(pcount);
IF pcount != 1
THEN
IF pcount = 0
THEN
fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errorhint, 'Persoon niet (meer) aanwezig');
ELSE
fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errorhint, 'Kan persoon niet 1-duidig bepalen');
END IF;
v_ongeldig := 1;
ELSE
SELECT prs_perslid_naam,
prs_perslid_tussenvoegsel,
prs_perslid_voorletters,
prs_perslid_voornaam,
prs_perslid_telefoonnr,
prs_perslid_mobiel,
prs_perslid_email
INTO v_prs_contactpersoon_naam,
v_prs_contactpersoon_tussenv,
v_prs_contactpersoon_voorletters,
v_prs_contactpersoon_voornaam,
v_prs_contactpersoon_telefoon_1,
v_prs_contactpersoon_telefoon_2,
v_prs_contactpersoon_email
FROM prs_perslid
WHERE prs_perslid_key = v_prs_perslid_key;
END IF;
END IF;
v_errorhint := 'Contactpersoon naam ongeldig';
v_prs_contactpersoon_naam := TRIM (v_prs_contactpersoon_naam);
IF v_prs_perslid_key IS NULL
THEN
IF v_prs_contactpersoon_naam IS NULL
THEN
fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errorhint, 'Regel wordt overgeslagen');
v_ongeldig := 1;
ELSE
IF LENGTH (v_prs_contactpersoon_naam) > 30
THEN
v_prs_contactpersoon_naam := SUBSTR(v_prs_contactpersoon_naam, 1,30);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Contactpersoon naam wordt afgebroken tot: ' || v_prs_contactpersoon_naam);
END IF;
END IF;
END IF;
v_errorhint := 'Contactpersoon tussenvoegsels ongeldig';
v_prs_contactpersoon_tussenv := TRIM (v_prs_contactpersoon_tussenv);
IF LENGTH (v_prs_contactpersoon_tussenv) > 30
THEN
v_prs_contactpersoon_tussenv := SUBSTR(v_prs_contactpersoon_tussenv, 1,30);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Contactpersoon tussenvoegsels wordt afgebroken tot: ' || v_prs_contactpersoon_tussenv);
END IF;
v_errorhint := 'Contactpersoon voorletters ongeldig';
v_prs_contactpersoon_voorletters := TRIM (v_prs_contactpersoon_voorletters);
IF LENGTH (v_prs_contactpersoon_voorletters) > 10
THEN
v_prs_contactpersoon_voorletters := SUBSTR(v_prs_contactpersoon_voorletters, 1,10);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Contactpersoon voorletters wordt afgebroken tot: ' || v_prs_contactpersoon_voorletters);
END IF;
v_errorhint := 'Contactpersoon voornaam ongeldig';
v_prs_contactpersoon_voornaam := TRIM (v_prs_contactpersoon_voornaam);
IF LENGTH (v_prs_contactpersoon_voornaam) > 30
THEN
v_prs_contactpersoon_voornaam := SUBSTR(v_prs_contactpersoon_voornaam, 1,30);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Contactpersoon voornaam wordt afgebroken tot: ' || v_prs_contactpersoon_voornaam);
END IF;
v_errorhint := 'Contactpersoon aanhef ongeldig';
v_prs_contactpersoon_aanhef := TRIM (v_prs_contactpersoon_aanhef);
IF LENGTH (v_prs_contactpersoon_aanhef) > 30
THEN
v_prs_contactpersoon_aanhef := SUBSTR(v_prs_contactpersoon_aanhef, 1,30);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Contactpersoon aanhef wordt afgebroken tot: ' || v_prs_contactpersoon_aanhef);
END IF;
v_errorhint := 'Contactpersoon titel ongeldig';
v_prs_contactpersoon_titel := TRIM (v_prs_contactpersoon_titel);
IF LENGTH (v_prs_contactpersoon_titel) > 10
THEN
v_prs_contactpersoon_titel := SUBSTR(v_prs_contactpersoon_titel, 1,10);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Contactpersoon titel wordt afgebroken tot: ' || v_prs_contactpersoon_titel);
END IF;
v_errorhint := 'Contactpersoon telefoonnr ongeldig';
v_prs_contactpersoon_telefoon_1 := TRIM (v_prs_contactpersoon_telefoon_1);
IF LENGTH (v_prs_contactpersoon_telefoon_1) > 30
THEN
v_prs_contactpersoon_telefoon_1 := SUBSTR(v_prs_contactpersoon_telefoon_1, 1,30);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Contactpersoon telefoonnr wordt afgebroken tot: ' || v_prs_contactpersoon_telefoon_1);
END IF;
v_errorhint := 'Contactpersoon mobiel ongeldig';
v_prs_contactpersoon_telefoon_2 := TRIM (v_prs_contactpersoon_telefoon_2);
IF LENGTH (v_prs_contactpersoon_telefoon_2) > 30
THEN
v_prs_contactpersoon_telefoon_2 := SUBSTR(v_prs_contactpersoon_telefoon_2, 1,30);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Contactpersoon mobiel wordt afgebroken tot: ' || v_prs_contactpersoon_telefoon_2);
END IF;
v_errorhint := 'Contactpersoon email ongeldig';
v_prs_contactpersoon_email := TRIM (v_prs_contactpersoon_email);
IF LENGTH (v_prs_contactpersoon_email) > 200
THEN
v_prs_contactpersoon_email := SUBSTR(v_prs_contactpersoon_email, 1,200);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Contactpersoon email wordt afgebroken tot: ' || v_prs_contactpersoon_email);
END IF;
v_errorhint := 'Contactpersoon functie ongeldig';
v_prs_contactpersoon_functie := TRIM (v_prs_contactpersoon_functie);
IF LENGTH (v_prs_contactpersoon_functie) > 30
THEN
v_prs_contactpersoon_functie := SUBSTR(v_prs_contactpersoon_functie, 1,30);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Contactpersoon functie wordt afgebroken tot: ' || v_prs_contactpersoon_functie);
END IF;
v_errorhint := 'Contactpersoon opmerking ongeldig';
v_prs_contactpersoon_opmerking := TRIM (v_prs_contactpersoon_opmerking);
IF LENGTH (v_prs_contactpersoon_opmerking) > 30
THEN
v_prs_contactpersoon_opmerking := SUBSTR(v_prs_contactpersoon_opmerking, 1,30);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errorhint, 'Contactpersoon opmerking wordt afgebroken tot: ' || v_prs_contactpersoon_opmerking);
END IF;
v_errorhint := 'Locatiecode ongeldig';
v_alg_locatie_code := TRIM (v_alg_locatie_code);
v_alg_locatie_key := NULL;
v_errorhint := 'Fout bij bepalen locatie';
IF v_alg_locatie_code IS NOT NULL
THEN
SELECT MIN(alg_locatie_key)
INTO v_alg_locatie_key
FROM alg_v_aanweziglocatie l
WHERE UPPER(alg_locatie_code) = UPPER(v_alg_locatie_code);
IF v_alg_locatie_key IS NULL
THEN
fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errorhint, 'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
END IF;
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
BEGIN
v_errorhint := 'Fout bij wegschrijven importregel';
INSERT INTO fac_imp_contactpersoon (prs_contactpersoon_naam,
prs_contactpersoon_tussenv,
prs_contactpersoon_voorletters,
prs_contactpersoon_voornaam,
prs_contactpersoon_aanhef,
prs_contactpersoon_titel,
prs_contactpersoon_telefoon_1,
prs_contactpersoon_telefoon_2,
prs_contactpersoon_email,
prs_contactpersoon_functie,
prs_contactpersoon_opmerking,
prs_bedrijf_key,
prs_perslid_key,
alg_locatie_key,
fac_import_key
)
VALUES ( v_prs_contactpersoon_naam,
v_prs_contactpersoon_tussenv,
v_prs_contactpersoon_voorletters,
v_prs_contactpersoon_voornaam,
v_prs_contactpersoon_aanhef,
v_prs_contactpersoon_titel,
v_prs_contactpersoon_telefoon_1,
v_prs_contactpersoon_telefoon_2,
v_prs_contactpersoon_email,
v_prs_contactpersoon_functie,
v_prs_contactpersoon_opmerking,
v_prs_bedrijf_key,
v_prs_perslid_key,
v_alg_locatie_key,
p_import_key
);
COMMIT;
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
v_errorhint);
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!');
ELSE
fac.imp_writelog (
p_import_key,
'S',
'Contactpersonen/aantal ingelezen importregels: ' || TO_CHAR (v_count_tot),
''
);
fac.imp_writelog (
p_import_key,
'S',
'Objecten/aantal ongeldige niet ingelezen importregels: '
|| TO_CHAR (v_count_tot - v_count_import),
''
);
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Inleesproces contactpersonen afgebroken! regel:' || v_file_index);
END fac_import_contactpersoon;
/
CREATE OR REPLACE PROCEDURE fac_update_contactpersoon (
p_import_key IN NUMBER
)
IS
CURSOR c
IS
SELECT DISTINCT prs_contactpersoon_naam,
prs_contactpersoon_tussenv,
prs_contactpersoon_voorletters,
prs_contactpersoon_voornaam,
prs_contactpersoon_aanhef,
prs_contactpersoon_titel,
prs_contactpersoon_telefoon_1,
prs_contactpersoon_telefoon_2,
prs_contactpersoon_email,
prs_contactpersoon_functie,
prs_contactpersoon_opmerking,
prs_bedrijf_key,
prs_perslid_key,
fac_import_key
FROM fac_imp_contactpersoon
WHERE fac_import_key = p_import_key;
CURSOR c_loc
IS
SELECT prs_contactpersoon_naam,
prs_contactpersoon_tussenv,
prs_contactpersoon_voorletters,
prs_contactpersoon_voornaam,
prs_perslid_key,
prs_bedrijf_key,
alg_locatie_key
FROM fac_imp_contactpersoon
WHERE fac_import_key = p_import_key
AND alg_locatie_key IS NOT NULL;
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
v_count NUMBER (10);
v_ongeldig NUMBER (1);
v_count_update NUMBER (10);
v_count_tot NUMBER (10);
v_prs_contactpersoon_key NUMBER;
BEGIN
FOR rec in c
LOOP
BEGIN
v_aanduiding := rec.prs_contactpersoon_naam || ' - ' || rec.prs_contactpersoon_tussenv || ' - ' || rec.prs_contactpersoon_voornaam || ' - ' || rec.prs_perslid_key;
v_errorhint := 'Fout bij wegschrijven contactpersoon';
INSERT INTO prs_contactpersoon (prs_contactpersoon_naam,
prs_contactpersoon_tussenv,
prs_contactpersoon_voorletters,
prs_contactpersoon_voornaam,
prs_contactpersoon_aanhef,
prs_contactpersoon_titel,
prs_contactpersoon_telefoon_1,
prs_contactpersoon_telefoon_2,
prs_contactpersoon_email,
prs_contactpersoon_functie,
prs_contactpersoon_opmerking,
prs_perslid_key,
prs_bedrijf_key)
VALUES (rec.prs_contactpersoon_naam,
rec.prs_contactpersoon_tussenv,
rec.prs_contactpersoon_voorletters,
rec.prs_contactpersoon_voornaam,
rec.prs_contactpersoon_aanhef,
rec.prs_contactpersoon_titel,
rec.prs_contactpersoon_telefoon_1,
rec.prs_contactpersoon_telefoon_2,
rec.prs_contactpersoon_email,
rec.prs_contactpersoon_functie,
rec.prs_contactpersoon_opmerking,
rec.prs_perslid_key,
rec.prs_bedrijf_key);
EXCEPTION
WHEN OTHERS
THEN
oracle_err_mes := SUBSTR (SQLERRM, 1, 150);
v_errormsg := '(ORACLE error ' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint
);
END;
END LOOP;
FOR rec1 IN c_loc
LOOP
BEGIN
v_aanduiding := rec1.prs_contactpersoon_naam || ' - ' || rec1.prs_contactpersoon_tussenv || ' - ' || rec1.prs_contactpersoon_voornaam || ' - ' || rec1.prs_perslid_key || ' - ' || rec1.alg_locatie_key;
v_errorhint := 'Fout bij opzoeken contactpersoon';
v_prs_contactpersoon_key := NULL;
-- zoek de contactpersoon
SELECT prs_contactpersoon_key
INTO v_prs_contactpersoon_key
FROM prs_contactpersoon c
WHERE c.prs_bedrijf_key = rec1.prs_bedrijf_key
AND ( c.prs_perslid_key = rec1.prs_perslid_key
OR ( c.prs_contactpersoon_naam = rec1.prs_contactpersoon_naam
AND c.prs_contactpersoon_tussenv = rec1.prs_contactpersoon_tussenv
AND c.prs_contactpersoon_voorletters = rec1.prs_contactpersoon_voorletters
AND c.prs_contactpersoon_voornaam = rec1.prs_contactpersoon_voornaam
)
);
v_errorhint := 'Fout bij toevoegen locatie';
INSERT INTO prs_contactpersoon_locatie (prs_contactpersoon_key, alg_locatie_key)
VALUES (v_prs_contactpersoon_key, rec1.alg_locatie_key);
EXCEPTION
WHEN OTHERS
THEN
oracle_err_mes := SUBSTR (SQLERRM, 1, 150);
v_errormsg := '(ORACLE error ' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint
);
END;
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_mes := SUBSTR (SQLERRM, 1, 150);
v_errormsg := '(ORACLE error ' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Importproces meldingen afgebroken!'
);
END fac_update_contactpersoon;
/
--//////////////////////////////////////////////////MLD IMPORT STUFF///////////////////////////////////////////
CREATE OR REPLACE PROCEDURE fac_import_mld (
p_import_key IN NUMBER
)
AS
c_fielddelimitor VARCHAR2 (2) := fac.import_delimiter(p_import_key);
v_newline VARCHAR2(2000); -- Input line
v_errormsg VARCHAR2(1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2(200);
header_is_valid NUMBER;
v_count_tot NUMBER(10);
v_count_import NUMBER(10);
v_ongeldig NUMBER(1);
v_aanduiding VARCHAR2(1000);
-- De importvelden:
v_srtdiscipline_omschrijving VARCHAR2(255); -- C30
v_srtdiscipline_prefix VARCHAR2(255); -- C3
v_srtdiscipline_alg VARCHAR2(255); -- N1
v_srtdiscipline_ins VARCHAR2(255); -- N1
v_srtdiscipline_bes VARCHAR2(255); -- N1
v_discipline_omschrijving VARCHAR2(255); -- C60
v_stdmelding_omschrijving VARCHAR2(255); -- C30
v_stdmelding_groep VARCHAR2(255); -- C30
v_stdmelding_kostensoort VARCHAR2(255); -- C60
v_stdmelding_accepttijd VARCHAR2(255); -- N12,5
v_stdmelding_accepttijd1 VARCHAR2(255); -- N12,5
v_stdmelding_accepttijd2 VARCHAR2(255); -- N12,5
v_stdmelding_accepttijd4 VARCHAR2(255); -- N12,5
v_stdmelding_uitvoertijd VARCHAR2(255); -- N12,5
v_stdmelding_uitvoertijd1 VARCHAR2(255); -- N12,5
v_stdmelding_uitvoertijd2 VARCHAR2(255); -- N12,5
v_stdmelding_uitvoertijd4 VARCHAR2(255); -- N12,5
v_discipline_directklaar VARCHAR2(255); -- N1
v_dienst VARCHAR2(255);
v_stdmelding_notfrontend VARCHAR2(255); -- N1
v_onrgoed_niveau VARCHAR2(255); -- C1
v_typeopdr_omschrijving VARCHAR2(255); -- C30
v_stdmelding_hint VARCHAR2(1000); -- C1000
v_stdmelding_kopieerbaar VARCHAR2(255); -- N1
v_stdmelding_afmeldtext VARCHAR2(255); -- N1
v_stdmelding_doublecheck VARCHAR2(255); -- N4
v_stdmelding_slabewaken VARCHAR2(255); -- N1
v_stdmelding_maxobjecten VARCHAR2(255); -- N1
v_discipline_image VARCHAR2(255); -- C255
v_stdmelding_image VARCHAR2(255); -- C255
-- Gebruikt voor numeriek-validatie en conversie
v_stdmelding_accepttijd_n mld_stdmelding.mld_stdmelding_t_accepttijd.tijdsduur%TYPE;
v_stdmelding_accepttijd1_n mld_stdmelding.mld_stdmelding_t_accept_pr1.tijdsduur%TYPE;
v_stdmelding_accepttijd2_n mld_stdmelding.mld_stdmelding_t_accept_pr2.tijdsduur%TYPE;
v_stdmelding_accepttijd4_n mld_stdmelding.mld_stdmelding_t_accept_pr4.tijdsduur%TYPE;
v_stdmelding_uitvoertijd_n mld_stdmelding.mld_stdmelding_t_uitvoertijd.tijdsduur%TYPE;
v_stdmelding_uitvoertijd1_n mld_stdmelding.mld_stdmelding_t_uitvtijd_pr1.tijdsduur%TYPE;
v_stdmelding_uitvoertijd2_n mld_stdmelding.mld_stdmelding_t_uitvtijd_pr2.tijdsduur%TYPE;
v_stdmelding_uitvoertijd4_n mld_stdmelding.mld_stdmelding_t_uitvtijd_pr4.tijdsduur%TYPE;
-- Overige velden (alleen gebruikt voor numeriek-validatie)
v_typeopdr_key mld_stdmelding.mld_typeopdr_key%TYPE;
--
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
-- Eerst opruiming
DELETE FROM fac_imp_mld;
v_count_tot := 0;
v_count_import := 0;
header_is_valid := 0;
COMMIT;
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_errormsg := 'Fout opvragen te importeren rij';
v_aanduiding := '';
v_ongeldig := 0;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_fielddelimitor, v_srtdiscipline_omschrijving);
fac.imp_getfield (v_newline, c_fielddelimitor, v_srtdiscipline_prefix);
fac.imp_getfield (v_newline, c_fielddelimitor, v_srtdiscipline_alg);
fac.imp_getfield (v_newline, c_fielddelimitor, v_srtdiscipline_ins);
fac.imp_getfield (v_newline, c_fielddelimitor, v_srtdiscipline_bes);
fac.imp_getfield (v_newline, c_fielddelimitor, v_discipline_omschrijving);
fac.imp_getfield (v_newline, c_fielddelimitor, v_stdmelding_omschrijving);
fac.imp_getfield (v_newline, c_fielddelimitor, v_stdmelding_groep);
fac.imp_getfield (v_newline, c_fielddelimitor, v_stdmelding_kostensoort);
fac.imp_getfield (v_newline, c_fielddelimitor, v_stdmelding_accepttijd);
fac.imp_getfield (v_newline, c_fielddelimitor, v_stdmelding_accepttijd1);
fac.imp_getfield (v_newline, c_fielddelimitor, v_stdmelding_accepttijd2);
fac.imp_getfield (v_newline, c_fielddelimitor, v_stdmelding_accepttijd4);
fac.imp_getfield (v_newline, c_fielddelimitor, v_stdmelding_uitvoertijd);
fac.imp_getfield (v_newline, c_fielddelimitor, v_stdmelding_uitvoertijd1);
fac.imp_getfield (v_newline, c_fielddelimitor, v_stdmelding_uitvoertijd2);
fac.imp_getfield (v_newline, c_fielddelimitor, v_stdmelding_uitvoertijd4);
fac.imp_getfield (v_newline, c_fielddelimitor, v_discipline_directklaar);
fac.imp_getfield (v_newline, c_fielddelimitor, v_dienst);
fac.imp_getfield (v_newline, c_fielddelimitor, v_stdmelding_notfrontend); -- N1
fac.imp_getfield (v_newline, c_fielddelimitor, v_onrgoed_niveau); -- C1
fac.imp_getfield (v_newline, c_fielddelimitor, v_typeopdr_omschrijving); -- C30
fac.imp_getfield (v_newline, c_fielddelimitor, v_stdmelding_hint); -- C1000
fac.imp_getfield (v_newline, c_fielddelimitor, v_stdmelding_kopieerbaar); -- N1
fac.imp_getfield (v_newline, c_fielddelimitor, v_stdmelding_afmeldtext); -- N1
fac.imp_getfield (v_newline, c_fielddelimitor, v_stdmelding_doublecheck); -- N4
fac.imp_getfield (v_newline, c_fielddelimitor, v_stdmelding_slabewaken); -- N1
fac.imp_getfield (v_newline, c_fielddelimitor, v_stdmelding_maxobjecten); -- N1
fac.imp_getfield (v_newline, c_fielddelimitor, v_discipline_image);
fac.imp_getfield (v_newline, c_fielddelimitor, v_stdmelding_image);
--
-- Spaties ervoor en erachter verwijderen.
v_srtdiscipline_omschrijving := TRIM(v_srtdiscipline_omschrijving);
v_srtdiscipline_prefix := TRIM(v_srtdiscipline_prefix);
v_srtdiscipline_alg := TRIM(v_srtdiscipline_alg);
v_srtdiscipline_ins := TRIM(v_srtdiscipline_ins);
v_srtdiscipline_bes := TRIM(v_srtdiscipline_bes);
v_discipline_omschrijving := TRIM(v_discipline_omschrijving);
v_stdmelding_omschrijving := TRIM(v_stdmelding_omschrijving);
v_stdmelding_groep := TRIM(v_stdmelding_groep);
v_stdmelding_kostensoort := TRIM(v_stdmelding_kostensoort);
v_stdmelding_accepttijd := TRIM(v_stdmelding_accepttijd);
v_stdmelding_accepttijd1 := TRIM(v_stdmelding_accepttijd1);
v_stdmelding_accepttijd2 := TRIM(v_stdmelding_accepttijd2);
v_stdmelding_accepttijd4 := TRIM(v_stdmelding_accepttijd4);
v_stdmelding_uitvoertijd := TRIM(v_stdmelding_uitvoertijd);
v_stdmelding_uitvoertijd1 := TRIM(v_stdmelding_uitvoertijd1);
v_stdmelding_uitvoertijd2 := TRIM(v_stdmelding_uitvoertijd2);
v_stdmelding_uitvoertijd4 := TRIM(v_stdmelding_uitvoertijd4);
v_discipline_directklaar := TRIM(v_discipline_directklaar);
v_dienst := TRIM(v_dienst);
v_stdmelding_notfrontend := TRIM(v_stdmelding_notfrontend);
v_onrgoed_niveau := TRIM(v_onrgoed_niveau);
v_typeopdr_omschrijving := TRIM(v_typeopdr_omschrijving);
v_stdmelding_hint := TRIM(v_stdmelding_hint);
v_stdmelding_kopieerbaar := TRIM(v_stdmelding_kopieerbaar);
v_stdmelding_afmeldtext := TRIM(v_stdmelding_afmeldtext);
v_stdmelding_doublecheck := TRIM(v_stdmelding_doublecheck);
v_stdmelding_slabewaken := TRIM(v_stdmelding_slabewaken);
v_stdmelding_maxobjecten := TRIM(v_stdmelding_maxobjecten);
v_discipline_image := TRIM(v_discipline_image);
v_stdmelding_image := TRIM(v_stdmelding_image);
--
v_aanduiding := '|'
|| v_srtdiscipline_omschrijving || '|'
|| v_srtdiscipline_prefix || '|'
|| v_srtdiscipline_alg || '|'
|| v_srtdiscipline_ins || '|'
|| v_srtdiscipline_bes || '|'
|| v_discipline_omschrijving || '|'
|| v_stdmelding_omschrijving || '|'
|| v_stdmelding_groep || '|'
|| v_stdmelding_kostensoort || '|'
|| v_stdmelding_accepttijd || '|'
|| v_stdmelding_accepttijd1 || '|'
|| v_stdmelding_accepttijd2 || '|'
|| v_stdmelding_accepttijd4 || '|'
|| v_stdmelding_uitvoertijd || '|'
|| v_stdmelding_uitvoertijd1 || '|'
|| v_stdmelding_uitvoertijd2 || '|'
|| v_stdmelding_uitvoertijd4 || '|'
|| v_discipline_directklaar || '|'
|| v_dienst || '|'
|| v_stdmelding_notfrontend || '|'
|| v_onrgoed_niveau || '|'
|| v_typeopdr_omschrijving || '|'
|| v_stdmelding_hint || '|'
|| v_stdmelding_kopieerbaar || '|'
|| v_stdmelding_afmeldtext || '|'
|| v_stdmelding_doublecheck || '|'
|| v_stdmelding_slabewaken || '|'
|| v_stdmelding_maxobjecten || '|'
|| v_discipline_image || '|'
|| v_stdmelding_image;
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop. Ik controleer alleen de verplichte kolommen, ik zou ze ook
-- allemaal kunnen doen..
-- Ik negeer alles totdat ik een geldige header gepasseerd ben
IF (header_is_valid = 0)
THEN
IF fac_check_import_header(v_srtdiscipline_omschrijving, 'VAKGROEPTYPE')
AND fac_check_import_header(v_discipline_omschrijving, 'VAKGROEP')
AND fac_check_import_header(v_stdmelding_omschrijving, 'STANDAARDMELDING')
AND fac_check_import_header(v_stdmelding_uitvoertijd4, 'UITVOERTIJD LAAG')
AND fac_check_import_header(v_stdmelding_slabewaken, 'SLA BEWAKEN')
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarde
IF LENGTH (v_srtdiscipline_omschrijving) > 30
THEN
v_srtdiscipline_omschrijving := SUBSTR (TRIM (v_srtdiscipline_omschrijving), 1, 30);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding,
'Vakgroeptype wordt afgebroken tot [' || v_srtdiscipline_omschrijving || ']'
);
END IF;
--
IF LENGTH (v_srtdiscipline_prefix) > 3
THEN
v_srtdiscipline_prefix := SUBSTR (v_srtdiscipline_prefix, 1, 3);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding,
'Prefix wordt afgebroken tot [' || v_srtdiscipline_prefix || ']'
);
END IF;
--
SELECT DECODE (fac.safe_to_number (v_srtdiscipline_alg), 1, '1', '0') INTO v_srtdiscipline_alg FROM DUAL;
--
SELECT DECODE (fac.safe_to_number (v_srtdiscipline_ins), 1, '1', '0') INTO v_srtdiscipline_ins FROM DUAL;
--
SELECT DECODE (fac.safe_to_number (v_srtdiscipline_bes), 1, '1', '0') INTO v_srtdiscipline_bes FROM DUAL;
--
v_discipline_omschrijving := TRIM (v_discipline_omschrijving);
IF LENGTH (v_discipline_omschrijving) > 60
THEN
v_discipline_omschrijving := SUBSTR (v_discipline_omschrijving, 1, 60);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding,
'Vakgroep wordt afgebroken tot [' || v_discipline_omschrijving || ']'
);
END IF;
--
IF LENGTH (v_stdmelding_omschrijving) > 60
THEN
v_stdmelding_omschrijving := SUBSTR (v_stdmelding_omschrijving, 1, 60);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding,
'Standaardmelding wordt afgebroken tot [' || v_stdmelding_omschrijving || ']'
);
END IF;
--
IF LENGTH (v_stdmelding_kostensoort) > 60
THEN
v_stdmelding_kostensoort := SUBSTR (v_stdmelding_kostensoort, 1, 60);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding,
'Melding herkenningstekst wordt afgebroken tot [' || v_stdmelding_kostensoort || ']'
);
END IF;
--
BEGIN
v_stdmelding_accepttijd_n := fac.safe_to_number (v_stdmelding_accepttijd);
v_stdmelding_accepttijd1_n := fac.safe_to_number (v_stdmelding_accepttijd1);
v_stdmelding_accepttijd2_n := fac.safe_to_number (v_stdmelding_accepttijd2);
v_stdmelding_accepttijd4_n := fac.safe_to_number (v_stdmelding_accepttijd4);
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,
'W',
v_aanduiding,
'Importregel kan niet worden ingelezen. Ongeldige acceptatietijd ['
|| v_stdmelding_accepttijd || '/'
|| v_stdmelding_accepttijd1 || '/'
|| v_stdmelding_accepttijd2 || '/'
|| v_stdmelding_accepttijd4 || ']'
);
END;
--
BEGIN
v_stdmelding_uitvoertijd_n := fac.safe_to_number (v_stdmelding_uitvoertijd);
v_stdmelding_uitvoertijd1_n := fac.safe_to_number (v_stdmelding_uitvoertijd1);
v_stdmelding_uitvoertijd2_n := fac.safe_to_number (v_stdmelding_uitvoertijd2);
v_stdmelding_uitvoertijd4_n := fac.safe_to_number (v_stdmelding_uitvoertijd4);
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,
'W',
v_aanduiding,
'Importregel kan niet worden ingelezen. Ongeldige uitvoertijd(en) ['
|| v_stdmelding_uitvoertijd || '/'
|| v_stdmelding_uitvoertijd1 || '/'
|| v_stdmelding_uitvoertijd2 || '/'
|| v_stdmelding_uitvoertijd4 || ']'
);
END;
--
SELECT DECODE (fac.safe_to_number (v_discipline_directklaar), 1, '1', '0')
INTO v_discipline_directklaar
FROM DUAL;
--
v_dienst := SUBSTR (v_dienst, 1, 60);
--
SELECT DECODE (fac.safe_to_number (v_stdmelding_notfrontend), 1, '1', '0') INTO v_stdmelding_notfrontend FROM DUAL;
--
IF v_onrgoed_niveau IS NULL THEN
v_onrgoed_niveau := 'L';
END IF;
IF v_onrgoed_niveau NOT IN ('H', 'L', 'G', 'V', 'R') THEN
v_onrgoed_niveau := 'L';
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding,
'Importregel kan niet worden ingelezen. Ongeldig onrgoedniveau [' || v_onrgoed_niveau || ']'
);
END IF;
IF v_typeopdr_omschrijving IS NOT NULL
THEN
BEGIN
SELECT mld_typeopdr_key
INTO v_typeopdr_key
FROM mld_typeopdr
WHERE mld_typeopdr_upper = UPPER(v_typeopdr_omschrijving);
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,
'W',
v_aanduiding,
'Importregel kan niet worden ingelezen. Ongeldige opdrachttype ['
|| v_typeopdr_omschrijving
|| ']'
);
END;
END IF;
--
IF LENGTH (v_stdmelding_hint) > 1000
THEN
v_stdmelding_hint := SUBSTR (v_stdmelding_hint, 1, 1000);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding,
'Standaardmelding hint wordt afgebroken op 1000 tekens'
);
END IF;
--
SELECT DECODE (fac.safe_to_number (v_stdmelding_kopieerbaar), 1, '1', '0') INTO v_stdmelding_kopieerbaar FROM DUAL;
--
SELECT DECODE (fac.safe_to_number (v_stdmelding_afmeldtext), 1, '2', '1') INTO v_stdmelding_afmeldtext FROM DUAL; -- waarden: [1,2]
--
SELECT DECODE (fac.safe_to_number (v_stdmelding_slabewaken), 1, '1', '0') INTO v_stdmelding_slabewaken FROM DUAL;
--
SELECT DECODE (fac.safe_to_number (v_stdmelding_maxobjecten), 0, '0', 1, '1', '2') INTO v_stdmelding_maxobjecten FROM DUAL;
--
IF UPPER(v_stdmelding_doublecheck) NOT IN ('N', 'I', 'A', 'B') THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding,
'Importregel kan niet worden ingelezen. Ongeldig doublecheck waarde [' || v_stdmelding_doublecheck || ']'
);
ELSE
SELECT DECODE (UPPER(v_stdmelding_doublecheck), 'I', '1', 'A', '2', 'B', '3', '0') INTO v_stdmelding_doublecheck FROM DUAL; -- waarden: [0,1,2,3]
END IF;
--
IF LENGTH (v_discipline_image) > 255
THEN
v_discipline_image := SUBSTR (v_discipline_image, 1, 255);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding,
'Discipline image wordt afgebroken tot [' || v_discipline_image || ']'
);
END IF;
--
IF LENGTH (v_stdmelding_image) > 255
THEN
v_stdmelding_image := SUBSTR (v_stdmelding_image, 1, 255);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding,
'Standaardmelding image wordt afgebroken tot [' || v_stdmelding_image || ']'
);
END IF;
--
-- Insert geformatteerde import record
-- We hebben hier vooralsnog de oude uitvoertijden, zonder type
IF v_ongeldig = 0
THEN
BEGIN
INSERT INTO fac_imp_mld (
ins_srtdiscipline_omschrijving,
ins_srtdiscipline_prefix,
ins_srtdiscipline_alg,
ins_srtdiscipline_ins,
ins_srtdiscipline_bes,
ins_discipline_omschrijving,
mld_stdmelding_omschrijving,
mld_stdmelding_groep,
mld_stdmelding_kostensoort,
mld_stdmelding_accepttijd,
mld_stdmelding_accepttijd1,
mld_stdmelding_accepttijd2,
mld_stdmelding_accepttijd4,
mld_stdmelding_uitvoertijd,
mld_stdmelding_uitvoertijd1,
mld_stdmelding_uitvoertijd2,
mld_stdmelding_uitvoertijd4,
mld_discipline_directklaar,
prs_dienst,
mld_stdmelding_notfrontend,
alg_onrgoed_niveau,
mld_typeopdr_omschrijving,
mld_stdmelding_hint,
mld_stdmelding_afmeldtext,
mld_stdmelding_kopieerbaar,
mld_stdmelding_slabewaken,
mld_stdmelding_doublecheck,
mld_stdmelding_objects_allowed,
ins_discipline_image,
mld_stdmelding_image
)
VALUES (
v_srtdiscipline_omschrijving,
v_srtdiscipline_prefix,
v_srtdiscipline_alg,
v_srtdiscipline_ins,
v_srtdiscipline_bes,
v_discipline_omschrijving,
v_stdmelding_omschrijving,
v_stdmelding_groep,
v_stdmelding_kostensoort,
v_stdmelding_accepttijd_n,
v_stdmelding_accepttijd1_n,
v_stdmelding_accepttijd2_n,
v_stdmelding_accepttijd4_n,
v_stdmelding_uitvoertijd_n,
v_stdmelding_uitvoertijd1_n,
v_stdmelding_uitvoertijd2_n,
v_stdmelding_uitvoertijd4_n,
v_discipline_directklaar,
v_dienst,
v_stdmelding_notfrontend,
v_onrgoed_niveau,
v_typeopdr_omschrijving,
v_stdmelding_hint,
v_stdmelding_afmeldtext,
v_stdmelding_kopieerbaar,
v_stdmelding_slabewaken,
v_stdmelding_doublecheck,
v_stdmelding_maxobjecten,
v_discipline_image,
v_stdmelding_image
);
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding,
'Fout bij toevoegen regel aan importtabel FAC_IMP_MLD. ' || v_errormsg
);
END;
END IF;
END IF;
END;
END LOOP;
IF (header_is_valid = 0)
THEN
fac.imp_writelog (p_import_key, 'E', v_aanduiding || 'Ongeldig importbestand', 'Toelichting: ... ');
ELSE
fac.imp_writelog (p_import_key,
'S',
'Servicedesk: aantal ingelezen regels: ' || TO_CHAR (v_count_tot),
''
);
fac.imp_writelog (
p_import_key,
'S',
'Servicedesk: aantal ongeldige niet ingelezen importregels: ' || TO_CHAR (v_count_tot - v_count_import),
''
);
END IF;
COMMIT;
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, 'Inleesproces meldingen afgebroken!');
END fac_import_mld;
/
CREATE OR REPLACE PROCEDURE fac_update_mld (
p_import_key IN NUMBER
)
IS
c_fielddelimitor VARCHAR2 (2) := fac.import_delimiter(p_import_key);
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
v_count NUMBER (10);
v_ongeldig NUMBER (1);
v_count_update NUMBER (10);
v_count_tot NUMBER (10);
-- SUBPROC
PROCEDURE add_srtdiscipline (p_import_key IN NUMBER)
IS
CURSOR c1
IS
SELECT MAX (ins_srtdiscipline_omschrijving) ins_srtdiscipline_omschrijving,
UPPER (ins_srtdiscipline_omschrijving) ins_srtdiscipline_upper,
MAX (ins_srtdiscipline_prefix) ins_srtdiscipline_prefix,
MAX (ins_srtdiscipline_alg) ins_srtdiscipline_alg,
MAX (ins_srtdiscipline_ins) ins_srtdiscipline_ins,
MAX (ins_srtdiscipline_bes) ins_srtdiscipline_bes
FROM fac_imp_mld
WHERE UPPER (ins_srtdiscipline_omschrijving) IS NOT NULL
GROUP BY UPPER (ins_srtdiscipline_omschrijving)
ORDER BY 1;
teller INTEGER;
const_max_inserts INTEGER := 100;
ccount NUMBER (10);
oracle_err_num NUMBER;
oracle_err_var VARCHAR2 (100);
v_count_tot NUMBER (10);
v_count_update NUMBER (10);
BEGIN
v_count_tot := 0;
v_count_update := 0;
teller := 0;
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
SELECT COUNT (*)
INTO ccount
FROM ins_srtdiscipline
WHERE ins_srtdiscipline_verwijder IS NULL
AND UPPER (TRIM (ins_srtdiscipline_omschrijving)) =
TRIM (rec.ins_srtdiscipline_upper);
IF (ccount = 0)
THEN
INSERT INTO ins_srtdiscipline
(ins_srtdiscipline_module,
ins_srtdiscipline_omschrijving,
ins_srtdiscipline_prefix,
ins_srtdiscipline_alg,
ins_srtdiscipline_ins,
ins_srtdiscipline_bes
)
VALUES ('MLD',
rec.ins_srtdiscipline_omschrijving,
rec.ins_srtdiscipline_prefix,
fac.safe_to_number (rec.ins_srtdiscipline_alg),
fac.safe_to_number (rec.ins_srtdiscipline_ins),
fac.safe_to_number (rec.ins_srtdiscipline_bes)
);
v_count_update := v_count_update + 1;
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_var := SUBSTR (SQLERRM, 1, 100);
fac.imp_writelog
(p_import_key,
'W',
'Vakgroeptype ['
|| rec.ins_srtdiscipline_omschrijving
|| ']',
'Kan vakgroeptype niet wegschrijven (module = MLD)'
|| ' '
|| 'Oracle fout: '
|| oracle_err_var
);
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'Servicedesk: aantal vakgroeptyperegels: '
|| TO_CHAR (v_count_tot),
''
);
fac.imp_writelog
(p_import_key,
'S',
'Servicedesk: aantal vakgroeptyperegels toegevoegd: '
|| TO_CHAR (v_count_update),
''
);
COMMIT;
END;
-- SUBPROC
PROCEDURE add_discipline (p_import_key IN NUMBER)
IS
CURSOR c1
IS
SELECT MAX (ins_srtdiscipline_omschrijving) ins_srtdiscipline_omschrijving,
MAX (ins_discipline_omschrijving) ins_discipline_omschrijving,
MAX (mld_discipline_directklaar) mld_discipline_directklaar,
MAX (ins_discipline_image) ins_discipline_image,
UPPER (ins_srtdiscipline_omschrijving) ins_srtdiscipline_upper,
UPPER (ins_discipline_omschrijving) ins_discipline_upper
FROM fac_imp_mld
GROUP BY UPPER (ins_srtdiscipline_omschrijving),
UPPER (ins_discipline_omschrijving)
ORDER BY 1, 2;
teller INTEGER;
const_max_inserts INTEGER := 100;
v_errmes VARCHAR2 (1024);
srtdiscipline_key NUMBER (10);
v_discipline_key NUMBER (10);
ccount NUMBER (10);
oracle_err_num NUMBER;
oracle_err_var VARCHAR2 (100);
v_count_tot NUMBER (10);
v_count_update NUMBER (10);
BEGIN
v_count_tot := 0;
v_count_update := 0;
teller := 0;
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_errmes := 'Bepalen of de srtdiscipline';
IF (rec.ins_srtdiscipline_omschrijving IS NOT NULL)
THEN
SELECT ins_srtdiscipline_key
INTO srtdiscipline_key
FROM ins_srtdiscipline sd
WHERE sd.ins_srtdiscipline_verwijder IS NULL
AND UPPER (TRIM (sd.ins_srtdiscipline_omschrijving)) =
UPPER (TRIM (rec.ins_srtdiscipline_omschrijving));
ELSE
SELECT TO_NUMBER (NULL)
INTO srtdiscipline_key
FROM DUAL;
END IF;
v_errmes := 'Bepalen of de discipline bestaat';
SELECT COUNT (*)
INTO ccount
FROM ins_tab_discipline d
WHERE d.ins_discipline_verwijder IS NULL
AND d.ins_discipline_module = 'MLD'
AND UPPER (TRIM (d.ins_discipline_omschrijving)) =
UPPER (TRIM (rec.ins_discipline_omschrijving))
AND d.ins_srtdiscipline_key = srtdiscipline_key;
IF ccount = 0
THEN
SELECT ins_srtdiscipline_key
INTO srtdiscipline_key
FROM ins_srtdiscipline sd
WHERE sd.ins_srtdiscipline_verwijder IS NULL
AND sd.ins_srtdiscipline_module = 'MLD'
AND UPPER (TRIM (sd.ins_srtdiscipline_omschrijving)) =
UPPER (TRIM (rec.ins_srtdiscipline_omschrijving));
SELECT ins_s_ins_discipline_key.NEXTVAL
INTO v_discipline_key
FROM DUAL;
INSERT INTO ins_tab_discipline
(ins_discipline_module,
ins_discipline_omschrijving,
ins_discipline_min_level, ins_srtdiscipline_key,
ins_discipline_image
)
VALUES ('MLD',
SUBSTR (rec.ins_discipline_omschrijving, 1, 60),
1, srtdiscipline_key,
rec.ins_discipline_image
) RETURNING ins_discipline_key INTO v_discipline_key;
INSERT INTO mld_disc_params
(mld_ins_discipline_key,
mld_disc_params_factuurappr,
mld_disc_params_noti_dagen,
mld_disc_params_notify,
mld_disc_params_opdr_kosten,
mld_disc_params_directklaar
)
VALUES (v_discipline_key,
0,
NULL,
0,
0,
rec.mld_discipline_directklaar
);
v_count_update := v_count_update + 1;
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_var := SUBSTR (SQLERRM, 1, 100);
fac.imp_writelog (p_import_key,
'W',
'Vakgroep ['
|| rec.ins_srtdiscipline_omschrijving
|| ']',
'Kan vakgroep niet wegschrijven'
|| ' '
|| 'Oracle error: '
|| oracle_err_var
);
COMMIT; -- tbv logging
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'Servicedesk: aantal vakgroepregels: '
|| TO_CHAR (v_count_tot),
''
);
fac.imp_writelog (p_import_key,
'S',
'Servicedesk: aantal vakgroepregels toegevoegd: '
|| TO_CHAR (v_count_update),
''
);
COMMIT;
END;
-- SUBPROC
PROCEDURE add_stdmeldinggroep (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT DISTINCT mld_stdmelding_groep
FROM fac_imp_mld
WHERE mld_stdmelding_groep IS NOT NULL
ORDER BY 1;
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count NUMBER (10);
v_count_tot NUMBER (10);
v_count_update NUMBER (10);
BEGIN
v_count_tot := 0;
v_count_update := 0;
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_aanduiding := '[' || rec.mld_stdmelding_groep || '] ';
v_errorhint := 'Fout bij bepalen meldinggroep';
SELECT COUNT ( * )
INTO v_count
FROM mld_stdmeldinggroep
WHERE UPPER (mld_stdmeldinggroep_naam) =
UPPER (rec.mld_stdmelding_groep);
IF v_count = 0
THEN
v_errorhint := 'Fout bij toevoegen meldinggroep';
INSERT INTO mld_stdmeldinggroep (mld_stdmeldinggroep_naam)
VALUES (rec.mld_stdmelding_groep);
v_count_update := v_count_update + 1;
COMMIT;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'ORACLE (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',
'Servicedesk: aantal meldinggroepen: '
|| TO_CHAR (v_count_tot),
''
);
fac.imp_writelog (p_import_key,
'S',
'Servicedesk: aantal meldinggroepen toegevoegd: '
|| TO_CHAR (v_count_update),
''
);
COMMIT;
END;
-- SUBPROC
PROCEDURE add_kostensoort (p_import_key IN NUMBER)
IS
CURSOR c1
IS
SELECT MAX (mld_stdmelding_kostensoort) prs_kostensoort_oms,
UPPER (mld_stdmelding_kostensoort) prs_kostensoort_upper
FROM fac_imp_mld
WHERE mld_stdmelding_kostensoort IS NOT NULL
GROUP BY UPPER (mld_stdmelding_kostensoort)
ORDER BY 1;
teller INTEGER;
const_max_inserts INTEGER := 100;
v_errmes VARCHAR2 (1024);
srtdiscipline_key NUMBER (10);
ccount NUMBER (10);
oracle_err_num NUMBER;
oracle_err_var VARCHAR2 (100);
v_count_tot NUMBER (10);
v_count_update NUMBER (10);
BEGIN
v_count_tot := 0;
v_count_update := 0;
teller := 0;
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_errmes := 'Bepalen of de kostensoort bestaat';
SELECT COUNT (*)
INTO ccount
FROM prs_kostensoort
WHERE prs_kostensoort_upper = rec.prs_kostensoort_upper
AND prs_kostensoort_verwijder IS NULL;
IF ccount = 0
THEN
v_errmes := 'Toevoegen kostensoort';
INSERT INTO prs_kostensoort
(prs_kostensoort_oms, prs_kostensoort_opmerking
)
VALUES (rec.prs_kostensoort_oms, ''
);
v_count_update := v_count_update + 1;
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_var := SUBSTR (SQLERRM, 1, 100);
fac.imp_writelog
(p_import_key,
'W',
'Vakgroep [' || rec.prs_kostensoort_oms || ']',
'Kan PRS_KOSTENSOORT niet wegschrijven (module = MLD)'
|| ' '
|| 'Oracle fout: '
|| oracle_err_var
);
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'Servicedesk: aantal kostensoortregels: '
|| TO_CHAR (v_count_tot),
''
);
fac.imp_writelog
(p_import_key,
'S',
'Servicedesk: aantal kostensoortregels toegevoegd:'
|| TO_CHAR (v_count_update),
''
);
COMMIT;
END;
-- SUBPROC
PROCEDURE add_dienst (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT DISTINCT prs_dienst
FROM fac_imp_mld
WHERE prs_dienst IS NOT NULL
ORDER BY 1;
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count NUMBER (10);
v_count_tot NUMBER (10);
v_count_update NUMBER (10);
BEGIN
v_count_tot := 0;
v_count_update := 0;
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_aanduiding := '[' || rec.prs_dienst || '] ';
v_errorhint := 'Fout bij bepalen dienst';
SELECT COUNT ( * )
INTO v_count
FROM prs_dienst
WHERE UPPER (prs_dienst_omschrijving) =
UPPER (rec.prs_dienst);
IF v_count = 0
THEN
v_errorhint := 'Fout bij toevoegen dienst';
INSERT INTO prs_dienst (prs_dienst_omschrijving)
VALUES (rec.prs_dienst);
v_count_update := v_count_update + 1;
COMMIT;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint);
COMMIT;
END;
END LOOP;
END;
-- SUBPROC
PROCEDURE add_typeopdr (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT DISTINCT mld_typeopdr_omschrijving
FROM fac_imp_mld
WHERE mld_typeopdr_omschrijving IS NOT NULL
ORDER BY 1;
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count NUMBER (10);
v_count_tot NUMBER (10);
v_count_update NUMBER (10);
BEGIN
v_count_tot := 0;
v_count_update := 0;
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_aanduiding := '[' || rec.mld_typeopdr_omschrijving || '] ';
v_errorhint := 'Fout bij bepalen opdrachttype';
SELECT COUNT ( * )
INTO v_count
FROM mld_typeopdr
WHERE mld_typeopdr_upper = UPPER (rec.mld_typeopdr_omschrijving);
IF v_count = 0
THEN
v_errorhint := 'Fout bij toevoegen opdrachttype';
INSERT INTO mld_typeopdr (mld_typeopdr_omschrijving)
VALUES (rec.mld_typeopdr_omschrijving);
v_count_update := v_count_update + 1;
COMMIT;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint);
COMMIT;
END;
END LOOP;
END;
-- SUBPROC
PROCEDURE add_stdmelding (p_import_key IN NUMBER)
IS
CURSOR c1
IS
SELECT *
FROM fac_imp_mld sm
ORDER BY ins_srtdiscipline_omschrijving
, ins_discipline_omschrijving
, mld_stdmelding_omschrijving;
teller INTEGER;
discipline_key NUMBER (10);
srtdiscipline_key NUMBER (10);
kostensoort_key NUMBER (10);
dienst_key NUMBER (10);
stdmeldinggroep_key NUMBER (10);
typeopdr_key NUMBER (10);
ccount NUMBER (10);
v_errmes VARCHAR2 (1024);
oracle_err_num NUMBER;
oracle_err_var VARCHAR2 (100);
v_count_tot NUMBER (10);
v_count_update NUMBER (10);
BEGIN
v_count_tot := 0;
v_count_update := 0;
teller := 0;
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
IF (rec.ins_srtdiscipline_omschrijving IS NOT NULL)
THEN
v_errmes := 'Bepalen srtdiscipline_key';
SELECT ins_srtdiscipline_key
INTO srtdiscipline_key
FROM ins_srtdiscipline sd
WHERE sd.ins_srtdiscipline_module = 'MLD'
AND UPPER (sd.ins_srtdiscipline_omschrijving) =
UPPER (TRIM (rec.ins_srtdiscipline_omschrijving))
AND sd.ins_srtdiscipline_verwijder IS NULL;
ELSE
srtdiscipline_key := TO_NUMBER (NULL);
END IF;
v_errmes := 'Bepalen discipline_key';
SELECT ins_discipline_key
INTO discipline_key
FROM ins_tab_discipline d
WHERE TRIM (UPPER (d.ins_discipline_omschrijving)) =
TRIM (UPPER (rec.ins_discipline_omschrijving))
AND d.ins_discipline_module = 'MLD'
AND d.ins_srtdiscipline_key = srtdiscipline_key
AND d.ins_discipline_verwijder IS NULL;
v_errmes := 'Kijken mld_stdmelding bestaat';
SELECT COUNT (*)
INTO ccount
FROM mld_stdmelding
WHERE mld_ins_discipline_key = discipline_key
AND mld_stdmelding_verwijder IS NULL
AND TRIM (UPPER (mld_stdmelding_omschrijving)) =
TRIM (UPPER (rec.mld_stdmelding_omschrijving));
IF ccount = 0
THEN
v_errmes := 'Bepalen of de kostensoort bestaat';
SELECT COUNT (*),
NVL (MAX (prs_kostensoort_key), TO_NUMBER (NULL))
INTO ccount,
kostensoort_key
FROM prs_kostensoort
WHERE prs_kostensoort_upper = rec.mld_stdmelding_kostensoort
AND prs_kostensoort_verwijder IS NULL;
v_errmes := 'Bepalen of de dienst bestaat';
dienst_key := NULL;
IF rec.prs_dienst IS NOT NULL
THEN
SELECT prs_dienst_key
INTO dienst_key
FROM prs_dienst
WHERE UPPER(prs_dienst_omschrijving) = UPPER(rec.prs_dienst);
END IF;
v_errmes := 'Bepalen stdmeldinggroep_key';
stdmeldinggroep_key := NULL;
IF rec.mld_stdmelding_groep IS NOT NULL
THEN
SELECT mld_stdmeldinggroep_key
INTO stdmeldinggroep_key
FROM mld_stdmeldinggroep
WHERE TRIM (UPPER (mld_stdmeldinggroep_naam)) =
TRIM (UPPER (rec.mld_stdmelding_groep));
END IF;
v_errmes := 'Bepalen typeopdr_key';
typeopdr_key := NULL;
IF rec.mld_typeopdr_omschrijving IS NOT NULL
THEN
SELECT mld_typeopdr_key
INTO typeopdr_key
FROM mld_typeopdr
WHERE TRIM (mld_typeopdr_upper) = TRIM (UPPER (rec.mld_typeopdr_omschrijving));
END IF;
v_errmes := 'Toevoegen mld_stdmelding';
v_errmes := ' (discipline_key = ' || TO_CHAR (discipline_key)
|| '| rec.mld_stdmelding_omschrijving = ' || rec.mld_stdmelding_omschrijving
|| '| KOSTENSOORT_KEY' || TO_CHAR (kostensoort_key)
|| 'NVL (TO_NUMBER (rec.mld_stdmelding_accepttijd), NULL) = ' || TO_CHAR (NVL (TO_NUMBER (rec.mld_stdmelding_accepttijd), 0))
|| 'NVL (rec.mld_stdmelding_uitvoertijd, 0) = ' || TO_CHAR (NVL (rec.mld_stdmelding_uitvoertijd, 0))
|| ')';
INSERT INTO mld_stdmelding
(mld_ins_discipline_key,
mld_stdmelding_omschrijving,
mld_stdmeldinggroep_key,
prs_kostensoort_key,
mld_stdmelding_t_accepttijd,
mld_stdmelding_t_accept_pr1,
mld_stdmelding_t_accept_pr2,
mld_stdmelding_t_accept_pr4,
mld_stdmelding_t_uitvoertijd,
mld_stdmelding_t_uitvtijd_pr1,
mld_stdmelding_t_uitvtijd_pr2,
mld_stdmelding_t_uitvtijd_pr4,
prs_dienst_key,
mld_stdmelding_notfrontend,
alg_onrgoed_niveau,
mld_typeopdr_key,
mld_stdmelding_hint,
mld_stdmelding_kopieerbaar,
mld_stdmelding_afmeldtext,
mld_stdmelding_doublecheck,
mld_stdmelding_slabewaken,
mld_stdmelding_image,
mld_stdmelding_objects_allowed
)
VALUES (discipline_key,
rec.mld_stdmelding_omschrijving,
stdmeldinggroep_key,
kostensoort_key,
MLD_T_UITVOERTIJD(rec.mld_stdmelding_accepttijd, 'U'), -- acceptatietijden vullen we altijd in in uren.
MLD_T_UITVOERTIJD(rec.mld_stdmelding_accepttijd1, 'U'),
MLD_T_UITVOERTIJD(rec.mld_stdmelding_accepttijd2, 'U'),
MLD_T_UITVOERTIJD(rec.mld_stdmelding_accepttijd4, 'U'),
-- Uitvoertijden worden in de importsheet en exportview altijd ingevuld in dagen.
-- Is de uitvoertijd kleiner dan 1 dag, dan slaan we het in mld_stdmelding op in uren.
MLD_T_UITVOERTIJD(CASE
WHEN COALESCE(rec.mld_stdmelding_uitvoertijd, 2) > 0 AND COALESCE(rec.mld_stdmelding_uitvoertijd, 2) < 1
THEN COALESCE(rec.mld_stdmelding_uitvoertijd, 2) * 24 -- Uren
ELSE COALESCE(rec.mld_stdmelding_uitvoertijd, 2) -- Dagen
END,
CASE
WHEN COALESCE(rec.mld_stdmelding_uitvoertijd, 2) > 0 AND COALESCE(rec.mld_stdmelding_uitvoertijd, 2) < 1
THEN 'U' -- Uren
ELSE 'D' -- Dagen
END),
MLD_T_UITVOERTIJD(CASE
WHEN rec.mld_stdmelding_uitvoertijd1 > 0 AND rec.mld_stdmelding_uitvoertijd1 < 1
THEN rec.mld_stdmelding_uitvoertijd1 * 24 -- Uren
ELSE rec.mld_stdmelding_uitvoertijd1 -- Dagen
END,
CASE
WHEN rec.mld_stdmelding_uitvoertijd1 > 0 AND rec.mld_stdmelding_uitvoertijd1 < 1
THEN 'U' -- Uren
ELSE 'D' -- Dagen
END),
MLD_T_UITVOERTIJD(CASE
WHEN rec.mld_stdmelding_uitvoertijd2 > 0 AND rec.mld_stdmelding_uitvoertijd2 < 1
THEN rec.mld_stdmelding_uitvoertijd2 * 24 -- Uren
ELSE rec.mld_stdmelding_uitvoertijd2 -- Dagen
END,
CASE
WHEN rec.mld_stdmelding_uitvoertijd2 > 0 AND rec.mld_stdmelding_uitvoertijd2 < 1
THEN 'U' -- Uren
ELSE 'D' -- Dagen
END),
MLD_T_UITVOERTIJD(CASE
WHEN rec.mld_stdmelding_uitvoertijd4 > 0 AND rec.mld_stdmelding_uitvoertijd4 < 1
THEN rec.mld_stdmelding_uitvoertijd4 * 24 -- Uren
ELSE rec.mld_stdmelding_uitvoertijd4 -- Dagen
END,
CASE
WHEN rec.mld_stdmelding_uitvoertijd4 > 0 AND rec.mld_stdmelding_uitvoertijd4 < 1
THEN 'U' -- Uren
ELSE 'D' -- Dagen
END),
dienst_key,
rec.mld_stdmelding_notfrontend,
rec.alg_onrgoed_niveau,
typeopdr_key,
rec.mld_stdmelding_hint,
rec.mld_stdmelding_kopieerbaar,
rec.mld_stdmelding_afmeldtext,
rec.mld_stdmelding_doublecheck,
rec.mld_stdmelding_slabewaken,
rec.mld_stdmelding_image,
rec.mld_stdmelding_objects_allowed
);
v_count_update := v_count_update + 1;
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_var := SUBSTR (SQLERRM, 1, 100);
fac.imp_writelog
(p_import_key,
'W',
'standaardmelding kan niet worden weggeschreven ['
|| rec.mld_stdmelding_omschrijving
|| ']',
v_errmes || ' Oracle fout: ' || oracle_err_var
);
COMMIT; -- tbv logging
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'Servicedesk: aantal standaardmeldingen: '
|| TO_CHAR (v_count_tot),
''
);
fac.imp_writelog
(p_import_key,
'S',
'Servicedesk: aantal standaardmeldingen toegevoegd: '
|| TO_CHAR (v_count_update),
''
);
COMMIT;
END;
-- MAIN
BEGIN
add_srtdiscipline (p_import_key);
add_discipline (p_import_key);
add_stdmeldinggroep (p_import_key);
add_kostensoort (p_import_key);
add_dienst (p_import_key);
add_typeopdr (p_import_key);
add_stdmelding (p_import_key);
EXCEPTION
WHEN OTHERS
THEN
oracle_err_mes := SUBSTR (SQLERRM, 1, 150);
v_errormsg := '(ORACLE error ' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
'Importproces meldingen afgebroken!',
''
);
END fac_update_mld;
/
CREATE OR REPLACE PROCEDURE fac_import_mld_del (
p_import_key IN NUMBER
) IS
BEGIN
fac_import_mld(p_import_key);
END fac_import_mld_del;
/
CREATE OR REPLACE PROCEDURE fac_update_mld_del (
p_import_key IN NUMBER
) IS
BEGIN
fac.imp_mld_delete_mld(p_import_key, NULL);
fac_update_mld(p_import_key);
END fac_update_mld_del;
/
CREATE OR REPLACE PROCEDURE fac_import_mldafmtxt (p_import_key IN NUMBER)
IS
c_delim VARCHAR2 (2) := fac.import_delimiter(p_import_key);
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200) := '';
header_is_valid NUMBER := 0;
v_count_tot NUMBER (10) := 0;
v_count_import NUMBER (10) := 0;
v_ongeldig NUMBER (1);
-- De importvelden:
v_afmeldtekst_naam VARCHAR2 (256); -- C60
v_afmeldtekst_oms VARCHAR2 (4000); -- C1000
v_discipline_key VARCHAR2 (256); -- N10
v_stdmelding_key VARCHAR2 (256); -- N10
v_afmeldtekst_usefor VARCHAR2 (256); -- N1
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
DELETE FROM fac_imp_mldafmtxt;
COMMIT;
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_errormsg := 'Fout bij opvragen importregel';
v_aanduiding := '';
v_ongeldig := 0;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_delim, v_afmeldtekst_naam);
fac.imp_getfield (v_newline, c_delim, v_afmeldtekst_oms);
fac.imp_getfield (v_newline, c_delim, v_discipline_key);
fac.imp_getfield (v_newline, c_delim, v_stdmelding_key);
fac.imp_getfield (v_newline, c_delim, v_afmeldtekst_usefor);
v_aanduiding := '[' || v_afmeldtekst_naam || '] ';
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
IF (header_is_valid = 0)
THEN
IF UPPER (v_afmeldtekst_naam) = 'AFMELDTEKSTNAAM'
AND UPPER (v_afmeldtekst_oms) = 'AFMELDTEKSTOMSCHRIJVING'
AND UPPER (v_discipline_key) = 'DISCIPLINE_KEY'
AND UPPER (v_stdmelding_key) = 'STDMELDING_KEY'
AND UPPER (v_afmeldtekst_usefor) = 'AFMELDTEKSTUSEFOR'
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
v_errormsg := 'Afmeldtekstnaam ongeldig/ongedefinieerd of te lang';
v_afmeldtekst_naam := TRIM (v_afmeldtekst_naam);
IF v_afmeldtekst_naam IS NULL OR LENGTH (v_afmeldtekst_naam) > 60
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
END IF;
--
v_errormsg := 'Afmeldtekstomschrijving ongeldig/ongedefinieerd of te lang';
v_afmeldtekst_oms := TRIM (v_afmeldtekst_oms);
IF v_afmeldtekst_oms IS NULL OR LENGTH (v_afmeldtekst_oms) > 1000
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
END IF;
--
v_errormsg := 'Discipline-key ongeldig';
v_discipline_key := TRIM (v_discipline_key);
IF (v_discipline_key IS NOT NULL
AND fac.safe_to_number (v_discipline_key) IS NULL)
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Discipline-key wordt genegeerd!');
END IF;
--
v_errormsg := 'Soortmelding-key ongeldig';
v_stdmelding_key := TRIM (v_stdmelding_key);
IF (v_stdmelding_key IS NOT NULL
AND fac.safe_to_number (v_stdmelding_key) IS NULL)
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Soortmelding-key wordt genegeerd!');
END IF;
--
v_errormsg := 'afmeldtekstusefor ongeldig/ongedefinieerd';
v_afmeldtekst_usefor := TRIM (v_afmeldtekst_usefor);
IF v_afmeldtekst_usefor IS NULL OR v_afmeldtekst_usefor < 1 OR v_afmeldtekst_usefor > 4
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
END IF;
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
BEGIN
v_errormsg := 'Fout bij wegschrijven importregel';
INSERT INTO fac_imp_mldafmtxt (mld_afmeldtekst_naam,
mld_afmeldtekst_omschrijving,
ins_discipline_key,
mld_stdmelding_key,
mld_afmeldtekst_usefor)
VALUES (v_afmeldtekst_naam,
v_afmeldtekst_oms,
fac.safe_to_number (v_discipline_key),
fac.safe_to_number (v_stdmelding_key),
v_afmeldtekst_usefor);
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'');
END;
COMMIT;
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!');
ELSE
fac.imp_writelog (
p_import_key,
'S',
'Afmeldteksten: #ingelezen importregels = '
|| TO_CHAR (v_count_tot),
'');
fac.imp_writelog (
p_import_key,
'S',
'Afmeldteksten: #ongeldige importregels = '
|| TO_CHAR (v_count_tot - v_count_import),
'');
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Inleesproces afmeldteksten afgebroken!');
END fac_import_mldafmtxt;
/
CREATE OR REPLACE PROCEDURE fac_update_mldafmtxt (p_import_key IN NUMBER)
AS
-- Cursor loopt over de voorkomende (unieke) tabelnamen.
CURSOR c1
IS
SELECT * FROM fac_imp_mldafmtxt;
v_errormsg VARCHAR2 (1000) := '';
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count NUMBER (10);
v_count_tot NUMBER (10);
v_count_upd NUMBER (10);
BEGIN
v_count_tot := 0;
v_count_upd := 0;
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_errormsg :=
'Fout bij bepalen bestaan afmeldtekst [' || rec.mld_afmeldtekst_naam || '] ';
SELECT COUNT ( * )
INTO v_count
FROM mld_afmeldtekst
WHERE UPPER (mld_afmeldtekst_naam) = UPPER (rec.mld_afmeldtekst_naam);
IF (v_count = 0)
THEN
v_errormsg :=
'Fout bij toevoegen afmeldtekst [' || rec.mld_afmeldtekst_naam || '] ';
INSERT INTO mld_afmeldtekst (mld_afmeldtekst_naam,
mld_afmeldtekst_omschrijving,
mld_ins_discipline_key,
mld_stdmelding_key,
mld_afmeldtekst_usefor)
VALUES (rec.mld_afmeldtekst_naam,
rec.mld_afmeldtekst_omschrijving,
rec.ins_discipline_key,
rec.mld_stdmelding_key,
rec.mld_afmeldtekst_usefor);
ELSE
v_errormsg :=
'Fout bij bijwerken afmeldtekst [' || rec.mld_afmeldtekst_naam || '] ';
UPDATE mld_afmeldtekst
SET mld_afmeldtekst_omschrijving = rec.mld_afmeldtekst_omschrijving,
mld_ins_discipline_key = rec.ins_discipline_key,
mld_stdmelding_key = rec.mld_stdmelding_key,
mld_afmeldtekst_usefor = rec.mld_afmeldtekst_usefor
WHERE UPPER (mld_afmeldtekst_naam) = UPPER (rec.mld_afmeldtekst_naam);
END IF;
COMMIT;
v_count_upd := v_count_upd + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg || 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
'');
COMMIT;
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'Afmeldteksten: #ingelezen = ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (p_import_key,
'S',
'Afmeldteksten: #toegevoegd/bijgewerkt = ' || TO_CHAR (v_count_upd),
'');
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg || 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
'Importproces afmeldteksten afgebroken!');
END fac_update_mldafmtxt;
/
CREATE OR REPLACE PROCEDURE fac_import_ins (p_import_key IN NUMBER)
AS
-- Standaard volgorde van de kolommen in het CSV-formaat, waarbij 3 velden VERPLICHT (minimaal door Facilitor vereist)
-- Variabelelijst
--v_ins_discipline_omschrijving: 1 (VERPLICHT)
--v_ins_discipline_kostensoort: 2
--v_ins_srtgroep_omschrijving: 3 (VERPLICHT)
--v_ins_srtdeel_code: 4 (VERPLICHT)
--v_ins_srtdeel_omschrijving: 5 (VERPLICHT)
--v_ins_deel_omschrijving: 6 (VERPLICHT)
--v_ins_deel_opmerking: 7
--v_reserveerbaar: 8
--v_res_deel_eenheid: 9
--v_res_deel_prijs: 10
--v_alg_locatie_code: 11
--v_alg_gebouw_code: 12
--v_alg_verdieping_volgnr: 13
--v_alg_ruimte_nr: 14
--v_res_deel_alg_level: 15
--v_res_discipline_type: 16
--v_res_discipline_omschrijving: 17
--v_res_discipline_kostensoort: 18
--v_prs_perslid_matchcode: 19
--v_prs_perslid_matchwaarde: 20
--v_ins_deel_aanmaak: 21
--v_ins_deel_vervaldatum: 22
--v_ins_deel_aantal: 23
--v_ins_deel_externnr: 24
--v_ins_srtdeel_omschr_parent 25
--v_ins_deel_omschr_parent 26
--v_ins_kenmerkwaarde1: 27
--v_ins_kenmerkwaarde2: 28
--v_ins_kenmerkwaarde3: 29
--v_ins_kenmerkwaarde4: 30
--v_ins_kenmerkwaarde5: 31
--v_ins_kenmerkwaarde6: 32
--v_ins_kenmerkwaarde7: 33
--v_ins_kenmerkwaarde8: 34
--v_ins_kenmerkwaarde9: 35
--v_ins_kenmerkwaarde10: 36
--v_ins_kenmerkwaarde11: 37
--v_ins_kenmerkwaarde12: 38
--v_ins_kenmerkwaarde13: 39
--v_ins_kenmerkwaarde14: 40
--v_ins_kenmerkwaarde15: 41
--v_ins_kenmerkwaarde16: 42
--v_ins_kenmerkwaarde17: 43
--v_ins_kenmerkwaarde18: 44
--v_ins_kenmerkwaarde19: 45
--v_ins_kenmerkwaarde20: 46
-- Via een string, en ook op slimme wijze, nl alsof het een ingelezen deel-record is met p_fielddelimitor
v_seq_of_columns VARCHAR(255); -- (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46);
-- Afwijkingen op deze volgorde zijn in eigen cust_import_factuur te regelen.
-- Als discipline_omschrijving en discipline_kostensoort b.v. zijn omgedraaid in het CSV-formaat,
-- dan is de lijst van integers: v_seq_of_columns := "2,1,3,4,5,6,7,8,9,10,11,12.....";
-- Als discipline_omschrijving NIET in CSV staat, dan factuurimport v_seq_of_columns := "0,2,3,4,5,6,7,8,9,10,11,12.....";
-- v_seq_of_columns := "0;2;3;4;5;6;7;8;9;10;11;12.....";
-- M.a.w. waar een 0 staat, wordt de variabele niet ingelezen en blijft LEEG.
BEGIN
v_seq_of_columns := '1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33;34;35;36;37;38;39;40;41;42;43;44;45;46';
fac_import_ins_body(p_import_key, v_seq_of_columns);
END;
/
--//////////////////////////////////////////////////INS IMPORT STUFF///////////////////////////////////////////
CREATE OR REPLACE PROCEDURE fac_import_ins_body (p_import_key IN NUMBER, p_seq_of_columns IN VARCHAR2)
IS
v_fielddelimitor VARCHAR2 (2) := fac.import_delimiter(p_import_key);
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- 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_tot NUMBER (10);
v_count_import NUMBER (10);
v_ongeldig NUMBER (1);
v_aanduiding VARCHAR (400);
v_ins_kenmerk_key1 VARCHAR2 (255);
v_ins_kenmerk_key2 VARCHAR2 (255);
v_ins_kenmerk_key3 VARCHAR2 (255);
v_ins_kenmerk_key4 VARCHAR2 (255);
v_ins_kenmerk_key5 VARCHAR2 (255);
v_ins_kenmerk_key6 VARCHAR2 (255);
v_ins_kenmerk_key7 VARCHAR2 (255);
v_ins_kenmerk_key8 VARCHAR2 (255);
v_ins_kenmerk_key9 VARCHAR2 (255);
v_ins_kenmerk_key10 VARCHAR2 (255);
v_ins_kenmerk_key11 VARCHAR2 (255);
v_ins_kenmerk_key12 VARCHAR2 (255);
v_ins_kenmerk_key13 VARCHAR2 (255);
v_ins_kenmerk_key14 VARCHAR2 (255);
v_ins_kenmerk_key15 VARCHAR2 (255);
v_ins_kenmerk_key16 VARCHAR2 (255);
v_ins_kenmerk_key17 VARCHAR2 (255);
v_ins_kenmerk_key18 VARCHAR2 (255);
v_ins_kenmerk_key19 VARCHAR2 (255);
v_ins_kenmerk_key20 VARCHAR2 (255);
-- De importvelden
v_ins_discipline_omschrijving VARCHAR2 (255); -- C60
v_ins_discipline_kostensoort VARCHAR2 (255); --C60
v_ins_srtgroep_omschrijving VARCHAR2 (255); -- C60
v_ins_srtdeel_code VARCHAR2 (255); -- C10
v_ins_srtdeel_omschrijving VARCHAR2 (255); -- C100
v_ins_deel_omschrijving VARCHAR2 (255); -- C60
v_ins_deel_opmerking VARCHAR2 (1000); -- C320
v_reserveerbaar VARCHAR2 (255); -- C1
v_reserveerbaar_n NUMBER (1); -- N1
v_res_deel_eenheid VARCHAR2 (255); -- C10
v_res_deel_prijs VARCHAR2 (255); -- N7,2
v_res_deel_prijs_n NUMBER (7, 2); -- N7,2
v_alg_locatie_code VARCHAR2 (255); -- C10
v_alg_gebouw_code VARCHAR2 (255); -- C12
v_alg_verdieping_volgnr VARCHAR2 (255); -- N3
v_alg_verdieping_volgnr_n NUMBER (3); -- N3
v_alg_ruimte_nr VARCHAR2 (255); -- C20
v_res_deel_alg_level VARCHAR2 (255); -- C1 (naar -1 t/m 5)
v_res_deel_alg_level_n NUMBER (1); -- N1
v_res_discipline_type VARCHAR2 (255); -- C60
v_res_discipline_omschrijving VARCHAR2 (255); -- C60
v_res_discipline_kostensoort VARCHAR2 (255); -- C60
v_prs_perslid_matchcode VARCHAR2 (4000);
v_prs_perslid_matchwaarde VARCHAR2 (4000);
v_ins_srtdeel_omschr_parent VARCHAR2 (255); -- C100
v_ins_deel_omschr_parent VARCHAR2 (255); -- C60
v_ins_kenmerkwaarde1 VARCHAR2 (4053);
v_ins_kenmerkwaarde2 VARCHAR2 (4053);
v_ins_kenmerkwaarde3 VARCHAR2 (4053);
v_ins_kenmerkwaarde4 VARCHAR2 (4053);
v_ins_kenmerkwaarde5 VARCHAR2 (4053);
v_ins_kenmerkwaarde6 VARCHAR2 (4053);
v_ins_kenmerkwaarde7 VARCHAR2 (4053);
v_ins_kenmerkwaarde8 VARCHAR2 (4053);
v_ins_kenmerkwaarde9 VARCHAR2 (4053);
v_ins_kenmerkwaarde10 VARCHAR2 (4053);
v_ins_kenmerkwaarde11 VARCHAR2 (4053);
v_ins_kenmerkwaarde12 VARCHAR2 (4053);
v_ins_kenmerkwaarde13 VARCHAR2 (4053);
v_ins_kenmerkwaarde14 VARCHAR2 (4053);
v_ins_kenmerkwaarde15 VARCHAR2 (4053);
v_ins_kenmerkwaarde16 VARCHAR2 (4053);
v_ins_kenmerkwaarde17 VARCHAR2 (4053);
v_ins_kenmerkwaarde18 VARCHAR2 (4053);
v_ins_kenmerkwaarde19 VARCHAR2 (4053);
v_ins_kenmerkwaarde20 VARCHAR2 (4053);
v_ins_deel_aanmaak VARCHAR2 (255); -- DATE
v_ins_deel_aanmaak_d DATE;
v_ins_deel_vervaldatum VARCHAR2 (255); -- DATE
v_ins_deel_vervaldatum_d DATE;
v_ins_deel_aantal VARCHAR2 (255); -- N8,2
v_ins_deel_aantal_n NUMBER(8, 2);
v_ins_deel_externnr VARCHAR2 (400);
v_file_index NUMBER;
v_seq_of_columns VARCHAR2(255);
v_colnr VARCHAR2 (2);
v_colnr1 NUMBER;
v_colnr2 NUMBER;
v_colnr3 NUMBER;
v_colnr4 NUMBER;
v_colnr5 NUMBER;
v_colnr6 NUMBER;
v_colnr7 NUMBER;
v_colnr8 NUMBER;
v_colnr9 NUMBER;
v_colnr10 NUMBER;
v_colnr11 NUMBER;
v_colnr12 NUMBER;
v_colnr13 NUMBER;
v_colnr14 NUMBER;
v_colnr15 NUMBER;
v_colnr16 NUMBER;
v_colnr17 NUMBER;
v_colnr18 NUMBER;
v_colnr19 NUMBER;
v_colnr20 NUMBER;
v_colnr21 NUMBER;
v_colnr22 NUMBER;
v_colnr23 NUMBER;
v_colnr24 NUMBER;
v_colnr25 NUMBER;
v_colnr26 NUMBER;
v_colnr27 NUMBER;
v_colnr28 NUMBER;
v_colnr29 NUMBER;
v_colnr30 NUMBER;
v_colnr31 NUMBER;
v_colnr32 NUMBER;
v_colnr33 NUMBER;
v_colnr34 NUMBER;
v_colnr35 NUMBER;
v_colnr36 NUMBER;
v_colnr37 NUMBER;
v_colnr38 NUMBER;
v_colnr39 NUMBER;
v_colnr40 NUMBER;
v_colnr41 NUMBER;
v_colnr42 NUMBER;
v_colnr43 NUMBER;
v_colnr44 NUMBER;
v_colnr45 NUMBER;
v_colnr46 NUMBER;
-- Overige velden:
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
-- Controleer tijdens import-fase alleen op het bestaan van een kenmerk met de meegegeven omschrijving of kenmerk key.
-- De omschrijving (header van kolom) kan de omschrijving zijn van het kenmerksoort of het kenmerk.
-- De omschrijving van het kenmerksoort kan namelijk overruled worden door de omschrijving van het kenmerk.
-- Daarnaast kan hetzelfde kenmerk vaker voorkomen voor verschillende groepen.
-- Of het kenmerksoort/kenmerk wel is gedefinieerd voor de betreffende
-- object-discipline/groep/soort, volgt pas tijdens de update-fase)!
--
-- p_kw is bijvoorbeeld 'Parkeercode', 'Parkeercode|3', 234 of 234|3 waarbij de tweede en laatste in groep 3 zitten
-- het resultaat is NULL (als niet gevonden) of Parkeercode|3 of 234|3 voor kenmer_key 234 in groep 3
-- Als geen groep is meegegeven dan wordt 'Parkeercode|0' opgeleverd (de default groep)
FUNCTION bepaal_kenmerk (p_kw IN VARCHAR)
RETURN VARCHAR
IS
v_kenmerk_key NUMBER;
v_kenmerk_groep NUMBER;
v_kw VARCHAR(250);
BEGIN
v_kenmerk_groep := 0;
v_kw := p_kw;
IF INSTR (v_kw, '|') > 1
THEN
v_kenmerk_groep := SUBSTR (v_kw, INSTR (v_kw, '|') + 1);
v_kw := SUBSTR (v_kw, 1, INSTR (v_kw, '|') - 1);
END IF;
IF fac.safe_to_number (v_kw) IS NULL
THEN -- kenmerkwaarde is alfanumeriek (dus omschrijving)!
SELECT MIN(k.ins_kenmerk_key)
INTO v_kenmerk_key
FROM ins_v_aanwezigkenmerk k,
ins_v_aanwezigsrtkenmerk sk
WHERE k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key
AND k.ins_kenmerk_groep = v_kenmerk_groep
AND COALESCE(UPPER(k.ins_kenmerk_omschrijving), sk.ins_srtkenmerk_upper) = UPPER(v_kw)
AND sk.ins_srtkenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'r', 'S', 'X', 'V');
ELSE -- kenmerkwaarde is numeriek (dus key)!
SELECT k.ins_kenmerk_key
INTO v_kenmerk_key
FROM ins_v_aanwezigkenmerk k,
ins_v_aanwezigsrtkenmerk sk
WHERE k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key
AND k.ins_kenmerk_groep = v_kenmerk_groep
AND k.ins_kenmerk_key = fac.safe_to_number (v_kw)
AND sk.ins_srtkenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'r', 'S', 'X', 'V');
END IF;
IF v_kenmerk_key IS NULL
THEN
RETURN NULL;
ELSE
-- Er is een kenmerksoort of kenmerk aanwezig met de omschrijving/kenmerk_key (v_kw)
RETURN v_kw || '|' || TO_CHAR(v_kenmerk_groep);
END IF;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
IF p_kw IS NULL OR UPPER (p_kw) LIKE 'KENMERK%'
THEN
RETURN NULL;
ELSE
fac.imp_writelog (p_import_key,
'W',
'Fout bij bepalen kenmerk [' || p_kw || ']',
'Bestaat niet of type ongeldig');
COMMIT;
RETURN NULL;
END IF;
END;
BEGIN
-- Eerst opruiming
DELETE FROM fac_imp_ins;
COMMIT;
v_count_tot := 0;
v_count_import := 0;
header_is_valid := 0;
v_prs_perslid_matchcode := '';
-- Init
v_seq_of_columns := p_seq_of_columns;
v_errorhint := 'Bepalen volgorde kolommen';
-- De volgorde van de te importeren kolommen in de CSV uitlezen uit v_seq_of_columns
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr1);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr2);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr3);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr4);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr5);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr6);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr7);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr8);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr9);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr10);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr11);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr12);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr13);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr14);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr15);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr16);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr17);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr18);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr19);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr20);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr21);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr22);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr23);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr24);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr25);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr26);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr27);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr28);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr29);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr30);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr31);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr32);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr33);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr34);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr35);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr36);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr37);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr38);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr39);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr40);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr41);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr42);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr43);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr44);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr45);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr46);
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_file_index := rec1.fac_imp_file_index;
v_errormsg := 'Fout bij opvragen importregel';
v_aanduiding := '';
v_ongeldig := 0;
-- Lees alle veldwaarden
v_aanduiding := 'Inlezen ins_discipline_omschrijving kolom:' || v_colnr1;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr1), v_ins_discipline_omschrijving);
v_aanduiding := 'Inlezen ins_discipline_kostensoort kolom:' || v_colnr2;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr2), v_ins_discipline_kostensoort);
v_aanduiding := 'Inlezen ins_srtgroep_omschrijving kolom:' || v_colnr3;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr3), v_ins_srtgroep_omschrijving);
v_aanduiding := 'Inlezen ins_srtdeel_code kolom:' || v_colnr4;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr4), v_ins_srtdeel_code);
v_aanduiding := 'Inlezen ins_srtdeel_omschrijving kolom:' || v_colnr5;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr5), v_ins_srtdeel_omschrijving);
v_aanduiding := 'Inlezen ins_deel_omschrijving kolom:' || v_colnr6;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr6), v_ins_deel_omschrijving);
v_aanduiding := 'Inlezen ins_deel_opmerking kolom:' || v_colnr7;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr7), v_ins_deel_opmerking);
v_aanduiding := 'Inlezen reserveerbaar kolom:' || v_colnr8;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr8), v_reserveerbaar);
v_aanduiding := 'Inlezen res_deel_eenheid kolom:' || v_colnr9;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr9), v_res_deel_eenheid);
v_aanduiding := 'Inlezen res_deel_prijs kolom:' || v_colnr10;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr10), v_res_deel_prijs);
v_aanduiding := 'Inlezen alg_locatie_code kolom:' || v_colnr11;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr11), v_alg_locatie_code);
v_aanduiding := 'Inlezen alg_gebouw_code kolom:' || v_colnr12;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr12), v_alg_gebouw_code);
v_aanduiding := 'Inlezen alg_verdieping_volgnr kolom:' || v_colnr13;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr13), v_alg_verdieping_volgnr);
v_aanduiding := 'Inlezen alg_ruimte_nr kolom:' || v_colnr14;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr14), v_alg_ruimte_nr);
v_aanduiding := 'Inlezen res_deel_alg_level kolom:' || v_colnr15;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr15), v_res_deel_alg_level);
v_aanduiding := 'Inlezen v_res_discipline_type kolom:' || v_colnr16;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr16), v_res_discipline_type);
v_aanduiding := 'Inlezen v_res_discipline_omschrijving kolom:' || v_colnr17;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr17), v_res_discipline_omschrijving);
v_aanduiding := 'Inlezen v_res_discipline_kostensoort kolom:' || v_colnr18;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr18), v_res_discipline_kostensoort);
v_aanduiding := 'Inlezen v_prs_perslid_matchcode kolom:' || v_colnr19;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr19), v_prs_perslid_matchcode);
v_aanduiding := 'Inlezen v_prs_perslid_matchwaarde kolom:' || v_colnr20;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr20), v_prs_perslid_matchwaarde);
v_aanduiding := 'Inlezen v_ins_deel_aanmaak kolom:' || v_colnr21;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr21), v_ins_deel_aanmaak);
v_aanduiding := 'Inlezen v_ins_deel_vervaldatum kolom:' || v_colnr22;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr22), v_ins_deel_vervaldatum);
v_aanduiding := 'Inlezen v_ins_deel_aantal kolom:' || v_colnr23;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr23), v_ins_deel_aantal);
v_aanduiding := 'Inlezen v_ins_deel_externnr kolom:' || v_colnr24;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr24), v_ins_deel_externnr);
v_aanduiding := 'Inlezen parent ins_srtdeel_omschrijving kolom:' || v_colnr25;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr25), v_ins_srtdeel_omschr_parent);
v_aanduiding := 'Inlezen parent ins_deel_omschrijving kolom:' || v_colnr26;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr26), v_ins_deel_omschr_parent);
v_aanduiding := 'Inlezen kenmerk1 kolom:' || v_colnr27;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr27), v_ins_kenmerkwaarde1);
v_aanduiding := 'Inlezen kenmerk2 kolom:' || v_colnr28;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr28), v_ins_kenmerkwaarde2);
v_aanduiding := 'Inlezen kenmerk3 kolom:' || v_colnr29;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr29), v_ins_kenmerkwaarde3);
v_aanduiding := 'Inlezen kenmerk4 kolom:' || v_colnr30;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr30), v_ins_kenmerkwaarde4);
v_aanduiding := 'Inlezen kenmerk5 kolom:' || v_colnr31;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr31), v_ins_kenmerkwaarde5);
v_aanduiding := 'Inlezen kenmerk6 kolom:' || v_colnr32;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr32), v_ins_kenmerkwaarde6);
v_aanduiding := 'Inlezen kenmerk7 kolom:' || v_colnr33;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr33), v_ins_kenmerkwaarde7);
v_aanduiding := 'Inlezen kenmerk8 kolom:' || v_colnr34;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr34), v_ins_kenmerkwaarde8);
v_aanduiding := 'Inlezen kenmerk9 kolom:' || v_colnr35;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr35), v_ins_kenmerkwaarde9);
v_aanduiding := 'Inlezen kenmerk10 kolom:' || v_colnr36;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr36), v_ins_kenmerkwaarde10);
v_aanduiding := 'Inlezen kenmerk11 kolom:' || v_colnr37;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr37), v_ins_kenmerkwaarde11);
v_aanduiding := 'Inlezen kenmerk12 kolom:' || v_colnr38;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr38), v_ins_kenmerkwaarde12);
v_aanduiding := 'Inlezen kenmerk13 kolom:' || v_colnr39;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr39), v_ins_kenmerkwaarde13);
v_aanduiding := 'Inlezen kenmerk14 kolom:' || v_colnr40;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr40), v_ins_kenmerkwaarde14);
v_aanduiding := 'Inlezen kenmerk15 kolom:' || v_colnr41;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr41), v_ins_kenmerkwaarde15);
v_aanduiding := 'Inlezen kenmerk16 kolom:' || v_colnr42;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr42), v_ins_kenmerkwaarde16);
v_aanduiding := 'Inlezen kenmerk17 kolom:' || v_colnr43;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr43), v_ins_kenmerkwaarde17);
v_aanduiding := 'Inlezen kenmerk18 kolom:' || v_colnr44;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr44), v_ins_kenmerkwaarde18);
v_aanduiding := 'Inlezen kenmerk19 kolom:' || v_colnr45;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr45), v_ins_kenmerkwaarde19);
v_aanduiding := 'Inlezen kenmerk20 kolom:' || v_colnr46;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr46), v_ins_kenmerkwaarde20);
v_aanduiding :=
'['
|| v_ins_discipline_omschrijving
|| '|'
|| v_ins_srtgroep_omschrijving
|| '|'
|| v_ins_srtdeel_code
|| '|'
|| v_ins_srtdeel_omschrijving
|| '|'
|| v_ins_deel_omschrijving
|| '] ';
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop. Ik controleer daarbij alle NIET-kenmerk kolommen!
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
IF (header_is_valid = 0)
THEN
IF UPPER (v_ins_discipline_omschrijving) = 'DISCIPLINEOMSCHRIJVING'
AND UPPER (v_ins_discipline_kostensoort) = 'DISCIPLINEKOSTENSOORT'
AND UPPER (v_ins_srtgroep_omschrijving) = 'GROEPSOORTOMSCHRIJVING'
AND UPPER (v_ins_srtdeel_code) = 'OBJECTSOORTCODE'
AND UPPER (v_ins_srtdeel_omschrijving) = 'OBJECTSOORTOMSCHRIJVING'
AND UPPER (v_ins_deel_omschrijving) = 'OBJECTIDENTIFICATIE'
AND UPPER (v_ins_deel_opmerking) = 'OBJECTOPMERKING'
AND UPPER (v_reserveerbaar) = 'RESERVEERBAAR'
AND UPPER (v_res_deel_eenheid) = 'EENHEID'
AND UPPER (v_res_deel_prijs) = 'PRIJS'
AND UPPER (v_alg_locatie_code) = 'LOCATIECODE'
AND UPPER (v_alg_gebouw_code) = 'GEBOUWCODE'
AND UPPER (v_alg_verdieping_volgnr) = 'BOUWLAAGVOLGNUMMER'
AND UPPER (v_alg_ruimte_nr) = 'RUIMTENUMMER'
AND UPPER (v_res_deel_alg_level) = 'RESERVERINGSCOPE'
AND UPPER (v_res_discipline_type) = 'CATALOGUSTYPE'
AND UPPER (v_res_discipline_omschrijving) = 'CATALOGUSNAAM'
AND UPPER (v_res_discipline_kostensoort) = 'CATALOGUSKOSTENSOORT'
AND UPPER (v_prs_perslid_matchcode) = 'PERSOONMATCHCODE'
AND UPPER (v_prs_perslid_matchwaarde) = 'PERSOONMATCHWAARDE'
AND UPPER (v_ins_deel_aanmaak) = 'INGANGSDATUM'
AND UPPER (v_ins_deel_vervaldatum) = 'VERVALDATUM'
AND UPPER (v_ins_deel_aantal) = 'AANTAL'
AND UPPER (v_ins_deel_externnr) = 'EXTERNNR'
AND UPPER (v_ins_srtdeel_omschr_parent) = 'PARENTOBJECTSOORTOMSCHR'
AND UPPER (v_ins_deel_omschr_parent) = 'PARENTOBJECTIDENTIFICATIE'
THEN
v_ins_kenmerk_key1 := bepaal_kenmerk (v_ins_kenmerkwaarde1);
v_ins_kenmerk_key2 := bepaal_kenmerk (v_ins_kenmerkwaarde2);
v_ins_kenmerk_key3 := bepaal_kenmerk (v_ins_kenmerkwaarde3);
v_ins_kenmerk_key4 := bepaal_kenmerk (v_ins_kenmerkwaarde4);
v_ins_kenmerk_key5 := bepaal_kenmerk (v_ins_kenmerkwaarde5);
v_ins_kenmerk_key6 := bepaal_kenmerk (v_ins_kenmerkwaarde6);
v_ins_kenmerk_key7 := bepaal_kenmerk (v_ins_kenmerkwaarde7);
v_ins_kenmerk_key8 := bepaal_kenmerk (v_ins_kenmerkwaarde8);
v_ins_kenmerk_key9 := bepaal_kenmerk (v_ins_kenmerkwaarde9);
v_ins_kenmerk_key10 := bepaal_kenmerk (v_ins_kenmerkwaarde10);
v_ins_kenmerk_key11 := bepaal_kenmerk (v_ins_kenmerkwaarde11);
v_ins_kenmerk_key12 := bepaal_kenmerk (v_ins_kenmerkwaarde12);
v_ins_kenmerk_key13 := bepaal_kenmerk (v_ins_kenmerkwaarde13);
v_ins_kenmerk_key14 := bepaal_kenmerk (v_ins_kenmerkwaarde14);
v_ins_kenmerk_key15 := bepaal_kenmerk (v_ins_kenmerkwaarde15);
v_ins_kenmerk_key16 := bepaal_kenmerk (v_ins_kenmerkwaarde16);
v_ins_kenmerk_key17 := bepaal_kenmerk (v_ins_kenmerkwaarde17);
v_ins_kenmerk_key18 := bepaal_kenmerk (v_ins_kenmerkwaarde18);
v_ins_kenmerk_key19 := bepaal_kenmerk (v_ins_kenmerkwaarde19);
v_ins_kenmerk_key20 := bepaal_kenmerk (v_ins_kenmerkwaarde20);
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
v_errormsg := 'Disciplineomschrijving ongeldig';
v_ins_discipline_omschrijving :=
TRIM (v_ins_discipline_omschrijving);
IF v_ins_discipline_omschrijving IS NULL
OR LENGTH (v_ins_discipline_omschrijving) > 60
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
--
v_errormsg := 'Kostensoort ongeldig';
v_ins_discipline_kostensoort :=
TRIM (v_ins_discipline_kostensoort);
IF LENGTH (v_ins_discipline_kostensoort) > 60
THEN
v_ins_discipline_kostensoort :=
SUBSTR (v_ins_discipline_kostensoort, 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Disciplinekostensoort wordt afgebroken tot ['
|| v_ins_discipline_kostensoort
|| ']'
);
END IF;
--
v_errormsg := 'Groepsoortomschrijving ongeldig';
v_ins_srtgroep_omschrijving := TRIM (v_ins_srtgroep_omschrijving);
IF v_ins_srtgroep_omschrijving IS NULL
OR LENGTH (v_ins_srtgroep_omschrijving) > 60
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
--
v_errormsg := 'Objectsoortcode ongeldig';
v_ins_srtdeel_code := TRIM (v_ins_srtdeel_code);
IF v_ins_srtdeel_code IS NULL OR LENGTH (v_ins_srtdeel_code) > 10
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
--
v_errormsg := 'Objectsoortomschrijving ongeldig';
v_ins_srtdeel_omschrijving := TRIM (v_ins_srtdeel_omschrijving);
IF v_ins_srtdeel_omschrijving IS NULL
OR LENGTH (v_ins_srtdeel_omschrijving) > 100
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
--
v_errormsg := 'Objectomschrijving ongeldig';
v_ins_deel_omschrijving := TRIM (v_ins_deel_omschrijving);
IF v_ins_deel_omschrijving IS NULL
OR LENGTH (v_ins_deel_omschrijving) > 60
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
--
v_errormsg := 'Objectopmerking ongeldig';
v_ins_deel_opmerking := TRIM (v_ins_deel_opmerking);
IF LENGTH (v_ins_deel_opmerking) > 320
THEN
v_ins_deel_opmerking := SUBSTR (v_ins_deel_opmerking, 1, 320);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Objectopmerking wordt afgebroken tot ['
|| v_ins_deel_opmerking
|| ']'
);
END IF;
-- Verder geen foutdetectie; kan dus stricter?
SELECT DECODE (SUBSTR (TRIM (UPPER (v_reserveerbaar)), 1, 1),
'J', 1,
0)
INTO v_reserveerbaar_n
FROM DUAL;
--
v_errormsg := 'Eenheid ongeldig';
v_res_deel_eenheid := TRIM (v_res_deel_eenheid);
IF LENGTH (v_res_deel_eenheid) > 10
THEN
v_res_deel_eenheid := SUBSTR (v_res_deel_eenheid, 1, 10);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Eenheid wordt afgebroken tot ['
|| v_res_deel_eenheid
|| ']'
);
END IF;
--
v_errormsg := 'Prijs ongeldig; maximale grootte 99999.99';
v_res_deel_prijs := TRIM (v_res_deel_prijs);
v_res_deel_prijs_n := NULL;
IF (v_res_deel_prijs IS NOT NULL)
THEN
IF (fac.safe_to_number (v_res_deel_prijs) IS NULL)
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
ELSE
v_res_deel_prijs_n := fac.safe_to_number (v_res_deel_prijs);
END IF;
END IF;
--
v_errormsg := 'Locatiecode ongeldig';
v_alg_locatie_code := TRIM (v_alg_locatie_code);
IF LENGTH (v_alg_locatie_code) > 10
THEN
v_alg_locatie_code := SUBSTR (v_alg_locatie_code, 1, 10);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Locatiecode wordt afgebroken tot ['
|| v_alg_locatie_code
|| ']'
);
END IF;
--
v_errormsg := 'Gebouwcode ongeldig';
v_alg_gebouw_code := TRIM (v_alg_gebouw_code);
IF LENGTH (v_alg_gebouw_code) > 12
THEN
v_alg_gebouw_code := SUBSTR (v_alg_gebouw_code, 1, 12);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Gebouwcode wordt afgebroken tot ['
|| v_alg_gebouw_code
|| ']'
);
END IF;
--
v_errormsg := 'Bouwlaagvolgnummer ongeldig';
v_alg_verdieping_volgnr := TRIM (v_alg_verdieping_volgnr);
v_alg_verdieping_volgnr_n := NULL;
IF (v_alg_verdieping_volgnr IS NOT NULL)
THEN
v_alg_verdieping_volgnr_n :=
ROUND (fac.safe_to_number (v_alg_verdieping_volgnr));
IF v_alg_verdieping_volgnr_n NOT BETWEEN -999 AND 999
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
ELSE
v_alg_verdieping_volgnr_n :=
fac.safe_to_number (v_alg_verdieping_volgnr);
END IF;
END IF;
--
v_errormsg := 'Ruimtenummer ongeldig';
v_alg_ruimte_nr := TRIM (v_alg_ruimte_nr);
IF LENGTH (v_alg_ruimte_nr) > 20
THEN
v_alg_ruimte_nr := SUBSTR (v_alg_ruimte_nr, 1, 20);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Ruimtenummer wordt afgebroken tot ['
|| v_alg_ruimte_nr
|| ']'
);
END IF;
-- Verder geen foutdetectie; kan dus stricter?
SELECT DECODE (SUBSTR (TRIM (v_res_deel_alg_level), 1, 1),
'E', 0,
'D', 1,
'L', 2,
'G', 3,
'V', 4,
'R', 5,
-1)
INTO v_res_deel_alg_level_n
FROM DUAL;
--
v_errormsg := 'Catalogustype ongeldig';
SELECT DECODE (SUBSTR(TRIM(v_res_discipline_type), 1, 1),
'R', '3',
'O', '1',
'V', '2',
'W', '5',
'P', '4',
'')
INTO v_res_discipline_type
FROM DUAL;
--
v_errormsg := 'Catalogusnaam ongeldig';
v_res_discipline_omschrijving :=
TRIM (v_res_discipline_omschrijving);
IF LENGTH (v_res_discipline_omschrijving) > 60
THEN
v_res_discipline_omschrijving :=
SUBSTR (TRIM (v_res_discipline_omschrijving), 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Catalogusnaam wordt afgebroken tot ['
|| v_res_discipline_omschrijving
|| ']'
);
END IF;
--
v_errormsg := 'Cataloguskostensoort ongeldig';
v_res_discipline_kostensoort :=
TRIM (v_res_discipline_kostensoort);
IF LENGTH (v_res_discipline_kostensoort) > 60
THEN
v_res_discipline_kostensoort :=
SUBSTR (TRIM (v_res_discipline_kostensoort), 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Cataloguskostensoort wordt afgebroken tot ['
|| v_res_discipline_kostensoort
|| ']'
);
END IF;
--
v_errormsg := 'Aantal ongeldig; maximale grootte 999999.99';
v_ins_deel_aantal := TRIM (v_ins_deel_aantal);
v_ins_deel_aantal := REPLACE (v_ins_deel_aantal, ',', '.');
v_ins_deel_aantal_n := NULL;
IF v_ins_deel_aantal IS NOT NULL
THEN
IF (fac.safe_to_number (v_ins_deel_aantal) IS NULL)
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
ELSE
v_ins_deel_aantal_n := fac.safe_to_number (v_ins_deel_aantal);
END IF;
ELSE
v_ins_deel_aantal_n := 1;
END IF;
--
v_errorhint := 'Ongeldige aanmaakdatum';
IF v_ins_deel_aanmaak IS NOT NULL
THEN
BEGIN
v_ins_deel_aanmaak_d :=
TO_DATE (v_ins_deel_aanmaak, 'dd-mm-yyyy');
EXCEPTION
WHEN OTHERS
THEN
v_ongeldig := 1;
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,
'Regel wordt overgeslagen!'
);
COMMIT;
END;
ELSE
v_ins_deel_aanmaak_d := NULL;
END IF;
--
v_errorhint := 'Ongeldige vervaldatum';
IF v_ins_deel_vervaldatum IS NOT NULL
THEN
BEGIN
v_ins_deel_vervaldatum_d :=
TO_DATE (v_ins_deel_vervaldatum, 'dd-mm-yyyy');
EXCEPTION
WHEN OTHERS
THEN
v_ongeldig := 1;
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,
'Regel wordt overgeslagen!'
);
COMMIT;
END;
ELSE
v_ins_deel_vervaldatum_d := NULL;
END IF;
--
v_errormsg := 'Externnr ongeldig';
v_ins_deel_externnr := TRIM (v_ins_deel_externnr);
IF LENGTH (v_ins_deel_externnr) > 255
THEN
v_ins_deel_externnr := SUBSTR (TRIM (v_ins_deel_externnr), 1, 255);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Externnr wordt afgebroken tot ['
|| v_ins_deel_externnr
|| ']'
);
END IF;
--
v_errormsg := 'Parent objectsoortomschrijving ongeldig';
v_ins_srtdeel_omschr_parent := TRIM (v_ins_srtdeel_omschr_parent);
IF LENGTH (v_ins_srtdeel_omschr_parent) > 100
THEN
v_ins_srtdeel_omschr_parent := SUBSTR (TRIM (v_ins_srtdeel_omschr_parent), 1, 255);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Parent objectsoortomschrijving wordt afgebroken tot ['
|| v_ins_srtdeel_omschr_parent
|| ']'
);
END IF;
--
v_errormsg := 'Parent objectomschrijving ongeldig';
v_ins_deel_omschr_parent := TRIM (v_ins_deel_omschr_parent);
IF LENGTH (v_ins_deel_omschr_parent) > 60
THEN
v_ins_deel_omschr_parent := SUBSTR (TRIM (v_ins_deel_omschr_parent), 1, 255);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Parent objectomschrijving wordt afgebroken tot ['
|| v_ins_deel_omschr_parent
|| ']'
);
END IF;
-- De rest alleen ff trimmen.
v_prs_perslid_matchcode := TRIM (v_prs_perslid_matchcode);
v_prs_perslid_matchwaarde := TRIM (v_prs_perslid_matchwaarde);
v_ins_kenmerkwaarde1 := TRIM (v_ins_kenmerkwaarde1);
v_ins_kenmerkwaarde2 := TRIM (v_ins_kenmerkwaarde2);
v_ins_kenmerkwaarde3 := TRIM (v_ins_kenmerkwaarde3);
v_ins_kenmerkwaarde4 := TRIM (v_ins_kenmerkwaarde4);
v_ins_kenmerkwaarde5 := TRIM (v_ins_kenmerkwaarde5);
v_ins_kenmerkwaarde6 := TRIM (v_ins_kenmerkwaarde6);
v_ins_kenmerkwaarde7 := TRIM (v_ins_kenmerkwaarde7);
v_ins_kenmerkwaarde8 := TRIM (v_ins_kenmerkwaarde8);
v_ins_kenmerkwaarde9 := TRIM (v_ins_kenmerkwaarde9);
v_ins_kenmerkwaarde10 := TRIM (v_ins_kenmerkwaarde10);
v_ins_kenmerkwaarde11 := TRIM (v_ins_kenmerkwaarde11);
v_ins_kenmerkwaarde12 := TRIM (v_ins_kenmerkwaarde12);
v_ins_kenmerkwaarde13 := TRIM (v_ins_kenmerkwaarde13);
v_ins_kenmerkwaarde14 := TRIM (v_ins_kenmerkwaarde14);
v_ins_kenmerkwaarde15 := TRIM (v_ins_kenmerkwaarde15);
v_ins_kenmerkwaarde16 := TRIM (v_ins_kenmerkwaarde16);
v_ins_kenmerkwaarde17 := TRIM (v_ins_kenmerkwaarde17);
v_ins_kenmerkwaarde18 := TRIM (v_ins_kenmerkwaarde18);
v_ins_kenmerkwaarde19 := TRIM (v_ins_kenmerkwaarde19);
v_ins_kenmerkwaarde20 := TRIM (v_ins_kenmerkwaarde20);
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
BEGIN
v_errormsg := 'Fout bij wegschrijven importregel';
-- Als uit kenmerkheader een geldige kenmerksoort-key volgt,
-- dan is kenmerkwaarde<n> gevuld met <key>=<waarde>; zoniet,
-- dan is kenmerkwaarde<n> gevuld met <waarde>!
-- NB. Een NULL-waarde resulteert NIET in het wissen van een
-- kenmerkveld (bijwerken kan wel, maar wissen dus niet)!
INSERT INTO fac_imp_ins (
ins_discipline_omschrijving,
ins_discipline_kostensoort,
ins_srtgroep_omschrijving,
ins_srtdeel_code,
ins_srtdeel_omschrijving,
ins_deel_omschrijving,
ins_deel_opmerking,
reserveerbaar,
res_deel_eenheid,
res_deel_prijs,
alg_locatie_code,
alg_gebouw_code,
alg_verdieping_volgnr,
alg_ruimte_nr,
res_deel_alg_level,
res_discipline_type,
res_discipline_omschrijving,
res_discipline_kostensoort,
prs_perslid_matchcode,
prs_perslid_matchwaarde,
ins_kenmerkwaarde1,
ins_kenmerkwaarde2,
ins_kenmerkwaarde3,
ins_kenmerkwaarde4,
ins_kenmerkwaarde5,
ins_kenmerkwaarde6,
ins_kenmerkwaarde7,
ins_kenmerkwaarde8,
ins_kenmerkwaarde9,
ins_kenmerkwaarde10,
ins_kenmerkwaarde11,
ins_kenmerkwaarde12,
ins_kenmerkwaarde13,
ins_kenmerkwaarde14,
ins_kenmerkwaarde15,
ins_kenmerkwaarde16,
ins_kenmerkwaarde17,
ins_kenmerkwaarde18,
ins_kenmerkwaarde19,
ins_kenmerkwaarde20,
ins_deel_aanmaak,
ins_deel_vervaldatum,
ins_deel_aantal,
ins_deel_externnr,
ins_srtdeel_omschr_parent,
ins_deel_omschr_parent
)
VALUES (
v_ins_discipline_omschrijving,
v_ins_discipline_kostensoort,
v_ins_srtgroep_omschrijving,
v_ins_srtdeel_code,
v_ins_srtdeel_omschrijving,
v_ins_deel_omschrijving,
v_ins_deel_opmerking,
v_reserveerbaar_n,
v_res_deel_eenheid,
v_res_deel_prijs_n,
v_alg_locatie_code,
v_alg_gebouw_code,
v_alg_verdieping_volgnr_n,
v_alg_ruimte_nr,
v_res_deel_alg_level_n,
v_res_discipline_type,
v_res_discipline_omschrijving,
v_res_discipline_kostensoort,
v_prs_perslid_matchcode,
v_prs_perslid_matchwaarde,
DECODE (v_ins_kenmerk_key1, NULL, v_ins_kenmerkwaarde1, TO_CHAR (v_ins_kenmerk_key1) || '=' || SUBSTR (v_ins_kenmerkwaarde1, 1, 3900)),
DECODE (v_ins_kenmerk_key2, NULL, v_ins_kenmerkwaarde2, TO_CHAR (v_ins_kenmerk_key2) || '=' || SUBSTR (v_ins_kenmerkwaarde2, 1, 3900)),
DECODE (v_ins_kenmerk_key3, NULL, v_ins_kenmerkwaarde3, TO_CHAR (v_ins_kenmerk_key3) || '=' || SUBSTR (v_ins_kenmerkwaarde3, 1, 3900)),
DECODE (v_ins_kenmerk_key4, NULL, v_ins_kenmerkwaarde4, TO_CHAR (v_ins_kenmerk_key4) || '=' || SUBSTR (v_ins_kenmerkwaarde4, 1, 3900)),
DECODE (v_ins_kenmerk_key5, NULL, v_ins_kenmerkwaarde5, TO_CHAR (v_ins_kenmerk_key5) || '=' || SUBSTR (v_ins_kenmerkwaarde5, 1, 3900)),
DECODE (v_ins_kenmerk_key6, NULL, v_ins_kenmerkwaarde6, TO_CHAR (v_ins_kenmerk_key6) || '=' || SUBSTR (v_ins_kenmerkwaarde6, 1, 3900)),
DECODE (v_ins_kenmerk_key7, NULL, v_ins_kenmerkwaarde7, TO_CHAR (v_ins_kenmerk_key7) || '=' || SUBSTR (v_ins_kenmerkwaarde7, 1, 3900)),
DECODE (v_ins_kenmerk_key8, NULL, v_ins_kenmerkwaarde8, TO_CHAR (v_ins_kenmerk_key8) || '=' || SUBSTR (v_ins_kenmerkwaarde8, 1, 3900)),
DECODE (v_ins_kenmerk_key9, NULL, v_ins_kenmerkwaarde9, TO_CHAR (v_ins_kenmerk_key9) || '=' || SUBSTR (v_ins_kenmerkwaarde9, 1, 3900)),
DECODE (v_ins_kenmerk_key10, NULL, v_ins_kenmerkwaarde10, TO_CHAR (v_ins_kenmerk_key10) || '=' || SUBSTR (v_ins_kenmerkwaarde10, 1, 3900)),
DECODE (v_ins_kenmerk_key11, NULL, v_ins_kenmerkwaarde11, TO_CHAR (v_ins_kenmerk_key11) || '=' || SUBSTR (v_ins_kenmerkwaarde11, 1, 3900)),
DECODE (v_ins_kenmerk_key12, NULL, v_ins_kenmerkwaarde12, TO_CHAR (v_ins_kenmerk_key12) || '=' || SUBSTR (v_ins_kenmerkwaarde12, 1, 3900)),
DECODE (v_ins_kenmerk_key13, NULL, v_ins_kenmerkwaarde13, TO_CHAR (v_ins_kenmerk_key13) || '=' || SUBSTR (v_ins_kenmerkwaarde13, 1, 3900)),
DECODE (v_ins_kenmerk_key14, NULL, v_ins_kenmerkwaarde14, TO_CHAR (v_ins_kenmerk_key14) || '=' || SUBSTR (v_ins_kenmerkwaarde14, 1, 3900)),
DECODE (v_ins_kenmerk_key15, NULL, v_ins_kenmerkwaarde15, TO_CHAR (v_ins_kenmerk_key15) || '=' || SUBSTR (v_ins_kenmerkwaarde15, 1, 3900)),
DECODE (v_ins_kenmerk_key16, NULL, v_ins_kenmerkwaarde16, TO_CHAR (v_ins_kenmerk_key16) || '=' || SUBSTR (v_ins_kenmerkwaarde16, 1, 3900)),
DECODE (v_ins_kenmerk_key17, NULL, v_ins_kenmerkwaarde17, TO_CHAR (v_ins_kenmerk_key17) || '=' || SUBSTR (v_ins_kenmerkwaarde17, 1, 3900)),
DECODE (v_ins_kenmerk_key18, NULL, v_ins_kenmerkwaarde18, TO_CHAR (v_ins_kenmerk_key18) || '=' || SUBSTR (v_ins_kenmerkwaarde18, 1, 3900)),
DECODE (v_ins_kenmerk_key19, NULL, v_ins_kenmerkwaarde19, TO_CHAR (v_ins_kenmerk_key19) || '=' || SUBSTR (v_ins_kenmerkwaarde19, 1, 3900)),
DECODE (v_ins_kenmerk_key20, NULL, v_ins_kenmerkwaarde20, TO_CHAR (v_ins_kenmerk_key20) || '=' || SUBSTR (v_ins_kenmerkwaarde20, 1, 3900)),
v_ins_deel_aanmaak_d,
v_ins_deel_vervaldatum_d,
v_ins_deel_aantal_n,
v_ins_deel_externnr,
v_ins_srtdeel_omschr_parent,
v_ins_deel_omschr_parent
);
COMMIT;
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'');
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!');
ELSE
fac.imp_writelog (
p_import_key,
'S',
'Objecten/aantal ingelezen importregels: ' || TO_CHAR (v_count_tot),
''
);
fac.imp_writelog (
p_import_key,
'S',
'Objecten/aantal ongeldige niet ingelezen importregels: '
|| TO_CHAR (v_count_tot - v_count_import),
''
);
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Inleesproces objecten afgebroken! regel:' || v_file_index);
END fac_import_ins_body;
/
CREATE OR REPLACE PROCEDURE fac_update_ins (p_import_key IN NUMBER)
AS
v_errormsg VARCHAR2 (1000) := '-';
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
-- SUBPROC
PROCEDURE add_kostensoort (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT prs_kostensoort_upper,
MAX (prs_kostensoort_omschrijving) prs_kostensoort_omschrijving
FROM ( SELECT UPPER (ins_discipline_kostensoort) prs_kostensoort_upper,
MAX (ins_discipline_kostensoort) prs_kostensoort_omschrijving
FROM fac_imp_ins
WHERE ins_discipline_kostensoort IS NOT NULL
GROUP BY UPPER (ins_discipline_kostensoort)
UNION ALL
SELECT UPPER (res_discipline_kostensoort) prs_kostensoort_upper,
MAX (res_discipline_kostensoort) prs_kostensoort_omschrijving
FROM fac_imp_ins
WHERE reserveerbaar = 1 AND res_discipline_kostensoort IS NOT NULL
GROUP BY UPPER (res_discipline_kostensoort))
GROUP BY prs_kostensoort_upper;
v_kostensoort_key NUMBER (10);
ccount NUMBER (10);
v_count_tot NUMBER (10);
v_count_update NUMBER (10);
BEGIN
v_count_tot := 0;
v_count_update := 0;
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_errormsg :=
'Fout bij toevoegen kostensoort [' || rec.prs_kostensoort_omschrijving || ']';
SELECT COUNT ( * )
INTO ccount
FROM prs_kostensoort
WHERE TRIM (prs_kostensoort_upper) = rec.prs_kostensoort_upper
AND prs_kostensoort_verwijder IS NULL;
IF ccount = 0
THEN
INSERT INTO prs_kostensoort (prs_kostensoort_oms)
VALUES (rec.prs_kostensoort_omschrijving);
v_count_update := v_count_update + 1;
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_errormsg,
'');
COMMIT;
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'Kostensoorten/aantal ingelezen: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (p_import_key,
'S',
'Kostensoorten/aantal toegevoegd: ' || TO_CHAR (v_count_update),
'');
COMMIT;
END;
-- SUBPROC
PROCEDURE add_insdiscipline (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT UPPER (ins_discipline_omschrijving) ins_discipline_upper,
UPPER (ins_discipline_kostensoort) ins_kostensoort_upper,
MAX (ins_discipline_omschrijving) ins_discipline_omschrijving
FROM fac_imp_ins
GROUP BY UPPER (ins_discipline_omschrijving), UPPER (ins_discipline_kostensoort);
v_discipline_key NUMBER (10);
v_kostensoort_key NUMBER (10);
ccount NUMBER (10);
v_count_tot NUMBER (10);
v_count_update NUMBER (10);
BEGIN
v_count_tot := 0;
v_count_update := 0;
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_errormsg :=
'Fout bij toevoegen INS-discipline [' || rec.ins_discipline_omschrijving || ']';
SELECT COUNT ( * )
INTO ccount
FROM ins_tab_discipline
WHERE ins_discipline_verwijder IS NULL
AND ins_discipline_module = 'INS'
AND UPPER (TRIM (ins_discipline_omschrijving)) = rec.ins_discipline_upper;
IF ccount = 0
THEN
IF rec.ins_kostensoort_upper IS NULL
THEN
v_kostensoort_key := NULL;
ELSE
SELECT prs_kostensoort_key
INTO v_kostensoort_key
FROM prs_kostensoort
WHERE TRIM (prs_kostensoort_upper) = rec.ins_kostensoort_upper
AND prs_kostensoort_verwijder IS NULL;
END IF;
INSERT INTO ins_tab_discipline (ins_discipline_module,
ins_discipline_omschrijving,
ins_discipline_min_level,
ins_discipline_kpnverplicht,
prs_kostensoort_key)
VALUES ('INS',
SUBSTR (rec.ins_discipline_omschrijving, 1, 60),
1,
0,
v_kostensoort_key)
RETURNING ins_discipline_key
INTO v_discipline_key;
INSERT INTO ins_disc_params (ins_discipline_key, ins_disc_params_type)
VALUES (v_discipline_key, 0);
v_count_update := v_count_update + 1;
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_errormsg,
'');
COMMIT;
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'INS-Disciplines/aantal ingelezen: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (p_import_key,
'S',
'INS-Disciplines/aantal toegevoegd: ' || TO_CHAR (v_count_update),
'');
COMMIT;
END;
-- SUBPROC
PROCEDURE add_resdiscipline (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT TO_NUMBER(res_discipline_type) res_discipline_type,
UPPER (res_discipline_omschrijving) res_discipline_upper,
UPPER (res_discipline_kostensoort) res_kostensoort_upper,
MAX (res_discipline_omschrijving) res_discipline_omschrijving
FROM fac_imp_ins
WHERE reserveerbaar = 1
GROUP BY UPPER (res_discipline_omschrijving), UPPER (res_discipline_kostensoort), TO_NUMBER(res_discipline_type);
v_discipline_key NUMBER (10);
v_kostensoort_key NUMBER (10);
ccount NUMBER (10);
v_count_tot NUMBER (10);
v_count_update NUMBER (10);
BEGIN
v_count_tot := 0;
v_count_update := 0;
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_errormsg :=
'Fout bij toevoegen RES-discipline [' || rec.res_discipline_omschrijving || ']';
SELECT COUNT ( * )
INTO ccount
FROM ins_tab_discipline
WHERE ins_discipline_verwijder IS NULL
AND ins_discipline_module = 'RES'
AND UPPER (TRIM (ins_discipline_omschrijving)) = rec.res_discipline_upper;
IF ccount = 0
THEN
IF rec.res_kostensoort_upper IS NULL
THEN
v_kostensoort_key := NULL;
ELSE
SELECT prs_kostensoort_key
INTO v_kostensoort_key
FROM prs_kostensoort
WHERE TRIM (prs_kostensoort_upper) = rec.res_kostensoort_upper
AND prs_kostensoort_verwijder IS NULL;
END IF;
INSERT INTO ins_tab_discipline (ins_discipline_module,
ins_discipline_omschrijving,
ins_discipline_min_level,
ins_discipline_kpnverplicht,
prs_kostensoort_key)
VALUES ('RES',
SUBSTR (rec.res_discipline_omschrijving, 1, 60),
COALESCE(rec.res_discipline_type, 1),
0,
v_kostensoort_key)
RETURNING ins_discipline_key
INTO v_discipline_key;
INSERT INTO res_disc_params (res_ins_discipline_key)
VALUES (v_discipline_key);
v_count_update := v_count_update + 1;
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_errormsg,
'');
COMMIT;
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'RES-Disciplines/aantal ingelezen: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (p_import_key,
'S',
'RES-Disciplines/aantal toegevoegd: ' || TO_CHAR (v_count_update),
'');
COMMIT;
END;
-- SUBPROC
PROCEDURE add_srtgroep (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT UPPER (ins_discipline_omschrijving) ins_discipline_upper,
UPPER (ins_srtgroep_omschrijving) ins_srtgroep_upper,
MAX (ins_discipline_omschrijving) ins_discipline_omschrijving,
MAX (ins_srtgroep_omschrijving) ins_srtgroep_omschrijving
FROM fac_imp_ins
GROUP BY UPPER (ins_discipline_omschrijving), UPPER (ins_srtgroep_omschrijving);
v_discipline_key NUMBER (10);
ccount NUMBER (10);
v_count_tot NUMBER (10);
v_count_update NUMBER (10);
BEGIN
v_count_tot := 0;
v_count_update := 0;
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_errormsg := 'Fout bij bepalen discipline';
SELECT ins_discipline_key
INTO v_discipline_key
FROM ins_tab_discipline
WHERE ins_discipline_verwijder IS NULL
AND ins_discipline_module = 'INS'
AND UPPER (TRIM (ins_discipline_omschrijving)) = rec.ins_discipline_upper;
v_errormsg :=
'Fout bij toevoegen groepsoort [' || rec.ins_srtgroep_omschrijving || '] ';
SELECT COUNT ( * )
INTO ccount
FROM ins_srtgroep
WHERE ins_srtgroep_verwijder IS NULL
AND ins_srtgroep_module = 'INS'
AND ins_discipline_key = v_discipline_key
AND TRIM (ins_srtgroep_upper) = rec.ins_srtgroep_upper;
IF ccount = 0
THEN
INSERT INTO ins_srtgroep (ins_discipline_key,
ins_srtgroep_module,
ins_srtgroep_omschrijving)
VALUES (v_discipline_key,
'INS',
SUBSTR (TRIM (rec.ins_srtgroep_omschrijving), 1, 60));
v_count_update := v_count_update + 1;
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_errormsg,
'');
COMMIT;
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'Groepsoorten/aantal ingelezen: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (p_import_key,
'S',
'Groepsoorten/aantal toegevoegd: ' || TO_CHAR (v_count_update),
'');
COMMIT;
END;
-- SUBPROC
PROCEDURE add_srtdeel (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT UPPER (ins_discipline_omschrijving) ins_discipline_upper,
UPPER (ins_srtgroep_omschrijving) ins_srtgroep_upper,
UPPER (ins_srtdeel_code) ins_srtdeel_code_upper,
UPPER (ins_srtdeel_omschrijving) ins_srtdeel_upper,
MAX (ins_discipline_omschrijving) ins_discipline_omschrijving,
MAX (ins_srtgroep_omschrijving) ins_srtgroep_omschrijving,
MAX (ins_srtdeel_code) ins_srtdeel_code,
MAX (ins_srtdeel_omschrijving) ins_srtdeel_omschrijving
FROM fac_imp_ins
GROUP BY UPPER (ins_discipline_omschrijving),
UPPER (ins_srtgroep_omschrijving),
UPPER (ins_srtdeel_code),
UPPER (ins_srtdeel_omschrijving);
v_discipline_key NUMBER (10);
v_srtgroep_key NUMBER (10);
ccount NUMBER (10);
v_count_tot NUMBER (10);
v_count_update NUMBER (10);
BEGIN
v_count_tot := 0;
v_count_update := 0;
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_errormsg := 'Fout bij bepalen discipline';
SELECT ins_discipline_key
INTO v_discipline_key
FROM ins_tab_discipline
WHERE ins_discipline_verwijder IS NULL
AND ins_discipline_module = 'INS'
AND UPPER (TRIM (ins_discipline_omschrijving)) = rec.ins_discipline_upper;
v_errormsg := 'Fout bij bepalen groepsoort';
SELECT ins_srtgroep_key
INTO v_srtgroep_key
FROM ins_srtgroep
WHERE ins_srtgroep_verwijder IS NULL
AND ins_srtgroep_module = 'INS'
AND ins_discipline_key = v_discipline_key
AND TRIM (ins_srtgroep_upper) = rec.ins_srtgroep_upper;
v_errormsg :=
'Fout bij toevoegen objectsoort [' || rec.ins_srtdeel_omschrijving || ']';
SELECT COUNT ( * )
INTO ccount
FROM ins_srtdeel
WHERE ins_srtdeel_verwijder IS NULL
AND ins_srtdeel_module = 'INS'
AND ins_srtgroep_key = v_srtgroep_key
AND TRIM (ins_srtdeel_code_upper) = rec.ins_srtdeel_code_upper
AND TRIM (ins_srtdeel_upper) = rec.ins_srtdeel_upper;
IF ccount = 0
THEN
-- binding 17 betekent ruimtegebonden of persoonsgebonden
INSERT INTO ins_srtdeel (ins_srtgroep_key,
ins_srtdeel_module,
ins_srtdeel_code,
ins_srtdeel_omschrijving,
ins_srtdeel_binding)
VALUES (v_srtgroep_key,
'INS',
rec.ins_srtdeel_code,
rec.ins_srtdeel_omschrijving,
17);
v_count_update := v_count_update + 1;
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_errormsg,
'');
COMMIT;
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'Objectsoorten/aantal ingelezen: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (p_import_key,
'S',
'Objectsoorten/aantal toegevoegd: ' || TO_CHAR (v_count_update),
'');
COMMIT;
END;
-- SUBPROC
-- p_kenmerkwaarde = 'Parkeercode|1=37-ZB-DR'. Ofwel: kenmerk_omschrijving|groep=waarde.
-- p_kenmerkwaarde = '234|1=37-ZB-DR'. Ofwel: kenmerk_key|groep=waarde.
PROCEDURE upsert_inskenmerk (p_deel_key IN NUMBER,
p_kenmerkwaarde IN VARCHAR2)
AS
v_kenmerk_key NUMBER;
v_srtkenmerk_key NUMBER;
v_groep NUMBER;
v_kenmerk VARCHAR2 (50);
v_waarde VARCHAR2 (4053);
v_srtkenmerk_type ins_srtkenmerk.ins_srtkenmerk_kenmerktype%TYPE;
ccount NUMBER;
v_objectnaam fac_kenmerkdomein.fac_kenmerkdomein_objectnaam%TYPE;
v_kolomnaam fac_kenmerkdomein.fac_kenmerkdomein_kolomnaam%TYPE;
v_kolomtxt fac_kenmerkdomein.fac_kenmerkdomein_kolomtxt%TYPE;
sql_stmt VARCHAR2 (1000);
v_kenmerkdeel_key NUMBER;
l_cursor_1 INTEGER;
l_rowsprocessed NUMBER DEFAULT 0;
BEGIN
IF p_kenmerkwaarde IS NOT NULL
THEN
v_errormsg := 'Fout bij bepalen kenmerk [' || SUBSTR(p_kenmerkwaarde, 1, 200) || ']';
v_kenmerk := SUBSTR (p_kenmerkwaarde, 1, INSTR (p_kenmerkwaarde, '|') - 1);
v_groep := fac.safe_to_number (
SUBSTR (p_kenmerkwaarde,
INSTR (p_kenmerkwaarde, '|') + 1,
INSTR (p_kenmerkwaarde, '=') - 1 - INSTR (p_kenmerkwaarde, '|')));
v_waarde := SUBSTR (p_kenmerkwaarde, INSTR (p_kenmerkwaarde, '=') + 1);
IF fac.safe_to_number (v_kenmerk) IS NULL
THEN
-- Er kunnen drie kenmerken met dezelfde omschrijving gedefinieerd worden voor een object,
-- namenlijk op drie niveaus discipline (D), 0bjectgroep (G) en objectsoort (S).
-- Bij meerdere dezelfde kenmerken nemen we het kenmerk met de laagste volgnummer.
SELECT ins_kenmerk_key,
ins_srtkenmerk_key,
ins_srtkenmerk_kenmerktype
INTO v_kenmerk_key,
v_srtkenmerk_key,
v_srtkenmerk_type
FROM ( SELECT k.ins_kenmerk_key,
sk.ins_srtkenmerk_key,
sk.ins_srtkenmerk_kenmerktype,
k.ins_kenmerk_volgnummer
FROM ins_deel d,
ins_srtdeel sd,
ins_srtgroep sg,
ins_v_aanwezigkenmerk k,
ins_v_aanwezigsrtkenmerk sk
WHERE d.ins_deel_key = p_deel_key
AND d.ins_srtdeel_key = sd.ins_srtdeel_key
AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
AND k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key
AND k.ins_kenmerk_groep = v_groep
AND ((k.ins_srtinstallatie_key = sd.ins_srtdeel_key
AND k.ins_kenmerk_niveau = 'S')
OR (k.ins_srtinstallatie_key = sg.ins_srtgroep_key
AND k.ins_kenmerk_niveau = 'G')
OR (k.ins_srtinstallatie_key = sg.ins_discipline_key
AND k.ins_kenmerk_niveau = 'D'))
AND COALESCE(UPPER(k.ins_kenmerk_omschrijving), sk.ins_srtkenmerk_upper) = UPPER(v_kenmerk)
AND sk.ins_srtkenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'r', 'S', 'X', 'V')
ORDER BY k.ins_kenmerk_volgnummer)
WHERE ROWNUM = 1;
ELSE
SELECT k.ins_kenmerk_key,
sk.ins_srtkenmerk_key,
sk.ins_srtkenmerk_kenmerktype
INTO v_kenmerk_key,
v_srtkenmerk_key,
v_srtkenmerk_type
FROM ins_v_aanwezigkenmerk k,
ins_v_aanwezigsrtkenmerk sk
WHERE k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key
AND k.ins_kenmerk_groep = v_groep
AND k.ins_kenmerk_key = v_kenmerk
AND sk.ins_srtkenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'r', 'S', 'X', 'V')
ORDER BY k.ins_kenmerk_volgnummer;
END IF;
IF v_waarde IS NOT NULL
THEN
IF v_srtkenmerk_type IN ('R', 'r', 'S')
THEN
v_errormsg := 'Fout bij bepalen eigen tabel';
SELECT COUNT (*)
INTO ccount
FROM ins_srtkenmerk sk,
fac_kenmerkdomein d
WHERE sk.ins_srtkenmerk_key = v_srtkenmerk_key
AND sk.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key
AND d.fac_usrtab_key IS NOT NULL;
v_errormsg := 'Fout bij bepalen nieuwe waarde [' || SUBSTR(v_waarde, 1, 200) || ']';
IF ccount = 1
THEN -- Eigen tabel
SELECT TO_CHAR (ud.fac_usrdata_key)
INTO v_waarde
FROM ins_srtkenmerk sk,
fac_kenmerkdomein d,
fac_v_aanwezigusrdata ud
WHERE sk.ins_srtkenmerk_key = v_srtkenmerk_key
AND sk.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key
AND d.fac_usrtab_key = ud.fac_usrtab_key
AND UPPER (TRIM (ud.fac_usrdata_omschr)) = UPPER (v_waarde);
ELSE -- FACILITOR view/tabel
SELECT d.fac_kenmerkdomein_objectnaam,
d.fac_kenmerkdomein_kolomnaam,
d.fac_kenmerkdomein_kolomtxt
INTO v_objectnaam,
v_kolomnaam,
v_kolomtxt
FROM ins_srtkenmerk sk,
fac_kenmerkdomein d
WHERE sk.ins_srtkenmerk_key = v_srtkenmerk_key
AND sk.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key
AND d.fac_usrtab_key IS NULL;
sql_stmt :=
'SELECT MAX ('
|| v_kolomnaam
|| ') FROM '
|| v_objectnaam
|| ' WHERE UPPER (TRIM ('
|| v_kolomtxt
|| ')) = UPPER (:pwaarde)';
l_cursor_1 := DBMS_SQL.open_cursor;
DBMS_SQL.parse (l_cursor_1, sql_stmt, DBMS_SQL.native);
DBMS_SQL.BIND_VARIABLE(l_cursor_1,':pwaarde', v_waarde);
DBMS_SQL.define_column(l_cursor_1, 1, v_waarde, 255);
l_rowsprocessed := DBMS_SQL.execute_and_fetch (l_cursor_1);
DBMS_SQL.column_value (l_cursor_1, 1, v_waarde);
DBMS_SQL.close_cursor(l_cursor_1);
END IF;
ELSE -- C(Karakter)/D(Datum)/N(Numeriek)/X(Bestandsnaam)
NULL; -- v_waarde := p_waarde;
END IF;
v_errormsg := 'Fout bij bepalen huidige waarde';
SELECT COUNT (*),
MAX (ins_kenmerkdeel_key)
INTO ccount,
v_kenmerkdeel_key
FROM ins_v_aanwezigkenmerkdeel
WHERE ins_deel_key = p_deel_key
AND ins_kenmerk_key = v_kenmerk_key;
IF v_srtkenmerk_type = 'N' -- Alleen voor numerieke waarden de decimale komma vervangen door punt.
THEN
v_waarde := REPLACE (v_waarde, ',', '.');
END IF;
IF ccount = 0
THEN
v_errormsg := 'Fout bij toevoegen waarde [' || SUBSTR(v_waarde, 1, 200) || ']';
INSERT INTO ins_kenmerkdeel (ins_deel_key,
ins_kenmerk_key,
ins_kenmerkdeel_waarde)
VALUES (p_deel_key,
v_kenmerk_key,
v_waarde);
ELSE
v_errormsg := 'Fout bij bijwerken waarde [' || SUBSTR(v_waarde, 1, 200) || ']';
UPDATE ins_kenmerkdeel
SET ins_kenmerkdeel_waarde = v_waarde
WHERE ins_kenmerkdeel_key = v_kenmerkdeel_key;
END IF;
ELSE
-- Verwijder kenmerken die al bestaan maar met de nieuwe import leeg zijn.
DELETE ins_kenmerkdeel
WHERE ins_kenmerk_key = v_kenmerk_key
AND ins_deel_key = p_deel_key;
END IF;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg || ' (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'upsert_inskenmerk');
END;
-- SUBPROC
PROCEDURE add_deel (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT ins_discipline_omschrijving,
ins_srtgroep_omschrijving,
ins_srtdeel_code,
ins_srtdeel_omschrijving,
ins_deel_omschrijving,
ins_deel_opmerking,
alg_locatie_code,
alg_gebouw_code,
alg_verdieping_volgnr,
alg_ruimte_nr,
reserveerbaar,
res_discipline_omschrijving,
res_deel_eenheid,
res_deel_prijs,
res_deel_alg_level,
prs_perslid_matchcode,
prs_perslid_matchwaarde,
ins_kenmerkwaarde1,
ins_kenmerkwaarde2,
ins_kenmerkwaarde3,
ins_kenmerkwaarde4,
ins_kenmerkwaarde5,
ins_kenmerkwaarde6,
ins_kenmerkwaarde7,
ins_kenmerkwaarde8,
ins_kenmerkwaarde9,
ins_kenmerkwaarde10,
ins_kenmerkwaarde11,
ins_kenmerkwaarde12,
ins_kenmerkwaarde13,
ins_kenmerkwaarde14,
ins_kenmerkwaarde15,
ins_kenmerkwaarde16,
ins_kenmerkwaarde17,
ins_kenmerkwaarde18,
ins_kenmerkwaarde19,
ins_kenmerkwaarde20,
ins_deel_aanmaak,
ins_deel_vervaldatum,
ins_deel_aantal,
ins_deel_externnr,
ins_srtdeel_omschr_parent,
ins_deel_omschr_parent
FROM fac_imp_ins;
v_discipline_key NUMBER (10);
v_rdiscipline_key NUMBER (10);
v_srtgroep_key NUMBER (10);
v_srtdeel_key NUMBER (10);
v_locatie_key NUMBER (10);
v_gebouw_key NUMBER (10);
v_verdieping_key NUMBER (10);
v_ruimte_key NUMBER (10);
v_matchkolom VARCHAR2 (255);
sql_stmt VARCHAR2 (1000);
v_ruimte_type VARCHAR2 (10);
v_deel_key NUMBER (10);
ccount NUMBER (10);
pcount NUMBER (10);
v_count_tot NUMBER (10);
v_count_insnew NUMBER (10);
v_count_insupd NUMBER (10);
v_count_resnew NUMBER (10);
v_srtnoti_code VARCHAR2 (6);
l_cursor_1 INTEGER;
l_rowsprocessed NUMBER DEFAULT 0;
v_ins_deel_aanmaak_d DATE;
v_ins_deel_vervaldatum_d DATE;
v_ins_deel_aantal_n NUMBER(8,2);
v_ins_deel_externnr VARCHAR2(255);
v_ins_deel_parent_key NUMBER (10);
BEGIN
v_count_tot := 0;
v_count_insnew := 0;
v_count_insupd := 0;
v_count_resnew := 0;
v_aanduiding := '';
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_ins_deel_aanmaak_d := rec.ins_deel_aanmaak;
v_ins_deel_vervaldatum_d := rec.ins_deel_vervaldatum;
v_ins_deel_aantal_n := rec.ins_deel_aantal;
v_ins_deel_externnr := rec.ins_deel_externnr;
v_aanduiding :=
'['
|| rec.ins_discipline_omschrijving
|| '|'
|| rec.ins_srtgroep_omschrijving
|| '|'
|| rec.ins_srtdeel_code
|| '|'
|| rec.ins_srtdeel_omschrijving
|| '|'
|| rec.ins_deel_omschrijving
|| '] ';
v_errormsg := 'Fout bij bepalen discipline';
SELECT ins_discipline_key
INTO v_discipline_key
FROM ins_tab_discipline
WHERE ins_discipline_verwijder IS NULL AND ins_discipline_module = 'INS'
AND UPPER (TRIM (ins_discipline_omschrijving)) =
UPPER (rec.ins_discipline_omschrijving);
v_errormsg := 'Fout bij bepalen groepsoort';
SELECT ins_srtgroep_key
INTO v_srtgroep_key
FROM ins_srtgroep
WHERE ins_srtgroep_verwijder IS NULL
AND ins_srtgroep_module = 'INS'
AND ins_discipline_key = v_discipline_key
AND TRIM (ins_srtgroep_upper) = UPPER (rec.ins_srtgroep_omschrijving);
v_errormsg := 'Fout bij bepalen objectsoort';
SELECT ins_srtdeel_key
INTO v_srtdeel_key
FROM ins_srtdeel
WHERE ins_srtdeel_verwijder IS NULL
AND ins_srtdeel_module = 'INS'
AND ins_srtgroep_key = v_srtgroep_key
AND TRIM (UPPER(ins_srtdeel_code)) = UPPER (rec.ins_srtdeel_code)
AND TRIM (ins_srtdeel_upper) = UPPER (rec.ins_srtdeel_omschrijving);
v_locatie_key := NULL;
IF rec.alg_locatie_code IS NOT NULL
THEN -- ruimtegebonden object
v_errormsg := 'Fout bij bepalen locatie [' || rec.alg_locatie_code || ']';
SELECT alg_locatie_key
INTO v_locatie_key
FROM alg_v_aanweziglocatie
WHERE UPPER (TRIM (alg_locatie_code)) = UPPER (rec.alg_locatie_code);
v_errormsg := 'Fout bij bepalen gebouw [' || rec.alg_gebouw_code || ']';
SELECT alg_gebouw_key
INTO v_gebouw_key
FROM alg_v_aanweziggebouw
WHERE alg_locatie_key = v_locatie_key
AND UPPER (TRIM (alg_gebouw_code)) = UPPER (rec.alg_gebouw_code);
v_errormsg :=
'Fout bij bepalen verdieping [' || rec.alg_verdieping_volgnr || ']';
SELECT alg_verdieping_key
INTO v_verdieping_key
FROM alg_v_aanwezigverdieping
WHERE alg_gebouw_key = v_gebouw_key
AND alg_verdieping_volgnr = rec.alg_verdieping_volgnr;
v_errormsg := 'Fout bij bepalen ruimte [' || rec.alg_ruimte_nr || ']';
SELECT alg_ruimte_key
INTO v_ruimte_key
FROM alg_v_aanwezigruimte
WHERE alg_verdieping_key = v_verdieping_key
AND TRIM (alg_ruimte_upper_nr) = UPPER (rec.alg_ruimte_nr);
v_ruimte_type := 'R';
-- ruimtegebonden objecten hebben een unieke ID binnen locatie
SELECT COUNT ( * )
INTO ccount
FROM ins_v_aanwezigdeel
WHERE ins_deel_module = 'INS'
AND ins_srtdeel_key = v_srtdeel_key
AND ins_alg_ruimte_type = v_ruimte_type -- R
AND ins_alg_locatie_key = v_locatie_key
AND TRIM (ins_deel_upper) = UPPER (rec.ins_deel_omschrijving);
ELSE -- persoonsgebonden object
v_matchkolom := '';
CASE rec.prs_perslid_matchcode
WHEN '1'
THEN
v_matchkolom := 'PRS_PERSLID_EMAIL';
WHEN '10'
THEN
v_matchkolom := 'PRS_PERSLID_EMAIL';
WHEN '2'
THEN
v_matchkolom := 'PRS_PERSLID_OSLOGIN';
WHEN '20'
THEN
v_matchkolom := 'PRS_PERSLID_OSLOGIN';
WHEN '3'
THEN
v_matchkolom := 'PRS_PERSLID_KEY';
WHEN '30'
THEN
v_matchkolom := 'PRS_PERSLID_KEY';
WHEN '4'
THEN
v_matchkolom := 'PRS_PERSLID_NR';
WHEN '40'
THEN
v_matchkolom := 'PRS_PERSLID_NR';
WHEN '5'
THEN
v_matchkolom := 'PRS_PERSLID_VOORNAAM || '' '' || PRS_PERSLID_NAAM';
WHEN '50'
THEN
v_matchkolom := 'PRS_PERSLID_VOORNAAM || '' '' || PRS_PERSLID_NAAM';
ELSE
-- voor developers only: indien geen code wordt gebruikt,
-- kan als persoonmatchcode een kolom uit de perslid-tabel
-- worden ingevoerd, bijvoorbeeld: prs_perslid_oslogin2
v_matchkolom := rec.prs_perslid_matchcode;
END CASE;
v_errormsg := 'Fout bij bepalen persoon [' || rec.prs_perslid_matchwaarde || ']';
sql_stmt :=
'SELECT MIN (prs_perslid_key), COUNT (prs_perslid_key) '
|| ' FROM prs_v_aanwezigperslid '
|| ' WHERE UPPER ('
|| v_matchkolom
|| ') = UPPER (:pwaarde) ';
--dbms_output.put_line(rec.prs_perslid_matchwaarde);
l_cursor_1 := DBMS_SQL.open_cursor;
DBMS_SQL.parse (l_cursor_1, sql_stmt, DBMS_SQL.native);
DBMS_SQL.BIND_VARIABLE(l_cursor_1,':pwaarde', rec.prs_perslid_matchwaarde);
DBMS_SQL.define_column(l_cursor_1, 1, v_ruimte_key);
DBMS_SQL.define_column(l_cursor_1, 2, pcount);
l_rowsprocessed := DBMS_SQL.execute_and_fetch (l_cursor_1);
-- Bij no rows gaat-ie naar de exception. Moet daar dan nog een cursor dicht??
DBMS_SQL.column_value (l_cursor_1, 1, v_ruimte_key);
DBMS_SQL.column_value (l_cursor_1, 2, pcount);
DBMS_SQL.close_cursor(l_cursor_1);
--dbms_output.put_line(pcount);
IF pcount != 1
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Kan persoon niet 1-duidig bepalen');
END IF;
v_errormsg := 'Fout bij bepalen type koppeling';
IF rec.prs_perslid_matchcode in ('10','20','30','40','50') THEN
v_ruimte_type := 'A' ;
-- Koppeling aan Afdeling van desbetreffende
SELECT prs_afdeling_key
INTO v_ruimte_key
FROM prs_v_aanwezigperslid
WHERE prs_perslid_key = v_ruimte_key;
ELSE
v_ruimte_type := 'P' ;
END IF;
-- persoonsgebonden objecten hebben een unieke ID
SELECT COUNT ( * )
INTO ccount
FROM ins_v_aanwezigdeel
WHERE ins_deel_module = 'INS'
AND ins_srtdeel_key = v_srtdeel_key
AND ins_alg_ruimte_type = v_ruimte_type -- P
AND ins_alg_locatie_key IS NULL
AND TRIM (ins_deel_upper) = UPPER (rec.ins_deel_omschrijving);
END IF;
IF rec.ins_deel_omschr_parent IS NOT NULL
THEN
v_errormsg := 'Fout bij bepalen parent object';
SELECT d.ins_deel_key
INTO v_ins_deel_parent_key
FROM ins_v_aanwezigdeel d
, ins_srtdeel sd
WHERE d.ins_srtdeel_key = sd.ins_srtdeel_key
AND TRIM (sd.ins_srtdeel_upper) = UPPER (rec.ins_srtdeel_omschr_parent)
AND TRIM (d.ins_deel_upper) = UPPER (rec.ins_deel_omschr_parent)
AND sd.ins_srtdeel_verwijder IS NULL
AND ins_srtdeel_module = 'INS';
END IF;
IF ccount = 0
THEN -- toevoegen object!
v_errormsg := 'Fout bij toevoegen INS-object';
INSERT INTO ins_deel (ins_discipline_key,
ins_srtdeel_key,
ins_deel_module,
ins_deel_omschrijving,
ins_deel_opmerking,
ins_alg_ruimte_key,
ins_alg_ruimte_type,
ins_alg_locatie_key,
ins_deel_aanmaak,
ins_deel_vervaldatum,
ins_deel_aantal,
ins_deel_externnr,
ins_deel_parent_key)
VALUES (v_discipline_key,
v_srtdeel_key,
'INS',
rec.ins_deel_omschrijving,
rec.ins_deel_opmerking,
v_ruimte_key,
v_ruimte_type,
v_locatie_key,
v_ins_deel_aanmaak_d,
v_ins_deel_vervaldatum_d,
v_ins_deel_aantal_n,
v_ins_deel_externnr,
v_ins_deel_parent_key)
RETURNING ins_deel_key
INTO v_deel_key;
-- Overslaan als reserveerbaar en geen RES-discipline of andersom,
-- dus verder geen controle op eventuele inconsistentie!
IF (rec.reserveerbaar = 1 AND rec.res_discipline_omschrijving IS NOT NULL)
THEN
v_errormsg :=
'Fout bij bepalen RES-discipline ['
|| rec.res_discipline_omschrijving
|| ']';
SELECT ins_discipline_key
INTO v_rdiscipline_key
FROM res_discipline
WHERE ins_discipline_verwijder IS NULL AND ins_discipline_module = 'RES'
AND UPPER (TRIM (ins_discipline_omschrijving)) =
UPPER (rec.res_discipline_omschrijving);
v_errormsg := 'Fout bij toevoegen RES-object';
INSERT INTO res_deel (res_ins_deel_key,
res_deel_omschrijving,
res_deel_opmerking,
res_deel_eenheid,
res_deel_prijs,
res_discipline_key,
res_deel_alg_level)
VALUES (v_deel_key,
rec.ins_deel_omschrijving,
rec.ins_deel_opmerking,
rec.res_deel_eenheid,
rec.res_deel_prijs,
v_rdiscipline_key,
rec.res_deel_alg_level);
v_count_resnew := v_count_resnew + 1;
END IF;
v_srtnoti_code := 'INSNEW';
v_count_insnew := v_count_insnew + 1;
ELSE -- bijwerken object!
v_errormsg := 'Fout bij bepalen INS-object';
SELECT ins_deel_key
INTO v_deel_key
FROM ins_v_aanwezigdeel
WHERE ins_deel_module = 'INS'
AND ins_srtdeel_key = v_srtdeel_key
AND ins_alg_ruimte_type = v_ruimte_type -- R/P
AND COALESCE (ins_alg_locatie_key, -1) = COALESCE (v_locatie_key, -1) -- gevuld/NULL
AND TRIM (ins_deel_upper) = UPPER (rec.ins_deel_omschrijving);
v_srtnoti_code := 'INSUPD';
v_count_insupd := v_count_insupd + 1;
END IF;
-- NULL-waarden resulteren NIET in het wissen van kenmerkvelden
-- (bijwerken kan wel, maar wissen dus niet)! ins_kenmerkwaarde1
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde1);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde2);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde3);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde4);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde5);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde6);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde7);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde8);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde9);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde10);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde11);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde12);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde13);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde14);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde15);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde16);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde17);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde18);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde19);
upsert_inskenmerk (v_deel_key, rec.ins_kenmerkwaarde20);
fac.trackaction (v_srtnoti_code,
v_deel_key,
sys_context('USERENV', 'CLIENT_IDENTIFIER'),
NULL,
NULL);
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'');
COMMIT;
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'INS-objecten/aantal ingelezen: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (p_import_key,
'S',
'INS-objecten/aantal toegevoegd: ' || TO_CHAR (v_count_insnew),
'');
fac.imp_writelog (p_import_key,
'S',
'INS-objecten/aantal bijgewerkt: ' || TO_CHAR (v_count_insupd),
'');
fac.imp_writelog (p_import_key,
'S',
'RES-objecten/aantal toegevoegd: ' || TO_CHAR (v_count_resnew),
'');
COMMIT;
END;
-- MAIN
BEGIN
add_kostensoort (p_import_key);
add_insdiscipline (p_import_key);
add_resdiscipline (p_import_key);
add_srtgroep (p_import_key);
add_srtdeel (p_import_key);
add_deel (p_import_key);
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg || ' (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
'Importproces objecten afgebroken!');
END fac_update_ins;
/
-- UWVA#22765 - SLE: Verfijning sleutelbeheer
CREATE OR REPLACE PROCEDURE fac_import_sle (p_import_key IN NUMBER)
IS
c_delim VARCHAR2 (2) := fac.import_delimiter(p_import_key);
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER;
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
v_ongeldig NUMBER (1);
v_aanduiding VARCHAR (200);
-- De importvelden
v_ins_srtdeel_code VARCHAR2 (255); -- C10
v_ins_srtdeel_omschrijving VARCHAR2 (255); -- C100
v_alg_locatie_code VARCHAR2 (255); -- C10
v_alg_gebouw_code VARCHAR2 (255); -- C12
v_alg_verdieping_code VARCHAR2 (255); -- C10
v_alg_ruimte_nr VARCHAR2 (255); -- C20
v_cil_gebouw_code VARCHAR2 (255); -- C12
v_cil_verdieping_code VARCHAR2 (255); -- C10
v_cil_ruimte_nr VARCHAR2 (255); -- C10
v_aant_sleutels_in_set VARCHAR2 (255); -- N3
v_aant_sleutels_in_set_n NUMBER (3); -- N3
v_ins_kenmerkwaarde1 VARCHAR2 (4000);
v_ins_kenmerkwaarde2 VARCHAR2 (4000);
v_ins_kenmerkwaarde3 VARCHAR2 (4000);
v_ins_kenmerkwaarde4 VARCHAR2 (4000);
v_ins_kenmerkwaarde5 VARCHAR2 (4000);
-- Overige velden:
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
-- Eerst opruiming
DELETE FROM fac_imp_sle;
COMMIT;
v_count_tot := 0;
v_count_import := 0;
header_is_valid := 0;
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_errormsg := 'Fout opvragen te importeren rij';
v_aanduiding := '';
v_ongeldig := 0;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_delim, v_ins_srtdeel_code);
fac.imp_getfield (v_newline, c_delim, v_ins_srtdeel_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_alg_locatie_code);
fac.imp_getfield (v_newline, c_delim, v_alg_gebouw_code);
fac.imp_getfield (v_newline, c_delim, v_alg_verdieping_code);
fac.imp_getfield (v_newline, c_delim, v_alg_ruimte_nr);
fac.imp_getfield (v_newline, c_delim, v_cil_gebouw_code);
fac.imp_getfield (v_newline, c_delim, v_cil_verdieping_code);
fac.imp_getfield (v_newline, c_delim, v_cil_ruimte_nr);
fac.imp_getfield (v_newline, c_delim, v_aant_sleutels_in_set);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde1);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde2);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde3);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde4);
fac.imp_getfield (v_newline, c_delim, v_ins_kenmerkwaarde5);
v_aanduiding :=
'['
|| v_ins_srtdeel_code
|| '|'
|| v_ins_srtdeel_omschrijving
|| '|'
|| v_alg_locatie_code
|| '] ';
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop.
-- Ik controleer daarbij alleen alle CORE-kolommen, dus niet kenmerk1 t/m 5!
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
IF (header_is_valid = 0)
THEN
IF UPPER (v_ins_srtdeel_code) = 'SLEUTELSETCODE'
AND UPPER (v_ins_srtdeel_omschrijving) =
'SLEUTELSETOMSCHRIJVING'
AND UPPER (v_alg_locatie_code) = 'LOCATIECODE'
AND UPPER (v_alg_gebouw_code) = 'STAMGEBOUWCODE'
AND UPPER (v_alg_verdieping_code) = 'STAMVERDIEPINGCODE'
AND UPPER (v_alg_ruimte_nr) = 'STAMRUIMTENUMMER'
AND UPPER (v_cil_gebouw_code) = 'GEBOUWCODE'
AND UPPER (v_cil_verdieping_code) = 'VERDIEPINGCODE'
AND UPPER (v_cil_ruimte_nr) = 'RUIMTENUMMER'
AND UPPER (v_aant_sleutels_in_set) = 'AANTALEXEMPLAREN'
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
v_errormsg := 'Soortcode ongeldig';
v_ins_srtdeel_code := TRIM (v_ins_srtdeel_code);
IF v_ins_srtdeel_code IS NULL OR LENGTH (v_ins_srtdeel_code) > 10
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
END IF;
--
v_errormsg := 'Soortomschrijving ongeldig';
v_ins_srtdeel_omschrijving := TRIM (v_ins_srtdeel_omschrijving);
IF v_ins_srtdeel_omschrijving IS NULL
OR LENGTH (v_ins_srtdeel_omschrijving) > 100
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
END IF;
--
v_errormsg := 'Locatiecode ongeldig';
v_alg_locatie_code := TRIM (v_alg_locatie_code);
IF v_alg_locatie_code IS NULL OR LENGTH (v_alg_locatie_code) > 10
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
END IF;
--
v_errormsg := 'Stamgebouwcode ongeldig';
v_alg_gebouw_code := TRIM (v_alg_gebouw_code);
IF v_alg_gebouw_code IS NULL OR LENGTH (v_alg_gebouw_code) > 12
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
END IF;
--
v_errormsg := 'Stamverdiepingcode ongeldig';
v_alg_verdieping_code := TRIM (v_alg_verdieping_code);
IF v_alg_verdieping_code IS NULL
OR LENGTH (v_alg_verdieping_code) > 10
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
END IF;
--
v_errormsg := 'Stamruimtenummer ongeldig';
v_alg_ruimte_nr := TRIM (v_alg_ruimte_nr);
IF v_alg_ruimte_nr IS NULL OR LENGTH (v_alg_ruimte_nr) > 20
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
END IF;
--
v_errormsg := 'Gebouwcode/cilinder ongeldig';
v_cil_gebouw_code := TRIM (v_cil_gebouw_code);
IF v_cil_gebouw_code IS NULL OR LENGTH (v_cil_gebouw_code) > 12
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
END IF;
--
v_errormsg := 'Verdiepingcode/cilinder ongeldig';
v_cil_verdieping_code := TRIM (v_cil_verdieping_code);
IF v_cil_verdieping_code IS NULL
OR LENGTH (v_cil_verdieping_code) > 10
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
END IF;
--
v_errormsg := 'Ruimtenummer/cilinder ongeldig';
v_cil_ruimte_nr := TRIM (v_cil_ruimte_nr);
IF v_cil_ruimte_nr IS NULL OR LENGTH (v_cil_ruimte_nr) > 10
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
END IF;
--
v_errormsg := 'Aantal exemplaren ongeldig';
v_aant_sleutels_in_set := TRIM (v_aant_sleutels_in_set);
IF (COALESCE (
LENGTH (
ROUND (fac.safe_to_number (v_aant_sleutels_in_set))
),
10
)) > 3
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
ELSE
v_aant_sleutels_in_set_n :=
ROUND (fac.safe_to_number (v_aant_sleutels_in_set));
END IF;
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
BEGIN
v_errormsg := 'Fout bij wegschrijven importregel';
INSERT INTO fac_imp_sle (ins_srtdeel_code,
ins_srtdeel_omschrijving,
alg_locatie_code,
alg_gebouw_code,
alg_verdieping_code,
alg_ruimte_nr,
cil_gebouw_code,
cil_verdieping_code,
cil_ruimte_nr,
aant_sleutels_in_set,
ins_kenmerkwaarde1,
ins_kenmerkwaarde2,
ins_kenmerkwaarde3,
ins_kenmerkwaarde4,
ins_kenmerkwaarde5)
VALUES (v_ins_srtdeel_code,
v_ins_srtdeel_omschrijving,
v_alg_locatie_code,
v_alg_gebouw_code,
v_alg_verdieping_code,
v_alg_ruimte_nr,
v_cil_gebouw_code,
v_cil_verdieping_code,
v_cil_ruimte_nr,
v_aant_sleutels_in_set_n,
TRIM (v_ins_kenmerkwaarde1),
TRIM (v_ins_kenmerkwaarde2),
TRIM (v_ins_kenmerkwaarde3),
TRIM (v_ins_kenmerkwaarde4),
TRIM (v_ins_kenmerkwaarde5));
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || v_errormsg,
'Fout bij toevoegen regel aan importtabel FAC_IMP_SLE.'
);
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!');
ELSE
fac.imp_writelog (
p_import_key,
'S',
'Sleutelsets/aantal ingelezen importregels: '
|| TO_CHAR (v_count_tot),
''
);
fac.imp_writelog (
p_import_key,
'S',
'Sleutelsets/aantal ongeldige niet ingelezen importregels: '
|| TO_CHAR (v_count_tot - v_count_import),
''
);
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Inleesproces sleutelsets afgebroken!');
END fac_import_sle;
/
CREATE OR REPLACE PROCEDURE fac_update_sle (p_import_key IN NUMBER)
AS
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
-- SUBPROC
PROCEDURE add_srtdeel (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT cs.ins_srtgroep_key cilindergroep_key,
ss.ins_srtgroep_key sleutelgroep_key,
UPPER (x.ins_srtdeel_code) ins_srtdeel_code_upper,
UPPER (x.ins_srtdeel_omschrijving) ins_srtdeel_upper,
MIN (x.ins_srtdeel_code) ins_srtdeel_code,
MIN (x.ins_srtdeel_omschrijving) ins_srtdeel_omschrijving
FROM (SELECT ins_srtgroep_key
FROM fac_setting s, ins_srtgroep sg
WHERE UPPER (s.fac_setting_name) =
'CIL_INS_SRT_GROEP_KEY'
AND fac.safe_to_number (s.fac_setting_pvalue) =
sg.ins_srtgroep_key) cs,
(SELECT ins_srtgroep_key
FROM fac_setting s, ins_srtgroep sg
WHERE UPPER (s.fac_setting_name) =
'SLE_INS_SRT_GROEP_KEY'
AND fac.safe_to_number (s.fac_setting_pvalue) =
sg.ins_srtgroep_key) ss,
fac_imp_sle x
GROUP BY cs.ins_srtgroep_key,
ss.ins_srtgroep_key,
UPPER (x.ins_srtdeel_code),
UPPER (x.ins_srtdeel_omschrijving)
ORDER BY 1,
2,
3,
4;
v_count_tot NUMBER (10);
v_count_cs NUMBER (10);
v_count_ss NUMBER (10);
v_aanduiding VARCHAR (200);
v_cilindergroep_key NUMBER (10);
v_cilinderset_key NUMBER (10);
v_sleutelgroep_key NUMBER (10);
v_sleutelset_key NUMBER (10);
ccount NUMBER (10);
BEGIN
v_count_tot := 0;
v_count_cs := 0;
v_count_ss := 0;
FOR rec IN c1
LOOP
BEGIN
v_aanduiding :=
'['
|| rec.ins_srtdeel_code
|| '|'
|| rec.ins_srtdeel_omschrijving
|| '] ';
v_count_tot := v_count_tot + 1;
v_errormsg := 'Fout bij bepalen INS-Cilinderset (tbv. koppeling)';
SELECT COUNT ( * )
INTO ccount
FROM ins_srtdeel
WHERE ins_srtdeel_verwijder IS NULL
AND ins_srtdeel_module = 'INS'
AND ins_srtgroep_key = rec.cilindergroep_key
AND UPPER (TRIM (ins_srtdeel_omschrijving)) =
UPPER (TRIM (rec.ins_srtdeel_omschrijving));
IF ccount = 0
THEN
v_errormsg :=
'Fout bij toevoegen INS-Cilinderset (tbv. koppeling)';
-- Binding 5 betekent ruimte=1 of terreingebonden=4
-- (Ruimte- en Terrein-vinkje gezet)!
INSERT INTO ins_srtdeel (ins_srtgroep_key,
ins_srtdeel_module,
ins_srtdeel_code,
ins_srtdeel_omschrijving,
ins_srtdeel_binding,
ins_srtdeel_uitleenbaar)
VALUES (rec.cilindergroep_key,
'INS',
rec.ins_srtdeel_code_upper,
rec.ins_srtdeel_omschrijving,
5,
1)
RETURNING ins_srtdeel_key INTO v_cilinderset_key;
v_count_cs := v_count_cs + 1;
ELSE
SELECT ins_srtdeel_key
INTO v_cilinderset_key
FROM ins_srtdeel
WHERE ins_srtdeel_verwijder IS NULL
AND ins_srtdeel_module = 'INS'
AND ins_srtgroep_key = rec.cilindergroep_key
AND UPPER (TRIM (ins_srtdeel_omschrijving)) =
UPPER (TRIM (rec.ins_srtdeel_omschrijving));
END IF;
v_errormsg := 'Fout bij bepalen INS-Sleutelset (tbv. koppeling)';
SELECT COUNT ( * )
INTO ccount
FROM ins_srtdeel
WHERE ins_srtdeel_verwijder IS NULL
AND ins_srtdeel_module = 'INS'
AND ins_srtgroep_key = rec.sleutelgroep_key
AND UPPER (TRIM (ins_srtdeel_omschrijving)) =
UPPER (TRIM (rec.ins_srtdeel_omschrijving));
IF ccount = 0
THEN
v_errormsg :=
'Fout bij toevoegen INS-Sleutelset (tbv. koppeling)';
-- Binding 5 betekent ruimte=1 of terreingebonden=4
-- (Ruimte- en Terrein-vinkje gezet)!
INSERT INTO ins_srtdeel (ins_srtgroep_key,
ins_srtdeel_module,
ins_srtdeel_code,
ins_srtdeel_omschrijving,
ins_srtdeel_binding,
ins_srtdeel_uitleenbaar)
VALUES (rec.sleutelgroep_key,
'INS',
rec.ins_srtdeel_code_upper,
rec.ins_srtdeel_omschrijving,
5,
1)
RETURNING ins_srtdeel_key INTO v_sleutelset_key;
v_count_ss := v_count_ss + 1;
ELSE
SELECT ins_srtdeel_key
INTO v_sleutelset_key
FROM ins_srtdeel
WHERE ins_srtdeel_verwijder IS NULL
AND ins_srtdeel_module = 'INS'
AND ins_srtgroep_key = rec.sleutelgroep_key
AND UPPER (TRIM (ins_srtdeel_omschrijving)) =
UPPER (TRIM (rec.ins_srtdeel_omschrijving));
END IF;
v_errormsg := 'Fout bij toevoegen INS-Cilinderset-Sleutelset';
INSERT INTO ins_srtdeel_srtdeel (ins_srtdeel_key_1, ins_srtdeel_key_2, ins_module)
SELECT v_cilinderset_key, v_sleutelset_key, 'SLE'
FROM DUAL
WHERE NOT EXISTS
(SELECT 1
FROM ins_srtdeel_srtdeel
WHERE ins_srtdeel_key_1 = v_cilinderset_key
AND ins_srtdeel_key_2 = v_sleutelset_key
AND ins_module = 'SLE');
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
'');
END;
COMMIT;
END LOOP;
fac.imp_writelog (
p_import_key,
'S',
'INS-Cilindersets/#toegevoegd: '
|| TO_CHAR (v_count_cs)
|| ' (van '
|| TO_CHAR (v_count_tot)
|| ')',
''
);
fac.imp_writelog (
p_import_key,
'S',
'INS-Sleutelsets/#toegevoegd: '
|| TO_CHAR (v_count_ss)
|| ' (van '
|| TO_CHAR (v_count_tot)
|| ')',
''
);
COMMIT;
END;
-- SUBPROC
PROCEDURE add_cilinders (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT sg.ins_discipline_key,
sg.ins_srtgroep_key,
x.ins_srtdeel_code,
x.ins_srtdeel_omschrijving,
x.alg_locatie_code,
x.alg_gebouw_code,
x.alg_verdieping_code,
x.alg_ruimte_nr,
x.cil_gebouw_code,
x.cil_verdieping_code,
x.cil_ruimte_nr
FROM fac_setting s, ins_srtgroep sg, fac_imp_sle x
WHERE UPPER (s.fac_setting_name) = 'CIL_INS_SRT_GROEP_KEY'
AND fac.safe_to_number (s.fac_setting_pvalue) =
sg.ins_srtgroep_key
ORDER BY 1,
2,
3,
4,
5,
9,
10,
11;
v_count_tot NUMBER (10);
v_count_create NUMBER (10);
v_aanduiding VARCHAR (200);
v_srtdeel_key NUMBER (10);
v_locatie_key NUMBER (10);
v_alg_gebouw_key NUMBER (10);
v_alg_verdieping_key NUMBER (10);
v_alg_ruimte_key NUMBER (10);
v_cil_gebouw_key NUMBER (10);
v_cil_verdieping_key NUMBER (10);
v_cil_ruimte_key NUMBER (10);
v_deel_oms VARCHAR2 (60);
ccount NUMBER (10);
BEGIN
v_count_tot := 0;
v_count_create := 0;
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_aanduiding :=
'['
|| rec.ins_srtdeel_code
|| '|'
|| rec.ins_srtdeel_omschrijving
|| '|'
|| rec.alg_locatie_code
|| '|'
|| rec.cil_gebouw_code
|| '|'
|| rec.cil_verdieping_code
|| '|'
|| rec.cil_ruimte_nr
|| '] ';
v_errormsg := 'Fout bij bepalen INS-Cilinderset';
SELECT ins_srtdeel_key
INTO v_srtdeel_key
FROM ins_srtdeel
WHERE ins_srtdeel_verwijder IS NULL
AND ins_srtdeel_module = 'INS'
AND ins_srtgroep_key = rec.ins_srtgroep_key
AND UPPER (TRIM (ins_srtdeel_omschrijving)) =
UPPER (TRIM (rec.ins_srtdeel_omschrijving));
v_errormsg := 'Fout bij bepalen locatie (tbv. cilinders)';
SELECT alg_locatie_key
INTO v_locatie_key
FROM alg_locatie
WHERE alg_locatie_verwijder IS NULL
AND UPPER (TRIM (alg_locatie_code)) =
UPPER (TRIM (rec.alg_locatie_code));
v_errormsg := 'Fout bij bepalen stamgebouw (tbv. cilinders)';
SELECT alg_gebouw_key
INTO v_alg_gebouw_key
FROM alg_gebouw
WHERE alg_gebouw_verwijder IS NULL
AND alg_locatie_key = v_locatie_key
AND UPPER (TRIM (alg_gebouw_code)) =
UPPER (TRIM (rec.alg_gebouw_code));
v_errormsg := 'Fout bij bepalen stamverdieping (tbv. cilinders)';
SELECT alg_verdieping_key
INTO v_alg_verdieping_key
FROM alg_verdieping
WHERE alg_verdieping_verwijder IS NULL
AND alg_gebouw_key = v_alg_gebouw_key
AND UPPER (TRIM (alg_verdieping_code)) =
UPPER (TRIM (rec.alg_verdieping_code));
v_errormsg := 'Fout bij bepalen stamruimte (tbv. cilinders)';
SELECT alg_ruimte_key
INTO v_alg_ruimte_key
FROM alg_ruimte
WHERE alg_ruimte_verwijder IS NULL
AND alg_verdieping_key = v_alg_verdieping_key
AND UPPER (TRIM (alg_ruimte_nr)) =
UPPER (TRIM (rec.alg_ruimte_nr));
v_errormsg := 'Fout bij bepalen cilindergebouw';
SELECT alg_gebouw_key
INTO v_cil_gebouw_key
FROM alg_gebouw
WHERE alg_gebouw_verwijder IS NULL
AND alg_locatie_key = v_locatie_key
AND UPPER (TRIM (alg_gebouw_code)) =
UPPER (TRIM (rec.cil_gebouw_code));
v_errormsg := 'Fout bij bepalen cilinderverdieping';
SELECT alg_verdieping_key
INTO v_cil_verdieping_key
FROM alg_verdieping
WHERE alg_verdieping_verwijder IS NULL
AND alg_gebouw_key = v_cil_gebouw_key
AND UPPER (TRIM (alg_verdieping_code)) =
UPPER (TRIM (rec.cil_verdieping_code));
v_errormsg := 'Fout bij bepalen cilinderruimte';
SELECT alg_ruimte_key
INTO v_cil_ruimte_key
FROM alg_ruimte
WHERE alg_ruimte_verwijder IS NULL
AND alg_verdieping_key = v_cil_verdieping_key
AND UPPER (TRIM (alg_ruimte_nr)) =
UPPER (TRIM (rec.cil_ruimte_nr));
-- Binnen een dezelfde cilinderset kunnen 1 of meer cilinders zijn
-- "uitgeleend" aan dezelfde ruimte (ruimte kan >1 deuren hebben).
v_errormsg := 'Fout bij bepalen default ID (cilinder)';
SELECT INS.nextdescription (rec.ins_srtdeel_code, NULL)
INTO v_deel_oms
FROM ins_srtdeel
WHERE ins_srtdeel_key = v_srtdeel_key;
v_errormsg := 'Fout bij toevoegen cilinder';
INSERT INTO ins_deel (ins_discipline_key,
ins_srtdeel_key,
ins_deel_module,
ins_deel_omschrijving,
ins_alg_ruimte_key,
ins_alg_ruimte_type,
ins_alg_locatie_key,
ins_alg_ruimte_key_org,
ins_alg_ruimte_type_org)
VALUES (rec.ins_discipline_key,
v_srtdeel_key,
'INS',
v_deel_oms,
v_cil_ruimte_key,
'R',
v_locatie_key,
v_alg_ruimte_key,
'R');
v_count_create := v_count_create + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'');
END;
COMMIT;
END LOOP;
fac.imp_writelog (
p_import_key,
'S',
'INS-Cilinders/#toegevoegd: '
|| TO_CHAR (v_count_create)
|| ' (van '
|| TO_CHAR (v_count_tot)
|| ')',
''
);
COMMIT;
END;
-- SUBPROC
PROCEDURE add_sleutels (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT sg.ins_discipline_key,
sg.ins_srtgroep_key,
x.ins_srtdeel_code,
x.ins_srtdeel_omschrijving,
x.alg_locatie_code,
x.alg_gebouw_code,
x.alg_verdieping_code,
x.alg_ruimte_nr,
MAX (x.aant_sleutels_in_set) aant_sleutels_in_set
FROM fac_setting s, ins_srtgroep sg, fac_imp_sle x
WHERE UPPER (s.fac_setting_name) = 'SLE_INS_SRT_GROEP_KEY'
AND fac.safe_to_number (s.fac_setting_pvalue) =
sg.ins_srtgroep_key
GROUP BY sg.ins_discipline_key,
sg.ins_srtgroep_key,
x.ins_srtdeel_code,
x.ins_srtdeel_omschrijving,
x.alg_locatie_code,
x.alg_gebouw_code,
x.alg_verdieping_code,
x.alg_ruimte_nr
ORDER BY 1,
2,
3,
4,
5,
6,
7,
8;
v_count_tot NUMBER (10);
v_count_create NUMBER (10);
v_aanduiding VARCHAR (200);
v_srtdeel_key NUMBER (10);
v_locatie_key NUMBER (10);
v_alg_gebouw_key NUMBER (10);
v_alg_verdieping_key NUMBER (10);
v_alg_ruimte_key NUMBER (10);
v_deel_oms VARCHAR2 (60);
ccount NUMBER (10);
BEGIN
v_count_tot := 0;
v_count_create := 0;
FOR rec IN c1
LOOP
BEGIN
v_aanduiding :=
'['
|| rec.ins_srtdeel_code
|| '|'
|| rec.ins_srtdeel_omschrijving
|| '|'
|| rec.alg_locatie_code
|| '|'
|| rec.alg_gebouw_code
|| '|'
|| rec.alg_verdieping_code
|| '|'
|| rec.alg_ruimte_nr
|| '|'
|| TO_CHAR (rec.aant_sleutels_in_set)
|| '] ';
v_errormsg := 'Fout bij bepalen INS-Sleutelset';
SELECT ins_srtdeel_key
INTO v_srtdeel_key
FROM ins_srtdeel
WHERE ins_srtdeel_verwijder IS NULL
AND ins_srtdeel_module = 'INS'
AND ins_srtgroep_key = rec.ins_srtgroep_key
AND UPPER (TRIM (ins_srtdeel_omschrijving)) =
UPPER (TRIM (rec.ins_srtdeel_omschrijving));
v_errormsg := 'Fout bij bepalen locatie (tbv. sleutels)';
SELECT alg_locatie_key
INTO v_locatie_key
FROM alg_locatie
WHERE alg_locatie_verwijder IS NULL
AND UPPER (TRIM (alg_locatie_code)) =
UPPER (TRIM (rec.alg_locatie_code));
v_errormsg := 'Fout bij bepalen stamgebouw (tbv. sleutels)';
SELECT alg_gebouw_key
INTO v_alg_gebouw_key
FROM alg_gebouw
WHERE alg_gebouw_verwijder IS NULL
AND alg_locatie_key = v_locatie_key
AND UPPER (TRIM (alg_gebouw_code)) =
UPPER (TRIM (rec.alg_gebouw_code));
v_errormsg := 'Fout bij bepalen stamverdieping (tbv. sleutels)';
SELECT alg_verdieping_key
INTO v_alg_verdieping_key
FROM alg_verdieping
WHERE alg_verdieping_verwijder IS NULL
AND alg_gebouw_key = v_alg_gebouw_key
AND UPPER (TRIM (alg_verdieping_code)) =
UPPER (TRIM (rec.alg_verdieping_code));
v_errormsg := 'Fout bij bepalen stamruimte (tbv. sleutels)';
SELECT alg_ruimte_key
INTO v_alg_ruimte_key
FROM alg_ruimte
WHERE alg_ruimte_verwijder IS NULL
AND alg_verdieping_key = v_alg_verdieping_key
AND UPPER (TRIM (alg_ruimte_nr)) =
UPPER (TRIM (rec.alg_ruimte_nr));
v_errormsg := 'Fout bij bepalen huidig aantal sleutels in set';
SELECT COUNT ( * )
INTO ccount
FROM ins_deel d
WHERE ins_deel_verwijder IS NULL
AND ins_deel_module = 'INS'
AND ins_srtdeel_key = v_srtdeel_key;
IF ccount > 0 -- Sleutelset bevat al sleutels!
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Sleutelset bevat al sleutels',
''
);
ELSE
v_count_tot := v_count_tot + 1;
WHILE ccount < rec.aant_sleutels_in_set
LOOP
BEGIN
v_errormsg := 'Fout bij bepalen default ID (sleutel)';
SELECT INS.nextdescription (rec.ins_srtdeel_code, NULL)
INTO v_deel_oms
FROM ins_srtdeel
WHERE ins_srtdeel_key = v_srtdeel_key;
v_errormsg := 'Fout bij toevoegen sleutel';
INSERT INTO ins_deel (ins_discipline_key,
ins_srtdeel_key,
ins_deel_module,
ins_deel_omschrijving,
ins_alg_ruimte_key,
ins_alg_ruimte_type,
ins_alg_locatie_key)
VALUES (rec.ins_discipline_key,
v_srtdeel_key,
'INS',
v_deel_oms,
v_alg_ruimte_key,
'R',
v_locatie_key);
v_count_create := v_count_create + 1;
ccount := ccount + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'');
END;
END LOOP;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'');
END;
COMMIT;
END LOOP;
fac.imp_writelog (
p_import_key,
'S',
'INS-Sleutels/#toegevoegd: '
|| TO_CHAR (v_count_create)
|| ' (bij '
|| TO_CHAR (v_count_tot)
|| ')',
''
);
COMMIT;
END;
-- MAIN
BEGIN
add_srtdeel (p_import_key); -- Evenveel cilindersets als sleutelsets
add_cilinders (p_import_key);
add_sleutels (p_import_key);
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
'Importproces sleutelsets afgebroken!');
END fac_update_sle;
/
/* FSN#13971: adres-import bleek onverhoopt nodig. Klantspecifieke routines gemaakt
op basis van de standaard fac_imp_adres tabel. Voor consistentie hierom deze
bijbehorende procedure gedefinieerd, die geduldig op implementatie wachten.
Afgewogen niet voor fac_import_mld_adres gekozen.
*/
CREATE OR REPLACE PROCEDURE fac_import_adres (
p_import_key IN NUMBER,
p_discipline_key IN NUMBER
)
IS
BEGIN
NULL;
END;
/
CREATE OR REPLACE PROCEDURE fac_update_adres (
p_import_key IN NUMBER
) IS
BEGIN
NULL;
END;
/
CREATE OR REPLACE PROCEDURE fac_import_res_artikel_sync (
p_import_key IN NUMBER
)
AS
c_fielddelimitor VARCHAR2 (2) := fac.import_delimiter(p_import_key);
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER;
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
v_ongeldig NUMBER (1);
v_aanduiding VARCHAR2 (200);
-- De importvelden:
v_res_artikel_key VARCHAR2 (255);
v_res_discipline_key NUMBER (10);
v_res_discipline_oms VARCHAR2 (255);
v_res_kostensoort_key NUMBER (10);
v_res_kostensoort_oms VARCHAR2 (255);
v_res_artikel_nr VARCHAR2 (255);
v_res_artikel_omschrijving VARCHAR2 (255);
v_res_artikel_eenheid VARCHAR2 (255);
v_res_artikel_prijs VARCHAR2 (255);
v_res_artikel_prijs_vast VARCHAR2 (255);
v_res_artikel_inkoopprijs VARCHAR2 (255);
v_res_artikel_kostenpersoneel VARCHAR2 (255);
v_res_artikel_kostenalgemeen VARCHAR2 (255);
v_res_artikel_btw VARCHAR2 (255);
v_res_artikel_opmerking VARCHAR2 (2000);
v_res_artikel_groep VARCHAR2 (255);
v_res_artikel_volgnummer VARCHAR2 (255);
v_res_artikel_ingangsdatum VARCHAR2 (255);
v_res_artikel_vervaldatum VARCHAR2 (255);
v_res_artikel_minimum VARCHAR2 (255);
v_res_artikel_externnr VARCHAR2 (256);
-- Overige velden:
v_res_artikel_key2 NUMBER;
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
-- Eerst opruiming
DELETE FROM fac_imp_res_artikel_sync;
v_count_tot := 0;
v_count_import := 0;
header_is_valid := 0;
COMMIT;
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_errormsg := 'Fout opvragen te importeren rij';
v_aanduiding := '';
v_ongeldig := 0;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_fielddelimitor, v_res_artikel_key);
fac.imp_getfield (v_newline, c_fielddelimitor, v_res_discipline_oms);
fac.imp_getfield (v_newline, c_fielddelimitor, v_res_kostensoort_oms);
fac.imp_getfield (v_newline, c_fielddelimitor, v_res_artikel_nr);
fac.imp_getfield (v_newline, c_fielddelimitor, v_res_artikel_omschrijving);
fac.imp_getfield (v_newline, c_fielddelimitor, v_res_artikel_eenheid);
fac.imp_getfield (v_newline, c_fielddelimitor, v_res_artikel_prijs);
fac.imp_getfield (v_newline, c_fielddelimitor, v_res_artikel_prijs_vast);
fac.imp_getfield (v_newline, c_fielddelimitor, v_res_artikel_inkoopprijs);
fac.imp_getfield (v_newline, c_fielddelimitor, v_res_artikel_kostenpersoneel);
fac.imp_getfield (v_newline, c_fielddelimitor, v_res_artikel_kostenalgemeen);
fac.imp_getfield (v_newline, c_fielddelimitor, v_res_artikel_btw);
fac.imp_getfield (v_newline, c_fielddelimitor, v_res_artikel_opmerking);
fac.imp_getfield (v_newline, c_fielddelimitor, v_res_artikel_groep);
fac.imp_getfield (v_newline, c_fielddelimitor, v_res_artikel_volgnummer);
fac.imp_getfield (v_newline, c_fielddelimitor, v_res_artikel_ingangsdatum);
fac.imp_getfield (v_newline, c_fielddelimitor, v_res_artikel_vervaldatum);
fac.imp_getfield (v_newline, c_fielddelimitor, v_res_artikel_minimum);
fac.imp_getfield (v_newline, c_fielddelimitor, v_res_artikel_externnr);
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop. Ik controleer alle kolommen..
-- Ik negeer alles totdat ik een geldige header gepasseerd ben
IF (header_is_valid = 0)
THEN
v_aanduiding := 'importregel: (' || v_res_artikel_key
|| '|' || v_res_discipline_oms
|| '|' || v_res_artikel_nr
|| '|' || v_res_artikel_omschrijving
|| ')';
IF UPPER (v_res_artikel_key) = 'ARTIKELKEY'
AND UPPER (v_res_discipline_oms) = 'CATALOGUSNAAM'
AND UPPER (v_res_kostensoort_oms) = 'CATALOGUSKOSTENSOORT'
AND UPPER (v_res_artikel_nr) = 'ARTIKELNUMMER'
AND UPPER (v_res_artikel_omschrijving) = 'ARTIKELOMSCHRIJVING'
AND UPPER (v_res_artikel_eenheid) = 'ARTIKELEENHEID'
AND UPPER (v_res_artikel_prijs) = 'ARTIKELPRIJS'
AND UPPER (v_res_artikel_prijs_vast) = 'ARTIKELPRIJSVAST'
AND UPPER (v_res_artikel_inkoopprijs) = 'ARTIKELINKOOPPRIJS'
AND UPPER (v_res_artikel_kostenpersoneel) = 'ARTIKELPERSONEELKOSTEN'
AND UPPER (v_res_artikel_kostenalgemeen) = 'ARTIKELALGEMENEKOSTEN'
AND UPPER (v_res_artikel_btw) = 'ARTIKELBTW'
AND UPPER (v_res_artikel_opmerking) = 'ARTIKELOPMERKING'
AND UPPER (v_res_artikel_groep) = 'ARTIKELGROEP'
AND UPPER (v_res_artikel_volgnummer) = 'ARTIKELVOLGNUMMER'
AND UPPER (v_res_artikel_ingangsdatum) = 'ARTIKELINGANGSDATUM'
AND UPPER (v_res_artikel_vervaldatum) = 'ARTIKELVERVALDATUM'
AND UPPER (v_res_artikel_minimum) = 'ARTIKELMINIMUM'
AND UPPER (v_res_artikel_externnr) = 'EXTERNNR'
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
v_aanduiding := 'importregel ' || TO_CHAR(v_count_tot) || ': (' || v_res_artikel_key
|| '|' || v_res_discipline_oms
|| '|' || v_res_artikel_nr
|| '|' || v_res_artikel_omschrijving
|| ')';
-- Controleer alle veldwaarde
IF TRIM (v_res_artikel_key) IS NOT NULL
THEN
IF fac.safe_to_number (v_res_artikel_key) IS NOT NULL
THEN
BEGIN
SELECT res_artikel_key
INTO v_res_artikel_key2
FROM res_v_aanwezigartikel
WHERE res_artikel_key = v_res_artikel_key;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
fac.imp_writelog (p_import_key, 'I',
v_aanduiding,
'Catalogus is nieuw'
);
END;
ELSE
fac.imp_writelog (p_import_key, 'E',
v_aanduiding,
'Artikel key ongeldig'
);
v_ongeldig := 1;
END IF;
END IF;
v_res_discipline_oms := TRIM (v_res_discipline_oms);
IF v_res_discipline_oms IS NOT NULL
THEN
BEGIN
SELECT ins_discipline_key
INTO v_res_discipline_key
FROM res_discipline
WHERE ins_discipline_omschrijving = v_res_discipline_oms
AND ins_discipline_verwijder IS NULL;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
fac.imp_writelog (p_import_key, 'I',
v_aanduiding,
'Catalogus ' || v_res_discipline_oms || ' is nieuw'
);
END;
ELSE
fac.imp_writelog (p_import_key, 'E',
v_aanduiding,
'Catalogus ontbreekt'
);
v_ongeldig := 1;
END IF;
v_res_kostensoort_oms := TRIM (v_res_kostensoort_oms);
IF v_res_kostensoort_oms IS NOT NULL
THEN
BEGIN
SELECT prs_kostensoort_key
INTO v_res_kostensoort_key
FROM prs_kostensoort k
WHERE k.prs_kostensoort_oms = v_res_kostensoort_oms
AND k.prs_kostensoort_verwijder IS NULL;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
fac.imp_writelog (p_import_key, 'E',
v_aanduiding,
'Kostensoort ' || v_res_kostensoort_oms || ' niet gevonden'
);
v_ongeldig := 1;
END;
END IF;
v_res_artikel_nr := TRIM (v_res_artikel_nr);
IF LENGTH (v_res_artikel_nr) > 10
THEN
v_res_artikel_nr := SUBSTR (v_res_artikel_nr, 1, 10);
fac.imp_writelog (p_import_key, 'W',
v_aanduiding,
'Artikelnummer wordt afgebroken tot [' || v_res_artikel_nr || ']'
);
END IF;
v_res_artikel_omschrijving := TRIM (v_res_artikel_omschrijving);
IF LENGTH (v_res_artikel_omschrijving) > 40
THEN
v_res_artikel_omschrijving := SUBSTR (v_res_artikel_omschrijving, 1, 40);
fac.imp_writelog (p_import_key, 'W',
v_aanduiding,
'Artikelomschrijving wordt afgebroken tot [' || v_res_artikel_omschrijving || ']'
);
END IF;
IF v_res_artikel_omschrijving IS NULL
THEN
fac.imp_writelog (p_import_key, 'W',
v_aanduiding,
'Artikelomschrijving ontbreekt'
);
v_ongeldig := 1;
END IF;
v_res_artikel_eenheid := TRIM (v_res_artikel_eenheid);
IF LENGTH (v_res_artikel_eenheid) > 10
THEN
v_res_artikel_eenheid := SUBSTR (v_res_artikel_eenheid, 1, 10);
fac.imp_writelog (p_import_key, 'W',
v_aanduiding,
'Artikeleenheid wordt afgebroken tot [' || v_res_artikel_eenheid || ']'
);
END IF;
v_res_artikel_prijs := REPLACE (v_res_artikel_prijs, ',', '.');
IF v_res_artikel_prijs IS NOT NULL
AND fac.safe_to_number (v_res_artikel_prijs) IS NULL
THEN
fac.imp_writelog (p_import_key, 'W',
v_aanduiding,
'Ongeldige artikelprijs [' || v_res_artikel_prijs || ']'
);
END IF;
IF ( v_res_artikel_prijs_vast <> '0'
AND v_res_artikel_prijs_vast <> '1')
THEN
fac.imp_writelog (p_import_key, 'W',
v_aanduiding,
'Ongeldige artikel_prijs_vast [' || v_res_artikel_prijs_vast || '] --> [0|1]'
);
END IF;
-- Doe een poging er de juiste waarde van te maken.
IF v_res_artikel_prijs_vast IS NULL
OR v_res_artikel_prijs_vast <> '1'
THEN
v_res_artikel_prijs_vast := '0';
END IF;
v_res_artikel_inkoopprijs := REPLACE (v_res_artikel_inkoopprijs, ',', '.');
IF v_res_artikel_inkoopprijs IS NOT NULL
AND fac.safe_to_number (v_res_artikel_inkoopprijs) IS NULL
THEN
fac.imp_writelog (p_import_key, 'W',
v_aanduiding,
'Ongeldige inkoopprijs [' || v_res_artikel_inkoopprijs || ']'
);
END IF;
v_res_artikel_kostenpersoneel := REPLACE (v_res_artikel_kostenpersoneel, ',', '.');
IF v_res_artikel_kostenpersoneel IS NOT NULL
AND fac.safe_to_number (v_res_artikel_kostenpersoneel) IS NULL
THEN
fac.imp_writelog (p_import_key, 'W',
v_aanduiding,
'Ongeldige personeelskosten [' || v_res_artikel_kostenpersoneel || ']'
);
END IF;
v_res_artikel_kostenalgemeen := REPLACE (v_res_artikel_kostenalgemeen, ',', '.');
IF v_res_artikel_kostenalgemeen IS NOT NULL
AND fac.safe_to_number (v_res_artikel_kostenalgemeen) IS NULL
THEN
fac.imp_writelog (p_import_key, 'W',
v_aanduiding,
'Ongeldige algemene kosten [' || v_res_artikel_kostenalgemeen || ']'
);
END IF;
v_res_artikel_btw := REPLACE (v_res_artikel_btw, ',', '.');
IF v_res_artikel_btw IS NOT NULL
AND fac.safe_to_number (v_res_artikel_btw) IS NULL
THEN
fac.imp_writelog (p_import_key, 'W',
v_aanduiding,
'Ongeldige BTW tarief [' || v_res_artikel_btw || ']'
);
END IF;
v_res_artikel_opmerking := TRIM (v_res_artikel_opmerking);
IF LENGTH (v_res_artikel_opmerking) > 2000
THEN
v_res_artikel_opmerking := SUBSTR (v_res_artikel_opmerking, 1, 2000);
fac.imp_writelog (p_import_key, 'W',
v_aanduiding,
'Artikelopmerking wordt afgebroken tot [' || v_res_artikel_opmerking || ']'
);
END IF;
v_res_artikel_groep := TRIM (v_res_artikel_groep);
IF LENGTH (v_res_artikel_groep) > 10
THEN
v_res_artikel_groep := SUBSTR (v_res_artikel_groep, 1, 10);
fac.imp_writelog (p_import_key, 'W',
v_aanduiding,
'Artikelgroep wordt afgebroken tot [' || v_res_artikel_groep || ']'
);
END IF;
IF v_res_artikel_volgnummer IS NOT NULL
THEN
IF LENGTH (v_res_artikel_volgnummer) > 3
OR fac.safe_to_number (v_res_artikel_volgnummer) IS NULL
THEN
fac.imp_writelog (p_import_key, 'W',
v_aanduiding,
'Ongeldig artikelvolgnummer [' || v_res_artikel_volgnummer || ']'
);
v_res_artikel_volgnummer := NULL;
END IF;
ELSE
v_res_artikel_volgnummer := NULL;
END IF;
IF v_res_artikel_ingangsdatum IS NOT NULL
AND fac.safe_to_date (v_res_artikel_ingangsdatum, 'yyyymmdd') IS NULL
THEN
fac.imp_writelog (p_import_key, 'W',
v_aanduiding,
'Ongeldige ingangsdatum [' || v_res_artikel_ingangsdatum || ']'
);
END IF;
IF v_res_artikel_vervaldatum IS NOT NULL
AND fac.safe_to_date (v_res_artikel_vervaldatum, 'yyyymmdd') IS NULL
THEN
fac.imp_writelog (p_import_key, 'W',
v_aanduiding,
'Ongeldige vervaldatum [' || v_res_artikel_vervaldatum || ']'
);
END IF;
IF v_res_artikel_minimum IS NOT NULL
THEN
IF LENGTH (v_res_artikel_minimum) > 3
OR fac.safe_to_number (v_res_artikel_minimum) IS NULL
THEN
fac.imp_writelog (p_import_key, 'W',
v_aanduiding,
'Ongeldig artikelminimum [' || v_res_artikel_minimum || ']'
);
v_res_artikel_minimum := NULL;
END IF;
ELSE
v_res_artikel_minimum := NULL;
END IF;
v_res_artikel_externnr := TRIM (v_res_artikel_externnr);
IF LENGTH (v_res_artikel_externnr) > 256
THEN
v_res_artikel_externnr := SUBSTR (v_res_artikel_externnr, 1, 256);
fac.imp_writelog (p_import_key, 'E',
v_aanduiding,
'Externnr te lang [' || v_res_artikel_externnr || ']'
);
v_ongeldig := 1;
END IF;
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
BEGIN
INSERT INTO fac_imp_res_artikel_sync
(res_artikel_key,
res_discipline_oms,
res_kostensoort_oms,
res_artikel_nr,
res_artikel_omschrijving,
res_artikel_eenheid,
res_artikel_prijs,
res_artikel_prijs_vast,
res_artikel_inkoopprijs,
res_artikel_kostenpersoneel,
res_artikel_kostenalgemeen,
res_artikel_btw,
res_artikel_opmerking, res_artikel_groep,
res_artikel_volgnummer,
res_artikel_ingangsdatum,
res_artikel_vervaldatum,
res_artikel_minimum,
res_artikel_externnr
)
VALUES (fac.safe_to_number (v_res_artikel_key),
v_res_discipline_oms,
v_res_kostensoort_oms,
v_res_artikel_nr,
v_res_artikel_omschrijving,
v_res_artikel_eenheid,
fac.safe_to_number (v_res_artikel_prijs),
fac.safe_to_number (v_res_artikel_prijs_vast),
fac.safe_to_number (v_res_artikel_inkoopprijs),
fac.safe_to_number (v_res_artikel_kostenpersoneel),
fac.safe_to_number (v_res_artikel_kostenalgemeen),
fac.safe_to_number (v_res_artikel_btw),
v_res_artikel_opmerking, v_res_artikel_groep,
fac.safe_to_number (v_res_artikel_volgnummer),
fac.safe_to_date (v_res_artikel_ingangsdatum, 'yyyymmdd'),
fac.safe_to_date (v_res_artikel_vervaldatum, 'yyyymmdd'),
fac.safe_to_number (v_res_artikel_minimum),
v_res_artikel_externnr
);
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := ' ORACLE (' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key, 'E',
v_aanduiding,
'Ingelezen regel kan niet weggeschreven worden: fout bij toevoegen regel aan importtabel FAC_IMP_RES_ARTIKEL_SYNC. ' || v_errormsg
);
END;
END IF;
END IF;
END;
END LOOP;
IF (header_is_valid = 0)
THEN
fac.imp_writelog (p_import_key, 'E',
v_aanduiding || 'Ongeldig importbestand',
'Toelichting: ... '
);
ELSE
fac.imp_writelog (p_import_key, 'S',
'Reserveringen: aantal ingelezen catering regels: ' || TO_CHAR (v_count_tot),
''
);
fac.imp_writelog (p_import_key, 'S',
'Reserveringen: aantal ongeldige niet ingelezen importregels: ' || TO_CHAR (v_count_tot - v_count_import),
''
);
END IF;
COMMIT;
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,
'Inleesproces verbruiksartikelen afgebroken!'
);
END fac_import_res_artikel_sync;
/
CREATE OR REPLACE PROCEDURE fac_update_res_artikel_sync (
p_import_key IN NUMBER
)
AS
CURSOR c1
IS
SELECT *
FROM fac_imp_res_artikel_sync;
v_errormsg VARCHAR2 (1000);
v_count_tot NUMBER (10);
v_count_update NUMBER (10);
v_count_ins NUMBER (10);
v_res_discipline_key NUMBER (10);
v_artikel_key_count NUMBER (10);
v_res_kostensoort_key NUMBER (10);
BEGIN
v_count_tot := 0;
v_count_update := 0;
v_count_ins := 0;
SELECT COUNT (*)
INTO v_artikel_key_count
FROM fac_imp_res_artikel_sync
WHERE res_artikel_key IS NOT NULL;
-- markeer bestaande artikelen om verwijderd te worden
IF v_artikel_key_count > 0
THEN
UPDATE res_artikel ra
SET res_artikel_omschrijving = SUBSTR ('*' || res_artikel_omschrijving, 1, 40)
WHERE SUBSTR (res_artikel_omschrijving, 1, 1) <> '*'
AND NOT EXISTS (SELECT res_artikel_key
FROM fac_imp_res_artikel_sync fip
WHERE fip.res_artikel_key = ra.res_artikel_key)
AND res_artikel_verwijder IS NULL;
END IF;
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_res_kostensoort_key := NULL;
IF rec.res_kostensoort_oms IS NOT NULL
THEN
BEGIN
SELECT prs_kostensoort_key
INTO v_res_kostensoort_key
FROM prs_kostensoort
WHERE prs_kostensoort_oms = rec.res_kostensoort_oms
AND prs_kostensoort_verwijder IS NULL;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
fac.imp_writelog (p_import_key, 'W', 'Kostensoort [' || rec.res_kostensoort_oms || '] bestaat niet', '');
END;
END IF;
BEGIN
SELECT ins_discipline_key
INTO v_res_discipline_key
FROM res_discipline
WHERE ins_discipline_omschrijving = rec.res_discipline_oms
AND ins_discipline_min_level = 2
AND ins_discipline_verwijder IS NULL;
UPDATE ins_tab_discipline
SET prs_kostensoort_key = v_res_kostensoort_key
WHERE ins_discipline_key = v_res_discipline_key;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
INSERT INTO ins_tab_discipline
(ins_discipline_module,
ins_discipline_omschrijving,
ins_discipline_min_level,
prs_kostensoort_key
)
VALUES ('RES',
rec.res_discipline_oms,
2,
v_res_kostensoort_key
)
RETURNING ins_discipline_key
INTO v_res_discipline_key;
INSERT INTO res_disc_params
(res_ins_discipline_key
)
VALUES (v_res_discipline_key
);
END;
IF rec.res_artikel_key IS NULL
THEN
INSERT INTO res_artikel
(res_discipline_key, res_artikel_nr,
res_artikel_omschrijving,
res_artikel_eenheid, res_artikel_prijs,
res_artikel_prijs_vast,
res_artikel_inkoopprijs, res_artikel_btw,
res_artikel_opmerking, res_artikel_groep,
res_artikel_kostenpersoneel,
res_artikel_kostenalgemeen,
res_artikel_volgnummer,
res_artikel_ingangsdatum,
res_artikel_vervaldatum,
res_artikel_minimum,
res_artikel_externnr
)
VALUES (v_res_discipline_key, rec.res_artikel_nr,
rec.res_artikel_omschrijving,
rec.res_artikel_eenheid, rec.res_artikel_prijs,
rec.res_artikel_prijs_vast,
rec.res_artikel_inkoopprijs, rec.res_artikel_btw,
rec.res_artikel_opmerking, rec.res_artikel_groep,
rec.res_artikel_kostenpersoneel,
rec.res_artikel_kostenalgemeen,
rec.res_artikel_volgnummer,
rec.res_artikel_ingangsdatum,
rec.res_artikel_vervaldatum,
rec.res_artikel_minimum,
rec.res_artikel_externnr
);
v_count_ins := v_count_ins + 1;
ELSE
UPDATE res_artikel
SET res_discipline_key = v_res_discipline_key,
res_artikel_nr = rec.res_artikel_nr,
res_artikel_omschrijving = rec.res_artikel_omschrijving,
res_artikel_eenheid = rec.res_artikel_eenheid,
res_artikel_prijs = rec.res_artikel_prijs,
res_artikel_prijs_vast = rec.res_artikel_prijs_vast,
res_artikel_inkoopprijs = rec.res_artikel_inkoopprijs,
res_artikel_kostenpersoneel = rec.res_artikel_kostenpersoneel,
res_artikel_kostenalgemeen = rec.res_artikel_kostenalgemeen,
res_artikel_btw = rec.res_artikel_btw,
res_artikel_opmerking = rec.res_artikel_opmerking,
res_artikel_groep = rec.res_artikel_groep,
res_artikel_volgnummer = rec.res_artikel_volgnummer,
res_artikel_ingangsdatum = rec.res_artikel_ingangsdatum,
res_artikel_vervaldatum = rec.res_artikel_vervaldatum,
res_artikel_minimum = rec.res_artikel_minimum,
res_artikel_externnr = rec.res_artikel_externnr
WHERE res_artikel_key = rec.res_artikel_key;
v_count_update := v_count_update + 1;
END IF;
END;
END LOOP;
fac.imp_writelog (p_import_key, 'S',
'Reserveringen: aantal artikelregels: ' || TO_CHAR (v_count_tot), ''
);
IF v_count_ins <> 0
THEN
fac.imp_writelog (p_import_key, 'S',
'Reserveringen: aantal artikelregels toegevoegd: ' || TO_CHAR (v_count_ins), ''
);
END IF;
IF v_count_update <> 0
THEN
fac.imp_writelog (p_import_key, 'S',
'Reserveringen: aantal artikelregels aangepast: ' || TO_CHAR (v_count_update), ''
);
END IF;
IF (v_count_tot > (v_count_ins + v_count_update))
THEN
fac.imp_writelog (p_import_key, 'S',
'Reserveringen: aantal artikelregels overgeslagen: ' || TO_CHAR (v_count_tot - v_count_ins - v_count_update), ''
);
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
v_errormsg := ' (ORACLE error ' || SUBSTR (SQLERRM, 1, 150) || ')';
fac.imp_writelog (p_import_key,
'E',
'Importproces verbruiksartikelen afgebroken!' || v_errormsg,
''
);
END fac_update_res_artikel_sync;
/
CREATE OR REPLACE PROCEDURE fac_import_fac_groep (
p_import_key IN NUMBER
)
IS
c_fielddelimitor VARCHAR2 (2) := fac.import_delimiter(p_import_key);
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line
v_errormsg VARCHAR (1000);
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER;
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
v_aanduiding VARCHAR (200);
-- De importvelden:
v_naam VARCHAR (100);
v_functiecode VARCHAR2 (100);
v_srtdiscipline VARCHAR2 (100);
v_discipline VARCHAR2 (100);
v_orgread VARCHAR2 (100);
v_orgwrite VARCHAR2 (100);
v_algread VARCHAR2 (100);
v_algwrite VARCHAR2 (100);
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
-- Eerst opruiming
DELETE FROM fac_imp_fac_groep;
v_count_tot := 0;
v_count_import := 0;
header_is_valid := 0;
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_errormsg := 'Fout opvragen te importeren rij';
v_aanduiding := '';
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_fielddelimitor, v_naam);
fac.imp_getfield (v_newline, c_fielddelimitor, v_functiecode);
fac.imp_getfield (v_newline, c_fielddelimitor, v_srtdiscipline);
fac.imp_getfield (v_newline, c_fielddelimitor, v_discipline);
fac.imp_getfield (v_newline, c_fielddelimitor, v_orgread);
fac.imp_getfield (v_newline, c_fielddelimitor, v_orgwrite);
fac.imp_getfield (v_newline, c_fielddelimitor, v_algread);
fac.imp_getfield (v_newline, c_fielddelimitor, v_algwrite);
v_aanduiding :=
'|'
|| v_naam
|| '|'
|| v_functiecode
|| '|'
|| v_srtdiscipline
|| '|'
|| v_discipline
|| '|'
|| v_orgread
|| '|'
|| v_orgwrite
|| '|'
|| v_algread
|| '|'
|| v_algwrite
|| '| ';
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop. Ik controleer maar een aantal kolommen, ik zou ze ook
-- allemaal kunnen doen..
-- Ik negeer alles totdat ik een geldige header gepasseerd ben
IF (header_is_valid = 0)
THEN
IF UPPER (v_naam) = 'GROEP' AND UPPER (v_discipline) = 'VAKGROEP' AND UPPER (v_algwrite) = 'PLAATS_SCHRIJVEN'
THEN
header_is_valid := 1;
END IF;
ELSIF header_is_valid = 1
THEN
v_count_tot := v_count_tot + 1;
BEGIN
INSERT INTO fac_imp_fac_groep
(naam, functiecode, srtdiscipline, discipline, orgread, orgwrite, algread, algwrite)
VALUES (SUBSTR (v_naam, 1, 60),
SUBSTR (v_functiecode, 1, 10),
SUBSTR (v_srtdiscipline, 1, 30),
SUBSTR (v_discipline, 1, 60),
fac.safe_to_number (v_orgread),
fac.safe_to_number (v_orgwrite),
fac.safe_to_number (v_algread),
fac.safe_to_number (v_algwrite)
);
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := ' ORACLE (error ' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding,
'Fout bij toevoegen regel aan importtabel FAC_IMP_MLD. ' || v_errormsg
);
END;
END IF;
END;
END LOOP;
IF (header_is_valid = 0)
THEN
fac.imp_writelog (p_import_key, 'E', v_aanduiding || 'Ongeldig importbestand', 'Toelichting: ... ');
ELSE
fac.imp_writelog (p_import_key,
'S',
'Autorisatiegroepen: aantal ingelezen regels: ' || TO_CHAR (v_count_tot),
''
);
fac.imp_writelog (p_import_key,
'S',
'Autorisatiegroepen: aantal ongeldige niet ingelezen importregels: <b>'
|| TO_CHAR (v_count_tot - v_count_import),
''
);
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'OTHERS (error ' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key, 'E', v_errormsg, 'Inleesproces autorisatiegroepen afgebroken!');
END fac_import_fac_groep;
/
CREATE OR REPLACE PROCEDURE fac_update_fac_groep (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT DISTINCT i.naam
FROM fac_imp_fac_groep i
WHERE i.orgread IS NOT NULL
AND i.orgwrite IS NOT NULL
AND i.algread IS NOT NULL
AND i.algwrite IS NOT NULL;
CURSOR c2
IS
SELECT i.naam, f.fac_functie_key, NULL discipline, i.orgread, i.orgwrite, i.algread, i.algwrite, NULL srtdiscipline
FROM fac_imp_fac_groep i, fac_functie f
WHERE functiecode = f.fac_functie_code
AND f.fac_functie_discipline = 0
AND i.orgread IS NOT NULL
AND i.orgwrite IS NOT NULL
AND i.algread IS NOT NULL
AND i.algwrite IS NOT NULL
UNION ALL
SELECT i.naam, f.fac_functie_key, d.ins_discipline_key, i.orgread, i.orgwrite, i.algread, i.algwrite, sd.ins_srtdiscipline_key
FROM fac_imp_fac_groep i, fac_functie f, ins_tab_discipline d, ins_srtdiscipline sd
WHERE functiecode = f.fac_functie_code
AND f.fac_functie_discipline = 1
AND i.orgread IS NOT NULL
AND i.orgwrite IS NOT NULL
AND i.algread IS NOT NULL
AND i.algwrite IS NOT NULL
AND f.fac_functie_module = d.ins_discipline_module
AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key(+)
AND UPPER (TRIM(coalesce(sd.ins_srtdiscipline_omschrijving,'###'))) = UPPER (TRIM(coalesce(i.srtdiscipline,'###')))
AND UPPER (TRIM(d.ins_discipline_omschrijving)) = UPPER (TRIM(i.discipline))
AND sd.ins_srtdiscipline_verwijder IS NULL
AND d.ins_discipline_verwijder IS NULL;
-- Eventueel niet bestaande vakgroeptypen+vakgroepen of catalogie (BES/RES), die gaan we loggen.
CURSOR c3
IS
SELECT i.naam, i.functiecode, i.srtdiscipline, i.discipline, i.orgread, i.orgwrite, i.algread, i.algwrite
FROM fac_imp_fac_groep i, fac_functie f
WHERE functiecode = f.fac_functie_code
AND f.fac_functie_discipline = 1
AND NOT EXISTS (SELECT 'x' FROM ins_tab_discipline d, ins_srtdiscipline sd
WHERE f.fac_functie_module = d.ins_discipline_module
AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key(+)
AND UPPER (TRIM(coalesce(sd.ins_srtdiscipline_omschrijving,'###'))) = UPPER (TRIM(coalesce(i.srtdiscipline,'###')))
AND UPPER (TRIM(d.ins_discipline_omschrijving)) = UPPER (TRIM(i.discipline))
AND sd.ins_srtdiscipline_verwijder IS NULL
AND d.ins_discipline_verwijder IS NULL);
-- Eventueel foute autorisatiecijfers loggen
CURSOR c4
IS
SELECT i.naam, i.functiecode, i.srtdiscipline, i.discipline, i.orgread, i.orgwrite, i.algread, i.algwrite
FROM fac_imp_fac_groep i
WHERE (i.orgread IS NULL
OR i.orgwrite IS NULL
OR i.algread IS NULL
OR i.algwrite IS NULL);
v_errormsg VARCHAR2 (1000);
v_count_tot NUMBER (10);
v_count_update NUMBER (10);
v_count_ins NUMBER (10);
v_discipline_key NUMBER (10);
v_groep_key NUMBER (10);
v_count NUMBER (10);
v_groeprechten_key NUMBER (10);
BEGIN
v_count_tot := 0;
v_count_update := 0;
v_count_ins := 0;
SELECT COUNT (*)
INTO v_count
FROM fac_imp_fac_groep;
-- markeer bestaande artikelen om verwijderd te worden
IF v_count = 0
THEN
RETURN;
END IF;
-- Logging van de onbekende vakgroeptypen, vakgroepen en/of catalogi...
FOR rec3 IN c3
LOOP
fac.imp_writelog (p_import_key,
'E',
'Onbekend vakgroep(type) / catalogus: bij autorisatiegroep:' || rec3.naam,
'Functiecode: ' || rec3.functiecode
|| ', Vakgroeptype: ' || rec3.srtdiscipline
|| ', Vakgroep: ' || rec3.discipline
|| ', Autorisaties (O-R/W A-R/W): ' || rec3.orgread || '/' || rec3.orgwrite || '/' || rec3.algread || '/' || rec3.algwrite
);
END LOOP;
-- Logging van eventuele lege autorisatiegetallen...
FOR rec4 IN c4
LOOP
fac.imp_writelog (p_import_key,
'E',
'Lege autorisatie: bij autorisatiegroep:' || rec4.naam,
'Functiecode: ' || rec4.functiecode
|| ', Vakgroeptype: ' || rec4.srtdiscipline
|| ', Vakgroep: ' || rec4.discipline
|| ', Autorisaties (O-R/W A-R/W): ' || rec4.orgread || '/' || rec4.orgwrite || '/' || rec4.algread || '/' || rec4.algwrite
);
END LOOP;
-- Maak de groepen aan
FOR rec1 IN c1
LOOP
BEGIN
SELECT fac_groep_key
INTO v_groep_key
FROM fac_groep
WHERE UPPER (fac_groep_omschrijving) = UPPER (rec1.naam);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
INSERT INTO fac_groep
(fac_groep_omschrijving)
VALUES (rec1.naam);
fac.imp_writelog (p_import_key,
'I',
'Nieuwe autorisatiegroep toegevoegd: ' || rec1.naam,
''
);
END;
END LOOP;
-- Ken de rechten toe
FOR rec2 IN c2
LOOP
BEGIN
SELECT fac_groep_key
INTO v_groep_key
FROM fac_groep
WHERE UPPER (fac_groep_omschrijving) = UPPER (rec2.naam);
BEGIN
-- Moet een update of een insert gedaan worden
IF rec2.discipline IS NULL
THEN
SELECT fac_groeprechten_key
INTO v_groeprechten_key
FROM fac_groeprechten
WHERE fac_groep_key = v_groep_key
AND fac_functie_key = rec2.fac_functie_key
AND ins_discipline_key IS NULL;
UPDATE fac_groeprechten
SET fac_gebruiker_prs_level_read = rec2.orgread,
fac_gebruiker_prs_level_write = rec2.orgwrite,
fac_gebruiker_alg_level_read = rec2.algread,
fac_gebruiker_alg_level_write = rec2.algwrite
WHERE fac_groep_key = v_groep_key
AND fac_functie_key = rec2.fac_functie_key
AND ins_discipline_key IS NULL;
ELSE
SELECT fac_groeprechten_key
INTO v_groeprechten_key
FROM fac_groeprechten
WHERE fac_groep_key = v_groep_key
AND fac_functie_key = rec2.fac_functie_key
AND ins_discipline_key = rec2.discipline;
UPDATE fac_groeprechten
SET fac_gebruiker_prs_level_read = rec2.orgread,
fac_gebruiker_prs_level_write = rec2.orgwrite,
fac_gebruiker_alg_level_read = rec2.algread,
fac_gebruiker_alg_level_write = rec2.algwrite
WHERE fac_groep_key = v_groep_key
AND fac_functie_key = rec2.fac_functie_key
AND ins_discipline_key = rec2.discipline;
END IF;
v_count_tot := v_count_tot + 1;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
BEGIN
INSERT INTO fac_groeprechten
(fac_groep_key,
fac_functie_key,
ins_discipline_key,
fac_gebruiker_prs_level_read,
fac_gebruiker_prs_level_write,
fac_gebruiker_alg_level_read,
fac_gebruiker_alg_level_write
)
VALUES (v_groep_key,
rec2.fac_functie_key,
rec2.discipline,
rec2.orgread,
rec2.orgwrite,
rec2.algread,
rec2.algwrite
);
v_count_tot := v_count_tot + 1;
EXCEPTION
WHEN OTHERS
THEN
v_errormsg := ' (ORACLE error ' || SUBSTR (SQLERRM, 1, 900) || ')';
fac.imp_writelog (p_import_key,
'W',
'Probleem bij het toevoegen van nieuwe fac_groeprecht ' || v_errormsg,
rec2.naam
|| ', '
|| TO_CHAR (v_groep_key)
|| ', '
|| TO_CHAR (rec2.fac_functie_key)
|| ', '
|| TO_CHAR (rec2.srtdiscipline)
|| '/'
|| TO_CHAR (rec2.discipline)
);
END;
WHEN OTHERS
THEN
v_errormsg := ' (ORACLE error ' || SUBSTR (SQLERRM, 1, 900) || ')';
fac.imp_writelog (p_import_key,
'W',
'Probleem bij vinden fac_groeprechten/updaten van fac_groeprecht ' || v_errormsg,
rec2.naam
|| ', '
|| TO_CHAR (v_groep_key)
|| ', '
|| TO_CHAR (rec2.fac_functie_key)
|| ', '
|| TO_CHAR (rec2.srtdiscipline)
|| '/'
|| TO_CHAR (rec2.discipline)
);
END;
EXCEPTION
WHEN OTHERS
THEN
v_errormsg := ' (ORACLE error ' || SUBSTR (SQLERRM, 1, 900) || ')';
fac.imp_writelog (p_import_key,
'W',
'Probleem bij definieren ' || v_errormsg,
rec2.naam
|| ', '
|| TO_CHAR (v_groep_key)
|| ', '
|| TO_CHAR (rec2.fac_functie_key)
|| ', '
|| TO_CHAR (rec2.srtdiscipline)
|| '/'
|| TO_CHAR (rec2.discipline)
);
END;
END LOOP;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
v_errormsg := ' (ORACLE error ' || SUBSTR (SQLERRM, 1, 900) || ')';
fac.imp_writelog (p_import_key, 'E', 'Importproces autorisatiegroepen afgebroken! ' || v_errormsg, '');
END fac_update_fac_groep;
/
-- Verwijder eerst de autorisaties van de autorisatiegroepen die voorkomen in bestand (importtabel)
CREATE OR REPLACE PROCEDURE fac_delete_fac_groep (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT DISTINCT i.naam
FROM fac_imp_fac_groep i
WHERE i.orgread IS NOT NULL
AND i.orgwrite IS NOT NULL
AND i.algread IS NOT NULL
AND i.algwrite IS NOT NULL;
v_errormsg VARCHAR2 (1000);
v_discipline_key NUMBER (10);
v_groep_key NUMBER (10);
v_count NUMBER (10);
BEGIN
SELECT COUNT (*)
INTO v_count
FROM fac_imp_fac_groep;
IF v_count = 0
THEN
RETURN;
END IF;
-- Verwijder de rechten van de groep(en( die in het bestand staat(n).
FOR rec1 IN c1
LOOP
BEGIN
SELECT fac_groep_key
INTO v_groep_key
FROM fac_groep
WHERE UPPER (fac_groep_omschrijving) = UPPER (rec1.naam);
DELETE fac_groeprechten
WHERE fac_groep_key = v_groep_key;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
NULL;
END;
END LOOP;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
v_errormsg := ' (ORACLE error ' || SUBSTR (SQLERRM, 1, 900) || ')';
fac.imp_writelog (p_import_key, 'E', 'Importproces autorisatiegroepen afgebroken! ' || v_errormsg, '');
END fac_delete_fac_groep;
/
CREATE OR REPLACE PROCEDURE fac_import_fac_groep_del (
p_import_key IN NUMBER
) IS
BEGIN
fac_import_fac_groep(p_import_key);
END fac_import_fac_groep_del;
/
-- Verwijder eerst de autorisaties van de autorisatiegroepen die voorkomen in bestand (importtabel):fac_delete_fac_groep
-- En vul daarna de autorisatiegroep opnieuw in: fac_update_fac_groep
CREATE OR REPLACE PROCEDURE fac_update_fac_groep_del (
p_import_key IN NUMBER
) IS
BEGIN
fac_delete_fac_groep(p_import_key);
fac_update_fac_groep(p_import_key);
END fac_update_fac_groep_del;
/
-- Verwijder eerst de autorisaties van alle vakgroepen die voorkomen in bestand (importtabel)
CREATE OR REPLACE PROCEDURE fac_delete_fac_vakgroep (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT DISTINCT d.ins_discipline_key
FROM fac_imp_fac_groep i, fac_functie f, ins_tab_discipline d, ins_srtdiscipline sd
WHERE i.functiecode = f.fac_functie_code
AND f.fac_functie_discipline = 1
AND i.orgread IS NOT NULL
AND i.orgwrite IS NOT NULL
AND i.algread IS NOT NULL
AND i.algwrite IS NOT NULL
AND f.fac_functie_module = d.ins_discipline_module
AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key(+)
AND UPPER (TRIM(coalesce(sd.ins_srtdiscipline_omschrijving,'###'))) = UPPER (TRIM(coalesce(i.srtdiscipline,'###')))
AND UPPER (TRIM(d.ins_discipline_omschrijving)) = UPPER (TRIM(i.discipline))
AND sd.ins_srtdiscipline_verwijder IS NULL
AND d.ins_discipline_verwijder IS NULL;
v_errormsg VARCHAR2 (1000);
v_discipline_key NUMBER (10);
v_groep_key NUMBER (10);
v_count NUMBER (10);
BEGIN
SELECT COUNT (*)
INTO v_count
FROM fac_imp_fac_groep;
IF v_count = 0
THEN
RETURN;
END IF;
-- Verwijder de rechten van de groep(en( die in het bestand staat(n).
FOR rec1 IN c1
LOOP
BEGIN
DELETE fac_groeprechten
WHERE ins_discipline_key = rec1.ins_discipline_key;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
NULL; -- bedoelen we dit?
END;
END LOOP;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
v_errormsg := ' (ORACLE error ' || SUBSTR (SQLERRM, 1, 900) || ')';
fac.imp_writelog (p_import_key, 'E', 'Importproces autorisatiegroepen afgebroken! ' || v_errormsg, '');
END fac_delete_fac_vakgroep;
/
CREATE OR REPLACE PROCEDURE fac_import_fac_vakgroep_del (
p_import_key IN NUMBER
) IS
BEGIN
fac_import_fac_groep(p_import_key);
END fac_import_fac_vakgroep_del;
/
--Verwijder eerst de autorisaties van de vakgroepen die voorkomen in bestand (importtabel), over alle autorisatiegroepen heen
--En vul daarna de autorisatiegroep opnieuw in: fac_update_fac_groep
CREATE OR REPLACE PROCEDURE fac_update_fac_vakgroep_del (
p_import_key IN NUMBER
) IS
BEGIN
fac_delete_fac_vakgroep(p_import_key);
fac_update_fac_groep(p_import_key);
END fac_update_fac_vakgroep_del;
/
--------------------------------
CREATE OR REPLACE PROCEDURE fac_import_fac_gebruikersgroep (
p_import_key IN NUMBER
)
IS
c_fielddelimitor VARCHAR2 (2) := fac.import_delimiter(p_import_key);
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line
v_errormsg VARCHAR (1000);
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER;
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
v_aanduiding VARCHAR (200);
-- De importvelden:
v_groep VARCHAR2 (100);
v_personeelsnummer VARCHAR2 (100);
v_login VARCHAR2 (100);
v_email VARCHAR2 (255);
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
-- Eerst opruiming
DELETE FROM fac_imp_fac_gebruikersgroep;
v_count_tot := 0;
v_count_import := 0;
header_is_valid := 0;
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_errormsg := 'Fout opvragen te importeren rij';
v_aanduiding := '';
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_fielddelimitor, v_groep);
fac.imp_getfield (v_newline, c_fielddelimitor, v_personeelsnummer);
fac.imp_getfield (v_newline, c_fielddelimitor, v_login);
fac.imp_getfield (v_newline, c_fielddelimitor, v_email);
v_aanduiding :=
'|'
|| v_groep
|| '|'
|| v_personeelsnummer
|| '|'
|| v_login
|| '|'
|| v_email
|| '| ';
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop. Ik controleer alleen de verplichte kolommen, ik zou ze ook
-- allemaal kunnen doen..
-- Ik negeer alles totdat ik een geldige header gepasseerd ben
IF (header_is_valid = 0)
THEN
IF UPPER (v_groep) = 'GROEP'
AND UPPER (v_personeelsnummer) = 'PERSONEELSNUMMER'
AND UPPER (v_login) = 'LOGIN'
AND UPPER (v_email) = 'EMAIL'
THEN
header_is_valid := 1;
END IF;
ELSIF header_is_valid = 1
THEN
v_count_tot := v_count_tot + 1;
BEGIN
INSERT INTO fac_imp_fac_gebruikersgroep
(groep, personeelsnummer, login, email)
VALUES (v_groep,
v_personeelsnummer,
v_login,
v_email
);
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := ' ORACLE (error ' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding,
'Fout bij toevoegen regel aan importtabel FAC_IMP_GEBRUIKERSGROEP. ' || v_errormsg
);
END;
END IF;
END;
END LOOP;
IF (header_is_valid = 0)
THEN
fac.imp_writelog (p_import_key, 'E', v_aanduiding || 'Ongeldig importbestand', 'Toelichting: ... ');
ELSE
fac.imp_writelog (p_import_key,
'S',
'Gebruikersgroepen: aantal ingelezen regels: ' || TO_CHAR (v_count_tot),
''
);
fac.imp_writelog (p_import_key,
'S',
'Gebruikersgroepen: aantal ongeldige niet ingelezen importregels: <b>'
|| TO_CHAR (v_count_tot - v_count_import),
''
);
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'OTHERS (error ' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key, 'E', v_errormsg, 'Inleesproces gebruikersgroepen afgebroken!');
END fac_import_fac_gebruikersgroep;
/
CREATE OR REPLACE PROCEDURE fac_update_fac_gebruikersgroep (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT DISTINCT i.groep, i.personeelsnummer, i.login, i.email
FROM fac_imp_fac_gebruikersgroep i;
v_errormsg VARCHAR2 (1000);
v_count_tot NUMBER (10);
v_count_update NUMBER (10);
v_count_ins NUMBER (10);
v_perslid_key NUMBER (10);
v_perslid_count NUMBER (10);
v_groep_key NUMBER (10);
v_count NUMBER (10);
v_count2 NUMBER (10);
v_count_gg NUMBER (10);
v_hint VARCHAR2 (1000);
BEGIN
v_count_tot := 0;
v_count_update := 0;
v_count_ins := 0;
SELECT COUNT (*)
INTO v_count
FROM fac_gebruikersgroep;
IF v_count = 0
THEN
RETURN;
END IF;
-- Maak de records aan
FOR rec1 IN c1
LOOP
BEGIN
v_groep_key := NULL;
-- bekijk of de groep bestaat
v_hint := 'Zoek groep: ' || rec1.groep;
SELECT fac_groep_key
INTO v_groep_key
FROM fac_groep
WHERE UPPER (fac_groep_omschrijving) = UPPER (rec1.groep);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
fac.imp_writelog (p_import_key,
'E',
'Gebruikersgroepen: kan groep niet vinden: ' || rec1.groep,
'Controleer waarom groep niet bestaat of maak nieuwe groep aan.'
);
END;
BEGIN
-- bekijk of de persoon bestaat
v_hint := '';
v_perslid_key := NULL;
IF rec1.personeelsnummer IS NOT NULL
THEN
v_hint := 'Zoek personeelsnummer: ' || rec1.personeelsnummer;
-- controleer personeelsnummer
SELECT COUNT(prs_perslid_key)
INTO v_perslid_count
FROM prs_v_aanwezigperslid
WHERE UPPER (prs_perslid_nr) = UPPER (rec1.personeelsnummer);
IF v_perslid_count = 1 THEN
SELECT prs_perslid_key
INTO v_perslid_key
FROM prs_v_aanwezigperslid
WHERE UPPER (prs_perslid_nr) = UPPER (rec1.personeelsnummer);
ELSE
-- probeer de match op de nummerieke waarde van het nummer ivm voorloopnullen
SELECT COUNT(prs_perslid_key)
INTO v_perslid_count
FROM prs_v_aanwezigperslid
WHERE FAC.SAFE_TO_NUMBER(prs_perslid_nr) = FAC.SAFE_TO_NUMBER (rec1.personeelsnummer);
IF v_perslid_count = 1 THEN
SELECT prs_perslid_key
INTO v_perslid_key
FROM prs_v_aanwezigperslid
WHERE FAC.SAFE_TO_NUMBER(prs_perslid_nr) = FAC.SAFE_TO_NUMBER (rec1.personeelsnummer);
ELSE
fac.imp_writelog (p_import_key,
'E',
'Gebruikersgroepen: kan persoon niet vinden (op basis van nummer): ' || rec1.personeelsnummer,
'Controleer of persoon voorkomt in Facilitor.'
);
END IF;
END IF;
ELSIF rec1.login IS NOT NULL
THEN
v_hint := 'Zoek login: ' || rec1.login;
-- controleer login
SELECT COUNT(prs_perslid_key)
INTO v_perslid_count
FROM prs_v_aanwezigperslid
WHERE UPPER (prs_perslid_oslogin) = UPPER (rec1.login);
IF v_perslid_count = 1 THEN
SELECT prs_perslid_key
INTO v_perslid_key
FROM prs_v_aanwezigperslid
WHERE UPPER (prs_perslid_oslogin) = UPPER (rec1.login);
ELSE
fac.imp_writelog (p_import_key,
'E',
'Gebruikersgroepen: kan persoon niet vinden (op basis van login): ' || rec1.login,
'Controleer of persoon voorkomt in Facilitor.'
);
END IF;
ELSIF rec1.email IS NOT NULL
THEN
v_hint := 'Zoek email: ' || rec1.email;
-- controleer email
SELECT COUNT(prs_perslid_key)
INTO v_perslid_count
FROM prs_v_aanwezigperslid
WHERE INSTR(UPPER (prs_perslid_email), UPPER (rec1.email)) >0;
IF v_perslid_count = 1 THEN
SELECT prs_perslid_key
INTO v_perslid_key
FROM prs_v_aanwezigperslid
WHERE INSTR(UPPER (prs_perslid_email), UPPER (rec1.email)) >0;
ELSE
fac.imp_writelog (p_import_key,
'E',
'Gebruikersgroepen: kan persoon niet vinden (op basis van email): ' || rec1.email,
'Controleer of persoon voorkomt in Facilitor.'
);
END IF;
END IF;
IF v_groep_key IS NOT NULL AND v_perslid_key IS NOT NULL
THEN
SELECT count(fac_gebruikersgroep_key)
INTO v_count_gg
FROM fac_gebruikersgroep
WHERE fac_groep_key = v_groep_key
AND prs_perslid_key = v_perslid_key;
IF v_count_gg = 0 THEN
INSERT INTO fac_gebruikersgroep (fac_groep_key, prs_perslid_key)
VALUES (v_groep_key, v_perslid_key);
fac.imp_writelog (p_import_key,
'I',
'Gebruikersgroepen: persoon-groep toegevoegd: ' || rec1.groep || '-n:' || rec1.personeelsnummer || ' l:' || rec1.login || ' e:' || rec1.email,
''
);
ELSE
fac.imp_writelog (p_import_key,
'I',
'Gebruikersgroepen: persoon-groep relatie bestaat al: ' || rec1.groep || '-n:' || rec1.personeelsnummer || ' l:' || rec1.login || ' e:' || rec1.email,
''
);
END IF;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
fac.imp_writelog (p_import_key,
'E',
'Gebruikersgroepen: kan groep niet vinden: ' || rec1.groep,
'Controleer waarom groep niet bestaat of maak nieuwe groep aan.'
);
END;
END LOOP;
SELECT COUNT (*)
INTO v_count2
FROM fac_gebruikersgroep;
fac.imp_writelog (p_import_key,
'S',
'Gebruikersgroepen: aantal records toegevoegd: ' || to_char(v_count2 - v_count),
''
);
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
v_errormsg := ' (ORACLE error ' || SUBSTR (SQLERRM, 1, 900) || ')';
fac.imp_writelog (p_import_key, 'E', 'Importproces gebruikersgroep afgebroken! ' || v_errormsg, v_hint);
END fac_update_fac_gebruikersgroep;
/
-- MB 150219, Hieronder de COMMON EXT-bedrijven FIP import / SYNC functie (obv leveranciernummer)
-- p_seq_of_columns geeft aan op welke plek in de CVS het bedrijfsnaam staat, leveranciersnummer etc etc.
-- p_checkheader is 0 of 1, bij 0 bestaat er geen header, bij 1 wordt de header niet gecheckt, bij 2 wordt de header wel gecheckt.
CREATE OR REPLACE PROCEDURE fac_import_bedrijf_body (
p_import_key IN NUMBER,
p_seq_of_columns IN VARCHAR2,
p_checkheader IN NUMBER
)
IS
----- STANDAARD Variabelelijst met hun volgnummer
-- 1 BEDRIJFSNAAM';
-- 2 LEVERANCIERNUMMER';
-- 3 BEZOEK ADRES';
-- 4 BEZOEK POSTCODE';
-- 5 BEZOEK PLAATS';
-- 6 BEZOEK LAND';
-- 7 POST ADRES';
-- 8 POST POSTCODE';
-- 9 POST PLAATS';
-- 10 POST LAND';
-- 11 BEDRIJF TELEFOON';
-- 12 BEDRIJF FAX';
-- 13 BEDRIJF EMAIL';
-- 14 CONTACT PERSOON';
-- 15 CONTACT TELEFOON';
-- 16 CONTACT FAX';
-- 17 BEDRIJF XSL';
-- 18 BEDRIJF ORDERADRES';
-- 19 LEVERANCIER';
-- 20 UITVOERENDE';
-- 21 CONTRACTANT';
-- 22 HUURDER';
-- 23 TOONINGIDS';
-- 24 UURLOON';
-- 25 OVEREENKOMSTNUMMER';
-- 26 OVEREENKOMSTDATUM';
-- 27 OPMERKING';
-- 28 DIENST';
-- 29 LOCATIECODE';
-- 30 GEBOUWCODE';
-- 31 RELATIETYPE';
-- 32 OVERIG1';
-- 33 OVERIG2';
-- 34 OVERIG3';
c_delim VARCHAR2 (2) := fac.import_delimiter(p_import_key);
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- 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_tot NUMBER (10);
v_count_import NUMBER (10);
v_ongeldig NUMBER (1);
v_aanduiding VARCHAR (200);
-- De importvelden:
v_prs_bedrijf_naam VARCHAR2 (256); -- C60
v_prs_leverancier_nr VARCHAR2 (256); -- C50
v_prs_bedrijf_bezoek_adres VARCHAR2 (256); -- C50
v_prs_bedrijf_bezoek_postcode VARCHAR2 (256); -- C12
v_prs_bedrijf_bezoek_plaats VARCHAR2 (256); -- C30
v_prs_bedrijf_bezoek_land VARCHAR2 (256); -- C30
v_prs_bedrijf_telefoon VARCHAR2 (256); -- C20
v_prs_bedrijf_fax VARCHAR2 (256); -- C20
v_prs_bedrijf_post_adres VARCHAR2 (256); -- C50
v_prs_bedrijf_post_postcode VARCHAR2 (256); -- C12
v_prs_bedrijf_post_plaats VARCHAR2 (256); -- C30
v_prs_bedrijf_post_land VARCHAR2 (256); -- C30
v_prs_bedrijf_contact_persoon VARCHAR2 (256); -- C30
v_prs_bedrijf_contact_telefoon VARCHAR2 (256); -- C20
v_prs_bedrijf_contact_fax VARCHAR2 (256); -- C20
v_prs_bedrijf_leverancier VARCHAR2 (256); -- N1
v_prs_bedrijf_uitvoerende VARCHAR2 (256); -- N1
v_prs_bedrijf_contract VARCHAR2 (256); -- N1
v_prs_bedrijf_huurder VARCHAR2 (256); -- N1
v_prs_bedrijf_ingids VARCHAR2 (256); -- N1
v_prs_bedrijf_uurloon VARCHAR2 (256); -- N6,2
v_prs_bedrijf_xsl VARCHAR2 (256); --C256
v_prs_bedrijf_mldorder_adres VARCHAR2 (256); --C256
v_prs_overeenkomst_nr VARCHAR2 (256); -- C30
v_prs_overeenkomst_datum VARCHAR2 (256); -- DATE
v_prs_bedrijf_email VARCHAR2 (256); -- C100
v_prs_bedrijf_opmerking VARCHAR2 (4000); -- C4000
v_prs_dienst_omschrijving VARCHAR2 (256); -- C60
v_alg_locatie_code VARCHAR2 (256); -- C10
v_alg_gebouw_code VARCHAR2 (256); -- C12
v_prs_relatietype VARCHAR2 (256); -- C100
v_prs_bedrijf_overig1 VARCHAR2 (256); -- C256
v_prs_bedrijf_overig2 VARCHAR2 (256); -- C256
v_prs_bedrijf_overig3 VARCHAR2 (256); -- C256
-- Overig:
v_prs_bedrijf_leverancier_n NUMBER (1); -- N1
v_prs_bedrijf_uitvoerende_n NUMBER (1); -- N1
v_prs_bedrijf_contract_n NUMBER (1); -- N1
v_prs_bedrijf_huurder_n NUMBER (1); -- N1
v_prs_bedrijf_ingids_n NUMBER (1); -- N1
v_prs_bedrijf_uurloon_n NUMBER (6, 2); -- N6,2
v_prs_overeenkomst_date DATE; -- DATE
-- De kolommen
v_seq_of_columns VARCHAR2(255);
v_colnr1 NUMBER;
v_colnr2 NUMBER;
v_colnr3 NUMBER;
v_colnr4 NUMBER;
v_colnr5 NUMBER;
v_colnr6 NUMBER;
v_colnr7 NUMBER;
v_colnr8 NUMBER;
v_colnr9 NUMBER;
v_colnr10 NUMBER;
v_colnr11 NUMBER;
v_colnr12 NUMBER;
v_colnr13 NUMBER;
v_colnr14 NUMBER;
v_colnr15 NUMBER;
v_colnr16 NUMBER;
v_colnr17 NUMBER;
v_colnr18 NUMBER;
v_colnr19 NUMBER;
v_colnr20 NUMBER;
v_colnr21 NUMBER;
v_colnr22 NUMBER;
v_colnr23 NUMBER;
v_colnr24 NUMBER;
v_colnr25 NUMBER;
v_colnr26 NUMBER;
v_colnr27 NUMBER;
v_colnr28 NUMBER;
v_colnr29 NUMBER;
v_colnr30 NUMBER;
v_colnr31 NUMBER;
v_colnr32 NUMBER;
v_colnr33 NUMBER;
v_colnr34 NUMBER;
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
-- Eerst opruiming
DELETE FROM fac_imp_ext_bedrijf;
v_count_tot := 0;
v_count_import := 0;
header_is_valid := 0;
IF p_checkheader = 0
THEN -- Er is geen header, dus header is valid (en direct de waarden lezen)
header_is_valid := 1;
END IF;
COMMIT;
v_seq_of_columns := p_seq_of_columns;
v_errorhint := 'Bepalen volgorde kolommen';
-- De volgorde de te importeren kolommen in de CSV uitlezen uit v_seq_of_columns
fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr1);
fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr2);
fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr3);
fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr4);
fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr5);
fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr6);
fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr7);
fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr8);
fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr9);
fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr10);
fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr11);
fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr12);
fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr13);
fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr14);
fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr15);
fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr16);
fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr17);
fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr18);
fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr19);
fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr20);
fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr21);
fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr22);
fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr23);
fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr24);
fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr25);
fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr26);
fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr27);
fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr28);
fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr29);
fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr30);
fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr31);
fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr32);
fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr33);
fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr34);
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_errormsg := 'Fout opvragen te importeren rij';
v_aanduiding := '';
v_ongeldig := 0;
-- Lees alle veldwaarden
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEDRIJFSNAAM';
fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr1), v_prs_bedrijf_naam);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: LEVERANCIERNUMMER';
fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr2), v_prs_leverancier_nr);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEZOEK ADRES';
fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr3), v_prs_bedrijf_bezoek_adres);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEZOEK POSTCODE';
fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr4), v_prs_bedrijf_bezoek_postcode);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEZOEK PLAATS';
fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr5), v_prs_bedrijf_bezoek_plaats);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEZOEK LAND';
fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr6), v_prs_bedrijf_bezoek_land);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: POST ADRES';
fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr7), v_prs_bedrijf_post_adres);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: POST POSTCODE';
fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr8), v_prs_bedrijf_post_postcode);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: POST PLAATS';
fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr9), v_prs_bedrijf_post_plaats);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: POST LAND';
fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr10), v_prs_bedrijf_post_land);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEDRIJF TELEFOON';
fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr11), v_prs_bedrijf_telefoon);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEDRIJF FAX';
fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr12), v_prs_bedrijf_fax);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEDRIJF EMAIL';
fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr13), v_prs_bedrijf_email);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: CONTACT PERSOON';
fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr14), v_prs_bedrijf_contact_persoon);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: CONTACT TELEFOON';
fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr15), v_prs_bedrijf_contact_telefoon);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: CONTACT FAX';
fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr16), v_prs_bedrijf_contact_fax);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEDRIJF XSL';
fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr17), v_prs_bedrijf_xsl);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEDRIJF ORDERADRES';
fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr18), v_prs_bedrijf_mldorder_adres);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: LEVERANCIER';
fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr19), v_prs_bedrijf_leverancier);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: UITVOERENDE';
fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr20), v_prs_bedrijf_uitvoerende);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: CONTRACTANT';
fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr21), v_prs_bedrijf_contract);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: HUURDER';
fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr22), v_prs_bedrijf_huurder);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: TOONINGIDS';
fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr23), v_prs_bedrijf_ingids);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: UURLOON';
fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr24), v_prs_bedrijf_uurloon);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: OVEREENKOMSTNUMMER';
fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr25), v_prs_overeenkomst_nr);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: OVEREENKOMSTDATUM';
fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr26), v_prs_overeenkomst_datum);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: OPMERKING';
fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr27), v_prs_bedrijf_opmerking);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: DIENST';
fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr28), v_prs_dienst_omschrijving);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: LOCATIECODE';
fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr29), v_alg_locatie_code);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: GEBOUWCODE';
fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr30), v_alg_gebouw_code);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: RELATIETYPE';
fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr31), v_prs_relatietype);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: OVERIG1';
fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr32), v_prs_bedrijf_overig1);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: OVERIG2';
fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr33), v_prs_bedrijf_overig2);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: OVERIG3';
fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr34), v_prs_bedrijf_overig3);
v_aanduiding := '[' || v_prs_bedrijf_naam || '] ';
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
IF (header_is_valid = 0)
THEN
IF (p_checkheader = 1)
THEN
-- De controle op header is niet nodig.
header_is_valid := 1;
END IF;
IF (p_checkheader = 2)
THEN
IF fac_check_import_header(v_prs_bedrijf_naam, 'BEDRIJFSNAAM')
AND fac_check_import_header(v_prs_leverancier_nr, 'LEVERANCIERNUMMER')
AND fac_check_import_header(v_prs_bedrijf_bezoek_adres, 'BEZOEK ADRES')
AND fac_check_import_header(v_prs_bedrijf_bezoek_postcode, 'BEZOEK POSTCODE')
AND fac_check_import_header(v_prs_bedrijf_bezoek_plaats, 'BEZOEK PLAATS')
AND fac_check_import_header(v_prs_bedrijf_bezoek_land, 'BEZOEK LAND')
AND fac_check_import_header(v_prs_bedrijf_post_adres, 'POST ADRES')
AND fac_check_import_header(v_prs_bedrijf_post_postcode, 'POST POSTCODE')
AND fac_check_import_header(v_prs_bedrijf_post_plaats, 'POST PLAATS')
AND fac_check_import_header(v_prs_bedrijf_post_land, 'POST LAND')
AND fac_check_import_header(v_prs_bedrijf_telefoon, 'BEDRIJF TELEFOON')
AND fac_check_import_header(v_prs_bedrijf_fax, 'BEDRIJF FAX')
AND fac_check_import_header(v_prs_bedrijf_email, 'BEDRIJF EMAIL')
AND fac_check_import_header(v_prs_bedrijf_contact_persoon, 'CONTACT PERSOON')
AND fac_check_import_header(v_prs_bedrijf_contact_telefoon, 'CONTACT TELEFOON')
AND fac_check_import_header(v_prs_bedrijf_contact_fax, 'CONTACT FAX')
AND fac_check_import_header(v_prs_bedrijf_xsl, 'BEDRIJF XSL')
AND fac_check_import_header(v_prs_bedrijf_mldorder_adres, 'BEDRIJF ORDERADRES')
AND fac_check_import_header(v_prs_bedrijf_leverancier, 'LEVERANCIER')
AND fac_check_import_header(v_prs_bedrijf_uitvoerende, 'UITVOERENDE')
AND fac_check_import_header(v_prs_bedrijf_contract, 'CONTRACTANT')
AND fac_check_import_header(v_prs_bedrijf_huurder, 'HUURDER')
AND fac_check_import_header(v_prs_bedrijf_ingids, 'TOONINGIDS')
AND fac_check_import_header(v_prs_bedrijf_uurloon, 'UURLOON')
AND fac_check_import_header(v_prs_overeenkomst_nr, 'OVEREENKOMSTNUMMER')
AND fac_check_import_header(v_prs_overeenkomst_datum, 'OVEREENKOMSTDATUM')
AND fac_check_import_header(v_prs_bedrijf_opmerking, 'OPMERKING')
AND fac_check_import_header(v_prs_dienst_omschrijving, 'DIENST')
AND fac_check_import_header(v_alg_locatie_code, 'LOCATIECODE')
AND fac_check_import_header(v_alg_gebouw_code, 'GEBOUWCODE')
AND fac_check_import_header(v_prs_relatietype, 'RELATIETYPE')
THEN
header_is_valid := 1;
END IF;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
v_errorhint := 'Bedrijfsnaam te lang';
v_prs_bedrijf_naam := TRIM (v_prs_bedrijf_naam);
IF LENGTH (v_prs_bedrijf_naam) > 60
THEN
v_prs_bedrijf_naam :=
SUBSTR (TRIM (v_prs_bedrijf_naam), 1, 60);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errorhint,
'Bedrijfsnaam wordt afgebroken tot ['
|| v_prs_bedrijf_naam
|| ']'
);
END IF;
v_errorhint := 'Leveranciernummer te lang';
v_prs_leverancier_nr := TRIM (v_prs_leverancier_nr);
IF LENGTH (v_prs_leverancier_nr) > 50
THEN
v_prs_leverancier_nr :=
SUBSTR (TRIM (v_prs_leverancier_nr), 1, 50);
fac.imp_writelog
(p_import_key,
'W',
v_aanduiding || v_errorhint,
'Leveranciernummer wordt afgebroken tot ['
|| v_prs_leverancier_nr
|| ']'
);
END IF;
v_errorhint := 'Bezoek/adres te lang';
v_prs_bedrijf_bezoek_adres := TRIM (v_prs_bedrijf_bezoek_adres);
IF LENGTH (v_prs_bedrijf_bezoek_adres) > 50
THEN
v_prs_bedrijf_bezoek_adres :=
SUBSTR (TRIM (v_prs_bedrijf_bezoek_adres), 1, 50);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errorhint,
'Bezoek/adres wordt afgebroken tot ['
|| v_prs_bedrijf_bezoek_adres
|| ']'
);
END IF;
v_errorhint := 'Bezoek/postcode te lang';
v_prs_bedrijf_bezoek_postcode :=
TRIM (v_prs_bedrijf_bezoek_postcode);
IF LENGTH (v_prs_bedrijf_bezoek_postcode) > 12
THEN
v_prs_bedrijf_bezoek_postcode :=
SUBSTR (TRIM (v_prs_bedrijf_bezoek_postcode), 1, 12);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errorhint,
'Bezoek/postcode wordt afgebroken tot ['
|| v_prs_bedrijf_bezoek_postcode
|| ']'
);
END IF;
v_errorhint := 'Bezoek/plaats te lang';
v_prs_bedrijf_bezoek_plaats := TRIM (v_prs_bedrijf_bezoek_plaats);
IF LENGTH (v_prs_bedrijf_bezoek_plaats) > 30
THEN
v_prs_bedrijf_bezoek_plaats :=
SUBSTR (TRIM (v_prs_bedrijf_bezoek_plaats), 1, 30);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errorhint,
'Bezoek/plaats wordt afgebroken tot ['
|| v_prs_bedrijf_bezoek_plaats
|| ']'
);
END IF;
v_errorhint := 'Bezoek/land te lang';
v_prs_bedrijf_bezoek_land := TRIM (v_prs_bedrijf_bezoek_land);
IF LENGTH (v_prs_bedrijf_bezoek_land) > 30
THEN
v_prs_bedrijf_bezoek_land :=
SUBSTR (TRIM (v_prs_bedrijf_bezoek_land), 1, 30);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errorhint,
'Bezoek/land wordt afgebroken tot ['
|| v_prs_bedrijf_bezoek_land
|| ']'
);
END IF;
v_errorhint := 'Post/adres te lang';
v_prs_bedrijf_post_adres := TRIM (v_prs_bedrijf_post_adres);
IF LENGTH (v_prs_bedrijf_post_adres) > 50
THEN
v_prs_bedrijf_post_adres :=
SUBSTR (TRIM (v_prs_bedrijf_post_adres), 1, 50);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errorhint,
'Post/adres wordt afgebroken tot ['
|| v_prs_bedrijf_post_adres
|| ']'
);
END IF;
v_errorhint := 'Post/postcode te lang';
v_prs_bedrijf_post_postcode := TRIM (v_prs_bedrijf_post_postcode);
IF LENGTH (v_prs_bedrijf_post_postcode) > 12
THEN
v_prs_bedrijf_post_postcode :=
SUBSTR (TRIM (v_prs_bedrijf_post_postcode), 1, 12);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errorhint,
'Post/postcode wordt afgebroken tot ['
|| v_prs_bedrijf_post_postcode
|| ']'
);
END IF;
v_errorhint := 'Post/plaats te lang';
v_prs_bedrijf_post_plaats := TRIM (v_prs_bedrijf_post_plaats);
IF LENGTH (v_prs_bedrijf_post_plaats) > 30
THEN
v_prs_bedrijf_post_plaats :=
SUBSTR (TRIM (v_prs_bedrijf_post_plaats), 1, 30);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errorhint,
'Post/plaats wordt afgebroken tot ['
|| v_prs_bedrijf_post_plaats
|| ']'
);
END IF;
v_errorhint := 'Post/land te lang';
v_prs_bedrijf_post_land := TRIM (v_prs_bedrijf_post_land);
IF LENGTH (v_prs_bedrijf_post_land) > 30
THEN
v_prs_bedrijf_post_land :=
SUBSTR (TRIM (v_prs_bedrijf_post_land), 1, 30);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errorhint,
'Post/land wordt afgebroken tot ['
|| v_prs_bedrijf_post_land
|| ']'
);
END IF;
v_errorhint := 'Bedrijf/telefoon te lang';
v_prs_bedrijf_telefoon := TRIM (v_prs_bedrijf_telefoon);
IF LENGTH (v_prs_bedrijf_telefoon) > 20
THEN
v_prs_bedrijf_telefoon :=
SUBSTR (TRIM (v_prs_bedrijf_telefoon), 1, 20);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errorhint,
'Bedrijf/telefoon wordt afgebroken tot ['
|| v_prs_bedrijf_telefoon
|| ']'
);
END IF;
v_errorhint := 'Bedrijf/fax te lang';
v_prs_bedrijf_fax := TRIM (v_prs_bedrijf_fax);
IF LENGTH (v_prs_bedrijf_fax) > 20
THEN
v_prs_bedrijf_fax := SUBSTR (TRIM (v_prs_bedrijf_fax), 1, 20);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errorhint,
'Bedrijf/fax wordt afgebroken tot ['
|| v_prs_bedrijf_fax
|| ']'
);
END IF;
v_errorhint := 'Bedrijf/e-mail te lang';
v_prs_bedrijf_email := TRIM (v_prs_bedrijf_email);
IF LENGTH (v_prs_bedrijf_email) > 100
THEN
v_prs_bedrijf_email :=
SUBSTR (TRIM (v_prs_bedrijf_email), 1, 100);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errorhint,
'Bedrijf/e-mail wordt afgebroken tot ['
|| v_prs_bedrijf_email
|| ']'
);
END IF;
v_errorhint := 'Contactpersoon te lang';
v_prs_bedrijf_contact_persoon :=
TRIM (v_prs_bedrijf_contact_persoon);
IF LENGTH (v_prs_bedrijf_contact_persoon) > 30
THEN
v_prs_bedrijf_contact_persoon :=
SUBSTR (TRIM (v_prs_bedrijf_contact_persoon), 1, 30);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errorhint,
'Contactpersoon wordt afgebroken tot ['
|| v_prs_bedrijf_contact_persoon
|| ']'
);
END IF;
v_errorhint := 'Contact/telefoon te lang';
v_prs_bedrijf_contact_telefoon :=
TRIM (v_prs_bedrijf_contact_telefoon);
IF LENGTH (v_prs_bedrijf_contact_telefoon) > 20
THEN
v_prs_bedrijf_contact_telefoon :=
SUBSTR (TRIM (v_prs_bedrijf_contact_telefoon), 1, 20);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errorhint,
'Contact/telefoon wordt afgebroken tot ['
|| v_prs_bedrijf_contact_telefoon
|| ']'
);
END IF;
v_errorhint := 'Contact/fax te lang';
v_prs_bedrijf_contact_fax := TRIM (v_prs_bedrijf_contact_fax);
IF LENGTH (v_prs_bedrijf_contact_fax) > 20
THEN
v_prs_bedrijf_contact_fax :=
SUBSTR (TRIM (v_prs_bedrijf_contact_fax), 1, 20);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errorhint,
'Contact/fax wordt afgebroken tot ['
|| v_prs_bedrijf_contact_fax
|| ']'
);
END IF;
-- Verder geen foutdetectie; kan dus stricter?
SELECT DECODE (SUBSTR (TRIM (UPPER (v_prs_bedrijf_leverancier)),
1,
1
),
'J', 1,
0
)
INTO v_prs_bedrijf_leverancier_n
FROM DUAL;
-- Verder geen foutdetectie; kan dus stricter?
SELECT DECODE (SUBSTR (TRIM (UPPER (v_prs_bedrijf_uitvoerende)),
1,
1
),
'J', 1,
0
)
INTO v_prs_bedrijf_uitvoerende_n
FROM DUAL;
-- Verder geen foutdetectie; kan dus stricter?
SELECT DECODE (SUBSTR (TRIM (UPPER (v_prs_bedrijf_contract)), 1,
1),
'J', 1,
0
)
INTO v_prs_bedrijf_contract_n
FROM DUAL;
-- Verder geen foutdetectie; kan dus stricter?
SELECT DECODE (SUBSTR (TRIM (UPPER (v_prs_bedrijf_huurder)), 1, 1),
'J', 1,
0
)
INTO v_prs_bedrijf_huurder_n
FROM DUAL;
-- Verder geen foutdetectie; kan dus stricter?
SELECT DECODE (SUBSTR (TRIM (UPPER (v_prs_bedrijf_ingids)), 1, 1),
'J', 1,
0
)
INTO v_prs_bedrijf_ingids_n
FROM DUAL;
v_errorhint := 'Ongeldig uurloon; maximale grootte 9999.99';
BEGIN
v_prs_bedrijf_uurloon_n :=
fac.safe_to_number (v_prs_bedrijf_uurloon);
EXCEPTION
WHEN OTHERS
THEN
v_ongeldig := 1;
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,
'Regel wordt overgeslagen!'
);
END;
v_errorhint := 'Overeenkomstnummer te lang';
v_prs_overeenkomst_nr := TRIM (v_prs_overeenkomst_nr);
IF LENGTH (v_prs_overeenkomst_nr) > 30
THEN
v_prs_overeenkomst_nr :=
SUBSTR (TRIM (v_prs_overeenkomst_nr), 1, 30);
fac.imp_writelog
(p_import_key,
'W',
v_aanduiding || v_errorhint,
'Overeenkomstnummer wordt afgebroken tot ['
|| v_prs_overeenkomst_nr
|| ']'
);
END IF;
v_errorhint := 'Ongeldige overeenkomstdatum';
v_prs_overeenkomst_datum := TRIM (v_prs_overeenkomst_datum);
IF v_prs_overeenkomst_datum IS NOT NULL
THEN
BEGIN
v_prs_overeenkomst_date :=
TO_DATE (v_prs_overeenkomst_datum, 'dd-mm-yyyy');
EXCEPTION
WHEN OTHERS
THEN
v_ongeldig := 1;
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,
'Regel wordt overgeslagen!'
);
COMMIT;
END;
ELSE
v_prs_overeenkomst_date := NULL;
END IF;
v_errorhint := 'Opmerking te lang';
v_prs_bedrijf_opmerking := TRIM (v_prs_bedrijf_opmerking);
IF LENGTH (v_prs_bedrijf_opmerking) > 4000
THEN
v_prs_bedrijf_opmerking :=
SUBSTR (TRIM (v_prs_bedrijf_opmerking), 1, 4000);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errorhint,
'Opmerking wordt afgebroken tot ['
|| SUBSTR(v_prs_bedrijf_opmerking, 1, 1000) -- imp_log_omschrijving is niet groter :)
|| ']'
);
END IF;
v_errorhint := 'Dienst te lang';
v_prs_dienst_omschrijving := TRIM (v_prs_dienst_omschrijving);
IF LENGTH (v_prs_dienst_omschrijving) > 60
THEN
v_prs_dienst_omschrijving :=
SUBSTR (TRIM (v_prs_dienst_omschrijving), 1, 60);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errorhint,
'Dienst wordt afgebroken tot ['
|| v_prs_dienst_omschrijving
|| ']'
);
END IF;
v_errorhint := 'Locatiecode te lang';
v_alg_locatie_code := TRIM (v_alg_locatie_code);
IF LENGTH (v_alg_locatie_code) > 10
THEN
v_alg_locatie_code := NULL;
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errorhint,
'Locatiecode is te lang ['
|| v_alg_locatie_code
|| ']'
);
END IF;
v_errorhint := 'Gebouwcode te lang';
v_alg_gebouw_code := TRIM (v_alg_gebouw_code);
IF LENGTH (v_alg_gebouw_code) > 12
THEN
v_alg_gebouw_code := NULL;
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errorhint,
'Gebouwcode is te lang ['
|| v_alg_gebouw_code
|| ']'
);
END IF;
v_errorhint := 'Relatietype omschrijving te lang';
v_prs_relatietype := TRIM (v_prs_relatietype);
IF LENGTH (v_prs_relatietype) > 100
THEN
v_prs_relatietype := SUBSTR (TRIM (v_prs_relatietype), 1, 100);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errorhint,
'Relatietype omschrijving wordt afgebroken tot ['
|| v_prs_relatietype
|| ']'
);
END IF;
v_errorhint := 'Overig_1 te lang';
v_prs_bedrijf_overig1 := TRIM (v_prs_bedrijf_overig1);
IF LENGTH (v_prs_bedrijf_overig1) > 256
THEN
v_prs_bedrijf_overig1 := SUBSTR (TRIM (v_prs_bedrijf_overig1), 1, 256);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errorhint,
'Overig_1 wordt afgebroken tot [' || v_prs_bedrijf_overig1 || ']'
);
END IF;
v_errorhint := 'Overig_2 te lang';
v_prs_bedrijf_overig2 := TRIM (v_prs_bedrijf_overig2);
IF LENGTH (v_prs_bedrijf_overig2) > 256
THEN
v_prs_bedrijf_overig2 := SUBSTR (TRIM (v_prs_bedrijf_overig2), 1, 256);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errorhint,
'Overig_2 wordt afgebroken tot [' || v_prs_bedrijf_overig2 || ']'
);
END IF;
v_errorhint := 'Overig_3 te lang';
v_prs_bedrijf_overig3 := TRIM (v_prs_bedrijf_overig3);
IF LENGTH (v_prs_bedrijf_overig3) > 256
THEN
v_prs_bedrijf_overig3 := SUBSTR (TRIM (v_prs_bedrijf_overig3), 1, 256);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errorhint,
'Overig_3 wordt afgebroken tot [' || v_prs_bedrijf_overig3 || ']'
);
END IF;
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
BEGIN
INSERT INTO fac_imp_ext_bedrijf
(prs_bedrijf_naam, prs_leverancier_nr,
prs_bedrijf_bezoek_adres,
prs_bedrijf_bezoek_postcode,
prs_bedrijf_bezoek_plaats,
prs_bedrijf_bezoek_land,
prs_bedrijf_post_adres,
prs_bedrijf_post_postcode,
prs_bedrijf_post_plaats,
prs_bedrijf_post_land,
prs_bedrijf_telefoon, prs_bedrijf_fax,
prs_bedrijf_email,
prs_bedrijf_contact_persoon,
prs_bedrijf_contact_telefoon,
prs_bedrijf_contact_fax,
prs_bedrijf_xsl,
prs_bedrijf_order_adres,
prs_bedrijf_leverancier,
prs_bedrijf_uitvoerende,
prs_bedrijf_contract,
prs_bedrijf_huurder,
prs_bedrijf_ingids,
prs_bedrijf_uurloon,
prs_overeenkomst_nr,
prs_overeenkomst_datum,
prs_bedrijf_opmerking,
prs_dienst_omschrijving,
alg_locatie_code,
alg_gebouw_code,
prs_relatietype,
prs_bedrijf_overig1,
prs_bedrijf_overig2,
prs_bedrijf_overig3
)
VALUES (v_prs_bedrijf_naam, v_prs_leverancier_nr,
v_prs_bedrijf_bezoek_adres,
v_prs_bedrijf_bezoek_postcode,
v_prs_bedrijf_bezoek_plaats,
v_prs_bedrijf_bezoek_land,
v_prs_bedrijf_post_adres,
v_prs_bedrijf_post_postcode,
v_prs_bedrijf_post_plaats,
v_prs_bedrijf_post_land,
v_prs_bedrijf_telefoon, v_prs_bedrijf_fax,
v_prs_bedrijf_email,
v_prs_bedrijf_contact_persoon,
v_prs_bedrijf_contact_telefoon,
v_prs_bedrijf_contact_fax,
v_prs_bedrijf_xsl,
v_prs_bedrijf_mldorder_adres,
v_prs_bedrijf_leverancier_n,
v_prs_bedrijf_uitvoerende_n,
v_prs_bedrijf_contract_n,
v_prs_bedrijf_huurder_n,
v_prs_bedrijf_ingids_n,
v_prs_bedrijf_uurloon_n,
v_prs_overeenkomst_nr,
v_prs_overeenkomst_date,
v_prs_bedrijf_opmerking,
v_prs_dienst_omschrijving,
v_alg_locatie_code,
v_alg_gebouw_code,
v_prs_relatietype,
v_prs_bedrijf_overig1,
v_prs_bedrijf_overig2,
v_prs_bedrijf_overig3
);
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog
(p_import_key,
'E',
v_aanduiding || v_errormsg,
'Fout bij toevoegen regel aan importtabel FAC_IMP_EXT_BEDRIJF.'
);
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!'
);
ELSE
fac.imp_writelog (p_import_key,
'S',
'Relaties: aantal ingelezen importregels: '
|| TO_CHAR (v_count_tot),
''
);
fac.imp_writelog
(p_import_key,
'S',
'Relaties: aantal ongeldige niet ingelezen importregels: '
|| TO_CHAR (v_count_tot - v_count_import),
''
);
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
'Inleesproces relaties afgebroken! ' || v_aanduiding
);
END fac_import_bedrijf_body;
/
CREATE OR REPLACE PROCEDURE fac_import_ext_bedrijf (p_import_key IN NUMBER)
AS
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_seq_of_columns VARCHAR(255);
BEGIN
-- hulpje 1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33;34
v_seq_of_columns := '1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33;34';
fac_import_bedrijf_body (p_import_key, v_seq_of_columns, 2);
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
'Inleesproces relaties afgebroken!');
END;
/
-- Parameter p_sync = 0 of 1:
-- 0 = er wordt niet gesynchroniseerd (op leveranciersnummer), maar gewoon (ala FIP) aangevuld. Elke leverancier wordt toegevoegd.
-- 1 = er wel wel gesynchroniseerd (op leveranciernummer), dus add + update + delete
CREATE OR REPLACE PROCEDURE fac_update_bedrijf_body (
p_import_key IN NUMBER,
p_sync IN NUMBER)
AS
v_errormsg VARCHAR2 (1000) := '-';
v_errorhint VARCHAR2 (1000) := '-';
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count NUMBER (10);
v_count_tot NUMBER (10);
v_count_new NUMBER (10);
v_count_upd NUMBER (10);
v_count_del NUMBER (10);
v_aanduiding VARCHAR2 (200) := '-';
-- SUBPROC
PROCEDURE add_relatietype (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT DISTINCT prs_relatietype
FROM fac_imp_ext_bedrijf
WHERE prs_relatietype IS NOT NULL;
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count NUMBER (10);
v_count_tot NUMBER (10);
v_count_update NUMBER (10);
BEGIN
v_count_tot := 0;
v_count_update := 0;
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_aanduiding := '[' || rec.prs_relatietype || '] ';
v_errorhint := 'Fout bij bepalen relatietype';
SELECT COUNT (*)
INTO v_count
FROM prs_relatietype
WHERE UPPER (prs_relatietype_omschrijving) = UPPER (rec.prs_relatietype)
AND prs_relatietype_verwijder IS NULL;
IF v_count = 0
THEN
v_errorhint := 'Fout bij toevoegen relatietype';
INSERT INTO prs_relatietype
(prs_relatietype_omschrijving)
VALUES (rec.prs_relatietype);
v_count_update := v_count_update + 1;
COMMIT;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint);
COMMIT;
END;
END LOOP;
END;
-- SUBPROC
PROCEDURE add_bedrijf (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT *
FROM fac_imp_ext_bedrijf ib;
--
v_bedrijf_key NUMBER(10);
v_relatietype_key NUMBER(10);
BEGIN
v_count_tot := 0;
v_count_new := 0;
v_count_upd := 0;
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_aanduiding := '[' || rec.prs_bedrijf_naam || '|' || rec.prs_leverancier_nr || '] ';
v_errorhint := 'Fout bepalen bedrijf';
v_relatietype_key := NULL;
IF rec.prs_relatietype IS NOT NULL
THEN
SELECT prs_relatietype_key
INTO v_relatietype_key
FROM prs_relatietype
WHERE UPPER(TRIM(prs_relatietype_omschrijving)) = UPPER(rec.prs_relatietype)
AND prs_relatietype_verwijder IS NULL;
END IF;
IF rec.prs_leverancier_nr IS NULL AND p_sync = 1
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Leveranciernummer ongedefinieerd!',
v_errorhint);
COMMIT;
ELSE
SELECT COUNT (*)
INTO v_count
FROM prs_v_aanwezigbedrijf
WHERE UPPER (prs_leverancier_nr) = UPPER (rec.prs_leverancier_nr);
--
IF v_count = 0 OR p_sync = 0
THEN
v_errorhint := 'Fout toevoegen bedrijf';
INSERT INTO prs_bedrijf (prs_bedrijf_naam,
prs_leverancier_nr,
prs_bedrijf_bezoek_adres,
prs_bedrijf_bezoek_postcode,
prs_bedrijf_bezoek_plaats,
prs_bedrijf_bezoek_land,
prs_bedrijf_post_adres,
prs_bedrijf_post_postcode,
prs_bedrijf_post_plaats,
prs_bedrijf_post_land,
prs_bedrijf_telefoon,
prs_bedrijf_fax,
prs_bedrijf_email,
prs_bedrijf_contact_persoon,
prs_bedrijf_contact_telefoon,
prs_bedrijf_contact_fax,
prs_bedrijf_leverancier,
prs_bedrijf_uitvoerende,
prs_bedrijf_contract,
prs_bedrijf_huurder,
prs_bedrijf_ingids,
prs_bedrijf_uurloon,
prs_overeenkomst_nr,
prs_overeenkomst_datum,
prs_bedrijf_opmerking,
prs_relatietype_key)
VALUES (rec.prs_bedrijf_naam,
rec.prs_leverancier_nr,
rec.prs_bedrijf_bezoek_adres,
rec.prs_bedrijf_bezoek_postcode,
rec.prs_bedrijf_bezoek_plaats,
rec.prs_bedrijf_bezoek_land,
rec.prs_bedrijf_post_adres,
rec.prs_bedrijf_post_postcode,
rec.prs_bedrijf_post_plaats,
rec.prs_bedrijf_post_land,
rec.prs_bedrijf_telefoon,
rec.prs_bedrijf_fax,
rec.prs_bedrijf_email,
rec.prs_bedrijf_contact_persoon,
rec.prs_bedrijf_contact_telefoon,
rec.prs_bedrijf_contact_fax,
DECODE (rec.prs_bedrijf_leverancier, 1, 1, NULL),
DECODE (rec.prs_bedrijf_uitvoerende, 1, 1, NULL),
DECODE (rec.prs_bedrijf_contract, 1, 1, NULL),
DECODE (rec.prs_bedrijf_huurder, 1, 1, NULL),
DECODE (rec.prs_bedrijf_ingids, 1, 1, NULL),
rec.prs_bedrijf_uurloon,
rec.prs_overeenkomst_nr,
rec.prs_overeenkomst_datum,
rec.prs_bedrijf_opmerking,
v_relatietype_key)
RETURNING prs_bedrijf_key
INTO v_bedrijf_key;
v_count_new := v_count_new + 1;
ELSE -- v_count > 0
SELECT prs_bedrijf_key
INTO v_bedrijf_key
FROM prs_v_aanwezigbedrijf
WHERE UPPER (prs_leverancier_nr) = UPPER (rec.prs_leverancier_nr);
v_errorhint := 'Fout bijwerken bedrijf';
UPDATE prs_bedrijf
SET prs_bedrijf_naam = COALESCE (rec.prs_bedrijf_naam, prs_bedrijf_naam),
prs_bedrijf_bezoek_adres = COALESCE (rec.prs_bedrijf_bezoek_adres, prs_bedrijf_bezoek_adres),
prs_bedrijf_bezoek_postcode = COALESCE (rec.prs_bedrijf_bezoek_postcode, prs_bedrijf_bezoek_postcode),
prs_bedrijf_bezoek_plaats = COALESCE (rec.prs_bedrijf_bezoek_plaats, prs_bedrijf_bezoek_plaats),
prs_bedrijf_bezoek_land = COALESCE (rec.prs_bedrijf_bezoek_land, prs_bedrijf_bezoek_land),
prs_bedrijf_post_adres = COALESCE (rec.prs_bedrijf_post_adres, prs_bedrijf_post_adres),
prs_bedrijf_post_postcode = COALESCE (rec.prs_bedrijf_post_postcode, prs_bedrijf_post_postcode),
prs_bedrijf_post_plaats = COALESCE (rec.prs_bedrijf_post_plaats, prs_bedrijf_post_plaats),
prs_bedrijf_post_land = COALESCE (rec.prs_bedrijf_post_land, prs_bedrijf_post_land),
prs_bedrijf_telefoon = COALESCE (rec.prs_bedrijf_telefoon, prs_bedrijf_telefoon),
prs_bedrijf_fax = COALESCE (rec.prs_bedrijf_fax, prs_bedrijf_fax),
prs_bedrijf_email = COALESCE (rec.prs_bedrijf_email, prs_bedrijf_email),
prs_bedrijf_contact_persoon = COALESCE (rec.prs_bedrijf_contact_persoon, prs_bedrijf_contact_persoon),
prs_bedrijf_contact_telefoon = COALESCE (rec.prs_bedrijf_contact_telefoon, prs_bedrijf_contact_telefoon),
prs_bedrijf_contact_fax = COALESCE (rec.prs_bedrijf_contact_fax, prs_bedrijf_contact_fax),
prs_bedrijf_leverancier = DECODE (rec.prs_bedrijf_leverancier, 1, 1, NULL),
prs_bedrijf_uitvoerende = DECODE (rec.prs_bedrijf_uitvoerende, 1, 1, NULL),
prs_bedrijf_contract = DECODE (rec.prs_bedrijf_contract, 1, 1, NULL),
prs_bedrijf_huurder = DECODE (rec.prs_bedrijf_huurder, 1, 1, NULL),
prs_bedrijf_ingids = DECODE (rec.prs_bedrijf_ingids, 1, 1, NULL),
prs_bedrijf_uurloon = COALESCE (rec.prs_bedrijf_uurloon, prs_bedrijf_uurloon),
prs_overeenkomst_nr = COALESCE (rec.prs_overeenkomst_nr, prs_overeenkomst_nr),
prs_overeenkomst_datum = COALESCE (rec.prs_overeenkomst_datum, prs_overeenkomst_datum),
prs_bedrijf_opmerking = COALESCE (rec.prs_bedrijf_opmerking, prs_bedrijf_opmerking),
prs_relatietype_key = DECODE (rec.prs_relatietype, NULL, prs_relatietype_key, v_relatietype_key) -- kan wel wijzigen, maar niet leeg maken.
WHERE prs_bedrijf_key = v_bedrijf_key;
v_count_upd := v_count_upd + 1;
END IF; -- v_count = 0
END IF; -- rec.prs_leverancier_nr IS NULL
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'ORACLE (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',
'Bedrijf: #ingelezen: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (p_import_key,
'S',
'Bedrijf: #toegevoegd: ' || TO_CHAR (v_count_new),
'');
fac.imp_writelog (p_import_key,
'S',
'Bedrijf: #bijgewerkt: ' || TO_CHAR (v_count_upd),
'');
COMMIT;
END;
-- SUBPROC
PROCEDURE del_bedrijf (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT *
FROM prs_v_aanwezigbedrijf b
WHERE b.prs_bedrijf_intern IS NULL
AND b.prs_leverancier_nr IS NOT NULL
AND NOT EXISTS
(SELECT 1
FROM fac_imp_ext_bedrijf
WHERE prs_leverancier_nr = b.prs_leverancier_nr);
--
v_bedrijf_key NUMBER (10);
BEGIN
v_count_del := 0;
--
FOR rec IN c1
LOOP
BEGIN
v_aanduiding := '[' || rec.prs_bedrijf_naam || '] ';
v_errorhint := 'Fout verwijderen bedrijf';
UPDATE prs_bedrijf
SET prs_bedrijf_verwijder = SYSDATE
WHERE prs_bedrijf_key = rec.prs_bedrijf_key;
v_count_del := v_count_del + 1;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'ORACLE (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',
'Bedrijf: #verwijderd: ' || TO_CHAR (v_count_del),
'');
COMMIT;
END;
-- SUBPROC
PROCEDURE diensten_bedrijf (p_import_key IN NUMBER)
AS
CURSOR c_dienst
IS
SELECT DISTINCT prs_dienst_omschrijving
FROM fac_imp_ext_bedrijf
WHERE prs_dienst_omschrijving IS NOT NULL;
CURSOR c_dienstlocgebouw
IS
SELECT prs_dienst_omschrijving,
alg_locatie_code,
alg_gebouw_code,
prs_bedrijf_naam
FROM fac_imp_ext_bedrijf
WHERE prs_dienst_omschrijving IS NOT NULL;
v_alg_locatie_key NUMBER (10);
v_alg_gebouw_key NUMBER (10);
v_prs_dienst_key NUMBER (10);
v_prs_bedrijf_key NUMBER (10);
BEGIN
v_count_tot := 0;
v_count_upd := 0;
FOR rec2 IN c_dienst
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_errormsg := 'Kan dienst niet bepalen [' || rec2.prs_dienst_omschrijving || '] ';
--
BEGIN
SELECT prs_dienst_key
INTO v_prs_dienst_key
FROM prs_dienst
WHERE UPPER(prs_dienst_omschrijving) = UPPER(rec2.prs_dienst_omschrijving);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_errormsg := 'Kan dienst niet wegschrijven [' || rec2.prs_dienst_omschrijving || '] ';
--
INSERT INTO prs_dienst
(prs_dienst_omschrijving)
VALUES (rec2.prs_dienst_omschrijving);
END;
--
v_count_upd := v_count_upd + 1;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
v_errorhint := v_errormsg;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
v_errormsg
|| 'ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
v_errorhint
);
COMMIT; -- tbv logging
END;
END LOOP;
--
fac.imp_writelog (p_import_key,
'S',
'Diensten: aantal ingelezen: ' || TO_CHAR (v_count_tot),
''
);
fac.imp_writelog (p_import_key,
'S',
'Diensten: aantal toegevoegd: '
|| TO_CHAR (v_count_upd),
''
);
--
v_count_tot := 0;
v_count_upd := 0;
--
FOR rec3 IN c_dienstlocgebouw
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_errormsg := 'Kan dienst niet bepalen [' || rec3.prs_dienst_omschrijving || '] ';
SELECT prs_dienst_key
INTO v_prs_dienst_key
FROM prs_dienst
WHERE prs_dienst_omschrijving = rec3.prs_dienst_omschrijving;
v_errormsg := 'Kan locatie niet bepalen [' || rec3.alg_locatie_code || '] ';
IF rec3.alg_locatie_code IS NOT NULL
THEN
SELECT alg_locatie_key
INTO v_alg_locatie_key
FROM alg_v_aanweziglocatie
WHERE alg_locatie_code = rec3.alg_locatie_code;
ELSE
v_alg_locatie_key := NULL;
END IF;
v_errormsg := 'Kan gebouw niet bepalen [' || rec3.alg_gebouw_code || '] ';
IF rec3.alg_gebouw_code IS NOT NULL
THEN
SELECT alg_gebouw_key
INTO v_alg_gebouw_key
FROM alg_v_aanweziggebouw
WHERE alg_gebouw_code = rec3.alg_gebouw_code
AND alg_locatie_key = v_alg_locatie_key;
ELSE
v_alg_gebouw_key := NULL;
END IF;
v_errormsg := 'Kan bedrijf niet bepalen [' || rec3.prs_bedrijf_naam || '] ';
SELECT prs_bedrijf_key
INTO v_prs_bedrijf_key
FROM prs_v_aanwezigbedrijf
WHERE prs_bedrijf_naam = rec3.prs_bedrijf_naam;
v_errormsg := 'Kan bedrijf/dienst/loc/gebouw niet wegschrijven ['
|| rec3.prs_bedrijf_naam || '/'
|| rec3.prs_dienst_omschrijving || '/'
|| rec3.alg_locatie_code || '/'
|| rec3.alg_gebouw_code || '] ';
INSERT INTO prs_bedrijfdienstlocatie
( prs_dienst_key
, prs_bedrijf_key
, alg_locatie_key
, alg_gebouw_key
)
VALUES
( v_prs_dienst_key
, v_prs_bedrijf_key
, decode (v_alg_gebouw_key, null, v_alg_locatie_key, null)
, v_alg_gebouw_key
);
v_count_upd := v_count_upd + 1;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
v_errorhint := v_errormsg;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
v_errormsg
|| 'ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
v_errorhint
);
COMMIT; -- tbv logging
END;
END LOOP;
--
fac.imp_writelog (p_import_key,
'S',
'Bedrijf/dienst/locatie: aantal ingelezen: '
|| TO_CHAR (v_count_tot),
''
);
fac.imp_writelog (p_import_key,
'S',
'Bedrijf/dienst/locatie: aantal toegevoegd: '
|| TO_CHAR (v_count_upd),
''
);
END;
--
-- MAIN
BEGIN
IF p_sync = 1
THEN
-- Bij aanvullen nooit verwijderen, alleen bij sync-en
del_bedrijf (p_import_key);
END IF;
--
add_relatietype (p_import_key);
add_bedrijf (p_import_key);
--
IF p_sync = 0
THEN
-- Bij aanvullen bedrijven de diensten-locatie-gebouw uitvoeren, bij sync-en (nog) niet
diensten_bedrijf(p_import_key);
END IF;
--
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Importproces relaties afgebroken!');
END;
/
CREATE OR REPLACE PROCEDURE fac_update_ext_bedrijf (p_import_key IN NUMBER
)
AS
BEGIN
fac_update_bedrijf_body(p_import_key, 0);
END;
/
CREATE OR REPLACE PROCEDURE fac_import_bedrijfadres (p_import_key IN NUMBER)
IS
c_delim VARCHAR2 (2) := fac.import_delimiter(p_import_key);
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- 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_tot NUMBER (10);
v_count_import NUMBER (10);
v_ongeldig NUMBER (1);
v_aanduiding VARCHAR (200);
-- De importvelden
v_prs_bedrijf_naam VARCHAR2 (255); -- VARCHAR2(60),
v_prs_leverancier_nr VARCHAR2 (255); -- VARCHAR2(50),
v_prs_bedrijf_key NUMBER(10);
v_prs_bedrijfadres_type VARCHAR2 (255); -- VARCHAR2(1),
v_mld_typeopdr_omschrijving VARCHAR2 (255); -- NUMBER(10),
v_mld_typeopdr_key NUMBER(10);
v_prs_bedrijfadres_url VARCHAR2 (1000); -- VARCHAR2(512),
v_prs_bedrijfadres_ordermode VARCHAR2 (255); -- NUMBER(3),
v_prs_bedrijfadres_certificate VARCHAR2 (1000); -- VARCHAR2(255),
v_prs_bedrijfadres_xsl VARCHAR2 (1000); -- VARCHAR2(256),
v_prs_bedrijfadres_ext VARCHAR2 (255); -- VARCHAR2(10),
v_prs_bedrijfadres_attachfile VARCHAR2 (1000); -- VARCHAR2(256),
v_prs_bedrijfadres_username VARCHAR2 (255); -- VARCHAR2(128),
v_prs_bedrijfadres_password VARCHAR2 (1000); -- VARCHAR2(320)),
v_prs_bedrijfadres_sender VARCHAR2 (1000); -- VARCHAR2(512),
v_prs_bedrijfadres_replyaddress VARCHAR2 (1000); -- VARCHAR2(512),
v_prs_bedrijfadres_lockuser VARCHAR2 (255); -- NUMBER(10),
v_lockuser_key NUMBER (10);
v_prs_bedrijfadres_lockexpire VARCHAR2 (255);
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
-- Eerst opruiming
DELETE FROM fac_imp_bedrijfadres;
COMMIT;
v_count_tot := 0;
v_count_import := 0;
header_is_valid := 0;
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_errormsg := 'Fout bij opvragen importregel';
v_aanduiding := '';
v_ongeldig := 0;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijf_naam);
fac.imp_getfield (v_newline, c_delim, v_prs_leverancier_nr);
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijfadres_type);
fac.imp_getfield (v_newline, c_delim, v_mld_typeopdr_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijfadres_url);
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijfadres_ordermode);
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijfadres_certificate);
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijfadres_xsl);
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijfadres_ext);
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijfadres_attachfile);
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijfadres_username);
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijfadres_password);
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijfadres_sender);
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijfadres_replyaddress);
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijfadres_lockuser);
fac.imp_getfield (v_newline, c_delim, v_prs_bedrijfadres_lockexpire);
v_aanduiding :=
'['
|| v_prs_bedrijf_naam
|| '|'
|| v_prs_leverancier_nr
|| '|'
|| v_prs_bedrijfadres_type
|| '|'
|| v_mld_typeopdr_omschrijving
|| '] ';
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
IF (header_is_valid = 0)
THEN
IF fac_check_import_header(v_prs_bedrijf_naam, 'BEDRIJFSNAAM')
AND fac_check_import_header(v_prs_leverancier_nr, 'LEVERANCIERNUMMER')
AND fac_check_import_header(v_prs_bedrijfadres_type, 'KANAAL')
AND fac_check_import_header(v_mld_typeopdr_omschrijving, 'OPDRACHTTYPE')
AND fac_check_import_header(v_prs_bedrijfadres_url, 'ADRES')
AND fac_check_import_header(v_prs_bedrijfadres_ordermode, 'ORDERMODE')
AND fac_check_import_header(v_prs_bedrijfadres_certificate, 'CERTIFICAAT')
AND fac_check_import_header(v_prs_bedrijfadres_xsl, 'XSL TEMPLATE')
AND fac_check_import_header(v_prs_bedrijfadres_ext, 'EXTENSIE')
AND fac_check_import_header(v_prs_bedrijfadres_attachfile, 'VASTE BIJLAGE')
AND fac_check_import_header(v_prs_bedrijfadres_username, 'LOGIN')
AND fac_check_import_header(v_prs_bedrijfadres_password, 'WACHTWOORD')
AND fac_check_import_header(v_prs_bedrijfadres_sender, 'AFZENDER')
AND fac_check_import_header(v_prs_bedrijfadres_replyaddress,'REPLY ADRES')
AND fac_check_import_header(v_prs_bedrijfadres_lockuser, 'VASTE GEBRUIKER')
AND fac_check_import_header(v_prs_bedrijfadres_lockexpire, 'EXPIRE DAYS')
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
v_errormsg := 'Bedrijf niet gevonden';
BEGIN
SELECT prs_bedrijf_key
INTO v_prs_bedrijf_key
FROM prs_bedrijf
WHERE COALESCE(prs_bedrijf_intern, 0) <> 1
AND prs_bedrijf_verwijder IS NULL
AND UPPER(prs_leverancier_nr) = UPPER(v_prs_leverancier_nr);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
BEGIN
SELECT prs_bedrijf_key
INTO v_prs_bedrijf_key
FROM prs_bedrijf
WHERE COALESCE(prs_bedrijf_intern, 0) <> 1
AND prs_bedrijf_verwijder IS NULL
AND UPPER(prs_bedrijf_naam) = UPPER(v_prs_bedrijf_naam);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END;
WHEN TOO_MANY_ROWS
THEN
BEGIN
SELECT prs_bedrijf_key
INTO v_prs_bedrijf_key
FROM prs_bedrijf
WHERE COALESCE(prs_bedrijf_intern, 0) <> 1
AND prs_bedrijf_verwijder IS NULL
AND UPPER(prs_leverancier_nr) = UPPER(v_prs_leverancier_nr)
AND UPPER(prs_bedrijf_naam) = UPPER(v_prs_bedrijf_naam);
EXCEPTION
WHEN NO_DATA_FOUND OR TOO_MANY_ROWS
THEN
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || 'Leveranciernummer/bedrijf niet gevonden',
'Regel wordt overgeslagen');
v_ongeldig := 1;
END;
END;
IF v_ongeldig = 0
THEN
v_errormsg := 'Opdrachttype niet gevonden';
v_mld_typeopdr_key := NULL;
IF UPPER(v_prs_bedrijfadres_type) = 'O' AND v_mld_typeopdr_omschrijving IS NOT NULL
THEN
BEGIN
SELECT mld_typeopdr_key
INTO v_mld_typeopdr_key
FROM mld_typeopdr
WHERE mld_typeopdr_upper = UPPER(v_mld_typeopdr_omschrijving);
EXCEPTION WHEN NO_DATA_FOUND
THEN
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END;
END IF;
END IF;
-- Expire days mag niet negatief of meer zijn dan 10 posities lang.
-- Indien leeg, dan blijft/wordt expire_days=ongedefinieerd=NULL!
v_prs_bedrijfadres_lockexpire := TRIM (v_prs_bedrijfadres_lockexpire);
IF v_prs_bedrijfadres_lockexpire IS NOT NULL
AND ( fac.safe_to_number (v_prs_bedrijfadres_lockexpire) IS NULL
OR fac.safe_to_number (v_prs_bedrijfadres_lockexpire) < 0
OR fac.safe_to_number (v_prs_bedrijfadres_lockexpire) > 9999999999)
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Ongeldig aantal expire days',
'Regel wordt niet ingelezen (Expire days:' || v_prs_bedrijfadres_lockexpire || ')'
);
v_ongeldig := 1;
END IF;
IF v_ongeldig = 0
THEN
v_errormsg := 'Controleer kanaal';
IF LENGTH(v_prs_bedrijfadres_type) > 1
THEN
v_prs_bedrijfadres_type := SUBSTR(v_prs_bedrijfadres_type, 1, 1);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg,
'Kanaal aangepast naar: ' || v_prs_bedrijfadres_type);
END IF;
v_errormsg := 'Controleer lengte van URL';
IF LENGTH(v_prs_bedrijfadres_url) > 512
THEN
v_prs_bedrijfadres_url := SUBSTR(v_prs_bedrijfadres_url, 1, 512);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg,
'URL aangepast naar: ' || v_prs_bedrijfadres_url);
END IF;
v_errormsg := 'Controleer ordermode';
IF LENGTH(v_prs_bedrijfadres_ordermode) > 3
OR ( fac.safe_to_number(v_prs_bedrijfadres_ordermode) IS NULL
AND v_prs_bedrijfadres_ordermode IS NOT NULL)
THEN
v_prs_bedrijfadres_ordermode := SUBSTR(v_prs_bedrijfadres_ordermode, 1, 3);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg,
'Ordermode aangepast naar: ' || fac.safe_to_number(v_prs_bedrijfadres_ordermode));
END IF;
v_errormsg := 'Controleer lengte van certificaat';
IF LENGTH(v_prs_bedrijfadres_certificate) > 255
THEN
v_prs_bedrijfadres_certificate := SUBSTR(v_prs_bedrijfadres_certificate, 1, 255);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg,
'Certificaat aangepast naar: ' || v_prs_bedrijfadres_certificate);
END IF;
v_errormsg := 'Controleer lengte van stylesheet';
IF LENGTH(v_prs_bedrijfadres_xsl) > 256
THEN
v_prs_bedrijfadres_xsl := SUBSTR(v_prs_bedrijfadres_xsl, 1, 256);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg,
'Stylesheet aangepast naar: ' || v_prs_bedrijfadres_xsl);
END IF;
v_errormsg := 'Controleer lengte van extensie';
IF LENGTH(v_prs_bedrijfadres_ext) > 10
THEN
v_prs_bedrijfadres_ext := SUBSTR(v_prs_bedrijfadres_ext, 1, 10);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg,
'Extensie aangepast naar: ' || v_prs_bedrijfadres_ext);
END IF;
v_errormsg := 'Controleer lengte van vaste bijlage';
IF LENGTH(v_prs_bedrijfadres_attachfile) > 256
THEN
v_prs_bedrijfadres_attachfile := SUBSTR(v_prs_bedrijfadres_attachfile, 1, 256);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg,
'Vaste bijlage aangepast naar: ' || v_prs_bedrijfadres_attachfile);
ELSE
IF ((LENGTH(v_prs_bedrijfadres_attachfile) > 0) AND (INSTR(v_prs_bedrijfadres_attachfile,'.') < 0))
THEN
v_prs_bedrijfadres_attachfile := '';
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg,
'Ongeldige vaste bijlage verwijderd: ' || v_prs_bedrijfadres_attachfile);
END IF;
END IF;
v_errormsg := 'Controleer lengte van login';
IF LENGTH(v_prs_bedrijfadres_username) > 128
THEN
v_prs_bedrijfadres_username := SUBSTR(v_prs_bedrijfadres_username, 1, 128);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg,
'Login aangepast naar: ' || v_prs_bedrijfadres_username);
END IF;
v_errormsg := 'Controleer lengte van wachtwoord';
IF LENGTH(v_prs_bedrijfadres_password) > 320
THEN
v_prs_bedrijfadres_password := SUBSTR(v_prs_bedrijfadres_password, 1, 320);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg,
'Wachtwoord aangepast naar: ' || v_prs_bedrijfadres_password);
END IF;
v_errormsg := 'Controleer lengte van afzender';
IF LENGTH(v_prs_bedrijfadres_sender) > 512
THEN
v_prs_bedrijfadres_sender := SUBSTR(v_prs_bedrijfadres_sender, 1, 512);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg,
'Afzender aangepast naar: ' || v_prs_bedrijfadres_sender);
END IF;
v_errormsg := 'Controleer lengte van reply adres';
IF LENGTH(v_prs_bedrijfadres_replyaddress) > 512
THEN
v_prs_bedrijfadres_replyaddress := SUBSTR(v_prs_bedrijfadres_replyaddress, 1, 512);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg,
'Reply adres aangepast naar: ' || v_prs_bedrijfadres_replyaddress);
END IF;
-- Vindt de key van de vaste gebruiker.
v_prs_bedrijfadres_lockuser := TRIM (v_prs_bedrijfadres_lockuser);
IF v_prs_bedrijfadres_lockuser IS NOT NULL
THEN
BEGIN
SELECT prs_perslid_key
INTO v_lockuser_key
FROM prs_perslid
WHERE prs_perslid_oslogin = UPPER (v_prs_bedrijfadres_lockuser)
AND prs_perslid_verwijder IS NULL;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_lockuser_key := NULL;
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || 'Budgethouder-aanduiding kan niet gevonden worden',
'Vaste gebruiker wordt leeg gemaakt [' || v_prs_bedrijfadres_lockuser || ']');
END;
ELSE
v_lockuser_key := NULL;
END IF;
BEGIN
v_errormsg := 'Toevoegen bedrijfadres';
INSERT INTO fac_imp_bedrijfadres (prs_bedrijf_key,
prs_bedrijfadres_type,
mld_typeopdr_key,
prs_bedrijfadres_url,
prs_bedrijfadres_ordermode,
prs_bedrijfadres_certificate,
prs_bedrijfadres_xsl,
prs_bedrijfadres_ext,
prs_bedrijfadres_attachfile,
prs_bedrijfadres_username,
prs_bedrijfadres_password,
prs_bedrijfadres_sender,
prs_bedrijfadres_replyaddress,
prs_bedrijfadres_lockuser_key,
prs_bedrijfadres_lockexpire)
VALUES (v_prs_bedrijf_key,
v_prs_bedrijfadres_type,
v_mld_typeopdr_key,
v_prs_bedrijfadres_url,
v_prs_bedrijfadres_ordermode,
v_prs_bedrijfadres_certificate,
v_prs_bedrijfadres_xsl,
v_prs_bedrijfadres_ext,
v_prs_bedrijfadres_attachfile,
v_prs_bedrijfadres_username,
v_prs_bedrijfadres_password,
v_prs_bedrijfadres_sender,
v_prs_bedrijfadres_replyaddress,
v_lockuser_key,
fac.safe_to_number (v_prs_bedrijfadres_lockexpire));
COMMIT;
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'');
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!');
ELSE
fac.imp_writelog (
p_import_key,
'S',
'Adressen/aantal ingelezen importregels: ' || TO_CHAR (v_count_tot),
''
);
fac.imp_writelog (
p_import_key,
'S',
'Adressen/aantal ongeldige niet ingelezen importregels: '
|| TO_CHAR (v_count_tot - v_count_import),
''
);
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Inleesproces adressen afgebroken!');
END fac_import_bedrijfadres;
/
CREATE OR REPLACE PROCEDURE fac_update_bedrijfadres (p_import_key IN NUMBER)
AS
CURSOR c
IS
SELECT *
FROM fac_imp_bedrijfadres i;
v_errormsg VARCHAR2 (1000) := '-';
v_errorhint VARCHAR2 (1000) := '-';
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count NUMBER (10);
v_count_tot NUMBER (10);
v_aanduiding VARCHAR2 (200) := '-';
v_prs_bedrijf_naam VARCHAR (60);
-- MAIN
BEGIN
v_count_tot := 0;
v_count := 0;
FOR rec IN c
LOOP
BEGIN
SELECT prs_bedrijf_naam
INTO v_prs_bedrijf_naam
FROM prs_bedrijf
WHERE prs_bedrijf_key = rec.prs_bedrijf_key;
v_count_tot := v_count_tot + 1;
v_aanduiding :=
'['
|| v_prs_bedrijf_naam
|| '|'
|| rec.prs_bedrijfadres_type
|| '] ';
v_errorhint := 'Fout toevoegen bedrijfadres';
INSERT INTO prs_bedrijfadres (prs_bedrijf_key,
prs_bedrijfadres_type,
mld_typeopdr_key,
prs_bedrijfadres_url,
prs_bedrijfadres_ordermode,
prs_bedrijfadres_certificate,
prs_bedrijfadres_xsl,
prs_bedrijfadres_ext,
prs_bedrijfadres_attachfile,
prs_bedrijfadres_username,
prs_bedrijfadres_password,
prs_bedrijfadres_sender,
prs_bedrijfadres_replyaddress,
prs_bedrijfadres_lockuser_key,
prs_bedrijfadres_locksecret,
prs_bedrijfadres_lockexpire)
VALUES (rec.prs_bedrijf_key,
rec.prs_bedrijfadres_type,
rec.mld_typeopdr_key,
rec.prs_bedrijfadres_url,
rec.prs_bedrijfadres_ordermode,
rec.prs_bedrijfadres_certificate,
rec.prs_bedrijfadres_xsl,
rec.prs_bedrijfadres_ext,
rec.prs_bedrijfadres_attachfile,
rec.prs_bedrijfadres_username,
rec.prs_bedrijfadres_password,
rec.prs_bedrijfadres_sender,
rec.prs_bedrijfadres_replyaddress,
rec.prs_bedrijfadres_lockuser_key,
CASE
WHEN rec.prs_bedrijfadres_lockuser_key IS NOT NULL
THEN DBMS_RANDOM.string('a', 32)
ELSE NULL
END,
CASE
WHEN rec.prs_bedrijfadres_lockuser_key IS NOT NULL
THEN COALESCE(rec.prs_bedrijfadres_lockexpire, 30)
ELSE NULL
END);
v_count := v_count + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'ORACLE (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',
'Bedrijf: #ingelezen: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (p_import_key,
'S',
'Bedrijf: #toegevoegd: ' || TO_CHAR (v_count),
'');
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Importproces bedrijfadressen afgebroken!');
END;
/
-- FSN#19006: dit is hier ingeplakt, maar moet nog gereviseerd worden naar de laatste stand van zaken
CREATE OR REPLACE PROCEDURE fac_import_factuur (p_import_key IN NUMBER
)
AS
-- Standaard volgorde van de kolommen in het CSV-formaat, waarbij 3 velden VERPLICHT (minimaal door Facilitor vereist)
-- Variabelelijst
-- v_leveranciernr: 1
-- v_factuurnr: 2 (VERPLICHT, anders zet Facilitor '-' in factuurnr, en is status van factuur "Incompleet")
-- v_factuurdatum: 3
-- v_empty);
-- v_ordernr: 4 (VERPLICHT, anders is status van factuur "Incompleet")
-- v_locatie: 5
-- v_afleverdatum: 6
-- v_omschrijving: 7
-- v_aantal: 8
-- v_kostprijs: 9 (VERPLICHT, anders is status van factuur "Incompleet")
-- v_btw_bedrag: 10 (VERPLICHT, of anders veld 11, anders is status van factuur "Incompleet")
-- v_btw: 11 (VERPLICHT, of anders veld 10, anders is status van factuur "Incompleet")
-- v_docid: 12
-- v_debiteur_nr: 13
-- v_opmerking: 14
-- v_btw_verlegd: 15 (VERPLICHT, Ja/Nee/<leeg> waarbij leeg gelijk is aan Nee. Andere waarden leidt tot "Incompleet")
-- v_kenmerk1: 16
-- v_kenmerk2: 17
-- v_kenmerk3: 18
-- v_kenmerk4: 19
-- v_kenmerk5: 20
-- v_boekmaand: 21
-- v_kenmerk6: 22
-- v_kenmerk7: 23
-- v_kenmerk8: 24
-- v_kenmerk9: 25
-- v_kenmerk10: 26
-- v_kenmerk11: 27
-- v_kenmerk12: 28
-- v_kenmerk13: 29
-- v_kenmerk14: 30
-- v_kenmerk15: 31
-- v_kenmerk16: 32
-- v_kenmerk17: 33
-- v_kenmerk18: 34
-- v_kenmerk19: 35
-- v_kenmerk20: 36
-- v_artikelcode: 37
-- v_factuurregelaantal: 38
-- v_eenheid: 39
-- v_opdrachtregelid: 40
-- Eerst geprobeerd via nette array, geeft problemen met type buiten package, en in package lukt niet omdat
-- de import in Facilitor package-loos is (en niet 1-2-3 zo kan worden gemaakt vanwege alle bestaande klanten)
-- v_seq_of_columns ListOfInteger := (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40);
-- Dus dan maar via een string, en ook op slimme wijze, nl alsof het een ingelezen factuur-record is met p_fielddelimitor
v_seq_of_columns VARCHAR(255);
-- Afwijkingen op deze volgorde zijn in eigen cust_import_factuur te regelen.
-- Als leveranciersnr en factuurnr b.v. zijn omgedraaid in het CSV-formaat,
-- dan factuurimport ListOfInteger := (2,1,3,4,5,6,7,8,9,10,11,12);
-- v_seq_of_columns := '2;1;3;4;5;6;7;8;9;10;11;12';
-- Als leveranciersnr NIET in CSV staat, dan factuurimport ListOfInteger := (0,2,3,4,5,6,7,8,9,10,11,12);
-- v_seq_of_columns := '0;2;3;4;5;6;7;8;9;10;11;12';
-- M.a.w. waar een 0 staat, wordt de variabele niet ingelezen en blijft LEEG.
BEGIN
v_seq_of_columns := '1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33;34;35;36;37;38;39;40';
fac_import_factuur_body(p_import_key, v_seq_of_columns);
END;
/
CREATE OR REPLACE PROCEDURE fac_import_factuur_body (p_import_key IN NUMBER,
p_seq_of_columns IN VARCHAR2
)
AS
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line
v_field VARCHAR2 (100);
v_fielddelimitor VARCHAR2 (2);
v_errormsg VARCHAR (200);
v_errorhint VARCHAR2 (200);
v_count NUMBER(10);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
-- De velden op de eerste regel
v_totbedrfact VARCHAR2 (100);
v_totbedrfactvalue VARCHAR2 (100);
-- De importvelden
v_empty VARCHAR2 (100);
v_debiteurnr VARCHAR2 (100);
v_ordernr VARCHAR2 (100);
v_leveranciernr VARCHAR2 (100);
v_factuurnr VARCHAR2 (100);
v_factuurdatum VARCHAR2 (100);
v_aantal VARCHAR2 (100);
v_kostprijs VARCHAR2 (100);
v_btw VARCHAR2 (100);
v_btw_bedrag VARCHAR2 (100);
v_docid VARCHAR2 (255);
v_locatie VARCHAR2 (100);
v_afleverdatum VARCHAR2 (100);
v_omschrijving VARCHAR2 (4000);
v_opmerking VARCHAR2 (250);
v_btw_verlegd VARCHAR2 (255);
v_kenmerk1 VARCHAR2 (4000);
v_kenmerk2 VARCHAR2 (4000);
v_kenmerk3 VARCHAR2 (4000);
v_kenmerk4 VARCHAR2 (4000);
v_kenmerk5 VARCHAR2 (4000);
v_kenmerk6 VARCHAR2 (4000);
v_kenmerk7 VARCHAR2 (4000);
v_kenmerk8 VARCHAR2 (4000);
v_kenmerk9 VARCHAR2 (4000);
v_kenmerk10 VARCHAR2 (4000);
v_kenmerk11 VARCHAR2 (4000);
v_kenmerk12 VARCHAR2 (4000);
v_kenmerk13 VARCHAR2 (4000);
v_kenmerk14 VARCHAR2 (4000);
v_kenmerk15 VARCHAR2 (4000);
v_kenmerk16 VARCHAR2 (4000);
v_kenmerk17 VARCHAR2 (4000);
v_kenmerk18 VARCHAR2 (4000);
v_kenmerk19 VARCHAR2 (4000);
v_kenmerk20 VARCHAR2 (4000);
v_boekmaand VARCHAR2 (4000);
v_artikelcode VARCHAR2(255);
v_factuurregelaantal NUMBER(8,2);
v_eenheid VARCHAR2(30);
v_opdrachtregelid NUMBER(10);
v_check_dec_sign NUMBER (5, 2);
v_seq_of_columns VARCHAR2(255);
v_colnr VARCHAR2 (2);
v_colnr1 NUMBER;
v_colnr2 NUMBER;
v_colnr3 NUMBER;
v_colnr4 NUMBER;
v_colnr5 NUMBER;
v_colnr6 NUMBER;
v_colnr7 NUMBER;
v_colnr8 NUMBER;
v_colnr9 NUMBER;
v_colnr10 NUMBER;
v_colnr11 NUMBER;
v_colnr12 NUMBER;
v_colnr13 NUMBER;
v_colnr14 NUMBER;
v_colnr15 NUMBER;
v_colnr16 NUMBER;
v_colnr17 NUMBER;
v_colnr18 NUMBER;
v_colnr19 NUMBER;
v_colnr20 NUMBER;
v_colnr21 NUMBER;
v_colnr22 NUMBER;
v_colnr23 NUMBER;
v_colnr24 NUMBER;
v_colnr25 NUMBER;
v_colnr26 NUMBER;
v_colnr27 NUMBER;
v_colnr28 NUMBER;
v_colnr29 NUMBER;
v_colnr30 NUMBER;
v_colnr31 NUMBER;
v_colnr32 NUMBER;
v_colnr33 NUMBER;
v_colnr34 NUMBER;
v_colnr35 NUMBER;
v_colnr36 NUMBER;
v_colnr37 NUMBER;
v_colnr38 NUMBER;
v_colnr39 NUMBER;
v_colnr40 NUMBER;
CURSOR cfactuur
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
-- Er kunnen al records in fac_imp_factuur zitten als meerdere XML-bestanden
-- zijn ingelezen door UTILS\gen_import\gen_import.wsf die tegelijk worden
-- verwerkt
SELECT COALESCE(MAX(fac_imp_file_index), 0)+1
INTO v_count
FROM fac_imp_factuur
WHERE fac_import_key = p_import_key;
-- Init
v_fielddelimitor := fac.import_delimiter(p_import_key);
v_seq_of_columns := p_seq_of_columns;
v_errorhint := 'Bepalen volgorde kolommen';
-- De volgorde de te importeren kolommen in de CSV uitlezen uit v_seq_of_columns
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr1);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr2);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr3);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr4);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr5);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr6);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr7);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr8);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr9);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr10);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr11);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr12);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr13);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr14);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr15);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr16);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr17);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr18);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr19);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr20);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr21);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr22);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr23);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr24);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr25);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr26);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr27);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr28);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr29);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr30);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr31);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr32);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr33);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr34);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr35);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr36);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr37);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr38);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr39);
fac.imp_getfield (v_seq_of_columns, v_fielddelimitor, v_colnr40);
v_errorhint := 'Decimaal check';
-- check the client decimal settings
-- we do not convert the , to a . if the client decimal separator is a ,
SELECT fac.safe_to_number ('2,5') INTO v_check_dec_sign FROM DUAL;
FOR v_rec IN cfactuur
LOOP
BEGIN
v_errorhint := 'Inlezen regel';
v_newline := v_rec.fac_imp_file_line;
-- we gaan geen regels inlezen die geen informatie bevatten.
IF LENGTH (v_newline) > 10
THEN
v_errorhint := 'Inlezen leveranciernr kolom:' || v_colnr1;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr1), v_leveranciernr);
v_errorhint := 'Inlezen factuurnr kolom:' || v_colnr2;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr2), v_factuurnr);
v_errorhint := 'Inlezen factuurdatum kolom:' || v_colnr3;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr3), v_factuurdatum);
v_errorhint := 'Inlezen ordernr kolom:' || v_colnr4;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr4), v_ordernr);
v_errorhint := 'Inlezen locatie kolom:' || v_colnr5;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr5), v_locatie);
v_errorhint := 'Inlezen afleverdatum kolom:' || v_colnr6;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr6), v_afleverdatum);
v_errorhint := 'Inlezen omschrijving kolom:' || v_colnr7;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr7), v_omschrijving);
v_errorhint := 'Inlezen aantal kolom:' || v_colnr8;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr8), v_aantal);
v_errorhint := 'Inlezen kostprijs kolom:' || v_colnr9;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr9), v_kostprijs);
v_errorhint := 'Inlezen btw_bedrag kolom:' || v_colnr10;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr10), v_btw_bedrag);
v_errorhint := 'Inlezen btw kolom:' || v_colnr11;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr11), v_btw);
v_errorhint := 'Inlezen docid kolom:' || v_colnr12;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr12), v_docid);
v_errorhint := 'Inlezen debiteurnr kolom:' || v_colnr13;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr13), v_debiteurnr);
v_errorhint := 'Inlezen opmerking kolom:' || v_colnr14;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr14), v_opmerking);
v_errorhint := 'Inlezen btw_verlegd kolom:' || v_colnr15;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr15), v_btw_verlegd);
v_errorhint := 'Inlezen kenmerk1 kolom:' || v_colnr16;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr16), v_kenmerk1);
v_errorhint := 'Inlezen kenmerk2 kolom:' || v_colnr17;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr17), v_kenmerk2);
v_errorhint := 'Inlezen kenmerk3 kolom:' || v_colnr18;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr18), v_kenmerk3);
v_errorhint := 'Inlezen kenmerk4 kolom:' || v_colnr19;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr19), v_kenmerk4);
v_errorhint := 'Inlezen kenmerk5 kolom:' || v_colnr20;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr20), v_kenmerk5);
v_errorhint := 'Inlezen boekmaand kolom:' || v_colnr21;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr21), v_boekmaand);
v_errorhint := 'Inlezen kenmerk6 kolom:' || v_colnr22;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr22), v_kenmerk6);
v_errorhint := 'Inlezen kenmerk7 kolom:' || v_colnr23;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr23), v_kenmerk7);
v_errorhint := 'Inlezen kenmerk8 kolom:' || v_colnr24;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr24), v_kenmerk8);
v_errorhint := 'Inlezen kenmerk9 kolom:' || v_colnr25;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr25), v_kenmerk9);
v_errorhint := 'Inlezen kenmerk10 kolom:' || v_colnr26;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr26), v_kenmerk10);
v_errorhint := 'Inlezen kenmerk11 kolom:' || v_colnr27;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr27), v_kenmerk11);
v_errorhint := 'Inlezen kenmerk12 kolom:' || v_colnr28;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr28), v_kenmerk12);
v_errorhint := 'Inlezen kenmerk13 kolom:' || v_colnr29;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr29), v_kenmerk13);
v_errorhint := 'Inlezen kenmerk14 kolom:' || v_colnr30;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr30), v_kenmerk14);
v_errorhint := 'Inlezen kenmerk15 kolom:' || v_colnr31;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr31), v_kenmerk15);
v_errorhint := 'Inlezen kenmerk16 kolom:' || v_colnr32;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr32), v_kenmerk16);
v_errorhint := 'Inlezen kenmerk17 kolom:' || v_colnr33;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr33), v_kenmerk17);
v_errorhint := 'Inlezen kenmerk18 kolom:' || v_colnr34;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr34), v_kenmerk18);
v_errorhint := 'Inlezen kenmerk19 kolom:' || v_colnr35;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr35), v_kenmerk19);
v_errorhint := 'Inlezen kenmerk20 kolom:' || v_colnr36;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr36), v_kenmerk20);
v_errorhint := 'Inlezen factuurregel artikelcode kolom:' || v_colnr37;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr37), v_artikelcode);
v_errorhint := 'Inlezen factuurregel aantal kolom:' || v_colnr38;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr38), v_factuurregelaantal);
v_errorhint := 'Inlezen factuurregel eenheid kolom:' || v_colnr39;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr39), v_eenheid);
v_errorhint := 'Inlezen factuurregel opdrachtregelid kolom:' || v_colnr40;
fac.imp_getfield_nr (v_newline, v_fielddelimitor, fac.safe_to_number(v_colnr40), v_opdrachtregelid);
IF v_check_dec_sign IS NULL
THEN
v_kostprijs := REPLACE (SUBSTR (v_kostprijs, 1, 15), ',', '.');
v_btw_bedrag := REPLACE (SUBSTR (v_btw_bedrag, 1, 15), ',', '.');
v_aantal := REPLACE (SUBSTR (v_aantal, 1, 10), ',', '.');
ELSE
v_kostprijs := SUBSTR (v_kostprijs, 1, 15);
v_btw_bedrag := SUBSTR (v_btw_bedrag, 1, 15);
v_aantal := SUBSTR (v_aantal, 1, 10);
END IF;
-- Een (eventuele) header-regel willen we niet importeren
-- ORDERNR lijkt een goede maatstaf, want die bevat de verwijzing
-- naar onze BROC en moet aan conventies voldoen
IF UPPER (v_ordernr) = 'ORDERNR'
THEN
-- de header, dus negeren
NULL;
ELSE
INSERT INTO fac_imp_factuur ( fac_import_key,
fac_imp_file_index,
leveranciernr,
ordernr,
factuurnr,
factuurdatum,
aantal,
kostprijs,
btw,
debiteurnr,
locatie,
afleverdatum,
btw_bedrag,
docid,
omschrijving,
opmerking,
btw_verlegd,
kenmerk1,
kenmerk2,
kenmerk3,
kenmerk4,
kenmerk5,
kenmerk6,
kenmerk7,
kenmerk8,
kenmerk9,
kenmerk10,
kenmerk11,
kenmerk12,
kenmerk13,
kenmerk14,
kenmerk15,
kenmerk16,
kenmerk17,
kenmerk18,
kenmerk19,
kenmerk20,
boekmaand,
artikelcode,
factuurregelaantal,
eenheid,
opdrachtregelid)
VALUES ( v_rec.fac_import_key,
v_count,
UPPER (SUBSTR (v_leveranciernr, 1, 20)),
SUBSTR (REPLACE(v_ordernr,' ',''), 1, 31),
SUBSTR (v_factuurnr, 1, 30),
SUBSTR (v_factuurdatum, 1, 10),
SUBSTR (v_aantal, 1, 10),
v_kostprijs,
SUBSTR (v_btw, 1, 2),
SUBSTR (v_debiteurnr, 1, 30),
SUBSTR (v_locatie, 1, 30),
SUBSTR (v_afleverdatum, 1, 10),
v_btw_bedrag,
SUBSTR (v_docid, 1, 255),
SUBSTR (v_omschrijving, 1, 250),
SUBSTR (v_opmerking, 1, 250),
SUBSTR (v_btw_verlegd, 1, 3),
SUBSTR (v_kenmerk1, 1, 4000),
SUBSTR (v_kenmerk2, 1, 4000),
SUBSTR (v_kenmerk3, 1, 4000),
SUBSTR (v_kenmerk4, 1, 4000),
SUBSTR (v_kenmerk5, 1, 4000),
SUBSTR (v_kenmerk6, 1, 4000),
SUBSTR (v_kenmerk7, 1, 4000),
SUBSTR (v_kenmerk8, 1, 4000),
SUBSTR (v_kenmerk9, 1, 4000),
SUBSTR (v_kenmerk10, 1, 4000),
SUBSTR (v_kenmerk11, 1, 4000),
SUBSTR (v_kenmerk12, 1, 4000),
SUBSTR (v_kenmerk13, 1, 4000),
SUBSTR (v_kenmerk14, 1, 4000),
SUBSTR (v_kenmerk15, 1, 4000),
SUBSTR (v_kenmerk16, 1, 4000),
SUBSTR (v_kenmerk17, 1, 4000),
SUBSTR (v_kenmerk18, 1, 4000),
SUBSTR (v_kenmerk19, 1, 4000),
SUBSTR (v_kenmerk20, 1, 4000),
SUBSTR (v_boekmaand, 1, 7),
SUBSTR (v_artikelcode, 1, 30),
v_factuurregelaantal,
SUBSTR (v_eenheid, 1, 30),
v_opdrachtregelid
);
v_count := v_count + 1;
END IF;
COMMIT;
END IF;
END;
END LOOP;
DELETE fac_imp_file WHERE fac_import_key = p_import_key;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := ' ORACLE (error ' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
END;
/
CREATE OR REPLACE PROCEDURE fac_update_factuur (p_import_key IN NUMBER)
AS
-- In cursor cfactuur is alles mooi getrimmed. NB: de sortering is cruciaal!
CURSOR cfactuurregel
IS
SELECT leveranciernr,
ordernr,
factuurnr,
factuurdatum,
fac.safe_to_number (aantal) aantal,
fac.safe_to_number (kostprijs) kostprijs,
fac.safe_to_number (btw) btw,
fac.safe_to_number (btw_bedrag) btw_bedrag,
debiteurnr,
locatie,
afleverdatum,
docid,
omschrijving,
opmerking,
btw_verlegd,
boekmaand,
artikelcode,
factuurregelaantal,
eenheid,
opdrachtregelid,
fac_import_key,
fac_imp_file_index
FROM fac_imp_factuur
WHERE fac_import_key = p_import_key
ORDER BY factuurnr, ordernr DESC, fac_imp_file_index;
c_i NUMBER;
c_factuur_record_is_added BOOLEAN;
c_succeeded BOOLEAN;
c_factuur_key NUMBER;
c_factuurregel NUMBER;
c_fac_type VARCHAR2 (1);
c_prefix VARCHAR2 (3);
c_ordernr_index NUMBER;
c_ordernr_s1 VARCHAR2 (20);
c_ordernr_s2 VARCHAR2 (20);
c_ordernr_t VARCHAR2 (40);
c_old_ordernr fac_imp_factuur.ordernr%TYPE;
c_factuur_nr fac_imp_factuur.factuurnr%TYPE;
c_old_factuurnr fac_imp_factuur.factuurnr%TYPE;
c_fin_factuur_datum fin_factuur.fin_factuur_datum%TYPE;
c_write_ordernr VARCHAR2 (20);
c_bestelopdr_id VARCHAR2 (20);
c_totaal NUMBER;
c_fact_totaal NUMBER;
c_factuur_totaal NUMBER;
c_factuur_btw NUMBER;
c_factuur_statuses_key fin_factuur.fin_factuur_statuses_key%TYPE;
c_kostprijs fin_factuurregel.fin_factuurregel_totaal%TYPE;
c_btwtabel_key fin_btwtabel.fin_btwtabel_key%TYPE;
c_boekmaand fin_factuur.fin_factuur_boekmaand%TYPE;
c_artikelcode fin_factuurregel.fin_factuurregel_code%TYPE;
c_factuurregelaantal fin_factuurregel.fin_factuurregel_aantal%TYPE;
c_eenheid fin_factuurregel.fin_factuurregel_eenheid%TYPE;
c_opdrachtregelid fin_factuurregel.fin_factuurregel_id%TYPE;
c_find BOOLEAN;
c_find_ordernr BOOLEAN;
c_mld_opdr_key NUMBER (10);
c_cnt_contract_key NUMBER (10);
c_bes_bestelopdr_key NUMBER (10);
c_prs_perslid_key_user NUMBER(10);
c_prs_kostensoort_key NUMBER(10);
c_btw_verlegd NUMBER(1);
c_fin_factuurregel_key NUMBER(10);
c_prs_bedrijf_naam VARCHAR2 (100);
c_opmerking VARCHAR2 (1000); -- maar wordt uiteindelijk getruct naar fin_factuur_opmerking%type (250)
v_errormsg VARCHAR (200);
oracle_err_mes VARCHAR2 (150);
-- Het datumformaat mag een van de volgende zijn:
-- 1) dd-mm-yyyy of dd/mm/yyyy
-- 2) yyyy-mm-dd of yyyy/mm/dd
-- 3) ddmmyyyy of (dd-mm-yy of dd/mm/yy)
-- 4) ddmmyy
-- Indien geen van bovenstaand datumformaat of ongeldig datumformaat,
-- dan indien p_wheninvalid_sysdate = TRUE, dan wordt de huidige systeemdatum opgeleverd,
-- en anders de lege waarde (NULL-value).
FUNCTION try_getdatum (p_c_datum IN VARCHAR2, p_wheninvalid_sysdate IN BOOLEAN)
RETURN DATE
AS
c_dd VARCHAR2 (2);
c_mm VARCHAR2 (2);
c_yyyy VARCHAR2 (4);
c_yy VARCHAR2 (2);
v_c_datum VARCHAR2 (10);
p_d_datum DATE;
BEGIN
-- plaats een voorloopnul als deze door Excel verwijderd is.
IF length(p_c_datum) = 7 THEN
v_c_datum := '0' || p_c_datum;
ELSE
v_c_datum := p_c_datum;
END IF;
p_d_datum := NULL;
IF LENGTH(v_c_datum) = 10
THEN
IF ((SUBSTR(v_c_datum,3,1) = '-' AND SUBSTR(v_c_datum,6,1) = '-') OR
(SUBSTR(v_c_datum,3,1) = '/' AND SUBSTR(v_c_datum,6,1) = '/'))
THEN
-- Formaat 1) dd-mm-yyyy of dd/mm/yyyy
c_dd := SUBSTR(v_c_datum, 1,2);
c_mm := SUBSTR(v_c_datum, 4,2);
c_yyyy := SUBSTR(v_c_datum, 7,4);
ELSIF ((SUBSTR(v_c_datum,5,1) = '-' AND SUBSTR(v_c_datum,8,1) = '-') OR
(SUBSTR(v_c_datum,5,1) = '/' AND SUBSTR(v_c_datum,8,1) = '/'))
THEN
-- Formaat 2) yyyy-mm-dd of yyyy/mm/dd
c_dd := SUBSTR(v_c_datum, 9,2);
c_mm := SUBSTR(v_c_datum, 6,2);
c_yyyy := SUBSTR(v_c_datum, 1,4);
END IF;
ELSIF LENGTH(v_c_datum) = 8
THEN
-- Formaat 3) ddmmyyyy of dd-mm-yy of dd/mm/yy
IF ((SUBSTR(v_c_datum,3,1) = '-' AND SUBSTR(v_c_datum,6,1) = '-') OR
(SUBSTR(v_c_datum,3,1) = '/' AND SUBSTR(v_c_datum,6,1) = '/'))
THEN
-- dd-mm-yy of dd/mm/yy
c_dd := SUBSTR(v_c_datum, 1,2);
c_mm := SUBSTR(v_c_datum, 4,2);
c_yyyy := SUBSTR(v_c_datum, 7,2);
ELSE
-- Formaat 3) ddmmyyyy
c_dd := SUBSTR(v_c_datum, 1,2);
c_mm := SUBSTR(v_c_datum, 3,2);
c_yyyy := SUBSTR(v_c_datum, 5,4);
END IF;
ELSIF LENGTH(v_c_datum) = 6
THEN
-- Formaat 4) ddmmyy
c_dd := SUBSTR(v_c_datum, 1,2);
c_mm := SUBSTR(v_c_datum, 3,2);
c_yyyy := SUBSTR(v_c_datum, 5,2);
END IF;
BEGIN
IF LENGTH(c_yyyy)=2
THEN
SELECT SUBSTR(TO_CHAR(SYSDATE,'YYYY'),1,2)
INTO c_yy
FROM DUAL;
c_yyyy := c_yy || c_yyyy;
END IF;
SELECT TO_DATE (c_yyyy || '-' || c_mm || '-' || c_dd || ' 00:00', 'YYYY-MM-DD HH24:MI')
INTO p_d_datum
FROM DUAL;
-- controleer of we toch een geldige datum hebben. Oracle vind 12-12-0006 ook geldig.
IF p_d_datum NOT BETWEEN TO_DATE('20000101', 'yyyymmdd') AND TO_DATE('20991231', 'yyyymmdd')
THEN
IF p_wheninvalid_sysdate
THEN
BEGIN
SELECT TRUNC(SYSDATE)
INTO p_d_datum
FROM DUAL;
EXCEPTION
WHEN OTHERS
THEN
p_d_datum := NULL;
END;
ELSE
p_d_datum := NULL;
END IF;
END IF;
EXCEPTION
WHEN OTHERS
THEN
IF p_wheninvalid_sysdate
THEN
BEGIN
SELECT TRUNC(SYSDATE)
INTO p_d_datum
FROM DUAL;
EXCEPTION
WHEN OTHERS
THEN
p_d_datum := NULL;
END;
ELSE
p_d_datum := NULL;
END IF;
END;
RETURN(p_d_datum);
END;
FUNCTION try_getcontract_id (p_broc_nr IN VARCHAR2, p_leverancier_nr IN VARCHAR2, p_factuur_datum IN DATE)
RETURN NUMBER
AS
c_prefix1 VARCHAR2 (1);
c_contract_nr VARCHAR2 (20);
p_broc_key NUMBER(10);
BEGIN
p_broc_key := NULL;
c_prefix1 := SUBSTR (p_broc_nr, 1, 1);
IF (ASCII (c_prefix1) = 67 OR ASCII (c_prefix1) = 99)
THEN
BEGIN
-- Haal prefix 'C' of 'c' eraf
c_contract_nr := SUBSTR (p_broc_nr, 2);
IF INSTR(p_broc_nr, '.') = 0
THEN
BEGIN
-- Het laatste contract met de hoogste versie nummer opvragen.
-- Er kunnen meerdere contracten zijn met dezelfde contract_key, maar met verschillende versies.
-- Het contract met de hoogste versie is de laatste.
SELECT cnt_contract_key
INTO p_broc_key
FROM cnt_contract
WHERE cnt_contract_verwijder IS NULL
AND cnt_contract_status = 0
AND cnt_contract_nummer_intern = c_contract_nr;
EXCEPTION
WHEN TOO_MANY_ROWS
THEN
BEGIN
-- Meerdere versies gevonden; ga specifieker zoeken
-- Bij overlappende contracten; pak het oudste contract
SELECT cnt_contract_key
INTO p_broc_key
FROM (SELECT cnt_contract_key
FROM cnt_contract
WHERE cnt_contract_verwijder IS NULL
AND cnt_contract_status = 0
AND cnt_contract_nummer_intern = c_contract_nr
AND p_factuur_datum BETWEEN cnt_contract_looptijd_van AND cnt_contract_looptijd_tot
ORDER BY cnt_contract_looptijd_van ASC)
WHERE ROWNUM = 1;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
BEGIN
-- Geen contract gevonden waarbinnen deze factuurdatum valt
-- Zoek het contract wat het recentst (mbt de factuurdatum) is afgelopen
SELECT cnt_contract_key
INTO p_broc_key
FROM (SELECT cnt_contract_key
FROM cnt_contract
WHERE cnt_contract_verwijder IS NULL
AND cnt_contract_status = 0
AND cnt_contract_nummer_intern = c_contract_nr
AND cnt_contract_looptijd_tot <= p_factuur_datum
ORDER BY cnt_contract_looptijd_tot DESC)
WHERE ROWNUM = 1;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
-- Geen contract gevonden met een einddatum die ligt voor de factuurdatum
-- Dan ligt de factuurdatum dus voor de startdatum van de eerste contract-versie; pak het eerste contract
SELECT cnt_contract_key
INTO p_broc_key
FROM (SELECT cnt_contract_key
FROM cnt_contract
WHERE cnt_contract_verwijder IS NULL
AND cnt_contract_status = 0
AND cnt_contract_nummer_intern = c_contract_nr
ORDER BY cnt_contract_looptijd_van)
WHERE ROWNUM = 1;
END;
END;
END;
ELSE
-- Exact dit contract en versie.
SELECT cnt_contract_key
INTO p_broc_key
FROM cnt_contract
WHERE cnt_contract_verwijder IS NULL
AND cnt_contract_status = 0
AND cnt_contract_nummer_intern || '.' || COALESCE(cnt_contract_versie, '0') = c_contract_nr;
END IF;
EXCEPTION
WHEN OTHERS
THEN
p_broc_key := NULL;
END;
END IF;
RETURN p_broc_key;
END;
FUNCTION try_getopdracht_id (p_broc_nr IN VARCHAR2, p_leverancier_nr IN VARCHAR2)
RETURN NUMBER
AS
c_prefix1 VARCHAR2 (1);
-- Ter bepaling van de positie van de slash in bron-nr
c_index NUMBER;
c_slash_index NUMBER;
-- Opdrachtnr voor de slash
-- 200 is overkill voor een geldige referentie maar voorkomt een ORA -06502 op te lange ongeldige referenties
c_broc_s1 VARCHAR2 (200);
-- Opdrachtnr na de slash
c_broc_s2 VARCHAR2 (200);
p_broc_key NUMBER(10);
BEGIN
p_broc_key := NULL;
c_index := 1;
c_prefix1 := SUBSTR (p_broc_nr, c_index, 1);
IF ( ( (ASCII (c_prefix1) >= 65 AND ASCII (c_prefix1) <= 90)
OR (ASCII (c_prefix1) >= 97 AND ASCII(c_prefix1) <= 122))
AND ASCII (c_prefix1) != 67
AND ASCII (c_prefix1) != 99)
THEN
-- Eerste karakter is een letter
-- Heeft opdrachtnr nog meer aan prefix?
c_index := 2;
c_prefix1 := SUBSTR (p_broc_nr, c_index, 1);
IF ( (ASCII (c_prefix1) >= 65 AND ASCII (c_prefix1) <= 90)
OR (ASCII (c_prefix1) >= 97 AND ASCII(c_prefix1) <= 122))
THEN
-- Eerste 2 karakter zijn letters
-- Heeft opdrachtnr nog meer aan prefix?
c_index := 3;
c_prefix1 := SUBSTR (p_broc_nr, c_index, 1);
IF ( (ASCII (c_prefix1) >= 65 AND ASCII (c_prefix1) <= 90)
OR (ASCII (c_prefix1) >= 97 AND ASCII(c_prefix1) <= 122))
THEN
-- Opdracht heeft prefix van 3 letters.
c_index := 4;
END IF;
END IF;
c_slash_index := INSTR (p_broc_nr, '/');
IF c_slash_index = 0
THEN
c_broc_s1 := SUBSTR (p_broc_nr, c_index);
c_broc_s2 := '';
ELSE
c_broc_s1 := SUBSTR (p_broc_nr, c_index, c_slash_index - c_index);
c_broc_s2 := SUBSTR (p_broc_nr, c_slash_index + 1);
END IF;
BEGIN
SELECT o.mld_opdr_key
INTO p_broc_key
FROM mld_opdr o, mld_typeopdr mto
WHERE o.mld_typeopdr_key = mto.mld_typeopdr_key
AND mto.mld_typeopdr_kosten = 1
AND o.mld_statusopdr_key NOT IN (1, 2, 3, 10)
AND o.mld_melding_key = fac.safe_to_number (c_broc_s1)
AND o.mld_opdr_bedrijfopdr_volgnr = fac.safe_to_number (c_broc_s2);
EXCEPTION
WHEN OTHERS
THEN
p_broc_key := NULL;
END;
END IF;
RETURN p_broc_key;
END;
-- Function to extract a valid reference from a string by removing any leading or trailing text.
-- A valid reference consists of:
-- - An optional prefix of up to 3 letters,
-- - Followed by 1 to 10 digits,
-- - Optionally followed by a slash and a sequence number (e.g., ST0123456/2).
-- Note: NOT used for contract id's. They are freeform.
-- Examples:
-- 'M12345 Somecomments' -> 'M12345'
-- 'Sometext M12345' -> 'M12345'
-- 'SometextM12345' -> 'xtM12345' (!)
-- 'ST0123456/2 extra' -> 'ST0123456/2'
FUNCTION sanitizereferentiestring (p_broc_nr IN VARCHAR2)
RETURN VARCHAR2
AS
cleaner_broc_nr fac_imp_factuur.ordernr%TYPE;
BEGIN
-- Extract pattern: up to 3 letters, 1-10 digits, optional /digits
cleaner_broc_nr := REGEXP_SUBSTR (p_broc_nr, fac.getsetting('fin_factuur_import_sanitize_id'), 1); -- default'([A-Za-z]{0,3}\d{1,10}(\/\d+)?)'
IF cleaner_broc_nr IS NULL
THEN
cleaner_broc_nr := p_broc_nr;
END IF;
RETURN cleaner_broc_nr;
END;
FUNCTION try_getbestelling_id (p_broc_nr IN VARCHAR2, p_leverancier_nr IN VARCHAR2)
RETURN NUMBER
AS
p_broc_key NUMBER(10);
BEGIN
p_broc_key := NULL;
BEGIN
SELECT bes_bestelopdr_key
INTO p_broc_key
FROM bes_bestelopdr
WHERE bes_bestelopdr_id = p_broc_nr;
EXCEPTION
WHEN OTHERS
THEN
p_broc_key := NULL;
END;
RETURN p_broc_key;
END;
-- Getfactype's levert van een gegevens opdrachtnummer p_broc_nr de key op van:
-- de bestelopdracht (p_bkey), meldingopdracht (p_okey) of contract (p_ckey).
-- Deze werking is gebaseerd op volgende randvoorwaarden cq. eisen cq. instellingen:
-- 1) Contractnummer wordt geprefixed door 'c' (of 'C').
-- 2) Meldingen worden geprefixed door minimaal 1 letter (let op: dus GEEN!!! cijfer(s)).
-- 3) De prefix van melding (vakgroeptype) mag geen c (of C) zijn
-- 4) Bestellingen worden niet geprefixed (we kunnen hier de setting bes_bestelopdr_prefix in default.inc niet uitlezen,
-- of we moeten die instelling ombuigen tot een DB-setting (fac_setting?)
-- 5) De prefix-instelling mag tussentijds (nadat een opdracht uitgegeven) niet worden gewijzigd.
PROCEDURE get_fin_factuur_referentie (p_broc_nr IN VARCHAR2, p_leverancier_nr IN VARCHAR2, p_factuur_datum IN DATE, p_ckey IN OUT NUMBER, p_okey IN OUT NUMBER, p_bkey IN OUT NUMBER)
IS
sanitized_broc_nr fac_imp_factuur.ordernr%TYPE;
BEGIN
p_ckey:=NULL;
p_okey:=NULL;
p_bkey:=NULL;
IF LENGTH (p_broc_nr) > 0
THEN
p_ckey := try_getcontract_id (p_broc_nr, p_leverancier_nr, p_factuur_datum); -- Unsanitized p_broc_nr!
IF p_ckey IS NULL
THEN
sanitized_broc_nr := sanitizereferentiestring (p_broc_nr);
IF LENGTH (sanitized_broc_nr) > 0
THEN
p_okey := try_getopdracht_id (sanitized_broc_nr, p_leverancier_nr);
IF p_okey IS NULL
THEN
p_bkey := try_getbestelling_id (sanitized_broc_nr, p_leverancier_nr);
END IF;
END IF;
END IF;
END IF;
END;
FUNCTION try_getkostensoort (p_ckey IN NUMBER, p_okey IN NUMBER, p_bkey IN NUMBER)
RETURN NUMBER
IS
-- Kostensoort bij de bestelling
-- bestelopdracht->bestelopdritems->bestelitem->srtdeel->srtgroep[->discipline]
CURSOR c_bes_kostensoort IS
SELECT DISTINCT COALESCE(isg.prs_kostensoort_key, itd.prs_kostensoort_key) prs_kostensoort_key, count(*) aant_art
FROM bes_bestelling_item bi,
bes_srtdeel isd, bes_srtgroep isg, ins_tab_discipline itd, bes_bestelopdr_item boi, bes_bestelopdr bo
WHERE bi.bes_srtdeel_key = isd.bes_srtdeel_key
AND isd.bes_srtgroep_key = isg.bes_srtgroep_key
AND isg.ins_discipline_key = itd.ins_discipline_key
AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
AND bo.bes_bestelopdr_key = boi.bes_bestelopdr_key
AND bo.bes_bestelopdr_key = p_bkey
GROUP BY COALESCE(isg.prs_kostensoort_key, itd.prs_kostensoort_key)
ORDER BY aant_art DESC;
CURSOR c_mld_kostensoort IS
SELECT COALESCE(std.prs_kostensoort_key, id.prs_kostensoort_key) prs_kostensoort_key
FROM mld_opdr o, ins_tab_discipline id, mld_stdmelding std, mld_melding m
WHERE id.ins_discipline_key = std.mld_ins_discipline_key
AND std.mld_stdmelding_key = m.mld_stdmelding_key
AND m.mld_melding_key = o.mld_melding_key
AND o.mld_opdr_key = p_okey;
CURSOR c_cnt_kostensoort IS
SELECT COALESCE (c.prs_kostensoort_key,id.prs_kostensoort_key) prs_kostensoort_key
FROM cnt_contract c, ins_tab_discipline id
WHERE id.ins_discipline_key = c.ins_discipline_key
AND c.cnt_contract_key = p_ckey;
p_prs_kostensoort_key NUMBER(10);
BEGIN
p_prs_kostensoort_key:=NULL;
BEGIN
-- De strategie is om bij de categorie de meeste waarschijnlijke default ks te vinden
-- kennelijk
IF p_bkey IS NOT NULL
THEN
-- Kostensoort is te zoeken bij de bestelopdracht
FOR rc IN c_bes_kostensoort
LOOP
p_prs_kostensoort_key := rc.prs_kostensoort_key;
EXIT WHEN p_prs_kostensoort_key IS NOT NULL;
END LOOP;
ELSIF p_okey IS NOT NULL
THEN
-- Kostensoort is te zoeken bij de meldingopdracht
FOR rc IN c_mld_kostensoort
LOOP
p_prs_kostensoort_key := rc.prs_kostensoort_key;
EXIT WHEN p_prs_kostensoort_key IS NOT NULL;
END LOOP;
ELSIF p_ckey IS NOT NULL
THEN
-- Kostensoort is te zoeken bij contract
FOR rc IN c_cnt_kostensoort
LOOP
p_prs_kostensoort_key := rc.prs_kostensoort_key;
EXIT WHEN p_prs_kostensoort_key IS NOT NULL;
END LOOP;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
p_prs_kostensoort_key := NULL;
END;
RETURN(p_prs_kostensoort_key);
END;
FUNCTION try_getrefdatum (p_fin_defaultboekmaand_opdr IN NUMBER, p_fin_defaultboekmaand_cnt IN NUMBER, p_ckey IN NUMBER, p_okey IN NUMBER, p_bkey IN NUMBER, p_fin_factuur_datum IN DATE)
RETURN DATE
IS
refdatum DATE;
BEGIN
refdatum := NULL;
BEGIN
IF p_bkey IS NOT NULL AND p_fin_defaultboekmaand_opdr IN (2, 3)
THEN
SELECT CASE
WHEN p_fin_defaultboekmaand_opdr = 2
THEN
bes_bestelopdr_datum
ELSE
bes_bestelopdr_leverdatum
END
INTO refdatum
FROM bes_bestelopdr bo
WHERE bo.bes_bestelopdr_key = p_bkey;
ELSIF p_okey IS NOT NULL AND p_fin_defaultboekmaand_opdr IN (2, 3)
THEN
SELECT CASE
WHEN p_fin_defaultboekmaand_opdr = 2
THEN
mld_opdr_datumbegin
ELSE
mld_opdr_einddatum
END
INTO refdatum
FROM mld_opdr o
WHERE o.mld_opdr_key = p_okey;
ELSIF p_ckey IS NOT NULL AND p_fin_defaultboekmaand_cnt = 2
THEN
refdatum := p_fin_factuur_datum;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
refdatum := NULL;
END;
RETURN(refdatum);
END;
-- Bepaalt of het BTW-tarief standaard (0), verlegd(1) of vrijgesteld(2) is, of ongeldig
FUNCTION try_getbtw_verlegd (p_btw_verlegd IN VARCHAR2)
RETURN NUMBER
IS
BEGIN
IF UPPER(p_btw_verlegd) = 'JA' OR p_btw_verlegd = '1'
THEN
RETURN (1);
ELSIF p_btw_verlegd IS NULL OR UPPER(p_btw_verlegd) = 'NEE' OR p_btw_verlegd = '0'
THEN
RETURN (0);
ELSIF UPPER(p_btw_verlegd) = 'VRI' OR p_btw_verlegd = '2' -- VRIJ, maar de kolom is maar 3 breed
THEN
RETURN (2);
ELSE
c_opmerking := c_opmerking || CHR(13) || 'BTW-type is onbekend ('|| p_btw_verlegd ||')';
c_factuur_statuses_key := 3; -- Incompleet
RETURN (0);
END IF;
END;
-- Bepaalt het BTW-tarief (=btwtabelwaarde_key), gegeven (XOR) of het btw-tarief 'p_btw',
-- of aan de hand de kosten 'pkosten' + het btwbedrag 'p_btwbedrag'
-- Daarbij wordt de volgende hanteerwijze toegepast:
-- 1) Als btw-tarief bekend is, is deze leidend. Ook al is btw-bedrag bekend, dan nog is tarief leidend.
-- Mocht het BTW-tarief niet in de btwtabelwaarde voorkomen, maar wel het BTW-tarief dat wordt afgeleid uit het BTW-bedrag,
-- dan en alleen in dat geval wordt het btw-bedrag leidend.
-- Mocht in het uiterste geval ook dan het btw-tarief niet in de tabel voorkomen, dan wordt de lege waarde (NULL) opgeleverd.
-- 2) Als btw-tarief NIET bekend is, maar btw-bedrag en kosten wel, dan wordt het btw-tarief omgekeerd berekend.
-- Mocht het btw-tarief niet in de btw-tabel voorkomen, dan wordt de lege waarde (NULL) opgeleverd.
FUNCTION try_getbtwtabelwaarde_key (p_btw IN NUMBER, p_kosten IN NUMBER, p_btwbedrag IN NUMBER, p_btwtabel_key IN NUMBER, p_btw_verlegd IN NUMBER)
RETURN NUMBER
IS
p_btwtabelwaarde_key NUMBER(10);
BEGIN
p_btwtabelwaarde_key := NULL;
IF p_btw IS NOT NULL
THEN
-- Regel 1): btw-tarief is bekend, dus deze zou leidend moeten zijn (tenzij een niet bestaande)...
p_btwtabelwaarde_key := fin.getbtwtabelwaardekey_perc(p_btw, p_btwtabel_key, p_btw_verlegd);
END IF;
IF p_btwtabelwaarde_key IS NULL
THEN
-- Hier geldt dat: of p_btw is niet meegegeven, of dat
-- p_btw wel is meegegeven maar dat het BTW-tarief kan niet in de BTW-tabel worden gevonden !!!
-- Dit laatste zou eigenlijk niet mogen voorkomen, maar tja, dan proberen we het via de kosten en BTW-bedrag.
IF (p_kosten IS NOT NULL AND p_btwbedrag IS NOT NULL)
THEN
-- Regel 2): btw-tarief is NIET bekend of ONGELDIG, dan a.d.h.v. btw-bedrag en kosten...
p_btwtabelwaarde_key := fin.getbtwtabelwaardekey(p_kosten, p_btwbedrag, p_btwtabel_key, p_btw_verlegd);
END IF;
END IF;
RETURN(p_btwtabelwaarde_key);
END;
-- Retourneert het fin_kenmerk_key van kenmerktype "X" (bestand) als volgt:
-- 1) Eerst kijken of in fac_setting het kenmerk is geconfigureerd (obv tag 'fin_import_fin_kenmerk_bestand')
-- 2) Dan via poging 2: via fin_kenmerk met type = "X" (en indien meerdere, het laagste volgnummer)
FUNCTION try_getbestand_fin_kenmerk_key
RETURN NUMBER
IS
CURSOR curs_fin_kenmerk IS
SELECT fin_kenmerk_key
FROM fin_kenmerk k
WHERE k.fin_kenmerk_kenmerktype = 'X'
AND fin_kenmerk_verwijder IS NULL
ORDER BY fin_kenmerk_volgnr;
lkey NUMBER(10);
BEGIN
BEGIN
-- Eerst poging 1, via fac_setting
--SELECT fac.getSetting('fin_import_fin_kenmerk_bestand')
--INTO lkey
--FROM DUAL;
--IF lkey IS NULL
--THEN
-- Dan via poging 2: via fin_kenmerk met type = "X" (en indien meerdere, het laagste volgnummer)
FOR rc IN curs_fin_kenmerk
LOOP
lkey := rc.fin_kenmerk_key;
EXIT WHEN lkey IS NOT NULL;
END LOOP;
--END IF;
EXCEPTION
WHEN OTHERS
THEN
lkey := NULL;
END;
RETURN lkey;
END;
PROCEDURE try_insert_factuur_docid(p_factuur_key IN NUMBER, p_docid IN VARCHAR2)
IS
lkey NUMBER(10);
BEGIN
IF p_docid IS NOT NULL
THEN
-- Document/bestand is gevuld met een waarde, dus we zetten deze in de flexprop 'Factuurbestand'
-- Dit flexprop wordt gevonden door de functie try_getbestand_fin_kenmerk_key.
lkey := try_getbestand_fin_kenmerk_key();
IF lkey IS NOT NULL
THEN
BEGIN
-- Ook is het flexprop gevonden, nu volgt de insert in fin_kenmerkfactuur
INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde)
VALUES (p_factuur_key, lkey, p_docid);
EXCEPTION
WHEN OTHERS
THEN
lkey := NULL;
END;
END IF;
END IF;
END;
PROCEDURE try_insert_factuurregel(c_factuur_key IN NUMBER, c_factuurregel IN NUMBER, c_kostprijs IN NUMBER,
c_btw IN NUMBER, c_btw_bedrag IN NUMBER, c_btwtabel_key IN NUMBER,
c_fac_import_key IN NUMBER, c_fac_imp_file_index IN NUMBER,
c_omschrijving IN VARCHAR2, c_locatie IN VARCHAR2, c_btw_verlegd IN NUMBER,
c_artikelcode IN VARCHAR2, c_factuurregelaantal IN NUMBER, c_eenheid IN VARCHAR2, c_opdrachtregelid IN NUMBER,
c_factuur_statuses_key IN OUT NUMBER, c_opmerking IN OUT VARCHAR2, c_succeeded IN OUT BOOLEAN)
IS
c_btwtabelwaarde_key NUMBER(10);
l_btwbedrag fin_factuurregel.fin_factuurregel_btw%TYPE;
l_kostprijs fin_factuurregel.fin_factuurregel_totaal%TYPE;
BEGIN
l_kostprijs := c_kostprijs;
c_succeeded := FALSE;
IF l_kostprijs IS NULL
THEN
-- Kostprijs is niet gevonden, of er zat een ongeldig karakters in (b.v. letter, of euro-teken).
c_opmerking := c_opmerking || CHR(13) || 'Leeg of fout bedrag (exBTW) bij regel ' || c_factuurregel || ': is op 0 gezet';
l_kostprijs := 0;
c_factuur_statuses_key := 3; -- Incompleet
END IF;
c_btwtabelwaarde_key := try_getbtwtabelwaarde_key(c_btw, l_kostprijs, c_btw_bedrag, c_btwtabel_key, c_btw_verlegd);
IF c_btwtabelwaarde_key IS NULL
THEN
-- BTW-tarief is onbekend of niet gevonden volgens de BTW-tabel, we hanteren het 0-tarief
c_btwtabelwaarde_key := fin.getbtwtabelwaardekey_perc(0, c_btwtabel_key, c_btw_verlegd);
IF c_btwtabelwaarde_key IS NULL
THEN
c_opmerking := c_opmerking || CHR(13) || 'BTW-percentage ' || c_btw || ' % bij regel ' || c_factuurregel || ': ongeldig en kan niet worden toegevoegd';
ELSE
c_opmerking := c_opmerking || CHR(13) || 'BTW-percentage ' || c_btw || ' % bij regel ' || c_factuurregel || ': ongeldig en is op 0 gezet';
END IF;
c_factuur_statuses_key := 3; -- Incompleet
END IF;
IF (l_kostprijs IS NOT NULL AND c_btwtabelwaarde_key IS NOT NULL)
THEN
l_btwbedrag := fin.getbtw_bedrag(l_kostprijs, c_btwtabelwaarde_key);
IF ABS(ROUND(l_btwbedrag,2) - ROUND(c_btw_bedrag,2)) > fac.safe_to_number(fac.getsetting('fin_import_btwmarge'))
THEN
c_opmerking := c_opmerking || CHR(13) || 'BTW-bedrag bij regel ' || c_factuurregel || ': is op ' || l_btwbedrag || ' gezet';
c_factuur_statuses_key := 3; -- Incompleet
ELSIF c_btw_bedrag IS NOT NULL
THEN
l_btwbedrag := c_btw_bedrag; -- wel alle decimalen behouden
END IF;
INSERT INTO fin_factuurregel ( fin_factuur_key,
fin_factuurregel_nr,
fin_factuurregel_totaal,
fin_factuurregel_btw,
fin_factuurregel_omschrijving,
fin_factuurregel_referentie,
fin_btwtabelwaarde_key,
fin_factuurregel_code,
fin_factuurregel_aantal,
fin_factuurregel_eenheid,
fin_factuurregel_id)
VALUES (c_factuur_key, c_factuurregel, l_kostprijs, l_btwbedrag, c_omschrijving, c_locatie, c_btwtabelwaarde_key,
c_artikelcode, c_factuurregelaantal, c_eenheid, c_opdrachtregelid)
RETURNING fin_factuurregel_key
INTO c_fin_factuurregel_key;
-- Voor CUST-postprocessing (van de kenmerken) is het handig te onthouden:
UPDATE fac_imp_factuur
SET fin_factuurregel_key = c_fin_factuurregel_key
WHERE fac_import_key = c_fac_import_key
AND fac_imp_file_index = c_fac_imp_file_index;
c_succeeded := TRUE;
COMMIT;
END IF;
EXCEPTION
WHEN OTHERS
THEN
c_factuur_statuses_key := 3;
c_succeeded := FALSE;
END;
PROCEDURE fin_factuur_finalupdate(c_factuur_key IN NUMBER, c_opmerking IN VARCHAR2, c_factuur_statuses_key IN NUMBER)
IS
l_opmerking VARCHAR2(1000);
l_factuur_totaal_btw fin_factuur.fin_factuur_totaal_btw%TYPE;
BEGIN
l_opmerking := c_opmerking;
-- De nabewerking op het vorige record kan hier plaatsvinden
IF c_factuur_statuses_key = 3
THEN
fac.trackaction ('FINNEW', c_factuur_key, NULL, NULL, lcl.l('lcl_fin_imp_bad'));
l_opmerking := lcl.l('lcl_fin_imp_errors') || TO_CHAR(SYSDATE,'dd-mm-yyyy') || CHR(13) || '----' || l_opmerking;
ELSE
fac.trackaction ('FINNEW', c_factuur_key, NULL, NULL, lcl.l('lcl_fin_imp_good'));
-- l_opmerking := lcl.l('lcl_fin_imp_success') || TO_CHAR(SYSDATE,'dd-mm-yyyy');
END IF;
-- Btw tarief kan niet gevonden zijn. In dat geval is 0% genomen. Dan klopt het totaal_btw niet meer.
-- Daarom wordt totaal_btw opnieuw berekend en gevuld.
SELECT SUM (fin_factuurregel_btw)
INTO l_factuur_totaal_btw
FROM fin_factuurregel
WHERE fin_factuur_key = c_factuur_key;
-- Factuur toevoegen met als bron=1 (Excel/bulk)
UPDATE fin_factuur
SET fin_factuur_statuses_key = c_factuur_statuses_key,
fin_factuur_bron = 1,
fin_factuur_opmerking = SUBSTR(l_opmerking , 1, 250),
fin_factuur_totaal_btw = COALESCE(l_factuur_totaal_btw,0)
WHERE fin_factuur_key = c_factuur_key;
EXCEPTION
WHEN OTHERS
THEN NULL;
END;
--- *** START VAN DE HOOFDPROCEDURE *** --- --- *** START VAN DE HOOFDPROCEDURE *** --- --- *** START VAN DE HOOFDPROCEDURE *** ---
BEGIN
c_old_ordernr := '';
c_old_factuurnr := '';
-- Factuur(regels) stuk voor stuk op volgorde van opdracht en factuurnummer afwerken...
FOR rc IN cfactuurregel
LOOP
-- Check: Nieuwe factuur, dwz eerste regel of overgang naar nieuw factuurnummer+opdrachtnr, of nog dezelfde
IF (rc.ordernr = c_old_ordernr AND (rc.factuurnr = c_old_factuurnr OR (rc.factuurnr IS NULL AND c_old_factuurnr IS NULL)))
THEN
-- Hier dus nog dezelfde factuurnr+opdrachtnr
-- Voeg alleen nieuwe factuurregel toe, indien de factuur kon worden toegevoegd (c_factuur_record_is_added = TRUE)
IF c_factuur_record_is_added
THEN
-- Er is dus een bijbehorende correcte factuur(record) aangemaakt, dus volgende factuurregel kan erbij...
-- Waarde van c_factuur_key EN c_btwtabel_key zijn nog steeds actueel...
c_factuurregel := c_factuurregel + 1;
c_btw_verlegd := try_getbtw_verlegd (rc.btw_verlegd);
try_insert_factuurregel(c_factuur_key, c_factuurregel, rc.kostprijs,
rc.btw, rc.btw_bedrag, c_btwtabel_key, rc.fac_import_key, rc.fac_imp_file_index,
rc.omschrijving, rc.locatie, c_btw_verlegd,
rc.artikelcode, rc.factuurregelaantal, rc.eenheid, rc.opdrachtregelid,
c_factuur_statuses_key, c_opmerking, c_succeeded);
IF c_succeeded
THEN
fac.imp_writelog (p_import_key,
'I',
'Factuur ' || c_factuur_key || ' toegevoegd met factuurregel ' || c_factuurregel,
rc.ordernr || ' / ' || rc.factuurnr
);
ELSE
oracle_err_mes := SUBSTR (SQLERRM, 1, 150);
v_errormsg := '(ORACLE error ' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
'Factuur(regel) kan niet toegevoegd worden ' || v_errormsg,
rc.ordernr || '/' || rc.factuurnr
);
END IF;
END IF;
ELSE
-- Nieuwe factuur, dwz eerste regel of overgang naar nieuw factuurnummer/opdrachtnr.
-- Let op: van de vorige factuur nog de laatste nabewerking uitvoeren, nl. de status en de opmerking vullen...
-- Als c_factuur_record_is_added is TRUE, dan is er al minimaal 1 fin_factuur record toegevoegd,
-- anders (=FALSE) zijn we hier voor de eerste keer
IF c_factuur_record_is_added
THEN
fin_factuur_finalupdate(c_factuur_key, c_opmerking,c_factuur_statuses_key);
fin.autoapprovefactuur(c_factuur_key);
END IF;
c_factuur_statuses_key := 2;
c_opmerking := rc.opmerking;
c_old_ordernr := rc.ordernr;
c_old_factuurnr := rc.factuurnr;
c_factuurregel := 1;
c_mld_opdr_key := NULL;
c_cnt_contract_key := NULL;
c_bes_bestelopdr_key := NULL;
c_prs_perslid_key_user := NULL;
c_fin_factuur_datum := NULL;
c_prs_kostensoort_key := NULL;
c_btw_verlegd := try_getbtw_verlegd (rc.btw_verlegd);
c_fin_factuur_datum := try_getdatum (rc.factuurdatum, FALSE);
get_fin_factuur_referentie (rc.ordernr, rc.leveranciernr, c_fin_factuur_datum, c_cnt_contract_key, c_mld_opdr_key, c_bes_bestelopdr_key);
c_prs_kostensoort_key := try_getkostensoort(c_cnt_contract_key, c_mld_opdr_key, c_bes_bestelopdr_key);
IF (c_prs_kostensoort_key IS NULL AND fac.getSetting('fin_kostensoort_verplicht') = 1)
THEN
c_opmerking := c_opmerking || CHR(13) || 'Kostensoort is verplicht maar leeg';
c_factuur_statuses_key := 3; -- Incompleet
END IF;
IF (rc.factuurnr IS NULL)
THEN
c_opmerking := c_opmerking || CHR(13) || 'Onbekend factuurnr: is op ### gezet';
c_factuur_nr := '###';
c_factuur_statuses_key := 3; -- Incompleet
ELSE
c_factuur_nr := rc.factuurnr;
END IF;
IF (rc.boekmaand IS NOT NULL)
THEN -- meegegeven, gebruik die
IF fac.safe_to_date(rc.boekmaand, 'yyyy-mm') IS NULL
THEN
c_opmerking := c_opmerking || CHR(13) || 'Ongeldige boekmaand: ' || rc.boekmaand;
c_boekmaand := '';
c_factuur_statuses_key := 3; -- Incompleet
ELSE
c_boekmaand := rc.boekmaand;
END IF;
ELSE
c_boekmaand := TO_CHAR(SYSDATE, 'YYYY-MM');
IF ((fac.getSetting('fin_defaultboekmaand') IN (2, 3) AND c_mld_opdr_key IS NOT NULL) OR
(fac.getSetting('fin_defaultboekmaand_cnt') = 2 AND c_cnt_contract_key IS NOT NULL))
THEN
BEGIN
c_boekmaand := TO_CHAR(try_getrefdatum(fac.getSetting('fin_defaultboekmaand'), fac.getSetting('fin_defaultboekmaand_cnt'), c_cnt_contract_key, c_mld_opdr_key, c_bes_bestelopdr_key, c_fin_factuur_datum), 'YYYY-MM');
END;
END IF;
END IF;
IF (c_cnt_contract_key IS NULL AND c_mld_opdr_key IS NULL AND c_bes_bestelopdr_key IS NULL)
THEN
c_opmerking := c_opmerking || CHR(13) || 'Referentienr: is niet gevonden ('|| rc.ordernr ||')';
c_factuur_statuses_key := 3; -- Incompleet
END IF;
IF (c_fin_factuur_datum IS NULL)
THEN
BEGIN
SELECT TRUNC(SYSDATE)
INTO c_fin_factuur_datum
FROM DUAL;
c_opmerking := c_opmerking || CHR(13) || 'Factuurdatum: is op vandaag gezet.';
c_factuur_statuses_key := 3; -- Incompleet
EXCEPTION
WHEN OTHERS
THEN
c_fin_factuur_datum := NULL;
END;
END IF;
c_factuur_record_is_added := FALSE;
IF (LENGTH(c_factuur_nr) > 0 AND (c_fin_factuur_datum IS NOT NULL))
THEN
BEGIN
SELECT fin_s_fin_factuur_key.NEXTVAL INTO c_factuur_key FROM DUAL;
-- Ordernummer kan ook leeg zijn.
IF rc.ordernr IS NULL
THEN
SELECT COALESCE(SUM (kostprijs),0) totaal, COALESCE(SUM (btw_bedrag),0) totaal_btw
INTO c_factuur_totaal, c_factuur_btw
FROM fac_imp_factuur
WHERE ordernr IS NULL
AND factuurnr = rc.factuurnr
AND fac_import_key = p_import_key;
ELSE
SELECT COALESCE(SUM (kostprijs),0) totaal, COALESCE(SUM (btw_bedrag),0) totaal_btw
INTO c_factuur_totaal, c_factuur_btw
FROM fac_imp_factuur
WHERE ordernr = rc.ordernr
AND factuurnr = rc.factuurnr
AND fac_import_key = p_import_key;
END IF;
INSERT INTO fin_factuur ( fin_factuur_key,
fin_factuur_totaal,
fin_factuur_totaal_btw,
mld_opdr_key,
cnt_contract_key,
bes_bestelopdr_key,
prs_perslid_key_user,
fin_factuur_datum,
fin_factuur_statuses_key,
fin_factuur_nr,
fin_factuur_debiteur_nr,
prs_kostensoort_key,
fin_factuur_boekmaand,
fin_factuur_bron
)
VALUES ( c_factuur_key,
c_factuur_totaal,
c_factuur_btw,
c_mld_opdr_key,
c_cnt_contract_key,
c_bes_bestelopdr_key,
c_prs_perslid_key_user,
c_fin_factuur_datum,
c_factuur_statuses_key,
c_factuur_nr,
rc.debiteurnr,
c_prs_kostensoort_key,
c_boekmaand,
1 -- Excel
);
c_factuur_record_is_added := TRUE;
-- Voor CUST-postprocessing (van de kenmerken) is het handig te onthouden:
UPDATE fac_imp_factuur
SET fin_factuur_key = c_factuur_key
WHERE fac_import_key = rc.fac_import_key
AND fac_imp_file_index = rc.fac_imp_file_index
AND fac_import_key = p_import_key;
try_insert_factuur_docid(c_factuur_key,rc.docid);
c_btwtabel_key := fin.getbtwtabelkey(c_bes_bestelopdr_key,c_cnt_contract_key, c_mld_opdr_key, TRUE);
try_insert_factuurregel(c_factuur_key, c_factuurregel, rc.kostprijs,
rc.btw, rc.btw_bedrag, c_btwtabel_key, rc.fac_import_key, rc.fac_imp_file_index,
rc.omschrijving, rc.locatie, c_btw_verlegd,
rc.artikelcode, rc.factuurregelaantal, rc.eenheid, rc.opdrachtregelid,
c_factuur_statuses_key, c_opmerking, c_succeeded);
IF c_succeeded
THEN
fac.imp_writelog (p_import_key,
'I',
'Factuur ' || c_factuur_key || ' toegevoegd met factuurregel ' || c_factuurregel,
rc.ordernr || ' / ' || rc.factuurnr
);
ELSE
oracle_err_mes := SUBSTR (SQLERRM, 1, 150);
v_errormsg := '(ORACLE error ' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
'Factuur(regel) kan niet toegevoegd worden ' || v_errormsg,
rc.ordernr || '/' || rc.factuurnr
);
END IF;
EXCEPTION
WHEN OTHERS
THEN
c_factuur_record_is_added := FALSE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 150);
v_errormsg := '(ORACLE error ' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
'Factuur kan niet toegevoegd worden ' || v_errormsg,
rc.ordernr || '/' || rc.factuurnr
);
END;
ELSE
fac.imp_writelog (p_import_key,
'E',
'Factuur kan niet toegevoegd worden (factuurnummer onbekend) ',
rc.ordernr || '/' || rc.factuurnr || ':' ||
rc.leveranciernr || ',' ||
rc.factuurdatum || ',' ||
rc.kostprijs || ',' ||
rc.btw || ',' ||
rc.btw_bedrag || ',' ||
rc.debiteurnr || ',' ||
rc.locatie || ',' ||
rc.afleverdatum || ',' ||
rc.docid || ',' ||
rc.omschrijving || ',' ||
rc.opmerking || ',' ||
rc.artikelcode || ',' ||
rc.factuurregelaantal || ',' ||
rc.eenheid || ',' ||
rc.opdrachtregelid
);
END IF;
END IF;
END LOOP;
-- Let op: van de vorige (=LAATSTE) factuur nog de laatste nabewerking uitvoeren, nl. de status en de opmerking vullen...
-- Als c_factuur_record_is_added is TRUE, dan is er al minimaal 1 fin_factuur record toegevoegd,
-- anders (=FALSE) zijn we hier voor de eerste keer
IF c_factuur_record_is_added
THEN
fin_factuur_finalupdate(c_factuur_key, c_opmerking, c_factuur_statuses_key);
fin.autoapprovefactuur(c_factuur_key);
END IF;
-- Opruimen fac_imp_factuur gebeurt vanzelf na 7 dagen doordat achteraan
-- imp_shared.js/impProcessStream de tabel fac_import wordt opgeruimd en
-- fac_imp_factuur meecascadeert
END;
/
/* menu-import (transport), volgens UWVA#20707 */
CREATE OR REPLACE PROCEDURE fac_import_menu (p_import_key IN NUMBER
)
AS
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
v_newline VARCHAR2 (1000); -- Import line
v_field VARCHAR2 (100); -- Import field
v_fielddelimitor VARCHAR2 (2) := fac.import_delimiter(p_import_key); -- Field seperator
v_count_import NUMBER (10);
v_count NUMBER;
v_errormsg VARCHAR2 (200);
v_errorhint VARCHAR2 (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_buffercount NUMBER := 0;
c_commitbuffer NUMBER := 2000; -- om de zoveel committen
-- De importvelden
v_menu_volgnr VARCHAR2 (255);
v_menuitems_label VARCHAR2 (255);
v_menuitems_groep VARCHAR2 (255);
v_menuitems_url VARCHAR2 (255);
v_menu_info VARCHAR2 (255);
v_menu_altlabel VARCHAR2 (255);
v_menu_alturl VARCHAR2 (1000);
v_menu_altgroep VARCHAR2 (255);
v_functie_code VARCHAR2 (255);
v_discipline_omschr VARCHAR2 (255);
v_srtdiscipline_omschr VARCHAR2 (255);
v_menu_image VARCHAR2 (255);
v_menu_level VARCHAR2 (255);
v_menu_portal VARCHAR2 (255);
header_found BOOLEAN := FALSE;
BEGIN
-- Clear my previous imported rows
DELETE FROM fac_imp_menu;
v_count_import := 0;
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
fac.imp_getfield (v_newline, v_fielddelimitor, v_menu_volgnr);
fac.imp_getfield (v_newline, v_fielddelimitor, v_menuitems_label);
fac.imp_getfield (v_newline, v_fielddelimitor, v_menuitems_groep);
fac.imp_getfield (v_newline, v_fielddelimitor, v_menuitems_url);
fac.imp_getfield (v_newline, v_fielddelimitor, v_menu_info);
fac.imp_getfield (v_newline, v_fielddelimitor, v_menu_altlabel);
fac.imp_getfield (v_newline, v_fielddelimitor, v_menu_alturl);
fac.imp_getfield (v_newline, v_fielddelimitor, v_menu_altgroep);
fac.imp_getfield (v_newline, v_fielddelimitor, v_functie_code);
fac.imp_getfield (v_newline, v_fielddelimitor, v_discipline_omschr);
fac.imp_getfield (v_newline, v_fielddelimitor, v_srtdiscipline_omschr);
fac.imp_getfield (v_newline, v_fielddelimitor, v_menu_image);
fac.imp_getfield (v_newline, v_fielddelimitor, v_menu_level);
fac.imp_getfield (v_newline, v_fielddelimitor, v_menu_portal);
-- Skip until the header is found
IF (header_found = FALSE)
THEN
IF UPPER (v_menu_volgnr) = 'MENU_VOLGNR'
AND UPPER (v_menuitems_label) = 'MENUITEMS_LABEL'
AND UPPER (v_menuitems_groep) = 'MENUITEMS_GROEP'
AND UPPER (v_menuitems_url) = 'MENUITEMS_URL'
AND UPPER (v_menu_info) = 'MENU_INFO'
AND UPPER (v_menu_altlabel) = 'MENU_ALTLABEL'
AND UPPER (v_menu_alturl) = 'MENU_ALTURL'
AND UPPER (v_menu_altgroep) = 'MENU_ALTGROEP'
AND UPPER (v_functie_code) = 'FUNCTIE_CODE'
AND UPPER (v_discipline_omschr) = 'DISCIPLINE_OMSCHR'
AND UPPER (v_srtdiscipline_omschr) = 'SRTDISCIPLINE_OMSCHR'
AND UPPER (v_menu_image) = 'MENU_IMAGE'
AND UPPER (v_menu_level) = 'MENU_LEVEL'
AND UPPER (v_menu_portal) = 'MENU_PORTAL'
THEN
header_found := TRUE;
END IF;
ELSE
INSERT INTO fac_imp_menu (
menu_volgnr,
menuitems_label,
menuitems_groep,
menuitems_url,
menu_info,
menu_altlabel,
menu_alturl,
menu_altgroep,
functie_code,
discipline_omschr,
srtdiscipline_omschr,
menu_image,
menu_level,
menu_portal
)
VALUES (
SUBSTR (v_menu_volgnr, 1, 255),
SUBSTR (v_menuitems_label, 1, 255),
SUBSTR (v_menuitems_groep, 1, 255),
SUBSTR (v_menuitems_url, 1, 255),
SUBSTR (v_menu_info, 1, 255),
SUBSTR (v_menu_altlabel, 1, 255),
SUBSTR (v_menu_alturl, 1, 1000),
SUBSTR (v_menu_altgroep, 1, 255),
SUBSTR (v_functie_code, 1, 255),
SUBSTR (v_discipline_omschr, 1, 255),
SUBSTR (v_srtdiscipline_omschr, 1, 255),
SUBSTR (v_menu_image, 1, 255),
SUBSTR (v_menu_level, 1, 255),
SUBSTR (v_menu_portal, 1, 255)
);
v_count_import := v_count_import + 1;
END IF;
END;
END LOOP;
IF (header_found = FALSE)
THEN
fac.imp_writelog (p_import_key,
'W',
'Ongeldig importbestand',
'Geen header of header niet volgens specificatie!'
);
ELSE
fac.imp_writelog (p_import_key, 'S', 'Aantal ingelezen 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 := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key, 'W', v_errormsg, '');
END;
/
CREATE OR REPLACE PROCEDURE fac_update_menu (p_import_key IN NUMBER)
AS
CURSOR c_menu
IS
SELECT * FROM fac_imp_menu;
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (250);
v_errormsg VARCHAR2 (1024);
v_errorhint VARCHAR2 (1024);
v_count NUMBER;
v_menuitems_key NUMBER;
v_functie_key NUMBER;
v_discipline_key NUMBER;
v_srtdiscipline_key NUMBER;
currentversion fac_module.fac_module_version%TYPE;
e_transport EXCEPTION;
BEGIN
-- Init
SELECT MAX (fac_module_version) INTO currentversion FROM fac_module;
fac.imp_writelog (p_import_key,
'S',
'Facilitor menustructuur import versie ' || currentversion,
'$Revision$'
);
COMMIT;
-- Alle standaard-menuopties bestaan --> gaan met die banaan!
v_errormsg := 'Verwijderen oude menu';
--TODO: remove TEST
DELETE FROM fac_menu;
-- Menu-items uit import <20><>n voor <20><>n toevoegen. Als we ergens onderweg een
-- fout tegenkomen, doen we een rollback.
FOR rec IN c_menu
LOOP
BEGIN
v_errormsg := 'Volgend item';
v_errorhint :=
COALESCE (rec.menu_altgroep, rec.menuitems_groep)
|| '/'
|| rec.menu_volgnr
|| '/'
|| rec.menuitems_label
|| '/'
|| rec.menu_altlabel;
v_menuitems_key := NULL;
v_functie_key := NULL;
v_discipline_key := NULL;
v_srtdiscipline_key := NULL;
-- Volgnummer is verplicht
--TODO: Is dat wel zo?
IF (rec.menu_volgnr IS NULL)
THEN
v_errormsg := 'volgnummer is verplicht!';
--TODO: throw error
RAISE e_transport;
END IF;
-- Als gerefereerd wordt naar een standaard-menuoptie, dan moet deze bestaan
IF (rec.menuitems_label IS NOT NULL)
THEN
v_errormsg := 'Onbekende of dubbele standaard-menuoptie';
--TODO: check of label bestaat
SELECT fac_menuitems_key
INTO v_menuitems_key
FROM fac_menuitems
WHERE fac_menuitems_label = rec.menuitems_label
AND fac_menuitems_groep = fac.safe_to_number (rec.menuitems_groep)
AND fac_menuitems_url = rec.menuitems_url;
ELSE
-- Als geen standaard-menuoptie gebruikt wordt, dan zijn onderstaande gegevens verplicht
IF (rec.menu_altlabel IS NULL OR rec.menu_altgroep IS NULL)
THEN
v_errormsg := 'altlabel + groep zijn verplicht!';
--TODO: throw error
RAISE e_transport;
END IF;
END IF;
-- Gebruikte functiecodes moeten bestaan
IF (rec.functie_code IS NOT NULL)
THEN
v_errormsg := 'Onbekende of dubbele functiecode';
--TODO: check of fac_functie_code bestaat
SELECT fac_functie_key
INTO v_functie_key
FROM fac_functie
WHERE fac_functie_code = rec.functie_code;
END IF;
-- Als alles ok is, voegen we het menu-item toe.
INSERT INTO fac_menu (
fac_menu_volgnr,
fac_menuitems_key,
fac_menu_info,
fac_menu_altlabel,
fac_menu_alturl,
fac_menu_altgroep,
fac_functie_key,
ins_discipline_key,
ins_srtdiscipline_key,
fac_menu_image,
fac_menu_level,
fac_menu_portal
)
VALUES (
rec.menu_volgnr,
v_menuitems_key,
rec.menu_info,
rec.menu_altlabel,
rec.menu_alturl,
rec.menu_altgroep,
v_functie_key,
v_discipline_key,
v_srtdiscipline_key,
rec.menu_image,
rec.menu_level,
rec.menu_portal
);
END;
END LOOP;
-- Als we hier uitkomen, is alles goed gegaan en kunnen we committen
COMMIT;
-- Als er ergens een fout optreedt, dan worden alle voorgaande mutaties teruggedraaid en wordt er alleen de logging gecommit
EXCEPTION
WHEN OTHERS
THEN
-- TODO: Zoiets?
ROLLBACK;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errorhint := v_errorhint || ' {' || v_errormsg || '}';
v_errormsg := '(ORACLE error ' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint);
COMMIT;
END;
/
CREATE OR REPLACE PROCEDURE fac_import_usrdata (p_import_key IN NUMBER)
IS
c_delim VARCHAR2 (2) := fac.import_delimiter(p_import_key);
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER;
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
v_ongeldig NUMBER (1);
v_aanduiding VARCHAR (200);
-- De importvelden:
v_fac_usrtab_naam VARCHAR2 (256); -- C16
v_fac_usrdata_code VARCHAR2 (256); -- C40
v_fac_usrdata_omschr VARCHAR2 (256); -- C60
v_fac_usrdata_omschr2 VARCHAR2 (256); -- C60
v_fac_usrdata_volgnr VARCHAR2 (256); -- N3
v_fac_usrdata_prijs VARCHAR2 (256); -- N8,2
v_fac_usrdata_vervaldatum VARCHAR2 (256); -- DATE
v_fac_usrdata_reftabel VARCHAR2 (256); -- C16
v_fac_usrdata_refcode VARCHAR2 (256); -- C40
-- Overig:
v_fac_usrdata_volgnr_n fac_imp_usrdata.fac_usrdata_volgnr%TYPE; -- N3
v_fac_usrdata_prijs_n fac_imp_usrdata.fac_usrdata_prijs%TYPE; -- N15,7
v_fac_usrdata_vervaldatum_d fac_imp_usrdata.fac_usrdata_vervaldatum%TYPE; -- DATE
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
DELETE FROM fac_imp_usrdata;
v_count_tot := 0;
v_count_import := 0;
header_is_valid := 0;
COMMIT;
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_errormsg := 'Fout bij opvragen importregel';
v_aanduiding := '';
v_ongeldig := 0;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_delim, v_fac_usrtab_naam);
fac.imp_getfield (v_newline, c_delim, v_fac_usrdata_code);
fac.imp_getfield (v_newline, c_delim, v_fac_usrdata_omschr);
fac.imp_getfield (v_newline, c_delim, v_fac_usrdata_omschr2);
fac.imp_getfield (v_newline, c_delim, v_fac_usrdata_volgnr);
fac.imp_getfield (v_newline, c_delim, v_fac_usrdata_prijs);
fac.imp_getfield (v_newline, c_delim, v_fac_usrdata_vervaldatum);
fac.imp_getfield (v_newline, c_delim, v_fac_usrdata_reftabel);
fac.imp_getfield (v_newline, c_delim, v_fac_usrdata_refcode);
v_aanduiding :=
'[' || v_fac_usrtab_naam || '|' || v_fac_usrdata_code || '] ';
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
IF (header_is_valid = 0)
THEN
IF UPPER (v_fac_usrtab_naam) = 'TABELNAAM'
AND UPPER (v_fac_usrdata_code) = 'WAARDE_CODE'
AND UPPER (v_fac_usrdata_omschr) = 'WAARDE_OMS'
AND UPPER (v_fac_usrdata_omschr2) = 'WAARDE_OMS2'
AND UPPER (v_fac_usrdata_volgnr) = 'VOLGNR'
AND UPPER (v_fac_usrdata_prijs) = 'PRIJS'
AND UPPER (v_fac_usrdata_vervaldatum) = 'VERVALDATUM'
AND UPPER (v_fac_usrdata_reftabel) = 'WAARDETABEL'
AND UPPER (v_fac_usrdata_refcode) = 'WAARDETABEL_CODE'
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
v_errormsg := 'Tabelnaam ongeldig; ongedefinieerd of te lang';
v_fac_usrtab_naam := TRIM (v_fac_usrtab_naam);
IF v_fac_usrtab_naam IS NULL OR LENGTH (v_fac_usrtab_naam) > 16
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
END IF;
--
v_errormsg := 'Waarde-code ongeldig; ongedefinieerd of te lang';
v_fac_usrdata_code := TRIM (v_fac_usrdata_code);
IF v_fac_usrdata_code IS NULL OR LENGTH (v_fac_usrdata_code) > 40
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
END IF;
--
v_errormsg := 'Waarde-omschrijving te lang';
v_fac_usrdata_omschr := TRIM (v_fac_usrdata_omschr);
IF LENGTH (v_fac_usrdata_omschr) > 60
THEN
v_fac_usrdata_omschr :=
SUBSTR (TRIM (v_fac_usrdata_omschr), 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Waarde-omschrijving wordt afgebroken tot ['
|| v_fac_usrdata_omschr
|| ']'
);
END IF;
--
v_errormsg := 'Waarde-omschrijving2 te lang';
v_fac_usrdata_omschr2 := TRIM (v_fac_usrdata_omschr2);
IF LENGTH (v_fac_usrdata_omschr2) > 60
THEN
v_fac_usrdata_omschr2 :=
SUBSTR (TRIM (v_fac_usrdata_omschr2), 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Waarde-omschrijving2 wordt afgebroken tot ['
|| v_fac_usrdata_omschr2
|| ']'
);
END IF;
--
v_errormsg := 'Volgnummer ongeldig; maximale grootte 999';
v_fac_usrdata_volgnr := TRIM (v_fac_usrdata_volgnr);
v_fac_usrdata_volgnr_n := NULL;
IF (v_fac_usrdata_volgnr IS NOT NULL)
THEN
IF (fac.safe_to_number (v_fac_usrdata_volgnr) IS NULL)
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
ELSE
v_fac_usrdata_volgnr_n :=
fac.safe_to_number (v_fac_usrdata_volgnr);
END IF;
END IF;
--
v_errormsg := 'Prijs ongeldig; maximale grootte 999999.99';
v_fac_usrdata_prijs := TRIM (v_fac_usrdata_prijs);
v_fac_usrdata_prijs_n := NULL;
IF (v_fac_usrdata_prijs IS NOT NULL)
THEN
IF (fac.safe_to_number (v_fac_usrdata_prijs) IS NULL)
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
ELSE
v_fac_usrdata_prijs_n :=
fac.safe_to_number (v_fac_usrdata_prijs);
END IF;
END IF;
--
v_errormsg := 'Vervaldatum ongeldig';
v_fac_usrdata_vervaldatum := TRIM (v_fac_usrdata_vervaldatum);
v_fac_usrdata_vervaldatum_d := NULL;
IF (v_fac_usrdata_vervaldatum IS NOT NULL)
THEN
IF (fac.safe_to_date (v_fac_usrdata_vervaldatum, 'dd-mm-yyyy') IS NULL)
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
ELSE
v_fac_usrdata_vervaldatum_d :=
fac.safe_to_date (v_fac_usrdata_vervaldatum,
'dd-mm-yyyy');
END IF;
END IF;
--
v_errormsg := 'Waardetabelnaam ongeldig; ongedefinieerd of te lang';
v_fac_usrdata_reftabel := TRIM (v_fac_usrdata_reftabel);
IF LENGTH (v_fac_usrdata_reftabel) > 16
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
END IF;
--
v_errormsg := 'Waardetabelcode ongeldig; ongedefinieerd of te lang';
v_fac_usrdata_refcode := TRIM(v_fac_usrdata_refcode);
IF ( (v_fac_usrdata_reftabel IS NULL AND v_fac_usrdata_refcode IS NOT NULL)
OR (v_fac_usrdata_reftabel IS NOT NULL AND v_fac_usrdata_refcode IS NULL)
OR COALESCE(LENGTH (v_fac_usrdata_refcode),0) > 40
)
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
END IF;
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
BEGIN
v_errormsg := 'Fout bij wegschrijven importregel';
INSERT INTO fac_imp_usrdata (fac_usrtab_naam,
fac_usrdata_code,
fac_usrdata_omschr,
fac_usrdata_omschr2,
fac_usrdata_volgnr,
fac_usrdata_prijs,
fac_usrdata_vervaldatum,
fac_usrdata_reftabel,
fac_usrdata_refcode)
VALUES (v_fac_usrtab_naam,
v_fac_usrdata_code,
v_fac_usrdata_omschr,
v_fac_usrdata_omschr2,
v_fac_usrdata_volgnr_n,
v_fac_usrdata_prijs_n,
v_fac_usrdata_vervaldatum_d,
v_fac_usrdata_reftabel,
v_fac_usrdata_refcode);
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'');
END;
COMMIT;
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!');
ELSE
fac.imp_writelog (
p_import_key,
'S',
'Eigen tabellen/aantal ingelezen importregels: '
|| TO_CHAR (v_count_tot),
''
);
fac.imp_writelog (
p_import_key,
'S',
'Eigen tabellen/aantal ongeldige niet ingelezen importregels: '
|| TO_CHAR (v_count_tot - v_count_import),
''
);
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Inleesproces eigen tabellen afgebroken!');
END fac_import_usrdata;
/
CREATE OR REPLACE PROCEDURE fac_update_usrdata (p_import_key IN NUMBER)
AS
-- Cursor loopt over de voorkomende (unieke) tabelnamen.
CURSOR c1
IS
SELECT DISTINCT fac_usrtab_naam FROM fac_imp_usrdata;
v_errormsg VARCHAR2 (1000) := '';
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
-- SUBPROC
PROCEDURE add_tabel (p_import_key IN NUMBER,
p_tabname IN VARCHAR2)
AS
CURSOR c1
IS
SELECT fac_usrtab_naam,
fac_usrdata_code,
fac_usrdata_omschr,
fac_usrdata_omschr2,
fac_usrdata_volgnr,
fac_usrdata_prijs,
fac_usrdata_vervaldatum,
fac_usrdata_reftabel,
fac_usrdata_refcode
FROM fac_imp_usrdata
WHERE fac_usrtab_naam = p_tabname;
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count NUMBER (10);
v_count_tot NUMBER (10);
v_count_upd NUMBER (10);
v_tab_key NUMBER;
v_parentkey NUMBER;
v_parentwaarde_key NUMBER(10);
v_waardetabel_naam VARCHAR2(16);
v_waardetabel_key NUMBER(10) := -2;
v_count_waardetabel NUMBER(10);
BEGIN
v_count_tot := 0;
v_count_upd := 0;
-- Bepaal de key bij waardetabel.
SELECT COUNT(*)
, MIN(fac_usrdata_reftabel)
INTO v_count_waardetabel
, v_waardetabel_naam
FROM (SELECT DISTINCT fac_usrdata_reftabel
FROM fac_imp_usrdata
WHERE fac_usrtab_naam = p_tabname
);
IF (v_count_waardetabel = 1)
THEN
IF (v_waardetabel_naam IS NULL)
THEN
v_waardetabel_key := NULL;
ElSE
SELECT COALESCE(MIN(fac_usrtab_key), -1)
INTO v_waardetabel_key
FROM fac_usrtab
WHERE fac_usrtab_naam = v_waardetabel_naam;
END IF;
END IF;
-- v_waardetabel_key: NULL -> usrtab_parentkey NULL
-- >0 -> usrtab_parentkey
-- -1 -> tabel bestaat niet
-- -2 -> voor p_tabname zijn meer dan 1 verschillende parent keys gevonden
v_errormsg := 'Fout bij bepalen eigen tabel [' || p_tabname || '] ';
SELECT COUNT(*)
, MIN(fac_usrtab_key)
, MIN(fac_usrtab_parentkey)
INTO v_count
, v_tab_key
, v_parentkey
FROM fac_usrtab
WHERE fac_usrtab_verwijder IS NULL
AND fac_usrtab_naam = p_tabname;
IF (v_count = 0)
THEN
v_errormsg := 'Fout bij toevoegen eigen tabel [' || p_tabname || '] '
|| CASE WHEN v_waardetabel_key IS NULL THEN ''
ELSE 'met waardetabelkey=' || v_waardetabel_key
END;
INSERT INTO fac_usrtab (fac_usrtab_naam, fac_usrtab_omschrijving, fac_usrtab_parentkey)
VALUES (p_tabname, p_tabname, v_waardetabel_key)
RETURNING fac_usrtab_key INTO v_tab_key;
v_parentkey := v_waardetabel_key;
COMMIT;
END IF;
-- Voor een bestaande fac_usrtab moet de parentkey gelijk zijn aan v_waardetabel_key.
IF ((v_parentkey = v_waardetabel_key) OR (v_parentkey IS NULL AND v_waardetabel_key IS NULL))
THEN
BEGIN
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
-- Als er een referentietabel is moet de waarde in die tabel bestaan.
IF (v_parentkey > 0)
THEN
v_errormsg := 'Fout bij bepalen bestaan waardetabel_code ['
|| v_waardetabel_naam || '.' || rec.fac_usrdata_refcode
|| '] ' || TO_CHAR(v_parentkey) || ',' || rec.fac_usrdata_refcode;
SELECT fac_usrdata_key
INTO v_parentwaarde_key
FROM fac_usrdata
WHERE fac_usrtab_key = v_parentkey
AND fac_usrdata_code = rec.fac_usrdata_refcode;
END IF;
-- Toevoegen/wijzigen van tabelwaarde.
v_errormsg :=
'Fout bij bepalen bestaan waarde-code ['
|| rec.fac_usrdata_code
|| '] ';
SELECT COUNT ( * )
INTO v_count
FROM fac_usrdata
WHERE fac_usrdata_verwijder IS NULL
AND fac_usrtab_key = v_tab_key
AND fac_usrdata_code = rec.fac_usrdata_code;
IF (v_count = 0)
THEN
v_errormsg :=
'Fout bij toevoegen waarde-code ['
|| rec.fac_usrdata_code
|| '] ';
INSERT INTO fac_usrdata (fac_usrtab_key,
fac_usrdata_code,
fac_usrdata_omschr,
fac_usrdata_omschr2,
fac_usrdata_volgnr,
fac_usrdata_vervaldatum,
fac_usrdata_prijs,
fac_usrdata_parentkey
)
VALUES (v_tab_key,
rec.fac_usrdata_code,
rec.fac_usrdata_omschr,
rec.fac_usrdata_omschr2,
rec.fac_usrdata_volgnr,
rec.fac_usrdata_vervaldatum,
rec.fac_usrdata_prijs,
v_parentwaarde_key);
ELSE
v_errormsg :=
'Fout bij bijwerken waarde-code ['
|| rec.fac_usrdata_code
|| '] ';
UPDATE fac_usrdata
SET fac_usrdata_omschr = rec.fac_usrdata_omschr,
fac_usrdata_omschr2 = rec.fac_usrdata_omschr2,
fac_usrdata_volgnr = rec.fac_usrdata_volgnr,
fac_usrdata_vervaldatum = rec.fac_usrdata_vervaldatum,
fac_usrdata_prijs = rec.fac_usrdata_prijs,
fac_usrdata_parentkey = v_parentwaarde_key
WHERE fac_usrdata_verwijder IS NULL
AND fac_usrtab_key = v_tab_key
AND fac_usrdata_code = rec.fac_usrdata_code;
END IF;
COMMIT;
v_count_upd := v_count_upd + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| 'ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
'');
COMMIT;
END;
END LOOP;
fac.imp_writelog (
p_import_key,
'S',
p_tabname || ': #ingelezen = ' || TO_CHAR (v_count_tot),
''
);
fac.imp_writelog (
p_import_key,
'S',
p_tabname || ': #toegevoegd/bijgewerkt = ' || TO_CHAR (v_count_upd),
''
);
COMMIT;
END;
ELSE
fac.imp_writelog (
p_import_key,
'E',
p_tabname || ': waardetabel [' || v_waardetabel_naam || '] komt niet overeen met parentkey',
''
);
COMMIT;
END IF;
END;
-- MAIN
BEGIN
-- Loop door de voorkomende (unieke) tabelnamen en voeg deze toe en/of werk
-- deze bij.
FOR rec IN c1
LOOP
BEGIN
add_tabel (p_import_key, rec.fac_usrtab_naam);
END;
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| 'ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
'Importproces eigen tabellen afgebroken!');
END fac_update_usrdata;
/
--// FLEX
-- kenmerken-import (transport), volgens UWVA#20708
-- UWVA#32742: flexkenmerken transport voor objecten
CREATE OR REPLACE PROCEDURE fac_import_flex (p_import_key IN NUMBER
)
IS
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
v_newline VARCHAR2 (10000); -- Import line
v_field VARCHAR2 (100); -- Import field
v_fielddelimitor VARCHAR2 (2) := fac.import_delimiter(p_import_key); -- Field seperator
v_count_import NUMBER (10);
v_count NUMBER;
v_errormsg VARCHAR2 (200);
v_errorhint VARCHAR2 (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
-- De importvelden
v_fac_kenmerkdomein_omschr VARCHAR2 (300);
v_fac_kenmerkdomein_objectnaam VARCHAR2 (300);
v_fac_kenmerkdomein_kolomnaam VARCHAR2 (300);
v_fac_kenmerkdomein_kolomtxt VARCHAR2 (300);
v_fac_usrtab_naam VARCHAR2 (300);
v_srtkenmerk_omschrijving VARCHAR2 (300);
v_srtkenmerk_kenmerktype VARCHAR2 (300);
v_srtkenmerk_systeem VARCHAR2 (300);
v_srtkenmerk_lengte VARCHAR2 (300);
v_srtkenmerk_dec VARCHAR2 (300);
v_srtkenmerk_nmin VARCHAR2 (300);
v_srtkenmerk_nmax VARCHAR2 (300);
v_srtkenmerk_dimensie VARCHAR2 (300);
v_srtkenmerk_code VARCHAR2 (300);
v_kenmerk_type VARCHAR2 (300);
v_kenmerk_niveau VARCHAR2 (300);
v_kenmerk_verplicht VARCHAR2 (300);
v_kenmerk_groep VARCHAR2 (300);
v_kenmerk_rolcode VARCHAR2 (300);
v_kenmerk_volgnummer VARCHAR2 (300);
v_kenmerk_default VARCHAR2 (4000);
v_kenmerk_toonbaar VARCHAR2 (300);
v_kenmerk_uniek VARCHAR2 (300);
v_kenmerk_hint VARCHAR2 (300);
v_kenmerk_regexp VARCHAR2 (300);
v_kenmerk_show_expr VARCHAR2 (4000);
v_kenmerk_omschr VARCHAR2 (300);
v_kenmerk_verwijder VARCHAR2 (300);
v_kenmerk_wissen VARCHAR2 (300);
v_kenmerk_code VARCHAR2 (300);
v_deflevel1 VARCHAR2 (300); /* res_srtactiviteit, mld_srtdiscipline, bes_discipline of cnt_discipline */
v_deflevel2 VARCHAR2 (300); /* res_activiteit, mld_discipline, bes_srtgroep of niks */
v_deflevel3 VARCHAR2 (300); /* niks, mld_stdmelding, bes_srtdeel of niks */
v_deflevel4 VARCHAR2 (300); /* niks, mld_typeopdr, niks of niks */
v_kenmerk_extra_1 VARCHAR2 (300); /* extra kolommen voor kenmerk die niet in elke module voorkomen */
v_kenmerk_extra_2 VARCHAR2 (300); /* check wel of dit veld groot genoeg is voor het betreffende kenmerk */
v_kenmerk_extra_3 VARCHAR2 (300); /* als er een extra kenmerk wordt gebruikt moeten deflevel1 t/m 4 bestaan, desnoods als null-value */
v_kenmerk_extra_4 VARCHAR2 (300);
flexmodule VARCHAR2 (3);
v_res_srtactiviteit VARCHAR2 (300);
v_res_activiteit VARCHAR2 (300);
v_mld_srtdiscipline VARCHAR2 (300);
v_mld_discipline VARCHAR2 (300);
v_mld_stdmelding VARCHAR2 (300);
v_mld_typeopdr VARCHAR2 (300);
v_bes_discipline VARCHAR2 (300);
v_bes_srtgroep VARCHAR2 (300);
v_bes_srtdeel VARCHAR2 (300);
v_cnt_discipline VARCHAR2 (300);
v_ins_discipline VARCHAR2 (300);
v_ins_srtgroep VARCHAR2 (300);
v_ins_srtdeel VARCHAR2 (300);
header_found BOOLEAN := FALSE;
BEGIN
-- Clear my previous imported rows
DELETE FROM fac_imp_flex;
v_count_import := 0;
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
fac.imp_getfield (v_newline, v_fielddelimitor, v_fac_kenmerkdomein_omschr); --1
fac.imp_getfield (v_newline, v_fielddelimitor, v_fac_kenmerkdomein_objectnaam);
fac.imp_getfield (v_newline, v_fielddelimitor, v_fac_kenmerkdomein_kolomnaam);
fac.imp_getfield (v_newline, v_fielddelimitor, v_fac_kenmerkdomein_kolomtxt);
fac.imp_getfield (v_newline, v_fielddelimitor, v_fac_usrtab_naam);
fac.imp_getfield (v_newline, v_fielddelimitor, v_srtkenmerk_code);
fac.imp_getfield (v_newline, v_fielddelimitor, v_srtkenmerk_omschrijving);
fac.imp_getfield (v_newline, v_fielddelimitor, v_srtkenmerk_kenmerktype);
fac.imp_getfield (v_newline, v_fielddelimitor, v_srtkenmerk_systeem);
fac.imp_getfield (v_newline, v_fielddelimitor, v_srtkenmerk_lengte); -- 10
fac.imp_getfield (v_newline, v_fielddelimitor, v_srtkenmerk_dec);
fac.imp_getfield (v_newline, v_fielddelimitor, v_srtkenmerk_nmin);
fac.imp_getfield (v_newline, v_fielddelimitor, v_srtkenmerk_nmax);
fac.imp_getfield (v_newline, v_fielddelimitor, v_srtkenmerk_dimensie);
fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_type);
fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_niveau);
fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_verplicht);
fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_groep);
fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_rolcode);
fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_volgnummer);
fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_default); -- 20
fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_toonbaar);
fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_uniek);
fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_hint);
fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_regexp);
fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_show_expr);
fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_code);
fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_omschr);
fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_verwijder);
fac.imp_getfield (v_newline, v_fielddelimitor, v_deflevel1);
fac.imp_getfield (v_newline, v_fielddelimitor, v_deflevel2); -- 30
fac.imp_getfield (v_newline, v_fielddelimitor, v_deflevel3);
fac.imp_getfield (v_newline, v_fielddelimitor, v_deflevel4);
fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_extra_1);
fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_extra_2);
fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_extra_3);
fac.imp_getfield (v_newline, v_fielddelimitor, v_kenmerk_extra_4); -- 36
-- Skip until the header is found
IF (header_found = FALSE)
THEN
IF UPPER (v_fac_kenmerkdomein_omschr) = 'FAC_KENMERKDOMEIN_OMSCHRIJVING'
AND UPPER (v_fac_kenmerkdomein_objectnaam) = 'FAC_KENMERKDOMEIN_OBJECTNAAM'
AND UPPER (v_fac_kenmerkdomein_kolomnaam) = 'FAC_KENMERKDOMEIN_KOLOMNAAM'
AND UPPER (v_fac_kenmerkdomein_kolomtxt) = 'FAC_KENMERKDOMEIN_KOLOMTXT'
AND UPPER (v_fac_usrtab_naam) = 'FAC_USRTAB_NAAM'
AND UPPER (v_srtkenmerk_code) = 'SRTKENMERK_CODE'
AND UPPER (v_srtkenmerk_omschrijving) = 'SRTKENMERK_OMSCHRIJVING'
AND UPPER (v_srtkenmerk_kenmerktype) = 'SRTKENMERK_KENMERKTYPE'
AND UPPER (v_srtkenmerk_systeem) = 'SRTKENMERK_SYSTEEM'
AND UPPER (v_srtkenmerk_lengte) = 'SRTKENMERK_LENGTE'
AND UPPER (v_srtkenmerk_dec) = 'SRTKENMERK_DEC'
AND UPPER (v_srtkenmerk_nmin) = 'SRTKENMERK_NMIN'
AND UPPER (v_srtkenmerk_nmax) = 'SRTKENMERK_NMAX'
AND UPPER (v_srtkenmerk_dimensie) = 'SRTKENMERK_DIMENSIE'
AND UPPER (v_kenmerk_type) = 'KENMERK_TYPE'
AND UPPER (v_kenmerk_niveau) = 'KENMERK_NIVEAU'
AND UPPER (v_kenmerk_verplicht) = 'KENMERK_VERPLICHT'
AND UPPER (v_kenmerk_groep) = 'KENMERK_GROEP'
AND UPPER (v_kenmerk_rolcode) = 'KENMERK_ROLCODE'
AND UPPER (v_kenmerk_volgnummer) = 'KENMERK_VOLGNUMMER'
AND UPPER (v_kenmerk_default) = 'KENMERK_DEFAULT'
AND UPPER (v_kenmerk_toonbaar) = 'KENMERK_TOONBAAR'
AND UPPER (v_kenmerk_uniek) = 'KENMERK_UNIEK'
AND UPPER (v_kenmerk_hint) = 'KENMERK_HINT'
AND UPPER (v_kenmerk_regexp) = 'KENMERK_REGEXP'
AND UPPER (v_kenmerk_show_expr) = 'KENMERK_SHOW_EXPR'
AND UPPER (v_kenmerk_code) = 'KENMERK_CODE'
AND UPPER (v_kenmerk_omschr) = 'KENMERK_OMSCHR'
AND UPPER (v_kenmerk_verwijder) = 'KENMERK_VERWIJDER'
THEN
header_found := TRUE;
-- Wat voor een header is het?
IF UPPER (v_deflevel1) = 'ACTIVITEITSOORT'
AND UPPER (v_deflevel2) = 'ACTIVITEIT'
THEN
flexmodule := 'RES';
ELSIF UPPER (v_deflevel1) = 'CATALOGUS'
AND UPPER (v_deflevel2) = 'GROEP'
AND UPPER (v_deflevel3) = 'ARTIKEL'
THEN
flexmodule := 'BES';
ELSIF UPPER (v_deflevel1) = 'VAKGROEPTYPE'
AND UPPER (v_deflevel2) = 'VAKGROEP'
AND UPPER (v_deflevel3) = 'MELDING'
AND UPPER (v_deflevel4) = 'OPDRACHTTYPE'
THEN
flexmodule := 'MLD';
ELSIF UPPER (v_deflevel1) = 'CONTRACTSOORT'
THEN
flexmodule := 'CNT';
ELSIF UPPER (v_deflevel1) = 'DISCIPLINE'
AND UPPER (v_deflevel2) = 'GROEP'
AND UPPER (v_deflevel3) = 'OBJECTSOORT'
THEN
flexmodule := 'INS';
ELSIF UPPER (v_deflevel1) = 'FACTUUR'
THEN
flexmodule := 'FIN';
ELSIF UPPER (v_deflevel1) = 'DISCIPLINE'
AND UPPER (v_deflevel2) = 'SRTCONTROLE'
THEN
flexmodule := 'CTR';
END IF;
END IF;
ELSE
IF flexmodule = 'RES'
THEN
v_res_srtactiviteit := v_deflevel1;
v_res_activiteit := v_deflevel2;
ELSIF flexmodule = 'BES'
THEN
v_bes_discipline := v_deflevel1;
v_bes_srtgroep := v_deflevel2;
v_bes_srtdeel := v_deflevel3;
ELSIF flexmodule = 'MLD'
THEN
v_mld_srtdiscipline := v_deflevel1;
v_mld_discipline := v_deflevel2;
v_mld_stdmelding := v_deflevel3;
v_mld_typeopdr := v_deflevel4;
ELSIF flexmodule = 'CNT'
THEN
v_cnt_discipline := v_deflevel1;
ELSIF flexmodule = 'INS'
THEN
-- Hieronder staat telkens de splisting van kenmerk: of op discipline/groep/objectsoort of op inspectiekenmerk.
-- In de update-procedure wordt deze splitsing bepaald door kenmerk_niveau (D = deel, C = controle)
-- Discipline of (voor inspectiekenmerken) een dummy Tekst voor ctr_controle_type (1,2,3), iets als inspectie controle, - vervanging, - certificering
v_ins_discipline := v_deflevel1;
-- Groep binnen de discipline, of (voor inspectiekenmerken) de omschrijving van de soortcontrole (ins_srtcontrole_omschrijving)
v_ins_srtgroep := v_deflevel2;
-- Objectsoort, of (voor inspectiekenmerken) de (tekst)waarde '1', '2' of '3' (ctr_controle_type).
v_ins_srtdeel := v_deflevel3;
ELSIF flexmodule = 'CTR'
THEN
v_ins_discipline := v_deflevel1;
v_ins_srtgroep := v_deflevel2;
END IF;
INSERT INTO fac_imp_flex (
fac_kenmerkdomein_omschrijving, -- 1
fac_kenmerkdomein_objectnaam,
fac_kenmerkdomein_kolomnaam,
fac_kenmerkdomein_kolomtxt,
fac_usrtab_naam,
srtkenmerk_code,
srtkenmerk_omschrijving,
srtkenmerk_kenmerktype,
srtkenmerk_systeem,
srtkenmerk_lengte, -- 10
srtkenmerk_dec,
srtkenmerk_nmin,
srtkenmerk_nmax,
srtkenmerk_dimensie,
kenmerk_niveau,
kenmerk_verplicht,
kenmerk_groep,
kenmerk_rolcode,
kenmerk_volgnummer,
kenmerk_default,
kenmerk_type, -- 20
kenmerk_toonbaar,
kenmerk_uniek,
kenmerk_hint,
kenmerk_regexp,
kenmerk_show_expr,
kenmerk_code,
kenmerk_omschr,
kenmerk_verwijder,
kenmerk_extra_1,
kenmerk_extra_2, -- 30
kenmerk_extra_3,
kenmerk_extra_4,
res_srtactiviteit,
res_activiteit,
mld_srtdiscipline,
mld_discipline,
mld_stdmelding,
mld_typeopdr,
bes_discipline,
bes_srtgroep, -- 40
bes_srtdeel,
cnt_discipline,
ins_discipline,
ins_srtgroep,
ins_srtdeel, -- 45
kenmerk_module
)
VALUES (
SUBSTR (v_fac_kenmerkdomein_omschr, 1, 255), -- 1
SUBSTR (v_fac_kenmerkdomein_objectnaam, 1, 255),
SUBSTR (v_fac_kenmerkdomein_kolomnaam, 1, 255),
SUBSTR (v_fac_kenmerkdomein_kolomtxt, 1, 255),
SUBSTR (v_fac_usrtab_naam, 1, 255),
SUBSTR (v_srtkenmerk_code, 1, 255),
SUBSTR (v_srtkenmerk_omschrijving, 1, 255),
SUBSTR (v_srtkenmerk_kenmerktype, 1, 255),
SUBSTR (v_srtkenmerk_systeem, 1, 255),
SUBSTR (v_srtkenmerk_lengte, 1, 255), -- 10
SUBSTR (v_srtkenmerk_dec, 1, 255),
SUBSTR (v_srtkenmerk_nmin, 1, 255),
SUBSTR (v_srtkenmerk_nmax, 1, 255),
SUBSTR (v_srtkenmerk_dimensie, 1, 255),
SUBSTR (v_kenmerk_niveau, 1, 255),
SUBSTR (v_kenmerk_verplicht, 1, 255),
SUBSTR (v_kenmerk_groep, 1, 255),
SUBSTR (v_kenmerk_rolcode, 1, 255),
SUBSTR (v_kenmerk_volgnummer, 1, 255),
SUBSTR (v_kenmerk_default, 1, 4000),
SUBSTR (v_kenmerk_type, 1, 255), -- 20
SUBSTR (v_kenmerk_toonbaar, 1, 255),
SUBSTR (v_kenmerk_uniek, 1, 255),
SUBSTR (v_kenmerk_hint, 1, 255),
SUBSTR (v_kenmerk_regexp, 1, 255),
SUBSTR (v_kenmerk_show_expr, 1, 4000),
SUBSTR (v_kenmerk_code, 1, 255),
SUBSTR (v_kenmerk_omschr, 1, 255),
SUBSTR (v_kenmerk_verwijder, 1, 255),
SUBSTR (v_kenmerk_extra_1, 1, 255),
SUBSTR (v_kenmerk_extra_2, 1, 255), -- 30
SUBSTR (v_kenmerk_extra_3, 1, 255),
SUBSTR (v_kenmerk_extra_4, 1, 255),
v_res_srtactiviteit,
v_res_activiteit,
v_mld_srtdiscipline,
v_mld_discipline,
v_mld_stdmelding,
v_mld_typeopdr,
v_bes_discipline,
v_bes_srtgroep, -- 40
v_bes_srtdeel,
v_cnt_discipline,
v_ins_discipline,
v_ins_srtgroep,
v_ins_srtdeel, -- 45
flexmodule
);
v_count_import := v_count_import + 1;
END IF;
END;
END LOOP;
IF (header_found = FALSE)
THEN
fac.imp_writelog (p_import_key,
'W',
'Ongeldig importbestand',
'Geen header of header niet volgens specificatie!'
);
ELSE
fac.imp_writelog (p_import_key, 'S', 'Aantal ingelezen regels ('||flexmodule||'): ' || 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 := '(ORACLE error ' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key, 'W', v_errormsg, '');
END;
/
-- UNDER CONSTRUCTION
--
-- Mijn voorstel is om het als volgt te doen:
-- 1. inlezen van het bestand in fac_imp_flex
-- 2. Op basis van de header constateren of het res/bes/mld is
-- res: ACTIVITEITSOORT;ACTIVITEIT
-- mld: VAKGROEPTYPE;VAKGROEP;MELDING;OPDRACHTTYPE
-- bes: CATALOGUS;GROEP;ARTIKEL
-- cnt: CONTRACTSOORT
-- 3. Dan de verdere handling in fac_update_flex
-- flexkenmerken-import (transport) voor RES/MLD/BES, volgens UWVA#20706
-- en voor CNT, volgens AALB#27395
-- UWVA#32742: flexkenmerken transport voor objecten
CREATE OR REPLACE PROCEDURE fac_update_flex (p_import_key IN NUMBER)
IS
CURSOR c_flex
IS
SELECT * FROM fac_imp_flex
ORDER BY srtkenmerk_omschrijving, kenmerk_volgnummer;
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (250);
v_errormsg VARCHAR2 (1024);
v_errorhint VARCHAR2 (1024);
v_count NUMBER;
flexmodule VARCHAR2 (3);
v_desc VARCHAR2 (255);
v_usrtab_key NUMBER;
v_kenmerkdomein_key NUMBER;
v_srtkenmerk_key NUMBER;
v_kenmerk_key NUMBER;
v_srtinstallatie_key NUMBER;
v_srtgroep_key NUMBER;
v_srtdeel_key NUMBER;
v_srtdiscipline_key NUMBER;
v_discipline_key NUMBER;
v_stdmelding_key NUMBER;
v_typeopdr_key NUMBER;
v_activiteit_key NUMBER;
currentversion fac_module.fac_module_version%TYPE;
e_transport EXCEPTION;
BEGIN
-- Init
SELECT MAX (fac_module_version) INTO currentversion FROM fac_module;
fac.imp_writelog (p_import_key,
'S',
'Facilitor flexkenmerken import versie ' || currentversion,
'$Revision$'
);
COMMIT;
-- Bestaan de gebruikte Eigen tabellen?
SELECT COUNT ( * )
INTO v_count
FROM fac_imp_flex
WHERE fac_usrtab_naam IS NOT NULL AND fac_usrtab_naam NOT IN (SELECT fac_usrtab_naam FROM fac_usrtab);
IF (v_count != 0)
THEN
v_errormsg := 'Ontbrekende Eigen tabel(len)';
RAISE e_transport;
END IF;
-- Proces de importregel. Als we ergens onderweg
-- een fout tegenkomen, doen we een rollback.
FOR rec IN c_flex
LOOP
-- Kenmerkdomeinen: maak nog-niet-bestaande domeinen aan.
BEGIN
-- bepaal de module
IF rec.res_activiteit IS NOT NULL THEN
flexmodule := 'RES';
ELSIF rec.bes_discipline IS NOT NULL THEN
flexmodule := 'BES';
ELSIF rec.ins_discipline IS NOT NULL THEN
flexmodule := 'INS';
ELSE
flexmodule := rec.kenmerk_module; -- MLD, FIN, ...
END IF;
v_kenmerkdomein_key := NULL;
IF rec.fac_kenmerkdomein_omschrijving IS NOT NULL THEN
v_usrtab_key := NULL;
v_kenmerkdomein_key := NULL;
v_desc := rec.fac_kenmerkdomein_omschrijving;
v_errormsg := 'Fout bij bepalen kenmerkdomein ' || v_desc;
-- Bestaat dit domein al?
SELECT COUNT ( * ), MIN(fac_kenmerkdomein_key)
INTO v_count, v_kenmerkdomein_key
FROM fac_kenmerkdomein kd
WHERE kd.fac_kenmerkdomein_module = flexmodule
AND kd.fac_kenmerkdomein_omschrijving = rec.fac_kenmerkdomein_omschrijving
AND fac_kenmerkdomein_verwijder IS NULL;
IF (v_count = 0)
THEN
-- Bestaat nog niet --> aanmaken
v_errormsg := 'Fout bij bepalen Eigen tabel ' || rec.fac_usrtab_naam;
-- Gebruikt domein een usrtab?
IF (rec.fac_usrtab_naam || 'x' != 'x')
THEN
SELECT fac_usrtab_key
INTO v_usrtab_key
FROM fac_usrtab
WHERE fac_usrtab_naam = rec.fac_usrtab_naam;
END IF;
-- Domein toevoegen
-- (NB: mogelijk bestaat er nog een domein met de goede omschrijving,
-- maar met een verwijderdatum. Die negeren we en maken een nieuwe)
v_errormsg := 'Fout bij toevoegen kenmerkdomein ' || v_desc;
INSERT INTO fac_kenmerkdomein (
fac_kenmerkdomein_module,
fac_kenmerkdomein_omschrijving,
fac_kenmerkdomein_objectnaam,
fac_kenmerkdomein_kolomnaam,
fac_kenmerkdomein_kolomtxt,
fac_usrtab_key
)
VALUES (
flexmodule,
rec.fac_kenmerkdomein_omschrijving,
rec.fac_kenmerkdomein_objectnaam,
rec.fac_kenmerkdomein_kolomnaam,
rec.fac_kenmerkdomein_kolomtxt,
v_usrtab_key
)
RETURNING fac_kenmerkdomein_key
INTO v_kenmerkdomein_key;
fac.imp_writelog (p_import_key, 'I', flexmodule||'-kenmerkdomein toegevoegd', v_desc);
ELSE
-- Bestaat al wel
fac.imp_writelog (p_import_key,
'I',
'Kenmerkdomein opgehaald',
v_desc || ' (' || v_kenmerkdomein_key || ')'
);
END IF;
END IF;
-- Kenmerksoorten: maak nog-niet-bestaande soorten aan.
v_srtkenmerk_key := NULL;
IF rec.srtkenmerk_omschrijving IS NOT NULL
THEN
v_desc := rec.srtkenmerk_omschrijving;
v_errormsg := 'Fout bij bepalen kenmerksoort ' || v_desc;
-- Bestaat dit soort al?
CASE flexmodule
WHEN 'BES' THEN
SELECT COUNT ( * ), MIN(bes_srtkenmerk_key)
INTO v_count, v_srtkenmerk_key
FROM bes_srtkenmerk
WHERE bes_srtkenmerk_omschrijving = rec.srtkenmerk_omschrijving
AND bes_srtkenmerk_verwijder IS NULL;
WHEN 'MLD' THEN
SELECT COUNT ( * ), MIN(mld_srtkenmerk_key)
INTO v_count, v_srtkenmerk_key
FROM mld_srtkenmerk
WHERE mld_srtkenmerk_omschrijving = rec.srtkenmerk_omschrijving
AND mld_srtkenmerk_verwijder IS NULL;
WHEN 'RES' THEN
SELECT COUNT ( * ), MIN(res_srtkenmerk_key)
INTO v_count, v_srtkenmerk_key
FROM res_srtkenmerk
WHERE res_srtkenmerk_omschrijving = rec.srtkenmerk_omschrijving
AND res_srtkenmerk_verwijder IS NULL;
WHEN 'CNT' THEN
SELECT COUNT ( * ), MIN(cnt_srtkenmerk_key)
INTO v_count, v_srtkenmerk_key
FROM cnt_srtkenmerk
WHERE cnt_srtkenmerk_omschrijving = rec.srtkenmerk_omschrijving
AND cnt_srtkenmerk_verwijder IS NULL;
WHEN 'INS' THEN
SELECT COUNT ( * ), MIN(ins_srtkenmerk_key)
INTO v_count, v_srtkenmerk_key
FROM ins_srtkenmerk
WHERE ins_srtkenmerk_omschrijving = rec.srtkenmerk_omschrijving
AND ins_srtkenmerk_verwijder IS NULL;
END CASE;
IF (v_count = 0)
THEN
-- Bestaat nog niet --> aanmaken
-- (NB: mogelijk bestaat er nog een soort met de goede omschrijving,
-- maar met een verwijderdatum. Die negeren we en maken een nieuwe)
v_errormsg := 'Fout bij toevoegen kenmerksoort ' || v_desc;
CASE flexmodule
WHEN 'BES' THEN
INSERT INTO bes_srtkenmerk (
bes_srtkenmerk_omschrijving,
bes_srtkenmerk_code,
bes_srtkenmerk_kenmerktype,
bes_srtkenmerk_systeem,
bes_srtkenmerk_lengte,
bes_srtkenmerk_dec,
bes_srtkenmerk_nmin,
bes_srtkenmerk_nmax,
bes_srtkenmerk_dimensie,
fac_kenmerkdomein_key
)
VALUES (
rec.srtkenmerk_omschrijving,
rec.srtkenmerk_code,
rec.srtkenmerk_kenmerktype,
rec.srtkenmerk_systeem,
rec.srtkenmerk_lengte,
rec.srtkenmerk_dec,
rec.srtkenmerk_nmin,
rec.srtkenmerk_nmax,
rec.srtkenmerk_dimensie,
v_kenmerkdomein_key
)
RETURNING bes_srtkenmerk_key
INTO v_srtkenmerk_key;
WHEN 'MLD' THEN
INSERT INTO mld_srtkenmerk (
mld_srtkenmerk_omschrijving,
mld_srtkenmerk_code,
mld_srtkenmerk_kenmerktype,
mld_srtkenmerk_systeem,
mld_srtkenmerk_lengte,
mld_srtkenmerk_dec,
mld_srtkenmerk_nmin,
mld_srtkenmerk_nmax,
mld_srtkenmerk_dimensie,
fac_kenmerkdomein_key
)
VALUES (
rec.srtkenmerk_omschrijving,
rec.srtkenmerk_code,
rec.srtkenmerk_kenmerktype,
rec.srtkenmerk_systeem,
rec.srtkenmerk_lengte,
rec.srtkenmerk_dec,
rec.srtkenmerk_nmin,
rec.srtkenmerk_nmax,
rec.srtkenmerk_dimensie,
v_kenmerkdomein_key
)
RETURNING mld_srtkenmerk_key
INTO v_srtkenmerk_key;
WHEN 'RES' THEN
INSERT INTO res_srtkenmerk (
res_srtkenmerk_omschrijving,
res_srtkenmerk_code,
res_srtkenmerk_kenmerktype,
res_srtkenmerk_systeem,
res_srtkenmerk_lengte,
res_srtkenmerk_dec,
res_srtkenmerk_nmin,
res_srtkenmerk_nmax,
res_srtkenmerk_dimensie,
fac_kenmerkdomein_key
)
VALUES (
rec.srtkenmerk_omschrijving,
rec.srtkenmerk_code,
rec.srtkenmerk_kenmerktype,
rec.srtkenmerk_systeem,
rec.srtkenmerk_lengte,
rec.srtkenmerk_dec,
rec.srtkenmerk_nmin,
rec.srtkenmerk_nmax,
rec.srtkenmerk_dimensie,
v_kenmerkdomein_key
)
RETURNING res_srtkenmerk_key
INTO v_srtkenmerk_key;
WHEN 'CNT' THEN
INSERT INTO cnt_srtkenmerk (
cnt_srtkenmerk_omschrijving,
cnt_srtkenmerk_code,
cnt_srtkenmerk_kenmerktype,
cnt_srtkenmerk_systeem,
cnt_srtkenmerk_lengte,
cnt_srtkenmerk_dec,
cnt_srtkenmerk_nmin,
cnt_srtkenmerk_nmax,
cnt_srtkenmerk_dimensie,
fac_kenmerkdomein_key
)
VALUES (
rec.srtkenmerk_omschrijving,
rec.srtkenmerk_code,
rec.srtkenmerk_kenmerktype,
rec.srtkenmerk_systeem,
rec.srtkenmerk_lengte,
rec.srtkenmerk_dec,
rec.srtkenmerk_nmin,
rec.srtkenmerk_nmax,
rec.srtkenmerk_dimensie,
v_kenmerkdomein_key
)
RETURNING cnt_srtkenmerk_key
INTO v_srtkenmerk_key;
WHEN 'INS' THEN
INSERT INTO ins_srtkenmerk (
ins_srtkenmerk_omschrijving,
ins_srtkenmerk_code,
ins_srtkenmerk_kenmerktype,
ins_srtkenmerk_systeem,
ins_srtkenmerk_lengte,
ins_srtkenmerk_dec,
ins_srtkenmerk_nmin,
ins_srtkenmerk_nmax,
ins_srtkenmerk_dimensie,
fac_kenmerkdomein_key
)
VALUES (
rec.srtkenmerk_omschrijving,
rec.srtkenmerk_code,
rec.srtkenmerk_kenmerktype,
rec.srtkenmerk_systeem,
rec.srtkenmerk_lengte,
rec.srtkenmerk_dec,
rec.srtkenmerk_nmin,
rec.srtkenmerk_nmax,
rec.srtkenmerk_dimensie,
v_kenmerkdomein_key
)
RETURNING ins_srtkenmerk_key
INTO v_srtkenmerk_key;
END CASE;
fac.imp_writelog (p_import_key, 'I', 'Kenmersoort toegevoegd', v_desc);
ELSE
-- Bestaat al wel
CASE flexmodule
WHEN 'BES' THEN
UPDATE bes_srtkenmerk SET
bes_srtkenmerk_omschrijving = rec.srtkenmerk_omschrijving,
bes_srtkenmerk_code = rec.srtkenmerk_code,
bes_srtkenmerk_kenmerktype = rec.srtkenmerk_kenmerktype,
bes_srtkenmerk_systeem = rec.srtkenmerk_systeem,
bes_srtkenmerk_lengte = rec.srtkenmerk_lengte,
bes_srtkenmerk_dec = rec.srtkenmerk_dec,
bes_srtkenmerk_nmin = rec.srtkenmerk_nmin,
bes_srtkenmerk_nmax = rec.srtkenmerk_nmax,
bes_srtkenmerk_dimensie = rec.srtkenmerk_dimensie,
fac_kenmerkdomein_key = v_kenmerkdomein_key
WHERE bes_srtkenmerk_key = v_srtkenmerk_key;
WHEN 'MLD' THEN
UPDATE mld_srtkenmerk SET
mld_srtkenmerk_omschrijving = rec.srtkenmerk_omschrijving,
mld_srtkenmerk_code = rec.srtkenmerk_code,
mld_srtkenmerk_kenmerktype = rec.srtkenmerk_kenmerktype,
mld_srtkenmerk_systeem = rec.srtkenmerk_systeem,
mld_srtkenmerk_lengte = rec.srtkenmerk_lengte,
mld_srtkenmerk_dec = rec.srtkenmerk_dec,
mld_srtkenmerk_nmin = rec.srtkenmerk_nmin,
mld_srtkenmerk_nmax = rec.srtkenmerk_nmax,
mld_srtkenmerk_dimensie = rec.srtkenmerk_dimensie,
fac_kenmerkdomein_key = v_kenmerkdomein_key
WHERE mld_srtkenmerk_key = v_srtkenmerk_key;
WHEN 'RES' THEN
UPDATE res_srtkenmerk SET
res_srtkenmerk_omschrijving = rec.srtkenmerk_omschrijving,
res_srtkenmerk_code = rec.srtkenmerk_code,
res_srtkenmerk_kenmerktype = rec.srtkenmerk_kenmerktype,
res_srtkenmerk_systeem = rec.srtkenmerk_systeem,
res_srtkenmerk_lengte = rec.srtkenmerk_lengte,
res_srtkenmerk_dec = rec.srtkenmerk_dec,
res_srtkenmerk_nmin = rec.srtkenmerk_nmin,
res_srtkenmerk_nmax = rec.srtkenmerk_nmax,
res_srtkenmerk_dimensie = rec.srtkenmerk_dimensie,
fac_kenmerkdomein_key = v_kenmerkdomein_key
WHERE res_srtkenmerk_key = v_srtkenmerk_key;
WHEN 'CNT' THEN
UPDATE cnt_srtkenmerk SET
cnt_srtkenmerk_omschrijving = rec.srtkenmerk_omschrijving,
cnt_srtkenmerk_code = rec.srtkenmerk_code,
cnt_srtkenmerk_kenmerktype = rec.srtkenmerk_kenmerktype,
cnt_srtkenmerk_systeem = rec.srtkenmerk_systeem,
cnt_srtkenmerk_lengte = rec.srtkenmerk_lengte,
cnt_srtkenmerk_dec = rec.srtkenmerk_dec,
cnt_srtkenmerk_nmin = rec.srtkenmerk_nmin,
cnt_srtkenmerk_nmax = rec.srtkenmerk_nmax,
cnt_srtkenmerk_dimensie = rec.srtkenmerk_dimensie,
fac_kenmerkdomein_key = v_kenmerkdomein_key
WHERE cnt_srtkenmerk_key = v_srtkenmerk_key;
WHEN 'INS' THEN
UPDATE ins_srtkenmerk SET
ins_srtkenmerk_omschrijving = rec.srtkenmerk_omschrijving,
ins_srtkenmerk_code = rec.srtkenmerk_code,
ins_srtkenmerk_kenmerktype = rec.srtkenmerk_kenmerktype,
ins_srtkenmerk_systeem = rec.srtkenmerk_systeem,
ins_srtkenmerk_lengte = rec.srtkenmerk_lengte,
ins_srtkenmerk_dec = rec.srtkenmerk_dec,
ins_srtkenmerk_nmin = rec.srtkenmerk_nmin,
ins_srtkenmerk_nmax = rec.srtkenmerk_nmax,
ins_srtkenmerk_dimensie = rec.srtkenmerk_dimensie,
fac_kenmerkdomein_key = v_kenmerkdomein_key
WHERE ins_srtkenmerk_key = v_srtkenmerk_key;
END CASE;
fac.imp_writelog (p_import_key,
'I',
'Kenmerksoort aangepast',
v_desc || ' (' || v_srtkenmerk_key || ')'
);
END IF;
END IF;
-- Kenmerken
-- 1) bepaal keys
-- 2a) voeg toe
-- 2b) update
v_kenmerk_key := NULL;
CASE flexmodule
WHEN 'BES' THEN
-- Bepaal catalogus / groep / artikel
v_errormsg := 'Fout bij bepalen catalogus ' || rec.bes_discipline;
SELECT ins_discipline_key
INTO v_discipline_key
FROM bes_discipline
WHERE ins_discipline_verwijder IS NULL
AND ins_discipline_omschrijving = rec.bes_discipline;
v_srtinstallatie_key := v_discipline_key;
IF rec.bes_srtgroep IS NOT NULL THEN
v_errormsg := 'Fout bij bepalen groep ' || rec.bes_discipline || '/' || rec.bes_srtgroep;
SELECT bes_srtgroep_key
INTO v_srtgroep_key
FROM bes_srtgroep
WHERE bes_srtgroep_verwijder IS NULL
AND ins_discipline_key = v_discipline_key
AND bes_srtgroep_omschrijving = rec.bes_srtgroep;
v_srtinstallatie_key := v_srtgroep_key;
END IF;
IF rec.bes_srtdeel IS NOT NULL THEN
v_errormsg := 'Fout bij bepalen artikel ' || rec.bes_discipline || '/' || rec.bes_srtgroep || '/' || rec.bes_srtdeel;
SELECT bes_srtdeel_key
INTO v_srtdeel_key
FROM bes_srtdeel
WHERE bes_srtdeel_verwijder IS NULL
AND bes_srtgroep_key = v_srtgroep_key
AND bes_srtdeel_omschrijving = rec.bes_srtdeel;
v_srtinstallatie_key := v_srtdeel_key;
END IF;
v_desc := rec.srtkenmerk_omschrijving || ' (' || rec.bes_discipline || '/' || rec.bes_srtgroep || '/' || rec.bes_srtdeel || ')';
-- Bestaat dit kenmerk al?
v_errormsg := 'Fout bij bepalen kenmerk ' || v_desc;
SELECT COUNT ( * ), MIN(bes_kenmerk_key)
INTO v_count, v_kenmerk_key
FROM bes_kenmerk
WHERE bes_srtkenmerk_key = v_srtkenmerk_key
AND bes_kenmerk_niveau = rec.kenmerk_niveau
AND bes_kenmerk_type = rec.kenmerk_type
AND bes_srtinstallatie_key = v_srtinstallatie_key
AND (bes_kenmerk_omschrijving = rec.kenmerk_omschr
OR (rec.kenmerk_omschr IS NULL AND bes_kenmerk_omschrijving IS NULL));
IF (v_count = 0)
THEN
-- Bestaat nog niet --> aanmaken
v_errormsg := 'Fout bij toevoegen kenmerk ' || v_desc;
INSERT INTO bes_kenmerk (
bes_srtkenmerk_key,
bes_srtinstallatie_key,
bes_kenmerk_niveau,
bes_kenmerk_type,
bes_kenmerk_verplicht,
bes_kenmerk_groep,
bes_kenmerk_rolcode,
bes_kenmerk_volgnummer,
bes_kenmerk_default,
bes_kenmerk_verwijder,
bes_kenmerk_toonbaar,
bes_kenmerk_uniek,
bes_kenmerk_hint,
bes_kenmerk_regexp,
bes_kenmerk_show_expr,
bes_kenmerk_code,
bes_kenmerk_omschrijving
)
VALUES (
v_srtkenmerk_key,
v_srtinstallatie_key,
rec.kenmerk_niveau,
rec.kenmerk_type,
fac.safe_to_number (rec.kenmerk_verplicht),
fac.safe_to_number (rec.kenmerk_groep),
fac.safe_to_number (rec.kenmerk_rolcode),
fac.safe_to_number (rec.kenmerk_volgnummer),
rec.kenmerk_default,
TO_DATE (rec.kenmerk_verwijder, 'YYYY-MM-DD HH24:MI:SS'),
fac.safe_to_number (rec.kenmerk_toonbaar),
fac.safe_to_number (rec.kenmerk_uniek),
rec.kenmerk_hint,
rec.kenmerk_regexp,
rec.kenmerk_show_expr,
rec.kenmerk_code,
rec.kenmerk_omschr
)
RETURNING bes_kenmerk_key
INTO v_kenmerk_key;
fac.imp_writelog (p_import_key, 'I', 'Kenmerk toegevoegd', v_desc || ' (' || v_kenmerk_key || ')');
ELSE
-- Bestaat al wel --> updaten (dat kan ook verwijderen zijn!)
v_errormsg := 'Fout bij bijwerken kenmerk ' || v_desc;
UPDATE bes_kenmerk
SET bes_srtkenmerk_key = v_srtkenmerk_key,
bes_srtinstallatie_key = v_srtinstallatie_key,
bes_kenmerk_niveau = rec.kenmerk_niveau,
bes_kenmerk_type = rec.kenmerk_type,
bes_kenmerk_verplicht = fac.safe_to_number (rec.kenmerk_verplicht),
bes_kenmerk_groep = fac.safe_to_number (rec.kenmerk_groep),
bes_kenmerk_rolcode = fac.safe_to_number (rec.kenmerk_rolcode),
bes_kenmerk_volgnummer = fac.safe_to_number (rec.kenmerk_volgnummer),
bes_kenmerk_default = rec.kenmerk_default,
bes_kenmerk_verwijder = TO_DATE (rec.kenmerk_verwijder, 'YYYY-MM-DD HH24:MI:SS'),
bes_kenmerk_toonbaar = fac.safe_to_number (rec.kenmerk_toonbaar),
bes_kenmerk_uniek = fac.safe_to_number (rec.kenmerk_uniek),
bes_kenmerk_hint = rec.kenmerk_hint,
bes_kenmerk_regexp = rec.kenmerk_regexp,
bes_kenmerk_show_expr = rec.kenmerk_show_expr,
bes_kenmerk_code = rec.kenmerk_code,
bes_kenmerk_omschrijving = rec.kenmerk_omschr
WHERE bes_kenmerk_key = v_kenmerk_key
AND bes_kenmerk_verwijder IS NULL;
fac.imp_writelog (p_import_key, 'I', 'Kenmerk bijgewerkt', v_desc || ' (' || v_kenmerk_key || ')');
END IF;
WHEN 'MLD' THEN
-- Bepaal vakgroeptype / vakgroep / stdmelding / opdrachttype
v_srtdiscipline_key := NULL;
v_discipline_key := NULL;
v_stdmelding_key := NULL;
v_typeopdr_key := NULL;
IF rec.mld_srtdiscipline IS NOT NULL THEN
v_errormsg := 'Fout bij bepalen srtdiscipline ' || rec.mld_srtdiscipline;
SELECT ins_srtdiscipline_key
INTO v_srtdiscipline_key
FROM ins_srtdiscipline
WHERE ins_srtdiscipline_verwijder IS NULL
AND ins_srtdiscipline_omschrijving = rec.mld_srtdiscipline;
v_stdmelding_key := v_srtdiscipline_key;
END IF;
IF rec.mld_discipline IS NOT NULL THEN
v_errormsg := 'Fout bij bepalen discipline ' || rec.mld_srtdiscipline || '/' || rec.mld_discipline;
SELECT ins_discipline_key
INTO v_discipline_key
FROM mld_discipline
WHERE ins_discipline_verwijder IS NULL
AND ins_srtdiscipline_key = v_srtdiscipline_key
AND ins_discipline_omschrijving = rec.mld_discipline;
v_stdmelding_key := v_discipline_key;
END IF;
IF rec.mld_stdmelding IS NOT NULL THEN
v_errormsg := 'Fout bij bepalen stdmelding ' || rec.mld_srtdiscipline || '/' || rec.mld_discipline || '/' || rec.mld_stdmelding;
SELECT mld_stdmelding_key
INTO v_stdmelding_key
FROM mld_stdmelding
WHERE mld_stdmelding_verwijder IS NULL
AND mld_ins_discipline_key = v_discipline_key
AND mld_stdmelding_omschrijving = rec.mld_stdmelding;
END IF;
IF rec.mld_typeopdr IS NOT NULL THEN
v_errormsg := 'Fout bij bepalen typeopdr ' || rec.mld_typeopdr;
SELECT mld_typeopdr_key
INTO v_typeopdr_key
FROM mld_typeopdr
WHERE mld_typeopdr_omschrijving = rec.mld_typeopdr;
END IF;
v_desc := rec.srtkenmerk_omschrijving || ' [' || v_srtkenmerk_key || '] (' || rec.mld_srtdiscipline || '/' || rec.mld_discipline || '/' || rec.mld_stdmelding || ' - ' || rec.mld_typeopdr || ')';
-- Bestaat dit kenmerk al?
v_errormsg := 'Fout bij bepalen kenmerk ' || v_desc;
SELECT COUNT ( * ), MIN(mld_kenmerk_key)
INTO v_count, v_kenmerk_key
FROM mld_kenmerk
WHERE mld_srtkenmerk_key = v_srtkenmerk_key
AND mld_kenmerk_niveau = rec.kenmerk_niveau
AND mld_kenmerk_groep = rec.kenmerk_groep
AND (mld_stdmelding_key = v_stdmelding_key
OR mld_typeopdr_key = v_typeopdr_key
OR (mld_stdmelding_key IS NULL AND mld_typeopdr_key IS NULL)
)
AND (mld_kenmerk_omschrijving = rec.kenmerk_omschr
OR (rec.kenmerk_omschr IS NULL AND mld_kenmerk_omschrijving IS NULL));
IF (v_count = 0)
THEN
-- Bestaat nog niet --> aanmaken
v_errormsg := 'Fout bij toevoegen kenmerk ' || v_desc;
INSERT INTO mld_kenmerk (
mld_srtkenmerk_key,
mld_stdmelding_key,
mld_typeopdr_key,
mld_kenmerk_niveau,
mld_kenmerk_verplicht,
mld_kenmerk_groep,
mld_kenmerk_rolcode,
mld_kenmerk_volgnummer,
mld_kenmerk_default,
mld_kenmerk_verwijder,
mld_kenmerk_toonbaar,
mld_kenmerk_uniek,
mld_kenmerk_hint,
mld_kenmerk_regexp,
mld_kenmerk_show_expr,
mld_kenmerk_code,
mld_kenmerk_omschrijving,
mld_kenmerk_verplicht_status,
mld_kenmerk_onderbreken,
mld_kenmerk_obligation_fill
)
VALUES (
v_srtkenmerk_key,
v_stdmelding_key,
v_typeopdr_key,
rec.kenmerk_niveau,
fac.safe_to_number (rec.kenmerk_verplicht),
fac.safe_to_number (rec.kenmerk_groep),
fac.safe_to_number (rec.kenmerk_rolcode),
fac.safe_to_number (rec.kenmerk_volgnummer),
rec.kenmerk_default,
TO_DATE (rec.kenmerk_verwijder, 'YYYY-MM-DD HH24:MI:SS'),
fac.safe_to_number (rec.kenmerk_toonbaar),
fac.safe_to_number (rec.kenmerk_uniek),
rec.kenmerk_hint,
rec.kenmerk_regexp,
rec.kenmerk_show_expr,
rec.kenmerk_code,
rec.kenmerk_omschr,
fac.safe_to_number (rec.kenmerk_extra_1),
fac.safe_to_number (rec.kenmerk_extra_2),
fac.safe_to_number (rec.kenmerk_extra_3)
)
RETURNING mld_kenmerk_key
INTO v_kenmerk_key;
fac.imp_writelog (p_import_key, 'I', 'Kenmerk toegevoegd', v_desc || ' (' || v_kenmerk_key || ')');
ELSE
-- Bestaat al wel --> updaten (dat kan ook verwijderen zijn!)
v_errormsg := 'Fout bij bijwerken kenmerk ' || '[' || v_kenmerk_key || ']' || ' Gegevens:' || v_stdmelding_key || ',' || v_srtkenmerk_key || ',' || rec.kenmerk_niveau || ',' || v_desc;
UPDATE mld_kenmerk
SET mld_srtkenmerk_key = v_srtkenmerk_key,
mld_stdmelding_key = v_stdmelding_key,
mld_typeopdr_key = v_typeopdr_key,
mld_kenmerk_niveau = rec.kenmerk_niveau,
mld_kenmerk_verplicht = fac.safe_to_number (rec.kenmerk_verplicht),
mld_kenmerk_groep = fac.safe_to_number (rec.kenmerk_groep),
mld_kenmerk_rolcode = fac.safe_to_number (rec.kenmerk_rolcode),
mld_kenmerk_volgnummer = fac.safe_to_number (rec.kenmerk_volgnummer),
mld_kenmerk_default = rec.kenmerk_default,
mld_kenmerk_verwijder = TO_DATE (rec.kenmerk_verwijder, 'YYYY-MM-DD HH24:MI:SS'),
mld_kenmerk_toonbaar = fac.safe_to_number (rec.kenmerk_toonbaar),
mld_kenmerk_uniek = fac.safe_to_number (rec.kenmerk_uniek),
mld_kenmerk_hint = rec.kenmerk_hint,
mld_kenmerk_regexp = rec.kenmerk_regexp,
mld_kenmerk_show_expr = rec.kenmerk_show_expr,
mld_kenmerk_code = rec.kenmerk_code,
mld_kenmerk_omschrijving = rec.kenmerk_omschr,
mld_kenmerk_verplicht_status = fac.safe_to_number (rec.kenmerk_extra_1),
mld_kenmerk_onderbreken = fac.safe_to_number (rec.kenmerk_extra_2),
mld_kenmerk_obligation_fill = fac.safe_to_number (rec.kenmerk_extra_3)
WHERE mld_kenmerk_key = v_kenmerk_key
AND mld_kenmerk_verwijder IS NULL;
fac.imp_writelog (p_import_key, 'I', 'Kenmerk bijgewerkt', v_desc || ' (' || v_kenmerk_key || ')');
END IF;
WHEN 'RES' THEN
-- Bepaal activiteit
v_activiteit_key := NULL;
v_errormsg := 'Fout bij bepalen activiteit ' || rec.res_srtactiviteit || '/' || rec.res_activiteit;
SELECT res_activiteit_key
INTO v_activiteit_key
FROM res_srtactiviteit rsa, res_activiteit ra
WHERE res_srtactiviteit_verwijder IS NULL
AND res_activiteit_verwijder IS NULL
AND rsa.res_srtactiviteit_key = ra.res_srtactiviteit_key
AND rsa.res_srtactiviteit_omschrijving = rec.res_srtactiviteit
AND ra.res_activiteit_omschrijving = rec.res_activiteit;
v_desc := rec.srtkenmerk_omschrijving || ' (' || rec.res_srtactiviteit || '/' || rec.res_activiteit || ')';
-- Bestaat dit kenmerk al?
v_errormsg := 'Fout bij bepalen kenmerk ' || v_desc;
SELECT COUNT ( * ), MIN(res_kenmerk_key)
INTO v_count, v_kenmerk_key
FROM res_kenmerk
WHERE res_srtkenmerk_key = v_srtkenmerk_key
AND res_activiteit_key = v_activiteit_key
AND (res_kenmerk_omschrijving = rec.kenmerk_omschr
OR (rec.kenmerk_omschr IS NULL AND res_kenmerk_omschrijving IS NULL));
IF (v_count = 0)
THEN
-- Bestaat nog niet --> aanmaken
v_errormsg := 'Fout bij toevoegen kenmerk ' || v_desc;
INSERT INTO res_kenmerk (
res_srtkenmerk_key,
res_activiteit_key,
res_kenmerk_niveau,
res_kenmerk_verplicht,
res_kenmerk_groep,
res_kenmerk_rolcode,
res_kenmerk_volgnummer,
res_kenmerk_default,
res_kenmerk_verwijder,
res_kenmerk_toonbaar,
res_kenmerk_uniek,
res_kenmerk_hint,
res_kenmerk_regexp,
res_kenmerk_show_expr,
res_kenmerk_code,
res_kenmerk_omschrijving
)
VALUES (
v_srtkenmerk_key,
v_activiteit_key,
rec.kenmerk_niveau,
fac.safe_to_number (rec.kenmerk_verplicht),
fac.safe_to_number (rec.kenmerk_groep),
fac.safe_to_number (rec.kenmerk_rolcode),
fac.safe_to_number (rec.kenmerk_volgnummer),
rec.kenmerk_default,
TO_DATE (rec.kenmerk_verwijder, 'YYYY-MM-DD HH24:MI:SS'),
fac.safe_to_number (rec.kenmerk_toonbaar),
fac.safe_to_number (rec.kenmerk_uniek),
rec.kenmerk_hint,
rec.kenmerk_regexp,
rec.kenmerk_show_expr,
rec.kenmerk_code,
rec.kenmerk_omschr
)
RETURNING res_kenmerk_key
INTO v_kenmerk_key;
fac.imp_writelog (p_import_key, 'I', 'Kenmerk toegevoegd', v_desc || ' (' || v_kenmerk_key || ')');
ELSE
-- Bestaat al wel --> updaten (dat kan ook verwijderen zijn!)
v_errormsg := 'Fout bij bijwerken kenmerk ' || v_desc;
UPDATE res_kenmerk
SET res_srtkenmerk_key = v_srtkenmerk_key,
res_activiteit_key = v_activiteit_key,
res_kenmerk_niveau = rec.kenmerk_niveau,
res_kenmerk_verplicht = fac.safe_to_number (rec.kenmerk_verplicht),
res_kenmerk_groep = fac.safe_to_number (rec.kenmerk_groep),
res_kenmerk_rolcode = fac.safe_to_number (rec.kenmerk_rolcode),
res_kenmerk_volgnummer = fac.safe_to_number (rec.kenmerk_volgnummer),
res_kenmerk_default = rec.kenmerk_default,
res_kenmerk_verwijder = TO_DATE (rec.kenmerk_verwijder, 'YYYY-MM-DD HH24:MI:SS'),
res_kenmerk_toonbaar = fac.safe_to_number (rec.kenmerk_toonbaar),
res_kenmerk_uniek = fac.safe_to_number (rec.kenmerk_uniek),
res_kenmerk_hint = rec.kenmerk_hint,
res_kenmerk_regexp = rec.kenmerk_regexp,
res_kenmerk_show_expr = rec.kenmerk_show_expr,
res_kenmerk_code = rec.kenmerk_code,
res_kenmerk_omschrijving = rec.kenmerk_omschr
WHERE res_kenmerk_key = v_kenmerk_key
AND res_kenmerk_verwijder IS NULL;
fac.imp_writelog (p_import_key, 'I', 'Kenmerk bijgewerkt', v_desc || ' (' || v_kenmerk_key || ')');
END IF;
WHEN 'CNT' THEN
-- Bepaal contractsoort
v_discipline_key := NULL;
v_errormsg := 'Fout bij bepalen contractsoort ' || rec.cnt_discipline;
IF (rec.cnt_discipline IS NOT NULL OR rec.cnt_discipline != '')
THEN
SELECT ins_discipline_key
INTO v_discipline_key
FROM cnt_discipline
WHERE ins_discipline_verwijder IS NULL
AND ins_discipline_omschrijving = rec.cnt_discipline;
END IF;
v_desc := rec.srtkenmerk_omschrijving || ' (' || rec.cnt_discipline || ')';
-- Bestaat dit kenmerk al?
v_errormsg := 'Fout bij bepalen kenmerk ' || v_desc;
SELECT COUNT ( * ), MIN(cnt_kenmerk_key)
INTO v_count, v_kenmerk_key
FROM cnt_kenmerk
WHERE cnt_srtkenmerk_key = v_srtkenmerk_key
AND ( (cnt_srtcontract_key = v_discipline_key)
OR (v_discipline_key IS NULL AND cnt_srtcontract_key IS NULL)
)
AND ( (cnt_kenmerk_omschrijving = rec.kenmerk_omschr)
OR (rec.kenmerk_omschr IS NULL AND cnt_kenmerk_omschrijving IS NULL)
);
IF (v_count = 0)
THEN
-- Bestaat nog niet --> aanmaken
v_errormsg := 'Fout bij toevoegen kenmerk ' || v_desc;
INSERT INTO cnt_kenmerk (
cnt_srtkenmerk_key,
cnt_srtcontract_key,
cnt_kenmerk_niveau,
cnt_kenmerk_verplicht,
cnt_kenmerk_groep,
cnt_kenmerk_toonbaar,
cnt_kenmerk_rolcode,
cnt_kenmerk_volgnummer,
cnt_kenmerk_uniek,
cnt_kenmerk_verwijder,
cnt_kenmerk_default,
cnt_kenmerk_hint,
cnt_kenmerk_regexp,
cnt_kenmerk_show_expr,
cnt_kenmerk_code,
cnt_kenmerk_omschrijving
)
VALUES (
v_srtkenmerk_key,
v_discipline_key,
rec.kenmerk_niveau,
fac.safe_to_number (rec.kenmerk_verplicht),
fac.safe_to_number (rec.kenmerk_groep),
fac.safe_to_number (rec.kenmerk_toonbaar),
fac.safe_to_number (rec.kenmerk_rolcode),
fac.safe_to_number (rec.kenmerk_volgnummer),
fac.safe_to_number (rec.kenmerk_uniek),
TO_DATE (rec.kenmerk_verwijder, 'YYYY-MM-DD HH24:MI:SS'),
rec.kenmerk_default,
rec.kenmerk_hint,
rec.kenmerk_regexp,
rec.kenmerk_show_expr,
rec.kenmerk_code,
rec.kenmerk_omschr
)
RETURNING cnt_kenmerk_key
INTO v_kenmerk_key;
fac.imp_writelog (p_import_key, 'I', 'Kenmerk toegevoegd', v_desc || ' (' || v_kenmerk_key || ')');
ELSE
-- Bestaat al wel --> updaten (dat kan ook verwijderen zijn!)
v_errormsg := 'Fout bij bijwerken kenmerk ' || v_desc;
UPDATE cnt_kenmerk
SET cnt_srtkenmerk_key = v_srtkenmerk_key,
cnt_srtcontract_key = v_discipline_key,
cnt_kenmerk_niveau = rec.kenmerk_niveau,
cnt_kenmerk_verplicht = fac.safe_to_number (rec.kenmerk_verplicht),
cnt_kenmerk_groep = fac.safe_to_number (rec.kenmerk_groep),
cnt_kenmerk_toonbaar = fac.safe_to_number (rec.kenmerk_toonbaar),
cnt_kenmerk_rolcode = fac.safe_to_number (rec.kenmerk_rolcode),
cnt_kenmerk_volgnummer = fac.safe_to_number (rec.kenmerk_volgnummer),
cnt_kenmerk_uniek = fac.safe_to_number (rec.kenmerk_uniek),
cnt_kenmerk_verwijder = TO_DATE (rec.kenmerk_verwijder, 'YYYY-MM-DD HH24:MI:SS'),
cnt_kenmerk_default = rec.kenmerk_default,
cnt_kenmerk_hint = rec.kenmerk_hint,
cnt_kenmerk_regexp = rec.kenmerk_regexp,
cnt_kenmerk_show_expr = rec.kenmerk_show_expr,
cnt_kenmerk_code = rec.kenmerk_code,
cnt_kenmerk_omschrijving = rec.kenmerk_omschr
WHERE cnt_kenmerk_key = v_kenmerk_key
AND cnt_kenmerk_verwijder IS NULL;
fac.imp_writelog (p_import_key, 'I', 'Kenmerk bijgewerkt', v_desc || ' (' || v_kenmerk_key || ')');
END IF;
WHEN 'INS' THEN
IF rec.kenmerk_niveau = 'C'
THEN
-- Kenmerk is inspectie-gerelateerd (dus via ins_srtcontrole)
-- Bepalen van soort controle, dat is op basis van de omschrijving van soort controle in kolom ins_srtgroep, icm taakcategorie kolom rec.ins_discipline
v_errormsg := 'Fout bij bepalen soort controle ' || rec.ins_discipline || ' - ' || rec.ins_srtgroep;
SELECT ins_srtcontrole_key
INTO v_srtinstallatie_key
FROM ins_srtcontrole isc, ctr_discipline cd
WHERE isc.ins_srtcontrole_omschrijving = rec.ins_srtgroep
AND isc.ctr_discipline_key = cd.ins_discipline_key
AND cd.ins_discipline_omschrijving = rec.ins_discipline;
v_desc := rec.srtkenmerk_omschrijving || ' (' || rec.ins_discipline || '/' || rec.ins_srtgroep || ')';
ELSE
-- Kenmerk is object-gerelateerd (dus via ins_discipline, ins_srtgroep of ins_srtdeel)
-- Bepaal discipline / (soort)groep / objectsoort
v_errormsg := 'Fout bij bepalen discipline ' || rec.ins_discipline;
SELECT ins_discipline_key
INTO v_discipline_key
FROM ins_discipline
WHERE ins_discipline_verwijder IS NULL
AND ins_discipline_omschrijving = rec.ins_discipline;
v_srtinstallatie_key := v_discipline_key;
IF rec.ins_srtgroep IS NOT NULL THEN
v_errormsg := 'Fout bij bepalen groep ' || rec.ins_discipline || '/' || rec.ins_srtgroep;
SELECT ins_srtgroep_key
INTO v_srtgroep_key
FROM ins_srtgroep
WHERE ins_srtgroep_verwijder IS NULL
AND ins_discipline_key = v_discipline_key
AND ins_srtgroep_omschrijving = rec.ins_srtgroep;
v_srtinstallatie_key := v_srtgroep_key;
END IF;
IF rec.ins_srtdeel IS NOT NULL THEN
v_errormsg := 'Fout bij objectsoort ' || rec.ins_discipline || '/' || rec.ins_srtgroep || '/' || rec.ins_srtdeel;
SELECT ins_srtdeel_key
INTO v_srtdeel_key
FROM ins_srtdeel
WHERE ins_srtdeel_verwijder IS NULL
AND ins_srtgroep_key = v_srtgroep_key
AND ins_srtdeel_omschrijving = rec.ins_srtdeel;
v_srtinstallatie_key := v_srtdeel_key;
END IF;
v_desc := rec.srtkenmerk_omschrijving || ' (' || rec.ins_discipline || '/' || rec.ins_srtgroep || '/' || rec.ins_srtdeel || ')';
END IF;
-- Bestaat dit kenmerk al?
v_errormsg := 'Fout bij bepalen kenmerk ' || v_desc;
SELECT COUNT ( * ), MIN(ins_kenmerk_key)
INTO v_count, v_kenmerk_key
FROM ins_kenmerk
WHERE ins_srtkenmerk_key = v_srtkenmerk_key
AND ins_kenmerk_niveau = rec.kenmerk_niveau
AND ins_kenmerk_bewerkniveau = rec.kenmerk_type
AND ins_srtinstallatie_key = v_srtinstallatie_key
AND (ins_kenmerk_omschrijving = rec.kenmerk_omschr
OR (rec.kenmerk_omschr IS NULL AND ins_kenmerk_omschrijving IS NULL))
AND ins_kenmerk_verwijder IS NULL; -- MB: Let op, deze verbetering in de vorm van extra conditie bij INS erbij gezet,
-- Is niet bij de andere (RES,MLD,BES,CNT) takken aangepast. Kan tzt eventueel indien hier meldingen over komen.
-- Dit zorgt ervoor dat een verwijderd kenmerk in doel met dezelfde kenmerksoort NIET wordt beschouwd als kenmerk bestaat al, want dan wordt een update geprobeerd die faalt.
-- Nu wordt een nieuw kenmerk van die soort aangemaakt. Zie details in call UWVA#32742
IF (v_count = 0)
THEN
-- Bestaat nog niet --> aanmaken
v_errormsg := 'Fout bij toevoegen kenmerk ' || v_desc;
INSERT INTO ins_kenmerk (
ins_srtkenmerk_key,
ins_srtinstallatie_key,
ins_kenmerk_niveau,
ins_kenmerk_bewerkniveau,
ins_kenmerk_verplicht,
ins_kenmerk_groep,
ins_kenmerk_rolcode,
ins_kenmerk_volgnummer,
ins_kenmerk_default,
ins_kenmerk_verwijder,
ins_kenmerk_toonbaar,
ins_kenmerk_uniek,
ins_kenmerk_hint,
ins_kenmerk_regexp,
ins_kenmerk_show_expr,
ins_kenmerk_code,
ins_kenmerk_omschrijving,
ins_kenmerk_meetwaarde,
ins_kenmerk_wissen
)
VALUES (
v_srtkenmerk_key,
v_srtinstallatie_key,
rec.kenmerk_niveau,
rec.kenmerk_type,
fac.safe_to_number (rec.kenmerk_verplicht),
fac.safe_to_number (rec.kenmerk_groep),
fac.safe_to_number (rec.kenmerk_rolcode),
fac.safe_to_number (rec.kenmerk_volgnummer),
rec.kenmerk_default,
TO_DATE (rec.kenmerk_verwijder, 'YYYY-MM-DD HH24:MI:SS'),
fac.safe_to_number (rec.kenmerk_toonbaar),
fac.safe_to_number (rec.kenmerk_uniek),
rec.kenmerk_hint,
rec.kenmerk_regexp,
rec.kenmerk_show_expr,
rec.kenmerk_code,
rec.kenmerk_omschr,
fac.safe_to_number (rec.kenmerk_extra_1),
fac.safe_to_number (rec.kenmerk_extra_2)
)
RETURNING ins_kenmerk_key
INTO v_kenmerk_key;
fac.imp_writelog (p_import_key, 'I', 'Kenmerk toegevoegd', v_desc || ' (' || v_kenmerk_key || ')');
ELSE
-- Bestaat al wel --> updaten (dat kan ook verwijderen zijn!)
v_errormsg := 'Fout bij bijwerken kenmerk ' || v_desc;
UPDATE ins_kenmerk
SET ins_srtkenmerk_key = v_srtkenmerk_key,
ins_srtinstallatie_key = v_srtinstallatie_key,
ins_kenmerk_niveau = rec.kenmerk_niveau,
ins_kenmerk_bewerkniveau = rec.kenmerk_type,
ins_kenmerk_verplicht = fac.safe_to_number (rec.kenmerk_verplicht),
ins_kenmerk_groep = fac.safe_to_number (rec.kenmerk_groep),
ins_kenmerk_rolcode = fac.safe_to_number (rec.kenmerk_rolcode),
ins_kenmerk_volgnummer = fac.safe_to_number (rec.kenmerk_volgnummer),
ins_kenmerk_default = rec.kenmerk_default,
ins_kenmerk_verwijder = TO_DATE (rec.kenmerk_verwijder, 'YYYY-MM-DD HH24:MI:SS'),
ins_kenmerk_toonbaar = fac.safe_to_number (rec.kenmerk_toonbaar),
ins_kenmerk_uniek = fac.safe_to_number (rec.kenmerk_uniek),
ins_kenmerk_hint = rec.kenmerk_hint,
ins_kenmerk_regexp = rec.kenmerk_regexp,
ins_kenmerk_show_expr = rec.kenmerk_show_expr,
ins_kenmerk_code = rec.kenmerk_code,
ins_kenmerk_omschrijving = rec.kenmerk_omschr,
ins_kenmerk_meetwaarde = fac.safe_to_number (rec.kenmerk_extra_1),
ins_kenmerk_wissen = fac.safe_to_number (rec.kenmerk_extra_2)
WHERE ins_kenmerk_key = v_kenmerk_key
AND ins_kenmerk_verwijder IS NULL;
fac.imp_writelog (p_import_key, 'I', 'Kenmerk bijgewerkt', v_desc || ' (' || v_kenmerk_key || ')');
END IF;
WHEN 'FIN' THEN
-- Bestaat dit kenmerk al?
v_desc := rec.kenmerk_omschr;
v_errormsg := 'Fout bij bepalen kenmerk ' || v_desc;
SELECT COUNT (*), MIN(fin_kenmerk_key)
INTO v_count, v_kenmerk_key
FROM fin_kenmerk
WHERE (fin_kenmerk_omschrijving = rec.kenmerk_omschr
OR (rec.kenmerk_omschr IS NULL AND fin_kenmerk_omschrijving IS NULL));
IF (v_count = 0)
THEN
-- Bestaat nog niet --> aanmaken
v_errormsg := 'Fout bij toevoegen kenmerk ' || v_desc;
INSERT INTO fin_kenmerk (
fin_kenmerk_kenmerktype,
fin_kenmerk_systeem,
fin_kenmerk_lengte,
fin_kenmerk_dec,
fin_kenmerk_nmin,
fin_kenmerk_nmax,
fin_kenmerk_dimensie,
fin_kenmerk_type,
fin_kenmerk_verplicht,
fin_kenmerk_rolcode,
fin_kenmerk_volgnr,
fin_kenmerk_groep,
fin_kenmerk_default,
fin_kenmerk_verwijder,
fin_kenmerk_toonbaar,
fin_kenmerk_uniek,
fin_kenmerk_hint,
fin_kenmerk_regexp,
fin_kenmerk_show_expr,
fin_kenmerk_code,
fin_kenmerk_omschrijving
)
VALUES (
rec.srtkenmerk_kenmerktype,
rec.srtkenmerk_systeem,
rec.srtkenmerk_lengte,
rec.srtkenmerk_dec,
rec.srtkenmerk_nmin,
rec.srtkenmerk_nmax,
rec.srtkenmerk_dimensie,
rec.kenmerk_type,
fac.safe_to_number (rec.kenmerk_verplicht),
fac.safe_to_number (rec.kenmerk_rolcode),
fac.safe_to_number (rec.kenmerk_volgnummer),
fac.safe_to_number (rec.kenmerk_groep),
rec.kenmerk_default,
TO_DATE (rec.kenmerk_verwijder, 'YYYY-MM-DD HH24:MI:SS'),
fac.safe_to_number (rec.kenmerk_toonbaar),
fac.safe_to_number (rec.kenmerk_uniek),
rec.kenmerk_hint,
rec.kenmerk_regexp,
rec.kenmerk_show_expr,
rec.kenmerk_code,
rec.kenmerk_omschr
)
RETURNING fin_kenmerk_key
INTO v_kenmerk_key;
fac.imp_writelog (p_import_key, 'I', 'Kenmerk toegevoegd', v_desc || ' (' || v_kenmerk_key || ')');
ELSE
-- Bestaat al wel --> updaten (dat kan ook verwijderen zijn!)
v_errormsg := 'Fout bij bijwerken kenmerk ' || v_desc;
UPDATE fin_kenmerk
SET fin_kenmerk_kenmerktype = rec.srtkenmerk_kenmerktype,
fin_kenmerk_systeem = rec.srtkenmerk_systeem,
fin_kenmerk_lengte = rec.srtkenmerk_lengte,
fin_kenmerk_dec = rec.srtkenmerk_dec,
fin_kenmerk_nmin = rec.srtkenmerk_nmin,
fin_kenmerk_nmax = rec.srtkenmerk_nmax,
fin_kenmerk_dimensie = rec.srtkenmerk_dimensie,
fin_kenmerk_type = rec.kenmerk_type,
fin_kenmerk_verplicht = fac.safe_to_number (rec.kenmerk_verplicht),
fin_kenmerk_groep = fac.safe_to_number (rec.kenmerk_groep),
fin_kenmerk_rolcode = fac.safe_to_number (rec.kenmerk_rolcode),
fin_kenmerk_volgnr = fac.safe_to_number (rec.kenmerk_volgnummer),
fin_kenmerk_default = rec.kenmerk_default,
fin_kenmerk_verwijder = TO_DATE (rec.kenmerk_verwijder, 'YYYY-MM-DD HH24:MI:SS'),
fin_kenmerk_toonbaar = fac.safe_to_number (rec.kenmerk_toonbaar),
fin_kenmerk_uniek = fac.safe_to_number (rec.kenmerk_uniek),
fin_kenmerk_hint = rec.kenmerk_hint,
fin_kenmerk_regexp = rec.kenmerk_regexp,
fin_kenmerk_show_expr = rec.kenmerk_show_expr,
fin_kenmerk_code = rec.kenmerk_code,
fin_kenmerk_omschrijving = rec.kenmerk_omschr
WHERE fin_kenmerk_key = v_kenmerk_key
AND fin_kenmerk_verwijder IS NULL;
fac.imp_writelog (p_import_key, 'I', 'Kenmerk bijgewerkt', v_desc || ' (' || v_kenmerk_key || ')');
END IF;
END CASE;
END;
END LOOP;
--------------------------------------------------------------------------------
-- Als we hier uitkomen, is alles goed gegaan en kunnen we committen
COMMIT;
-- Als er ergens een fout optreedt, dan worden alle voorgaande mutaties teruggedraaid en wordt er alleen de logging gecommit
EXCEPTION
WHEN OTHERS
THEN
-- TODO: Zoiets?
ROLLBACK;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 150);
v_errorhint := v_errorhint || ' {' || v_errormsg || '}';
v_errormsg := '(ORACLE error ' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint);
COMMIT;
END;
/
------------- INSPECTIEDEFINITIES -------------------
CREATE OR REPLACE PROCEDURE fac_import_inspectie (p_import_key IN NUMBER)
IS
c_delim VARCHAR2 (2) := fac.import_delimiter(p_import_key);
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- 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_tot NUMBER (10);
v_count_import NUMBER (10);
v_ongeldig NUMBER (1);
v_aanduiding VARCHAR2 (200);
-- De importvelden
v_ins_discipline_omschrijving VARCHAR2 (255); -- C60
v_ins_srtgroep_omschrijving VARCHAR2 (255); -- C60
v_ins_srtdeel_code VARCHAR2 (255); -- C10
v_ins_srtcontrole_omschrijving VARCHAR2 (255); -- C60
v_ins_srtcontrole_info VARCHAR2 (1000); -- C320
v_ins_srtcontrole_periode VARCHAR2 (255); -- N6,2
v_ins_srtcontrole_mode VARCHAR2 (255); -- N1: 0=moment-modus of 1=interval-modus
v_ins_srtcontrole_eenheid VARCHAR2 (255); -- N1: 0=uurlijks, 1=dagelijks, 2=wekelijk, 3=maandelijk, 4=jaarlijks, null=niet
v_ins_srtcontrole_bits VARCHAR2 (255); -- N4: details, afhankelijk van de mode (mag best null zijn)
v_ctr_discipline_omschrijving VARCHAR2 (255); -- C60
-- Overige velden:
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
-- Eerst opruiming
DELETE FROM fac_imp_inspectie;
v_count_tot := 0;
v_count_import := 0;
header_is_valid := 0;
COMMIT;
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_errormsg := 'Fout opvragen te importeren rij';
v_aanduiding := '';
v_ongeldig := 0;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_delim, v_ins_discipline_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_ins_srtgroep_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_ins_srtdeel_code);
fac.imp_getfield (v_newline, c_delim, v_ins_srtcontrole_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_ins_srtcontrole_info);
fac.imp_getfield (v_newline, c_delim, v_ins_srtcontrole_periode);
fac.imp_getfield (v_newline, c_delim, v_ins_srtcontrole_eenheid);
fac.imp_getfield (v_newline, c_delim, v_ins_srtcontrole_mode);
fac.imp_getfield (v_newline, c_delim, v_ins_srtcontrole_bits);
fac.imp_getfield (v_newline, c_delim, v_ctr_discipline_omschrijving);
v_aanduiding := '|' || v_ins_discipline_omschrijving
|| '|' || v_ins_srtgroep_omschrijving
|| '|' || v_ins_srtdeel_code
|| '|' || v_ins_srtcontrole_omschrijving
|| '|' || v_ctr_discipline_omschrijving
|| '| ';
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
IF (header_is_valid = 0)
THEN
IF fac_check_import_header(v_ins_discipline_omschrijving, 'DISCIPLINEOMSCHRIJVING')
AND fac_check_import_header(v_ins_srtgroep_omschrijving, 'GROEPSOORTOMSCHRIJVING')
AND fac_check_import_header(v_ins_srtdeel_code, 'OBJECTSOORTCODE')
AND fac_check_import_header(v_ins_srtcontrole_omschrijving, 'CONTROLE OMSCHRIJVING')
AND fac_check_import_header(v_ins_srtcontrole_info, 'CONTROLE INFORMATIE')
AND fac_check_import_header(v_ins_srtcontrole_periode, 'CONTROLE PERIODE')
AND fac_check_import_header(v_ins_srtcontrole_eenheid, 'EENHEID')
AND fac_check_import_header(v_ins_srtcontrole_mode, 'CONTROLE MODE')
AND fac_check_import_header(v_ins_srtcontrole_bits, 'BITS')
AND fac_check_import_header(v_ctr_discipline_omschrijving, 'TAAKCATEGORIE')
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
v_ins_discipline_omschrijving := TRIM (v_ins_discipline_omschrijving);
IF LENGTH (v_ins_discipline_omschrijving) > 60
THEN
v_ins_discipline_omschrijving :=
SUBSTR (TRIM (v_ins_discipline_omschrijving), 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding,
'Disciplineomschrijving wordt afgebroken tot ['
|| v_ins_discipline_omschrijving
|| ']');
END IF;
--
v_ins_srtgroep_omschrijving := TRIM (v_ins_srtgroep_omschrijving);
IF LENGTH (v_ins_srtgroep_omschrijving) > 60
THEN
v_ins_srtgroep_omschrijving :=
SUBSTR (TRIM (v_ins_srtgroep_omschrijving), 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding,
'Groepsoortomschrijving wordt afgebroken tot ['
|| v_ins_srtgroep_omschrijving
|| ']');
END IF;
--
v_ins_srtdeel_code := TRIM (v_ins_srtdeel_code);
IF LENGTH (v_ins_srtdeel_code) > 10
THEN
v_ins_srtdeel_code := SUBSTR (TRIM (v_ins_srtdeel_code), 1, 10);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding,
'Objectsoortcode wordt afgebroken tot [' || v_ins_srtdeel_code || ']');
END IF;
--
v_ins_srtcontrole_omschrijving := TRIM (v_ins_srtcontrole_omschrijving);
IF LENGTH (v_ins_srtcontrole_omschrijving) > 60
THEN
v_ins_srtcontrole_omschrijving :=
SUBSTR (TRIM (v_ins_srtcontrole_omschrijving), 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding,
'Controle omschrijving wordt afgebroken tot ['
|| v_ins_srtcontrole_omschrijving
|| ']');
END IF;
--
v_ins_srtcontrole_info := TRIM (v_ins_srtcontrole_info);
IF LENGTH (v_ins_srtcontrole_info) > 320
THEN
v_ins_srtcontrole_info := SUBSTR (TRIM (v_ins_srtcontrole_info), 1, 320);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding,
'Controle informatie wordt afgebroken tot ['
|| v_ins_srtcontrole_info
|| ']');
END IF;
--
v_ins_srtcontrole_periode := TRIM (v_ins_srtcontrole_periode);
IF ( v_ins_srtcontrole_periode IS NULL
OR LENGTH (v_ins_srtcontrole_periode) > 7
OR VALIDATE_CONVERSION(v_ins_srtcontrole_periode AS NUMBER) = 0
)
THEN
v_ongeldig := 1;
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding,
'Controle Periode ['
|| v_ins_srtcontrole_periode
|| '] is niet ingevuld, te lang of geen getal');
END IF;
--
v_ins_srtcontrole_eenheid := TRIM (v_ins_srtcontrole_eenheid);
IF v_ins_srtcontrole_eenheid NOT IN ('0','1','2','3','4')
THEN
v_ongeldig := 1;
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding,
'Controle Eenheid ['
|| v_ins_srtcontrole_eenheid
|| '] is niet ingevuld of heeft een ongeldige waarde');
END IF;
--
v_ins_srtcontrole_mode := TRIM (v_ins_srtcontrole_mode);
IF v_ins_srtcontrole_mode NOT IN ('0','1')
THEN
v_ongeldig := 1;
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding,
'Controle Mode ['
|| v_ins_srtcontrole_mode
|| '] is niet ingevuld of heeft een ongeldige waarde');
END IF;
--
v_ins_srtcontrole_bits := TRIM (v_ins_srtcontrole_bits);
IF ( LENGTH (v_ins_srtcontrole_bits) > 4
OR VALIDATE_CONVERSION(v_ins_srtcontrole_bits AS NUMBER) = 0
)
THEN
v_ongeldig := 1;
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding,
'Controle Bits ['
|| v_ins_srtcontrole_bits
|| '] is te lang of geen getal');
END IF;
v_ctr_discipline_omschrijving := TRIM (v_ctr_discipline_omschrijving);
IF LENGTH (v_ctr_discipline_omschrijving) > 60
THEN
v_ctr_discipline_omschrijving := SUBSTR (TRIM( v_ctr_discipline_omschrijving), 1, 60);
fac.imp_writelog ( p_import_key, 'W', v_aanduiding
, 'Taakcategorie wordt afgebroken tot [' || v_ctr_discipline_omschrijving || ']'
);
END IF;
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
BEGIN
INSERT INTO fac_imp_inspectie (ins_discipline_omschrijving,
ins_srtgroep_omschrijving,
ins_srtdeel_code,
ins_srtcontrole_omschrijving,
ins_srtcontrole_info,
ins_srtcontrole_periode,
ins_srtcontrole_eenheid,
ins_srtcontrole_mode,
ins_srtcontrole_bits,
ctr_discipline_omschrijving)
VALUES (v_ins_discipline_omschrijving,
v_ins_srtgroep_omschrijving,
v_ins_srtdeel_code,
v_ins_srtcontrole_omschrijving,
v_ins_srtcontrole_info,
v_ins_srtcontrole_periode,
v_ins_srtcontrole_eenheid,
v_ins_srtcontrole_mode,
v_ins_srtcontrole_bits,
v_ctr_discipline_omschrijving);
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || v_errormsg,
'Fout bij toevoegen regel aan importtabel FAC_IMP_INSPECTIE.');
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!');
ELSE
fac.imp_writelog (
p_import_key,
'S',
'Inspectie controles: aantal ingelezen importregels: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (
p_import_key,
'S',
'Inspectie controles: aantal ongeldige niet ingelezen importregels: '
|| TO_CHAR (v_count_tot - v_count_import),
'');
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
'Inleesproces inspecties afgebroken!');
END fac_import_inspectie;
/
CREATE OR REPLACE PROCEDURE fac_update_inspectie (p_import_key IN NUMBER)
AS
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
data_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_discipline_key NUMBER (10);
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
|| ' - ' || rec_ins.ctr_discipline_omschrijving;
v_errorhint := 'Fout bij bepalen discipline';
data_is_valid := 1;
IF rec_ins.ins_discipline_omschrijving IS NULL
THEN
data_is_valid := 0;
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
v_errorhint := 'Fout bij bepalen groepsoort';
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;
v_errorhint := 'Fout bij bepalen deelsoort';
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;
v_errorhint := 'Fout bij bepalen bits';
-- 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_errorhint := 'Fout bij bepalen takcategorie';
BEGIN
SELECT ins_discipline_key
INTO v_ctr_discipline_key
FROM ctr_discipline
WHERE UPPER (ins_discipline_omschrijving) = UPPER(rec_ins.ctr_discipline_omschrijving)
AND ins_discipline_verwijder IS NULL;
EXCEPTION
WHEN NO_DATA_FOUND THEN
data_is_valid := 0;
v_errorhint := 'Taakcategorie [' || rec_ins.ctr_discipline_omschrijving || '] bestaat niet';
END;
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 (rec_ins.ins_srtcontrole_mode = 0 AND v_week_bits > 0 AND v_maand_bits > 0)
)
)
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_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 := '<27><>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 fac_update_inspectie;
/
-- AAIT#25547 - FAQ: Verbeteren kennisbank
CREATE OR REPLACE PROCEDURE fac_import_faq (p_import_key IN NUMBER)
IS
c_delim VARCHAR2 (2) := fac.import_delimiter(p_import_key);
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line
v_errormsg VARCHAR2 (100);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER;
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
v_ongeldig NUMBER (1);
v_aanduiding VARCHAR (900);
-- De importvelden
v_fac_faq_question VARCHAR2 (4000); -- C4000 (Voor import tot 500 beperkt)
v_fac_faq_answer VARCHAR2 (4000); -- C4000
v_fac_faq_answer2 VARCHAR2 (4000); -- C4000
v_fac_faq_level VARCHAR2 (255); -- C1
v_ins_discipline_key VARCHAR2 (255); -- N10
v_mld_stdmelding_key VARCHAR2 (255); -- N10
v_fac_faq_source VARCHAR2 (255); -- C60
v_fac_faq_url VARCHAR2 (255); -- C250
v_fac_faq_datum VARCHAR2 (255); -- DATE
v_fac_faq_lang VARCHAR2 (255); -- C3
v_fac_faq_hint VARCHAR2 (1000); -- C1000 (Voor import tot 1000 beperkt)
v_fac_faq_vervaldatum VARCHAR2 (255); -- DATE
v_faq_discipline_omschrijving VARCHAR2 (255); -- N10
v_fac_faq_displaymode VARCHAR2 (255); -- N3
-- Overig:
v_ins_discipline_key2 VARCHAR2 (255); -- N10
v_mld_stdmelding_key2 VARCHAR2 (255); -- N10
v_ins_discipline_key_n NUMBER (10); -- N10
v_mld_stdmelding_key_n NUMBER (10); -- N10
v_fac_faq_displaymode_n NUMBER (3); -- N3
v_fac_faq_datum_d DATE; -- DATE
v_fac_faq_datum_v DATE; -- DATE
-- Overige velden:
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
-- Eerst opruiming
DELETE FROM fac_imp_faq;
COMMIT;
v_count_tot := 0;
v_count_import := 0;
header_is_valid := 0;
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_errormsg := 'Fout opvragen te importeren rij';
v_aanduiding := '';
v_ongeldig := 0;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_delim, v_fac_faq_question);
fac.imp_getfield (v_newline, c_delim, v_fac_faq_answer);
fac.imp_getfield (v_newline, c_delim, v_fac_faq_answer2);
fac.imp_getfield (v_newline, c_delim, v_fac_faq_level);
fac.imp_getfield (v_newline, c_delim, v_ins_discipline_key);
fac.imp_getfield (v_newline, c_delim, v_mld_stdmelding_key);
fac.imp_getfield (v_newline, c_delim, v_fac_faq_source);
fac.imp_getfield (v_newline, c_delim, v_fac_faq_url);
fac.imp_getfield (v_newline, c_delim, v_fac_faq_datum);
fac.imp_getfield (v_newline, c_delim, v_fac_faq_lang);
fac.imp_getfield (v_newline, c_delim, v_fac_faq_hint);
fac.imp_getfield (v_newline, c_delim, v_fac_faq_vervaldatum);
fac.imp_getfield (v_newline, c_delim, v_faq_discipline_omschrijving);
fac.imp_getfield (v_newline, c_delim, v_fac_faq_displaymode);
v_aanduiding := '['
|| SUBSTR (v_fac_faq_question, 1, 500)
|| '|'
|| v_ins_discipline_key
|| '|'
|| v_mld_stdmelding_key
|| '] ';
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop.
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
IF (header_is_valid = 0)
THEN
IF UPPER (v_fac_faq_question) LIKE 'VRAAG%'
AND UPPER (v_fac_faq_answer) LIKE 'ANTWOORD%'
AND UPPER (v_fac_faq_answer2) LIKE 'MEER ANTWOORD%'
AND UPPER (v_fac_faq_level) = 'ZICHTBAAR VOOR'
AND UPPER (v_ins_discipline_key) = 'VAKGROEP'
AND UPPER (v_mld_stdmelding_key) = 'MELDING'
AND UPPER (v_fac_faq_source) = 'OORSPRONG'
AND UPPER (v_fac_faq_url) LIKE 'MEER INFO%'
AND UPPER (v_fac_faq_datum) = 'PUBLICATIEDATUM'
AND UPPER (v_fac_faq_lang) = 'TAAL'
AND UPPER (v_fac_faq_hint) = 'HINT'
AND UPPER (v_fac_faq_vervaldatum) = 'VERVALDATUM'
AND UPPER (v_faq_discipline_omschrijving) = 'CATALOGUSNAAM'
AND UPPER (v_fac_faq_displaymode) = 'DISPLAYMODE'
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
v_errormsg := 'Vraag ongeldig. Vraag heeft geen waarde of is langer dan 500 tekens';
v_fac_faq_question := TRIM (v_fac_faq_question);
IF v_fac_faq_question IS NULL OR LENGTH (v_fac_faq_question) > 500 -- Import beperking. In fac_faq tabel is dit 4000
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
END IF;
--
v_errormsg := 'Antwoord ongeldig. Antwoord heeft geen waarde of is langer dan 4000 tekens';
v_fac_faq_answer := TRIM (v_fac_faq_answer);
IF v_fac_faq_answer IS NULL OR LENGTH (v_fac_faq_answer) > 4000
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
END IF;
--
v_errormsg := 'Meer antwoord ongeldig. Waarde is langer dan 4000 tekens';
v_fac_faq_answer2 := TRIM(v_fac_faq_answer2);
IF LENGTH (v_fac_faq_answer2) > 4000
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
END IF;
--
v_errormsg := 'Zichtbaar voor ongeldig';
v_fac_faq_level := TRIM (v_fac_faq_level);
IF v_fac_faq_level IS NULL OR
UPPER(v_fac_faq_level) NOT IN ('ZELFSERVICE', 'PROFESSIONALS', 'BEIDE')
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || '|' || v_fac_faq_level || '|' || v_errormsg,
'Regel wordt overgeslagen!');
END IF;
--
v_errormsg := 'Vakgroep (MLD Discipline) ongeldig';
v_ins_discipline_key := LTRIM (RTRIM (v_ins_discipline_key));
v_ins_discipline_key_n := NULL;
IF LENGTH(v_ins_discipline_key) != 0
THEN
IF fac.safe_to_number (v_ins_discipline_key) IS NOT NULL
THEN
v_ins_discipline_key_n := fac.safe_to_number (v_ins_discipline_key);
BEGIN
SELECT ins_discipline_key
INTO v_ins_discipline_key2
FROM ins_tab_discipline
WHERE ins_discipline_key = v_ins_discipline_key_n
AND ins_discipline_verwijder IS NULL;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
fac.imp_writelog (p_import_key,
'I',
v_aanduiding,
'Vakgroep (MLD Discipline) is nieuw'
);
END;
ELSE
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!'
);
v_ongeldig := 1;
END IF;
END IF;
--
v_errormsg := 'Melding ongeldig';
v_mld_stdmelding_key := LTRIM (RTRIM (v_mld_stdmelding_key));
v_mld_stdmelding_key_n := NULL;
IF LENGTH(v_mld_stdmelding_key) != 0
THEN
IF fac.safe_to_number (v_mld_stdmelding_key) IS NOT NULL
THEN
v_mld_stdmelding_key_n := fac.safe_to_number (v_mld_stdmelding_key);
BEGIN
SELECT mld_stdmelding_key
INTO v_mld_stdmelding_key2
FROM mld_stdmelding
WHERE mld_stdmelding_key = v_mld_stdmelding_key_n
AND mld_stdmelding_verwijder IS NULL;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
fac.imp_writelog (p_import_key,
'I',
v_aanduiding,
'Melding is nieuw'
);
END;
ELSE
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!'
);
v_ongeldig := 1;
END IF;
END IF;
--
v_errormsg := 'Oorsprong ongeldig. Oorsprong is langer als 60 tekens';
v_fac_faq_source := TRIM (v_fac_faq_source);
IF v_fac_faq_source IS NOT NULL AND LENGTH (v_fac_faq_source) > 60
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
END IF;
--
v_errormsg := 'Meer info ongeldig. Meer info is langer als 250 tekens';
v_fac_faq_url := TRIM (v_fac_faq_url);
IF v_fac_faq_url IS NOT NULL AND LENGTH (v_fac_faq_url) > 250
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
END IF;
--
v_errormsg := 'Publicatiedatum ongeldig. Formaat datum is ddmmyyyy';
v_fac_faq_datum := TRIM (v_fac_faq_datum);
v_fac_faq_datum_d := NULL;
IF v_fac_faq_datum IS NOT NULL AND fac.safe_to_date (v_fac_faq_datum, 'dd-mm-yyyy') IS NULL
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
ELSE
v_fac_faq_datum_d := fac.safe_to_date (v_fac_faq_datum, 'dd-mm-yyyy');
END IF;
--
v_errormsg := 'Taal ongeldig. Taal is langer als 3 tekens';
v_fac_faq_lang := TRIM (v_fac_faq_lang);
IF v_fac_faq_lang IS NOT NULL AND LENGTH (v_fac_faq_lang) > 3
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
END IF;
--
v_errormsg := 'Hint ongeldig. Hint heeft geen waarde of is langer als 500 tekens';
v_fac_faq_hint := TRIM (v_fac_faq_hint);
IF v_fac_faq_hint IS NOT NULL AND LENGTH (v_fac_faq_hint) > 500 -- Import beperking. In fac_faq tabel is dit 1000
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
END IF;
--
v_errormsg := 'Vervaldatum ongeldig. Formaat datum is ddmmyyyy';
v_fac_faq_vervaldatum := TRIM (v_fac_faq_vervaldatum);
v_fac_faq_datum_v := NULL;
IF v_fac_faq_vervaldatum IS NOT NULL AND fac.safe_to_date (v_fac_faq_vervaldatum, 'dd-mm-yyyy') IS NULL
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!');
ELSE
v_fac_faq_datum_v := fac.safe_to_date (v_fac_faq_vervaldatum, 'dd-mm-yyyy');
END IF;
--
v_errormsg := 'Catalogusnaam (FAQ Discipline) ongeldig';
v_faq_discipline_omschrijving := TRIM (v_faq_discipline_omschrijving);
IF LENGTH (v_faq_discipline_omschrijving) > 60
THEN
v_faq_discipline_omschrijving := SUBSTR (TRIM (v_faq_discipline_omschrijving), 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Catalogusnaam wordt afgebroken tot ['
|| v_faq_discipline_omschrijving
|| ']'
);
END IF;
--
v_errormsg := 'Displaymode ongeldig';
v_fac_faq_displaymode := LTRIM (RTRIM (v_fac_faq_displaymode));
v_fac_faq_displaymode_n := 3; -- +1=Altijd tonen melding, +2=Pop-up melding, +4=Altijd tonen opdracht, +8=Pop-up opdracht.
IF LENGTH(v_fac_faq_displaymode) != 0
THEN
v_fac_faq_displaymode_n := fac.safe_to_number (v_fac_faq_displaymode);
IF v_fac_faq_displaymode_n IS NOT NULL
THEN
IF v_fac_faq_displaymode_n < 0 OR v_fac_faq_displaymode_n >= 16
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen!'
);
v_ongeldig := 1;
END IF;
ELSE
v_fac_faq_displaymode_n := 3;
END IF;
END IF;
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
BEGIN
v_errormsg := 'Fout bij wegschrijven importregel';
INSERT INTO fac_imp_faq (fac_faq_question,
fac_faq_answer,
fac_faq_answer2,
fac_faq_level,
ins_discipline_key,
mld_stdmelding_key,
fac_faq_source,
fac_faq_url,
fac_faq_datum,
fac_faq_lang,
fac_faq_hint,
fac_faq_vervaldatum,
faq_discipline_omschrijving,
fac_faq_displaymode)
VALUES (v_fac_faq_question,
v_fac_faq_answer,
v_fac_faq_answer2,
v_fac_faq_level,
v_ins_discipline_key_n,
v_mld_stdmelding_key_n,
v_fac_faq_source,
v_fac_faq_url,
v_fac_faq_datum_d,
v_fac_faq_lang,
v_fac_faq_hint,
v_fac_faq_datum_v,
v_faq_discipline_omschrijving,
v_fac_faq_displaymode_n);
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || v_errormsg,
'Fout bij toevoegen regel aan importtabel FAC_IMP_FAQ.'
);
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!');
ELSE
fac.imp_writelog (
p_import_key,
'S',
'Kennisbank/aantal ingelezen importregels: '
|| TO_CHAR (v_count_tot),
''
);
fac.imp_writelog (
p_import_key,
'S',
'Kennisbank/aantal ongeldige niet ingelezen importregels: '
|| TO_CHAR (v_count_tot - v_count_import),
''
);
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Inleesproces kennisbank afgebroken!');
END fac_import_faq;
/
-- AAIT#25547 - FAQ: Verbeteren kennisbank
CREATE OR REPLACE PROCEDURE fac_update_faq (p_import_key IN NUMBER)
AS
v_errmes VARCHAR2 (900);
oracle_err_num NUMBER;
oracle_err_var VARCHAR2 (100);
v_count NUMBER (10);
v_count_tot NUMBER (10);
v_count_update NUMBER (10);
v_aanduiding VARCHAR2 (1000);
ccount NUMBER (10);
teller INTEGER;
v_fac_faq_level NUMBER (3);
v_ins_discipline_key NUMBER (10);
v_ins_stdmelding_key NUMBER (10);
v_fac_faq_discipline_key NUMBER (10);
newkey NUMBER (10);
CURSOR c_kennisbankitems
IS
SELECT * FROM fac_imp_faq;
-- MAIN
BEGIN
v_count_tot := 0;
v_count_update := 0;
teller := 0;
FOR rec_faq IN c_kennisbankitems
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_aanduiding :=
rec_faq.fac_faq_question
|| ' - '
|| rec_faq.ins_discipline_key
|| '-'
|| rec_faq.mld_stdmelding_key;
v_errmes := 'Fout bij het toevoegen van de catalogus (FAQ ins_discipline)';
SELECT COUNT(*)
INTO v_count
FROM ins_tab_discipline
WHERE ins_discipline_verwijder IS NULL
AND ins_discipline_module = 'FAQ'
AND UPPER(TRIM(ins_discipline_omschrijving)) = UPPER(TRIM(rec_faq.faq_discipline_omschrijving));
IF (v_count = 0)
THEN
INSERT INTO ins_tab_discipline
(ins_discipline_module,
ins_discipline_omschrijving
)
VALUES ('FAQ',
TRIM(rec_faq.faq_discipline_omschrijving)
)
RETURNING ins_discipline_key
INTO v_fac_faq_discipline_key;
ELSE
SELECT ins_discipline_key
INTO v_fac_faq_discipline_key
FROM ins_tab_discipline
WHERE ins_discipline_verwijder IS NULL
AND ins_discipline_module = 'FAQ'
AND UPPER(TRIM(ins_discipline_omschrijving)) = UPPER(TRIM(rec_faq.faq_discipline_omschrijving));
END IF;
COMMIT;
IF rec_faq.fac_faq_question IS NULL
THEN
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding,
'Vraag mag niet leeg zijn: kennisbankitem wordt niet toegevoegd.');
ELSIF rec_faq.fac_faq_answer IS NULL
THEN
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding,
'Antwoord mag niet leeg zijn: kennisbankitem wordt niet toegevoegd.');
ELSIF rec_faq.fac_faq_level IS NULL
THEN
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding,
'Zichtbaar voor mag niet leeg zijn: kennisbankitem wordt niet toegevoegd.');
ELSIF UPPER(rec_faq.fac_faq_level) NOT IN ('ZELFSERVICE', 'PROFESSIONALS', 'BEIDE')
THEN
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding,
'Zichtbaar voor heeft geen geldige waard: kennisbankitem wordt niet toegevoegd.');
ELSE
v_errmes := 'Bepalen zichtbaar voor (level)';
SELECT flevel
INTO v_fac_faq_level
FROM (SELECT 1 flevel, 'ZELFSERVICE' ftext FROM DUAL UNION ALL
SELECT 2 flevel, 'PROFESSIONALS' ftext FROM DUAL UNION ALL
SELECT 3 flevel, 'BEIDE' ftext FROM DUAL)
WHERE ftext = UPPER(rec_faq.fac_faq_level);
v_errmes := 'Bepalen of de vakgroep (MLD ins_discipline) bestaat';
IF rec_faq.ins_discipline_key IS NOT NULL
THEN
SELECT ins_discipline_key
INTO v_ins_discipline_key
FROM ins_tab_discipline
WHERE ins_discipline_key = rec_faq.ins_discipline_key
AND ins_discipline_verwijder IS NULL;
END IF;
v_errmes := 'Bepalen of de melding (mld_stdmelding) bestaat';
IF rec_faq.mld_stdmelding_key IS NOT NULL
THEN
SELECT mld_stdmelding_key
INTO v_ins_stdmelding_key
FROM mld_stdmelding
WHERE mld_stdmelding_key = rec_faq.mld_stdmelding_key
AND mld_ins_discipline_key = rec_faq.ins_discipline_key
AND mld_stdmelding_verwijder IS NULL;
END IF;
v_errmes := 'Kijken of kennisbankitem bestaat';
SELECT COUNT (*)
INTO ccount
FROM fac_faq f
, mld_stdmeldingfaq m
WHERE f.fac_faq_key = m.fac_faq_key(+)
AND TRIM (UPPER (f.fac_faq_question)) = TRIM (UPPER (rec_faq.fac_faq_question))
AND ((m.ins_discipline_key = rec_faq.ins_discipline_key) OR ((m.ins_discipline_key IS NULL) AND (rec_faq.ins_discipline_key IS NULL)))
AND ((m.mld_stdmelding_key = rec_faq.mld_stdmelding_key) OR ((m.mld_stdmelding_key IS NULL) AND (rec_faq.mld_stdmelding_key IS NULL)));
IF ccount = 0
THEN
v_errmes := 'Toevoegen kennisbankitem fac_faq'
|| ' (vraag = '
|| SUBSTR(rec_faq.fac_faq_question, 1, 100)
|| '| antwoord = '
|| SUBSTR(rec_faq.fac_faq_answer, 1, 100)
|| '| regel'
|| v_count_tot
|| ')';
INSERT INTO fac_faq
(fac_faq_question,
fac_faq_answer,
fac_faq_answer2,
fac_faq_level,
fac_faq_source,
fac_faq_url,
fac_faq_datum,
fac_faq_lang,
fac_faq_hint,
fac_faq_vervaldatum,
faq_ins_discipline_key,
fac_faq_displaymode
)
VALUES (rec_faq.fac_faq_question,
rec_faq.fac_faq_answer,
rec_faq.fac_faq_answer2,
v_fac_faq_level,
rec_faq.fac_faq_source,
rec_faq.fac_faq_url,
rec_faq.fac_faq_datum,
rec_faq.fac_faq_lang,
rec_faq.fac_faq_hint,
rec_faq.fac_faq_vervaldatum,
v_fac_faq_discipline_key,
rec_faq.fac_faq_displaymode
)
RETURNING fac_faq_key
INTO newkey;
IF rec_faq.ins_discipline_key IS NOT NULL
THEN
INSERT INTO mld_stdmeldingfaq
(ins_discipline_key,
mld_stdmelding_key,
fac_faq_key
)
VALUES (rec_faq.ins_discipline_key,
rec_faq.mld_stdmelding_key,
newkey
);
END IF;
v_count_update := v_count_update + 1;
END IF;
COMMIT;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_var := SUBSTR (SQLERRM, 1, 100);
fac.imp_writelog
(p_import_key,
'W',
'Kennisbankitem kan niet worden weggeschreven ['
|| rec_faq.fac_faq_question
|| ']',
v_errmes || ' Oracle fout: ' || oracle_err_var
);
COMMIT; -- tbv logging
END;
END LOOP;
fac.imp_writelog (
p_import_key,
'S',
'Kennisbank/aantal toegevoegde importregels: '
|| TO_CHAR (v_count_update),
''
);
fac.imp_writelog (
p_import_key,
'S',
'Kennisbank/aantal ongeldige niet toegevoegde importregels: '
|| TO_CHAR (v_count_tot - v_count_update),
''
);
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_var := SUBSTR (SQLERRM, 1, 150);
v_errmes :=
v_errmes || 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_var || ')';
fac.imp_writelog (p_import_key,
'E',
'Importproces kennisbank afgebroken!',
v_errmes);
END fac_update_faq;
/
-- FSN#25952 Contractenimport
CREATE OR REPLACE PROCEDURE fac_import_cnt (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT fac_imp_csv_index
, fac_imp_csv_col01 CONTRACTNR
, fac_imp_csv_col02 VERSIE
, fac_imp_csv_col03 EXTERNNR
, fac_imp_csv_col04 CONTRACTSOORT
, fac_imp_csv_col05 BESCHRIJVING
, fac_imp_csv_col06 MANTELNR
, fac_imp_csv_col07 MANTELNR_VERSIE
, fac_imp_csv_col08 OMSCHRIJVING
, fac_imp_csv_col09 DIENST
, fac_imp_csv_col10 EIGENAAR_AFD
, fac_imp_csv_col11 EIGENAAR_EMAIL
, fac_imp_csv_col12 BEHEERDER_EMAIL
, fac_imp_csv_col13 OPMERKING
, fac_imp_csv_col14 INGANGSDATUM
, fac_imp_csv_col15 RAPPELDATUM
, fac_imp_csv_col16 OPZEGDATUM
, fac_imp_csv_col17 EINDDATUM
, fac_imp_csv_col18 SOORT_CONTACTPARTIJ
, fac_imp_csv_col19 BEDRIJFNAAM
, fac_imp_csv_col20 CONTACTNAAM
, fac_imp_csv_col21 KOSTENPLAATSCODE
, fac_imp_csv_col22 KOSTENSOORTCODE
, fac_imp_csv_col23 CONTRACTBEDRAG
, fac_imp_csv_col24 TERMIJNBEDRAG
, fac_imp_csv_col25 UURTARIEF
, fac_imp_csv_col26 KORTING
, fac_imp_csv_col27 LOCATIECODE
, fac_imp_csv_col28 TERREINCODE
, fac_imp_csv_col29 GEBOUWCODE
, fac_imp_csv_col30 VERDIEPINGCODE
, fac_imp_csv_col31 RUIMTECODE
, fac_imp_csv_col32 VERLENGEN
, fac_imp_csv_col33 FACTUURBOEKEN
, fac_imp_csv_col34 flex_01
, fac_imp_csv_col35 flex_02
, fac_imp_csv_col36 flex_03
, fac_imp_csv_col37 flex_04
, fac_imp_csv_col38 flex_05
, fac_imp_csv_col39 flex_06
, fac_imp_csv_col40 flex_07
, fac_imp_csv_col41 flex_08
, fac_imp_csv_col42 flex_09
, fac_imp_csv_col43 flex_10
, fac_imp_csv_col44 flex_11
, fac_imp_csv_col45 flex_12
, fac_imp_csv_col46 flex_13
, fac_imp_csv_col47 flex_14
, fac_imp_csv_col48 flex_15
, fac_imp_csv_col49 flex_16
, fac_imp_csv_col50 flex_17
, fac_imp_csv_col51 flex_18
, fac_imp_csv_col52 flex_19
, fac_imp_csv_col53 flex_20
, fac_imp_csv_col54 flex_21
, fac_imp_csv_col55 flex_22
, fac_imp_csv_col56 flex_23
, fac_imp_csv_col57 flex_24
, fac_imp_csv_col58 flex_25
FROM fac_imp_csv
WHERE fac_imp_csv_index > 1
AND fac_import_key = p_import_key;
v_errormsg VARCHAR2(1000);
v_errorhint VARCHAR2(1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2(200);
v_aanduiding VARCHAR2(200);
v_header_is_valid NUMBER(1) := 0;
v_ongeldig NUMBER(1) := 0;
v_count_rec NUMBER(10) := 0;
v_count_imp NUMBER(10) := 0;
v_ref_key NUMBER(10);
-- De importvelden
v_nummer_intern cnt_contract.cnt_contract_nummer_intern%TYPE; --VARCHAR2(30)
v_versie cnt_contract.cnt_contract_versie%TYPE; --VARCHAR2(10)
v_nummer_extern cnt_contract.cnt_contract_nummer%TYPE; --VARCHAR2(30)
v_cnt_soort ins_tab_discipline.ins_discipline_omschrijving%TYPE; --VARCHAR2(60) --> cnt_contract.ins_discipline_key
v_beschrijving cnt_contract.cnt_contract_omschrijving%TYPE; --VARCHAR2(50)
v_mantel_nr cnt_contract.cnt_contract_nummer_intern%TYPE; --VARCHAR2(30) |-> cnt_contract.cnt_contract_mantel_key
v_mantel_nr_versie cnt_contract.cnt_contract_versie%TYPE; --VARCHAR2(10) |
v_omschrijving cnt_contract.cnt_contract_document%TYPE; --VARCHAR2(2048)
v_dienst prs_dienst.prs_dienst_omschrijving%TYPE; --VARCHAR2(60) --> cnt_contract.prs_dienst_key
v_afdeling prs_afdeling.prs_afdeling_naam%TYPE; --VARCHAR2(15) --> cnt_contract.prs_afdeling_key_eig
v_perslid_eig prs_perslid.prs_perslid_email%TYPE; --VARCHAR2(200) --> cnt_contract.prs_perslid_key_eig
v_perslid_beh prs_perslid.prs_perslid_email%TYPE; --VARCHAR2(200) --> cnt_contract.prs_perslid_key_beh
v_opmerking cnt_contract.cnt_contract_opmerking%TYPE; --VARCHAR2(4000)
v_ingangsdatum cnt_contract.cnt_contract_looptijd_van%TYPE; --DATE
v_rappeldatum cnt_contract.cnt_contract_aanmaak%TYPE; --DATE --> cnt_contact.cnt_contract_rappeltermijn
v_opzegdatum cnt_contract.cnt_contract_aanmaak%TYPE; --DATE --> cnt_contract.cnt_contract_opzegtermijn
v_einddatum cnt_contract.cnt_contract_looptijd_tot%TYPE; --DATE
v_srtcontact VARCHAR2 (1); --P of B
v_bedrijfnaam prs_perslid.prs_perslid_email%TYPE; --VARCHAR (200) --> cnt_contract.cnt_prs_bedrijf_key
v_contactnaam prs_contactpersoon.prs_contactpersoon_email%TYPE; --VARCHAR2(200) --> cnt_contract.prs_contactpersoon_key
v_kpn_code prs_kostenplaats.prs_kostenplaats_nr%TYPE; --VARCHAR2(30) --> cnt_contract.prs_kostenplaats_key
v_kostensoort_code prs_kostensoort.prs_kostensoort_oms%TYPE; --VARCHAR2(60) --> cnt_contract.prs_kostensoort_key
v_bedrag cnt_contract.cnt_contract_kosten%TYPE; --NUMBER(11,2)
v_bedrag_termijn cnt_contract.cnt_contract_termijnkosten%TYPE; --NUMBER(11,2)
v_uurtarief cnt_contract.cnt_contract_uurloon%TYPE; --NUMBER(6,2)
v_korting cnt_contract.cnt_contract_korting%TYPE; --NUMBER(5,2)
v_locatiecode alg_locatie.alg_locatie_code%TYPE; --VARCHAR2(10)
v_terreincode alg_terreinsector.alg_terreinsector_code%TYPE; --VARCHAR2(12)
v_gebouwcode alg_gebouw.alg_gebouw_code%TYPE; --VARCHAR2(12)
v_verdiepingcode alg_verdieping.alg_verdieping_volgnr%TYPE; --NUMBER(3)
v_ruimtecode alg_ruimte.alg_ruimte_nr%TYPE; --VARCHAR2(20)
v_verlengen cnt_contract.cnt_contract_verlenging%TYPE; --NUMBER(1)
v_factuurboeken cnt_disc_params.cnt_disc_params_factuurboeken%TYPE; --NUMBER(1)
v_cnt_kenmerk_01 fac_imp_cnt.flex1%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_02 fac_imp_cnt.flex2%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_03 fac_imp_cnt.flex3%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_04 fac_imp_cnt.flex4%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_05 fac_imp_cnt.flex5%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_06 fac_imp_cnt.flex6%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_07 fac_imp_cnt.flex7%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_08 fac_imp_cnt.flex8%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_09 fac_imp_cnt.flex9%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_10 fac_imp_cnt.flex10%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_11 fac_imp_cnt.flex11%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_12 fac_imp_cnt.flex12%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_13 fac_imp_cnt.flex13%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_14 fac_imp_cnt.flex14%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_15 fac_imp_cnt.flex15%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_16 fac_imp_cnt.flex16%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_17 fac_imp_cnt.flex17%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_18 fac_imp_cnt.flex18%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_19 fac_imp_cnt.flex19%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_20 fac_imp_cnt.flex20%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_21 fac_imp_cnt.flex21%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_22 fac_imp_cnt.flex22%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_23 fac_imp_cnt.flex23%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_24 fac_imp_cnt.flex24%TYPE; --VARCHAR2(255);
v_cnt_kenmerk_25 fac_imp_cnt.flex25%TYPE; --VARCHAR2(255);
v_header VARCHAR2(500) := 'CONTRACTNR;VERSIE;EXTERNNR;CONTRACTSOORT;BESCHRIJVING;'
|| 'MANTELNR;MANTELNR_VERSIE;OMSCHRIJVING;DIENST;EIGENAAR_AFD;'
|| 'EIGENAAR_EMAIL;BEHEERDER_EMAIL;OPMERKING;INGANGSDATUM;RAPPELDATUM;'
|| 'OPZEGDATUM;EINDDATUM;SOORT_CONTACTPARTIJ;BEDRIJFSNAAM;CONTACTNAAM;'
|| 'KOSTENPLAATSCODE;KOSTENSOORTCODE;CONTRACTBEDRAG;TERMIJNBEDRAG;UURTARIEF;'
|| 'KORTING;LOCATIECODE;TERREINCODE;GEBOUWCODE;VERDIEPINGCODE;'
|| 'RUIMTECODE;VERLENGEN;FACTUURBOEKEN';
v_header_csv VARCHAR2(500);
v_flex_naam_01 fac_imp_cnt.flex1%TYPE;
v_flex_naam_02 fac_imp_cnt.flex2%TYPE;
v_flex_naam_03 fac_imp_cnt.flex3%TYPE;
v_flex_naam_04 fac_imp_cnt.flex4%TYPE;
v_flex_naam_05 fac_imp_cnt.flex5%TYPE;
v_flex_naam_06 fac_imp_cnt.flex6%TYPE;
v_flex_naam_07 fac_imp_cnt.flex7%TYPE;
v_flex_naam_08 fac_imp_cnt.flex8%TYPE;
v_flex_naam_09 fac_imp_cnt.flex9%TYPE;
v_flex_naam_10 fac_imp_cnt.flex10%TYPE;
v_flex_naam_11 fac_imp_cnt.flex11%TYPE;
v_flex_naam_12 fac_imp_cnt.flex12%TYPE;
v_flex_naam_13 fac_imp_cnt.flex13%TYPE;
v_flex_naam_14 fac_imp_cnt.flex14%TYPE;
v_flex_naam_15 fac_imp_cnt.flex15%TYPE;
v_flex_naam_16 fac_imp_cnt.flex16%TYPE;
v_flex_naam_17 fac_imp_cnt.flex17%TYPE;
v_flex_naam_18 fac_imp_cnt.flex18%TYPE;
v_flex_naam_19 fac_imp_cnt.flex19%TYPE;
v_flex_naam_20 fac_imp_cnt.flex20%TYPE;
v_flex_naam_21 fac_imp_cnt.flex21%TYPE;
v_flex_naam_22 fac_imp_cnt.flex22%TYPE;
v_flex_naam_23 fac_imp_cnt.flex23%TYPE;
v_flex_naam_24 fac_imp_cnt.flex24%TYPE;
v_flex_naam_25 fac_imp_cnt.flex25%TYPE;
-- Controleer tijdens import-fase alleen op het bestaan van een kenmerk met de meegegeven omschrijving of kenmerk key.
-- De omschrijving (header van kolom) kan de omschrijving zijn van het kenmerksoort of het kenmerk.
-- De omschrijving van het kenmerksoort kan namelijk overruled worden door de omschrijving van het kenmerk.
-- Daarnaast kan hetzelfde kenmerk vaker voorkomen voor verschillende groepen.
-- Of het kenmerksoort/kenmerk wel is gedefinieerd voor de betreffende
-- object-discipline/groep/soort, volgt pas tijdens de update-fase)!
--
-- p_kw is bijvoorbeeld 'Looptijd Maximaal', 'Looptijd Maximaal|3', 1049 of 1049|3 waarbij de tweede en laatste in groep 3 zitten
-- het resultaat is NULL (als niet gevonden) of Looptijd Maximaal|3 of 1049|3 voor kenmer_key 1049 in groep 3
-- Als geen groep is meegegeven dan wordt 'Looptijd Maximaal|0' opgeleverd (de default groep)
FUNCTION bepaal_kenmerk (p_kw IN VARCHAR2)
RETURN VARCHAR
IS
v_kenmerk_key NUMBER;
v_kenmerk_groep NUMBER;
v_kw VARCHAR(250);
BEGIN
v_kenmerk_groep := 0;
v_kw := p_kw;
IF INSTR (v_kw, '|') > 1
THEN
v_kenmerk_groep := SUBSTR (v_kw, INSTR (v_kw, '|') + 1);
v_kw := SUBSTR (v_kw, 1, INSTR (v_kw, '|') - 1);
END IF;
IF fac.safe_to_number(v_kw) IS NULL
THEN -- kenmerkwaarde is alfanumeriek (dus omschrijving)!
SELECT MIN(k.cnt_kenmerk_key)
INTO v_kenmerk_key
FROM cnt_kenmerk k,
cnt_srtkenmerk sk
WHERE k.cnt_srtkenmerk_key = sk.cnt_srtkenmerk_key
AND k.cnt_kenmerk_groep = v_kenmerk_groep
AND COALESCE(UPPER(k.cnt_kenmerk_omschrijving), sk.cnt_srtkenmerk_upper) = UPPER(v_kw)
AND sk.cnt_srtkenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'r', 'S', 'X', 'V')
AND k.cnt_kenmerk_verwijder IS NULL
AND sk.cnt_srtkenmerk_verwijder IS NULL;
ELSE -- kenmerkwaarde is numeriek (dus key)!
SELECT k.cnt_kenmerk_key
INTO v_kenmerk_key
FROM cnt_kenmerk k,
cnt_srtkenmerk sk
WHERE k.cnt_srtkenmerk_key = sk.cnt_srtkenmerk_key
AND k.cnt_kenmerk_groep = v_kenmerk_groep
AND k.cnt_kenmerk_key = fac.safe_to_number(v_kw)
AND sk.cnt_srtkenmerk_kenmerktype IN ('C', 'D', 'N', 'R', 'r', 'S', 'X', 'V')
AND k.cnt_kenmerk_verwijder IS NULL
AND sk.cnt_srtkenmerk_verwijder IS NULL;
END IF;
IF v_kenmerk_key IS NULL
THEN
RETURN NULL;
ELSE
-- Er is een kenmerksoort of kenmerk aanwezig met de omschrijving/kenmerk_key (v_kw)
RETURN v_kw || '|' || TO_CHAR(v_kenmerk_groep);
END IF;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
IF p_kw IS NULL OR UPPER (p_kw) LIKE 'KENMERK%'
THEN
RETURN NULL;
ELSE
fac.imp_writelog ( p_import_key, 'W'
, 'Fout bij bepalen kenmerk [' || p_kw || ']'
, 'Bestaat niet of type ongeldig');
COMMIT;
RETURN NULL;
END IF;
END; -- bepaal_kenmerk
FUNCTION kenmerk_waarde( p_import_key IN NUMBER
, p_import_index IN NUMBER
, p_aanduiding IN VARCHAR2
, p_flex_naam IN VARCHAR2
, p_flex_waarde IN VARCHAR2)
RETURN VARCHAR
IS
v_flexval VARCHAR2(200);
v_flx VARCHAR2(255);
BEGIN
v_flx := bepaal_kenmerk(p_flex_naam);
IF v_flx IS NULL
THEN
v_flexval := SUBSTR(TRIM(p_flex_waarde), 1, 255);
ELSE
v_flexval := SUBSTR(TRIM(p_flex_waarde), 1, 200);
IF LENGTH(TRIM(p_flex_waarde)) > 200
THEN
fac.imp_writelog( p_import_key, 'W'
, p_aanduiding || p_flex_naam || ' - Aangepast ivm lengte groter dan 255'
, p_import_index
);
END IF;
v_flexval := TO_CHAR(v_flx) || '=' || v_flexval;
END IF;
RETURN v_flexval;
END; -- kenmerk_waarde
BEGIN
v_errormsg := 'Fout inlezen header ';
SELECT REPLACE(UPPER(fac_imp_csv_col01 ||';'|| fac_imp_csv_col02 ||';'|| fac_imp_csv_col03 ||';'|| fac_imp_csv_col04 ||';'|| fac_imp_csv_col05 ||';'||
fac_imp_csv_col06 ||';'|| fac_imp_csv_col07 ||';'|| fac_imp_csv_col08 ||';'|| fac_imp_csv_col09 ||';'|| fac_imp_csv_col10 ||';'||
fac_imp_csv_col11 ||';'|| fac_imp_csv_col12 ||';'|| fac_imp_csv_col13 ||';'|| fac_imp_csv_col14 ||';'|| fac_imp_csv_col15 ||';'||
fac_imp_csv_col16 ||';'|| fac_imp_csv_col17 ||';'|| fac_imp_csv_col18 ||';'|| fac_imp_csv_col19 ||';'|| fac_imp_csv_col20 ||';'||
fac_imp_csv_col21 ||';'|| fac_imp_csv_col22 ||';'|| fac_imp_csv_col23 ||';'|| fac_imp_csv_col24 ||';'|| fac_imp_csv_col25 ||';'||
fac_imp_csv_col26 ||';'|| fac_imp_csv_col27 ||';'|| fac_imp_csv_col28 ||';'|| fac_imp_csv_col29 ||';'|| fac_imp_csv_col30 ||';'||
fac_imp_csv_col31 ||';'|| fac_imp_csv_col32 ||';'|| fac_imp_csv_col33
), ' ', '')
, fac_imp_csv_col34, fac_imp_csv_col35, fac_imp_csv_col36, fac_imp_csv_col37, fac_imp_csv_col38
, fac_imp_csv_col39, fac_imp_csv_col40, fac_imp_csv_col41, fac_imp_csv_col42, fac_imp_csv_col43
, fac_imp_csv_col44, fac_imp_csv_col45, fac_imp_csv_col46, fac_imp_csv_col47, fac_imp_csv_col48
, fac_imp_csv_col49, fac_imp_csv_col50, fac_imp_csv_col51, fac_imp_csv_col52, fac_imp_csv_col53
, fac_imp_csv_col54, fac_imp_csv_col55, fac_imp_csv_col56, fac_imp_csv_col57, fac_imp_csv_col58
INTO v_header_csv -- standaard header
, v_flex_naam_01, v_flex_naam_02, v_flex_naam_03, v_flex_naam_04, v_flex_naam_05 -- kenmerk kolom namen
, v_flex_naam_06, v_flex_naam_07, v_flex_naam_08, v_flex_naam_09, v_flex_naam_10
, v_flex_naam_11, v_flex_naam_12, v_flex_naam_13, v_flex_naam_14, v_flex_naam_15
, v_flex_naam_16, v_flex_naam_17, v_flex_naam_18, v_flex_naam_19, v_flex_naam_20
, v_flex_naam_21, v_flex_naam_22, v_flex_naam_23, v_flex_naam_24, v_flex_naam_25
FROM fac_imp_csv
WHERE fac_imp_csv_index = 1
AND fac_import_key = p_import_key;
-- Eerst opruiming
DELETE FROM fac_imp_cnt;
IF (v_header LIKE v_header_csv || '%')
THEN
v_header_is_valid := 1;
FOR rec IN c1
LOOP
BEGIN
v_count_rec := v_count_rec + 1;
v_aanduiding := '[' || rec.contractnr || '|' || rec.versie || '] ';
-- CSV-kolom A: Controleer het contractnummer op lengte
v_nummer_intern := SUBSTR(TRIM(rec.contractnr), 1, 30);
IF LENGTH(TRIM(rec.contractnr)) > 30
THEN
fac.imp_writelog( p_import_key, 'W', v_aanduiding || 'ContractRr - Aangepast ivm lengte groter dan 30'
, rec.fac_imp_csv_index || ' - ' || rec.contractnr || ' wordt: ' || v_nummer_intern
);
END IF;
-- CSV-kolom B: Controleer de versie op lengte
v_versie := SUBSTR(TRIM(rec.versie), 1, 10);
IF LENGTH(TRIM(rec.versie)) > 10
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Versie - Aangepast ivm lengte groter dan 10'
, rec.fac_imp_csv_index || ' - ' || rec.versie || ' wordt: ' || v_versie
);
END IF;
-- CSV-kolom C: Controleer het extern contractnummer op lengte
v_nummer_extern := SUBSTR(TRIM(rec.externnr), 1, 30);
IF LENGTH(TRIM(rec.externnr)) > 30
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'ExternNr - Aangepast ivm lengte groter dan 30'
, rec.fac_imp_csv_index || ' - ' || rec.externnr || ' wordt: ' || v_nummer_extern
);
END IF;
-- CSV-kolom D: Controleer de lengte van het contractsoort en of het ingevuld is
v_cnt_soort := SUBSTR(TRIM(rec.contractsoort), 1, 60);
BEGIN
SELECT ins_discipline_key
INTO v_ref_key
FROM cnt_discipline
WHERE ins_discipline_omschrijving = v_cnt_soort
AND ins_discipline_verwijder IS NULL;
EXCEPTION
WHEN NO_DATA_FOUND THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Contractsoort - Is onbekend'
, rec.fac_imp_csv_index || ' - ' || v_cnt_soort || ', Regel wordt overgeslagen'
);
v_ongeldig := 1;
END;
-- CSV-kolom E: Controleer de lengte van de contract beschrijving
v_beschrijving := SUBSTR(TRIM(rec.beschrijving),1,50);
IF LENGTH(TRIM(rec.beschrijving)) > 50
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Beschrijving - Aangepast ivm lengte groter dan 50'
, rec.fac_imp_csv_index || ' - ' || rec.beschrijving || ' wordt: ' || v_beschrijving
);
ELSE
IF v_beschrijving IS NULL
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Beschrijving - Is niet ingevuld'
, rec.fac_imp_csv_index || ' - Regel wordt overgeslagen'
);
v_ongeldig := 1;
END IF;
END IF;
-- CSV-kolom F: Controleer de lengte van het mantelcontract nummer
v_mantel_nr := SUBSTR(TRIM(rec.mantelnr), 1, 30);
IF LENGTH(TRIM(rec.mantelnr)) > 30
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'MantelNr - Aangepast ivm lengte groter dan 30'
, rec.fac_imp_csv_index || ' - ' || rec.mantelnr || ' wordt: ' || v_mantel_nr
);
END IF;
-- CSV-kolom G: Controleer de lengte van het mantelcontract versie
v_mantel_nr_versie := SUBSTR(TRIM(v_mantel_nr_versie), 1, 10);
IF LENGTH(TRIM(rec.mantelnr_versie)) > 10
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'MantelNr_versie - Aangepast ivm lengte groter dan 10'
, rec.fac_imp_csv_index || ' - ' || rec.mantelnr_versie || ' wordt: ' || v_mantel_nr_versie
);
END IF;
-- CSV-kolom H: Controleer de lengte van contract omschrijving
v_omschrijving := SUBSTR(TRIM(rec.omschrijving), 1, 1000);
IF LENGTH(TRIM(rec.omschrijving)) > 1000
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Omschrijving - Lengte (' || TO_CHAR(LENGTH(TRIM(rec.omschrijving))) || ') aangepast tot 1000'
, rec.fac_imp_csv_index
);
END IF;
-- CSV-kolom I: Controleer of er een geldige dienst is ingevuld (geen dienst is ook goed)
v_dienst := SUBSTR(TRIM(rec.dienst), 1, 60);
IF v_dienst IS NOT NULL
THEN
BEGIN
SELECT prs_dienst_key
INTO v_ref_key
FROM prs_dienst
WHERE prs_dienst_omschrijving = v_dienst;
EXCEPTION
WHEN NO_DATA_FOUND THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Dienst - Is onbekend'
, rec.fac_imp_csv_index || ' - ' || v_dienst || ', Regel wordt overgeslagen'
);
v_ongeldig := 1;
END;
END IF;
-- CSV-kolom J: Controleer of de afdelingscode bestaat
v_afdeling := SUBSTR(TRIM(rec.eigenaar_afd), 1, 15);
BEGIN
SELECT prs_afdeling_key
INTO v_ref_key
FROM prs_afdeling
WHERE prs_afdeling_upper = UPPER(v_afdeling)
AND prs_afdeling_verwijder IS NULL;
EXCEPTION
WHEN NO_DATA_FOUND THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Eigenaar_afd - Is onbekend'
, rec.fac_imp_csv_index || ' - ' || v_afdeling || ', Regel wordt overgeslagen'
);
v_ongeldig := 1;
END;
-- CSV-kolom K: Controleer of er een geldig eigenaar mailadres is ingevuld (mag leeg zijn)
v_perslid_eig := SUBSTR(TRIM(rec.eigenaar_email), 1, 200);
IF v_perslid_eig IS NOT NULL
THEN
BEGIN
SELECT prs_perslid_key
INTO v_ref_key
FROM prs_perslid
WHERE prs_perslid_email = v_perslid_eig;
EXCEPTION
WHEN NO_DATA_FOUND THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Eigenaar_email - Is onbekend'
, rec.fac_imp_csv_index || ' - ' || v_perslid_eig || ', Regel wordt overgeslagen'
);
v_ongeldig := 1;
END;
END IF;
-- CSV-kolom L: Controleer of er een geldig beheerder mailadres is ingevuld (mag niet leeg zijn)
v_perslid_beh := SUBSTR(TRIM(rec.beheerder_email), 1, 200);
IF v_perslid_beh IS NULL
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Beheerder_email - Is niet ingevuld'
, rec.fac_imp_csv_index || ', Regel wordt overgeslagen'
);
v_ongeldig := 1;
ELSE
BEGIN
SELECT prs_perslid_key
INTO v_ref_key
FROM prs_perslid
WHERE prs_perslid_email = v_perslid_beh;
EXCEPTION
WHEN NO_DATA_FOUND THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Beheerder_email - Is onbekend'
, rec.fac_imp_csv_index || ' - ' || v_perslid_beh || ', Regel wordt overgeslagen'
);
v_ongeldig := 1;
END;
END IF;
-- CSV-kolom M: Controleeer de lengte van contract opmerking
v_opmerking := SUBSTR(TRIM(rec.opmerking), 1, 1000);
IF LENGTH(TRIM(rec.opmerking)) > 1000
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Opmerking - Lengte (' || TO_CHAR(LENGTH(TRIM(rec.opmerking))) || ') aangepast tot 1000'
, rec.fac_imp_csv_index
);
END IF;
-- CSV-kolom N: Controleer ingangsdatum op geldig format en aanwezigheid
v_ingangsdatum := fac.safe_to_date(TRIM(rec.ingangsdatum), 'dd-mm-yyyy');
IF v_ingangsdatum IS NULL
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Ingangsdatum - Is niet aanwezig of ongeldig'
, rec.fac_imp_csv_index || ' - ' || rec.ingangsdatum || ', Regel wordt overgeslagen'
);
v_ongeldig := 1;
END IF;
-- CSV-kolom O: Controleer rappeldatum op geldig format
v_rappeldatum := fac.safe_to_date(TRIM(rec.rappeldatum), 'dd-mm-yyyy');
IF v_rappeldatum IS NULL AND rec.rappeldatum IS NOT NULL
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Rappeldatum - Is ongeldig'
, rec.fac_imp_csv_index || ' - ' || rec.rappeldatum || ', Regel wordt overgeslagen'
);
v_ongeldig := 1;
END IF;
-- CSV-kolom P: Controleer opzegdatum op geldig format
v_opzegdatum := fac.safe_to_date(TRIM(rec.opzegdatum), 'dd-mm-yyyy');
IF v_opzegdatum IS NULL AND rec.opzegdatum IS NOT NULL
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Opzegdatum - Is ongeldig'
, rec.fac_imp_csv_index || ' - ' || rec.opzegdatum || ', Regel wordt overgeslagen'
);
v_ongeldig := 1;
END IF;
-- CSV-kolom Q: Controleer einddatum op geldig format en aanwezigheid
v_einddatum := fac.safe_to_date(TRIM(rec.einddatum), 'dd-mm-yyyy');
IF v_einddatum IS NULL
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Einddatum - Is niet aanwezig of ongeldig'
, rec.fac_imp_csv_index || ' - ' || rec.einddatum || ', Regel wordt overgeslagen'
);
v_ongeldig := 1;
END IF;
-- CSV-kolom R: Controle soort contractpartij
v_srtcontact := SUBSTR(TRIM(rec.soort_contactpartij), 1, 1);
IF v_srtcontact IS NULL OR v_srtcontact NOT IN ('B','P')
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Soort_contactpartij - Is niet aanwezig of ongeldig'
, rec.fac_imp_csv_index || ' - ' || rec.soort_contactpartij || ', Regel wordt overgeslagen'
);
v_ongeldig := 1;
END IF;
-- CSV-kolom S: Controle lengte bedrijfsnaam
IF v_srtcontact = 'B'
THEN
v_bedrijfnaam := SUBSTR(TRIM(rec.bedrijfnaam), 1, 60); -- naam van bedrijf: prs_bedrijf.prs_bedrijf_naam
IF LENGTH(TRIM(rec.bedrijfnaam)) > 60
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Bedrijfnaam - Aangepast ivm lengte groter dan 60'
, rec.fac_imp_csv_index || ' - ' || rec.bedrijfnaam || ' wordt: ' || v_bedrijfnaam
);
END IF;
ELSE
v_bedrijfnaam := SUBSTR(TRIM(rec.bedrijfnaam), 1, 200); -- emailadres van persoon: prs_perslid.prs_perslid_email
IF LENGTH(TRIM(rec.bedrijfnaam)) > 200
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Bedrijfnaam - Aangepast ivm lengte groter dan 200'
, rec.fac_imp_csv_index || ' - ' || rec.bedrijfnaam
);
END IF;
END IF;
IF v_bedrijfnaam IS NULL
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Bedrijfnaam - Is niet aanwezig'
, rec.fac_imp_csv_index
);
v_ongeldig := 1;
END IF;
-- CSV-kolom T: Controle contact mailadres
v_contactnaam := SUBSTR(TRIM(rec.contactnaam), 1, 200);
IF LENGTH(TRIM(rec.contactnaam)) > 200
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Contactnaam - Aangepast ivm lengte groter dan 200'
, rec.fac_imp_csv_index
);
END IF;
-- CSV-kolom U: Controle Kostenplaatscode
v_kpn_code := SUBSTR(TRIM(rec.kostenplaatscode), 1, 30);
BEGIN
SELECT prs_kostenplaats_key
INTO v_ref_key
FROM prs_kostenplaats
WHERE prs_kostenplaats_nr = v_kpn_code
AND prs_kostenplaats_verwijder IS NULL;
EXCEPTION
WHEN NO_DATA_FOUND THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'KostenplaatsCode - Is onbekend of niet ingevuld'
, rec.fac_imp_csv_index || ' - ' || v_kpn_code || ', Regel wordt overgeslagen'
);
v_ongeldig := 1;
END;
-- CSV-kolom V: Controle Kostensoortcode
v_kostensoort_code := SUBSTR(TRIM(rec.kostensoortcode), 1, 60);
IF LENGTH(TRIM(rec.kostensoortcode)) IS NOT NULL
THEN
BEGIN
SELECT prs_kostensoort_key
INTO v_ref_key
FROM prs_kostensoort
WHERE prs_kostensoort_upper = UPPER(v_kostensoort_code)
AND prs_kostensoort_verwijder IS NULL;
EXCEPTION
WHEN NO_DATA_FOUND THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'KostensoortCode - Is onbekend of niet ingevuld'
, rec.fac_imp_csv_index || ' - ' || v_kostensoort_code || ', Regel wordt overgeslagen'
);
v_ongeldig := 1;
END;
END IF;
-- CSV-kolom W: Controle of contractbedrag geldig is
v_bedrag := fac.safe_to_number(rec.contractbedrag);
IF v_bedrag IS NULL AND rec.contractbedrag IS NOT NULL
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Contractbedrag - Wordt genegeerd'
, rec.fac_imp_csv_index || ' - ' || rec.contractbedrag
);
END IF;
-- CSV-kolom X: Controle of termijnbedrag geldig is
v_bedrag_termijn := fac.safe_to_number(rec.termijnbedrag);
IF v_bedrag_termijn IS NULL AND rec.termijnbedrag IS NOT NULL
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Termijnbedrag - Wordt genegeerd'
, rec.fac_imp_csv_index || ' - ' || rec.termijnbedrag
);
END IF;
-- CSV-kolom Y: Controle of uurtarief geldig is
v_uurtarief := fac.safe_to_number(rec.uurtarief);
IF v_uurtarief IS NULL AND rec.uurtarief IS NOT NULL
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Uurtrief - Wordt genegeerd'
, rec.fac_imp_csv_index || ' - ' || rec.uurtarief
);
END IF;
-- CSV-kolom Z: Controle of korting geldig is
v_korting := fac.safe_to_number(rec.korting);
IF v_korting IS NULL AND rec.korting IS NOT NULL
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Korting - Wordt genegeerd'
, rec.fac_imp_csv_index || ' - ' || rec.korting
);
END IF;
-- CSV-kolom AA: Controle Locatiecode
v_locatiecode := SUBSTR(TRIM(rec.locatiecode), 1, 10);
IF LENGTH(TRIM(rec.locatiecode)) > 10
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Locatiecode - Aangepast ivm lengte groter dan 10 voor locatie'
, rec.fac_imp_csv_index || ' - ' || rec.locatiecode || ' wordt: ' || v_locatiecode
);
END IF;
-- CSV-kolom AB: Controle Terreincode
v_terreincode := SUBSTR(TRIM(rec.terreincode), 1, 12);
IF LENGTH(TRIM(rec.terreincode)) > 12
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Terreincode - Aangepast ivm lengte groter dan 12 voor terrein'
, rec.fac_imp_csv_index || ' - ' || rec.terreincode || ' wordt: ' || v_terreincode
);
END IF;
-- CSV-kolom AC: Controle Gebouwcode
v_gebouwcode := SUBSTR(TRIM(rec.gebouwcode), 1, 12);
IF LENGTH(TRIM(rec.gebouwcode)) > 12
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Gebouwcode - Aangepast ivm lengte groter dan 12 voor gebouw'
, rec.fac_imp_csv_index || ' - ' || rec.gebouwcode || ' wordt: ' || v_gebouwcode
);
END IF;
-- CSV-kolom AD: Controle Verdiepingcode
BEGIN
v_verdiepingcode := fac.safe_to_number(rec.verdiepingcode);
EXCEPTION
WHEN OTHERS THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Verdiepingcode - Aangepast ivm lengte groter dan 3 voor verdieping'
, rec.fac_imp_csv_index || ' - ' || rec.verdiepingcode || ' wordt: ' || v_verdiepingcode
);
END;
-- CSV-kolom AE: Controle Ruimtecode
v_ruimtecode := SUBSTR(TRIM(rec.ruimtecode), 1, 20);
IF LENGTH(TRIM(rec.ruimtecode)) > 20
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Ruimtecode - Aangepast ivm lengte groter dan 20 voor ruimte'
, rec.fac_imp_csv_index || ' - ' || rec.ruimtecode || ' wordt: ' || v_ruimtecode
);
END IF;
-- CSV-kolom AF: Controle op geldige waarde voor verlengen
v_verlengen := fac.safe_to_number(rec.verlengen);
IF v_verlengen NOT IN (0,1,2,3,5)
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Verlengen - Ongeldige waarde'
, rec.fac_imp_csv_index || ' - ' || rec.verlengen || ', Regel wordt overgeslagen'
);
v_ongeldig := 1;
END IF;
-- CSV-kolom AG: Controle op geldige waarde voor factuurboeken
v_factuurboeken := fac.safe_to_number(rec.factuurboeken);
IF v_factuurboeken NOT IN (0,1)
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || 'Factuurboeken - Ongeldige waarde'
, rec.fac_imp_csv_index || ' - ' || rec.factuurboeken || ', Regel wordt overgeslagen'
);
v_ongeldig := 1;
END IF;
-- De flexkenmerkwaarden
v_cnt_kenmerk_01 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_01, rec.flex_01);
v_cnt_kenmerk_02 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_02, rec.flex_02);
v_cnt_kenmerk_03 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_03, rec.flex_03);
v_cnt_kenmerk_04 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_04, rec.flex_04);
v_cnt_kenmerk_05 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_05, rec.flex_05);
v_cnt_kenmerk_06 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_06, rec.flex_06);
v_cnt_kenmerk_07 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_07, rec.flex_07);
v_cnt_kenmerk_08 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_08, rec.flex_08);
v_cnt_kenmerk_09 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_09, rec.flex_09);
v_cnt_kenmerk_10 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_10, rec.flex_10);
v_cnt_kenmerk_11 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_11, rec.flex_11);
v_cnt_kenmerk_12 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_12, rec.flex_12);
v_cnt_kenmerk_13 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_13, rec.flex_13);
v_cnt_kenmerk_14 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_14, rec.flex_14);
v_cnt_kenmerk_15 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_15, rec.flex_15);
v_cnt_kenmerk_16 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_16, rec.flex_16);
v_cnt_kenmerk_17 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_17, rec.flex_17);
v_cnt_kenmerk_18 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_18, rec.flex_18);
v_cnt_kenmerk_19 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_19, rec.flex_19);
v_cnt_kenmerk_20 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_20, rec.flex_20);
v_cnt_kenmerk_21 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_21, rec.flex_21);
v_cnt_kenmerk_22 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_22, rec.flex_22);
v_cnt_kenmerk_23 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_23, rec.flex_23);
v_cnt_kenmerk_24 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_24, rec.flex_24);
v_cnt_kenmerk_25 := kenmerk_waarde(p_import_key, rec.fac_imp_csv_index, v_aanduiding, v_flex_naam_25, rec.flex_25);
-- Insert geformatteerde import record
IF (v_ongeldig = 0)
THEN
BEGIN
v_errormsg := 'Fout bij wegschrijven importregel';
-- Als uit kenmerkheader een geldige kenmerksoort-key volgt,
-- dan is flex<n> gevuld met <key>=<waarde>; zoniet, dan is
-- flex<n> gevuld met <waarde>!
-- NB. Een NULL-waarde resulteert NIET in het wissen van een
-- kenmerkveld (bijwerken kan wel, maar wissen dus niet)!
INSERT INTO fac_imp_cnt
( nummer_intern
, versie
, nummer_extern
, cnt_soort
, beschrijving
, mantel_nr
, mantel_nr_versie
, omschrijving
, dienst
, afdeling
, perslid_eig
, perslid_beh
, opmerking
, datum_ingang
, datum_rappel
, datum_opzeg
, datum_eind
, soortcontact
, bedrijf_naam
, contact_naam
, kpn_code
, kostensoort
, bedrag
, bedrag_termijn
, uurtarief
, korting
, locatiecode
, terreincode
, gebouwcode
, verdiepingcode
, ruimtecode
, verlengen
, factuurboeken
, flex1, flex2, flex3, flex4, flex5
, flex6, flex7, flex8, flex9, flex10
, flex11, flex12, flex13, flex14, flex15
, flex16, flex17, flex18, flex19, flex20
, flex21, flex22, flex23, flex24, flex25
)
VALUES ( v_nummer_intern
, v_versie
, v_nummer_extern
, v_cnt_soort
, v_beschrijving
, v_mantel_nr
, v_mantel_nr_versie
, v_omschrijving
, v_dienst
, v_afdeling
, v_perslid_eig
, v_perslid_beh
, v_opmerking
, v_ingangsdatum
, v_rappeldatum
, v_opzegdatum
, v_einddatum
, v_srtcontact
, v_bedrijfnaam
, v_contactnaam
, v_kpn_code
, v_kostensoort_code
, v_bedrag
, v_bedrag_termijn
, v_uurtarief
, v_korting
, v_locatiecode
, v_terreincode
, v_gebouwcode
, v_verdiepingcode
, v_ruimtecode
, v_verlengen
, v_factuurboeken
, v_cnt_kenmerk_01, v_cnt_kenmerk_02, v_cnt_kenmerk_03, v_cnt_kenmerk_04, v_cnt_kenmerk_05
, v_cnt_kenmerk_06, v_cnt_kenmerk_07, v_cnt_kenmerk_08, v_cnt_kenmerk_09, v_cnt_kenmerk_10
, v_cnt_kenmerk_11, v_cnt_kenmerk_12, v_cnt_kenmerk_13, v_cnt_kenmerk_14, v_cnt_kenmerk_15
, v_cnt_kenmerk_16, v_cnt_kenmerk_17, v_cnt_kenmerk_18, v_cnt_kenmerk_19, v_cnt_kenmerk_20
, v_cnt_kenmerk_21, v_cnt_kenmerk_22, v_cnt_kenmerk_23, v_cnt_kenmerk_24, v_cnt_kenmerk_25
);
COMMIT;
v_count_imp := v_count_imp + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog ( p_import_key, 'W'
, v_aanduiding || v_errormsg
, '');
COMMIT;
END;
END IF;
END;
END LOOP;
END IF;
IF (v_header_is_valid = 0)
THEN
fac.imp_writelog ( p_import_key, 'E'
, 'Ongeldig importbestand'
, 'Geen header of header niet volgens specificatie!');
ELSE
fac.imp_writelog ( p_import_key, 'S'
, 'Contracten/#ingelezen importregels: ' || TO_CHAR (v_count_rec)
, '');
fac.imp_writelog ( p_import_key, 'S'
, 'Contracten/#ongeldige niet ingelezen importregels: ' || TO_CHAR (v_count_rec - v_count_imp)
, '');
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog ( p_import_key, 'E'
, v_aanduiding || v_errormsg
, 'Inleesproces contracten afgebroken!');
END fac_import_cnt;
/
CREATE OR REPLACE PROCEDURE fac_update_cnt (p_import_key IN NUMBER)
AS
-- Cursor zoekt direct alle afgeleide gegevens.
-- Een leeg veld betekent dus: <20>f deze regel overslaan, <20>f nieuwe data toevoegen.
CURSOR c1
IS
WITH imp_cnt AS
( SELECT i.nummer_intern
, i.versie
, i.nummer_extern
, i.cnt_soort
, i.beschrijving
, i.mantel_nr
, i.mantel_nr_versie
, i.omschrijving
, i.dienst
, i.afdeling
, i.perslid_eig
, i.perslid_beh
, i.opmerking
, i.datum_ingang
, i.datum_rappel
, i.datum_opzeg
, i.datum_eind
, i.soortcontact
, i.bedrijf_naam
, i.contact_naam
, i.kpn_code
, i.kostensoort
, i.bedrag
, i.bedrag_termijn
, i.uurtarief
, i.korting
, i.locatiecode
, i.terreincode
, i.gebouwcode
, i.verdiepingcode
, i.ruimtecode
, i.verlengen
, i.factuurboeken
, disc.ins_discipline_key
, mntl.cnt_contract_key mantel_key
, d.prs_dienst_key
, afd.prs_afdeling_key
, eig.prs_afdeling_key prs_afdeling_key_eig
, eig.prs_perslid_key prs_perslid_key_eig
, beh.prs_perslid_key prs_perslid_key_beh
, CASE WHEN i.soortcontact = 'P'
THEN (SELECT prs_perslid_key
FROM prs_perslid
WHERE LOWER(TRIM(prs_perslid_email)) = LOWER(i.bedrijf_naam)
)
ELSE (SELECT MIN (prs_bedrijf_key)
FROM prs_bedrijf
WHERE (1=1) --prs_bedrijf_contract IS NOT NULL
AND ( TRIM(prs_bedrijf_naam_upper) = UPPER (i.bedrijf_naam)
OR UPPER(TRIM(prs_leverancier_nr)) = UPPER (i.bedrijf_naam)
)
)
END prs_bedrijf_key
, kpn.prs_kostenplaats_key
, ksr.prs_kostensoort_key
, i.flex1, i.flex2, i.flex3, i.flex4, i.flex5
, i.flex6, i.flex7, i.flex8, i.flex9, i.flex10
, i.flex11, i.flex12, i.flex13, i.flex14, i.flex15
, i.flex16, i.flex17, i.flex18, i.flex19, i.flex20
, i.flex21, i.flex22, i.flex23, i.flex24, i.flex25
FROM fac_imp_cnt i
, (SELECT *
FROM cnt_discipline
WHERE ins_discipline_verwijder IS NULL
) disc
, (SELECT c.*
FROM cnt_v_aanwezigcontract c
, cnt_disc_params dp
WHERE c.ins_discipline_key = dp.cnt_ins_discipline_key
AND dp.cnt_srtcontract_type = 6
) mntl
, prs_dienst d
, (SELECT *
FROM prs_afdeling
WHERE prs_afdeling_verwijder IS NULL
) afd
, prs_v_aanwezigperslid eig
, prs_v_aanwezigperslid beh
, prs_v_aanwezigkostenplaats kpn
, prs_kostensoort ksr
WHERE UPPER(i.cnt_soort) = UPPER(TRIM(disc.ins_discipline_omschrijving(+)))
AND UPPER(i.mantel_nr) = UPPER(TRIM(mntl.cnt_contract_nummer_intern(+)))
AND UPPER(i.dienst) = UPPER(TRIM(d.prs_dienst_omschrijving(+)))
AND UPPER(i.afdeling) = TRIM(afd.prs_afdeling_upper(+))
AND UPPER(i.perslid_eig) = UPPER(TRIM(eig.prs_perslid_email(+)))
AND UPPER(i.perslid_beh) = UPPER(TRIM(beh.prs_perslid_email(+)))
AND UPPER(i.kpn_code) = TRIM(kpn.prs_kostenplaats_upper(+))
AND UPPER(i.kostensoort) = TRIM(ksr.prs_kostensoort_upper(+))
)
SELECT a.nummer_intern
, a.nummer_extern
, a.cnt_soort
, dp.cnt_srtcontract_type
, a.ins_discipline_key
, a.beschrijving
, a.mantel_nr
, a.mantel_nr_versie
, a.mantel_key
, a.omschrijving
, a.versie
, a.dienst
, a.prs_dienst_key
, a.afdeling
, a.prs_afdeling_key
, a.perslid_eig
, a.prs_perslid_key_eig
, a.prs_afdeling_key_eig
, a.perslid_beh
, a.prs_perslid_key_beh
, a.opmerking
, a.datum_ingang
, a.datum_eind
, a.datum_opzeg
, a.datum_rappel
, a.soortcontact
, a.bedrijf_naam
, a.prs_bedrijf_key
, a.contact_naam
, cp.prs_contactpersoon_key
, a.kpn_code
, a.prs_kostenplaats_key
, a.kostensoort
, a.prs_kostensoort_key
, a.bedrag
, a.bedrag_termijn
, a.uurtarief
, a.korting
, a.locatiecode
, a.terreincode
, a.gebouwcode
, a.verdiepingcode
, a.ruimtecode
, a.verlengen
, a.factuurboeken
, a.flex1 cnt_kenmerkwaarde1
, a.flex2 cnt_kenmerkwaarde2
, a.flex3 cnt_kenmerkwaarde3
, a.flex4 cnt_kenmerkwaarde4
, a.flex5 cnt_kenmerkwaarde5
, a.flex6 cnt_kenmerkwaarde6
, a.flex7 cnt_kenmerkwaarde7
, a.flex8 cnt_kenmerkwaarde8
, a.flex9 cnt_kenmerkwaarde9
, a.flex10 cnt_kenmerkwaarde10
, a.flex11 cnt_kenmerkwaarde11
, a.flex12 cnt_kenmerkwaarde12
, a.flex13 cnt_kenmerkwaarde13
, a.flex14 cnt_kenmerkwaarde14
, a.flex15 cnt_kenmerkwaarde15
, a.flex16 cnt_kenmerkwaarde16
, a.flex17 cnt_kenmerkwaarde17
, a.flex18 cnt_kenmerkwaarde18
, a.flex19 cnt_kenmerkwaarde19
, a.flex20 cnt_kenmerkwaarde20
, a.flex21 cnt_kenmerkwaarde21
, a.flex22 cnt_kenmerkwaarde22
, a.flex23 cnt_kenmerkwaarde23
, a.flex24 cnt_kenmerkwaarde24
, a.flex25 cnt_kenmerkwaarde25
FROM imp_cnt a
, cnt_disc_params dp
, prs_contactpersoon cp
WHERE a.ins_discipline_key = dp.cnt_ins_discipline_key
AND UPPER(a.contact_naam) = UPPER(TRIM(cp.prs_contactpersoon_email(+)))
AND a.prs_bedrijf_key = cp.prs_bedrijf_key(+);
-- Constanten
c_contract_type NUMBER := 5; -- Leverancier (met scope)
v_errormsg VARCHAR2(1000) := '-';
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2(200);
v_aanduiding VARCHAR2(200);
v_geldig NUMBER(1);
v_facilitor_key NUMBER;
v_perslid_key_eig NUMBER;
v_perslid_key_beh NUMBER;
v_typecontract_key NUMBER;
v_cnt_discipline_key NUMBER;
v_contactpersoon_key NUMBER;
v_cnt_status NUMBER;
v_termijn_type VARCHAR2(1);
v_termijn_aantal NUMBER;
v_termijn_key_opzeg NUMBER;
v_termijn_key_rappel NUMBER;
v_contract_key NUMBER;
v_count NUMBER;
v_count_tot NUMBER;
v_count_cntnew NUMBER;
v_count_cntupd NUMBER;
v_srtnoti_code VARCHAR2(7); -- ook ruimte voor '@' prefix
v_scope_code VARCHAR2(1);
v_scope_key NUMBER(10);
v_scope_err VARCHAR2(100);
-- SUBPROC
PROCEDURE bepaal_termijn( p_start IN DATE
, p_eind IN DATE
, p_termijn_type OUT VARCHAR2
, p_termijn_aantal OUT NUMBER
, p_afronden IN BOOLEAN
)
AS
v_type VARCHAR2(1) := 'W';
v_aantal NUMBER := 0;
v_zelfde_dag BOOLEAN;
v_zelfde_weekdag BOOLEAN;
v_zelfde_maand BOOLEAN;
min_jaar NUMBER := 3; -- Afronden op jaren als het aantal dagen groter is dan dit aantal jaren
min_maand NUMBER := 3; -- Afronden op maanden als het aantal dagen groter is dan dit aantal maanden.
min_week NUMBER := 4; -- Afronden op weken als het aantal dagen groter is dan dit aantal weken.
BEGIN
IF p_start IS NOT NULL AND p_eind > p_start
THEN
v_zelfde_weekdag := (TO_CHAR(p_start, 'D') = TO_CHAR(p_eind, 'D'));
v_zelfde_dag := (TO_CHAR(p_start, 'dd') = TO_CHAR(p_eind, 'dd'));
v_zelfde_maand := (TO_CHAR(p_start, 'mm') = TO_CHAR(p_eind, 'mm'));
CASE WHEN (v_zelfde_dag AND v_zelfde_maand)
THEN
v_type := 'Y';
v_aantal := TO_NUMBER(TO_CHAR(p_eind, 'yyyy')) - TO_NUMBER(TO_CHAR(p_start, 'yyyy'));
WHEN (v_zelfde_dag AND NOT v_zelfde_maand)
THEN
v_type := 'M';
v_aantal := ROUND(MONTHS_BETWEEN(p_eind, p_start));
WHEN (v_zelfde_weekdag)
THEN
v_type := 'W';
v_aantal := ROUND((p_eind - p_start) / 7);
ELSE
v_type := 'D';
v_aantal := p_eind - p_start;
IF p_afronden
THEN
CASE WHEN v_aantal > (365 * min_jaar)
THEN -- afronden op jaren
v_type := 'Y';
v_aantal := ROUND(v_aantal / 365);
WHEN v_aantal > (30 * min_maand)
THEN -- afronden op maanden
v_type := 'M';
v_aantal := ROUND(v_aantal / 30);
WHEN v_aantal > (7 * min_week)
THEN -- afronden op weken
v_type := 'W';
v_aantal := ROUND(v_aantal / 7);
END CASE;
END IF;
END CASE;
END IF;
--
v_aantal := LEAST(v_aantal, 999);
IF v_aantal < 0
THEN
v_aantal := 0;
v_type := 'W';
END IF;
--
p_termijn_type := v_type;
p_termijn_aantal := v_aantal;
END; -- SUBPROC bepaal_termijn
-- SUBPROC
-- p_kenmerkwaarde = 'Looptijd Maximaal|1=24'. Ofwel: kenmerk_omschrijving|groep=waarde.
-- p_kenmerkwaarde = '1049|1=24'. Ofwel: kenmerk_key|groep=waarde.
PROCEDURE upsert_cntkenmerk( p_cnt_key IN NUMBER
, p_kenmerkwaarde IN VARCHAR2)
AS
v_kenmerk_key NUMBER;
v_srtkenmerk_type cnt_srtkenmerk.cnt_srtkenmerk_kenmerktype%TYPE;
ccount NUMBER;
v_srtkenmerk_key NUMBER;
v_groep NUMBER;
v_kenmerk VARCHAR2 (50);
v_waarde VARCHAR2 (255);
v_objectnaam fac_kenmerkdomein.fac_kenmerkdomein_objectnaam%TYPE;
v_kolomnaam fac_kenmerkdomein.fac_kenmerkdomein_kolomnaam%TYPE;
v_kolomtxt fac_kenmerkdomein.fac_kenmerkdomein_kolomtxt%TYPE;
sql_stmt VARCHAR2 (1000);
v_kenmerkdeel_key NUMBER;
l_cursor_1 INTEGER;
l_rowsprocessed NUMBER DEFAULT 0;
BEGIN
IF p_kenmerkwaarde IS NOT NULL
THEN
v_errormsg := 'Fout bij bepalen kenmerk [' || SUBSTR(p_kenmerkwaarde, 1, 200) || ']';
v_kenmerk := SUBSTR (p_kenmerkwaarde, 1, INSTR (p_kenmerkwaarde, '|') - 1);
v_groep := fac.safe_to_number(SUBSTR( p_kenmerkwaarde
, INSTR(p_kenmerkwaarde, '|') + 1
, INSTR(p_kenmerkwaarde, '=') - 1 - INSTR(p_kenmerkwaarde, '|')
)
);
v_waarde := SUBSTR(p_kenmerkwaarde, INSTR(p_kenmerkwaarde, '=') + 1);
IF fac.safe_to_number(v_kenmerk) IS NULL
THEN
-- Er kunnen drie kenmerken met dezelfde omschrijving gedefinieerd worden voor een object,
-- namenlijk op drie niveaus discipline (D), 0bjectgroep (G) en objectsoort (S).
-- Bij meerdere dezelfde kenmerken nemen we het kenmerk met de laagste volgnummer.
SELECT cnt_kenmerk_key
, cnt_srtkenmerk_key
, cnt_srtkenmerk_kenmerktype
INTO v_kenmerk_key
, v_srtkenmerk_key
, v_srtkenmerk_type
FROM ( SELECT k.cnt_kenmerk_key
, sk.cnt_srtkenmerk_key
, sk.cnt_srtkenmerk_kenmerktype
, k.cnt_kenmerk_volgnummer
FROM cnt_v_aanwezigcontract c
, cnt_kenmerk k
, cnt_srtkenmerk sk
WHERE ( c.ins_discipline_key = k.cnt_srtcontract_key
or k.cnt_srtcontract_key IS NULL
)
AND k.cnt_srtkenmerk_key = sk.cnt_srtkenmerk_key
AND c.cnt_contract_key = p_cnt_key
AND k.cnt_kenmerk_groep = v_groep
AND COALESCE(UPPER(k.cnt_kenmerk_omschrijving), sk.cnt_srtkenmerk_upper) = UPPER(v_kenmerk)
AND k.cnt_kenmerk_verwijder IS NULL
AND sk.cnt_srtkenmerk_verwijder IS NULL
ORDER BY k.cnt_kenmerk_volgnummer
)
WHERE ROWNUM = 1;
ELSE
SELECT k.cnt_kenmerk_key
, sk.cnt_srtkenmerk_key
, sk.cnt_srtkenmerk_kenmerktype
INTO v_kenmerk_key
, v_srtkenmerk_key
, v_srtkenmerk_type
FROM cnt_kenmerk k
, cnt_srtkenmerk sk
WHERE k.cnt_srtkenmerk_key = sk.cnt_srtkenmerk_key
AND k.cnt_kenmerk_groep = v_groep
AND k.cnt_kenmerk_key = v_kenmerk
ORDER BY k.cnt_kenmerk_volgnummer;
END IF;
IF v_waarde IS NOT NULL
THEN
IF v_srtkenmerk_type IN ('R', 'r', 'S')
THEN
v_errormsg := 'Fout bij bepalen eigen tabel';
SELECT COUNT (*)
INTO ccount
FROM cnt_srtkenmerk sk
, fac_kenmerkdomein d
WHERE sk.cnt_srtkenmerk_key = v_srtkenmerk_key
AND sk.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key
AND d.fac_usrtab_key IS NOT NULL;
v_errormsg := 'Fout bij bepalen nieuwe waarde [' || SUBSTR(v_waarde, 1, 200) || ']';
IF ccount = 1
THEN
-- Eigen tabel
SELECT TO_CHAR (ud.fac_usrdata_key)
INTO v_waarde
FROM cnt_srtkenmerk sk
, fac_kenmerkdomein d
, fac_v_aanwezigusrdata ud
WHERE sk.cnt_srtkenmerk_key = v_srtkenmerk_key
AND sk.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key
AND d.fac_usrtab_key = ud.fac_usrtab_key
AND UPPER(TRIM(ud.fac_usrdata_omschr)) = UPPER(v_waarde);
ELSE
-- FACILITOR view/tabel
SELECT d.fac_kenmerkdomein_objectnaam
, d.fac_kenmerkdomein_kolomnaam
, d.fac_kenmerkdomein_kolomtxt
INTO v_objectnaam
, v_kolomnaam
, v_kolomtxt
FROM cnt_srtkenmerk sk
, fac_kenmerkdomein d
WHERE sk.cnt_srtkenmerk_key = v_srtkenmerk_key
AND sk.fac_kenmerkdomein_key = d.fac_kenmerkdomein_key
AND d.fac_usrtab_key IS NULL;
sql_stmt := 'SELECT MAX (' || v_kolomnaam || ')'
|| ' FROM ' || v_objectnaam
|| ' WHERE UPPER (TRIM (' || v_kolomtxt || ')) = UPPER (:pwaarde)';
l_cursor_1 := DBMS_SQL.open_cursor;
DBMS_SQL.parse(l_cursor_1, sql_stmt, DBMS_SQL.native);
DBMS_SQL.BIND_VARIABLE(l_cursor_1,':pwaarde', v_waarde);
DBMS_SQL.define_column(l_cursor_1, 1, v_waarde, 255);
l_rowsprocessed := DBMS_SQL.execute_and_fetch(l_cursor_1);
DBMS_SQL.column_value(l_cursor_1, 1, v_waarde);
DBMS_SQL.close_cursor(l_cursor_1);
END IF;
ELSE -- C(Karakter)/D(Datum)/N(Numeriek)/X(Bestandsnaam)
NULL; -- v_waarde := p_waarde;
END IF;
v_errormsg := 'Fout bij bepalen huidige waarde';
SELECT COUNT(*)
, MAX(cnt_kenmerkcontract_key)
INTO ccount
, v_kenmerkdeel_key
FROM cnt_kenmerkcontract
WHERE cnt_contract_key = p_cnt_key
AND cnt_kenmerk_key = v_kenmerk_key;
IF v_srtkenmerk_type = 'N' -- Alleen voor numerieke waarden de decimale komma vervangen door punt.
THEN
v_waarde := REPLACE(v_waarde, ',', '.');
END IF;
IF ccount = 0
THEN
v_errormsg := 'Fout bij toevoegen waarde [' || SUBSTR(v_waarde, 1, 200) || ']';
INSERT INTO cnt_kenmerkcontract
( cnt_contract_key
, cnt_kenmerk_key
, cnt_kenmerkcontract_waarde
)
VALUES ( p_cnt_key
, v_kenmerk_key
, v_waarde
);
ELSE
v_errormsg := 'Fout bij bijwerken waarde [' || SUBSTR(v_waarde, 1, 200) || ']';
UPDATE cnt_kenmerkcontract
SET cnt_kenmerkcontract_waarde = v_waarde
WHERE cnt_kenmerkcontract_key = v_kenmerkdeel_key;
END IF;
ELSE
-- Verwijder kenmerken die al bestaan maar met de nieuwe import leeg zijn.
DELETE cnt_kenmerkcontract
WHERE cnt_kenmerk_key = v_kenmerk_key
AND cnt_contract_key = p_cnt_key;
END IF;
END IF;
EXCEPTION
WHEN OTHERS THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || v_errormsg
, 'upsert_cntkenmerk'
);
END; -- SUBPROC upsert_cntkenmerk
-- SUBPROC
PROCEDURE onroerendgoed_to_scope( loc IN VARCHAR2 DEFAULT NULL
, ter IN VARCHAR2 DEFAULT NULL
, bld IN VARCHAR2 DEFAULT NULL
, flr IN NUMBER DEFAULT NULL
, room IN VARCHAR2 DEFAULT NULL
, scope_typ OUT VARCHAR2
, scope_key OUT NUMBER
, scope_err OUT VARCHAR2
)
AS
BEGIN
IF loc IS NOT NULL
THEN
BEGIN
SELECT alg_locatie_key
INTO scope_key
FROM alg_v_aanweziglocatie
WHERE alg_locatie_code = loc;
scope_typ := 'L';
IF ter IS NOT NULL
THEN
BEGIN
SELECT alg_terreinsector_key
INTO scope_key
FROM alg_v_aanwezigterreinsector
WHERE alg_locatie_key = scope_key
AND alg_terreinsector_code = ter;
scope_typ := 'T';
EXCEPTION
WHEN NO_DATA_FOUND THEN
scope_err := 'Onbekende terreinsector: ' || ter || ' in ' || loc;
END;
ELSE
BEGIN
IF bld IS NOT NULL
THEN
BEGIN
SELECT alg_gebouw_key
INTO scope_key
FROM alg_v_aanweziggebouw
WHERE alg_locatie_key = scope_key
AND alg_gebouw_code = bld;
scope_typ := 'G';
IF flr IS NOT NULL
THEN
BEGIN
SELECT alg_verdieping_key
INTO scope_key
FROM alg_v_aanwezigverdieping
WHERE alg_gebouw_key = scope_key
AND alg_verdieping_volgnr = flr;
scope_typ := 'V';
IF room IS NOT NULL
THEN
BEGIN
SELECT alg_ruimte_key
INTO scope_key
FROM alg_v_aanwezigruimte
WHERE alg_verdieping_key = scope_key
AND alg_ruimte_nr = room;
scope_typ := 'R';
EXCEPTION
WHEN NO_DATA_FOUND THEN
scope_err := 'Onbekende ruimte: ' || room || ' in ' || loc ||'-'|| bld ||'-'|| TO_CHAR(flr);
END;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
scope_err := 'Onbekende verdieping: ' || TO_CHAR(flr) || ' in ' || loc ||'-'|| bld;
END;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
scope_err := 'Onbekend gebouw: ' || bld || ' in ' || loc;
END;
END IF;
END;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND THEN
scope_err := 'Onbekende locatie: ' || loc;
END;
END IF;
END; -- SUBPROC onroerendgoed_to_scope
BEGIN
v_count_tot := 0;
v_count_cntnew := 0;
v_count_cntupd := 0;
v_aanduiding := '';
v_errormsg := 'Fout bij bepalen user: _FACILITOR';
SELECT prs_perslid_key
INTO v_facilitor_key
FROM prs_perslid
WHERE prs_perslid_oslogin = '_FACILITOR';
FOR rec IN c1
LOOP
BEGIN
v_geldig := 1;
v_count_tot := v_count_tot + 1;
v_aanduiding := '['|| rec.cnt_soort ||'|'|| rec.nummer_intern ||'|'|| rec.nummer_extern ||'|'|| rec.beschrijving ||'] ';
-- Eerst controleren of de ingevulde gegevens wel zinning/geldig zijn.
-- Voor -ontbrekende- verplichte gegevens proberen we wat zinnigs (en
-- geldigs!) te bedenken.
-- Toevoegen/bijwerken wordt pas gedaan als alles zinnig is bevonden.
-- Verplichte velden (via interface) zijn bij import al gecontroleerd!
-- Afdeling: moet geldig zijn!
v_errormsg := 'Fout bij bepalen afdeling: ' || rec.afdeling;
IF (rec.prs_afdeling_key IS NULL)
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || v_errormsg
, 'Contract wordt overgeslagen'
);
v_geldig := 0;
END IF;
-- Eigenaar (als meegegeven)
-- In geval van abonnement verplicht.
IF (rec.perslid_eig IS NOT NULL AND rec.prs_perslid_key_eig IS NULL)
THEN -- *niet gevonden, wel meegegeven
v_errormsg := 'Fout bij bepalen eigenaar: ' || rec.perslid_eig;
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || v_errormsg
, 'leeg gelaten'
);
ELSIF (rec.prs_perslid_key_eig IS NOT NULL)
THEN -- *wel gevonden (impliceert meegegeven)
v_perslid_key_eig := rec.prs_perslid_key_eig;
ELSE -- *niet meegegeven, dus niet gevonden
IF (rec.ins_discipline_key IS NOT NULL)
THEN -- Speciaal geval abonnementen: abonnee (eigenaar) is dan verplicht.
-- Contract is een abonnement, als de contractsoort aan een catalogus
-- gekoppeld is.
-- Is er een (actuele) catalogus aan deze contractsoort gekoppeld?
SELECT COUNT(*)
INTO v_count
FROM bes_disc_params p
, bes_discipline b
WHERE p.bes_disc_params_cnt_disckey = rec.ins_discipline_key
AND p.bes_ins_discipline_key = b.ins_discipline_key
AND b.ins_discipline_verwijder IS NULL;
IF (v_count > 0)
THEN -- dit is een abonnement, dus de eigenaar is verplicht
v_errormsg := 'Fout bij bepalen eigenaar-abonnee';
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || v_errormsg
, 'Contract wordt overgeslagen'
);
v_geldig := 0;
END IF;
END IF;
END IF;
-- Beheerder: backup _FACILITOR.
v_errormsg := 'Fout bij bepalen beheerder: ' || rec.perslid_beh;
IF (rec.prs_perslid_key_beh IS NULL)
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || v_errormsg
, '_FACILITOR gebruikt'
);
v_perslid_key_beh := v_facilitor_key;
ELSE
v_perslid_key_beh := rec.prs_perslid_key_beh;
END IF;
-- Bedrijf: moet geldig zijn!
v_errormsg := 'Fout bij bepalen bedrijf: ' || rec.bedrijf_naam;
IF (rec.prs_bedrijf_key IS NULL)
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || v_errormsg
, 'Contract wordt overgeslagen'
);
v_geldig := 0;
END IF;
-- Kostenplaats: moet bestaan.
v_errormsg := 'Fout bij bepalen kostenplaats: ' || rec.kpn_code;
IF (rec.prs_kostenplaats_key IS NULL)
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || v_errormsg
, 'Contract wordt overgeslagen'
);
v_geldig := 0;
END IF;
onroerendgoed_to_scope( rec.locatiecode, rec.terreincode, rec.gebouwcode, rec.verdiepingcode, rec.ruimtecode
, v_scope_code, v_scope_key, v_scope_err);
-- Locatie/gebouw (als meegegeven): moet bestaan en ook passen bij de
-- contractsoort (type_key 3=Ondersteuning of 5=Leverancier).
IF (v_scope_code IS NOT NULL)
THEN
IF v_scope_err IS NOT NULL
THEN
v_errormsg := 'Fout bij bepalen scope: ' || v_scope_err;
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || v_errormsg
, 'Contract/scope wordt overgeslagen'
);
v_geldig := 0;
END IF;
v_errormsg := 'Fout bij matchen contractsoort-scope';
IF (rec.cnt_srtcontract_type NOT IN (3, 5))
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || v_errormsg
, 'Contract/scope wordt overgeslagen'
);
v_geldig := 0;
END IF;
END IF;
-- Mantel: niet verplicht, wel rapporteren als niets gevonden.
v_errormsg := 'Fout bij bepalen mantel: ' || rec.mantel_nr;
IF (rec.mantel_nr IS NOT NULL AND rec.mantel_key IS NULL)
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || v_errormsg
, 'Contract niet aan mantel gekoppeld'
);
END IF;
-- Dienst: niet verplicht, wel rapporteren als niets gevonden.
v_errormsg := 'Fout bij bepalen dienst: ' || rec.dienst;
IF (rec.dienst IS NOT NULL AND rec.prs_dienst_key IS NULL)
THEN
fac.imp_writelog( p_import_key, 'W'
, v_aanduiding || v_errormsg
, 'Contract niet aan dienst gekoppeld'
);
END IF;
-- Alleen verder gaan als alles zinnig bevonden is.
IF (v_geldig = 1)
THEN
-- Contractsoort: toevoegen (type Leverancier).
IF (rec.ins_discipline_key IS NULL)
THEN
-- Misschien is de contractsoort tijdens import al toegevoegd?
-- (dan was 'ie er voor de cursor nog niet.)
BEGIN
v_errormsg := 'Fout bij bepalen contractsoort';
SELECT ins_discipline_key
INTO v_cnt_discipline_key
FROM cnt_discipline
WHERE ins_discipline_verwijder IS NULL
AND UPPER(ins_discipline_omschrijving) = UPPER(rec.cnt_soort);
EXCEPTION
WHEN NO_DATA_FOUND THEN
-- Contractsoort bestaat gewoon niet; toevoegen.
v_errormsg := 'Fout bij toevoegen contractsoort:' || rec.cnt_soort;
INSERT INTO ins_tab_discipline
( ins_discipline_module
, ins_discipline_omschrijving
)
VALUES ( 'CNT'
, rec.cnt_soort
)
RETURNING ins_discipline_key
INTO v_cnt_discipline_key;
-- Type Leverancier, geen kostensoort, geen factuurmarges.
INSERT INTO cnt_disc_params
( cnt_ins_discipline_key
, cnt_srtcontract_type
)
VALUES ( v_cnt_discipline_key
, c_contract_type
);
fac.imp_writelog( p_import_key, 'I'
, v_aanduiding || 'Contractsoort "' || rec.cnt_soort || '" aangemaakt'
, 'Nieuwe contractsoort'
);
END;
ELSE
v_cnt_discipline_key := rec.ins_discipline_key;
END IF;
-- Nu de contractsoort bekend is kunnen ook de overige gegevens bij het contractsoort worden toegevoegd.
UPDATE cnt_disc_params
SET cnt_disc_params_factuurboeken = rec.factuurboeken
WHERE cnt_ins_discipline_key = v_cnt_discipline_key;
-- Contactpersoon (als meegegeven): bepalen/toevoegen bij bedrijf.
IF (rec.contact_naam IS NOT NULL AND rec.prs_contactpersoon_key IS NULL)
THEN
-- Misschien is de contractpersoon tijdens import al toegevoegd?
-- (dan was 'ie er voor de cursor nog niet.)
BEGIN
v_errormsg := 'Fout bij bepalen contactpersoon';
SELECT prs_contactpersoon_key
INTO v_contactpersoon_key
FROM prs_contactpersoon
WHERE prs_contactpersoon_verwijder IS NULL
AND prs_bedrijf_key = rec.prs_bedrijf_key
AND UPPER(prs_contactpersoon_naam) = UPPER(rec.contact_naam);
EXCEPTION
WHEN NO_DATA_FOUND THEN
-- Contactpersoon bestaat gewoon niet; toevoegen.
v_errormsg := 'Fout bij toevoegen contactpersoon:' || rec.contact_naam;
INSERT INTO prs_contactpersoon
( prs_contactpersoon_naam
, prs_bedrijf_key
)
VALUES ( rec.contact_naam
, rec.prs_bedrijf_key
)
RETURNING prs_contactpersoon_key
INTO v_contactpersoon_key;
fac.imp_writelog( p_import_key, 'I'
, v_aanduiding || 'Contactpersoon "' || rec.contact_naam || '" aangemaakt'
, 'Nieuwe contactpersoon'
);
END;
ELSE
v_contactpersoon_key := rec.prs_contactpersoon_key;
END IF;
-- Opzegtermijn: bepalen/toevoegen.
-- Als geen opzegtermijn ingevuld, dan is er geen opzegtermijn: 'Geen' = 0 weken.
v_errormsg := 'Fout bij bepalen opzegtermijn';
bepaal_termijn(rec.datum_opzeg, rec.datum_eind, v_termijn_type, v_termijn_aantal, true);
-- Bestaat de termijn al?
BEGIN
v_errormsg := 'Fout bij bepalen opzegtermijn';
SELECT cnt_termijn_key
INTO v_termijn_key_opzeg
FROM cnt_termijn
WHERE cnt_termijn_type = v_termijn_type
AND cnt_termijn_aantal = v_termijn_aantal;
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_errormsg := 'Fout bij toevoegen opzegtermijn';
INSERT INTO cnt_termijn
( cnt_termijn_omschrijving
, cnt_termijn_type
, cnt_termijn_aantal
)
VALUES ( TO_CHAR(v_termijn_aantal) || CASE WHEN v_termijn_type = 'Y' THEN 'Jaar'
WHEN v_termijn_type = 'M' THEN 'Maand(en)'
WHEN v_termijn_type = 'D' THEN 'Dage(en)'
END
, v_termijn_type
, v_termijn_aantal
)
RETURNING cnt_termijn_key
INTO v_termijn_key_opzeg;
END;
-- Rappeltermijn: bepalen/toevoegen.
-- Als geen rappeltermijn ingevuld, dan is er geen rappeltermijn: 'Geen' = 0 weken.
v_errormsg := 'Fout bij bepalen rappeltermijn';
-- Als geen opzegdatum, dan einddatum.
bepaal_termijn(rec.datum_rappel, COALESCE(rec.datum_opzeg, rec.datum_eind), v_termijn_type, v_termijn_aantal, true);
-- Bestaat de termijn al?
BEGIN
v_errormsg := 'Bepalen rappeltermijn';
SELECT cnt_termijn_key
INTO v_termijn_key_rappel
FROM cnt_termijn
WHERE cnt_termijn_type = v_termijn_type
AND cnt_termijn_aantal = v_termijn_aantal;
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_errormsg := 'Toevoegen rappeltermijn';
INSERT INTO cnt_termijn
( cnt_termijn_omschrijving
, cnt_termijn_type
, cnt_termijn_aantal
)
VALUES ( TO_CHAR(v_termijn_aantal) || CASE WHEN v_termijn_type = 'Y' THEN 'Jaar'
WHEN v_termijn_type = 'M' THEN 'Maand(en)'
WHEN v_termijn_type = 'D' THEN 'Dage(en)'
END
, v_termijn_type
, v_termijn_aantal
)
RETURNING cnt_termijn_key
INTO v_termijn_key_rappel;
END;
-- Controleren of er al een contract met hetzelfde nummer en versie;
-- bestaat; toevoegen vs. bijwerken.
v_errormsg := 'Fout bij bepalen contract';
SELECT COUNT(*)
INTO v_count
FROM cnt_v_aanwezigcontract
WHERE TRIM(cnt_contract_nummer_intern) = rec.nummer_intern
AND COALESCE(cnt_contract_versie, '0') = COALESCE(rec.versie, '0');
IF (v_count = 0) -- Contract bestaat nog niet --> toevoegen.
THEN
-- Als rec.nummer_intern is NULL, dan wordt door FACILITOR een
-- nummer bepaald (= cnt_contract_key)!
v_errormsg := 'Fout bij toevoegen contract.';
-- Status van nieuwe melding is afhankelijk van of het contract approval mechanisme actief is en
-- het bedrag moet groter zijn als limiet 1 anders hoeft er <20>berhaupt niet gefiatteerd te worden en kan het contract direct actief (0) worden.
IF fac.getSetting('cnt_contract_approval') = 1 AND rec.bedrag > fac.getSetting('cnt_contract_limit1')
THEN
v_cnt_status := 2;
v_srtnoti_code := '@CNTNEW'; -- nog niet direct versturen
ELSE
v_cnt_status := 0;
v_srtnoti_code := 'CNTNEW';
END IF;
INSERT INTO cnt_contract
( cnt_contract_nummer
, cnt_contract_omschrijving
, cnt_contract_looptijd_tot
, cnt_contract_kosten
, cnt_contract_uurloon
, cnt_prs_bedrijf_key
, cnt_contract_nummer_intern
, cnt_contract_korting
, prs_contactpersoon_key
, ins_discipline_key
, cnt_contract_document
, prs_perslid_key_eig
, prs_perslid_key_beh
, prs_afdeling_key_eig
, cnt_contract_status
, cnt_contract_looptijd_van
, prs_kostenplaats_key
, prs_kostensoort_key
, cnt_contract_termijnkosten
, cnt_contract_opmerking
, cnt_contract_mantel_key
, cnt_contract_opzegtermijn
, cnt_contract_rappeltermijn
, cnt_contract_versie
, prs_dienst_key
, cnt_contract_verlenging
)
VALUES ( rec.nummer_extern
, rec.beschrijving
, rec.datum_eind
, rec.bedrag
, rec.uurtarief
, rec.prs_bedrijf_key
, rec.nummer_intern
, rec.korting
, v_contactpersoon_key
, v_cnt_discipline_key
, rec.omschrijving
, v_perslid_key_eig
, v_perslid_key_beh
, rec.prs_afdeling_key
, v_cnt_status
, rec.datum_ingang
, rec.prs_kostenplaats_key
, rec.prs_kostensoort_key
, rec.bedrag_termijn
, rec.opmerking
, rec.mantel_key
, v_termijn_key_opzeg
, v_termijn_key_rappel
, rec.versie
, rec.prs_dienst_key
, rec.verlengen
)
RETURNING cnt_contract_key
INTO v_contract_key;
v_count_cntnew := v_count_cntnew + 1;
ELSE -- Contract bestaat al --> bijwerken.
SELECT c.cnt_contract_key
INTO v_contract_key
FROM cnt_contract c
WHERE TRIM(c.cnt_contract_nummer_intern) = rec.nummer_intern
AND COALESCE(c.cnt_contract_versie, '0') = COALESCE(rec.versie, '0')
AND c.cnt_contract_verwijder IS NULL
AND c.cnt_contract_looptijd_tot = (SELECT MAX(d.cnt_contract_looptijd_tot)
FROM cnt_contract d
WHERE d.cnt_contract_nummer_intern = c.cnt_contract_nummer_intern
AND COALESCE(d.cnt_contract_versie, '0') = COALESCE(c.cnt_contract_versie, '0')
);
v_errormsg := 'Fout bij bijwerken contract.';
UPDATE cnt_contract
SET cnt_contract_nummer = rec.nummer_extern
, cnt_contract_omschrijving = rec.beschrijving
, cnt_contract_looptijd_tot = rec.datum_eind
, cnt_contract_kosten = rec.bedrag
, cnt_contract_uurloon = rec.uurtarief
, cnt_prs_bedrijf_key = rec.prs_bedrijf_key
, cnt_contract_korting = rec.korting
, prs_contactpersoon_key = v_contactpersoon_key
, ins_discipline_key = v_cnt_discipline_key
, cnt_contract_document = rec.omschrijving
, prs_perslid_key_eig = v_perslid_key_eig
, prs_perslid_key_beh = v_perslid_key_beh
, prs_afdeling_key_eig = rec.prs_afdeling_key
, cnt_contract_looptijd_van = rec.datum_ingang
, prs_kostenplaats_key = rec.prs_kostenplaats_key
, prs_kostensoort_key = rec.prs_kostensoort_key
, cnt_contract_termijnkosten = rec.bedrag_termijn
, cnt_contract_opmerking = rec.opmerking
, cnt_contract_mantel_key = rec.mantel_key
, cnt_contract_opzegtermijn = v_termijn_key_opzeg
, cnt_contract_rappeltermijn = v_termijn_key_rappel
, cnt_contract_versie = rec.versie
, prs_dienst_key = rec.prs_dienst_key
, cnt_contract_verlenging = rec.verlengen
WHERE cnt_contract_key = v_contract_key;
v_srtnoti_code := 'CNTUPD';
v_count_cntupd := v_count_cntupd + 1;
END IF;
-- Upsert gebouwscope: bij UPDATE eerst kijken of scope al bestaat.
-- Zo niet, dan toevoegen (bij INSERT altijd toevoegen).
-- NB. Op deze manier kan een contract meerdere keren voorkomen in
-- het importbestand, met verschillende gebouwen.
IF (v_scope_code IS NOT NULL)
THEN -- Komt deze scope al voor?
SELECT COUNT(*)
INTO v_count
FROM cnt_contract_plaats
WHERE cnt_contract_key = v_contract_key
AND cnt_alg_plaats_key = v_scope_key
AND cnt_alg_plaats_code = v_scope_code;
IF (v_count = 0) -- Scope komt nog niet voor, dus toevoegen.
THEN
v_errormsg := 'Fout bij toevoegen scope';
INSERT INTO cnt_contract_plaats
( cnt_contract_key
, cnt_alg_plaats_key
, cnt_alg_plaats_code
)
VALUES ( v_contract_key
, v_scope_key
, v_scope_code
);
END IF;
END IF;
-- NULL-waarden resulteren NIET in het wissen van kenmerkvelden
-- (bijwerken kan wel, maar wissen dus niet)!
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde1);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde2);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde3);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde4);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde5);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde6);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde7);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde8);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde9);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde10);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde11);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde12);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde13);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde14);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde15);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde16);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde17);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde18);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde19);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde20);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde21);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde22);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde23);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde24);
upsert_cntkenmerk (v_contract_key, rec.cnt_kenmerkwaarde25);
fac.trackaction(v_srtnoti_code, v_contract_key, NULL, NULL, NULL);
COMMIT;
END IF;
EXCEPTION
WHEN OTHERS THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR(SQLERRM, 1, 200);
v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
COMMIT;
END;
END LOOP;
fac.imp_writelog( p_import_key, 'S', 'CNT-contracten/#ingelezen: ' || TO_CHAR (v_count_tot), '');
fac.imp_writelog( p_import_key, 'S', 'CNT-contracten/#toegevoegd: ' || TO_CHAR (v_count_cntnew), '');
fac.imp_writelog( p_import_key, 'S', 'CNT-contracten/#bijgewerkt: ' || TO_CHAR (v_count_cntupd), '');
COMMIT;
EXCEPTION
WHEN OTHERS THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog( p_import_key, 'E'
, v_errormsg
, 'Importproces contracten afgebroken!'
);
END fac_update_cnt;
/
-------------------------------- Standaard Export Procedures -----------------------------------
-- JGL: Overigens is bij een ORDER BY DBMS_RANDOM.VALUE niet gegarandeerd dat die voor
-- elke regel een unieke waarde heeft! Vergelijk 'ORDER BY SYSDATE': dit zou ook niet sorteren.
-- http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:3181424400346795479
CREATE OR REPLACE PROCEDURE fac_select_kto_kandidaten (
p_applname IN VARCHAR2, p_applrun IN VARCHAR2
)
AS
-- NIET via de koninklijke route fac.gettrackingdate vanwege enorme performance-killer!
-- Alle reserveringscatalogi met hun percentage, drempel en het aantal afgemelde reserveringen van de afgelopen periode
-- tot en met 'gisteren' (dus nog niet die van vandaag), of de afgelopen week als het de eerste keer is
-- NOOT: Alleen ruimte-reserveringen vooralsnog!
CURSOR c_cluster_r
IS
SELECT d.ins_discipline_key,
d.ins_discipline_ktopercentage perc,
COALESCE (d.ins_discipline_ktodrempel, 0) drempel,
COUNT (res_rsv_ruimte_key) aantal
FROM res_rsv_ruimte rrr,
res_ruimte_opstelling ro,
res_ruimte rr,
ins_tab_discipline d
WHERE rrr.res_rsv_ruimte_verwijder IS NULL
AND rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key
AND ro.res_ruimte_key = rr.res_ruimte_key
AND rr.res_discipline_key = d.ins_discipline_key
AND rrr.res_rsv_ruimte_tot > (SELECT GREATEST(COALESCE(MAX(res_rsv_ruimte_kto_verstuurd), SYSDATE-7), SYSDATE-7)
FROM res_rsv_ruimte irrr,
res_ruimte_opstelling iro,
res_ruimte irr
WHERE irrr.res_ruimte_opstel_key = iro.res_ruimte_opstel_key
AND iro.res_ruimte_key = irr.res_ruimte_key
AND irr.res_discipline_key = d.ins_discipline_key)
AND rrr.res_rsv_ruimte_tot < SYSDATE
AND res_rsv_ruimte_kto_verstuurd IS NULL
AND ins_discipline_ktopercentage > 0
GROUP BY d.ins_discipline_key,
d.ins_discipline_ktopercentage,
d.ins_discipline_ktodrempel;
CURSOR c_lijst_r (
p_ins_discipline_key NUMBER
)
IS
SELECT rrr.res_rsv_ruimte_key,
SYSDATE ts
FROM res_rsv_ruimte rrr,
res_ruimte_opstelling ro,
res_ruimte rr,
res_discipline d,
prs_perslid p
WHERE rrr.res_rsv_ruimte_verwijder IS NULL
AND rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key
AND ro.res_ruimte_key = rr.res_ruimte_key
AND rr.res_discipline_key = d.ins_discipline_key
AND d.ins_discipline_key = p_ins_discipline_key
-- Contactpersoon van reservering heeft mail-adres
AND rrr.res_rsv_ruimte_contact_key = p.prs_perslid_key
AND p.prs_perslid_email IS NOT NULL
AND rrr.res_rsv_ruimte_tot > (SELECT GREATEST(COALESCE(MAX(res_rsv_ruimte_kto_verstuurd), SYSDATE-7), SYSDATE-7)
FROM res_rsv_ruimte irrr,
res_ruimte_opstelling iro,
res_ruimte irr
WHERE irrr.res_ruimte_opstel_key = iro.res_ruimte_opstel_key
AND iro.res_ruimte_key = irr.res_ruimte_key
AND irr.res_discipline_key = d.ins_discipline_key)
AND rrr.res_rsv_ruimte_tot < SYSDATE
AND res_rsv_ruimte_kto_verstuurd IS NULL
ORDER BY DBMS_RANDOM.VALUE;
-- NIET via de koninklijke route fac.gettrackingdate vanwege enorme performance-killer!
-- Alle vakgroepen met hun percentage, drempel en het aantal afgemelde meldingen van de afgelopen periode
CURSOR c_cluster_m
IS
SELECT d.ins_discipline_key,
d.ins_discipline_ktopercentage perc,
COALESCE (d.ins_discipline_ktodrempel, 0) drempel,
COUNT (mld_melding_key) aantal
FROM mld_melding m,
mld_stdmelding std,
mld_discipline d,
fac_tracking t,
fac_srtnotificatie sn
WHERE m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = d.ins_discipline_key
-- Afgemelde meldingen van afgelopen periode
AND m.mld_melding_key = t.fac_tracking_refkey
AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'MLDAFM'
AND t.fac_tracking_datum > (SELECT GREATEST(COALESCE(MAX(mld_melding_kto_verstuurd), SYSDATE-7), SYSDATE-7)
FROM mld_melding im,
mld_stdmelding istd
WHERE im.mld_stdmelding_key = istd.mld_stdmelding_key
AND istd.mld_ins_discipline_key = d.ins_discipline_key)
AND mld_melding_kto_verstuurd IS NULL
AND ins_discipline_ktopercentage > 0
GROUP BY d.ins_discipline_key,
d.ins_discipline_ktopercentage,
d.ins_discipline_ktodrempel;
CURSOR c_lijst_m (
p_ins_discipline_key NUMBER
)
IS
SELECT m.mld_melding_key,
SYSDATE ts
FROM mld_melding m,
mld_stdmelding std,
mld_discipline d,
prs_perslid p,
fac_tracking t,
fac_srtnotificatie sn
WHERE m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = d.ins_discipline_key
AND d.ins_discipline_key = p_ins_discipline_key
-- Persoon van melding heeft mail-adres
AND m.prs_perslid_key = p.prs_perslid_key
AND p.prs_perslid_email IS NOT NULL
AND m.mld_melding_kto = 1
-- Afgemelde meldingen van afgelopen periode
AND m.mld_melding_key = t.fac_tracking_refkey
AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'MLDAFM'
AND t.fac_tracking_datum > (SELECT GREATEST(COALESCE(MAX(mld_melding_kto_verstuurd), SYSDATE-7), SYSDATE-7)
FROM mld_melding im,
mld_stdmelding istd
WHERE im.mld_stdmelding_key = istd.mld_stdmelding_key
AND istd.mld_ins_discipline_key = d.ins_discipline_key)
AND mld_melding_kto_verstuurd IS NULL
ORDER BY DBMS_RANDOM.VALUE;
-- NIET via de koninklijke route fac.gettrackingdate vanwege enorme performance-killer!
-- Alle bestelcatalogi met hun percentage, drempel en het aantal afgemelde bestellingen van de afgelopen periode
CURSOR c_cluster_b
IS
SELECT d.ins_discipline_key,
d.ins_discipline_ktopercentage perc,
COALESCE (d.ins_discipline_ktodrempel, 0) drempel,
COUNT (b.bes_bestelling_key) aantal
FROM bes_bestelling b,
bes_bestelling_item bi,
bes_srtdeel sd,
bes_srtgroep sg,
bes_discipline d,
fac_tracking t,
fac_srtnotificatie sn
WHERE b.bes_bestelling_key = bi.bes_bestelling_key
AND bi.bes_srtdeel_key = sd.bes_srtdeel_key
AND sd.bes_srtgroep_key = sg.bes_srtgroep_key
AND sg.ins_discipline_key = d.ins_discipline_key
-- Afgemelde bestellingen van afgelopen periode
AND b.bes_bestelling_key = t.fac_tracking_refkey
AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'BESOTV'
AND t.fac_tracking_datum > (SELECT GREATEST(COALESCE(MAX(bes_bestelling_kto_verstuurd), SYSDATE-7), SYSDATE-7)
FROM bes_bestelling ib,
bes_bestelling_item ibi,
bes_srtdeel isd,
bes_srtgroep isg
WHERE ib.bes_bestelling_key = ibi.bes_bestelling_key
AND ibi.bes_srtdeel_key = isd.bes_srtdeel_key
AND isd.bes_srtgroep_key = isg.bes_srtgroep_key
AND isg.ins_discipline_key = d.ins_discipline_key)
AND bes_bestelling_kto_verstuurd IS NULL
AND ins_discipline_ktopercentage > 0
GROUP BY d.ins_discipline_key,
d.ins_discipline_ktopercentage,
d.ins_discipline_ktodrempel;
CURSOR c_lijst_b (
p_ins_discipline_key NUMBER
)
IS
SELECT DISTINCT b.bes_bestelling_key,
SYSDATE ts
FROM bes_bestelling b,
bes_bestelling_item bi,
bes_srtdeel sd,
bes_srtgroep sg,
bes_discipline d,
prs_perslid p,
fac_tracking t,
fac_srtnotificatie sn
WHERE b.bes_bestelling_key = bi.bes_bestelling_key
AND bi.bes_srtdeel_key = sd.bes_srtdeel_key
AND sd.bes_srtgroep_key = sg.bes_srtgroep_key
AND sg.ins_discipline_key = d.ins_discipline_key
AND d.ins_discipline_key = p_ins_discipline_key
-- Persoon van melding heeft mail-adres
AND b.prs_perslid_key = p.prs_perslid_key
AND p.prs_perslid_email IS NOT NULL
-- Afgemelde bestellingen van afgelopen periode
AND b.bes_bestelling_key = t.fac_tracking_refkey
AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'BESOTV'
AND t.fac_tracking_datum > (SELECT GREATEST(COALESCE(MAX(bes_bestelling_kto_verstuurd), SYSDATE-7), SYSDATE-7)
FROM bes_bestelling ib,
bes_bestelling_item ibi,
bes_srtdeel isd,
bes_srtgroep isg
WHERE ib.bes_bestelling_key = ibi.bes_bestelling_key
AND ibi.bes_srtdeel_key = isd.bes_srtdeel_key
AND isd.bes_srtgroep_key = isg.bes_srtgroep_key
AND isg.ins_discipline_key = d.ins_discipline_key)
AND bes_bestelling_kto_verstuurd IS NULL
ORDER BY DBMS_RANDOM.VALUE;
v_aantal_kto NUMBER;
v_count_upd NUMBER;
v_count NUMBER;
v_errorhint VARCHAR2(200);
v_omschrijving VARCHAR2(4000);
v_errormsg VARCHAR (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
BEGIN
-- KTO's op meldingen
v_errorhint := 'Doorloop de vakgroepen';
FOR rec1 IN c_cluster_m
LOOP
BEGIN
IF (rec1.perc <> 0 OR rec1.drempel <> 0) AND rec1.aantal > 0
THEN
-- Vakgroep heeft afgemelde meldingen in de voorgaande periode,
-- en het is een vakgroep waarop KTO van toepassing is (volgens ingesteld percentage en/of een drempel)
v_aantal_kto := TRUNC ( (rec1.perc * rec1.aantal) / 100);
IF v_aantal_kto < rec1.drempel
THEN
v_aantal_kto := rec1.drempel;
END IF;
v_count_upd := 1;
FOR rec2 IN c_lijst_m (rec1.ins_discipline_key)
LOOP
BEGIN
IF v_count_upd <= v_aantal_kto
THEN
v_errorhint := 'Toevoegen meldingen kto-notificatie';
UPDATE mld_melding
SET mld_melding_kto_verstuurd = rec2.ts
WHERE mld_melding_key = rec2.mld_melding_key;
fac.trackaction('MLDKTO', rec2.mld_melding_key, NULL, rec2.ts, NULL);
END IF;
v_count_upd := v_count_upd + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'Exception ' || oracle_err_mes;
fac.writelog (
p_applname,
'W',
v_errormsg,
'Aanmaken Melding KTO: ' || rec2.mld_melding_key
);
COMMIT;
END;
END LOOP;
END IF;
END;
END LOOP;
-- KTO's op reserveringen
v_errorhint := 'Doorloop de reserveerbare ruimtecatalogi';
FOR rec1 IN c_cluster_r
LOOP
BEGIN
IF (rec1.perc <> 0 OR rec1.drempel <> 0) AND rec1.aantal > 0
THEN
-- Ruimtecatalogus heeft reserveringen die in de voorgaande periode zijn beeindigd
-- en het is een catalogus waarop KTO van toepassing is (volgens ingesteld percentage en/of een drempel)
v_aantal_kto := TRUNC ( (rec1.perc * rec1.aantal) / 100);
IF v_aantal_kto < rec1.drempel
THEN
v_aantal_kto := rec1.drempel;
END IF;
v_count_upd := 1;
FOR rec2 IN c_lijst_r (rec1.ins_discipline_key)
LOOP
BEGIN
IF v_count_upd <= v_aantal_kto
THEN
v_errorhint := 'Toevoegen reserveringen kto-notificatie';
UPDATE res_rsv_ruimte
SET res_rsv_ruimte_kto_verstuurd = rec2.ts
WHERE res_rsv_ruimte_key = rec2.res_rsv_ruimte_key;
fac.trackaction('RESKTO', rec2.res_rsv_ruimte_key, NULL, rec2.ts, NULL);
END IF;
v_count_upd := v_count_upd + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'Exception ' || oracle_err_mes;
fac.writelog (
p_applname,
'W',
v_errormsg,
'Aanmaken Reservering KTO: ' || rec2.res_rsv_ruimte_key
);
COMMIT;
END;
END LOOP;
END IF;
END;
END LOOP;
-- KTO's op bestellingen
v_errorhint := 'Doorloop de bestelcatalogi';
FOR rec1 IN c_cluster_b
LOOP
BEGIN
IF (rec1.perc <> 0 OR rec1.drempel <> 0) AND rec1.aantal > 0
THEN
-- Bestelcatalogus heeft geleverde bestellingen in de voorgaande periode,
-- en het is een catalogus waarop KTO van toepassing is (volgens ingesteld percentage en/of een drempel)
v_aantal_kto := TRUNC ( (rec1.perc * rec1.aantal) / 100);
IF v_aantal_kto < rec1.drempel
THEN
v_aantal_kto := rec1.drempel;
END IF;
v_count_upd := 1;
FOR rec2 IN c_lijst_b (rec1.ins_discipline_key)
LOOP
BEGIN
IF v_count_upd <= v_aantal_kto
THEN
v_errorhint := 'Toevoegen bestellingen kto-notificatie';
UPDATE bes_bestelling
SET bes_bestelling_kto_verstuurd = rec2.ts
WHERE bes_bestelling_key = rec2.bes_bestelling_key;
fac.trackaction('BESKTO', rec2.bes_bestelling_key, NULL, rec2.ts, NULL);
END IF;
v_count_upd := v_count_upd + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'Exception ' || oracle_err_mes;
fac.writelog (
p_applname,
'W',
v_errormsg,
'Aanmaken Bestelling KTO: ' || rec2.bes_bestelling_key
);
COMMIT;
END;
END LOOP;
END IF;
END;
END LOOP;
END;
/
-- Procedure om aan te geven voor welke meldingen een kto verzonden moet worden.
CREATE OR REPLACE PROCEDURE fac_export_kto_kandidaten (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_filedir IN VARCHAR2,
p_filename IN VARCHAR2
)
AS
v_errormsg VARCHAR (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
BEGIN
v_errormsg := 'Geen akties';
END;
/
-- MS-Exchange sync-import: onthoudt de laatste syncstate van een reserveerbare ruimte
-- met betekenis: tot die markering ben ik bij.
-- versie met een CLOB voor de syncstate, omdat die in de praktijk langer
-- dan 4000 karakters blijkt te kunnen zijn. De XSL-stylesheet knipt de syncstate uit
-- de XML op in stukken van max 4000 karakters -- deze import plakt die weer aan elkaar.
CREATE OR REPLACE PROCEDURE fac_import_exchsync (p_import_key IN NUMBER)
AS
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line
v_fielddelimitor VARCHAR2 (2);
v_errormsg VARCHAR2 (200);
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER;
--
v_res_ruimte_key res_ruimte.res_ruimte_key%TYPE;
v_syncstate VARCHAR2(4000);
v_len NUMBER;
v_sync NUMBER;
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
rec1 c1%ROWTYPE;
BEGIN
v_fielddelimitor := fac.import_delimiter(p_import_key);
header_is_valid := 0;
v_len := 0;
-- De res_ruimte_key waar we het over hebben zit in de refkey van de import
SELECT fac_import_refkey
INTO v_res_ruimte_key
FROM fac_import
WHERE fac_import_key = p_import_key;
SELECT r.res_ruimte_key - COALESCE(s.res_ruimte_key, 0)
INTO v_sync
FROM res_ruimte r
, res_ruimte_sync s
WHERE r.res_ruimte_key = s.res_ruimte_key(+)
AND r.res_ruimte_extern_id IS NOT NULL
AND r.res_ruimte_key = v_res_ruimte_key;
--
-- v_sync: no_data_found --> niet gevonden, niets doen.
-- 0 --> bestaat in res_ruimte en res_ruimte_sync.
-- >0 --> bestaat alleen in res_ruimte.
IF (v_sync = 0)
THEN
-- Syncstate leegmaken, zodat we 'n append kunnen doen.
UPDATE res_ruimte_sync
SET res_ruimte_syncstate = NULL
WHERE res_ruimte_key = v_res_ruimte_key;
ELSE
-- Voeg een res_ruimte_sync record toe.
INSERT INTO res_ruimte_sync (res_ruimte_key)
VALUES (v_res_ruimte_key);
END IF;
FOR rec1 IN c1 LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
fac.imp_getfield (v_newline, v_fielddelimitor, v_syncstate);
IF header_is_valid = 0
THEN
IF UPPER (TRIM (v_syncstate)) LIKE '%SYNCSTATE%'
THEN
header_is_valid := 1;
DBMS_OUTPUT.put_line ('goeie header');
END IF;
ELSE
v_errormsg := 'Fout bij update van syncstate';
DBMS_OUTPUT.put_line ('echte data');
-- Stylesheet knipt syncstates langer dan 4000 karakters op in meerdere delen
-- Hier weer aan elkaar plakken.
UPDATE res_ruimte_sync
SET res_ruimte_syncstate = res_ruimte_syncstate || TRIM(v_syncstate),
res_ruimte_syncdate = SYSDATE
WHERE res_ruimte_key = v_res_ruimte_key;
END IF;
END;
END LOOP;
-- Lange syncstate? (>4000) Dat even loggen.
v_errormsg := 'Fout bij bepalen lengte syncstate';
SELECT LENGTH(res_ruimte_syncstate)
INTO v_len
FROM res_ruimte_sync
WHERE res_ruimte_key = v_res_ruimte_key;
IF (v_len > 4000)
THEN
fac.imp_writelog (p_import_key,
'I',
'Lange syncstate, ' || v_len || ' karakters',
'res_ruimte_key: ' || v_res_ruimte_key);
END IF;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
NULL;
WHEN OTHERS
THEN
oracle_err_mes := SUBSTR (SQLERRM, 1, 1000);
v_errormsg := oracle_err_mes;
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
'res_ruimte_key: ' || v_res_ruimte_key);
END;
/
CREATE OR REPLACE PROCEDURE fac_update_exchsync (p_import_key IN NUMBER)
AS
BEGIN
NULL;
END;
/
CREATE OR REPLACE PROCEDURE fac_import_translation (p_import_key IN NUMBER)
AS
c_delim VARCHAR2 (2) := fac.import_delimiter(p_import_key);
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- 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_tot NUMBER (10);
v_count_imp NUMBER (10);
v_ongeldig NUMBER (1);
v_aanduiding VARCHAR2 (4000);
-- De importvelden
v_label VARCHAR2 (100);
v_module VARCHAR2 (100);
v_lang VARCHAR2 (100);
v_tekst VARCHAR2 (4000);
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
DELETE FROM fac_imp_translation;
COMMIT;
v_count_tot := 0;
v_count_imp := 0;
header_is_valid := 0;
FOR rec1 IN c1 LOOP
BEGIN
v_errormsg := 'Error fetching record';
v_newline := rec1.fac_imp_file_line;
v_aanduiding := '';
v_ongeldig := 0;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_delim, v_label);
fac.imp_getfield (v_newline, c_delim, v_module);
fac.imp_getfield (v_newline, c_delim, v_lang);
fac.imp_getfield (v_newline, c_delim, v_tekst);
v_aanduiding := '[' || v_label || '|' || v_lang || '|' || v_tekst || '] ';
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop.
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
IF (header_is_valid = 0)
THEN
IF ( UPPER (v_label) = 'LABEL'
AND UPPER (v_module) = 'MODULE'
AND UPPER (SUBSTR(v_lang,1,8)) = 'LANGUAGE' -- er mag best nog wat achter staan
AND UPPER (SUBSTR(v_tekst,1,11)) = 'TRANSLATION') -- er mag best nog wat achter staan
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
v_errormsg := 'Label invalid';
v_label := SUBSTR (TRIM (v_label), 1, 60);
v_errormsg := 'Module invalid';
v_module := UPPER (SUBSTR (TRIM (v_module), 1, 3));
--Opportunity: sanitize the module, currently valid are
-- ASP, BES, BEZ, CNT,FAC, FIN, INS, MLD, MSG, PRJ, PRS, RES
v_errormsg := 'Language invalid';
v_lang := SUBSTR (TRIM (v_lang), 1, 3);
IF (v_lang IS NULL)
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'Record ignored');
v_ongeldig := 1;
END IF;
--
v_errormsg := 'Translation invalid';
-- Assume that spaces are relevant so do not trim here
v_tekst := SUBSTR (v_tekst, 1, 2000);
--
-- Insert geformatteerde import record
IF (v_ongeldig = 0)
THEN
BEGIN
v_errormsg := 'Error inserting record';
INSERT INTO fac_imp_translation (locale_label, locale_module, locale_lang, locale_tekst)
VALUES (v_label, v_module, v_lang, v_tekst);
COMMIT;
v_count_imp := v_count_imp + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := v_errormsg || oracle_err_num || '/' || oracle_err_mes;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || v_errormsg,
'');
COMMIT;
END;
END IF;
END IF;
END;
END LOOP;
IF (header_is_valid = 0)
THEN
fac.imp_writelog (p_import_key,
'E',
'Invalid FACILITOR translation file',
'No valid header [LABEL|MODULE|LANGUAGE|TRANSLATION] found!');
ELSE
fac.imp_writelog (p_import_key,
'S',
'Translation/#valid lines: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (p_import_key,
'S',
'Translation/#invalid lines: ' || TO_CHAR (v_count_tot - v_count_imp),
'');
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := v_errormsg || oracle_err_num || '/' || oracle_err_mes;
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Import of translation aborted!');
END;
/
CREATE OR REPLACE PROCEDURE fac_update_translation (p_import_key IN NUMBER)
AS
CURSOR c1
IS
SELECT * FROM fac_imp_translation;
v_errormsg VARCHAR2 (1000) := '-';
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (4000);
v_geldig NUMBER (1);
v_count_new NUMBER;
v_count_upd NUMBER;
v_count_tot NUMBER;
v_count_skipped NUMBER;
v_existingkey fac_locale_xsl.fac_locale_xsl_key%TYPE;
BEGIN
v_count_tot := 0;
v_count_new := 0;
v_count_upd := 0;
v_count_skipped := 0;
v_aanduiding := '';
FOR rec IN c1 LOOP
BEGIN
v_geldig := 1;
v_aanduiding :=
'[' || rec.locale_label || '|' || rec.locale_module || '|' || rec.locale_lang || '|' || rec.locale_tekst || '] ';
v_existingkey := 0;
-- Valid label? Prevent injection of non-standard labels
BEGIN
SELECT 1
INTO v_geldig
FROM fac_locale_xsl
WHERE fac_locale_xsl_module = rec.locale_module
AND fac_locale_xsl_label = rec.locale_label;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_geldig := 0;
v_count_skipped := v_count_skipped + 1;
WHEN TOO_MANY_ROWS
THEN
v_geldig := 1; -- ongewijzigd
END;
IF v_geldig = 1
THEN
v_count_tot := v_count_tot + 1;
--existing translation ?
SELECT MAX (fac_locale_xsl_key)
INTO v_existingkey
FROM fac_locale_xsl
WHERE fac_locale_xsl_module = rec.locale_module
AND fac_locale_xsl_label = rec.locale_label
AND fac_locale_xsl_lang = rec.locale_lang;
IF v_existingkey IS NULL
THEN
INSERT INTO fac_locale_xsl (fac_locale_xsl_module,
fac_locale_xsl_label,
fac_locale_xsl_lang,
fac_locale_xsl_tekst)
VALUES (rec.locale_module,
rec.locale_label,
rec.locale_lang,
rec.locale_tekst);
v_count_new := v_count_new + 1;
ELSE
UPDATE fac_locale_xsl
SET fac_locale_xsl_tekst = rec.locale_tekst,
fac_locale_xsl_isvalid = 1
WHERE fac_locale_xsl_key = v_existingkey;
v_count_upd := v_count_upd + 1;
END IF;
END IF;
END;
END LOOP;
-- Fallback maar weer bijwerken.
lcl.fallback_languages;
fac.imp_writelog (p_import_key,
'S',
'#imported: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (p_import_key,
'S',
'#added: ' || TO_CHAR (v_count_new),
'');
fac.imp_writelog (p_import_key,
'S',
'#updated: ' || TO_CHAR (v_count_upd),
'');
fac.imp_writelog (p_import_key,
'S',
'#ignored: ' || TO_CHAR (v_count_skipped),
'');
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := v_errormsg || oracle_err_num || '/' || oracle_err_mes;
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
'Import of translation aborted!');
END;
/
CREATE OR REPLACE PROCEDURE fac_update_vrijedagen(p_import_key IN NUMBER)
IS
CURSOR c1
IS
SELECT fac_imp_csv_col01 datum
, fac_imp_csv_col02 calendarid
FROM fac_imp_csv
WHERE fac_import_key = p_import_key;
v_errormsg VARCHAR2 (1000) := '-';
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count_new NUMBER := 0;
v_datum DATE;
v_calendar_id VARCHAR2 (50);
BEGIN
FOR vrije_dag in c1
LOOP
BEGIN
v_datum := TO_DATE(vrije_dag.datum, 'dd-mm-yyyy');
INSERT INTO mld_vrije_dagen
( mld_vrije_dagen_datum
, mld_vrije_dagen_id
)
VALUES (v_datum, COALESCE(vrije_dag.calendarid, 'Default'));
v_count_new := v_count_new + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := vrije_dag.calendarid ||' - '|| vrije_dag.datum || '/' || oracle_err_mes;
fac.imp_writelog (p_import_key, 'E', v_errormsg, '');
END;
END LOOP;
fac.imp_writelog (p_import_key, 'S', '#added: ' || TO_CHAR(v_count_new), '');
COMMIT;
END fac_update_vrijedagen;
/
CREATE OR REPLACE PROCEDURE fac_import_taak_mjob(p_import_key IN NUMBER)
IS
CURSOR c1
IS
SELECT fac_imp_csv_index
, fac_imp_csv_col01 objectidentificatie
, fac_imp_csv_col02 objectaanteh
, fac_imp_csv_col03 objectaantal
, fac_imp_csv_col04 taakcategorie
, fac_imp_csv_col05 taakomschrijving
, fac_imp_csv_col06 taakopmerking
, fac_imp_csv_col07 taakgroep
, fac_imp_csv_col08 taakprioriteit
, fac_imp_csv_col09 taakbtw
, fac_imp_csv_col10 taakkostenplaatsnr
, fac_imp_csv_col11 taakkostenplaatsomschrijving
, fac_imp_csv_col12 taakobjectpercentage
, fac_imp_csv_col13 taakobjectopmerking
, fac_imp_csv_col14 taakobjecteenheid
, fac_imp_csv_col15 taakobjectperiode
, fac_imp_csv_col16 taakobjectstartjaar
, fac_imp_csv_col17 taakobjecteindjaar
, fac_imp_csv_col18 taakobjectmateriaal
, fac_imp_csv_col19 taakdienst
FROM fac_imp_csv
WHERE fac_imp_csv_index > 1
AND fac_import_key = p_import_key;
v_errormsg VARCHAR2(1000) := '-';
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2(200);
v_header_is_valid NUMBER(1) := 0;
v_ongeldig NUMBER(1) := 0;
v_count_rec NUMBER := 0;
v_count_verwerk NUMBER;
v_count_n_taak NUMBER;
v_count_n_taakobject NUMBER;
v_count_w_taak NUMBER;
v_deel_key ins_deel.ins_deel_key%TYPE; --NUMBER(10);
v_ins_srtdeel_key ins_srtdeel.ins_srtdeel_key%TYPE; --NUMBER(10);
v_ins_srtdeel_code ins_srtdeel.ins_srtdeel_code%TYPE; --VARCHAR2(10)
v_discipline_key ins_tab_discipline.ins_discipline_key%TYPE; --NUMBER(10)
v_ismjob ctr_disc_params.ctr_disc_params_ismjob%TYPE; --NUMBER(1)
v_taakomschrijving ins_srtcontrole.ins_srtcontrole_omschrijving%TYPE; --VARCHAR2(60)
v_srtcontrole_key ins_srtcontrole.ins_srtcontrole_key%TYPE; --NUMBER(10)
v_taakopmerking ins_srtcontrole.ins_srtcontrole_opmerking%TYPE; --VARCHAR2(320)
v_taakgroep ins_srtcontrole.ins_srtcontrole_groep%TYPE; --VARCHAR2(60)
v_taakprioriteit ins_srtcontrole.ins_srtcontrole_level%TYPE; --NUMBER(3)
v_taakbtw_str VARCHAR2(10);
v_btwtabelwaarde_key fin_btwtabelwaarde.fin_btwtabelwaarde_key%TYPE; --NUMBER(10)
v_kostenplaats_key prs_kostenplaats.prs_kostenplaats_key%TYPE; --NUMBER(10)
v_taakobjectaantal ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_aantal%TYPE; --NUMBER(8,2)
v_taakobjectaanteh ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_aanteh%TYPE; --VARCHAR2(30)
v_taakobjectpercentage ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_perc%TYPE; --NUMBER(3)
v_taakobjectopmerking ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_opmerk%TYPE; --VARCHAR2(320)
v_taakobjecteenheid ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_eenheid%TYPE; --NUMBER(3)
v_taakobjectperiode ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_periode%TYPE; --NUMBER(6,2)
v_taakobjectstartjaar_str VARCHAR2(10);
v_taakobjecteindjaar_str VARCHAR2(10);
v_taakobjectstartjaar_d ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_startdat%TYPE; --DATE
v_taakobjecteindjaar_d ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_eind%TYPE; --DATE
v_taakobjectmateriaal ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_materia%TYPE; --NUMBER(9,2)
v_taakdienst prs_dienst.prs_dienst_omschrijving%TYPE; --VARCHAR2(60)
v_ins_srtcontroledl_xcp_key ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_key%TYPE; --NUMBER(10);
v_taakobject_startjaar_d ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_startdat%TYPE; --DATE;
v_taak_geschiedenis NUMBER;
v_header VARCHAR2(500) := 'OBJECTIDENTIFICATIE;OBJECTAANTEH;OBJECTAANTAL;TAAKCATEGORIE;TAAKOMSCHRIJVING;TAAKOPMERKING;TAAKGROEP;'
|| 'TAAKPRIORITEIT;TAAKBTW;TAAKKOSTENPLAATSNR;TAAKKOSTENPLAATSOMSCHRIJVING;TAAKOBJECTPERCENTAGE;'
|| 'TAAKOBJECTOPMERKING;TAAKOBJECTEENHEID;TAAKOBJECTPERIODE;TAAKOBJECTSTARTJAAR;TAAKOBJECTEINDJAAR;'
|| 'TAAKOBJECTKOSTEN;DIENST';
v_header_csv VARCHAR2(500);
BEGIN
v_errormsg := 'Fout inlezen header ';
SELECT REPLACE(UPPER(fac_imp_csv_col01 ||';'|| fac_imp_csv_col02 ||';'|| fac_imp_csv_col03 ||';'|| fac_imp_csv_col04 ||';'|| fac_imp_csv_col05 ||';'||
fac_imp_csv_col06 ||';'|| fac_imp_csv_col07 ||';'|| fac_imp_csv_col08 ||';'|| fac_imp_csv_col09 ||';'|| fac_imp_csv_col10 ||';'||
fac_imp_csv_col11 ||';'|| fac_imp_csv_col12 ||';'|| fac_imp_csv_col13 ||';'|| fac_imp_csv_col14 ||';'|| fac_imp_csv_col15 ||';'||
fac_imp_csv_col16 ||';'|| fac_imp_csv_col17 ||';'|| fac_imp_csv_col18 ||';'|| fac_imp_csv_col19
), ' ', '')
INTO v_header_csv
FROM fac_imp_csv
WHERE fac_imp_csv_index = 1
AND fac_import_key = p_import_key;
-- Eerst opruimen
DELETE FROM fac_imp_taak_mjob;
IF (v_header LIKE v_header_csv || '%')
THEN
v_header_is_valid := 1;
FOR rec IN c1
LOOP
BEGIN
v_count_rec := v_count_rec + 1;
-- CSV-kolom A: Controleer of het object bestaat
-- Controleer of object er meerdere keren in staat (valt terug naar OTHERS, regel 300)
BEGIN
v_errormsg := 'Fout bij opzoeken object: ' || rec.objectidentificatie ||' komt vaker dan 1 keer voor';
SELECT d.ins_deel_key
, d.ins_srtdeel_key
, s.ins_srtdeel_code
INTO v_deel_key
, v_ins_srtdeel_key
, v_ins_srtdeel_code
FROM ins_deel d
, ins_srtdeel s
WHERE d.ins_srtdeel_key = s.ins_srtdeel_key
AND UPPER(d.ins_deel_omschrijving) = UPPER(rec.objectidentificatie)
AND d.ins_deel_verwijder IS NULL;
EXCEPTION
WHEN NO_DATA_FOUND THEN
fac.imp_writelog( p_import_key, 'E', 'Object bestaat niet - Regel wordt niet verwerkt '
, rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie);
v_ongeldig := 1;
END;
-- CSV-kolom B: Controleer de taakobject eenheid op lengte
v_taakobjectaanteh := SUBSTR(TRIM(rec.objectaanteh), 1, 30);
IF LENGTH(TRIM(rec.objectaanteh)) > 30
THEN
fac.imp_writelog( p_import_key, 'W', 'taak aantal eenheid - Aangepast ivm lengte groter dan 30 '
, rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || ' - ' || rec.objectaanteh || ' wordt: ' ||v_taakobjectaanteh);
END IF;
-- CSV-kolom C: Controleer de taakobject aantal
v_errormsg := 'Fout controleren objectaantal ';
v_taakobjectaantal := fac.safe_to_number(REPLACE(rec.objectaantal, ',', '.'));
IF rec.objectaantal IS NOT NULL AND v_taakobjectaantal IS NULL
THEN
fac.imp_writelog( p_import_key, 'E', 'Object aantal niet goed ingevuld - Regel wordt niet verwerkt.. '
, rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || 'ObjectAantal csv: ' || rec.objectaantal);
v_ongeldig := 1;
END IF;
-- CSV-kolom D: Controleer de taakcategorie
BEGIN
v_errormsg := 'Fout bij controleren taakcategorie ' ;
SELECT d.ins_discipline_key
, dp.ctr_disc_params_ismjob
INTO v_discipline_key
, v_ismjob
FROM ins_tab_discipline d
, ctr_disc_params dp
WHERE dp.ctr_ins_discipline_key = d.ins_discipline_key
AND UPPER(d.ins_discipline_omschrijving) = TRIM(UPPER(rec.taakcategorie));
EXCEPTION
WHEN NO_DATA_FOUND THEN
fac.imp_writelog( p_import_key, 'E', 'Inspectie discipline niet gevonden - Regel wordt niet verwerkt '
, rec.fac_imp_csv_index || ' - ' || rec.taakcategorie);
v_ongeldig := 1;
END;
-- CSV-kolom E: Controleer of taak bestaat
v_errormsg := 'Fout controleren nieuwe of bestaande taak ' || rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || ' - ' || rec.taakomschrijving;
v_taakomschrijving := SUBSTR(v_ins_srtdeel_code || ' - ' || TRIM(rec.taakomschrijving), 1, 60);
IF (LENGTH(v_ins_srtdeel_code) + 3 + LENGTH(TRIM(rec.taakomschrijving))) > 60
THEN
fac.imp_writelog( p_import_key, 'W', 'Nieuwe taak - Aangepast ivm lengte groter dan 60 '
, rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || ' - ' || rec.taakomschrijving || ' wordt: ' || v_taakomschrijving);
END IF;
SELECT MAX(ins_srtcontrole_key)
INTO v_srtcontrole_key
FROM ins_srtcontrole
WHERE LOWER(ins_srtcontrole_omschrijving) = LOWER(v_taakomschrijving);
-- v_srtcontrole_key = null als de taak nog niet bestaat.
-- CSV-kolom F: Controleer taak opmerking
v_errormsg := 'Fout controleren taak opmerking ';
v_taakopmerking := SUBSTR(TRIM(rec.taakopmerking), 1, 60);
IF LENGTH(TRIM(rec.taakopmerking)) > 320
THEN
fac.imp_writelog( p_import_key, 'W', 'taak opmerking - Aangepast ivm lengte groter dan 320 '
, rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || ' - ' || rec.taakopmerking || ' wordt: ' || v_taakopmerking);
END IF;
-- CSV-kolom G: Controleer taakgroep
v_errormsg := 'Fout controleren taakgroep ';
v_taakgroep := SUBSTR(TRIM(rec.taakgroep), 1, 60);
IF LENGTH(TRIM(rec.taakgroep)) > 60
THEN
fac.imp_writelog( p_import_key, 'W', 'taakgroep - Aangepast ivm lengte groter dan 60 '
, rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || ' - ' || rec.taakgroep || ' wordt: ' || v_taakgroep);
END IF;
-- CSV-kolom H: Controleer de taakprioriteit - Leeg of numeriek
v_errormsg := 'Fout controleren taakprioriteit ';
IF rec.taakprioriteit IS NOT NULL AND fac.safe_to_number(rec.taakprioriteit) IS NULL
THEN
fac.imp_writelog( p_import_key, 'E', 'Prioriteit taak niet goed ingevuld - Regel wordt niet verwerkt.. '
, rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || 'Kosten csv: ' || rec.taakprioriteit);
v_ongeldig := 1;
ELSE
v_taakprioriteit := rec.taakprioriteit;
END IF;
-- CSV-kolom I: Controleer btwtarief
v_errormsg := 'Fout controleren btw-tarief ';
v_taakbtw_str := LOWER(TRIM(rec.taakbtw));
IF v_taakbtw_str IS NOT NULL AND v_taakbtw_str NOT IN ('hoog','laag','nul')
THEN
fac.imp_writelog( p_import_key, 'E', 'BTW-tarief taak niet goed ingevuld - Regel wordt niet verwerkt.. '
, rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || 'Kosten csv: ' || rec.taakbtw);
v_ongeldig := 1;
ELSE
IF v_taakbtw_str IS NOT NULL
THEN
BEGIN
SELECT w.fin_btwtabelwaarde_key
INTO v_btwtabelwaarde_key
FROM fin_btwtabel t
, fin_btwtabelwaarde w
WHERE t.fin_btwtabel_key = w.fin_btwtabel_key
AND t.fin_btwtabel_default = 1
AND t.fin_btwtabel_verwijder is null
AND w.fin_btwtabelwaarde_verwijder is null
AND LOWER(w.fin_btwtabelwaarde_oms) = v_taakbtw_str;
EXCEPTION
WHEN NO_DATA_FOUND THEN
fac.imp_writelog( p_import_key, 'E', 'BTW-tarief taak niet gevonden - Regel wordt niet verwerkt.. '
, rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || 'Kosten csv: ' || rec.taakbtw);
v_ongeldig := 1;
END;
ELSE
-- geen btw-tarief ingevuld: ok
v_btwtabelwaarde_key := NULL;
END IF;
END IF;
-- CSV-kolom J, K: Controleer kostenplaats
v_errormsg := 'Fout controleren kostenplaats';
IF TRIM(rec.taakkostenplaatsnr) IS NOT NULL OR TRIM(rec.taakkostenplaatsomschrijving) IS NOT NULL
THEN
BEGIN
SELECT MAX(prs_kostenplaats_key)
INTO v_kostenplaats_key
FROM prs_kostenplaats
WHERE prs_kostenplaats_verwijder IS NULL
AND UPPER(prs_kostenplaats_nr) = UPPER(TRIM(rec.taakkostenplaatsnr))
AND UPPER(prs_kostenplaats_omschrijving) = UPPER(TRIM(rec.taakkostenplaatsomschrijving));
EXCEPTION
WHEN NO_DATA_FOUND THEN
fac.imp_writelog( p_import_key, 'E', 'Kostenplaats bestaat niet - Regel wordt niet verwerkt '
, rec.fac_imp_csv_index || ' - ' || rec.taakkostenplaatsnr || '- ' || rec.taakkostenplaatsomschrijving);
v_ongeldig := 1;
END;
END IF;
-- CSV-kolom L: Controleer Percentage
v_errormsg := 'Fout controleren percentage ';
v_taakobjectpercentage := ROUND(fac.safe_to_number(REPLACE(rec.taakobjectpercentage, ',','.')));
IF ((rec.taakobjectpercentage IS NOT NULL AND v_taakobjectpercentage IS NULL) OR (v_taakobjectpercentage IS NOT NULL AND v_taakobjectpercentage NOT BETWEEN 0 AND 100))
THEN
fac.imp_writelog( p_import_key, 'E', 'Percentage taak niet goed ingevuld - Regel wordt niet verwerkt.. '
, rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || 'Kosten csv: ' || rec.taakobjectpercentage);
v_ongeldig := 1;
ELSE
IF v_taakobjectpercentage IS NULL
THEN
v_taakobjectpercentage := 100; -- Default 100 procent.
END IF;
END IF;
-- CSV-kolom M: Controleer lengte opmerking
v_errormsg := 'Fout controleren opmerking ';
v_taakobjectopmerking := SUBSTR(TRIM(rec.taakobjectopmerking), 1, 320);
IF LENGTH(TRIM(rec.taakobjectopmerking)) > 320
THEN
fac.imp_writelog( p_import_key, 'W', 'taakobject opmerking - Aangepast ivm lengte groter dan 320 '
, rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || ' - ' || rec.taakobjectopmerking || ' wordt: ' || v_taakobjectopmerking);
END IF;
-- CSV-kolom N: Controleer de eenheid
v_errormsg := 'Fout controleren taakeenheid ';
IF ((rec.taakobjecteenheid IS NOT NULL AND rec.taakobjecteenheid NOT IN ('1', '2', '3', '4')) OR (rec.taakobjecteenheid IS NULL))
THEN
fac.imp_writelog( p_import_key, 'E', 'Eenheid is niet correct gevuld (1,2,3,4) - Regel wordt niet verwerkt '
, rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || ' - ' || rec.taakobjecteenheid);
v_ongeldig := 1;
ELSE
v_taakobjecteenheid := fac.safe_to_number(rec.taakobjecteenheid);
IF v_ismjob = 1
THEN
v_taakobjecteenheid := 4;
END IF;
END IF;
-- CSV-kolom O: Controleer de periode
v_errormsg := 'Fout controleren taakperiode ';
IF ((rec.taakobjectperiode IS NOT NULL AND fac.safe_to_number(rec.taakobjectperiode) IS NULL) OR (rec.taakobjectperiode IS NULL))
THEN
fac.imp_writelog( p_import_key, 'E', 'Ongeldige taakobjectperiode - Regel wordt niet verwerkt '
, rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || ' - ' || rec.taakobjectperiode);
v_ongeldig := 1;
ELSE
v_taakobjectperiode := fac.safe_to_number(rec.taakobjectperiode);
END IF;
-- CSV-kolom P: Controleer de startdatum; deze is verplicht
v_errormsg := 'Fout bij controle startdatum ';
v_taakobjectstartjaar_str := TRIM(rec.taakobjectstartjaar);
IF LENGTH (v_taakobjectstartjaar_str) = 4
THEN -- In geval jaar-invoer op datum zetten..
v_taakobjectstartjaar_str := '01-01-' || v_taakobjectstartjaar_str;
END IF;
v_taakobjectstartjaar_d := fac.safe_to_date(v_taakobjectstartjaar_str, 'dd-mm-yyyy');
IF v_taakobjectstartjaar_d IS NULL
THEN
fac.imp_writelog( p_import_key, 'E', 'Startdatum leeg of ongeldige invoer - Regel wordt niet verwerkt.. '
, rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || ' - Datum csv: ' || rec.taakobjectstartjaar);
v_ongeldig := 1;
END IF;
-- CSV-kolom Q: Controleer de einddatum
v_errormsg := 'Fout bij controle einddatum ';
v_taakobjecteindjaar_str := TRIM(rec.taakobjecteindjaar);
IF LENGTH (v_taakobjecteindjaar_str) = 4
THEN -- In geval jaar-invoer op datum zetten..
v_taakobjecteindjaar_str := '31-12-' || v_taakobjecteindjaar_str;
END IF;
v_taakobjecteindjaar_d := fac.safe_to_date(v_taakobjecteindjaar_str, 'dd-mm-yyyy');
IF v_taakobjecteindjaar_str IS NOT NULL AND v_taakobjecteindjaar_d IS NULL
THEN
fac.imp_writelog( p_import_key, 'E', 'Einddatum ongeldige invoer - Regel wordt niet verwerkt.. '
, rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || ' - Datum csv: ' || rec.taakobjecteindjaar);
v_ongeldig := 1;
END IF;
-- CSV-kolom R: Controleer de materiaalkosten - leeg of numeriek
v_errormsg := 'Fout controleren materiaalkosten ';
v_taakobjectmateriaal := fac.safe_to_number(REPLACE(rec.taakobjectmateriaal, ',', '.'));
IF rec.taakobjectmateriaal IS NOT NULL AND v_taakobjectmateriaal IS NULL
THEN
fac.imp_writelog( p_import_key, 'E', 'Kosten taakobject niet goed ingevuld - Regel wordt niet verwerkt.. '
, rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || 'Kosten csv: ' || rec.taakobjectmateriaal);
v_ongeldig := 1;
END IF;
-- CSV-kolom S: Controleer dienst
v_errormsg := 'Fout controleren dienst ';
v_taakdienst := SUBSTR(TRIM(rec.taakdienst), 1, 60);
IF LENGTH(TRIM(rec.taakdienst)) > 60
THEN
fac.imp_writelog( p_import_key, 'W', 'dienst - Aangepast ivm lengte groter dan 60 '
, rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || ' - ' || rec.taakdienst || ' wordt: ' || v_taakdienst);
END IF;
--
IF v_ongeldig = 0
THEN
-- Controleren of voor de bestaande taak ook de objecttaak al bestaat...
IF v_deel_key IS NOT NULL AND v_srtcontrole_key IS NOT NULL
THEN
v_errormsg := 'Fout controleren nieuwe of bestaande objecttaak ' || rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || ' - ' || v_taakomschrijving ;
SELECT MAX(t.ins_srtcontroledl_xcp_key)
, MAX(t.ins_srtcontroledl_xcp_startdat)
INTO v_ins_srtcontroledl_xcp_key
, v_taakobject_startjaar_d
FROM ins_srtcontroledl_xcp t
WHERE t.ins_srtcontrole_key = v_srtcontrole_key
AND t.ins_deel_key = v_deel_key;
-- Controleren of er al geschiedenis op de objecttaak zit en de startdatum afwijkt van degene meegegeven in csv
v_errormsg := 'Fout controleren geschiedenis op objecttaak ';
IF v_ins_srtcontroledl_xcp_key IS NOT NULL
THEN
SELECT COUNT(*)
INTO v_taak_geschiedenis
FROM ins_deelsrtcontrole
WHERE ins_deel_key = v_deel_key
AND ins_srtcontrole_key = v_srtcontrole_key;
IF v_taak_geschiedenis > 0 AND v_taakobjectstartjaar_str IS NOT NULL AND v_taakobjectstartjaar_d <> v_taakobject_startjaar_d
THEN
fac.imp_writelog( p_import_key, 'W', 'Op deze objecttaak zit al geschiedenis - afwijkende startdatum zal niet aangepast worden.. '
, rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || ' - ' || v_taakomschrijving || ' - ' || v_taakobjectstartjaar_d || ' vs. ' || v_taakobject_startjaar_d);
END IF;
END IF;
END IF;
v_errormsg := 'Fout opslaan in fac_imp_taak_mjob ' || rec.fac_imp_csv_index || ' - ' || rec.objectidentificatie || ' - ' || v_taakomschrijving ;
INSERT INTO fac_imp_taak_mjob
( ins_deel_key
, ctr_discipline_key
, ismjob
, ins_srtcontrole_omschrijving
, ins_srtcontrole_key
, ins_srtcontrole_opmerking
, ins_srtcontrole_groep
, ins_srtcontrole_prioriteit
, fin_btwtabelwaarde_key
, prs_kostenplaats_key
, ins_srtcontroledl_xcp_aantal
, ins_srtcontroledl_xcp_aanteh
, ins_srtcontroledl_xcp_perc
, ins_srtcontroledl_xcp_opmerk
, ins_srtcontroledl_xcp_eenheid
, ins_srtcontroledl_xcp_periode
, ins_srtcontroledl_xcp_start
, ins_srtcontroledl_xcp_eind
, ins_srtcontroledl_xcp_materia
, prs_dienst_omschrijving
, ins_srtcontroledl_xcp_key
)
VALUES
( v_deel_key
, v_discipline_key
, v_ismjob
, v_taakomschrijving
, v_srtcontrole_key
, v_taakopmerking
, v_taakgroep
, v_taakprioriteit
, v_btwtabelwaarde_key
, v_kostenplaats_key
, v_taakobjectaantal
, v_taakobjectaanteh
, v_taakobjectpercentage
, v_taakobjectopmerking
, v_taakobjecteenheid
, v_taakobjectperiode
, v_taakobjectstartjaar_d
, v_taakobjecteindjaar_d
, v_taakobjectmateriaal
, v_taakdienst
, v_ins_srtcontroledl_xcp_key
);
END IF;
EXCEPTION
WHEN OTHERS THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
fac.imp_writelog(p_import_key, 'E', 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')', v_errormsg);
END;
END LOOP;
END IF;
-- Aantallen tellen voor logging
v_errormsg := 'Fout bij tellen aantallen voor logging ' ;
v_count_verwerk := 0 ; -- aantal te verwerken regels
v_count_n_taak := 0 ; -- aantal nieuw aan te maken basistaken
v_count_n_taakobject := 0 ; -- aantal nieuw aan te maken objecttaken
v_count_w_taak := 0 ; -- aantal bestaande (object)taken te wijzigen
SELECT count(*) INTO v_count_verwerk FROM fac_imp_taak_mjob ;
SELECT count(*) INTO v_count_n_taak FROM (SELECT DISTINCT(ins_srtcontrole_omschrijving) FROM fac_imp_taak_mjob WHERE ins_srtcontrole_key IS NULL);
SELECT count(*) INTO v_count_n_taakobject FROM fac_imp_taak_mjob WHERE ins_srtcontroledl_xcp_key IS NULL ;
SELECT count(*) INTO v_count_w_taak FROM fac_imp_taak_mjob WHERE ins_srtcontrole_key IS NOT NULL AND ins_srtcontroledl_xcp_key IS NOT NULL ;
IF v_header_is_valid = 0
THEN
fac.imp_writelog(p_import_key, 'E', 'Ongeldig importbestand', 'Toelichting: Verkeerde header. Niet conform specs. ');
ELSE
fac.imp_writelog(p_import_key, 'S', 'IMPORT TAKEN: import' || CHR(13) || CHR(10)
|| 'Aantal te verwerken regels: ' || TO_CHAR (v_count_verwerk) || ' (van de ' || TO_CHAR (v_count_rec) || ' records in csv)' || CHR(13) || CHR(10)
|| 'Aantal nieuwe taken: ' || TO_CHAR (v_count_n_taak) || CHR(13) || CHR(10)
|| 'Aantal nieuwe objecttaken: ' || TO_CHAR (v_count_n_taakobject) || CHR(13) || CHR(10)
|| 'Aantal bestaande, te wijzigen (object)taken: ' || TO_CHAR (v_count_w_taak)
, '');
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
fac.imp_writelog (p_import_key, 'E', 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')', v_errormsg);
END fac_import_taak_mjob;
/
CREATE OR REPLACE PROCEDURE fac_update_taak_mjob (p_import_key IN NUMBER)
AS
CURSOR c_n -- nieuwe taken en objecttaken aanmaken..
IS
SELECT i.*
FROM fac_imp_taak_mjob i
WHERE (i.ins_srtcontrole_key IS NULL OR i.ins_srtcontrole_key = -1);
CURSOR c_no -- nieuwe objecttaken aanmaken..
IS
SELECT i.*
FROM fac_imp_taak_mjob i
WHERE (i.ins_srtcontrole_key IS NOT NULL OR i.ins_srtcontrole_key > -1)
AND i.ins_srtcontroledl_xcp_key IS NULL;
CURSOR c_m -- bestaande taak en/of objecttaak wijzigen
IS
SELECT i.*
FROM fac_imp_taak_mjob i
WHERE (i.ins_srtcontrole_key IS NOT NULL OR i.ins_srtcontrole_key > -1)
AND i.ins_srtcontroledl_xcp_key IS NOT NULL;
v_errormsg VARCHAR2(1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2(200);
v_ongeldig NUMBER(1) := 0;
v_count_rec NUMBER := 0;
v_count_taak NUMBER := 0 ;
v_count_taakobject NUMBER := 0 ;
v_count_verwerk NUMBER := 0; -- aantal verwerkte records
v_count_n_taak NUMBER := 0; -- aantal nieuw aangemaakte basistaken
v_count_n_taakobject NUMBER := 0; -- aantal nieuw aangemaakte objecttaken
v_count_w_taak NUMBER := 0; -- aantal bestaande basistaken gewijzigd
v_count_w_taakobject NUMBER := 0; -- aantal bestaande object-taken gewijzigd
v_aanduiding VARCHAR2 (1000);
v_aanduiding_objecttaak VARCHAR2 (1000);
-- Velden
v_objectidentificatie ins_deel.ins_deel_omschrijving%TYPE;
v_srtdeel_key ins_deel.ins_srtdeel_key%TYPE;
v_ctr_discipline_omschrijving ins_tab_discipline.ins_discipline_omschrijving%TYPE;
v_dienst_key prs_dienst.prs_dienst_key%TYPE;
v_taakdienst_key prs_dienst.prs_dienst_key%TYPE;
v_taakdienst_oms prs_dienst.prs_dienst_omschrijving%TYPE;
v_ins_srtcontrole_key ins_srtcontrole.ins_srtcontrole_key%TYPE;
v_taakopmerking ins_srtcontrole.ins_srtcontrole_opmerking%TYPE;
v_taakgroep ins_srtcontrole.ins_srtcontrole_groep%TYPE;
v_taakprioriteit ins_srtcontrole.ins_srtcontrole_level%TYPE;
v_percentage ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_perc%TYPE;
v_objecttaakopmerking ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_opmerk%TYPE;
v_eenheid ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_eenheid%TYPE;
v_periode ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_periode%TYPE;
v_eindjaar ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_eind%TYPE;
v_materiaalkosten ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_materia%TYPE;
v_aantal ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_aantal%TYPE;
v_aantaleh ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_aanteh%TYPE;
FUNCTION maakAanduiding_taak(p_deel_key IN NUMBER, p_disc_key IN NUMBER, p_oms IN VARCHAR2, o_srtdeel_key OUT NUMBER) RETURN VARCHAR2
IS
v_deel_oms ins_deel.ins_deel_omschrijving%TYPE;
v_disc_oms ins_tab_discipline.ins_discipline_omschrijving%TYPE;
v_omschrijving VARCHAR2(1000);
BEGIN
SELECT ins_deel_omschrijving
, ins_srtdeel_key
INTO v_deel_oms
, o_srtdeel_key
FROM ins_deel
WHERE ins_deel_key = p_deel_key;
SELECT ins_discipline_omschrijving
INTO v_disc_oms
FROM ctr_discipline
WHERE ins_discipline_key = p_disc_key;
v_omschrijving := v_deel_oms || ' / ' || v_disc_oms || ' - ' || p_oms;
RETURN v_omschrijving;
END;
FUNCTION maakAanduiding_taakobject(p_deel_key IN NUMBER, p_disc_key IN NUMBER, p_srtcontrole_oms IN VARCHAR2) RETURN VARCHAR2
IS
v_srtdeel_code ins_srtdeel.ins_srtdeel_code%TYPE;
v_disc_oms ins_tab_discipline.ins_discipline_omschrijving%TYPE;
v_omschrijving VARCHAR2(1000);
BEGIN
SELECT s.ins_srtdeel_code
INTO v_srtdeel_code
FROM ins_deel d
, ins_srtdeel s
WHERE d.ins_srtdeel_key = s.ins_srtdeel_key
AND d.ins_deel_key = p_deel_key;
SELECT ins_discipline_omschrijving
INTO v_disc_oms
FROM ctr_discipline
WHERE ins_discipline_key = p_disc_key;
v_omschrijving := v_disc_oms || ' - ' || v_srtdeel_code || p_srtcontrole_oms || CHR(13) || CHR(10);
RETURN v_omschrijving;
END;
PROCEDURE zetDeelStartdatum(p_deel_key IN NUMBER, p_startjaar IN DATE)
AS
BEGIN
-- Aangezien de taken altijd een startdatum hebben, en objecten niet altijd een aanmaakdatum, gaan we die hier gelijk trekken.
-- Daarna maken we de taak startdatum leeg, zodat de cyclus gaat lopen vanaf de bijgewerkte ins_deel_aanmaak.
-- Zo blijft het mogelijk om taken in de MJOB console te verslepen naar jaartallen eerder dan het aangegeven startjaar.
IF p_startjaar < SYSDATE
THEN
UPDATE ins_deel
SET ins_deel_aanmaak = p_startjaar
WHERE ins_deel_key = p_deel_key;
END IF;
END;
FUNCTION trackTaak(p_srtcontrole_key IN NUMBER, p_label IN VARCHAR2, p_old IN VARCHAR2, p_new IN VARCHAR2) RETURN NUMBER
IS
BEGIN
fac.trackaction('CTRSUP', p_srtcontrole_key, 4, NULL, p_label || ': ' || p_old || '-->' || p_new);
RETURN 1;
END;
FUNCTION trackTaakobject(p_deel_key IN NUMBER, p_aanduiding IN VARCHAR2, p_label IN VARCHAR2, p_old IN VARCHAR2, p_new IN VARCHAR2) RETURN NUMBER
IS
BEGIN
fac.trackaction('INSUPD', p_deel_key, sys_context('USERENV', 'CLIENT_IDENTIFIER'), NULL, p_aanduiding || ' ' || p_label || ': ' || p_old || '-->' || p_new);
RETURN 1;
END;
BEGIN
BEGIN
FOR rec IN c_n
LOOP
BEGIN
v_count_verwerk := v_count_verwerk + 1;
v_aanduiding := maakAanduiding_taak(rec.ins_deel_key, rec.ctr_discipline_key, rec.ins_srtcontrole_omschrijving, v_srtdeel_key);
-- Eenzelfde basistaak kan meerdere keren in CSV zitten.
-- Daarom gaan we in deze cursor eerst kijken of de basistaak er in deze LOOP al ingezet is.
-- Zo ja, dan kunnen we door naar de Objecttaak. Zo niet, dan gaan we eerst de basis
v_errormsg := 'Opzoeken basistaak ' || v_aanduiding;
SELECT MAX(ins_srtcontrole_key)
INTO v_ins_srtcontrole_key
FROM ins_srtcontrole
WHERE ins_srtcontrole_omschrijving = rec.ins_srtcontrole_omschrijving;
-- Basistaak aanmaken: geen ins_srtcontrole_key gevonden.
IF v_ins_srtcontrole_key IS NULL
THEN
-- We gaan we eerst op zoek naar de dienst.
v_errormsg := 'Aanmaken/opzoeken dienst ' || v_aanduiding;
v_dienst_key := NULL;
IF rec.prs_dienst_omschrijving IS NOT NULL
THEN
BEGIN
SELECT prs_dienst_key
INTO v_dienst_key
FROM prs_dienst
WHERE UPPER(prs_dienst_omschrijving) = UPPER(rec.prs_dienst_omschrijving);
EXCEPTION
WHEN NO_DATA_FOUND THEN
INSERT INTO prs_dienst
(prs_dienst_omschrijving)
VALUES (rec.prs_dienst_omschrijving)
RETURNING prs_dienst_key
INTO v_dienst_key;
END;
END IF;
v_errormsg := 'Aanmaken taak: ' || v_aanduiding;
INSERT INTO ins_srtcontrole
( ins_srtinstallatie_key
, ins_srtcontrole_niveau
, ins_srtcontrole_omschrijving
, ctr_discipline_key
, ins_srtcontrole_info
, ins_srtcontrole_periode
, ins_srtcontrole_eenheid
, ins_srtcontrole_mode
, ins_srtcontrole_level
, ins_srtcontrole_opmerking
, prs_dienst_key
)
VALUES
( v_srtdeel_key
, 'S'
, rec.ins_srtcontrole_omschrijving
, rec.ctr_discipline_key
, NULL
, 0
, rec.ins_srtcontroledl_xcp_eenheid
, 1
, COALESCE(rec.ins_srtcontrole_prioriteit, 0)
, rec.ins_srtcontrole_opmerking
, v_dienst_key
)
RETURNING ins_srtcontrole_key
INTO v_ins_srtcontrole_key;
fac.trackaction('CTRSUP', v_ins_srtcontrole_key, 4, NULL, 'Periodieke taak toegevoegd - Via taakimport ');
v_count_n_taak := v_count_n_taak + 1;
END IF;
-- Nu kunnen we de objectaak aanmaken
v_errormsg := 'Aanmaken taak object: ' || v_aanduiding || ' ['
|| rec.ins_deel_key || '|'
|| v_ins_srtcontrole_key || '|'
|| rec.ins_srtcontroledl_xcp_periode || '|'
|| rec.ins_srtcontroledl_xcp_eenheid || '|'
|| rec.ins_srtcontroledl_xcp_materia || '|'
|| rec.ins_srtcontroledl_xcp_perc || '|'
|| rec.ins_srtcontrole_groep || '|'
|| rec.ins_srtcontroledl_xcp_opmerk || '|'
|| rec.ins_srtcontroledl_xcp_aantal || '|'
|| rec.ins_srtcontroledl_xcp_aanteh || ']';
INSERT INTO ins_srtcontroledl_xcp
( ins_deel_key
, ins_srtcontrole_key
, ins_srtcontroledl_xcp_periode
, ins_srtcontroledl_xcp_eenheid
, ins_srtcontroledl_xcp_materia
, ins_srtcontroledl_xcp_perc
, ins_srtcontroledl_xcp_groep
, ins_srtcontroledl_xcp_opmerk
, ins_srtcontroledl_xcp_aantal
, ins_srtcontroledl_xcp_aanteh
)
VALUES
( rec.ins_deel_key
, v_ins_srtcontrole_key
, rec.ins_srtcontroledl_xcp_periode
, rec.ins_srtcontroledl_xcp_eenheid
, rec.ins_srtcontroledl_xcp_materia
, rec.ins_srtcontroledl_xcp_perc
, rec.ins_srtcontrole_groep
, rec.ins_srtcontroledl_xcp_opmerk
, rec.ins_srtcontroledl_xcp_aantal
, rec.ins_srtcontroledl_xcp_aanteh
);
zetDeelStartdatum(rec.ins_deel_key, rec.ins_srtcontroledl_xcp_start);
v_count_n_taakobject := v_count_n_taakobject + 1;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
fac.imp_writelog (p_import_key, 'E', v_errormsg || 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')', v_aanduiding);
END;
v_aanduiding := 'Einde loop ' || v_aanduiding;
END LOOP;
FOR rec IN c_no
LOOP
BEGIN
v_count_verwerk := v_count_verwerk + 1;
v_aanduiding := maakAanduiding_taak(rec.ins_deel_key, rec.ctr_discipline_key, rec.ins_srtcontrole_omschrijving, v_srtdeel_key);
-- We kunnen direct objectaak aanmaken
v_errormsg := 'Aanmaken taak object bij taak: ' || v_aanduiding || ' ['
|| rec.ins_deel_key || '|'
|| rec.ins_srtcontrole_key || '|'
|| rec.ins_srtcontroledl_xcp_periode || '|'
|| rec.ins_srtcontroledl_xcp_eenheid || '|'
|| rec.ins_srtcontroledl_xcp_materia || '|'
|| rec.ins_srtcontroledl_xcp_perc || '|'
|| rec.ins_srtcontrole_groep || '|'
|| rec.ins_srtcontroledl_xcp_opmerk || '|'
|| rec.ins_srtcontroledl_xcp_aantal || '|'
|| rec.ins_srtcontroledl_xcp_aanteh || ']';
INSERT INTO ins_srtcontroledl_xcp
( ins_deel_key
, ins_srtcontrole_key
, ins_srtcontroledl_xcp_periode
, ins_srtcontroledl_xcp_eenheid
, ins_srtcontroledl_xcp_materia
, ins_srtcontroledl_xcp_perc
, ins_srtcontroledl_xcp_groep
, ins_srtcontroledl_xcp_opmerk
, ins_srtcontroledl_xcp_aantal
, ins_srtcontroledl_xcp_aanteh
)
VALUES
( rec.ins_deel_key
, rec.ins_srtcontrole_key
, rec.ins_srtcontroledl_xcp_periode
, rec.ins_srtcontroledl_xcp_eenheid
, rec.ins_srtcontroledl_xcp_materia
, rec.ins_srtcontroledl_xcp_perc
, rec.ins_srtcontrole_groep
, rec.ins_srtcontroledl_xcp_opmerk
, rec.ins_srtcontroledl_xcp_aantal
, rec.ins_srtcontroledl_xcp_aanteh
);
zetDeelStartdatum(rec.ins_deel_key, rec.ins_srtcontroledl_xcp_start);
v_count_n_taakobject := v_count_n_taakobject + 1;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
fac.imp_writelog (p_import_key, 'E', v_errormsg || 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')', v_aanduiding);
END;
v_aanduiding := 'Einde loop ' || v_aanduiding;
END LOOP;
FOR rec IN c_m
LOOP
BEGIN
v_count_verwerk := v_count_verwerk + 1 ;
v_aanduiding := maakAanduiding_taak(rec.ins_deel_key, rec.ctr_discipline_key, rec.ins_srtcontrole_omschrijving, v_srtdeel_key);
SELECT COALESCE(t.ins_srtcontrole_opmerking, '<leeg>')
, t.ins_srtcontrole_level
, COALESCE(MAX(t.prs_dienst_key), -1)
, COALESCE(MAX(d.prs_dienst_omschrijving), '<leeg>')
INTO v_taakopmerking
, v_taakprioriteit
, v_taakdienst_key
, v_taakdienst_oms
FROM ins_srtcontrole t
, prs_dienst d
WHERE t.prs_dienst_key = d.prs_dienst_key(+)
AND t.ins_srtcontrole_key = rec.ins_srtcontrole_key
GROUP BY t.ins_srtcontrole_opmerking
, t.ins_srtcontrole_level;
-- Basis-taak - Taakopmerking
v_errormsg := 'Fout taakopmerking wijzigen ';
IF rec.ins_srtcontrole_opmerking IS NOT NULL AND v_taakopmerking <> rec.ins_srtcontrole_opmerking
THEN
UPDATE ins_srtcontrole
SET ins_srtcontrole_opmerking = rec.ins_srtcontrole_opmerking
WHERE ins_srtcontrole_key = rec.ins_srtcontrole_key;
v_count_taak := trackTaak(rec.ins_srtcontrole_key, 'Gewijzigd Taakopmerking', v_taakopmerking, rec.ins_srtcontrole_opmerking);
END IF;
-- Basis-taak - Taakprioriteit
v_errormsg := 'Fout prioriteit wijzigen ';
IF rec.ins_srtcontrole_prioriteit IS NOT NULL AND v_taakprioriteit <> rec.ins_srtcontrole_prioriteit
THEN
UPDATE ins_srtcontrole
SET ins_srtcontrole_level = rec.ins_srtcontrole_prioriteit
WHERE ins_srtcontrole_key = rec.ins_srtcontrole_key;
v_count_taak := trackTaak(rec.ins_srtcontrole_key, 'Gewijzigd Prioriteit', v_taakprioriteit, rec.ins_srtcontrole_prioriteit);
END IF;
-- Basis-taak - Dienst
v_errormsg := 'Fout dienst wijzigen ' || v_aanduiding;
-- Dan gaan we kijken of de dienst meegegeven in csv al bestaat
IF rec.prs_dienst_omschrijving IS NOT NULL
THEN
BEGIN
SELECT prs_dienst_key
INTO v_dienst_key
FROM prs_dienst
WHERE UPPER(prs_dienst_omschrijving) = UPPER(rec.prs_dienst_omschrijving);
EXCEPTION
WHEN NO_DATA_FOUND THEN
INSERT INTO prs_dienst
(prs_dienst_omschrijving)
VALUES (rec.prs_dienst_omschrijving)
RETURNING prs_dienst_key
INTO v_dienst_key;
END;
IF v_taakdienst_key <> v_dienst_key
THEN
UPDATE ins_srtcontrole
SET prs_dienst_key = v_dienst_key
WHERE ins_srtcontrole_key = rec.ins_srtcontrole_key;
v_count_taak := trackTaak(rec.ins_srtcontrole_key, 'Gewijzigd taakdienst', v_taakdienst_oms, rec.prs_dienst_omschrijving);
END IF;
END IF;
IF v_count_taak = 1
THEN
v_count_w_taak := v_count_w_taak + 1;
END IF;
-- Gaan nu de object-taken aanpassen
v_aanduiding_objecttaak := maakAanduiding_taakobject(rec.ins_deel_key, rec.ctr_discipline_key, rec.ins_srtcontrole_omschrijving);
SELECT COALESCE(ins_srtcontroledl_xcp_perc, 0)
, COALESCE(ins_srtcontroledl_xcp_opmerk, '<leeg>')
, COALESCE(ins_srtcontroledl_xcp_eenheid, 0)
, COALESCE(ins_srtcontroledl_xcp_periode, 0)
, COALESCE(ins_srtcontroledl_xcp_groep, '<leeg>')
, ins_srtcontroledl_xcp_eind
, COALESCE(max(ins_srtcontroledl_xcp_materia), 0)
INTO v_percentage
, v_objecttaakopmerking
, v_eenheid
, v_periode
, v_taakgroep
, v_eindjaar
, v_materiaalkosten
FROM ins_srtcontroledl_xcp
WHERE ins_srtcontroledl_xcp_key = rec.ins_srtcontroledl_xcp_key
GROUP BY ins_srtcontroledl_xcp_perc
, ins_srtcontroledl_xcp_opmerk
, ins_srtcontroledl_xcp_eenheid
, ins_srtcontroledl_xcp_periode
, ins_srtcontroledl_xcp_groep
, ins_srtcontroledl_xcp_eind;
-- Object-taak - Percentage
v_errormsg := 'Fout percentage wijzigen ';
IF rec.ins_srtcontroledl_xcp_perc IS NOT NULL AND rec.ins_srtcontroledl_xcp_perc <> v_percentage
THEN
UPDATE ins_srtcontroledl_xcp
SET ins_srtcontroledl_xcp_perc = rec.ins_srtcontroledl_xcp_perc
WHERE ins_srtcontroledl_xcp_key = rec.ins_srtcontroledl_xcp_key;
v_count_taakobject := trackTaakobject(rec.ins_deel_key, v_aanduiding_objecttaak, 'Percentage', v_percentage, rec.ins_srtcontroledl_xcp_perc);
END IF;
-- Object-taak - Opmerking
v_errormsg := 'Fout opmerking objecttaak wijzigen ';
IF rec.ins_srtcontroledl_xcp_opmerk IS NOT NULL AND rec.ins_srtcontroledl_xcp_opmerk <> v_objecttaakopmerking
THEN
UPDATE ins_srtcontroledl_xcp
SET ins_srtcontroledl_xcp_opmerk = rec.ins_srtcontroledl_xcp_opmerk
WHERE ins_srtcontroledl_xcp_key = rec.ins_srtcontroledl_xcp_key;
v_count_taakobject := trackTaakobject(rec.ins_deel_key, v_aanduiding_objecttaak, 'Taakopmerking', v_objecttaakopmerking, rec.ins_srtcontroledl_xcp_opmerk);
END IF;
-- Object-taak - Eenheid
v_errormsg := 'Fout eenheid wijzigen ';
IF rec.ins_srtcontroledl_xcp_eenheid IS NOT NULL AND rec.ins_srtcontroledl_xcp_eenheid <> v_eenheid AND rec.ismjob = 0
THEN
UPDATE ins_srtcontroledl_xcp
SET ins_srtcontroledl_xcp_eenheid = rec.ins_srtcontroledl_xcp_eenheid
WHERE ins_srtcontroledl_xcp_key = rec.ins_srtcontroledl_xcp_key;
v_count_taakobject := trackTaakobject(rec.ins_deel_key, v_aanduiding_objecttaak, 'Eenheid', v_eenheid, rec.ins_srtcontroledl_xcp_eenheid);
END IF;
-- Object-taak - Periode
v_errormsg := 'Fout periode wijzigen ';
IF rec.ins_srtcontroledl_xcp_periode IS NOT NULL AND rec.ins_srtcontroledl_xcp_periode <> v_periode
THEN
UPDATE ins_srtcontroledl_xcp
SET ins_srtcontroledl_xcp_periode = rec.ins_srtcontroledl_xcp_periode
WHERE ins_srtcontroledl_xcp_key = rec.ins_srtcontroledl_xcp_key;
v_count_taakobject := trackTaakobject(rec.ins_deel_key, v_aanduiding_objecttaak, 'Periode', v_periode, rec.ins_srtcontroledl_xcp_periode);
END IF;
-- Object-taak - Taakgroep
v_errormsg := 'Fout taakgroep wijzigen ';
IF rec.ins_srtcontrole_groep IS NOT NULL AND rec.ins_srtcontrole_groep <> v_taakgroep
THEN
UPDATE ins_srtcontroledl_xcp
SET ins_srtcontroledl_xcp_groep = rec.ins_srtcontrole_groep
WHERE ins_srtcontroledl_xcp_key = rec.ins_srtcontroledl_xcp_key;
v_count_taakobject := trackTaakobject(rec.ins_deel_key, v_aanduiding_objecttaak, 'Taakgroep', v_taakgroep, rec.ins_srtcontrole_groep);
END IF;
-- Object-taak - Eindjaar
v_errormsg := 'Fout eindjaar wijzigen ';
IF ( (rec.ins_srtcontroledl_xcp_eind IS NOT NULL AND v_eindjaar <> rec.ins_srtcontroledl_xcp_eind AND v_eindjaar IS NOT NULL)
OR (rec.ins_srtcontroledl_xcp_eind IS NOT NULL AND v_eindjaar IS NULL)
)
THEN
UPDATE ins_srtcontroledl_xcp
SET ins_srtcontroledl_xcp_eind = rec.ins_srtcontroledl_xcp_eind
WHERE ins_srtcontroledl_xcp_key = rec.ins_srtcontroledl_xcp_key;
v_count_taakobject := trackTaakobject(rec.ins_deel_key, v_aanduiding_objecttaak, 'Eindjaar', v_eindjaar, rec.ins_srtcontroledl_xcp_eind);
END IF;
-- Object-taak - Kosten
v_errormsg := 'Fout kosten wijzigen ';
IF rec.ins_srtcontroledl_xcp_materia IS NOT NULL AND rec.ins_srtcontroledl_xcp_materia <> v_materiaalkosten
THEN
UPDATE ins_srtcontroledl_xcp
SET ins_srtcontroledl_xcp_materia = rec.ins_srtcontroledl_xcp_materia
WHERE ins_srtcontroledl_xcp_key = rec.ins_srtcontroledl_xcp_key;
v_count_taakobject := trackTaakobject(rec.ins_deel_key, v_aanduiding_objecttaak, 'Kosten', v_materiaalkosten, rec.ins_srtcontroledl_xcp_materia);
END IF;
-- Object-taak - aantal
v_errormsg := 'Fout aantal wijzigen ';
IF ( (rec.ins_srtcontroledl_xcp_aantal IS NOT NULL AND v_aantal IS NOT NULL AND rec.ins_srtcontroledl_xcp_aantal <> v_aantal)
OR (rec.ins_srtcontroledl_xcp_aantal IS NOT NULL AND v_aantal IS NULL)
)
THEN
UPDATE ins_srtcontroledl_xcp
SET ins_srtcontroledl_xcp_aantal = rec.ins_srtcontroledl_xcp_aantal
WHERE ins_srtcontroledl_xcp_key = rec.ins_srtcontroledl_xcp_key;
v_count_taakobject := trackTaakobject(rec.ins_deel_key, v_aanduiding_objecttaak, 'Aantal', v_aantal, rec.ins_srtcontroledl_xcp_aantal);
END IF;
-- Object-taal - aantaleh
v_errormsg := 'fout aanteh wijzigen ';
IF ( (rec.ins_srtcontroledl_xcp_aanteh IS NOT NULL AND v_aantaleh IS NOT NULL AND rec.ins_srtcontroledl_xcp_aanteh <> v_aantaleh)
OR (rec.ins_srtcontroledl_xcp_aanteh IS NOT NULL AND v_aantaleh IS NULL)
)
THEN
UPDATE ins_srtcontroledl_xcp
SET ins_srtcontroledl_xcp_aanteh = rec.ins_srtcontroledl_xcp_aanteh
WHERE ins_srtcontroledl_xcp_key = rec.ins_srtcontroledl_xcp_key;
v_count_taakobject := trackTaakobject(rec.ins_deel_key, v_aanduiding_objecttaak, 'Aanteh', v_aantaleh, rec.ins_srtcontroledl_xcp_aanteh);
END IF;
IF v_count_taakobject = 1
THEN
v_count_w_taakobject := v_count_w_taakobject + 1;
END IF;
zetDeelStartdatum(rec.ins_deel_key, rec.ins_srtcontroledl_xcp_start);
COMMIT;
EXCEPTION
WHEN OTHERS THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
fac.imp_writelog (p_import_key, 'E', v_errormsg || 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')', v_aanduiding);
END;
v_aanduiding := 'Einde loop ' || v_aanduiding;
END LOOP;
-- Update zonder fouten. Log verwerkingsoverzicht.
fac.imp_writelog(p_import_key, 'S', 'IMPORT TAKEN: update' || CHR(13) || CHR(10)
|| 'Aantal verwerkte regels: ' || TO_CHAR (v_count_verwerk) || CHR(13) || CHR(10)
|| 'Aantal nieuwe taken ingelezen: ' || TO_CHAR (v_count_n_taak) || CHR(13) || CHR(10)
|| 'Aantal nieuwe objecttaken ingelezen: ' || TO_CHAR (v_count_n_taakobject) || CHR(13) || CHR(10)
|| 'Aantal bestaande basistaken gewijzigd: ' || TO_CHAR (v_count_w_taak) || CHR(13) || CHR(10)
|| 'Aantal bestaande objecttaken gewijzigd: ' || TO_CHAR (v_count_w_taakobject)
, '');
EXCEPTION
WHEN OTHERS THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
fac.imp_writelog (p_import_key, 'E', v_errormsg || 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')', v_aanduiding_objecttaak);
END;
END fac_update_taak_mjob;
/
CREATE OR REPLACE PROCEDURE fac_import_exchange (p_import_key IN NUMBER, p_days_from IN NUMBER DEFAULT 0, p_days_to IN NUMBER DEFAULT 90)
IS
BEGIN
exc.import_exchange (p_import_key, p_days_from, p_days_to);
END fac_import_exchange;
/
CREATE OR REPLACE PROCEDURE fac_update_exchange (p_import_key IN NUMBER, p_days_from IN NUMBER DEFAULT 0, p_days_to IN NUMBER DEFAULT 90)
IS
BEGIN
exc.update_exchange (p_import_key, p_days_from, p_days_to);
END fac_update_exchange;
/
CREATE OR REPLACE PROCEDURE fac_import_exchfull (p_import_key IN NUMBER, p_days_from IN NUMBER DEFAULT 0, p_days_to IN NUMBER DEFAULT 90)
IS
BEGIN
exc.import_exchfull (p_import_key, p_days_from, p_days_to);
END fac_import_exchfull;
/
CREATE OR REPLACE PROCEDURE fac_update_exchfull (p_import_key IN NUMBER, p_days_from IN NUMBER DEFAULT 0, p_days_to IN NUMBER DEFAULT 90)
IS
BEGIN
exc.update_exchfull (p_import_key, p_days_from, p_days_to);
END fac_update_exchfull;
/
REGISTERRUN('$Id$')